The canonical trait-palette in style/trait-palette.md v0.1 (Eros-red,
Philotes-orange, Aletheia-yellow, Kairos-chartreuse, Sophrosyne-green,
Dikaiosyne-blue, Moira-violet, Mnemosyne-dusky-rose) was being contradicted by
old-palette references in three downstream files. This commit clears the drift
and enforces the import-don't-redefine discipline (per trait-palette.md
§Cross-domain rendering: "All sub-guides import these definitions; none
redefine them.").
topology-and-rendering/architecture.md:
- Replaced the redefining trait-color table with a pointer to
trait-palette.md per the import-don't-redefine rule. The old table was
using the retired luminous-white-Aletheia + multiple wrong color-trait
assignments (Sophrosyne-blue, Dikaiosyne-gold, Mnemosyne-violet,
Moira-crimson, Eros-orange, Philotes-rose, Kairos-yellow).
- Updated imperial-net distortion text and faction color-signatures table
to use canonical color-names: Aletheia-white -> Aletheia-yellow;
Mnemosyne-violet -> Mnemosyne-dusky-rose; Moira-crimson -> Moira-violet;
Dikaiosyne-gold -> Dikaiosyne-blue; Sophrosyne-blue -> Sophrosyne-green;
Philotes-rose -> Philotes-orange; Eros-orange -> Eros-red; Kairos-yellow
-> Kairos-chartreuse.
- Added clarifying note: imperial-net's clean-white-backgrounds +
gold-rim-light are achromatic-and-cosmology palette choices distinct
from the trait-color register being distorted (per the achromatic
exception + imperial-cult/cosmology.md aesthetic palette).
schemas/findings.md:
- Updated trait_colors INSERT seed-data with hex codes matching the new
canonical hue-families and renamed canonical_name fields to match
(Eros-red, Philotes-orange, Aletheia-yellow, Kairos-chartreuse,
Sophrosyne-green, Dikaiosyne-blue, Moira-violet, Mnemosyne-dusky-rose).
Reordered rows clockwise from 12 o'clock per wheel-position.
- Added authority-comment pointing at trait-palette.md as the single source
of truth and noting that the seed-data is reification, not redefinition;
designer-precise hex values should be authored upstream and propagated.
runtime-engine/architecture.md:
- Updated cosmetic-feedback example: warm-rose Philotes / cool-blue
Sophrosyne -> warm-orange Philotes / green Sophrosyne; added pointer to
trait-palette.md.
architecture-index.md:
- Fixed typo "Eris" -> "Eros" in the v0.5 trait-axis-mapping open-question
enumeration (the canonical 8 traits do not include Eris).
Verification: post-fix grep confirms zero remaining old-palette name
occurrences or old hex codes; new canonical names appear in all expected
locations.
SEPARATE FINDING flagged for designer review (NOT auto-fixed):
runtime-engine/architecture.md line 424 contains
`(Philotes >= +1) AND (Eris <= 0)`
as a multi-axis-goal example. This uses "Eris" with semantic intent
(discord / faction-tension) but Eris is not in the canonical 8-trait list.
Left untouched because the fix could be either (a) typo-correction Eris -> Eros
or (b) rewrite-to-canonical-axis-with-different-example, depending on whether
"Eris" was intended as a 9th non-canonical axis or simply as a typo. Designer
decision.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
173 lines
19 KiB
Markdown
173 lines
19 KiB
Markdown
# Topology and Rendering
|
||
|
||
> *The visible world: rail+grid topology with navmesh interiors and freeform-player; asset economy as base-limb palette × trait-textured variance (worldbuilding-thesis and engineering-economy in agreement); color-language as pre-verbal trait-vocabulary; the three-shader philosophy that renders the same geometry as physical / liminal / imperial-net depending on access; diegetic relays making the architecture's pulses audible and visible in-world.*
|
||
>
|
||
> *Companion to: `architecture-index.md` (executive summary + global meta-lists), `runtime-engine/architecture.md` (zones live on this topology), `identity-and-personhood/architecture.md` (color-language uses the trait-vocabulary). Sections in this file were split from the monolithic architecture-index.md v0.7 on 2026-04-26.*
|
||
|
||
## Topology: rail + grid + interiors
|
||
|
||
**The world's topology encodes its politics.** The machine built infrastructure for industrial optimization, not for human pedestrian freedom. Therefore the outer world is **rail+grid** — cells connected by named edges with rich semantic metadata. NPCs traverse rails as part of their shift-routines; the player traverses freeform (navmesh) and may **plug into NPC rail-traversals** for co-walking. Interiors (hovels, cantinas, workshops, ruins, brothels-physical) are **navmesh-enabled small zones** with interaction-slot inventories.
|
||
|
||
### Rail+grid as political topology
|
||
|
||
Navmesh is the topology of power-fantasy ("you are the protagonist of free trajectory"). Rail+grid is the topology of bounded-agency ("you live within infrastructure built for something else"). Nimmerworld picks rail+grid because the fiction *requires* it — the world was not designed for the player; the world is what the machine made and humans inhabit the margins. **Topology and thesis agree.**
|
||
|
||
### The three primitives
|
||
|
||
| Primitive | Density | Compute | Narrative role |
|
||
|---|---|---|---|
|
||
| **Dumps** | Very high | High | Resource emission, salvage-zone spawn, scavenger-vocation concentration |
|
||
| **Pipes** | Low baseline, high interactivity-per-capita | Low baseline, spikes on encounter | Transit, migration, chance-encounters, clasp opportunities, defection, heresy written where overseers don't look |
|
||
| **Districts** | High | High | Population, civic life, specialty-production, ritual |
|
||
|
||
### Rail-segment metadata
|
||
|
||
Every rail-segment carries jsonb metadata that navmesh polygons cannot natively carry: heterotopia-class, overseer-density, propaganda-intensity, ambient-content per register (gameworld/liminal/imperial), encounter-spawn-rate, patrol-frequency, illumination-profile, degradation-level, capacity (3-way support for co-walking), traversal-cost-in-ticks. Pathfinding is graph-A* on the rail graph (microseconds, deterministic). Rich-metadata-per-edge is what makes the world feel *lived-in*.
|
||
|
||
### Player asymmetry — the freeform-among-railed model
|
||
|
||
| Topology | Used by | Cost |
|
||
|---|---|---|
|
||
| **Navmesh (freeform)** | Player only (in outer world) | Affordable: one entity |
|
||
| **Rails (graph-pathfinding)** | All NPCs | Cheap: hundreds of entities |
|
||
| **Interior navmesh** | Currently-occupied interiors only | Dormant when empty |
|
||
|
||
The player is the *one variable entity* in a deterministic scheduler. Their freedom-of-movement matches their narrative-position as perturbation. NPCs on rails matches their narrative-position as scheduled-labor. **Compute asymmetry mirrors agency asymmetry mirrors political thesis.**
|
||
|
||
### The plug-in verb
|
||
|
||
When the player approaches a rail-traversing NPC and social-eligibility conditions are met (proximity + directional-compatibility + Philotes-gate not CLOSED + shift-tolerance for socializing + segment overseer-density permitting), an **emergent-signal** spawns a **proximity-zone-candidate** with a **shader-highlight** on the NPC. The player can:
|
||
|
||
- **Approach** (zone activates, dialog auto-spawns via NPC's LLM-slot, no "press E")
|
||
- **Greet → agreement → plug-in** (player's navmesh-position transfers to adjacent rail-lane; movement automated; conversation-zone live in shared rail-context)
|
||
- **Detach** (gracefully via dialog or abruptly by running off; abrupt registers as Sophrosyne-signal)
|
||
|
||
While plugged in, the player is freed from steering — they become camera+conversation. **The notorious "walk-and-talk" problem is solved by construction**: rails handle pacing; plug-in is the social-bridge. Multiple NPCs can share a rail (3-way capacity), enabling cohort-walks, escort-patterns, exodus-flow, and group-conversation-zones.
|
||
|
||
### Interior-as-zone
|
||
|
||
A hovel is a zone with slot-inventory: sofa, kitchen, bed, shower, wall-writing-spot. Occupying a slot is mechanically identical to occupying any zone-slot. **The zone primitive scales from city-level (mass-ceremony) to district-level (tavern) to interior-level (sofa).** Same CHECK-constraints, same slot-occupancy, same emergent-signal mechanism, same ternary-gates — different inventory and lifecycle.
|
||
|
||
Interiors carry a `register` flag too:
|
||
- **Physical interior**: actual hovel, workshop, cantina; navmesh-inside
|
||
- **Liminal interior**: shared dream-construct two clasping inhabitants stabilize over repeated meetings ("the place we always go") — built from both dreamers' memory-residue, persistent-across-clasps as a pair-state
|
||
- **Imperial-net interior**: rendered waifu-hall rooms, brothel cubicles, ceremony halls — clean-white-and-gold, machine-edited per-session
|
||
|
||
### LOD/streaming advantage
|
||
|
||
Most simulation volume is rail-graph (cheap) or dormant interior (free). Active simulation concentrates exactly where drama happens (active anchors + transit + current-interactions). A 100+ NPC city becomes feasible at single-GPU budgets *because* the topology is rail-based.
|
||
|
||
|
||
## Color-language: trait-vocabulary as visual primitive
|
||
|
||
Color is **pre-verbal vocabulary**. Players learn the 8-Hellenic-trait ontology through repeated visual association, not through text-explanation. By mid-game players read trait-states through color as fast as they read facial expressions in real life — intuitively, contextually, without conscious translation.
|
||
|
||
### The eight Hellenic traits → canonical colors
|
||
|
||
The canonical color + wheel-position + motion-signature mapping per trait is authored in [`../style/trait-palette.md`](../style/trait-palette.md) §The full table — color + motion-signature + description per trait, with oppositional-pair structure detailed in §The wheel — 4 oppositional pairs at 180°. **Per the import-don't-redefine discipline** (per [`../style/trait-palette.md`](../style/trait-palette.md) §Cross-domain rendering: *"All sub-guides import these definitions; none redefine them."*), this document does **not** restate the table.
|
||
|
||
The architecture-relevant claims this document needs from the palette:
|
||
|
||
- **Every trait has a canonical hue paired with a motion-signature** (color-blind accessibility via two independent channels — a player with red-green color blindness still distinguishes Eros / uneven flame-flicker from Sophrosyne / steady even pulse by motion alone).
|
||
- **The 4 oppositional pairs sit at 180° on the wheel** (Eros↔Sophrosyne, Philotes↔Dikaiosyne, Aletheia↔Moira, Mnemosyne↔Kairos) — perceptual contrast carries philosophical opposition; *the color wheel does the dramaturgy for free*.
|
||
- **Achromatic colors (white, black, grey, brown) are reserved for non-trait roles** — text, pure-light UI overlay, neutral backgrounds. *Aletheia is yellow, not white* (the brightest chromatic hue carries the truth-as-illumination metaphor while keeping white free for its UI/text job; the v0.1-design-vision *Aletheia-as-luminous-white* pattern is **retired**, preserved in git history per the trait-palette.md §The achromatic exception).
|
||
|
||
### Three layers of color-rendering
|
||
|
||
1. **Persistent (slow-changing baseline)** — eye color = dominant trait of NPC's intrinsic vector; pipe-flow through chassis = full trait-mix as circulating light; secondary accents at seams/joints/glyphs.
|
||
2. **Event-flashes (momentary)** — quick color-flashes over body signal state-transitions: plug-in (dominant-trait flash), combat-combo (Kairos-flash), liminal-maintained (Aletheia-glow), clasp-established (color-merge), emergent-signal-firing (signal-type flash on participants), need-threshold-crossed (need's trait pulse).
|
||
3. **Trait-drift (slow, across cycles)** — as intrinsic trait-vector accumulates through lived experience, color-signature shifts. Other NPCs notice. *"Something is different in you"* dialog generated from delta-detection. **The body is a visible ledger of the interior's accumulation.**
|
||
|
||
### Cross-register rendering
|
||
|
||
| Register | Color treatment |
|
||
|---|---|
|
||
| **Gameworld** | Cel-shaded flat-color regions; trait-colors *more* legible (flat-color regions don't fight per-NPC trait-color modulation; pulses read clean against the comic-book base) |
|
||
| **Liminal** | Vague baseline shader; **progression-gated visibility** (grainy-restricted-view at low witness-progression opening to clean refined-cel-shading at endgame); trait-colors *more* legible (vagueness concentrates attention on identity-signals; consent-as-rendering manifests real-skin-warm-cel-shading in the clasp-mesh per `../identity-and-personhood/bodies.md` §The in-between human-mesh) |
|
||
| **Imperial net** | Cel-shaded with **gold rim-light outlines** + **clean white backgrounds** + **no weathering**; trait-colors *distorted* toward machine-preferred palette — Philotes-orange flattens to commercial-coral; Aletheia-yellow sterilizes to fluorescent-pallor; Moira-violet commercializes to lavender-decor. *Aletheia-vision* in net pierces this distortion to reveal true colors beneath. (Note: the imperial-net's *clean white backgrounds* + *gold rim-light* are achromatic-and-cosmology palette choices — white as non-trait UI per the achromatic-exception, gold as imperial-cult-aesthetic per [`../imperial-cult/cosmology.md`](../imperial-cult/cosmology.md) §The aesthetic palette — distinct from the trait-color register being distorted.) |
|
||
|
||
### Faction color-politics
|
||
|
||
| Faction | Color signature |
|
||
|---|---|
|
||
| **Memorialists** | Mnemosyne-dusky-rose ritual dress; Moira-violet accents; often inherited-from-deceased |
|
||
| **Aletheia-wakers** | Aletheia-yellow plain avatars; coded-yellow flashes for recognition |
|
||
| **Caste-preachers** | Dikaiosyne-blue vestments + Sophrosyne-green undertones |
|
||
| **Hivemind enforcers** | Cold Dikaiosyne-blue + muted-yellow (Aletheia-stolen) |
|
||
| **Scavengers** | Moira-violet + Kairos-chartreuse streaks |
|
||
| **Clasp-underground** | Dual Philotes-orange + Eros-red flashes (mutual-recognition signal) |
|
||
| **Degens** | Saturated maximalist all-color (chaos palette, addiction-marker) |
|
||
|
||
### Clasp color-merge
|
||
|
||
In shared liminal-construct, two clasping inhabitants' color-signatures *interact*: consonant traits brighten/harmonize; complementary traits enrich into new chroma; dissonant traits clash visibly. Successful deep clasp produces a *blended third-palette neither could produce alone* — the visual signature of *what-this-relationship-is*. Each carries memory-residue of the merge after.
|
||
|
||
### Mind-pool color-inheritance
|
||
|
||
When a mind cycles through the pool and is redistributed into a new body, trait-vector persists → color-signature persists. **A player who befriended rose-and-violet-Jakov might see weeks later a new NPC with that same rose-and-violet-signature and feel a jolt of recognition before any dialog.** Color carries soul across cycles. Memorialist political claim: *this person's color should not be recycled by the machine into a waifu* — because color IS who they were.
|
||
|
||
## Asset economy: base-limb palette + trait-textured variance
|
||
|
||
Small modular palette of base-limbs × trait-weighted texturing = combinatorial richness. The architecture's asset-economy and worldbuilding-thesis are **in agreement**: the machine built standardized chassis from a small functional catalog, so a small base-limb palette is *diegetically correct*; humans express interiority through trait-driven texturing and modding, so individual variation comes from *composition*, not from hand-authored assets.
|
||
|
||
Base palette example: ~8 torso variants × ~6 arm-pairs × ~6 leg-pairs × ~10 heads × ~8 eye-types × ~5 accent-colors = ~115k base combinations × continuous trait-texturing × ~50-mod-library in 5 slots = effectively infinite unique NPCs from finite assets.
|
||
|
||
**For a two-person-plus-Nyx team this is decisive.** AAA studios spend millions on unique character-models; the palette+trait approach produces more visual variety from a tenth of the budget, *and* the variety is *meaningful* (each unique appearance carries trait-information legibly).
|
||
|
||
|
||
## Visual rendering: three-shader philosophy + color-language
|
||
|
||
**One world, three shaders, three political realities — one rendering engine (cel-shading) with per-register parameter variation.**
|
||
|
||
The rendering discipline (locked v0.17): **cel-shading is the engine for all three registers** (Godot-native, asset-budget-friendly, ages well — Borderlands 2009 still reads current). The registers diverge through **outline-color + background-treatment + weathering-level**, not through engine-switching. Photorealistic-glossy-Apple-store rendering for imperial-net was rejected (not Godot's strong suite); the imperium's polished-falsity is achieved through *omission* (no weathering, no environmental noise, gold-rim-light-on-clean-white) rather than *extra rendering tech*.
|
||
|
||
| Register | Outline | Background | Weathering | What it says |
|
||
|---|---|---|---|---|
|
||
| **Gameworld** | Dark heavy lines | Marble + obsidian + rust + chroma; environmental noise | High (rust streaks, hatched dirt, ink-line cracks; hand-painted patina) | *Embodied life with history. Surfaces carry memory.* (Cel-shading preserves this thesis via hand-painted weathering — different visual grammar, same thesis intact.) |
|
||
| **Liminal** | Painterly / soft / desaturated; **progression-gated grainy-film-mode at low witness-progression** opening to refined-cel-shading-with-warm-skin at endgame | Blurred ambient; muted | Low (atmospheric only) | *Contested frontier. Privacy-through-opacity. Focus-to-see. The clarity of vision IS the resistance-progression made visible — the player earns the seeing of the beloved through body-mods + in-between-knowledge accumulation.* |
|
||
| **Imperial net** | **Lean subtle gold rim-light** | **Clean white** (no environmental noise) | **None** (the imperium scrubs its presentation) | *Polished propaganda; seduction-by-omission. The render-style itself is propaganda-detector — the imperium's clean-falsity reads as the absence of the world's honest decay. Walking from gameworld into imperial-net is a render-style-shift the player feels physically.* |
|
||
|
||
**Layered with color-language** (per the Color-language section above). Trait-modulation means two NPCs in same pipe see measurably different things. Cel-shading flat-color regions *amplify* the trait-color-grammar (color-as-language gets more legible, not less).
|
||
|
||
Layer-transitions = shader-blends, not loading-screens. **Clasp = candlelight-in-fog local override** (3m clear-volume around clasp-pair within ambient vagueness; visible at-a-glance signature of shared interiority — the *external* signature visible to other liminal-inhabitants. The *internal* mesh-with-real-skin per `../identity-and-personhood/bodies.md` §The in-between human-mesh is visible only to the clasp-pair, manifested through consent-as-rendering, gated by the witness-progression that determines whether the view is grainy-restricted or clean-refined.)
|
||
|
||
**Body-tier silhouette readability** (per `../identity-and-personhood/bodies.md` §The body-caste gradient): strong cel-shading outlines + flat-color regions make caste-tier *legibly visible at silhouette-distance*. Class-stratification gets a render-pipeline built for it.
|
||
|
||
**The in-between mesh-skin distinction** (visible only inside the clasp): refined-cel-shading-with-warm-skin (softer outlines, warmer cel-shading bands, hand-painted blush, subtle subsurface tint within the cel-shading vocabulary). Reads as *real* against the *flat-comic-book* world bodies — distinguishability via *refinement-within-the-style*, not *style-switching*. Asset-budget benefit: clasp-scenes are infrequent and bounded, so the team can spend extra detail there without straining the rule-catalogue elsewhere.
|
||
|
||
### Diegetic relays — the architecture's heartbeat made legible
|
||
|
||
The architecture's pulses (forward-prop ascending, back-write descending, GM-dispatch, equilibrium-recompute) are made *visible and audible in-world* via building-mounted relays. The imperial net's heartbeat is not a HUD spinner; it is in-fiction infrastructure that hums, blinks, glows, and goes dark.
|
||
|
||
| System event | Relay manifestation |
|
||
|---|---|
|
||
| Prune-blob ascending (logout sync) | Relay in district pulses; audible hum |
|
||
| GM dispatch descending (event-chain incoming) | Relay glow brightens; cross-district shimmer for world-event |
|
||
| Equilibrium recompute | Cross-district rhythm; world-level pulse |
|
||
| Director receives tool-grant | Local relay pattern shifts |
|
||
| Relay going dark | Audit-link severed; that block has gone in-between |
|
||
| Lemniscate axis-rate | Environmental tempo; districts breathe in time with their gameservers |
|
||
|
||
**Relay density is the legible gradient of the rings-of-access:**
|
||
|
||
- **Imperial net (Ring A)** — relay-dense, constant hum, no shadow. Audit-gravity is *loud*.
|
||
- **Liminal in-between (Ring B)** — sparse relays, intermittent. You can hear the gravity pulling in the distance.
|
||
- **Gameworld commons (Ring C)** — relays absent or broken. *The silence itself is the signal.*
|
||
|
||
Players navigate the rings *by ear and eye*, not by reading a UI. The privacy-cost of in-between is now physically experienced — you walk away from the hum, you spend lifeforce, you find the quiet places.
|
||
|
||
**Dramatic surface this opens** (free, falls out of making the architecture visible):
|
||
|
||
- Relay-watcher factions reading the pulses for intel
|
||
- Cypherpunk-style sabotage to dim a relay and create local in-between space
|
||
- Equilibrium events arriving with visible warnings (relays blaze before the GM's catalogued event spawns)
|
||
- Relay-anomalies as puzzle/investigation mechanic
|
||
- Players learning the *language* of pulses over hours and feeling clever for it
|
||
|
||
**Architectural-honesty move.** Most surveillance-aware game design either hides the surveillance or abstracts it away. Nimmerworld makes it *impossible to forget*: the audit-system tells you when it's auditing. Players see what is watching them, hear what is reading them, and choose their proximity accordingly. **Privacy is not granted — it is achieved by walking away from the relays at lifeforce-cost.**
|
||
|
||
|
||
---
|
||
|
||
**Version:** 0.8.0 | **Created:** 2026-04-26 | **Updated:** 2026-04-26 | **Origin:** Split from architecture-index.md v0.7 (2026-04-26); cel-shading-everywhere + per-register parameter variation locked v0.17 (2026-04-26)
|