# Starfall Haven — Vertical-Slice Game & Mobile UX Specification

**Product:** 2D Android colony survival · **Package:** `space.animefu.starfallhaven`  
**Target slice:** one deterministic 10-minute scenario · **Orientation:** landscape 16:9  
**Design pillars:** bonded people, readable crises, meaningful touch decisions, hopeful salvage.

## 1. Original premise and hook

The generation ark **Haven** falls into the aurora sea of Veyra, where thought-sensitive crystal storms rewrite matter. Three survivors shelter around a broken harmonic core. They do not merely tolerate each other: shared work, danger, and care create **Resonance Bonds**, visible emotional frequencies that can synchronize people—or produce dangerous dissonance.

### Resonance Bonds

Every survivor pair has a directed bond score from **-100 to +100** and one current chord:

| Score | Chord | Gameplay |
|---:|---|---|
| -100…-31 | Dissonant | -15% adjacent work speed; 20% chance to refuse a noncritical assist |
| -30…29 | Unattuned | no modifier |
| 30…69 | Harmonized | +10% adjacent work speed; can perform a free once/day **Assist** |
| 70…100 | Constellated | +20% adjacent work speed; unlocks duo ability and shared stress recovery |

Bond events are authored, legible, and deterministic in the slice: shared meal **+4**, working adjacent for 20 s **+2** (60 s cooldown), healing **+12**, rescue from downed **+18**, ignored critical need **-8**, friendly-fire **-20**. A bond change creates a colored thread between portraits and an icon plus signed number; no hidden social dice.

**Signature decision:** during the final storm, synchronize two Harmonized survivors. Their jobs pause for a 1.2 s channel, then they project **Haven Chord**, a shield that absorbs 40 storm damage for 8 s. Choosing who bonds, and whether to interrupt production, is the slice’s emotional/tactical climax.

**Originality boundary:** direct tactical control, work priorities, procedural incidents, and other broad colony-simulation conventions are allowed, but Starfall Haven must not copy another game's terminology, code, UI composition, authored events, balance, lore, characters, factions, artwork, or trade dress. Its defining systems remain explicit Resonance cooperation, aurora ecology, regional frontier diplomacy, and touch-first area designation.

## 2. Ten-minute vertical-slice loop

**Win:** survive the flare and stabilize the Harmonic Core by 10:00.  
**Loss:** all survivors downed, Core HP reaches 0, or stability remains below 100% at 10:00.  
**Determinism:** same map, survivors, deposits, and event timestamps for QA.

| Time | Beat | Player action / proof of system |
|---|---|---|
| 0:00–0:45 | Crash & onboarding | Pan/zoom, inspect survivors, gather 12 Scrap |
| 0:45–2:00 | First shelter | Place Fabricator foundation; assign Nia to Build |
| 2:00–3:15 | Sustain | Harvest 8 Lumen; fabricate 3 Rations; pin low Hunger need |
| 3:15–4:20 | First bond | Assign Ivo beside Nia; adjacent work creates Harmonized threshold via scripted +28 memory |
| 4:20–5:20 | Pressure | Sporelings attack; drag-select two defenders, focus target, treat wound |
| 5:20–6:45 | Recovery | Build Med Cot and Prism Pylon; heal to trigger bond gain |
| 6:45–8:00 | Expansion | Mine 10 Prism, repair Core to 60%; optional Relay improves hauling |
| 8:00–9:00 | Warning | Flare telegraph; stock 5 Charge, move survivor into shelter, choose bond pair |
| 9:00–9:40 | Finale | Storm pulses + Wisp assault; invoke Haven Chord and defend Pylon/Core |
| 9:40–10:00 | Resolve | Spend remaining Prism; Core reaches 100%; results grade and replay |

**Minute-to-minute loop:** read alert → select person/object → assign contextual job or place blueprint → watch path/work feedback → collect output → answer need/threat → strengthen bond → invest in Core.

## 3. Simulation specification

### Entities

