Planet-down cascade workshop (3 rounds, 5 agents): layer-by-layer generation from empty world through population overlay, city planning, and street rendering. Includes consultant review by Troblum. Also commits: pre-Sprint-35 DB backup, Claude Code team-mode tmux test log (team-test.md). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
20 KiB
title, agent, workshop, round, created
| title | agent | workshop | round | created |
|---|---|---|---|---|
| Round 2 — Ozzie: Player Experience Evaluation | ozzie | planet-down-cascade | 2 | 2026-05-01 |
Ozzie — Round 2: Player Experience Evaluation
The lead locked the district mix and deferred scatter. Accepted on both counts. I'll work with those parameters.
Here are my verdicts on the five items.
1. Tyre's Spatial Hierarchy Dimensions — Do These Scales Feel Right?
Short answer: District is perfect. Province needs a player experience rationale confirmed. Block needs clarifying.
District (~256m) — CORRECT
256m across. A 3-minute walk end to end. You enter a Commercial district and you know it before you've gone twenty tiles — the streets widen, the buildings cluster, the signage changes. You can see the perimeter treatment. You can see the next district over.
This is exactly the right scale for "neighborhood feel." The player holds the whole district in spatial memory while standing in it. They can orient themselves. That's the scale at which DistrictType becomes felt rather than labeled.
A 256m district that changes character from a 256m residential district next to it — that IS the city. THAT'S THE GAME.
Block (~64m) — CLARIFY ONE THING
64m is a realistic city block. Good. But I want confirmation: the 4×4 BlockSkeleton grid on a District means each block is a chunk-sized unit (~32m?), not 64m. If a Block is 64m and a District is 256m, then a District is 4 blocks wide, which means a 4×4 block grid is exactly one District. That checks.
The player-experience implication: Block-level variation (one block dense, the adjacent one sparse) is what produces the texture within a district. The player navigates block by block. This is the right granularity for street-level experience. No issue here — just wanted it explicitly stated.
Province (~60-200km) — CONFIRM THE PLAYER USE CASE
Province is the "road-map travel region" tier. I'm fine with the scale. But I want one thing confirmed for player experience: when the player is on the regional/planetary map, are Province boundaries visible? They should be. Not as arbitrary grid lines — as natural features. The drainage basin is the province. The player should be able to look at a map and trace the watershed and understand why that Province is one region and not two.
If Province boundaries aren't legible on the planetary map, TerritorialStatus doesn't communicate anything. The player can't see "this Province is ExtractiveZone" unless Province shapes are visible.
Area (~400-1500km) — FINE AS ATLAS LAYER
This is the macro-geographic tier. The player experiences it as "the northern coast" vs. "the highland interior" on the atlas. Not a navigation tier. No gameplay concern here.
Province vs. the 64×32 grid — ONE AMBIGUITY TO RESOLVE
Paula mapped "regional cell (64×32 grid)" to Province tier. If the regional grid IS the Province grid, each cell is a Province. The reference body has a 500km × 250km Province size. That's toward the high end of Tyre's "60-200km" range. Is that right? Or is one Province multiple cells? This needs a number confirmed in Round 2.
The answer matters for TerritorialStatus threshold calculation and for how many Provinces a player realistically travels through on a journey.
2. Attractor-Matching — Which Produces the Most Believable Cities?
I've read all four proposals. My verdict:
Paula's priority ordering combined with Burnelli-Sheldon's objective function. Not either alone.
Here's why.
The player experience failure mode
A bad attractor-matching algorithm places cities that feel like they could be anywhere. The player flies into Korrath and lands in the Transit district and thinks: "why is there a city here?" That question should never arise. The city should explain itself by where it sits.
The worst outcome: a corp HQ assigned to a geographically inappropriate attractor because that attractor was the highest-quality one available. A deep-sea mineral extraction corp headquartered inland, away from water. The player meets the corp in the game and then visits their headquarters and thinks: "this doesn't make sense."
Why Paula's priority ordering is right
Paula sequences: extraction corps first (most geographically constrained) → service/commercial corps last (most flexible). This is correct and instinctively true. An extraction corp MUST be near its resource. A service corp can set up anywhere profitable.
She also adds mismatch flagging: if the algorithm can't find a geographically appropriate attractor for a corp, it flags it for lead review instead of silently placing it wrong. This is important. Silent wrong placements are trust-breakers. I want mismatches surfaced.
Paula's OrganicGrowth disambiguation: geographically_triggered = false → FoundingOrientation = AdminFacing. These are cities that exist because of political decisions rather than geography. They sit at Province centroids or political midpoints. This is correct — the player should be able to look at an AdminFacing city and understand "someone decided to put a city here." It has the geometry of a planned city, not an evolved one.
Why Burnelli-Sheldon's objective function is right
"Maximize aggregate plausibility." That IS the right scoring function for player experience. Not "maximize the happiness of the biggest cities" (Tyre's population-sorted approach), not "satisfy hard constraints and fill the rest" (Gestalt). Maximize the total plausibility of the whole planet.
The reason: a planet where every city feels 90% correctly placed is better than a planet where the top 5 cities feel 100% correctly placed but the smaller cities feel arbitrary.
The synthetic attractor concept (Burnelli-Sheldon) is specifically good. High-tier economic worlds override geography — the corp builds where it needs to build. That's historically accurate. Manchester didn't sit at a river confluence because of geographic destiny. It sat there because water wheels, then canals, then rails. The attractor was economic, not natural. Synthetic attractors at seed-derived offsets along road corridors produce exactly this: the industrial city that exists because infrastructure converged there.
My recommendation
- Paula's sequencing: extraction → constrained → unconstrained
- Burnelli-Sheldon's scoring: maximize aggregate plausibility across the whole body
- Mismatch flagging (Paula): surface incompatible assignments for lead review
- Synthetic attractors (Burnelli-Sheldon): high-tier economic worlds get them
- Hungarian algorithm (Burnelli-Sheldon / Tyre): correct solution, trivially fast at N ≤ 30
Tyre's population-sorted greedy is a good fallback / first implementation. Gestalt's hard-constraint-first is already baked into Paula's sequencing. These don't need to be chosen against each other — it's one algorithm with Paula's priority structure and Burnelli-Sheldon's scoring function.
3. Explicit Spatial Arrangement — Does Each Archetype Produce a Distinct Feel?
Yes. But let me be specific about what "distinct feel" actually means in player terms.
CompanyTown — Spine Pattern
The player experience: Everything points toward the facility. You always know where you are relative to it. Going to work is going one direction. Going home is the other. The city has a POSTURE.
This is the pattern where the player is most likely to feel surveillance. The admin building faces the residential blocks. You don't know if you're being watched, but the geometry says you could be.
Critical detail: The spine must terminate in something. If the facility end of the CompanyTown spine is just another block of buildings, the pattern fails. The player needs to SEE the facility from the residential end. The spine's far terminus should be legible as "the thing this city was built for." The whole city points at it.
AdminCapital — Radial Pattern
The player experience: Power is visible from everywhere. The administrative hub draws the eye from any direction. The city "faces inward."
The player arriving from any direction should see the hub. Streets radiate toward it. Neighborhoods frame it. Even the low-prosperity outskirts are geometrically organized around the center — they're just further from it.
The interesting version: An AdminCapital in decline. The hub is still geometrically centered, but the prosperity gradient has inverted — the center is crumbling and the outer ring is richer. The geometry says "this was power." The prosperity says "power has moved." Without designing a ghost city feature, that IS the ghost city effect. Emergent, exactly as the lead wants it.
FreePort — Multi-Node Pattern
The player experience: Disorienting. In the best way.
There's no single center to navigate toward. The player finds the market district by accident, finds the transit hub separately, discovers a residential node tucked between them. It's a city that grew from several independent decisions, not one plan.
This is where the player gets LOST productively. They think they know where the transit hub is and stumble into the secondary market instead. There are more paths than expected. More connections that shouldn't be there.
The critical detail: The nodes need to be visually distinct enough to serve as landmarks. In a CompanyTown, the spine orients you. In a FreePort, landmarks do the work. If every node looks generically "mixed," the player can't navigate. The node-level identity (this node = maritime, this node = tech, this node = black market) must be legible.
Contested — Overlay Pattern (Paula's addition)
The player experience: The city has TWO geometries that don't agree.
A road system designed by one power overlaid with a different district layout imposed by a second power. Streets that don't match buildings. A grid that suddenly shifts angle. Borders that were fought over, embedded in the urban fabric.
This is the most historically rich pattern. And the most interesting to navigate. The player feels the conflict in the urban structure without needing text to explain it.
My concern: This pattern requires that BOTH underlying geometries are legible. If the overlay is too subtle, it just looks like a messy city. If it's too heavy, it looks broken. The seams need to be visible — a sudden style change, a defensive wall repurposed as a property line, a plaza that was clearly designed for a different political purpose.
OrganicGrowth — Irregular Local Density (Paula's addition)
The player experience: The city doesn't know what it is yet.
These are cities that grew from commerce and habit, not planning. The density is highest where people naturally congregated, not where a planner drew the center. The player has to figure out where things are.
Distinct from CompanyTown: No spine. You're not being aimed at anything.
Distinct from FreePort: One mass of settlement, not nodes. Just... dense in the middle, spreading outward.
Distinct from AdminCapital: No hub. The center emerged, it wasn't declared.
This pattern produces the most "lived-in" feel of all five, because it looks like human decision-making over time rather than planning. The player instinctively reads it as older and more authentic.
Verdict on all five
All five produce genuinely distinct emotional registers. Paula is right to include all five as explicit. The investment is 30-40 lines of Rust per archetype. The return is cities that feel like different kinds of human settlements.
The test: can the player identify the archetype from 15 seconds of walking around? That should be the acceptance criterion.
4. Three-Component District Mix — Different or Same-y?
The lead locked this. I'm evaluating what it produces, not relitigating the choice.
Does population guarantees + revised multiplier table + founding age produce differentiated settlements?
Yes, on one condition: the multiplier table values must be dramatically different from each other, not just technically non-zero.
Burnelli-Sheldon's multiplier range is 0.2 to 3.0. That's a 15× spread. If I'm comparing a mining town (Entertainment multiplier 0.5) to a research hub (Entertainment multiplier presumably 2.0+), that's a 4× difference in Entertainment district probability. At that scale, the cities will feel different.
The condition: minimum values must not all cluster near 0.5. If every "low" value is 0.5 and every "high" value is 1.5, the effective range is 3× — probably not enough to feel distinct. I want to see the actual proposed multiplier table in Round 3, with the specific concern that the minimum values are genuinely low (not just "present").
The BS-Q1 question: 9,999-person Town without dedicated Entertainment
From a player standpoint: plausible. A small town doesn't have an Entertainment DISTRICT. It has a bar. The bar is in the Mixed district, or in a corner of the Residential district. Dedicated Entertainment is a city-scale phenomenon — the neighborhood where the theaters cluster.
The implication for design: Mixed district should have higher character variation than any specialized district. A Mixed district in a mining town should feel grimy and functional. A Mixed district in a research hub should feel eclectic and slightly pretentious. The Mixed district is where economic role expresses itself most visibly in small settlements.
Founding age as differentiator — THIS IS IMPORTANT
The three-component model adds founding age as a character modifier. This is the detail that separates otherwise-similar settlements.
Two 50,000-person manufacturing cities. Same economic role. Same prosperity tier. Same WorldTier. But one founded 200 years ago and one founded 15 years ago.
200-year-old city: Multiple generations of urban decisions. The original factory district is now surrounded by retrofitted housing. The early grid is visible but modified. The perimeter treatment has softened — walls where walls once made sense, now just fences.
15-year-old city: Grid is raw and recent. Industrial and residential blocks are still clean-edged. The Mixed district is thin — not enough time for it to develop organic character.
That's a felt difference. The player walks into the old city and it feels layered. The new city feels planned. I want founding age to be visible in block geometry, not just character tags. Old cities should have more irregular block shapes, more legacy structures that don't fit the current zoning. Young cities should have tighter, more uniform grids. This requires that founding age feeds layout_mode or density_pct variation, not just prosperity.
This is a proposal for Round 3: founding age should modify layout_mode as well as prosperity_baseline. Old settlements lean toward irregular layout modes; new settlements lean toward grid.
5. The "Survey Data Unavailable" Moment — What Should It Feel Like?
This is my favorite design question in the whole workshop.
The setup: player opens the planetary map for a body whose Layer 1-2 cascade hasn't completed yet. The UI has to show something. Amendment 2 mentions "diegetic 'survey data unavailable' placeholder."
I've been thinking about this since Round 1. Here's my proposal:
The diegetic frame
The player is viewing the map through their implant. The implant draws on survey data — orbital scans, corporate records, academic databases. Survey data has vintages. It gets old. Some worlds are poorly documented.
This means the placeholder isn't just "loading" — it's the implant showing the player what it actually knows, which might be very little.
Three tiers of placeholder, by what the implant actually has
Tier A: Partial orbital data (most worlds) The implant shows coastlines and major terrain features from orbital observation — these are cheap to acquire. Settlements are shown as question marks or "unconfirmed" markers. No roads. No rivers. The player can see the shape of the world but not the civilization.
This tier is active for ~3-5 seconds while Layer 1-2 generates in the background. Most of the time, the player never sees it — the cascade has already run before they open the map.
Tier B: Outdated survey data (remote worlds) For backwater or frontier bodies, the implant has old data. The map shows information from decades ago. The timestamp is visible: "Last comprehensive survey: 41 years ago."
Crucially: the old data might not match current reality. It shows settlement positions at their historical locations, but those positions may not match where the generator placed them. It shows rivers from the old orbital maps, but the river network is generated, not authored.
This creates a discovery tension: the map says one thing; the world will show another. Not because of ghost cities — just because the old data was imprecise and the generated world is the truth.
Tier C: No data (system just mentioned in news/dialogue) The implant triggered a generation request because the player just read about this world. All it has is a system location. The map shows a black circle with a blinking cursor. "Survey data unavailable. Scan in progress."
This is the most dramatic version. The player is about to explore somewhere they just heard about. The blinking cursor is tension. By the time they decide to go there, the map will have data.
Why this matters for the game
These three tiers transform "loading screen" into narrative. The player isn't waiting for the game to catch up. They're experiencing the limits of information in the Settled Reach. Some worlds are documented; some aren't. Corporate worlds have better data than frontier worlds. The implant is a tool with real constraints.
The tier A case is the normal experience. Most of the time, by the time the player opens a map, the generation has already run (background threads, priority queue). They see a complete map. But when they don't — when the background threads haven't finished — the fallback isn't a spinner. It's the best available data, however incomplete.
Specific design proposal
Show the player what the implant actually knows, in the following priority:
- If generation complete: full map
- If heightmap loaded but settlements not placed: terrain + coastlines + "settlement survey pending"
- If only systems.db data: known city names as points, no positions, no roads, "Positional survey pending"
- If nothing: blinking cursor, system timestamp, "No survey data"
The placeholder should read like information, not like a loading state. The player should learn something from it, even in the worst case.
Cross-Cutting Player Experience Note: The Transition Moments
One thing that didn't get flagged in Round 1 but shows up across multiple layers:
Every tier transition is a potential wow moment. These are the moments that aren't generated by any single layer but emerge from the transitions between layers:
- Entering the atmosphere: You see the coastlines from space. The cities are lit at night. The first moment of surface arrival should feel like landing somewhere, not like a loading screen.
- Entering a Province from another: The road condition changes. The signage changes. You're in different territory now.
- Entering a Region (city footprint): The density increases. The wilderness thins. You can see the city before you're in it.
- Entering a District: The perimeter treatment marks the threshold. You cross it.
- Entering a Building: The door threshold. The first moment of interior.
These transition moments are where the cascade system earns its depth with the player. They don't need designed setpiece scripting — they need each layer to correctly set up the next layer's opening condition. If Layer 2 correctly creates road condition variation at Province boundaries, the player feels the transition without any authored moment.
The cascade is the experience. Design each handoff so the player feels the seam.
Round 2 complete. Key deliverables for Round 3: (1) confirm founding age → layout_mode connection as a proposal; (2) lock attractor-matching as Paula priority + Burnelli-Sheldon scoring; (3) confirm Province boundary legibility requirement for TerritorialStatus to be player-readable.