Standardized YAML frontmatter on all 38 files with title, description, type, workshop, agent, and round fields. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
27 KiB
title, description, type, status, workshop, agent, round, created
| title | description | type | status | workshop | agent | round | created |
|---|---|---|---|---|---|---|---|
| Workshop Outcomes | Authoritative summary of all confirmed decisions, canonical data structures, and D-record inventory | workshop | archived | generator-architecture | 0 | 2026-02-27 |
Generator Architecture Workshop — Outcomes
Workshop: Generator Architecture (#562) Rounds: 1 through 4 Dates: 2026-02-27 Participants: Gestalt, Tyre, Miri, Araminta, Nigel, Ozzie Compiled by: Qatux
Purpose
This document is the authoritative summary of the Generator Architecture workshop. It compiles all confirmed decisions, the canonical data structures, the D-record inventory, and the open questions remaining for sprint work.
The source documents are the four round notes files:
docs/workshops/generator-architecture/round-1-notes.mddocs/workshops/generator-architecture/round-2-notes.mddocs/workshops/generator-architecture/round-3-notes.mddocs/workshops/generator-architecture/round-4-notes.md
Lead Decisions
These are decisions made or confirmed by the project lead (Jeroen) and are not subject to further team debate.
| # | Decision | Round confirmed |
|---|---|---|
| L-1 | The generator uses a two-phase architecture: Phase 1 (DistrictSkeleton, async background) and Phase 2 (ChunkData on-demand per chunk). | R2 |
| L-2 | Both Grid and Organic layout modes exist. The lead mandated "some blocks grid, some organic chaos." | R3 |
| L-3 | WorldTier wins over SignificanceTier as the field name on DistrictSkeleton. | R4 |
| L-4 | Entity-carried MobileChunk is core architecture. Vessels are persistent world entities with a Docked state. | R4 |
| L-5 | DramaDensity is runtime storyteller state. It does NOT appear on DistrictSkeleton. | R4 |
| L-6 | Heritage grammar overlay is base game content, not DLC. | R4 |
| L-7 | XOR reseeding for in-playthrough events is prohibited. DamageOverlay is the correct approach for all player-witnessed structural events. |
R4 (unanimously confirmed) |
Confirmed Architecture — Summary
The Three-Layer Model
GENERATOR STATE (immutable after Phase 1)
├── Phase 1: DistrictSkeleton
│ ├── district_id: DistrictId (identity)
│ ├── seed: u64 (deterministic generation)
│ ├── district_type: DistrictType (classification)
│ ├── context: DistrictContext (world context)
│ ├── world_tier: WorldTier (simulation fidelity budget)
│ ├── complexity_tier: ComplexityTier (content budget)
│ ├── layout_mode: DistrictLayoutMode (Grid | Organic)
│ ├── setting: SettingType (terrain + environment type)
│ ├── blocks: [[BlockSkeleton; 4]; 4] (4×4 block grid)
│ ├── reservations: Vec<MultiBlockReservation>
│ ├── corridors: Vec<CorridorSpine>
│ ├── z_levels: u8
│ ├── vertical_structure: VerticalStructure (source: multi-participant)
│ ├── breach_only_zones: Vec<ZoneId> (source: multi-participant)
│ ├── social_sites: Vec<SocialSitePlacement>
│ ├── society_profile: SocietyProfileRef
│ ├── zone_palette: Vec<ZoneDefinition>
│ ├── boundaries: DistrictBoundaries
│ ├── access_points: Vec<AccessPoint> (district entries/exits)
│ ├── guarantee_audit: GuaranteeAuditResult
│ └── derived_analysis: DerivedDistrictAnalysis (source: Miri/Gestalt; Phase 1 computed)
└── Phase 2: PreparedDistrict (on-demand per chunk)
├── SocialSitePlacement (triangles with Vec<TrianglePurpose>)
├── NpcManifest (seeded from society_profile)
├── ZonePalette assignments (base + heritage modifiers)
└── ChunkMutations pending
SIMULATION STATE (runtime storyteller — NOT generator output)
├── DistrictRuntimeState.drama_density: DramaDensity
├── active_triangles: Vec<TriangleId>
├── npc_pattern_weights: NpcPatternWeightSet
└── assassination_difficulty on-demand computation
DELTA LAYER (post-generation)
├── DamageOverlay (LocalOverlay for in-playthrough events)
├── NpcRemoved / NpcStateChanged
├── AccessTierChanged
└── WorldStateDelta (composed from all active mutations)
Spatial Hierarchy (D-094)
| Unit | Sim tiles | Visual tiles | Real meters | Purpose |
|---|---|---|---|---|
| Chunk | 64×64 | 32×32 | 32m | Streaming unit |
| Block | 128×128 | 64×64 | 64m | Generator planning unit (4 chunks) |
| District | 512×512 | 256×256 | 256m | Simulation unit (4×4 blocks) |
Phase 1 Generator Pipeline
Pre-Pipeline: system generation, WorldTier assignment, galaxy topology
↓
Phase 1: DistrictSkeleton
Stage 1: Classification (WorldTier, ComplexityTier, SettingType)
Stage 2: Block grid (DistrictLayoutMode, BlockSkeleton ×16)
Stage 3: Reservation (skyscrapers, terminals, MultiBlockReservation)
Stage 4: Social site + NPC (triangles, society profile, DerivedDistrictAnalysis)
Stage 5: Guarantee audit (3-tier conditional check)
↓
Phase 2: ChunkData (on-demand per player approach)
Heritage grammar applied at chunk fill time
↓
World State Layer: DamageOverlay + DeltaLayer overlay at render time
Layout Mode
enum DistrictLayoutMode {
Grid,
Organic {
placements: [[BlockPlacement; 4]; 4],
},
}
struct BlockPlacement {
offset: (i16, i16), // ±16 sim tiles per axis
rotation_steps: u8, // 0–3 (15° increments; hard cap at 45°)
street_width_factor: f32, // 0.75–2.0 relative to standard
}
Hard technical constraint: maximum rotation is ±45°. This is non-negotiable — beyond 45°, tile-based pathfinding produces unacceptable movement artifacts. Organic districts produce the visual impression of curved streets through angular jogs and irregular setbacks, not smooth curves.
WorldTier and ComplexityTier
enum WorldTier {
Epicenter, // Hub system. Full simulation, high faction pressure.
Regional, // Regional. 1–4 districts, partial full-budget.
Backwater, // Small community. 1 district. Network-insignificant, NOT budget-capped.
Passage, // Transit stop. Pass-through.
Waypoint, // Not simulated until player approaches.
}
enum ComplexityTier {
Full, // All spatial guarantees. Rich NPC population.
Moderate, // Tier 1 + partial Tier 2 guarantees. Moderate NPCs.
Minimal, // Tier 1 only. Sparse NPCs.
Empty, // No social sites, no NPCs. Pure terrain.
}
WorldTier → ComplexityTier ceiling:
| WorldTier | ComplexityTier ceiling |
|---|---|
| Epicenter | Full |
| Regional | Full |
| Backwater | Full (key insight: dense isolated community — network insignificance ≠ simulation budget cap) |
| Passage | Moderate |
| Waypoint | Minimal |
ComplexityTier → DramaDensity ceiling: Full → any intensity; Moderate → Active max; Minimal → Quiescent max; Empty → Zero only (no storyteller activation possible). A ComplexityTier::Empty district has no social fabric; the storyteller cannot activate drama there.
The 14 D-Ready Items
These 14 items are confirmed D-records ready to be filed in decisions/. Each has been reviewed and signed off by all workshop participants.
D-READY-1: DistrictLayoutMode — Grid and Organic Support
Both layout modes coexist. Grid = power imposed (Commission-planned). Organic = power negotiated (pioneer settlements, organic growth). Organic mode uses BlockPlacement offsets and rotations to produce non-rectilinear street space as negative space between shifted/rotated blocks. 45° rotation is a hard technical ceiling.
The proportion of Grid vs. Organic districts across a world must vary per seed to prevent predictable meta-level patterns.
D-READY-2: Guarantee Tier System — Universal / Full-Only / Conditional
Tier 1 — Universal (all inhabited): Social Hub, Informal Zone, Encounter Corridor. Tier 2 — Full-complexity: Traffic Chokepoint, Institutional Space, Insider Space, Economic Node, Horizon View Corridor (coastal), BreachOnly Zone (≥1), Rooftop Discovery Zone (tall structures). Tier 3 — Conditional: A-1 Elevated Vantage, A-2 Egress Multiplicity, A-3 Temporal Opacity Window, A-4 Non-Institutional Route, Economic Asymmetry Signal, Power Gradient Visibility.
Audit runs all applicable checks. A Minimal farmstead gets ~3 checks. A Full-complexity coastal urban hub gets up to 13.
Archetype placement must vary in angular position (not just distance from center) across seeds. The guarantee audit should fail if archetype positions cluster predictably across a test batch of N seeds.
D-READY-3: TrianglePurpose Enum
enum TrianglePurpose {
Investigation, Economic, Social, Political,
Tactical, // target + protector + informant/witness
Mundane,
}
Triangles carry Vec<TrianglePurpose>. Purpose tags are multi-playstyle accessibility features: they ensure the right drama is surfaced to the player whose lens is active. Tactical encodes the assassination contract in spatial form.
D-READY-4: WallBackside / TileBehindState — Dual Classification
Both enums are canonical. They serve complementary roles:
WallBackside(Tyre): structural — what is physically behind this wall tile (AdjacentSpace / StructuralFill / ServiceVoid / ChunkBoundary / Exterior)TileBehindState(Gestalt): gameplay — what kind of space this represents (StructuralFill / HiddenRoom / Interstitial)
Mapping: WallBackside::ServiceVoid → TileBehindState::Interstitial. WallBackside::AdjacentSpace → TileBehindState::HiddenRoom or StructuralFill depending on access tier.
Era-tagged infrastructure cavity contents with standardized color codes:
- Era 1: power conduit only (
#c8b840) - Era 2: power + water/coolant (
#4888c8) + comm lines (#b8b8b8) - Era 3: full bundle (all types, denser)
Backside assignments within a template must have seed-driven variation — not fixed-template values.
D-READY-5: Dynamic Modification via Overlay (Not Re-Generation)
Generator output is immutable. All post-generation modifications are applied via overlay.
DamageOverlay:
struct DamageOverlay {
overlay_type: DamageOverlayType,
epicenter: ChunkLocalPos,
radius: f32,
intensity: f32,
scatter_seed: u64, // variation within damage zone only
}
enum DamageOverlayType { GasExplosion, Fire, Structural { collapse_direction }, Flooding }
RegenerationStrategy:
enum RegenerationStrategy {
LocalOverlay(DamageParameters), // in-playthrough — MANDATORY
SoftReseed { seed_modifier: u64 }, // scenario-boundary only
FullReseed, // era-level discontinuity only
}
Hard constraint: in-playthrough events are ALWAYS LocalOverlay. XOR reseeding for in-playthrough events is explicitly prohibited.
Trauma event → visual stage mapping:
- PhysicalDestruction/ViolenceEvent → Stage 2 (Fresh Aftermath), decays to Stage 3
- EconomicDisruption/PoliticalShock/MigrationShock → quarter fill modifier (not destruction stages)
Full destruction stage sequence:
| Stage | Name | Visual state |
|---|---|---|
| 1 | Active | Event in progress; DamageOverlay rendering live |
| 2 | Fresh Aftermath | Structure breached; scorch, rubble, debris tiles visible |
| 3 | Stabilized | Debris cleared; structural state permanent |
| 4 | Reconstruction | Scaffolding tiles, incomplete floor sections |
| 5 | Healed Scar | Functional again; residual visual tells remain |
Destruction palette constraint: corruption-only. No new colors are introduced by destruction. Existing zone palette tiles are darkened, desaturated, or replaced with structural-damage variants from the same palette family. Single exception: #c8d8f0 (open-sky tile) appears at 100% intensity when a roofed structure has its roof removed — the only color destruction may introduce. Implementers must not create a separate destruction color set.
Replayability: the modification history diverges per playthrough based on event decisions. Same-seed worlds share the same generator baseline; different event histories produce different delta layers. This is the replayability engine.
D-READY-6: ZonePalette Modifier System
struct ZonePalette {
base: BasePalette,
modifiers: Vec<PaletteModifier>,
}
8 base terrain types (T1 temperate farmland [warm organic, natural lighting] / T2 industrial farmland [cool grey-green, artificial lighting] / T3 wilderness / T4 grassland / T5 coastal water [deep near-black blue, animated specular; referenced by D-READY-7 horizon corridor guarantee] / T6 beach/coastal margin [warm dark tan] / T7 mountain/high terrain [dark blue-grey stone, snow at elevation] / T8 desert/arid). T1 and T2 are the two farmland types, explicitly distinct. If wetland terrain is required, it must be specified as a new T9 type — it is not a replacement for any of the 8 canonical types.
Modifier axes: A (heritage root → material character), B (economic tier → condition/density), C (era → material generation), plus faction overlay, climate, condition, season.
Palette modifiers should influence NPC appearance as well as environment appearance. People dress like they're from here.
D-READY-7: Horizon View Corridor as Coastal Guarantee
A negative-space reservation: ≥8 visual tiles unobstructed view corridor from nearest public street to water's edge. No building, tree, or z=4 element may occupy this corridor. A low z=2 element (railing, bench, bollard) marks the waterfront point as a designed viewing location.
Tier 2 Conditional guarantee for coastal districts. Position within the district must vary per seed — the Wow Moment of seeing the horizon must be discovered, not expected.
D-READY-8: Assassin Lens Spatial Guarantees (A-1 through A-4)
These are derived properties of existing spatial configuration, not assassin-tagged features. They add no generation cost; the audit validates existing output.
- A-1 Elevated Vantage (Tier 3, Full-complexity): ≥1 position with clear LOS cone to Traffic Chokepoint. Generator ensures overhead-clear zone in LOS corridor during block planning.
- A-2 Egress Multiplicity (Tier 3, Full-complexity): ≥2 exit routes to adjacent districts.
- A-3 Temporal Opacity Window (Tier 3, Full-complexity): ≥1 time window (day-phase) where Social Hub has reduced ambient NPC coverage.
- A-4 Non-Institutional Access Route (mandatory Full-complexity): ≥1 route to any Insider zone that does not pass through high-security institutional spaces.
A-1/A-2/A-3 are Tier 3 Conditional (trigger on complexity_tier == Full). A-4 is mandatory Full-complexity for all playstyles.
D-READY-9: Heritage Grammar Overlay for Non-Urban Palettes
Data-driven HeritageGrammarOverlay structs (10 per heritage root). Loaded once at generator startup. Applied at Phase 2 chunk fill time by weighted blending.
Blend rules:
- Continuous fields (decorative_density, repair_visibility, etc.): weighted average
- Categorical fields (boundary_character, open_space_character): dominant heritage weight wins
- Object tag lists: union of preferred/accent tags; intersection-exclusion of excluded tags
Phase 1 exception: gathering_probability evaluated at block planning for quarter pre-assignment.
Authoring domain separation:
- Miri: organizational principles, boundary character, spacing, social grammar (HeritageGrammarOverlay Rust struct / authored data)
- Araminta: visual expression — object sets, arrangement algorithms, floor surface variants, overhead flora density and character, wall/structure material character, boundary material type, lighting temperature (TOML modifier files, one per heritage root)
Shared requirement: ObjectTag vocabulary must be co-maintained.
D-READY-10: Non-Urban Informal Zone Typology
Informal zones are defined as spaces outside the community's social field — not defined by institutional absence but by the type of social permission governing them.
Three types:
social_permission: normal zone palette; gathering infrastructure present; cover is about convention, not geographyphysical_distance: sparse objects, unmaintained floor; isolation is the visualutilitarian_cover: functional work objects; space reads as work space; unofficial use is invisible to casual observation
Visual grammar per type in docs/workshops/generator-architecture/araminta-round4.md.
Heritage root correlation: Frost/Stone → physical_distance; Tide/Vine/Dust → social_permission; Iron/Salt → utilitarian_cover. Location within terrain is seeded independently. (Dust = maximum communal observation, only privacy available is negotiated; Iron = labor function covers presence. Both confirmed Miri Round 5.)
D-READY-11: Vertical Scale Architecture
Four height tiers (S1–S4):
- S1: 1–2 z-levels (surface + roof/mezzanine)
- S2: 3–10 z-levels
- S3: 11–30 z-levels
- S4: 30+ z-levels
Shadow length is the primary height signal in top-down view (2–40 visual tiles).
Lazy z-level loading: ZLevelLoadState: Loaded | Skeleton | Ungenerated. Only current + adjacent z-levels filled by Phase 2.
Rooftop Bar Clause: Every tall structure (z_band_count ≥ 3) must assign a RooftopConfig: Restricted | PublicWithHiddenLayer. The discovery layer is mandatory in both cases. Heritage root weights the probability between the two configs — it does not determine the outcome. A minority of buildings of any heritage root must be configurable as the non-dominant type. A Frost building with a rooftop bar must be possible; full determination kills the discovery moment. (Correction confirmed by Ozzie + Araminta, Round 5.)
Z-band floor boundaries must have seed-variation within cultural ordering constraints. A corporate building has executive floors in the upper zone, but which exact floor begins is seeded.
Vertical access routes are playthrough-history dependent: same building, different routes available based on player relationship and event history.
D-READY-12: Trauma Events as EraModification Subtypes
enum ModificationType {
TraumaEvent {
subtype: TraumaEventSubtype,
cultural_aftermath: HeritageRootResponse,
}
}
enum TraumaEventSubtype {
PhysicalDestruction, EconomicDisruption, PoliticalShock,
ViolenceEvent, MigrationShock,
}
Trauma events that physically alter structures apply damage via LocalOverlay. The original_seed is preserved. Cultural aftermath decays toward baseline at heritage-root-dependent rates.
Physical destruction and cultural aftermath are separate tracks:
- Structural damage:
StructuralChangein ChunkMutations - Cultural response: NPC weight distribution shift in
DistrictRuntimeState.npc_pattern_weights
Decay rate is seeded per-community with variation around heritage-root baseline (prevents perfect predictability from heritage root alone).
trauma_visual_decay_rate: slow | medium | fast per heritage root. Default: medium.
Design principle: Trauma intensifies culture, it does not transform it. A stressed community becomes a more concentrated version of itself — Frost communities close harder, Tide communities grief more publicly, Iron communities organize more collectively. Decay is toward the community's pre-trauma baseline, not toward a new equilibrium. Players who have learned a heritage root's trust model can predict community behavior in the aftermath.
D-READY-13: MobileChunk Specification
Entity-carried interior space attached to a mobile world entity. Not a district. Uses the same chunk fill primitives in a simpler flat structure (no Phase 1/Phase 2 split; no block grid; no zone negotiation).
Key structs: MobileChunk, MobileInterior, VesselClass, MobileMovementState (Docked / InTransit / InterSystem / Idle), TransitSocialModifier, MobileNpcSlot, NpcPersistence (Crew / Passenger). Note: Idle = vessel parked at a location but not docked to infrastructure (anchored ship, grounded shuttle).
Vessels are persistent world entities. In Docked state: present at dock_position, visible from dock as sprite overlay, boarding via gangway tile → MobileAccessPoint activation. Interior cache keyed by entity_id persists across voyages for crew state.
Departure schedules are required as a generator output. The Docked struct must include docked_since: SimTick and scheduled_departure: Option<SimTick> — these fields were absent from Tyre's Round 4 canonical struct and must be added at implementation time. The generator must populate scheduled_departure. Vessels without departure schedules are an error state.
Replayability requirements R-V-1 through R-V-6 (see round-4-notes.md §5, D-READY-13 section).
Memory: ~0.5–4 KB metadata + up to 64 KB ChunkData per vessel. At 50 active entities: ~3 MB, paged by streaming model.
Cultural grammar: TransitSocialModifier with TransitVariant (BoundedLinear / BoundedMobile / InterSystem). Heritage-root behavior tables by vehicle type. Miri's canonical spec at docs/workshops/generator-architecture/miri-round4.md.
Vessel visual grammar: see docs/workshops/generator-architecture/araminta-round4.md §2. Five rules govern visual distinction of MobileChunk interiors from static zone spaces: (1) exterior hull uses vessel-identity material, not zone palette; (2) window tiles reveal exterior context (docked vs. in transit); (3) compression modifier tightens proportions throughout; (4) section transitions use vessel-identity threshold elements; (5) class stratification expressed through proportion, not palette change.
D-READY-14: DamageOverlay / RegenerationStrategy
See D-READY-5 for full specification. Filed separately as a D-record because it establishes the general modification strategy rather than only the overlay mechanics.
The key distinction: this D-record establishes the prohibition of XOR reseeding for in-playthrough events and the mandate for LocalOverlay. All participants confirmed this unanimously in Round 4.
NPC Model — The Ysabel Vorn Litmus Test
The 10-axis NPC model was validated against a concrete NPC exercise (Miri, Round 4). Ysabel Vorn covers 4.5 of 5 playstyle hooks on a Backwater/Moderate farming settlement.
The 10 axes:
- Behavioral Pattern (social archetype: ANCHOR, REMNANT, WITNESS, etc.)
- Surface Motivation (publicly visible goal)
- Actual Motivation (what they actually want)
- Vulnerability/Secret
- Information Access (tiered knowledge inventory)
- Trust Architecture (heritage-based trust model + specific trust network)
- Routine Pattern (daily/weekly/seasonal schedule)
- Economic Position (control levers + hidden assets)
- Relationship Network (triangle memberships — active and latent)
- Tolerance Threshold (per-trigger tolerance levels)
The gap (Axis 11, proposed): network_footprint: Option<NetworkFootprintTag> for NPCs who are locally insignificant in appearance but carry network-significant information or are relevant to external actors. Default None for procedural NPCs. Set explicitly for authored scenario NPCs.
This axis is not yet in the confirmed model — it is raised as a Q-record for sprint work.
Minimum NPC count for intra-seed replayability: 3 (one functional triangle). One NPC = maximum seed-to-seed variation, zero intra-seed emergence. Three NPCs = triangles, shifting alliances, cascade effects. Even Minimal-complexity insignificant districts need 3 NPCs.
Key Tensions and Resolutions
| Tension | Round | Resolution |
|---|---|---|
| Grid-only vs. organic streets | R1–R3 | Both. Grid = power imposed; Organic = power negotiated. Both modes coexist in the same world. |
| SignificanceTier vs. WorldTier naming | R3–R4 | Lead: WorldTier. Canonical values: Epicenter/Regional/Backwater/Passage/Waypoint. |
| MobileChunk (entity-carried) vs. instanced district (Nigel) | R3–R4 | Lead: entity-carried MobileChunk. Vessels are persistent world entities. |
| DramaDensity on struct vs. runtime | R3–R4 | Lead: runtime only. DramaDensity lives in DistrictRuntimeState, not DistrictSkeleton. |
| XOR reseeding vs. structured damage | R3–R4 | Unanimous: DamageOverlay. XOR prohibited for in-playthrough events. |
| Assassination difficulty: computed-on-demand (Gestalt) vs. Phase 1 stored (Miri) | R4 | Minor tension. Recommended synthesis: stored cultural baseline (DerivedDistrictAnalysis on skeleton) + on-demand computation for player-facing assessment. See round-4-notes §2, OQ-R4-C. |
Open Questions for Sprint Work
| Q-ID | Question | Priority | Owner |
|---|---|---|---|
| Q-NNN-a | Axis 11 (Network Footprint) — authored field for network-significant NPCs in locally-insignificant positions | High | Miri |
| Q-NNN-b | Departure schedule model — departure windows as generator output for docked vessels (Ozzie requirement). Note R5: D-READY-13 resolves this — scheduled_departure: Option<SimTick> in Docked state is mandatory generator output. Recommend closing before sprint planning. |
High | Tyre + Miri |
| Q-NNN-c | Mobile environment social arc — structural representation of journey timeline (Ozzie requirement) | Medium | Miri + Gestalt |
| Q-NNN-d | DramaDensity enum naming — Round 4 struct uses Quiescent/Active/Intense (3) vs. Round 3's Zero/Low/Medium/High/Flashpoint (5). Resolve before D-record. | Low | Tyre + Gestalt |
| Q-NNN-e | ObjectTag vocabulary co-maintenance — shared between Miri's HeritageGrammarOverlay and Araminta's asset categorization | Medium | Miri + Araminta |
| Q-NNN-f | Assassination difficulty synthesis — formal spec combining DerivedDistrictAnalysis baseline (Phase 1) with on-demand runtime computation (player-facing display only; game logic uses Phase 1 value) | Medium | Gestalt + Miri |
Implementation Targets (From Participant Estimates)
| Feature | Target version | Estimated effort |
|---|---|---|
| Phase 1 DistrictSkeleton (basic) | v0.3 | ~3 dev-days |
| Phase 2 chunk fill with heritage grammar | v0.3 | ~4 dev-days |
| MobileChunk (single-chunk vessels) | v0.3 | ~9.5 dev-days |
| Vertical scale (z-bands, lazy loading) | v0.4 | ~7 dev-days |
| DamageOverlay system | v0.4 | ~1.5 dev-days |
| MobileChunk::Block (large ships) | v0.5 | Deferred |
What This Generator Promises the Player
From Ozzie's synthesis across all four rounds:
The world is real and persistent. Vessels exist when you're not on them. The crew you met last voyage is still there. The damage you caused is still there.
Every wall is a secret keeper. WallBackside + BreachOnly means no tile is ever void. There's always something behind the wall.
Destruction has history. DamageOverlay + trauma subtypes mean the aftermath of events is legible. You can arrive at a district and read what happened.
Height has meaning. Vertical scale + view down from above. The building is itself a puzzle. Floor 30 has information floor 1 can't have, because floor 30 is harder to reach.
Every playstyle has guaranteed affordances. The 3-tier guarantee system and the assassin lens guarantees mean the generator is making contracts it keeps.
The journey is content. Mobile environments are social pressure cookers, not loading screens with chairs.
Insignificance is a lens, not a verdict. A Minimal/Dormant district contains a complete small society. The playstyle is the starting assumption the world eventually corrects.
Workshop closes. Fourteen D-records ready for filing. Six Q-records raised for sprint work. The generator pipeline is locked.