Design notes
In the field
Field HUD

- Purpose: everything on screen while the player walks around a location.
- In / out: on arriving at a location. It hides during dialogue, field casts, battles and menus, and comes back after them.
- Shows:
- Objective tracker (top-left): the tracked quest's title, its current stage and an arrow towards the stage's target. Tapping it opens the Journal on that quest.
- Interaction prompt (top-centre): what the player is next to, as a verb and an object ("Open · Farmhouse door", "Talk · Aske", "To The Sallow Road"). Tapping it uses that thing. 48 pt tall, unlike today's 33 pt.
- Map and Pause (top-right), 44 pt each.
- Exit signs over exits in the world, as today.
- Movement stick: appears where the left thumb lands in the left half (right half when left-handed) and goes when it lifts.
- Actions: tap the prompt; tap the tracker, Map or Pause; tap the world to walk to or use what was tapped (
InteractionTaps); drag to move. - States: no tracked quest: the tracker hides. Nothing nearby: the prompt hides. Busy (
InteractionSystembusy): the prompt and taps are off. - Data: reads the tracked quest and
QuestLog, the interaction target (InteractionSystem), the location's exits.
Toasts

- Purpose: tell the player something changed without stopping play.
- Kinds: Quest updated (new quest, new stage, finished), Spell learned (with its glyph and colour), Item received (icon, name, count). Also small notices such as "You got away" after fleeing.
- In / out: they slide in at the top centre, under the prompt, stay 3 s (4 s at A++) and slide out. Tap to open what it's about (the Journal on that quest, the spell's detail, the item in the Inventory); swipe up to dismiss.
- Rules: one at a time; others queue. None appears during a cast, a dialogue choice or a battle; they wait. Toasts never pause the game.
- Data: listens to
QuestLog.Changed, a spell-learned event and an item-received event (section 4).
Dialogue

- Purpose: people talking, and the player's choices.
- In / out: a Yarn node starts it (an interaction, a trigger, a cutscene); it ends when the node ends. It can open a Shop, a Field cast or a battle through commands.
- Shows: the box between the thumbs (x 202–642, 100 pt tall), the speaker's name and the typed line; a portrait standing on the box's left edge, rising into the stage; ▼ when the line is fully shown. Narration has no name and no portrait. Choices stack upward from the box on the right, first choice on top, 48 pt each, at most four; the box keeps showing the question. Log and Pause sit top-right.
- Actions: tap the box to finish the line, then to move on; tap a choice; Log shows the last 50 lines in a scrolling panel (paused).
- States: between lines during a cutscene command, the box hides (
DialogueBox.Hide). No portrait for a speaker: the box shifts its text left and leaves no blank slot. - Data: reads Yarn lines and options, the speaker's character data and portrait set, the line's mood tag, and the text speed and size settings.
Field-cast prompt

- Purpose: a spell drawn outside battle because the story asks for it:
<<prompt_cast>>(cast it once) or<<learn_spell>>(trace it until learned). - In / out: a dialogue command opens it; it closes 0.8 s after the cast or the last trace (
FieldCast.DoneSeconds). - Shows: the world dimmed with a vignette, so it's clear play has stopped; a panel top-centre ("Trace Coil" with pips ●●○ and "Trace both shapes. Breath is not timed.", or "Cast Repel" without pips); each thumb's glyph prompt in its drawing zone, at its true size, in the spell's colour.
- Actions: draw. Pause stays available. There is no Skip: these casts are part of the story.
- States: miss: the glyph shakes; after a few misses the bead slows and the strokes brighten (
FieldCastRules). Done: "Coil learned" and the prompt fades. - Data: reads the spell; writes the learned spell (and its toast) through
GameData.
Shop

- Purpose: buy and sell with a shopkeeper (Halfway's market first, per VEL-61 and the Items and Economy tab).
- In / out: a dialogue command (
<<open_shop halfway_odds_and_ends>>, the Items and Economy tab's command) opens it; Leave goes back to the dialogue or the field. It pauses the game. - Shows: the shopkeeper's portrait, the shop's name and a line from them; Buy, Sell and Buy back tabs; the player's copper; a list of goods (name, short effect, price after the standing modifier on that Row, with the catalogue price struck through when it differs; sold-out items greyed; a commission shows its materials, such as "Mirror Grit 2/3"); the selected item's detail (icon, name, type, how many you have, effect); a quantity stepper; the Buy or Sell button with the total.
- Actions: pick an item, set the quantity, Buy or Sell. A sale over 50 copper, or selling the last of something, asks first (Confirm dialog).
- States: not enough copper: button disabled, "You need 6 more". Too many to carry: there is no bag limit; a stack past its cap is sold at once (Items and Economy), and the button says so ("Buy 3 · 1 sold on"). Nothing to sell: "Nothing you have is worth anything here." Key items never appear under Sell.
- Data: reads the shop's stock and prices (
Data/Shops/<id>.json), the inventory, the purse and the player's standing (rep.evaneon the Pale Row,rep.facetson the Amber Row); writes the inventory and the purse.