Profile picture

June Rhodes

An almost complete history of everything I've ever done. Includes
software I've built, talks I've given and events I've helped run.

For software in this list, the date shown is its initial public release.
If a project was never released, the date is roughly when it
was cancelled.

202220212020201920182017201620152014201320122011201020092008200720062005Uncategorized
Filter by:

2022

In 2022, I was working on Unreal Engine plugins at my own company Redpoint Games.

Nov
All-Day Workshop at Technically Games 2022

This all-day workshop will give you the skills to write Unreal Engine C++ code. They cover everything from memory management through to exposing custom functionality in blueprints. The course is designed to be accessible even to developers who have not previously written C++ before and are coming from a C# background.

Video recordings are not yet available, but should be uploaded to YouTube in early 2023.

Slides and speaker notes are available for the sessions below. Only the first three sessions ever had slides prepared; the remainder just have speaker topic prompts which I used to guide the workshop session with feedback from the audience.

  1. Translation units & the preprocessor: Slides (with Speaker Notes)
  2. C++ memory model: Slides (with Speaker Notes)
  3. Pointers, references, VFT and constness: Slides (with Speaker Notes)
  4. Everything to do with text: Speaker Topic Prompts
  5. Shared pointers and memory lifetime: Speaker Topic Prompts
  6. Unreal Engine containers, including maps and arrays: Speaker Topic Prompts
  7. UObjects and garbage collection: Speaker Topic Prompts
  8. Delegates and callbacks: Speaker Topic Prompts
  9. Writing blueprint nodes and subsystems in C++: Speaker Topic Prompts
  10. The grab bag of useful things: Speaker Topic Prompts
  11. UnrealBuildTool modules and linking third-party code: Speaker Topic Prompts
Archived Page
Nov
Open Source Project

I built a build monitor to better visualise complex pipelines on GitLab. Works with the Unreal Engine Scripts to send automation test results in real-time to the dashboard.

Oct
Talk at GCAP 2022
Learn how to implement team-based matchmaking for your game, without having to run or pay for a centralised matchmaking server. This talk is a highly technical deep dive into the distributed matchmaking algorithm in our Matchmaking plugin for Unreal Engine, which leverages the free lobby APIs available in EOS and Steam to provide a low cost, scalable matchmaking solution for independent developers.
Sep
Open Source Project
Package and use self-contained Unreal Engine installs on Windows, macOS and Docker.
Mar
Unreal Engine Plugin
Team matchmaking for Unreal Engine! No matchmaking servers needed and no monthly fees!
Jan
Event

I was one of the organisers for Melbourne Global Game Jam 2022. Although we had hoped to host it in person, we ended up hosting it online due to the spread of the COVID-19 Omicron variant in Australia.

I spent most of the jam coordinating with other organisers, keeping the event running and maintaining the JamCast stream, so I did not create a GGJ game in 2022.

2021

In 2021, I was working on Unreal Engine plugins at my own company Redpoint Games. I didn't release more than a few things this year, but I did work on a lot of major features to EOS Online Subsystem, including support for all console platforms.

Nov
Lightning Talk at Technically Games 2021
Learn how I built a continuous functional testing system at Redpoint to test the behaviour of the Matchmaking plugin at scale. The work covered in this talk was later open sourced for anyone to use.
Nov
Unreal Engine Plugin
Catch C++ bugs before you run them. clang-tidy for Unreal Engine detects logical errors, performance issues and Unreal Engine specific bugs in your game code.
Oct
Talk at GCAP 2021

Developing and selling tools for other game developers to use is a very different market than the consumer market for games. From marketing to providing support, you need a different set of skills to acquire, engage and retain customers.

Whether you're game developer looking to get into the middleware space, or an existing middleware developer, this talk will have something for you. I'll be covering how to develop and publish plugins on the Unreal Engine Marketplace, pricing your products, the impacts of running sales and a deep dive on how to ensure you provide a great support experience for your customers.
Oct
Talk at GCAP 2021

If you're an Unreal Engine developer with CI/CD setup, you're probably using BuildCookRun to package your game for all the platforms you're targeting. BuildCookRun is inherently slow, because it performs all of its steps sequentially on a single machine.

Learn how to drastically reduce your Unreal Engine build times by using BuildGraph instead. In this talk I'll not only cover how to write BuildGraph scripts tailored to your project, but also how to integrate BuildGraph with your CI/CD server to distribute build steps across all of the build machines you have available.
Aug
Open Source Project
A collection of PowerShell scripts for building plugins, projects and Unreal Engine itself via BuildGraph. These scripts can also distribute your build across multiple build agents on GitLab.
Mar
Open Source Project
A very trivial C# program that used libclang to check for logical errors in Unreal Engine C++ code. This was superseded by clang-tidy for Unreal Engine (see above) which is far more powerful and uses all of the existing clang-tidy infrastructure.
Jan
Game Jam Game

A Momentary Meeting is about exploring an ever-changing world, and the fleeting interactions you have with other people along the way. A multiplayer text adventure where the links between "rooms" changes over time and occasionally you'll meet someone else in the same space. Your meeting is short lived however, as the ever changing world pulls you apart and thrusts you back somewhere nearby.

A screenshot of A Momentary Meeting. This was made at Global Game Jam 2021, with Chris Chua, Samuel Fawcett, Katelyn Gigante, Max Kearney and myself. The idea was a multiplayer narrative text adventure where you incidentally meet random strangers. I actually spent most my time doing the narrative and writing for this game, rather than the programming. I actually found it quite enjoyable to just write out descriptive scenes for the game.
Jan
Melbourne Global Game Jam
Event
I was one of the technical organisers for Melbourne Global Game Jam 2021. It was hosted online on Discord due to the COVID-19 pandemic.

2020

In 2020, I started working on Unreal Engine plugins at my own company Redpoint Games. Distinct from Redpoint Games prior to 2019, this incarnation is just myself as a sole trader.

