Files
RingBRP/tools/powers-anomalous.mjs
T
slaguru666andClaude Opus 5 f68b98190f bestiary + check-powers: read the seam, and classify what that reveals
bestiary.mjs built the document from NPCS, so it described 47 creatures of
147 while check-bestiary agreed with it — two things agreeing is not
verification when both read the same wrong source. It reads collectSpecs()
now: 184 creatures across 5 sections, every one with a measured lethality
figure, which only works because check-lethality was fixed first.

Three faults surfaced fixing it:

  - a second NPCS reference in focusParagraph()
  - which then broke on `rows`, because focusParagraph declares its own
    local `rows` for focus-fire data and shadowed the creature list. Keyed
    lookup now, so the shadowing cannot bite again.
  - the document grouped on the raw role tag against a list of four, and
    `if (!group.length) continue` DROPS an unlisted tag rather than
    mis-filing it. Nine of the twelve tags were absent, so those creatures
    would not have appeared at all. Twelve tags now map onto five sections,
    with a new "Beasts and heraldry", and a completeness assertion counts
    every creature into a section and fails if one is unplaced.

check-powers was the fifth consumer bypassing all-specs.mjs. It reconciled
its counts against BESTIARY while reading NPCS, so it called the document
wrong when the document was right.

Reading the real population then demanded 101 classifications. All 101 are
done and NOT ONE was wired. That is the right answer, not a shortfall:
the three available effects describe the creature — its own attack rating,
the damage it takes, whether it feels defence stacking — and essentially
every power is conditional on a place, a posture, a round count, a weapon
type, an attacker count, a named agent, or Coherence. R-275 records what
wiring one anyway costs: 25.1% to 75.2% on a single creature.

The near-misses are the evidence the reluctance was applied, not recited:
tangie's "HALF damage" is edged-only and ends in open flame; the_heron is
+30% or -20% depending on movement the harness does not have, so which
branch applies is undecidable; mirrorline's halving lands on an AGENT, not
on the creature, so wiring it would have protected the wrong combatant;
yale's defence waiver is capped at two attackers and its written counter is
a fourth agent, which defenceStacking:"ignores" cannot express.

Classifications live in four band files and are spread into POWERS last, so
a hand-written entry always wins a collision. 142 classified: 2 wired, 78
beyond the harness with a reason, 62 not fight rules.

All 23 guards pass.

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

