Monthly Archives: February 2013

What’s Happening – End of January

Split Screen Audio Plugin

Work on the split screen audio solution for Unity has ended up taking most of January. It’s quite mindboggling to consider that I had the basic idea up and running in a couple of hours of coding, but to properly finish it up it required thousands upon thousands of extra lines of code. I’ve been up to my armpits in disassembled Unity editor code, and have been forced to change course drastically at several points. I might do another big technical blog post about the development when its done, to serve as a roadmap for anyone venturing into similar territories.

It started so simple:

* Move real sources to correct relative position around the real listener.
void UpdateRealSources()
    // pair.Value = real source, pair.Key = listener
    foreach (var pair in _listenedSources)
       pair.Value.transform.position = pair.Key.transform.InverseTransformPoint(transform.position);

Each Virtual Source has one Real Source for each Virtual Listener in the world. Each frame the position of each real source is adjusted according to position relative to its associated Virtual Listener.

And that’s all there is to it, really.

But then you have to actually integrate it in your game code and your editor, and by far the biggest problem becomes robustly modelling object and component relationships and comply to Unity’s editing workflow. I never, ever imagined there would be so many edge cases to keep in mind (especially all the different ways you can utilize prefabs). With every new use case there would be a new bug, another thing that would break. But that’s for another time.

Global Game Jam

Last weekend I participated in the Global Game Jam with six other friends. If you’ve not heard of it before, the premise is this: You go to one of the official jam venues near you, you get a theme to develop a game around, and you get 48 hours to do it. Go!

The theme this year was an audio clip of a beating heart. Here’s the, uh, thing we ended up with. (WordPress seems to be a bit broken so I can’t embed this right now. :/)

We associated the sound with a living machine, one with many individual parts that are all tightly intertwined and interdependent. From that interpretation came a concept for a multiplayer game in which each player controls a single element of a body or machine, is responsible for a singular task, but is entirely dependent on the other players to achieve success.

One player controls the heart and lungs. This player’s goals are twofold: Pump things through the system with the heart, and supply things with energy when they pass through the lungs.

Two other players control cells that live in the blood stream. They are responsible of transporting energy through the body, to be used by other organs, or by themselves to fight off infections. They have very limited means to move by themselves and rely on the heart to pump them through the system so they get where they need to be.

An infection starts to develop throughout your play session. The infected cells try to invade the body and remove energy from every part of it. Without energy none of the organs or cells will be able to do anything, and the body will die.

Live in harmony. Die in disconcert.

We were not able to finish what we set out to do (no gameplay yet), but we ended up with an interesting little toy and are very happy with how the Jam went.

The team consisted of:

Joost Pastoor (Game Design, Programming)
Frank Versnel (Game Design, Programming)
Ruben de Gooijer (Game Design, Programming)
Bram van der Hoeven (Game Design, Sound Design)
Robin Vink (Game Design, Graphic Design)
Snoo Chen (Game Design, Graphic Design)
Martijn Zandvliet (Game Design, Team Captain, Additional Programming)

My role was not so much to code the game, but to lead the team. Being the most experienced with game design and development I tried to make sure everyone felt invested in the concept, was able to do their work, and avoided common pitfalls. Not being the one doing the driving was a little scary at first but in the end it was a wonderful experience and I learned a lot.

Right, back to work!


P.S. Next post I’ll talk about the short term and possible long term features I have in mind for Volo. They’ve gotten to a point where they’re concrete enough to get feedback on. It has taken me a long time to figure out what the game is, can and should be.