Small Project: Voices of the Past
 
Update: Voices of the Past was awarded "Best Use of Theme" (read more here)


Last weekend, I had the pleasure and pain of attending what may have been the first public game jam in Tasmania, TasJam. For this fairly small and moderately insular state, it feels like a massive milestone, and it's nice to have taken part in this inaugural event.

Copies of our 36th hour build can be found over on itch.io, along with any future updates we do to the game (there might be some additional post-jam builds going up over the next couple of weeks to tie up some loose ends).


Below I'm going to share some thoughts on my experiences. It's worth noting ahead of time that I developed a severe migraine partway through the first day (that is only now starting to subside) which may have influenced my perceptions of the event.


Pre-jam

I first became aware of the event after reaching out to Jason Imms, a Tasmanian based freelance writer who had been looking to connect with local game developers in the hopes of setting up a local game development society. At that point, participating seemed worthwhile. I wasn't aware of any other computer game developers in the state, and the opportunity to meet some faces (on top of the opportunity to make something!) seemed worthwhile.

As mentioned during my SLUDGE article, I'd been intending to poke around with the Godot engine for a while, and though other commitments kept me light on the ground time-wise, I did manage to spend a full day poking around. On the surface, it seems powerful, and fairly mature. Its ways of doing things aren't intuitive to me though, and its documentation can be a little sporadic. After half a day of bumbling around, I pulled in a friend with a little more experience to offer some advice (thanks Her0!). I do know that there's an IRC community and further resources I could have drawn upon, but a few directed questions at a person I know felt like the best way for me to get the insight I needed in the form I wanted.

In the end, after struggling to find anything in the way of convenience methods for applying force along a rigid body's local axes without creating a mess of "spatial" node hierarchies, I decided that Godot needed a little more time to master than I had available before TasJam and opted to focus on making something with Icicle (the Winter's Wake engine) instead.

The advantages of Icicle over any other engine is that I'm intimately familiar with it, and when it comes to something with tight time constraints, knowing that I'm fixing my own bugs when hurdles arise rather than working around someone else's is a lot more comforting. Having another use-case for Icicle also offers some opportunities for improving the engine and discovering project-specific bits and pieces that might be hiding in there.