Dec
Open Source Project
For many years, this was an internal library I wrote and used to build websites like JamHost and the License Manager. It was open sourced in December 2020. It provides a lot of useful APIs for building ASP.NET Core applications with Google Cloud Datastore as the primary database.
Sep
Unreal Engine Plugin
Use Epic Online Services in your Unreal Engine game! This plugin provides an online subsystem for Epic Online Services.
Aug
Documentation
A guide I wrote on how to write your own custom UNetDriver implementations in Unreal Engine, since the netcode in Unreal is fairly complicated. This guide has since been archived and is no longer kept up-to-date.
Jul
Unreal Engine Plugin
Access Unreal Engine's online subsystems from blueprints! No C++ necessary.
Jun
Unreal Engine Plugin
Plugin for building subsystems in blueprints, asynchronous tasks in synchronous code, and loading screens.
Jun
Discord Game SDK for Unreal Engine
Unreal Engine Plugin

Provides blueprint nodes, peer-to-peer networking and an online subsystem.

I retired this product in July 2021 due to Discord moving away from servicing games, and most of the relevant features such as presence were merged into the EOS Online Subsystem plugin.
Apr
Open Source Project

I wrote this tool to migrate documents in from one Google Drive account to another. At the time I was using the legacy version of Google Workspace, and wanted to migrate all of the documents stored in Google Drive to a personal Google account, in case Google ever shutdown the legacy version of Workspace.

Unfortunately you can't just change ownership of documents in a Workspace account to personal account, so this tool effectively does the "Make a Copy" operation, mirrors the sharing information, and then deletes the old copy from the Workspace account.
Jan
Event

I was one of the technical organisers for Melbourne Global Game Jam 2020. It was hosted at JMC Academy in late January, a few weeks before the COVID-19 pandemic started.

I was still working at Network Next at the time, and if I remember correctly, spent most of the jam doing work instead of actually participating in the game jam.

2019

In 2019, I working at Network Next. Of note, this is the only year that I did not attend Global Game Jam in Melbourne as I was in the United States at the time.

Dec
Harmony
Unreleased Project
I wrote a bot that synchronised Discord and Twitch chat. I think at the time I intended to run this as a service for other people to use, but I eventually stopped working on it as I had no personal need for it.
Oct
Talk at GCAP 2019

Note: This talk was given at GCAP 2019, which I attended on behalf of Network Next. There's a short section starting at 39:00 relating to the use of Network Next which may not reflect my current views on the topic.

Multiplayer games are huge and have great potential for long term retention of players, and that leads to ongoing revenue for a studio, but to achieve this, you need to make sure your multiplayer experience is excellent. You won't get that just throwing whatever library you can find on the asset store and hoping for the best. This talk will teach you how to implement multiplayer from the ground up, allowing you to make sure your online player experience is the best it can be.
Oct
Open Source Project
A small tool I wrote for testing floating-point determinism across different machines and CPU architectures.
Jun
Open Source Project
I was running a Minecraft: Bedrock Edition server in 2019, and I wanted some of the features you'd get in the Java Edition like showing player locations on an online map and chat synchronisation. Unfortunately Bedrock Edition is written in C++ so this kind of tooling wasn't readily available. I leveraged the PapyrusCS project to proxy all of the Minecraft traffic, see what players were doing on the server and then teleport the bot around to observe their location.
Feb
Open Source Project

At Network Next we needed a way to dynamically manage configuration for all the microservices we had and ensure that configuration is kept up-to-date in all of them in near real-time.

configstore takes a schema defined in JSON and then:

  • Provides a web administration panel where you can create entities and modify their settings.
  • Stores and retrieves data in Google Cloud Firestore. configstore itself is entirely stateless, making it trivial to run in a highly available setup.
  • Auto-generates a Go library for you that uses gRPC to watch for configuration changes via the configstore service. The generated Go library provides strongly typed Go objects and keeps everything up-to-date in the microservice.
Jan 2019 » Feb 2020
Network Next
Employment

Working out of Santa Monica, California, I was a full stack engineer at Network Next. Our focus was building a platform that could more optimally route game network traffic over the Internet based on latency, jitter and packet loss.

My work at Network Next involved:

  • Developing backend services in Go.
  • Developing the front-end portal in React and TypeScript, most of which is still in use as of Sep 2022.
  • Implementing and maintaining the Unreal Engine integration for the Network Next SDK.
  • Managing the build and deployment process to deploy the platform into Kubernetes on Google Cloud.
  • Maintaining the development environment through Skaffold and related tools.
  • Ordering, evaluating and managing the relay machines that network traffic was routed over, in locations all around the world.
I moved back to Melbourne in November 2019, and left Network Next around February 2020.

8 Years of Game Development


This period covers my time at university through to when we wrapped up Redpoint Games (the company). For almost all of this time I worked with Josh Harvey on game prototypes and plans on how to do game development sustainably. By the end of it we almost knew what we were doing, but we didn't have any money left and pursued our own careers in 2019.

2018

In 2018, I was working with Josh and Liam on games at Redpoint Games. At this time Redpoint Games was a company with all three of us as directors. When Redpoint Games reformed in 2020, it was as a sole trader under myself only.

This was the last year we pursued game development as a team. We were unsuccessful in obtaining funding for "Minute of Mayhem" from the local funding body Film Victoria, and we no longer had the financial runway to continue through to the next potential funding round.

Oct
Open Source Project

react-injectable is a library that makes it easier to dependency inject React contexts into components, while ensuring the TypeScript hinting is correct when using the wrapped components.

This library was used heavily in the web frontend for HiveMP (see below), where developers could manage their projects.
Aug
Open Source Project

At least in 2018, you could not automatically license installations of Unity with Personal licenses. The only way to license a machine was to go through the first-run wizard interactively.

At the time I wrote this, I was doing builds in the cloud which meant that Unity itself needed to be installed on-demand. This project emulated the first-run wizard's calls to the API to obtain a license for Unity and install it on the machine.

I don't remember what I was actually running Unity for though; the last game I wrote using Unity would have been in 2015, so I suspect this might have been related to some kind of Unity SDK for HiveMP.
Jul
Minute of Mayhem
Unreleased Game

