From 48216bae10ce9c6566ba7d03a5e3b4817ddbf13b Mon Sep 17 00:00:00 2001 From: slaguru666 <111923774+slaguru666@users.noreply.github.com> Date: Sun, 13 Sep 2026 00:03:02 +0100 Subject: [PATCH] Focus fire across all 47, and the same confound one turn later (R-260) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Measured in simulate.mjs. For each creature, the pack size whose spread-fire win rate lands nearest 50% — a fight at 0% or 100% cannot show an effect, which is why R-259's first sample was three-quarters useless — then focus versus spread, 2000 fights across three seeds. 31 of 47 creatures had a pack size that could show anything. Focus fire helped 31 of 31, by more than that row's own noise 31 of 31 times, mean +12.8 points. Best is 6x The margin, 40.4% -> 61.1%. The other 16 are unmeasurable rather than unaffected: eleven are trivial six at a time, five are hopeless in pairs. R-259's decomposition was confounded, and I wrote it while correcting a confound. It credited the defence ladder with 4-5 points by comparing dodge <=30% against dodge >=55% — but the low-dodge samples were PAIRS and the high-dodge ones TRIOS. Held at a fixed pack size, dodge is worth 1-2 points. Pack size is the driver: 8.0 points for a pair, 14-15 for three or more, then flat. What focus fire buys is that a dead creature stops attacking and a half-dead one does not attack any less. Two failures, one cause: comparing groups that differ in more than the thing being measured. The control is cheap and I did not run it until the third time. The bestiary advised concentrating fire and gave the ladder as the reason — right advice, wrong reason. It now gives the reason that survives measurement. Co-Authored-By: Claude Opus 5 --- docs/BESTIARY.md | 15 ++++++++++----- docs/REVIEW_LOG.md | 43 +++++++++++++++++++++++++++++++++++++++++++ system.json | 2 +- tools/bestiary.mjs | 14 +++++++++----- 4 files changed, 63 insertions(+), 11 deletions(-) diff --git a/docs/BESTIARY.md b/docs/BESTIARY.md index 410fc42..ea4e894 100644 --- a/docs/BESTIARY.md +++ b/docs/BESTIARY.md @@ -79,15 +79,20 @@ Two things follow: party misses twice is one where the creature meets the third shot at full value. - **Each landing hit makes the next one easier**, in the same round only. The second agent to connect is worth more than the first, and against the heavy dodgers below - the third is worth more still. Commit a round’s attacks to one target; spreading - them lets every defence reset at full value. + the third is worth more still. **What you cannot do is choose who goes first.** Reaction is re-rolled every round, so over a fight every agent takes the opening slot about equally often, and there is no rule for holding an action. Arranging the party so its best weapon fires last was -measured in the simulator over six independent seeds and came to nothing -distinguishable from noise. The ladder is a reason to commit a round to one target, -not a reason to choreograph the order. +measured in the simulator and came to nothing distinguishable from noise. + +**What you can do is kill them one at a time.** Against a pack, every agent putting +their attacks into the same creature beats spreading them — in every fight in this +book whose outcome was ever in doubt, without exception, and by more than the +measurement’s own noise each time. It is worth about twice as much against three or +more enemies as against a pair. Most of that is not the ladder above: a creature that +is dead stops attacking, and one on half its hit points does not attack any less. The +dodge ladder adds a point or two on top of that. The ones that take the most stripping: diff --git a/docs/REVIEW_LOG.md b/docs/REVIEW_LOG.md index d3fc3ea..8ed356e 100644 --- a/docs/REVIEW_LOG.md +++ b/docs/REVIEW_LOG.md @@ -5536,3 +5536,46 @@ settled it, and the first where the wrong explanation had already shipped to a d GM would read. The rule I keep relearning: a measurement taken outside the guarded pipeline is a hypothesis, not a result, and it does not go in a document until the pipeline agrees. + +## R-260 — focus fire, all 47, and the same confound one turn later + +Focus fire measured across the whole bestiary in `simulate.mjs`. For each creature, the +pack size whose spread-fire win rate lands nearest 50% — a fight at 0% or 100% cannot show +an effect of any size, which is why R-259's first sample was three-quarters useless — then +focus versus spread at 2000 fights across three seeds. + +**31 of 47 creatures had a pack size that could show anything at all.** Of those, focus +fire helped **31 of 31**, by more than that row's own seed-to-seed noise **31 of 31** +times. Mean gain **12.8 points** of win rate. Best: 6× The margin, 40.4% → 61.1%, +20.8. + +The other 16 cannot be measured rather than being unaffected: eleven are trivial even six +at a time (the party wins ~100%) and five are hopeless in pairs — the supporter, the +quarantine unit and the long walker wipe the party at 0% before focus fire gets a vote. + +**R-259's decomposition was confounded, and I wrote it while correcting a confound.** +It said the defence ladder was worth 4–5 of the gain, comparing dodge ≤30% against +dodge ≥55%. Those two groups were not the same fights: the low-dodge samples were PAIRS +and the high-dodge ones were TRIOS. Pack size is the real driver. + +| enemies | mean gain | | dodge within that size | +|---|---|---|---| +| 2 | **8.0** | | ≤40%: 7.4 · >40%: 8.6 | +| 3 | 14.0 | | ≤40%: 13.3 · >40%: 14.2 | +| 4 | 13.9 | | ≤40%: 13.0 · >40%: 15.2 | +| 5 | 14.7 | | ≤40%: 14.7 · >40%: 14.8 | +| 6 | 15.4 | | ≤40%: 14.4 · >40%: 15.7 | + +Held at a fixed pack size, dodge is worth **1–2 points**, not 4–5. The gain nearly doubles +from a pair to a trio and then flattens. What focus fire actually buys is that a dead +creature stops attacking and a half-dead one does not attack any less; the ladder is a +rounding error on top of that. + +So R-259 corrected R-258's un-piped measurement and then made R-255's confound error in +the correction. Two different failures with one cause: comparing groups that differ in +more than the thing being measured. The control is cheap — hold the other variable fixed +and look within it — and I did not run it until the third time. + +**The page says what is true now.** The bestiary advised concentrating fire and gave the +ladder as the reason, which was right for the wrong reason. It now gives the reason that +survives measurement, and states that the effect roughly doubles from two enemies to +three or more. diff --git a/system.json b/system.json index 2128058..d816457 100644 --- a/system.json +++ b/system.json @@ -2,7 +2,7 @@ "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.14", + "version": "1.7.15", "compatibility": { "minimum": 13, "verified": "14.364" diff --git a/tools/bestiary.mjs b/tools/bestiary.mjs index e01fae1..48c14a4 100644 --- a/tools/bestiary.mjs +++ b/tools/bestiary.mjs @@ -173,14 +173,18 @@ md += `\n**V** = Vesh, **C** = Cadence. Everything else is baseline-human anatom + ` party misses twice is one where the creature meets the third shot at full value.\n` + `- **Each landing hit makes the next one easier**, in the same round only. The second\n` + ` agent to connect is worth more than the first, and against the heavy dodgers below\n` - + ` the third is worth more still. Commit a round\u2019s attacks to one target; spreading\n` - + ` them lets every defence reset at full value.\n\n` + + ` the third is worth more still.\n\n` + `**What you cannot do is choose who goes first.** Reaction is re-rolled every round, so\n` + `over a fight every agent takes the opening slot about equally often, and there is no\n` + `rule for holding an action. Arranging the party so its best weapon fires last was\n` - + `measured in the simulator over six independent seeds and came to nothing\n` - + `distinguishable from noise. The ladder is a reason to commit a round to one target,\n` - + `not a reason to choreograph the order.\n\n` + + `measured in the simulator and came to nothing distinguishable from noise.\n\n` + + `**What you can do is kill them one at a time.** Against a pack, every agent putting\n` + + `their attacks into the same creature beats spreading them \u2014 in every fight in this\n` + + `book whose outcome was ever in doubt, without exception, and by more than the\n` + + `measurement\u2019s own noise each time. It is worth about twice as much against three or\n` + + `more enemies as against a pair. Most of that is not the ladder above: a creature that\n` + + `is dead stops attacking, and one on half its hit points does not attack any less. The\n` + + `dodge ladder adds a point or two on top of that.\n\n` + `The ones that take the most stripping:\n\n` + hardest.map(x => `- **${esc(x.name)}** — dodge ${x.d}%, ${stripsIn(x.d)} landing hits to strip\n`).join("") + `\nIt runs the other way too: agents defend on the same ladder, which is why a second\n`