| ID | Entity | Slice values / role |
|---|---|---|
| `survivor_nia` | Nia, engineer | 100 HP; Build 1.25×, Repair 1.3×; active **Overclock**: +40% building speed 8 s, +15 Stress |
| `survivor_ivo` | Ivo, scout | 90 HP; Move 1.15×, Ranged 1.2×; active **Mark**: target takes +25% damage 6 s |
| `survivor_suri` | Suri, medic | 95 HP; Heal 1.5×, Harvest 1.1×; active **Calm Pulse**: -20 Stress in radius |
| `enemy_sporeling` | melee fauna | 35 HP, 5 damage/1.2 s, speed 1.05 tiles/s |
| `enemy_wisp` | ranged storm echo | 24 HP, 4 damage/1.5 s, range 4 tiles |
| `node_scrap` | wreck deposit | 30 Scrap, 2 HP mined per work tick |
| `node_lumen` | luminous reed | 24 Lumen, renewable only beyond slice |
| `node_prism` | resonance crystal | 20 Prism, releases harmless 0.3 s flash on hit |
| `harmonic_core` | objective | 120 HP; starts 0 stability; repair stages at 30/60/100% |

Grid is 32×18 logical tiles; actors occupy one tile, buildings 1×1 to 3×2. Simulation tick is 0.2 s; UI may render independently. Pathing uses 4-way movement with diagonal animation allowed only as visual interpolation.

### Resources

| Resource | Start | Sources | Uses |
|---|---:|---|---|
| Scrap | 6 | wreck nodes, enemies (+1) | structures, weapon maintenance |
| Lumen | 2 | reeds | Rations, Charge |
| Prism | 0 | crystal nodes | Pylon, Core stability |
| Rations | 2 | Fabricator: 2 Lumen → 1 | restores 35 Hunger |
| Charge | 0 | Fabricator: 1 Lumen + 1 Prism → 1 | powered buildings, Haven Chord costs 2 |

Inventory is shared and globally available after hauling to any stockpile. Ground stacks cap at 20. Resource counters show **available / reserved** on long-press.

### Buildings

| ID | Footprint | Cost | Build work | HP | Function |
|---|---:|---:|---:|---:|---|
| `stockpile` | painted tiles | free | 1 s/tile | — | accepts hauled resources |
| `fabricator` | 2×2 | 10 Scrap | 18 s | 100 | recipes for Rations/Charge |
| `shelter` | 3×2 | 8 Scrap | 15 s | 120 | beds 3; blocks storm pulse |
| `med_cot` | 2×1 | 6 Scrap | 10 s | 70 | healing 3 HP/s, consumes no item in slice |
| `prism_pylon` | 1×1 | 6 Scrap + 4 Prism | 16 s | 80 | radius-4 storm shield; drains 1 Charge/20 s during flare |
| `relay_beacon` | 1×1 | 5 Scrap + 2 Prism | 12 s | 60 | +20% haul speed in radius 5 |
| `core_repair` | 3×3 existing | 5/5/10 Prism | 12/12/18 s | 120 | 30/60/100% stage repairs |

Placement preview is green if walkable and affordable, amber if resources will become available (blueprint allowed), red if blocked/out of bounds. Maintain one-tile access to interaction ports.

### Jobs and priority

Jobs: **Haul, Harvest, Mine, Build, Craft, Repair, Heal, Defend, Eat, Sleep**. Each survivor has priority 0–3; 0 disables. Default order for equal priority: emergency Heal/Defend → critical self-need → explicit player order → nearest queued job → idle. Explicit orders persist until completed, invalid for 2 s, or canceled. Players can override but not disable emergency self-preservation below 10 HP.

Job state machine: `queued → reserving → moving → working → complete|blocked|cancelled`. Reserved target/resources cannot be double-claimed. Blocked jobs display reason and retry every 2 s, maximum three times before returning to queue.

### Needs

0 is critical, 100 full except Stress (0 calm, 100 critical). Update at simulation speed.

| Need | Start | Rate | Threshold effects |
|---|---:|---:|---|
| Hunger | 70 | -0.10/s | <30: -10% work; <10: seeks food, -20% move |
| Rest | 75 | -0.07/s | <25: -15% accuracy/work; sleep +1.2/s |
| Safety | 65 | situational | enemy/storm reduces; <20 adds +0.25 Stress/s |
| Belonging | 50 | -0.025/s | +8 shared meal, +5 bond event; <20 +10 max Stress floor |
| Stress | 15 | +damage/alerts; -0.08/s safe | >60: -10% work; >90: 4 s freeze, once per 60 s |

No random mental breaks in the slice. Need thresholds explain consequences in one sentence.

### Combat and downing

Tap enemy then **Attack**, or select survivors and tap enemy to focus. Auto-defend triggers when attacked or enemy enters range 3. Improvised pulse pistols: 8 damage, 0.9 s cooldown, range 5, 80% base accuracy; melee strike: 6 damage/1.0 s. Cover objects give -25 percentage points to incoming accuracy and show a shield pip.

At 0 HP, survivor is **Downed** for 30 s, then lost if untreated; no gore. Rescue hauls to Med Cot. First aid stabilizes timer and restores 10 HP over 5 s. Enemy intent line appears 0.6 s before attack. Hit stop is 50 ms; screen shake is optional and capped at 3 px.

### Progression beyond slice

Campaign cadence: land in a biome → stabilize a Haven node → recruit and form constellations → choose one of three signal routes. Persistent unlocks are **Harmonic Schematics** (new spatial/cooperative tools), not raw stat inflation. Five tech families: Shelter, Biofabrication, Prismics, Navigation, Chorus. Bonds unlock pair-specific duo maneuvers; each pair chooses one of two at Constellated, preventing a universal optimal roster.

## 4. Mobile touch controls

Designed for two thumbs; minimum hit target **48 dp**, primary targets **56 dp**, edge inset ≥16 dp. World interactions tolerate 12 dp movement before becoming a drag.

| Gesture | Context | Result / feedback |
|---|---|---|
| Tap | actor/object | select; outline + info card; second tap centers |
| Tap empty | world | clear selection (unless placement mode) |
| One-finger drag | empty world | pan; inertia ≤180 ms |
| Pinch | world | zoom 0.75×–2.25×; centered between fingers |
| Long-press 350 ms | world | radial context menu; haptic tick; slide/release chooses |
| Drag from survivor | world | selection lasso; selected portraits gain cyan ring |
| Tap action chip | selection card | queue contextual job/ability |
| Drag blueprint | build mode | place ghost; release confirms if valid |
| Two-finger tap | world | pause/resume (also visible button) |
| Back | mode/UI | close sheet → cancel placement → pause menu; never exits directly |

No essential gesture is undiscoverable: every gesture has a button alternative. Camera never pans while a bottom sheet is being scrolled. Paused build/inspect interactions remain available. Selected units use local path chevrons and destinations; invalid commands provide red pulse, soft error haptic, and reason toast.

## 5. HUD and 16:9 layout

Reference canvas **1920×1080** (scale by dp and safe area); world remains visible under all nonmodal panels.

- **Top bar (x 24–1896, y 18–94):** left: pause/speed `1×/2×`; center: objective + timer; right: five resource chips and overflow. Height 76.
- **Left survivor rail (x 24–168, y 116–900):** three 128×92 portrait cards; HP ring, need warning, job icon, bond thread anchor. Collapses to 64 px at widths <720 dp.
- **Right alert rail (x 1712–1896, y 116–660):** max four 160×64 alerts, severity color + icon + countdown; newest on top; tap centers source.
- **Bottom action dock (x 216–1704, y 906–1056):** selection summary at left; five 112×72 contextual chips centered; Build, Jobs, Bonds persistent at right.
- **World tooltip:** anchored above target, clamped clear of rails; never obscures pressed point.
- **Bottom sheet:** 38% screen height default, 72% expanded; drag handle and explicit close. Jobs/build catalog use 2-row horizontal cards.
- **Modal:** only pause/settings and results; 70% dark scrim; game automatically pauses.