114 lines
8.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* POWER classification for the ANOMALOUS AND FAR-SIDE band (tools/bestiary-anomalous.mjs).
*
* Merged into POWERS in tools/powers.mjs, which holds the scheme, the three kinds and the
* three effects the simulator understands. Read that header first; this file is only the
* twenty-five verdicts for this band.
*
* Nothing here is wired, and that is the finding rather than an omission. Two things make
* this band unwirable almost by construction:
*
* The three effects only describe THIS creature's own attack rating, the damage IT takes,
* and whether IT feels the cumulative defence penalty. Several powers below look like a
* halving or a nullification until you ask who the number lands on — mirrorline's half
* damage lands on an AGENT, carried_over's attack still lands and does something worse
* than damage. Wiring either as damageFactor/attackFactor would be R-275 again: the
* supporter's wipe rate moved 25.1% to 75.2% because a conditional power was applied as
* an unconditional factor.
*
* Every power in the band carries a condition — a room, a sight line, a nearest agent, a
* Major Wound, a grapple held for two rounds, an uses-per-encounter count, a Coherence
* price. The harness has no ground, no agents it can name, no Coherence and no scene
* state, so each condition is exactly the thing it cannot check.
*
* The Cadence per-body arithmetic is NOT a power. −10% to everything per disabled body,
* no vital, no head and destructionOutcomeFor returning "none" are the CADENCE location
* table doing its job (bestiary-anomalous.mjs header). quorate, five_of_six, the_remainder,
* counterpoint and the_iteration all restate it in prose; the classification below covers
* only the extra rule each one puts on top. Likewise the Vesh headlessness that
* returned_surveyor and five_of_six talk about is the VESH table, not a power, and
* turnback's neck kill is the quadruped table.
*/
export const POWERS_ANOMALOUS = {
/* ---- vesh geometry ---- */
foldwalker: { name: "HALF PRESENT", kind: "notSimulable",
why: "every incoming attack is rolled twice and the lower result stands, and it stops once both exits "
+ "are closed; the harness resolves one roll and has no exits" },
anglesmith: { name: "THE NEW CORNER", kind: "notSimulable",
why: "it edits the room each round — a DEXx5 to cross, prone on a failure, a permanent extra exit after "
+ "four — and the harness has no room, no movement and no prone" },
halfpast: { name: "FORTY SECONDS", kind: "notSimulable",
why: "acts first regardless of Reaction and voids the first attack on it each round, both only until it "
+ "takes a Major Wound; the harness has no initiative order and no per-round attack counter" },
returned_surveyor: { name: "THE ELEVEN YEARS", kind: "outOfCombat",
why: "reading its survey notes trades 1 Coherence for a true fact about the far side; its own entry says "
+ "talk to it, and it fights only if restrained" },
unmeasured: { name: "NO TWO AGREE", kind: "outOfCombat",
why: "it breaks instruments and fails Chain of Custody — a case problem, and its entry says it does not attack" },
patient_grasp: { name: "DO NOT LET GO", kind: "notSimulable",
why: "it never strikes; it seizes on a Brawl and holds at STR 22 until the held agent reaches 0 from "
+ "exhaustion, and the harness models neither grapples nor exhaustion" },
the_tideline: { name: "THE MARK", kind: "outOfCombat",
why: "the mark is a clock that finds the agent again within a day, cleared by a reversed crossing "
+ "regulator; nothing about the fight it is in" },
glass_auditor: { name: "BROUGHT INTO COMPLIANCE", kind: "notSimulable",
why: "2d6 every third round, but only to whoever is standing where a wall has retroactively always been, "
+ "and the harness has no positions to stand in" },
/* ---- cadence swarms ---- */
quorate: { name: "THE VOTE", kind: "notSimulable",
why: "it does nothing until three bodies share line of sight to one target and then makes five attacks at "
+ "once; the harness has no sight lines and cannot gate a round on them" },
five_of_six: { name: "THE SIXTH PLACE", kind: "notSimulable",
why: "a grapple held two consecutive rounds removes an agent from the case entirely, resisted by POWx1; "
+ "the harness has no grapple, no multi-round hold and no agent to lose" },
the_remainder: { name: "THE GAP", kind: "notSimulable",
why: "once per encounter a body leaves the fight for two rounds and returns anywhere within fifty metres; "
+ "the harness has no ground and cannot suspend and restore a body" },
counterpoint: { name: "OUT OF SEQUENCE", kind: "notSimulable",
why: "damage is applied at the end of the FOLLOWING round so a disabled body still acts, unless the damage "
+ "was area damage; the harness applies damage immediately and has no area attacks" },
the_tally: { name: "THE RECONCILIATION", kind: "outOfCombat",
why: "its count becomes the department record at the end of the scene; its entry says it will not fight and "
+ "cannot win one, and the fix is paperwork" },
many_hands: { name: "TAKEN TO PIECES", kind: "notSimulable",
why: "each round a body removes one carried item on Sleight of Hand rather than doing damage, and the "
+ "harness has no inventory to take anything out of" },
the_iteration: { name: "THE LONG VIEW", kind: "notSimulable",
why: "it fixes the outcome of a named future action with no roll and charges 1 Coherence, and the harness "
+ "models neither declared actions nor Coherence" },
/* ---- echoes and revenants ---- */
backscatter: { name: "WRONG ANGLES", kind: "notSimulable",
why: "−30% to attacks AGAINST it, but only when aimed — blind fire is unpenalised — and there is no effect "
+ "for penalising incoming attacks, only attackFactor for its own" },
afterimage: { name: "THE SECOND TIME", kind: "outOfCombat",
why: "watching the loop costs 1 Coherence and hands over how the death happened; its entry says it is not "
+ "a threat and cannot leave the room" },
second_pass: { name: "I KNOW HOW THIS GOES", kind: "notSimulable",
why: "three no-roll cancellations of an agent's action per encounter, forfeited if the party changes the "
+ "scene; the harness has no agent actions to cancel and no scene to change" },
turnback: { name: "STILL TRAINED", kind: "outOfCombat",
why: "a correctly given department recall hands it to whoever gave the order for the rest of the scene — "
+ "whether it is an enemy at all is a handler question, not a fight rule" },
the_overflight: { name: "THE OTHER GROUND", kind: "notSimulable",
why: "it ignores cover that exists on this side and is stopped only by solid earth; the harness has no "
+ "cover and no terrain to distinguish" },
recurrence: { name: "AGAIN", kind: "notSimulable",
why: "every fourth round the location resets and restores all hit points on BOTH sides; the harness has no "
+ "reset and no way to give the party its hit points back" },
inside_out: { name: "CONTAINED", kind: "notSimulable",
why: "1d6 a round to everyone in the location with no roll and no armour, 12 points of regenerating armour, "
+ "and the win condition is a Spot at −40% to leave — none of which is an attack the harness rolls" },
latecomer: { name: "THE CALL NOT MADE", kind: "outOfCombat",
why: "it answers one truthful question about the next hour and demands command in exchange; it stands down "
+ "if the party makes the call it came for" },
mirrorline: { name: "REFLECTED", kind: "notSimulable",
why: "it borrows the NEAREST agent's skills and half the damage it takes is dealt to that agent — the "
+ "halving lands on an agent, not on itself, so damageFactor 0.5 would be the wrong creature" },
carried_over: { name: "IT NEEDS SOMEWHERE TO BE", kind: "notSimulable",
why: "a hit does no damage and instead sets a rolled location to that agent's worst historical hit points "
+ "with 1 bleed a round; attackFactor 0 would make it harmless when it is the opposite" }
};