Posted May 07, 2024 by schwarnhild
#game jam #devlog
Introduction
Hello there, my name is Schwarnhild and I only recently decided to give gamedev another try after a long while. I wanted to try Godot 4 this time, after having worked with Unity in the past, which is not an option for me at the moment (for various reasons).
Getting back into game dev and making my first game
This time around, I decided to take the advive of pretty much every youtube video to make small projects that could be finished in a few days. My goal was to learn Godot 4, experiment with different mechanics and finally release a small but polished game on itch.io. My first game with Godot 4 was a match game called Petal Pop Garden, which took about 5 days to make after scrapping the first version and starting over from scratch.
I’m very happy with how the game turned out and surprised how easy it was to pick up Godot! The only people who played the game were my close friends and family. But having reached this small goal finally gave me the confidence to do something that I’ve been wanting to try for a very long time: I was going to participate in my first ever game jam!
Finding the right game jam
I’ve watched many devlogs videos on youtube but my favourites were always devlogs about game jams. I just find the concept fascinating and there seemed to be such a sense of community during the jams! So I went on itch.io and tried to decide which jam to participate in and was instantly overwhelmed because there were so many to chose from.
I picked out a few that sounded interesting and the final choice came down to the Beginners Jam April 2024 and Micro Jam 12: Ice.
The Micro Jam seemed more interesting to me, because it takes part regularly and I was hoping that would make for a great experience with the community of the jam. Also, there are prices, but I know I’m nowhere close to winning a game jam at the moment. My goal was only to actually finish a project and to gain experience.
In the end I decided on The Beginner’s Jam (where I had 5 days to make a game instead of 48 hours) , with the option to take part in the next Micro Jam if it went well!
What I learned from the Beginner’s Jam
The theme was ‘going deeper’ which was perfect for a small game idea I had been wanting to try my hands on. I made a game where you play as a little turtle that tries to reach the bottom of the ocean to find a pearl.
My goal was, above all, to submit a playable game and to create all the visual artwork by myself during the jam period.
I quite happy with how it turned out and it was ranked 14th out of about 80 entries, which I think is not at all bad for my very first jam!
What I liked most about the jam experience is the feedback that I got. While most people liked the visuals, I had to agree on the simple fact that the game was not fun to play.
Over all I was encouraged to try again, with another objective this time: Making a game that was actually fun to play!
Micro Jam 13: theme and prerequisite
I was extremely happy to see that the theme of the next Micro Jam would be lava. I made a volcanoe themed top-down asset pack about a few months ago and I thought this would be the perfect opportunity to use it.
That way, I would have more time to focus on gameplay because I wouldn’t have to draw all the art in 48 hours but I still got to use my own art.
When the prerequisite ‘Time is limited’ was announced at the start of the jam, I was a bit dispirited. I just couldn’t think of any idea that fit the theme but did so in a creative and interesting way.
(The thing I love most about game jams is how they make you think out of the box to create something you otherwise wouldn’t have thought about making.)
On the other hand, it was definitely something I could work with, even if the game idea would not end up being anything special. So I decided to just start and figure things out as I go.
I have to keep reminding myself that I’m not trying to create a masterpiece, but a small prototype that people will enjoy playing and that I can learn from. Rome wasn’t built in a day after all.
My first idea:
I decided to keep it simple and start out with the most obvious idea: accomplishing a goal before a timer runs out. With my tileset being in a top-down style, I quickly decided to make a lava maze that the player has to escape within a given time frame.
I drew up a first idea for a level to prototype, which was surprisingly easy to do with the Godot 4 tilemap animations and autotiling. The most time consuming part was adding the colliders to my tilles so the player (at that point the godot logo) couldn’t just wander off the maze into the lava. The timer was also fairly easy to implement, so within a few hours I had a small working game where the player tried to reach the end of the maze and the scene was reset when the timer run out or the player reached the exit. At that time I was starting to have more confidence that I could actually make something fun within the time limit and I sat back down to gather new ideas.
Adding a player and simple mechanics to the game:
The first new thing I wanted to add was some kind of collectible to give the player an incentive to explore. My initial idea was to make coins or crystals and a score that would increase with every item the player collected.
I also wanted to add an animated player sprite because I was growing tired of staring at the static godot logo while playtesting.
I decided to keep things simple and use a slime sprite from an asset pack i made about a year ago. I adjusted it to fit the game better (the sprite was pink at the time which lookes horrible against the orange of the lava).
At this point, I had the idea that it could be a water or ice slime that couldn’t tolerate heat for a prolongued time. I thought this would make for a good reason why their time in the maze was limited, as opposet to some arbitrary timer counting down for no reason.
I decided to change the timer label to a temperature bar, which would slowly build up and end the game once it was full.
This also made it easy to decide a use for the collectible: it would decrease the players temperature, giving them more time to navigate the maze. I thought a small drop of water would look nice, so I drew up a simple drop in Aseprite that ended up staying in the final version of the game.
Working on the prerequisite
I also came up with some ideas to make the game fit the prerequisite better, because I found that the heat mechanic was a little too subtle. I had kept the timer and took a few notes on what could happen when the timer ran out, other that just ending the game straight away.
I thought of adding enemies that would spawn and start hunting the player down when the time limit was up, but quickly realized I had no idea how to make pathfinding work. I played around with a smaller version of the slime that was red instead of blue, and simply alternated between preassigned points. I also added the shooting mechanic so that the player could actually kill the enemies.
I wasn’t really satisfied with the result, but decided to keep them for now.
The disintegrating maze and other small things
The second idea was to make the maze fall apart after a certain time, but I wasn’t at all sure I could build a system for it in time.
I still gave it a try and managed to write a small algorithm that would start deleting one tile of the maze at a time. This was a lot easier that I has expected it to be, but I quickly ran into a problem with this approach:
My algorithm chose tiles at random, checked if there was a tile in the chosen spot and then deleted it.
This turned out to be frustrating, because it would sometimes start by deleting tiles close to the exit, making it impossible to finish the level. On other playthroughs, only tiles on the edge of the map would be deleted and the player wouldn’t even notice that something was happening. Also, it would sometimes delete tiles where I had placed obstacled or enemies (at this point, the obstacles consisted of a godot logo without a collider just to plan out the levels).
The obstacles or enemies would then just continue hovering around on lava, which looked stupid and broke what little immersion there was.
I needed a way to chose certain tiles that should be deleted, but again, I had no idea how I could accomplish this, and decided to focus onmore important things for the moment.
I then went and added background music to the game to the game and made a very ugly but functional main menu with a level selection screen. I wanted to add sliders so that the player could change the volume of the music and sound, but I couldn’t figure out how to do this quickly and decided to leave it for the time being.
I ended the first day of the jam at around 2:00 am, exhausted, but happy with what I had made so far.
A rude awakening:
When I got back to working on the game the next morning (or probably more close to noon, I slept like a stone after that long first day), I was originally planing to add a score system, polish the game and submit my entry. I knew it was nothing special, but it was a game.
When I sat down to playtest though, I realized that I had repeated the mistake from my first jam: the game wasn’t fun.
Realizing that was really disheartening, because I had actually been proud of what I had made so far.
At this point I considered just giving up on the game and submitting it, because I didn’t feel it was worth investing more time in. I went for a short walk to think things through, hoping I could figure out what the problem was and how I could fix it within the few hours I had left until the deadline.
How I made my game fun:
I realized what bothered me most was that there was no story in the game and no reason why the player would even want to reach the exit or fight enemies or collect coins from the maze. I didn’t think a score mechanic would really fix this problem, so I kept thinking about other objectives for the player to complete. Maybe the collectibles could act as some kind of key to unlock the exit. Or they could be valuablle resources like food or a currency that the slime needed to support his family. I liked the second idea because it was a nice enough explanation on why an ice slime would be running through a lava maze in the first place.
This gave me new hope and I decided to give the game another chance!
When I sat back down to work on the game, it occured to me that I already had the small enemy slimes that could be the children of the big slime that he was going through all the trouble for. And since I hadn’t liked fighting them in the first place because they were too cure too kill, I instantly liked the idea that they would be friendly instead.
I worked on the sprites for the baby slimes, thinking about how I could make them fit into the game. And then I realized that it was a really stupid idea to make the player collect resources that he would bring to the babies waiting at the exit.
It seemed much more straight forward that it would be the baby slimes that the player would collect from the maze instead of some arbitrary resource. I really don’t know how it took me so long to realize this, but once I did, everything just started falling into place!
The baby slimes would start out as red enemies, and the player would shoot them with water bullets. Not to kill them, but to cool them down so they would become ice slimes again and could be led safely out of the maze! I tested the game and was amazed by how much more fun it was now! I couldn’t believe the solution had been both so simple and so easy to implement.
Finishing up and the temptation to over scope
I decided that it was time to add some polish to the game and finish things up, just so I wouldn’t be tempted to overscope and screw up the game after having gotten so far. I added sound effects and particle effects, finished adding sprites and collision to the obstacles so the player could destroy them and the got to building the final versions for the levels.
I had some time left, so I thought I could try making a small tutorial level as well. This is something I wanted to try for a long time, so I tricked myself into believing that the game absolutely needed it.
Fortunately, people on the discord server of the jam talked me out of this in time.
The initial idea was to make a real tutorial that had pop ups and recognized when the player completed certain objectives such as destroying an obstacle or saving a baby slime. This was obviously way too ambitious and over the top for a game jam entry with very simple gameplay. I ended up making a very simple tutorial that explained the objectives and mechanics of the game through text labels on the ground that the player could read while going through the level.
This didn’t take a lot of time and was more than enough to convey how the game worked, and I’m still not sure it was a good idea to make it at all.
If you did end up playing the game, I’d love to hear from you if you actually played the tutorial and if you found it useful or at least enjoyable!
Another try at destroying the maze
With the game pretty much finished, I still couldn’t let go of the idea of an unstable maze that would fall apart, and I actually did come up with a solution for the problem I had earlier:
I added a tilemap layer above the maze tiles and a bright green tile that I used to draw over the parts of the maze that I wanted to disappear. The locations of those tiles could be added to an array that I would be fed to the algorithm I wrote earlier. It took some trial and error to get it to work the way I wanted, and I now had a simple tool to select all the tiles which would then be erased one at a time when the timer ran out. I the reduced the alpha of the green selection tiles so they wouldn’t be visible when playing the game.
I added this to all my levels and also added sound effects and a very simple camera shake every time a tile was deleted. There are probably more elegant solutions to this problem but I’m still glad I figured something out in time!
Finishing up (for real this time)
The only thing left was to make the main menu look prettier and add previews of the levels. I also took quite some time to create the game page for my submission. I made a small cover for the game and made little gifs to add as screenshots.
I know this can seem like a waste of time, espeacially if you only have 48 hours to make the game. But I made the experience that the way you present your game is almost as important as the game itself, because if you don’t present it well, nobody will even want to try out your game.
I did put a lot of effort and love into making this game and I believe the game page should represent this. After all, if you can’t be bothered to show why you think your game is worth playing, why would anyone else want to spend time trying it?
THE END!
Anyways, thank you for going on this little journey with me! It was a lot of fun and I learned a lot.
I’m also extremely grateful by all the feedback I got for my little game. It seems that people actually enjoy it and it’s much more than I ever would have hoped for when I decided to give game development another try!
Thank you to everyone who has commented on, rated or played the game, and I wish you all the best on your game dev journey!
Schwarnhild