← back to projects

Low Drag RTS

active GitHub →

A real-time strategy engine built from scratch in TypeScript and Three.js — no game engine, no shortcuts, no sanity. Inspired by Total Annihilation. Rendered entirely in the browser.

what it is

This is a hobby project with no deadline and entirely too much ambition, which is exactly how it should be. The goal is a browser-based RTS with procedurally generated voxel terrain, a proper resource economy, unit combat, and an AI that doesn't immediately walk into walls.

The current branch (`main`, promoted from `state-machine-implementation`) is a terrain and rendering branch. It does not yet contain units or combat — those exist in `old-main` for reference, but the visual engine rebuild came first. Right now it looks incredible and does nothing. Progress.

what's working

what's next

Phase 2 is terrain improvement — taller mountains, deeper valleys, more readable geography. Primarily a tuning exercise on `GameParameters.ts` (HEIGHT_SCALE, PERSISTENCE, NOISE_SCALE) plus potentially a valley carving pass using a low-frequency subtracted noise layer.

Phase 3 brings units back: `Unit.ts`, `UnitManager`, click-to-select, right-click-to-move on terrain surface, health bars.

Then combat, then the resource system.

the resource economy

The resource design is already specced:

tech stack

TypeScript (strict), Three.js, Webpack 5, simplex-noise, postprocessing (loaded, not yet wired).

do not touch

`TerrainGenerator.ts` — the shader injection via `onBeforeCompile` is fragile by design and the reflection system depends on precise uniform setup. `LightingSystem.ts` — colour transitions are parameter-driven and carefully tuned. Touch either at your peril.