Minute of Mayhem started as a prototype I developed in my last year of university in 2015. The game was initially called Sixty Seconds. The initial prototype was developed in Unity and presented at PAX Australia 2015 (through Swinburne University) and GX Australia (under Redpoint) in 2016. A trailer for the initial prototype when it was shown at PAX Australia is shown below:

Following on from the prototype, we renamed it to Minute of Mayhem and started developing it from scratch in MonoGame using our own Protogame framework. I wrote a lot of features into Protogame throughout Minute of Mayhem's development in 2017 and 2018. A full feature list up until the retirement of the Protogame framework can be found on the GitHub page for Protogame, but it includes things like a full deferred shading pipeline, network replication and hot reloading to name a few.

A screenshot of what Minute of Mayhem looked like prior to switching to Unreal Engine. The user interface is not shown.

In 2017 we used Unreal Engine 4 for the first time, and were able to rebuild our work on Minute of Mayhem to date within two weeks. We switched away from Protogame to Unreal Engine and continued development in Unreal Engine until Minute of Mayhem was cancelled in 2018.

A screenshot of what Minute of Mayhem looked like 2 weeks after switching to Unreal Engine. Again, the user interface is not shown. After it's cancellation, we each pursued our own careers. Notably, this led to me starting work for Network Next as a contractor in the latter half of 2018 and as a full-time employee in early 2019.
Jun
Unreal Engine Plugin

Dynamically instantiate sublevels in multiplayer games. Great for procedurally generated worlds!

I developed this plugin as part of Minute of Mayhem development, and it was the first plugin I released on the Unreal Engine Marketplace.
Apr
Open Source Project
This library provided a gcloud pipeline step for Jenkins that loaded service account credentials in a temporary environment for build jobs. Instead of having to configure gcloud on the build agents manually, it lets you store and load account service account credentials in Jenkins instead.
Mar
Open Source Project

I wrote a browser extension that made the netcode.io APIs available to Javascript applications, allowing for secure UDP game traffic to be used on the web. It was intended to be a polyfill until browsers adopted the standard themselves, but that never happened.

Since extensions don't work in mobile browsers, this project was abandoned in 2019.
Jan 2018 » Jul 2019
Open Source Project
pkgsign was an attempt to introduce package signing to the Node.js ecosystem. It didn't take off.
Jan
Event

I was one of the technical organisers for Melbourne Global Game Jam 2018. It was hosted at the Academy of Interactive Entertainment (AIE). At this jam I spent most of the time rewriting JamCast from scratch, so I don't have a GGJ game for this year.

A photo of JamCast projecting onto one of the walls at AIE.

2017

In 2017, I was working with Josh and Liam on games at Redpoint Games. We released Dimension Jump on Steam, and spent most of the year developing on Minute of Mayhem.

Nov
The Last City
Unreleased Prototype

I worked with Josh and Matt Kelly on an unreleased internal prototype called The Last City. It was a city builder where you also had to defend your city against giant monsters. Matt lead the design work and Josh and Matt worked together to implement systems and gameplay. I mostly worked on implementing the city simulation in C++.

We prototyped this as a week-long game jam out of The Arcade.
Aug
Event

I helped organise and run TIGJam Australia 2017 with Chad Toprak and Andrew Brophy. This was the fourth time the game jam ran and it took place at The Arcade co-working space on Kings Way.

The game I made at this game jam was extremely low quality, so much that I'm not even linking a screenshot of it. You can find a screenshot on the TIGJam Australia website if you really want to view it.

Despite several attempts to run TIGJam Australia again, this was the last time the event was run.

The Arcade co-working space permanently closed in 2022.
Aug
HiveMP
Software as a Service

HiveMP was a SaaS platform for game developers.

A screenshot of the HiveMP home page.

I initially developed it to support our own games, and by the time it shutdown in 2019 it had support for:

  • Analytics
    • Event Tracking: Track and report on custom events in your game.
    • Integration: Capture reported Steam data, including wishlist actions, sales data and simultaneous players to enable a better reporting experience.
    • Reporting: A flexible reporting solution to help you understand your data.
  • Finance
    • Licensing: Manage distribution of digital license keys to players and press. Configure expiring license keys to reduce key reseller fraud.
    • Revenue Share: Save time and lower costs by using HiveMP's revenue share system. Configure rulesets, enter invoices and payments, and HiveMP will automatically calculate the amounts for revenue share distribution.
  • Games
    • Chat: Cross-platform chat system for one-to-one messages.
    • Game Servers: Provision dedicated game servers on-demand.
    • Lobbies: Group players together prior to joining servers or starting peer-to-peer games.
    • Presence: Real-time online / offline status for players.
    • Sessions: Authenticate players on a global account system.
    • UGC Cache: Reduce user content download time with UGC caching. Serve user content from edge nodes around the world.
  • Infrastructure
    • Scheduling: Schedule HTTPS callbacks at points in the future, and HiveMP will automatically call them for you.
    • Search: Fast autocomplete and search indexing for text content.
  • Networking
    • NAT Punchthrough: Directly connect players over the Internet for peer-to-peer or player hosted games.
    • netcode.io Auth: Authenticate connections to dedicated game servers, preventing denial-of-service and traffic interception.

Of course, almost all of the services it provided are now better served by platforms like EOS, but in 2017 cross-platform gameplay was still difficult for independent developers to do at low cost.

Perhaps the most interesting aspect of HiveMP was the revenue share and Steam financial data importing systems. We used this at Redpoint to automatically import the data from the Steam financial data portal so we could run analytics on it and compare against our other analytics sources, such as Google Analytics.
Mar
Game (PC)

"Dimension Jump is a precision puzzle platformer, where you don't just jump between platforms, you jump between dimensions!"

We released Dimension Jump in March 2017 to positive reviews. We ran a few community streams and had it in a few bundles, and it made around $2000 AUD over it's lifetime.

In 2016 it was not possible to launch games on Steam without first going through Steam Greenlight. We wanted to start using the Steamworks APIs in Minute of Mayhem, but since we weren't approved for Steam we had no access to the backend. To this end, we decided to take the original Dimension Jump game that I'd released years ago, overhaul it and publish it on Steam through Steam Greenlight.

