Games

I’ve been a game developer since I was 11! A lot of games I made when I was 11 were terrible, but I think I’ve gotten pretty good at it at this point, here’s a few that I’m really proud of.

(2025) - Bub Machine Gun

I made a networked multiplayer FPS in 48 hours for global game jam 2025. It was made in Godot using GDScript. I used Aseprite to make some 32x32 PBR textures with a very convincing parallax effect. I’m especially happy with the bubble shader. Levels are made using TrenchBroom, exported as an Obj, and then imported into Godot. It is a deathmatch game where you attack enemies with bubbles, the more bubbled the player is the more bouyant they are, and if you hit the ceiling you die. It is available for free on my itch page. I’m currently working on a Steam release with more features.

You can watch parts of its development since I streamed a lot of it live. You can see some gameplay of it at 2:22:29 here

(2024-2025) - BOID FEEDER 9 BILLION

BOID FEEDER 9 BILLION is a 3D first person shooter for the Playdate. It contains a mix of 3D raster rendering and prerendered sprites. The engine was written in very optimized C using the playdate C API, and pushes the Playdate to its absolute limits.

(2023-now) - Complex Silver

This is my primary project. It’s not quite done yet, so I’m trying not to leak too much about it, but it’s a single player action adventure twin stick run and gun platformer that’s inspired by duck game and kirby. This project started out on Roblox as “Rektangle” before drifting through a few different game engines, eventually landing on Godot.

Some very early footage using stock assets is available here, though it has changed quite a bit since this video was recorded

(2017) - Alien Sushi VR

Alien sushi was a little wave attack game I made for Global Game Jam 2017. It was a relatively small project but the team I worked with was great. The gameplay is based around a boomerang disc that you use to attack 3 different types of enemies who all move in different patterns. I’ve worked on other VR projects as well but this one is still avialable for download.

(2015-2020) - Tetragon Fortress

Tetragon Fortress was a clone of Team Fortress 2 for Roblox. It’s what I’m most well known for. I initially created it as a programming exercise, I wanted to figure out how to program hitscan weapons in games, but the project broadened to making the original weapon sets for all the TF2 classes. The community got pretty big at one point, I pretty frequently saw 600+ concurrent users at peak time, and consistently had above 400. It’s playable through Roblox on PC, mobile, and XBox, though Roblox has since broken parts of the engine that it relied on so it is somewhat buggy these days. I ended up open sourcing it and now a community sequel is in the works https://www.roblox.com/games/11867064975/TetragonFortress-2-Early-Access-Arc though I am not involved in its development.

Github Stuff

My github is at github.com/RegularTetragon

Here’s some highlights:

Roblox Lag Compensation

This is an implementation of hitbox backtracking for Roblox in a small and convenient to use module. Lag compensation is one of the harder parts of making a first person shooter, and this library handles the bulk of the work involved in that.

Free Tetragon Fortress

See Tetragon Fortress above

Complex Silver HS

A version of complex silver based off of Apecs and Haskell. I really liked using Haskell for a videogame, but ultimately it was way easier to switch to Godot.

Microparsel

This is a parser combinator library for Lua inspired by Parsec for Haskell. It makes parsing LL(k) context free languages a breeze, and is way nicer than Lua’s built in pattern matching.

home-manager-vael

This is my user configuration for my snazzed up NixOS. I think it has a nice theme.

playdate-sdk-flake

This automates the process of downloading the playdate sdk allowing you to compile playdate games on NixOS. NixOS is interesting because it has the philosophy “if you have one problem, now you have two, but if you solve them then no one will ever need to again.” which I ran into with getting the Playdate SDK running.