My 72-Hour Game Jam Experience

At the beginning of May, I challenged myself to make a game in only 72 hours, for a minimalism-themed game jam. The experience was a little bit stressful, but overall very satisfying and fun! I’m proud of the game I created, Wizard School Woes, and I’d be happy to participate in another similar event in the future—after I’ve had a while to take a break, at least. In this post, I’ll walk through what my experience of those 72 hours was like, which I hope will be useful information to any other developers who might be considering jumping into the same kind of challenge (especially if you’re also making visual novels in the RenPy engine). But before I get into anything more specific, my most important advice is to set realistic goals, take plenty of breaks, and don’t force yourself to work too hard if you end up getting behind schedule. It’s fine if you don’t end up finishing your project after all, since you can still learn a lot and complete it later on. I didn’t get the time to add all the features I had envisioned for my game either, but I’m still really happy with how it turned out, and I’m glad I gave it my best effort!

While I had participated in a few game jams before, all of them had been at least one month long, so this was by far the biggest time constraint I’ve ever faced. (I wrote an article about my experience in those other jams in VN Zine, which might be a bit more useful than this one for any readers who are new to game development.) However, since this jam’s theme was minimalism, I thought making a game in such a short time sounded relatively doable—I could focus on writing a short visual novel in which a blank slate protagonist just has a conversation with one other character, and it would fit the theme much better than something more complicated would. And while plenty of other game jams encourage teams of people to collaborate, this one specified that it was for solo participants, while also allowing the use of premade game assets. I’ve already released several games that I was the main writer and programmer for, and for two of those (RE:BURN and Take A Hike!) I had also primarily used premade assets rather than commissioning anything original from artists, so I figured that experience would make me especially well-equipped for this challenge as well. One thing I didn’t expect, however, was that when I joined the discord server for the jam to double-check whether they’d allow things like bouncing ideas off friends, it seemed like no one could really agree on where they drew the line on what was no longer “solo.” A few people even said that they thought having anyone else beta test your game should disqualify you. I’m used to getting a lot of general help and feedback from my friends even if they aren’t directly involved in the actual making of the game, so it did end up being a new challenge for me to try to entirely avoid that just in case. But I was still happy to give it a try, so in the couple days leading up to the jam, I looked around at some available art assets and thought up a good general idea for what I would do.

Pictured: Nightshade M. Titor attempting to disqualify me by putting his paws all over my code.

The jam started at 3 pm on a Friday in my timezone, so I spent some of that evening getting the writing started. Under normal circumstances, it’s my habit to write a draft of the story in google docs and then copy-paste it into the code later—this can be a bit of a hassle sometimes, but I tend to prefer it because of how google docs makes me confident that the file is immediately backed up. It also means I can easily edit from any device, and it just feels more natural to me to write in a word processor than to write dialogue straight into code. But since I had such limited time for this one, I decided to forego that part of my process, and the first draft went straight into script.rpy. I also set up some other basic parts of the code that first night, such as slotting in the premade GUI I was using (thanks Jaime Scribbles!), but left more time-consuming things like changing the sprite’s facial expressions for later. At the end of the evening, I had a bit of a skeleton of the game started, along with a few hundred words of a draft and plenty more notes.

On Saturday, my main goal was more writing. At the same time, I was also putting together my to-do list, which is something I always have going for game development projects—and I encourage others to do the same. I like to sort my list by difficulty and/or priority level of the tasks on it, so I’ll have one section for minor fixes I just haven’t gotten around to yet, another for bigger things to handle later, maybe one more for ideas that might be cool to implement but aren’t strictly necessary, etc. For this project in particular, I organized the things that need to get done for it to be a functional and somewhat presentable game into one section—things like coding all of the different dialogue choices—and then lower priorities that I wouldn’t worry about until the major things were done into another—things like adding music, which I actually never ended up doing. That system was a big help for keeping my thoughts in order and making sure I didn’t leave out anything important while I was in such a rush to complete the game.

One minor problem I ran across with the writing came from the lack of planning necessitated by the time constraint. I usually spend a fair amount of time plotting out the structure of my games before I get into the real writing, but I didn’t feel like I had time for that in this one. And I was writing a lot of dialogue options that weren’t exactly linear, with multiple ways to unlock various other options in different orders—not the best kind of thing to be figuring out as you go. When I reached a point where I was ready to start wrapping the story up, I realized, “Hang on, I haven’t been keeping track of all my variables that well, and I need to make sure that it’s not possible to trigger such-and-such important plot-related dialogue if you missed learning this other information earlier.” So I had to go through it all again to write down a messy chart of the possible paths a player might take, modifying some of them to make the structure a bit more manageable. But it didn’t take me all that long to do that, and it was a good opportunity to look over everything I’ve written so far. I even came up with some good new ideas when I started thinking about how to change some parts to fit everything together! So while it wasn’t necessarily ideal, and I would have definitely started out with that chart instead of the other way around under different circumstances, in this case it turned out to be alright that I experimented with making it up as I went along.