By the time we published Dimension Jump, Steam Greenlight was on the way out, but it gave us a ton of experience in actually shipping a game to consumers on Steam.

The original Dimension Jump was written in Game Maker 7, and we upgraded it to Game Maker Studio 1.4 in the version we released on Steam. However, Game Maker Studio 1.x ceased development and with no cost-effective upgrade path it became impractical to ship updates for the game.

In 2019 we made Dimension Jump free with a requirement to join our Discord server. The game wasn't generating revenue at this point, so we decided to use this as a way to build our Discord community. Unfortunately, we didn't take into account that players who got the game for free could leave negative reviews on the store page and we delisted the game from Steam in 2021.
Mar
Open Source Project

GameTest is a framework for automated end-to-end testing of games. It is intended to take an almost blank slate VM, and simulate a user installing a game through Steam, verifying that the game installs and launches correctly. After that, you can specify custom test scripts to test other behaviour inside your game.

I wrote GameTest so we could automatically test Dimension Jump and catch any missing dependencies that needed to be installed with the game via the Steam install scripts.
Jan
Game Jam Game

"Super Ball Brawlers is a 4 player competitive party game where players compete to be the last ball rolling! Roll around and try to knock off the competition! But watch out, all players can control the platform you're rolling on!"

This was made at Global Game Jam 2017, with Josh Harvey, Liam Alkamraikhi, Abby Phillips, Andrew Kasapidis and Kevin Powe. This is probably the last game I ever released that was built in the Protogame framework before moving to Unreal Engine.
Jan
Event
I was one of the technical organisers for Melbourne Global Game Jam 2017. It was hosted at Swinburne University in the ATC building.
Jan
Open Source Project

I wrote a collection of Google Apps Scripts to pull analytics and finance data from the Steam partner portal automatically. We used this for Dimension Jump to pull wishlisting data from Steam into Google Sheets where we could then compare it with e.g. Google Analytics data.

A screenshot showing the Steam wishlist data being imported into Google Sheets. This was replaced with the HiveMP Analytics product, but HiveMP was later shut down in 2019.

2016

In 2016, I was working with Josh and Liam on games at Redpoint Games. We were working on Minute of Mayhem. This was also the last year that I worked at PageUp People before I pursued game development full-time at Redpoint Games.

Oct
Open Source Project

micro-pubsub is a lightweight Pub/Sub service. It's designed to be a replacement for Google Cloud Pub/Sub in environments where you are willing to trade scalability for no cost, such as development environments.

A screenshot of the micro-pubsub statistics page.
Jan
Game Jam Game

Despite the name, there isn't actually any gameplay here. This was just a weird experiment to try building some sort of AR game that recognised the board space from the captured video stream.

Quoting the Global Game Jam page: "Some weird thing where you point a camera at a table and it detects all the red in the picture to find space for a board game. I don't know, I just wanted to play around with AR. It's recommended you use DroidCam to connect your phone webcam to the Windows app."

This was a solo project made at Global Game Jam 2016. The only photo available is this low resolution featured image from the Global Game Jam page:

Some kind of photo showing of the project. It's not a very good photo though.
Jan
Event
I was one of the technical organisers for Melbourne Global Game Jam 2016. It was hosted at Swinburne University in the ATC building.

2015

In 2015, I finished my final year of university. I don't believe I was working at PageUp People during this year, though if I was it was only part-time. This was also the year I realised I was trans, which made this year a lot rougher than most.

Oct
Beyond RequireComponent: Dependency Injection in Unity
Talk at UNITE 2015

This talk covered how to implement dependency injection in Unity games. Unfortunately the talks at UNITE 2015 weren't recorded (or at least, they're not online any more). However, the slides and source code are still available:

This was basically off the back of developing Sixty Seconds and another Unity-based game in my final year of university. This presentation is at least 7 years old and so it might not be relevant to modern Unity games, but you might find it useful even if only for historical purposes.
Oct 2015 » Mar 2019
Open Source Project
Prototest was a lightweight testing framework for .NET. It required no IDE plugins or extensions, nor did it require any command-line runners. Each test project is a .NET executable or application (depending on the target platform), and test execution is automatically run in parallel for you.
Aug
Open Source Project

A variety of generic level tools for Unity, released under an MIT license. Includes:

  • Editable pathing systems, with components for following paths built in a scene.
  • Snap to Grid components.
  • Automatic texture tiling.
  • Proximity sensor detection for triggering other game objects.
Jul
Terrible Cities
Game Jam Game

A board game that I developed with Josh Harvey at TIGJam Australia 2015. The idea is a cooperative/competitive board game where the rules perversely incentivise players to create the most impractical, badly designed cities. This photo was taken by either Chad Toprak or Harrison Smith.

A photo of Terrible Cities at TIGJam Australia 3.

We then did more playtesting and development until 2016. Below is a photo from playtesting session in January 2016.

A photo of Terrible Cities at a playtesting session in January 2016. After several rounds of playtesting, I think we decided to cancel the project as we couldn't figure out a set of rules that felt good and made sense.
Jul
Event

I helped organise and run TIGJam Australia 2015 with Chad Toprak and Andrew Brophy. This was the third time the game jam ran and the final time it was hosted at Inspire9.

Photos of the event taken by Chad Toprak and Harrison Smith can be found on Facebook. Here's one below just in case the Facebook archive goes offline:

A photo from TIGJam Australia 3.
Feb
Open Source Project

Omni was a shell (like Bash) written in PHP. This was as great of an idea as it sounds, and I had to write a PHP module in C++ to provide access to native terminal APIs that weren't available in PHP.

At the time this was written, PowerShell was not available for Linux or macOS, so this was an attempt to bring some of the ideas of PowerShell over to Linux.
Jan
Game Jam Game

The Global Game Jam page for this game isn't particularly descriptive, and there doesn't seem to be any gameplay when I'm running the game (in 2022). From the looks of things, it seems to mostly be an experiment in writing game AI.

