Oh crap, it actually works


A .NET library for random number generation. It aims to rectify deficiencies present in the standard library's random number generator, System.Random, while keeping adaptability and extensibility in mind. RandN is heavily inspired by the design of the Rust crate rand, and aims to maintain some level of compatibility with it. It includes implementations of several RNGs, such as PCG32, Mersenne Twister, and the cryptographically secure ChaCha.

Axis and Allies Calculator

A high-performance, high-precision battle calculator for the Axis and Allies series of board games. The core calculation engine is written in Rust for performance and compiled to WebAssembly (WASM) for use in JavaScript. A frontend built with Angular + TypeScript makes it easy to setup battles and view statistics as a battle progresses through interactive charts and summaries. Designed around extensibility, the calculator can support a wide variety of rulesets and editions.

Bar chart of attacker's strength compared to the defender's strength over 7 rounds, both of which decrease rapidly.


A polyhedron generator and viewer. It uses Conway Polyhedron Notation to represent transformations on polyhedrons. It's written in Rust and renders polyhedrons with the new WebGPU graphics API.

Screenshot of a generated polyhedron with formula dkdkdkdkdkdkdkdI


What you might an AI test-bed or playground and is the result of taking a homework assignment a few steps too far. Based off of a Scratch project, this is a complete rewrite in C#. Essentially, the goal is to write an AI that can collect, process, and finally transmit the most soil samples on the surface of Mars before it runs out of moves or power. The surface is represented by a grid with Smooth, Rough, and Impassable tiles.

RoverSim is cross-platform with three different clients, supporting Linux, MacOS, and Windows via Avalonia, the web via Blazor, and Windows again via Windows Forms.

View live demo


These are a bunch of projects that I'd like to work on at some point, but I haven't yet found the time to do so.