fb6e2cf321c993466599e843b2d890872a7a6396
3
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
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> |
||
|
|
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> |
||
|
|
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> |