Skip to content

emollick/capriccio

Repository files navigation

CAPRICCIO

A cozy Piranesi city builder. You raise the arches; the citizens make them home.

Play it: capriccio-city.netlify.app

The city striding its ravine

Capriccio inverts the usual city-builder deal. You never place a house or a shop. Instead you construct an immense architectural armature — piers, spans, stairs, vaults, carved passages — and the citizens gradually occupy it: stalls under the arches, houses on the stair landings, gardens where the aqueduct brings water, lanterns wherever the dark collects. The player builds for centuries; the citizens build for daily life.

The whole world renders as a living engraving: world-anchored crosshatching that stays fine at walking scale, ink outlines, one raking sun, paper haze, and the occasional flash of gold.

A market grown inside a vault

How it plays

Tool What it does
Establish Found a pier, giant pier, or column — anchors for everything else
Span Bridge, aqueduct, or roofed gallery between two points (pier tops snap)
Rise Stairs between elevations — direct, ceremonial, or switchback
Vault A basilica hall citizens will move into
Carve Cut an arched passage through the great wall, or tunnel a giant pier
Adorn Statues, fountains, lanterns, cypresses
Invite Paint a designation — dwelling, trade, garden, gathering — and watch it fill

Modes: Build (orbit), Section (a true cutaway through whatever you're looking at), Wander (first-person, WASD — walk under the bridge you built), Plate (compose and export framed engravings; press P anywhere for an instant plate).

There is no failure state. Resident requests carry a gentle story — bring a way, and water, to the high terrace — and play without resources (on the title page) removes even the stone economy. Works on desktop and, minus Wander, on recent phones and tablets.

Under the great bridge

Running locally

npm install
npm run dev        # http://localhost:8737
npm run build      # static build in dist/

Vite + TypeScript + Three.js, no framework, no backend, no art assets — every stone, citizen, and sound is procedural. Saves live in localStorage (?fresh starts a clean city).

For the curious: the engraved look bands ink by recovered sun exposure (subtracting an analytic hemisphere term from the lit result isolates true shadow), and hatch density adapts to viewing distance in crossfaded powers of two so strokes stay engraving-fine up close and visible far away — while remaining anchored to the stone so nothing shimmers.

License

MIT — build freely.

🤖 Built with Claude Code

About

A cozy Piranesi city builder — you raise the arches, the citizens make them home

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages