Earlier this year, I had the privilege of taking part in Global Game Jam at the University of Hertfordshire and as this is a new blog, I haven’t talked about it yet. I was invited by my good friend who studies there so I travelled over on his request for my first ever game jam, us two and people I’d never met before. We organised ourselves into a team, a bunch of first years and a second year (and me a third year from a different university), who were very capable. By accident, I’d found myself somewhat close to being a leader of the group, but the creation was very much something we all agreed on, by this I mean I was holding the whiteboard marker and helping the direction. We knew game jams were going to be rough, we knew that whatever we were going to do would only be half well executed, it was our first game jam after all. Even so, we still chose to start the ambitious project: Debris, a game where the player is running out of oxygen in a procedurally generated asteroid field and trying to get to a space station for safety. My role was to be a technical artist & gameplay programmer of sorts.
On an unrelated note, I messed up my timing for travel to Hertfordshire, by the time I’d got there I had probably been awake for close to 20 hours, I was running on energy drinks before it had even begun.
Debris was a very fun project to work on, in the conceptual stage we discussed many things, many ambitious ideas or the dreaded “walking sim” we wanted a happy middle ground. After the conception our idea for Debris, we were reminded of a game called Adrift by some passers by and we all discussed how we would love to play it. So in a way I guess we stole the idea, but 48 hours, could we pull it off? As artists our attention was on the aesthetic more than the gameplay and because of this it must have put a lot of pressure on our gameplay programmer, Aaron to see it through.
There aren’t enough adjectives to describe how important Aaron was to our team. There were 6 of us, but Aaron and I were the only two people on our team with enough scripting knowledge to get this game running and he was the only one with experience of Unreal Blueprints. To reiterate, without him there would be no Debris but perhaps ironically a different type of debris.
Let’s talk about production. On the first night, the game jam hadn’t properly started yet but we’d finalised our idea, the next morning with 4 hours of sleep the clock started and we began. We had decided to go with a low-poly with high quality lighting and shading, similar to games such as Flower from thatgamecompany. Asteroids were going to be made from giant triangles making them look sharp and dangerous, space station debris was meant to be floating around & we were even considering adding a space helmet to the character.
Very soon we realised our mistake with our game idea because the movement system hadn’t been implemented in Unreal as a template, leaving us in the dark about how to implement a zero G movement system. Me and Aaron spent a long time discussing and experimenting to get momentum working, then when it worked it would only work in 2 out of 3 directions. When we had the movement working, we had a new issue where if the character collided with a wall it would get stuck against it, but only if it was a wall on the z axis. Many headaches, diagrams and energy drinks later Aaron made a breakthrough and the system worked. Aaron was now free to work on tweaking the controls & working on a pickup system & the game completed.
So where was I? As I mentioned at the start I was a technical artist/gameplay programmer. At this time my programming knowledge was fairly minimal, but I’d had a lot of experience with Unreal Engine’s materials & lighting system so I spent the time preparing it. I decided to go with dynamic lighting, we had a lot of moving asteroids (more about them later), so it seemed the logical decision. We also needed to make the shadows softer to match the aesthetic we all had in our minds, so I had to implement Unreal’s distance field meshes for shadowing. Besides unwraps for baked light maps, I’ve had nothing but a delightful time working with Unreal Engine’s lighting. After a few short hours our lighting system was implemented, all that was left for me to do was create the sky sphere, ambient lighting (for fake global illumination) and create the materials for the work the artists were providing.
My other main job was gameplay programmer, so other than the movement that Aaron had tackled, my job was to get the procedural asteroid field working. This is where I messed up fairly big. Originally I had programmed it so that the asteroids were generated at construction time, not on the event tick, this was correct and I should never have changed it but at this time I must have been awake for nearing 30 hours. The problem was: I was creating asteroids and applying a transform in a loop, expecting that the asteroid would spawn with momentum, but of course that doesn’t work.
Here’s the big mistake: I moved the construction graph to the event tick. It worked! But with a massive performance sacrifice, the performance from this move is so bad I can attribute the game’s sluggishness entirely to myself and my tired out mental state. My lesson is learnt, all I had to do was target the asteroids I’d created (perhaps in a variable or as a class/object), & apply the transforms in the event tick. Also in hind sight, separating the asteroids into different groups, ones with event tick transforms and distant ones without transforms would have increased the performance several times over, less transforms = more performance.
So there you have it! The game works, albeit not very well and Debris won an award for being the most ambitious project at University of Hertfordshire’s Global Game Jam. I thoroughly enjoyed every second of it and will definitely be going again next time if I can, this time with more experience under my belt.
There was a moment in production where it seemed like we were going to complete the game with no issues. Aaron went to have a quick break and returned to find us finalising a Rockstar GTA style “wasted” game over screen. Unreal didn’t have HUD widgets at the time and scripting their HUD text was a nightmare so it didn’t make it into the final build, but I’ll never forget that moment of seeing everyone’s reactions to it’s rough implementation.