rimlike/docs/ui.md
megaproxy c5dadedab0 Bump MVP map to 80², lock world-view camera, resolve doc rot
Resolves the rimlike docs audit. Decisions made this session:

- Map: 40² → 80² for MVP slice; architecture sized to ~120² ceiling.
  Pawn count unchanged (3 start / 6 cap) — 'split-the-difference'
  sizing rather than frontier-feel scale.
- World-view camera (locked): pinch + drag-pan + double-tap-centre.
  Storyteller alerts include 'Go there' tap. No minimap, no
  follow-cam in MVP. New ui.md section captures this.
- Storyteller cooldowns: per-event AND per-category — both gates
  must pass. Resolves design.md/architecture.md disagreement.
- MAX_STACKS_PER_THOUGHT = 5 (was named-but-unset).
- Hauling no-destination fallback: drop after 3 retry passes,
  surface a passive 'No stockpile accepts X' alert.
- Container all-neighbors-blocked: hold then drop after ~5 sim s
  to avoid deadlock.
- Auto-roof big-room UX: emits room_too_large signal when BFS hits
  the ≤8-cell cap; UI surfaces a 'split with an interior wall'
  banner. Threshold + exact wording added to memory.md TODOs.

Doc rot cleaned in design.md and architecture.md: removed the stale
'8 work categories' intermediate sections (canonical 9-list lives
later in each file). Updated architecture.md perf claims for the new
map size.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 19:45:29 +01:00

32 KiB
Raw Permalink Blame History

rimlike — touch UI

Companion to memory.md. This file is the touch UI design: gestures, layout philosophy, screen mockups. Engine-side implementation lives in architecture.md; game mechanics in design.md.

UX philosophy (locked)

  • Bottom-sheet menus replace Rimworld's right-side panels. Thumbs reach the bottom of a phone screen.
  • Long-press = inspect / context menu (the right-click replacement).
  • Tap world = select tile / pawn / item.
  • Pawn list panel along one edge — tap a portrait to focus the camera and act on that pawn directly.
  • Build menu = bottom drawer with tabs (Furniture / Walls / Floors / Production / …); designation paint mode for placing.
  • Speed/pause controls fixed at top; large, finger-sized.
  • Default cadence is fast + auto-pause (see architecture.md Time / tick model). The UI should reflect this — no element should require careful fine-targeting at 1× speed.

Work priority UI

THE macro-management surface for this genre — Rimworld and Going Medieval players spend significant time here. Touch translation matters.

Three views, same backing data

View A — Matrix (default)

Spreadsheet pawn × work, horizontally scrollable, sticky pawn-name column. Cells show priority with colored background. Tap to cycle (4→3→2→1→Off→4); long-press for 5-chip direct picker. Swipe a column = bulk-set everyone to the same priority for that job. Each pawn row shows primary skill under name. Sort by name / total skill / single-job skill. Pinch to zoom.

┌──────────────────────────────────────────────────┐
│ Priorities       Sort: skill ▼   Auto    ⓘ      │
├──────────────────────────────────────────────────┤
│           │Cnstr│Mine │Cook │ Doc │Plant│Haul │  │
│ Bob 🔧8   │ 🟠2 │ 🔵4 │ 🔴1 │ 🟡3 │ 🟡3 │ 🔵4 │  │
│ Mira ⚕12  │ 🟡3 │ 🟡3 │ 🔵4 │ 🔴1 │ 🟠2 │ 🟡3 │  │
│ Tom ⛏9    │ 🔵4 │ 🔴1 │ 🟡3 │ 🔵4 │ 🟡3 │ 🟠2 │  │
└──────────────────────────────────────────────────┘

View B — Per-pawn (tap a pawn row)

Skills bars + full priority list as a vertical, finger-friendly list. Easy to plan one pawn's role.

