Posted September 11, 2021 by Zarkonnen
Last weekend, I participated in the Stop Waiting For Godot Jam, organised by Terry Cavanagh. The aim of the jam was to try out Godot, an open-source game engine broadly similar to Unity. It's been making great strides over the past few years, and I've been meaning to check it out for a while. A lot of other people have also been stuck in this "I should check it out" state, hence the jam, which ended up with 299 entries.
I decided to make a colourful alien market from 2D pictures arranged in 3D space - a kind of "cardboard stage" aesthetic.
I've been thinking about the alien market thing for a while, because of the whole way that science fiction keeps on giving us planets that consist of a single biome, a single town, that look and feel less "foreign" than going to an actual foreign country here on earth. So I wanted to zoom in on one part of one town on one planet and try to make that feel alive and diverse enough. Obviously a tall order for a jam game, but it's about the journey.
I got into Godot pretty easily, having read the introduction in the excellent documentation. It is very similar to Unity, so if you're familiar with that at all, you'll feel at home. Once I figured out how to switch to WASD movement for the editor view (shift-F), I was able to make progress in creating and placing quads (2D pictures).
There were however a bunch of annoyances with getting those quads to work properly. Initially, I used 3D sprites, but they turned out to be extremely bad at rendering in the correct order - sprites closer to the camera drawn on top of those further away. I switched to generic quads, and after fiddling around with the settings for the render material, ended up with something that kind of worked.
I also couldn't get texture atlases to work for the quads. I'd drawn the graphics I thought I'd need onto a single 2000x2000 pixel image, and I expected to be able to tell each quad which part of the image to draw. There was a setting for this, but it just didn't actually work. So I ended up having to manually disassemble the image and then tediously duplicate and edit the texture for each quad.
The programming language, GDScript, was very pleasant to use. It's very similar to Python and has excellent support, because the editor is directly integrated into the development environment.
Not great code, but it's very readable!
Also, turns out creating 3D levels takes time! I spent hours just positioning pictures in 3D space and still didn't quite get that sense of crowded, messy detail that I wanted. I kept on thinking that it would be an order of magnitude faster if I was able to just draw the details into the scene instead of drawing individual bits, laboriously importing them, and then trying to use them in a way that looked nice.
Finally, I was somewhat satisfied with my little market, so with a few hours left before the deadline, I glued in some super-basic dialog systems and added music I threw together in 15 minutes of hitting keys in GarageBand. I would have liked to push the music aspect to feel more alien, but with the time constraints, I ended up going for the lazy and uh borderline orientalist option of using a marimba and an erhu plus some percussion. Just use an African and a Chinese instrument, and voilà, aliens!
Anyway. The game exported to HTML very easily and runs reasonably smoothly like that. Give it a try - just wander around with the arrow keys and visit the market stalls.
The next day, I felt that I had spent a lot of time just making a level rather than trying out what the engine could do, so I spent about an hour putting together a quick thing where you can fly around a spaceship made out of constructive solid geometry parts, heavily inspired by Escape Velocity.
So, what's the verdict on Godot?
Pros
Things I'm not sure about where I just may not have figured it out yet
Cons
Mostly a lot of minor GUI complaints.
Then there was some stuff I couldn't get to work: Setting a material to display as a billboard weirdly worked in the editor but not while the game was running. And as mentioned above, using a texture atlas for a material also just didn't work, or at least didn't work in the way I expected it to.
Conclusions: