Burning Jam

I've wanted to do a game jam for a while, so seeing that the 50th Ludum Dare was happening earlier this month - and that it also marked the 20th anniversary of the event - I decided to take part.

Game jams usually involve following a certain theme which gets announced as the jam starts. The Ludum Dare was to begin at 2am on Saturday morning, and since I was not going to start a new project at that time, on the Friday I took a look at the final list of themes that were voted on in order to come up with ideas for a few of them and hope that the theme that got picked was one I had an idea for.

The Ludum Dare typically has 2 challenges. The most strict is that the game has to be created in 48 hours, by a single person, and all of the assets had to be new. This was the challenge I was going to attempt.

The slightly more relaxed version is you get 72 hours and can work with a team. This time there was also a way more relaxed third option where you have 30 days, but I'd done Bird Game in a week so I was confident I could handle a harder challenge.

Thanks to a night of playing Human Fall Flat with the lads, I was still on my PC at 2am when the theme was announced.

"Delay the Inevitable"

Fortunately this was one of the themes where I had an idea written down. An out of control train is running along a railway network, and the player takes on the role of a train controller to make sure that the train doesn't end up on a track where it can collide with another train, or hit an obstruction. The better the player is doing, the faster everything will get, until eventually they are too slow and the train crashes.

It fits the theme. And it's simple enough that it could be done over a weekend. But I didn't like it, and came up with a different idea.

The game is set on a spaceship that has just been breached by aliens. By moving to other parts of the ship, and locking doors behind them, the crew must survive for as long as possible. There would be a counter in the top right of the screen, which also game the game it's name.

ETS. Estimated Time of Survival.

With this idea written down, I went to bed and was then in no rush to get started, since it was after lunchtime on the Saturday when I created the project.

Because I didn't want to run out of time on the Sunday and not have a front end, I spent Saturday making a main menu, with a working options menu, a how to play screen, and a records screen that displays the 10 best times that the user has survived. The options menu and how to play screen also meant I was able to put together a pause menu pretty quickly.

By the end of Saturday, I had the player character moving around and hitting collision. That meant on Sunday I had to add in the AI, allow doors to be open and shut, do animations for character movement, add in sounds, setup the spaceship, and figure out how to actually calculate the ETS.

The crew AI was fairly smart for something pretty simple. Once the player was out of their range, they would try to catch up with them by moving towards those coordinates as long as something wasn't blocking them. If they got stuck, they'd then fall back to the node network. While this worked nicely in the test area, I needed to set up the whole spaceship before I could add in the full network.

Once the player was able to open and close doors, there was a bug that allowed the player to close a door as they were moving through it and they would no longer be able to move as the door was now shut with them trapped in it. A simple fix for this was moving the boundaries, but this now meant that if the player had just walked through a door and closed it, any crew mates following them would get stuck. So the doors did a check to see if there were no obstructions before they could be closed.

Animations were fairly straight forward to create, and were good enough representations of a human walking or running in one of 4 directions. I then copied, recoloured, and tweaked these so that no crew member was the same.

90 minutes on Garageband was enough to get me some sound effects and music that I was happy with, although parts of the music got cut off because it did not export some of the held notes. This wasn't too much of an issue since I could just trim the tracks around that.

The game loop was also in - if the player was in the same room as an alien, it would pounce at them and trigger the game over screen. But I now needed the spaceship created in order to setup door triggers and the node network to tie everything together.

I was planning on wrapping things up a few hours before the 2am deadline on Monday, by finishing development at 10pm, testing both Windows and Mac builds, then uploading them and creating a page on itch so I could hopefully be done by 11pm, and definitely no later than midnight.

So far, my time estimates for how long it would take to get things done were fairly accurate. I'd allowed 2 hours for audio, and creation and implementation came to roughly 2 hours. Animations went slightly over my 1 hour estimate, but that was because I was creating variants.

Taking a food break just after 6pm, and returning at 7pm meant I had 3 hours to create and setup the spaceship. I'd already drawn the layout on paper, so I estimated I could spend an hour creating it digitally before spending the next 2 hours setting it up in the game.

Creating the spaceship digitally took a lot longer than an hour. Even after realising that it was going to take longer than planned and cutting out a section, it kept dragging on and on.

I realised during this time that I had misread the rules. While I had peeked at the code for both Halloween Game and Bird Game to remind myself how things worked, all the code for ETS was written from scratch. But it didn't have to be. I was able to reuse code, but the graphical and audio assets had to be completely new.

Although even if I had have copied a lot of that across on the Saturday, instead of reinventing the wheel again, I would still have run into the spaceship problem. I would just have had more time to be frustrated with it.

It was now 10pm and I was starting to get a headache. I thought that setting up some tiles on Saturday would allow me to easily drag them in and place them on Sunday, but the size of the spaceship meant this was a gargantuan task, and the tiles could not easily be scaled so that they could cover more surface area. It became incredibly tedious, and I was getting worked up knowing that the deadline was fast approaching and it was looking likely I wasn't going to hit it.

Since I didn't have a level editor, I was going to have to manually find the coordinates of where each door should be, the triggers on each side of the door, the collision on every wall, each node for the node network, and set every single one of them up in a code file. I had no idea how long this was going to take, had no way of automating it, and I wasn't enjoying this at all.

I had a decision to make. Continue on past the self-imposed midnight and hope I hit 2am. Or allow it to slip for 24 hours, come back and finish it on Monday evening, and submit it as part of the 3 day jam instead. I decided to work on it on Monday evening.

On Monday morning the headache was gone, but it had taken the appetite for making games with it. As soon as I encountered a problem in some code that I'd already rewritten, and in a move that I need to stop abusing, I walked away from the PC and got back into bed.

Just as I got out of bed again, the post arrived with my copy of LEGO Star Wars: The Skywalker Saga. I let that install and update while I had another stab and solving code problems, but decided to abandon that and play Star Wars instead.

I considered whether or not I was going to finish ETS. It now probably wasn't going to be done on Monday, but I could slowly chip away at it and release it in time for the end of the Ludum Dare. And when I woke up on Tuesday and still didn't like the prospect of going anywhere near it. In the eagerness to do a game jam for the first time in years, and trying to actually finish it in time, I had burnt myself out.

As well as avoiding ETS, I was avoiding working on anything else. This wouldn't have been so bad if the Ludum Dare was a weekend later, since I was going to take that next week off anyway, but I basically ended up having 2 weeks off, and then struggled to get back on a proper schedule once I got back to work.

Right now I have no desire to do a game jam again. But if I ever do, I now have a set of rules:

  • If you are using C#, use Unity
    • If you insist on using MonoGame, make or find a level editor first
  • Don't spend most of the first day working on the front end
    • You're going to argue "but I don't want to tack one on in the last 30 minutes", but just accept that a working game is better than a shoddy front end, even if the front end gets seen first
  • Writing out time estimates for things is good
  • If possible, check out the finalists for the themes beforehand and write down ideas for each of those to figure out what you are going to make
  • Don't bother doing friendly AI, unless it is vital to the mechanics
    • Question why one of the mechanics has friendly AI, and ditch it
Maybe one day I'll go back to ETS and finish it, but right now it's sitting in the Projects folder where it will gather digital dust.

Next week, I have some explaining to do.

Popular posts from this blog

Getting Started with the FireRed Decompilation

Phoning It In

Tonight Matthew, I'm Going to Make...