A game in Godot - Postmorteming a Prototype#
I made a game prototype in Godot 4.3 and you can spin it on itch.io. It was the first time I made all the assets and went public making the build available.
Time to recap the things I learnt.
Godot stuff#
The game is a basic 2D maze runner in space. You control your spaceship and try to REACH THE FINISH LINE before the timer goes out. I wanted to navigate around and have a timer and BAM, game concept.
Levels are tilemaps so I had a chance to draw something and use new tilemaps layer of Godot 4.3. There’s also a parallax background which is not super well implemented and can be improved.
Controls were (and are) a huge issues. There’s no gravity in space, so setting up as more complex than the usual “let’s do a platform” tutorial. I opted for the old rotation tank movement. In part because it saved me extra work on animating the spaceship and in part because, at first, I wanted the ship to keep it’s velocity. That made the gameplay way more floating, but I then dropped it.
At first I wanted each collision to cause a bounce back. I realized I had to give up on that. So I used dedicated scenes for randomly bouncing back the player.
This caused some gameplay issues depending on the main direction you are going. I assumed the direction was left to right. But then if you hit the bounder on the vertical axes yoy main get out of the track. I kind of like that effect. It gets more of a maze runner than a Micromachine game. But I had to improve on that and extend the gameplay to accomodate this fact. Cool!
Audio#
I made a small looping track and a collision sound. Then there’s a warp like sound as you Reach the finish line. The main issues were:
- make the Lydian track loop
- stop the track as the player enters finish line area.
For the loop to work it turns out AUDIO RESOURCES CAN BE IMPORTED TELLING GODOT THEY ARE MEANT TO BE LOOPED. When you import resources they are a loop. Double clcik on the resource and flag the loop. After you do that and commit things will change.
-loop=false
-loop_offset=0
-bpm=0
+loop=true
+loop_offset=0.0
+bpm=0.0
Here are a general intro on audio in Godot and the video in which I discovered the property.
TODO: add this to the documentation.
Stopping the track was easier, it depended on the winning condition and I put that directly on the player. In the future I may have more tracks mapped on the level. And I can reuse the same mechanics.
Changing scenes, audio and player movement#
Th finish line has a lot of action. The player cannot move once the area is reached. The “level complete” tune should play, pausing the background music. And then we scene has to change while the player can no longer move. There’s possibly some glitch there.
Picking up collectibles#
Timer is in the UI of the level. As the player interacts with the clock, the objects disappears and the timer is upgraded in the main UI. It took some time to get the signals right.
Making pixel art with Pixelorama#
I used Pixelorama to keep the Godot stack and draw the assets. I started with 16x16 images and was helped by the symmetric drawing options. There’s still a lot to explore and go.
I draw:
- the ship
- a galaxy tile as a main obstacle
- a galaxy to bounce the player back
- the background
- the finish line
- the clock to be collected.
I need:
- more options in the background and tileset
- building all assets as a tileset. I know no general rules nor how to do that in Pixelorama
- explore animations.
I considered making a splash screen with the title in pixel art. But stop it.
Making fonts#
The “not invented here” syndrome extended to fonts. I experimented with fontstruct, build a font and considered using it in the game. But then I overthought on the license and gave it up. I used Kenney’s fonts but I discovered on itch.io that there is a way to turn a tilemap into a ttf file: pixelfont. (Have a look at the technical post about the tool).
Making music with Reaper#
I had a Reaper license. I use it for my guitar stuff. I had some previous experience with Cubase but I have never used Reaper for midi or similar. So, yep, time to learn to use a bit the ReaSynth and how to dock the virtual keyboard. Next time I’ll use my MIDI Keyboard.
Setting up on Itch.io#
I setup a page on itch.io with semi decent avatar. I also had to set everything up for the game to appear.
I’ll have to explore butler to automate the releases.
Things I’m happy with#
- made all the stuff. Asset drawing turned out to be a process I enjoy.
- level transitions and organization: there’s a small progression level by level with a hint and a tutorial.
What can be improved#
- it is more a mechanics test than a game
- controls feel like a placeholder.