A screenshot of the experimental Society game. This was a solo project made at Global Game Jam 2015.
Jan
Event
I was one of the technical organisers for Melbourne Global Game Jam 2015. It was hosted at Swinburne University in the ATC building.
Jul 2012 » Jan 2015
Unreleased Game

This was the first big game project I worked on, and I developed it with Josh Harvey and later Joshua Bradbury. Development started as an experimental project at TIGJam Australia 2012. Because I was arguably still new to game development and had no idea of scope or planning, this was a multiplayer procedurally generated RPG.

There were a lot of mistakes made during the development of this project, and it was eventually cancelled in 2015 after failing to receive any meaningful feedback through the IndieCade judging process.

I wrote a reflection piece on the project in early 2015 that gives more of the history and background of the project, though I haven't read it in a long time so there might be statements in there I no longer stand by.

Of note, this is the project that I first learnt how to write multiplayer / game networking code for, which would be important later on in my career.

Here is the last real video that we made of the game, when it was still in pre-alpha:

Here is an extremely early screenshot of the game back when it was called Tychaia (probably not too soon after TIGJam Australia 2012):

A very early screenshot of Unearth (then known as Tychaia).

2014

In 2014, I was employed at PageUp People in a developer-operations role. I did try doing university part-time at the start of this year, but with employment as well it was too much and I deferred the rest of my final year university subjects to 2015.

Feb
Open Source Game

Mir was intended to be an open source re-implementation of Mojang's space exploration game that used the DCPU-16, but I stopped working on it after about a month.

I managed to implement the ship editor, room editor and DCPU-16 emulation (using a third-party library), which you can see below:

Jan
Game Jam Game

A neat little game where each player has a slightly different game map, and you have to work together to solve puzzles. The philosophical viewpoint in this game didn't age particularly well though.

A screenshot of Perspective. This was made at Global Game Jam 2014 with Olek Kalinowski and myself.
Jan
Event
I was one of the technical organisers for Melbourne Global Game Jam 2014. It was hosted at the Academy of Interactive Entertainment (AIE).

2013

In 2013, I did my industry placement at PageUp People. Industry placement was a program in my university course at Swinburne where you would be employed at a software development company for a year of your degree.

Oct
Role Playing Tool

This was a little online tool that I wrote for a sci-fi table top role playing game that a few friends and I were running. Players could write journal entries between sessions and planets and various locations could be tracked.

The long term idea was that multiple groups of players could be using the same online system for their sessions, and build off the lore that other groups have written.

The login screen for Stolen Stars. One of the character sheets from the game.

More screenshots are available here: 1 2 3 4 5 6

I open sourced this in September 2016 in an effort to open source my earlier work. As part of this, I did a little restructuring so that it could work as a Docker container.
Aug
Event

I helped organise and run TIGJam Australia 2013 with Chad Toprak and Andrew Brophy. This was the second time the game jam ran and it was hosted at Inspire9.

I haven't been able to find a photo archive of this event unfortunately.
Jul 2013 » Jan 2020
Open Source Project
May 2013 » Nov 2015
Open Source Project

cstools was a collection of C# related tooling, designed to integrate with Phabricator (which we were using at the time to store source code and merge pull requests).

It included a linter based on StyleCop and a code coverage tool that would instrument assemblies.
Feb
Open Source Project
I wrote a flow graph component for Windows Forms. We used this for our infinite procedural generation editor in Unearth, so we could easily customize how the level generation worked.
Jan
Game Jam Game
This is an experimental game that I worked on with Josh Harvey at Melbourne Global Game Jam 2013. The GGJ 2013 servers are offline, so I have no way to get a screenshot for this, but from memory we sort of got half way and realised the game wasn't going to work.
Jan
Event
I was one of the technical organisers for Melbourne Global Game Jam 2013. It was hosted at the Academy of Interactive Entertainment (AIE).

2012

In 2012, I was undertaking the second year of my university degree at Swinburne University.

Aug
Open Source Project

This is a set of open source scripts that you would install onto a Linux box that had two Ethernet ports. It would bridge traffic between the networks and throttle or filter traffic based on the computer name and the QuotaTracker configuration. It could also be used to enable "transparent Tor", which would upgrade all traffic from a given machine to be routed over Tor instead.

Most consumer routers have quota tracking features these days, but when this was written it wasn't a broadly available feature.
Jul
Event

The very first TIGJam Australia that ran! I helped organise this with Andrew Brophy and we hosted it at Inspire9.

Back in 2012, Melbourne Global Game Jam still had a "competitive" feel to it, so the goal of this event was to run something that was super relaxed and no pressure.

The photo album for this event was shared on Google+, which Google shutdown in 2018 and thus the photo album is no longer available.
May
"To Give a Game"
Documentary

As part of my university course, we had to do a video project. Our group chose to do a documentary on a local hosting of the 23rd Ludum Dare game jam in Melbourne. Includes interviews with Jason Bakker, Davey Wreden, Andrew Brophy and Harry Lee 尚倫.

Apr 2012 » Aug 2017
Open Source Project

Protogame was a game engine built on top of XNA/MonoGame. I worked with Andrew Brophy on a game called "Old Man Baby" at the "What Would Molyduex?" game jam that Harry Lee 尚倫 ran in 2012, and the code I wrote for that game became the basis for Protogame. Andrew Brophy later did a Flash remake of "Old Man Baby" on Kongregate.

A screenshot from Old Man Baby, the project whose codebase eventually became Protogame.

Protogame would go on to be used in no small number of projects that I developed, including Unearth (Tychaia), Minute of Mayhem and a decent chunk of the game jam games I worked on between 2012 and 2017.

By the time most of my development work moved to Unreal Engine, Protogame had an impressive feature set for an open source game engine. A full feature list is available on the can be found on the GitHub page for Protogame, but to give you an idea, it supported 2D & 3D games, deferred lighting, components and transform hierarchy, physics, networking with replication and a UI system.

Towards the latter part of it's lifecycle, I started working on editors, including an experimental integration into MonoDevelop, but the editors never reached full maturity before Protogame was retired:

