Adopts the whatsinagame naming pattern where the domain comes first and the action second (e.g. pr-review, sprint-start, audio-gen). Updated all cross-references in settings, agents, docs, and inter-skill references. 12 renames: commit→git-commit, create-skill→skill-create, gen-audio→audio-gen, gen-image→image-gen, plan-sprint→sprint-plan, push-pr→pr-push, render-sprite→sprite-gen, review-pr→pr-review, search-docs→docs-search, start-sprint→sprint-start, start-workshop→workshop-start. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
50 KiB
Art Direction & Mood Board Workshop — Final Outcomes
Date: 2026-02-12 Facilitator: Team Leader (Jeroen) Participants: Araminta (Visual Designer, lead), Ozzie (Player Experience), Miri (Worldbuilder), Gore (Themes & Endgame), Qatux (Documenter) Rounds: 3 + Closing + Post-workshop technical session (Tyre, Araminta, Stig) Status: Complete — all items resolved, ready for formal decision recording. Pipeline test in progress.
Visual Identity Statements
Each participant's one-sentence answer to "What is this game's visual identity?"
Araminta: A well-maintained space station where the lighting tells you how to feel and the people tell you what to fear.
Ozzie: A warm, lived-in space station seen through one person's eyes — where the lighting tells you how to feel, the fog tells you what you don't know, and the same room looks like home or like evidence depending on who you are.
Lead correction on Ozzie's statement: The final clause — "the same room looks like home or like evidence depending on who you are" — inverts the actual mechanism. The room is ALWAYS the room. It renders identically for every character. The visual temperature difference between playthroughs comes from characters choosing to spend time in different rooms, not from the same room looking different. Ozzie's formulation implies per-character rendering of shared spaces, which contradicts environmental neutrality (§1.10). The other three statements are closer to the mark. See §1.11 for the precise mechanism.
Miri: A lived-in station assembled from forty years of modular parts, seen through a cone of imperfect knowledge, where the warmth of the bar and the cold of the corridor are the same reality experienced by different lives.
Gore: A place worth living in, seen by someone trying to decide if they believe it.
1. Workshop Decisions
1.1 Visual Style
Clean 2D with bold silhouettes, tile-based world composition, lighting-driven atmosphere.
- Not pixel art (retro-coded), not painted (too expensive for AI pipeline), not 3D (uncanny at this scale)
- Godot 4 Light2D pipeline: PointLight2D per fixture, LightOccluder2D on walls, CanvasModulate for global ambient
- Nano Banana / Gemini 2.5 Flash asset generation for tiles and entities
- Gore's label for the converged direction: "functional warmth"
- Araminta's production principle: "Sprites are shape templates that the lighting system completes." No baked shadows, no baked lighting, no baked mood. Sprites are neutral; Light2D does the rest.
Consensus: Unanimous (Rounds 1-2). All four agents independently arrived at the same art style.
1.2 Camera Angle — D-019 Amendment
Rimworld-angle shallow tilt: nearly orthographic top-down with enough forward perspective to reveal object and wall front faces.
- This is NOT classic 2:1 isometric. NOT 3/4 view. NOT full top-down.
- The grid remains square/orthogonal (no diamond tile geometry)
- Vision cone math remains 2D — the tilt is cosmetic, not mechanical
- "Top-down with depth" is the correct description; "isometric" is incorrect terminology
What the tilt gives us:
- Three-era wall vocabulary becomes native (wall faces visible without a rendering cheat)
- Entity silhouette differentiation improves (front-facing details: vest, apron, uniform)
- Object sprites become self-describing (desk shows screen, bar counter shows front panel)
- Entity facing direction becomes readable (see someone's front vs. back)
What doesn't change:
- Tile grid stays orthogonal (64x64px visual tiles = 2x2 sim tiles per D-066, square)
- Vision cone computed on 2D sim grid (Rust shadowcasting, D-035)
- Light2D pipeline unchanged
- Fog of perception unchanged
- Environmental neutrality unchanged
- All art direction principles hold
Consensus: Unanimous (Round 3 + Closing). All four endorse. Miri: "setting-positive." Gore: "thematically stronger — person standing in doorway, not surveillance camera." Ozzie: "the station comes alive." Araminta: "strictly better."
Recording note (Araminta, Miri, Ozzie): Record as "Rimworld-angle shallow tilt," NOT "slight isometric." Rimworld is orthographic with a cosmetic forward tilt. Isometric implies diamond grid geometry. The spirit of D-019 (top-down as primary, not isometric or first-person) holds; this is an amendment to the angle, not a contradiction.
1.3 World Composition — Tile-Based
Dual-scale grid: 0.5m sim tiles, 1m visual tiles (2x retina factor, D-066). Visual tiles are 64x64px.
- Structural tiles (walls, floors, doors): 64x64px per visual tile (= 2x2 sim tiles), muted, minimal outlines, zone palette + era differentiation
- Object tiles (furniture, equipment, containers): 64x64px per visual tile, medium outline (1px), Rimworld object detail as target. All world geometry is 2x2 sim tile minimum.
- Larger objects composed of multiple visual tiles (e.g., 3x1 bar counter, 2x1 desk — in visual tile units)
- Entities occupy 1x1 sim tiles (0.5m) for fine positioning within the 1m visual grid
- Three construction eras as tile palettes (see §1.8)
- Stations are literally built this way — prefab modular construction = tile grid IS the construction grid (Miri)
Design principle — "Settling is placement" (Gore): Object density IS environmental storytelling. The bar is full because Lera settled it. The corridors are empty because nobody did. Investigation is archaeology of intention — every placed tile is someone's decision.
Consensus: Unanimous (Rounds 2-3). Tile-based input strengthened all existing positions.
1.4 Visual Hierarchy
Three-layer system: Entities > Objects > Structure.
| Layer | Outline weight | Color saturation | Role |
|---|---|---|---|
| Entity sprites | 2px (boldest) | Highest — D-033 relationship colors | Information / social layer |
| Object tiles | 1px (medium) | Moderate — era-appropriate palette | Function / lived-in character |
| Structural tiles | Minimal / none | Lowest — muted zone palette | Spatial backbone |
Hard rendering rule (Araminta): Entity always wins visual ties. If an entity and an object overlap, the entity's D-033 color must remain visible. This is a readability guarantee, not an aesthetic preference.
Consensus: Unanimous (Rounds 2-3).
1.5 Entity System
24x32 pixel footprint within 64x64px visual tiles. Entities occupy 1x1 sim tiles (0.5m) but render across a 2x2 sim tile sprite footprint per D-066.
- Entity smaller than visual tile = clear figure-ground relationship
- D-033 color as primary information signal
- Silhouette as primary identity signal (I-01: "Silhouette IS identity because color is spoken for" — Ozzie)
- One identifying silhouette feature per named NPC (Kael's vest, Lera's apron, Sera's Commission uniform)
- 3-4 template silhouettes for generic NPCs
- At Rimworld's tilt: front-facing details visible, facing direction readable, 2 drawn directions (front/back) with mirroring for left/right
Consensus: Unanimous (Rounds 2-3).
1.6 Lighting System — Three-Reference Model
| Reference | Provides | Aspect |
|---|---|---|
| Darkwood (Acid Wizard Studio) | Vision cone mechanics | Light pooling, graduated fade from known to unknown, darkness-as-weight, emotional gradient of restricted LOS |
| Blade Runner 2049 / Roger Deakins | Color temperature language | Warm amber = social/inhabited, cool white = institutional/official, mixed = transitional |
| Edward Hopper (Nighthawks) | Emotional composition | Warm interior light surrounded by unknowable dark — "our game's central image" (Gore) |
Critical retuning from Darkwood:
| Darkwood | The Settled Reach |
|---|---|
| Darkness = hostile | Darkness = uncertain |
| Light = safety | Light = visibility (not necessarily safety) |
| Beyond the cone: monsters | Beyond the cone: life continuing without you |
| Emotional register: dread | Emotional register: uncertainty |
Where Darkwood's model applies directly: Maintenance corridors with manual-switch lighting (~20-30% of spaces), exterior sections during night/weather, the fog boundary everywhere.
Where it needs adaptation: Most of Sova is lit. Light doesn't equal safety — the bar's warm light is where THE FRIEND's contradiction might be noticed.
Godot implementation: PointLight2D (per fixture, per zone) + LightOccluder2D (on walls/obstacles) + CanvasModulate (global ambient) + textured PointLight2D on player (vision cone shape). Stock Godot 4 pipeline — no custom engine work.
Consensus: Unanimous (Rounds 1-2). Ozzie's strong Round 1 advocacy for Darkwood endorsed by all in Round 2.
1.7 Fog of Perception — Cone Shape
Vision cone is asymmetric: full clarity forward, degraded at peripheral edges, blind behind (D-015).
- Cone, not circle. Turning around is a meaningful decision, not a reflex.
- The Rust occlusion tracers (D-035) simulate biology, not technology
- The lattice doesn't expand your visual field; it annotates what you already see
- Fog = absence of knowledge, not visual decoration
- Graduated: clear → reduced → uncertain → ignorant (not binary)
- Quality of fog boundary: gradient desaturation, not a hard wall of black
Consensus: Confirmed by lead decision, endorsed unanimously (Round 3).
1.8 Three Construction Eras
| Era | Age | Palette character | Object examples | Zones |
|---|---|---|---|---|
| Era 1 | ~40 years | Institutional grey (#7a7f85 range), cool, uniform, regulation markings, clean edges, minimal wear | Standard wall panels, composite floors, heavy pressure doors | Terminal structure, main corridors, maintenance |
| Era 2 | ~20-30 years | Similar grey, subtly different tone (#6d7178 range), surface-mounted elements, visible fasteners | Retrofit Meridian junction boxes, modified partitions, expansion-era floor | Terminal modifications, bar corridor |
| Era 3 | Recent/ongoing | Warmer tones, most varied, more color variety, less uniform | Bar furnishings, locker decorations, hand-lettered signs, mismatched chairs, personal items | Bar interior, break rooms, personal spaces |
Consistent outline weight across all tiles — entities heavier than objects, objects heavier than floor tiles. Consistent shadow direction — all tiles cast shadows to the same side (convention TBD for tilt angle). Consistent scale — a chair tile and a desk tile imply the same spatial scale.
Consensus: Unanimous (Rounds 1-3). Araminta provides hex values, Miri provides setting grounding, Gore provides thematic framing.
1.9 Neural Insert Overlay
Geometric data layer rendered with soft bloom shader pass.
- Data is computational (geometric): precise positioning, clean lines, structured information
- Delivery is neural (organic): ~2-3px gaussian blur at ~40% blend on the insert CanvasLayer
- D-033 colors gain soft halos rather than hard edges — "amber feels like a vague sense of concern, not a data flag" (Araminta)
- Smuggler's overlay: thinner, sparser (baseline lattice hardware)
- Detective's overlay: denser, crisper (augmented lattice hardware)
- Passive state nearly invisible; active state clean and precise
- Test (Gore): "If switching the overlay OFF would feel like going deaf rather than closing a window, it's working"
- Test (Ozzie): "After 10 minutes, does the player forget the insert is there? If yes, we've succeeded"
Insert overlay is NOT affected by the fog shader — insert data is computational, not perceptual. Insert markers can appear in fogged areas if the lattice has that data.
Consensus: Unanimous (Round 2). Resolves Round 1 divergence between Araminta (geometric) and Gore (organic) — both positions survive in the synthesis.
1.10 Environmental Neutrality — Strict Zero Shift
The base world layer never shifts in response to conspiracy activation or investigation state.
This is a mechanical constraint, not an aesthetic preference — it protects the information model.
What CANNOT change when conspiracy activates:
- Light color temperature
- Shadow depth or direction
- Tile colors, wall tones, floor patterns
- Any CanvasModulate shift correlated with narrative state
What CAN change:
- Insert overlay density (more annotations, flags, connection lines)
- Entity colors (D-033 shifts: green → amber → red)
- Monologue frequency and urgency
- Player character sprite posture/animation (Araminta's proposal: stress visible on the self, not the world)
Allowed diegetic changes (everyone experiences them):
- Time-of-day cycle (D-031) — physical reality
- Weather — physical reality. The storyteller can TIME weather for dramatic effect, but weather itself is causally neutral.
- Insert overlay density — character cognition, not world state
The horror (Gore): "The player walks into the bar after discovering the conspiracy and it's STILL warm and inviting. That's the horror. The warm light isn't ironic — it's indifferent."
Recording note (Ozzie): Three systems with different rules: (1) Zone lighting is fixed. (2) Weather is the storyteller's instrument. (3) Insert overlay is the character's analytical state. The prohibition is specifically: the rendering pipeline never modifies world-layer visuals in response to narrative state.
Consensus: Unanimous (Round 2). Araminta and Ozzie both independently moved from "subtle shifts allowed" to strict zero after reading Gore and Miri's arguments — convergence through persuasion, not compromise.
1.11 Character Temperature via Spatial Paths
The smuggler's playthrough feels warmer because the smuggler physically spends time in warm-lit spaces. The detective's playthrough feels cooler because the detective physically spends time in cool-lit spaces.
This is NOT an overlay tint. Same Light2D fixtures. Same station. Different daily paths.
- Smuggler's routine: dock floor (industrial-warm) → break room → bar (amber). Their work takes them through social spaces.
- Detective's routine: Commission kiosk → observation posts → corridor patrols → institutional terminals. Their work takes them through institutional spaces.
The setting produces the feeling. No rendering tricks needed. The level design does the work.
Critical clarification (Lead): The temperature difference comes from where each character's WORK takes them, not from who they are as people. Both characters are fully realized people with personal spaces, tastes, and lives. The detective is not a cold analytical camera — they have their own quarters, their own furniture choices, their own version of home. Both characters settle. Both characters decorate. Both characters make their space their own. The visual temperature gap between playthroughs is a consequence of occupation, not personality. The detective's home may be just as warm as the smuggler's — but the detective spends more working hours in cool institutional spaces, shifting the average color temperature of their daily experience. This protects against the "detective = cold robot" interpretation.
Recording note (Miri): Record the mechanism precisely. This is character spatial behavior, not a rendering system. The world IS neutral. The characters' lives have different average color temperatures because they physically occupy different zones.
Consensus: Unanimous (Round 3). Lead decision, endorsed by all. Miri: "more honest and more powerful than a shader tint." Gore: "the cleanest expression of the dual-lens concept."
1.12 Animation System — Two-Tier
Tier 1: CLEAR animation (daily life / public activities)
| Activity | Frames | Readability requirement |
|---|---|---|
| Walking/running | 4-6 frames directional cycle | Instantly readable direction and speed |
| Working at terminal/handling cargo | 2-3 states | Unambiguous "this person is working" |
| Eating/drinking | 2-3 states | Readable from across the map |
| Talking (two entities face-to-face) | 2-3 states | Clearly distinguishable from "standing near someone" |
| Sleeping | 1 state | Unambiguous |
Tier 2: AMBIGUOUS animation (investigation / private intention)
| Behavior | Animation | Player sees / doesn't know |
|---|---|---|
| Pausing/stopping | Entity halts | Sees: stopped. Doesn't know: why |
| Looking around | Head rotation | Sees: scanning. Doesn't know: purpose |
| Lingering near a location | Idle-aware state | Sees: staying. Doesn't know: reason |
| Changing direction | Walk direction reversal | Sees: turned around. Doesn't know: why |
| Proximity without clear interaction | Two entities near, NOT in "talking" animation | Sees: nearness. Doesn't know: intentional or coincidence |
The boundary between Tier 1 and Tier 2 is invisible to the player. There is no visual signal that tells the player they're now seeing "investigation-relevant" behavior.
Why this works: "The clear/ambiguous division isn't an art decision — it's the investigation mechanic expressed through animation" (Ozzie). Routine is readable because routine is public. Deception looks like normal but slightly off (Gore). The 30-minute life-sim runway requires readable routine so the player can notice when it breaks.
Consensus: Unanimous (Round 2).
1.13 Weather as Gameplay System
Weather is a perception modifier, NPC routine disruptor, and storyteller instrument. Weather is diegetic — the one thing that CAN shift the environment, because it's physical reality.
- Planet: Velen (Krenn System). Temperate-maritime, ~0.9G, regular rain, morning/evening fog.
- Fog degrades everyone's vision cones equally — shared vulnerability (Gore: I-07)
- The storyteller can TIME weather for dramatic effect without breaking environmental neutrality
- Foggy mornings = shorter vision cones for everyone = smuggler's early drops safer, detective's dawn surveillance harder
Consensus: Unanimous (Rounds 1-3). Weather as gameplay, not cosmetic, held from Round 1.
1.14 Z-Level Rendering Stack
8-layer stack (Araminta's proposal, endorsed by all):
| Layer | Content | Role |
|---|---|---|
| 0 — Floor tiles | Composite, tile, grating, guide strips | Zone identity, movement surface |
| 1 — Floor objects | Cable runs, drain grates, floor markings, spills | Cosmetic detail, walked over |
| 2 — Furniture / placed objects | Desks, chairs, tables, crates, consoles | Y-sorted with entities. Visual complexity center. |
| 3 — Entity sprites | NPCs, player character | Y-sorted with Layer 2. D-033 colored. |
| 4 — Overhead / wall tops | Pipes, ducts, lighting fixtures, signage | Atmosphere, partial occlusion (semi-transparent) |
| 5 — Fog of perception | Vision cone mask, fog shader | Information boundary — affects layers 0-4 |
| 6 — Insert overlay | Lattice HUD elements, annotations, waypoints | Bloom-rendered, NOT affected by fog |
| 7 — Monologue / UI | Internal monologue, perception labels, UI | Top of stack, always visible |
Wall rendering:
- Option B (visible top surface + face) for structural walls — exterior hull, main compartments
- Option A (boundary lines) for interior partitions — dividers, booth separators
- At Rimworld's tilt, wall faces are visible naturally — no rendering cheat needed
Note (Araminta): Wall rendering distinction "confirmed in principle, implementation detail pending Tyre/Stig" since the shallow tilt naturally shows wall faces. The Option A/B distinction may collapse to thickness/color rather than rendering method.
Sprite stacking: OUT of scope. Not needed for v0.1. Station's visual character comes from floor variation, object variety, and lighting — not vertical dimension.
Overhead occlusion (Gore): Thematically significant. Entities passing behind shelving/under overhangs creates local information gaps within otherwise known spaces. Partial visibility is information-rich: you know someone is behind the shelf but can't see what their hands are doing.
Consensus: Unanimous (Round 3).
1.15 Planet Name: Velen
Velen is canonical as the primary habitable world of the Krenn System.
- Temperate-maritime, ~0.9G
- Regular rain, morning/evening fog
- Mild temperature range, occasional heavy squalls
- Station Sova orbits Velen
- The span gate connects Sova to a planetary freight depot on Velen's surface
- Naming convention: compact, consonant-weighted, two-syllable, Nordic-influenced
Consensus: Proposed by Miri (Round 2), confirmed by lead (Round 3), endorsed unanimously.
2. Complete Art Direction Principles
Confirmed principles, accumulated across all three rounds. All have unanimous consensus.
- Readability over beauty. Always. When readability and atmosphere conflict, readability wins. The game is ABOUT information. (Round 1 C-01)
- Lighting over detail. Sprites and tiles provide shape; Light2D provides mood. (Round 1 C-03)
- Restraint IS the aesthetic. "Functional warmth." Not flashy, not grim, not neon, not grimy. (Round 1, named Round 2)
- Environment never tips its hand. Strict zero shift. Investigation signals are behavioral and informational only. (Round 1 C-05, made unanimous Round 2)
- Silhouette carries identity. Color is spoken for by D-033. Shape differentiates. (Round 1 I-01)
- One asset vocabulary, many lighting profiles. Muted tiles + solar color tinting = every system looks different with the same art. (Round 1 I-06)
- Weather is gameplay. Perception modifier, NPC routine disruptor, storyteller tool. (Round 1 C-06)
- Production constraints = design strengths. Bold silhouettes + limited palette + tile objects + lighting atmosphere serves readability, D-033, Godot 4, AND Nano Banana simultaneously. (Round 1 I-03)
- Settling is placement. Object density IS environmental storytelling. (Round 2, Gore)
- Investigation is archaeology of intention. Every placed tile is someone's decision. Reading the tile world is reading decisions. (Round 2, Gore)
- Two-tier animation. Clear for public routine, ambiguous for private intention. The boundary is invisible. (Round 2)
- Three-reference lighting. Darkwood (cone mechanics) + BR2049 (color temperature) + Hopper (emotional composition). Uncertainty, not dread. (Round 2)
- Insert = geometric precision, organic perception. Bloom-softened data layer. Smuggler's sparse, detective's dense. (Round 2)
- Sprites are shape templates that the lighting system completes. No baked shadows, no baked lighting, no baked mood. (Round 3 closing, Araminta)
- Entity always wins visual ties. If an entity and an object overlap, the entity's D-033 color must remain visible. Readability guarantee. (Round 3, Araminta)
- The gap between entity simplicity and environment detail IS the game. Simple entities in a richly textured station. Neither fully legible alone. (Round 1 I-09, Gore)
3. v0.1.1 Plan — Minimum Sprite Set
3.1 Purpose
The smallest asset set that proves the art direction works in-engine. Every sprite replaces a colored rectangle from v0.1. The test answers one question: "Does moving through this space FEEL like the game we're designing?" (Ozzie)
3.2 Test Scene
The Last Shift bar + one corridor + one doorway between them.
This scene proves:
- Zone temperature difference — warm bar tiles + cool corridor tiles = visible mood shift at boundary
- Object placement as storytelling — bar counter, tables, chairs, crate = room with character
- Entity silhouette differentiation — three entities with different silhouettes, all D-033 tinted
- Y-sort occlusion — entity walks behind bar counter, counter renders in front
- Light2D atmosphere — warm PointLight2D in bar, cool PointLight2D in corridor, dynamic shadows
- Fog of perception — vision cone applied, corridor beyond doorway fades to fog
- Wall type distinction — structural (thick) around room, partitions (thin) subdividing corners
3.3 Sprite Set
Floor tiles (4 sprites):
| Tile | Visual | Hex base |
|---|---|---|
floor_institutional |
Cool grey-blue, subtle grid lines | #2e2e48 |
floor_bar |
Warm tan/beige, wood-panel hint | #3a3028 |
floor_corridor |
Neutral grey, minimal detail | #252535 |
floor_transition |
Split tone — half matches each adjacent zone | — |
Wall tiles (3 sprites):
| Tile | Visual |
|---|---|
wall_structural |
Dark grey-blue, thick, visible face (Option B) |
wall_partition |
Lighter grey, thin (Option A) |
wall_door |
Wall tile with gap + separate door sprite |
Object tiles (8-10 sprites):
| Object | Size | Visual |
|---|---|---|
desk_terminal |
2x1 | Desk + integrated terminal glow, institutional grey-blue |
chair_office |
1x1 | Swivel chair, dark grey (Era 1) |
chair_bar |
1x1 | Mismatched stool/chair, warmer tone (Era 3) |
table_round |
1x1 | Small round table, warm wood |
crate_cargo |
1x1 | Standard cargo container, olive/green |
bar_counter |
3x1 | Bar counter, warm wood, distinct from tables |
light_ceiling |
1x1 | Overhead light fixture (warm/cool variant) |
door_sliding |
1x1 | Sliding door, open/closed states (2 frames) |
coffee_machine |
1x1 | Human comfort detail (Miri) |
junction_box |
1x1 | Wall-mounted Era 2 retrofit (Miri) |
Entity sprites (3 sprites × frames):
| Entity | Purpose | Identifying feature |
|---|---|---|
entity_player |
Player character | 24x32, civilian work clothes, neutral silhouette |
entity_npc_a |
Named NPC (Kael template) | Stocky, vest |
entity_npc_b |
Named NPC (Lera template) | Medium, apron |
Frame count (Araminta): 3 entities × (1 idle + 8 walk [4 dir × 2, or 2 dir mirrored × 4] + 1 interaction) = ~30 frames minimum.
Total unique sprites: ~18-25 tile/object sprites + ~30 entity frames = ~48-55 assets.
3.4 v0.1.1 Success Criteria
Each participant identified the single most important thing for v0.1.1:
| Agent | Priority |
|---|---|
| Araminta | Light2D warm/cool zone contrast working WITH fog-of-perception cone in a single scene |
| Ozzie | Temperature shift walking from corridor into bar must make you FEEL something |
| Miri | Floor tile transition between two zones must read instantly — zone identity from floor alone |
| Gore | Warm/cool doorway transition — if crossing a threshold changes how the room FEELS through lighting alone, the art direction is proven |
Common thread: The warm-to-cool zone transition through the doorway is the singular test. If walking from the cool corridor into the warm bar produces an emotional shift through lighting and floor tiles alone, the art direction works.
3.5 Nano Banana Generation Workflow
- Write a Settled Reach style guide prompt prefix (core constraints: "Rimworld-angle shallow overhead, clean 2D illustration, bold silhouette, muted palette, 1-2px outline, flat lighting, [zone palette] color range")
- Generate floor/wall tiles first — establish palette baseline, 3-4 variants per type
- Generate objects second — using floor tiles as visual context in prompt
- Generate entity sprites last — most iteration needed, start with idle, get silhouette right
- Post-processing pass: normalize to exact dimensions, ensure consistent outline weight, remove any baked shadows AI added, verify readability at 1x zoom
Expect 3-5 generation attempts per final sprite. (Araminta)
4. Key Insights
Ideas that emerged during the workshop and informed the converged direction. Attribution preserved.
| ID | Insight | Source |
|---|---|---|
| I-01 | "Silhouette IS identity because color is spoken for." | Ozzie, Round 1 |
| I-02 | Shadows as information tier: close = see directly, medium = see shadows/hear sounds, long = lattice data only. | Miri, Round 1 |
| I-03 | Production constraints converge with design goals — all four constraints point to the same style. | All, Round 1 |
| I-04 | "The absence of change as horror." The station looks identical after discovering the conspiracy. | Gore, Round 1 |
| I-05 | "Visual restraint is thematic confidence." Papers, Please looks like a spreadsheet and delivers devastating moral weight. | Gore, Round 1 |
| I-06 | "One material vocabulary, many lighting profiles." Grey metal turns golden under a K-type star. | Miri, Round 1 |
| I-07 | "Weather creates shared vulnerability." Everyone is equally blind in a dust storm. | Gore, Round 1 |
| I-08 | "The observed life is richer than the observer's life." The detective's visual world should feel impoverished compared to the smuggler's. | Gore, Round 1 |
| I-09 | "The gap between entity simplicity and environment detail IS the game." Neither fully legible alone. | Gore, Round 1 |
| I-10 | "Fog is uncertainty made visible." Fog hides things in plain sight — ambiguity, not darkness. | Gore, Round 1 |
| I-11 | "Legible but ambiguous animation." Clear enough to see a figure stopped, not detailed enough to know why. | Gore, Round 1 |
5. Mood Board Summary
9 concept images generated during the workshop. Key images for reference:
| # | Subject | Workshop role | Key takeaway |
|---|---|---|---|
| 1 | Bar (The Last Shift) | Warmth register | Amber warmth, social atmosphere. Slightly too grimy. |
| 2 | Logistics hub | Zone differentiation | Warm/cool contrast between zones. Slightly too cold. |
| 3 | Maintenance corridors | Mixed-era materials | Proves layered construction. Too decayed — station should be maintained. |
| 4 | Rain exterior | Weather as atmosphere | Strongest mood match. Rain as routine, not spectacle. |
| 5 | Vision cone / fog | Camera scale + perspective | Scale and perspective are right. Character too military, fog too hostile, cone too literal. |
| 6 | Span gate | Emotional register | Mundane-extraordinary register. The everyday mundanity of interstellar transit. |
| 7 | Convergence (top-down) | First synthesis | Closer: civilian character, fog as desaturation, warm/cool zones. Needs cone not circle, adult proportions. |
| 8 | Tile composition | Tile system proof | Most production-relevant. Proves tile-based composition carries warmth and personality. Zone transition through floor tiles works. |
| 9 | Bar antagonists | Emotional core | Strongest emotional hit. Populated bar, surveillance composition (cold corridor, warm bar, observer outside). Accidentally demonstrates graduated fog (detailed center → silhouette periphery). Slightly too tilted for Rimworld angle — but emotional register is the target. |
Convergence formula (lead): #5's perspective/scale + #1/#4 warmth + #1-vs-#2 zone differentiation + #6 register + civilian characters + fog as absence.
After camera angle amendment: The sweet spot is between #7 (too flat) and #8 (approximately right). #9 is slightly too tilted but captures the emotional register.
6. Reference Canon
Tier 1 — Universal (all four agents cite)
| Reference | Endorsed aspect |
|---|---|
| Rimworld | Readability principles, visual hierarchy, camera angle (now also direct camera reference) |
| XCOM 2 | Fog of war as emotional weight |
| The Sims 3/4 | Daily routine legibility from overhead |
Tier 2 — Strong (3 agents, strong endorsement)
| Reference | Endorsed aspect |
|---|---|
| Tactical Breach Wizards | Silhouette discipline, clarity-as-design-origin |
| Disco Elysium | Internal voice recontextualizing visual information (principles, not production method) |
Tier 3 — Targeted (2 agents, specific aspect)
Darkwood, Blade Runner 2049, Hopper's Nighthawks, Heat Signature, Citizen Sleeper, The Expanse, Alien/Alien: Isolation, Return of the Obra Dinn, Syd Mead
Avoid List
Cyberpunk neon / Blade Runner rain-noir, Star Trek antiseptic, Star Wars romantic, Mass Effect Citadel gleam, Dead Space grimy horror, pixel art, Iron Man HUD, Hotline Miami neon maximalism, military tactical palette
7. Candidate Decisions for Formal Recording
The following workshop outputs are ready for formal recording in decisions/ domain files. All have unanimous consensus. Proposed numbering starts at D-042 (D-041 is the current highest).
Candidate D-042: Art Direction — Visual Style
- Decision: Clean 2D with bold silhouettes, tile-based world composition (64x64px visual tiles on dual-scale grid per D-066), lighting-driven atmosphere. "Functional warmth." Not pixel art, not painted, not 3D. Godot 4 Light2D pipeline. Sprites are shape templates that the lighting system completes — no baked shadows, no baked lighting, no baked mood.
- Rationale: Four independent agents converged on the same style. Production constraints (Nano Banana), engine capabilities (Godot 4 Light2D), design requirements (D-033 readability), and thematic goals (restraint as confidence) all point to the same solution.
- Domain: perception.md (cross-ref: architecture.md for Godot pipeline)
- Raised by: Araminta (lead), endorsed unanimously
Candidate D-043: Art Direction — Visual Hierarchy
- Decision: Three-layer visual hierarchy: entities (2px outline, D-033 color) > objects (1px outline, era palette) > structure (minimal outline, muted zone palette). Entity always wins visual ties — if an entity and object overlap, entity D-033 color must remain visible.
- Rationale: Readability guarantee. The player must parse the game state at a glance with entities as the primary information layer.
- Domain: perception.md
- Raised by: Araminta (outline spec), Ozzie (readability priority)
Candidate D-044: Art Direction — Environmental Neutrality
- Decision: Strict zero visual shift on the base world layer correlated with narrative/conspiracy state. The rendering pipeline never modifies world-layer visuals in response to narrative state. Zone lighting is fixed. Weather is the storyteller's instrument (diegetic). Insert overlay is character cognition. These three are different systems with different rules. Character-driven changes allowed: insert overlay density, D-033 entity colors, monologue, player sprite posture.
- Rationale: If the station itself helps the player detect conspiracy, it undermines the core information-asymmetry loop. The rendering engine has no narrative opinions. The absence of change IS the horror.
- Domain: perception.md (cross-ref: content.md for narrative state)
- Raised by: Gore and Miri (strict zero position), Araminta and Ozzie moved to this position in Round 2
Candidate D-045: Art Direction — Lighting System
- Decision: Three-reference lighting model. Darkwood: vision cone mechanics, light pooling, graduated fog boundary. BR2049/Deakins: color temperature as emotional language (warm amber = social, cool white = institutional). Hopper: warm interior surrounded by unknowable dark. Emotional register: uncertainty, not dread. Character temperature via spatial paths — smuggler in warm zones, detective in cool zones — same fixtures, different daily routes.
- Rationale: Lighting is the primary atmosphere engine. The three references provide mechanics (Darkwood), color language (BR2049), and emotional composition (Hopper). Character temperature is diegetic, not rendered.
- Domain: perception.md
- Raised by: Ozzie (Darkwood advocacy), Araminta (BR2049 color), Gore (Hopper), Miri (character spatial paths)
Candidate D-046: Art Direction — Animation System
- Decision: Two-tier animation. Tier 1 (clear): public daily activities — walking, working, eating, talking, sleeping. Instantly readable. Tier 2 (ambiguous): privately motivated behaviors — pausing, looking around, lingering, changing direction, unexplained proximity. The player sees the action but cannot determine the intention. The boundary between tiers is invisible.
- Rationale: The clear/ambiguous division is the investigation mechanic expressed through animation. Routine must be readable so deviations are noticeable. Maps to NPC tell system (D-024).
- Domain: perception.md (cross-ref: content.md D-024)
- Raised by: Ozzie and Gore (two-tier proposal), Araminta (production spec), Miri (setting grounding)
Candidate D-047: Neural Insert Overlay — Visual Design
- Decision: Geometric data layer (precise positioning, clean lines) rendered with soft bloom shader pass (~2-3px gaussian, ~40% blend). Smuggler's overlay: thinner, sparser (baseline lattice). Detective's overlay: denser, crisper (augmented lattice). Insert CanvasLayer is not affected by fog shader. Passive state nearly invisible; active state clean and precise.
- Rationale: Data is computational (geometric), delivery is neural (organic). Bloom synthesis resolves the geometric-vs-organic divergence from Round 1 — precision underneath, perceived as organic.
- Domain: perception.md
- Raised by: Araminta (geometric spec), Gore (organic requirement), Miri (per-character density)
Candidate D-048: Z-Level Rendering Stack
- Decision: 8-layer z-stack: Floor → Floor objects → Furniture (y-sorted with entities) → Entities (y-sorted with furniture) → Overhead (semi-transparent) → Fog of perception → Insert overlay → UI. Walls: Option B (visible face) for structural, Option A (boundary) for partitions — implementation detail pending shallow-tilt evaluation. Sprite stacking out of scope.
- Rationale: Creates two player-facing feelings: "I can see the layout" (baseline) and "things can block my view" (gameplay feature). Every occluding object is an information barrier.
- Domain: architecture.md (rendering) or perception.md (visual hierarchy)
- Raised by: Araminta (8-layer spec), Ozzie (player experience rules), Gore (overhead as thematic tool)
D-019 Amendment: Camera Angle — "The Angle"
- Amendment: D-019 currently states "Top-down confirmed." Amend to: "~15-20 degrees from vertical, rendered in sprite art, orthographic camera. Sprites are drawn as if viewed from a shallow tilt (south-facing front faces visible on objects, entities, and walls), but the Godot camera is purely orthographic. The perspective is an art convention, not a camera setting. Tile grid remains square/orthogonal. Vision cone math remains pure 2D. This is referred to internally as 'the angle.'"
- Rationale: Matches Rimworld's approach exactly: orthographic camera, perspective faked in the art. Strictly better than pure top-down for entity readability, wall vocabulary, and object identification. Zero mechanical cost — the tilt exists only in how sprites are drawn. Production cost minimal.
- Raised by: Team Leader (Jeroen), endorsed unanimously, locked Round 3
Candidate D-049: Velen — Krenn System Primary World
- Decision: Velen is the canonical name for the Krenn System's primary habitable world. Temperate-maritime climate, ~0.9G, regular rain, morning/evening fog. Station Sova orbits Velen. Span gate connects Sova to a planetary freight depot on Velen's surface.
- Rationale: Grounds the weather system and gives the setting a first named planet.
- Domain: content.md (setting)
- Raised by: Miri, confirmed by project lead
Candidate D-050: "Settling Is Placement" — Design Principle
- Decision: Object density in a space correlates with how settled it is. Investigation reads placement as intention. The bar is full because someone made it home. Empty corridors are unsettled. This is a design principle, not a production note — the tile-based world is thematically load-bearing.
- Rationale: Grounds the base-building system in the game's thematic core. Every placed object is a decision; reading the world is reading decisions.
- Domain: scope.md (design principles)
- Raised by: Gore, endorsed unanimously
Candidate D-051: Character Favorite Colors — Object-Layer Identification
- Decision: Each NPC has a favorite color expressed through personal objects (bedding, cushions, mugs, personal items), NOT on entity sprites. Muted register: dusty blue, warm terracotta, faded olive — personal, not faction. Creates a secondary identification system: D-033 = relationship to player (entity layer), favorite color = person's identity in space (object layer). Investigation mechanic: recognizing whose stuff is where ("that's Kael's blue cushion in the cargo bay — what's his stuff doing here?").
- Constraint: Favorite color saturation must stay below D-033 entity color saturation to preserve visual hierarchy (entities > objects > structure). These are muted personal tones, not vivid signals.
- Rationale: Reinforces "settling is placement" (D-050). Both characters settle, both decorate — the detective is a person too. Personal objects in favorite colors make spaces readable as someone's even when they're absent. Complements D-033 on a separate information channel without conflicting.
- Production note: Godot 4 supports per-instance shader recoloring (color uniform on base sprite). One base object sprite + color uniform = all favorite color variants without duplicating sprites. Same technique applies to D-033 entity variants. Significant sprite count reduction. (Flagged for Tyre feasibility assessment.)
- Domain: perception.md (cross-ref: scope.md D-050)
- Raised by: Team Leader (Jeroen), endorsed unanimously (post-closing addendum)
8. Follow-Up Items
| Item | Status | Owner | Notes |
|---|---|---|---|
| Span gate visual language — IP check | Open | Araminta | Confirm span gate visuals don't drift toward Stargate. Miri flagged as follow-up, not a workshop gap. |
| Wall rendering implementation detail | Open | Tyre, Stig | Option A/B distinction may collapse under shallow tilt. Confirmed in principle, implementation pending. |
| Nano Banana style guide | Open | Araminta | Specs now exist (outline weights, palette per era, tile dimensions). Needs formal document. |
| Shadow direction convention | Open | Araminta | Needs revisiting for shallow tilt. Consistent direction derived from implied light source at tilt angle. |
| Overhead element projection rule | Open | Araminta | With tilt, overhead elements (pipes, ducts) project slightly forward visually. Need consistent rule for how far. |
| Cone geometry at tilt | Open | Tyre | Confirm vision cone projection is manageable in Godot at Rimworld's angle. Near-orthographic should be fine. |
| Player character stress sprite | Minor | Araminta | Proposed: character sprite shifts subtly under stress. Not contested, not formally endorsed. |
| In-engine tilt validation | Open | Tyre, Stig | #9's angle needs validation in Godot with actual tiles and Light2D before final lock. |
| Shader recoloring feasibility | Done | Tyre | D-033: Sprite2D.modulate (free, zero code). Favorite colors: mask shader + material duplication (~0.5-1ms at 100 objects). instance_uniform broken in 2D (GH #62943), worked around by material duplication. Both compose with y-sort, Light2D, fog. Build D-033 for v0.1.1, favorite colors for v0.1.2+. |
| Velen orbit logistics | Open | Miri | If Sova orbits Velen, freight access to surface needs intra-system wormhole or shuttle service. Flag for next worldbuilding session. |
| 3D render pipeline for 2D sprites | Resolved | Tyre, Araminta, Stig | See §10. 3D used only as offline render pipeline — runtime is pure 2D. SubViewport + Camera3D at "the angle" + DirectionalLight3D (neutral). Nano Banana textures UV-mapped onto 3D models, rendered from 4 cardinal directions. |
| Resolution chain | Resolved | Tyre, Araminta | 1024x1024 source (archive master) → 256x256 (working, outlines applied at 4-8px) → 64x64 (runtime). Bilinear interpolation both passes. |
| Pipeline test: Era 1 wall texture | In progress | Stig, Araminta | Nano Banana texture generated, QA'd (color PASS, flat lighting PASS, tileability PARTIAL — top/bottom seam, acceptable because tiling happens at 3D geometry level). Godot render scene built at client/tooling/sprite_renderer/. Render skill created at .claude/skills/sprite-gen/. Blocked on Godot texture import — needs editor opened once to import the PNG. |
| Camera angle: exact value | Locked | Lead | "The angle" = ~15-20° from vertical. Rimworld uses orthographic camera with tilt entirely in sprite art. Research confirms no camera projection — the 3D render pipeline Camera3D rotation of -72.5° (from horizontal) produces this. Midpoint of range, tunable by Araminta. |
9. Post-Workshop Technical Decisions
9.1 3D Render Pipeline for 2D Sprites
Decision: Use a 3D render setup in Godot as an offline pipeline for producing 2D sprites. Runtime rendering remains pure 2D (Light2D, CanvasLayer, TileMap).
The middle ground (Lead proposal): Instead of either (a) taming Nano Banana prompts to produce perspective-correct sprites, or (b) switching the game runtime to 3D, set up a dedicated 3D render scene that:
- Takes a Nano Banana-generated flat texture (no perspective, no baked lighting)
- UV-maps it onto a simple 3D model (BoxMesh for walls, CSGBox/CylinderMesh for objects)
- Renders from an orthographic camera at "the angle" (-72.5° from horizontal)
- Exports 2D sprites from 4 cardinal directions (north, east, south, west)
Why this works:
- Textures are easy to generate flat — Nano Banana excels at this
- 3D geometry provides mathematically correct perspective at "the angle"
- Camera rotation is a number, not an art convention to enforce per-prompt
- Every new object follows the same pipeline: model → texture → render → sprite
- Runtime stays pure 2D — no 3D engine cost, Light2D pipeline unchanged
Production cost: ~half day to build the pipeline (done), then minutes per new object type.
Tyre's assessment: At 15-20° tilt, the 3D case collapses for runtime (front face is only 17-22px, perspective distortion negligible). But for PRODUCTION, 3D geometry guarantees consistency across all objects. Best of both worlds.
9.2 Resolution Chain
| Stage | Resolution | Purpose |
|---|---|---|
| Source render | 1024x1024 | Archive master. Maximum detail from SubViewport. |
| Working | 256x256 | Outlines applied here (4-8px → 1-2px at runtime). Asset QA resolution. |
| Runtime | 64x64 | Final in-game sprite (= 1 visual tile per D-066). Must read through silhouette and color, not texture detail. |
- Interpolation: Bilinear for both downscale passes
- Outline application: At 256 working resolution. 4px outline at 256 = 1px at 64 runtime. Color: dark blue-grey
#333340. - Why not outline at 1024? An 8px outline at 1024 downscales to sub-pixel artifacts at 64. Applying at working resolution gives crisp, consistent weight at runtime.
9.3 Camera Angle Research
Research result: Rimworld uses an orthographic camera with the "tilt" entirely in how sprites are drawn. The camera itself looks straight down. The ~15-20° forward lean exists only in the art — objects are drawn as if viewed from slightly in front and above.
For our pipeline: The 3D render scene's Camera3D is set to orthographic projection with X rotation of -72.5° (90° - 17.5°, midpoint of the 15-20° range). This produces the exact same visual result as Rimworld's sprite art convention, but mathematically correct and consistent.
Locked value: -72.5° (tunable by Araminta). Named internally as "the angle."
9.4 Shader Recoloring Feasibility (Tyre Assessment)
D-033 entity colors: Sprite2D.modulate — free, zero shader code, works with y-sort, Light2D, fog, everything. Use for v0.1.1.
Favorite color object recoloring: Mask shader + material duplication per unique color.
shader_type canvas_item;
uniform vec4 accent_color : source_color = vec4(0.5, 0.5, 0.5, 1.0);
uniform sampler2D mask_tex : hint_default_white;
void fragment() {
vec4 sprite = texture(TEXTURE, UV);
float mask = texture(mask_tex, UV).r;
vec3 tinted = mix(sprite.rgb, accent_color.rgb * sprite.rgb, mask);
COLOR = vec4(tinted, sprite.a) * COLOR;
}
instance_uniform broken in Godot 4 2D (GH #62943). Workaround: material duplication. At 50-100 objects, ~0.5-1ms overhead — negligible. Build for v0.1.2+.
9.5 Pipeline Test Status
Era 1 institutional wall texture generated via Nano Banana. QA results:
| Criterion | Result |
|---|---|
| Color range (#6e7580–#7a7f85) | PASS — Mean #727980 |
| Flat lighting (no baked shadows) | PASS — Quadrant spread 3.1 |
| Neutral for Light2D tinting | PASS — Low saturation, low std dev |
| Tileability (3x3 no seams) | PARTIAL — Left/right seamless, top/bottom seam visible |
| 64x64 reads as "wall" | PASS — Color preserved, reads as surface |
Render pipeline tooling built by Stig at client/tooling/sprite_renderer/. CLI skill at .claude/skills/sprite-gen/. First test run blocked on Godot texture import (needs editor opened once to import the PNG into .godot/imported/).
Next step: Open Godot editor to trigger import, then run render pipeline.
10. Appendix: Round-by-Round Resolution Path (formerly §9)
Round 1
- Established fundamentals: readability first, clean 2D, bold silhouettes, lighting-driven
- 12 consensus points, 4 divergence points, 11 key insights
- 7 open questions identified
- Sources:
round1-araminta.md,round1-ozzie.md,round1-miri.md,round1-gore.md - Tracking:
round1-tracking.md
Round 2
- New input: tile-based base building confirmed
- All 5 open questions resolved unanimously
- Araminta and Ozzie moved to strict zero environmental shift (OQ-02)
- 13 confirmed art direction principles
- Planet name Velen proposed
- Sources:
round2-araminta.md,round2-ozzie.md,round2-miri.md,round2-gore.md - Tracking:
round2-tracking.md
Round 3
- Lead decisions confirmed: cone shape, Velen, overlay-not-world temperature, environmental neutrality
- Z-level rendering stack defined (8 layers)
- v0.1.1 sprite set scoped (~18-35 unique sprites)
- Camera angle shift to Rimworld shallow tilt — unanimously endorsed
- Image #8 and #9 reviewed (tile composition proof, emotional core)
- Sources:
round3-araminta.md,round3-ozzie.md,round3-miri.md,round3-gore.md
Closing
- All four confirm workshop captures their domain's concerns
- v0.1.1 priorities converge on warm/cool doorway transition
- Decision recording flags provided
- Visual identity statements provided
- Sources:
closing-araminta.md,closing-ozzie.md,closing-miri.md,closing-gore.md
Workshop complete. All contested items resolved through consensus across three rounds. The art direction is now specific enough for a style guide, a Nano Banana prompt template, and in-engine implementation. The strongest signal across the entire workshop: when readability, design, engine, pipeline, setting, and theme all point to the same style, that style is correct.
All files referenced above are in docs/workshops/art-direction-mood-board/.
Compiled by Qatux. Every claim is cited to its source document.