Humor is Serious Work: My Ludum Dare 47 Postmortem
The 47th installment of the world-famous Ludum Dare game jam competition is complete! As recreational jammers polish and upload their projects, I’ve been hanging around the site and reflecting on the experience. In the spirit of the postmortem tradition, I wanted to share a bit about why I participated this time, what went right/wrong, and a few lessons I learned over the weekend.
Why it's unusual for me to jam
It’s worth starting with some basics about me, what I do, and why it’s unusual for me to participate in game jams these days. I’ve been a software developer professionally since 2005. Most of this was not related to video games. I’ve been an absolute video game fanatic since I was about five or six, but I’m from the US Midwest, and the best way to get into the game industry around here is to move out of the time zone. Instead, I’ve paid the bills by working for startups, retail corporate offices, and government contracting companies, all of which are much better represented here in the Greater St. Louis, Missouri area. To stay involved with games, I’ve done game jams and indie development even longer than I’ve coded professionally.
In the last five years I’ve left traditional employment to go full-time indie while taking care of my son. I have a more flexible line of work than my wife, so it was an honor and a fantastic opportunity for me to go support the family while taking a run at my dream job. Making any money whatsoever doing this is—well, if you’re reading this, you probably have some idea how difficult it is. My solution was to pick up steadier work in games journalism where I was able while trying to keep up with family duties and continue game development. As part of marketing myself for this new role, I started my shop talk site, CodeWritePlay.com, and eventually launched the companion podcast, GameDev Breakdown.
The podcast features a combination of industry news, development talk, and interviews with movers and shakers in the industry. During the lead-up to a different jam, I did an episode called The Trouble With Game Jam Culture in which I shared some thoughts on why I felt that participating in game jams in general eventually leads to diminishing returns. I’m far from anti-jam; I mostly wanted to encourage jammers to get their feet wet, learn some lessons, and then tackle larger, more shippable projects so they could get a feel for the later phases of the process, develop polishing skills, and feel the incredible rush of shipping a real game and putting that official “game developer” title next to your name.
This was more than just a topic for discussion. Having completed a couple of solo jam entries in the past as well as several team entries with college buddies, I eventually moved on to more ambitious pursuits. I shipped my first commercial game in 2017, then went on to doing small game projects to order on Upwork. Eventually I crossed paths with another Upwork developer from my area who invited me to do freelance projects with his newish AR/VR studio. Since then I’ve helped him hammer out Unity work for Lenovo and an educational start-up, and we’ve provided estimates for tons of others. It’s been fascinating and fun, and I’m incredibly proud of having found a way to generate some income doing what I’m obsessed with.
Needless to say, many jams have come and gone since then without my even noticing. I’m not sure why I even clicked on a tweet I saw about LD47. It may have been just to see the theme and the keynote for old times, or it may have been related to the writing grind I’ve been on in anticipation of my upcoming book, an as-yet untitled set of transcribed and edited interviews with game creators. For whatever reason, I saw the theme, “Stuck in a loop,” and I decided I had something to say about it.
On being “Stuck in a loop”
Some of you will recognize this is not much of an exaggeration. While I don’t especially care which annoying words are in an advertisement, this “everyone must be stupid” philosophy has spilled over into the actual feature design. I recently saw an ad for a 3D knot-untangling puzzle app that looked like it might actually be compelling if the puzzles were clever. Instead, the average puzzle required touching the screen in about three places and watching two advertisements before starting the cycle over again. This is becoming the rule, not the exception.
Let’s talk about another way to appeal to stupid people: titty RPGs.
This may not be the most popular argument I make here today, but overly lewd content in games is weird to me. It’s not that games aren’t for adults too, but we tend to learn about games as kids. Sexualizing it creeps me out. If you want to make an argument about violence being in the same category, I tend to agree. In general I don’t play a lot of super-violent games. It’s just not the frame of mind I want to volunteer to put myself in. I’ve never criticized another adult for playing games like this in my life, I just generally want to find an interesting challenge or play something more likely to make me laugh.
There’s an additional social element to the lewdness issue. People play games in public, on breaks at work, and hanging out at family dinners. Even if it earns a bunch of curiosity downloads, I can’t get on board with the wall-to-wall giant cartoon boobs plastered all over everything in a fantasy setting these days. If this was a weird niche thing, fine, but even Nintendo has a foot in this door with one of their few mobile games already. I’m not into it.
Finally, mobile design is pushing into weird territory lately where designers are increasingly just straight up offering to trade you in-game currency in exchange for actual minutes and hours of your mortal life. I’m looking pretty squarely at “idle” games when I say this. I’ve played a few, and I appreciate that there’s a small management skill component to the less shameless titles, but why should we tolerate this kind of non-experience?
While doing one of my many App Store checks for the upcoming Diablo game recently, I checked out a few games that were clearly vying for the Diablo audience. What I found was several games that do let you build and customize a character who will run around dungeons and loot, you just won’t be controlling the character in any way. One of them was incredibly built-out, featuring seasons, challenges, and you could join actual guilds with other real people, just none of you would actually be doing anything. It’s like a simulation for actually playing a video game. Meanwhile it has all the trappings of other terrible mobile games: loads of ads, mechanics in place to arbitrarily limit how much you can play (or watch it play itself) and of course, in-game currency you can conveniently load up on in exchange for your real money.
I argue that if you play these games, you are stuck in a loop. There’s a very good chance that the game you’re playing is also a short and relatively meaningless loop, but the process of playing it is definitely short, repetitive, and meaningless. My jam entry idea was to create a very small game and load it down with jokes about the worst of modern mobile gaming.
An agreement with myself
If I was going to start this, it was also very important to me that I finish it. I’ve started numerous jams since my son was born, and before this weekend, I hadn’t completed one. The results were all huge wastes of time. I’d be happier simply acknowledging I didn’t have time than to sink 9 hours into something over two days and have nothing to show for it. Again, I’m more than halfway through writing a book. This sounded like a nice little break, but not if it was all just going to sit secretly in Dropbox until I delete it. Provided I could finish a little game inside the compo timeline and it didn’t interfere with the family or my other responsibilities, bring on the jam.
My Day 1 was Saturday because Friday night I went to bed still not totally sure I was going to do the jam. On Saturday morning I booted up Unity Hub to start a new project.
Unity has to fix this. If you’ve never seen it, I’m happy for you, but the forums are overflowing with people so used to this problem that they revisit the same thread every time they update the editor to see which workaround will get them back to work this time. As best I can tell, Unity has some way of corrupting the the data file that contains information about your window layout in the editor. The problem with this dialogue is that any time I’ve seen it, every option just leads to another error and you can’t open your project at all. Updating doesn’t fix it, reinstalling doesn’t fix it, and threatening to never use Unity again does not seem to fix it either. About the 11th workaround I tried on the forum worked. It involved copying a clean data file from another project after opening the previous project, resetting to the factory layout, and performing a short seance in the backyard.
Once I had Unity under control and a project started, it was time to start creating assets. I’m not a super gifted artist, so I rely a lot on my tools to cover my sins. When I shipped my first commercial game, I learned a dirty secret: vector graphics tools don’t require you to have a ton of control over the lines and shapes you draw—at least not on the first try. Drawing in something like Inkscape or Affinity Designer (or Illustrator, but who has that kind of cash?) allows you to drop whatever ugly basic line, shape, or points on the page that you want, then using the node tool you can push and pull corners and edges until it looks exactly the way you want it. With enough stubbornness on my part, this allowed me to create graphics from scratch for my mobile game that received pretty high praise. Naturally, drawing vector graphics also allow you to scale assets up and down infinitely and export them with pixel perfect clarity in any size. I work on my drawing all the time, but this will probably always be my go-to technique. Gifted artists would be able to create even better content than I could this way, naturally. If you haven’t tried it, you ought to!
I like to create one Inkscape file at my game’s intended resolution and mock up the play experience while I’m drawing. This really helps get a better feel for appropriate scale, color relationships, and as much as I’m capable of such a thing, pin down an overall style for the art. There are a number of bonus benefits here. You can quickly reuse shapes and colors from assets you’ve already finished. When the game is done you can very quickly create cover art at all the various resolutions you’ll need by simply changing the document frame size, dragging whatever assets you want into the frame, and exporting to a new PNG. It’s pure win start to finish.
Back on the Unity side I made a critical error very early on: whereas I may have designed a typical game at 1280 x 720 resolution, this was a space shooter, so I flipped the values and designed at 720 x 1280. That’s too tall for almost anyone’s computer, especially in a web browser. It was very easy to ignore in Unity where the debug player automatically scales down as needed. Deep down I knew this was an issue, but somewhere in my head I was thinking, oh, I’m pretty sure there’s a way for that to just scale down as needed in the browser. Yeah, not really. An early commenter said “I have to wonder how big your development monitor. I actually made the game on my Surface Pro, so not that big at all. I’m lucky everyone has been able to figure out scaling out or going into full-screen (where it does actually scale pretty well), still, sorry all.
The rest of day one was filled with non-humorous technical game development. I didn’t do much here that would surprise anyone who knows about Unity basics. It’s a simple 2D project with a ship sprite that strafes left and right based on the “Horizontal” axis input value times a speed set in the editor. I was very happy with the scrolling star system. That’s Unity’s default particle you’re seeing, emitted downward from a rectangle area about the width of the play field, tweaked so that something like 15 particles live long enough to travel off the bottom of the screen. It felt like a nice blend of ease and efficiency and it looked as good as anything I would have taken time to make and animate. Asteroids and coins were movement and collision at their simplest. More early feedback rightly pointed out the collisions feel too touchy. This is due to a 2D box collider around the furthest corners of the ship that takes up much more area than the actual ship does. Sorry again! Chalk it up to more satire of bad mobile games, even if I didn’t exactly plan it that way. By quitting time on Saturday, I still hadn’t quite finished the technical parts of the game that would allow me to put in the ha ha parts. I was a little concerned I might not have time to finish, but if it turned into a jam project instead of part of the compo, I decided it wouldn’t be the end of the world.
For all my planning, we were still approaching lunch time when the basic loop of the game was in place and I was a bit more free to start putting the fun stuff in. The first moment I suspected I had more hours of work in my To Do column than hours left before the deadline, I paused to prioritize the list. I dragged items to the top of the list in order of importance, being careful to put interdependent items together in the correct order to avoid any temporarily game-breaking changes. I’m happy to report that, for once in my life, this strategy just simply worked. There was a good amount I would have liked to fit in, but triaging features allowed me to stop with a playable game that people called “polished” at 5 PM.
Shortly after noon as I was working on some of the LOL parts, I started to explain the concept to a close friend over Discord. This was the first time anyone outside my brain learned about this undertaking, and he was very supportive, but I got the vibe he was a little confused about the idea or why I wanted to do it. This was the first moment I stopped to mentally explore the possibility that absolutely no one was going to understand this. This is largely an audience of PC and console developers and others who aspire to be soon. Would they get these jokes at all? Would they assume I was earnestly striving to simply do more of the things I was putting on blast? If you didn’t get the jokes or simply didn’t care for them, I’m betting the rest of the game would seriously piss you off. I had growing doubt in my mind but I was effort-committed and I had to move forward.
As I started making the joke ads, more jokes started coming to me. A floodgate opened somewhere in my mind. I could have filled a much larger game with commentary than the one I created this weekend. I showed some of the work to that friend and I think he started to get it, though I could tell this hadn’t really grabbed him. He’ll feel terrible if he reads this. Don’t feel bad, man. You were very supportive anyway, and this is something I had to do even if it was just for myself.
I never reached a state of panicked rush for this project, but the afternoon stayed busy through the deadline. I finished navigation between scenes about 14 minutes before 5 PM. Setting up pages for both Itch and Ludum Dare takes a little time, as does the web build process—especially when you have to do it twice due to the compression bug—So I finished setting up hosting and the entry went live at about 5:30 PM, halfway through the submission hour.
Lo and behold, people got it right away. Early comments praised the humor, commented that the game’s polish stood out, and one fellow jokester even played along with one of the game’s jokes in a way that would likely draw other players in to fall for it. This was the right material for the right audience after all, and players seemed to enjoy being in on it with me. I can’t adequately describe how rewarding that felt, and it stands apart from most other achievements in my relatively low-profile dev career. Thanks to everyone who’s given me a shot.
Why parody games are difficult
What went right
While it takes everything coming together just right to complete a playable jam entry, I want to take inventory on just a few things I need to take with me into future projects:
- The art style I came up with for this project seemed to be high enough quality to satisfy players without requiring an amount of time and effort from me that would cause me to miss the deadline. On a bigger project I can add time and detail to this workflow while hanging on to the convenience of what I did here.
- Adding behavior scripts to the end of animation routes in Unity was the most helpful thing I wasn’t previously doing. It’s a little bit of a risk to start doing something for the first time during a game jam weekend, but this risk paid off huge. I wasn’t doing anything extraordinary with them, but asteroids and coins both had animations play when they collided with the ship, then I needed to perform tasks like implementing quantities, triggering game manager events, and destroying game objects. It’s infinitely better to fire these events after an animation on completion than to try to time it right blindly from another script.
- I’ve put a lot of time into understanding and making the most effective use of Unity’s canvas UI system. This is the first project where I used it to better effect than I have in the past. Not only did I have a UI that appeared as expected in the final product, I figured out how to configure it so that it actually appears over the scene in the editor during development instead of floating in outer space at 100x scale. I have literally no idea why this is the default configuration or who it helps.
What went wrong
- I ran out of time for audio and additional mechanics. I would have loved to put in more ads and other jokey features. I knew the project had to stay small, but I’m sorry I didn’t get to work on any audio design at all. As with many game jam issues, this was a scope management problem.
- I need to give more thought to ideal resolutions at the start of a project. I’ve always had this issue. It’s a product of not getting enough projects to the finish line. This was a silly mistake, and I’m lucky it hasn’t kept anyone from playing the game.
- I’d take back a design decision or two. The biggest one was I started with separate speeds for the coins and the asteroids. I liked the gameplay better when the coins were a little slower than the asteroids. It required the player to make constant little adjustments and reassess danger constantly. Eventually I changed the coins to move at the same speed as the asteroids, thinking it would be closer to player expectation if everything moved at the same speed. This also meant if a coin spawned attached to an asteroid, it stayed that way. That was one of the primary player complaints, all because I didn’t listen to my initial instincts.
Solo game development inherently requires an interesting blend of “left-brain” and “right-brain” activities, and this project felt like it favored the creative side even more than other projects I’ve done. I realized that the deadline required me to make sure the technical and creative sides of the project progressed at roughly the same pace, or the final product was going to be way off balance and either wouldn’t make sense or it would frustrate players. By the time I did the final build, I’d become pretty comfortable with this. It’s not a bad way to do things.
I’m still considering an update or two for the game to bring it closer to what I initially envisioned. This would really include those purchasable store features and they would indeed enhance the play experience for an imaginary price. It was kind of interesting to create a game that had a kind of score that continues to grow over multiple play sessions and it would be rewarding to put that to use as planned. There’s no real endgame for the project. It would cost actual money to put it out on mobile devices and I couldn’t recoup any of that money without doing the very things that inspired the game. I’m happy enough to take the lessons learned on to the next project—I’d sure like to get something playable on consoles before too long.
Congrats jammers. See you around the web.
Get Loopsed in Space
Leave a comment
Log in with itch.io to leave a comment.