A Stressfully Fun Learning Experience - Lots of Beginner Mistakes Made (Game Jam Postmortem)
A Prologue of Procrastination
On September 6, 2023, I joined the IGDB Beginner's Game Jam. Little did I know that walking into this humble game jam would be packed with the most learning experience I've went through in the span of the 7 day jam.
Prior to joining this game jam, I found myself stuck in a partial procrastination cycle. Not having deadlines for my projects or tasks gave me little motivation to keep the momentum going.
I somewhat recently switched to Godot, but my knowledge of using it is still very limited despite the months that passed by. I'd follow tutorials all the way through, but when I got back to my own projects, I'd get stumped again. It was feeding into my procrastination and declining motivation.
(Very early gif of Blanc and Nor. My main wip game.)
Distractions were one of my biggest weaknesses as well. What's stopping me from scrolling through tons of Youtube videos and continually chatting on social media every day? Work-life balance has been a constant struggle for me, but it came to a point where it was really hard for me to open up my projects.... or do anything. I needed a refresher.
Joining the Jam
I needed a deadline to work with. Something to work with limitations. Something to get me moving and learn Godot quickly and actually make a Godot game from start to finish. No matter how small.
That's when I browsed through Itch io's game jams and stumbled upon IGDB Beginner's Game Jam, with the announced theme:
"Limited Space"
As the name implied, it was for "beginners" and I still considered myself a Godot beginner. (Heck I didn't know how signals work or how to change scenes) My fundamental knowledge of Godot was incredibly limited and by learning as I go while making the game, I can learn by doing and not just from watching.
Learning by Doing (in a Game Jam)
Did it work? Mostly yes.
It taught me to recognize important tools within Godot to make a game, such as the signals, switching scenes, queue_free(), AutoLoad, Resources, etc. Without worrying too much about advanced techniques or what "good practices" are, I can just make stuff and then improve it later.
But it also made me rush things! I do not like rushing my works. I want them to be as high quality as possible before releasing, and I had a ticking time limit. Hours spent thinking too much is hours not spent working on content. I was wrestling between the balance of good enough content vs polished content. It was no surprise the bosses are less refined than the core gameplay. The player movement space looks a little bland. There were LOTS AND LOTS of bugs too upon initial release. The code got very spaghetti very fast.
Outside of game jams, I'd finally take the time to improve what was rough.
What I Learned in Godot
- AutoLoad
- Signals
- Changing Scenes
- Scene transitions
- Scenes are like "prefabs" too!
- Resources
- .... The list keeps going
AutoLoad feature in Godot was way more powerful than I thought. It's automatically creates nodes that stay between scenes. I could create managers and other "singleton" related objects when I needed to. With game managers, I was able to analyze the inspired works and implement them into my game. For example, Megaman Battle Network had a Chip Selection Screen, then the fighting action. These were like states of the match. So I split the boss fights into states. "Pre-Action, Preview, Action, Boss Defeated, Victory, and Game Over(Player dies)" Being analytical of favourite games and inspired works was very helpful into making games.
I also finally understood how to use Signals in Godot. I spent almost an entire day trying to grasp its concept, learning it and implementing it to the game. Not much was done in the first few days other than learning the stuff.
Since I was making a card-like game mixed with action, Resources became a quick favourite once I found out that it's the equivalent of ScriptableObjects in Unity. It made making new cards super fast once the system was in place.
Stop Crashing Godot 4
Whether I am just really unlucky or Godot 4 was still unstable, I ran into some engine bugs and random crashes. Most notably the animation player going into "Read only" mode and I couldn't edit the animation key frames. I made the mistake of dragging and dropping files to move them around and then it gets corrupted! Uh oh...
I had to be careful not to drag and drop files when moving them around. Sometimes I couldn't tell when it was my fault or the engine's fault when something goes wrong. I usually assumed the former, but in rare cases the engine actually did do stuff it was not intended to do.
Mistakes Everywhere
As a beginner in Godot and first time actually trying to make and release a bullet hell game, it was inevitable a storm of mistakes were coming my way.
Inexperience in Godot
Since I was inexperienced and new to Godot, I didn't have much time either to figure out how exactly to implement good practices into Godot games. The project folders were also fairly disorganized. The more disorganized it become, the longer it took for me to find the right files unless I searched up the name of it.
Naming Inconsistency
Speaking of names, I was also very inconsistent with naming certain files. Such as calling the hp bar, a battery bar instead. Or the worst part was calling the player cards "files" as the intended canon name for the game's cards, until finally naming the rest of the half files cards again.
Inexperience with Bullet Patterns
I realized that creativity and well designed patterns is most definite a whole skill on it's own, and I severely lacked that. Many were highly experimental. Some patterns were just... Better not being in the game.
(What da bullet hell?)
Spaghetti Code
The code wasn't any better. Confusing decisions of which node entity should be responsible for which, and which scripts handle which functions. Does the battle manager call the victory screen when the player defeats the enemy? Should the player script call the victory screen? In the end they both do the same thing, but how they are organized impacted the cleanliness of my code. I spent a chunk of time scramble through multiple scripts to find the function that did what I was looking for and debugging it.
Debugging.... was incredibly painful.
Nothing here makes sense...
I just could not wait to finish the foundations of the whole card deck and tile system.
(Oh the horror...)
Anxiety and Second Guessing
I was getting incredibly anxious this game would not pull through to the end. It was more than halfway through the jam and it was very very unfinished. A blank background, no animations, no sfx, no vfx. Just barebones deleting tiles and watching the boss hp magically go down. But I kept going because I committed to this project. I held onto that faith and hope.
The Fun Stuff
Once the card system was programmed and the tile system, it was time to finally get to the fun stuff. Actually making the boss fights and juicing up the combat. This is where I switched to full gear. Learning how to make the game feel more fun was one of many things I've learned in the process. Such as animating and coding the boss death explosion, creating attacks and hit VFX, making SFX, etc.
While I mentioned some bullet patterns were poorly made, the actually decently made patterns seemed ok.
As I start polishing up the game more, my confidence in the game's quality increased bit by bit. To top it off, my music composer was in the zone! He finished 3 songs and 2 short songs in total, and he started halfway through the jam. Something I wished I let him know sooner.
Check out this funky battle beat!
Cyber-Block Space's Boss Battle Theme
Finishing Touches and Release
I was already super excited and nervous at this point. My heart rate was probably really high in this moment. Just when I finally finished the miner boss (Minertaur), I had enough time to finish the Hammerhead boss. Then barely had enough time to finish the final boss (Shadow-Hat Hacker) by the minute. (This was a big mistake!)
Maximum Panic Release
When I said finishing that final boss was a mistake, it was a huge mistake! Bugs were everywhere!
From unable to see your placed tiles. His sprite was stuck in hit flash frame. His patterns were horribly bugged. People who reached to this guy would see this monstrosity of a broken mess! Including his most infamous bugged pattern. The Impossible Wall.
(This was not supposed to happen!)
Emergency Bug Fixes
Thankfully, the jam let me fix these bugs after the submission deadline. I was calming down a bit but I was being as fast as I could to fix all the bugs I could find. Unfortunately the wall bullet bug took longer to figure out how to fix. The damage was done...
The Game Was Going to be Even Harder!!
I made a last minute buff to the player's hp to bring it back up to 6. It used to be nerfed to 3 out of fear people would find the game too short or easy. That was a very wrong assumption, especially once I finally added the remaining 2 bosses. That last minute buff barely made the game more tolerable to everyone.
(Good luck beating him with only this much hp...)
Post Release Stress
As the roller-coaster ride finishes, that's when my biggest highs went back to my lows. As a person who overthinks, I began seriously questioning just how good was my game in the end. I went from fighting against bugs to fighting against myself. I was in a mental battle with myself again. Something I experienced similar back in 2020-2022. In the moment as I was getting closer to the finish line, I was getting excited to release the game out for people to try. But I was also incredibly nervous as the wave of feedback comes my way.
The general feedback was, a game with a neat idea and potential, but had very rough edges. Perception of fun was a mixed bag. A game too difficult to be enjoyable, while the core concept itself was enough to be fun for some. But what hit me the most, was the person I was expecting to have fun the most, actually had the least fun out of everyone else I saw play! He is the person I considered to be a veteran bullet hell pro, so I thought he wouldn't have too much issue with the final boss. He was actually raging against the final boss the most. He was still determined to beat the final boss in the end , but I could see the emotion run through him. As of the time of writing this post, he is the only person I saw to beat the final boss on the web build of the game, which is horribly optimized in performance.
What Would I Have Done Differently?
Avoid Overscoping
The entire project was incredibly ambitious from the start and this was me already trying to scope down my vision to a reasonable scale for a 7 day beginner jam. My eyes were set on making a short game experience. Fleshed out game mechanics, an intriguing gameplay design, multiple bosses. I was going to add cutscenes and dialogue as well. No one was keeping me in check. Only myself. The entire game kept getting trimmed down and it was still overwhelming to work with. All that content in the game in the span of 7 days were from my mostly sleepless nights. I was not physically healthy.
Hard != Fun
I wished I made the game easier than I think it should be. Make the blind spots bigger. Make the patterns more simple and easier to dodge. I knew players were going to struggle with the game more than myself, yet somehow my own judgement of the game's difficulty still remained very inaccurate. There were some patterns where I had a feeling some of the players would not like it, but I didn't give myself enough time to think it through... or even let others playtest (getting to that later).
Naturally I like playing very difficult games like Enter the Gungeon or Souls games. But that flavor varies between people. I initially thought people would come into the game with decently high difficulty tolerance, but when I saw even my best player (who generally likes difficult games) get incredibly frustrated on the final boss, I knew I did something very wrong. Which leads to my next one.
Polish > Content Quantity
When I look back at the final boss. I suddenly went from amazed that I managed to get him in, to suddenly disliking that he even existed in the game submission. He was not ready, he was insanely rushed, but I got too carried away with wanting him in the game. When my friend finished that final boss music, I badly wanted that final boss finished, and I didn't give him enough time to be polished. His sprites look mediocre compared to the other bosses. His patterns are bullet hell insane. He had a LOT of bugs that needed to be fixed after. But before I could fix all those bugs, people already experienced the ugly side of this submission. 2 somewhat decently polished bosses would have fared better than 3 less polished bosses with the game's impression, even if that meant trimming the game's playtime by a 1/3.
I can always update him later, but my motivation fuel was probably all burned out by the end.
The Final Boss Could Have Been a Secret Boss (If I had time)
If I was really keen on putting him in the game, he shouldn't be accessed by less experienced players. He was designed for players who want a real challenge to the game. Alas though, it may take time to program the condition check if the player meets the requirements to reach him. Some players actually want to beat the game. Not just get walled.
While I still had fun fighting the final boss, the same couldn't be said for others.
Get Playtesters Early
1-2 days before the deadline, I had about one boss mostly done. But I neglected the idea of uploading the game to get my friends to playtest it to see what they think. The game wasn't done yet, but that's not really an issue. I missed out on important info to see if the game even works on other people's machines! I learned that the web build of Godot 4 led to some inconsistent issues between people. Such as the game softlocking itself after the boss pattern finishes. Or the worst one yet that remains difficult to fix, frame rate drops. I also didn't get to see how people thought about the bullet patterns made so far. The game's boss was ready to be tested, but I was too carried away with finishing the game. Not quality checking.
Get A Team Member (If possible and allowed)
The only other team member I had on my team was my music composer (Thank you so much for the great music put into the game). Everything else was done mostly by me. The sprites, animations, programming, and sound effects. I was spreading myself across so many areas, it was kind of stressful! The overall quality between stuff in the game diminishes with each type of task I tackle. But I thought I could overcome all that by just spending more time on each stuff and sacrificing a few sleep hours. That did not work out pretty well. When I missed out on sleep, I suffered severe debuffs that lowered my stats and capability to work on the game. I still ended up sleeping in the end for most of the days except the final day before the deadline.
I also didn't notify that I needed help from my music composer sooner. It was halfway through the jam so he had a shorter time limit than I had. I felt bad not approaching him sooner. Thankfully he was still able to finish a boss theme, and a menu screen. With enough time on hand, he also managed to finish the final boss, victory theme and game over theme.
Notes Taken For Future Projects
- Create a bullet pattern editor or make it more convenient to make bullet patterns. (I could not see the bullets in action unless I tested it in-game)
- Difficulty option goes from a "maybe" to a "must" now
- Assume my own difficulty is Very Hard and get lots of playtesters
- Learn some more elegant ways to set up projects, code and nodes
- I don't have to rush anymore, but don't slack off too much either
- Deadlines are effective to keep me moving
- Make hazard hitboxes even smaller (I thought they were small enough but one of the players disagreed)
- Learn more of Godot's tools
- Make my own Godot tools
- Use Godot 3.5 instead (4 caused me more problems than usual)
- Team members are important and very helpful for bigger projects.
Closing Thoughts
It was a rollercoaster of emotions and obstacles. While I knew I could have done better, I am glad I actually managed to finish this game in time for the game jam, and finally finish a short Godot game. The game lacks opening cutscene and ending, but it at least followed a full loop of start to finish. Gameplay mechanics were set in place and you can fight 3 bosses. I still had fun with my own game, despite it was difficult seeing it's flaws.
It was inevitable this game was going to show flaws in certain areas, considering how ambitious I was with this game and my glaring lack of experience. I hope I can move forward without letting the flaws of the game haunt me too much but know that this was one big learning milestone towards my dream of becoming an indie game developer.
Closing it off as a thank you to:
Everyone who played my game and those who took the time to read this article.
The IGDB Beginner's Jam hosts (Vatredox, superspy17, Lutelio).
The Godot team for making an amazing free, open source game engine.
KelseyKurio for the music
And thanks to the people who have supported me through this long journey towards my dream.
Wishing you all the best.
- BountyXSnipe
Get Cyber-Block Space
Cyber-Block Space
A difficult bullet hell game where you dodge and attack with limited space. Stategize and combo your tile card attacks.
Status | Prototype |
Author | BountyXSnipe |
Genre | Action |
Tags | Bullet Hell, Difficult, Pixel Art |
More posts
- Cyber-Block Space won the IGDB Game Jam! Thank You + Thoughts Moving ForwardSep 20, 2023
- Version 0.02 - Patch NotesSep 14, 2023
Leave a comment
Log in with itch.io to leave a comment.