diff --git a/.changeset/5e-srd-5-1-applied-auras.md b/.changeset/5e-srd-5-1-applied-auras.md deleted file mode 100644 index 45607eb28..000000000 --- a/.changeset/5e-srd-5-1-applied-auras.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@opencharacter/5e-srd-5.1': minor -'@opencharacter/spec': patch ---- - -Countercharm, the Rod of Alertness's Protective Aura, Pass without Trace and Spirit Guardians project their aura from each applied entry the creature applied itself (`scope: applied`), one aura per entry, whatever the spell was cast from. Aura of Courage and Aura of Devotion are auras for friendly creatures in `aura.range` while the paladin is conscious, with `immuneTo` (frightened, charmed). Breaking: their `aura-of-courage` and `aura-of-devotion` `ally` actions are removed; `ally` entries saved before keep their immunity. A paused action saved under 0.3.0 that runs one of the removed or changed actions can't be resumed: start it again. diff --git a/.changeset/5e-srd-5-1-applied-by.md b/.changeset/5e-srd-5-1-applied-by.md deleted file mode 100644 index b7ea73ed2..000000000 --- a/.changeset/5e-srd-5-1-applied-by.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@opencharacter/5e-srd-5.1': patch -'@opencharacter/spec': patch ---- - -When concentration ends, the new required follow-up `concentration-ends` ends the caster's concentration spells on every creature holding one (`removeEffect` `to: applied`, by the entries' `appliedBy`; entries saved without an applier stay the app's). Conformance suite: `follow-up-clear` expects it after a lost concentration check. diff --git a/.changeset/5e-srd-5-1-auras.md b/.changeset/5e-srd-5-1-auras.md deleted file mode 100644 index 701a022dd..000000000 --- a/.changeset/5e-srd-5-1-auras.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@opencharacter/5e-srd-5.1': patch -'@opencharacter/spec': patch ---- - -Aura of Protection, Countercharm and the Rod of Alertness's Protective Aura are auras (`auras`): computeSheet lists them while they are up (Aura of Protection while the paladin is conscious, at `aura.range`; Countercharm while the bard performs; the rod while planted) for the app to place on allies inside. Aura of Protection's entry reads the paladin's live Charisma modifier through `appliers`. The paladin's own bonus now needs it conscious, as the SRD says. A creature counts one Aura of Protection or rod bonus (stackKey `source`), so the holder in its own aura and an ally with an older `ally` entry aren't counted twice. The `ally` actions stay. Conformance suite: `5e-aura-of-protection-holder` and `5e-aura-of-protection-ally`. - -An aura is up only through its holder's own entry (one with no applier or applied by the holder), so a creature standing in another's Countercharm, Rod of Alertness, Spirit Guardians or Pass without Trace doesn't project it too, and Countercharm's `countercharm` and `end-countercharm` look at the bard's own performance only. Countercharm's bonus to saves against charm and fear counts once (stackKey `source`). diff --git a/.changeset/5e-srd-5-1-card-values.md b/.changeset/5e-srd-5-1-card-values.md deleted file mode 100644 index 34a728474..000000000 --- a/.changeset/5e-srd-5-1-card-values.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@opencharacter/5e-srd-5.1': patch -'@opencharacter/spec': patch ---- - -Spell cards carry the character's numbers: the spell type has computed values `castingClass`, `spellDc`, `spellAttack` and `spellMod` (in computeSheet's `activationValues`), worked out as `cast-spell` does (a stored spell's own numbers, a magic item's own DC and attack bonus, else the class's), and the spell block ends with "Save DC 14" or "Spell attack +6". `cast-spell` reads them instead of recomputing; a spell on no class's list now casts with the character's highest DC and attack bonus rather than 0. Conformance suite: `sheets/5e-spell-card-values`. - -The draconic ancestry carries its breath weapon's save DC and dice as computed values (`breathDc`, `breathDice`), which `breath-weapon` reads. diff --git a/.changeset/5e-srd-5-1-cast-options.md b/.changeset/5e-srd-5-1-cast-options.md deleted file mode 100644 index 4750042d8..000000000 --- a/.changeset/5e-srd-5-1-cast-options.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@opencharacter/5e-srd-5.1': patch -'@opencharacter/spec': patch ---- - -Spells with a per-cast choice ask for it and apply it, as 5.2's do: the spell type has `castOptions` and the `option` state, and `cast-spell` asks for the option per target (or for the caster) and saves it on the applied spell. Protection from Energy (resistance to the picked type), Fire Shield (warm or chill: resistance to cold or fire, and an `erupt` action for the 2d8 on a melee attacker instead of damage at the cast), Enhance Ability (advantage on the picked effect's ability checks), Enlarge/Reduce (advantage or disadvantage on Strength checks and saves, ±1d4 weapon damage) and Blindness/Deafness (blinded or deafened on a failed save) use it. Conformance suite: `5e-cast-aid-upcast` expects the applied spell's empty `option`. diff --git a/.changeset/5e-srd-5-1-divine-smite-on-hit.md b/.changeset/5e-srd-5-1-divine-smite-on-hit.md deleted file mode 100644 index d20b5b1fe..000000000 --- a/.changeset/5e-srd-5-1-divine-smite-on-hit.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@opencharacter/5e-srd-5.1': patch -'@opencharacter/spec': patch ---- - -Divine Smite is offered on the hit, as 5.2's is: a melee weapon attack's on-hit choice offers a smite per spell slot level the paladin has left (and the pact slot); picking one spends the slot and adds 2d8 radiant plus 1d8 per slot level above 1st (5d8 at most), plus 1d8 against an undead or a fiend, to the hit's damage roll, so a critical hit doubles it. The `divine-smite` action stays. Conformance suite: `5e-paladin-sacred-weapon-attack` expects the on-hit choice, `none` recommended. diff --git a/.changeset/5e-srd-5-1-effects-when.md b/.changeset/5e-srd-5-1-effects-when.md deleted file mode 100644 index 15827b1ff..000000000 --- a/.changeset/5e-srd-5-1-effects-when.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/5e-srd-5.1': patch ---- - -Magic items that need attunement have their effects only while attuned through `effectsWhen` on the `magicItem` type (and on each template that needs attunement), instead of a `self.attuned` check in every effect. Sheets compute the same. diff --git a/.changeset/5e-srd-5-1-guided-ability-scores.md b/.changeset/5e-srd-5-1-guided-ability-scores.md deleted file mode 100644 index 903bc0618..000000000 --- a/.changeset/5e-srd-5-1-guided-ability-scores.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@opencharacter/5e-srd-5.1': patch -'@opencharacter/spec': patch ---- - -Guided creation (`create-character`) recommends the ability scores: each method (rolled, point buy, standard array) recommends them by the class's ability priority, the highest to its first ability (point buy at the same spread), as 5.2's does, so an automatic run no longer stops at the allocation. Conformance suite: `5e-create-guided-array` expects the recommended array and the pause at the first pending pick. diff --git a/.changeset/5e-srd-5-1-hunters-mark.md b/.changeset/5e-srd-5-1-hunters-mark.md deleted file mode 100644 index 37abecfdb..000000000 --- a/.changeset/5e-srd-5-1-hunters-mark.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@opencharacter/5e-srd-5.1': patch -'@opencharacter/spec': patch ---- - -Hunter's Mark is modeled, as in 5.2: casting it applies the spell to the target, the target's `huntersMark.markedBy` lists who marked it (each applied spell's `appliedBy`; also in the `target` view), and the caster's weapon damage against a creature it marked adds 1d6 of the weapon's type. Its `move` action ends the caster's mark wherever it is (`removeEffect` `to: applied`) and marks a new creature. Conformance suite: `5e-hunters-mark-move` and `5e-hunters-mark-marked-by`. - -Hunter's Mark's `move` is offered only while the caster concentrates, and the new target's entry keeps the slot the spell was cast with (the optional `slot` parameter, else 1st) as `castSlot`. diff --git a/.changeset/5e-srd-5-1-item-power-available.md b/.changeset/5e-srd-5-1-item-power-available.md deleted file mode 100644 index 574a2b369..000000000 --- a/.changeset/5e-srd-5-1-item-power-available.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@opencharacter/5e-srd-5.1': patch -'@opencharacter/spec': patch ---- - -A magic item's power that is out of charges or used since dawn isn't offered: each `use: item-power` that spends charges has `available: self.charges >= ` on the use, and the Rod of Lordly Might's and the Staff of Thunder and Lightning's once-per-dawn properties check `usedToday` in their actions' `available`. Conformance suite: `5e-rod-of-lordly-might-used` expects `unknown-action`. diff --git a/.changeset/5e-srd-5-1-monster-snapshot.md b/.changeset/5e-srd-5-1-monster-snapshot.md deleted file mode 100644 index 8cbf33ad6..000000000 --- a/.changeset/5e-srd-5-1-monster-snapshot.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -'@opencharacter/5e-srd-5.1': minor ---- - -A monster's traits and actions are copied onto its sheet, as in 5e-srd-5.2 (#181). The `monster` -item lists them in stat-block order (`entries`, replacing its grants and `ownCopies`), and -`create-monster` adds a copy of each, so every one keeps its own uses and recharge and a GM can -drop or change one on a single monster. Monster traits and Spellcasting are `monsterAction` items -(`kind: trait`); each monster action has an `order`, and the spellcasting fields are -`spellAbility`, `spellDc`, `spellAttack`, `casterLevel`, `innate` and `slots1`–`slots9`. The -`monsterSpellcasting` type is gone, and the sheet's traits and actions group is sectioned and -sorted by stat-block order. Upgrading from 0.3.0 turns a saved monster's granted traits and -actions into copies, keeping their saved uses and recharge. diff --git a/.changeset/5e-srd-5-1-monster-stat-inputs.md b/.changeset/5e-srd-5-1-monster-stat-inputs.md deleted file mode 100644 index 87f913228..000000000 --- a/.changeset/5e-srd-5-1-monster-stat-inputs.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -'@opencharacter/5e-srd-5.1': minor -'@opencharacter/spec': patch ---- - -A monster's AC, senses, XP and legendary action count are copied onto its sheet too, so the -whole stat block is a snapshot (#216). `create-monster` sets them as inputs: `combat.printedAc` -(a new field; it competes with worn armor and Mage Armor as any AC does), `senses.darkvision`, -`senses.blindsight`, `senses.tremorsense`, `senses.truesight`, `senses.telepathy`, `challenge.xp` -and `legendary.actions`, which were derived. The `monster` item no longer sets them. Effects -(Darkvision, Devil's Sight, goggles, lycanthrope forms) still apply on top. Upgrading from 0.3.0 -saves a monster's values from its stat block; other characters get 0. diff --git a/.changeset/5e-srd-5-1-on-hit-saves.md b/.changeset/5e-srd-5-1-on-hit-saves.md deleted file mode 100644 index c8d5b38e5..000000000 --- a/.changeset/5e-srd-5-1-on-hit-saves.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@opencharacter/5e-srd-5.1': minor -'@opencharacter/spec': patch ---- - -`weapon-attack`, `unarmed-strike` and their damage steps are tagged `attack-hit` (the unarmed strike also `unarmed`). Stunning Strike and Open Hand Technique are parameters of those attacks (`stunningStrike`; `openHand` on the unarmed strike): on the hit, an `action` effect on that step spends the ki and hands the target its saving throw at the ki save DC, stunned or knocked prone on a failure. Breaking: the `stunning-strike` and `open-hand-technique` actions, which only reported the DC, are removed. A paused action saved under 0.3.0 that runs one of the removed or changed actions can't be resumed: start it again. diff --git a/.changeset/5e-srd-5-1-react-to-attacker.md b/.changeset/5e-srd-5-1-react-to-attacker.md deleted file mode 100644 index 7f406583b..000000000 --- a/.changeset/5e-srd-5-1-react-to-attacker.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@opencharacter/5e-srd-5.1': minor -'@opencharacter/spec': patch ---- - -Reactions to who hit you, read from the damage's sender (`change.from`): Hellish Rebuke offers its cast when another creature damages the caster; Fire Shield offers `erupt` when a creature hits the caster with a melee attack while the shield is up; Multiattack Defense records each creature that hits the ranger with an attack (a required follow-up, in the pick's new `hitBy` state), exposed as `combat.multiattackDefense` so that creature's later attack rolls against the ranger take -4 (as +4 AC). A new `turn-boundary` clock rules action, run by the app on every creature at each turn change, clears it. Breaking: Fire Shield's `erupt` is listed on the spell's holder while the shield is up, no longer on the applied entry (`scope: applied`). A paused action saved under 0.3.0 that runs one of the removed or changed actions can't be resumed: start it again. The caster's or ranger's own damage to itself (`change.from` its own `id`) triggers none of them. diff --git a/.changeset/5e-srd-5-1-readme-text-only.md b/.changeset/5e-srd-5-1-readme-text-only.md deleted file mode 100644 index 93bf432e5..000000000 --- a/.changeset/5e-srd-5-1-readme-text-only.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/5e-srd-5.1': patch ---- - -README: the text-only count names the 16 options and traits without mechanics beside the 8 features (24 files, not 8). diff --git a/.changeset/5e-srd-5-1-readme.md b/.changeset/5e-srd-5-1-readme.md deleted file mode 100644 index fb3f2b018..000000000 --- a/.changeset/5e-srd-5-1-readme.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/5e-srd-5.1': patch ---- - -README: needs spec 0.4; sections reordered, Omitted is now Limitations' Out of scope; Spirit Guardians links #253; `attack-hit`, `effectsWhen: true` and `openHand` described; magic item count corrected to 320 files. diff --git a/.changeset/5e-srd-5-1-recommends.md b/.changeset/5e-srd-5-1-recommends.md deleted file mode 100644 index 290452719..000000000 --- a/.changeset/5e-srd-5-1-recommends.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@opencharacter/5e-srd-5.1': patch -'@opencharacter/spec': patch ---- - -The guided start finishes unattended, as 5.2's does: its race, subrace, class and background recommend the first offered, and every pick creation or a level-up asks recommends one of the options it offers (`recommend` over `options`): class skills, tools, fighting styles and subclasses, languages, expertise, spells (a class's staple spells first, then the highest level offered), invocations (Agonizing Blast only with Eldritch Blast), the pact boon, Metamagic, Mystic Arcanum, the hunter's tactics, subraces and draconic ancestries, and each starting-equipment pick. An Ability Score Improvement recommends +2 to the highest ability that takes it, else +1 to two, else a feat. Conformance suite: `5e-create-guided-pauses` becomes `5e-create-guided-finishes`; `5e-create-guided-array` pauses its picks to show the hill dwarf's recommended tool; the point-buy, roll and if-proficient cases answer every pick; options cases expect the recommended option. diff --git a/.changeset/5e-srd-5-1-spell-auras.md b/.changeset/5e-srd-5-1-spell-auras.md deleted file mode 100644 index a0d61d636..000000000 --- a/.changeset/5e-srd-5-1-spell-auras.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@opencharacter/5e-srd-5.1': patch -'@opencharacter/spec': patch ---- - -Spirit Guardians and Pass without Trace are auras (`auras`). Casting Spirit Guardians also puts the spell on the caster (a `changes` effect on `cast-spell`'s concentration step, now tagged `spell.concentrate`), which holds its 15-foot aura up: enemies inside have their speed halved; the save and damage after the cast are the app's (casting again would spend another slot). Pass without Trace cast with no target holds its 30-foot aura up for allies; a creature counts one +10 (stackKey `source`). diff --git a/.changeset/5e-srd-5-2-action-params.md b/.changeset/5e-srd-5-2-action-params.md deleted file mode 100644 index d01bb346e..000000000 --- a/.changeset/5e-srd-5-2-action-params.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@opencharacter/5e-srd-5.2': patch -'@opencharacter/spec': patch ---- - -Chromatic Orb's first orb is its cast: the spell adds a `damageType` parameter to its own `cast-spell` (a `params` effect), and `cast-spell`'s new `spell.cast` step (its listing is tagged `spell.cast` too) sets the cast's damage type from it, so the ranged spell attack and the 3d8 (+1d8 per slot level above 1) come with the slot spent. The `orb` action stays for a leap. Conformance suite: `5e52-cast-chromatic-orb-type`. diff --git a/.changeset/5e-srd-5-2-applied-auras.md b/.changeset/5e-srd-5-2-applied-auras.md deleted file mode 100644 index 6ca3e23a0..000000000 --- a/.changeset/5e-srd-5-2-applied-auras.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@opencharacter/5e-srd-5.2': patch -'@opencharacter/spec': patch ---- - -The Rod of Alertness's Protective Aura, Aura of Life, Holy Aura, Pass without Trace and Spirit Guardians project their aura from each applied entry the creature applied itself (`scope: applied`), one aura per entry (computeSheet's `auras` names that entry), whatever the spell was cast from. Aura of Courage and Aura of Devotion are auras for allies in `paladin.auraRange`, down while the paladin is Incapacitated, with `immuneTo` (Frightened, Charmed), so allies' immunity is no longer text. diff --git a/.changeset/5e-srd-5-2-applied-by.md b/.changeset/5e-srd-5-2-applied-by.md deleted file mode 100644 index b9102848e..000000000 --- a/.changeset/5e-srd-5-2-applied-by.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -'@opencharacter/5e-srd-5.2': patch -'@opencharacter/spec': patch ---- - -Sap, Slow and Vex (and Studied Attacks' Vex) read who applied them from the entry's `appliedBy`, which every attack now records, instead of the `attacker` state the attack wrote; `attacker` stays declared and is still read for entries saved without an applier. A new rules action, `turn-boundary` (`clock: turn-boundary`), which the app runs on every creature at each turn change, ends Sap and Slow when their applier's next turn starts, and Vex when that turn ends (a new `armed` state on combat effects, default false, marks that the turn has started). Conformance suite: `5e52-turn-boundary` and `5e52-turn-boundary-ends`; `5e52-attack-vexed-target-advantage` expects the applier-reading query. - -Hex and Hunter's Mark: `hex.cursedBy` and `huntersMark.markedBy` name each applied spell's `appliedBy` (the `caster` state is no longer written, and is still read for entries saved without an applier), and each spell has a `move` action that ends the caster's curse or mark wherever it is (`removeEffect` `to: applied`) and puts it on the new target (Hex asks its ability again). Conformance suite: `5e52-hex-move` and `5e52-hex-cursed-by`; `5e52-cast-enhance-ability-per-target` no longer expects `caster` on the applied spell. - -When concentration ends, the new required follow-up `concentration-ends` ends the caster's concentration spells on every creature holding one (`removeEffect` `to: applied`, by the entries' `appliedBy`; entries saved without an applier stay the app's). Conformance suite: `5e52-concentration-ends`. - -effects.md: the Vexed example reads the entry's `appliedBy`. - -Hex's and Hunter's Mark's `move` is offered only while the caster concentrates, and the new target's entry keeps the slot the spell was cast with (the optional `slot` parameter, else the spell's level) and the caster's spell save DC (`castSlot`, `castDc`). diff --git a/.changeset/5e-srd-5-2-auras.md b/.changeset/5e-srd-5-2-auras.md deleted file mode 100644 index 68315ef28..000000000 --- a/.changeset/5e-srd-5-2-auras.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@opencharacter/5e-srd-5.2': patch ---- - -Aura of Protection and the Rod of Alertness's Protective Aura are auras (`auras`): computeSheet lists them while they are up (Aura of Protection while the paladin isn't Incapacitated, at `paladin.auraRange`; the rod while planted) for the app to place on allies inside. Aura of Protection's entry reads the paladin's live Charisma modifier through `appliers`. A creature in two Auras of Protection benefits from the highest (stackKey `source`), and the holder in its own aura counts it once. - -An aura is up only through its holder's own entry (one with no applier or applied by the holder), so a creature standing in another's Rod of Alertness, Spirit Guardians, Pass without Trace, Aura of Life or Holy Aura doesn't project it too. Conformance suite: `5e52-spirit-guardians-aura-not-passed-on`. diff --git a/.changeset/5e-srd-5-2-brutal-strike-blows.md b/.changeset/5e-srd-5-2-brutal-strike-blows.md deleted file mode 100644 index 5e6100226..000000000 --- a/.changeset/5e-srd-5-2-brutal-strike-blows.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@opencharacter/5e-srd-5.2': patch -'@opencharacter/spec': patch ---- - -Brutal Strike's blows are modeled: the feature adds a blow parameter to every attack (`params` effect), and Improved Brutal Strike at level 17 a second, `brutalBlow2`. When the Brutal Strike hits, Hamstring Blow puts the new `combat-effects.hamstrung` on the target (Speed −15, the most recent one only) and Staggering Blow (Improved Brutal Strike) the new `combat-effects.staggered` (Disadvantage on its next saving throw, which ends it). Forceful Blow's push and Sundering Blow's +5 stay the player's. The combat effects group is labeled "Combat effects". Conformance suite: `5e52-attack-brutal-strike-blows`. - -Hamstring Blow ends at the start of the barbarian's next turn: the `turn-boundary` action removes it with Sap and Slow (`5e52-turn-boundary` expects it in the query). Staggering and Sundering Blow are offered from level 13: Brutal Strike's `brutalBlow` (Forceful or Hamstring) gives way there to Improved Brutal Strike's `improvedBlow`, which offers all four. diff --git a/.changeset/5e-srd-5-2-card-values.md b/.changeset/5e-srd-5-2-card-values.md deleted file mode 100644 index e0ff357b9..000000000 --- a/.changeset/5e-srd-5-2-card-values.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@opencharacter/5e-srd-5.2': patch -'@opencharacter/spec': patch ---- - -Spells carry the character's numbers: the spell type has computed values `castingClass`, `spellDc`, `spellAttack` and `spellMod` (in computeSheet's `activationValues`), worked out as `cast-spell` does (a stored spell's own numbers, a magic item's own DC and attack bonus, else the spellcasting's, else the character's highest). `cast-spell`, `spell-effect` and the actions of Moonbeam, Flaming Sphere, Ice Knife, Insect Plague, Glyph of Warding, Flame Blade, Guardian of Faith, Faithful Hound and Incendiary Cloud read them instead of recomputing; a spell on no list (Gift of the Depths' Water Breathing) now casts with the character's highest DC rather than 0, and a stored spell's later turns use its stored DC. Conformance suite: `sheets/5e52-spell-card-values`. - -Features carry their card numbers as computed values, which their actions read: Breath Weapon's `breathDc` and `breathDice`, Cunning Strike's `strikeDc`, Intimidating Presence's `presenceDc`, Relentless Rage's `rageDc`, Sacred Weapon's `weaponBonus` and Preserve Life's `healingPool`. Conformance suite: `actions/5e52-breath-weapon`. diff --git a/.changeset/5e-srd-5-2-cunning-strike-cost.md b/.changeset/5e-srd-5-2-cunning-strike-cost.md deleted file mode 100644 index e95787eb1..000000000 --- a/.changeset/5e-srd-5-2-cunning-strike-cost.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/5e-srd-5.2': minor ---- - -Cunning Strike works out its Sneak Attack dice once, as the attack's derived parameter `cunningStrikeCost`, which the Sneak Attack and the strike effects read; its save DC is the feature's `strikeDc` computed value, read by the strike effects. The `rogue.strikeDc` field is removed (breaking: read the feature's `strikeDc` instead). The rules are unchanged. diff --git a/.changeset/5e-srd-5-2-cunning-strike-size.md b/.changeset/5e-srd-5-2-cunning-strike-size.md deleted file mode 100644 index 5293cd736..000000000 --- a/.changeset/5e-srd-5-2-cunning-strike-size.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@opencharacter/5e-srd-5.2': patch -'@opencharacter/spec': patch ---- - -Cunning Strike's Trip against a Huge or larger target costs no Sneak Attack die: it does nothing, so the full Sneak Attack lands, and an Improved Cunning Strike pair counts it as free. The conformance suite adds `5e52-attack-cunning-strike-huge`. diff --git a/.changeset/5e-srd-5-2-d20-bands.md b/.changeset/5e-srd-5-2-d20-bands.md deleted file mode 100644 index a7c2c3a04..000000000 --- a/.changeset/5e-srd-5-2-d20-bands.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@opencharacter/5e-srd-5.2': patch -'@opencharacter/spec': patch ---- - -5e-srd-5.2: the D20 Test's rolls classify by a `d20` band set, its `success` band marked as the success threshold, so a roll's summary shows the DC or AC it needs (#175). Conformance tests for the attack and saving throw summaries. diff --git a/.changeset/5e-srd-5-2-deflect-attacks-batch.md b/.changeset/5e-srd-5-2-deflect-attacks-batch.md deleted file mode 100644 index 58f4c4705..000000000 --- a/.changeset/5e-srd-5-2-deflect-attacks-batch.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@opencharacter/5e-srd-5.2': minor -'@opencharacter/spec': patch ---- - -Deflect Attacks reduces an attack's total damage once: the `deflectAttacks` situational choice is `scope: batch`, so one selection reaches the whole attack, its 1d10 + bonus spent over its Bludgeoning, Piercing and Slashing parts in order (every damage type with Deflect Energy). When all the damage is stopped and a Focus Point is left (the new `focus.spent` field), its `changes` offer the new `deflect-redirect` follow-up (a rules action running the feature's action, available only while a Focus Point is left). Breaking: the choice is batch-scoped, and the `deflect-attacks` action no longer rolls the reduction: its `damage` parameter and `deflected` result are gone; it is the redirect (1 Focus Point, the redirected damage). A paused action saved under 0.3.0 that runs one of the removed or changed actions can't be resumed: start it again. diff --git a/.changeset/5e-srd-5-2-deflect-attacks.md b/.changeset/5e-srd-5-2-deflect-attacks.md deleted file mode 100644 index e50a00312..000000000 --- a/.changeset/5e-srd-5-2-deflect-attacks.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/5e-srd-5.2': patch ---- - -Deflect Attacks reduces the damage directly: a `deflectAttacks` situational choice on an incoming attack reduces the damage change it is selected on, if Bludgeoning, Piercing or Slashing (any type with Deflect Energy), by 1d10 plus the Dexterity modifier and Monk level, never below 0. A situational choice reaches only its own change, so an app selects it on one damage change of the attack (README, Limitations). The `deflect-attacks` action stays for redirecting the force. diff --git a/.changeset/5e-srd-5-2-effects-when.md b/.changeset/5e-srd-5-2-effects-when.md deleted file mode 100644 index 63f5d7c8c..000000000 --- a/.changeset/5e-srd-5-2-effects-when.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/5e-srd-5.2': patch ---- - -Magic items that need attunement have their effects only while attuned through `effectsWhen` on the `magicItem` type (and on each template that needs attunement), instead of a `self.attuned` check in every effect. Sheets compute the same. diff --git a/.changeset/5e-srd-5-2-giant-ancestry-on-hit.md b/.changeset/5e-srd-5-2-giant-ancestry-on-hit.md deleted file mode 100644 index f62f92c97..000000000 --- a/.changeset/5e-srd-5-2-giant-ancestry-on-hit.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@opencharacter/5e-srd-5.2': patch -'@opencharacter/spec': patch ---- - -Fire's Burn, Frost's Chill and Hill's Tumble are offered on a weapon or Unarmed Strike hit: the Goliath's hit option adds 1d10 Fire or 1d6 Cold to the hit's damage roll (doubled on a Critical Hit), and `changes` effects on the attack's damage step (now tagged `attack-hit`) slow or knock Prone the target (Large or smaller) and spend the Giant Ancestry use. The powers' own actions stay for other attack rolls. Conformance suite: `5e52-attack-frosts-chill`, `5e52-attack-hills-tumble-too-large`. diff --git a/.changeset/5e-srd-5-2-item-power-available.md b/.changeset/5e-srd-5-2-item-power-available.md deleted file mode 100644 index d21e07423..000000000 --- a/.changeset/5e-srd-5-2-item-power-available.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@opencharacter/5e-srd-5.2': patch -'@opencharacter/spec': patch ---- - -A magic item's power that is used since dawn or out of charges isn't offered: each `use: item-power` that presets `daily` or `charges` (the elemental-commanding bowl, brazier and censer, Dagger of Venom, Dragon Scale Mail, Dust of Dryness, Javelin of Lightning) has `available` on the use. Conformance suite: `5e52-javelin-of-lightning-used`. diff --git a/.changeset/5e-srd-5-2-monster-stat-inputs.md b/.changeset/5e-srd-5-2-monster-stat-inputs.md deleted file mode 100644 index 6de6907cd..000000000 --- a/.changeset/5e-srd-5-2-monster-stat-inputs.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -'@opencharacter/5e-srd-5.2': minor -'@opencharacter/spec': patch ---- - -A monster's AC, senses, XP and Legendary Action uses are copied onto its sheet, so the whole stat -block is a snapshot (#216). `create-monster` sets them as inputs: `combat.printedAc` (a new field; -it competes with worn armor and Mage Armor as any AC does), `senses.darkvision`, -`senses.blindsight`, `senses.tremorsense`, `senses.truesight`, `senses.telepathy`, `challenge.xp` -and `legendary.actions`, which were derived, and the new `challenge.xpLair` and -`legendary.actionsLair`, which replace them while `legendary.inLair`. The `monster` item no longer -sets them. Effects from traits, spells and items still apply on top. Upgrading from 0.3.0 saves a -monster's values from its stat block; other characters get 0. diff --git a/.changeset/5e-srd-5-2-on-hit-saves.md b/.changeset/5e-srd-5-2-on-hit-saves.md deleted file mode 100644 index dd2d7aea8..000000000 --- a/.changeset/5e-srd-5-2-on-hit-saves.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@opencharacter/5e-srd-5.2': minor -'@opencharacter/spec': patch ---- - -Cunning Strike, Stunning Strike, Open Hand Technique, Hurl Through Hell and the Rod of Lordly Might's Drain Life and Paralyze are parameters of each attack (`cunningStrike`, `cunningStrike2`, `stunningStrike`, `openHand`, `hurlThroughHell`, `drainLife`, `paralyze`). On the hit, an `action` effect on the attack's `attack-hit` step hands the target its saving throw at the feature's DC and applies the condition (or Hurl Through Hell's 8d10 Psychic damage) on a failure; the cost (a Focus Point, the use or a Pact Magic slot, the rod's daily use) is spent with it. `weapon-attack` and `unarmed-strike` are tagged `attack-hit` (and the Unarmed Strike `unarmed`), so the parameters are added to those attacks only, Open Hand Technique's to the Unarmed Strike. Cunning Strike's dice come off the Sneak Attack, read from the parameters; an effect the rogue can't use (the new `rogue.strikeEffects`: not known yet, or Poison without a Poisoner's Kit), or effects together costing more than the Sneak Attack, do nothing and cost nothing. Its DC is the new `rogue.strikeDc` field. `item-power`'s outcome data adds `failed`. Breaking: the `cunning-strike`, `stunning-strike`, `open-hand-technique` and `hurl-through-hell` actions, the rod's `drain-life` and `paralyze` actions, and the `cunningStrike` situational choice are removed. A paused action saved under 0.3.0 that runs one of the removed or changed actions can't be resumed: start it again. diff --git a/.changeset/5e-srd-5-2-precise-hunter.md b/.changeset/5e-srd-5-2-precise-hunter.md deleted file mode 100644 index b3cefdef1..000000000 --- a/.changeset/5e-srd-5-2-precise-hunter.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/5e-srd-5.2': patch ---- - -Precise Hunter gives Advantage on its own on an attack against a target whose view shows the ranger's Hunter's Mark (`huntersMark.markedBy`). The `preciseHunter` situational choice stays for an attack without the target's view. diff --git a/.changeset/5e-srd-5-2-react-to-attacker.md b/.changeset/5e-srd-5-2-react-to-attacker.md deleted file mode 100644 index a0a46e466..000000000 --- a/.changeset/5e-srd-5-2-react-to-attacker.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@opencharacter/5e-srd-5.2': minor -'@opencharacter/spec': patch ---- - -Reactions to who hit you, read from the damage's sender (`change.from`): Hellish Rebuke offers its cast when another creature damages the caster; Fire Shield offers `erupt` when a creature hits the caster with a melee attack while the shield is up; Multiattack Defense records each creature that hits the ranger with an attack roll (a required follow-up, in Defensive Tactics' new `hitBy` state), exposed as `combat.multiattackDefense` so that creature's other attack rolls against the ranger have Disadvantage until the `turn-boundary` action clears it. Breaking: Fire Shield's `erupt` is listed on the spell's holder while the shield is up, no longer on the applied entry (`scope: applied`). A paused action saved under 0.3.0 that runs one of the removed or changed actions can't be resumed: start it again. The caster's or ranger's own damage to itself (`change.from` its own `id`) triggers none of them. diff --git a/.changeset/5e-srd-5-2-readme.md b/.changeset/5e-srd-5-2-readme.md deleted file mode 100644 index 7ffe5f219..000000000 --- a/.changeset/5e-srd-5-2-readme.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/5e-srd-5.2': patch ---- - -README: needs spec 0.4; sections reordered, Omitted is now Limitations' Out of scope; Cunning Strike reads the `rogue.strikeDc` field (#251); Spirit Guardians links #253; `attack-hit`, `unarmed-hit`, `unarmed-damage-type`, `rest.short` and `effectsWhen: true` described; Stone's Endurance's per-type limit noted. diff --git a/.changeset/5e-srd-5-2-recommends.md b/.changeset/5e-srd-5-2-recommends.md deleted file mode 100644 index daa62e2bd..000000000 --- a/.changeset/5e-srd-5-2-recommends.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@opencharacter/5e-srd-5.2': patch -'@opencharacter/spec': patch ---- - -Every pick a guided start or a level-up asks recommends one of the options it offers (`recommend` over `options`), so an automatic run of either start, or of a level-up to 20, finishes for every class: class skills, tools and subclasses, background and feature languages, expertise, spells (a class's staple spells first, then the highest level offered; the old lists ran out on later levels), invocations (only ones whose level prerequisite the warlock meets), Mystic Arcanum, Metamagic, Signature Spells and Spell Mastery, the species lineages and the other feature options. Recommendations that read `choice.picks` now read `options` (weapon masteries, Keen Senses, Skillful, the fighting-style cantrips). Conformance suite: `5e52-create-guided-recommended` and `5e52-create-higher-level` finish with no answers, `5e52-create-guided-pauses` is gone, and `5e52-level-up-warlock-auto` levels a warlock to 2 with no answers. diff --git a/.changeset/5e-srd-5-2-retaliation.md b/.changeset/5e-srd-5-2-retaliation.md deleted file mode 100644 index c246c915f..000000000 --- a/.changeset/5e-srd-5-2-retaliation.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/5e-srd-5.2': patch ---- - -Retaliation is modeled, as in 5.1: when the Berserker takes damage and stays up, each equipped melee weapon offers its attack, and an Unarmed Strike is offered too, as follow-ups (`barbarian.retaliation`). Whether the damage came from within 5 feet, and the Reaction, are the player's. diff --git a/.changeset/5e-srd-5-2-spell-auras.md b/.changeset/5e-srd-5-2-spell-auras.md deleted file mode 100644 index 6fd432152..000000000 --- a/.changeset/5e-srd-5-2-spell-auras.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@opencharacter/5e-srd-5.2': patch -'@opencharacter/spec': patch ---- - -Spirit Guardians, Aura of Life, Holy Aura and Pass without Trace are auras (`auras`). Casting Spirit Guardians also puts the spell on the caster (a `changes` effect on `cast-spell`'s concentration step, now tagged `spell.concentrate`), which holds its 15-foot aura up: enemies inside have their Speed halved. Its new `guard` action runs the Wisdom save and the 3d8 (plus 1d8 per slot level above 3, Radiant or, with `necrotic`, Necrotic) for a creature the Emanation reaches, at the caster's spell save DC and without spending a slot, while the caster concentrates. Aura of Life (Necrotic resistance), Holy Aura (Advantage on saves, Disadvantage on attacks against them) and Pass without Trace (+10 Stealth, counted once by stackKey `source`), cast with no target, hold their auras up for allies. Conformance suite: `5e52-spirit-guardians-guard`, `5e52-cast-spirit-guardians-aura`, `5e52-spirit-guardians-aura`, `5e52-spirit-guardians-enemy` and `5e52-paladin-aura-ally`. diff --git a/.changeset/action-params-tags-use-available.md b/.changeset/action-params-tags-use-available.md deleted file mode 100644 index f5ae97c53..000000000 --- a/.changeset/action-params-tags-use-available.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -'@opencharacter/spec': minor -'@opencharacter/engine': minor -'@opencharacter/text': minor ---- - -Content extends a shared action per item (#194): - -- A `use` entry may have its own `available`, ANDed with the used action's and evaluated with - the listing's `item` and `self`: a condition's saving throw only while it is "save ends". -- An action's `tags` may hold `{ formula }` entries, evaluated per listing with its `item` and - `self`; computeSheet's listing (display groups), describeAction and `params` effects see them. -- A new effect op, `params`, on a new target, `{ actions: [], from? }`, adds parameters to - the listed actions whose tags match while its `when` holds: an ability's damage type chosen - on each use, a feature's opt-in on a rules action. startAction checks them as the action's - own (their errors carry `addedBy`), describeAction lists them after the action's own with - `addedBy`, and content reads them as `params.` in its effects. Their text is - `.params..name`; the text package adds `addedParam`, - `addedParamDescription`, `addedParamValue` and the keys `addedParamKey` and - `addedParamValueKey`, and names a parameter error by `addedBy`. Each added parameter is - optional or defaulted and reaches only the run the app starts (not a nested `action` step's); - a required one, a name an action the effect's tags reach declares, or two effects declaring - one name differently over tags that meet are the new load error `invalid-added-param`. Its - `min` and `max` see the effect's roots; a `use` may fix it. -- startAction and describeAction read the `use` computeSheet lists (the first available one - with the ID), and evaluate its fixed `params` in the pack that writes the use. diff --git a/.changeset/activation-gates.md b/.changeset/activation-gates.md deleted file mode 100644 index 7307aa4d2..000000000 --- a/.changeset/activation-gates.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -'@opencharacter/spec': minor -'@opencharacter/engine': minor ---- - -Two conditions that read the computed sheet beside activation (#232, #234). - -A grant may say `available`: a condition evaluated on the computed sheet (derived fields bound, -`self`, `item`, `x` and `i` as in its `when`), ANDed into the `available` of every action the -granted content offers and of the content it grants or picks in turn. The content stays active -and listed; computeSheet's `activations` marks it `unavailable: true` while the condition fails, -its actions aren't listed, startAction refuses them (`unknown-action`), follow-ups don't offer -them, and it declares no follow-ups and projects no auras. So a Draw Steel treasure grants its ability only with a matching kit. - -A content type, or an item in place of its type's, may say `effectsWhen`: a condition ANDed into -the `when` of every holder effect of its items (the type's, the item's own, its choices' and -inline options', on fields, rolls, steps, params and incoming changes) and its holder auras' -`when`, evaluated as the effect's `when` is. `scope: applied` effects and auras, whose `self` is -the entry, don't read it. `true` on an item lifts the type's. So 5E's attunement or ORC's -investment is written once on the type. Neither condition decides activation, so neither can -loop back into it; a loop through `effectsWhen` is `circular-formula`, as through a `when`. -Conformance suite: `sheets/grant-available`, `sheets/grant-available-met`, -`sheets/effects-when`, `sheets/effects-when-met`, `sheets/effects-when-circular`, -`sheets/effects-when-applied`, `changes/grant-available-follow-up`, -`actions/effects-when-roll`, `actions/grant-available-start`, `loads/activation-gate-checks`. diff --git a/.changeset/added-param-bounds.md b/.changeset/added-param-bounds.md deleted file mode 100644 index 297e40fe7..000000000 --- a/.changeset/added-param-bounds.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -'@opencharacter/spec': minor -'@opencharacter/engine': minor ---- - -A `params` effect may add bounds to a parameter the run already has: an entry with only `min` -and/or `max` (no `type`) bounds the action's own parameter, or one another effect adds, instead -of declaring it. Every bound must hold; the `out-of-range` error names that parameter, with the -failing bound's `min` and `max` and `boundBy`, the content that added it. describeAction lists -them under the parameter's `addedBounds`. Two bounds on one name don't conflict; a bound on a -name no action declares and no effect adds is `invalid-added-param` (reason `undeclared`). So -Healing Grace's enhancements bound the ability's own `spend`, and an overspend names `spend` -(#252). diff --git a/.changeset/added-params-conflict-scope.md b/.changeset/added-params-conflict-scope.md deleted file mode 100644 index 0ebf408c9..000000000 --- a/.changeset/added-params-conflict-scope.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -'@opencharacter/spec': minor -'@opencharacter/engine': minor ---- - -`invalid-added-param` (`conflict`) follows the effects again, not only the actions loaded so far -(#222). Two `params` effects adding one name with other declarations conflict when their target -tags meet (one is the other or below it) and their packs meet over that tag, or when one action's -literal tags reach both. So two add-ons of one core, or two effects of one pack whose action gets -the tag only from a formula, are rejected again (#224 accepted them when no loaded action carried -the tag literally); an unrelated game loaded beside them, or a pack depending on two games, still -never clashes. Two `from: self` effects carried by different content items don't conflict, so -each spell may declare its own values for one `damageType` parameter on the shared cast action, -unless one item names both (itself, its `grants`, its choices' `items` and inline options) and has -an action, its own or its type's, that both reach: its copy's own run takes both. A -breaking change for packs that declared one name otherwise over tags that meet. diff --git a/.changeset/adjust-from.md b/.changeset/adjust-from.md deleted file mode 100644 index 5e7d86b85..000000000 --- a/.changeset/adjust-from.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -'@opencharacter/spec': minor -'@opencharacter/engine': minor ---- - -An `adjust` may carry `from`, the ID of the character whose action or follow-up sent it. Actions -fill it in on every adjust they propose for another character (`to` a role, `target`, a link or -`applied`; not one for the actor's own view in a role), and follow-ups on every adjust for another character; changes `to: self` carry none. -Its field entries keep it: an `on` follow-up reads it as `change.from` (`''` when none) and -stores it in its `cause`, and `batch.adjustments` entries have it. Expected proposed changes in -the conformance cases now include it (#187). diff --git a/.changeset/adjust-unknown-tag.md b/.changeset/adjust-unknown-tag.md deleted file mode 100644 index 6b95cbbe5..000000000 --- a/.changeset/adjust-unknown-tag.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -'@opencharacter/spec': minor -'@opencharacter/engine': minor ---- - -applyChanges rejects an adjust whose tag no loaded pack declares: `unknown-tag` (data: `tag`, -path `/changes/`), the batch unapplied. Before, the change applied and the tag matched -nothing, so a misspelled or qualified tag (`:damage.fire`; tags are never qualified) -silently fired no incoming effect or follow-up (#186). -An app applying changes to a linked character must load a ruleset that declares the tags it -sends. diff --git a/.changeset/applied-by-formula.md b/.changeset/applied-by-formula.md deleted file mode 100644 index 52940ce31..000000000 --- a/.changeset/applied-by-formula.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -'@opencharacter/spec': minor -'@opencharacter/engine': minor ---- - -A proposed `applyEffect` may name its applier with an `appliedBy` formula giving a character ID, -usually a participant's (`participants.ally[0].id`: frightened of the ally who triggered it); -without one it is the actor, as before. A value that isn't a non-empty string is `type-mismatch`. -Everything that reads the applier follows the named character, so the actor's own changes -`to: applied` no longer reach the entry (#236). diff --git a/.changeset/applied-by.md b/.changeset/applied-by.md deleted file mode 100644 index 4aae8433e..000000000 --- a/.changeset/applied-by.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -'@opencharacter/spec': minor -'@opencharacter/engine': minor ---- - -Applied entries record who applied them: `appliedBy`, the applier's character ID (optional, so -saved entries without it stay valid). Every `applyEffect` an action or follow-up proposes carries -the actor's ID; formulas read it as `self.appliedBy` and in `character.applied`. An applied query -may keep to one applier's entries (`applied.appliedBy`; `appliedBy: self` in a proposed change). -A step, option, added changes, roll effect `then` or follow-up may send changes `to: applied`: -every character holding an entry the actor applied. Each is proposed once with no `character`, -its query limited to the actor's entries, for the app to apply to every character that may hold -one; anything but a removeEffect, toggleEffect, setState or adjustState naming applied entries by -query is `invalid-applied-change` at load, as are a follow-up `to: applied` without `changes` and -a role named `applied`. The app applies a run's changes in the order proposed, across characters. `reapply` gives a merged entry the new applier, and -`match: [appliedBy]` keeps one entry per applier (#187). diff --git a/.changeset/aura-sources.md b/.changeset/aura-sources.md deleted file mode 100644 index 0c30ea373..000000000 --- a/.changeset/aura-sources.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -'@opencharacter/spec': minor -'@opencharacter/engine': minor ---- - -Auras from casts, and auras that grant immunity. - -- An aura may say `scope: applied` (#229): it is projected by applied entries of its item instead - of by the held item. computeSheet lists it once per active, unblocked applied entry the - character applied itself (no `appliedBy`, or its own `id`), with `entry` that entry's ID, and - its `when` and `size` see the entry as `self`. So one cast is one aura, whatever it was cast - from, sized by the cast's own state, and it leaves `auras` when the entry ends. -- Content an applied grant reaches sees its own declared state defaults in `self` for keys the - granting entry lacks. -- An aura whose `when` or `size` fails is left out of `auras` with the formula's error, no longer - silently. -- An aura may declare `immuneTo` (#227), the immunities of its entry: a matching applied entry on - whoever is inside is blocked and reported `immune` with the ID `#/`. Its `when` - and query `where` see `item`, `self` and `applier`. A `scope` other than `applied` on one is - `invalid-aura`, as is an aura with neither `effects` nor `immuneTo`. diff --git a/.changeset/auras.md b/.changeset/auras.md deleted file mode 100644 index 8a57c814a..000000000 --- a/.changeset/auras.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -'@opencharacter/spec': minor -'@opencharacter/engine': minor ---- - -Content items may declare `auras`: areas whose effects are on whoever is inside (`{ id, when?, -size?, affects?, fields?, effects }`). computeSheet lists the auras the character projects now -(`auras`: `{ source, aura, entry?, size?, affects }`); the app applies the aura's entry to each -creature inside (`applyEffect` with `aura` and `appliedBy`) and removes it as they leave. An aura -entry runs only its aura's effects (none of its source's rules for the holder: effects, grants, -actions, prerequisites, immunities, standard copies, kept templates) and is one per applier; -they read the holder's live values as `applier.` from -the view the app passes in the new `appliers` input of computeSheet, listOptions, applyChanges, -startAction and describeAction (declared defaults without one; a paused action keeps them; a -repeated view `id` is `duplicate-id`). A repeated aura ID or an aura effect on its holder is -`invalid-aura` at load, a declared field the item's pack lacks or types otherwise -`link-field-mismatch`; an unknown `aura` is `unknown-id`. `appliedBy` is a reserved state key -name (#188). diff --git a/.changeset/awn-core-burst-rounds.md b/.changeset/awn-core-burst-rounds.md deleted file mode 100644 index 219a7c5bf..000000000 --- a/.changeset/awn-core-burst-rounds.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/awn-core': patch ---- - -Burst fire gives +2 to hit and damage only when the attack fires the burst: a burst weapon with fewer than three rounds left fires one round for no bonus, as it already spent. diff --git a/.changeset/awn-core-burst-thrown-params.md b/.changeset/awn-core-burst-thrown-params.md deleted file mode 100644 index ae00d73dc..000000000 --- a/.changeset/awn-core-burst-thrown-params.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/awn-core': minor ---- - -`attack` offers `burst` only on burst weapons and a new `thrown` parameter only on melee weapons that can be thrown, in place of the `burst` situational choice. A thrown attack is ranged and deals no Shock. Armsmaster and Deadeye now both reach thrown attacks, and only the better of the two counts there (the `thrown-focus` stack key, spanning hit and damage). Apps that selected the `burst` situational choice on `attack` pass the `burst: true` parameter instead; the situational choice is gone. diff --git a/.changeset/awn-core-foe-focus-params.md b/.changeset/awn-core-foe-focus-params.md deleted file mode 100644 index 1470c573e..000000000 --- a/.changeset/awn-core-foe-focus-params.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/awn-core': patch ---- - -Apex Predator, Robot Whisperer and Zombie Smasher add their attack bonuses through `attack` parameters (`beast`, `robot`, `zombie`): half the level to damage and Shock against beasts, +4 to hit and damage against robots, and at Zombie Smasher's level 2 a roll that counts as a natural 20 and 8 more damage against zombies. diff --git a/.changeset/awn-core-kit-table-entries.md b/.changeset/awn-core-kit-table-entries.md deleted file mode 100644 index afaa36008..000000000 --- a/.changeset/awn-core-kit-table-entries.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/awn-core': minor ---- - -A wasteland warrior who picks one item from the d20 table now chooses among that table's named entries ("Rifle and two magazines", "Scrap mail") instead of "Entry 1" to "Entry 20": `starting-equipment` asks `nearEntry` or `wastelandEntry` by the kit, and the wasteland's three salvaged-tech entries are one option. Apps or scripts that answered the old `entry` step with a value from 1 to 20 answer `nearEntry` or `wastelandEntry` with the new option IDs (`near-rifle`, `wasteland-scrap-mail`, …) instead. The step only adds items, so saved characters are unaffected. diff --git a/.changeset/awn-core-light-mutation-effects-when.md b/.changeset/awn-core-light-mutation-effects-when.md deleted file mode 100644 index 56a8ae16e..000000000 --- a/.changeset/awn-core-light-mutation-effects-when.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/awn-core': patch ---- - -The negative mutation type's `effectsWhen: '!self.light'` keeps a lightly touched mutation's effects off, in place of the guard each mutation's effects repeated. Nothing changes on the sheet. diff --git a/.changeset/awn-core-readme.md b/.changeset/awn-core-readme.md deleted file mode 100644 index a35dcaee7..000000000 --- a/.changeset/awn-core-readme.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/awn-core': patch ---- - -README: the quick start finishes the character; situational choices `versus` and `social` named; burst and skill-dice notes; Low Resistances' real reason replaces the closed #68; Not modeled is now Limitations. diff --git a/.changeset/awn-core-skill-dice-key.md b/.changeset/awn-core-skill-dice-key.md deleted file mode 100644 index f163f5822..000000000 --- a/.changeset/awn-core-skill-dice-key.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/awn-core': patch ---- - -A Heal Specialist with Healer rolls the larger pool, not both: the pack now declares its `skill-dice` stack key `highestOnly`, so Healer's extra die no longer adds to the Specialist's (a level-1 Heal Specialist with Healer rolled 4d6 instead of 3d6). diff --git a/.changeset/choice-active-when-add-as-copy.md b/.changeset/choice-active-when-add-as-copy.md deleted file mode 100644 index 771b12dbb..000000000 --- a/.changeset/choice-active-when-add-as-copy.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -'@opencharacter/spec': minor -'@opencharacter/engine': minor ---- - -Choices whose picks wake on a condition or come as copies (#196). `activeWhen` on a choice, an -activation condition, keeps its picks saved and counted while it fails, but neither activated -nor applied (its `effects` don't run either); computeSheet's choice list marks the choice -`inactive: true`. `addAs: copy` on a content choice holds each pick as a copy of its own: -`choose` adds the copy as `addItem` would (under the option's derived ID, or the next free one) -and saves its instance ID on the pick (`entry`, a new optional key of a saved pick); removing the -pick, or what holds it, removes the copy, and `removeItem` of the copy is the new runtime error -`picked-copy` (data: `entry`, `path`; standard text in `i18n/en.yaml`). The pick itself activates -nothing, so the item applies once, through its copy; `listOptions` checks its prerequisites as -that copy's. `pnpm validate` reports `addAs` on a choice of values or inline options. diff --git a/.changeset/choice-copies-links.md b/.changeset/choice-copies-links.md deleted file mode 100644 index d145b1aeb..000000000 --- a/.changeset/choice-copies-links.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -'@opencharacter/spec': minor -'@opencharacter/engine': minor ---- - -Choice picks held as copies, tightened (#195, #196). A choice's `recommend` no longer sees its -own picks in `options`, so `options[0]` is the next to pick. A pick's copy is added under the -option's derived ID plus `_pick`, which no standard copy can have, and `adoptStandard` and the -standard-copy cleanup leave copies picks name alone. Saved copy links are checked: a missing -or dangling link, one to another item's entry, one an earlier pick names, or `entry` on a -choice without `addAs` is the new rules issue `picked-copy-invalid` (data `problem`), and only -links that hold count for `picked-copy` and for removal with the pick. Upgrade steps that remove -a pick remove its copy too. Grant-only content is `option-not-eligible` in an `addAs: copy` -choice; `addAs` with `waivePrerequisites` is a schema error, and `pnpm validate` reports a grant -presetting such a choice and warns on `activeWhen` with `activate: false`. Below a failing -`activeWhen`, the picks' own choices are still listed and asked, inactive too. `checkRelease` -reports a choice gaining or losing `addAs` as the interface change `choice-copies-changed`. diff --git a/.changeset/choice-issue-names-choice.md b/.changeset/choice-issue-names-choice.md deleted file mode 100644 index f23fa206c..000000000 --- a/.changeset/choice-issue-names-choice.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@opencharacter/spec': patch -'@opencharacter/text': patch ---- - -`issues.too-many-picks.choice` and `issues.choice-not-applicable.choice` lead a choice issue with its choice's prompt, so a rules-level choice's issue (fitd-crew's Rigging after its box is unmarked) names what it's about; a slot's prompt gets its number as `{slot}` (#175). diff --git a/.changeset/choice-recommend-options.md b/.changeset/choice-recommend-options.md deleted file mode 100644 index e6d5ffbfc..000000000 --- a/.changeset/choice-recommend-options.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -'@opencharacter/spec': minor -'@opencharacter/engine': minor ---- - -Recommendations that follow the character (#195). A declared choice's `recommend` sees -`options`: the options it offers that are eligible apart from prerequisites (in `from` and its -`where`, passing `eligible`, not taken elsewhere in its `unique` group), in the order offered, so -a choice whose options depend on the character recommends one (`options[0]`) and guided and -random starts over pending choices don't stop there. An allocate step's `recommend` may be one -formula, evaluated per offered field with `field` bound (`{ id, value }`), giving its amount or -`null` for none; and a `recommend` map's entries for fields the step doesn't offer are now -ignored instead of making the recommendation invalid, so one step recommends for whichever -fields its query offers. diff --git a/.changeset/content-computed-values.md b/.changeset/content-computed-values.md deleted file mode 100644 index ea2c4f887..000000000 --- a/.changeset/content-computed-values.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -'@opencharacter/spec': minor -'@opencharacter/engine': minor -'@opencharacter/text': minor ---- - -Picked and granted content has computed values: its type's, item's and kept templates' `computed` -are worked out per activation after every field, reading derived fields and the owning copy (with -its computed values). computeSheet lists them in `activationValues` (`{ activation, values }`), -and the content's actions and follow-ups read them as `self.`. A template kept on content -without a copy may now give computed values. An item's description and named texts take a -block's arguments, so `{self_}` fills them from those values: `contentCard` fills the -description, the new `contentText` gives a description or named text filled, headline pieces of -picked content read `activationValues`, and `pnpm validate` checks their arguments (#193). diff --git a/.changeset/content-group-held-shown.md b/.changeset/content-group-held-shown.md deleted file mode 100644 index a808bb554..000000000 --- a/.changeset/content-group-held-shown.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@opencharacter/spec': minor -'@opencharacter/engine': minor ---- - -A content display group with a member other than a standard copy is shown whatever its `showWhen`, so held content never disappears (a spell added from the catalog to a cwn-srd character who isn't a caster) (#175). diff --git a/.changeset/content-view-fields-families.md b/.changeset/content-view-fields-families.md deleted file mode 100644 index a9b2836c6..000000000 --- a/.changeset/content-view-fields-families.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'@opencharacter/spec': patch -'@opencharacter/engine': patch ---- - -A view-field set's family keys expand where the set is declared, so a content action's -participant role that names the set gets the expanded fields, as a rules action's role does. -Before, the role kept the unexpanded keys and loadRuleset failed with `unknown-name` on a formula -reading one (#183). diff --git a/.changeset/cwn-srd-base-ac-one-source.md b/.changeset/cwn-srd-base-ac-one-source.md deleted file mode 100644 index 53089eaa3..000000000 --- a/.changeset/cwn-srd-base-ac-one-source.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@opencharacter/cwn-srd': patch ---- - -Armor, dermal plating and Skin of Steel set both base Armor Classes from one source: their `set` effects share the `base-ac` stack key, which spans `ac.ranged.base` and `ac.melee.base` (`playerChooses`, the best pair recommended). A medium armored suit (18/14) with Dermal Armor I (16/16) no longer mixes into 18/16. - -App state: the competing groups on `ac.ranged.base` and `ac.melee.base` are now one `base-ac` group spanning both fields, with one option per source, so a pick an app saved for the old per-field groups has to be made again. diff --git a/.changeset/cwn-srd-choice-recommends.md b/.changeset/cwn-srd-choice-recommends.md deleted file mode 100644 index cc9280b14..000000000 --- a/.changeset/cwn-srd-choice-recommends.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/cwn-srd': patch ---- - -Prodigy's attribute, Specialist's skill, a skillplug's skill and All Natural's attributes recommend an option (`recommend: options[0]`; All Natural the first attribute still under +3), so a guided level-up over All Natural's later picks finishes instead of pausing. diff --git a/.changeset/cwn-srd-content-params.md b/.changeset/cwn-srd-content-params.md deleted file mode 100644 index 42805b7a9..000000000 --- a/.changeset/cwn-srd-content-params.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@opencharacter/cwn-srd': minor ---- - -Weapons and spells declare the parameters they use (`params` effects): `attack` offers `attribute` only on Str/Dex weapons, `thrown` only on melee weapons with a range and `burst` only on burst weapons, and `cast-spell` offers `commit` only on spells that Commit for the scene or the day. Their text moves to `types.weapon.params.*` and `types.spell.params.*`. - -Apps pass `attribute`, `thrown`, `burst` and `commit` only where describeAction lists them for that weapon or spell (one passed where describeAction doesn't list it is ignored), and read their names from `types.weapon.params.*` and `types.spell.params.*` instead of the actions' own param keys. diff --git a/.changeset/cwn-srd-heal-dice.md b/.changeset/cwn-srd-heal-dice.md deleted file mode 100644 index 0707c3758..000000000 --- a/.changeset/cwn-srd-heal-dice.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/cwn-srd': patch ---- - -Healer's extra Heal die no longer adds to a Heal Specialist's: the larger pool applies. The pack's `skill-dice` stack key, which never grouped pool dice, is gone. diff --git a/.changeset/cwn-srd-martial-instinct-spend.md b/.changeset/cwn-srd-martial-instinct-spend.md deleted file mode 100644 index 8bf8ff82e..000000000 --- a/.changeset/cwn-srd-martial-instinct-spend.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/cwn-srd': patch ---- - -Martial Instinct spends its bonus roll itself, through a `changes` effect on the attack's new `attack.rolled` step, instead of the shared `attack` action doing it for the art. diff --git a/.changeset/cwn-srd-neural-buffer-refresh.md b/.changeset/cwn-srd-neural-buffer-refresh.md deleted file mode 100644 index a65b7efac..000000000 --- a/.changeset/cwn-srd-neural-buffer-refresh.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/cwn-srd': patch ---- - -A Neural Buffer's phantom hit points refresh: the buffer has an hourly action ("An hour passes") that refreshes them, and a night's rest does too. Before, `bufferUsed` never reset. diff --git a/.changeset/cwn-srd-readme.md b/.changeset/cwn-srd-readme.md deleted file mode 100644 index dbfc2005e..000000000 --- a/.changeset/cwn-srd-readme.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/cwn-srd': patch ---- - -README: the quick start passes `policy`; more tagged steps listed; burst, thrown and skill-dice notes; Martial Instinct named as modeled; sections renamed and reordered. diff --git a/.changeset/cwn-srd-skill-dice-key.md b/.changeset/cwn-srd-skill-dice-key.md deleted file mode 100644 index 51bb97bbc..000000000 --- a/.changeset/cwn-srd-skill-dice-key.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/cwn-srd': patch ---- - -Healer's and a Specialist's extra dice share the `skill-dice` stack key (`highestOnly`) in place of Healer's guard on Heal Specialist picks: the larger pool still applies, now by the pool dice stacking rule. diff --git a/.changeset/cwn-srd-spell-program-damage.md b/.changeset/cwn-srd-spell-program-damage.md deleted file mode 100644 index d2c7b8dca..000000000 --- a/.changeset/cwn-srd-spell-program-damage.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/cwn-srd': patch ---- - -Spells that deal damage per level (Arson, Blast, Blastwave, Disrupt, Paralysis, Slow, Stun, Stunwave) compute it at the caster's level, and the Kill and Stun Verbs at the hacker's Program level (`damage`, such as `3d6`); Heal Injury computes its healing (`healing`, such as `1d6+1`); Skin of Steel computes its Armor Class (`ac`). Their descriptions show the value on a held copy (`{self_damage}`, `{self_healing}`, `{self_ac}`). diff --git a/.changeset/cwn-srd-spell-scene-casts.md b/.changeset/cwn-srd-spell-scene-casts.md deleted file mode 100644 index 58fe96b75..000000000 --- a/.changeset/cwn-srd-spell-scene-casts.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/cwn-srd': patch ---- - -Spells count their casts in the scene (`sceneCasts` state, reset by `end-scene` and `rest`): Blast adds one System Strain after its first cast in a scene, Blastwave one on every cast, and a second Stun in a scene Commits Effort for the day. `cast-spell` has new tagged steps `spell.effort` and `spell.cast` for such costs. diff --git a/.changeset/cwn-srd-veterans-luck.md b/.changeset/cwn-srd-veterans-luck.md deleted file mode 100644 index aa679e110..000000000 --- a/.changeset/cwn-srd-veterans-luck.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/cwn-srd': patch ---- - -Veteran's Luck is modeled. Once a scene (`scene.veteransLuck`, cleared by `end-scene` and `rest`) it turns a missed attack into a hit, an option on the attack's new `missed-attack` choice step (reached only when the attack misses a known AC and the edge's luck is unspent; recommended: keep the miss), or a hit against the character into a miss: the `veteransLuck` situational choice, selected on a weapon hit's damage (`damage.weapon`), takes the attack's batch to no damage without spending Damage Soak, deck Shielding or a Neural Buffer. diff --git a/.changeset/cwn-srd-weapon-card-values.md b/.changeset/cwn-srd-weapon-card-values.md deleted file mode 100644 index afb9cbda9..000000000 --- a/.changeset/cwn-srd-weapon-card-values.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/cwn-srd': patch ---- - -Weapon copies compute their hit bonus, damage bonus and Shock as an attack with them starts (`hit`, `damage`, `shock`, with `attributeMod`, `skillLevel`, `skillDamage` and `ranged`), and drone copies their pilot's `attackBonus`. The weapon and drone blocks show them. diff --git a/.changeset/derived-params-computed-in-effects.md b/.changeset/derived-params-computed-in-effects.md deleted file mode 100644 index 8c89f66e5..000000000 --- a/.changeset/derived-params-computed-in-effects.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -'@opencharacter/spec': minor -'@opencharacter/engine': minor ---- - -Derived parameters: an action parameter (its own, or one a `params` effect adds) may declare a -`formula` instead of being given. startAction works it out once every given parameter has its -value and before any bound, in declaration order, reading the given parameters and the derived -ones before it (a later one is `unknown-name` at load, so they can't loop), and the run's -`participants`, now checked before the parameters (their errors come first). Everything reads it -as `params.`. A value for it from the app, a `use`, an `action` step or a handoff is the new -error `invalid-param` (reason `derived`); the build reports a `use`'s, a creation start's, a -field roll's, an `action` step's and an `action` effect's. describeAction lists it with -`derived: true`. - -Effects that act as an action runs (on rolls, choice and changes steps, listed actions and -incoming changes) read their content's computed values as `self.`, as its actions do. A -field effect still can't (`unknown-name` at load): computed values are worked out after every -field, so one feeding a field could loop. So Cunning Strike's cost is worked out once, and its -DC is a computed value its strike effects read (#251). diff --git a/.changeset/display-group-repeats.md b/.changeset/display-group-repeats.md deleted file mode 100644 index 508d1c593..000000000 --- a/.changeset/display-group-repeats.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@opencharacter/5e-srd-5.2': patch -'@opencharacter/orc-2e': patch -'@opencharacter/orc-sf-2e': patch -'@opencharacter/spec': patch ---- - -A field shows in each display group it's in, and the repeat is intended (a summary repeats headline values), so apps don't dedupe; the display-hints doc says so. 5e-srd-5.2's `concentration.active` is in `combat` only, and orc-2e's and orc-sf-2e's spellcasting proficiency ranks (`spellcasting.rank`, the archetype ranks) are in their spellcasting group only, no longer in `proficiencies` too (#175). diff --git a/.changeset/draw-steel-heroes-pack.md b/.changeset/draw-steel-heroes-pack.md deleted file mode 100644 index 14176b9fa..000000000 --- a/.changeset/draw-steel-heroes-pack.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@opencharacter/packs': minor -'@opencharacter/draw-steel-heroes': patch ---- - -Add the `draw-steel-heroes` pack (Draw Steel: Heroes, published under the DRAW STEEL Creator License) to the bundle. diff --git a/.changeset/duplicate-content-id.md b/.changeset/duplicate-content-id.md deleted file mode 100644 index c93de066b..000000000 --- a/.changeset/duplicate-content-id.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@opencharacter/spec': patch -'@opencharacter/engine': patch ---- - -loadRuleset reports `duplicate-content-id` (data `id`, `pack`) when two content items of one -pack share an ID, instead of keeping the last silently. diff --git a/.changeset/engine-action-run-caches.md b/.changeset/engine-action-run-caches.md deleted file mode 100644 index 984b41f78..000000000 --- a/.changeset/engine-action-run-caches.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/engine': patch ---- - -Actions run several times faster: the rules actions content names with `use` are found once per ruleset, and an action reuses the actor's sheet across its start and resumes instead of rebuilding it each time. What a run returns is its own copy, so a caller editing a result can't change a later run. No answer changes. diff --git a/.changeset/engine-readme-api.md b/.changeset/engine-readme-api.md deleted file mode 100644 index 1d272a145..000000000 --- a/.changeset/engine-readme-api.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/engine': patch ---- - -The README lists `describeAction`, the export calls and the `spec` type namespace, says which calls take `links` and `appliers`, and describes the caches an action run keeps. diff --git a/.changeset/fate-core-guided-recommends.md b/.changeset/fate-core-guided-recommends.md deleted file mode 100644 index ece52c469..000000000 --- a/.changeset/fate-core-guided-recommends.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/fate-core': patch ---- - -The guided start recommends every pick, so run automatically it finishes: a fighter's pyramid (Great Fight; Good Athletics and Physique; Fair Will, Notice and Shoot; Average Empathy, Rapport, Stealth and Lore), written stunts for Fight, Athletics or Physique first (then any written stunt, never the custom one), and no stunt past the free three. diff --git a/.changeset/fate-core-killing-stroke-content.md b/.changeset/fate-core-killing-stroke-content.md deleted file mode 100644 index 17b5fb96c..000000000 --- a/.changeset/fate-core-killing-stroke-content.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@opencharacter/fate-core': patch -'@opencharacter/spec': patch ---- - -fate-core: Killing Stroke is the stunt's own: `changes` effects on the attack's new tagged steps `attack.consequence` (setting the `strokeOffered` flag for a Fight attack with its use left this scene) and `attack.stroke` (marking the use of the copy that offered it, named in `strokeBy`), so an add-on stunt can make a forced consequence worse too. The attack no longer names the stunt. Extras compute their bonus, Weapon and Armor at their ranks (`bonusTotal`, `weaponTotal`, `armorTotal`), and Super-Strength's and Super-Resilience's cards show them. No saved shape changes. Conformance case for a used Killing Stroke. diff --git a/.changeset/fate-core-readme.md b/.changeset/fate-core-readme.md deleted file mode 100644 index 0e85fa84f..000000000 --- a/.changeset/fate-core-readme.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/fate-core': patch ---- - -README: needs spec 0.4; the text-only and out-of-scope sections are merged into Limitations. diff --git a/.changeset/fitd-crew-advance-cohort.md b/.changeset/fitd-crew-advance-cohort.md deleted file mode 100644 index bc4ecde9b..000000000 --- a/.changeset/fitd-crew-advance-cohort.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@opencharacter/fitd-crew': patch -'@opencharacter/spec': patch ---- - -fitd-crew: a crew advance's two upgrade boxes may buy a new gang or expert cohort (with its edge and flaw) instead of upgrades (#175). Conformance test for it. diff --git a/.changeset/fitd-crew-advance-stash.md b/.changeset/fitd-crew-advance-stash.md deleted file mode 100644 index 2522e6728..000000000 --- a/.changeset/fitd-crew-advance-stash.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/fitd-crew': patch ---- - -`crew-advance` takes the crew's members in a `member` role (scoundrel sheets) and proposes each one's stash (tier + 2) on their own sheet, in the scoundrel pack's `stash` field. The outcome still reports it for an app that passes no members. diff --git a/.changeset/fitd-crew-claims-effects-when.md b/.changeset/fitd-crew-claims-effects-when.md deleted file mode 100644 index a6b7cfa76..000000000 --- a/.changeset/fitd-crew-claims-effects-when.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/fitd-crew': patch ---- - -The `claim` type's `effectsWhen` (`item.prison || !lair.lost`) turns off a lair claim's effects while the lair is lost, in place of the `!lair.lost` on each claim's effects; an add-on's claims follow it too. No saved shape changes. diff --git a/.changeset/fitd-crew-gang-type-recommend.md b/.changeset/fitd-crew-gang-type-recommend.md deleted file mode 100644 index 0f16d7ee0..000000000 --- a/.changeset/fitd-crew-gang-type-recommend.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/fitd-crew': patch ---- - -Creation's gang type (asked when a new gang is taken instead of two upgrades) recommends the first gang type, so a run that takes the gang finishes automatically. It recommended an option that doesn't exist, so it always paused. diff --git a/.changeset/fitd-crew-readme.md b/.changeset/fitd-crew-readme.md deleted file mode 100644 index 5a0f39f64..000000000 --- a/.changeset/fitd-crew-readme.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/fitd-crew': patch ---- - -README: needs spec 0.4; sections reordered into one Limitations section; `cohort-roll`'s `commander` role named; the guided start finishes when run automatically. diff --git a/.changeset/fitd-scoundrel-guided-recommends.md b/.changeset/fitd-scoundrel-guided-recommends.md deleted file mode 100644 index e5e67f7b0..000000000 --- a/.changeset/fitd-scoundrel-guided-recommends.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/fitd-scoundrel': patch ---- - -The guided start recommends every pick, so run automatically it finishes: each dot of the starting, heritage, background and free allocations goes to the first action with room in an order that alternates the attributes (Hunt, Finesse, Attune, Study, …), and a pending choice takes its first option. diff --git a/.changeset/fitd-scoundrel-readme.md b/.changeset/fitd-scoundrel-readme.md deleted file mode 100644 index 4e5db95c4..000000000 --- a/.changeset/fitd-scoundrel-readme.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/fitd-scoundrel': patch ---- - -README: sections reordered, Out of scope is now Limitations; Expertise's card names the chosen action. diff --git a/.changeset/fitd-shared-sheet-expertise.md b/.changeset/fitd-shared-sheet-expertise.md deleted file mode 100644 index c5925579e..000000000 --- a/.changeset/fitd-shared-sheet-expertise.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@opencharacter/fitd-crew': patch -'@opencharacter/fitd-scoundrel': patch -'@opencharacter/spec': patch ---- - -fitd-crew and fitd-scoundrel: the READMEs describe the crew as the reference shared sheet (every member links one crew file; apply each member's heat as its own batch and recompute the crew before the next). fitd-scoundrel: Expertise computes the chosen action's rating (`action`, a computed value on the picked ability), and its card names it. No saved shape changes. Conformance case for the card value. diff --git a/.changeset/from-self-source.md b/.changeset/from-self-source.md deleted file mode 100644 index 340e6de49..000000000 --- a/.changeset/from-self-source.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -'@opencharacter/spec': minor -'@opencharacter/engine': minor ---- - -`from: self` on a roll, choice-step or changes-step effect names the content the action runs -for: besides the copy being the action's entry, an action run for content granted or picked -under the copy (named by `source`) matches only the effects that content carries. Abilities a -class grants that share their content type's action now each add only to their own runs; -before, every ability on the copy matched, so one ability's bonus reached another's rolls -(#199). So an effect on the copy's own item (a class) or in a choice's own `effects` no longer -reaches the actions of content granted or picked under it. A template is part of its copy: its -own action still matches by entry, so the copy's item, type and other templates reach it. diff --git a/.changeset/godbound-core-active-gift-effects-when.md b/.changeset/godbound-core-active-gift-effects-when.md deleted file mode 100644 index dc634793b..000000000 --- a/.changeset/godbound-core-active-gift-effects-when.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/godbound-core': patch ---- - -The gift type's `effectsWhen` holds a gift held while active to its committed Effort, in place of the `self.committed > 0` guard each such gift's effects repeated. Nothing changes on the sheet. diff --git a/.changeset/godbound-core-adept-recommend.md b/.changeset/godbound-core-adept-recommend.md deleted file mode 100644 index 92a461d97..000000000 --- a/.changeset/godbound-core-adept-recommend.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/godbound-core': patch ---- - -Adept of the Gate, the Way and the Throne recommend the first invocation they offer instead of a fixed list, so an add-on pack's invocations are recommended too. diff --git a/.changeset/godbound-core-attack-params.md b/.changeset/godbound-core-attack-params.md deleted file mode 100644 index f8060f494..000000000 --- a/.changeset/godbound-core-attack-params.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/godbound-core': minor ---- - -`attack` drops its manual `maximize` parameter: Unerring Blade and Surge of Strength add their own parameters to the attacks they fit (`unerringBlade`, `surgeOfStrength`), committing the scene's Effort (Unerring Blade also hits on anything but a natural 1), and the weapon's `equipped` and a held gift's Effort gate their `use` entries. `gift-blast`'s `mob` parameter is offered only on gifts with Mob damage. Apps that passed `maximize` to `attack` pass the gift's parameter instead (a `maximize` passed now is ignored), pass `mob` only where `gift-blast` offers it, and no longer find `attack` listed on an unequipped weapon. diff --git a/.changeset/godbound-core-boost-fury-guards.md b/.changeset/godbound-core-boost-fury-guards.md deleted file mode 100644 index 17dce6823..000000000 --- a/.changeset/godbound-core-boost-fury-guards.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/godbound-core': patch ---- - -Unerring Blade and Surge of Strength asked on one attack with Effort for only one commit one Effort and apply one gift, not both. A divine fury saved with no rounds left (`fury.rounds` 0) no longer ends on the first turn boundary; it waits for `end-fury`. diff --git a/.changeset/godbound-core-defy-the-iron.md b/.changeset/godbound-core-defy-the-iron.md deleted file mode 100644 index fc6b79421..000000000 --- a/.changeset/godbound-core-defy-the-iron.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/godbound-core': patch ---- - -Defy the Iron is modeled: the `defyTheIron` situational choice, offered while the hero holds the gift and has free Effort, is selected on the damage it negates. The attack's or injury's batch takes no damage, and one Effort is committed for the scene. diff --git a/.changeset/godbound-core-gift-card-dice.md b/.changeset/godbound-core-gift-card-dice.md deleted file mode 100644 index 9d6dad768..000000000 --- a/.changeset/godbound-core-gift-card-dice.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/godbound-core': patch ---- - -Gifts compute the hero's damage, Mob damage and healing dice (`damage`, `mobDamage`, `healing`, in dice notation at the hero's level), on copies and on the gifts Apotheosis and artifacts grant, and the gift card shows them. diff --git a/.changeset/godbound-core-rain-of-sorrow.md b/.changeset/godbound-core-rain-of-sorrow.md deleted file mode 100644 index 8e751b00e..000000000 --- a/.changeset/godbound-core-rain-of-sorrow.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/godbound-core': patch ---- - -While Rain of Sorrow is held, a ranged attack offers `mob`: against a Mob, its damage is read straight and adds the level. diff --git a/.changeset/godbound-core-readme.md b/.changeset/godbound-core-readme.md deleted file mode 100644 index c249d774c..000000000 --- a/.changeset/godbound-core-readme.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/godbound-core': patch ---- - -README: Effort and Influence wording; the quick start passes `policy`; the closed #70 citation replaced with the real reason; new Limitations section. diff --git a/.changeset/godbound-core-turn-boundary.md b/.changeset/godbound-core-turn-boundary.md deleted file mode 100644 index caae472b0..000000000 --- a/.changeset/godbound-core-turn-boundary.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@opencharacter/godbound-core': patch ---- - -A `turn-boundary` clock action counts divine fury's rounds down (`fury.rounds`, set to the level) as the hero's turns end and ends the fury after the last. Burning Vitality, used on the hero, heals a hit point at each of those turn ends until at full health. diff --git a/.changeset/inline-option-text-immunity.md b/.changeset/inline-option-text-immunity.md deleted file mode 100644 index 44c8e8a38..000000000 --- a/.changeset/inline-option-text-immunity.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -'@opencharacter/spec': minor -'@opencharacter/engine': minor -'@opencharacter/text': minor ---- - -Inline options as content items (#195): an inline option may have an optional description, -`.choices..options..description` (Markdown), so a random table of named -paragraphs is a choice of inline options, and `createText`'s new `optionDescription(choice, id)` -reads it (from the adding pack for an option `extendChoices` added). An inline option takes -`immuneTo`, held while it is picked and active; the `immune` issue's `id` is the option's source -ID plus the immunity's (`//