Files
RingBRP/system.json
T
slaguru666andClaude Opus 5 5dcaaf519a The simulator can be read now, not just totalled (R-263)
Every guard here reports a number per creature, and a number cannot say why a fight went
the way it did. That gap is what produced R-258 through R-260: each written from a side
harness built to watch a fight, each modelling something slightly different from the game,
two of the three wrong in ways no guard could catch because no guard was involved.

runFight takes an optional `say` sink. It reports what the simulator already decided — the
attack roll and its target, a defence and the penalty it was made at, the landing level
after a dodge downgrades it, damage against armour before and after armourAgainst, the
location, major wounds, disablement, death. It never touches the generator, so a narrated
fight and a silent one are the same fight; check-lethality and check-focus both still
match their baselines exactly with the hook in place.

tools/playthrough.mjs (npm run play) is its consumer, in the same commit deliberately: a
hook with no reader is the exact defect this project keeps finding in its own rules, and
adding one to the measurement pipeline with only a scratchpad file calling it would have
been committing the thing I have spent the session removing. Pack size comes from
focus-baseline.json so the fight you read is the fight check-focus measures; creatures
recorded as pinned are played solo.

Three redcaps, seed 20260913, same seed both ways. Spread fire: wiped in 10 rounds, 3
dead, and all three redcaps still standing — 39 hit points spread three ways so that none
of it finished anything. Focus fire: same opening, diverging at one target choice in round
1, party wins in 20 with two up. The +13.2 points check-focus records, seen once instead
of averaged.

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

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.7.17",
"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"
}