Here are a few recent projects I’ve been working on. If you’re interested in checking out the code for any of these projects, most of it can be found on my GitHub profile:

Current Projects:

Event Horizon

Event Horizon is a simple space-based infinite side-scroller for Android.

While a relatively simple project, this is my first project built for mobile and has allowed me to get to grips with integrating Unity Ads and Unity Analytics into a project. The game also includes a number of challenge levels, in which the player must navigate various environments in order to reach a goal. Event Horizon also has the infrastructure to incorporate multiple unlockable player ships.

In the near future, the option to remove ads will be added as well as a leaderboard. The game includes some assets that are not public domain but the C# scripts can be found on my GitHub page here, along with the latest alpha build.

BrewCraft Inc.

BrewCraft Inc. is a prototype that I put together for a game jam. I did not quite have enough time to finish the game but the majority of the key systems are in place.

The main Brewery screen of BrewCraft Inc. All on-screen assets are custom made using Blender.

The game currently includes recipe creation with realistic calculations of expected colour and bitterness values. The prototype also includes a working brewing system, allowing the player to create beer from the recipes.

The recipe creation window of BrewCraft Inc.

While much progress has been made, part of the key gameplay loop remains incomplete. That said, making this prototype has been a lot of fun and a great learning experience. The latest version of BrewCraft Inc. can be found here.


A Python-based all-in-one homebrewing system controller. The aim of this project is to create a system control multiple heating elements and pumps, with PID temperature control to prevent burning/scorching during operation.

The heating element power settings can be set manually, or the software can run a set of pre-set temperature steps. These can be uploaded and saved on the system via a python API.

The software will be run on a Raspberry Pi connected to the heating elements and pumps via solid state relays and can be run remotely via an SSH server.

Untitled Real Time Strategy Game

A real-time strategy game centred around the operation of an asteroid mining company. Build bases on asteroids, mine for materials, construct fleets and defend your claims.

The game so far includes:

  • Multiple procedurally generated asteroids
  • A simple building system
  • A basic strategic overview
One of the procedurally generated asteroids.

Future features:

  • Mining and economic system
  • Fleet combat
  • Long-range missiles
  • Research/patent purchasing
  • Multiple AI opponents

Currently this project is a long way from completion but has been extremely useful for learning about procedural generation of content. This project is available to view at my GitHub repo:

Completed projects:

hex control – a turn-based strategy game (Unity/C#)

This is a turn-based area control game created using the Unity game engine with all scripting written in C#. Players compete to gain influence, make money and control land primarily through the buying and selling of districts. Players can also spend their influence on lobbying actions to change the rules of the game to gain the upper hand or even change the victory condition itself.

The main screen of Hex Control.

The game includes randomised maps with a high degree of player customisation, local hot-seat multiplayer, multiple victory conditions, special abilities, and AI opponents of varying difficulties.

The game setup screen for Hex Control.

Hex Control is published on at The source files for Hex Control are available at

SALT Fabry-Perot data reduction pipeline (IDL)

As part of my PhD I did some work with the Fabry-Perot mode of the Robert Stobie Spectrograph on the Southern African Large Telescope (SALT). At the time, there was no complete data reduction pipeline publicly available so I wrote one in IDL. Note that this work is now outdated and listed here for demonstration purposes only. SALT users should use the pipelines provided by the observatory.

Fabry-Perot interferometry presents a unique challenge for a data reduction pipeline as the wavelength of light, as well as the position in the plane of the sky, varies as a function of position on the detector. Each pixel therefore represents a unique combination of wavelength and position that must be disentangled in order to produce a useful data cube. Versions 0.1 and 0.2 of the pipeline can be found here.

Astrophysical data processing with python

One of the key aspects of my work as an observational astrophysicist has been handling, reducing and analysing a wide variety of data products. This has included working with integral field spectroscopy, large imaging surveys, and the extremely large Gaia DR2 database (containing data for over 1.33 billion astrophysical sources). While I have worked with IDL a great deal, increasingly I have found myself turning to Python for most aspects of this work.

The compact HII region N88A shown in H2 emission (red), continuum emission (green), and Brackett Gama emission (blue). These data were obtained with SINFONI at the Very Large Telescope.

During my career I have written hundreds of Python scripts, focussing mainly on data processing and data visualisation. I have uploaded a small sample some of these programs to my GitHub repository. These include a package to predict the lifetimes of interstellar clouds, a program to visualise the timescales associated with different phases of star formation as a movie, and an image processing script for improving the readability of 3D integral field spectroscopic data cubes.

A simple score counter for tabletop games (JAVA)

This is a basic score counter I made to learn Java. The main motivation for this was to replace the scoring cards used in the deck-building game Star Realms. The default setup is therefore for two players, each starting with 50 points. By default the game ends when a player’s score drops to zero. However, multiple setups are available for scoring a wide variety of games.

The counter works using a system of profiles which can be saved and loaded to/from the disk. The counter can handle 1 to 6 players at a time. Various win or lose conditions are available based on target low/high scores and can be used simultaneously or the counter can be run without a win condition. The GUI is based on the swing library.

More information and the source code can be found at this Github repository.