51 Commits

Author SHA1 Message Date
Jeffrey Wilcke
287ade702f feat(app): dev mode gates the free camera and inspector; minimap moves into the inspector
Dev mode (DEV_DEFAULT = true for now, backtick toggles it at runtime) unlocks
Explore mode, stratum browsing and the inspector panel. Without it the map
screen always opens in Walk mode and Tab and i are inert. The minimap now
lives in the lower part of the inspector panel; the player's own map will be
a different thing later.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 22:32:24 +02:00
Jeffrey Wilcke
e235d8012b ui: title caption 'high tech · low life'; overlay hint reads 'd overlay'
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 22:22:15 +02:00
Jeffrey Wilcke
0122130f5b fix(citygen): lanes reach backbones hosted in constructs; gates open onto the main grid
Review findings: a district backbone anchored at a server inside a building
got no lanes because lane endpoints keyed on the node's own building; the
endpoint now resolves the construct the node stands in. Construct gates
preferred any open tile, including dead-end alleys; they now prefer the
largest open-grid component. City::validate gains GateSealed: every
construct gate must reach its district backbone over walkable Net tiles.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 22:13:11 +02:00
Jeffrey Wilcke
835a9eb763 perf(citygen): bound each lane search to its endpoints' box; document cyberspace
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 21:51:15 +02:00
Jeffrey Wilcke
0dcead3a7a feat(save): format version 2 with cyberspace; refuse v1 by seed
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 21:47:57 +02:00
Jeffrey Wilcke
8981b237f9 feat(screens): walk cyberspace, jack in on enter, body left behind
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 21:47:08 +02:00
Jeffrey Wilcke
2dc2938b2e fix(render): camera clamp keeps the far edge on the map; drop unused pan
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 21:45:55 +02:00
Jeffrey Wilcke
3a9d7c5179 fix(explore): cursor moves freely and the camera follows it
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 21:44:04 +02:00
Jeffrey Wilcke
4bdb7a9fb4 chore(walker): allow dead code until the map screen wires jacking
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 21:43:58 +02:00
Jeffrey Wilcke
5469fd04cd feat(walker): jack in and out, body left at the port
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 21:42:57 +02:00
Jeffrey Wilcke
9798ed1f10 feat(render): digital overlay works inside cyberspace
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 21:42:15 +02:00
Jeffrey Wilcke
bbd2745f73 feat(citygen): validate cyberspace anchors, jacks and reachability
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 21:40:40 +02:00
Jeffrey Wilcke
2d451f24d8 feat(citygen): cyberspace nodes, lanes and jack ports
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 21:39:06 +02:00
Jeffrey Wilcke
5037719e95 feat(citygen): cyberspace stage with grid, constructs, gates and hubs
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 21:36:38 +02:00
Jeffrey Wilcke
a491841639 feat(net): nodes carry their cyberspace tile
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 21:34:59 +02:00
Jeffrey Wilcke
b740b9d334 feat(net): cyberspace terrains, node features and their tileset
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 21:33:48 +02:00
Jeffrey Wilcke
292e502807 docs: cyberspace implementation plan
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 21:31:05 +02:00
Jeffrey Wilcke
9f1c7e742d docs: cyberspace design spec
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 21:21:23 +02:00
Jeffrey Wilcke
2dc843aa86 chore: rename app crate and binary to cyberpunk
The game is called cyberpunk; the city generator is its first subsystem,
not the project. The citygen library keeps its name. README reframed
around the game.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 21:04:51 +02:00
Jeffrey Wilcke
59ba72f0e0 fix: review findings
- screen transitions snapshot the previous frame (ratatui swaps buffers
  after draw, so the old snapshot was always blank); frame loop extracted
  into a testable Runner
- .city loading rejects structurally inconsistent files: Grid deserialize
  checks size vs data, load_city checks header vs body and runs
  City::validate (now also checks Net link endpoints)
- saving from the map hands the live map screen back instead of a fresh
  explore screen
- signage glyphs covered by the unicode-width test

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 18:23:15 +02:00
Jeffrey Wilcke
3c75674489 docs: README, dead-code cleanup, smoke fixes
- README with run instructions and key reference
- lift the crate-level dead_code allowance; scope it to the anim library surface
- render paths tolerate a city that is still generating (district/building ids
  without entries), found by driving the app through a pty
