Ludum Dare #38 post-mortem
| Tags: game development post-mortems
Once again, I joined the fun of Ludum Dare, a game jam in which developers make a game over a weekend. I participated in the "compo" category, which means that I'd need to do everything from scratch: code, art, audio…
And here's what I made! Meet Terrartisan, a terraforming game you can play in your browser!
As with my other game jam post-mortems (see, for instance, The Language of the Gods' one), I will be sharing a development log, as well as what things went well, what went wrong, tools I used, etc.
If you also participated in Ludum Dare, I would appreciate if you could comment and rate my game at the website. Thanks!
Development log
Saturday
I woke up early (around 7 AM) to see the theme: "A small world". I went outside for a walk and also to have breakfast in a café –since I was going to spend most of the weekend indoors.
I like to do mind maps for brainstorming. Here's a section of it while I has having a delicious sandwich:
In these mind maps I usually note down concepts, as long as movies, other games, genres, etc. related to the theme. I decided to go for a terraforming game, in which you will control a planet and let biomes evolve. I envisioned this as a tiny, cute world inside a glass ball.
Right before lunch I started to make some placeholder art in Pyxel Edit –my go-to software in pixel art.
After lunch, coding started. I made a list of features I needed to implement, separated in "core" and "nice to have". My initial core features were:
- Place terrain blocks in the world
- Terrain palette UI
- Constraints to place blocks in the world (i.e. no flying water blocks)
- Evolving blocks depending on their surroundings
- In-game tutorial
The first thing I made was placing terrain blocks in the world. Afterwards, I implemented the basics for biome evolution: water would turn desert blocks into fertile soil.
The UI felt weird without some kind of feedback, so I generated sound sound effects quickly with bfxr.
Once I had that in place, I deployed the game online and posted the URL on Twitter for people to play, which was fantastic because I could start to see the worlds they were making! For instance:
I continued to add and tweak biome evolution rules, as well as lot of bug fixing –people in Twitter were kind enough to point out odd behaviors and bugs.
Once thing I noticed is that absolutely no one asked me how to play with the game in its current state (no indications from me, no instructions on screen… nothing), so I began to think of maybe dropping the in-game tutorial since it was time to go to bed already and I was way behind schedule.
Sunday
I managed to get around 7 hours of sleep and did the same as the first day of the jam: go outside for a walk and breakfast. This Sunday was a special day –and not only because Barcelona was playing against Real Madrid that evening!– because April 23 it's Sant Jordi (St. George) day, which is celebrated in Catalonia by gifting books and roses to your friends and loved ones.
My original plan was to take advantage of the cafeteria to do some level design with pen and paper, but decided to drop it and walk through my neighborhood instead: there were multiple people outside, and the streets were full of books and roses stands.
This meant I got home late in the morning and no level design or whatsoever, and still lots of coding left to do.
I continued by adding global stats to the world (so, for instance, humid worlds could hold more plant forms). I also created a new biome –forests!- and tweaked the UI a bit. Here you can see how I dropped the whole right area and made the canvas a square:
In the meantime, people kept sending me their creations over Twitter:
At that point I had a toy, not a game: something people could play with and have fun, but there was no goal in place. I decided to create some simple goal system for levels: player would need to get at least a certain amount of some blocks in order to complete that level. I also created two modal dialogs: one for displaying a "you won" message, and another one to show which were the goals for the level:
It was 17 PM already and I still had no proper art and no music. People were finding the game cute already, even though the terrain blocks were looking very rough and the whole background was empty… But the game was playable indeed, so I didn't worry much about it: I could always leave in place that placeholder art! (which I ended up doing).
I had one level in place, but I wanted to preserve the "free-form build" mode that people loved. I made a title screen in which players would be able to choose between those two game modes:
Afterwards, I realised that for some levels that I had in mind it would be convenient if players had a way to remove a terrain block. So I added a "remove" button to the UI. To make levels challenging, I put a cap into how many blocks of a particular type the player would be able to use in a particular level. The new UI looked like this:
9 PM and… yes, still no decent art and still no background music. It was a terrible time to do music because the game (Barcelona vs R. Madrid) was about to start and I couldn't listen to the radio and make music simultaneously. But waiting for the game to end was out of the question.
And then a small chain of bad things happened. I wanted to try a new set up for music in game jams: Pocket Operators with an audio interface. I had already tested it with one pocket operator, but not with two of then chained… and I couldn't make it work.
After almost half an hour I gave up and decided to switch to a more familiar environment for audio: Audiotool, an online DAW. And again, after half an hour with it, their servers went down and I couldn't keep on working. I lost a full hour with this! I settled to make music with Garage Band instead. It took me around another hour (I actually finished it when my whole neighborhood was choiring Leo Messi's name). I was not very happy with the song, but it was better to use that track as background music that not playing anything at all:
I was tempted to leave the game at that state and submit, but I went for a bit of polishing: I implemented a reset level button (with a flashing warning that would appear after the player has run out of terrain blocks) and added some more levels –making a total of five of them.
One cool thing about the levels is that they serve as a tutorial, since you have a limited palette of blocks to use and you are asked different types of blocks on each one, which makes the player to learn one rule for biome evolution at a time!
It was midnight, and I decided that I would add some passing clouds, as in my previous games. I thought it would provide a bit of eye candy and much-needed movement, since this game had no animations.
After that, time to upload the game to itch.io and make the submission at the Ludum Dare's website. 1:30 AM, mission completed!
What went wrong
- My initial idea had an scope that was way too large. Yes, I managed to submit something, but at the beginning I wanted to have cute graphics, some sand worms poppping out from desert blocks, maybe dinosaurs…
- I hadn't fully tested my desired setup for audio, with two Pocket Operators connected to my audio interface. I ended up having to improvise and wasting time.
- Audiotool went down. This was the first time that it happened during a jam, but I definitely don't wish to go through that again. I need to learn a DAW app I can run locally for the next jam.
- I didn't meal prep for the jam, since I had work long hours during the week. While my snacks were healthy (raw nuts, gazpacho, yoghourt) I ordered take out, which is not the best food to keep my energy levels in check.
- I missed an epic Barça victory with a goal in the last minute :_(
What went well
- I managed to cut features and compromise to have something that was playable and fun. I couldn't stop thinking on Ludum Dare #31, for which I also made a simulation game (way overscoped) and ended up with a very rough entry.
- I didn't panic and made bad decisions when I was getting behind of schedule. I think I have gotten very good at this in game jams.
- I had amazing support and encouragement over Twitter. It was very motivating to see the worlds people were creating!
- Although feature-wise this game was over scope, it allowed me to sacrifice a lot in art. This game can work with programmer's art (squares with solid colors) and people can still find it cute. This bought me time to work more on features and bug fixing.
Tools and apps
Here is a list of tools I have used to make this game.
Code:
- JavaScript as a programming language
- Phaser as the game framework
- Git and Github for version control and backup
- Github Pages to publish the game online while it was in progress
- Gulp as a task manager
- My generator-gamejam to create the initial project template
Art and audio:
- Pyxel Edit to make the art
- Garage Band to compose music
- bfxr to generate sound effects
Misc:
- Bear to manage my TODO list
- GIF Brewery to make screen recordings to put them on Twitter
- Pen and paper
Note that since I went for very crude art, I didn't need to use my Wacom tablet to draw.