Design notes
Boot and title
Splash and boot

- Purpose: cover start-up and show the studio and the game's name.
- In / out: the iOS launch screen (a static storyboard, VEL-80) hands over to it; it replaces itself with the Title.
- Shows: the Velan wordmark, "Original Function", a thin progress bar and "Loading".
- Actions: none; taps do nothing.
- States: loading is the screen. Error (game data won't read): "Velan couldn't start. Try again." with Try again, which reruns boot.
- Data: reads the game data, the save slot (to set up the title) and the saved settings, which it applies.
- Notes: aim for under 2 s on device. The
Boot.startLocationdeveloper shortcut skips the title, as today.
Title

- Purpose: start or resume a game.
- In / out: from Splash, or from Save and quit. Out to Continue (Loading), New game, Settings or Practice.
- Shows: title art (a still or a slow camera over Sallowbank), the wordmark, the Continue card when there is a save, New game, Settings, Practice, and the version at the bottom centre.
- Actions: tap the Continue card; New game; Settings; Practice.
- States: no save: no card, so New game moves to the top. Corrupt and newer version: see Continue. Starting: every button disables and the card shows "Loading…" until the fade.
- Data: reads
SaveStore.Load(); the save's location, play time, level and update time; the quest log for the stage line.
Continue

Continue is a card on the Title, not a screen of its own: there is one save slot, so a list would only add a tap.
- Purpose: tell the player where they left off and take them back there.
- In / out: tap the card → Loading → the saved location and spawn point.
- Shows: the location's art thumbnail and name, the main quest's current stage, the level, play time and how long ago it was saved.
- Actions: tap to load.
- States: ready; loading (card dims, other buttons disable); couldn't be read (
SaveSlotStatus.Corrupt): no Continue, with the notice "Your save couldn't be read. New game will replace it."; newer version (NewerVersion): "Saved by a newer version. Update Velan to continue it." with a link to the App Store page; load failed after the tap: the card returns with "Couldn't load. Try again." - Data: reads the save (
SaveGame.Location,PlaytimeSeconds,UpdatedUtc,Profile.Level,Flags). Writes nothing until the game is entered.
New game: confirm replace

- Purpose: stop a player wiping their save by accident.
- In / out: New game when the slot holds anything (
HasSave). Keep my save goes back to the Title; Start over goes on to Body type. - Shows: "Start a new game?" and what will be lost: "Your save in Sallowbank (Level 2, 0:42 played) will be replaced. You can't undo this." A newer-version or corrupt save gets its own line (see the frame).
- Actions: Keep my save, Start over (destructive: heavy outline).
- Data: reads the slot. Nothing is deleted until the new game is written, after the name.
New game: body type

- Purpose: choose the protagonist's body.
- In / out: from Title or Confirm replace; Next to Name; Back to where it came from.
- Shows: "Who are you?", "Step 1 of 2", two cards with the model turning slowly, labelled as today (Male, Female) until Ray decides (open question 2).
- Actions: tap a card to select it; Next (disabled until one is selected).
- States: model loading: the card shows its label and a placeholder silhouette.
- Data: holds the choice in memory;
PlayerProfile.BodyTypeis written with the new game.
New game: name

- Purpose: name the protagonist, whom the villagers address by name.
- In / out: from Body type; Begin creates the save and goes to Loading → Sallowbank (
farm_bed); Back returns to Body type, keeping the choice. - Shows: "What's your name?", "Step 2 of 2", a text field with the iOS keyboard up, a Random button, the rule ("1 to 12 letters…"), Begin.
- Actions: type; Random fills a name from the list; Begin (also the keyboard's Return key).
- States: invalid: an inline message under the field ("Enter a name"; "Letters, spaces, ' and - only") and Begin disabled. Saving: Begin shows a spinner; if the write fails, "Couldn't create your save. Try again."
- Layout: the keyboard covers the lower half in landscape, so the field and Begin sit in the top 200 pt.
- Data: writes
PlayerProfile.NameandBodyTypethroughGameShell.NewGame(which needs a name parameter), and the first save.