In case you haven’t been following along, The Lost Ziggurat of Nephthys is a 2D platformer that focuses on a grapple hook mechanic that I developed for a game jam with some friends – The Megaman Game Jam. I’m constantly looking for ways to growth as a developer and learn from my mistakes, so I wanted to write a postmortem on how the game turned out at the end of the game jam. Here’s a video of the finished product, as well as my thoughts on how the process went.
First and foremost, creating a time-based (As opposed to frame-based) platformer is harder than I thought it would be. I didn’t realize you had to implement literal physics equations to get platformers to work in a time-based structure. I’m very fortunate to have paid attention in physics class in high school! That said, I did “ship” with slightly (Maybe ~4 pixels) different jump heights when at low (~30) or high (~120) frame rates – A problem I aim to look more into now that the game jam is over.
Similarly, I had heard in the past that implementing moving platforms is hard, but the logic for them is actually extremely simple – When the player is colliding with one, move the player with the same velocity as the platform. There are definitely lots of design considerations to think about – What to do if the player gets squished, what happens if a horizontal moving platform runs into the player, how do they interact with other game objects, etc – but the implementation logic itself is simple. Unfortunately, I ran into a quirk in the GamerMaker Studio 2 engine that ended up making an approximately 2 hour task into a 10+ hour one. Long story short, GameMaker Studio 2 handles sprite masks (Collisions) in whole numbers, which makes sense, since a sprite can only occupy whole pixels. That said, x and y coordinates can be any range of float values. This discrepancy ended up causing a ton of pain for me (I would have pulled my hair out if I had any). Luckily, people in the GameMaker forums were super helpful and pointed out my problem after I asked them for help saving my sanity! Here’s a video showing the problem I ran into (I was so baffled by this problem I had to create a separate project just to focus on debugging it!)
Postmortems don’t have to be all about what went wrong, though. Working on new traps/objects was a ton of fun! I designed and implemented most of the gameplay objects in a single day. I can’t wait to add more to the game – I already have a large list of ideas! One thing I aim to do is create interactions between objects (Especially the grappling hook). Currently, the only interactions that I have are the grappling hook with walls, crumble platforms, and darts, and falling rocks with crumbling platforms. Increasing that matrix of interactions will help the game feel much deeper!
I’m so grateful I chose to add the grappling hook! The game would be extremely boring without that mechanic, and the initial implementation only took me about 2 hours to add. That said, I did have to do a lot of tuning and bug fixing after that initial implementation. The grappling hook also helped inform some of the design of the game, such as level design, crumbling platforms crumbling when you grapple onto them, and non-grapplable walls (Which I probably didn’t utilize as much as I should have).
I think the simple “story” is the way to go for a game jam. Anything more and it would have been wasted time. That said, if I choose to develop this into a bigger game, I’m going to have to think more in-depth about the story and how I can marry the gameplay to it.
The roguelike aspect of the game doesn’t really shine at the moment, due to the limited number of rooms. I need to make way more levels, which will require me to create more objects and fine-tuning my level design.
All in all though, I rediscovered my love working on small projects! It was a blast to come up with ideas, script object behavior, and tune the game’s mechanics.