{
  "_README": "Binary-derived facts that no game table carries. One entry per stable fact id; every entry MUST have build (the steam buildid the RVAs were read from), source (<symbol>@<RVA>), values and note. Pages read this lane like any other curated data - NUMBERS that exist in the tables stay table-derived, only code-derived RULES and citations come from here. Re-derive on each game update (~/ds_skill_truth resolves symbols by name via script.json) and bump build. verify_site.py checks the shape.",
  "dungeon_stay_ladder": {
    "build": "24354931",
    "source": "DungeonBehaviorSimulator.CheckDungeonPenalty@0xB5619C",
    "values": {
      "stage_affecter_offset": 1,
      "term_intervals": 3,
      "term_stages": 4,
      "citations": [
        {
          "symbol": "DungeonBehaviorSimulator.CheckDungeonPenalty",
          "rva": "0xB5619C",
          "rule": "Runs every tick against the in-game minutes elapsed since the penalty clock was last reset. While the level is below the number of intervals it compares that time to the current interval; on reaching it the level goes up by one and every unit swaps the stage it carries for the next one, so a unit only ever carries the stage matching its level.",
          "detail": "Tick @0xB54B80 supplies 'passed' = current minutes minus the simulator's baseline field. On a step it applies AffecterApplyData(AFFECTER_DungeonStayD{level+1}, stack -999) then (AFFECTER_DungeonStayD{level+2}, stack +1), so the carried affecter is always D(level + 1)."
        },
        {
          "symbol": "DungeonBehaviorSimulator.OnEnterSafeFloor",
          "rva": "0xB56C04",
          "rule": "Resets the level to 0, restarts the clock and sets the 'stop checking' flag, so the ladder is frozen while the squad stands on a safe floor."
        },
        {
          "symbol": "DungeonBehaviorSimulator.OnEnterNonSafeFloor",
          "rva": "0xB56C40",
          "rule": "Resets the level to 0 and restarts the clock, so stepping off a safe floor starts the ladder again from the bottom."
        }
      ]
    },
    "note": "Tables carry the stage magnitudes and the interval lengths; the ladder's shape (when a stage lands, what resets it, which affecter a unit carries) is code-only. Level 0 = stage 1, confirmed on 0.3.44 saves parked on floors 4 and 9 (all four units carry AFFECTER_DungeonStayD1). GAMESYSTEM_Dungeon_StayPenaltyTerm holds 3 intervals for 4 stages, and its DevComment warns a 4th value would make the game reach for a D5 that does not exist."
  },
  "turret_intervals": {
    "build": "24354931",
    "source": "AFFECTER_SolarBloom.Passive_SolarBloomAttack.<AttackRoutine>d__8$$MoveNext@0x97865c",
    "values": {
      "tick_seconds": 1,
      "turrets": [
        {
          "affecter": "AFFECTER_SolarBloom",
          "symbol": "AFFECTER_SolarBloom.Passive_SolarBloomAttack.<AttackRoutine>d__8$$MoveNext",
          "rva": "0x97865c",
          "interval_sec": 1,
          "interval_source": "(int)FloatValues[5]",
          "init_counter": 1,
          "rule": "Counter reset reads the affecter's own FloatValues[5] = 1, and the tooltip says 'attacks once every 1 seconds' - the calibration proving counter value N = N seconds."
        },
        {
          "affecter": "AFFECTER_MucusSprayer",
          "symbol": "AFFECTER_MucusSprayer.Passive_MucusSprayerAttack.<AttackRoutine>d__8$$MoveNext",
          "rva": "0x976fc4",
          "interval_sec": 4,
          "interval_source": "hardcoded mov w8,#4",
          "init_counter": 2,
          "rule": "Reset is hardcoded to 4, initial counter 2 (const @0x55ca470), so the first spray lands about 2s after germination and every 4s after that."
        },
        {
          "affecter": "AFFECTER_SunHeartBloom",
          "symbol": "AFFECTER_SunHeartBloom.Passive_SunHeartBloomAttack.<AttackRoutine>d__9$$MoveNext",
          "rva": "0x975844",
          "interval_sec": 4,
          "interval_source": "hardcoded mov w8,#4",
          "init_counter": 2,
          "rule": "Reset is hardcoded to 4, initial counter 2, so the first hit lands about 2s after germination and every 4s after that."
        }
      ]
    },
    "note": "All three nature turrets run a 1-second tick: lifetime counter +1, attack counter -1, fire when it runs out, then reset. Only Solar Bloom's interval exists in the tables. Recorded here only; not surfaced on any page yet (separate content task). Source: INTEGRATION_PLAN_2026-07-26.md A.1 and HANDOFF.md paragraph 9."
  },
  "insc_heavy_plumb": {
    "build": "24354931",
    "source": "AFFECTER_HeavyPlumbInscription.Passive_HeavyPlumb.HeavyPlumbAddStatus@0x933A2C",
    "values": {
      "hook": "Before the hit is calculated, in the phase where effects adjust the attacker's stats.",
      "formula": "Bonus = carried Weight x 15 x 0.01, which is 0.15 percentage points of Damage Dealt Bonus per point of Weight.",
      "pipeline": "The bonus is written into the Damage Dealt Bonus of that one hit. A hit is (fixed + self coefficient + target coefficient) x (1 + multiplier + Damage Dealt Bonus / 100 + typed damage bonus / 100 + target damage taken / 100) x hit result x 100 / (100 + resistance) x final multiplier. Heavy Plumb lands inside the additive bonus bracket, and that whole bracket is then multiplied by the critical multiplier, before defense is applied.",
      "summary": "Adds 0.15 percent damage per point of carried Weight to melee physical hits.",
      "rule_of_thumb": "Every 10 points of carried Weight is +1.5 percent damage.",
      "scope": "The gate is the skill row's hit type and damage type, not the words basic attack. 96 of the 252 skills in the table are melee physical and every one of them gets the bonus. Ranged physical (9 skills), ranged magic (35) and melee magic (3) get nothing.",
      "table": {
        "variable_label": "Carried weight",
        "points": [
          0,
          25,
          50,
          100,
          150,
          200
        ],
        "baseline": "150 physical attack power, a 100 percent coefficient basic attack, target at 0 resistance, critical damage bonus at the default 50 percent.",
        "columns": [
          {
            "label": "Damage bonus",
            "add_per_unit": 0.15,
            "suffix": "%"
          },
          {
            "label": "Normal hit",
            "base": 150.0,
            "pct_per_unit": 0.15
          },
          {
            "label": "Critical hit",
            "base": 150.0,
            "pct_per_unit": 0.15,
            "mult": 1.5
          }
        ]
      },
      "caveats": [
        "Weight is the summed table weight of everything the unit carries, equipped gear included. A naked unit with an empty bag has Weight 0 and the inscription does nothing.",
        "It reads current Weight, not the carrying limit. The limit (100 + 4 x Strength) only caps how far this can go: at 200 carried weight the bonus is +30 percent, and the code applies no cap of its own.",
        "The bonus is additive with every other damage dealt bonus in the same bracket, so each extra source is worth less than the first one."
      ],
      "interactions": [
        "It shares the additive damage dealt bracket with Challenge, Death Throes, Crumble and Sinking, so none of those multiply each other."
      ],
      "citations": [
        {
          "symbol": "AFFECTER_HeavyPlumbInscription.Passive_HeavyPlumb.HeavyPlumbAddStatus",
          "rva": "0x933A2C",
          "rule": "Checks the skill's hit type is melee and its damage type is physical, reads the wearer's Weight, multiplies it by the inscription's value and by 0.01, and adds the result to the Damage Dealt Bonus of that hit."
        },
        {
          "symbol": "Refactor.Component.StatusComponent.ApplyInventoryWeight",
          "rva": "0xD563A0",
          "rule": "Weight is the sum of every carried item's table weight times its amount, over the inventory slots and the equipment slots both."
        },
        {
          "symbol": "Refactor.Combat.DamageSimulator.CalculateValue",
          "rva": "0x8FC248",
          "rule": "The order damage is built in, and the bracket the Damage Dealt Bonus sits in."
        }
      ],
      "affecter": "AFFECTER_HeavyPlumbInscription"
    },
    "note": "Single row, no grade family: the value has been 15.0 in every local build (b0321, 23739108, 24354931, 24389032). Build 24389032 shows the identical class and call graph with shifted addresses, but no arm64 slice for that build exists locally, so only 24354931 is byte-verified."
  },
  "insc_magic_smite": {
    "build": "24354931",
    "source": "AFFECTER_MagicSmiteInscription.Passive_MagicSmite.MagicSmite@0x9333CC",
    "values": {
      "hook": "After the basic attack has landed and its damage is known.",
      "formula": "Extra = the damage the basic attack actually dealt x 10 x 0.01, published as a separate magic hit with a fixed value.",
      "pipeline": "The extra hit is its own execution. Having a fixed value it carries no attack power term, but it still runs the whole damage pipeline: the attacker's damage dealt bonus and magic damage dealt bonus scale it, it rolls its own critical and guard, and the target's magic resistance mitigates it.",
      "summary": "Basic attacks add a second magic hit worth 10 percent of the damage they dealt.",
      "rule_of_thumb": "Every 100 damage a basic attack lands adds 10 magic damage.",
      "scope": "Basic attacks only, and only when the hit was actually applied (not a miss, not an immune result).",
      "table": {
        "variable_label": "Damage the basic attack dealt",
        "points": [
          50,
          100,
          150,
          225,
          300,
          387
        ],
        "baseline": "The extra hit before the target's magic resistance and its own critical roll.",
        "columns": [
          {
            "label": "Extra magic hit",
            "add_per_unit": 0.1
          },
          {
            "label": "If the extra hit crits",
            "add_per_unit": 0.1,
            "mult": 1.5
          }
        ]
      },
      "caveats": [
        "Because it is read off the damage that landed, anything that raised that damage raises this too."
      ],
      "interactions": [],
      "tooltip_conflicts": [
        {
          "says": "additional magic damage equal to 10 percent of physical attack power",
          "does": "10 percent of the damage the basic attack just dealt. Physical attack power is never read anywhere in the routine."
        }
      ],
      "citations": [
        {
          "symbol": "AFFECTER_MagicSmiteInscription.Passive_MagicSmite.MagicSmite",
          "rva": "0x9333CC",
          "rule": "Gates on the wearer being the attacker, the hit having been applied, and the skill being a basic attack."
        },
        {
          "symbol": "AFFECTER_MagicSmiteInscription.Passive_MagicSmite.<MagicSmiteRoutine>d__3.MoveNext",
          "rva": "0x933638",
          "rule": "Reads the total damage off the hit's log, multiplies by the inscription's value and 0.01, and publishes it as a fixed-value magic hit."
        }
      ],
      "affecter": "AFFECTER_MagicSmiteInscription"
    },
    "note": "The in-game text is wrong, not merely vague: it names a stat the code never touches. The wiki shows the code truth with a notice."
  },
  "insc_shockwave": {
    "build": "24354931",
    "source": "AFFECTER_ShockWaveInscription.Passive_ShockWave.ShockWave@0x932658",
    "values": {
      "hook": "After the basic attack has landed and its damage is known.",
      "formula": "Splash = the damage the basic attack dealt x 30 x 0.01, dealt to every hostile in the square of half width 1 around the target. The target's own tile is skipped, which leaves up to 8 neighbours.",
      "pipeline": "Each splash is its own execution with a fixed value, so it re-enters the damage pipeline from scratch: it rolls its own critical and guard and is mitigated by the victim's physical resistance.",
      "summary": "Basic attacks splash 30 percent of the damage dealt onto up to 8 tiles around the target.",
      "rule_of_thumb": "Every 100 damage on the main target is 30 damage to each neighbour.",
      "scope": "Basic attacks only. It fires on normal, critical and guarded hits alike: the gate is that the hit was applied, which excludes only misses and immune results.",
      "table": {
        "variable_label": "Damage the basic attack dealt",
        "points": [
          50,
          100,
          150,
          225,
          300,
          387
        ],
        "baseline": "Splash before each victim's own resistance and critical roll.",
        "columns": [
          {
            "label": "Per neighbour",
            "add_per_unit": 0.3
          },
          {
            "label": "Full ring of 8",
            "add_per_unit": 0.3,
            "mult": 8
          }
        ]
      },
      "caveats": [
        "The splash is always physical, whatever the damage type of the basic attack that triggered it.",
        "The primary target is explicitly skipped, so it is never hit twice.",
        "The area is a square of half width 1 around the target, read from the inscription's first value. It is not a ring of exactly 8: fewer neighbours means fewer hits."
      ],
      "interactions": [
        "Sinking compounds into it. Sinking's bonus is already inside the damage the basic attack dealt, so the splash carries it: a 72 point Sinking proc turns a 67.5 splash into 116.1, exactly 1.72 times.",
        "A permanent damage dealt bonus double dips here, once in the base hit and again on each splash's own bracket. Sinking only single dips, because its bonus is scoped to the one execution that produced the base hit.",
        "Splash hits cannot re-trigger Shockwave, Storm or Sinking. What publishes them is the inscription, not a skill, and all three of those gate on a basic-attack skill."
      ],
      "citations": [
        {
          "symbol": "AFFECTER_ShockWaveInscription.Passive_ShockWave.ShockWave",
          "rva": "0x932658",
          "rule": "Gates on the wearer being the attacker, the hit having been applied, and the skill being a basic attack."
        },
        {
          "symbol": "AFFECTER_ShockWaveInscription.Passive_ShockWave.<ShockwaveRoutine>d__3.MoveNext",
          "rva": "0x9329E4",
          "rule": "Walks the square from minus the radius to plus the radius on both axes, skips the tile the primary target stands on, and publishes a fixed-value physical hit worth 30 percent of the logged total damage to every hostile left."
        },
        {
          "symbol": "Refactor.Combat.IExecutionLog.get_IsApplied",
          "rva": "0x879228",
          "rule": "Applied means the result was not a miss and not an immune, so guarded hits still splash."
        }
      ],
      "affecter": "AFFECTER_ShockWaveInscription"
    },
    "note": "The tooltip states neither the shape of the area nor the damage type of the splash. Both are settled here."
  },
  "insc_storm": {
    "build": "24354931",
    "source": "AFFECTER_StormInscription.Passive_StormInscription.OnDamage@0x928748",
    "values": {
      "hook": "After the basic attack has landed, and only when it was a critical hit.",
      "formula": "Every hostile in a circle of radius 2 around the target takes a hit of 30 percent of the wearer's physical attack power.",
      "pipeline": "Each proc is its own execution built from a self coefficient on physical attack power. Its attack type resolves to none, so the hit check short-circuits and the proc always lands, but it still rolls its own critical and can be guarded.",
      "summary": "Critical basic attacks hit everything within 2 tiles for 30 percent of physical attack power.",
      "rule_of_thumb": "Every 10 physical attack power is 3 damage to each victim in the circle.",
      "scope": "Basic attacks only, and only on a critical result.",
      "table": {
        "variable_label": "Physical attack power",
        "points": [
          50,
          100,
          150,
          200,
          300
        ],
        "baseline": "Per victim, before that victim's own resistance.",
        "columns": [
          {
            "label": "Per victim",
            "add_per_unit": 0.3
          },
          {
            "label": "If the proc crits",
            "add_per_unit": 0.3,
            "mult": 1.5
          },
          {
            "label": "5 victims",
            "add_per_unit": 0.3,
            "mult": 5
          }
        ]
      },
      "caveats": [
        "The coefficient stat is hardcoded to physical attack power. A magic basic attack still procs Storm off physical attack power, and only the damage type is inherited, so the resistance the victim uses follows the attack while the scaling does not.",
        "The victim cap could not be settled from the binary. The loop's own predicate publishes up to 7 hits while the table value and the design note both say 5. The wiki reports the predicate and flags the reading as unconfirmed in game.",
        "Whether the primary target itself eats a Storm hit was not proven from the binary. The design note says it does."
      ],
      "interactions": [
        "Sinking does nothing for Storm. The proc is a fresh execution scaled off physical attack power, and Sinking's bonus is scoped to the execution that produced the base hit."
      ],
      "tooltip_conflicts": [
        {
          "says": "the type of damage depends on the type of the basic attack",
          "does": "only the damage type is inherited. The number itself always scales off physical attack power."
        },
        {
          "says": "up to 5 enemies",
          "does": "the loop's counter allows 7 published hits. Which of the two the designer meant is not settled, so treat 5 as the intended figure and 7 as the code's ceiling."
        }
      ],
      "citations": [
        {
          "symbol": "AFFECTER_StormInscription.Passive_StormInscription.OnDamage",
          "rva": "0x928748",
          "rule": "Gates on the wearer being the attacker, the skill being a basic attack, and the logged result being a critical hit, then builds a circle of the inscription's radius around the target."
        },
        {
          "symbol": "AFFECTER_StormInscription.Passive_StormInscription.<Attack>d__3.MoveNext",
          "rva": "0x928BAC",
          "rule": "Builds each proc from a self coefficient of 30 percent on physical attack power, with the damage type copied from the triggering hit."
        }
      ],
      "affecter": "AFFECTER_StormInscription"
    },
    "note": "Three of the tooltip's claims are misleading. The hardcoded scaling stat and the loop's real ceiling are both stated on the page."
  },
  "insc_sink": {
    "build": "24354931",
    "source": "AFFECTER_SinkInscription.Passive_SinkInscription.SinkInscription@0x924FE8",
    "values": {
      "hook": "Before the hit is calculated, in the phase where effects adjust the attacker's stats.",
      "formula": "On the proc, bonus = (target's missing HP / target's max HP) x 120, added as percentage points of Damage Dealt Bonus. The scaling is perfectly linear in the missing fraction, and there is no extra hundredth here: the result is already percentage points.",
      "pipeline": "The bonus lands in the additive damage dealt bracket of that one hit, and that bracket is then multiplied by the critical multiplier. It is applied before defense.",
      "summary": "Every 3rd basic attack adds up to 120 percent damage, scaled by the target's missing HP.",
      "rule_of_thumb": "Every 10 percent of the target's missing HP is +12 percentage points of damage on the proc.",
      "scope": "Basic attacks only. There is no melee check, no damage type check and no touch tag: any skill flagged as a basic attack qualifies.",
      "table": {
        "variable_label": "Target missing HP (%)",
        "points": [
          0,
          25,
          50,
          60,
          75,
          90,
          99
        ],
        "baseline": "150 physical attack power, a 100 percent coefficient basic attack, target at 0 resistance, critical damage bonus at the default 50 percent.",
        "columns": [
          {
            "label": "Damage bonus",
            "add_per_unit": 1.2,
            "suffix": "%"
          },
          {
            "label": "Normal hit",
            "base": 150.0,
            "pct_per_unit": 1.2
          },
          {
            "label": "Critical hit",
            "base": 150.0,
            "pct_per_unit": 1.2,
            "mult": 1.5
          }
        ]
      },
      "caveats": [
        "The counter runs 1, 2, 3, 4 and then subtracts 3 to land back on 1, so the first proc comes on the 4th qualifying basic attack and every 3rd one after that.",
        "The counter is hidden. The effect is not exposed to the player, so there is no way to see how charged it is.",
        "The max stack of 4 on the table row is that counter, not a 4-attack cycle.",
        "Multi-target basic attacks give each enemy its own hit, so the counter advances once per enemy struck. Derived from the data shape, not bench tested.",
        "The bonus is scoped to one hit and is additive with the other damage dealt bonuses, so it does not multiply them."
      ],
      "interactions": [
        "Shockwave compounds. The splash is a share of the damage that landed, so a Sinking proc multiplies it by the same factor: at a 72 point proc the splash goes from 67.5 to 116.1.",
        "Storm gains nothing. Its proc scales off physical attack power on a fresh execution, which never sees Sinking's bonus.",
        "Storm and Shockwave procs do not charge the counter either. Their publisher is an inscription rather than a skill, so they fail the basic-attack gate.",
        "Healing Touch kills it outright. With a nature staff equipped and Healing Touch learned, the basic attack becomes Healing Touch, which publishes a heal and not damage. Sinking only listens to damage, so on that unit it never charges and never procs."
      ],
      "tooltip_conflicts": [
        {
          "says": "every 3rd basic attack",
          "does": "the first proc lands on the 4th qualifying attack, then every 3rd after that."
        }
      ],
      "citations": [
        {
          "symbol": "AFFECTER_SinkInscription.Passive_SinkInscription.SinkInscription",
          "rva": "0x924FE8",
          "rule": "Gates on the wearer being the attacker and the skill being a basic attack, requires the counter to have reached 3, then reads the target's max and current HP and writes the missing fraction times 120 into the hit's Damage Dealt Bonus."
        },
        {
          "symbol": "AFFECTER_SinkInscription.Passive_SinkInscription.<SinkRoutine>d__5.MoveNext",
          "rva": "0x9255EC",
          "rule": "Adds one stack of the hidden counter to the attacker on every qualifying basic attack, whether or not the bonus fired."
        },
        {
          "symbol": "AFFECTER_SinkInscription.Passive_SinkInscription.<ExcessiveBleedingRefreshRoutine>d__6.MoveNext",
          "rva": "0x9254C8",
          "rule": "Subtracts 3 stacks once the counter reaches 4, which is what makes the cycle repeat from 1."
        },
        {
          "symbol": "SKILL_HealingTouchAttack.<SkillRoutine>d__0.MoveNext",
          "rva": "0x8D048C",
          "rule": "Healing Touch's attack yields a heal and no damage at all, which is why Sinking can never see it."
        }
      ],
      "affecter": "AFFECTER_SinkInscription"
    },
    "note": "The counter lives in code, not in the table: the design note on the row says so outright. Whether the counter is seeded at 0 or 1 on equip was not traced, so the first-proc index is stated as derived."
  },
  "insc_death_throes": {
    "build": "24354931",
    "source": "AFFECTER_DeathThroesInscription.Passive_DeathThroesInscription.OnDamage@0x932374",
    "values": {
      "hook": "Before the hit is calculated, in the phase where effects adjust the attacker's stats.",
      "formula": "Bonus = (your missing HP / your max HP) x 20, added as percentage points of Damage Dealt Bonus. Strictly linear, and the ratio itself bounds it at 20.",
      "pipeline": "It lands in the additive damage dealt bracket of the hit, which is then multiplied by the critical multiplier.",
      "summary": "Adds up to +20 percent damage as the wearer's own HP drops.",
      "rule_of_thumb": "Every 10 percent of your own missing HP is +2 percentage points of damage.",
      "scope": "Every damage execution the wearer originates. There is no melee, physical or basic-attack gate at all.",
      "table": {
        "variable_label": "Your missing HP (%)",
        "points": [
          0,
          25,
          50,
          75,
          90,
          99
        ],
        "baseline": "150 physical attack power, a 100 percent coefficient basic attack, target at 0 resistance, critical damage bonus at the default 50 percent.",
        "columns": [
          {
            "label": "Damage bonus",
            "add_per_unit": 0.2,
            "suffix": "%"
          },
          {
            "label": "Normal hit",
            "base": 150.0,
            "pct_per_unit": 0.2
          },
          {
            "label": "Critical hit",
            "base": 150.0,
            "pct_per_unit": 0.2,
            "mult": 1.5
          }
        ]
      },
      "caveats": [
        "It reads your own HP, not the target's.",
        "It is additive with the other damage dealt bonuses, so stacking several of them gives less than each one promises on its own."
      ],
      "interactions": [
        "It pools with Heavy Plumb, Challenge, Crumble and Sinking in the same additive bracket."
      ],
      "citations": [
        {
          "symbol": "AFFECTER_DeathThroesInscription.Passive_DeathThroesInscription.OnDamage",
          "rva": "0x932374",
          "rule": "Reads the wearer's own max and current HP and writes the missing fraction times 20 into the hit's Damage Dealt Bonus, on every damage execution the wearer originates."
        }
      ],
      "affecter": "AFFECTER_DeathThroesInscription"
    },
    "note": "The word proportionally in the tooltip is exactly linear here, and the HP measured is the wearer's own."
  },
  "insc_giant": {
    "build": "24354931",
    "source": "AFFECTER_GiantInscription.Passive_GiantInscription.OnDamage@0x92923C",
    "values": {
      "hook": "Before the hit is calculated, in the phase where effects adjust the attacker's stats.",
      "formula": "Value = your max HP x 10 x 0.01, added as flat Physical Attack Power for that one execution.",
      "pipeline": "This is an absolute addition of Physical Attack Power points inside the execution, applied before the skill's coefficient is read. Because it feeds the attack power term rather than the additive bonus bracket, the skill's coefficient multiplies it.",
      "summary": "Adds 10 percent of your max HP as Physical Attack Power on every hit.",
      "rule_of_thumb": "Every 100 max HP is +10 Physical Attack Power.",
      "scope": "Every damage execution the wearer originates. No gate on damage type, hit type or basic attacks.",
      "table": {
        "variable_label": "Your max HP",
        "points": [
          200,
          300,
          400,
          600,
          800
        ],
        "baseline": "Damage added is the attack power gain run through the skill's coefficient, before the target's resistance.",
        "columns": [
          {
            "label": "Physical Attack Power added",
            "add_per_unit": 0.1
          },
          {
            "label": "Damage added, 100% coefficient skill",
            "add_per_unit": 0.1
          },
          {
            "label": "Damage added, 250% coefficient skill",
            "add_per_unit": 0.1,
            "mult": 2.5
          }
        ]
      },
      "caveats": [
        "Because it multiplies against the skill coefficient, it is worth far more on a high-coefficient skill than on a plain basic attack.",
        "It is not a percentage bonus: the number added is attack power points, so it is diluted by nothing but it also gains nothing from your existing attack power."
      ],
      "interactions": [
        "It does not compete with the additive damage dealt bracket at all, which makes it the better companion to inscriptions that already crowd that bracket."
      ],
      "citations": [
        {
          "symbol": "AFFECTER_GiantInscription.Passive_GiantInscription.OnDamage",
          "rva": "0x92923C",
          "rule": "Reads the wearer's max HP, multiplies by the inscription's value and 0.01, and adds the result to Physical Attack Power for that execution."
        }
      ],
      "affecter": "AFFECTER_GiantInscription"
    },
    "note": "Identical routine to its twin, one register apart. The tooltip does not say the result is a flat stat addition applied per execution, which is the part that matters for skill scaling."
  },
  "insc_divine": {
    "build": "24354931",
    "source": "AFFECTER_DivineInscription.Passive_DivineInscription.OnDamage@0x928F38",
    "values": {
      "hook": "Before the hit is calculated, in the phase where effects adjust the attacker's stats.",
      "formula": "Value = your max HP x 10 x 0.01, added as flat Magic Attack Power for that one execution.",
      "pipeline": "This is an absolute addition of Magic Attack Power points inside the execution, applied before the skill's coefficient is read. Because it feeds the attack power term rather than the additive bonus bracket, the skill's coefficient multiplies it.",
      "summary": "Adds 10 percent of your max HP as Magic Attack Power on every hit.",
      "rule_of_thumb": "Every 100 max HP is +10 Magic Attack Power.",
      "scope": "Every damage execution the wearer originates. No gate on damage type, hit type or basic attacks.",
      "table": {
        "variable_label": "Your max HP",
        "points": [
          200,
          300,
          400,
          600,
          800
        ],
        "baseline": "Damage added is the attack power gain run through the skill's coefficient, before the target's resistance.",
        "columns": [
          {
            "label": "Magic Attack Power added",
            "add_per_unit": 0.1
          },
          {
            "label": "Damage added, 100% coefficient skill",
            "add_per_unit": 0.1
          },
          {
            "label": "Damage added, 250% coefficient skill",
            "add_per_unit": 0.1,
            "mult": 2.5
          }
        ]
      },
      "caveats": [
        "Because it multiplies against the skill coefficient, it is worth far more on a high-coefficient skill than on a plain basic attack.",
        "It is not a percentage bonus: the number added is attack power points, so it is diluted by nothing but it also gains nothing from your existing attack power."
      ],
      "interactions": [
        "It does not compete with the additive damage dealt bracket at all, which makes it the better companion to inscriptions that already crowd that bracket."
      ],
      "citations": [
        {
          "symbol": "AFFECTER_DivineInscription.Passive_DivineInscription.OnDamage",
          "rva": "0x928F38",
          "rule": "Reads the wearer's max HP, multiplies by the inscription's value and 0.01, and adds the result to Magic Attack Power for that execution."
        }
      ],
      "affecter": "AFFECTER_DivineInscription"
    },
    "note": "Identical routine to its twin, one register apart. The tooltip does not say the result is a flat stat addition applied per execution, which is the part that matters for skill scaling."
  },
  "insc_challenge": {
    "build": "24354931",
    "source": "AFFECTER_ChallengeInscription.Passive_ChallengeInscription.OnDamage@0x931FE8",
    "values": {
      "hook": "Before the hit is calculated, in the phase where effects adjust the attacker's stats.",
      "formula": "If the target carries the elite monster or the boss monster tag, a flat 20 percentage points are added to the hit's Damage Dealt Bonus.",
      "pipeline": "It lands in the same additive damage dealt bracket as Heavy Plumb, Death Throes, Crumble and Sinking, and that bracket is then multiplied by the critical multiplier.",
      "summary": "Adds a flat +20 percent damage against elite and boss monsters.",
      "rule_of_thumb": "Against an elite or a boss, multiply the hit by 1.20 before any other bonus dilutes it.",
      "scope": "Every damage execution the wearer originates, not just basic attacks.",
      "table": {
        "variable_label": "Hit damage without the inscription",
        "points": [
          50,
          100,
          150,
          225,
          300
        ],
        "baseline": "Against a target carrying the elite or boss tag.",
        "columns": [
          {
            "label": "Against an elite or boss",
            "base_from_variable": true,
            "pct_flat": 20.0
          },
          {
            "label": "Damage added",
            "add_per_unit": 0.2
          }
        ]
      },
      "caveats": [
        "Elite and boss status is a tag the monster carries, not a stat or a table column.",
        "Additive with the rest of the bracket, so the more damage dealt bonus you already have, the smaller the share this 20 represents."
      ],
      "interactions": [
        "It pools with Heavy Plumb, Death Throes, Crumble and Sinking."
      ],
      "citations": [
        {
          "symbol": "AFFECTER_ChallengeInscription.Passive_ChallengeInscription.OnDamage",
          "rva": "0x931FE8",
          "rule": "Tests the target for the elite monster tag or the boss monster tag and, on a match, adds the inscription's raw value to the hit's Damage Dealt Bonus."
        }
      ],
      "affecter": "AFFECTER_ChallengeInscription"
    },
    "note": "The condition is a tag on the target, which is why no table column can answer what counts as an elite."
  },
  "insc_crumble": {
    "build": "24354931",
    "source": "AFFECTER_CrumbleInscription.Passive_CrumbleInscription.AddDamage@0x9266BC",
    "values": {
      "hook": "Before the hit is calculated for the damage half, and after it lands for the durability drain.",
      "formula": "On a basic attack, a flat 25 percentage points are added to the hit's Damage Dealt Bonus. A second handler reads the skill's durability cost and its proper equipment and publishes the extra wear against that slot.",
      "pipeline": "The 25 is additive inside the damage dealt bracket, which is then multiplied by the critical multiplier.",
      "summary": "Adds a flat +25 percent damage to basic attacks and wears the weapon out faster.",
      "rule_of_thumb": "On a basic attack, multiply the hit by 1.25 before other bonuses dilute it.",
      "scope": "Basic attacks only.",
      "table": {
        "variable_label": "Basic attack damage without the inscription",
        "points": [
          50,
          100,
          150,
          225,
          300
        ],
        "baseline": "Before the target's resistance.",
        "columns": [
          {
            "label": "With the inscription",
            "base_from_variable": true,
            "pct_flat": 25.0
          },
          {
            "label": "Damage added",
            "add_per_unit": 0.25
          }
        ]
      },
      "caveats": [
        "Additive, not multiplicative. It shares the bracket with every other damage dealt bonus.",
        "The durability arithmetic itself was not disassembled. What is settled is that the extra wear is driven by the skill's durability cost and lands on the skill's proper equipment."
      ],
      "interactions": [
        "It pools with Heavy Plumb, Death Throes, Challenge and Sinking."
      ],
      "citations": [
        {
          "symbol": "AFFECTER_CrumbleInscription.Passive_CrumbleInscription.AddDamage",
          "rva": "0x9266BC",
          "rule": "Gates on the wearer being the attacker and the skill being a basic attack, then adds the inscription's raw value to the hit's Damage Dealt Bonus."
        },
        {
          "symbol": "AFFECTER_CrumbleInscription.Passive_CrumbleInscription.OnDamage",
          "rva": "0x9267C8",
          "rule": "Reads the skill's durability cost and proper equipment and publishes the extra durability drain against that slot."
        }
      ],
      "affecter": "AFFECTER_CrumbleInscription"
    },
    "note": "The tooltip leaves both halves ambiguous: the bonus is additive, and the equipment it wears is the skill's own proper equipment slot."
  },
  "insc_reflection": {
    "build": "24354931",
    "source": "AFFECTER_ReflectionInscription.Passive_Reflection.Reflection@0x933DC0",
    "values": {
      "hook": "After a hit lands on the wearer.",
      "formula": "Reflected = the incoming hit's total damage x 100 x 0.01, sent back at the attacker as a fixed-value hit with no damage type.",
      "pipeline": "Having no damage type, the reflected hit takes neither physical nor magic resistance and no typed damage bonus. It is still subject to the reflector's own damage dealt bonus and the attacker's damage taken bonus, and it rolls its own hit and critical.",
      "summary": "Sends 100 percent of every hit you take back at the attacker as typeless damage.",
      "rule_of_thumb": "Whatever number appears over your head, the attacker takes the same number.",
      "scope": "Any hit that is applied to the wearer, from any source.",
      "table": {
        "variable_label": "Damage the incoming hit dealt",
        "points": [
          50,
          100,
          200,
          300,
          500
        ],
        "baseline": "Reflected before the reflector's own damage bonuses and critical roll.",
        "columns": [
          {
            "label": "Reflected back",
            "add_per_unit": 1.0
          }
        ]
      },
      "caveats": [
        "The figure read is the hit's total damage, which is the pre-shield number, not the health you actually lost. A barrier that ate the hit does not shrink the reflection.",
        "Whether a reflected hit can itself trigger a second reflection on the attacker was not verified."
      ],
      "interactions": [
        "Because the reflected hit is typeless, resistance-stacking enemies take it in full."
      ],
      "citations": [
        {
          "symbol": "AFFECTER_ReflectionInscription.Passive_Reflection.Reflection",
          "rva": "0x933DC0",
          "rule": "Gates on the wearer being the victim and the hit having been applied, then finds the attacker on the incoming data."
        },
        {
          "symbol": "AFFECTER_ReflectionInscription.Passive_Reflection.<ReflectionRoutine>d__3.MoveNext",
          "rva": "0x933FFC",
          "rule": "Publishes a fixed-value hit at the attacker worth the full logged damage, with the damage type left at none."
        }
      ],
      "affecter": "AFFECTER_ReflectionInscription"
    },
    "note": "The 100 percent on the page is real, and the base it applies to is the full incoming hit."
  },
  "insc_protection": {
    "build": "24354931",
    "source": "AFFECTER_ProtectionInscription.Passive_ProtectionInscription.OnCombat@0x929680",
    "values": {
      "hook": "Combat start.",
      "formula": "Barrier = (your max HP - your current HP) x 200 x 0.01, truncated toward zero, so twice your missing HP. Nothing happens unless that is at least 1.",
      "pipeline": "The barrier magnitude is carried as stacks of the Barrier effect for 20 seconds. That is why the Barrier row's own values cannot resolve it: the number is bound at runtime.",
      "summary": "At combat start, a barrier worth twice your missing HP for 20 seconds.",
      "rule_of_thumb": "Every 10 HP you are missing is 20 points of barrier.",
      "scope": "Once per combat start, and no more than once per 60 ticks of the internal cooldown.",
      "table": {
        "variable_label": "Your missing HP at combat start",
        "points": [
          0,
          25,
          50,
          100,
          200,
          300
        ],
        "baseline": "Barrier points granted for 20 seconds.",
        "columns": [
          {
            "label": "Barrier granted",
            "add_per_unit": 2.0,
            "floor": true
          }
        ]
      },
      "caveats": [
        "A unit at full HP gets nothing at all.",
        "The 20 second duration and the 60 tick cooldown both come from the inscription's own values."
      ],
      "interactions": [
        "It rewards entering a fight wounded, which runs against every other reason to heal up first."
      ],
      "citations": [
        {
          "symbol": "AFFECTER_ProtectionInscription.Passive_ProtectionInscription.OnCombat",
          "rva": "0x929680",
          "rule": "Fires on combat start and writes the cooldown value into the passive's own counter."
        },
        {
          "symbol": "AFFECTER_ProtectionInscription.Passive_ProtectionInscription.<InCombat>d__4.MoveNext",
          "rva": "0x92982C",
          "rule": "Computes twice the missing HP, truncates it, and grants that many stacks of the Barrier effect for the inscription's duration value."
        }
      ],
      "affecter": "AFFECTER_ProtectionInscription"
    },
    "note": "The 200 percent is 200 percent of missing HP, and the barrier's size travels as effect stacks."
  },
  "insc_elasticity": {
    "build": "24354931",
    "source": "AFFECTER_ElasticityInscription.Passive_ElasticityInscription.OnDamage@0x925F84",
    "values": {
      "hook": "After the wearer guards a hit.",
      "formula": "Heal = (your max HP - your current HP) x 5 x 0.01, which is 5 percent of your current missing health. Iron Wall is then applied for 10 seconds.",
      "pipeline": "The heal is published as its own execution on the wearer.",
      "summary": "Guarding heals 5 percent of your missing HP and grants Iron Wall for 10 seconds.",
      "rule_of_thumb": "Every 100 HP you are missing gives 5 HP back per guard.",
      "scope": "Only on a guarded result, and only when the wearer is the victim.",
      "table": {
        "variable_label": "Your missing HP",
        "points": [
          0,
          50,
          100,
          200,
          400
        ],
        "baseline": "Health restored by one guard.",
        "columns": [
          {
            "label": "Healed per guard",
            "add_per_unit": 0.05
          }
        ]
      },
      "caveats": [
        "It is 5 percent of missing health, not 5 percent of max health, and it has nothing to do with the size of the hit you guarded.",
        "It is exactly zero at full HP and strongest when nearly dead."
      ],
      "interactions": [
        "Guard chance is what turns this on, so it is worth nothing on a unit that rarely guards."
      ],
      "citations": [
        {
          "symbol": "AFFECTER_ElasticityInscription.Passive_ElasticityInscription.OnDamage",
          "rva": "0x925F84",
          "rule": "Gates on the logged result being a guard and the wearer being the victim."
        },
        {
          "symbol": "AFFECTER_ElasticityInscription.Passive_ElasticityInscription.<Heal>d__3.MoveNext",
          "rva": "0x9261FC",
          "rule": "Heals 5 percent of the wearer's current missing health and applies Iron Wall for the inscription's second value in seconds."
        }
      ],
      "affecter": "AFFECTER_ElasticityInscription"
    },
    "note": "The tooltip's lost Health is current missing health, which is the reading that makes the effect worthless at full HP."
  },
  "insc_capital": {
    "build": "24354931",
    "source": "AFFECTER_CapitalInscription.Passive_CapitalInscription.OnDamage@0x92455C",
    "values": {
      "hook": "After the hit has landed and its damage is known.",
      "formula": "If the target's current HP divided by its max HP is at or below 20 percent, and the target does not carry the boss tag, the Execution effect is applied to it for 1 second.",
      "pipeline": "The inscription deals no lethal damage of its own. It applies a status, and that status does the killing.",
      "summary": "Enemies at or below 20 percent HP are finished off after they take a hit.",
      "rule_of_thumb": "Read the threshold straight off the enemy's max HP: a fifth of it is the execute line.",
      "scope": "Any hit the wearer lands on a target that is not already dead.",
      "table": {
        "variable_label": "Enemy max HP",
        "points": [
          100,
          200,
          400,
          800,
          1500
        ],
        "baseline": "The HP at or below which the enemy is executed.",
        "columns": [
          {
            "label": "Executed at or below",
            "add_per_unit": 0.2
          }
        ]
      },
      "caveats": [
        "The pool read is the combined head and body health, not one of the two.",
        "The only exclusion is the boss tag. Elite monsters are executable, which the tooltip does not say."
      ],
      "interactions": [
        "Anything that pushes a target under a fifth of its health, including Sinking's own missing-HP burst, sets this up."
      ],
      "citations": [
        {
          "symbol": "AFFECTER_CapitalInscription.Passive_CapitalInscription.OnDamage",
          "rva": "0x92455C",
          "rule": "Compares the target's current health against a fifth of its max health and checks the target for the boss tag."
        },
        {
          "symbol": "AFFECTER_CapitalInscription.Passive_CapitalInscription.<DamageRoutine>d__3.MoveNext",
          "rva": "0x924824",
          "rule": "Applies one stack of the Execution effect to the target for one second."
        }
      ],
      "affecter": "AFFECTER_CapitalInscription"
    },
    "note": "Instantly executed is a status application, not a direct kill, and elites are not excluded."
  },
  "insc_goldmine": {
    "build": "24354931",
    "source": "AFFECTER_GoldmineInscription.Passive_GoldmineInscription.OnDamage@0x9278F4",
    "values": {
      "hook": "After a critical hit lands.",
      "formula": "Each critical hit pays 10 gold and takes 10 off a remaining budget. Once the budget is spent, the inscription grants critical chance once instead.",
      "pipeline": "The gold is a money change, and a visible counter effect is stacked on the wearer alongside it so the running total is readable.",
      "summary": "Critical hits pay 10 gold each up to 2000 gold, then grant +10 critical chance.",
      "rule_of_thumb": "10 critical hits is 100 gold. 200 of them exhausts the budget.",
      "scope": "Any critical hit the wearer lands.",
      "table": {
        "variable_label": "Critical hits landed",
        "points": [
          1,
          10,
          50,
          100,
          200,
          300
        ],
        "baseline": "Gold paid out, against the 2000 gold budget.",
        "columns": [
          {
            "label": "Gold earned",
            "add_per_unit": 10.0,
            "cap": 2000.0
          }
        ]
      },
      "caveats": [
        "The critical chance granted at the end reads the inscription's FIRST value, not its third. The third value exists only to fill the tooltip's placeholder, so editing it changes the text and nothing else. Both happen to be 10, which is what hides the bug.",
        "The 2000 budget is inferred: the decrement and the remaining-budget test were read, but the line that seeds the budget from the second value was not located."
      ],
      "interactions": [
        "Critical chance is what drives the whole thing, so it pairs with anything that raises it."
      ],
      "tooltip_conflicts": [
        {
          "says": "then Critical Chance increases by the third value",
          "does": "the routine loads the first value instead. The bonus is +10 critical chance because the first value is 10, not because the third one is."
        }
      ],
      "citations": [
        {
          "symbol": "AFFECTER_GoldmineInscription.Passive_GoldmineInscription.OnDamage",
          "rva": "0x9278F4",
          "rule": "On a critical result, pays out while the budget is at least 1, otherwise sets the maxed flag and grants the critical chance once."
        },
        {
          "symbol": "AFFECTER_GoldmineInscription.Passive_GoldmineInscription.<AddMoeny>d__5.MoveNext",
          "rva": "0x927D20",
          "rule": "Pays the inscription's first value in gold, subtracts the same figure from the budget, and stacks the visible counter effect."
        },
        {
          "symbol": "AFFECTER_GoldmineInscription.Passive_GoldmineInscription.<AddCritical>d__6.MoveNext",
          "rva": "0x927C24",
          "rule": "Grants critical chance from the inscription's FIRST value. The third value is never read."
        }
      ],
      "affecter": "AFFECTER_GoldmineInscription"
    },
    "note": "A dead placeholder: the tooltip's third number is decorative. Recorded explicitly so nobody tunes it expecting an effect."
  },
  "insc_sprouting_shell": {
    "build": "24354931",
    "source": "AFFECTER_SproutingShellInscription.Passive_SproutingShell.SproutingShell@0x935C60",
    "values": {
      "hook": "Whenever the wearer's Energy goes up, then again when the hidden counter is applied.",
      "formula": "Energy recovered is banked into a float accumulator. Every whole point becomes 1 stack of the hidden counter. When the counter reaches 60 the wearer gains 1 Shell, unless it already holds 20 Shell.",
      "pipeline": "One counter stack is exactly 1 Energy, which is why the counter's max stack is 200.",
      "summary": "Every 60 Energy recovered grants 1 Shell, up to a ceiling of 20 Shell.",
      "rule_of_thumb": "60 Energy is 1 Shell.",
      "scope": "Any positive energy change on the wearer.",
      "table": {
        "variable_label": "Energy recovered",
        "points": [
          60,
          120,
          300,
          600,
          1200,
          1500
        ],
        "baseline": "Shell held, assuming none was lost in between.",
        "columns": [
          {
            "label": "Shell gained",
            "add_per_unit": 0.016666666666666666,
            "floor": true,
            "cap": 20.0
          }
        ]
      },
      "caveats": [
        "Fractional energy regeneration is banked rather than dropped, so nothing is lost to rounding.",
        "The 20 is the ceiling on Shell stacks, not a cap on how many times the inscription may trigger.",
        "On each grant the counter resets to 1, not to 0."
      ],
      "interactions": [
        "Anything that raises energy regeneration raises the Shell rate in direct proportion."
      ],
      "citations": [
        {
          "symbol": "AFFECTER_SproutingShellInscription.Passive_SproutingShell.SproutingShell",
          "rva": "0x935C60",
          "rule": "Accumulates positive energy changes and converts each whole point into one stack of the hidden counter."
        },
        {
          "symbol": "AFFECTER_SproutingShellInscription.Passive_SproutingShell.<SproutingShellAddRoutine>d__7.MoveNext",
          "rva": "0x936030",
          "rule": "Grants one Shell when the counter reaches the first value, unless the wearer already holds the third value in Shell, then trims the counter back to 1."
        }
      ],
      "affecter": "AFFECTER_SproutingShellInscription"
    },
    "note": "The three numbers on the tooltip are a threshold, a grant size and a Shell ceiling, in that order. The max stack of 200 on the row belongs to the hidden energy counter."
  },
  "insc_excessive_bleeding": {
    "build": "24354931",
    "source": "AFFECTER_ExcessiveBleedingInscription.Passive_ExcessiveBleeding.ExcessiveBleeding@0x934560",
    "values": {
      "hook": "Before the hit is calculated for the counter, and when the counter effect is applied for the payout.",
      "formula": "Every basic attack adds 1 stack to a hidden counter. On reaching 3, the target takes 2 stacks of Bleeding for 6 seconds.",
      "pipeline": "The Bleeding stacks are applied to the target of the attack that completed the cycle.",
      "summary": "Every 3rd basic attack applies 2 stacks of Bleeding for 6 seconds.",
      "rule_of_thumb": "3 basic attacks is one payout of 2 Bleeding stacks.",
      "scope": "Basic attacks only.",
      "table": {
        "variable_label": "Basic attacks landed",
        "points": [
          3,
          6,
          9,
          12,
          30
        ],
        "baseline": "Payouts and Bleeding stacks applied over a run of basic attacks.",
        "columns": [
          {
            "label": "Payouts",
            "add_per_unit": 0.3333333333333333,
            "floor": true
          },
          {
            "label": "Bleeding stacks applied",
            "add_per_unit": 0.3333333333333333,
            "floor": true,
            "mult": 2
          }
        ]
      },
      "caveats": [
        "The counter effect's max stack of 4 is the 1, 2, 3, 4 then reset pattern, not a 4-attack cadence.",
        "The counter is invisible in game."
      ],
      "interactions": [
        "Stacks refresh onto the same target, so the Bleeding damage compounds against a single enemy you keep hitting."
      ],
      "citations": [
        {
          "symbol": "AFFECTER_ExcessiveBleedingInscription.Passive_ExcessiveBleeding.ExcessiveBleeding",
          "rva": "0x934560",
          "rule": "Publishes the counter routine on every basic attack, and drives the counter from the effect apply hook."
        },
        {
          "symbol": "AFFECTER_ExcessiveBleedingInscription.Passive_ExcessiveBleeding.<ExcessiveBleedingRoutine>d__5.MoveNext",
          "rva": "0x934B0C",
          "rule": "Adds one counter stack, and on reaching the first value applies the third value in Bleeding stacks to the target for the second value in seconds."
        }
      ],
      "affecter": "AFFECTER_ExcessiveBleedingInscription"
    },
    "note": "Byte-for-byte the same routine shape as its twin, with Bleeding substituted. The table's max stack of 4 against a 3-attack cadence is the reset pattern, not a contradiction."
  },
  "insc_ember": {
    "build": "24354931",
    "source": "AFFECTER_EmberInscription.Passive_Ember.Amber@0x9350DC",
    "values": {
      "hook": "Before the hit is calculated for the counter, and when the counter effect is applied for the payout.",
      "formula": "Every basic attack adds 1 stack to a hidden counter. On reaching 3, the target takes 2 stacks of Burning for 6 seconds.",
      "pipeline": "The Burning stacks are applied to the target of the attack that completed the cycle.",
      "summary": "Every 3rd basic attack applies 2 stacks of Burning for 6 seconds.",
      "rule_of_thumb": "3 basic attacks is one payout of 2 Burning stacks.",
      "scope": "Basic attacks only.",
      "table": {
        "variable_label": "Basic attacks landed",
        "points": [
          3,
          6,
          9,
          12,
          30
        ],
        "baseline": "Payouts and Burning stacks applied over a run of basic attacks.",
        "columns": [
          {
            "label": "Payouts",
            "add_per_unit": 0.3333333333333333,
            "floor": true
          },
          {
            "label": "Burning stacks applied",
            "add_per_unit": 0.3333333333333333,
            "floor": true,
            "mult": 2
          }
        ]
      },
      "caveats": [
        "The counter effect's max stack of 4 is the 1, 2, 3, 4 then reset pattern, not a 4-attack cadence.",
        "The counter is invisible in game."
      ],
      "interactions": [
        "Stacks refresh onto the same target, so the Burning damage compounds against a single enemy you keep hitting."
      ],
      "citations": [
        {
          "symbol": "AFFECTER_EmberInscription.Passive_Ember.Amber",
          "rva": "0x9350DC",
          "rule": "Publishes the counter routine on every basic attack, and drives the counter from the effect apply hook."
        },
        {
          "symbol": "AFFECTER_EmberInscription.Passive_Ember.<AmberRoutine>d__5.MoveNext",
          "rva": "0x935688",
          "rule": "Adds one counter stack, and on reaching the first value applies the third value in Burning stacks to the target for the second value in seconds."
        }
      ],
      "affecter": "AFFECTER_EmberInscription"
    },
    "note": "Byte-for-byte the same routine shape as its twin, with Burning substituted. The table's max stack of 4 against a 3-attack cadence is the reset pattern, not a contradiction."
  },
  "insc_flint": {
    "build": "24354931",
    "source": "AFFECTER_FlintInscription.Passive_FlintInscription.OnDamage@0x92730C",
    "values": {
      "hook": "After a critical hit lands.",
      "formula": "A critical basic attack applies 5 stacks of Burning to the target for 10 seconds.",
      "pipeline": "The Burning stacks land on the target of the critical hit.",
      "summary": "Critical basic attacks apply 5 stacks of Burning for 10 seconds.",
      "rule_of_thumb": "Each critical basic attack is 5 Burning stacks.",
      "scope": "Basic attacks only, and only on a critical result.",
      "table": {
        "variable_label": "Critical basic attacks",
        "points": [
          1,
          2,
          3,
          5,
          10
        ],
        "baseline": "Burning stacks applied, before the target's stack ceiling.",
        "columns": [
          {
            "label": "Burning stacks applied",
            "add_per_unit": 5.0
          }
        ]
      },
      "caveats": [
        "The trigger is the resolved result on the hit's log, which means a critical that was actually processed, not merely a critical roll.",
        "Behaviour against a target that took 0 damage from an immune result was not verified."
      ],
      "interactions": [
        "Critical chance drives the whole effect, so it scales with anything that raises it."
      ],
      "citations": [
        {
          "symbol": "AFFECTER_FlintInscription.Passive_FlintInscription.OnDamage",
          "rva": "0x92730C",
          "rule": "Gates on the wearer being the attacker, the skill being a basic attack, and the logged result being a critical hit."
        },
        {
          "symbol": "AFFECTER_FlintInscription.Passive_FlintInscription.<Attack>d__3.MoveNext",
          "rva": "0x92753C",
          "rule": "Applies the first value in Burning stacks to the target for the second value in seconds."
        }
      ],
      "affecter": "AFFECTER_FlintInscription"
    },
    "note": "The tooltip is nearly complete. The one thing it does not say is that the trigger is a critical that landed, not the critical roll itself."
  },
  "insc_bloodshot": {
    "build": "24354931",
    "source": "AFFECTER_BloodshotInscription.Passive_BloodshotInscription.OnDamage@0x926D60",
    "values": {
      "hook": "After a critical hit lands.",
      "formula": "A critical basic attack applies 5 stacks of Bleeding to the target for 10 seconds.",
      "pipeline": "The Bleeding stacks land on the target of the critical hit.",
      "summary": "Critical basic attacks apply 5 stacks of Bleeding for 10 seconds.",
      "rule_of_thumb": "Each critical basic attack is 5 Bleeding stacks.",
      "scope": "Basic attacks only, and only on a critical result.",
      "table": {
        "variable_label": "Critical basic attacks",
        "points": [
          1,
          2,
          3,
          5,
          10
        ],
        "baseline": "Bleeding stacks applied, before the target's stack ceiling.",
        "columns": [
          {
            "label": "Bleeding stacks applied",
            "add_per_unit": 5.0
          }
        ]
      },
      "caveats": [
        "The trigger is the resolved result on the hit's log, which means a critical that was actually processed, not merely a critical roll.",
        "Behaviour against a target that took 0 damage from an immune result was not verified."
      ],
      "interactions": [
        "Critical chance drives the whole effect, so it scales with anything that raises it."
      ],
      "citations": [
        {
          "symbol": "AFFECTER_BloodshotInscription.Passive_BloodshotInscription.OnDamage",
          "rva": "0x926D60",
          "rule": "Gates on the wearer being the attacker, the skill being a basic attack, and the logged result being a critical hit."
        },
        {
          "symbol": "AFFECTER_BloodshotInscription.Passive_BloodshotInscription.<Attack>d__3.MoveNext",
          "rva": "0x926F90",
          "rule": "Applies the first value in Bleeding stacks to the target for the second value in seconds."
        }
      ],
      "affecter": "AFFECTER_BloodshotInscription"
    },
    "note": "The tooltip is nearly complete. The one thing it does not say is that the trigger is a critical that landed, not the critical roll itself."
  },
  "inscription_execution_pipeline": {
    "build": "24354931",
    "source": "Refactor.Combat.ExecutionSystem.ProcessNode@0xA69080",
    "values": {
      "order": [
        "The calc-status phase runs first: this is where an inscription writes a bonus into the hit that is about to be calculated.",
        "The before-process phase runs next.",
        "The hit is simulated, and the resulting total damage is stored on the execution.",
        "The after-process phase runs last: this is where an inscription reads the damage that landed and publishes a follow-up hit."
      ],
      "scoping": "Stat bonuses written by a calc-status hook are stored against the one execution object they were written for, so a follow-up hit published later never inherits them.",
      "publisher": "A passive keyed as an effect publishes its hits with the effect as their publisher, not a skill. Every basic-attack gate in the inscription passives tests the publisher for being a skill first, so effect-published hits can never re-trigger those inscriptions.",
      "double_dip": "A permanent damage dealt bonus counts twice into a damage-derived splash, once inside the hit that produced the figure and again on the splash's own bracket. A per-execution bonus such as Sinking counts once.",
      "citations": [
        {
          "symbol": "Refactor.Combat.ExecutionSystem.ProcessNode",
          "rva": "0xA69080",
          "rule": "The phase order, and the point at which the log carrying the total damage is attached to the execution."
        },
        {
          "symbol": "Refactor.Combat.ExecutionStatusModifier.GetUserModifierGetter",
          "rva": "0x877580",
          "rule": "Bonuses are keyed by the execution object, so a fresh execution reads none of them."
        },
        {
          "symbol": "Refactor.PassiveAction.Enable",
          "rva": "0x985FD4",
          "rule": "The publisher an effect's passive uses is chosen from the key prefix, which is why effect-published hits fail every basic-attack gate."
        }
      ]
    },
    "note": "The three structural facts every inscription interaction on this wiki reduces to. Build 24389032 shows the same class shape with shifted addresses; only 24354931 is byte-verified."
  }
}
