Commit Graph
3 Commits
Author SHA1 Message Date
slaguru666andClaude Opus 5 ddc4f99ff4 Hit locations reach ordinary combat, and creatures get a body
THE DEFECT. locationFor had ONE caller in the engine, hitLocationRoll, and
hitLocationRoll was called from fall, burn, detonate and burstAttack. Falling,
fire, explosions and automatic fire. Nothing else. rollWeaponDamage rolled dice,
printed a number and returned it, so the chat Damage button, the character
sheet's damage button and the item sheet's all stopped there.

A grenade knew which arm it took off. A sword did not.

Every individual piece was already correct - the tables, per-location armour and
coverage, disable and destroy thresholds, Major Wound, dying, death, the figure
on the sheet. They simply were not joined up, which is why this reads as a wiring
change rather than a new subsystem.

- rollWeaponDamage now carries through to hitLocationRoll: it rolls the location,
  applies that location's armour, applies the wound, and handles the rest through
  the machinery that already owned it. Nothing here re-implements any of that
- locationModeFor picks the melee or ranged column from the weapon's class. The
  two columns have always differed and nothing was choosing between them
- with no target it does exactly what it did before and SAYS SO on a card, rather
  than failing quietly
- burstAttack opts out with locate:false - it rolls its own location per round,
  and letting both fire would have applied every round of a burst twice

BODY PLANS. Two new tables: quadruped (four legs, fore/hindquarters, neck, a head
that is hard to reach) and winged (that, plus wings). Forequarters are the vital.
DISABLE EITHER WING AND IT CANNOT FLY, which is the fight a party can win.
Barghest, Kelpie and Church grim were all species "baseline" - a black dog, a
horse and a grave-hound, each hit-located with two arms and a chest. Fixed. Added
"The supporter", a winged heraldic beast, so the new table is exercised by real
content instead of existing unused.

Body plan is a NEW FIELD, not a species. A bear is not a playable people with
characteristic dice and talents, so creature specs take bodyPlan and the playable
species list is untouched.

THE NPC SHEET had no hit locations at all - 102 lines against the character
sheet's 627 - while every NPC in the game had them derived and wired to
consequences. It now carries the body-plan selector, the figure, the per-location
table, the condition and a GROUNDED flag. The sheet class already extended the
character sheet, so it already HAD the context; the template never used it.

FOUND IN PASSING, by the new guard: kind "body" - the abdomen, the trunk, the
hindquarters - did nothing whatever. Its printed effect has always promised "-30%
to all Physical actions and bleeding 1 hit point per round until First Aid" and
the code delivered none of it, on every body plan including the humanoid default.
It now bleeds 1, or 2 destroyed, exactly as bodyX says.

NEW GUARD: check-anatomy. Every body plan must cover 1-20 exactly once in BOTH
modes, every location must be drawn and every drawn shape must be a location, and
every kind must be one locationEffectsFor acts on, has effect text for, and has a
destruction outcome. Verified it fails on a d20 gap, a shapeless limb and an
unhandled kind before wiring it in. Ninth guard.

VERIFIED IN A RUNNING FOUNDRY, not just unit-tested: melee bar reads the Melee
column and the rifle reads Ranged on the same creature; forequarters graded as a
vital hit; a maxed wing set flightLost and the sheet said GROUNDED; the real chat
Damage button rolled 1D20 15, found the right foreleg, applied 12 through armour,
disabled the leg and took the dog from 16 to 4; and with nothing targeted nothing
was touched.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-12 15:46:11 +01:00
slaguru666andClaude Opus 5 f88c31649c The bestiary's first non-human creatures
vesh and cadence have had complete hit-location tables, body geometry, species talents
and location effects since they were written, and no creature had ever used either. So
none of that had run outside the character generator, and the whole bestiary was
hit-located as a person - including a black dog and a stack of paper.

THE CHOIR IS A CADENCE. It always was: its tactics say "run them as ELEVEN separate
bodies with one initiative between them", which is Distributed and Quorum described in
prose because the species that models it had no users. Retagged, and given the two
talents. No scenario prose refers to it, so nothing else moves.

PRECEDENT is new, and is a Vesh - the first. Built to exercise what makes the species
different rather than to be another sack of hit points: no head, so no fight against
one ends on a lucky roll, and a sensory ridge for a vital that runs the length of its
back and is correspondingly easy to hit. It is also not hostile, which is the point;
the encounter is a conversation with something that answers questions about an event
that has not happened yet.

Two things left deliberately unfixed and written down rather than fudged:

- The choir is eleven in the fiction and five in the location table. Reconciling it
  properly means giving cadence a per-creature body count, which stops the table being
  a constant and makes the paper doll follow it. That is the right fix and it is not a
  small one. A note on the spec says so.
- Precedent gets unblinking but not out_of_step, though SPECIES.vesh grants both. An
  npc actor has no Coherence track, and out_of_step costs 1 to use.

Also corrects a comment in creature-schema.mjs claiming Out of Step is vesh-locked. It
is not - five postings and a roster agent offer it to humans, and locking it would take
it off all six. SPECIES[x].talents is what a species is GRANTED; TALENTS[].species is
what only that species may HAVE. Two different fields, and only the second locks.

Simulated: Precedent 0.68 of 4 hurt over 3 rounds, no wipes. The choir alone is
trivial; at the eleven its own tactics call for, 3.05 of 4 hurt, median 18 rounds, 0.3%
wipes. Read both as floors - the harness does not model hit locations, so a Cadence's
entire mechanical identity is exactly what it cannot yet measure.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-31 20:57:17 +01:00
slaguru666andClaude Opus 5 c3002e93c9 check-creatures: validate every actor spec, and fix the vesh talents it found
Nothing validated creature specs. check-kits validates postings and check-scenarios
validates prose; buildActor throws on an unknown skill or item key and is silent about
everything else, so species, marksmanship style, characteristic blocks, species-locked
talents and misspelt field names could all be wrong and still build, pack and play.
Every packed actor once shipped as species "hominid" and the whole cast was hit-located
as something the rules do not contain.

tools/creature-schema.mjs derives every allowed value from the catalogues rather than
retyping them: skills from SKILL_CATALOGUE, kit from the item catalogues, species from
SPECIES, stats from CHARACTERISTIC_DICE, and the two marksmanship styles out of the
language file. It reports every problem with a spec rather than dying on the first, and
names the nearest real key. It also reports fields buildActor never reads, because
"armours:" is not an error, it is an actor that silently equips nothing.

On its first run it found six baseline humans carrying vesh biology. "unblinking" is
cat: species, species: vesh, and its own rule text reads "A Vesh has no face to read".
Out of Step is reclassified as anomalous with a Coherence cost, which is what every
talent in that category has and what the Anchor who is three years older than his
birthday says always wanted to be; the other five are swapped to agency and field
talents that fit them.

Not fixed here: the root cause is upstream in postings.mjs, where twelve posting talent
pools still offer unblinking, distributed or quorum to any agent. Picking replacements
across those is a design decision, not a mechanical one.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-30 21:09:43 +01:00