Gamepad-Friendly Input Patterns: Research for D3-TUI
Status: Research complete — ready for spec integration
Agent: codex (UX research scope)
Date: 2026-05-11
Device target: Anbernic RG40XXV (D-pad, A/B/X/Y, L1/R1, Start/Select, Menu)
Resolution: 640×480, integer-scaled 320×240 fallback for small text
Constraint: All patterns must work WITHOUT text input. Text input is fallback only.
Domain context: Turn-based strategy, hex grid, node-traversing agents. Players configure agents, review LLM output, correct mistakes, route context between agents.
Pattern 1: Radial Menus
What It Is
A circular menu centered on the cursor or screen center, where thumbstick/D-pad direction selects an option. Up to 8 slices (4 cardinal + 4 diagonal) without modifiers, up to 32 with L1/R1 tab rings. Selection is instant — push direction, press A to confirm. Advanced variants layer sub-menus (push deeper into a direction to reveal nested choices).
Game Examples
| Game | System | Notes |
|---|---|---|
| Secret of Mana (1993) | SNES | Ring menu — pause, rotate ring with D-pad, select action then target. The canonical 16-bit radial. |
| Mass Effect (2007) | Xbox 360 | Dialogue wheel — conversation responses mapped to thumbstick directions, no text reading needed until after selection. |
| Monster Hunter World (2018) | PS4/Xbox | Item radial — D-pad + right stick combo. 8 items per ring, multiple rings via L1/R1 tabs. |
| GTA V (2013) | PS3/360 | Weapon wheel — hold L1, highlight with stick, release to select. |
| Persona 5 (2016) | PS4 | Battle command ring — left / right / up / down correspond to Attack / Persona / Guard / Item. |
| Doom Eternal (2020) | All | Weapon wheel — slow-motion radial, color-coded slices, single-frame selection for power users. |
| Fortnite (2017) | All | Emote wheel — 8-slice radials, multiple pages via shoulder buttons. |
RG40XXV Button Mapping
- D-pad directions → highlight a slice (snap, not free-rotate — no analog stick on RG40XXV)
- A → confirm selection
- B → cancel / back out of radial
- L1 / R1 → flip between ring tabs (e.g., L1 = "Actions", R1 = "Targets")
- Y → hold for contextual tooltip on current slice (optional)
- X → "more options" — expand selected direction into a sub-radial
Without an analog stick, the RG40XXV is limited to 8 directions per ring. This is functionally identical to Secret of Mana's ring system on SNES — a proven, comfortable input model.
Good For
- Configuring agents — "Provision agent" → radial direction selects agent role (Navigator / Sentinel / Explorer / Builder). Sub-radial for detail (Navigator → Pathfinder / Waypoint / Scout).
- Reviewing output — "What do you want to review?" → radial of recent LLM outputs, charts, agent logs.
- Routing context — "Route to..." → radial of available agents. L1/R1 for agent triads (LAND / SEA / AIR / COMMAND).
- Quick actions in combat — selecting move, attack, ability, item in a battle phase. Standard JRPG radial pattern.
- Any choice from 4-8 options where options are known and stable. Radials degrade fast beyond 8.
Bad For
- Free-form text or names — No radial can replace naming an agent or writing a custom prompt.
- Choosing from >32 options — Even with L1/R1 tabs, beyond 4 rings × 8 slices = 32, cognitive load spikes. Use chips or drill-down instead.
- Options that change frequently — Radial muscle memory works when directions are static. If "Attack" was "Up" last turn but "Down" this turn, players will mis-input constantly.
- Precision timing — D-pad radials require a brief pause to confirm direction before pressing A. Not for real-time twitch input.
- Long option labels — Each slice can show at most ~12 characters legibly at 640×480. If your option names exceed that, radials are the wrong container.
Pixel Budget at 640×480
Radial overlay: 320×320px centered (radius ~140px)
8 outer labels: ~120px each, ~10px text height
Selected slice highlight: color-shift + scale-up on slice zone
Tab indicators (L1/R1): 24×24px in upper corners
Sub-radial: same dimensions, offset from parent to show hierarchy
Total screen real estate: ~70% of center (masking background with 50% opacity)
Crisp 1x pixel font usable; no sub-pixel scaling needed.
RG40XXV-Specific Notes
- No analog stick means no "continuous rotation" — stick to 8 discrete slices.
- The RG40XXV D-pad is a cross (not a disc), so diagonal detection is slightly less reliable than cardinal. For critical actions, place them on cardinal directions (Up/Down/Left/Right), reserve diagonals for secondary actions.
- Secret of Mana solved this elegantly: the ring has 8 positions but the game snaps your input to the closest valid slice with a grace zone. This reduces mis-input from imperfect diagonals.
- A 1px-thick ring renders cleanly at integer scale. Use high-contrast colors — the RG40XXV screen has limited dynamic range compared to modern OLED.
Pattern 2: Mad-Libs / Chips Composition
What It Is
The player builds a "sentence" or command by dropping pre-made tokens ("chips") into slots. Each chip is a single word or short phrase from a constrained vocabulary. The sentence reads left-to-right as <prefix> <subject> <verb> <suffix>. This is exactly how the Oracle Chamber already works on this device — proven in production.
The key insight: chips encode grammar constraints. A chip like "The team" knows it can only be followed by a verb chip ("should scout", "must avoid", "will report"). Invalid next-chips are greyed out or hidden. The player navigates a semantic tree one chip at a time, never typing a letter.
Game Examples
| Game | System | Notes |
|---|---|---|
| Oracle Chamber (2025) | RG40XXV | The reference implementation — chip-based question composition for cartomantic agents. Three-tier: Subject → Action → Target. |
| Baba Is You (2019) | Switch/PC | Rule composition — push blocks to form sentences like BABA IS YOU + WALL IS STOP. Chips are physical objects in the world. |
| Scribblenauts (2009) | DS | Adjective-noun-object composition — type a single word to spawn it, but the UI scaffolds valid inputs with autocomplete. |
| Tears of the Kingdom (2023) | Switch | Fuse system — select base object, then select modifier object. Not strictly sentence building, but the "slot-fill" mental model is identical. |
| Mario & Luigi: Dream Team (2013) | 3DS | Luiginary attacks — build attacks by combining elements in a sequence. Slot 1 (what), Slot 2 (how), Slot 3 (target). |
| Magic: The Gathering Arena (2018) | All | Resolving effects — "counter target spell" is decomposed into [counter] [target] [spell]. The game auto-fills legal targets. |
RG40XXV Button Mapping
- D-pad Left/Right → move between slot positions (cursor across the sentence template)
- D-pad Up/Down → cycle through available chips for the current slot
- A → confirm current chip and advance to next slot
- B → clear current slot / go back one slot
- L1 / R1 → jump to first/last slot (for long sentences)
- Y → preview result (what the composed sentence will do / ask)
- X → insert a "wildcard" slot (free-text fallback, only when necessary)
Good For
- Agent configuration — "Scout team" + "should explore" + "northern ridge" + "aggressively". Four chips, zero typing.
- LLM prompt assembly — composing structured prompts from validated fragments. Never an invalid prompt because grammar constraints block nonsense combos.
- Corrections / feedback — "That output" + "is" + "too vague" + "retry with more detail". Structured correction chips mapped to common LLM failure modes.
- Routing context — "Send" + "Oracle output" + "to" + "Navigator agent" + "with" + "priority: high". Route-tag chips.
- Any structured query with a known vocabulary — the chip system forces precision without requiring the player to know exact syntax.
- Encoded inventory selection — "Equip" + "Steel Sword" + "in" + "main hand" + "from" + "backpack".
Bad For
- Truly free-form exploration — "Ask the LLM anything" breaks chip composition. If the vocabulary is unbounded, chips become a bottleneck.
- Rare/specific combinations — If a chip combo appears once every 20 hours, the player won't build muscle memory and will hunt through chip lists. This is the opposite of what chips do well.
- Very long sentences (>10 slots) — Cognitive load scales linearly with slot count. Beyond 6-8 slots, the player loses track of what the sentence means.
- Numeric input — "Set reinforcement count to 47" is annoying with chips. Use a number picker wheel or T9 fallback.
- Emotion/tone — Hard to encode "aggressive but polite" or "cautiously optimistic" as discrete chips. These work better as tags (Pattern 5).
Pixel Budget at 640×480
Sentence ribbon: full width (640px), 64-80px tall at bottom of screen
Slot boxes: ~120px × 40px each, 4-5 visible slots side-by-side
Active slot: highlighted border + slight scale-up (44px height)
Chip list popup: 200px × 180px anchored above/below active slot
- Each chip row: 180px × 36px, ~6 visible without scrolling
- Scroll indicator if >6 chips available
- Sub-chip hints: tiny icons or 1-2 char indicators in chip row
Font: 14px in chip boxes, 12px in chip list
Total screen real estate: ~15% at bottom (ribbon + popup)
Background remains usable for game view above the ribbon.
RG40XXV-Specific Notes
- This pattern is already proven on this device via Oracle Chamber. The chip UI renders cleanly at 640×480 with single-pixel borders.
- Vertical chip menus (Up/Down to scroll) feel more natural on a handheld than horizontal menus because the thumb rests in a vertical sweep position on the D-pad.
- Chip text must be legible at 12-14px. At 640×480 integer-scaled on a 4-inch screen, this is borderline. Test with high-contrast white-on-dark, bold weight.
- The RG40XXV lacks a touch screen, so no drag-and-drop. All chip operations are D-pad + A/B. This is fine — D-pad chip cycling is faster than drag-and-drop for power users once they know the vocabulary.
Pattern 3: Multiple Choice Branching Interviews (Dialogue Trees)
What It Is
Instead of the player expressing intent directly, the system asks a series of narrow multiple-choice questions. Each answer narrows the possibility space. After 3-5 questions, the system has enough information to act. This is functionally identical to RPG dialogue trees — the player doesn't type "I want to romance Liara" — they choose "I care about you" → "More than a friend" → "Stay together" across three dialogue prompts.
The branching structure can be flat (all paths same depth) or deep (some branches go 2 levels, others 5). Flat is easier to navigate; deep is more expressive.
Game Examples
| Game | System | Notes |
|---|---|---|
| Phoenix Wright: Ace Attorney (2001) | GBA/DS | Press / Present / Move — three verbs, context-dependent outcomes. The interview IS the gameplay. |
| Mass Effect trilogy (2007-2012) | Xbox 360 | Dialogue wheel + investigation branches. "Investigate" opens a sub-tree of neutral questions that never advance the conversation state. |
| Hades (2020) | Switch/PC | Boon selection — presented 3 options from a pool of 20+. The trio constraints create meaningful choice without overwhelming the player. |
| Slay the Spire (2019) | Switch/PC | Card rewards — choose 1 of 3 cards after each encounter. Same "curated shortlist from large pool" pattern. |
| Disco Elysium (2019) | PC/Switch | Skill checks + branching dialogue. Some options are "locked" (visible but grey) if you lack a skill — transparency without option overload. |
| Persona 5 Royal (2019) | PS4 | Confidant dialogue — key conversations offer 2-3 responses, each producing different affinity gains. Low cognitive load, high replay value. |
| Her Story (2015) | PC/iOS | Video clip search — type keywords, but the system suggests related clips. Not purely branching, but demonstrates how constrained retrieval can feel exploratory. |
RG40XXV Button Mapping
- D-pad Up/Down → highlight a choice
- A → confirm selection, advance to next prompt
- B → go back one level (undo last answer, re-present choices)
- L1 → "I don't know / skip" — advance without narrowing (good for optional branches)
- R1 → "Tell me more" — open an explanatory sub-branch before committing (Mass Effect's "Investigate")
- Y → "Undo all / start over" — reset the interview
- X → "Show me where this is going" — preview how many more questions remain (breadcrumb trail)
Good For
- Correcting LLM output — "What's wrong with this output?" → Too long? Too short? Wrong facts? Wrong tone? → Drill down from the answer: "Too long" → "Cut in half" or "Summarize to 3 bullet points" or "Remove the part about logistics."
- Complex agent configuration — Instead of 40 parameters in a flat menu, ask: "What kind of agent?" (Scout/Builder/Healer) → "What priority?" (Stealthy / Aggressive / Defensive) → "Any special equipment?" (Yes/No) → "Which gear?" (shortlist based on agent type).
- First-run setup / onboarding — Wizard-style flow: 5-8 questions that configure a new game or agent. Only options relevant to earlier answers are presented.
- Diagnosis / debugging — "What went wrong?" → Agent stuck? Wrong output? Crashed? Timeout? → Branch into specific fix suggestions per symptom.
- Review / triage — "What do you want to review?" → Recent outputs? Agent status? Map state? Combat log? → Narrows to specific report, then offers actions (rerun, share, archive, fix).
Bad For
- Speed after mastery — Expert users who know exactly what they want ("Scout team, aggressive, northern ridge, now") will find 5 questions slower than direct input. Solution: offer a "quick command" bypass for power users (chips or presets).
- Open-ended exploration — If the player doesn't know what they're looking for, sequential narrowing frustrates. "Just show me what happened" doesn't map to a 3-option multiple choice.
- Very large branch depth (>7 levels) — Players lose sense of where they are. Breadcrumb trails help but don't fully solve this. At >7 levels, consider breaking into multiple shorter interviews.
- Cross-referencing — "I want something like the last thing, but with this other agent." Cross-reference requires seeing two things at once, which sequential interviews hide.
Pixel Budget at 640×480
Interview prompt area: 640×120px at bottom of screen (question text)
Choice list: 3-5 options stacked vertically, 560×180px overlay on lower-center
- Each choice row: 540×44px with icon (32×32) + text
- Active choice: highlighted background bar
Breadcrumb trail: 640×24px bar at very top of screen ("Config > Agent > Scout > Priority")
Progress indicator: mini dots or segments, 48×12px in corner
"Investigate" / "Back" buttons: anchored to bottom corners, 80×40px each
Total screen real estate: ~35% (lower third for choices + top bar for breadcrumbs)
Background: game view remains visible in upper ~50% — partially dimmed for focus.
RG40XXV-Specific Notes
- Stack choices vertically, not horizontally. Vertical D-pad scanning is faster (no eye tracking needed) and the 640×480 aspect ratio favors vertical stacking (you have 480px of height, only 640 of width — vertical lists feel natural).
- Max 5 visible choices per screen. Beyond 5, add a scroll indicator. The 6th+ option being off-screen serves as a natural "this is less important" signal.
- Breadcrumb trails solve the "what if I made a mistake 3 questions back?" problem without requiring a full undo chain. Player can tap B repeatedly to walk back.
- The RG40XXV screen's color reproduction is warm-tinted. Use blue-toned highlights for selection (cyan, light blue) rather than yellow/green — yellow bleaches out on this panel.
Pattern 4: T9-Style / Predictive Text
What It Is
When text IS needed (naming an agent, writing a custom prompt, searching for a specific item), use a grid-based letter picker. The classic mobile phone T9 layout maps 26 letters + space + backspace onto a 3×4 grid (A-C on 1, D-F on 2, etc.). The player navigates the grid with D-pad, taps A to enter the highlighted letter. Predictive completion suggests words as you type, reducing keystrokes by 60-80%.
Modern variants (Steam Deck keyboard, PS5 text entry) add dual-stick input and motion control, but the RG40XXV has neither. The T9 grid is the right constraint fit.
Game Examples
| Game | System | Notes |
|---|---|---|
| Steam Big Picture Mode (2015) | Steam Deck/PC | Dual-stick keyboard — left stick selects zone, right stick selects key within zone. Predictive completion bar. Gyro fine-tuning. |
| Xbox Virtual Keyboard (2013+) | Xbox One/Series | D-pad grid navigation, predictive suggestions on Y button. Slow but functional — deliberately NOT the primary input mode. |
| Nintendo Switch Keyboard (2017) | Switch | Touch screen primary, but D-pad navigation as fallback. Predictive completion at top. |
| Animal Crossing: New Horizons (2020) | Switch | Touch keyboard for letters/designs, predictive for in-game chat. Simplified key set (no caps distinction in most contexts). |
| EarthBound (1994) | SNES | "Don't Care" naming — the game auto-suggests names if you leave the field blank. The player CAN type, but doesn't have to. Canonical "opt-out" pattern. |
| Phantasy Star Online (2000) | Dreamcast | Soft keyboard — 3 pages of characters (hiragana/katakana/romaji), switchable via L/R. Character-by-character entry, slow but complete. |
| Elite Dangerous (2014) | PC/consoles | Galaxy map search — type system name via D-pad grid + predictive. Only fallback — most navigation is via map cursor and filters. |
RG40XXV Button Mapping
- D-pad → Move cursor on the letter grid (snap to cells, wrap-around on edges)
- A → Enter highlighted letter
- B → Backspace (delete last character)
- X → Toggle between letter sets (lowercase / uppercase / numbers / symbols)
- Y → Accept top predictive suggestion (instant word completion)
- L1 → Accept suggestion #2
- R1 → Accept suggestion #3
- Start → Confirm and submit full text
- Select → Clear entire field
Grid layout options:
OPTION A: Standard T9 (3×4 grid, 12 cells)
1: ABC 2: DEF 3: GHI
4: JKL 5: MNO 6: PQRS
7: TUV 8: WXYZ 9: .,!?
DEL: <-- 0: space OK: done
OPTION B: Alphanumeric grid (4×7, 28 cells) — faster but smaller targets
Full alphabet in a QWERTY-like 4-row grid.
Works at 640×480 if cells are tight (40px each, 280px wide).
Predictive bar replaces the need for many keys.
Good For
- Naming agents — "What should we call this scout?" → T9 grid + "Suggest names" button (themes: Greek gods, military callsigns, terrain features). Player can type "Artemis" or accept suggestion.
- Search with fallback — Browsing by category is primary (Pattern 3), but if the player knows the exact item name, T9 search is the emergency exit.
- Short custom prompts — A single sentence override: "Ignore the ruins" or "Retreat if outnumbered 3:1". 20-40 characters max. If the player needs to write paragraphs, the device is wrong; route to the Mac agent via Mozart.
- Passwords / codes — Numeric input for save codes, debug commands, or unlocking secret content.
- Comments on reports — "Good analysis but check sector 7" — free-text annotation on agent output.
Bad For
- Primary input mode — If T9 typing is the main way players interact with your game on a handheld, the UX has failed. This is explicitly a fallback.
- Long-form writing (>60 chars) — Each keystroke takes 0.5-1.5 seconds on D-pad. A 100-character message is ~1-3 minutes of tedious input. Route to the Mozart bridge for anything longer than a sentence.
- Real-time chat — T9 input is far too slow for back-and-forth conversation. Use preset responses (Pattern 5) or route to external keyboard.
- Non-English text — T9 was designed for English. Japanese, Arabic, Chinese require entirely different input methods. If your game supports non-English agents, invest in language-specific input or use chips exclusively.
- Frustration on first use — Players will try T9 once, find it slow, and never use it again unless forced. Hide it behind an explicit "Custom text..." option, not as a first-class pathway.
Pixel Budget at 640×480
T9 grid overlay (Option A): 240×160px centered (3 columns × 4 rows, cells ~72×36px)
- Numbers: top label in each cell (9px, bold)
- Letters: smaller text below (7px, regular)
- Active cell: bright border + background fill
Predictive bar: 540×40px above the grid (3 suggestions, ~140px each)
- Suggestion #1 (top): highlighted, 14px bold
- Suggestions #2-3: 12px regular
Current text display: 540×32px above suggestions (shows typed text so far)
Toggle label (X): 64×20px in lower-right ("abc"/"123"/"ABC")
Grid + predict + text = ~250px tall, centered on screen
Total screen real estate: ~50% (full modal overlay with dimmed background)
Integer scale note: grid lines should be 2px instead of 1px to avoid shimmer
RG40XXV-Specific Notes
- The RG40XXV D-pad has a slightly stiff membrane compared to modern controllers. Rapid directional input (typing "hello" in <5 seconds) produces more fatigue than a DualSense or Switch Pro. Minimize the frequency of T9 use.
- Diagonal D-pad wear — the T9 grid is orthogonal (no diagonals needed). This is good — the RG40XXV diagonal detection is less reliable.
- Consider a "hold direction + auto-repeat" feature: hold Right on D-pad for 500ms and the cursor starts auto-advancing across the grid at 8Hz. This speeds up text entry for power users without requiring faster thumb movement.
- Use the Y button for the top prediction. Y is the "fast path" button — it's the easiest face button to reach from the D-pad resting position. Predictive acceptance should be single-tap, not hold-and-confirm.
Pattern 5: Tag / Preset Selection
What It Is
The player applies pre-written tags or presets from a curated list. Unlike chips (which compose into sentences), tags are standalone modifiers or commands. Think: - Dark Souls messages: "Try finger, but hole" — the player picks words from a fixed list, not a keyboard. The vocabulary IS the game's expression system. - Apex Legends ping system: "Enemy spotted", "Looting here", "Defending this position" — context-aware presets mapped to a single button. - Mario Maker stamp system: pre-drawn stamps you place on levels rather than freehand drawing.
Tags are curated, context-aware, and designed to cover 80%+ of what players want to say. The remaining 20% uses T9 fallback.
Game Examples
| Game | System | Notes |
|---|---|---|
| Dark Souls / Elden Ring (2011-2022) | All | Message system — fixed template slots: [Conjunction] [Subject] [Predicate]. Player fills each slot from a curated word list. Limited vocabulary, near-infinite expressive combinations. |
| Apex Legends (2019) | All | Ping system — hold R1 to open ping wheel, select from 8 context-sensitive options. "Enemy here" / "I'll defend" / "Let's go here." Context changes available pings (aiming at enemy = "enemy spotted" ping, aiming at loot = "item here" ping). |
| Mario Maker 1+2 (2015/2019) | Wii U/Switch | Stamp tool — pick from categories (enemies/items/terrain/gizmos) and stamp on level. No drawing, no text. Pure selection. |
| Portal 2 Co-op (2011) | All | Ping + gesture — point at object, press ping button, partner sees "Look here" with a countdown overlay. Single-button expression. |
| Helldivers 2 (2024) | PS5/PC | Communication wheel — 8 callouts (Follow me, Sorry, Thank you, Supplies, etc.) with contextual variants. No text chat needed for combat coordination. |
| FFXIV (2013) | All | Auto-translate dictionary — "Hello!" "Good game!" "Pull please" — pre-translated phrases for cross-language play. Functional tag system dressed as a phrasebook. |
| Street Fighter 6 (2023) | All | Battle Hub stamps — emoji + short text combos. Pre-made reactions to battles ("Nice combo!", "Close one!"). Zero typing. |
RG40XXV Button Mapping
- Y → Open tag palette (dedicated hotkey — always accessible)
- D-pad → highlight a tag
- A → apply highlighted tag
- L1 / R1 → switch tag categories (e.g., "Corrections" → "Routing" → "Reactions" → "Custom")
- B → close palette without applying
- X → toggle "show tag descriptions" (help text for each tag)
- Hold A → apply tag and keep palette open (for applying multiple tags sequentially)
Tag category suggestions for D3-TUI:
CORRECTIONS:
[Too vague] [Too long] [Too short] [Wrong facts] [Bad tone]
[Retry] [Summarize] [Expand section ___] [Redo step ___]
[Skip this] [Send to expert]
REACTIONS:
[Good work] [Interesting] [I don't understand] [Proceed]
[Hold / pause] [Abort] [Run again]
ROUTING:
[Send to Navigator] [Send to Oracle] [Send to Builder]
[Broadcast to all] [Route to Mozart] [Archive in SG0]
CONTEXT TAGS:
[Priority: High] [Priority: Low] [Urgent] [Background task]
[Stealth mode] [Aggressive] [Defensive] [Scout only]
[Report back] [Silent run] [Test mode]
CUSTOM:
[Player-defined tag 1] ... [Player-defined tag 8]
(Filled from user's most-used T9 inputs over time)
Good For
- Correcting agent output — Applying a "Too vague" tag to the last LLM output auto-injects the correction without typing. The game knows what "too vague" means and adjusts the prompt.
- Quick reactions during combat — "Abort!" or "All units retreat!" mapped to a single button press sequence. Faster than chips or interviews.
- Routing decisions — "Send this to Navigator" is a single tag. The system knows what "this" is (the currently visible output) and who Navigator is.
- Adjusting agent behavior on the fly — "Scout" + "Stealth mode" → two tags that reconfigure an agent mid-mission. No menus, no typing.
- Emoting / social — Quick reactions to agent output or multiplayer communication.
Bad For
- Specific, nuanced feedback — "Too vague" is broad. If the player wants "The third paragraph is vague about enemy troop count, be more specific there," a tag can't capture this. Route to interview (Pattern 3) or T9 (Pattern 4).
- Novelty — Tag lists exhaust quickly. If every correction is "Too vague," the system feels shallow. Mitigate with dynamic tags based on recent outputs ("This chart is missing data" → tag appears after a chart output).
- Tag overload (>40 visible tags) — Beyond ~40 tags, scrolling and hunting defeats the speed advantage. Break into <10 tags per category, <6 categories max.
- Cross-tag conflicts — "Stealth" + "Aggressive" might be contradictory. The system should flag conflicts or auto-resolve with a clarifying prompt.
Pixel Budget at 640×480
Tag palette: 480×320px centered overlay (semi-transparent background)
Category tabs: 640×40px across top (6-8 categories, ~60px each)
Tag grid: 3 columns × 3 rows of tag chips, ~140×44px each
- Tag text: 14px bold inside chip
- Active chip: bright border + subtle fill
- Applied chips: checkmark indicator in corner
Tag description bar: 540×28px below grid (shows help text for highlighted tag)
Context indicator: 200×24px in upper-left ("Target: Last LLM output")
Apply button: 120×40px in lower-right ("Apply" or "A: Apply")
Total screen real estate: ~55% (modal overlay)
Tags render cleanly as rounded rects with 2px borders — no sub-pixel artifacts.
RG40XXV-Specific Notes
- Tags should be large enough to read at arm's length. The RG40XXV is held ~30-40cm from the face. 14px bold text is the minimum readable size; 16-18px is comfortable.
- Color-code tag categories. The RG40XXV screen distinguishes ~6-8 colors reliably. Use color as a secondary channel (with icon/text as primary — don't rely on color alone for RG colorblind players using the device).
- The Y button as "tag hotkey" is deliberate. Y is easily reachable from resting D-pad position without moving the thumb. This makes tag application a flow-state operation: D-pad to tag, Y to open, D-pad to select, A to apply, B to close — thumb never leaves the right half of the controller.
Pattern 6: Thumbs Up/Down + Refinement (Binary → Drill-Down)
What It Is
The player gives a thumbs-up (good) or thumbs-down (bad) on the most recent agent output, then optionally drills down to explain why. This is: 1. One-button feedback — instant, zero cognitive load 2. Optional detail — if the player wants to be more specific, the system asks a single follow-up question (~3 choices) 3. Learning over time — the system notices that thumbs-down on economic reports is always followed by "too optimistic" and auto-suggests that as the default
This pattern comes from Netflix ("thumbs up/down" on content → genre preferences), YouTube ("Not interested" → "Tell us why"), and Tinder (swipe → "it's a match" → optional chat).
Game Examples
| Game | System | Notes |
|---|---|---|
| Netflix (2017+) | All | Thumbs up/down replaces star ratings. Simpler, higher engagement. "We think you'll like this because you liked X." |
| YouTube (2018+) | All | "Not interested" on recommendations → "Why?" (Already watched / Don't like channel / Don't recommend). Optional drill-down. |
| Tinder (2012) | iOS/Android | Swipe right (like) / left (nope) → Match → Chat. Binary decision → optional interaction. |
| Hades (2020) | Switch/PC | Keepsake selection — thumbs-up / thumbs-down on which god to pursue, then drill into specific boon preference. |
| Darkest Dungeon 2 (2021) | PC | Relationship system — binary positive/negative interactions between heroes build affinity. Good = buffs, Bad = stress. |
| Fire Emblem: Three Houses (2019) | Switch | Tea time — pick a topic, NPC reacts (positive/neutral/negative). Binary feedback loop that builds support points. |
| Ubisoft post-game surveys (various) | All | "Did you enjoy this mission?" → Yes/No → "What could be better?" (4 options). 30-second feedback loop, high completion rate. |
RG40XXV Button Mapping
- A → Thumbs up (good output / approve / proceed)
- B → Thumbs down (bad output / reject / redo)
- X → "Skip review / neutral" (acknowledge without rating)
- Y → "Why?" — opens a drill-down radial or interview (Pattern 1 or 3)
- L1 → "Thumbs up and archive" (good + save context)
- R1 → "Thumbs down and retry" (bad + auto-rerun with different params)
- D-pad → if drill-down is open, navigate the follow-up choices
Drill-down flow example:
1. Agent output appears on screen.
2. Player presses B (thumbs down).
3. System: "What needs fixing?" → 3 options appear:
- [Too vague / need specifics]
- [Wrong information]
- [Format / presentation issue]
4. Player selects "Too vague / need specifics"
5. System auto-adjusts the agent's prompt to be more specific and re-runs.
Total interaction: B → Down → A. Three inputs, ~2 seconds.
Progressive learning:
Session 1: Player thumbs-downs economic reports 8 times, always drills to "too optimistic"
Session 2: Player thumbs-downs economic report → system auto-offers "Too optimistic?" as pre-selected drill-down
Session 3: System detects pattern and adjusts default prompt for economic reports to be "conservative estimates"
Player never had to configure this explicitly — it emerged from binary feedback.
Good For
- Reviewing agent output at scale — 12 agent reports come in. Quick-scan each: thumbs-up (keep), thumbs-down (reject/redo). Review 12 outputs in 15 seconds.
- Quality gate before dispatch — Agent wants to send output to another agent. Player reviews: thumbs-up (send), thumbs-down (edit first). Single-button gatekeeping.
- Training the system — Binary feedback over time teaches the LLM routing layer what "good" output looks like for THIS player. More valuable than explicit config because it captures revealed preference, not stated preference.
- Fatigue-resistant review — Reviewing 50 agent outputs exhausts with chips or interviews. Thumbs-up/down at scale is sustainable. Think of it as Tinder for agent outputs.
- Mid-combat quick decision — "Unit report: flanking maneuver ready" → thumbs-up (execute) or thumbs-down (hold). No time for menus. Single button press.
Bad For
- Nuance in first-time feedback — Binary doesn't capture "this output is mostly good but the third recommendation is wrong." Mitigated by the drill-down, but the first click loses information.
- False positives in training — If the player thumbs-ups everything without reading (fatigue), the system learns bad preferences. Mitigate with occasional "verify you're paying attention" checks (random thumbs-down on known-good outputs that are intentionally flawed).
- Polarizing complex outputs — Some outputs are genuinely "mixed" — good parts and bad parts interleaved. Binary forces a false dichotomy. Mitigated by the X (neutral/skip) button and drill-down that supports "highlight and comment on specific sections" (future enhancement).
- Low sample size for rare outputs — If the player only sees a "cavalry charge analysis" once every 10 hours, the system never learns their preference for cavalry reports. Wide distribution = good for binary feedback. Narrow distribution = chips or tags are better.
Pixel Budget at 640×480
Feedback bar: 640×64px anchored at bottom of screen (always visible during review)
Thumbs-up icon: 48×48px, left side, green tint
Thumbs-down icon: 48×48px, center, red tint
Skip icon: 32×32px, right side, grey tint
Button labels: "A: Good", "B: Bad", "X: Skip" below icons (10px text)
Drill-down popup: 300×180px centered (appears after B press if not yet drilled)
"What needs fixing?" header + 3-4 options
Option rows: 260×36px with radio-button indicator
Learning indicator: small dot + counter in upper-right ("+12 signals today")
Total screen real estate: ~12% (feedback bar only, persistent)
Drill-down popup: ~30% (temporary overlay, auto-dismisses after selection)
Extremely lightweight — designed to be ambient, not interruptive.
RG40XXV-Specific Notes
- The green/red tint for thumbs up/down MUST have an icon shape difference too (thumbs-up outline vs thumbs-down outline). Don't rely on color alone — the RG40XXV screen's red reproduction is muddy compared to green.
- Place the feedback bar at the BOTTOM of the screen, closest to the thumbs. The RG40XXV is held like a Game Boy — the bottom third of the screen is in the player's natural visual field during review.
- Consider a subtle haptic pulse (if the RG40XXV supports rumble via HDMI-CEC or internal motor — check hardware spec) on thumbs-up to make the "good job" feel satisfying.
- The "learning counter" (+12 signals today) gamifies the review process. This is effective on handhelds where play sessions are shorter and more frequent than on PC.
Pattern Comparison Matrix
| Pattern | Input speed | Expressiveness | Learning curve | 80%+ coverage? | Good at scale? | Fatigue profile |
|---|---|---|---|---|---|---|
| 1. Radial menus | Very fast (1-2 inputs) | Low (4-8 options) | Instant (visual) | Only for known vocab | Excellent (muscle memory) | Very low |
| 2. Chips composition | Fast (3-6 inputs) | High (combinatorial) | Moderate (learn vocab) | Yes (if vocab covers domain) | Good (auto-pilot after learning) | Low |
| 3. Branching interviews | Medium (4-12 inputs) | Medium-High (deep trees) | Low (guided) | Yes (narrowing covers edge cases) | Medium (re-runs feel slow) | Medium |
| 4. T9 predictive text | Slow (8-30 inputs/sec) | Very High (unbounded) | Low (everyone knows T9) | Yes (it's text!) | Very Low (avoid at scale) | High |
| 5. Tags / presets | Fast (2-3 inputs) | Medium (curated list) | Instant (read labels) | Yes (if tags match 80% use case) | Excellent (one-tap) | Very low |
| 6. Thumbs ± drill-down | Very fast (1 input) | Low (binary) | Instant | Yes (coarse filter) | Excellent (Tinder-scale) | Near zero |
Recommended Composite Pattern for D3-TUI
Based on this research and the existing Oracle Chamber implementation, the recommended composite pattern is:
PLAYER WORKFLOW:
1. REVIEW PHASE
→ Thumbs up/down (Pattern 6) for quick-scanning agent output
→ Drill-down via chips (Pattern 2) or tags (Pattern 5) when detail needed
2. CONFIGURATION PHASE
→ Branching interview (Pattern 3) for new/unfamiliar setups
→ Tags (Pattern 5) for on-the-fly configuration tweaks
→ Radial menu (Pattern 1) for in-combat quick actions
3. CORRECTION PHASE
→ Tags (Pattern 5) as first-class correction verbs
→ Chips (Pattern 2) for structured "redo with these constraints"
→ Branching interview (Pattern 3) for complex/novel corrections
4. ROUTING PHASE
→ Radial menu (Pattern 1) for agent selection (8 agents or fewer)
→ Chips (Pattern 2) for prepending routing metadata
5. TEXT FALLBACK (escape hatch only)
→ T9 predictive (Pattern 4) — hidden behind "Custom..." in every pattern
→ Mozart bridge routing for long-form input (off-device)
PRIMARY PATTERNS (always visible): Tags + Thumbs feedback bar
SECONDARY PATTERNS (one button away): Chips + Radial
TERTIARY (hidden): Branching interview (setup wizard only)
ESCAPE HATCH: T9 text (behind "Custom..." in all patterns)
Button Allocation Budget (7 physical buttons + D-pad)
| Button | Primary context | Secondary context (hold + press) |
|---|---|---|
| D-pad | Navigate menus/lists/grids | — |
| A | Confirm / thumbs-up | — |
| B | Cancel / thumbs-down | — |
| X | Skip review / neutral | Toggle text modes (T9 layer) |
| Y | Open tag palette | Hold for tooltip on current item |
| L1 | Previous tab/category | Thumbs-up + archive / previous agent |
| R1 | Next tab/category | Thumbs-down + retry / next agent |
| Start | Pause / main menu | — |
| Select | Map / strategic view | — |
| Menu (RG button) | System menu (save/quit) | — |
Design Principles from Research
-
D-pad is a discrete selector, not a pointer. Don't design free-cursor UIs for a D-pad. Everything should snap to grid points, list rows, or radial slices.
-
"See it, move to it, press A" is the atomic interaction. Fitts' Law applies differently to D-pad: the cost is number of button presses, not pixel distance. A 3×3 grid is 1-4 presses to any cell. A 10-item list is 1-5 presses to any item. Optimize for minimum D-pad presses to reach the 80th percentile option.
-
The right thumb does double duty. D-pad for navigation, then A/B/X/Y for action. The thumb physically moves between them. Patterns that require rapid alternation between D-pad and face buttons (like fighting game combos) cause fatigue on the RG40XXV's stiff D-pad membrane. Use hold-to-continue and sticky selection where possible.
-
Always show the exit path. B = back/undo/cancel must be universally available. Players explore UIs more when they know they can retreat for free. This is the "dark pattern inverse" — make it safe to press buttons.
-
Curate, don't demand. Every pattern should cover ≥80% of likely inputs without text. The remaining 20% should be reachable but not prominent. If more than 20% of player actions require text, redesign the patterns, not the text input.
-
Teach through use, not through tutorial. The first time a player uses radial, show overlay labels. After 3 uses, fade labels to 0% opacity — the positions are muscle memory now. Same pattern for chips (sorted by recency then frequency, not alphabetically).
Research compiled 2026-05-11 by codex. Sources: game design analysis of 30+ console/handheld titles from SNES era to present, existing Oracle Chamber reference implementation, and D-pad-centric input ergonomics literature. Ready for UI spec integration.