Heja! This was my first game jam and also my first published game so far. Doing that in two days leaves me with a proud feeling - not of the game itself, but of managing to produce something in such a short time. I started coding just a few months ago and did not think it possible to get into it so quickly. And I bet this is true for a few people around here.
So, my question is: what did you learn from this?
Here are a few of my thoughts right now, while going through my (Godot) project files:
-
Controls are about feeling. I have spent a lot of time tweaking little numbers on my control mechanics and it was worth it. My main control is a “pull” movement with the mouse that calculates from drag distance and angle. There is a threshold as well as a progressive effect to it. At first I kind of winged the numbers but quickly realized I had fine-tune them. So I put them all in variables, added some slider and a quick debug panel and played the game while adjusting the values during runtime. That was very helpful to actually feel the difference between various values!
-
Thinking in Globals: in the beginning I had a lot of variables/data in individual scenes to manage all of it in understandable “chunks”. After a few hours I realized, that I need to access a lot of data in other parts of the game, too. One question I started asking myself was: Is this thing here important to others? If so, I would put it in a global singleton and use that. I do this not only for individual variables, but for whole scenes, too. I’ve got a singleton keeping track of important scenes and giving them shortcuts, so I can always just address those. Need the space gun? -> Global.spacegun! Need the lower HUD bar? Global.buildHUD! This brings me to the next one…
-
Separation of interest is not a joke. I mean, the concept is taught in every course, book and video about object-oriented programming - but I now started to understand what it actually means. To think about where a function belongs and what its scope is, was a bit hard in the beginning, when I did not know, what the structure of the game would look like, but it surely paid off! My main game loop is fairly organized through this, because most elements have their own “live” outside of it - while I still can call them from everywhere. This is some esoteric brain tofu but sometimes it feels like my game performs better by doing this clean :D So, as a general rule, I started to begin every new scene/object by thinking about its input and how to get/set that input. Combined with globals this gives every new item a solid beginning.
-
Think ahead of inheritance! This I will have to learn better. I started with the Waste Box as the first space object you fling out. I added all the functionality it needed - orbiting, collision, damage calculations, debris spawning, little animation elements and so on. And then I added the next object based on it: the satellite. And realized, I needed to overwrite a lot of functions, because some minor details in behaviour were different. So, I kinda thought about inheritance, but not abstract enough. In this smaller scale this was manageable in the end, but I’d hat to have more objects to handle at the moment.. :)
-
Time doesn’t care about your standards. I needed “just a few more minutes” on about every feature in my game. I knew, I had 6 hours to go. I set myself time blocks to work on specific elements. And in the end, I spend the two hours I planned for sound design and music on adding transitions for game start and game end that turned out buggy like a drunk monkey. And to be honest: I think this was a mistake. I should not have traded those two elements. For one, I know that music/sounds is just as important as graphics and heavily supports player experience and every other system in game. All of it. This might be the biggest take away for me: stick to blocks and parts of the game that need to be there first. Polish later. And I think I will start with making some music first next time. I missed having a soundtrack on during development.
-
Technology is weird. I mean, every piece of software has its quirks and knowing them is part of learning, I know. Still I’m surprised how messed up everything is. I don’t want to go into too much detail here, as I am sure you have that one or two things that come to mind. My take away here is: Test everything at least once quickly before diving in. I should have tested GPU Particles in web exports with Godot, for example. GPU Particles sounds faster than CPU Particles. It sure is on my machine… Well, now my game freezes for a second when having an explosion for the first time to initialize the particle system. Great :D
I’ll keep breeding on this a bit more. Thank you for your time and I hope you had a sweet weekend!
In case you want to take a look: https://ximossi.itch.io/waste-no-space
I intend to work on it a little bit more to fix some bugs and add a proper sound design. But I like how it turned out - despite the obvious last-minute bugs. In case you got time, feel invited to test it and give feedback. How do the controls feel like? Was it quick to understand? Did it meet yous skill?