Pictured: A very professional and organized narrative design document.

I had hoped to finish the writing by Saturday night, but due to a combination of some other plans I’d made before I knew about the game jam and just generally being tired, that didn’t quite get done. However, I did get a big chunk of the writing done and figure out an outline for the rest of it, so I was still happy and confident going into Sunday. And I ended up basically waking up, eating breakfast, and then immediately finishing writing the story (close to 3k words total) even more quickly than I thought I would. So even though I was slightly behind my original plan, I felt like I probably had more energy for it because I had taken some time to do some other things and then go to bed early the previous night. It just goes to show the importance of taking breaks and not stressing out too much!

I was planning to program the sprite expressions next, but I got distracted with coding the one custom screen that I wanted for the game, which adds a header and a separate back button to the various choice menus. The back button in particular needed to be separate from the choice menu, so that I could easily use RenPy’s “menuset” feature to make dialogue options you’ve already picked disappear from the menus, while the back button that brings you back to the main dialogue menu sticks around no matter how many times you use it. That might sound simple enough, but it ended up being the first time I got genuinely frustrated with this project for a little bit, because programming really isn’t my strong suit—especially not custom screens. So I spent much longer on it than I thought I would, and then I felt bad about not having the sprite expressions done yet! The lesson I’ve learned for the future is not to underestimate how long it will take me to get a custom screen working. But when I eventually figured it out, I started to feel a bit better about my coding abilities again, and moved on some much easier tasks that went a lot more smoothly.

Because of the time constraints, I didn’t actually use the full range of what AnankeKeirin’s excellent sprite art had available for facial expressions. I simplified it a bit to make things easier for myself, only changing his eyebrows and mouth and not worrying about his eyes or most of the other potential variations. But within those limitations, I tried to change his expression frequently to make him seem more dynamic—I think he has at least a slight expression change for each of his lines of dialogue, which is some advice I picked up from a talk Christine Love gave at Visual;Conference in 2017. Once I finished that on Sunday evening, I realized that I needed to scale down some of my other goals to reflect what little time I had left. I decided to leave out music and sound effects, meaning that most of what was left to do on Monday was pretty minor polishing of the programming and visuals.

I definitely spent more hours working on Sunday than I had on either of the other days, because coding takes me longer than writing—but it also doesn’t always take the same level of focus and mental energy, depending on which part of the code I’m working on. I could definitely see how my past experience came in handy at this stage as well, because I was constantly opening up old projects to remind myself how I had done various things before. If I’d been figuring all those things out for the first time, it would have taken me a whole lot longer. So if you’re still new to programming and thinking of getting involved in game jams, I’d probably recommend some longer ones first before going for one as short as this.

I was feeling pretty tired on Monday, and also had a bit of work to do for my real job too, but I managed to put in the finishing touches in the early afternoon, before the 3 pm deadline. The last thing I had planned to add was the image for Ambrosius’s golden ring—and then I got the idea to also really add it to his finger when he puts it on in the end! I did that in a bit of rush, with pretty shoddy digital art skills. That part looks terrible at the edited image’s full resolution, but fortunately it’s scaled down for the game. I skimmed through one last playthrough and then hit the “build” button at 1:40 pm, with my cat sitting on my lap again. Then I immediately needed to hit the “build” button again a few minutes later, after realizing that I had forgotten to rename the game in options.rpy, and the files still had the working title “WizardBoy” instead of “Wizard School Woes.” Another tip I have at this point is to remember that it might take a little while to upload your build to, so don’t wait for the last minute, especially if you have a slow or unreliable internet connection!

Of course, after exporting the build a second time, uploading it, and submitting it to the jam and everything, I immediately noticed a minor thing I had meant to do and forgot. And the first friend of mine who played it got a bug I’d never seen (shout-out to game breaker extraordinaire Bishounen-P), which is what happens when you don’t beta test earlier! But it was nothing major, so I left dealing with both those things for a later fix after the end of the jam’s judging period, and took a long break. It was really satisfying to have the project I had worked so diligently on out in the world, and while I was far from the highest-rated entry at the end of judging (check out the winner, There’s Something Wrong With This World), I got some lovely comments from other participants in the game jam too! I’m even thinking about adding the features that got left out in a future update, or revisiting the characters again in another story, but I’ll see how things turn out in the future. Thanks for reading, and I hope some of my advice might come in handy! If you haven’t yet, check out Wizard School Woes, and take a look at the collection I created of assets my projects use too if you’re looking for art to use in something similar. I hope you enjoy the game I pulled together in 72 hours, and if you try a short game jam like that after reading this, I wish you the best of luck!

One comment

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s