Sept. 16, 2008

Tingangong is the onomatopoeic name for a game design that has been brewing in my head for the last few weeks since just before we left Australia. It's actually more of a non-game, or sound toy, or art game than a regular video game, but hopefully it'd still be a lot of fun to play.

Basic game idea

It can be summed up as a cross between the fish-and-leaves toy in Electroplankton, Crayon Physics, and The Incredible Machine. The idea is that users of the game can make "composition sculptures" by dragging various elements, each of which make a unique type of sound, onto the canvas. The sounds that each element make are triggered by tiny pinballs which are shot from cannons and bounce off the elements. Complex sculpture compositions can be set up where the balls bounce from element to element creating chains of different sounds, even music.

User Interface

User interface

The user interface is pretty self explanatory. Mousing over the strip down the left hand side causes the panel to slide out, and then elements can be dragged off the panel and onto the canvas. There is no separate run mode vs. edit mode; the game is always running and as soon as a cannon is dragged onto the surface it will start shooting little pinballs. When the user does a mouse-over on elements that are on the canvas the control point squares appear. Clicking and dragging control points allows the user to edit the parameters of each element. For example, the piece of bamboo can be rotated, and it's length and position changed. As it is made longer the "tock" sound that the bamboo makes will become deeper. You could place several pieces of bamboo in the path of the pinball, each of varying length to create a sequence of different notes.

Ideally the canvas part of the UI would be vector graphics and hence zoomable so that you could focus in on the parts of the sculpture that you are working on, and then zoom out to see the whole thing working like clockwork. Maybe there could be a "follow ball" mode when you click on a passing pinball.

Elements

Cannon

The cannon is the start of every composition as it is where the pinballs originate from. Control points allow the user to modify the position, direction and power (size) of the cannon. An additional control point allows you to change the length of the spiral at the centre of the cannon, which sets the speed at which pinballs are shot out of the cannon. This corresponds to the basic tempo of a piece of music. Different cannons can have different tempos of course.

Clock

The clock has a hand which ticks with the same frequency as the nearest cannon to it. There should be some kind of visual feedback to show the user which cannon the clock is associated with. Pinballs bounce off the hand of the clock and this allows you to create pieces where pinballs go in multiple directions at different times. The clock features control points for changing the length of the hand, the position and rotation of the clock, and the number of stops on the clock's face. It might be a good idea to try having a separate spiral to control the tempo of the clock independently of any cannon. Testing will reveal which method is more intuitive and useful.

Hit clock

The hit clock is just like the clock, except that it only 'ticks' when a pinball strikes the centre circle. Other than that it has pretty much the same control points for size, rotation, position, and number of stops. This allows you to create more complex pieces where a ball can strike a hit-clock after a long sequence to change the direction and flow of other pinballs.

Leaf

The leaf is inspired by the leaves in the Electroplankton fish-and-leaves game - it makes a plucked string sound when the stem of the leaf is struck by a pinball. The control points on the leaf allow you to change the length, rotation and position of the leaf. The length of the leaf changes the taughtness, or pitch of the string. The sound for the leaf should vary in a procedural way if it has multiple excitations in rapid succession, which goes the same for the following audible elements. An algorithm such as the Karplus-strong algorithm would work well for the the leaf, and is faily easily implemented.

Bowl

The bowl contains water and makes a 'plock' sound when pinballs fall into it, and a gongish sound when struck on the sides. The bowl's position, width, and height can be changed with control points. It's width corresponds to the pitch of the 'plock' sound, and the height determines how much reverb to put on the sound. Both the width and the height determine the pitch of the gong sound that the sides of the bowl make; each might determine the pitch of one of two oscillators which are ring-modulated together.

Bamboo

The bamboo makes a 'tock' sound when struck by a pinball and has control points for position, rotation, width, and length. The length of the piece of bamboo determines the pitch of the tock sound, and the width determines the depth, or length of the sound.

Sphere

The sphere makes a 'ting' sound like a single bar from a wind chime. The control points allow you to modify the position and size of the sphere, with the size corresponding to the pitch of the chime.

Aesthetic

Aesthetic of the game

In my head the game looks like a piece of traditional japanese calligraphy (above is my pretty lame attempt at that look) and the scupltures are tinkly pretty things which sound like gamelan music, or John Cage's "Six Marimbas". I can imagine users creating fully fledged pieces with multiple parts and movements which sound as fascinating and wonderful as they look.

Technology

If I was to code up this game or a prototype thereof tommorrow (it could happen!), I would use the following combination of technologies:

  • The core engine would be written in Python for speed of prototyping.
  • The graphical component of the engine would be implemented in Pygame or Pyglet, or maybe Pycairo for the vector graphic component if it's fast and cross platform enough.
  • The physics engine would be Box2d, Chipmunk, ODE, or something similarly cross-platform and Python compatible.
  • The audio backend would be implemented in Pure Data. It would be launched as a subprocess and would use the '-nogui' flag and sockets/pipes to communicate with the Python based front-end. Individual elements would each have their own Pure Data abstraction, and dynamic patching would be used to create instances of each element. Incidentally, Pd is the music engine for the recently released vide game, Spore.

All these technologies can be googled for more info.

Concluding

