Games & Robotics

A Minecraft strategy mod, a trigonometry city builder and follow-me drone software.

CivMod

Active · 2026

A grand-strategy layer for single-player Minecraft: nations, cities, research and war.

CivMod turns a single-player Minecraft world into a strategy game. You found a nation and build cities while AI nations expand, research, trade and go to war around you. A city planner imports Litematica, Sponge schematic and NBT structure files, and visible builder NPCs place them block by block from the city's own stores.

All the game rules live in a plain-Java core with no Minecraft imports, about 10,400 lines with 8,000 lines of tests, so the simulation can be tested in seconds without starting the game. NeoForge game tests and a client self-test cover the parts that touch Minecraft, including loading saves from every earlier milestone.

Running the design numbers on real world seeds produced zero AI wars, because AI capitals spawned 36 to 147 chunks apart and never met. Raising the neighbour range from 32 to 96 chunks gave five wars and one elimination over 240 game days on one seed. Two other seeds still gave none, and that is logged as an open problem.

Built with Java 25, NeoForge, Gradle, JUnit, NeoForge GameTests

CivMod strategy map: four nations with their scores, a rival's army strength, and a warning that a neighbour plans war on day 53
CivMod city screen: population, food, production and stores on the left, the build queue, and options to plan a design or raise a militia

Lafayette Rising

Paused · 2026

A 21-day trigonometry course that pays out in buildings for a Cajun city you design.

A browser game for learning trigonometry over 21 days. Each day is a level of problems, and solving them earns buildings and residents for a city modelled on Lafayette, Louisiana, which you lay out yourself.

The first version filled the city in automatically. Phase 1 replaced that with a serializable grid model: buildings have footprints that collide, can be rotated, moved and demolished, and old saves migrate to the new format. Phase 2 made roads matter. A building only counts as active if it touches a road, which needed connectivity logic and a second save migration. Game state lives in a zustand store saved to the browser, so there is no server.

The city logic has 51 tests. The plan runs to five phases, ending in a SimCity-style economy with services and disasters; work stopped halfway through phase 2, with seven of its thirteen tasks done.

Built with TypeScript, Next.js, React, zustand, Tailwind, node:test

followme

Paused · 2026

Drone software that follows only the person who enrolled at takeoff.

Software for a drone that follows one person at a set distance. The subject enrolls by standing in front of the camera at takeoff, and there is deliberately no way to point it at someone from a photo. After that it tracks them with YOLOv8n and ByteTrack, and when they disappear behind something it finds them again by matching face (ArcFace) and body appearance (OSNet).

The safety rules are a tested state machine: hover after one second without the subject, land after eight, never exceed 1.5 m/s, and stay inside a 30 m geofence. A body-only match can never take over a lock that is already held, and the lock uses hysteresis so it does not flicker between people.

The full detect, re-identify and control loop runs at about 8 frames a second at 640 by 480 on a laptop CPU. Five scripted scenarios cover walking straight, hiding behind a wall, a stranger crossing, turning away and stop-start. The PX4 simulator adapter is written but has not been run yet.

Built with Python, YOLOv8n, ByteTrack, ArcFace, OSNet, MAVSDK, PX4 SITL, pytest

Other work