YinYangYou was a one week project, completed as part of Next Level Dundee. Working on a brief focussing on light and dark, each team of five students and graduates barely had time to get to know each others names before work began designing, pitching and implementing our idea.
Our game, YinYangYou, is based around the balance and unbalance of competing forces. Two players race across a circular map to collect energy orbs, throwing them into a hole which then increases the area they control on their opponent’s side. When one player gains complete dominance of a side of the map, they are declared the winner and the round ends. A range of exotic energy orbs act as powerups and touching these causes effects such as switching the players hole size or slowing time, adding variety and tactical considerations to the fast-paced gameplay.
Here’s a video of the game in action, followed by some development captures:
The Tech
Development was completed in C# with XNA, which worked very well for a project of this scope. Although something more lightweight, such as Python with PyGame/Pyglet or LÖVE might have been ideal for this project, we were limited both by what could be installed in the labs and by the short period of time we had to prepare before development began. Given the number of areas we were still unsure of at the beginning of development, including game design, project management and content handling, attempting to learn a language completely new to either programmer seemed unwise.
On my previous project, Pollen, XNA’s content pipeline was a great resource, making it easy to import and replace assets in the game. While it proved helpful for simple textures and sprites, the content pipeline actually proved one of the most problematic areas of this project. Skeletal animation with XNAnimation was thoroughly painful, and it wasn’t until the end of the week that we managed to export a model from Maya, manually edit the data and have it play correctly in the game.
Audio, though less of a problem, also presented issues. Having a dedicated sound producer on the team meant we had someone who really knew what they wanted in terms of audio, and constantly challenged us. We opted to use XACT audio in order to cope with the flexibility and range of effects this required. Although I considered myself now comfortable with the basics of how XACT functions, it still caused problems when slight changes to the audio project left the game unable to load it, with a generic error message giving us no clue as to what had gone wrong. Setting up XACT and loading wav files into did have some overhead, but once organised it made it easy to manipulate the cues and apply effects to them.
The Experience
The team I was part of turned out to be very well balanced, consisting of two programmers, a 3D artist, a 2D and texture artist and a sound producer. However, communication was an issue for us initially – especially as we never met in person until the day of pitch. Estimating times, balancing workloads and planning the week was challenging when we only had limited understanding of each other’s capabilities, although we soon came to learn how each member of the team preferred to work.
On the code side in particular, I found it hard to move from working with programmers whom I knew very well to working on a codebase without a rough design or having time to discuss programming style. The first time we came to merge code, it took several hours!
Being thrown out of my comfort zone in this way was a great experience. I found some areas, like source control, where my previous ideas were completely reaffirmed but more importantly others, like audio design and the use of config files, where my views have been changed entirely.
Overall, Next Level Dundee was a great (and fun!) learning experience that I gained a lot from, and I’m really pleased with the product we managed to complete. Thanks go to Iain Smith, the organiser, as well as all the mentors and participants who helped during the week. If the event takes place again next year, I’d really encourage people to take part.