Game Development

Unity Web Player


Press P to play. P will also reset the game after death.

Airbrake L
Airbrake R
:: WASD / Left Stick
:: Q / Button 6
:: E / Button 7
:: P / Button 9
:: C / Button 10

* Music removed due to license only covering classroom use.

Unity3D C# 3DS Max Photoshop

Helicoid is a hovercraft racing game similar to Wipeout and F-Zero created as a project for one of my modules at University, where the objective was to create a game that uses some form of novel HID.

The game is developed in Unity with 3DS Max and Photoshop being used for the art assets. All of the scripts used are self-coded in C#, while the shaders (Fresnel) were a shader, by Kenneth Otto Larsen, which I modified to suit my needs. Progess of the game has been documented somewhat on a blog.

The device I chose to integrate was the Oculus Rift, which was used for the cockpit view of the ship. This was a very easy process thanks to the assets provided by the standard Unity package provided on the Oculus website. The version embedded above uses a normal camera, though, as I realise most people won't have a Rift, and I only have access to Unity Pro (which the Rift plugin needs) in University.

The current game mode is simply to survive for as long as possible as your speed increases in steps every 10 seconds. This is similar to Wipeout's 'Zone' mode which I very much enjoy. The score is currently determined by the time spent as well as the number of 'perfect zones', which is when the player goes through a speed class without taking any damage. Perfect zones also increase the player's health slightly, allowing them to survive for longer as a reward for doing well.

The game was very well received on the module's demo day, with a fair few people seeming quite eager to try it out. Thankfully no one complained of nausea, even though it is quite a bumpy, wavy ride. So far it has been a good experience which I look forward to developing further.

Unity Web Player


Find and destroy the enemy base.

Player One
Yaw Left
Yaw Right

Player Two
Fire minigun
Fire missile
Change missiles

:: WASD / Left Stick
:: Q / Button 4
:: E / Button 5
:: Space / Button 0
:: LShift / Button 2

:: Mouse
:: Left Click
:: Right Click
:: Middle Click (hover to lock-on)
Unity3D C# 3DS Max Sculptris Photoshop

Heli Coop is a two-player, cooperative, helicopter gunship game developed for one of my modules at University. The general aim for the project was to create a game for at least two players with multiple methods of input.

The game was developed in Unity with 3DS Max, Sculptris and Photoshop used for the art assets. The helicopter model was provided by the module for earlier learning tasks, however all other assets are self-made (world, rockets, turrets, etc).

I decided upon this game idea for the project after completing some tasks we were set earlier on in the module, where we were asked to animate a helicopter's take off and landing using a Unity package called iTween. I had also watched a lot of ArmA 2 gameplay around the same time, where the player was often piloting helicopters with another player in the gunner seat.

Part-way through development, it was suggested by a tutor that it may be a cool idea to have a curved world. I agreed and set about thinking of the best way to accomplish that. My options seemed to be either using a vertex shader to bend everything downwards the further an object was from the camera, or actually having a curved world with movement that was capable of handling that.

While using a vertex shader initially seemed like a good and easy way to go about it, there seemed to be a lot of problems that arose from it, such as the world being treated as a torus and that raycasts would also be bent along with the world. While having an actual curved world also presented its own problems, I decided to go with this method as it generally seemed like the better option.

This project taught me a fair bit about the fun of Quaternions, which was initially frustrating (and occasionally amusing) but ended up being very useful, especially for my later project, Helicoid. I also additionally thought about using a tablet for the gunner's view but didn't get around to it. After using the Oculus Rift that also seems like it would fit the project well.

Unity Web Player


:: Space
:: LShift / LCtrl
Unity3D C# 3DS Max

Hop was my stage 1, term 2 project where we were simply tasked with making a game (along with documenting it with blogs, project management etc). It's based upon a simple concept called 'bunny hopping', which comes from Counter-Strike, and the custom maps created for it where players jump from pad to pad with a small amount of time before the pads are disabled, causing them to fall if they stand on a pad for too long (hence the need for the hopping).

Bunny hopping is a technique where the player jumps as soon as they land, and because of how the game's air acceleration works, you're able to keep and even increase your speed, with better timed jumps allowing you to keep, or gain, more speed. Players usually bind jump to their scroll wheel, allowing them to spam jump commands, making it easier to better time the jumps.

I found it rather difficult to mimic this behaviour, and the method by which the player bunnyhops (scrolling the mouse wheel to jump) seemed like it would be quite alien to most people. I ended up with a very simple system where the player has to press space within a small amount of time before touching the floor in order to jump. While this means that the player always has a perfectly timed jump if pressed within the time window, there is at least some skill in getting the timing for that window right.

At the time I also couldn't figure out how to handle the player's speed; making them gradually increase in speed with each jump, while also punishing their speed with drag/friction if their timing was slow. I believe I used Unity's standard character controller which was fiddled with slightly, however I wasn't able to implement the speed management.


Hide and Seek was a stage 1 project for a module at University. The task was to create a game set in a 2D, continuous world, where going off the edge would place the player back on the opposite edge, as if the world was a torus.

The game has one player, two types of enemies, blocks that the player can hide behind and health and ammo pickups. The player can shoot the enemies and refill their ammo with pickups that randomly appear. There are two types of enemies, where the first type are small, constantly chase the player and charge them within a certain distance. The second type are large enemies that run away from the player if the player's health is high, else they also chase the player but at a slower speed than the smaller enemies.

Everything was coded from scratch, such as the character movement and rotation as well as the collisions. This was my first foray into proper game programming, where I worked with vectors and game logic.


