Repository navigation
pf2e 0.10.9: counteracting effects, afflictions and conditions - #81
Merged
Merged
Conversation
- Note, RollTwice, AdjustDegreeOfSuccess and SubstituteRoll rules apply to +check and to every check, save, initiative, Strike and spell attack in an encounter: fortune and misfortune roll 2d20 and cancel each other, a degree adjustment names the rule that made it, notes that fit the result follow the roll (GM-only ones go to the encounter's GM). - `+check <statistic> with <name>` uses a roll substitution such as Assurance; AdjustModifier rules that suppress a modifier (Assurance's) apply, and AdjustModifier reads `selectors` too. - RollOption rules apply in full: toggles with suboptions, alwaysActive, disabledIf, mergeable, predicates, domains other than all, injected options and counts. `+toggle` changes them on the sheet as ledger entries; `+enc/toggle` changes the encounter's copy only. - An attack in an encounter is rolled with the attacker's rules, not the target's. - Foundry's English strings for rule labels and notes come with the feed (lang/), read by +pf2e/update into a new data object, so notes and labels show in words. - Help for +check, +toggle and +enc/toggle; pf2e-remaster 1.6.1 describes them. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rqqt7Vksxw4GuJpVWB78aJ
Strike damage now runs through a damage plan modelled on Foundry's WeaponDamagePF2e: base dice, Strength, runes, trait dice (deadly, fatal), trait modifiers (backstabber, kickback, tearing, venomous, splash), FlatModifier damage with category and critical, DamageDice and DamageAlteration rules with their predicates, and dice overrides. The formula is grouped into instances by damage type and kind (main, precision, splash, persistent); a critical hit doubles all but splash. - Resistances and immunities apply once per damage type instance; precision damage inside it also meets precision immunity/resistance. - +enc/damage/half and /double. - +enc/strike computes only the named Strike, which keeps a strike under the function invocation limit. - Creatures below level 0 now get their conditions (off-guard AC). - +enc/strike <who>:<target> with an unknown <who> says so. - pf2e-remaster 1.6.2: the wiki page says how Strike damage is built. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rqqt7Vksxw4GuJpVWB78aJ
Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rqqt7Vksxw4GuJpVWB78aJ
Spell damage is built the way Foundry's SpellPF2e.getDamage builds it: the spell's damage parts become base terms, then FlatModifier, DamageDice and DamageAlteration rules for damage, spell-damage, <spell id>-damage, and attack-damage and attack-spell-damage for a spell attack, with the cast-a-spell action, the spell's traits and tradition and its item options as roll options. A status bonus to damage such as Courageous Anthem's now reaches spells. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rqqt7Vksxw4GuJpVWB78aJ
…heet Seven more rule element kinds apply, through one helper that runs a kind's rules whose predicates hold (FUN`CHECK`RULES`EACH): - Weakness, Resistance and Immunity on characters and on effects; an encounter's damage meets a character's as it does a creature's, and +sheet lists them. - DexterityModifierCap: the lowest cap counts in AC. - MultipleAttackPenalty: a Strike's penalty step is the smallest of 5, 4 when agile, and the rules for its attack domains, on +sheet, +enc/look and +enc/strike. - BaseSpeed: other movement types on +sheet; a land BaseSpeed raises the ancestry's Speed. - Sense: the ancestry's vision and Sense rules on +sheet. - CreatureSize: size on +sheet, set or stepped by the rules. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rqqt7Vksxw4GuJpVWB78aJ
FUN`CHECK`PREPARE keeps the registers it works out from a ledger under CACHE`<key> on the core, keyed on the ledger, the package version, the books and CACHE`STAMP (bumped by the deity table and the updater). The sheet's statistics, Strikes and Strike lines are kept under the same key. +sheet works out the parts not cached in queue entries of their own, so a first view stays under the function invocation limit. Tess's +sheet: ~25,700 function calls before, ~3,100 cached, at level 5 and level 20. A cached prepare costs ~260 instead of ~5,800. tools/check-pf2e-cache-version.py fails when DATA`CACHE`VERSION does not follow the package version. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rqqt7Vksxw4GuJpVWB78aJ
A granted item's ItemAlteration rules reach a Strike (other-tags, traits, damage-type, damage-dice-faces, damage-dice-number, runes-potency, runes-striking), the worn armor (runes-potency, runes-resilient, ac-bonus) and the held shield (hardness), lowest priority first, each rule's predicate tested with the item's roll options as the rules before it left them. Rules for other properties keep the item on the sheet's "Not applied yet" line. Deadly Grace gives a Dogslicer and a fist deadly-d8, Powerful Fist a d6 fist, and Forgefather's Seal leather armor +2 AC. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rqqt7Vksxw4GuJpVWB78aJ
…gear FUN`ITEM`ALTER now reaches any item: traits and other tags, the name, descriptions (added or replaced, each part with its own predicate), frequencies, a spell's area and passive defense, bulk and the rune and hardness numbers. A spell cast is altered with the casting's roll options (spellcasting category and tradition, spell slot, rank, area, defense), and a spell attack whose passive defense is a save targets that save's DC. +build/info shows an item as the character's rules change it, with its frequency. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rqqt7Vksxw4GuJpVWB78aJ
+hero shows them (0 to 3, 1 until set); +hero/award and +hero/set are for staff and the GM of a character's encounter. +hero/reroll spends one on a fortune reroll that keeps the new result: the last +check, or in an encounter the character's part of the last Strike, check or save while nothing has changed since. A Strike is made again from the state before it; a save is rolled again for that character alone. Rolls with a fortune effect, rerolls and substitutions are refused; against misfortune the two cancel. +hero/recover is Heroic Recovery: all Hero Points, no longer dying, stable at 0 HP, wounded unchanged. Points live in the day, so an encounter's copy keeps its own until +enc/keep. The sheet shows them. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rqqt7Vksxw4GuJpVWB78aJ
Foundry keeps property runes in runes.ts, not in its packs; a new generator, tools/pf2e-feed/property_runes.py, writes them onto the core as DATA`RUNE`W` and DATA`RUNE`A` tables (80 weapon runes, 58 armor runes). +build/upgrade <item>=<rune> etches a property rune into the slots potency gives, checks level and rarity (staff etch uncommon and rare), replaces the lesser rune of a family paying the difference, and takes one off with "remove <rune>". The sheet lists each item's runes. Strikes apply them as Foundry does: extra dice by predicate (crit-only and persistent ones too, Shockwave's splash), ignored resistances, traits gained (holy, unholy, trip, nonlethal), Keen's degree adjustment, and the runes' attack and damage notes. Also fixes the +build/upgrade "not enough money" message, which a ; split. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rqqt7Vksxw4GuJpVWB78aJ
… them Each damage type's instance is tested on its own with its formal description and the attack's roll options, as Foundry's applyIWR does: exceptions (physical except silver), resistance doubled against non-magical damage, weapon materials and property runes (ghost touch), holy and unholy, spells, area and splash damage, precision, critical hits, persistent damage, and vitality, void and bleed against undead, constructs and the living. Weaknesses add per instance; tradition, holy, unholy and the like add once. Immune targets take no persistent damage of that type. Immunity rules with mode remove no longer count as immunities. The sheet and Recall Knowledge show exceptions. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rqqt7Vksxw4GuJpVWB78aJ
Shield Block (+enc/block) answers the damage just dealt: Hardness takes its share, the shield takes the rest up to its Hit Points, and the shield breaks at its Broken Threshold and is destroyed at 0. Reactions are tracked per round; Quick Shield Block gives a second block. Reactive Shield raises as a reaction. Creatures raise and block with their own shields. The Shield spell blocks through its effect, ends when it blocks, and cannot be cast again in the encounter. Reinforcing runes raise a shield's Hardness and Hit Points as Foundry caps them. Effects that set system.attributes.shield apply in priority order, and the actor's roll data carries the shield (Reflexive Shield). +repair is the Repair activity on the held shield. Shield damage stays in the day and +enc/keep writes it back. Roll options self:type:*, self:shield:raised/broken/destroyed and self:effect:raise-a-shield. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rqqt7Vksxw4GuJpVWB78aJ
The core counts Bulk in light units the way Foundry's InventoryBulk does: an equipped item its Bulk, a held-or-stowed one its heldOrStowed (armor one step more), scaled to the actor's size, stack groups such as arrows and coins counted per bundle, and 1,000 coins one Bulk (the ledger now carries the purse as a coins entry numbered 0). Limits are 5 and 10 plus the Strength modifier, with ActiveEffectLike rules on inventory.bulk.encumberedAfterAddend and maxAddend (Hefty Hauler, Ant Haul, Lifting Belt). Past the first the actor has the encumbered condition and clumsy 1, as Foundry imposes them. +sheet shows a Bulk row. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rqqt7Vksxw4GuJpVWB78aJ
An effect's ChoiceSet of the bearer's own items (Runic Weapon, Precious Metals, oils, Blessed Armament: 27 effects) picks the item named with "on <item>" in +cast, +enc/effect, +enc/use and +enc/act, or the only weapon, armor or shield that fits; ItemAlteration rules naming that item by id now apply. +enc/effect takes "as <choice>" like +cast, and choices whose values are plain strings are matched by value. ItemAlteration material-type sets a Strike's, armor's or shield's material, so a silvered weapon passes resistances with a silver exception. pd-recovery-dc on the persistent-damage condition (Charhide Goblin, Scar-Thick Skin) sets the flat check's DC at the end of a turn. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rqqt7Vksxw4GuJpVWB78aJ
An oil whose effect goes on an item is refused, and not used up, until the item is named or only one fits. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rqqt7Vksxw4GuJpVWB78aJ
An effect in an encounter carries its badge as Foundry starts it: a counter's value, or a formula rolled (Devise a Stratagem's 1d20, Glutton's Jaws' level d4). The badge reaches the effect's rules as @item.badge.value and as its roll option, so Impenetrable Scale's resistance, Glutton's Jaws' temporary Hit Points and Bless's aura follow it. +enc/badge sets it or moves it by +n/-n within the counter's bounds: its labels, its max, or its own badge-max rule (Remaining Air: 5 plus Constitution). Looping counters go round, and a counter taken below its least ends the effect. The encounter shows each badge, by label when it has labels. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rqqt7Vksxw4GuJpVWB78aJ
Rule elements on effects and granted items see parent:* options the way Foundry's do: the parent item's id, slug, type, level, traits, tags and badge, the granter's id, slug and traits, and an effect's origin (the item or spell that brought it and the creature that used it, with the check outcome). A ChoiceSet whose choices test parent: options picks the one choice that fits on its own, so Frost Vial's effect knows which vial. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rqqt7Vksxw4GuJpVWB78aJ
The rules core gains a variants setting, a list of GM Core variant rules the game plays with, off by default. free-archetype adds an archetype feat slot at every even level, taking archetype feats only, with the same dedication rule as class feat slots, as Foundry's archetype feat group does. pf2e-config is a new bridge that registers the core with plus-config, so staff change the pf2e settings with +config pf2e. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rqqt7Vksxw4GuJpVWB78aJ
The variants setting takes abp and abp-fundamental, Foundry's two forms of GM Core's Automatic Bonus Progression. A character's level gives potency bonuses to Strikes, AC, Perception and saves and extra weapon damage dice. Weapons and armor lose their fundamental runes, and item bonuses of 0 or more from equipment are set aside. abp-fundamental keeps property runes up to the level's potency. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rqqt7Vksxw4GuJpVWB78aJ
The builder reads the runes the ledger holds and counts property rune slots from the ABP potency of the level; fundamental runes are refused under ABP. ABP is applied to armor and Strikes after ItemAlterations. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rqqt7Vksxw4GuJpVWB78aJ
The rules core, the commands and the table declare their own function_invocation_limit of 300000 (package format 1.19), so a sheet prepared cold from a long ledger no longer runs out of the game's 25000 calls. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rqqt7Vksxw4GuJpVWB78aJ
The variants setting takes proficiency-without-level, GM Core's variant as Foundry's pwol setting has it. Proficiency bonuses leave out the level and come from the proficiency-bonuses setting (-2 2 4 6 8 by default). DCs by level lose the level, and creature XP uses the variant's table. Creatures and hazards lose their level from AC, attacks, saves, Perception and skills. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rqqt7Vksxw4GuJpVWB78aJ
The gradual-boosts variant gives one attribute boost at each level from 2nd to 5th, 7th to 10th, 12th to 15th and 17th to 20th instead of four at 5th, 10th, 15th and 20th, and refuses an attribute boosted twice in one group of levels. +build lists each level's boost. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rqqt7Vksxw4GuJpVWB78aJ
The stamina variant halves a class's Hit Points a level and gives the other half plus the Constitution modifier as Stamina Points, with Resolve Points equal to the key attribute's modifier, as Foundry computes them. Damage in an encounter takes temporary Hit Points, then Stamina Points, then Hit Points. +steel (Steel Your Resolve) and +breather (Take a Breather, outside encounters) spend Resolve Points; +rest fills both; +enc/keep writes them back to the day. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rqqt7Vksxw4GuJpVWB78aJ
A character at 0 HP read as full HP in +rest, +heal, +enc/join and healing casts, because firstof() treats 0 as empty. FUN`DAILY`HP reads the stored value with isint(). FUN`ACT`TAKE now clears check_ registers it did not hold, so the target's options (Tess's fortune) no longer leak into its attacker's roll. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rqqt7Vksxw4GuJpVWB78aJ
+act [<who>:]<action> [<target>][=<option>] rolls an action from the action table (DATA`ACTION`<SLUG> on the table) against the target's DC and applies its degree: conditions with durations, damage, grabs and releases. First batch: Demoralize, Feint, Trip, Grapple, Shove, Disarm, Reposition, Escape, Tumble Through. Attack actions take and add multiple attack penalty; Demoralize leaves the target immune to the same actor. Actions are counted on the acting combatant's turn; a fourth action (three plus quickened, minus slowed and stunned) shows a warning. A duration key~N~end ticks at the end of the turn (FUN`TURN`ENDTICK). Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rqqt7Vksxw4GuJpVWB78aJ
Adds Stride, Step, Crawl, Leap, Interact, Point Out, Drop Prone, Stand, Take Cover, Avert Gaze, Release, Bon Mot, Sense Motive, Lie, Hide, Sneak, Seek, Create a Diversion, Steal, Request and Command an Animal. An action row without a stat is not rolled. tgt many rolls once against each target's DC (every foe still up when none are named). A secret action tells the room it happened and sends the roll to the GM. New outcome kinds: fx (an effect, its ChoiceSets taken from the action's degree, as Bon Mot's), uncond and unhold. An effect's origin outcome of 0 (critical failure) is kept, and an object choice without a slug is named by its label. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rqqt7Vksxw4GuJpVWB78aJ
+act aid <ally>=<skill> rolls against DC 15 as a reaction and puts the Aid effect on the ally: +1 on a success, +2 on a critical success (+3 master, +4 legendary), -1 on a critical failure. FlatModifier removeAfterRoll now works as Foundry's afterRoll: after a combatant's check or attack roll, an effect whose FlatModifier says true ends; if-enabled, when its selectors are among the roll's domains and its predicate holds; a predicate, when the roll's options meet it. The roll line says "(Aid used)". +enc/check stores the encounter so the end sticks. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rqqt7Vksxw4GuJpVWB78aJ
A creature Strike that hits brings its attack effects. An affliction (an ability whose text has stages, such as Giant Centipede Venom) is saved against at once; a failure starts stage 1, a critical failure stage 2, after any onset. At the end of the afflicted one's turn, when the stage's time is up, they save again and move up or down; each stage brings its damage and conditions, and the maximum duration ends it. The stages are read from the ability's text (FUN`AFF`PARSE). Creature immunity to poison or disease is honoured. +enc/afflict <who>=<poison or disease> exposes anyone to an affliction from the equipment items; =-<name> ends one. +act takes Grab, Improved Grab, Knockdown, Improved Knockdown, Push and Improved Push, and a Strike that lists one names the command. +enc shows afflictions and their stage. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rqqt7Vksxw4GuJpVWB78aJ
+act <action> vs <DC> rolls against a DC the GM gives. Outside an encounter, or for a character not in it, +act rolls against the sheet; an action that reads a target's DC needs vs <DC> there, and the result is its note. An action with no DC of its own (Climb) rolls alone or against vs, with no target needed. New actions: Climb, Swim, High Jump, Long Jump, Force Open, Balance, Squeeze, Maneuver in Flight, Track, Sense Direction, Cover Tracks, Decipher Writing, Gather Information, Perform, Make an Impression, Coerce, Impersonate, Create Forgery, Subsist, Pick a Lock, Disable a Device, Palm an Object, Conceal an Object, Administer First Aid (15 plus dying; stabilizes, or dying +1 on a critical failure) and Stop Bleeding. Row fields dcfix, dcfn, need and needvs; outcome kinds inc and unpers. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rqqt7Vksxw4GuJpVWB78aJ
…, Treat Disease - +pf2e/time shows the world clock (WORLD`CLOCK on the core); staff move it with +pf2e/time/advance <n> <rounds|minutes|hours|days|weeks>. - Treat Wounds heals the sheet, in or out of an encounter: the DC tier asked for, no higher than the healer's Medicine rank, with Medic Dedication and Magic Hands as Foundry counts them. Success and critical success end wounded; the patient is immune for an hour of the world clock. - Battle Medicine: the same healing in an encounter (immune to that healer for a day there), or on the sheet outside one. - Treat Poison rolls against the DC of the target's poison and gives the Treat Poison effect from its degree; the next save against the poison counts it and removes it. Afflictions now keep their kind and traits. - Treat Disease, outside encounters, against vs <DC>. - An encounter immunity key with a hyphen in the action's slug no longer breaks the encounter's JSON. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rqqt7Vksxw4GuJpVWB78aJ
- +enc/react [<who>:]<target>[=<strike>] makes a Reactive Strike (or Attack of Opportunity): the class feature or feat for a character, the ability for a creature. No multiple attack penalty, none added, no action counted; it spends the reaction, which comes back at the start of the combatant's turn. Without a Strike named, it takes the first melee one. - Aid spends the reaction instead of an action, and is refused once the reaction is used. - A creature's ranged Strike (range increment in Foundry's data) counts as ranged for ranged-strike-attack-roll selectors. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rqqt7Vksxw4GuJpVWB78aJ
- +enc/react takes the first melee Strike that needs no drawing, or the one named, and refuses a ranged or carried one, or none. - The Fighter's Reactive Strike class feature counts as well as the feat. - A Hero Point reroll of a Reactive Strike is made as a reaction again. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rqqt7Vksxw4GuJpVWB78aJ
…grant - The effect of a sustained spell lasts until the end of the caster's next turn, then ends with a line saying it was not sustained. +act sustain (one action, concentrate) keeps each of the caster's sustained effects going to the end of their next turn; it is refused on the turn the spell was cast and a second time in a turn. - An effect whose ChoiceSet asks for a degree of success (Leaden Steps, Tangle Vine) is given to each target for its own save or the spell attack roll against it, foe or ally, and to none where the effect lists no such degree. `as <degree>` still picks one by hand. - An effect's ChoiceSet without a flag takes the flag Foundry derives from the effect's slug, so its predicates see the choice. - The conditions an effect grants (GrantItem of a condition whose predicate holds) count for the combatant while the effect lasts: encumbered from Leaden Steps, clumsy from Enlarge, immobilized from a critical Tangle Vine. - A creature's Speeds in +enc/look include its speed modifiers. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rqqt7Vksxw4GuJpVWB78aJ
A spell with a save or a spell attack roll that brings no effect gives each target the conditions linked in its text's paragraph for that target's degree of success: the value from the link's label (Frightened 2), and for a condition without a value the duration the paragraph names (N rounds, a minute, until the start or end of the caster's next turn). Fear makes a target frightened 1, 2, or 3 and fleeing for 1 round. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rqqt7Vksxw4GuJpVWB78aJ
+cast <spell> on <what>=<target>, for a spell that counteracts, rolls the counteract check (spell attack modifier, no multiple attack penalty) against what it names on the target, and ends it when the check beats its rank: up to 3 ranks higher on a critical success, 1 on a success, only lower ranks on a failure. - An effect's rank is the rank it was cast at and its DC the caster's spell DC, now kept with the effect; otherwise the DC for its level. - An affliction's DC is its own, its rank half the level that DC belongs to, rounded up. - A condition an effect grants counteracts that effect; any other names the DC of what caused it: on frightened vs 20. - A spell that counteracts an effect imposing listed conditions (Clear Mind, Sure Footing, Sound Body) takes only those its rank lists, read from its text, and suppresses what it would have counteracted at 2 ranks lower. - DATA`COUNTER`CLEANSE-AFFLICTION: Cleanse Affliction reduces the stage by one once a case, and counteracts poison and disease from rank 3, curses too from rank 4. - A cast that could not counteract anything named is refused before any slot is spent. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rqqt7Vksxw4GuJpVWB78aJ
HarryCordewener
marked this pull request as ready for review
November 3, 2026 22:14
An effect from outside the spell-effects pack is counteracted at half its level, rounded up, with its level's DC. A failed counteract that suppresses now marks the effect (or moves the condition aside) until the start of the caster's next turn, so it gives nothing meanwhile. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rqqt7Vksxw4GuJpVWB78aJ
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
+cast <spell> on <what>=<target>, for a spell that counteracts, rolls the counteract check (spell attack modifier, no multiple attack penalty) against what it names on the target, and ends it when the check beats its rank: up to 3 ranks higher on a critical success, 1 on a success, only lower ranks on a failure.on frightened vs 20.DATACOUNTERCLEANSE-AFFLICTION: Cleanse Affliction reduces the stage by one, once per case. It counteracts poison and disease from rank 3, and curses too from rank 4.Play-tested on a local server:
vs 16.Generated by Claude Code
Summary by CodeRabbit