That is a hashtag that trended in Canada for a little while last week – and I’m glad to say I was a part of it.
Last weekend, the Global Game Jam took place. The way it works is that at 5pm Friday (for every jam, timezone dependent), a theme is announced. You have 48 hours (5pm Sunday) to create a game that fits the theme. This can be done in teams or individually. The game jams are also set up at dedicated sites – there is no doing game jams from home. My team went to George Brown College in Toronto.
This was my first game jam. I went with my capstone group from college, otherwise known as Robot Monocle. We also had a team mate’s relative join us and do our music and sound. Together, we were Team Excelsior Techtronics, and we made a game called Insular.
Friday, at 6pm, everyone was in a room together and they showed us the Global Game Jam 2016 introduction video. At the very end of the video, the theme was announced. “Ritual”. As soon as it was announced, the hundreds of people in the room immediately broke out in conversation. The organizers quickly quelled the conversations and gave us a bit of information.
First, do not put the theme on social media, due to the time zones that did not hear it yet. Second, the designated floors are the fifth and sixth floors, and there are signs with team names set up in the rooms, so we need to find our team locations.
My team’s location was on the sixth floor. The computers provided were Macs with the option to dual-boot into Windows – which our team did. We quickly got our environment set up and began the toughest part of the jam: coming up with a game idea and the tools to create it.
We created a Google Drive document to brainstorm a bunch of ideas. We iteratively got closer and closer to where we wanted to be. We eventually decided upon having the player suddenly be on an island, and having until midnight before everything resets. Before reducing our scope, we thought it would be neat to include a bunch of hints and certain things to do throughout the day until the end goal was reached… That way the player would develop a sort of “ritual” of things to do as each day goes by. Unfortunately, 48 hours isn’t nearly enough time to do something so elaborate. In the end, we got three rituals that need to be completed before a portal is lit up and you walk through… and the game exits. Congratulations! You managed to escape the game!
We decided to develop the game with Unity. None of us really knew how it worked except for an assignment we did in college, so much of the weekend was spent learning how the tool worked rather than pure content creation. Nevertheless, I’d say the weekend was quite a success. I hadn’t had this much fun programming in a very long time. I got to create some really neat functionality. For example, I created a time controller that was responsible for keeping track of the time of day – but it also supported having a list of time-triggered events through an implementation like the observer design pattern. Essentially, it was a list of objects containing a condition (a Func<bool>) and an action (Action). Any other class that wanted a time-triggered event could easily add one to the list.
I also implemented a neat generic ritual queue base class that supports a queue of GameObjects (which is the base class for all Unity game objects). The first sample ritual was circling a tree – which involved touching three invisible triggers. Each time you would hit one of the triggers, it would send itself to a central ritual controller and add it to the queue. Once the queue is filled, it cycles older items and calls a function to see if the condition has succeeded. For the tree-circling ritual, for example, it looped through the queue (which contained only the last three triggers) and ensured they were in the correct order. While this ritual was removed, a similar one was added with seven triggers.
All of this code is on GitHub at this repository. If for some reason you’re interested in seeing only my commits (which, might I say, has the coolest code), click this link. All of the code is in the Assets/Scripts folder. The Audio folder contains audio management scripts, which make use of the Observer-style pattern time controller. The Ritual folder contains all of the code needed to perform the rituals and to win the game. Outside of these folders include the time controller and various other useful scripts, such as the game reset at midnight, the player drowning, and the code responsible for moving the sun.
We also used Pivotal Tracker to keep track of the tasks needed to be done. It’s public and can be seen here. Be sure to click the Done link on the left to see all of the tasks.
After such a pleasant experience, I do hope to participate in the Global Game Jam next year! A big thanks to the organizers at George Brown College!