Some good community features such as uploading and sharing sculpture compositions would be nice, and png-embedded data files could be cool as well, so that images could be dragged from a browser into the game and loaded up instantly, and users could easily share compositions by sharing screenshots. Another cool feature might be to have elements that are touching eachother on the canvas have some kind of audio interplay such as ring-modulation between the two sounds. That kind of stuff should be experimented with after the basic prototype of the game is up and running.

Aug. 1, 2008

This new tune is part of my set tonight:

Chris McCormick - Many Faces.mp3

July 29, 2008

Hooper's Store are one of the finest bands this city has given birth to in the last few years. I'm very much excited and honoured to have been asked to play their EP launch, this Friday, August 1st at the Hyde Park Hotel.

Their music is what I'd call instrumental indie math-rock, and it rules. My own set will be electronic music consisting of some hip-hop beats and loops, then a bit of drone, and then shifting gear into experimental dubstep land. I'll probably be on at 20:30 or 21:00.

update: I am actually on from 20:00.

This will be my last gig in Perth before Moose and I head off to Europe later this year. Hope you can make it!

Gig Flyer

June 10, 2008

Sfxr is an inspiring little program which generates old-school sound effects for use in games or music, or whatever. It's one of those delightful little nuggets of software that just does exactly what it says it will and nothing more. It's great fun and looks great too, and its source-code fits in a single c++ file! Finally, it's cross platform, running on all the major desktops. Wonderful stuff.

http://www.ludumdare.com/compo/2007/12/13/sfxr-sound-effects-for-all/

May 28, 2008

Yesterday was the project presentation for the final unit in my Computer Science degree, and the last bit of actual work. As such, I guess this would be a prudent time to post a bit of a life update.

STUDIES

Well, that appears to be it; my degree is over. Results come back in three weeks or so, but overall I'm pretty happy with how things went during the course of my part time studies. The prospect of having less stress and more time to do more interesting things is very exciting right now.

MARRIAGE

Probably everyone I know will know this by now, but it's worth documenting here anyway. In July during the Freeplay conference in Melbourne, on a bridge across the Yarra, I asked Moose to marry me. To my lucky suprise she said yes! To celebrate we had even more to drink and I somehow chipped a tooth. We had a mostly-family wedding in March and we're both really glad that that ordeal is over! The wedding I mean, not the marriage. It was nice though, and we got lots of sweet photos and caught up with lots of people.

TRAVELS

Later this year we are heading to Europe and the USA to do some campervanning and greyhound/motel hopping respectively. I'm going to play some gigs and stuff and try to drop in on a couple of interesting conferences. Next year our plan is to stop in London to work for a while. Should be fun!

MUSIC

Since Fenris has moved to Melbourne I am now playing solo gigs, except when he's in Perth or I am in Melboure. I've had a few solo gigs now; two at Shape and one at the Velvet Lounge, and they all went off without hitch. At the first Shape one there were people dancing and everything! The music is quite different from what Fenris and I do since I am using all software (Pure Data) and midi controllers whilst chr+fen is mostly about game consoles and delay/distortion pedals. Later in the year when Moose and I travel to Europe and the USA I'm planning on playing some gigs.

WORK

Since the beginning of the year I have been working full time on games technology, which is the fulfilment of a sort of dream of mine.

I am working 3 days per week for Interzone, doing web integration for their MMO. That is nice because it's a regular paycheque, and the work is interesting, and I get to leave it at the office when it's home time. It's kind of strange working in an office again after working for myself from home for so many years, but it hasn't been bad, and the social aspect is even quite nice.

I am working 2 days per week on the ABC/Screenwest/GWE contract with my pal Jessee from Studio Robot. This game is lots of fun to work on and utilises some AJAX technology that I wrote a few years ago. It's basically a Python web server which maintains a game state, and communicates changes in game state to multiple connected web clients - something that's a bit difficult in traditional web servers. It's really nice to work with an artist of Jessee's calibre and it makes the programming bits way more fun when you get to see something cool as the outcome. We just sent them the 4th milestone out of 8, so the project is well on it's way.

Because of the full time work I don't get as much time to work on Pixelbox these days as I'd like to. Though luckily Jacob and Patrick are there to share the small workload. Occasionally, maybe once a quater, I drive out to Wangarra to physically install a new machine or swap a hard drive. I'm due for one of those visits quite soon, actually.

There are a couple of other small bits of client work I am neglecting pretty badly at the moment. Sometimes I manage to squeeze in an hour or two somewhere, but I guess these will ramp up once I get a bit more time. One of these is a quite exciting art project which I'll post about here when it's finished.

GAMES

Since I'm working on games stuff full time I don't get a lot of time to work on my own games these days. I am looking forward to later in the year when I will get to do my own stuff again. I finished a small web based Breakout clone which I called Bricker, but that was mostly just to keep myself thinking about games and web tech. I have two different indie games ideas on the boil at the moment but I won't have time to work on them for at least a month or two. I also need to get UfoLiberation up on the website, either as a free download or put some kind of a payment gateway in place. Though once again, who knows when that will happen! The code is all finished, and Windows binary is even built; I just need to do the last 1% to get it out there.

So for the most part, that's what is going on in my life.