Protogame also spawned a number of other open source projects, including Prototest, Protoinject and Protobuild, the latter of which was adopted upstream by MonoGame before it was eventually retirement in 2020.

I stopped development on Protogame when we moved our projects to Unreal Engine.

Apr 2012 » Feb 2013
Open Source Project

In early 2012, Mojang announced the development of a space exploration game where ships could be run programs on a virtual CPU, called the DCPU-16. This open source project implemented a toolchain that targeted the CPU architecture, with the intent that tools would be able to run inside the game itself on the CPU. This constraint meant that a lot of existing projects such as LLVM were not suitable for this task, so this was a "ground up" implementation of a toolchain.

A screenshot of the emulator from the DCPU-16 Toolchain.

I couldn't find many screenshots of this project, but I did find an old tutorial video on YouTube which shows a little bit of what development looked like.

I started the project, but many community members came onboard after only a month. I did a significant amount of the initial development on tools, with other community members improving what I'd written:

  • Emulator
  • Assembler
  • Preprocessor
  • The initial C compiler which was written in C
    • This implementation was later replaced with an implementation by another community member, written in C++
  • Linker
  • Kernel ABIs and support for those ABIs in the assembler and linker
  • Debugger
  • Standard C library APIs

I think the most interesting part of this project was implementing the linker; it gave me a hands on experience on how linkers really work for normal architectures, and why they are not able to produce useful error messages in a lot of cases.

This project was effectively abandoned when Mojang cancelled the development of the game that it was being written for. I later worked on an open source game called Mir which used the DCPU-16, but was cancelled after a month of development.

Jan 2012 » May 2012
Open Source Project

ModBridge was a project to bring forward compatibility to Minecraft mods, and to allow developers to write mods in C# against a standardized API. Mods could also be sandboxed using the C# sandboxing features, allowing mods to be automatically installed from game servers.

It also solved problems with ID conflicts and meant that developers didn't need to decompile Minecraft in order to write mods.

The Minecraft Forum (Archived Page) post includes more historical information about it's development.

I stopped working on this when my focus shifted to the DCPU-16 Toolchain.

A screenshot of using ModBridge in Minecraft. A screenshot of using ModBridge in Minecraft.
Jan
Melbourne Global Game Jam
Event

I was one of the technical organisers for Melbourne Global Game Jam 2011. I'm fairly confident this jam was hosted at La Trobe University on the Bundoora Campus.

I don't think I have a game for this year; I'm pretty sure I would have just been improving JamCast.

2011

In 2011, I was undertaking the first year of my university degree at Swinburne University.

Nov
One Must Die
University Project

A game project that I developed at university with other students, One Must Die was a first-person shooter where you have to vote off one team member each round. That team member would become the boss antagonist on the next round you play. It was developed in UDK over the course of one semester.

A screenshot of One Must Die.

There is also a YouTube video of the gameplay, though it's not edited at all and has the framerate quality you'd expect from desktop recording in 2011.

Jul
Open Source Project

In 2011 I followed a bunch of tutorials to learn how Intel x86 kernels were written, and used those tutorials to implement my own kernel.

This was purely an exercise in learning how kernels work, but the implementation ended up on GitHub as an implementation for other people to learn from as well.

Jul
iView Alerts
Chrome Extension

This was a Chrome browser extension that would notify you when new episodes were available on iView, by polling the RSS feed that ABC made available.

It was abandoned a few years later when ABC removed the RSS feed. The Chrome extension page was removed by Google at some point, but you can see a screenshot of what it looked like below.

A screenshot of iView Alerts.
Mar
Winnitron AU
Arcade Cabinet

A collaborative effort between myself and members of the local game development community, this is a local arcade cabinet featuring locally made and international independent video games. My dad and I did the hardware construction and assembly, while other community members did the artwork and developed the local games.

  • Kert Gartner - Attract Screen
  • James Filippone - Side Artwork
  • June and Peter Rhodes - Construction
  • John Sietsma - Financial Donations
  • Academy of Interactive Entertainment (AIE) - Original PC
  • Guy Blomberg (Mana Bar Melbourne) - Hosting

Winnitron AU features Australian exclusive local games that can't be played anywhere else, including:

We built the cabinet out of MDF over the span of several weeks. Additional photos available here: 1 4

The basic cabinet structure comes together. The inset for holding the CRT screen is in.

It was launched at the March 2011 IGDA Melbourne meetup, and later playable at the Freeplay 2011 festival.

The Winnitron AU at the IGDA Melbourne meetup. The Winnitron AU at the Freeplay 2011 festival.

After it's launch, the cabinet was then available to play at the Mana Bar Melbourne until it closed in 2015. Prior to the Mana Bar closing, Craig Peebles did additional work to install extra ventaliation fans to prevent overheating, and by the time that work was complete the Mana Bar had shutdown.

The cabinet ran on the original Winnitron platform, being in the first dozen machines that were built around the world. After the Mana Bar closed, the original Winnitron service at winnitron.ca shutdown, and so the machine wasn't playable until the new Winnitron platform was up and running (now at winnitron.com).

Despite my best efforts, this is the only photo I could find of the Winnitron AU at the Mana Bar. All of the other links I could find in the Wayback Machine are dead, either because the Mana Bar itself shutdown and removed the relevant photos, or the media outlets that covered it no longer have the articles up. The Wayback Machine unfortunately doesn't capture a lot of images, so this low resolution thumbnail is all that we have.

A photo taken by Atomic MPC, a now defunct magazine for PC gamers that used to be online at http://www.atomicmpc.com.au/.

The cabinet was then stored in The Arcade Melbourne (1.0 on City Rd), before being moved as part of the relocation of The Arcade to Kings Way (2.0). It was briefly playable in the latter half of 2021, before being put into storage again with the permanent closure of The Arcade.

A photo of the Winnitron AU when it was briefly running at The Arcade 2.0.

I would like to find a new home for the Winnitron AU where it can be played by the public. If you have suggestions, please send me a message on Mastodon.

Mar
Open Source Project
I wrote a Python-like language that could be compiled down to assembly. This is one of my early experiments with writing compilers and it is very incomplete.
Jan
JamCast
Software Project