After hearing about TasJam, Henry (my Dad, who is contributing some additional programming to Winter's Wake) and Mim (my partner, who did character design and animation for Above The Waves) expressed interest in being involved. Both seemed to be hinting that they'd be interested in taking on roles different from the ones they've had on previous collaborations, so after a little discussion, we threw Mim into the lead writer's chair and had Henry look towards musical composition and sound design, while I focused on engine development and project management. One nice thing about we three as a team is that we all have some vague experience with visual art, music and storytelling - that kind of overlap on this kind of project would allow us to assist each other in any are without too much hassle.

We knew ahead of time that TasJam's theme would be "voices". Since an additional secret second keyword would be announced at the event, we opted to not think much about the kind of story we'd make. I spent the few days leading up to the jam focusing on implementing some in-engine object positioning features (it sounds like this is at odds with some of the philosophies I've talked about in previous Winter's Wake dev streams, but I'll address that in a future post at some point).

These editor features gave me an excuse to start abstracting out input and begin migrating towards a unified input state flag rather than juggling a stack of separate variables for cutscenes and menus and being paused and stuff (the menuing system is really, really quicktempbad code :D ). This also is a key step towards finalising HMD implementation, which was something else that I was hoping to get into the game.


Making Voices of the Past

We were running a little late on Saturday, and when the 9:00am start rolled around, we were still setting up computers. An additional theme word of "access" was added, apparently with the hope of encouraging participants to explore the ways that a person or people's voice(s) could limit or grant social access depending on who they were.

We took an unfocused approach to brainstorming, sometimes lingering on plots and premises, other times lingering on execution and mechanics. Mim put forward the idea of a central hub location where gateways into different stories/voices/narratives (scenes) could be exposed. There was a bit of back and forthing on whether these separate narratives should be composed around a central theme. At one point, random people at a bus stop was suggested, at another, refugees in a detention camp with varying drives/motivations for seeking asylum. With things a little noisy in the jam venue, we went out for a short walk and continued brainstorming, eventually settling on the idea of having the central hub give aspects to different memories of a single person's life.

A few things felt like they clicked into place. An older person's life has more memories in it that we can explore, many older people have difficulty accessing their memory, many older people find it difficult to feel "listened to". With these thoughts bubbling, we headed back to the venue, where I worked with Mim to start to iron out how the hub area might be represented (a room in an aged care facility), and explore some of the possible memory scenes we could aim for. Henry got to work composing something "whistful".

We continued onwards, me moving on to focus on adding the some of the game's scenes and populating them with placeholder objects. As soon as we nailed down our list of memory scenes, Mim and I worked on a puzzle dependency chart (attached to this post) that made us feel that some level of gating would be more worthwhile. Guiding the player's exploration of the protagonist's life felt like it gave us the opportunity to have some more meaningful pacing, while an entirely non-linear hub approach felt a bit more disorienting.

We went over a couple of iterations for the music, which evolved into a sort of dissonant, slightly-out-of-time-and-tune piano piece that felt like a good fit for some of the dementia connotations we had floating around.

The story started to become coherent as the protagonist's character and life gained definition. We found that we were telling the story of a woman's discovery of key events from her life and her current identity. It sounds very morbid, and definitely has its sad moments, but it also has its happy moments. We figure most lives do.

I continued to add engine features and placeholder content, working as efficiently as I could around the migraine I developed around midday on the first day. Where there was something to share, I threw a few tweets out using the #TasJam hashtag. It was interesting to see the amount and type of things that others were tweeting.


Working overnight without sleep, I was able to get all of the scenes implemented and rigged up with puzzle logic (not that there are any actual puzzles - this stuff controls the gating mentioned above) by about 7:00am on Sunday - just in time for Mim and Henry to arrive and begin slotting in their work from the day before. I also found time to tweak up some of the in-engine editor tools and add a "Made with Icicle" splash screen (which is the key signifier of a totally legitimate engine).

While Mim and Henry worked unsupervised, I planned ahead as best I could to make sure that packaging would be simple. I'd brought my GitLab VM with me, but had some networking tweaks to make before it could be accessible on the venue's network (usually a small task, but one that took a big chunk of time). I had opted to avoid trying to abstract out project specific code, as I figured a diff could quickly tell future me everything I needed to know. In hindsight, that was a good decision both because it meant less work (when you have a headache and a short timeframe, extra work is what you don't want), but also because it meant fewer surprises when whatever systems I added to look after that stuff revealed their own bugs.

With about half an hour to go, Mim and I managed to get the last of the written content in. Henry had lengthened the music and found some environmental audio for some of the memory scenes earlier in the day, so we were pretty much ready to go. Unfortunately, this didn't give us any time for proof reading or testing the game itself beyond stuff that happened during content implementation and logic flow testing that I'd done the night before (our schedule was blown out by my not being available to speed up the work that Henry and Mim were doing, but it still ended up being within the jam's time frame). Thankfully the game benefited from the engine development and testing I'd done for Winter's Wake, so the lack of testing wasn't quite as big a deal as it might otherwise have been from a game stability perspective. So far as the game's flow and pacing and stuff went, we figured we'd just have to live with what we had.

In the end, with 11 minutes to spare, we had a Linux build uploaded (Windows and Mac builds would come later - who needs those?).


What We Did And Didn't Achieve

Though it's awkward to think about and a bit frustrating, it's often good to reflect on what stuff worked and went to plan, and what stuff didn't.

So far as the engine goes, I accomplished most of what I'd hoped.

  • Added in-engine editor features for tweaking scene object position and rotation
  • Added a "made with icicle" splash screen (woo!)
  • Did initial work for abstracting out input handling into its own class
  • Fixed some rendering bugs
  • Fixed some state manager bugs


For content, I feel like we got the key deliverables done.

  • 7 scenes (6 memories plus the hub scene) and more than 40 objects
  • Approx 3,000 words
  • 9 "puzzles" (these control the points of gating in the story and could probably be condensed down into 4)
  • One piece of custom music


There was a lot of polish that we missed out on though.

  • Minimal proof reading
  • We didn't do any conscious colour design for scenes (only the park scene has distinct colouring for scene elements)
  • Only the park and hospital scenes have environmental audio (and neither of those are as rounded out as we were hoping)
  • We distributed ambient audio for the cafe scene, but forgot to rig it up in-game
  • We'd hoped to have a custom icon for "remembering" (scene "exits" currently use the Winter's Wake temp footprint icon)
  • The hub scene's title managed to slip through and remain "hub"
  • Some placeholder text managed to slip through (the hub scene description mentions "[Shady Acres]", which we laughed about at the time and agreed we would change)
  • We'd hoped to have several variations of the music that were increasingly more coherent that we could change to in the hub area as the player unlocked more of the protagonist's memories
  • We had wanted to perform KR0 style murmuring to help give some more vocal presence to tie in with the jam theme where appropriate
  • We had hoped to select a second font to use for the description text (the one we're using is OK for headings, but is too bold and fancy for the amount of description text we have)
  • We had toyed with the idea of using a more subjective "front/back/left/right" indicator to replace the compass bearings, but put that on the back burner pretty early on


TasJam As An Event

For a first jam, TasJam felt pretty solid, especially considering that the Launceston venue wasn't part of the core plan. The Hobart venue had several people with industry experience acting as "mentors", and time was made for each team at every venue to speak with them and receive some feedback and advice.

The event was catered and catered very well. Most of the food wasn't to my personal taste, but it was the kind of stuff people go to expensive cafes and restaurants for and pay lots of money to eat. Between larger meals, there was an assortment of fruit, junk food and softdrink available as well as a noisy coffee machine for those who needed to exercise substance abuse to keep themselves going.

The Launceston venue held around 20 people divided into two rooms. Whilst this was super welcome when some people in the other room decided that loud music was a good idea, in general it felt like it might have been a barrier to more organic socialisation and cross-pollenation (I didn't see the work of the people in the other room, but I got a fairly good look at what was going on in the room I was in). That said, the space felt fairly open and didn't carry the air of crampedness that I was expecting, so the available space was used well.

Looking towards future events (which I understand are planned), I think there is some room for improvement on a few fronts. In particular, it would be great to see resources made available ahead of time for first time participants. From the jams I've participated in before, it seems that it's very common for first timers to unnecessarily smash themselves, and some advice that touched on scope management, teamwork, rapid development and (perhaps most importantly) personal health/pacing across short timeframe/high pressure events could go a long way to making sure that participants had the right kinds of approaches and expectations going in.

Some rough and simple guidelines for respecting shared spaces could be a useful addition as well. Making sure that the boundaries of what's appropriate are clear could help avoid situations where those who do not wish to be disturbed won't be, and those who would like to ask for help can know how to do so (I spotted a couple of situations across the weekend where people trying to focus weren't being given the space they needed).

I did see a couple of people milling about at the start of the event looking for people to work with. Most of the online jams that I've participated in have had IRC channels or forums or Twitter hashtags through which people could find other interested parties and form teams ahead of time. It'd be great to see some more visible spaces for people to network and settle into teams in the leadup to future TasJam events.

Some structured social/icebreaking stuff at the beginning of the events could also help people find others with common interests. A round table brainstorming of the event's theme could be a good match for this style of event, giving an opportunity for those struggling to find an interpretation a safe space to bounce ideas around with a little less pressure than one feels when sitting in front of a workstation with the expectation of squeezing something profound out.

The opportunity to interact with the mentors at the other end of the state was fantastic, but I found myself wanting to have a chance to get to know/interact with the participants in other venues. Future events could maybe benefit from a voice or video feed, an IRC channel, or even a Twitter feed up on a wall displaying tweets with the #TasJam hashtag. Opportunities for State-wide communication and interaction between regions feels like it would be very worthwhile, particularly in Tasmania, where we have such a disparate population and our centres of enthusiasm often don't always align well. In my opinion and experience, a Tasmanian sense of community is much more meaningful than multiple region-centric communities, and provides greater potential for diversity and growth.

While I personally gravitate towards jams that are unthemed and non-competitive, I understand that this is something that's attractive for others. Both can be a double edged sword though, and I feel that putting a higher emphasis on these aspects being optional would be a good idea for future events. Unnecessary stress is undesirable, and it felt that there was some pressure from the mentors and the organisers to fixate on the theme and submission specifics (I am entirely certain that the reasoning behind this was to look after people and make sure that nobody who did want to participate in those aspects would wind up in the super sad situation of finding out too late that they'd forgotten something).

As I don't generally participate in themed stuff, I'm not sure if I can offer much thought on the way the theme was structured, but it did seem that having half of the theme announced beforehand and half at the start of the event ended up being a bit of a curveball for some.

Brainache handicaps aside, I was very glad to have been a part of TasJam, and though I probably would have decided to observe rather than participate had I known that it would be themed, I'm happy to have poked around with the concepts behind Voices of the Past.