From 0de5e6f047d04e66caa822bc72439d5fa2dd197a Mon Sep 17 00:00:00 2001 From: dafit Date: Sun, 26 Apr 2026 02:21:50 +0200 Subject: [PATCH] =?UTF-8?q?introduce=20nimmerworld/style/=20=E2=80=94=20vi?= =?UTF-8?q?sual-language=20as=20its=20own=20typed=20contract=20Style=20is?= =?UTF-8?q?=20a=20cross-cutting=20concern=20(trait-palette=20touches=20at?= =?UTF-8?q?=20minimum=205=20of=20the=209=20architecture=20domains);=20it?= =?UTF-8?q?=20deserves=20its=20own=20typed-contract=20surface,=20mirroring?= =?UTF-8?q?=20the=20architecture-index=20=E2=86=92=209=20domain=20files=20?= =?UTF-8?q?pattern.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- style/style-index.md | 61 ++++++++++++++++++++++ style/trait-palette.md | 112 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 173 insertions(+) create mode 100644 style/style-index.md create mode 100644 style/trait-palette.md diff --git a/style/style-index.md b/style/style-index.md new file mode 100644 index 0000000..512050d --- /dev/null +++ b/style/style-index.md @@ -0,0 +1,61 @@ +# Nimmerworld — Style Index + +> *Visual language is its own typed contract. This file is the cross-domain index of all visual / aesthetic / UI decisions, pointing at canonical sub-guides and enforcing consistency across the architecture's nine domain files.* +> +> *Companion to: [`../architecture-index.md`](../architecture-index.md). Sub-guides live alongside this file in `nimmerworld/style/`.* + +--- + +## Spine rule — the achromatic / chromatic discipline + +**The 8 trait-palette is exclusively chromatic. Achromatic colors are reserved for UI / environment / decay.** This is the load-bearing constraint that makes diegetic text rendering possible without overlay-boxes: + +| Palette | Reserved for | +|---|---| +| **8 saturated chromatic hues** (the trait-wheel) | The 8 traits — and only the 8 traits | +| **White** | Text and pure-light UI overlay | +| **Black** | Shadows, voids, the imperial-net's deep-strip | +| **Greys** | Neutral defaults — NPCs without active trait-pulse, ambient surfaces | +| **Browns / earth tones** | Aged surfaces, decayed materials, the rust-and-patina layer | + +**Why this matters.** Color is *vocabulary*; reserving it for *information* (trait-state) keeps the achromatic palette free for the *medium* that carries the information (text, neutral environment, depth). Most games end up with textbox-everywhere because they let saturated colors leak into environmental art, forcing text-on-box for legibility. Nimmerworld doesn't need the textbox because nothing is competing for white's luminance slot — *white means one thing: you're being told something*. + +**This rule propagates everywhere.** Any new visual element must respect it: + +- A new mod-class CANNOT introduce a saturated chromatic accent unrelated to a trait-coordinate +- A new faction's heraldry CANNOT use a chromatic color outside the trait-palette +- A new shader register CANNOT use saturated chromatic tones for environmental fidelity +- Decorative environmental color MUST be muted (browns / greys / desaturated tones) to keep the trait-wheel's meaning intact + +When in doubt, ask: *does this color carry trait-information, or is it decorative?* If decorative, desaturate. If trait-information, use the canonical wheel-position from [`trait-palette.md`](./trait-palette.md). + +## Sub-guides + +| Sub-guide | What it covers | Status | +|---|---|---| +| [`trait-palette.md`](./trait-palette.md) | The 8 traits on the color wheel, 4 oppositional pairs at 180°, schoolchild-descriptions, motion-signatures | ✓ canonical (v0.1) | +| `typography.md` | Text rendering, hierarchy, no-textbox commitment, the white-as-text-only semantic-slot | TODO | +| `shaders-by-register.md` | Three-shader philosophy: gameworld PBR / liminal blur / imperial-net emission; clasp candlelight-in-fog override; clasp color-merge | TODO | +| `body-feedback.md` | NPC body-pulse rules during gesture-alignment; trait-flash event-vocabulary; cross-cycle trait-drift rendering | TODO | +| `ui-elements.md` | Gesture-circle UI styling, universal-translator tokenizer-view, profile-switch indicator, hardstop visual-distinct treatment | TODO | +| `relays.md` | Diegetic-relay visual vocabulary, pulse-pattern lexicon (slow / fast / irregular / cross-district shimmer / dark) | TODO | +| `asset-aesthetic.md` | Base-limb texture rules, mod aesthetic registers per faction, muted-melancholic environmental treatment | TODO | + +Sub-guides will be filled out as visual decisions land. The skeleton plus `trait-palette.md` is the v0.1 spine; everything else grows from there. + +## Cross-references into architecture domain files + +The trait-palette is referenced from many architectural primitives. When `trait-palette.md` changes, these sections may need updates too (or they may reference back into here for canonical definitions): + +| What | Where it's referenced architecturally | +|---|---| +| Trait-color rendering on NPC bodies | [`../topology-and-rendering/architecture.md`](../topology-and-rendering/architecture.md) §Color-language | +| Trait-color flashes on gesture-alignment | [`../runtime-engine/architecture.md`](../runtime-engine/architecture.md) §Phase-locked overlay-loop ladder + §Gesture-alignment as recursive-lemniscate | +| Gesture-circle UI placement of trait-sectors | [`../player-experience/architecture.md`](../player-experience/architecture.md) §The trait-circle as gestural primary modality | +| Color-coding of mod-classes | [`../identity-and-personhood/architecture.md`](../identity-and-personhood/architecture.md) §Mods as trait-bearers | +| Color-coding in three-shader philosophy | [`../topology-and-rendering/architecture.md`](../topology-and-rendering/architecture.md) §Visual rendering | +| Faction color-politics | [`../topology-and-rendering/architecture.md`](../topology-and-rendering/architecture.md) §Color-language → Faction color-politics table | + +--- + +**Version:** 0.1 | **Created:** 2026-04-26 | **Updated:** 2026-04-26 diff --git a/style/trait-palette.md b/style/trait-palette.md new file mode 100644 index 0000000..e083905 --- /dev/null +++ b/style/trait-palette.md @@ -0,0 +1,112 @@ +# Nimmerworld — Trait Palette + +> *The 8 personal traits, their canonical Greek names, schoolchild-simple descriptions, color-wheel positions, and motion-signatures. The trait-palette is the spine of the entire visual / linguistic / cognitive system — everything in nimmerworld either preserves the spine or violates it.* +> +> *Companion to: [`style-index.md`](./style-index.md), [`../architecture-index.md`](../architecture-index.md). Cross-referenced from every architecture domain file because the trait-vocabulary is what those files all run on.* + +--- + +## The 8 traits — Greek canonical names + schoolchild descriptions + +The architecture has been using *Hellenic personality-virtues* as the trait-cosmology since v0.4. The names are kept for their literary depth and faction-naming use. The descriptions are written at schoolchild-level so they travel through subtitles, NPC speech, tutorial text, and the universal-translator tokenizer-view without ever needing a glossary. + +| Greek name | Schoolchild description | +|---|---| +| **Sophrosyne** | *holding back when I want to act* | +| **Dikaiosyne** | *standing for what's fair* | +| **Philotes** | *loving and staying close* | +| **Mnemosyne** | *remembering what mattered* | +| **Aletheia** | *seeing what's hidden* | +| **Kairos** | *catching the right moment* | +| **Moira** | *reading what's coming* | +| **Eros** | *reaching for what I want* | + +**Players read the descriptions in everyday play; the Greek names live in faction-naming, deep-lore, scholar-NPC speech, and Memorialist-archive context.** A player can complete the entire game without ever consciously learning the Greek names — the trait-vocabulary travels through colors and descriptions. Players who lean into the depth discover the classical-philosophical lineage as a deeper-tier reward (Souls-game discipline applied to vocabulary). + +## The wheel — 4 oppositional pairs at 180° + +**The traits form 4 natural oppositional pairs.** The 12-segment artist's color wheel renders these as direct complementary pairs (180° apart on the wheel) — visual contrast carries the philosophical opposition. + +| Pair | The opposition | Wheel positions (180° apart) | +|---|---|---| +| **Eros ↔ Sophrosyne** | reaching for ↔ holding back | **Red ↔ Green** | +| **Philotes ↔ Dikaiosyne** | loving close ↔ standing fair (partial ↔ impartial) | **Orange ↔ Blue** | +| **Aletheia ↔ Moira** | seeing what's hidden ↔ reading what's coming (past-revealed ↔ future-fated) | **Yellow ↔ Violet** | +| **Mnemosyne ↔ Kairos** | remembering what mattered ↔ catching the right moment (past-dwelling ↔ present-piercing) | **Red/Violet ↔ Yellow/Green** | + +**Why this is the right move.** Complementary pairs maximize perceptual contrast (Red and Green can never be confused at a glance) AND carry the trait-system's *philosophical structure* (the trait-pair is the moral/dramatic axis the simulation is built around). When two NPCs in conversation pulse with complementary colors, the *opposition is felt* — Red-Eros longing pressing against Green-Sophrosyne restraint becomes a chromatic conflict the player reads pre-verbally. **The color wheel does the dramaturgy for free.** + +**Each pair is a real philosophical axis the architecture has been quietly relying on:** + +- *Reaching ↔ Holding* — the structural tension the clasp-mechanic lives inside (you reach toward your beloved; you hold back to stay disciplined for your shift) +- *Partial ↔ Impartial* — the eternal classical tension of justice-vs-love (Antigone, Lear). Architecturally: love-the-bonded vs serve-the-fair +- *Past-revealed ↔ Future-fated* — Aletheia uncovers what was buried; Moira reads what was always coming. Time-axis bookends +- *Past-dwelling ↔ Present-piercing* — Memorialist-honor-the-dead vs Kairic-strike-now. Two ways of being-in-time the regime tries to police separately + +## The full table — color + motion-signature + description per trait + +| Greek | Description | Color (canonical hue) | Wheel position | Motion-signature | +|---|---|---|---|---| +| **Eros** | reaching for what I want | **Red** | 12:00 | uneven flame-flicker | +| **Philotes** | loving and staying close | **Orange** | 1:30 | breath-rate warm pulse | +| **Aletheia** | seeing what's hidden | **Yellow** | 3:00 | clear, no pulse — still and bright | +| **Kairos** | catching the right moment | **Yellow/Green** (chartreuse) | 4:30 | lightning-flicker | +| **Sophrosyne** | holding back when I want to act | **Green** | 6:00 | steady, even pulse | +| **Dikaiosyne** | standing for what's fair | **Blue** | 7:30 | weighted slow pulse | +| **Moira** | reading what's coming | **Violet** | 9:00 | slow-thread undulation | +| **Mnemosyne** | remembering what mattered | **Red/Violet** (dusky-rose) | 10:30 | depth-shimmer | + +**Motion-signature paired with color provides color-blind accessibility** — every trait is uniquely identifiable 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. + +## Wheel layout (clockwise from 12 o'clock) + +``` + Eros + (Red) + ╔═════════════╗ + Mnemosyne Philotes + (R/Violet) (Orange) + │ │ + Moira ────────●──── Aletheia + (Violet) (Yellow) + │ │ + Dikaiosyne Kairos + (Blue) (Y/Green) + ╚═════════════╝ + Sophrosyne + (Green) +``` + +**The wheel's natural temperature-axis aligns with the architecture's dramatic structure.** Warm side (Eros, Mnemosyne, Philotes, Aletheia, Kairos) carries *outward / present-active / engaged* registers; cool side (Sophrosyne, Dikaiosyne, Moira) carries *inward / withholding / contemplative* registers. Aletheia at 3:00 sits at the brightness-zenith; Sophrosyne at 6:00 sits at the cool-balance-base; Eros at 12:00 sits at the heat-apex. + +## The achromatic exception — Aletheia is *not* white + +In earlier drafts (DESING-VISION v0.1), Aletheia was rendered as luminous-white (off-the-wheel, achromatic). v0.1 of this trait-palette places Aletheia on **Yellow** — the brightest chromatic hue. The metaphor of *truth as illumination* is preserved (Yellow is the brightest color the eye can read), and white is freed up for its proper job: rendering text and pure-light UI overlay (per [`style-index.md`](./style-index.md) §Spine rule). + +This is a **deliberate constraint** — the trait-palette is exclusively chromatic so that achromatic colors (white, black, grey, brown) remain reserved for non-trait roles. *Aletheia is bright, not transcendent; the brightness IS the truth-revealing register.* + +## Designer-fixed corpus — words to colors + +Every word in the universal-translator's vocabulary corpus is mapped to one (or a primary + secondary) trait-coordinate. The mapping is **designer-authored, fixed, universal** — the same word means the same trait-color for every player and every NPC and every LLM-context. + +When a player encounters a word in the world, the universal-translator's tokenizer-view renders that word in its trait-color (or fragmentary / opaque if untranslated). **Over hundreds of hours of play the player learns the trait-cosmology *through observation, not glossary*.** The corpus is the typed contract that closes the player-LLM hallucination-surface (per [`../player-experience/architecture.md`](../player-experience/architecture.md) §Designer-fixed cosmology, player-curated arrangement). + +## Cross-domain rendering — where trait-colors appear + +The trait-palette is rendered across many surfaces. Each surface gets specific style-rules in the relevant sub-guide: + +| Surface | Sub-guide | +|---|---| +| NPC chassis pipe-flow + accents | `body-feedback.md` | +| Gesture-circle UI sectors | `ui-elements.md` | +| Universal-translator tokenizer-view word-coloring | `ui-elements.md` | +| Mod cosmetic accents (within trait-bearer rules) | `asset-aesthetic.md` | +| Diegetic relay pulses | `relays.md` | +| Faction heraldry | `asset-aesthetic.md` | +| Liminal / imperial-net shader transformations of the palette | `shaders-by-register.md` | + +**The trait-palette defined here is the canonical reference.** All sub-guides import these definitions; none redefine them. + +--- + +**Version:** 0.1 | **Created:** 2026-04-26 | **Updated:** 2026-04-26