Design
I decide the architecture.
GPU abstraction boundaries, immutable render packets, owner-authoritative netcode - design calls, not generated ones.
Senior Generalist Programmer · Big Ant Studios · Melbourne
I build the systems a game is made of - Vulkan rendering, engine architecture, netcode, and the tools the rest of the team works in.
Shipped at Big Ant Studios
08
Cricket 26 2025
Rugby League 26 2025
AFL 26 2025
Rugby 25 2025
TIEBREAK 2024
Cricket 24 2023
AFL 23 2023
Cricket 22 2022 Outside work / personal engine
AetherCore - a Vulkan engine with an editor, hot-reloadable C# gameplay, and owner-authoritative netcode.
Now
Senior Generalist Programmer, Big Ant Studios
Shipped
8 console and PC titles since 2022
Core
C++ · Vulkan · C# · engine tooling
How I work / 4 agent-directed projects
I architect, evaluate, and review. Agent harnesses do most of the typing, and projects built that way are labelled below.
Design
I decide the architecture.
GPU abstraction boundaries, immutable render packets, owner-authoritative netcode - design calls, not generated ones.
Verification
Nothing merges on vibes.
1,271 tests, a guard that fails the build on abstraction leaks, architecture checks every push.
Throughput
Weeks of work, done in days.
Several models running in parallel through omp and Claude Code, split so they do not collide.
Evaluation
I learn it before I add it.
New Vulkan extensions and NAT traversal - studied properly, then mostly left out. The connect ladder earned its place.
Tools for teammates
I build what they asked for.
Every in-house tool starts with the programmers and QA who will live in it. I write up what they need, then document the result so it is usable without me.
Release pressure
I take the tickets nobody else can finish.
Near submission I work directly with producers and clear the TRC tickets at risk of missing the date, including other seniors' queues when they are away. I was doing that before I had the title.
Selected work / 4 case studies
4 projects with more detail on my role, the technical problems, and the result.
/01
An editor-first Vulkan game engine for 2D and 3D games, with a GPU-driven renderer, hot-reloadable C# gameplay, owner-authoritative multiplayer with full NAT traversal, and an end-to-end asset and publishing pipeline.
Role I own the architecture and direct the work. The engine started as hand-written C++ and Vulkan, and as it grew I moved to directing it through multi-agent harnesses - I set the design, the boundaries, and the acceptance criteria, then review, verify, and land the result.
Case study
An editor-first Vulkan game engine for 2D and 3D games, with a GPU-driven renderer, hot-reloadable C# gameplay, owner-authoritative multiplayer with full NAT traversal, and an end-to-end asset and publishing pipeline.
Role
I own the architecture and direct the work. The engine started as hand-written C++ and Vulkan, and as it grew I moved to directing it through multi-agent harnesses - I set the design, the boundaries, and the acceptance criteria, then review, verify, and land the result.
Problem
I wanted the renderer, authoring tools, scripting layer, networking, and shipping workflow to evolve as one usable engine - not become another technically interesting renderer demo that never supported making a game.
Outcome
How it was built
AetherCore began as hand-written C++ and Vulkan. As the surface area grew I moved to directing it through agent harnesses (omp, Claude Code) and several models working in parallel, which is how an engine this size stays tractable for one person - subsystems that would have taken weeks land in days. I am the architect and the reviewer rather than the person typing every line: I decide the design and the constraints, the agents implement against them, and nothing merges until it passes the test suite, the GPU abstraction guard, and my own review. The 1,271 tests and the architecture checks in CI exist because that workflow needs a hard verification floor.
Approach
Capabilities
Engineering signals
Select an image to enlarge
/02
Internal tooling and automation suite spanning memory diagnostics, crash reporting, CI/developer workflow scripts, and distributed QA orchestration for large-scale automated game validation.
Role Designed and implemented multiple production tools used by programmers and QA, including memory analysis workflows, crash triage pipelines, script ecosystem migration, and distributed automated crash testing. Each one started with the people who would use it - I sat down with them, wrote up what they actually needed, and documented the finished tool so it did not depend on me.
Case study
Internal tooling and automation suite spanning memory diagnostics, crash reporting, CI/developer workflow scripts, and distributed QA orchestration for large-scale automated game validation.
Role
Designed and implemented multiple production tools used by programmers and QA, including memory analysis workflows, crash triage pipelines, script ecosystem migration, and distributed automated crash testing. Each one started with the people who would use it - I sat down with them, wrote up what they actually needed, and documented the finished tool so it did not depend on me.
Problem
Memory investigation, crash triage, release checks, and multi-machine QA all depended on repetitive manual work that made failures slower to reproduce and harder to group.
Outcome
Approach
Capabilities
/03
A multi-platform cricket game released on PC, PlayStation, and Xbox.
Role I fully implemented the title's client-side WebSocket stack, including cross-platform TLS handshake support, and took that networking work through TRC certification for release, alongside building in-house tooling.
Case study
A multi-platform cricket game released on PC, PlayStation, and Xbox.
Role
I fully implemented the title's client-side WebSocket stack, including cross-platform TLS handshake support, and took that networking work through TRC certification for release, alongside building in-house tooling.
Problem
The title needed a production-ready websocket client with secure TLS behaviour that remained consistent across every supported platform and its different networking constraints.
Outcome
Approach
Capabilities
Select an image to enlarge
/04
A multi-platform licensed tennis game with career modes, online play, and a large UI surface built across two interface systems.
Role Owned most of the UI implementation, built complete game modes, and helped bridge the in-house widget system and NoesisGUI.
Case study
A multi-platform licensed tennis game with career modes, online play, and a large UI surface built across two interface systems.
Role
Owned most of the UI implementation, built complete game modes, and helped bridge the in-house widget system and NoesisGUI.
Problem
TIEBREAK still depended on the studio's legacy widget framework while other programmers were moving to NoesisGUI, leaving a large amount of UI and entire game modes to be delivered under severe schedule pressure.
Outcome
Approach
Capabilities
Select an image to enlarge
Work archive / 29 entries
Professional work, personal engines, experiments, and smaller tools.
/01
A fix-and-polish mod for the PAL release of Crash Twinsanity on PS2 that patches the disc image directly, restoring cut content and improving load times and output.
Direct ISO patching that rebuilds a modded disc image without touching the original · Restored cutscene skipping with an on-screen prompt in five languages · 25-50% faster level loads depending on CDVD configuration
Case study
A fix-and-polish mod for the PAL release of Crash Twinsanity on PS2 that patches the disc image directly, restoring cut content and improving load times and output.
Role
Solo project, directed rather than hand-written. I chose what to fix, worked out what the patches had to do to the PAL executable, and verified every change in the emulator; the patcher and wiki were largely agent-built to that spec.
Problem
The retail PAL release disabled the cutscene-skip feature before shipping, loads levels slowly, and outputs 480i, and none of these could be fixed from emulator settings alone.
Outcome
How it was built
This one was agent-directed from the start. I drove the reverse-engineering - deciding which cut features were worth restoring, reading the PAL executable's behaviour, and testing each patch in PCSX2 - and used agents to write the Python patcher, the build tooling, and the wiki against that spec. The verification is the part I own: every change here was confirmed running on a patched disc image.
Approach
Capabilities
Select an image to enlarge
/02
The site you are reading - a static Astro build with a filterable project archive, a tabbed case-study overlay, and a CV generated from the same content collection.
Single static page built from a typed Astro content collection of every project · Filterable archive with search, domain and year facets, URL-synced state, and lazy paging · Tabbed case-study overlay with focus trapping, keyboard tab navigation, and image zoom
Case study
The site you are reading - a static Astro build with a filterable project archive, a tabbed case-study overlay, and a CV generated from the same content collection.
Role
I set the direction, the information architecture, and the editorial standard, and I review every change. The implementation is agent-directed, which is also why this entry exists - it would be strange to label the other projects and quietly leave this one out.
Problem
A portfolio is the one artifact a hiring manager actually reads, and mine had drifted - a stale job title, projects described in dense, unreadable blocks, and claims with no evidence behind them.
Outcome
How it was built
This site is itself agent-directed work, and disclosing that is the whole reason the label exists. I set the direction, judge the writing, and reject what does not hold up - including the parts of an automated audit that turned out to be wrong. The agent does the implementation and the verification runs: headless browser checks for layout and accessibility, a real build before anything lands. If you want to see how I direct this kind of work rather than read about it, the commit history is public.
Approach
Capabilities
Select an image to enlarge
/03
An editor-first Vulkan game engine for 2D and 3D games, with a GPU-driven renderer, hot-reloadable C# gameplay, owner-authoritative multiplayer with full NAT traversal, and an end-to-end asset and publishing pipeline.
Render graph with bindless descriptors, buffer device address, and GPU-driven draw culling · Tiled lighting with cascaded and local shadows, contact shadows, GTAO, and screen-space reflections · Post-processing stack covering volumetric fog, bloom, depth of field, histogram auto-exposure, and a tonemapper with eight selectable operators
Case study
An editor-first Vulkan game engine for 2D and 3D games, with a GPU-driven renderer, hot-reloadable C# gameplay, owner-authoritative multiplayer with full NAT traversal, and an end-to-end asset and publishing pipeline.
Role
I own the architecture and direct the work. The engine started as hand-written C++ and Vulkan, and as it grew I moved to directing it through multi-agent harnesses - I set the design, the boundaries, and the acceptance criteria, then review, verify, and land the result.
Problem
I wanted the renderer, authoring tools, scripting layer, networking, and shipping workflow to evolve as one usable engine - not become another technically interesting renderer demo that never supported making a game.
Outcome
How it was built
AetherCore began as hand-written C++ and Vulkan. As the surface area grew I moved to directing it through agent harnesses (omp, Claude Code) and several models working in parallel, which is how an engine this size stays tractable for one person - subsystems that would have taken weeks land in days. I am the architect and the reviewer rather than the person typing every line: I decide the design and the constraints, the agents implement against them, and nothing merges until it passes the test suite, the GPU abstraction guard, and my own review. The 1,271 tests and the architecture checks in CI exist because that workflow needs a hard verification floor.
Approach
Capabilities
Engineering signals
Select an image to enlarge
/04
A Rust desktop application that scores RuneScape 3 Grand Exchange market history to surface profitable item flips, backed by a Python data collection pipeline and SQLite.
Multi-factor flip scoring across ROI, volume, profit, volatility, and data reliability · Automatic filtering of unrealistic flips by volume, ROI, and price sanity bounds · Item tiering from Diamond to Crash based on profitability
Case study
A Rust desktop application that scores RuneScape 3 Grand Exchange market history to surface profitable item flips, backed by a Python data collection pipeline and SQLite.
Role
Solo project. I designed the scoring model and the data pipeline and wrote the first version by hand, then moved the build to agent-directed development while keeping the design decisions and the review my own.
Problem
Flipping in the Grand Exchange means guessing which of thousands of items have enough liquidity and spread to be worth trading, from raw price history that gives no guidance.
Outcome
How it was built
I wrote the first version by hand and then shifted to directing agents through a harness once the shape of the scoring model was settled. The judgement calls that make it work - which factors to weight, how to log-scale volume, where to cut vendor trash out of the results - are mine; a lot of the implementation and the Rust UI plumbing was agent-written to my spec and reviewed by me.
Approach
Capabilities
/05
Internal tooling and automation suite spanning memory diagnostics, crash reporting, CI/developer workflow scripts, and distributed QA orchestration for large-scale automated game validation.
Internal memory-analysis tool for CSV-driven leak and waste analysis · Internal crash-capture pipeline with WER-based dump/log capture and crash grouping · CSX migration of internal automation scripts from Python
Case study
Internal tooling and automation suite spanning memory diagnostics, crash reporting, CI/developer workflow scripts, and distributed QA orchestration for large-scale automated game validation.
Role
Designed and implemented multiple production tools used by programmers and QA, including memory analysis workflows, crash triage pipelines, script ecosystem migration, and distributed automated crash testing. Each one started with the people who would use it - I sat down with them, wrote up what they actually needed, and documented the finished tool so it did not depend on me.
Problem
Memory investigation, crash triage, release checks, and multi-machine QA all depended on repetitive manual work that made failures slower to reproduce and harder to group.
Outcome
Approach
Capabilities
/06
A multi-platform cricket game released on PC, PlayStation, and Xbox.
Cricket franchise systems support · Multi-platform release workflow · Client-side WebSocket implementation
Case study
A multi-platform cricket game released on PC, PlayStation, and Xbox.
Role
I fully implemented the title's client-side WebSocket stack, including cross-platform TLS handshake support, and took that networking work through TRC certification for release, alongside building in-house tooling.
Problem
The title needed a production-ready websocket client with secure TLS behaviour that remained consistent across every supported platform and its different networking constraints.
Outcome
Approach
Capabilities
Select an image to enlarge
/07
A rugby league title where I contributed cross-title code integration, in-house tooling support, client-server integration, and certification work across the project lifecycle.
Sports simulation systems · Cross-platform feature delivery · Production gameplay tuning
Case study
A rugby league title where I contributed cross-title code integration, in-house tooling support, client-server integration, and certification work across the project lifecycle.
Role
I handled cross-title code integration, supported the team's in-house tooling, worked on client-server integration, and carried TRC certification work across the project lifecycle.
Capabilities
Select an image to enlarge
/08
Modern audio player with real-time visualisation, spatial audio control, and advanced audio processing using OpenAL-Soft and ImGui.
Multi-format audio support (MP3, WAV, FLAC) · Real-time FFT-based visualisation · Spatial 3D audio positioning
Case study
Modern audio player with real-time visualisation, spatial audio control, and advanced audio processing using OpenAL-Soft and ImGui.
Role
C++ audio systems developer.
Capabilities
Select an image to enlarge
/09
A modular 2D/3D game engine framework with OpenGL and Vulkan backends and physically based rendering - the predecessor step in my engine lineage that led to AetherCore, where I first learned cross-API renderer architecture and modular subsystem integration.
OpenGL and Vulkan backends · Physically Based Rendering (PBR) · Modular system integration
Case study
A modular 2D/3D game engine framework with OpenGL and Vulkan backends and physically based rendering - the predecessor step in my engine lineage that led to AetherCore, where I first learned cross-API renderer architecture and modular subsystem integration.
Role
Engine systems and rendering architecture.
Capabilities
Select an image to enlarge
/10
A multi-platform AFL title where I brought the game's gameplay systems up to date with newer studio titles, integrated PlayFab, and fixed server-side issues during production.
Ongoing sports franchise support · Multi-platform release delivery · Gameplay and systems iteration
Case study
A multi-platform AFL title where I brought the game's gameplay systems up to date with newer studio titles, integrated PlayFab, and fixed server-side issues during production.
Role
I ported and merged gameplay systems from newer studio titles into the AFL codebase, integrated PlayFab online services, and tracked down and fixed server-side bugs introduced by the merge process.
Problem
The AFL codebase had fallen behind newer titles in the studio and needed its gameplay systems brought up to date, with working online services, in time for release.
Approach
Capabilities
Select an image to enlarge
/11
Networking sandbox where I worked through ENet, reliable UDP communication, and client-server architecture patterns - the groundwork that later fed AetherCore's netcode.
Concurrent multi-client connection management on a threaded server · Reliable packet delivery implementation · Broadcast messaging infrastructure
Case study
Networking sandbox where I worked through ENet, reliable UDP communication, and client-server architecture patterns - the groundwork that later fed AetherCore's netcode.
Role
Networking systems programmer.
Capabilities
Select an image to enlarge
/12
OpenGL-powered colour grading laboratory experimenting with HDR rendering, CLUT workflows, and post-processing effects.
Real-time 3D rendering with customisable camera · Advanced colour grading using 1D and 3D CLUTs · HDR rendering with multiple tone mapping operators
Case study
OpenGL-powered colour grading laboratory experimenting with HDR rendering, CLUT workflows, and post-processing effects.
Role
Graphics programmer and tooling designer.
Capabilities
Select an image to enlarge
/13
A C# scripting library that turns plain CSX scripts into styled WinForms applications with DPI scaling, dark mode, and rounded corners.
WindowManager class for building forms from CSX scripts with a single · Automatic DPI scaling based on system settings · Dark mode detection and theming that follows the Windows theme
Case study
A C# scripting library that turns plain CSX scripts into styled WinForms applications with DPI scaling, dark mode, and rounded corners.
Role
Solo developer.
Problem
C# scripting with dotnet-script is convenient for utilities, but CSX files have no easy way to get a presentable windowed UI without dragging in a full project.
Outcome
Approach
Capabilities
/14
A multi-platform rugby title where I brought an ageing codebase up to date with newer studio systems, handled client-to-server integration, and cleared the title through platform certification.
Sports gameplay systems · Platform release support · Iterative production polish
Case study
A multi-platform rugby title where I brought an ageing codebase up to date with newer studio systems, handled client-to-server integration, and cleared the title through platform certification.
Role
I merged systems from multiple newer titles into the older Rugby codebase, patched the resulting conflicts and regressions, handled client-to-server integration, and put in the TRC certification work needed to get this legacy codebase through platform submissions.
Capabilities
Select an image to enlarge
/15
A Jekyll-based documentation website covering C++ development - from project setup and fundamentals through to advanced topics like building Vulkan game engines.
C++ project setup guides · Step-by-step Vulkan tutorials · Code examples with commentary
Case study
A Jekyll-based documentation website covering C++ development - from project setup and fundamentals through to advanced topics like building Vulkan game engines.
Role
Technical writer and systems educator.
Capabilities
Select an image to enlarge
/16
Co-developed Lua/Love2D game project exploring what it is like to build a full game entirely in Lua, with Declan owning major AI agent systems while I handled gameplay systems, tools, integration, and art.
Full game loop and state machine built in Lua · Multi-region progression systems with upgrade and resource mechanics · Clicker/tycoon gameplay with active and passive income flow
Case study
Co-developed Lua/Love2D game project exploring what it is like to build a full game entirely in Lua, with Declan owning major AI agent systems while I handled gameplay systems, tools, integration, and art.
Role
Co-developer with Declan. Declan led AI agent development and behaviour systems; I led gameplay systems, tools, integration, and art.
Capabilities
Select an image to enlarge
/17
A multi-platform licensed tennis game with career modes, online play, and a large UI surface built across two interface systems.
Real-time gameplay systems · Input and responsiveness tuning · Performance optimisation
Case study
A multi-platform licensed tennis game with career modes, online play, and a large UI surface built across two interface systems.
Role
Owned most of the UI implementation, built complete game modes, and helped bridge the in-house widget system and NoesisGUI.
Problem
TIEBREAK still depended on the studio's legacy widget framework while other programmers were moving to NoesisGUI, leaving a large amount of UI and entire game modes to be delivered under severe schedule pressure.
Outcome
Approach
Capabilities
Select an image to enlarge
/18
A Vulkan-based game engine (SlimeOdyssey) paired with a 2D platformer game - built to explore modern Vulkan 1.3 features, ECS architecture, and PBR rendering across Windows, Linux, and macOS.
Vulkan 1.3 renderer with vk-bootstrap and VulkanMemoryAllocator · Entity Component System (ECS) architecture · Physically Based Rendering (PBR)
Case study
A Vulkan-based game engine (SlimeOdyssey) paired with a 2D platformer game - built to explore modern Vulkan 1.3 features, ECS architecture, and PBR rendering across Windows, Linux, and macOS.
Role
Engine and gameplay programmer, co-developed with Connor Young.
Capabilities
Select an image to enlarge
/19
An unfinished weekend prototype where two friends and I got co-op multiplayer, Steamworks sessions, and a playable map running in Unreal Engine 5.
Co-op multiplayer sessions in Unreal Engine 5 · Steamworks session and menu flow · House map and terrain built for puzzle traversal
Case study
An unfinished weekend prototype where two friends and I got co-op multiplayer, Steamworks sessions, and a playable map running in Unreal Engine 5.
Role
One of three people on a weekend project. I set up the UE5 project and Git LFS pipeline, wired the main menus and Steamworks session flow, stood up the multiplayer layer, and built the house map and terrain. Declan Rogers designed the game and contributed map and programming work; Connor Young maintained the build automation.
Problem
I wanted hands-on time with Unreal Engine 5's multiplayer and Steamworks session stack rather than reading about it, so we gave ourselves a weekend and a co-op horror premise to force the work.
Outcome
Approach
Capabilities
/20
A multi-platform cricket title where I built UI screens, fixed state-flow issues, integrated PlayFab and PlayGo, and worked on TRC certification.
Gameplay systems · Content and rules integration · Performance-minded feature work
Case study
A multi-platform cricket title where I built UI screens, fixed state-flow issues, integrated PlayFab and PlayGo, and worked on TRC certification.
Role
I built a large number of UI screens, resolved state-flow issues, and implemented PlayFab and PlayGo online features, then carried the TRC certification work needed for the title to pass platform submissions.
Capabilities
Select an image to enlarge
/21
A licensed AFL game where I took ownership of the in-house UI backend, built frontend screens, and contributed to the Academy player creation system.
Game feature implementation · Bug fixing and polish · Cross-team integration
Case study
A licensed AFL game where I took ownership of the in-house UI backend, built frontend screens, and contributed to the Academy player creation system.
Role
Implemented and maintained the UI backend powering every screen in the game, built numerous frontend screens, and contributed to the Academy player creation system.
Capabilities
Select an image to enlarge
/22
C++ sandbox project for prototyping a runtime command console that can execute custom commands in a live application without relying on a GUI.
Runtime command console integrated directly into the application loop · CVar-style command registration and parsing pipeline · Custom commands for driving behaviour and triggering code paths at runtime
Case study
C++ sandbox project for prototyping a runtime command console that can execute custom commands in a live application without relying on a GUI.
Role
Solo engine tools programmer.
Capabilities
Select an image to enlarge
/23
The learning projects that preceded my engine and graphics work, built alongside an Advanced Diploma of Professional Game Development at AIE Melbourne, plus a lot of self-taught C++ and Unity work in my own time.
Shop Game (2019) - text-based console market simulator with dynamic item pricing, my first exercise in classes, structs, and reusable C++ · Simon (2019) - memory game built on an update/draw loop with class-driven state flow and a custom DynamicArray template · SlimeCube (2022) - OpenGL viewer that loaded complex meshes and simulated PBR materials, with ImGui controls and CMake cross-platform builds
Case study
The learning projects that preceded my engine and graphics work, built alongside an Advanced Diploma of Professional Game Development at AIE Melbourne, plus a lot of self-taught C++ and Unity work in my own time.
Capabilities
/24
My first shipped professional title, a AAA cricket game where I fixed bugs across the game during its production cycle.
Sports gameplay systems · Broad platform support · Production QA and optimisation
Case study
My first shipped professional title, a AAA cricket game where I fixed bugs across the game during its production cycle.
Role
I implemented bug fixes across the game during its production, working within a broad multi-platform AAA sports title as my first professional credit.
Capabilities
Select an image to enlarge
/25
Technical research project exploring procedural terrain and mesh generation with the Marching Cubes algorithm.
Marching Cubes mesh extraction · Procedural terrain generation · Real-time mesh updates
Case study
Technical research project exploring procedural terrain and mesh generation with the Marching Cubes algorithm.
Role
Graphics and systems programmer focused on procedural generation.
Capabilities
Select an image to enlarge
/26
Experimental OpenGL 2D game framework focused on physics, sprite rendering, text rendering, and texture atlasing.
2D physics and collision systems · Sprite and text rendering pipeline · Texture atlas workflow
Case study
Experimental OpenGL 2D game framework focused on physics, sprite rendering, text rendering, and texture atlasing.
Role
Solo developer building gameplay and rendering systems.
Capabilities
Select an image to enlarge
/27
OpenGL renderer implementing a physically based rendering pipeline with multi-texture material support.
Physically based rendering · Multi-texture material system · Real-time lighting
Case study
OpenGL renderer implementing a physically based rendering pipeline with multi-texture material support.
Role
Solo graphics programmer.
Capabilities
Engineering signals
Select an image to enlarge
/28
Two C++ cellular automata experiments - a 2D liquid physics simulator and a noise-driven procedural world generator.
2D liquid physics via cellular automata · Procedural world generation with noise · Real-time simulation stepping
Case study
Two C++ cellular automata experiments - a 2D liquid physics simulator and a noise-driven procedural world generator.
Role
Simulation and procedural systems programmer.
Capabilities
Select an image to enlarge
/29
WinForms image editor project built to learn how desktop applications are structured, while exploring core algorithms needed for practical editing tools.
Bresenham-style line rasterization for drawing tools · Queue-based flood fill implementation for bucket behaviour
Case study
WinForms image editor project built to learn how desktop applications are structured, while exploring core algorithms needed for practical editing tools.
Role
Solo programmer.
Capabilities
Select an image to enlarge
No projects match the current filter set.