88 lines
3.5 KiB
Markdown
88 lines
3.5 KiB
Markdown
# cyberpunk
|
|
|
|
A terminal roguelike in a full cyberpunk setting. You will play it on foot
|
|
through a multi-level city, and later from inside the Net as well.
|
|
|
|
The first subsystem is in place: a seeded, deterministic city generator and the
|
|
full-screen terminal app that lets you generate, explore and walk its cities.
|
|
|
|
The generator builds a city as walkable tile maps on four strata:
|
|
|
|
| Stratum | What lives there |
|
|
|---|---|
|
|
| Net | cyberspace: a dotted grid, a construct on every building, district hubs, link lanes, ICE at the gates |
|
|
| Heights | rooftops of the tall towers, helipads, bridges between them |
|
|
| Skyways | elevated walkways, mid-rise lobbies, platforms over intersections |
|
|
| Street | districts, arterials, blocks, buildings, markets, neon |
|
|
| Undercity | tunnels under the roads, sewers, a rail line, basements, black clinics |
|
|
|
|
Every building you see at street level is the same building you stand on at
|
|
Heights. Districts have themes (corp core, night market, megablocks, combat
|
|
zone, docks, industrial, neon strip, old town) that drive street layout,
|
|
building mix, palette and signage. A Net graph of subnets, nodes and links is
|
|
anchored to the physical tiles and can be shown as a digital overlay.
|
|
|
|
The same graph is cyberspace. Jack in at any street terminal (walk up to it and
|
|
press `enter`): your body stays at the port and you emerge in the Net at the
|
|
same spot, in a wireframe world laid out one to one with the city. `enter`
|
|
again jacks out. In Explore mode `]` past Heights shows the Net.
|
|
|
|
Same seed and parameters always produce a byte-identical city.
|
|
|
|
## Run
|
|
|
|
```sh
|
|
cargo run --release -p cyberpunk
|
|
```
|
|
|
|
Headless generation, for scripts and tooling:
|
|
|
|
```sh
|
|
cargo run --release -p cyberpunk -- gen --seed 42 --size medium --out cities/demo.city
|
|
cargo run --release -p cyberpunk -- gen --seed 42 --size large --json --out /tmp/demo.json
|
|
```
|
|
|
|
Sizes: `small` (160x80), `medium` (240x120), `large` (320x160) or `WxH`.
|
|
Other flags: `--districts 4..12` (an upper bound; slivers merge into their
|
|
neighbours), `--water none|bay|river`, `--density 0..1`.
|
|
|
|
Needs a truecolor terminal of at least 100x30 cells (iTerm2, Ghostty, kitty,
|
|
WezTerm). Saved cities go to `./cities/*.city`.
|
|
|
|
## Keys
|
|
|
|
**Title** `↑↓` select · `enter` confirm · `q` quit
|
|
|
|
**Configure** `↑↓` field · `←→` adjust · type digits into the seed · `enter`
|
|
on `RANDOM SEED` / `GENERATE` · `esc` back
|
|
|
|
**Generating** `space` pause · `+` `-` steps per frame · `enter` skip to the
|
|
end · `r` reseed after an error · `esc` back
|
|
|
|
**Explore** `hjkl` / arrows pan the cursor (shift: fast) · `[` `]` stratum down / up (Net on top) ·
|
|
`w` walk · `i` inspector · `m` minimap · `e` legend · `d` digital overlay ·
|
|
`s` save · `r` regenerate · `g` configure · `?` keys · `q` title
|
|
|
|
**Walk** `hjkl` `yubn` / arrows move · `<` `>` take stairs, lift, ladder or
|
|
manhole · `enter` jack in at an adjacent terminal / jack out · `.` wait ·
|
|
`tab` back to the free camera · panels as above
|
|
|
|
## Layout
|
|
|
|
```
|
|
crates/citygen world model + city generator (no terminal dependencies)
|
|
crates/cyberpunk the game: ratatui app, screens, renderer, walking and jacking in, the `gen` CLI
|
|
flavor/ names.ron (names, signage glyphs) · style.ron (palettes, glyph sets)
|
|
docs/superpowers/specs design specs
|
|
docs/superpowers/plans implementation plans
|
|
```
|
|
|
|
## Develop
|
|
|
|
```sh
|
|
cargo fmt --all --check
|
|
cargo clippy --workspace --all-targets -- -D warnings
|
|
cargo test --workspace
|
|
cargo test -p citygen --test seeds -- --ignored # 250-seed sweep
|
|
```
|