Files
code_of_conquest_dnd/docs/superpowers/specs/2026-07-11-races-and-classes-design.md
Phillip Tarrant bb8097929a docs(canon): name the last two callings — Reaver, Bloodsworn
All seven callings are now named; no [CANON-TBD] remains in the specs.

Reaver (Barbarian). To reave is to raid — occupational, like Sellsword and
Trapper, naming what he does for money rather than what he is inside. That is
the rule the five mock names already obeyed and that §8's own list broke: a
calling is what a village calls you, not what a rulebook calls you. Bearsark
and Wildman were rejected for naming a condition; Breaker for being generic.

Bloodsworn (Warlock) was not a new coinage — the cosmology minted it a day
after the races spec was written ("what the Margreave calls bloodsworn",
rule.blood-price), and the cosmology spec had already applied it. It is the
exact FTH-axis mirror of Bonesetter: one channels the Warden, one pacts a king
of the Seven. Accepted cost, recorded in the spec: alone among the callings it
names a condition rather than a trade — the villain who pacts Ghaul is
bloodsworn too. A second, occupational word (Cursewright, Hexman) was
considered and rejected as a distinction the player will never feel.

Also retires the stale "reconcile class names" note on M4 and records the two
contract migrations that milestone owes: the canon log's `race` field, and the
deserter origin's dead allowed_classes.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QYa9u7Kdxv5gX4AnwWexy8
2026-07-12 19:34:26 -05:00

14 KiB
Raw Blame History

Races & Classes — mechanical design

Date: 2026-07-11 Status: Approved (design). Feeds M4 (character creation); combat kit hands off to M5. Charter refs: §7 (Luck), §8 (stats & classes), §10 (combat), §11 (canon log), §16/§17 (mockups + the flagged reconciles).