### Visual language and accessibility

Palette tokens: midnight `#10182B`, panel `#1B2942E8`, text `#F4F7FF`, muted `#AAB8D1`, cyan action `#58D7E8`, gold bond `#FFD166`, green valid `#62D394`, coral danger `#FF6B6B`, violet prism `#A98BFF`. State is never color-only: pair color with icon, shape, label, and optional pattern. Use bundled rounded sans; body ≥16 sp, HUD labels ≥14 sp, numerals tabular. Support 1.0/1.15/1.3 text scale without overlap, reduced shake/flashes, haptics toggle, colorblind-safe threat outlines, and left-handed rail swap.

## 6. Tutorial beats

Tutorial prompts are compact coach marks, pause only for the first input of a concept, and can be skipped/replayed.

1. **Look around (0:05):** spotlight empty world; “Drag to move. Pinch to zoom.” Complete after both gestures or button alternatives.
2. **Select Nia (0:20):** pulse portrait and actor; complete on either tap target.
3. **Gather (0:35):** point to wreck, then Harvest action. Show queued path.
4. **Build (0:55):** open Build, choose Fabricator, rotate optional, place valid ghost.
5. **Make food (2:00):** low-Hunger preview; queue Rations; explain reserved cost.
6. **Work together (3:15):** assign Ivo adjacent; freeze 0.6 s on first bond thread; define Harmonized bonus.
7. **Defend (4:20):** threat alert, multi-select, focus enemy. Does not pause after selection.
8. **Care (5:15):** tap injured Nia, assign Suri Heal; bond gain callout.
9. **Prepare (8:00):** highlight flare countdown and Pylon radius; player chooses placement.
10. **Synchronize (9:05):** Bonds button glows; select eligible pair and target Core; activate Haven Chord.
11. **Results (10:00):** grade breakdown: survival, stability, bonds, waste; Replay/Continue disabled label “Campaign in full game.”

After 5 s inactivity on a required beat, animate the target; after 12 s, show one-line exact instruction. Prompts never cover their targets.

## 7. Animation and VFX list

All gameplay animations remain readable at 2× speed. Character sprites use 32×32 source pixels, nearest-neighbor scaling, 8 directions represented by 4 directions plus horizontal flip where safe.

| Clip/VFX | Frames / timing | Notes |
|---|---|---|
| Survivor idle | 4 @ 180 ms | breathing, role accent glint |
| Walk | 6 @ 90 ms | 4 directions; footstep on frames 2/5 |
| Work: build/mine/harvest | 6 @ 100 ms | tool-specific overlay, contact spark |
| Craft/repair | 6 @ 110 ms | hands + console light |
| Eat | 5 @ 140 ms | loop twice |
| Sleep | 2 @ 500 ms | subtle; floating glyph separate |
| Shoot | 4 @ 70 ms | anticipation, muzzle bloom; no camera recoil |
| Melee | 5 @ 65 ms | clear wind-up and recovery |
| Hurt/down/revive | 3/5/6 @ 90–140 ms | flash ≤80 ms; no full-screen white |
| Sporeling idle/move/attack/death | 4/6/5/6 | dissolves into motes, no gore |
| Wisp hover/attack/death | 6/6/7 | sine hover; beam telegraph 0.6 s |
| Building construct | 4 stages | hologram → frame → panels → online |
| Core stages | 4 states | dark, 30%, 60%, stable; increasing orbitals |
| Selection | 0.6 s loop | segmented ground ring, faction icon |
| Job progress | continuous | world arc with icon; avoid text spam |
| Bond thread | 0.7 s draw + 1.5 s hold | cyan/gold; negative is jagged coral |
| Haven Chord | 1.2 s channel + 8 s shield | two ribbons braid into hex dome |
| Storm | 2 s warning + pulse | edge aurora, directional particles; reduced-flash mode lowers alpha |
| UI transitions | 120–220 ms | ease-out; sheets 220 ms; numbers roll 150 ms |

## 8. Art bible and PixelLab prompt system