- status messages show in the status bar, not only inside the inspector
- buffered JSON export (26 s -> 0.4 s for a large city)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 18:02:46 +02:00
Jeffrey Wilcke
48320eb0e6 feat(city): explore and walk screens with panels and help
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 17:54:00 +02:00
Jeffrey Wilcke
df448525c2 feat(city): walker with symmetric shadowcasting FOV
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 17:51:14 +02:00
Jeffrey Wilcke
997814e2f3 feat(city): title, configure and files screens
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 17:49:49 +02:00
Jeffrey Wilcke
73596eadd2 feat(city): animated generating screen
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 17:47:14 +02:00
Jeffrey Wilcke
acd0286bab feat(city): logo, menu, form, panels and transitions
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 17:45:16 +02:00
Jeffrey Wilcke
741231c25b feat(city): digital net overlay
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 17:42:11 +02:00
Jeffrey Wilcke
d43f1b68f0 feat(city): map viewport, camera, minimap, weather and traffic overlays
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 17:41:04 +02:00
Jeffrey Wilcke
f005d0c1b2 feat(city): style pack, tileset and lighting
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 17:37:36 +02:00
Jeffrey Wilcke
0e14cd14fc feat(city): animation primitives and effects
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 17:34:04 +02:00
Jeffrey Wilcke
68be96a8b2 feat(city): app loop, terminal guard, save format, gen CLI
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 17:33:18 +02:00
Jeffrey Wilcke
0d459e7058 fix(citygen): robustness found by the extended seed sweep
- arterials merge onto existing roads and keep distance otherwise
- isolated strata components get a drop-in public connector
- blockless districts fall back to the largest clean rectangle
- sliver districts merge into neighbours (district count is a maximum)
- dressing removes blocking features that cut tiles off the street

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 17:30:54 +02:00
Jeffrey Wilcke
9ac713bbe9 feat(citygen): City::validate and seed sweep tests
Also guarantees one building per district and repairs interiors split
by crossing partitions, both found by the new validation.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 17:21:08 +02:00
Jeffrey Wilcke
b781e60d73 feat(citygen): net graph stage
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 17:15:13 +02:00
Jeffrey Wilcke
90b626e034 feat(citygen): naming stage
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 17:12:00 +02:00
Jeffrey Wilcke
fad98bba0b feat(citygen): dressing, light maps, variants
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 17:11:22 +02:00
Jeffrey Wilcke
2fff121576 feat(citygen): connectivity repair and public connectors
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 17:09:06 +02:00
Jeffrey Wilcke
ac14d2c299 feat(citygen): building interiors, doors, windows, shafts
Blocks now keep a one-tile margin from water, the map edge and other
districts and get an alley ring; lots are cut as back-to-back rows so
every building has an outdoor-facing wall for its door.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 17:06:29 +02:00
Jeffrey Wilcke
466e587fb7 feat(citygen): undercity, skyways and heights verticals
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 17:01:41 +02:00
Jeffrey Wilcke
7d3bd8d394 feat(citygen): lots and building placement
Also makes block fitting recursive so irregular district regions split
into several clean blocks instead of being dropped.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 16:58:06 +02:00
Jeffrey Wilcke
9cc97b87cf feat(citygen): per-theme street subdivision and blocks
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 16:53:26 +02:00
Jeffrey Wilcke
6ba66d5e63 feat(citygen): arterial road network
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 16:50:04 +02:00
Jeffrey Wilcke
fca3e32c97 feat(citygen): districts stage with themed Voronoi regions
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 16:48:48 +02:00
Jeffrey Wilcke
7c9928214f feat(citygen): generator state machine, pathing helpers, terrain stage
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 16:47:02 +02:00
Jeffrey Wilcke
c8d8deeb0f feat(citygen): flavor pack and theme table
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 16:44:14 +02:00
Jeffrey Wilcke
3a17d7e1cd feat(citygen): params validation, GenError, seeded rng helpers
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 16:42:32 +02:00
Jeffrey Wilcke
40b6972664 feat(citygen): tile, world and net data model
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 16:41:47 +02:00
Jeffrey Wilcke
698a6a13db feat(citygen): geometry primitives and Grid
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 16:40:04 +02:00
Jeffrey Wilcke
76c07e2927 chore: cargo workspace with citygen and city crates
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 16:39:05 +02:00
Jeffrey Wilcke
7b225cc5e8 docs: city generator implementation plan
28 tasks covering the citygen crate (model, eleven generator stages,
validation, seed sweeps) and the city crate (app loop, save format,
animation, tileset, overlays, widgets, screens, walker).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-12 16:37:18 +02:00