Pod Rush : A Dash to The Exit
- Play Party (CodeBase, Edinburgh)
- Play Party (Surge, Glasgow)
Edinburgh Napier University's Jack Kilby Computer Centre, January 2020.
The last in-person Game Jam before the world changed. We would hold-off on doing in-person jams for another three years, but we didn't know this at the time of course. Why is this important? Because in-person game jams are so much better than remote ones, and tend to produce much better games.
We were an artist down this time (missing Alix from GGJ19's "Mansion Hunt" who'd achieved a 4-year-run) but Andy and I were joined by another work colleague Matt - who'd be experiencing his very first game jam of any kind.
Throughout the weekend Andy and myself would relay tales of woe (and wisdom) from previous game jam experiences. At one point, Matt started writing test classes and putting in some generic reusable code. I indicated a whole page of code could be replaced with <this awful one liner> and Matt promptly facepalmed and said "Now I understand why you say 'Game Jam code'".
Friday nearly exclusively consisted of opening speeches and some brainstorming.
Once again, GGJ provided some long extended keynotes (over 20 mins) this time with varying audio quality (muffled) which was supplemented by other speeches in-person from some local game company employees from Rockstar North. It still amazes me that companies send folk to talk who just look at the floor, read from a pile of A4 paper, and would clearly rather be somewhere else. Yeah I know it's stereotypical of the industry.
There were some common themes that almost everybody seemed to reiterate time and time again which I entirely agree with:
Throw half your ideas in the bin. Watch for scope creep. You won't have time. Honestly.
Get some proper sleep. You can't do problem-solving effectively running on empty.
Look after each other a bit. Break for meals. Stay hydrated. Let people have some down time, go rest or switch off for a bit.
Create because you want to. Have fun together. Enjoy the laughs!
Theme reveal was 'Repair' - I always prefer single word themes, not the wordy paragraphs of old (looking at you, 2014)
Team forming we skipped as we did arrive with a pre-formed (albeit artist-less) team. Not sure if this is a good thing to skip over or not. For us, we were happy enough with semi-capable 'programmer art'!
Given the extended keynote and introductory speeches, we were just keen to get setup and start brainstorming.
There was one recommendation from a speaker that stuck in our minds the strongest (and would, for years) - sticking to the 'three pillars' that you want in your game.
Three simple ideas or game mechanics that your game must have or abide by, that you want to stick to, regardless of what other ideas try to drag you in other directions. For this game, ours became:
Of the many ideas we considered and ultimately discarded, such as "bomberman style", "cooperative" or "emotional repair", none were funnier than the possibility of setting the game in space, and having a lone astronaut or cosmonaut try to repair a dying space station (such as Mir) while under the influence of 'emergency alcohol', unable to quite use the spanner or wrench correctly, by mapping the controls in an unintuitive "QWOP" fashion. See https://en.wikipedia.org/wiki/QWOP
We sketched out some ideas of how the puzzles might work - repairable terminals that had circuitry on them that was disrupted and needed to be corrected to become operational again:
Brainstorming finished around 9.40pm and we checked the diversifiers list. There was one about 'language-independence' that caught our attention - if the game should be understandable by everyone this could be as wild as we like - we could drop in some made up symbols in an apparent alien language to leave everybody equally baffled too!
A setting started to form: players have escaped some interstellar war(?) on an alien ship and need to repair some broken electronics to access the last remaining escape pod.
In a Global Game Jam first, we started a kanban board on Trello during the jam, and added a few cards to it, about player movement, controller support and a basic 2D room.
There wasn’t much code committed before Saturday morning, but remember into the first few hours of Saturday still counts as ‘Friday night’.
By 2am when we signed off and went for a sleep, we had:
- Moving 2 player sprites with 8-way movement in 2D
- Controller support and key-mapping for a local arcade setup
- Initial graphics for a main spaceship, in some kind of alien style
Someone from another team came over to ask what we were working on, and we had a placeholder background graphic of triangle shapes (for no reason) and for the rest of the weekend this guy kept referring to our ‘triangle game’.
Taking the advice of our past-selves and various speakers, we headed to a local hostel dorm for some well needed shut-eye. The thinking was simple: Saturday is the main day for doing most of the work, so best be refreshed, and not start the day tired.
This is the main coding day, because uploads on Sunday need to start at 3pm. So what better way to begin than with a Starbucks coffee and an all-day breakfast roll?
We huddled around the Trello kanban board in the morning and joked about having a standup, like a regular morning standup when the team is using the Scrum framework. This would become a running theme – joking about using agile, but in fact, actually using it extensively. (we’ve never done this before in a jam, but it worked a treat)
We started Saturday’s coding marathon by making sure everyone had one or two tickets assigned to them, something to get started on.
According to the logs, we added a basic Tiled map called ‘room.tmx’ at 10am. The rest of the floor and ship built up around 12 noon and then we split for lunch. Remember: look after yourself, and others.
We kept huddling around the one computer every couple of hours or whenever folks were running out of work, so we could do a mini standup (to the shout of ‘right, standup!’). Just helped ensure we kept the focus on the right stuff.
Impass map, collisions and animations came along by 2pm, terminals by 3pm and wire puzzles by about 4 o’clock in the afternoon. By dinner time we had the escape pod doors.
There was a lot of talk on Saturday about ‘cool’ things to work on, but we stuck rigidly to the basics, to our assigned Trello cards and tried to make sure we completed the basics, and that things were fun.
Andy would comment that the spaceship looked good, but some better lighting would really make it look awesome. However fancy lighting effects is an item for the ‘nice to have list’, also known as ‘if we have time on Sunday’.
After tea we added symbols on the terminals and pod doors that you could interact with and select, and spent the rest of the night making sure puzzles could be solved, and using these solved ‘codes’ then unlock the center escape doors. We also realised it was possible to hack the center terminal and just guess the codes, so some extra possible combinations were added to make this significantly harder.
The last few commits on Saturday up to Sunday 2.30am were spent resolving game breaking bugs, making sure that things just worked. As we tidied up and got ready to leave for some sleep, Andy and I realised something tremendous: the game was functionally complete, by the end of Saturday! And we’d spent nearly all of Friday not coding. This was surprising!
A game jam wouldn’t really be a game jam without some additional late night coding. Now we’d rejoiced in the fact the game was basically winnable and good fun, once Andy and Matt had turned in for the night, I opened the laptop in the nearby B&B and spent another hour adding the first of our special effects – a particle system with pulsing lens flare over the ship engine. It wasn’t much, but it added a lot to the overall look, as Andy had been annoyed by the initial look of the engine from the start. Finished by 4am, time to sleep.
The shine and polish.
We’d set the alarm for a little later, to give ourselves a bit more of a lie in. As Matt put it: “I think we’ve earned it!”
The first commits on Sunday were bug fixes from some early morning play-testing – for example noticing that you could escape off the ship and ‘run around in space’ with much hilarity if you simply ran through the couple of tiles that didn’t have the impassable flag set.
Just before lunchtime, some particle emitters for fires and door animations were added for a little extra flare.
With Sunday’s 3pm deadline looming, but the next thing that Andy really wanted us to try out was fancy lighting and normal-mapped sprites.
Matt and I had been telling Andy we should put this off until later because it was purely cosmetic (although a great idea if we could pull it off). The trouble was, that later date was now, with only a few hours to go before the upload deadline.
We decided to timebox the activity, give ourselves a luxurious 40 mins to try out it, then reconvene and make a call on whether it was worth pursuing, or should just be dropped.
I started dropping in the code for the shader and generated the normal maps in SpriteIlluminator. Because the ship was currently rendered as part of a Tiled map, it had layers, so we had to export each of the layers and produce normal maps for each part:
The first test of the lighting was simply rendering everything in black, and a couple of other oddities around scaling were happening. Andy and I paired up and worked through the issues, until Matt wheeled over to see how we were getting on because the time for trying it out was up. We were very close with just a little bug with light colour. The effect was superb though, and results before/after were startling, especially with a rotating (orbiting) light:
This was worth it, and was completed with only 20 mins to spare before the deadline. Andy was right to push for this effect, but I think Matt and I were also right to force it to be left until the very end!
And so began the playtesting...
Notes from GGJ20:
- This was the first time the game was effectively functionally complete on the Saturday evening.
- This was also the first time we took the time to ensure we had a decent night’s sleep (the two may be related!)
- Take your pick of various Agile techniques – as corny as it sounds, I really believe they helped us focus here.
- Combined, we have a grand total of more experience in 2D than in 3D, and it meant doing a 2D game was a lot more straightforward than if we’d attempted ‘drunk repair’ in 3D instead.
- Competitive 2-player was a lot more fun than a single player game. You also don't have to write AI behaviours. Just hand player two a controller.
- Support for the local on-site custom-built ‘arcade’ machine was a good target platform, made us think about getting different resolutions correct, and support for different control mechanisms, even if the target machine ultimately wouldn’t support Java out the box. We could always build and bring our own arcade machine next year. That’s not a bad idea...
Memorable moments from CodeBase, Edinburgh:
- People enjoying the game together, PHYSICALLY pushing each other off the chairs to delay their friend and try and get to the exit first.
- The guy that after playing a couple of games, liked it so much he took it upon himself to become honorary representative of the game, explaining to others how to play it.
- The number of people that wanted to speak with me about the game at length after playing it, asking lots of questions about how we’d achieved this or that, and what technology we used, all the parts we’d built from the ground up.
- The two friends, that after playing a few rounds, sat and scrutinised the game because they said it looks 2D but looks like 3D models have been used, because the lighting is great. It was funny to announce that this was indeed 2D, and it was programmer art, using normal maps and a custom shader for the lighting.
- Getting to play a good number of other games, including one that reminded me of Far: Lone Sails, but set in a bus, with components that kept breaking and needing repaired.
- Tom, organiser of the Edinburgh Napier jam, hearing a conversation about GGJ19’s Mansion Hunt from the year before with our custom network code and calling us “crazy”. I replied that we made it work though, we did it, and he quickly responded “yes but the fact you completed it doesn’t make you any less mad”.
- To quote one player of Pod Rush – they described the game as being “Glorious!”
- A good number of votes for the game, out of the large selection of games that were on show.
- Some great feedback about the controls, and the Atari joysticks we used for the controllers.
- A large number of people just seemed to get what to do, without explanation. The diversifier about ‘Language-Independence’ hopefully hard at work.
- More bemused faces when people learned this was a Java game. Unity is prevalent at GGJ, and other frameworks are few and far between by comparison. But libGDX + java? It’s a more rare breed.