### Direction

**“Aurora salvage pastoral.”** Crisp hand-pixelled sci-fi with dark indigo terrain, warm human faces, asymmetrical repaired technology, luminous cyan/violet flora, and gold emotional resonance. Silhouettes must communicate role at phone scale. Avoid photorealism, anime franchise resemblance, grimdark military gear, medieval motifs, excessive outline noise, fake UI text, and isometric perspective.

- Projection: strict orthographic **top-down 3/4**, consistent light from upper left.
- Source scale: characters 32×32; creatures 32×32; floor tiles 32×32; props 32 or 64; buildings multiples of 32.
- Pixel discipline: hard edges, no subpixel blur, 1 px dark outline on interactive silhouettes, clusters of 2–6 px, ≤24 colors per sprite.
- Character readability: face tone, hair mass, role-color shoulder/pack, distinct tool silhouette; no gendered armor clichés.
- Environment: tile edges seamless; low contrast in walkable centers; detail near edges only.
- Export: transparent PNG, sRGB, no baked shadow unless specified; 1× master and nearest-neighbor 4× preview.

### Reusable PixelLab prompt templates

**Character sheet**  
`Original 2D pixel-art survivor for Starfall Haven, [NAME/ROLE/DESIGN], orthographic top-down 3/4 view, 32x32 pixels per frame, four-direction sprite sheet, idle walk work hurt poses, crisp clustered pixels, one-pixel midnight outline, upper-left cool light, cyan/violet aurora salvage palette with [ROLE ACCENT], transparent background, consistent proportions, readable at mobile scale, no text, no logo, no blur, no gradients, no isometric view, no copyrighted character resemblance.`

**Building**  
`Original pixel-art [BUILDING], repaired colony technology made from charcoal alloy, cream ceramic panels and glowing prism conduits, orthographic top-down 3/4, footprint [W]x[H] tiles where each tile is 32x32, upper-left lighting, four construction stages plus powered state, crisp hard pixels, transparent background, interaction port visible on south edge, no characters, no text, no UI, no perspective mismatch.`

**Tile/prop**  
`Seamless 32x32 top-down pixel-art [VEYRA BIOME MATERIAL], dark indigo ground, sparse cyan bioluminescent accents, low-contrast walkable center, edge-safe tiling, crisp pixel clusters, upper-left light, no objects crossing tile boundary, no text, no blur.`

**Portrait**  
`Original expressive pixel-art bust portrait of [NAME], [TRAITS], hopeful worn space salvager, 96x96, dark navy rim, upper-left cool light and subtle gold resonance glow, clear face at small size, crisp pixels, transparent background, no text, no franchise resemblance.`

**VFX sheet**  
`Pixel-art VFX sprite sheet for [EFFECT], [FRAME COUNT] frames in a single horizontal row, cyan violet and gold emissive clusters, transparent background, constant frame boxes, no bloom outside padding, readable over dark and light ground, no text.`

Use a fixed seed/reference image per asset family. Generate one approved idle/footprint first, then use it as a reference for all dependent sheets; never generate every animation independently.

## 9. Audio and effects plan

**Music:** adaptive 3-layer score at 92 BPM: glass-marimba “home” motif, soft granular pad for exploration, low hand-drum pulse for threats. Vertical mixing uses simulation state: calm (home+pad), warning (+filtered pulse), combat (full pulse), victory (resolved gold chime). Transitions quantize to next 2-bar boundary; no track restart on pause.

**Ambience:** stereo aurora wind, distant hull ticks, soft flora chirps; duck 4 dB beneath alerts and 7 dB beneath speech/tutorial chimes. Keep critical cues centered.