This spec settles the mechanics of races and callings so M4 character creation has rules to read. It resolves the §17 class-name reconcile (charter §8 vs the mock's callings) and gives every race trait a concrete rule. Lore/flavor is deliberately out of scope — it lives in a separate canon/worldbuilding effort. The two calling names this spec left open are now settled (Reaver ⚔ / Bloodsworn 🔥, §4 Naming); no [CANON-TBD] remains here.

Scope choice (agreed): full mechanical spec — everything creation + the character sheet read. The combat ability kit is deferred to M5 (the action economy, damage resolution, and DC bands aren't designed yet); this spec marks that seam everywhere it touches it.


1. Foundations (the resolution spine)

Attributes (6)

STR · DEX · CON · FTH · MAG · LCK. Modifier = floor((score 10) / 2) (matches the Character Sheet mock's "score N" + modifier display). FTH/MAG replace WIS/INT (§8).

Saving throws (5, not 6)

One save per attribute except LCK. LCK is never a save and never rolled — it is the borderline-selector (§7). Saves: STR · DEX · CON · FTH · MAG. This keeps §7 airtight: LCK cannot leak onto the character sheet as a number.

Resolution model — deterministic + Luck-selects-borderline

The check model §7 actually describes (chosen over a random d20, which would reintroduce the per-roll variance §7 exists to remove):

check value = ability_mod + (proficiency_bonus if proficient) + situational
compare to a DC:
  value  DC ≥ +band   → success   (deterministic, repeatable, plannable)
  value  DC ≤ band   → failure   (deterministic, repeatable)
  within the band      → LCK selects the branch (§7)

band size is M5 tuning. Consequences:

  • LCK is the only randomizer in the game. Every other number is reproducible.
  • Race/class features are flat modifiers that shift you across thresholds — never dice, never advantage/disadvantage. (Mock talents using "advantage" language, e.g. Reckless Swing, translate to flat mods.)
  • Death saves become the purest expression of the model: a downed character sits in the borderline band and LCK selects stabilize-vs-slip. No new system; reuses the band; delivers §7's whole "am I cursed?" thesis at the highest-stakes moment.

HP, MP, and the anti-spam gate

  • HP: L1 max HP = hit_die_max + CON_mod. Per-class hit die (§4). Level curve → M5.
  • MP: caster callings (FTH/MAG-primary) get an MP pool sized off their casting stat; martials have 0 MP. Pool formula + spell costs → M5.
  • The spam-gate is the action economy, not MP. One Action + one Bonus + one Move per turn (§10) caps everyone at one big thing per turn. On top of that:
    • Casters spend MP — a depleting reservoir (decision: attrition — dump or ration).
    • Martials use cooldowns — a recharging cadence (decision: rhythm — is it back yet?).
    • Basic attack is the free, repeatable option; signature abilities compete for the one Action.

This is why §10 says the tactics live "in the action economy and resources, not the map." With no grid, decisions live in what you spend your Action on and whether your good options are available (MP left / cooldown ready).

Proficiency bonus

+2 at level 1 (mock). Scales with level — curve deferred (creation is L1 only).


2. The six attributes — roles + skill map

Adopts the mock's 9 skills verbatim. LCK owns no save, no skill, no display.

Attr Save Skills Combat role Out-of-combat (§8)
STR STR Athletics, Intimidation Melee attack + damage Carry, forcing things
DEX DEX Stealth, Sleight of Hand, Acrobatics Initiative, finesse/ranged attack, light-armor AC Sleight, escape
CON CON Endurance HP pool Resist poison / exhaustion / infection (affliction track)
FTH FTH Perception, Faith-Lore Divine casting, spell DC Conviction in dialogue, awareness
MAG MAG Sorcery Arcane casting, spell DC Recall, deduction
LCK Selects borderline branches, crit thresholds Fires Improviser; boon vs humiliation
  • Perception under FTH (not a standalone WIS) honors §8's FTH/MAG-replace-WIS/INT — a Priest/Bonesetter is also the party's best lookout, giving FTH its out-of-combat teeth.
  • Death saves = LCK (see §1).

Flags (adopting the mock as-is, noting thinness — not expanding now):

  • MAG has only 1 skill (Sorcery), CON only 1 (Endurance). §8 says MAG governs recall/ deduction — an "Arcana/Lore" skill would fit. Deferred to a later content pass.
  • SPEED (mock's 30', "Old Knee 5") has no grid to matter on (§10) → treated as narrative-only flavor (chases/fleeing in prose), not a tactical value.

3. Races (4)

Under features only, no stat mods, and flat modifiers. Each race = one headline feature with real teeth + one minor feature. All upside; downsides live in flavor.

Nightsight ruling (resolves darkvision/low-light with no light grid): the character ignores darkness-based penalties on checks — a situational flat modifier (others take X in the dark, you take 0). Bites on the DM's exploration awareness checks.

Race Headline feature Minor feature Mock trait resolved
Human +1 to all 5 saves +1 skill proficiency of choice at creation "+1 to every save"
Elf Perception proficiency (+2) Nightsight "low-light sight · keen senses"
Dwarf +2 to CON saves vs poison & the infection/affliction track (may also halve duration) Nightsight "poison resist · darkvision"
Beastfolk Natural claws — innate unarmed attack (STR or DEX, light-weapon damage, always available even disarmed/grappled) Keen scent — flat situational bonus to detect hidden / track by smell "natural claws · keen scent"
  • Dwarf's resist maps onto the mock's own affliction track ("Infected Bite: CON save each dawn") — the character who shrugs off the rot the gritty tone (§3) inflicts.
  • Beastfolk is the only race with a combat-action feature (claws) — the aggressive pick.
  • No race touches an attribute score — keeps the point-buy pure.
  • Human's bonus skill is an addition beyond the mock's bare "+1 all saves" (agreed: keep it) so Human = "the adaptable one" with an actual creation choice.
  • Beastfolk's "taxed twice at every gate" (a mechanical shop/disposition downside) is deferred to the canon session + the shop economy (M8). Race mechanics stay upside-only for now.

4. Callings (7)

The full charter-7 (§8), gritty calling names (§17 reconcile resolved in favor of the mock's village-names, which honor §8's "named for the role in the world" better than §8's own list). All seven are named — the last two were settled at the canon session (2026-07-12); see Naming below.

Static kit only — the combat ability kit (the bar) is deferred to M5. This is what creation + the character sheet read.

Calling Archetype Primary Hit die Save profs Skill profs Resource Armor L1 talent (stub)
Sellsword Fighter STR d10 STR, CON 2 Cooldowns Heavy Second Wind — once/rest, claw back HP
Reaver Barbarian STR d12 STR, CON 2 Cooldowns Medium Blood Fury — rage: soak + hit harder, per-encounter
Cutpurse Rogue DEX d8 DEX, MAG 4 Cooldowns Light Backstab — bonus dmg vs an unaware/first-strike target
Trapper Ranger DEX d10 DEX, CON 3 Cooldowns Light Set Snare — place a control trap, cooldown
Hedge-Mage Wizard MAG d6 MAG, FTH 2 MP (MAG) None Hexbolt — signature MP-free arcane basic
Bonesetter Cleric FTH d8 FTH, CON 2 MP (FTH) Medium Mend — heal HP, gritty field-medic
Bloodsworn 🔥 Warlock FTH d8 FTH, MAG 2 MP (FTH) Light Pact Mark — curse a target, FTH/MP

Naming (settled 2026-07-12)

The rule the five mock names already obeyed: a calling is what a village calls you, not what a rulebook calls you (§8's own principle, which §8's own list broke). They are occupational, plain, and faintly contemptuous — Cutpurse, not Assassin; Bonesetter, not Priest.

  • Reaver (Barbarian). To reave is to raid and plunder — it names what he does for money, like Sellsword and Trapper, rather than what he is inside. A village says it with fear and no admiration. Rejected: Bearsark and Wildman (vivid, but they name a condition and break the occupational pattern), Breaker (too generic).

  • Bloodsworn (Warlock). Not a new coinage — the cosmology already minted it, one day after this spec was written: "A mortal willing to strike that bargain becomes what the Margreave calls bloodsworn" (rule.blood-price). It is the exact FTH-axis mirror of Bonesetter: one channels the Warden, one pacts a king of the Seven. Known and accepted cost: unlike every other calling, this word names a condition rather than a trade — the villain who pacts Ghaul is bloodsworn too. A separate occupational name for the calling (Cursewright, Hexman) was considered and rejected: a second word for one idea buys a distinction the player will never feel, and this one is already in canon and in the build output.

  • Two STR martials differentiated by shape, not stat: Sellsword = disciplined, heavy armor + d10 + sustain (Second Wind); the Reaver = reckless, d12 + medium armor + rage (soak via fury, not plate). Same primary, opposite feel.

  • Cutpurse gets 4 skills (breadth is the rogue's identity); Trapper 3; others 2. Drawn from the class's stat-appropriate slice of the 9-skill list, plus what race grants.

  • Casters (Hedge-Mage / Bonesetter / Bloodsworn) have MP; martials have 0 and live on cooldowns. MP pool formula → M5.

  • Backstab — the mock's "advantage" phrasing becomes a flat bonus vs an unaware/ first-strike target under the resolution model; no positioning needed, fits gridless (§10).

  • Trapper is a pure martial (traps = cooldown gadgets, no MP) — the D&D half-caster ranger is deliberately not ported, to keep spell math out of the POC.

  • Armor categories (Heavy/Medium/Light/None) are proficiency categories; specific gear comes from origin grants + the item system (M7).

  • L1 talents are stubs — full kit at M5.


5. Character-creation integration (M4) + canon-log contract

Folds into the proven point-buy model (rolled base + additive spend, LCK hidden).

Order of operations:

  1. Roll base attributes — 3d6 with floors per stat. LCK rolled hidden (avg of 5 + origin luck_modifier, §7) — never shown.
  2. Spend the +3 additive pool — additive only; LCK untouchable.
  3. Apply race — features only, no stat mods (saves / skill profs / Nightsight / claws).
  4. Apply calling — hit die → HP = hit_die_max + CON_mod; save profs; skill profs; MP pool if caster (from casting stat); armor category; L1 talent.
  5. Origin overlaysbuild_constraints.allowed_classes gates offered callings; luck_modifier → LCK; inventory/disposition grants.

Derived at creation (all deterministic): HP, MP, AC (base + armor + DEX), the 5 saves, 9 skills, initiative (DEX), spell DC for casters (8 + prof + casting_mod), prof bonus +2.

Two contract migrations this forces (flagged, do them at M4, not silently):

  • Canon log gains a race field. §11's player block is {name, class, luck_descriptor} today; the Narrator/NPC need race to describe the player. Small schema bump to the M0 contract (docs/schemas/canon-log.schema.json). The full mechanical sheet stays in client GameState — the canon log carries only what the AI narrates from (name, race, class, luck_descriptor).
  • The deserter origin is stale. content/origins/deserter.json has allowed_classes: ["sellsword","assassin","priest"] — old charter names. Migrate to the new calling ids (cutpurse/bonesetter/etc.) and the 7-calling roster. Origins gate races only if they choose to (allowed_races omitted = all).

Creation stays 100% deterministic except the hidden LCK roll — every derived number is reproducible from the choices, which is exactly what §10's per-encounter seeding needs. Character creation is the first place seeding matters.


6. Explicitly deferred (the seams)

Nothing here silently pre-empts a later brainstorm.

→ M5 (combat):

  • Full ability kits / the bar; MP pool formula + spell + cooldown costs.
  • The damage-determinism reconcile (§7/§10 vs the Combat HUD mock's ranges).
  • The borderline band size (DC bands).
  • Leveling — hit-die progression, prof-bonus scaling, talent tiers, XP curve. (Creation is L1.) The ceiling is no longer open: the seven-campaign saga (spec) fixes it at L20 across 7 tiers (tier N ≈ levels 3N2 … 3N). M5 designs the curve to that ceiling; it does not choose it. An open-ended curve is unsolvable and forecloses the saga.

→ Canon session (lore):

  • The two [CANON-TBD] calling namessettled 2026-07-12: Reaver ⚔ / Bloodsworn 🔥. See Naming, §4.
  • All race/calling flavor, descriptions, origin fragments.
  • The beastfolk social tax (mechanical downside, ties to M8 shop).

→ Later content pass:

  • MAG/CON skill thinness (an Arcana/Lore skill).
  • SPEED as narrative-only flavor.

§2 accounting

Every system here is state (code owns it). Races and callings are code-owned data the AI only narrates from — the canon log's new race field is the sole text-facing surface, and it carries a value code decided. No AI system mutates any of this. Consistent with §2.