The first version of JamCast was developed in 2010 during the first Melbourne Global Game Jam (see below). With game developers all in separate rooms, I wrote a version that captured bitmap images from developer desktops and sent them to the projectors in every room - the idea being to give people visibility on what other people were making throughout the jam. Keep in mind that in January 2010, Open Broadcaster Software hadn't even been released, let alone in wide use.

At each Global Game Jam, it developed more features including Slack integration and pulling tweets from Twitter off a hashtag. I also had to adapt it to the unique networking setup of each event over the years, as Melbourne Global Game Jam has been hosted at La Trobe, Swinburne, AIE, JMC Academy and online during the COVID-19 pandemic.

Although there are a few open source iterations of JamCast floating around on the Internet, it is now stored in the same private Git repository as JamHost, since it is now tightly coupled to that online event platform. Hence this entry doesn't link to any of the open source implementations as they're all significantly out-of-date.

JamCast now uses Open Broadcaster Software under the hood and relays video streams via NGINX RTMP.
Jan
Melbourne Global Game Jam
Event

The very first Melbourne Global Game Jam. I attended this and ended up helping with the technical stuff, which is how I ended up being one of the technical organisers for the event for over a decade. This is also where I wrote the very first version of JamCast for streaming people's desktops (though it was basically just screenshots as BMP images over UDP at this point). This jam was hosted at the La Trobe University Bundoora Campus.

Apparently there is a 2010 jam listed on this page of jam sites, but it wasn't run by the IGDA Melbourne crew as far as I can tell.
Jan
Dimension Jump (Classic)
Game

Dimension Jump (the one released on Steam) was actually a remaster of an earlier freeware game I'd made and released on GameJolt. It was the first game I'd made after being stuck for a few years feeling like any idea I came up with would be derivative. It was only after talking with another member of the Game Maker Community that had made a relatively popular game and having them point out that most of their own game ideas are derivative in some form and that games evolve beyond their initial idea that I was able to get back into game development and create Dimension Jump.

This original game differs from the later remaster in a few ways:

  • The remaster introduced the level editor and all of the Steam-related features like level sharing and leaderboards.
  • The original had a much steeper difficulty curve; we spent a lot of time on the remaster making sure that the tutorials and first set of levels were really easy to pick up to prevent people quitting the game early.
  • The original had themed sections; you can see in the screenshots below that one of the sections was themed as cave exploration / adventure and the other section was apocalyptic cityscape.
  • The original had freeware music; the remaster had music made for it by a contractor.
  • The original had an actual area that would move around in to access the levels which you can see in the screenshots below; the remaster has a more conventional menu system for level select.
  • In the original, some levels limited the number of times you could dimension jump (seen in screenshot #4). This ran anthetical to the design of the game though, so we removed this system in the remaster.
  • The remaster added proper support for 16:9 screen resolutions and updated the engine to Game Maker Studio 1.4 (the original was Game Maker 6).

Archived Page

Screenshot #1 for Dimension Jump Classic. Screenshot #2 for Dimension Jump Classic. Screenshot #3 for Dimension Jump Classic. Screenshot #4 for Dimension Jump Classic.

The Ancient Times


Beyond this point we start getting into my high school years. Many of the projects here are ancient, and are really here for completeness rather than any sense of quality.

2010

In 2010, I took a gap year between the final year of high school and university. It was mostly spent developing Roket3D and running RoketGames (see earlier years for information on both of these).

Dec
Open Source Project
I wrote a distributed peer-to-peer DNS service called Trust4. You would add trusted peers and it would serve domains on the .p2p domain extension. It was written in C#.
Jun
Open Source Project

I wrote a packaging format for Linux called AppTools that was designed to support side-by-side library installs and mount and run applications from self-contained packages. That is, you could download the self-executing package, run it, and the AppTools wrapper would take care of mounting the package to a temporary directory and running the application.

This project was eventually abandoned as I could not get the filesystem format stable, and the distribution I was writing it for (elementary OS) ended up basing their distribution on Ubuntu rather than using AppTools for packaging.

These days Snap provides the self-contained packages idea that AppTools was pursuing.

2009

In 2009, I was in my final year of high school.

RoketGames
Website

In and around 2009, I ran a game hosting website called RoketGames. I'm not sure of the exact date when this was operating from and to, because at some point between 2009 and 2011 most of the data was lost due to an exploit on the shared hosting service that it was operating on.

What I've managed to construct here is from a backup that I managed to find (and at the time I didn't know I had). The backup that contained user data unfortunately only has DOS-style 8.3 filenames for everything, so it wasn't possible to get something very useable to explore beyond taking the screenshots below.

RoketGames competed with other sites like GameJolt (which is still around!) and YoYoGames back when they did game hosting for Game Maker games. It hosted games, had blogs and forums, had online service APIs with an overlay (like the Steam overlay) and an instant game launcher called YAIPP. Towards the end of it's life, I also pursued supporting commercial games, allowing developers to connect their PayPal accounts and sell games through the platform, though there was never sufficient use to sustain operational costs and the advertisements didn't cover costs either.

After the shared hosting service was exploited, I was never able to restore the website source code and it died out.

Clicking on the images below will take you to the full-sized version of the screenshot.

The home page, featuring all of the games on the platform. What one of the game pages looked like (Iji). A blog post I wrote about how to deal with PayPal's pricing structure at the time. The page shown when looking at a user's games.

More screenshots: 5

Feb
Game (PC)

A weird little shoot-em-up I made in one night. The player is controlled by the mouse cursor, and you have to shoot and then absorb the enemies to manage the size of the player over time. The music is procedurally generated and thus, absolutely terrible. You could try playing it on mute, but it would detract from the tension.

Integrates with RoketGames which was a game hosting platform I running at the time. Of course, those APIs are long since gone and don't work any more.

A screenshot of the Circle² gameplay.

2008

In 2008, I was in Year 11 of high school.

Dec
Game (PC)

YoYo Games (the creators of Game Maker) ran a game jam in late 2008. This is a 2D RTS game that I made for it.

A screenshot of Planet Attack.
Oct
The Thing 3
Unreleased Game

This was an unreleased sequel to The Thing 2. The last build I have is from October 2008, so I'm pretty sure development stopped around then. It overhauled the graphics, added co-op multiplayer (via DirectPlay) and the collisions seem to be less buggy.

Title screen of The Thing 3. Screenshot #1 of The Thing 3. Screenshot #1 of The Thing 3.
Oct
DocWatcher
Software

This software sorted documents in a folder based on their file type. The idea is that you could set it up to watch your Downloads folder and it would automatically move files to the desired location based on whether they were images, videos and so forth. It doesn't run at all on Windows 11, so the only screenshot of this I could get is of the download page on the old Roket Productions website.

It was initially shareware with a commercial upgrade, and later made freeware.

The download page for DocWatcher on the Roket Productions website.
Jul
ZeroPC
Game

A digital card game that was kind of based on 500. I'm pretty sure Josh Harvey and I developed the game rules together, but it's been a while. The strategy is try and play cards towards the middle so you don't win or lose each hand. Included online play, which obviously no longer works.

A screenshot of the ZeroPC game.

You can also play Zero with just a normal deck of cards and 3 other players. The rules (as explained by the ZeroPC game) are:

Starting

In the game of Zero, a player deals and the person to their right starts leading. The person who leads may pick any card from their hand to lead with, excluding either Joker.

Playing

Each player takes their turn in playing a card after the person has lead. The turns rotate anti-clockwise. If a suit is played, and the person has that suit in their hand, they must play a card of that suit or the Joker with the same color as the suit lead. If the person cannot play a card that matches the suit, then they may offsuit, throwing out a card of another suit. The card thrown out has no value and it is not counted when working out who won or lost the trick (excluding special cases). The person who plays the highest card of the suit lead starts leading next turn. The person who plays the lowest card of that suit places all of the cards played into their hand. The first person to have no cards left in their hand wins.

Special Cases

When a suit is lead, and every other player offsuits, then the person who played the lowest value card by number loses the trick. The person who lead, leads again.

Card Order

The order of card values from lowest to highest are: 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K, A, Joker.

May
Game (PC)

In 2008 I built a 3D RTS in Game Maker with a few friends. Game Maker didn't have the ability to batch render 3D models, which resulted in extremely poor performance for any non-trivial map, ultimately hindering any further development of the game.

A screenshot of the Valhalla: Deliverance main menu.

That said, I still think this is pretty good considering what Game Maker was capable of at the time.

A screenshot of the Valhalla: Deliverance gameplay.

2007

In 2007, I was in Year 10 of high school.

Roket Productions
Website

Redpoint Games has had a lot of previous company names:

  • Roket Productions
  • Roket Enterprises
  • Redpoint Software
  • Redpoint Games

In 2007 it was called Roket Productions and as can probably be expected, there was a website listing all of the projects and services we had available. A screenshot of the home page can be seen below:

A screenshot of the Roket Productions home page.
Dec
The Thing 2
Game

This was an unofficial sequel to a platforming game made by a different person. The player character is bouncy (and has no jump key). It featured a level editor and an online level pack system. It initially had a release around a December 2007 and updated throughout 2008.

Screenshot #1 of The Thing 2. Screenshot #2 of The Thing 2. Screenshot #3 of The Thing 2. Screenshot of the website of The Thing 2, before the game listing was moved to RoketGames.
Oct
Software Project

The very first game engine I ever wrote. It was written in C++ and used Irrlicht for 3D rendering, Lua for scripting and Newton Physics for physics simulation. It had a light-weight C++ generator that would automatically generate Lua binding code for all of the native classes. I modified Lua to support things like a first-class type system and an 'is' operator for type comparisons. Reflecting on this in 2022, it is astounding that I was 15 years old when I was first developing this and publishing this on the Internet.

To emphasize the context in which this software was developed:

  • It is so old that source control history only starts in 2010. It would have initially been stored in Subversion, before moving to Mercurial. I'm not sure it was ever developed in Git; I suspect Google Code might have converted the repository when they exported it to GitHub after Google Code closed down.
  • For the first few years of development, Unity wasn't available for independent game developers to make 3D games in. The release of Unity as a low-cost 3D game engine is what killed the development of this engine once it was made freely available to developers. If I remember correctly, the original audience for this engine were game developers who wanted to go beyond what Game Maker was capable of; once Unity released their free tier there was no longer a market for the engine.
  • I think the IDE started development in 2010. It was later repurposed for the MOAI game engine (which I did some contracting work for in 2011) but was never released.

I've included some screenshots from the Wayback Machine below. Images link to the Wayback Machine capture of the page. The first image is from December 2007.

A Wayback Machine capture from 2007 showing the "features" of Roket3D.

Ah yes, "lost it all in a USB crash". Classic 2007. A later capture shows it's evolution during 2008.

And yes, the name that my friends and I used for our projects during this period was "Roket Productions". We were 15 - don't hold it against us.

2006

In 2006, I was in Year 9 of high school.

2005

In 2005, I was in Year 8 of high school. This is as far back as my archives go, and mostly consists of really old games I was making in Game Maker at the time.

Uncategorized

This is an incomplete list of things that I haven't yet properly added to this page. I still need to go back and figure out when they were originally released and get screenshots, etc. for them:

  • RoketPack
  • Dx: Distributed Extensions for .NET
  • JamHost
  • What would Moly Duex game jam game with Andrew Brophy
  • Phabricator work including the development of Harbormaster and Drydock
  • Work done at PageUp People between 2013 and 2015
  • Pivot game engine (never released)
  • Ancient stuff I have in a folder called "Project Backup 2009"
  • Ancient games including Planet Attack II (cancelled)
  • Game Maker Resources (online website I ran)
  • Time Effects Engine for Game Maker
  • Total Annihilation Launcher (for mods)
  • The TF2 map "Pylon" (2011)
  • TrackMania Nations and TrackMania United maps
  • [email protected] (for the Portal 2 ARG)