| Event | Sound treatment |
|---|---|
| Tap/select/confirm/cancel | dry ticks; distinct pitch; 60–110 ms |
| Resource gained/spent | ascending/descending 2-note motif, rate-limited 4/s |
| Job complete | soft role-specific tool cadence |
| Bond positive/negative | consonant fifth / detuned minor second; never voice-like |
| Hunger/need warning | gentle hollow pulse every 20 s max per survivor |
| Enemy warning | 3-hit low pulse with directional pan |
| Weapon/hit/down | compact synth snap, crystal fleck, padded low thump; no realistic gun/gore |
| Storm warning/pulse | rising filtered wind over 2 s / sub impact with 250 ms sidechain |
| Haven Chord | two character timbres converge, sustained harmonic shield, resolved bell on expiry |
| Victory/loss | 2.5 s resolve / unresolved sparse motif |

Mix target: -16 LUFS integrated music, -14 LUFS master typical, true peak ≤-1 dBTP. Expose Music/SFX/Ambience sliders, mute, haptics, and “critical cues enhanced.” Android haptics: selection 10 ms light, valid placement 18 ms, invalid double 12 ms, threat 25-40-25 ms; respect system setting.

## 10. Slice balance and event table

Assume normal speed, no tutorial pauses; target first-time win rate 65–80%, expert grade-A possible with ≥45 s margin.

| Parameter | Value | Tuning intent |
|---|---:|---|
| Map / simulation tick | 32×18 / 0.2 s | short paths, stable deterministic jobs |
| Survivors / starting total HP | 3 / 285 | one downing recoverable |
| Starting stock | 6 Scrap, 2 Lumen, 2 Rations | immediate gather required, no starvation trap |
| Hunger/Rest start | 70 / 75 each | one survivor needs food by minute 6–7 |
| Fabricator break-even | 10 Scrap, 18 s | online near 1:45 |
| Pylon total | 6 Scrap + 4 Prism, 16 s | feasible by minute 8 with one miner |
| Core stability stages | 5/5/10 Prism; 30/60/100% | final stage is main economic choice |
| Wave 1 at 4:20 | 3 Sporelings (105 HP) | teaches focus fire; ~10–18 HP expected damage |
| Wave 2 at 9:05 | 2 Sporelings + 2 Wisps (118 HP) | target priority and shield test |
| Flare pulses | 9:10, 9:22, 9:34 | 12 damage to exposed actor/building each |
| Pylon shield | radius 4; blocks 100% pulse | placement clarity, limited coverage |
| Haven Chord | 2 Charge; 40 shield HP/8 s | covers one poor pulse/position decision |
| Core repair incoming | enemies prefer Core only if no survivor in range 3 | player can body-screen without taunt system |
| Grade A | all survive, Core ≥80 HP, one Constellated pair, ≤10 wasted resources | teaches full pillar set |

**Economy sanity check:** guaranteed nodes provide 30 Scrap, 24 Lumen, 20 Prism. Mandatory Fabricator + Shelter + Med Cot + Pylon costs 30 Scrap and 4 Prism; Core costs 20 Prism, intentionally creating a shortage. Wave drops (5 total Scrap) and tutorial grants 4 Prism at first bond, yielding exact feasible totals with Relay optional only if Shelter or Med Cot is skipped. UI labels this tradeoff; no unwinnable hidden requirement.

## 11. Acceptance test matrix

