--- title: 'EXPERIENCE.md — Emberfall (Top-down Action Roguelike)' status: example form_factor: PC + controller (couch and desk) --- # EXPERIENCE.md — Emberfall (Top-down Action Roguelike) ## Foundation PC title, shipping on Steam with first-class controller support and Steam Deck verification as a goal. Two postures: desk (keyboard + mouse, monitor) and couch (controller, TV across the room). Engine UI: Unity UI Toolkit; HUD elements are custom render-layer overlays. Visual identity: see DESIGN.md. Foundation must hold for both input schemes and both viewing distances. ## Information Architecture Flat, fast, controller-first: - **Title** → New Run · Continue · Loadout · Options · Quit. - **In-Run HUD** (no navigation — always-on overlay): health/resources bottom-left, ability cooldowns bottom-center, minimap top-right, run timer + depth top-left. - **Pause** → Resume · Inventory · Map · Options · Abandon Run. Replaces the view; never stacks. - **Inventory / Loadout** → grid of items, controller cursor wraps; compare-on-focus. Nothing is deeper than two levels from the HUD. Pause is one button from anywhere. ## Voice and Tone Terse, evocative, dungeon-flavored. "The torch gutters." not "Low light warning." Pickups read as discoveries ("Ember-forged Blade"), not inventory line-items. Death screens are grim but inviting a retry ("Fallen at Depth 4. The dark remembers. Again?"). ## Component Patterns - **Menu item** — controller D-pad / stick navigates; A/Enter confirms; B/Esc backs out one level. Focus state per DESIGN.md `{colors.primary}`. Behavior; visual spec in DESIGN.md.Components. - **Inventory cell** — focus shows a compare tooltip vs. the equipped item; A equips, X drops, Y inspects. - **HUD meters** — health/stamina/mana update every frame; never animate the digit font (use the mono numeric token). - **Button prompt** — context-sensitive; glyph swaps to match the active input device (see Input Schemes). ## State Patterns - **Idle in-combat** — HUD at full opacity; idle prompts fade to 40%. - **Low health** — health bar pulses, screen-edge damage vignette in `{colors.health}`, low-health audio sting. - **Loading between rooms** — brief diegetic transition (descending stairs), never a spinner. - **Death** — run summary overlay (depth, time, kills, loot), single "Again?" focus default. - **Disconnect (controller)** — auto-pause, "Reconnect controller" prompt; mid-combat never punishes a dropped pad. ## Interaction Primitives - Move (stick / WASD), dodge (button / Space — costs stamina), attack, ability ×2, interact. - Hold-to-confirm on destructive actions (Abandon Run, Drop legendary). - Rumble/haptic on hit landed, hit taken, and pickup (light/medium/heavy impact). - Mouse hover = controller focus equivalent; both drive the same focus state. ## HUD & Diegetic UI The HUD is **non-diegetic** by default — a clean overlay the character is not aware of. Two deliberate **diegetic** exceptions: the torch flame in the world dims as a light-radius timer (replacing a bare meter), and boss health renders as cracks spreading across the boss model in addition to the non-diegetic bar. HUD **information hierarchy**: health and cooldowns are always full-opacity (combat-critical); minimap and run timer are secondary; pickup toasts are transient. During cutscenes and safe rooms, non-critical HUD fades out; health stays. Nothing combat-critical ever hides during active play. ## Input Schemes - **Controller (primary)** — full play on a gamepad; left stick move, right trigger attack, face buttons abilities, bumpers swap loadout. All actions remappable. - **Keyboard + mouse** — WASD + mouse-aim; every binding remappable; mouse also drives menu focus. - **Steam Deck** — treated as controller; verify text legibility at 7-inch handheld size (min 24px effective for combat-critical labels). - **Context-sensitive prompts** — the interact glyph appears only near interactables; glyph art swaps per detected device (Xbox / PlayStation / Switch Pro / keyboard). - **Remapping** — a full bindings screen in Options; conflict detection; reset-to-default per scheme. ## Game Feel & Juice The felt responsiveness of the UI is part of UX, not just combat. On hit landed: brief hit-stop (≈60ms), small directional screen shake, a floating damage number (mono font, `{colors.primary}`), and a controller rumble pulse. On level-up: time briefly dilates, a banner sweeps in, the ability bar flashes. On legendary drop: the toast uses `{colors.legendary}`, a distinct chime, and a heavier rumble. Juice is **tunable and respects the reduced-motion / reduced-shake accessibility toggle** — when set, shake and hit-stop drop to zero while damage numbers and audio cues remain. ## Accessibility Floor Targets WCAG-AA-equivalent plus game-specific standards (informed by the AbleGamers / Xbox accessibility guidelines): - **Remappable controls** for every action, both schemes — non-negotiable. - **Colorblind modes** (protanopia / deuteranopia / tritanopia) plus the rule that resources never rely on hue alone (icon + meter shape carry the signal). - **Subtitles and captions** on by default; speaker labels; size and background-opacity sliders; captions for important non-speech audio (boss roar, trap arming). - **Reduced-motion / reduced-shake** toggle (drives Game Feel & Juice above). - **HUD scale slider** and a TV-safe 5% margin so corner HUD is never clipped on overscan displays. - **Hold-vs-toggle** option for held actions (sprint, aim) for limited-dexterity players. - Combat-critical labels legible at handheld (Steam Deck) distance and couch (TV) distance. ## Responsive & Platform - **Desk (KB+M, monitor)** — denser tooltips, hover affordances, mouse menu navigation. - **Couch (controller, TV)** — larger focus rings, 5% title-safe HUD margin, hover replaced by focus, bigger combat-critical type. - **Handheld (Steam Deck)** — controller scheme, 7-inch legibility pass, battery-friendly effects. - Layout adapts by input device and viewing distance, not just resolution; the HUD anchor corners stay fixed across all three for muscle memory. ## Key Flows ### Rosa clears the Depth-4 boss on her third run Rosa, a speedrunner, knows the layout cold and is hunting a sub-12-minute clear on her Steam Deck. 1. She drops into Depth 4; the run timer (top-left, mono font) reads 9:48. 2. The boss arena seals — a diegetic stone door slams; the boss bar fades in bottom-center. 3. She weaves dodges; her stamina arc (`{colors.stamina}`) empties and she waits a beat for one segment to refill — the segmented meter tells her exactly how much she has. 4. At 20% boss HP the model starts visibly cracking (diegetic) and her own health bar pulses red with an edge vignette — she's one hit from death. 5. **Climax:** she lands the killing blow. Hit-stop snaps, a heavy rumble fires, the screen flashes, a legendary drops in `{colors.legendary}` with its chime, and the run timer freezes at 11:31 on the victory banner. Sub-12. She feels it in her hands before she reads it. 6. The "Again?" prompt is pre-focused; one button restarts. ### Kenji plays on the couch with a controller, first time Kenji, new to the genre, is on the TV across the room with a PlayStation pad. The interact prompt shows a PlayStation cross glyph (device-detected), HUD type is large enough to read from the sofa, and when he wanders near a shrine the context prompt fades in only then. He opens Options and finds reduced-shake and a HUD-scale slider in the first screen — he bumps both, and the game stops making him queasy without hiding anything he needs.