┌──────────────────────────────────┐
│ ← Bob                             │
│   "Carpenter from Eastvale, 27"   │
├──────────────────────────────────┤
│ Skills                            │
│ Construction ████████░░  8/10     │
│ Cooking      ██████░░░░  6/10     │
│ Combat       ████░░░░░░  4/10     │
│ Medicine     ███░░░░░░░  3/10     │
│ Mining       ██░░░░░░░░  2/10     │
├──────────────────────────────────┤
│ Job priorities                    │
│ 🔴 Construction            [ 2 ] │
│ 🟠 Cooking                 [ 1 ] │
│ 🟡 Medicine                [ 3 ] │
│ 🟡 Plant                   [ 3 ] │
│ 🔵 Hauling                 [ 4 ] │
│ 🔵 Mining                  [ 4 ] │
│ ⚫ Doctor                [ Off ] │
│                                   │
│ [ Auto-assign from skills ]       │
└──────────────────────────────────┘

View C — Per-job (tap a column header)

Pawns sorted by skill in that job, descending. Surfaces "best cook is set to lowest" insights — genre-specific gold; saves players from a Rimworld trap.

┌──────────────────────────────────┐
│ ← Cooking                         │
├──────────────────────────────────┤
│ Mira  ⚕12  Cook ████████░░ 9│ 4 │
│ Bob   🔧8  Cook ██████░░░░ 6│ 1 │
│ Tom   ⛏9   Cook ███░░░░░░░ 3│ 3 │
│                                   │
│ ⚠ Mira is best but set to 4.     │
│ [ Promote Mira to 1 ]             │
└──────────────────────────────────┘

Smart defaults & QoL

  • New-pawn auto-assign: highest skill → 2, second skill → 3, others 3 / 4 / Off based on skill level. Player commits the "1" themselves.
  • Templates: save a configuration ("Cook role") and apply with one tap. Useful for new arrivals.
  • Bulk ops: long-press column header → "Disable for everyone" / "Reset"; long-press row → "Pause this pawn" (everything Off).
  • Contextual nudges in View C: "⚠ best cook is set to 4 — promote?" Cheap and high-value.
  • Schedule integration (different priorities for morning/night) — post-MVP.

Edge cases worth surfacing in UI

  • A pawn with Doctor=Off won't treat a bleeding colonist. Warn in View C: "no one is set to Doctor; emergencies will be ignored."
  • Forced jobs (Layer 5 of pawn AI) bypass priorities entirely — the grid is autonomous behavior only.
  • Low-skill assignments to risky jobs (Doctor with Medicine 0) → soft warning at chip-pick time, not a block.

Stockpile zone UI

For mechanics (categories, priorities, stack rules) see design.md; for data + hauling AI see architecture.md. This section is the screens.

Designation flow (creating a zone)

  1. Player taps Zones (top-level button, peer to Build).
  2. Bottom sheet shows existing zones list + + New Stockpile.
  3. Tap + → designation paint mode; finger-drag rectangles or freeform cells. (Rectangles for MVP unless freeform is requested.)
  4. Confirm tray slides up:
┌────────────────────────────────────────┐
│ New stockpile · 12 tiles                │
│ Filter: [✓ all 7 categories]            │
│ Priority: [ Normal ▼ ]                  │
│ Name: "Stockpile #3"                    │
│ [ Cancel ]            [ Create ]        │
└────────────────────────────────────────┘
  1. After creation, the zone is editable via tap-zone-tile.

Editing an existing zone

Tap any zone tile → bottom sheet:

┌────────────────────────────────────────┐
│ ← Kitchen Stockpile                     │
│   12 tiles · Priority: Preferred ▼      │
├────────────────────────────────────────┤
│ Accepts (4×4 chip grid)                 │
│ [✓🪵Wd] [✗🪨St] [✗⚙Ir]  [✗🟤Cu]         │
│ [✗⚪Ag] [✗🟡Au] [✗🧵Cl] [✓🥕Veg]         │
│ [✗🍖Mt] [✓🌾Gr] [✓🍞Ck] [✗💊Md]         │
│ [✗⚒Tl] [✗⚔Wp] [✗🛡Ar] [✗⚰Co]           │
├────────────────────────────────────────┤
│ Contains                                │
│  🌾 Wheat       ×18 (1 stack)           │
│  🥕 Carrot       ×8 (1 stack)           │
│  🍞 Bread        ×5 (1 stack)           │
│  Empty:         9 tiles                 │
├────────────────────────────────────────┤
│ [ Resize ] [ Delete ] [ Priority ]      │
└────────────────────────────────────────┘

