Hello everyone!
i am almost done testing.
- Part I: How it all started
- Part II: Visual development
- Part III: Feature development
- Part IV: Biggest learnings and aha moments
- Part V: Features I abandoned
- Part VI: Tools I use
- Part VII: What helped testing
- Part VIII: Business and numbers
Today we talk about:
Part IV: Biggest learnings, bugs and aha momentsFinishing such a project is brutal and needs a lot discipline.Although this project was always a dream for many years i needed to find ways how to motivate myself. What really helped me was working with releases. I would try to come up with a meaningful new version of the game (major bug fixes, a big new feature, new levels) which would feel different enough from the previous one. I worked with simple task lists like this:
0.386 (released)
+ General
+ Improved goal UI (current story goal is shown in starmap, before level; same for contract goals)
+ Added SAVE menu to starmap (press ESC to enter)
+ Added fullscreen at start
+ Added controller support and settings screen (still buggy with some controllers)
+ Star map
+ Expanded star map (now multiple screens tall) and reworked art
+ Added idle animation for player ship
+ Added directions arrows for contract locations when they are off screen
+ Added directions arrows for main levels when they are off screen
+ Enemies
+ Advance AI of most humanoid enemies
+ Added "call backup function" - a special enemy type will call for back up from outside of the level if attacked
+ advanced alien queen (projectile) adds slime where ever hit which slows player down
+ Levels
+ Reworked and embedded story level 0, 1, 2
+ Improved performance a lot (switched from Box2D to Simple Physics)
+ Modified tile sets so they can be bombed away (the ones with cracks)
I always added a ( ) at every task and changed it to (x) when done which was a very nice feel of progression.
Another thing that helped was social pressure from forums like this where you want to post an update every week with progress and outsourcing some art pieces once in a while to have something shiny to build in. Working towards releases and milestones and just getting feedback from this forum. This was for me the main driver.
I think the closer you are to finishing the more you have to motivate yourself. You are not adding cool new stuff but fixing nasty bugs and playing the game again and again untill you cant see it anymore.
Creating a eyecandy once in a while for you might do magic. I waited to outsource some art on purpose until the end to have cool stuff i could put into the game. Also creating some physical things around your game might help like this one:
Don’t test on Flash if you build for DesktopI always compiled Flash in the first years because it compiles faster. I could save a lot of time while testing using Flash. I complied a Desktop version once in a while but not regularly. My assumption was that everything that works on Flash also works on Desktop. I was wrong. I ran into an unplayable version (on Desktop) after not compiling for it for a couple of weeks. This was a shock and took me a lot time to get right again.
Read more about it here. Upgrading to a much newer Stencyl build might break your game. I was excited for the new private builds (for the new features) and afraid the same time because my game might not run anymore. This started somewhere after i upgraded to a newer version of Stencyl (i think I started with 2.0). Nothing I could change and do different in hindsight but just a learning I made. It can be especially frustrating if you have code done by someone else (you paid for and you don’t understand).
Simple Physics versus Box2D.I decided to use SimplePhysics at a certain point because of perfromance but also because of how the collisions work. Stencyl behaves quite differently if you use Simple Physics ore Box2D. It is almost a different feature set so make sure you know what your game needs and what you choose.
• Simple Physics will not register collisions between two actors unless one of them moves
• Simple will have a much better performance
• …will not remove an entire collision box of tiles next to each other but only the removed one (which is key for my game).
• ..regions dont seem to work work
Avoid collisions where ever you can to get a good performance:I mostly use distances to check if actors “collide”. I check how far away they are from each other to see if the “collide”. This was a huge performance boost and made my life much easier.
Some thoughts on performance here.Meta information in a audio file will create the weirdest bugs you can imagine.The one bug which almost made me cancel and delete the game was having meta information in audio files. I ran into a bug I could not nail down. It would lead to crashing the game, half rendering the level, behaviors would act weird. The worst part. I could not explain it. So I went through the whole game, deactivated behavior after behavior and tried to find the problem. There was really not much left when I remembered this small hint Stencyl gives you when importing audio files (Meta info could cause issues). And that was it. I removed the meta info from the audio files and the game worked again. This is too weird to be true.
Don’t try to fit all into one actor.Don’t try to fit all into one actor if it makes life too complex. Lets take the default enemy AI for example. I tried to put it all in one behavior and this just got more complex and complex which made it more difficult to add stuff. There enemy behaves very different when having noticed the player or not. So what I do is a have two different actors with different bahaviors. I basically kill the enemy when he notices the player and spawn visually the same enemy (but different actor with different behavior) at the same point. Same goes for NPCs who can attack and have a dialogue for example.
What helped testing:I created a cheat code which would enable me certain game states, jumping around in the game and would pull up a console to show me the most important values in the game:
This made testing so much easier. it also would allow testers to send me screenshots so i could identify the problem better. Small hint that helped a lot:
How to avoid missing actor errosCommunities changeForums change over time. So does this one. I like this community a lot. It is one of the main reasons I am here but it also changed. A lot discussion and communication moved to discord here in this forum which is not perfect for me. I have a very different time zone (so barely online when others are) and I find a forum easier to browse and answer compared to a chat. But this is just my personal preference.
Stay tuned!