This is an incomplete and as-is collection of projects I have worked on in my spare time.
Most of these are games / graphics software related projects.
I am missing the source code for some projects.
Most of these are Windows specific applications. They are all safe to run.
Distant Code
This is my biggest and longest running personal project. It is probably too big. It's a cross platform (Windows and Linux)
game about semi-autonomous programmable spaceships. Most of the game logic is done, but building the interface around the game is proving difficult.
The game is written from scratch using C++ / OpenGL / OpenAL / CMake / Lua.
I try to not use any Google services or products including the Google Play Store. I have been experimenting with compiling my own versions
of some open source Android projects, with varying degrees of success.
I would prefer a distribution model where apps were available directly from the developer or vendor, without having to inform Google
everytime I wanted to install or try an app. Why do I need to login to Google to download an app? I am shocked at how little respect the public
has for its own privacy.
Lego Animation
I recently had some fun playing with Lego animation. These few seconds of animation took several days to shoot :-/
It was a fun learning curve. I used a Canon EOS and the (Windows) software that comes with the camera. I was pleasantly
surprised by how good the Canon camera software was. The software feature which allowed me to overlay a previous frame
of animation with the current view of the scene which was a big breakthrough.
It allowed me to correctly reposition the Lego figure each frame.
My first animation is a simple walk-cycle, and it was harder than I expected.
I could not remove the flickering from the scene. I monitored the graphs in the Camera software: the lighting fluctuations
seem to be caused by the camera itself. I controlled for everything I could think of but could not get rid of them :-(
A quick special project
I was contacted by a friend (ex UK Royal Marines / ex UK Police) and asked if I could quickly write an encryption application for his company,
one that could be used by operatives with little understanding of software or computers.
I was flown to London and over the course of a weekend wrote an application which had some interesting specifications.
I don't really want to write much about it: there was nothing malicious about the application but it was interesting and thought provoking.
The encryption was implemented using PGP. If you know me personally, and are interested, I am happy to chat about it.
Game Engine ~2004
I enjoy writing software. I enjoy the process of coding. Often its just experimenting with technology.
In 2003+ I was spending time after work developing my own little 'game engine' - although really its just
a window / rendering system with the math and the other bits and pieces associated with this.
It was a time when shaders were still written in assembly, and Microsoft released it's first X-Box. In terms of functionality
there isn't much to see: I was mostly focused on the code.
Looking back at the code now I am still quite proud: it is neat and readable and contains many good ideas and
approaches such as it's use of factories, and it being scripted, well logged and data-driven. It has a console too but it seems to
not be rendering properly anymore. The console was toggled using the ` key (top left key on many keyboards).
The console allowed you direct access to the Lua state, if I remember correctly.
The code still looks neater than code in many places I have worked. I know
that much of the software I was writing at home exceeded the quality at some games companies I worked at: I was able to do
side-by-side functional comparisons.
If I had a regret it is that my scope ambition is always too
large. I think for a single developer, employed and badly balancing a relationship, it is better to be disciplined
with your time and pick a project with a more realistic scope.
This is a simple but nice Windows program that I wrote to simplify setting up OpenGL fixed function pipeline material attributes.
Modern OpenGL has no real fixed function stuff anymore, but once upon a time almost all of it was fixed, with the programmer only able to
vary settings. OpenGL once had built-in matrices, and the concept of a surface's material, and how that surface interacted with the lights (which were also
fixed). Drawing objects was about drawing primitives and telling OpenGL that this primitive (e.g. a set of triangles) was to be drawn with
this type of material properties, and that lights 1, 2 and 3 etc should light the surface.
This program allows you to select the material properties on a variety of different classic objects, and see how it looks, and then you can
export these settings to the clipboard, ready to paste into your OpenGL program. Here is an example of its output:
ASEtoT3D is an application for converting from Discreet's Ascii Scene Exporter file format (ASE) to Epic's Unreal Editor T3D format.
It is written to enable importation of textured 'brushes' into the editor.
The application was written over the period of six weeks sometime around 2001 by me in response to a request by an Unreal modder named Daniel Patton.
Daniel needed a convertor to T3D which preserved the texture co-ordinates. Daniel was creating mods for the (very popular) Unreal Game Engine using the Unreal Editor.
The Unreal Editor supports several file formats, including the autocad DXF format, however only the T3D format contained texture descriptions.
Daniel had identified the ASE format as being a suitable format for conversion, as it was exportable from '3ds max', contained the necessary data,
and was a human readable Ascii format. He contacted me because I had previous experience with the ASE format and had documented my findings online.
ASEtoT3D was a huge success. I received thank-you emails from around the world from people creating content for Unreal.
Several bugs were reported, and I made two bugfix releases to fix them (the current version is 1.0.2).
When it was first released there were many more links, but the usefulness of ASEtoT3d has diminished. Shortly after I released this, Epic released a version of their
game editor with native support for the ASE format, including the much sought after texture coordinate conversion. Thus my app was no longer a 'must have' for modders.
I no longer have the source code to 'Monsters' ;-(
Monsters is a 'game' I wrote in my spare time as a student (at the University of Aberdeen).
Like many of my projects/games, there is very little user participation. The 'game' is really about emergence and population dynamics.
The game is a 2D DirectX 7 application for Windows. It uses cel animations I created and pre-rendered by scripting POV-Ray.
Its one of the most feature complete projects I have worked on: and it got finished :-) It has background music, context menu, path-finding, pause, speed-up game time, credits
and essentially most of the features that a game should have, and that a released application should have.
Terrain
The game environment is composed of different types of plants, which the monsters eat, pools of water they drink from, and rocks which form barriers to the monsters
movement. The monsters can die from starvation and dehydration. You can edit the terrain during the game, adding or removing plants, water and rocks.
The plants have several stages of growth, and provide nutrition to
the monsters. I think I implemented some version of Conway's 'Game of Life'
to decide how the terrain foliage grows and changes.
The Monsters
Visually there are three types of Monsters, although there is no difference in behaviour associated with their appearance.
The monsters have a simple DNA code which can be inspected in-game. This DNA encodes some characteristics of the monster, including
it's appearance (which type it is). I can't remember what else is encoded, but probably some aspect of their nutritional needs or
movement or AI.
Reproduction
There are male and female monsters, and they reproduce. When a female monster is well fed and content, she may lay an egg. Content
males are attracted to these eggs and fertilize them. Baby monsters are born smaller than adult monsters. The current world population
is displayed onscreen.
Graphs
As the 'game' is really a population sim, you can track the relationship between the available food and the monster population. In the
screenshot shown here, I have been manually upping the available food supply: these are the very high white peaks. You can see that the
population rises before later crashing as the food is used up. When I first wrote this I would leave it running overnight to see how the
population handles various terrains.
If you are a programmer, I bet this was the first project you clicked on :-)
A very early influence on me was 'Chaos' by James Gleik. I read and re-read that book many times, years before I began studying to become a programmer. When I first began to write my own applications, I wanted to explore fractals myself, so I wrote my own application based on the information in
his book. This was 1999. Computers and the internet were not what you are familiar with now, and if the internet has always been around for you, then you probably can't imagine
what the technology of 1999 (and before!) was like.
It had been a long time since I last looked at this program, before writing about it here. It is certainly nowhere near as fast as can be done now (they can be done on the GPU of a phone now)
but the application is still pleasant and pretty. The lack of a nice way to select the zoom-in area is annoying, but I think it annoyed me back in 1999 when I wrote it: but I simply didn't know
how to make it work as I wanted.
I think it's pretty neat given that it's one of the first applications I ever wrote.