gm(48) #14 – Postmortem on “Top Down Digestive Attack!”

Haven’t posted on here in quite some time! It’s been a while since I’ve taken the time to work on anything game-related; with the newest gm(48) rolling up and actually having a (mostly) free weekend I figured I would try it out. Once the theme had been announced – “Top Down _______” – my immediate thought was: “not gonna do a shooter.”

So, what to do?

Well, I decided I would try my hand at one of the “perpetual falling” games but with the added twist of swimming against the flow and collecting items in order to allow passage to the next level. And, with the theme of “top down” I also had the errant thought of the digestive system… going from top to… bottom. Of course the best way to accomplish this was to have the player be a parasite which infects cells in each organ, fend off white blood cells, and escape through an orifice to the next organ. I had the gameplay aspect and the thematic design in mind but as I hadn’t fully settled on the notion until well into Friday evening. I decided the best course of action is to get some sleep. I planned to rip into the game first thing Saturday morning.

Saturday, April 18th

9:35am – As I previously mentioned, it had been quite some time since I had actually taken any time to mess around in GameMaker: Studio. This naturally meant that I was extremely rusty and had to spend quite a bit of time reviewing things that I should have inherently known from making projects in the past. The code for the game itself is actually fairly simple – I just had to re-learn how to do the things I wanted to do. Fortunately, what this vacuum of knowledge did give me was the opportunity to understand how to utilize global variables effectively across multiple objects. Unfortunately, this knowledge was not truly practiced until after the jam was already over (more on that in a bit). Regardless, most of my Saturday morning was spent researching how to accomplish exactly what I needed to do to pull this thing off correctly.

12:35pm – By the time I felt sufficiently renewed in my (extremely) limited GameMaker skills, it was midday Saturday and due to my timezone, I had only until Sunday at 5pm to finish. I spent most of the day on Saturday working on getting the movement engine down and creating extremely simple AI characters that would attack the player. Originally, my plan was to manually place the “white blood cells” around each level but shortly thereafter I had the bright idea to create a generator object that would randomly spawn enemies around the level (always below and off screen) to give a minute sense of randomness. This proved to be part of my undoing, as I had never truly done this before. My lack of experience coupled with some really odd bugs of how it actually generated the enemies led to most of Sunday bug-hunting. By the time I settled for a system that I could at least accept (even if it wasn’t actually what I had originally intended), it was mid-afternoon on Sunday. Talk about puckering of the butthole. From here on out, I slammed everything into high gear and, unbeknownst to me at the time, truly sealed my fate.

Sunday, April 19th

4:15pm – I attempted to make a rudimentary menu and a rudimentary victory room if the player is able to beat all three levels. Unfortunately, due to the way I originally handled global variables and the related objects, I ran into bug after bug until I decided to just throw enough objects into each room to just get the error codes to stop propagating. At this point, I am literally sweating from the stress of finishing on time and submitting my bug-filled mess of a game.

4:35pm – My previous attempt at menu and victory rooms had the unintended side effect of skewing all my HUD text into seemingly random spots depending on if the player died, restarted the room, or achieved victory. I said “screw it” and would just note the known bugs in my submission.

4:55pm – Good, I still have five minutes. I jaunt over to the GameMaker subreddit and start writing my post as my executable is uploading to my VPS. I realize that I wanted to make sure the subject line of my post was correct, so I take a gander at another submission on the site and happen across a comment that explains the new submission rules that weren’t in the sidebar. Shit.

5:02pm – Welp… I log into the new submission site and see that I missed the deadline by a matter of seconds. Because I looked in the wrong place for instructions on how to submit, all the stress and frustration felt like it was entirely pointless. I breathed a great sigh of defeat, saved my project, and closed GameMaker down. I need a beer.

Tuesday, May 5th

gm(48) finished on Sunday April 19th. I began working on a different game a few days after it finished in an attempt to wash the experience out of my mouth. As I continued working on the project, I began realizing that a lot of what I was doing for this game could be applied to my failed project. So, I set aside my current prototype to go back and see if I couldn’t fix the issues I created in my rush a few weeks prior.

I’ll be honest: it’s amazing what one can accomplish when stress is no longer a factor. I revved the project back up, played the build and realized what was causing the HUD text issue immediately. Boom, fixed. Gaps between walls that kill the player are too tight. Boom, fixed. You can now actually beat all three levels! The player’s attack could be generated as quickly as one may click the right mouse button. This has the unintended side effect of making it less challenging and more just a simple click-fest. Boom. Fixed. Other updates to clean it up:

  • Added a splash screen after creating a simple logo; not a graphic designer but ah well… it worked.
  • Added a full menu system (thanks to Shaun Spalding’s tutorial!)
  • Added a cleaned-up victory state
  • Added a cleaned-up “you’re dead” message
  • Added a clearer explanation of the controls, goals, and ways to die
  • Added a recharge bar to indicate when the attack is ready again
  • Added sound effects
  • Added music (thanks to Bensound at
  • Disabled admin controls (so the player can’t just immediately hop into the victory state)
  • Fixed a bug where white blood cells stopped spawning once the room’s limit had been initially reached even if they’re being destroyed
  • Reconfigured all object masks to provide a bit more forgiving collision detection

The completed game can be found on my page.

At the end of the day, the game was a good experience. Mostly, it was a personal lesson to myself that I should stop being lazy so that I stress less during the next game jam.