One of my stage 2 term 1 projects at University was to create a basic project in XNA that either implemented the A* search algorithm or fuzzy logic, either for control or for some simple rule based system or even a fuzzy finite state machine, in order to demonstrate some form of artificial intelligence.

I decided to implement A* in a simple grid-based world, although the player is able to move freely. I added path smoothing to improve the path that the player takes, although this isn't shown in the screenshots. There is also the option to choose between a couple of heuristics; manhattan, euclidean and none/Dijkstra.

Level Design / Development

Source Engine 3DS Max Photoshop

De_Utopia was a project for University where we were tasked with designing and developing a game prototype with supporting documentation. This also included designing and creating a level or map for an existing game. I decided to make a map for Counter-Strike Source due to my familiarity with the Source engine, with progress documented on a blog.

I created a couple of models for the map, such as the server racks in bombsite A, as well as a few textures, such as the running water(fall) texture. A couple of concept images were also created for the project, in order to help spawn new ideas for the look and feel as well as some layout.

Unfortunately a lot of my ideas were left undocumented and I just went with what was in my head. The current state of the map is also missing a couple of things, such as a fancy 3D skybox, and needs polish and tweaking. The 3D skybox that was created earlier was removed due to the obnoxious amount of brushes it used, which put me well over the limit by the end of development. I would need to create proper models for it instead.

Prefab Source Engine

Something I made while bored one day. This isn't really something you should do with brushes in Hammer, but I sometimes like to play around and see if I can do things that you typically aren't supposed to do. It's also something that I've seen people ask about making a few times.

Released on GameBanana.

Prefab Source Engine

Another thing made while bored, just to see if I could. There was a brief period where I made a lot of twisted, spiralling objects in Hammer just to see if I could abuse the brush manipulation tools. I was somewhat inspired by some screenshots I came across of The Void.

Released on GameBanana.

Prefab Source Engine

I made a prefab for Counter-Strike: Source that allows players to complete stage-based maps in a non-linear way. This is useful for fun, non-standard maps for CS:S, such a surf and minigame maps, where there may be several different stages, or areas, which players have to complete before finishing the map.

It's somewhat difficult to track individual players due to Hammer's limited capabilities, so maps with stages are usually laid out linearly, where a player will finish one stage and then be teleported directly to the next. Some maps also work on a team-wide basis, where a team has to complete all available stages before finishing together.

A system where an individual player could complete stages non-linearly was requested on the GameBanana forums, so I decided to see if I could get a system working. Fortunately, I found a decent way of doing it, although it has limitations. The system is described in full on the prefab's page on GameBanana. There is also a video demonstrating it working in game. This was a good exercise in using the limited logic entities available in Hammer to achieve a goal.

Released on GameBanana.

Prefab Source Engine

A user on the GameBanana forums was asking how to have persistent round states, where something triggered on the map in a previous round would carry on into further rounds, instead of resetting after each round as per normal behaviour. I made a prefab for them and uploaded it to GameBanana. The prefab uses various logic entities in order to achieve a persistent round state system, which is shown in the video on the prefab page.

Released on GameBanana.

Prefab Source Engine

I created a visual timer/counter system prefab for Counter-Strike: Source after seeing various requests and inquiries about one, as well as after seeing a couple of other similar systems that seemed more complex than they needed to be. I made use of the few logic entities provided by the game to create a simple, easy to expand system. The prefab is explained in full on the GameBanana page with a video demonstrating an earlier version.

Released on GameBanana.

Web Development


For one of my modules at University, I was tasked with creating a web component library using PHP and MySQL. We were provided with a set of user stories which represented the target functionality. These user stories asked for a website that is able to display data from a table in a database, display data from a table that is selected from a drop down box, and add values to the selected table, as the first sprint.

The second sprint asked for a facility to update the values in a selected table, and another facility to be able to delete values in a selected table.

The third and final sprint asked for account and log in functionality, the ability to register users and lastly an update to the edit and delete modules making it so that they may only be accessed by users who are logged in.

I completed the project in full, providing all the functionality asked for in the user stories. I also used the project as somewhat of an excuse to practice some web design while implementing the PHP functionality, as making it look nice was not a requirement. Some additional time was also taken to make the login procedure (mostly) secure, although there are still some insecure areas elsewhere in the site. Security was not in the requirements, but I decided to put some in anyway just out of interest.


One of my university modules required the creation of a simple website to demonstrate the use of HTML and CSS along with some web design and usability heuristics. We were given a somewhat poorly written report about the history of the web and its browsers and were asked to present the information in the form of a website that adhered to various design and usability guidelines.



Simple wrapper for netsh's hostednetwork feature for creating a wireless hotspot.

Change the SSID and password to whatever you want, click Set to set those values, then Start to start the hosted network and Stop to stop it. By default the status will be refreshed every 30 seconds, which you can change in the settings XML which is generated after closing the application (in the same place as the exe). A negative timer value will turn the timer off. You can use the Status button to manually refresh the status. The window minimises to the toolbar and you can start/stop the network using the context menu there.

In order to share your internet connection over the hotspot you'll need to change the sharing settings of the adapter you're using to connect to the internet. To do this, go to Control Panel > Network and Sharing Center > Change adapter settings, right click the adapter that is connected to the internet (usually "Local Area Connection" or "Wireless Network Connection"), click Properties, then in the Sharing tab check the allow box and select the virtual wifi adapter (it has "Microsoft Virtual WiFi Miniport Adapter" next to the icon and under the name in Windows 7).

This has not been extensively tested.