It was a weekend of major milestone firsts. I made my first publicly released game - Plague Machine. It was the first time I participated in a game jam and a Ludum Dare. It was the first time I had really thrown myself out there to criticism from the general public. Luckily, the LD community is extremely supportive, I learned a ton, and it was a great experience. I wasn’t really sure what to expect going in, but here are a couple of tips and the associated war stories that I wish I had read somewhere before I started and that could be useful for future first timers. If you haven’t heard of game jams or Ludum Dare, I suggest checking out their website for a good overview.
A screenshot of my Ludum Dare 44 entry - Plague Machine
A quick overview of Plague Machine: You are a witch doctor who owes their soul to the Devil. He comes now to collect but you’ve made a deal with him: Sacrifice other peoples’ souls in place of yours. In order to live as long as possible, you must release a plague onto the world which feeds your health. Each round of the clock, the Devil steals a bit more of your soul.
Cities has different characteristics and populations counts. Each City has weaknesses that can be exploited through careful positioning of your plague Spores and by upgrades their potency through Mutation purchases. The game is part simulation, part RPG, and part Mancala. All the coding was done in Unity and the art in Photoshop by me over about 55 hours (spoiler - I didn't make the Compo time cutoff).
What I did pretty well - Account Preparation, Dry Run, and Cheatsheet
Sign up for an LD account, sign up for a Itchio account, and sign up for a Git account well ahead of time (2-4 weeks). Play around with the websites and understand the workflow of creating a new game page for LD and Itchio websites. Review their markup syntax for your posts. All these steps are simple but you don’t want to waste 10-20 minutes for each of things things when you’re on the clock. I’d suggest even building a dummy game - it can just be an empty scene with some text in it - and uploading it on the Itchio website some time before the event just so you can get the feel of how long uploads take, what it looks like on the published page, and what all the publish options are.
Itchio has a command line file uploader called Butler that, after the first upload, will only upload files that have changed or that are new. I planned on using this for the LD weekend, but I hadn’t tested it out. Turns out, I had no idea what I was doing even though I swear I was following the instructions perfectly. I spent probably an hour of perfectly good LD time reading the instructions and trying to get Butler to upload my game for the first time. I had installed the program and logged in before the event started, but when I finally needed to DO the actual THING, no bueno. So, I had to do it the old fashioned way and uploaded a zip file through their website every time I wanted to publish. Sure, it only takes 1-2 minutes (based on file size), but it wasted enough of my time to be a frustrating. Solution for future LDs: Do some dry runs using Butler and then write out a cheat sheet of exactly how I got it to work. Save that cheatsheet for later.
Know what resolution and platforms you want to use for your game. I had read that the preferred resolution was 400x600 - especially if you are planning on trying to capture mobile LD users. So, as I built my game, I had hard coded all my menus and fonts sizes with that in mind. Then when I went to publish for the first time (on Saturday afternoon) to Itchio, I ran into an annoying wrinkle. The uploaded Index.html file that Unity creates made the Itcho.io iFrame orient the game with an offset on both the x and y axis. Of course, I didn’t realize the Index.html file was the issue right away and spent a good hour or two trying to figure out if it was the WebGL build or Itchio or something that I needed to program differently or what. After finding out what my problem actually was, there wasn’t a quick option to change to the offset. Turns out that I really only need to modify the Index.html file with some additional CSS to counteract the nudge with a nudge in the equal and opposite direction. However, I’m pretty rusty at CSS and, it - of course - took longer than expected to figure out. Solution for the next LD (and for those of you who are interested in a quick fix): I’ve added the code to my Github . It’s not perfect, but it will get the job done.
If you’re going to participate in the Compo part of the competition, make sure have a Git account and know how to set up a Git Repository. This step is a requirement for Compo submittal and I just blew it off as a 5 minute action item. I made the mistake of saying “oh, I’ll figure out how to do that when I’m about to upload it. No big deal.” I was wrong. Git Repo uploads of existing projects and command line usage have always been my Achilles Heel and by the time 45 hours had flown by, my mind was shot and I literally couldn’t be bothered with figuring it out when I had a bunch of content I still wanted to add anyway. I kept pushing it off and pushing it off and then I was at the deadline with no Github repo to show for it. So much for making the Compo deadline. Solution for the next LD: Create my Git Repo IMMEDIATELY after settling on a game name. Copy another project’s .ignore file. Done.
I’m no artists, but I was actually pretty proud of what art I cobbled together for this came out to be. Normally I stick to squares and circle. It’s definitely my biggest gamedev gap. I knew the art had to be simple and legible. Flat art has always been an interest of mine, so I watched some tutorials and found out it’s actually not THAT hard to get a halfway decent landscape. This fit perfectly with what I was going for. Solution for the next LD: Learn more about flat art workflows and maybe dabble in some pixel art.
What I did a good job at - Take care of yourself and your time
I made sure before the weekend started that I had all the food and coffee I needed for the weekend. My wife was out of town so I was fending for myself. I had sandwich ingredients, my french press ready, and the pizza place on speed dial. Now, I know sandwich meat and pizza aren’t exactly the healthiest foods, but, in a pinch, I’m not too worried about it. Better than not eating at all…
48 hours seems like such a short time and like you can stand doing anything for that long - especially if it’s something you’re really passionate about. However, if you’re like me and just a hobby gamedev, it’s probably best to not sleep, starve yourself and burn yourself out. I’m not your mom, but go to sleep when you’re tired! I stayed up until about 1 am the first night (clocking 5 hours of brainstorm and coding time) and then woke up at 8:30 am to make my coffee and start day two. Every hour or two I would take a 15 minute break to let my brain relax and to regroup. While eating, I would watch an episode of something on Netflix or watch some Youtube videos on completely unrelated topics. This really helped me reset my thinking and bring a fresh mindset to any coding issues I was having. I went to sleep at midnight (after 15-16 hours of gamedev) and got up around 7:30 am to finish the last day.
Sometimes, you just have to know when to throw in the towel. As I mentioned earlier, as the deadline approached for the Compo, I didn’t have my Git Repo set up, was missing a good amount of art, and had a handful of bugs. I really wanted to make it, but I decided it was better for me to just take a step back, a deep breath, and pat myself on the back for the hard work I had put in. I changed my plan, opting for the 72 hour Jam event instead. I ended up watching Game of Thrones and going to sleep early so I could wake up Monday morning before work and fix the last handful of action items on my list. It was definitely a bitter sweet choice to not do the Compo - I was so close! But that’s what the next LD is for! Something to shoot for.
What I did a poor job at - Scope, Game Balancing, Reviews and Updates
Having never coded anything under such a tight deadline, I wasn’t quite sure how many mechanics I could put in my game. I knew hand-making tons of assets wasn’t going to work. Random generation seemed to be the key but there were still some unknowns. Plus I wanted a whole RPG style purchase/level up mechanic to allow for some player creativity and desire to come back to play the game. Turns out that I bit off a little bit more than I could chew and the game suffered because of it.
I used a generated cloud image with some filtering from Photoshop for the world creation. This worked pretty well but I had never sampled images in Unity before, so that was a bit of research time. And there was still the issue with how on every Nth play, the randomly generated world was sometime like 90% water which makes for a very confusing first screen if you don’t see anywhere to interact with. I also used population curve equations and derive my own from those to determine how quickly a City would reproduce or die. In general, it was the right approach, but I overcomplicated it with a few too many attributes for both the Cities and the Plague stats. Random generation is good, but you still have to know HOW random...which I found out is the hard part.
With all the mechanics and City/Plague stats, it was nearly impossible for me to cleanly balance all the values. It was difficult to get reasonable tuning for what exactly was affecting the the birth/death equation even though I could see the math right in front of me through Debug logs. I did what I could but with all the other polishing, tutorial, and general bug fixes, gameplay balancing was put on the backburner when it was “close enough.” Unfortunately, that means that the game was still pretty unfair and didn’t make it especially fun. Next time, I’ll be adding one mechanic at a time and tuning it so it’s fun before moving onto the next one. Also, give yourself about 2-3 hours of cleanup time for final deployment, updating your Itchio and LD websites to make it more attractive to players.
- I’ll admit it: once I published my game, I was pretty over it. I didn’t want to think about bug fixes or balance updates or playing other people’s games. I just wanted to think about anything not gamedev related (hence part of the reason why this blog post is coming out a month after the LD event has ended). I took a day or two off from LD completely but I did want to get to the 20 reviews which allows you to see your average score from other users. I’m big on quantitative feedback, so this goal was pretty important to me. In order to get 20 reviews, I reviewed approximately 20 other user’s games. It took me a week or two, but I did end up reviewing enough to get over the line for a final score. Those scores came back with the highest of 372nd on Theme, the lowest 1088th on Fun and an average of 673rd. There were 1817 Jam submittals so I fell in the top 20-60% with an average of 37%. I'm pretty happy with those results considering the game wasn't near as fun as I had wanted it to be. The hard thing about a game jam is that you better have a good, fun game mechanic from the get-go because you don't have time to pivot. I guess that's why so many people do rogue-like dungeon crawlers or platforms - they know those types of games are familiar to the audience. The other thing I've learned about the reviewing is that I was being MUCH more generous on my ratings than other people were. For the ones that were even remotely polished, I was giving 4.5 and 5 stars. Next time, I'll try to line up with everyone else's grading method.
What’s awesome about LD is seeing just how inventive and entertaining the other participants are. I was in my own little world for ~55 hours but so were tons of other people. So much blood, sweat, and tears go into these events, and it’s such a cool experience. I encourage anyone who is even mildly interested to give the next LD a shot. Hopefully my postmortem will help guide you to a successful entry.