This summer I have had a bit less vacation but there has still been some room for a bit of “vacation programming”. This year I decided to do a simple game in Godot. I wrote a bit about Godot a while ago, but I never got to create any game protype to get a better feel for the engine, so I decided to change that. This resulted in a simple 2D climbing platformer prototype with a time attack mechanic and procedurally generated platforms. I decided to call this game prototype Bit Jumper. It uses low res pixel graphics and you spend a lot of time jumping so I thought that was a descriptive name.
The process developing Bit Jumper was a fun and mostly frictionless process thanks to the iteration speed provided by the Godot engine. I did run into a few head scratching issues but nothing I could not overcome within 15 minutes or so.
I also tried to involve my son in the design and graphics creation process. Both to get some “external input” but also to challenge him and activate his creativity. I used the built-in programming language called GDscript for all code in the game. The code editor inside the game engine editor provided a smooth experience, but I also added GDscript mode in Emacs to be able to feel more at home. The GDscript mode in Emacs worked great for me but I prefer having two monitors when using Emacs with Godot. One monitor for the Godot editor and one monitor for Emacs. I did spend a few hours developing Bit Jumper from the couch and then I switched to using the built-in editor. It worked out well most of the time, but it is not Emacs. The graphics and animations for the game were created in Asesprite. It was very easy to import sprites from Asesprite to Godot and using Asesprite was mostly a smooth experience. I actually used a bit of Gimp to modulate the colors of the platform blocks but apart from that I only used Asesprite.
I also tried using Beepbox to create a short retro tune that I loop forever. Beepbox was very user friendly for doing simple retro tunes and I had “something good enough” for a POC in a few minutes. I think you can create pretty advanced tunes with it too but for game jams and the like I think it is an ideal tool.
POC features:
- Jump mechanics.
- Pickups.
- Time attack.
- Platform generated by code (different experience for each play).
- Well, not that different but still the platform layout and where the pickups are located differs between each play session.
- Simple pixel graphics including a walk and idle animation.
- High score list tracking how far you climbed vertically.
- Sound effects and simple background music.
Let me try to summarize my “vacation programming” experience with a Good vs Bad list.
The Good:
- GDscript.
- It allowed me to iterate fast.
- Emitting signals and reacting to those was straightforward.
- Godot documentation.
- It was mostly very helpful and in the cases I could not find the answer I either figured it out myself or I successfully googled for the answer.
- Graphics creation.
- Creating and importing sprites from Asesprite, and to some extent Gimp, was fun and simple.
- Not having to reinvent the wheel.
- All the building blocks I needed were provided by Godot. For instance, gamepadsupport, windowed/full screen mode, UI etc.
- Scope.
- I kept the scope small, meaning I could make a fully playable prototype.
- Beebox.
- It was very user friendly and it was fun to create your own “music”.
The Bad:
- Switching between scripts in the built-in editor was a bit tedious at times. Not sure if Godot is to blame for this or my ability to keep track of the script names.
In total I have probably spent around 24 hours on this prototype, including graphics, animation and music creation. It is playable and my kids think it is fun to play but it would require a lot more work to reach a level where I would be comfortable releasing this as a commercial game.
We will see if I will continue developing it or not. Soon I will go back to full time work and then I will have a lot less time and energy for additional development.
You can try out the very unpolished POC here
That is all for now.