M6.17: Variant content + Sheep/Goat split + calling lore + uniform card layout

Species variants populated against the M6.13 schema:
- Lion-Folk sex axis: Mane Guard (male) / Huntress Reflexes (female,
  +5 ft speed + advantage on initiative).
- Elk-Folk sex axis: Antler Combat with 10 ft reach when full rack
  (male, retains seasonal Antler Drag) / Kick (female, prone on crit).
  Base traits restored to doc canon: Herd Coordination (Help → +3) +
  Endurance Runner (40 ft + advantage CON vs forced march); base speed
  bumped 30 → 40; new base detriment Herd Instinct.

Ram-Folk replaced with separate Sheep-Folk + Goat-Folk species rather
than a lineage-axis variant on a single Ram entry. Bovidae now has 4
species. The lineage-axis toggle UI in StepSpecies BuildCard rolled
back; the schema stays for sex-axis (Lion/Elk) which auto-resolves.
ContentLoadTests + HybridCharacterTests updated; Size.cs comment too.

Calling lore: ClassDef gains Description; classes.json populated for
all 8 callings with the doc's italic blockquote + paragraph profile.
StepClass surfaces the description on the card.

Card layout uniformity: StepClass / StepSubclass / StepBackground all
switched to single-column ExpandFill grids (matching StepClade /
StepSpecies). Each card now spans the wizard's content width so the
description and feature chips have room to breathe.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Christopher Wiebe
2026-05-07 22:23:47 -07:00
parent 0ab4715aee
commit 39117a09ed
10 changed files with 121 additions and 174 deletions
+6
View File
@@ -16,6 +16,12 @@ public sealed record ClassDef
[JsonPropertyName("name")]
public string Name { get; init; } = "";
/// <summary>Codex-voice calling description: in-character quote followed
/// by a one-paragraph profile (mirrors CladeDef / SpeciesDef). Surfaced
/// on the Step III calling card.</summary>
[JsonPropertyName("description")]
public string Description { get; init; } = "";
/// <summary>Hit die size: 6 / 8 / 10 / 12.</summary>
[JsonPropertyName("hit_die")]
public int HitDie { get; init; } = 8;
+1 -1
View File
@@ -8,7 +8,7 @@ public enum SizeCategory : byte
{
Tiny = 0, // reserved; no Phase 5 species uses this
Small = 1, // rabbit-folk, housecat-folk, ferret-folk
Medium = 2, // fox-folk, deer-folk, ram-folk, leopard-folk, badger-folk, hare-folk
Medium = 2, // fox-folk, deer-folk, sheep-folk, goat-folk, leopard-folk, badger-folk, hare-folk
MediumLarge = 3, // wolf-folk, elk-folk, lion-folk, wolverine-folk, coyote-folk
Large = 4, // brown bear-folk, polar bear-folk, moose-folk, bull-folk, bison-folk
Huge = 5, // reserved; no Phase 5 species uses this