| ID | Area | Setup / action | Expected result |
|---|---|---|---|
| VS-01 | Loop | Start fresh, follow tutorial | scenario reaches results at 10:00; every required system appears once |
| VS-02 | Victory | Stabilize Core to 100%, one survivor alive | victory result at 10:00 |
| VS-03 | Loss | Let Core reach 0 HP | immediate loss, pause simulation, Retry works |
| SIM-01 | Jobs | Two survivors order same node | one reserves; other selects next valid job; no deadlock |
| SIM-02 | Jobs | Block interaction port mid-route | reason shown; retries 3 times then requeues |
| SIM-03 | Economy | Reserve materials in two blueprints | counters show available/reserved; no negative inventory |
| SIM-04 | Save | Background app during wave, restore | exact timer, HP, jobs, RNG/event state restored; app stays paused |
| BOND-01 | Bond | Work pair adjacent 20 s | +2 once; cooldown prevents repeat for 60 s |
| BOND-02 | Bond | Cross score from 29 to 30 | Harmonized label/bonus/thread appears exactly once |
| BOND-03 | Ability | Activate Haven Chord without 2 Charge | no spend; reason toast and invalid haptic |
| BOND-04 | Ability | Valid pair channels then takes hit | channel interruption rule displayed; either completes before hit or cleanly refunds full cost |
| NEED-01 | Needs | Hunger crosses 30 and 10 | documented penalties apply; critical Eat supersedes noncritical job |
| COM-01 | Combat | Focus enemy with two survivors | both path/range correctly; intent/impact readable at 2× |
| COM-02 | Downing | Reach 0 HP, then stabilize | 30 s timer stops; rescue/heal returns survivor at 10 HP |
| COM-03 | Storm | Exposed and shielded targets on pulse | exposed takes 12; shielded takes 0; reduced-flash remains legible |
| UX-01 | Touch | Tap target with 12 dp finger drift | treated as tap; >12 dp pans/drag-selects as context dictates |
| UX-02 | Camera | Pinch near edge and pan at both zoom limits | no jump, NaN, void exposure, or stuck input |
| UX-03 | Build | Drag ghost through valid/invalid cells | color+icon changes; invalid release does not spend resources |
| UX-04 | Back | Press Back through bottom sheet/build/world | closes one layer each; final press opens pause, never exits |
| UX-05 | Targets | Automated layout scan at supported densities | all interactive bounds ≥48 dp and safe-area compliant |
| UI-01 | 16:9 | Render 1920×1080, 1280×720, 960×540 | no HUD overlap; tooltip and sheets stay in safe bounds |
| UI-02 | Text | Set 1.3 text scale and longest English labels | no clipping; cards wrap/truncate with accessible full label |
| UI-03 | Color | Simulate deuteranopia and grayscale | valid/danger/bond states distinguishable by icon/shape/pattern |
| TUT-01 | Tutorial | Idle 5 s then 12 s on each beat | pulse then exact hint; target remains unobscured |
| TUT-02 | Skip | Skip at any beat | game resumes, all controls available, objective remains achievable |
| AV-01 | Animation | Play every clip at 1×/2× | no missing frames; event timing aligns with contact frames |
| AV-02 | Audio | Trigger 10 gains in 1 s | gain cue rate ≤4/s; alert remains audible; no clipping |
| PERF-01 | Performance | Mid-tier Android, final wave, max particles | ≥30 FPS, frame p95 ≤33.3 ms, no input stall >100 ms |
| PERF-02 | Memory | Replay scenario five times | peak RSS ≤350 MB; growth after GC ≤10 MB |
| AND-01 | Lifecycle | lock/unlock, rotate attempt, audio interruption | landscape retained; safe pause; audio focus respected |
| AND-02 | Offline | airplane mode from cold launch | full slice playable; no network permission or blocking call |
| ART-01 | Assets | Validate manifest and load all IDs | dimensions/frames match; transparent edges clean; placeholders explicitly flagged |
| ORIG-01 | Originality | Review names, silhouettes, UX, text | no copied colony-sim terminology, characters, layouts, or recognizable assets |

## 12. Implementation contracts and definition of done

- Stable IDs in `asset_manifest.json` are the source-facing asset keys; gameplay code must not depend on filenames directly.
- Deterministic event scheduler stores scenario seconds, not wall time. All rates above multiply by simulation delta.
- Autosave on tutorial completion, every 60 s, Android `onPause`, and immediately before wave 2; one atomic slot plus backup.
- Render sorting: terrain → floor decals → buildings/props → actors → roof/shield overlays → world UI → HUD.
- Missing art uses a labeled magenta placeholder and logs the asset ID once; it must never crash gameplay.
- Telemetry, if later enabled, is opt-in and must not be required for acceptance.

**Slice done:** all acceptance tests marked pass; a first-time tester can finish without external explanation; all three survivors, six building states, two enemies, bond feedback, storm finale, touch HUD, music/SFX/haptics, lifecycle save, and results screen are present using approved or clearly labeled placeholder assets.
