Files
TheriapolisV3/_design_handoff/character_creation/IMPLEMENTATION_STATUS.md
T
Christopher Wiebe b451f83174 Initial commit: Theriapolis baseline at port/godot branch point
Captures the pre-Godot-port state of the codebase. This is the rollback
anchor for the Godot port (M0 of theriapolis-rpg-implementation-plan-godot-port.md).
All Phase 0 through Phase 6.5 work is included; Phase 7 is in flight.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-30 20:40:51 -07:00

6.7 KiB
Raw Blame History

Character Creation — Implementation Status

Last updated: 2026-04-25 Source design: from_design/ (React/HTML/CSS prototype produced by Claude Design) Implementation: Theriapolis.Game/Screens/CharacterCreationScreen.cs Helpers: Theriapolis.Game/UI/CodexCopy.cs (skill / language / item / class-clade copy)

The React prototype in from_design/ is the canonical design reference. Keep it intact as a snapshot; this document records what the C# / Myra port preserves, adapts, and defers.

Faithful ports ✓

  • 7-step wizard structure — Clade → Species → Calling → History → Abilities → Skills → Sign. Matches the design's STEPS array in app.jsx.
  • Stepper at top with locked / active / completed states — uses ✓ / ✕ / Roman numerals as visual marks. Locked steps are disabled buttons; the user can always click backward to revisit completed folios.
  • Aside summary panel on the right — name, lineage, calling+history, abilities (with mods applied), skills counter. Updates live as the player builds the character.
  • Validation contract — every step has ValidateStep(int) → string?; Next is disabled while the current step is invalid; Confirm is disabled unless every step is valid. Messages match the design's vocabulary.
  • All four content collections — clades, species, classes, backgrounds — rendered from the same JSON the design used. Filtering rules (species filtered to selected clade, skills filtered to class options) match.
  • Class↔clade recommendations — the "★ Suits Clade" badge on the Calling cards uses the same lookup table from the design's CLASS_CLADE_REC. Informational only; doesn't gate selection.
  • Standard Array vs 4d6-drop-lowest — both methods supported. The roll seed formula worldSeed ^ RNG_STAT_ROLL ^ msSinceGameStart (locked by the Phase 5 plan §4.2 / DESIGN_INTENT.md) is preserved; tests inject msOverride.
  • Auto-assign + Clear — match the design's affordances. Auto-assign honours already-pinned abilities and fills the rest from the pool by class-primary priority.
  • Roll history — last 3 prior rolls displayed when in roll mode (just like the React prototype's "Previous rolls:" line).
  • Skills grouped by ability — same layout. Background-sealed skills are pre-checked and locked; class-pickable skills show a counter ("N / required chosen"); skills not on the class's offered list are disabled with [—] markers.
  • Review step — name input + summary blocks for lineage, calling+history, final abilities, skills, starting kit. Each block has an "Edit " link back to the relevant earlier step. Starting kit reads from ClassDef.StartingKit (same as M3).

Adapted (not 1:1, but functionally equivalent)

  • Drag-and-drop stat assignment → click-pick-then-click-place. Myra doesn't ship native drag-drop. The pool shows clickable value buttons; a selected value is bracketed ([15]); the next ability slot click consumes it. Click a filled slot to return its value to the pool. Same end state as drag-drop; one extra click per assignment.
  • Hover popovers → "Selected" detail panel. Trait/skill/feature descriptions surface in the bottom of the aside panel when the relevant card is clicked, instead of on hover. Myra has no rich tooltip system; building one would mean a custom popup widget. Click-to-show is a reasonable substitute for keyboard-and-controller futures too.
  • Card grid with wrapping → fixed-width buttons in rows of 2 or 3. Myra has no native flex-wrap container, so each step's grid is hand-laid with HorizontalStackPanels of fixed-width TextButtons. Each card is a multi-line button (name on line 1, mods/stats on line 2, features/traits on line 3). Less pretty than the design's framed cards but information-equivalent.
  • Predator/prey clade grouping — kept as section headers between rows ("── Predators ──", "── Prey ──") instead of separately styled groups, since Myra has no rich section-divider widget.
  • Folio numerals + "Codex of Becoming" header — preserved as text ("Folio I of VII — Clade") even without serif fonts to render it ceremonial. The aesthetic gap is the next item.

Deferred (visual / aesthetic gap)

The React prototype's "illuminated codex" art direction — parchment-paper background, gilded accents (--gild, --seal), serif display fonts (Cormorant Garamond, Cinzel), monospace tags (JetBrains Mono), section rules with ornament glyphs — is not portable to Myra without custom theming work.

Myra theming requires:

  1. A theme.json declaring colors + brushes
  2. Custom SpriteFont builds for the serif/display fonts
  3. Optional 9-slice background brushes for card frames
  4. A Stylesheet instance the Desktop loads at startup

For M5 ship-point, the C# wizard uses Myra's default fonts + a semi-transparent dark panel (Color(15, 15, 25, 220)). The visual polish is M6+ theming work — when we tackle it, the design's index.html <style> block (font choices, color variables, density tokens) is the source of truth.

Specific gaps worth tracking:

  • No portrait component (the design has a placeholder silhouette/heraldry panel in the aside).
  • No "scent aura" highlight behind selected cards.
  • No bonus pill with sourced popover — bonus tags currently render as text "(+1 from clade+species)" instead of clickable chips.
  • No language hover chips — language list shows as a plain comma- separated string.
  • No fonts that match the codex tone — Myra default font only.

Out of scope (matches the design's "Known caveats")

  • No save/load mid-creation — wizard is in-memory; close before confirm = start over. Same as the React prototype.
  • No subclass selection — both implementations defer this to a level-up flow; subclass features are filtered out of the displayed level-1 feature list.
  • No tool/weapon proficiency display — present in data, not surfaced.
  • No equipment substitution — the starting kit is what the class config says it is; player can't swap items at creation time.

How to refresh this comparison

  1. If Claude Design ships an updated prototype: replace the contents of from_design/ with the new zip, then update this file and the matching sections of IMPLEMENTATION_STATUS.md.
  2. If the C# implementation gains a feature from the "Deferred" list, move that bullet up to "Faithful ports" or "Adapted".
  3. If the underlying schema changes (e.g. a new field on ClassDef), refresh the snapshot in MANIFEST.md's file list and re-run the bundled refresh command.