Projects
This is a sort-of complete list of things I’d label as projects. The more “notable” things are also on my CV.
Magpie#
Fully-custom 3D Vulkan Renderer with and extensive Vulkan abstraction layer, integrated model loading, a physically based material system, asset management and more.
Leviathan#
A framework for creating 2D games inspired by FNA/MonoGame, written in C++ using the SDL and OpenGL libraries. It features its own custom maths library and container implementations, and handles basic asset loading/unloading, entity management, input and event handling, and rendering.
Path Tracer#
Physically-based path tracer capable of metallic, lambertian and refractive materials.
2D Finite-Element Solver#
Given a set of 2D beams of different materials and shapes inter-connected between each other, a set of input forces and boundary-conditions, it forms a stiffness matrix which it uses to form a linear equation that is then be solved for the deflection of each point.
2D Navier-Stokes Fluid Solver#
Iteratively updates a fluid velocity-grid following Navier-Stokes equations by first applying external forces, then applies the diffusive term, and finally applies advection. In-between, it re-projects the velocities to keep the divergence of the field zero.
Wyvern#
I wrote this game engine for my Computer Science NEA. I’m glad I did it, and its probably the only reason I ever had the courage to really jump into Vulkan, which was super intimidating at the time. That being said, the code hasn’t exactly aged very well. It’s got incomplete physics, a barebones entity system, the input system is still pretty good (does what it needs to do), and the renderer is a complete mess. I was coming from an OpenGL perspective so I tried to mold it into… that. I even created a set of custom container types like a string, vector, hash map, deque, etc…
The renderer maintains a global state and builds pipelines on the fly (which isn’t a bad thing but maintaining global state like that isn’t exactly great). It was incredibly messy to use and shader buffers working was what could only be called a miracle. It was inextensible, and finding bugs was a nightmare (didn’t help I also made my own maths library as well and couldn’t figure out how to get the data to align properly for sending to the GPU, so at any point I had a rendering issue it could have equally come from ten seperate different things). Good times.
When I started Magpie, I used the rendering backend from this as a “base” to start from, though it has been pretty much completely re-written by this point. I also stopped using my own custom containers and maths library because it’s extra work that could be spent elsewhere.
Advent of Code#
My solutions to Advent of Code! I have yet to do 2024 and 2025…
Project Euler#
My solutions to some Project Euler problems!
Monte Carlo Robot Localiser#
Learning about Monte-Carlo localisation, I wanted to try it out on a really simple test case. I imagined a 2D robot on a plain grid, that moved at a constant velocity through space. The idea is the robot could only know a very broad idea of where it was - the grid coordinate. It’s job would be to use this technique to try to figure out it’s exact position and velocity. Imagine you have a map, and know you move from K8 to K9 to J9 to J10, what is your velocity and position? It worked pretty well, but I would like to revisit this in the future and make it more optimised and efficient. One more thing to add to the backburner…
AsciiLand#
My first “real” C project, I wrote it around Year 10. It featured a simple “pure” entity-component-system, map loading, “texture” loading, a renderer, you could move around the map between different chunks, pick up and equip different items, etc… I haven’t tried running it since but I have no doubt it’s full of memory mismanagement errors.
Battle Boats#
Hilariously over-engineered battle boats that I wrote in year 12. Nothing much else to say about that.
Mandelbrot Set Visualiser#
Multithreaded Mandelbrot set visualiser written in Java using Swing.
WinForms Tetris#
It’s literally just Tetris.
Small projects that don’t justify their own repos#
- Conways Game of Life
- 2048
- A* Algorithm Visualised
- Towers of Hanoi recursive solution
- Minimum Spanning Tree via Prim’s Algorithm
- Colour image to ASCII converter
- BrainFuck interpreter written in C