Gardening of Pandemic Proportions

Good start of the decade, huh? In February I was enjoying a break from game development outside of patches for Gemstone Keeper, as well as spending a nice holiday in Sweden. Then March hits, and a virus that started in the Wuhan province of China spread to pandemic proportions and every country was starting to lock down and encourage people to either quarantine or distance themselves from others. For the last six weeks, I’ve been mostly working from home, my only travels are our long hikes around the local countryside and I’ve only been able to communicate with family and friends online in video calls or online games (Jackbox and Animal Crossing have been godsends during this pandemic).

It’s still a good time as any to work on some smaller games, and I’ve been wanting to get back into a few game jams, so during this pandemic, I took part in two big ones: The Seven Day Roguelike and Ludum Dare 46. This post goes over Ludum Dare’s submission: Keep the Garden Alive

Ludum Dare is one of the two big game jams of the year (the other would probably be the Global Game Jam), running two/three times a year since April 2002 (although it was announced last April to run on a fixed twice a year schedule). April 2020 would make it Ludum Dare 46, or the 47th iteration. It was also projected to the largest with over 10,000 participants.

I’ll admit I was both prepared and unprepared for this. Due to the pandemic, I was required to take four days off for the month of April, so as LD46 started on April 18th and finished on April 20th, I decided to book the 20th – 23rd off, meaning even if I aimed for the compo (which I did) I could work up to the 2AM deadline on April 20th and relax. However, it had been over a month since I last did a games jam, and admittingly my game development projects have been much slower than usual after the last patch to Gemstone Keeper. Needless to say, I powered on because I missed the last Ludum Dare in October and wasn’t going to miss out on another.

In tradition, the theme for Ludum Dare is voted for by participants. As you can see from how I voted, I was particularly keen on doing a non-violent game, gardening, dreams, outdated technology, momentum and power sources. As is also tradition, the theme that actually won out was Keep it Alive, which neither myself or a load of other devs I know was particularly keen about…

https://twitter.com/Nomaki/status/1251418721375211521

I’ve gotten into the habit of taking advantage of the theme voting rounds to brainstorm ideas for each potential theme, coming up with at least two game concepts for each one (although game concepts could also be shared with multiple themes). The best I could come up with for Keep It Alive the day before the compo started was “Fighting of viruses” and “Keepy Uppy”, both of which weren’t very creative to me. After some sleep, I kept thinking of the Garden, Side Effects and Turn a Violent Genre Non-Violent themes, so I ended up mashing those three ideas into a concept that could fit the Keep It Alive theme.

It was to be a run ‘n gun (violent genre) where you keep a garden alive by taking care of flowers (garden), and killing both weeds and bugs, which left unchecked will kill your garden faster (side effects).

In my experience with Game Jams, I’ve developed a set of rules I abide by. They have been tweaked over time, although I first wrote them down in 2018 in the run-up to Ludum Dare 43 when I made Tank Gauntlet.

  • Gameplay First – Your game might look/sound great and have a really nice menu, but it won’t be a well-built game if not a finished game if you leave it at the last minute. Have your game prototype ready by the end of the first day.

So this part was simple: Get a prototype with the idea and mechanics done on the Saturday, so the rest of the time can be focused on making it look and sound nice.

For this game, it was getting a basic platformer with three different guns, and three different kinds of objects to fire at. Flowers, which would gradually die over time and you need to spray water to let them regain health. Weeds, which appear in random locations and can only be killed with weed killer. Bugs, which can appear randomly, move in a random direction and can only be killed with bug spray.

Visuals at this stage are incredibly basic, so I used rectangles and circles, as well as a basic tilemap set I use to test the autotile functionality of the tilemap code.

  • Small Scope – My general amount of scope for a games jam is one main/unique game mechanic and two optional ones. It’s not worth putting so many mechanics and features in your game if you don’t have the time for it.

This rule was based on an old practice done by another game developer who goes by TheCherno. It’s there to make sure that whatever concept I have must have at least three things in it to be playable, and anything else can be implemented once those three are in place. For Keep the Garden Alive, the main mechanic would be the three different weapons, each would affect a specific object and each would be fired from a separate key. The two optional ones were platforming, which would involve running and jumping on floors, platforms and walls, and randomised levels for variety.

The latter one I ended up having to rewrite a couple of times because procedural/random levels are much more complex than levels with a top-down perspective, they are very much possible but you have to factor in gravity and jumping to ensure that platforms are reachable. Even after I got a manageable random level generator working, I quickly implemented double jumps to ensure all platforms are reachable.

  • Know your Tools – Don’t use software you barely/don’t know how to use, including engines. This comes from seeing many people say they’ll use Unity/UE4 because everyone uses it, despite not knowing how to use it themselves and spend more time figuring out how to get certain things working.

