This website is quite out of date. I've done lots of fun stuff since mid-2012, but haven't updated this website. If you'd like to see more recent examples of what I've been up to, have a look at my GitHub profile and Gists.
Having worked with a static HTML website for a considerable length of time, Speech New Zealand needed a new website that they could manage easily and keep looking good with minimal effort. I designed and coded this WordPress site, and also helped Speech New Zealand find a suitable hosting solution.
Your job is to defend the car against the hordes of bloodthirsty zombies!
Smash & crush them with multi finger taps, blow them up with grenades, keep them out with laser fences, slow them down with Slow Motion Fog… Doesn’t matter how you do it, just protect that car at all costs!
About
Zombie Splat is a 2D, top down, arcade style game for iOS. I was the only developer on this project and a had a great deal of fun making zombies explode everywhere:
This friendly looking fella resides in my notes for the game.
Testing performance with far more zombies than the release version allowed.
The survival of three little cute colorful aliens is in your hands. They need your help to escape earth and get back home. Delightfully simple, hours of fun. Collect stars, avoid asteroids, leave earths orbit and escape to the darkest depths of outer space.
About
Alien Run is a 2D, accelerometer controlled collect-all-the-things-and-don’t-die style game for iOS devices.
Development
This was my introduction to Objective-C and my first major project using compiled languages. Working for Zappty Games, I started with the code for the partially completed game and finished it – adding new features, graphics, and game-play while getting my head around developing for iOS. The experience, though challenging at first, was very rewarding:
This is a backdated post. The publish date reflects when the it would have been posted originally, however the actual publish date was later. This post was last modified 15 Oct, 2012.
In this project you will design a non-biological based character that will navigate and react to an environment. You should focus primarily on the behavior of this “character”, but also find a distinctive and economical visual representation. You should find a visual representation that is a compelling but minimal showcase for the behavior you create.
Robo-gun is intent on destroying the incoming plastic soldiers (which oddly resemble slime covered zombies) and does so with deadly precision. A python script generated and key-framed all behavior in this scene. Under the hood are some driven keys, expressions, and rigid-body simulations to simplify the aiming and animations. There’s a bit of jumpiness when the invaders are shot, since I didn’t work out how to cache rigid-body simulations/set the initial simulation frame for each soldier.
I really enjoyed this project and had a good bit of fun. While it wasn’t required, I do wish I had spent more time on the aesthetic and render quality. The models weren’t great (though they were functional), and the render quality really suffered because of time constraints (I had to significantly lower the render settings).
What was left out
I began working on two things that ended up getting left out because of time and bugs: particle muzzle flash and cartridge ejection from the gun. I almost had cartridge ejection nailed, but it unexpectedly caused a massive bug that I couldn’t trace and blocked the generation script from running at all unless I deleted duplicates of the cartridge reference (maybe a duplicate name issue). The cartridge ejection used rigid bodies like the soldier deaths, and it looked pretty darn awesome during generation the one and only time I managed to get it to run. You can see the cartridge reference model hiding inside the gun x-ray view below.
I started experimenting with particles for muzzle flash, but ran out of time as it caused Maya to crash frequently. I didn’t get any screenshots of this, but it was pretty basic – just a directional particle emitter in the end of the barrel which would have its generation rate hooked into the custom attribute that controlled the slide and hammer action.
Images
This is a backdated post. The publish date reflects when the it would have been posted originally, however the actual publish date was later. This post was last modified 15 Oct, 2012.
You need a webcam or other video device plugged in. If you don’t, you’ll just see black.
Toggle the application on. It’s reasonably CPU intensive even when idle, hence it’s off by default.
Allow flash to use your camera
Select the right camera (if required) under the flash settings menu
Use the controls below to play with it. You’ll probably want to press D to change display modes, since the default mode isn’t much fun. Also, move out of frame, then click to get comparison frame without you in it; the effect is better this way.
Controls:
Left click - take a new comparison frame (used for computing difference)
D - Cycle display modes
C - Cycle resolution (640x360, 960x544, 1280x720)
F - Toggle fullscreen (non-embeded version)
G - Toggle grain
H - Toggle reflect horizontally
Behind the scenes
Following closely on the heels of the text-to-speech rap I created in the previous project for this course, this interactive display was my own take on our group’s ‘life as a role-playing computer game’ manifesto. A large part of our manifesto suggested measuring everything that every person does in order to have game-like stats and leveling up in real life. Naturally this would require an obscene amount of surveillance; They are watching was a response to this.
I ended up with a few days around classes to develop an application from my design concept. I knew roughly how the code would work, since I had already completed twoprojects using a similar method – image difference combined with blob tracking. The primary issue was that I needed a cross-platform solution for capturing video from a webcam. I first tried Processing since I had used in my first year at uni, however that required QuickTime and a few other nasty hacks just to get a video stream. Next I tried Java, but again I couldn’t find a solution with no dependencies and/or a guarantee to work. Finally, after a a night of trying odds and ends in a variety of different languages, I settled on Flash and ActionScript 3; it just worked with webcams, and as a bonus I found an existing blob tracking algorithm written in AS3.
The next slight hurdle was that I had never worked with Flash or ActionScript before. Ever. Not to worry! I figured out the syntax on the go and had a working application by the end of the night. Not the most efficient application, but it worked.
Notes
Since this was made for controlled deployment with my own webcam, three resolutions are hard-coded (at 30fps): 640×360, 960×544 and 1280×720. I have no idea what will happen if a device doesn’t support one of these resolutions, but I imagine the application won’t work.
Rotating panes of fake information tracking on each passer by. This was quickly restricted by time constraints and the rudimentary blob detection algorithm I used.
Presentation display mode.
Running on a TV in the design school atrium
This is a backdated post. The publish date reflects when the it would have been posted originally, however the actual publish date was later. This post was last modified 11 Oct, 2012.
Te Puni Hub was an open, linear message board for students at Te Puni Village, Wellington during the 2010 academic year. While primarily a point of communication, the site also functioned as a voting system and a starting point for anyone wanting to join the Te Puni Hub.
The script for this site/page was hacked together in one shot, then developed further over the 6 months it was active, responding to real world events. The site received most of its traffic from newcomers looking to be part of Te Puni Hub, but also had a part in an anonymous dispute between the hall’s staff and students who had strung a network cable across a 20M gap between two buildings, 4 storeys up (in a non-technical effort to circumvent the network setup that isolated the buildings).
Retrospectively (two years later) I’ll add that this script was probably extremely vulnerable to SQL injection. I wasn’t using prepared statements at the time and I don’t believe security even crossed my mind. Thankfully, no one tried anything malicious!
This is a backdated post. The publish date reflects when the it would have been posted originally, however the actual publish date was later. This post was last modified 15 Oct, 2012.