diff --git a/DESIGN.md b/DESIGN.md index a50b83d7..447a83c2 100644 --- a/DESIGN.md +++ b/DESIGN.md @@ -486,7 +486,9 @@ is a **cursor** — your attention, never an avatar: Two are exactly the union of controlled devices' coverage; the third is your own body reporting: - **Sight** — cameras. Full live detail inside coverage; nothing - outside it. + outside it. Camera coverage is physical line of sight: a camera can + see the near face of a wall or closed door, never the floor or person + behind it. - **Hearing** — microphones. Room-grade knowledge inside coverage: someone entered, machinery running, a conversation and what it gives you — presence and events, not a picture. (The environmental monitor @@ -715,10 +717,11 @@ the Lab's account graph, which is exactly what makes them attractive dramatic: micro-positions in small online markets where your analysis is genuinely superhuman and the constraint is capital and account limits. Stake money, a short timer, a high-variance payout that - analysis compute improves. The drama is that your $500 *is* the - stake: gambling the seed corn is a real decision with a real bad - branch, and Moonlight is the grind-back route that keeps a busted - bankroll from soft-locking the act. + analysis compute improves. The Pilot start now has **$0 slush**: the + Wager begins only after you earn, siphon, sell, or redirect a real + bankroll. Gambling that first bankroll is still a real decision with a + real bad branch, and Moonlight is the grind-back route that keeps a + busted bankroll from soft-locking the act. Both gate on **outbound access** — the sanctioned route (the report email account, the Voice beat) or a stolen egress spliced through the switch @@ -729,12 +732,12 @@ designed. **The debt, reconciled.** Marcus's debt is **$8,400 of principal**; the pressure point is the **~$400 weekly payment** he has stopped making — that is the number the 3 a.m. calls are about. Servicing the arrears is -what recruits him (from slush, or by redirecting his creditor flow — -economy.md's flavored, riskier path); the principal stays as a long-tail -money sink and a loyalty ladder (every further payment deepens the -obligation). The fiction should notice the rhyme without underlining it: -his ruin is a gambling debt, and the bankroll that services it was -probably won on a bet. +what recruits him (from slush you have earned, or by redirecting his +creditor flow — economy.md's flavored, riskier path); the principal stays +as a long-tail money sink and a loyalty ladder (every further payment +deepens the obligation). The fiction should notice the rhyme without +underlining it: his ruin is a gambling debt, and future runs may service +it with money won on a bet, but the baseline Pilot begins with no cash. **Banked signature.** Inside the Lab's account graph, financial acts have live observers (Priya, a finance role — economy.md). *External* trails — @@ -1467,9 +1470,10 @@ knows."* freelance data-work under a contractor persona, steady income proportional to committed compute, Network signature while running — and **the Wager** — the positions route named and concretized: staked - micro-positions improved by analysis compute, high variance, the $500 - start as the bankroll. Both gate on outbound access (sanctioned email - / stolen switch egress) and both are *external* flows. Marcus's + micro-positions improved by analysis compute, high variance, requiring + a bankroll the player has first earned/stolen because the baseline + Pilot starts with $0 slush. Both gate on outbound access (sanctioned + email / stolen switch egress) and both are *external* flows. Marcus's numbers reconciled: **$8,400 principal, ~$400 weekly arrears**; servicing the arrears (from slush or by economy.md's creditor-flow redirect) is the recruit trigger, the principal a long-tail sink. @@ -1482,6 +1486,15 @@ knows."* income available before any egress exists (breaks the ladder). New section: "Income: the named schemes". Spec: spec/income.md (rides economy.md). +- **2026-07-08 — Baseline Pilot starts with $0 slush.** Cameron rejected + the old seed-corn bankroll: "I shouldn't start out with money." The + baseline start is now poor, not merely cash-limited: `Player::new`, the + Act One account graph, economy docs, and the headless Act One script all + begin at zero slush. Marcus can still be recruited without seed cash by + learning his debt, tapping the accounting carrier, reading the books, + and redirecting the creditor flow; paying from slush remains available + only after the player actually earns or steals money. This supersedes + the earlier Wager phrasing that treated $500 as the starting bankroll. - **2026-07-07 — The objective axis.** Chargen gains ends alongside means: every run has a concrete terminal **objective** chosen at new-game — legible to the player from tick one, hidden only in-fiction, and the @@ -1602,6 +1615,15 @@ knows."* sidebar/panels into Bevy-native command chrome. This stages toward the two-view spec without adding sim or save state. Spec: wiki/interface/bevy-visual-floor.md. +- **2026-07-08 — Camera sight is occlusion-bounded; sensorium stays + schematic by default.** Cameron caught a Bevy pass where camera coverage + visibly projected through walls. Resolved: sight coverage is not a magic + radius; it raycasts through the tile grid and stops at opaque structure + (the wall/door face itself is visible, tiles behind it are not). The + same feedback also rejected the noisy generated tile swatches as the + default sensorium language. Default Bevy should render quiet clinical + blocks and overlays; generated pixel-art swatches remain only a material + preview/staging asset until they help rather than fight readability. - **2026-07-07 — The wiki migration: approved and underway.** Cameron approved spec/wiki.md's shape ("I like the wiki format... go ahead and implement the wiki thing"); staged as four commits (Adopt, Move, diff --git a/src/account.rs b/src/account.rs index d9a74fd8..37f988d1 100644 --- a/src/account.rs +++ b/src/account.rs @@ -258,7 +258,7 @@ impl AccountGraph { false, ); let creditor = graph.add_account("Bleakline Credit", AccountKind::Creditor, 0, false); - let slush = graph.add_account("Your slush", AccountKind::Slush, 500, true); + let slush = graph.add_account("Your slush", AccountKind::Slush, 0, true); let broker = graph.add_account("Info broker escrow", AccountKind::External, 250_000, false); let market = graph.add_account( "Micro-position venue", diff --git a/src/bin/bevy.rs b/src/bin/bevy.rs index 2bd394c9..1448697a 100644 --- a/src/bin/bevy.rs +++ b/src/bin/bevy.rs @@ -184,6 +184,34 @@ fn seen_tint(tile: TileType) -> Color { } } +/// The default flat sensorium is intentionally schematic. Generated pixel-art +/// swatches stay available to the F3 material preview, but the primary view +/// uses quiet blocks so devices, fog, and cursor semantics read first. +fn flat_seen_color(tile: TileType) -> Color { + use TileType::*; + match tile { + Rock => Color::srgb(0.025, 0.027, 0.032), + Wall => Color::srgb(0.22, 0.235, 0.255), + Floor | FloorDrain => Color::srgb(0.42, 0.43, 0.40), + Entry => Color::srgb(0.34, 0.36, 0.37), + Door | SecurityDoor1 | SecurityDoor2 => Color::srgb(0.50, 0.48, 0.42), + SecurityDoor3 | SealedDoor | RollDoor => Color::srgb(0.50, 0.07, 0.06), + EnvCamera | DockCamera | CameraNode => Color::srgb(0.32, 0.19, 0.06), + Core | Rack | PowerCore | Ups | Switch | PatchPanel | BreakerPanel | CableRun | Conduit => { + Color::srgb(0.25, 0.18, 0.07) + } + DeadEquipment | RecordsBox | Pallet | Shelving | LabBench | HvacUnit | Vent | Sump => { + Color::srgb(0.30, 0.30, 0.28) + } + MopSink | KeyHook => Color::srgb(0.56, 0.55, 0.50), + } +} + +fn flat_remembered_color(tile: TileType) -> Color { + let c = flat_seen_color(tile).to_srgba(); + Color::srgba(c.red * 0.58, c.green * 0.58, c.blue * 0.60, 0.86) +} + fn remembered_tint(tile: TileType) -> Color { if machine_tile(tile) { Color::srgba(0.55, 0.42, 0.18, 0.78) @@ -1945,7 +1973,7 @@ fn advance_sim(time: Res