The Velan Codex

Design notes

Data each screen needs that doesn't exist yet

NeedForWhere it should liveDepends on
Player name rules: 1 to 12 characters, letters, spaces, ' and -; a list of random namesNew game: nameVelan.Save validation, a names list in Data/Open question 1
Per-device settings: music, effects and ambience volumes, haptics, text speed, text size, handedness, thumb swap, high-contrast glyphs, reduced motionSettings, and every screen that honours themPlayerPrefs keys velan.settings.*, like today's velan.settings.volume; not in the saveAudio mixer groups (VEL-84)
The main quest's current stage, for the save cardContinue cardDerived from QuestLog and the saved flags; quests need a category (main or side)Quest JSON field
Location art and a short subtitle (region, side)Continue card, loading, map cardsart and subtitle fields in Data/Locations/<id>.jsonVEL-65, VEL-80
Tracked questObjective tracker, journal, mapTrackedQuestId in the saveVelan.Save change
Where each quest stage happens (location id and marker)Tracker direction arrow, map pins, "On map"target: { location, marker } on each stage in Data/Quests/*.jsonQuest JSON field
Quest giver and finish orderJournalgiver in quest JSON; finished quests in the order they finished (a list or timestamps in the save)Velan.Story, Velan.Save
Events for "spell learned" and "item received"ToastsQuestLog.Changed exists; a learned-spell event on GameData; an inventory eventInventory (VEL-61)
Speaker to character, and a portrait set with expressionsDialogueData/Characters/<id>.json (name, portrait set); Yarn line tags such as #mood:worriedVEL-70 (character data), VEL-64 (portraits)
Rewards: item drops per encounter (battles never pay copper); a level curve (XP per level)Battle resultsdrops in Data/Encounters/*.json; a level table in Data/VEL-61; level curve is new
A tip for each defeatDefeattips per enemy in Data/Enemies/*.jsonBestiary (VEL-59)
World map: art, each place's position on it, routes, discovered and visited flagsWorld mapData/Map/world.json; flags map.discovered.<id> and map.visited.<id>VEL-65 / VEL-66 art; VEL-76
Local map: a top-down image per location, the world-to-image mapping, markers (exits, quest targets, shops, people)Local mapA render tool in the Editor that writes the image and bounds; markers from the location JSON's interactables and exits plus a mapMarkers listVEL-76
Spell effect summary and lore line; which spells show as unknown before they are foundSpell book, detaillore (and the effect, derived from the spell's effects) in Data/Spells/*.json; the unknown list from the spell roadmapVEL-60
Practice mode: a cast without a battlePracticeReuses FieldCast (learn and prompt modes) with a free mode that only scoresCode, no data
Items, stacks, categories, copperInventory, item detail, shop, rewards, toastsCodex/items-and-economy.md and its save-model specVEL-61
Shops: what each sells, prices, stockShopData/Shops/<id>.jsonVEL-61
Letters and documents: title, sender, addressee, seal, pages; read and opened flagsLetter viewerData/Documents/<id>.json; key items point to a document idVEL-61; addressee names are still open (Story Bible)
Loading tipsLoadingData/Tips/tips.jsonWriting

From Game Screens › Data each screen needs that doesn't exist yet