Reading a narrated supporter fight showed it being hit on armR and head. It has wings; it
has never had arms. Three defects, all in the pipeline every published number comes from.
1. It located hits by species, not body plan — simulate.mjs read defender.species where
the game writes spec.bodyPlan ?? spec.species ?? "baseline" into speciesProfile
(build-packs.mjs:294). The barghest, kelpie and church grim were fought on two legs
with arms, and the supporter with no wings, so the fight its tactics call the one the
agents can win could not occur in a measured fight.
2. Armour was one scalar for the whole creature, and the harness's locations had no
armour field. Bare wings, the grounded halving and the vital exemption — R-254 and
R-255 — were invisible to every number. Worn armour was summed the same way, which put
a stab vest on a cleaner's head.
3. Nothing was ever grounded: a wing could be ruined and the creature kept flying.
Fixed in the game's order — locate, then apply what that location carries, every term
imported from rules.mjs. A ruined wing calls groundedPlanFor and the wounds carry across
by severity through remapLocationDamage, the function _preUpdate uses.
A bug of mine no guard would have caught: remapLocationDamage returns { damage, moved,
rescaled } and my first draft passed the whole object where a damage map was expected, so
every wound a creature carried was forgiven the moment it came down. check-lethality would
have passed it — fewer wounds means a longer fight, which reads as a number moving, and
this commit moves numbers. Found by probing a landing by hand.
20 of 47 creatures moved, 18 deadlier and 2 less. The supporter goes 69.3% -> 25.1% wiped,
3.38 -> 2.16 down, second deadliest to fourth: it was being measured as a 30-hit-point
creature in uniform armour 9 that could not be grounded. The small rises elsewhere are the
party's armour no longer covering locations it never protected.
check-focus then caught the page overclaiming, which is what it is for: focus fire still
helps in all 30 but only 28 clear their own noise where 31 of 31 did. The guard was
asserting more than the page needs — the bestiary prints that count from the artifact and
cannot overstate it — so it now checks only what the page asserts outright, and the page
rewrote itself to "in 28 of them".
Both baselines re-recorded. Minor version, not a patch: the published numbers changed.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
240 lines
5.5 KiB
JSON
240 lines
5.5 KiB
JSON
{
|
|
"id": "ringbrp",
|
|
"title": "The Custodians",
|
|
"description": "A Basic Roleplaying game of agents who cross the crossing to contain what should not be there — and who come back a little less from here each time.",
|
|
"version": "1.8.0",
|
|
"compatibility": {
|
|
"minimum": 13,
|
|
"verified": "14.364"
|
|
},
|
|
"authors": [
|
|
{
|
|
"name": "Tim Evans (slaguru666)"
|
|
}
|
|
],
|
|
"esmodules": [
|
|
"ringbrp.mjs"
|
|
],
|
|
"styles": [
|
|
"styles/ringbrp.css"
|
|
],
|
|
"languages": [
|
|
{
|
|
"lang": "en",
|
|
"name": "English",
|
|
"path": "lang/en.json"
|
|
}
|
|
],
|
|
"socket": false,
|
|
"initiative": "@characteristics.dex.value",
|
|
"grid": {
|
|
"distance": 3,
|
|
"units": "m"
|
|
},
|
|
"primaryTokenAttribute": "hp",
|
|
"secondaryTokenAttribute": null,
|
|
"packs": [
|
|
{
|
|
"name": "pregens",
|
|
"label": "The Custodians · Agents",
|
|
"path": "packs/pregens",
|
|
"type": "Actor",
|
|
"system": "ringbrp",
|
|
"ownership": {
|
|
"PLAYER": "OBSERVER",
|
|
"ASSISTANT": "OWNER"
|
|
}
|
|
},
|
|
{
|
|
"name": "npcs",
|
|
"label": "The Custodians · Natives & Threats",
|
|
"path": "packs/npcs",
|
|
"type": "Actor",
|
|
"system": "ringbrp",
|
|
"ownership": {
|
|
"PLAYER": "NONE",
|
|
"ASSISTANT": "OWNER"
|
|
}
|
|
},
|
|
{
|
|
"name": "skills",
|
|
"label": "The Custodians · Skill List",
|
|
"path": "packs/skills",
|
|
"type": "Item",
|
|
"system": "ringbrp"
|
|
},
|
|
{
|
|
"name": "talents",
|
|
"label": "The Custodians · Talents",
|
|
"path": "packs/talents",
|
|
"type": "Item",
|
|
"system": "ringbrp",
|
|
"ownership": {
|
|
"PLAYER": "OBSERVER",
|
|
"ASSISTANT": "OWNER"
|
|
}
|
|
},
|
|
{
|
|
"name": "powers",
|
|
"label": "The Custodians · The Quiet Arts",
|
|
"path": "packs/powers",
|
|
"type": "Item",
|
|
"system": "ringbrp",
|
|
"ownership": {
|
|
"PLAYER": "OBSERVER",
|
|
"ASSISTANT": "OWNER"
|
|
}
|
|
},
|
|
{
|
|
"name": "weapons",
|
|
"label": "The Custodians · Weapons",
|
|
"path": "packs/weapons",
|
|
"type": "Item",
|
|
"system": "ringbrp"
|
|
},
|
|
{
|
|
"name": "armour",
|
|
"label": "The Custodians · Armour",
|
|
"path": "packs/armour",
|
|
"type": "Item",
|
|
"system": "ringbrp"
|
|
},
|
|
{
|
|
"name": "gear",
|
|
"label": "The Custodians · Gear & Devices",
|
|
"path": "packs/gear",
|
|
"type": "Item",
|
|
"system": "ringbrp"
|
|
},
|
|
{
|
|
"name": "vehicles",
|
|
"label": "The Custodians · Transport",
|
|
"path": "packs/vehicles",
|
|
"type": "Item",
|
|
"system": "ringbrp"
|
|
},
|
|
{
|
|
"name": "primer",
|
|
"label": "The Custodians · Read this first (players)",
|
|
"path": "packs/primer",
|
|
"type": "JournalEntry",
|
|
"system": "ringbrp"
|
|
},
|
|
{
|
|
"name": "rules",
|
|
"label": "The Custodians · Rules",
|
|
"path": "packs/rules",
|
|
"type": "JournalEntry",
|
|
"system": "ringbrp"
|
|
},
|
|
{
|
|
"name": "throughtrain",
|
|
"label": "The Custodians · THROUGH TRAIN (crossing starter)",
|
|
"path": "packs/throughtrain",
|
|
"type": "Adventure",
|
|
"system": "ringbrp"
|
|
},
|
|
{
|
|
"name": "starter",
|
|
"label": "The Custodians · BLACK PLATFORM (starter case)",
|
|
"path": "packs/starter",
|
|
"type": "Adventure",
|
|
"system": "ringbrp"
|
|
},
|
|
{
|
|
"name": "lastadmission",
|
|
"label": "The Custodians · LAST ADMISSION (prologue)",
|
|
"path": "packs/lastadmission",
|
|
"type": "Adventure",
|
|
"system": "ringbrp"
|
|
},
|
|
{
|
|
"name": "prologue",
|
|
"label": "The Custodians · OPEN DAY (prologue)",
|
|
"path": "packs/prologue",
|
|
"type": "Adventure",
|
|
"system": "ringbrp"
|
|
},
|
|
{
|
|
"name": "slice",
|
|
"label": "The Custodians · The Ilfracombe Crossing",
|
|
"path": "packs/slice",
|
|
"type": "JournalEntry",
|
|
"system": "ringbrp"
|
|
},
|
|
{
|
|
"name": "tables",
|
|
"label": "The Custodians · Site & Hazard Tables",
|
|
"path": "packs/tables",
|
|
"type": "RollTable",
|
|
"system": "ringbrp"
|
|
},
|
|
{
|
|
"name": "expedition",
|
|
"label": "The Custodians · Case File: ILFRACOMBE",
|
|
"path": "packs/expedition",
|
|
"type": "Actor",
|
|
"system": "ringbrp",
|
|
"ownership": {
|
|
"PLAYER": "OBSERVER",
|
|
"ASSISTANT": "OWNER"
|
|
}
|
|
}
|
|
],
|
|
"packFolders": [
|
|
{
|
|
"name": "The Custodians",
|
|
"sorting": "m",
|
|
"color": "#18268d",
|
|
"folders": [
|
|
{
|
|
"name": "Scenarios",
|
|
"sorting": "m",
|
|
"packs": [
|
|
"throughtrain",
|
|
"lastadmission",
|
|
"prologue",
|
|
"starter",
|
|
"expedition",
|
|
"slice"
|
|
]
|
|
},
|
|
{
|
|
"name": "Characters",
|
|
"sorting": "m",
|
|
"packs": [
|
|
"pregens",
|
|
"npcs"
|
|
]
|
|
},
|
|
{
|
|
"name": "Equipment",
|
|
"sorting": "m",
|
|
"packs": [
|
|
"weapons",
|
|
"armour",
|
|
"gear",
|
|
"vehicles"
|
|
]
|
|
},
|
|
{
|
|
"name": "Rules & reference",
|
|
"sorting": "m",
|
|
"packs": [
|
|
"primer",
|
|
"rules",
|
|
"skills",
|
|
"talents",
|
|
"powers",
|
|
"tables"
|
|
]
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"url": "https://gitea.timevans.uk/slaguru666/RingBRP",
|
|
"manifest": "https://gitea.timevans.uk/slaguru666/RingBRP/raw/branch/main/system.json",
|
|
"download": "https://gitea.timevans.uk/slaguru666/RingBRP/archive/main.zip",
|
|
"license": "LICENSE.txt"
|
|
}
|