Files
TheriapolisV3/_design_handoff/character_creation/DESIGN_INTENT.md
T

113 lines
5.5 KiB
Markdown
Raw Normal View History

# 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.