Steamforge

A Victorian-steampunk survival city builder in the spirit of Banished. It is rendered in 3D in the browser, installs as a Progressive Web App, and runs a deterministic simulation driven entirely by JSON content.

.NET 10 ASP.NET Core EF Core PostgreSQL SQLite React 19 TypeScript Vite Three.js Zustand TanStack Query PWA OpenTelemetry Docker

SteamForge is a survival city builder set in a Victorian-steampunk world, in the tradition of Banished. You lead a handful of families into an untouched northern river valley and keep them alive through the winters. They fell timber, quarry stone, sink mines, smelt iron and forge tools, then raise steam to power their workshops and warm their homes.

The game runs in the browser as a 3D world with an RTS camera, and it can be installed as a Progressive Web App. An ASP.NET Core backend serves the game content and stores accounts and cloud saves, while the whole colony simulation runs deterministically in the client.

A Colony of Brass & Steam

The Meridian Steam Company sends you north beyond the last railhead as Chief Engineer, with a few families and Steamforge No. 9, a sealed pressure engine. Eleven forges went before yours, and only four still answer telegrams. The Brass Charter asks for a self-sufficient colony within the decade, and dispatches from the Company's Board arrive as the colony reaches its milestones.

A Colony of Brass & Steam Title screen, with optional sign-in for cloud saves

Choose Your Frontier

Every colony is generated from a seed. The map generator layers elevation with a mountain rim, meandering rivers and lakes, ore and coal seams, forests and boulders, then flattens a founding site for the Steamforge. Players choose a Valley, Highlands or Lakeland map in three sizes.

Four difficulty presets, Tinkerer, Engineer, Ironclad and Brass Inferno, change the starting families and supplies, how harsh the winters are, how often disasters strike, and production, birth, spoilage and wear rates.

Choose Your Frontier Founding a colony: name, seed, difficulty preset, map size and terrain

Citizens Are the Economy

There is no money. The colony's only real resource is its people, and starvation and cold are the enemy. Citizens need homes, a varied diet, firewood, tools and coats. They marry when a house is free, have children, grow old and die. Anyone without a trade works as a laborer, hauling materials, clearing land and keeping the Steamforge fuelled.

Each citizen runs a prioritised task AI: urgent needs first, then sleep or lamplit work after dark, then collecting gear, stocking the home pantry, the job and finally general labour. Tasks are plain data, so a colony can be saved at any moment.

Citizens Are the Economy A thirteen-year-old colony of 58 settlers grown around the Steamforge, with crop fields, glasshouses and a guild hall

Pause and Build

The camera pans, rotates and zooms like an RTS, with full touch support for pan, pinch and twist. Pressing Space stops time, and every command is still accepted while paused: placing buildings, roads, bridges and fields, marking land for clearing and reassigning workers. Nothing is built until time runs again, at speeds from ×1 to ×20.

Each placed building becomes a site that goes through clearing, material delivery and construction. Laborers haul from storage while builders add work, and progress can never outrun the materials delivered.

Pause and Build A generated river valley ringed by mountains, with the colony at its heart

Steam, Pressure and the Steamforge

The Steamforge is the colony's headquarters, storehouse, shelter and first steam generator. Forge works built against its walls raise its output. Steam, feedwater and galvanic power are separate energy networks carried by conduits that builders lay like roads.

Pressure falls along every tile of pipe. Each second a cheapest-path search runs outward from every lit generator, so better conduit grades, booster pumps and boiler houses decide how far a town can spread from its boilers. Homes on a steam grid burn firewood only for the share of heat the steam does not supply.

Steam, Pressure and the Steamforge Steamforge No. 9 with its forge works, steam ducts and the cottages it heats

Day, Night and Soot

Each month has two days, and daylight follows the seasons. At night citizens go home to sleep, and only workplaces and sites lit by gas or galvanic arc lamps keep working, at reduced speed.

Coal smoke is simulated too. Chimneys, boilers and home stoves put out soot that the seasonal wind carries across the map, where it settles as grime. Sooty air harms lungs, lowers happiness, spoils hunting and cuts field yields. The answers are siting homes upwind, keeping forest belts, building tall stacks, apothecaries and galvanic precipitators.

Day, Night and Soot Night falls over the colony, with gas lamps lighting the streets and the Steamforge still venting steam

The Overseer's Report

The colony keeps books. At the end of each month the simulation closes a ledger entry with population, stock and what was made and used. The overseer's report turns this into headline figures, ranked notes that jump to the workplace in question, charts of people, food and firewood over time, a per-trade workplace view with crew controls, and a production breakdown for every resource.

The Overseer's Report The overseer's report: headline figures, the overseer's notes and twelve years of population, food and firewood

Guilds and Petitions

Every trade belongs to one of four guilds: the Brotherhood of Stokers & Miners, the Artisans' Guild, the Engineers' Institute and the Land & Water Union. Each guild's standing drifts monthly towards a target set by how its members live: fed, warm, healthy, happy, breathing clean air or working night shifts. Proud guilds work faster, unhappy ones work to rule or strike, and a guild with nothing left to lose turns to sabotage and emigration.

Guilds also raise petitions with two to four choices, and each guild sets its own policy on the clockwork automatons that can take over its trades.

Guilds and Petitions The guild panel, with each guild's standing, what drives it, its automaton policy and the profession targets

Research and the Hollowmere Saga

Engineers at a Drafting Office, and later an Analytical Engine, work through a research tree. It runs from masonry and deep mining to steam engines, galvanism, tramways, pneumatic depots, airships and clockwork automata, and it unlocks buildings, roads, conduit grades and recipes along the way.

A three-act saga plays out on the Hollowmere chart. A telegraph office brings requests from the forges that still answer, and airship expeditions to the silent forges recover survivors, salvage, relics and lost plans. In the final act Steamforge No. 9's own sealed core begins to creep towards rupture, and the colony has to decide how to answer it.

Research and the Hollowmere Saga The Drafting Office research tree, from Masonry & Setts to Galvanism and beyond

Deterministic Simulation, Data-Driven Content

The simulation is pure TypeScript with no DOM. It never reads the wall clock or Math.random, iterates in insertion order and draws all randomness from a seeded generator. Every player command goes through a single perform entry point, and the Three.js renderer only reads state. A save is a versioned snapshot that is gzipped and base64-encoded on the wire, and loading it reproduces exactly the same future.

Everything else is content. Resources, buildings and their 3D models, recipes, crops, professions, guilds, petitions, events, difficulty presets, map generation, energy networks, research and the story are all JSON. The server merges content packs, validates every reference at startup and serves the bundle with an ETag. New mechanics plug into component, effect, system and event registries. All the art is procedural, with no image assets.

Client tests cover determinism, save and load continuity, pause and build, construction and survival, as well as a scripted ten-year soak run. An opt-in balance report plays a scripted colony across several seeds to compare tuning changes.

0 Stars 0 Forks