Filter grid (16 chips, 4×4): tap any chip to toggle. Top-row long-press → "category-only mode" (toggle off everything except the row's column).

Priority picker (5-chip): tap the priority dropdown → row of 5 chips (Critical / Important / Preferred / Normal / Low) with color coding (🔴🟠🟡🔵).

Container inspect screen

Tap any Crate entity in the world → bottom sheet:

┌────────────────────────────────────────┐
│ ← Crate                                 │
│   2/4 stacks · Priority: Normal ▼       │
├────────────────────────────────────────┤
│ Accepts (same 4×4 chip grid)            │
│ [✓🪵Wd] [✗🪨St] [✗⚙Ir]  [✗🟤Cu]         │
│ [✗⚪Ag] [✗🟡Au] [✗🧵Cl] [✓🥕Veg]         │
│ [✗🍖Mt] [✗🌾Gr] [✗🍞Ck] [✗💊Md]         │
│ [✗⚒Tl] [✗⚔Wp] [✗🛡Ar] [✗⚰Co]           │
├────────────────────────────────────────┤
│ Contains                                │
│  🪵 Wood log    ×42 (1 stack)           │
│  🥕 Carrot      ×18 (1 stack)           │
│  Empty: 2 stack slots                   │
├────────────────────────────────────────┤
│ [ Empty ] [ Demolish ]                  │
└────────────────────────────────────────┘

Same filter and priority controls as zones — players can transfer mental model. "Empty" drops contents as loose items at neighbor cells; "Demolish" deconstructs (partial material refund).

Zone overlay rendering

Zones are a transparent colored overlay rendered only when the Zones panel is open. Color-coded by priority:

  • 🔴 Critical — strong red tint
  • 🟠 Important — warm orange
  • 🟡 Preferred — amber
  • Normal — neutral / faint
  • 🔵 Low — cool blue

Outside the Zones panel, the world view shows item stacks and crate sprites but not zone boundaries (less visual clutter).

Smart defaults & nudges

  • New zone defaults: filter on for everything, priority Normal.
  • "Suggest filter from contents" — if 80% of items in a zone match one category, suggest enabling only that.
  • Auto-categorize hint on first drop — when a pawn drops the first wood log into a new zone, prompt: "Make this a Wood-only stockpile?"
  • Items-not-being-hauled warning — if items sit outside any zone for > 2 in-game days, show a soft alert: "Lots of wood waiting outside — make a stockpile?"

Forbid / allow

Long-press an item in the world → context menu → "Forbid hauling" / "Allow hauling." Forbidden items get a red 🚫 badge. Hauling pawns ignore them.

Per-tile inspection

Tap a non-zone tile holding an item → inspect tray ("3× Wood log · Loose · Will be hauled by next idle pawn"). Tap a zone tile → zone editing tray (above) plus "tile contents."

Edge cases worth surfacing in UI

  • Zone overlap — paint mode shows red overlay where cells already belong to another zone; can't confirm until resolved.
  • No accepting zone — if an item's category isn't accepted anywhere, surface a soft warning ("Cooked meals piling up — no kitchen stockpile yet").
  • Full zone — the Contains list shows "Full · X tiles" so the player notices.

Mood, lighting, rooms, beauty, quality, cleaning — UX

Most of these surfaces are passive (visualization in-world). For mechanics see design.md; algorithms in architecture.md.

Mood visualization

  • Pawn portrait in the pawn list shows a small mood-band emoji: 🙂 Content / 😐 Stressed / 😟 Breaking. Tap → pawn detail.
  • Pawn detail screen shows the mood bar (0100) with color zones, plus a list of active thoughts:
    Mood:  ████████░░░░░░░░ 38/100  [Stressed]
    Thoughts:
      +5  Slept well, indoors          (next sleep)
      +3  Beautiful room                (persistent)
      5  Hungry                        (persistent)
      3  Saw corpse ×2                 (decays 7h)
      10 Witnessed death               (decays 38h)
    
  • Soft break alert — when a pawn enters a break, a top-screen alert: "Bob is sulking. Address his needs." Camera pans to him on tap.

Lighting visualization

At night, world renders with a darkness shader. Lit tiles inside torch/hearth/candle radii brighten back toward normal color. Player physically sees safe lit zones vs scary dark. Daytime renders normally regardless of lighting.

Light sources are visible as glowing tile sprites. Hearth has flicker animation.

Room labels

When the Rooms panel is opened (a top-level toggle), each detected room gets a floating label:

            ╔═══════════╗
            ║ Bedroom   ║
            ║ Bob       ║
            ║ Beauty: 4 ║
            ╚═══════════╝
                Beautiful

Labels show: inferred type, owner(s) if any, beauty score, dirtiness if > 30. Outside the Rooms panel: labels hidden, just the indoor tint.

Beauty indicator on rooms

In the Rooms panel, room overlay tints by beauty: green-tint for Beautiful, neutral for Plain, brown-tint for Ugly. Player reads the colony quality at a glance.

Quality color-coding

Item names everywhere display with quality color:

Wooden chair                     (Normal — white)
Excellent wooden chair           (green)
Masterwork iron sword            (blue)
Legendary oak throne             (purple)

Quality icon prepended to item name in stockpile lists, pawn equipment, container contents.

Dirtiness visualization

Dirty tiles render with a subtle brown overlay tint (dirtier = darker). Blood spots, spilled food show as decals on top of the floor. Cleaning Job in progress: a small "sweeping" animation on the pawn.

Cleaning in the work-priority matrix

Cleaning becomes column 8 in the priority matrix (and the per-pawn / per-job views). Otherwise no UI change — slots into the existing system.

Workbench bill queue UI

For mechanics and bill modes, see design.md; for data structures see architecture.md. This section is screens.

Workbench inspect

Tap any workbench → bottom sheet:

┌──────────────────────────────────────┐
│ ← Smithy                              │
│   Bob is working · 2/3 active         │
├──────────────────────────────────────┤
│ Bills (drag to reorder)               │
│  1. ▶ Iron sword × 3                  │
│  2.   Iron axe — until 5 in storage   │
│  3.   Iron helmet × 1     ⏸ paused    │
│  4.   Masterwork sword (skill ≥ 8)    │
│                                       │
│ [ + Add Bill ]                        │
├──────────────────────────────────────┤
│ Output drop: → 1 tile                 │
│ [ Demolish ]                          │
└──────────────────────────────────────┘

Each row shows: recipe name, mode (count / until-N / forever), ingredient or skill filters if set, paused state. Long-press a bill → Edit / Pause / Remove. Drag reorder (top = highest priority).

Add Bill flow

  1. Tap + Add Bill → recipe picker (categorized: Tools / Weapons / Armor / Furniture / Food / etc.).
  2. Tap a recipe → bill config:
┌──────────────────────────────────────┐
│ ← Add Bill: Iron Sword                │
│ Inputs: 4 Iron ingot, 1 Wood          │
│ Skill: Crafting                       │
├──────────────────────────────────────┤
│ Mode:                                 │
│  ◯ Do count: [    1   ]               │
│  ◯ Forever                            │
│  ◉ Until in storage: [    5   ]       │
├──────────────────────────────────────┤
│ Filters (optional):                   │
│  Ingredient quality min: [ Normal ▼ ] │
│  Pawn skill min:         [    0   ]   │
├──────────────────────────────────────┤
│ [ Cancel ]              [ Add ]       │
└──────────────────────────────────────┘
  1. Tap Add → bill enters the queue at the bottom; drag to reorder.

Active-bill indicator

A workbench in the world view shows a small icon when bills are active and a pawn is or could be working it (a hammer for Smithy, a cooking pot for hearth, etc.). Smoke / sparks particle when actively in use.

Recipe picker organization

Recipes live in categorized lists: by output category, then by required skill threshold. A Masterwork-attempting bill (skill ≥ 8) shows a faint star icon — visual signal of "this is power-user content."

Crafting in the work-priority matrix

Crafting is column 5 (between Cleaning and Cooking) in the priority matrix — 9 columns total. Same tap-to-cycle and long-press picker as the others.

Combat UX

For mechanics, weapons, armor, and AI, see design.md. This section is screens + visualization.

Auto-pause on threat

When a wolf is detected approaching the colony, time auto-pauses and a banner appears:

⚠ Threat: Wolves approaching from the east (3 of them)
[ Continue ]    [ Pause ]

Camera pans to show the threat. Player adjusts orders, then resumes.

Forced commands

Tap a pawn → bottom sheet → action menu:

┌──────────────────────────────────┐
│ ← Bob (Combat 7, Sword)           │
├──────────────────────────────────┤
│ • Move here          [tap world]  │
│ • Attack target      [tap enemy]  │
│ • Carry to bed       [tap downed] │
│ • Drop weapon                     │
│ • Pause work (sit)                │
└──────────────────────────────────┘

Forced jobs run at Layer 5 (player override) of the AI. Combat=Off pawns refuse Attack target.

Equipment in pawn detail

Pawn detail screen adds an Equipment panel:

┌──────────────────────────────────┐
│ Equipment                         │
│ Weapon:  ⚔ Iron sword (Excellent) │
│ Helmet:  🪖 Iron helm (Normal)    │
│ Cuirass: 🛡 Iron cuirass (Excel.) │
│ Boots:   👢 Iron boots (Shoddy)   │
│                                   │
│ Total armor: 14   Total dmg: 10   │
└──────────────────────────────────┘

Tap a slot → swap from inventory; long-press item → "Lock to Bob" (override auto-equip).

Combat readability — visual cues

  • Pawn currently engaged in combat: red outline pulse
  • Hit on target: damage number floats up briefly
  • Miss: small "miss" puff
  • Bleeding pawn: red drip particle
  • Downed pawn: lying-down sprite, red "!" icon above

Downed alerts

When a pawn enters Downed status, top-screen alert (auto-pause):

⚠ Mira is down. Bleeding out in 6 hours.
[ Continue ]

Camera pans. The Doctor priority system kicks in automatically; player can manually issue Carry-to-bed via forced command if they want a specific bed.

Cover indicator

When a pawn is selected and threats exist, tiles providing cover near the pawn light up briefly. Helps the player position pawns tactically without reading wiki pages.

Death, burial, ghost state UX

Pawn death event

When a pawn dies, top-screen modal alert (auto-pause):

┌────────────────────────────────────┐
│ ✟ Bob the Carpenter has died.       │
│   Killed by wolf, day 27 of Spring  │
│                                     │
│   The colony mourns.                │
│   [ Continue ]  [ View record ]     │
└────────────────────────────────────┘

"View record" opens the pawn-detail screen for the deceased.

Pawn-detail for deceased

Same screen as living pawns, with a black band at the top reading "Deceased — Day X." Skills shown as final values; equipment as final equipped items; cause of death prominent.

Accessed from: tap a corpse, tap a grave marker, alert "View record" link, or via a colony memorial list (post-MVP feature).

Graveyard zone

Designate via Zones → New Stockpile → enable only the Corpses chip. The zone is automatically labeled "Graveyard" if it contains only corpses or grave markers. Beauty calculation includes graves' +1 each.

Cremation pyre — bill queue

Tap the pyre → bill-queue screen (same UI as other workbenches):

┌─────────────────────────────────────┐
│ ← Pyre                               │
│   No active worker                   │
├─────────────────────────────────────┤
│ Bills                                │
│  1. Cremate corpse — Forever         │
│                                      │
│ [ + Add Bill ]                       │
└─────────────────────────────────────┘

Default bill (suggested on placement): "Cremate corpse — Forever." Player can pause if they want to leave a body for burial instead.

Rotting visual

Corpses tint progressively green-grey as decay_severity rises. Once Rotting (≥50), a small fly-cluster particle. Once fully Rotted (100), the corpse sprite is solidly grey-green.

Ghost state UI

When the colony enters Ghost state:

┌────────────────────────────────────┐
│ 🕯 Your colony has fallen silent.   │
│   Watch for travelers.              │
└────────────────────────────────────┘

Persistent banner at top of screen until the next wanderer event resolves. Game continues at half-speed; player can pan/inspect the abandoned base. Works as both a real-time soft-stop and an evocative narrative moment.

Wanderer event

Modal (auto-pause):

┌────────────────────────────────────┐
│ A traveler appears                   │
│                                      │
│ Mira wandered to your settlement.   │
│ She is tired and looking for         │
│ shelter.                             │
│                                      │
│ Skills: Crafting 7, Cooking 4,       │
│         Manual Labor 3               │
│                                      │
│ [ Welcome ]  [ Send away ]          │
└────────────────────────────────────┘

Storyteller events UX

For corpus and mechanism see design.md; for tech see architecture.md. This section is screens.

Ambient banner (nudges, seasonal, resource, lore)

Top of screen, slides in from above, persists for 5 seconds or until tapped:

┌──────────────────────────────────────────┐
│ 🌾 Spring Awakens                         │
│   The thaw runs in every stream.         │
│   Crops will grow fast now.              │
└──────────────────────────────────────────┘

Stacks if multiple fire close together (rare). Tappable → dismiss; long-press → "see history."

Modal event (wanderer, threat, disease, milestone, choice)

Auto-pauses the sim. Centered modal:

┌────────────────────────────────────────┐
│ 🚶 A Traveler                           │
├────────────────────────────────────────┤
│ A weary traveler stumbles toward your   │
│ gate. They look hungry.                  │
│                                          │
│ Mira — Cooking 5, Manual Labor 3        │
│                                          │
│ [ Welcome ]      [ Send away ]          │
└────────────────────────────────────────┘

Title icon by category (🚶 wanderer, 🐺 threat, 🤒 disease, ✟ death, milestone, 🌾 seasonal). Choices below body. Resume sim only when player picks.

Threat events with delayed spawn

Some threats announce, then spawn later (e.g. "Wolves arriving at nightfall"). Player gets a banner and a marker on the map edge showing where they'll arrive:

On map edge:  ⚠ ←  (orange marker, pulsing)

Event history

Top-bar icon (📜 scroll) opens an events log:

┌─────────────────────────────────────┐
│ ← Events history                     │
├─────────────────────────────────────┤
│ Day 28  ⭐ One Year Survived          │
│ Day 26  🐺 Pack Hunt (3 wolves)      │
│ Day 25  🚶 The Old Soldier (welcome) │
│ Day 24  🌾 Bountiful Harvest         │
│ Day 22  🤒 Fever (Bob)               │
│ Day 18  🌾 Autumn's Harvest           │
└─────────────────────────────────────┘

Tap any entry → re-show that event's text. Useful as "what happened while I was at work?" recap.

"While you were away" digest

When the player resumes after closing the app, a brief digest summarizes events that fired since last session. (Sim is paused while app is closed, but day-rolls happen on resume up to a max of N days to prevent accumulating events.)

┌────────────────────────────────────────┐
│ Welcome back                            │
│   While you were away (12 hrs):          │
│    • Day 22 — Fever broke out (Bob)     │
│    • Day 23 — Spring Awakens            │
│   2 events handled automatically.       │
│   [ Continue ]                          │
└────────────────────────────────────────┘

For events with player choices that fired during the away period: those auto-default to the safe option (e.g. wanderers default to Send Away — the player can still recruit later events). Surface clearly: "1 wanderer was sent away."

Roofing, weather, indoor cues

Most of this is rendering, not screens. For mechanics see design.md; for data/algorithms architecture.md.

Indoor tint

Indoor tiles render with a subtle blue-grey overlay on the floor layer. Outdoor tiles unchanged. Players read indoor/outdoor at a glance; no toggle needed.

Roofs are invisible in MVP

We don't render roof tiles. Floors and pawns render normally even "under" the roof. Genre convention; matches Rimworld.

No-Roof designation

New designation type alongside Build / Mine / Chop / Stockpile.

  1. Player taps Designate → No Roof (in the bottom-sheet).
  2. Paint cells inside an enclosure to forbid auto-roofing.
  3. Cells show a dashed outline + open-sky icon.
  4. EnclosureDetector skips these cells when assigning Roof.

Useful for courtyards, gardens, fire pits.

Weather rendering

  • Clear — default sky.
  • Rain — falling-particle overlay, 30%-darken sky tint, gentle ambient sound loop.
  • Storm — heavier particles, deeper darken, occasional flash, louder rain.
  • Cold snap — pale-blue sky tint, breath puffs from outdoor pawns (cheap particle), no rain.

A small weather indicator in the top bar shows the current state with a tappable tooltip ("Rain · Outdoor pawns will get wet").

Season indicator

Top bar also shows season + day-of-season ("Spring 4/12"). Tap → seasonal forecast tooltip ("Winter starts in 8 days").

Pawn wet visual

Wet pawns have a subtle drip particle + slight sprite tint until they dry off. Players can quickly spot "Bob is soaked, why?" without opening the pawn detail screen.

World view camera (locked)

The camera/navigation model on the main world view, decided 2026-05-10 alongside the bump from a 40² to an 80² map.

  • Pinch-zoom: between a "strategic" zoom (whole-map-ish on tablet, ~1/4 of the map on phone) and a "close" zoom (~16 tiles wide on phone, sprite-readable). No fixed zoom levels — smooth.
  • Drag-pan: one-finger drag on empty world tiles. Drag on a pawn = select-and-drag-issue-order (long-press-then-drag for multi-select rectangle).
  • Double-tap to centre: double-tap on a pawn portrait, alert banner, or the world centres the camera there with a brief animated pan.
  • No follow-camera: selecting a pawn does not lock the view to them. Selection persists across pans so the player can scroll to a build site and issue an order without losing their pawn.
  • Jump-to-alert: every storyteller alert / banner / event modal includes a Go there tap that pans-and-centres the camera on the relevant tile (raid spawn, downed pawn, fire, etc.). Replaces the "where is this happening?" minimap need.
  • No minimap in MVP. Reasoning: phone screen real estate is precious, and Jump-to-alert + double-tap-on-portrait covers the navigation needs at 80². Revisit if playtest shows people getting lost.
  • Speed / pause buttons stay fixed at the top regardless of camera state.

Layered on the world view: select (tap empty pawn), inspect (long-press anything), build mode (bottom-sheet → paint), designation paint (bottom-sheet → designate type → paint).

Screens still to design

These are open work for future sessions. Listed roughly in importance.

  • Build drawer — bottom-sheet tabs (Walls / Floors / Furniture / Production / Designate). Designation paint mode. Material-pick UI when a build can use multiple materials.
  • Alerts / storyteller event — modal vs. ambient, dismissal, history of past prompts.
  • Day-summary / end-of-day — a recap card showing what changed today; gives short sessions a stopping point.
  • Pawn detail — beyond priorities: needs bars, status effects, current job, equipment, mood thoughts. Tap-pawn-portrait → this screen.
  • Onboarding / first 60 seconds — mobile-specific. New player bounces if not productive in a minute. Open question, see memory.md.
  • Settings — speeds, auto-pause toggles, audio, accessibility.

What lives elsewhere

  • Pawn AI / job system / how priorities map to behavior — see architecture.md.
  • Game mechanics / skills / statuses — see design.md.
  • Tilesets and art — see art.md.
  • Pillars and vertical slice — see memory.md.