For game development, my go-to environment is Visual Studio 2017, writing C++ code with Vigilante, my own engine built on top of SFML. I’ve contemplated going back into HaxeFlixel, but after Ludum Dare 41 ended in disaster and what little time I took to practice, I went with something I was more confident would be stable enough to work with. Vigilante has had some updates which definitely helped. A few months earlier, I discovered an easier approach to implementing platformer physics using Finite State Machines, so being able to have the player jump, wall jump and even double-jump would be a case of adding new states or tweaking existing states, instead of the approach I went with in Tank Gauntlet of several nested if-statements and boolean flags.

I also got to take advantage of using multiple cameras in my engine, which admittingly I never tested before deciding to give every flower a camera so players could see a flower’s status when it’s off-screen, but it didn’t take me long to find out how to fix it.

For graphics, I use piskell for pixel art and sprite animations. It’s a basic web-only tool that’s very easy to pick up, set up a palette and start drawing frame by frame. I wanted to have a little bit of variety so I also took advantage of both SFML’s vertex arrays and primitive shape classes, which I ended up using for both the player’s arms/legs and the flowers.

Audio has largely been sound effect generators and the music generator cgMusic (with LMMS and soundfonts to convert them to playable audio files). In hindsight, I’ve been very rusty when it comes to audio. I gave a new SFX generator a go, SFXIA, which works pretty well although it’s much more experimental compared to the more straightforward BFXR and ChipTone. As for music, cgMusic has been a good fallback if I want something long and complex, but considering how in my much older entries such as Galaticus and Glow Drop where I actually composed the music myself, it makes me feel lazy.

  • Stick Mostly with What You Know – Trying to learn a new mechanic, genre or art style as a project is fun, but don’t overdo it, especially when you only have 48 hours. Time spent struggling or figuring out how to implement something new could be used to deliver more of what you already know how to implement.

While I should really branch out, like I did when I made two 3D first-person games back in 2018, or how I attempted a strategy game in Ludum Dare 41, arcade shooters are the kinds of games that I can set up easily so I have more time to experiment with them.

  • Make Your Content Easy and Noticeable – Don’t feel you have to put the extra effort into how your game looks and sounds when you’re at that stage. If you do, don’t focus it on something the players aren’t gonna notice. Sometimes big simple designs work better.

This was a rule I wrote specifically because in my Ludum Dare 42 entry, Closing in on Pascal, I thought it was a brilliant idea to spend five hours on a player sprite that was so small that you couldn’t see the detail. Definitely not the case for this one:

Some people have described it as being Kirby-like, although I was partially inspired by the Gyroids from the early Animal Crossing games. Simple and clear designs don’t take as long and can be just as appealing as a overly complex design, I mean one of the other entries from this jam has you play as a tumbleweed.

  • 621 – At least Six hours of sleep, Two meals and One shower per day. Don’t pull all-nighters, don’t skip or replace meals with energy drinks and savoury stuff and calm yourself down for a bit while being hygienic.

This is one of my two anti-crunch rules. Someone commented that a slight alternative is the 832 rule (eight hours of sleep, three meals, two showers), which is actually much closer to my usual work and game jam routine, although I took this rule from conventions and festivals who use it as a general baseline for attendees to stay healthy. It’s a lot more memorable to me personally, but there is an emphasis on the AT LEAST part.

  • Take a Walk – A breath of fresh air will help you think of solutions to that one bug that you cannot figure out how to fix or that mechanic that doesn’t feel right.

Fortunately, it’s one of the few things I can still do in this pandemic. I regularly walk around the nearby countryside for around an hour each day, and usually, the outdoors have been helpful for keeping me calm and not mentally tiring myself out. I’ve also been practising French as part of my daily routine recently.

  • Find a Friend – If you’re gonna go the jam route, see if you can get friends on board. If you work together it’ll be more collaborative and less pressure on you. Be sure to find a decent way to thank them after it’s all over. Even if you’re going solo for the compo, having a friend to bounce off ideas and improvements is always beneficial and eases off stress.

Thanks Kriss for putting up with me on Discord for four days. 🙂

In conclusion, a lot of my problems from this jam all involve the keyword of “preparation”. I definitely need to prepare more now. Definitely, before Ludum Dare 47, I want to at least have a better understanding of LMMS and other art tools so I could at least get through the art and sound stages of my game jams at a level I used to be at. On the technical side, I am happy with what I was able to implement, because I got to use features of my engine that I wouldn’t have had a chance to try out otherwise.

With Ludum Dare, games are ranked if they get at least twenty votes. Keep the Garden Alive was able to reach 20 votes in two days, but now I’ll have to wait two weeks to see how well it does. So far my best ever ranking was 27th in Humour, but I’m happy with any entry of mine that gets into the top 100 of a category.

Leave a comment