# Character Creation — Design Intent This document captures the **originally-planned design** for the character creation flow, extracted verbatim from the Phase 5 implementation plan (`theriapolis-rpg-implementation-plan-phase5.md` §4.2). The current shipping implementation deviates from it in one significant way (collapsed to a single screen instead of a multi-step wizard) — both forms are valid; Design is free to redesign in either direction. ## From the Phase 5 plan, §4.2 (verbatim): > ### 4.2 Character creation > > Screen flow (single Myra panel, multi-step): > > 1. **Clade.** Picker of 7 cards: Canidae / Felidae / Mustelidae / Ursidae / > Cervidae / Bovidae / Leporidae. Each shows ability mods + 1-line trait > summary. > 2. **Species.** Filtered to the selected clade. Shows size, ability mods, > defining trait. > 3. **Class.** All 8. Shows hit die, primary ability, level-1 feature > names. Recommends species/class fits (informational only — no > restrictions). > 4. **Background.** All 12. Skill proficiencies + tool proficiencies + > feature text. Mechanical effects of features are stubbed for Phase 5. > 5. **Stats.** Two methods, player choice: > - **Standard array:** 15, 14, 13, 12, 10, 8 (assignable). Default. > - **Roll 4d6 drop lowest** ×6, assign. Each *Reroll* press derives a > fresh seed: > ``` > statRollSeed = worldSeed ^ RNG_STAT_ROLL ^ msSinceGameStart > ``` > `msSinceGameStart` is wall-clock ms since the process started. > `CharacterBuilder.RollAbilityScores` accepts an `ulong? msOverride > = null` parameter; when non-null, that value is used in place of > the live ms snapshot. Tests use the override; the game does not. > This gives true non-reproducibility across plays, reproducibility > within tests, and worldseed-anchored variation. > 6. **Skills.** Class lists `skillsChoose` and `skillOptions`. Player > picks N from the offered list (in addition to background's two free). > 7. **Name + confirm.** Default "Wanderer". On confirm: `CharacterBuilder` > produces a `Character`, `ActorManager.SpawnPlayer` is called with > that character attached. > > **Validation:** every step's Next button is disabled until the field is > valid. `CharacterBuilder.TryBuild(out string error)` is the single > canonical check. ## What shipped vs. what was planned The Phase 5 M2 implementation collapsed the 7-step wizard into a **single panel with all selectors visible at once** because: - Defaults are sensible enough that pressing Confirm immediately produces a working character — no step is strictly required. - All inputs are independent (changing class doesn't invalidate clade), so a wizard doesn't actually serialize anything. - A single screen is faster to ship and easier to test in M2. The data model and validation already support either presentation. A multi-step wizard with progressive disclosure (per the original plan) is a fully valid redesign target. So is a denser single-screen layout with better visual hierarchy. So is a hybrid (e.g. two screens: identity, then mechanics). ## Constraints (don't redesign these out) - **Stats seeding rule** — the formula `statRollSeed = worldSeed ^ RNG_STAT_ROLL ^ msSinceGameStart` is locked. Each Reroll press must produce a new outcome (player rerolls for a better roll; we deliberately allow this rather than name-locking). Tests pin the seed via an override parameter. - **Validation is canonical via `CharacterBuilder.Validate(out string error)`** — UI displays whatever message the builder produces; UI does not invent its own validation rules. - **Skill count is class-driven** — `ClassDef.SkillsChoose` says how many skills the player picks from `ClassDef.SkillOptions`. Background skills are added automatically and don't count toward this quota. - **Stats are entered as a 6-value block and assigned to abilities** — whether via Standard Array drag/click assignment or a 4d6 roll, the underlying data is six integers in (STR, DEX, CON, INT, WIS, CHA) order. Clade and species mods are applied AFTER assignment (in the builder), so the screen shows both the base value and the post-mod final. - **Name field is required and free-text.** Default "Wanderer". No length cap enforced beyond Myra's TextBox default. ## Out of scope for this design pass - Hybrid characters (two parent clades). The data layer doesn't support them yet (`Character.Clade` is a single ref) and they're explicitly Phase 6. - Subclass selection at character creation. The data is loaded but Phase 5 defers all subclass mechanics to Phase 5.5+. - Backstory / personality fields beyond the suggested-personality string on each background. - Save slot picker (separate flow — `SaveLoadScreen`). - Multiplayer / co-op character creation. ## What "good" looks like A redesign that: - Keeps "press Confirm immediately and get a working character" working — defaults are part of the contract. - Surfaces clade traits, species traits, class level-1 features, and background features at the moment of selection (not buried two clicks away). - Communicates the relationship between clade ability mods and species ability mods clearly (additive — both apply). - Makes the difference between Standard Array and 4d6 rolling visually obvious so players don't accidentally lock in random rolls. - Gives the rolled-stats path a "show previous roll for comparison" affordance. - Shows the starting kit (weapons, armor, gear from `ClassDef.StartingKit`) before the player commits.