Euflorium: The Eufloria Community
Eufloria => Eufloria Classic => Eufloria Classic Mods => Topic started by: Tomfloria on May 19, 2012, 12:52:54 AM
-
Testing over.
-
Go ahead Pilchard, I'm waiting for it!
-
-_- I know I've said I'd test a few of your maps but then didn't. I'm sorry. I've just had piles of college and uni stuff all coming at once, and to add even more fun to the mix, I have a few million exams for the next few weeks.
Alternatively, if that wasn't a dig at my map-testing failures, what was it?
-
I'm confused? Haha
Regarding what you said about being busy, don't worry, I'm in no rush, got another 13 levels to create before a full release :)
-
I need someone to Beta-test a new map who is willing to provide more feedback than - "I won" or "nice map". ..
I won, nice map. :P
-
Oh I see now :D
-
Do NOT give me feedback if:
You have not played this level at least 10 times
You have not tried many different strategies to fight the seedlings
You havn't played the level, Duh.
You don't understand how to explain yourself
This is what i'd see as great feedback for me.
You have got this all wrong dude.
You need to be willing to accept any feedback from anyone. Maybe you imagine hordes of people will now descend and download and play the map, and you'll be able to cherrypick the best reviewers.
It won't work like that.
You might be lucky to get 2-3 people who play it once, and tell you what they think. This isn't just because you're a new coder, it's the same for everyone including me.
If someone wants to play your level once, but can't be bothered playing it 10 times, do you really just want to ignore what they think?
The best way to get great feedback is to post up "here is my map, please tell me what you think".
You can include a few details about the map and screenshots as well, that will always help.
Finally, it's best to attach the level file to your post so it can be downloaded. That way it involves the minimum effort on the part of the tester to actually check it out.
Don't mean to burst your beta testing bubble, just some friendly advice.. :>
-
Everyone has to learn, even if it's the creator, thanks for the suggestions, changed my hard ass to something else :)
-
Currently I don’t have the time to test anything, sorry, but just wanted to note how much I appreciate the way you folks communicate and teach and learn.
Folks, you’re great!
-
Currently I don’t have the time to test anything, sorry, but just wanted to note how much I appreciate the way you folks communicate and teach and learn.
Folks, you’re great!
It's what makes a good community :D
-
updated to 2.0
-
I'd be happy to test your Level 7 on my PC and provide some feedback but I'm puzzled by something. Since the globals determine the behavior of the seedlings and so many aspects of the game-play, how can I meaningfully test it by substituting my own global values from a "current level already made"?
Unfortunately, you apparently are pretty much alone at the moment in your exploration of iOS adaptation and modification. The PC community is somewhat limited right now in it's ability to support your efforts as you're finding out. Personally, since I have no plans or hope of playing Eufloria on a platform other than my PC, my interest in your efforts ultimately rest in the desire to see them realized as a Windows version I can play with. Maybe when the new PC version is released and can be analyzed things will be easier to translate from one OS to the other. Until that time, it will be difficult to help you out with "testing". As for the more technical details of the programming, although it makes for fascinating reading, I'll leave that up to the experts. As far as play-testing goes, I'll help anyway I can.
So I could modify your level sufficiently to make it playable on my PC, but would that really be a worthwhile test? Or am I misinterpreting something?
-
Well you see Globals are done differently by iOS and PC
This is my Globals that I have...
Globals():Get("Asteroids"):Set("RadiusPowerRule",4)
Globals():Get("Asteroids"):Set("SizeFromEnergy",530)
Globals():Get("Asteroids"):Set("SizeFromStrength",530)
Globals():Get("Asteroids"):Set("SizeFromSpeed",540)
Globals():Get("Asteroids"):Set("MinCoreHealth",75)
Globals():Get("Asteroids"):Set("MaxCoreHealth",350)
Globals():Get("Asteroids"):Set("CoreHealthPowerRule",2.5)
Globals():Get("Asteroids"):Set("MinSendDistance",3500)
Globals():Get("Asteroids"):Set("MaxSendDistance",5500)
Globals():Get("Asteroids"):Set("SendPowerRule",2.0)
Globals():Get("Asteroids"):Set("SpawnCap", 40)
Globals():Get("Structures"):Set("LevelDuration1",15)
Globals():Get("Structures"):Set("LevelDuration2",30)
Globals():Get("Structures"):Set("LevelDuration3",60)
Globals():Get("Structures"):Set("LevelDuration4",100)
Globals():Get("Structures"):Set("SpawnTime1",15)
Globals():Get("Structures"):Set("SpawnTime2",12)
Globals():Get("Structures"):Set("SpawnTime3",10)
Globals():Get("Structures"):Set("SpawnTime4",8)
Globals():Get("Flowers"):Set("Available",1)
Globals():Get("Game"):Set("EnemyFactionsMin",0)
Globals():Get("Game"):Set("EnemyFactionsMax",1)
Globals():Get("Game"):Set("MinAsteroidSeparation",1500)
Globals():Get("Game"):Set("MaxAsteroidNeighbourDist",6000)
Globals():Get("Game"):Set("GreysProbability",0)
But I would't know how to make them into PC Globals, if some globals are missing, then the ones missing are automatically placed in by a support file which holds all documents which are here...
Globals():Get("Agents"):Set("MaxSpeed", 750)
Globals():Get("Agents"):Set("MinSpeed", 160)
Globals():Get("Agents"):Set("DeadSlowSpeed", 50)
Globals():Get("Agents"):Set("SpeedPowerRule", 4)
Globals():Get("Agents"):Set("CheckForEnemiesTimer", 0.5)
Globals():Get("Agents"):Set("CheckForTreesTimer", 0.5)
Globals():Get("Agents"):Set("CheckForMinesTimer", 0.5)
Globals():Get("Agents"):Set("AttackRepeatTime", 0.5)
Globals():Get("Agents"):Set("MinDamage", 0.8)
Globals():Get("Agents"):Set("MaxDamage", 1.3)
Globals():Get("Agents"):Set("DamagePowerRule", 1.2)
Globals():Get("Agents"):Set("DamageMultiplierPlayer", 1.0)
Globals():Get("Agents"):Set("DamageMultiplierEnemies", 1.0)
Globals():Get("Agents"):Set("MinAltitude", 100)
Globals():Get("Agents"):Set("MaxAltitude", 200)
Globals():Get("Agents"):Set("AttackDistance", 125)
Globals():Get("Agents"):Set("AttackSoundVolume", 1)
Globals():Get("Agents"):Set("MinHealth", 8)
Globals():Get("Agents"):Set("MaxHealth", 135)
Globals():Get("Agents"):Set("EnergyHealthPowerRule", 4)
Globals():Get("Agents"):Set("RegenRate", 0.08)
Globals():Get("Agents"):Set("NoseLengthMin", 1)
Globals():Get("Agents"):Set("NoseLengthMax", 25)
Globals():Get("Agents"):Set("TurnRate", 1)
Globals():Get("Agents"):Set("AttackTravellerMultiplier", 10)
Globals():Get("Agents"):Set("AttackDistanceSuper", 450)
Globals():Get("Agents"):Set("AttackRepeatTimeSuper", 0.25)
Globals():Get("Agents"):Set("RegenRateSuper", 0.15)
Globals():Get("Agents"):Set("MaxSpeedSuper", 650)
Globals():Get("Agents"):Set("MinSpeedSuper", 120)
Globals():Get("Agents"):Set("DeadSlowSpeedSuper", 90)
Globals():Get("Agents"):Set("MinHealthSuper", 20)
Globals():Get("Agents"):Set("MaxHealthSuper", 200)
Globals():Get("Agents"):Set("MaxDamageSuper", 6.0)
Globals():Get("Agents"):Set("MinDamageSuper", 4.0)
Globals():Get("Agents"):Set("TurnRateSuper", 3)
Globals():Get("Agents"):Set("SendThresholdEnergy", 0.65)
Globals():Get("Agents"):Set("SendThresholdSpeed", 0.65)
Globals():Get("Agents"):Set("SendThresholdStrength", 0.65)
Globals():Get("Agents"):Set("ShootHealingLasers", 0)
Globals():Get("Agents"):Set("MinHeal", 0)
Globals():Get("Agents"):Set("MaxHeal", 0)
Globals():Get("Agents"):Set("HealPowerRule", 0)
Globals():Get("Agents"):Set("MinHealSuper", 0.2)
Globals():Get("Agents"):Set("MaxHealSuper", 0.3)
Globals():Get("Asteroids"):Set("MaxVolume", 0.6)
Globals():Get("Asteroids"):Set("ConquerVolume", 0.5)
Globals():Get("Asteroids"):Set("MaxTrees", 4)
Globals():Get("Asteroids"):Set("MinRadius", 100)
Globals():Get("Asteroids"):Set("MaxRadius", 470)
Globals():Get("Asteroids"):Set("RadiusPowerRule", 1.3)
Globals():Get("Asteroids"):Set("SizeFromEnergy", 140)
Globals():Get("Asteroids"):Set("SizeFromStrength", 110)
Globals():Get("Asteroids"):Set("SizeFromSpeed", 110)
Globals():Get("Asteroids"):Set("AttributeMinimum", 0.1)
Globals():Get("Asteroids"):Set("AttributeDivisions", 100)
Globals():Get("Asteroids"):Set("SendVolume", 0.6)
Globals():Get("Asteroids"):Set("AsteroidSelectRadius", 400)
Globals():Get("Asteroids"):Set("MinSendDistance", 2200)
Globals():Get("Asteroids"):Set("MaxSendDistance", 5000)
Globals():Get("Asteroids"):Set("SendPowerRule", 2)
Globals():Get("Asteroids"):Set("MinCoreHealth", 40)
Globals():Get("Asteroids"):Set("MaxCoreHealth", 300)
Globals():Get("Asteroids"):Set("CoreHealthPowerRule", 2.5)
Globals():Get("Asteroids"):Set("SeedlingCap", 500)
Globals():Get("Asteroids"):Set("SpawnCap", 40)
Globals():Get("AI"):Set("MinDecisionTime", 5)
Globals():Get("AI"):Set("MaxDecisionTime", 15)
Globals():Get("AI"):Set("GraceTimer", 10)
Globals():Get("AI"):Set("MinScoutTime", 2)
Globals():Get("AI"):Set("MaxScoutTime", 5)
Globals():Get("AI"):Set("MinScoutableArmy", 2)
Globals():Get("AI"):Set("MinBattleAnalysisTime", 1)
Globals():Get("AI"):Set("MaxBattleAnalysisTime", 2)
Globals():Get("AI"):Set("Cowardice", 0.1)
Globals():Get("AI"):Set("BattleSavvy", 0.5)
Globals():Get("AI"):Set("RecognisableThreatProportion", 0.3)
Globals():Get("AI"):Set("ReinforcementGreed", 0.65)
Globals():Get("AI"):Set("AidEnthusiasm", 1.3)
Globals():Get("AI"):Set("MinExpansionTime", 2)
Globals():Get("AI"):Set("MaxExpansionTime", 8)
Globals():Get("AI"):Set("MinExpansionForce", 20)
Globals():Get("AI"):Set("ExpandToValuableAsteroidChance", 0.7)
Globals():Get("AI"):Set("GreedyExpansion", 0.4)
Globals():Get("AI"):Set("ExpandBlind", 0.1)
Globals():Get("AI"):Set("MinAttackTime", 8)
Globals():Get("AI"):Set("MaxAttackTime", 20)
Globals():Get("AI"):Set("MinPlantTime", 2)
Globals():Get("AI"):Set("MaxPlantTime", 6)
Globals():Get("AI"):Set("MinFlowerTime", 2)
Globals():Get("AI"):Set("MaxFlowerTime", 4)
Globals():Get("AI"):Set("MinGatherTime", 8)
Globals():Get("AI"):Set("MaxGatherTime", 15)
Globals():Get("AI"):Set("MinTotalSeedlings", 11)
Globals():Get("AI"):Set("MinTotalAddPerAsteroid", 4)
Globals():Get("Structures"):Set("TreeCost", 10)
Globals():Get("Structures"):Set("MinHealth", 200)
Globals():Get("Structures"):Set("MaxHealth", 1000)
Globals():Get("Structures"):Set("HealthPowerRule", 2.5)
Globals():Get("Structures"):Set("FullAgeDamageMultiplier", 0.45)
Globals():Get("Structures"):Set("ZeroAgeDamageMultiplier", 1.3)
Globals():Get("Structures"):Set("DamageReductionPowerRule", 2.0)
Globals():Get("Structures"):Set("RegenRate", 2.7)
Globals():Get("Structures"):Set("LevelDuration1", 8)
Globals():Get("Structures"):Set("LevelDuration2", 40)
Globals():Get("Structures"):Set("LevelDuration3", 80)
Globals():Get("Structures"):Set("LevelDuration4", 180)
Globals():Get("Structures"):Set("SpawnTime1", 30)
Globals():Get("Structures"):Set("SpawnTime2", 30)
Globals():Get("Structures"):Set("SpawnTime3", 25)
Globals():Get("Structures"):Set("SpawnTime4", 20)
Globals():Get("Structures"):Set("SoundVolume", 0.3)
Globals():Get("Structures"):Set("MinSoundTime", 15)
Globals():Get("Structures"):Set("MaxSoundTime", 100)
Globals():Get("Structures"):Set("FlowerProbability", 0.3)
Globals():Get("Structures"):Set("RootSpeed", 80)
Globals():Get("Structures"):Set("StartThickness", 1.5)
Globals():Get("Structures"):Set("OnGrowthThickness", 0.5)
Globals():Get("Structures"):Set("DieOfOldAge", 0)
Globals():Get("Structures"):Set("OldAgeTimeLimit", 300)
Globals():Get("StructuresDefense"):Set("TreeCost", 10)
Globals():Get("StructuresDefense"):Set("MinHealth", 375)
Globals():Get("StructuresDefense"):Set("MaxHealth", 1200)
Globals():Get("StructuresDefense"):Set("HealthPowerRule", 1.7)
Globals():Get("StructuresDefense"):Set("FullAgeDamageMultiplier", 0.6)
Globals():Get("StructuresDefense"):Set("ZeroAgeDamageMultiplier", 1.2)
Globals():Get("StructuresDefense"):Set("DamageReductionPower", 2.2)
Globals():Get("StructuresDefense"):Set("RegenRate", 3)
Globals():Get("StructuresDefense"):Set("LevelDuration1", 10)
Globals():Get("StructuresDefense"):Set("LevelDuration2", 40)
Globals():Get("StructuresDefense"):Set("LevelDuration3", 90)
Globals():Get("StructuresDefense"):Set("LevelDuration4", 140)
Globals():Get("StructuresDefense"):Set("SpawnTime1", 20)
Globals():Get("StructuresDefense"):Set("SpawnTime2", 20)
Globals():Get("StructuresDefense"):Set("SpawnTime3", 12)
Globals():Get("StructuresDefense"):Set("SpawnTime4", 9)
Globals():Get("StructuresDefense"):Set("StartThickness", 2.8)
Globals():Get("StructuresDefense"):Set("OnGrowthThickness", 0.55)
Globals():Get("StructuresDefense"):Set("DieOfOldAge", 0)
Globals():Get("StructuresDefense"):Set("OldAgeTimeLimit", 280)
Globals():Get("BeaconPlants"):Set("TreeCost", 0)
Globals():Get("BeaconPlants"):Set("SeedSpeedMin", 160)
Globals():Get("BeaconPlants"):Set("SeedSpeedMax", 360)
Globals():Get("BeaconPlants"):Set("SeedSpeedTurnRate", 360)
Globals():Get("BeaconPlants"):Set("MaxVolume", 1.0)
Globals():Get("TerraformTrees"):Set("TreeCost", 10)
Globals():Get("TerraformTrees"):Set("NoSeedlingLimit", 0)
Globals():Get("TerraformTrees"):Set("FullBarPreventsTreeDeath", 0)
Globals():Get("Missiles"):Set("AmmoAvailable1", 3)
Globals():Get("Missiles"):Set("AmmoAvailable2", 3)
Globals():Get("Missiles"):Set("AmmoAvailable3", 4)
Globals():Get("Missiles"):Set("AmmoAvailable4", 4)
Globals():Get("Missiles"):Set("DamageMin", 10)
Globals():Get("Missiles"):Set("DamageMax", 25)
Globals():Get("Missiles"):Set("DamagePowerRule", 2.5)
Globals():Get("Missiles"):Set("RadiusMin", 50)
Globals():Get("Missiles"):Set("RadiusMax", 100)
Globals():Get("Missiles"):Set("RadiusPowerRule", 2.0)
Globals():Get("Missiles"):Set("MinSpeed", 250)
Globals():Get("Missiles"):Set("MaxSpeed", 850)
Globals():Get("Missiles"):Set("SpeedPowerRule", 1.5)
Globals():Get("Missiles"):Set("TriggerDistance", 60)
Globals():Get("Missiles"):Set("ReloadMin", 1)
Globals():Get("Missiles"):Set("ReloadMax", 4)
Globals():Get("Missiles"):Set("ReloadPowerRule", 1.5)
Globals():Get("Missiles"):Set("TurnRate", 1)
Globals():Get("Missiles"):Set("LaunchDuration", 1)
Globals():Get("Missiles"):Set("CheckTimer", 0.3)
Globals():Get("Flowers"):Set("GrowTime", 10)
Globals():Get("Flowers"):Set("MinSpeed", 140)
Globals():Get("Flowers"):Set("MaxSpeed", 650)
Globals():Get("Flowers"):Set("TurnRate", 1)
Globals():Get("Flowers"):Set("SpeedPowerRule", 1.2)
Globals():Get("Flowers"):Set("MinHealth", 20)
Globals():Get("Flowers"):Set("MaxHealth", 60)
Globals():Get("Flowers"):Set("HealthPowerRule", 1)
Globals():Get("Flowers"):Set("Available", 1)
Globals():Get("Flowers"):Set("MaxVolume", 0.6)
Globals():Get("Mines"):Set("GrowTime", 20)
Globals():Get("Mines"):Set("MinSpeed", 140)
Globals():Get("Mines"):Set("MaxSpeed", 380)
Globals():Get("Mines"):Set("TurnRate", 1)
Globals():Get("Mines"):Set("SpeedPowerRule", 3)
Globals():Get("Mines"):Set("MinHealth", 40)
Globals():Get("Mines"):Set("MaxHealth", 260)
Globals():Get("Mines"):Set("HealthPowerRule", 2.5)
Globals():Get("Mines"):Set("NumberOfLasers", 4)
Globals():Get("Mines"):Set("LaserPowerMin", 0.08)
Globals():Get("Mines"):Set("LaserPowerMax", 0.3)
Globals():Get("Mines"):Set("LaserPowerRule", 2.8)
Globals():Get("Mines"):Set("ExplosionPowerMin", 100)
Globals():Get("Mines"):Set("ExplosionPowerMax", 200)
Globals():Get("Mines"):Set("ExplosionPowerRule", 1.7)
Globals():Get("Mines"):Set("ExplosionRadiusMin", 150)
Globals():Get("Mines"):Set("ExplosionRadiusMax", 400)
Globals():Get("Mines"):Set("ExplosionRadiusPowerRule", 1.2)
Globals():Get("Mines"):Set("LaserRange", 300)
Globals():Get("Camera"):Set("ExtraView", 100)
Globals():Get("Camera"):Set("PushGutter", 0.2) -- proportion of screen to start the push
Globals():Get("Camera"):Set("MaxPushSpeed", 0.03) -- proportion of screen height to move per second
Globals():Get("Game"):Set("EnemyFactionsMin", 2)
Globals():Get("Game"):Set("EnemyFactionsMax", 12)
Globals():Get("Game"):Set("BeltRadius", 6000)
Globals():Get("Game"):Set("BeltWidth", 600)
Globals():Get("Game"):Set("Asteroids", 42)
Globals():Get("Game"):Set("MinAsteroidSeparation", 1200)
Globals():Get("Game"):Set("StartingSeedlings", 20)
Globals():Get("Game"):Set("StartingSeedlingsPlayer", 25)
Globals():Get("Game"):Set("MaxAsteroidNeighbourDist", 4000)
Globals():Get("Game"):Set("GreysProbability", 0.15)
Globals():Get("Game"):Set("GreysMin", 10)
Globals():Get("Game"):Set("GreysMax", 35)
Globals():Get("Game"):Set("TerraformRatio", 150)
-- Globals():Get("P"):Set("MusicVolume", 0.5)
-- Globals():Get("P"):Set("SoundEffectVolume", 1.0)
-- Globals():Get("P"):Set("AsteroidVolume", 0.4)
Globals():Get("P"):Set("Language", 0)
Globals():Get("P"):Set("ClassicSettings", 0)
-
Annikk has found a way of intergrating PC and iOS together, but sometimes in my level it crashes it, and for PC users, having MessageBox after MessageBox popping up with get really annoying. And my levels aren't just random levels, there is a scripted storyline. Which would cause annoyance for PC users, unless there is some way to create text outside a messagebox on PC.
-
Try DrawText()
I can't remember exactly how to use it, but I'm pretty sure you can pull it apart with some work and clever coding.
-
Well the thing is, I'm modding for iOS and it doesn't support draw text, so I couldn't possibly try it.
-
Ah. That would be a problem then.
-
Yes :P haha
-
I can get the level to "run", but the modifications are so extensive that it no longer is truly representative of your original vision for the IPad, and to the point where any "feedback" you're asking for would be useless.
-
I see :/ and do you mean because the globals are different?
-
Globals use a different syntax or are non-existent in the current PC version. I'm sure it could be "adapted" somewhat and function as an enjoyable map for the PC, but as has been noted in your other threads, there is no "terraforming" or "beacon" or some other features you currently may want to use, and so these must be edited out. I suppose it would be possible to create a program that tests for the OS, and then utilizes only those features and commands appropriate for the platform (as noted elsewhere), but only you as the creative author would be able to tell which features are necessary for your vision. For instance, how crucial is the "terraforming" feature to your map and overall storyline?
Since (I assume) you don't have the ability to play with and examine the current PC version, you need someone willing to invest a lot of time and energy in helping you determine what exactly is different between it and the IPad. I think probably after the new PC version is released (and hopefully it will have more similarity to the IPad version), it will be more practical to create maps capable of running on either without time-consuming modifications.
Until that time, I fear any play-testing on the PC side will be limited to figuring out what functions will or won't work rather than the more nuanced feedback you're looking for on "level 7".
If I were you, I would buy Annikk an IPad as he suggested- problem solved! :D
-
All the features that are extra to the iPad massively change gameplay, Massively, So they are really crucial :D, Well Annikk already has helped me with a IsiOS() or PC, it's working, but it means going back throughout all my level and changing a lot of functions, and storyline, if I were to make it PC compatible. So maybe when I've done what I first intended to do, I might release another version compatible with PC. Probably will though.
-
IIRC Aino has managed to create something like story (PC), with his level storing some info in a folder in the file system, and he also managed to do some text drawing (not sure if that’s what you mean).
-
Text stuff changed quite a bit for iPad as I cried at all the pop up boxes on ps3. We went from one extreme to the other and ended up somewhere in the middle. That was, well, exciting for us to get right! Also, painful.
For iPad you can add messages and display them top, left, middle (should be ok), possibly right and above the panel (untested, may not be supported in the final code base). You can also have a regular pop up.
You can add text to the lang.csv file without damaging anything already there (see my post about iOS scripting).
-
Text stuff changed quite a bit for iPad as I cried at all the pop up boxes on ps3. We went from one extreme to the other and ended up somewhere in the middle. That was, well, exciting for us to get right! Also, painful.
For iPad you can add messages and display them top, left, middle (should be ok), possibly right and above the panel (untested, may not be supported in the final code base). You can also have a regular pop up.
You can add text to the lang.csv file without damaging anything already there (see my post about iOS scripting).
Yeah :D for messages every position works fine, Top, Bottom, Left, Right, Centre.
And you're totally right about the MessageBox, it makes me cringe on iPad haha
-
Hi Tomfloria!
I'd like to taste your level but can't run it on pc... I've pasted all codes as per Your guide but have a errors every times(. Please be so kind to make propper file for pc and attach it at Your first message.
Thanks, Dmitriy
-
Hey man, there is already a file attached for iPad users :D, check the bottom of the post!
-
He's looking for a PC version, not an iPad version.. :>
-
Oh I thought he meant he can't play on PC, meaning he was an iOS user, I'm gonna have this thread taken down,
-
Dear Tom,
So, I won't get a map)?
-
I think Tom's plan is to get it all working on iOS first, and then do a PC port when that's done. :>
-
Dear Tom,
So, I won't get a map)?
No, I'm sorry to say, but I don't code for PC yet, I still have 12 levels to code from scratch, some will require a lot of specifics and testing which when you've only got yourself, it's hard to judge the difficulty and what not, plus I know whats coming, so I have an unfair knowledge of the level.