Witchcraft - A Jam Game

David Stark / Zarkonnen
25 Dec 2020, 1:03 p.m.

(You can play the game here.)

I signed up to the Secret Santa Jam on an impulse. I attempted to do the last two Ludum Dare jams while at home, and it just didn't work. A game jam is kind of an altered state, and to get into that state, it helps when I'm in a different place, surrounded by other jammers. Sitting at home meant I couldn't get into it.

The idea of Secret Santa Jam is that you sign up and make a game for a specific other person who's signed up. It also lasts for a month rather than just days. Having someone specific to make a game for - and to disappoint if I didn't make one - helped me stay on task.

My giftee sent me a lovely letter detailing his interests, and I suggested three possible games I could make for him based on that. He picked "witchcraft/gardening sim", which I suggested because I finally wanted to make something like the potions game I wrote about seven years ago.

So my goals were to make a game about being a witch that does gardening, brews potions, explores, and helps people. I also wanted to make it non-violent and have no failure states. As suggested in the old post, to make this happen, you'd have a magic amulet that would teleport you back if you were in immediate danger. So functionally, it's pretty equivalent to dying and respawning, but without the actual death part.

I went back and forth on the perspective for a while. I wasn't going to make it 3D - I don't really do 3D games - but would it be side-on or top-down? The original conception was for a side-on game, but I'm pretty terrible at getting side-on movement and platforms to not feel awful. And making a game about exploration with a side-on view is also harder.

I was also starting to collect ideas for obstacles for the player to overcome, and initially, most of these seemed to fit better with a side-on view, but I found ways to make them work with top-down, so that's what I went for.

Next, to ensure I didn't get too wrapped up in graphics, I went for a retro color palette, the basic AAP 16 color palette, and for a resolution of 320x240 - upscaled, of course. The weird thing is that I didn't grow up with these kinds of games. We had no TV, no consoles, no DOS, but rather Macs. So my own retro feelings are anchored in something like 640x480 monochrome - high resolution but low bit depth.

Oh, and of course today's retro pixel art is rendered on LCDs instead of CRTs, which makes a huge difference. So pixel art really is a modern visual style inspired by past ones.

I started putting together the game in HTML5, using my standard JS/canvas template. It does very little, just setting up the main game loop and a convenience function for drawing pictures. I like using it for jams because it lets me concentrate on building stuff rather than dealing with the quirks of an engine. Sure, it has zero bells and whistles, but I can just make those as needed.

Over the first few days, I put in basic map drawing, moving around, falling and teleportation, inventory, and a save/load system.

From previous bad experiences I knew that if I wanted the game to be able to save and load cleanly, I needed to put that in right from the start. Being able to just reload the game and continue on from where I was also really helped with development. The game autosaves once a second, so if it crashed, reloading would naturally put you back just before the crash happened, making it easy to reproduce and fix.

Having a quick cycle of testing and fixing is incredibly important to productivity, another reason why I like using this kind of simple JS setup.

While I was coding these first parts, I was also super super stressed because one of our cats had fallen off the balcony and gone missing. When we finally managed to find and catch him again, I was relieved but also exhausted and took a long break from working on the game. I had a cat to cuddle and bring to the vet and fatten back up. (He's fine now!)

Our beloved stupid cat Dexter, posing on the balcony he fell off of. We've now put up a net.

Eventually, with a few days left before the end of the jam, I got back to the game and rapidly implemented all the other things, like brewing, books, killer robots, more animations, a map editor, the actual game map, and so on. I uploaded and submitted the game with a solid ten minutes to spare in the jam.

It was mostly bug free, though my girlfriend did rapidly discover a technique for sliding in between wall tiles and getting around obstacles like that. Collision code is hard!

A few days after, I returned to the game, fixing some bugs and balance issues, and adding a lot more sound effects. Now I'd consider it done, a sweet little game about potions and gardening. I'm pretty pleased with it, and happy that the different format of the Secret Santa Jam helped me actually finish a jam game for the first time in nearly a year.

Play it here!