# SubclassDef

> Kinbarrow modding reference — content tree `4a103dcdb658a75a`, version `0.2.0+main.e011511f4`.

An independently loadable subclass supplied by a mod. Unlike the one bundled SRD subclass on `ClassDef`, this definition is selected explicitly and keeps its parent-class and level gate as data identity.

**Note on syntax:** these files are RON, not JSON. The shapes below are exact,
but punctuation follows RON — read a real `data/*.ron` file alongside.

## Fields

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `armor` | `ArmorCategory[]` | default `[]` | Authored armor. |
| `class` | `string` | required | Authored class. |
| `features` | `FeatureGrant[]` | optional | Authored features. |
| `id` | `string` | required | Authored id. |
| `level` | `uint32` | required | Authored level. |
| `name` | `string` | required | Authored name. |
| `source` | `Source` | required | Authored source. |

## Nested shapes

<a id="ability"></a>

### Ability

An open, validated Ability id interned from authored data.

<a id="affliction-entry-effect"></a>

### AfflictionEntryEffect

Authorable `AfflictionEntryEffect` data exposed through the modding schema.

<a id="affliction-entry-effect--drop-held-items"></a>

#### AfflictionEntryEffect::DropHeldItems

Select the drop held items behavior.

<a id="antimagic-policy"></a>

### AntimagicPolicy

Authorable `AntimagicPolicy` data exposed through the modding schema.

<a id="antimagic-policy--suppress-resume"></a>

#### AntimagicPolicy::SuppressResume

Select the suppress resume behavior.

<a id="antimagic-policy--suppress-end"></a>

#### AntimagicPolicy::SuppressEnd

Select the suppress end behavior.

<a id="antimagic-policy--immune"></a>

#### AntimagicPolicy::Immune

Select the immune behavior.

<a id="area"></a>

### Area

An area of effect, resolved on the encounter board's 5 ft grid: a sphere centers on the TARGET, a cone/line throws from the CASTER toward it, a burst centers on the caster (thunderwave's "Self (15-foot cube)", radius-approximated on the Chebyshev grid).

<a id="area--sphere"></a>

#### Area::Sphere

A sphere of `radius_ft`, centered on the target point (fireball).

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `radius_ft` | `uint32` | required |  |

<a id="area--cone"></a>

#### Area::Cone

A cone of `length_ft`, thrown from the caster toward the target (burning hands).

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `length_ft` | `uint32` | required |  |

<a id="area--line"></a>

#### Area::Line

A line of `length_ft`, thrown from the caster toward the target (lightning bolt).

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `length_ft` | `uint32` | required |  |

<a id="area--rectangle"></a>

#### Area::Rectangle

A directional rectangle with independently authored long and wide dimensions. Placement supplies a near-left corner and a second point choosing its long axis; neither dimension is approximated as a line or sphere.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `length_ft` | `uint32` | required |  |
| `width_ft` | `uint32` | required |  |

<a id="area--burst"></a>

#### Area::Burst

A burst of `radius_ft` centered on the caster (thunderwave's "Self" cube, radius-approximated on the grid).

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `radius_ft` | `uint32` | required |  |

<a id="area--emanation"></a>

#### Area::Emanation

A radius centered on and including the origin creature. Unlike a burst, an emanation includes its origin and needs no aim point.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `radius_ft` | `uint32` | required |  |

<a id="armor-category"></a>

### ArmorCategory

The SRD armor categories — light/medium/heavy body armor and the shield.

<a id="armor-category--light"></a>

#### ArmorCategory::Light

Select the light behavior.

<a id="armor-category--medium"></a>

#### ArmorCategory::Medium

Select the medium behavior.

<a id="armor-category--heavy"></a>

#### ArmorCategory::Heavy

Select the heavy behavior.

<a id="armor-category--shield"></a>

#### ArmorCategory::Shield

Select the shield behavior.

<a id="attack-hit-damage-consequence"></a>

### AttackHitDamageConsequence

A consequence gated by the actual post-mitigation damage of an `AttackHitDamageGrant`. Keeping the trigger attached to the damage instance means immunity correctly prevents the consequence as well.

<a id="attack-hit-damage-consequence--prevent-healing-until-source-next-turn"></a>

#### AttackHitDamageConsequence::PreventHealingUntilSourceNextTurn

Select the prevent healing until source next turn behavior.

<a id="authored-choice-payload"></a>

### AuthoredChoicePayload

Authorable `AuthoredChoicePayload` data exposed through the modding schema.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `option_set` | `string` | required | Authored option set. |
| `options` | `string[]` | required | Authored options. |
| `resource_cost` | `uint16` | default `0` | Authored resource cost. |

<a id="authored-forced-action"></a>

### AuthoredForcedAction

Authorable `AuthoredForcedAction` data exposed through the modding schema.

<a id="authored-forced-action--approach"></a>

#### AuthoredForcedAction::Approach

Select the approach behavior.

<a id="authored-forced-action--drop"></a>

#### AuthoredForcedAction::Drop

Select the drop behavior.

<a id="authored-forced-action--flee"></a>

#### AuthoredForcedAction::Flee

Select the flee behavior.

<a id="authored-forced-action--grovel"></a>

#### AuthoredForcedAction::Grovel

Select the grovel behavior.

<a id="authored-forced-action--halt"></a>

#### AuthoredForcedAction::Halt

Select the halt behavior.

<a id="cancellation-check"></a>

### CancellationCheck

The closed resolution gate for cancelling a spell or ongoing effect.

<a id="cancellation-check--automatic"></a>

#### CancellationCheck::Automatic

Select the automatic behavior.

<a id="cancellation-check--d20"></a>

#### CancellationCheck::D20

Select the d20 behavior.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `dc` | `int64` | required |  |
| `modifier` | `int64` | required |  |

<a id="cancellation-check--slot-level-or-spellcasting-check"></a>

#### CancellationCheck::SlotLevelOrSpellcastingCheck

End ongoing spells at or below the casting slot's level automatically; check higher-level spells using the caster's spellcasting ability against the base DC plus the ongoing spell's level.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `dc_base` | `int64` | required |  |

<a id="cancellation-check--saving-throw"></a>

#### CancellationCheck::SavingThrow

The interrupted creature saves against the authored DC; cancellation occurs on a failed save.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `ability` | `Ability` | required |  |
| `dc` | `int64` | required |  |

<a id="cancellation-check--saving-throw-against-caster-dc"></a>

#### CancellationCheck::SavingThrowAgainstCasterDc

The interrupted creature saves against the reacting caster's spell save DC. Cancellation occurs on a failed save.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `ability` | `Ability` | required |  |

<a id="cast-spell-filter"></a>

### CastSpellFilter

A spell catalogue predicate used by cast privileges and transformations. Nonempty fields are combined: a spell must satisfy every authored field.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `cantrip` | `boolean` | optional | When present, require or forbid a cantrip. |
| `cast_times` | `CastTime[]` | default `[]` | Casting times accepted by the rule. Empty accepts every casting time. |
| `classes` | `string[]` | default `[]` | Class-list ids. Empty accepts every class list. |
| `maximum_level` | `integer` | optional | Inclusive highest spell level. Absent has no level ceiling. |
| `minimum_level` | `integer` | optional | Inclusive lowest spell level. Absent has no level floor. |
| `schools` | `string[]` | default `[]` | School ids. Empty accepts every school. |
| `spell_ids` | `string[]` | default `[]` | Exact open spell ids. Empty accepts every id. |

<a id="cast-time"></a>

### CastTime

Casting times supported by the combat turn economy: Action, BonusAction, and Reaction. Longer castings, such as rituals, are not represented here.

<a id="cast-time--action"></a>

#### CastTime::Action

Select the action behavior.

<a id="cast-time--bonus-action"></a>

#### CastTime::BonusAction

Select the bonus action behavior.

<a id="cast-time--reaction"></a>

#### CastTime::Reaction

Select the reaction behavior.

<a id="cast-transform-option"></a>

### CastTransformOption

One open-id cast transformation. The id records the choice; only its authored filter, price, compatibility, and transformations select rules.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `compatible_with` | `string[]` | default `[]` | Other option ids that may be combined with this option. |
| `cost` | `uint32` | required | Units charged to `pool`; zero is legal for automatic transformations. |
| `filter` | `CastSpellFilter` | default `{"cantrip":null,"cast_times":[],"classes":[],"maximum_level":null,"minimum_level":null,"schools":[],"spell_ids":[]}` | Spell predicate that must accept the cast. |
| `id` | `string` | required | Open option id used by UI and recorded decisions, never dispatch. |
| `minimum_class_level` | `uint32` | required | First granting-class level at which this option is legal. |
| `pool` | `string` | optional | Authored resource pool charged when the option has a positive cost. |
| `transformations` | `CastTransformation[]` | required | Nonempty ordered transformation composition. |

<a id="cast-transformation"></a>

### CastTransformation

A bounded mechanical change an authored cast-transform option applies.

<a id="cast-transformation--range-feet"></a>

#### CastTransformation::RangeFeet

Replace the spell's range when its printed range meets the minimum.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `feet` | `uint32` | required |  |
| `minimum_printed_ft` | `uint32` | required |  |

<a id="cast-transformation--range-multiplier"></a>

#### CastTransformation::RangeMultiplier

Multiply a ranged spell and give a Touch spell the authored reach.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `multiplier` | `uint32` | required |  |
| `touch_feet` | `uint32` | required |  |

<a id="cast-transformation--extra-targets"></a>

#### CastTransformation::ExtraTargets

Add distinct targets near the first target.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `count` | `uint32` | required |  |
| `within_ft` | `uint32` | required |  |

<a id="cast-transformation--economy"></a>

#### CastTransformation::Economy

Change the spell's turn economy.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `cast` | `CastTime` | required |  |

<a id="cast-transformation--duration-multiplier"></a>

#### CastTransformation::DurationMultiplier

Multiply a finite duration by this positive factor.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `multiplier` | `uint32` | required |  |

<a id="cast-transformation--duration-seconds"></a>

#### CastTransformation::DurationSeconds

Replace the spell's finite duration with this exact positive value.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `seconds` | `uint64` | required |  |

<a id="cast-transformation--concentration"></a>

#### CastTransformation::Concentration

Replace the spell's concentration requirement.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `required` | `boolean` | required |  |

<a id="cast-transformation--ignore-components"></a>

#### CastTransformation::IgnoreComponents

Suppress the named ordinary component requirements.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `components` | `SpellComponents` | required |  |

<a id="cast-transformation--reroll-damage-dice"></a>

#### CastTransformation::RerollDamageDice

Reroll up to this authored number of damage dice.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `maximum` | `FeatureValue` | required |  |

<a id="cast-transformation--reroll-attack-roll"></a>

#### CastTransformation::RerollAttackRoll

Reroll a missed spell attack up to this many times.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `maximum` | `uint32` | required |  |

<a id="cast-transformation--save-disadvantage"></a>

#### CastTransformation::SaveDisadvantage

Give one target Disadvantage on its first save against the spell.

<a id="cast-transformation--damage-kind-choice"></a>

#### CastTransformation::DamageKindChoice

Choose the resulting damage kind from this nonempty open-id set.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `kinds` | `string[]` | required |  |

<a id="cast-transformation--protect-area-allies"></a>

#### CastTransformation::ProtectAreaAllies

Protect a bounded number of creatures in an area. The base capacity is composed with the optional per-spell-level increment.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `capacity` | `FeatureValue` | required |  |
| `per_spell_level` | `uint32` | required |  |

<a id="cast-transformation--add-ability-damage"></a>

#### CastTransformation::AddAbilityDamage

Add the named ability modifier once to one matching damage roll.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `ability` | `Ability` | required |  |

<a id="cast-transformation--maximize-damage"></a>

#### CastTransformation::MaximizeDamage

Maximize the spell's damage dice.

<a id="cast-transformation--half-damage-on-successful-save"></a>

#### CastTransformation::HalfDamageOnSuccessfulSave

A successful save against a damaging cantrip takes half damage.

<a id="cast-transformation--waive-cost-per-turn"></a>

#### CastTransformation::WaiveCostPerTurn

Waive the option's resource cost for a bounded number of uses per turn.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `uses` | `uint32` | required |  |

<a id="choice-delivery-option"></a>

### ChoiceDeliveryOption

One explicit delivery choice, resolved through the ordinary cast target, save, and effect readers.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `bonus` | `FeatureValue` | optional | Optional feature-derived flat bonus applied once to the option. |
| `delivery` | `Delivery` | required | Target, attack, or save gate applied before its effects. |
| `dice_count_by_level` | `[uint32, uint32][]` | default `[]` | Strictly increasing `(class level, dice count)` rows applied to the option's damage or healing dice. |
| `effects` | `Effect[]` | required | Ordered effects delivered by this option. |
| `id` | `string` | required | Open option id used by UI and recorded decisions, never dispatch. |
| `range` | `SpellRange` | required | Range of this option's ordinary cast-shaped delivery. |

<a id="contingent-consequence"></a>

### ContingentConsequence

Authorable `ContingentConsequence` data exposed through the modding schema.

<a id="contingent-consequence--prevent-drop-to-one"></a>

#### ContingentConsequence::PreventDropToOne

Select the prevent drop to one behavior.

<a id="contingent-predicate"></a>

### ContingentPredicate

Authorable `ContingentPredicate` data exposed through the modding schema.

<a id="contingent-predicate--would-drop-to-zero"></a>

#### ContingentPredicate::WouldDropToZero

Select the would drop to zero behavior.

<a id="contingent-predicate--turn-start"></a>

#### ContingentPredicate::TurnStart

Select the turn start behavior.

<a id="contingent-predicate--turn-end"></a>

#### ContingentPredicate::TurnEnd

Select the turn end behavior.

<a id="contingent-predicate--takes-damage"></a>

#### ContingentPredicate::TakesDamage

Select the takes damage behavior.

<a id="contingent-timing"></a>

### ContingentTiming

Authorable `ContingentTiming` data exposed through the modding schema.

<a id="contingent-timing--before-event"></a>

#### ContingentTiming::BeforeEvent

Select the before event behavior.

<a id="contingent-timing--after-event"></a>

#### ContingentTiming::AfterEvent

Select the after event behavior.

<a id="d20-edge"></a>

### D20Edge

A one-shot d20 edge armed by a feature action.

<a id="d20-edge--self-advantage"></a>

#### D20Edge::SelfAdvantage

Advantage on the bearer's next eligible d20 test.

<a id="d20-edge--incoming-attack-disadvantage"></a>

#### D20Edge::IncomingAttackDisadvantage

Disadvantage on the next attack made against the bearer.

<a id="damage-roll-amount"></a>

### DamageRollAmount

A damage amount supplied by a generic damage-roll policy.

<a id="damage-roll-amount--dice-by-level"></a>

#### DamageRollAmount::DiceByLevel

Dice selected from a strictly increasing class-level table.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `by_level` | `[uint32, string][]` | required |  |

<a id="damage-roll-amount--ability-modifier"></a>

#### DamageRollAmount::AbilityModifier

One authored ability modifier, subject to an authored minimum.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `ability` | `Ability` | required |  |
| `minimum` | `int64` | required |  |

<a id="damage-roll-amount--override-die-faces"></a>

#### DamageRollAmount::OverrideDieFaces

Replace one eligible damage die's faces with this die size.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `faces` | `uint32` | required |  |

<a id="damage-roll-outcome"></a>

### DamageRollOutcome

The resolved roll boundary at which a damage policy applies.

<a id="damage-roll-outcome--hit"></a>

#### DamageRollOutcome::Hit

An eligible attack hit.

<a id="damage-roll-outcome--miss"></a>

#### DamageRollOutcome::Miss

An eligible attack or spell missed.

<a id="damage-roll-outcome--failed-save"></a>

#### DamageRollOutcome::FailedSave

The target failed the effect's saving throw.

<a id="damage-roll-outcome--successful-save"></a>

#### DamageRollOutcome::SuccessfulSave

The target succeeded on the effect's saving throw.

<a id="damage-roll-source"></a>

### DamageRollSource

The authored attack or spell family whose damage a generic feature effect may inspect or amend.

<a id="damage-roll-source--weapon"></a>

#### DamageRollSource::Weapon

Any ordinary weapon attack.

<a id="damage-roll-source--melee-weapon"></a>

#### DamageRollSource::MeleeWeapon

An attack with a Melee weapon: a weapon of a melee category, whether it is swung or thrown.

<a id="damage-roll-source--unarmed-strike"></a>

#### DamageRollSource::UnarmedStrike

An unarmed strike.

<a id="damage-roll-source--bound-weapon"></a>

#### DamageRollSource::BoundWeapon

The weapon currently bound through an authored feature action.

<a id="damage-roll-source--cantrip"></a>

#### DamageRollSource::Cantrip

Any cantrip damage roll.

<a id="damage-roll-source--spell"></a>

#### DamageRollSource::Spell

One of the listed open spell ids.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `ids` | `string[]` | required |  |

<a id="damage-roll-source--mark"></a>

#### DamageRollSource::Mark

Damage attached to the bearer's current authored mark.

<a id="damage-roll-source--attack-roll"></a>

#### DamageRollSource::AttackRoll

Any attack roll: one made with a weapon, an Unarmed Strike, a natural attack or a spell. A spell that makes several attack rolls, one for each ray or beam, makes each of them its own attack roll.

<a id="delivery"></a>

### Delivery

How a cast DELIVERS its effects: the ONE roll/selection gate between the caster and whoever the effect list lands on. A spell is `delivery × effects` — a modded spell composes these primitives freely with no engine code; only a new PRIMITIVE (and, later, a scripted one through the Layer-2 modhost) needs code.

<a id="delivery--weapon-attack"></a>

#### Delivery::WeaponAttack

Make one attack with a concrete carried melee weapon as part of this cast. The action names the reified weapon; a hit resolves its ordinary weapon effects and then this spell phase's effects.

<a id="delivery--attack"></a>

#### Delivery::Attack

A spell attack roll (d20 + PB + casting mod vs AC), once per ray — each hit delivers the effect list (scorching ray rolls three).

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `rays` | `uint32` | required |  |

<a id="delivery--auto"></a>

#### Delivery::Auto

Unerring bolts (magic missile): every dart lands, no roll.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `darts` | `uint32` | required |  |

<a id="delivery--auto-area"></a>

#### Delivery::AutoArea

Every subject in the area receives the effect list without a roll.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `area` | `Area` | required |  |

<a id="delivery--save"></a>

#### Delivery::Save

A saving throw against the caster's DC for everyone caught — the named target, or every combatant an [`Area`] takes in. A SUCCESS spares per [`OnSave`]; non-damage effects land only on a failure.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `ability` | `Ability` | required |  |
| `area` | `Area` | optional |  |
| `on_save` | `OnSave` | required |  |

<a id="delivery--chain-save"></a>

#### Delivery::ChainSave

One primary in spell range plus up to `secondary_targets` distinct creatures within `chain_range_ft` of that primary. Every selected creature makes its own save and receives the effect list independently.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `ability` | `Ability` | required |  |
| `chain_range_ft` | `uint32` | required |  |
| `on_save` | `OnSave` | required |  |
| `secondary_targets` | `uint32` | required |  |

<a id="delivery--allies"></a>

#### Delivery::Allies

The named ally plus the worst-hurt others in range, up to `targets` (mass healing word's six) — the derived-policy pick.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `targets` | `uint32` | required |  |

<a id="delivery--target"></a>

#### Delivery::Target

The named target alone, no roll — the touch utilities.

<a id="effect"></a>

### Effect

The shared mechanic vocabulary for spells and feature grants, including delivered effects, passive rules, activated actions, and combat triggers. It includes conditions, summons, forced movement, and ongoing effects governed by a spell's concentration. Supported effects depend on their context. Passives, actions, and triggers validate their own supported subsets; delivered spells follow their delivery and composition rules.

<a id="effect--cast-privilege"></a>

#### Effect::CastPrivilege

Authorize a cast matching an authored spell predicate and independently state which ordinary casting costs or form restrictions are exempt.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `allowed_while_transformed` | `boolean` | default `false` |  |
| `filter` | `CastSpellFilter` | required |  |
| `ignore_components` | `SpellComponents` | default `{"material":false,"material_consumed":false,"material_costly":false,"somatic":false,"verbal":false}` |  |
| `ignore_consumed_material` | `boolean` | default `false` |  |
| `ignore_costly_material` | `boolean` | default `false` |  |
| `profile` | `PrivilegedCastProfile` | optional | Optional bounded profile for an activated class-granted cast. |
| `requires_prepared` | `boolean` | default `false` |  |
| `requires_selected` | `boolean` | default `false` |  |
| `selection_capacity` | `uint32` | default `0` | Number of distinct spells selected for this privilege. |
| `selection_group` | `string` | optional | Open selection group used to store eligible spell choices. |
| `slotless` | `boolean` | default `false` |  |
| `uses_per_selection` | `integer` | optional | Free casts available independently for each selected spell. |

<a id="effect--cast-transform"></a>

#### Effect::CastTransform

Offer parameterized cast changes. Option ids carry provenance only; filters, costs, compatibility, and transformation values drive play.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `known_capacity` | `[uint32, uint32][]` | default `[]` | Strictly increasing `(class level, maximum known options)` rows. |
| `options` | `CastTransformOption[]` | required |  |
| `simultaneous_limit` | `[uint32, uint32][]` | default `[]` | Strictly increasing `(class level, simultaneous option limit)` rows. |

<a id="effect--choice-delivery"></a>

#### Effect::ChoiceDelivery

Offer mutually exclusive, explicitly delivered effect compositions.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `choices` | `ChoiceDeliveryOption[]` | required |  |

<a id="effect--preparation-access"></a>

#### Effect::PreparationAccess

Admit spells from authored class lists to preparation without changing the bearer's ordinary prepared-spell capacity.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `classes` | `string[]` | required |  |
| `exchange_per_rest` | `integer` | optional | Maximum prepared spells replaced through this access after a rest. Absent grants ordinary add-or-replace preparation access. |
| `maximum_spell_level` | `integer` | optional |  |
| `requires_spellbook` | `boolean` | default `false` |  |

<a id="effect--resource-exchange"></a>

#### Effect::ResourceExchange

Atomically exchange one authored resource ledger for another through a finite conversion table. Resource identity, rates, caps, and use economy are all parameters; a feature id never selects the rule.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `routes` | `ResourceExchangeRoute[]` | required |  |

<a id="effect--restore-resource-minimum"></a>

#### Effect::RestoreResourceMinimum

Raise a named resource ledger to at least an authored amount, without exceeding that ledger's ordinary capacity.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `ledger` | `FeatureResourceLedger` | required |  |
| `minimum` | `uint32` | required |  |

<a id="effect--hide-eligibility"></a>

#### Effect::HideEligibility

Permit an authored Hide context while its action and equipment gates hold. This describes the context, not the granting feature's identity.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `allowed_armor` | `ArmorCategory[]` | default `[]` | Authored body-armor categories that remain eligible. |
| `allows_unarmored` | `boolean` | default `false` | Permit no body armor as an eligible equipment state. |
| `requires_bonus_hide` | `boolean` | default `false` | Require the bearer to have the generic bonus-Hide capability. |

<a id="effect--movement-surface-permission"></a>

#### Effect::MovementSurfacePermission

Permit one movement mode to traverse the listed otherwise-forbidden surfaces while an optional unarmored gate holds.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `mode` | `MovementMode` | required | Movement mode used to cross those surfaces. |
| `requires_unarmored` | `boolean` | default `false` | Whether wearing body armor suppresses the permission. |
| `surfaces` | `MovementSurface[]` | required | Nonempty, duplicate-free surface set. |

<a id="effect--scaled-fall-reduction"></a>

#### Effect::ScaledFallReduction

Spend the creature's Reaction when it falls to reduce the fall's damage by an authored amount per granting-class level.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `damage_per_class_level` | `uint32` | required |  |

<a id="effect--source-linked-condition-lifecycle"></a>

#### Effect::SourceLinkedConditionLifecycle

End a source-owned condition when one of the authored lifecycle events occurs. Source ownership is retained by the ordinary persistent effect.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `ends_on_damage` | `boolean` | default `false` |  |
| `ends_on_source_death` | `boolean` | default `false` |  |
| `ends_on_source_incapacitated` | `boolean` | default `false` |  |

<a id="effect--timed-resistance"></a>

#### Effect::TimedResistance

Grant resistance for a bounded duration after atomically charging an authored resource pool. Exactly one included or excluded set is used.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `cost` | `uint32` | required | Positive fixed pool price. |
| `damage_kinds` | `string[]` | default `[]` | Explicit kinds resisted; empty when `excluded_damage_kinds` is used. |
| `excluded_damage_kinds` | `string[]` | default `[]` | Resist every loaded kind except these ids; empty for an include set. |
| `pool` | `string` | required | Authored resource pool charged on acceptance. |
| `rounds` | `uint32` | required | Duration in combat rounds. |

<a id="effect--ability-scaled-damage-dice"></a>

#### Effect::AbilityScaledDamageDice

Deal one die per derived ability modifier, subject to an authored positive minimum, using the ordinary damage ladder.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `ability` | `Ability` | required | Ability whose modifier determines the number of dice. |
| `die_faces` | `uint32` | required | Faces on every die. |
| `kind` | `string` | required | A `tables/damage_kinds.srd.ron` id. |
| `minimum_dice` | `uint32` | required | Minimum number of dice rolled after deriving the modifier. |

<a id="effect--attack-damage-property"></a>

#### Effect::AttackDamageProperty

Give attacks selected by authored source filters a damage property.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `magical` | `boolean` | required | Whether matching damage counts as magical. |
| `sources` | `DamageRollSource[]` | required | Nonempty attack-source alternatives. |

<a id="effect--damage-roll-policy"></a>

#### Effect::DamageRollPolicy

Amend an eligible damage roll at authored outcomes, with optional once-per-turn accounting.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `amount` | `DamageRollAmount` | required | Damage dice, ability modifier, or die override to apply. |
| `kind` | `string` | optional | Optional replacement damage kind; absent preserves the parent kind. |
| `once_per_turn` | `boolean` | default `false` | Whether the policy may resolve only once during the bearer's turn. |
| `outcomes` | `DamageRollOutcome[]` | required | Nonempty resolved outcomes on which the amount applies. |
| `sources` | `DamageRollSource[]` | required | Nonempty attack, spell, or mark source alternatives. |

<a id="effect--rider-exchange"></a>

#### Effect::RiderExchange

Atomically exchange parent damage dice or attack Advantage for one or more distinct, level-gated effect compositions.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `budget` | `RiderExchangeBudget` | required | Kind of budget paid by the accepted choices. |
| `capacity` | `[uint32, uint32][]` | required | Strictly increasing `(class level, maximum choices)` ladder. |
| `choices` | `RiderExchangeChoice[]` | required | Open-id choices with authored prices and consequences. |
| `leave_one_die` | `boolean` | default `false` | For damage-dice budgets, require at least one die to remain. |

<a id="effect--ability-score-increase"></a>

#### Effect::AbilityScoreIncrease

Derive an increase for the listed ability scores, bounded by `cap`. This is read from the reached grant and is never repeatedly stamped.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `abilities` | `Ability[]` | required | Nonempty set of abilities receiving the same increase. |
| `amount` | `int64` | required | Positive amount added before applying the cap. |
| `cap` | `int64` | required | Highest derived score. The result is `min(score + amount, cap)`, so an input already above the cap is clamped down to it. |

<a id="effect--aging-rate"></a>

#### Effect::AgingRate

Derive apparent age as elapsed years divided by this positive rate. Elapsed world time itself is unchanged.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `divisor` | `uint32` | required |  |

<a id="effect--attunement-capacity"></a>

#### Effect::AttunementCapacity

Override the bearer's derived magic-item attunement capacity.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `capacity` | `uint32` | required |  |

<a id="effect--arm-d20-edge"></a>

#### Effect::ArmD20Edge

Arm one typed one-shot d20 edge on the bearer.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `edge` | `D20Edge` | required |  |

<a id="effect--swap-initiative"></a>

#### Effect::SwapInitiative

Offer a willing, conscious ally and exchange the two Initiative values.

<a id="effect--best-of-two-weapon-damage"></a>

#### Effect::BestOfTwoWeaponDamage

Roll only the weapon's base damage dice twice and keep the greater sum.

<a id="effect--restore-turn-resource"></a>

#### Effect::RestoreTurnResource

Restore one already-spent turn resource to the acting creature.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `economy` | `FeatureActionEconomy` | required |  |

<a id="effect--restore-hit-points"></a>

#### Effect::RestoreHitPoints

Restore hit points from authored dice plus a value derived from the invoking grant and its bearer.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `bonus` | `FeatureValue` | required |  |
| `dice` | `string` | required |  |

<a id="effect--grant-temporary-hit-points"></a>

#### Effect::GrantTemporaryHitPoints

Grant temporary hit points from authored dice plus a value derived from the invoking grant and its bearer.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `bonus` | `FeatureValue` | required |  |
| `dice` | `string` | required |  |

<a id="effect--timed-condition"></a>

#### Effect::TimedCondition

Apply an authored condition to the bearer for a number of rounds. Lifecycle clauses belong to the application, while the condition's combat reads remain composed in `data/conditions`.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `condition` | `string` | required |  |
| `ends_without_attack_or_damage` | `boolean` | default `false` |  |
| `rounds` | `uint32` | required |  |

<a id="effect--one-of-next-turn"></a>

#### Effect::OneOfNextTurn

On the target's next turn, it can only move, take an action, or take a Bonus Action. Its first choice closes the other two for that turn.

<a id="effect--timed-melee-defense"></a>

#### Effect::TimedMeleeDefense

Apply a timed condition whose melee attacks receive a level-scaled flat damage bonus and whose bearer resists authored damage kinds.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `condition` | `string` | required |  |
| `damage_bonus` | `FeatureLevelValue[]` | required |  |
| `ends_without_attack_or_damage` | `boolean` | default `false` |  |
| `resistances` | `string[]` | required |  |
| `rounds` | `uint32` | required |  |

<a id="effect--timed-spell-enhancement"></a>

#### Effect::TimedSpellEnhancement

Apply a timed enhancement to spell attack rolls and spell save DCs.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `attack_advantage` | `boolean` | default `false` |  |
| `condition` | `string` | required |  |
| `fallback_cost` | `uint32` | required |  |
| `fallback_pool` | `string` | required |  |
| `rounds` | `uint32` | required |  |
| `save_dc_bonus` | `int64` | required |  |

<a id="effect--timed-movement-mode"></a>

#### Effect::TimedMovementMode

Grant an authored movement mode at walking speed for a duration. A dismissible grant may be ended by invoking the same action again.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `condition` | `string` | required |  |
| `dismissible` | `boolean` | default `false` |  |
| `fallback_cost` | `uint32` | required |  |
| `fallback_pool` | `string` | required |  |
| `mode` | `MovementMode` | required |  |
| `rounds` | `uint32` | required |  |

<a id="effect--fallback-pool-cost"></a>

#### Effect::FallbackPoolCost

Charge a fixed amount from an authored fallback resource when the action's primary use store is unavailable.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `amount` | `uint32` | required |  |
| `pool` | `string` | required |  |

<a id="effect--timed-damage-aura"></a>

#### Effect::TimedDamageAura

Establish a mobile damaging aura around the bearer for the authored duration. Damage and radius are ordinary parameters, not content ids.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `damage` | `FeatureValue` | required |  |
| `kind` | `string` | required |  |
| `radius_ft` | `uint32` | required |  |
| `rounds` | `uint32` | required |  |

<a id="effect--heal-spread"></a>

#### Effect::HealSpread

Divide a level-derived healing budget among nearby allies without raising any recipient beyond the authored fraction of maximum HP.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `maximum_percent` | `uint8` | required |  |
| `points_per_level` | `uint32` | required |  |
| `radius_ft` | `uint32` | required |  |

<a id="effect--mark-target"></a>

#### Effect::MarkTarget

Install or transfer a source-owned mark onto one target in range.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `damage_die` | `string` | required |  |
| `range_ft` | `uint32` | required |  |

<a id="effect--restore-pool"></a>

#### Effect::RestorePool

Restore an authored resource pool to its capacity.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `heal_with_capacity_die` | `boolean` | default `false` |  |
| `pool` | `string` | required |  |

<a id="effect--bonus-strikes"></a>

#### Effect::BonusStrikes

Offer an authored number of bonus strikes against one legal target.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `count` | `uint8` | required |  |

<a id="effect--bonus-economy"></a>

#### Effect::BonusEconomy

Make selected ordinary actions available through the bonus-action economy for the current turn.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `dash` | `boolean` | default `false` |  |
| `disengage` | `boolean` | default `false` |  |
| `dodge` | `boolean` | default `false` |  |
| `hide` | `boolean` | default `false` |  |
| `utilize` | `boolean` | default `false` |  |

<a id="effect--hit-rider"></a>

#### Effect::HitRider

Arm the bearer's next eligible hit with typed damage and/or a saving throw that applies an authored condition.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `condition` | `string` | optional |  |
| `damage` | `SlotScaledDamage` | optional |  |
| `save` | `Ability` | optional |  |

<a id="effect--attack-advantage"></a>

#### Effect::AttackAdvantage

Grant Advantage on the next eligible attack and optionally consume the bearer's remaining movement for this turn.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `consume_movement` | `boolean` | default `false` |  |

<a id="effect--spend-healing-pool"></a>

#### Effect::SpendHealingPool

Spend points from an authored pool to heal a touched ally or remove one of its conditions at the authored cleanse price.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `cleanse_cost` | `uint32` | required |  |
| `points_per_level` | `uint32` | required |  |
| `pool` | `string` | required |  |

<a id="effect--grant-die"></a>

#### Effect::GrantDie

Grant a die selected from an authored level table to one ally in range.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `by_level` | `FeatureLevelValue[]` | required |  |
| `range_ft` | `uint32` | required |  |

<a id="effect--weapon-attack-ability-bonus"></a>

#### Effect::WeaponAttackAbilityBonus

Add one ability modifier to weapon attack rolls for the authored duration.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `ability` | `Ability` | required |  |
| `rounds` | `uint32` | required |  |

<a id="effect--creature-type-save-or-heal"></a>

#### Effect::CreatureTypeSaveOrHeal

Offer a save against creatures of an authored type in an area or a level-scaled heal to one target. The choice is made by the action. Each creature that fails the save gains every one of `conditions` for `rounds`, against the action's save DC.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `conditions` | `string[]` | required |  |
| `creature_type` | `string` | required |  |
| `heal_bonus` | `FeatureValue` | required |  |
| `heal_die` | `string` | required |  |
| `radius_ft` | `uint32` | required |  |
| `rounds` | `uint32` | required |  |
| `save` | `Ability` | required |  |

<a id="effect--save-bonus-aura"></a>

#### Effect::SaveBonusAura

Add one ability modifier to allied saving throws made within an aura.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `ability` | `Ability` | required |  |
| `radius_ft` | `uint32` | required |  |

<a id="effect--condition-immunity-aura"></a>

#### Effect::ConditionImmunityAura

Prevent allies within an aura from gaining one authored condition.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `condition` | `string` | required |  |
| `radius_ft` | `uint32` | required |  |

<a id="effect--roll-bonus"></a>

#### Effect::RollBonus

Add authored dice to the roll currently crossing a trigger boundary.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `dice` | `string` | required |  |

<a id="effect--replace-roll"></a>

#### Effect::ReplaceRoll

Replace the d20 currently crossing a trigger boundary with an authored face value.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `value` | `uint8` | required |  |

<a id="effect--reroll-failed-save"></a>

#### Effect::RerollFailedSave

Reroll the failed save currently crossing a trigger boundary and add a value derived from the invoking grant and bearer.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `bonus` | `FeatureValue` | required |  |

<a id="effect--conditional-save-reroll"></a>

#### Effect::ConditionalSaveReroll

Offer a willing target in range a reroll of a failed save against one of the authored conditions.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `conditions` | `string[]` | required | Nonempty condition ids which make this reroll eligible. |
| `radius_ft` | `uint32` | required | Maximum distance from the feature bearer to the saving creature. |
| `willing` | `boolean` | required | Whether the saving creature must accept the reroll. |
| `with_advantage` | `boolean` | required | Whether the replacement save rolls twice and keeps the higher d20. |

<a id="effect--return-reduced-attack"></a>

#### Effect::ReturnReducedAttack

After an incoming attack's damage is reduced to zero, permit an ordinary return attack against an eligible target in range.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `cost` | `uint32` | required | Positive amount charged from `pool` for the return attack. |
| `damage_kinds` | `string[]` | required | Nonempty damage-kind ids eligible for the reduction and return. |
| `pool` | `string` | required | Authored resource pool charged only when the return is accepted. |
| `range_ft` | `uint32` | required | Maximum range of the ordinary return attack. |

<a id="effect--suppress-incoming-advantage"></a>

#### Effect::SuppressIncomingAdvantage

Suppress Advantage on incoming attacks while the authored awareness gate holds.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `requires_conscious` | `boolean` | required | When true, an unconscious or otherwise incapacitated bearer cannot suppress the incoming Advantage. |

<a id="effect--extra-initiative-turn"></a>

#### Effect::ExtraInitiativeTurn

Insert another initiative turn in the first round at the authored penalty from the bearer's initiative.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `initiative_penalty` | `int64` | required |  |

<a id="effect--half-cover-aura"></a>

#### Effect::HalfCoverAura

Grant half cover to the bearer and nearby allies until the bearer's next turn begins.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `radius_ft` | `uint32` | required |  |

<a id="effect--move-by-speed-fraction"></a>

#### Effect::MoveBySpeedFraction

Move the bearer by a fraction of its current speed as part of the boundary transition.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `denominator` | `uint8` | required |  |

<a id="effect--movement-capability"></a>

#### Effect::MovementCapability

Use Dexterity for jump distance and/or grant a Climb Speed equal to walking speed while the row is active.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `climb_speed` | `boolean` | default `false` |  |
| `jump_uses_dexterity` | `boolean` | default `false` |  |

<a id="effect--school-damage-bonus"></a>

#### Effect::SchoolDamageBonus

Add one ability modifier to a damage roll for a spell of the authored school.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `ability` | `Ability` | required |  |
| `school` | `string` | required |  |

<a id="effect--maximize-school-damage"></a>

#### Effect::MaximizeSchoolDamage

Maximize damage for a spell in the authored school through the stated level; repeated use may apply the ordinary escalating backlash.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `backlash` | `boolean` | default `false` |  |
| `maximum_spell_level` | `uint8` | required |  |
| `school` | `string` | required |  |

<a id="effect--cleanse-from-pool"></a>

#### Effect::CleanseFromPool

Spend authored pool points for each condition removed by a healing boundary.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `points_per_effect` | `uint32` | required |  |
| `pool` | `string` | required |  |

<a id="effect--area-save-condition"></a>

#### Effect::AreaSaveCondition

Make foes in range save or gain an authored condition for a number of rounds.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `condition` | `string` | required |  |
| `range_ft` | `uint32` | required |  |
| `rounds` | `uint32` | required |  |
| `save` | `Ability` | required |  |

<a id="effect--healing-bonus"></a>

#### Effect::HealingBonus

Add a flat amount plus an amount per spell level to healing crossing the current boundary.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `flat` | `int64` | required |  |
| `per_spell_level` | `int64` | required |  |

<a id="effect--persistent-spell"></a>

#### Effect::PersistentSpell

Select the persistent spell behavior.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `payload` | `PersistentSpellPayload` | required |  |

<a id="effect--maximum-hit-points-change"></a>

#### Effect::MaximumHitPointsChange

Select the maximum hit points change behavior.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `amount` | `int32` | required |  |

<a id="effect--maximum-hit-points-reduction-from-damage"></a>

#### Effect::MaximumHitPointsReductionFromDamage

Reduce the target's maximum HP by the damage the immediately preceding damage step actually dealt, after saves and damage modifiers. The life state kernel floors effective maximum HP at 1.

<a id="effect--adjacent-target-damage"></a>

#### Effect::AdjacentTargetDamage

After a weapon-delivered spell hits its primary target, deal typed damage to one explicitly chosen different creature within this many feet of the primary. The casting ability modifier is optional and the dice follow the owning spell's ordinary cantrip ladder.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `cantrip_step_offset` | `int8` | default `0` |  |
| `casting_modifier` | `boolean` | default `false` |  |
| `dice` | `string` | required |  |
| `kind` | `string` | required |  |
| `max_distance_ft` | `uint32` | required |  |
| `requires_sight` | `boolean` | default `false` |  |

<a id="effect--voluntary-movement-damage"></a>

#### Effect::VoluntaryMovementDamage

Arm the delivered target until the source's next turn starts. The first voluntary move of at least `minimum_ft` consumes the handle and deals the scaled typed damage; forced movement never enters this door.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `cantrip_step_offset` | `int8` | default `0` |  |
| `dice` | `string` | required |  |
| `kind` | `string` | required |  |
| `minimum_ft` | `uint32` | default `5` |  |

<a id="effect--cantrip-step-damage"></a>

#### Effect::CantripStepDamage

Typed damage whose die count follows the cantrip tier multiplier plus an authored signed offset. An offset of -1 expresses riders that begin at level 5 without content-specific branching.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `dice` | `string` | required |  |
| `kind` | `string` | required |  |
| `step_offset` | `int8` | default `0` |  |

<a id="effect--death-prevention"></a>

#### Effect::DeathPrevention

Select the death prevention behavior.

<a id="effect--mode-choice"></a>

#### Effect::ModeChoice

Require one explicit closed authored option before applying this effect.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `choice` | `AuthoredChoicePayload` | required |  |

<a id="effect--forced-action-control"></a>

#### Effect::ForcedActionControl

Compel one typed action; content identity never participates in dispatch.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `action` | `AuthoredForcedAction` | required |  |

<a id="effect--forced-action-choice"></a>

#### Effect::ForcedActionChoice

Require the caster to choose one of several typed commands, then arm that exact forced action on the delivered target's next turn.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `option_set` | `string` | required |  |
| `options` | `AuthoredForcedAction[]` | required |  |

<a id="effect--contingent"></a>

#### Effect::Contingent

Arm a separately typed delayed predicate and consequence.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `consequence` | `ContingentConsequence` | required |  |
| `predicate` | `ContingentPredicate` | required |  |
| `timing` | `ContingentTiming` | required |  |

<a id="effect--transform"></a>

#### Effect::Transform

Replace a target's authored combat form while preserving soul identity.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `form` | `FormPayload` | required |  |

<a id="effect--change-size"></a>

#### Effect::ChangeSize

Change only the target's occupied size category; all other statistics remain.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `size` | `Size` | required |  |

<a id="effect--speed-grant"></a>

#### Effect::SpeedGrant

Temporarily add an authored number of feet to one closed movement mode.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `amount_ft` | `uint32` | required |  |
| `mode` | `MovementMode` | required |  |
| `source_owned` | `boolean` | default `false` |  |

<a id="effect--unarmed-strike-damage-grant"></a>

#### Effect::UnarmedStrikeDamageGrant

Add one separately typed damage roll to every Unarmed Strike hit for the effect's duration. The rider is its own damage instance (so its resistance and critical-hit dice are resolved independently).

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `dice` | `string` | required |  |
| `kind` | `string` | required |  |

<a id="effect--attack-hit-damage-grant"></a>

#### Effect::AttackHitDamageGrant

Add one separately typed damage roll whenever the bearer hits with an attack, provided the hit target is no farther away than the authored range. This applies uniformly to weapon, Unarmed Strike, natural, and spell attacks; the rider is a distinct damage instance and its dice double on a critical hit.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `consequences` | `AttackHitDamageConsequence[]` | default `[]` |  |
| `dice` | `string` | required |  |
| `kinds` | `string[]` | required |  |
| `max_target_distance_ft` | `uint32` | required |  |

<a id="effect--turn-start-proximity-choice"></a>

#### Effect::TurnStartProximityChoice

While this source-owned effect lasts, the source is offered a no-cost accept/decline choice whenever a creature it can see starts its turn in the authored radius. Choices are queued independently in source order.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `consequence` | `OptionalEffectConsequence` | required |  |
| `radius_ft` | `uint32` | required |  |
| `requires_sight` | `boolean` | default `false` |  |

<a id="effect--strength-score-floor"></a>

#### Effect::StrengthScoreFloor

Raise the target's Strength score to at least this value for the effect's duration. The stored score is never lowered or mutated.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `score` | `uint8` | required |  |

<a id="effect--condition-immunity-grant"></a>

#### Effect::ConditionImmunityGrant

Grant immunity to one authored condition for this effect's duration. The grant is source-owned, so concentration loss removes only the granting source's immunity.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `condition` | `string` | required |  |

<a id="effect--breathing-grant"></a>

#### Effect::BreathingGrant

Temporarily grant one or both breathing media. This changes only the suffocation predicate; it grants no Swim Speed or movement permission.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `air` | `boolean` | default `false` |  |
| `water` | `boolean` | default `false` |  |

<a id="effect--turn-start-temp-hp"></a>

#### Effect::TurnStartTempHp

At the start of each target turn, grant temporary HP equal to the casting ability modifier (minimum zero). Multiple grants obey the ordinary non-stacking temporary-HP rule.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `ability` | `Ability` | required |  |

<a id="effect--turn-start-damage"></a>

#### Effect::TurnStartDamage

Deal typed damage at the start of each affected creature's turn for this effect's duration. An authored action-removal flag exposes the shared self-or-adjacent cleanse action rather than a spell-specific verb.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `dice` | `string` | required |  |
| `kind` | `string` | required |  |
| `plus` | `int64` | default `0` |  |
| `removable_by_action` | `boolean` | default `false` |  |

<a id="effect--vision-grant"></a>

#### Effect::VisionGrant

Temporarily grant Truesight to at least this range. Existing longer special senses remain authoritative; expiration reveals them again.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `truesight_ft` | `uint32` | required |  |

<a id="effect--reaction-defense"></a>

#### Effect::ReactionDefense

Install or resolve a typed pre-resolution defense/cancellation payload.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `payload` | `ReactionDefensePayload` | required |  |

<a id="effect--fall-protection"></a>

#### Effect::FallProtection

Modify the next pending fall impact on the target. This is an event primitive rather than a spell-id branch: reaction content supplies the exact reduction and optional controlled-descent rate.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `damage_divisor` | `uint32` | required | Divide rolled falling damage by this value (minimum 1). |
| `damage_reduction` | `uint32` | required | Flat reduction after division. |
| `descent_ft_per_round` | `integer` | optional | A controlled descent rate; while present, this pending impact deals no falling damage (the rate remains semantic state for consumers). |
| `max_damage` | `integer` | optional | Optional final damage ceiling. |

<a id="effect--damage"></a>

#### Effect::Damage

`dice` (+ `plus`) damage of `kind` — halved by a resistance, spared per the delivery's save. A crit doubles the dice (attack deliveries).

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `dice` | `string` | required |  |
| `kind` | `string` | required | A `tables/damage_kinds.srd.ron` id, boot-resolved. |
| `plus` | `int64` | default `0` |  |

<a id="effect--conditional-damage"></a>

#### Effect::ConditionalDamage

Use `alternate_dice` when the delivered target is below maximum HP.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `alternate_dice` | `string` | required |  |
| `kind` | `string` | required |  |
| `primary_dice` | `string` | required |  |

<a id="effect--damage-type-choice"></a>

#### Effect::DamageTypeChoice

Damage whose kind is chosen at cast time from this closed authored set. The live and forked policies choose the first kind with the greatest post-mitigation result; content names never enter combat dispatch.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `dice` | `string` | required |  |
| `kinds` | `string[]` | required |  |
| `plus` | `int64` | default `0` |  |

<a id="effect--heal"></a>

#### Effect::Heal

Restore `dice` (+ the casting mod if `add_mod`) hit points.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `add_mod` | `boolean` | required |  |
| `dice` | `string` | required |  |

<a id="effect--flat-heal"></a>

#### Effect::FlatHeal

Restore an exact authored number of hit points (no die or modifier).

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `amount` | `int64` | required |  |

<a id="effect--heal-from-damage"></a>

#### Effect::HealFromDamage

Restore HP to the effect's source from the immediately preceding damage step's actual post-mitigation applied amount.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `divisor` | `uint32` | required |  |

<a id="effect--self-damage-heal-target"></a>

#### Effect::SelfDamageHealTarget

Deal irreducible typed damage to the effect's source, then restore the delivered target by an authored multiple of that applied damage.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `dice` | `string` | required |  |
| `heal_multiplier` | `uint32` | required |  |
| `kind` | `string` | required |  |

<a id="effect--cleanse-condition"></a>

#### Effect::CleanseCondition

Remove one currently borne condition from a closed authored set. When several qualify, authored order is the deterministic choice order.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `conditions` | `string[]` | required |  |

<a id="effect--remove-exhaustion"></a>

#### Effect::RemoveExhaustion

Remove up to this many levels from the target's world-authoritative Exhaustion track. A value of six expresses complete 2024 recovery without coupling the primitive to one item.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `levels` | `uint8` | required |  |

<a id="effect--maximize-hit-die-healing"></a>

#### Effect::MaximizeHitDieHealing

For the enclosing duration, every Hit Die the target spends restores the die's maximum result rather than its ordinary roll/average.

<a id="effect--skill-advantage"></a>

#### Effect::SkillAdvantage

Advantage on a closed set of skills only when the check explicitly influences a creature within the authored range.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `influence_within_ft` | `uint32` | required |  |
| `skills` | `Skill[]` | required |  |

<a id="effect--stabilize"></a>

#### Effect::Stabilize

End a dying ally's death saves (spare the dying).

<a id="effect--kindle"></a>

#### Effect::Kindle

Kindle the target with an independently timed illumination handle, cast instead of struck, throwing `bright_ft` of bright light and `dim_ft` MORE of dim — the SRD's own phrasing ("bright light in a 20-foot radius and dim light for an additional 20 feet"). Light is the torch's 20/20; daylight throws 60/60.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `bright_ft` | `uint32` | required |  |
| `dim_ft` | `uint32` | required |  |

<a id="effect--guide"></a>

#### Effect::Guide

The glimmer (guiding bolt): the next attack roll against the target has advantage.

<a id="effect--modify"></a>

#### Effect::Modify

Bless/bane: `die` rides the bearer's own attack rolls and saving throws for the duration — added, or subtracted when `penalty`. A CONCENTRATION effect (the validator pins it), so it lifts when the caster's focus breaks.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `die` | `string` | required |  |
| `penalty` | `boolean` | default `false` |  |

<a id="effect--afflict"></a>

#### Effect::Afflict

Inflict a condition on the target: the id resolves against `data/conditions/` at load — a condition is a DATA bundle of engine [`ConditionComponent`] reads, so hold person's paralysis and a mod's own affliction are the same one-file shape. Behind a `Save` delivery the bearer repeats that save at each of its turns to shake it (SRD save-ends); a CONCENTRATION effect.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `beneficial` | `boolean` | default `false` | Some conditions are grants rather than hostile afflictions (for example an item granting Invisible). This controls side legality; condition identity remains data and is never special-cased here. |
| `condition` | `string` | required |  |
| `ends_on_attack_damage_or_cast` | `boolean` | default `false` | The granted condition ends immediately after its bearer makes an attack or casts a spell. The triggering attack still receives the condition's benefits; item activation itself is not a spell cast. |
| `ends_on_source_side_damage` | `boolean` | default `false` | The condition ends after the spell's source or one of that source's allies deals damage to the bearer. |
| `forced_turn` | `ForcedTurnRule` | optional | Source-relative turn behavior retained with this exact condition relation for as long as it remains active. |
| `initial_save_advantage_if_fighting` | `boolean` | default `false` | A hostile target makes the initial delivery save with Advantage when the source's side is already fighting it. |
| `on_failed_save` | `AfflictionEntryEffect[]` | default `[]` | Consequences applied once, only after the initial affliction lands. |
| `repeat_save` | `RepeatSaveRule` | optional | Whether the target repeats the delivery save at the end of each of its turns. Most combat afflictions do; Charm Person does not. |

<a id="effect--next-weapon-attack-disadvantage"></a>

#### Effect::NextWeaponAttackDisadvantage

The target's next weapon attack is made with Disadvantage; if unused, this expires at the end of that target's next turn.

<a id="effect--next-saving-throw-penalty"></a>

#### Effect::NextSavingThrowPenalty

Subtract `die` from the target's next saving throw before the end of the source's next turn. The rider is consumed by the first save attempt, whether that save succeeds or fails.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `die` | `string` | required |  |

<a id="effect--push"></a>

#### Effect::Push

Forced movement: shove the target `distance_ft` directly AWAY from the effect's origin (the caster, for the self-centered burst/cone/ line spells that carry it), stopping at the first wall, impassable creature's space, or board edge. It can end in an occupied space it may pass through. A harmful, instantaneous rider behind a Save — forgone on a success. Thunderwave's ten-foot push is the first. LEDGERED: pushing away from a SPHERE's center rather than the caster (no shipped sphere-push spell needs it) and prone-on-collision.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `distance_ft` | `uint32` | required |  |
| `max_target_size` | `Size` | optional | Largest creature size this effect can move. Absent means no limit; an ineligible target still receives the spell's other effects. |

<a id="effect--pull"></a>

#### Effect::Pull

A pull: forced movement TOWARD the caster — thorn whip's vine yank, the mirror of Push. Drags the struck target `distance_ft` toward the caster (halting adjacent, never onto it). HARMFUL (it rides a to-hit or a save, like Push). LEDGERED: a pull toward a POINT other than the caster.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `distance_ft` | `uint32` | required | Maximum distance the target is moved. |
| `max_target_size` | `Size` | optional | Largest creature size this effect can move. Absent means no limit; an ineligible target still receives the spell's other effects. |

<a id="effect--beam"></a>

#### Effect::Beam

A sustained beam: a CONCENTRATION drain that deals `dice` `kind` to the delivered target AUTOMATICALLY at the start of each of the caster's turns — vampiric touch's per-turn drain (the one-time hit is a separate `Damage` step; this is the sustain). HARMFUL (rides a to-hit or a save), an ongoing effect (concentration). LEDGERED: the SRD range-break (the beam ends if the target leaves range/cover — ours holds while concentration does), the life-drain self-HEAL (no heal-from-damage primitive yet), and the upcast.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `dice` | `string` | required |  |
| `kind` | `string` | required |  |

<a id="effect--teleport"></a>

#### Effect::Teleport

Teleport: the delivered target vanishes and reappears up to `max_ft` away — misty step's blink. A BENEFICIAL self-move behind a Target delivery. The destination is AI-chosen (the unoccupied on-board square FARTHEST from the nearest enemy — the escape the world uses), following the world-first precedent; a PLAYER-picked destination, the "space you can see" line of sight, and bringing a willing creature (dimension door) are LEDGERED.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `max_ft` | `uint32` | required |  |

<a id="effect--aura"></a>

#### Effect::Aura

An aura: a CONCENTRATION area centered on the caster that bites foes who START their turn within `radius_ft` — an `ability` save for half of `dice` `kind` damage (spirit guardians). Established on the delivered target (the caster — a Target self-cast); BENEFICIAL for the delivery's side-legality (you cast it on yourself), the harm emergent per-turn. It moves WITH the caster and lifts when its concentration breaks. LEDGERED: the SRD "enters the area for the first time on a turn" movement trigger (start-turn-in only today), the speed-halving, and the upcast (+dice/slot).

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `ability` | `Ability` | required |  |
| `dice` | `string` | required |  |
| `kind` | `string` | required |  |
| `radius_ft` | `uint32` | required |  |

<a id="effect--obscuration-aura"></a>

#### Effect::ObscurationAura

A mobile heavily-obscured area centered on the delivered creature.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `radius_ft` | `uint32` | required |  |
| `source_sees_through` | `boolean` | default `false` |  |

<a id="effect--summon"></a>

#### Effect::Summon

A transient summon that mints `creature_id` from the bestiary onto its source's side mid-fight. It may be concentration-bound or independently timed, fights through the ordinary combatant machinery, takes no plunder, and is swept from the world when the fight ends.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `acts_after_source` | `boolean` | default `false` | Insert the summon immediately after its source in Initiative. |
| `augmentation` | `SummonAugmentation` | default `{"choice_binding":null,"dismiss":null,"linked_grants":[]}` | Optional selected-kind binding and source-linked grants. An activated cast privilege may overlay the same reusable shape. |
| `creature_id` | `string` | required |  |
| `dismiss` | `CastTime` | optional | Optional economy with which the source may dismiss this summon. |
| `requires_command` | `boolean` | default `false` | The summon must receive its source's free verbal command each round or it takes only the defensive default. |
| `scaling` | `SummonScaling` | optional | Optional slot/caster-derived stat-block formula for summoned spirits. Absent preserves an ordinary fixed bestiary body. |

<a id="effect--zone"></a>

#### Effect::Zone

A zone: a CONCENTRATION area anchored to a FIXED point on the board (the aura's board-bound sibling — an aura moves WITH its caster, a zone stands where it was cast) that bites whoever starts their turn within `radius_ft` — an `ability` save for half of `dice` `kind` damage (moonbeam). Established via a Target self-cast; BENEFICIAL for the delivery's side-legality (the harm is emergent per-turn, like the aura), the placement AI-chosen (the foe cluster within range, never an ally — the world-first precedent). LEDGERED: the SRD "enters the area" movement trigger (start-turn-in only today), a MOVABLE zone (moonbeam's beam-step), the cylinder/cube shapes (a Chebyshev radius today), the PLAYER-picked anchor, and the upcast. The movement-blocking WALL (Wall of Force/Stone — blocked squares + line-of-sight) is a distinct primitive, ledgered as the sibling.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `ability` | `Ability` | required |  |
| `dice` | `string` | required |  |
| `dispersed_by_strong_wind` | `boolean` | default `false` |  |
| `kind` | `string` | required |  |
| `radius_ft` | `uint32` | required |  |

<a id="effect--triggered-zone"></a>

#### Effect::TriggeredZone

A board area whose consequence fires at turn start, on first entry, and/or at turn end. Unlike the older damage-only `Zone`, this carries the complete authored trigger, use ledger, mobility, exclusions, and removable riders needed by creature-selective healing and hazardous fields.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `exclusions` | `string[]` | default `[]` |  |
| `mobile_reposition_ft` | `integer` | optional |  |
| `optional_by_source` | `boolean` | default `false` |  |
| `outcome` | `TriggeredZoneOutcome` | required |  |
| `radius_ft` | `uint32` | required |  |
| `shape` | `TriggeredZoneShape` | default `"Sphere"` |  |
| `trigger_end` | `boolean` | default `false` |  |
| `trigger_entry` | `boolean` | default `true` |  |
| `trigger_start` | `boolean` | default `true` |  |
| `uses` | `TriggeredZoneUses` | optional |  |

<a id="effect--directional-field"></a>

#### Effect::DirectionalField

A sustained rectangular field anchored to its source's current square and an authored orientation. The caller establishes it once; creatures in its footprint are consequences of the field, not separate copies.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `ability` | `Ability` | required |  |
| `length_ft` | `uint32` | required |  |
| `movement_toward_source_multiplier` | `uint8` | default `1` |  |
| `push_ft` | `uint32` | required |  |
| `reaim` | `CastTime` | optional |  |
| `strong_wind` | `boolean` | default `false` |  |
| `trigger_end` | `boolean` | default `false` |  |
| `trigger_initial` | `boolean` | default `true` |  |
| `width_ft` | `uint32` | required |  |

<a id="effect--wall"></a>

#### Effect::Wall

A wall: a CONCENTRATION barrier of `length_ft` that stands a line of BLOCKED squares on the board — Wall of Stone / Wall of Force. It deals no direct damage; it BLOCKS. Every mover, the king-step pathing, the cover / line-of-sight trace, teleport, and forced movement already read `board.open`, so the wall gates all of them for free (the board footprint + cover seam). Established via a Target self-cast; BENEFICIAL for the delivery's side-legality (it harms no creature directly), the placement AI-chosen (a line cutting the caster off from the foe cluster, never through a creature — the world-first precedent). LEDGERED: the PLAYER-drawn shape/anchor, the panel/ring/sphere forms (a straight line today), a DAMAGING wall (Wall of Fire — a Wall+Zone compose), and the "creatures in the wall's space are shoved clear" rule (gaps at occupants).

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `length_ft` | `uint32` | required |  |

<a id="effect--wall-damage"></a>

#### Effect::WallDamage

A damaging wall: Wall of Fire — a CONCENTRATION barrier of `length_ft` that BLOCKS (like `Wall`) AND sears any of the caster's enemies who start their turn on or adjacent to it (an `ability` save for half of `dice` `kind`). Established via a Target self-cast; BENEFICIAL for side-legality (emergent per-turn, like the Zone). LEDGERED: the SRD wall of fire is PASSABLE (ours blocks — a fiery barrier, the fun-first read), its ONE damaging side (ours sears both), the opaque line-of-sight, the player-drawn shape/anchor, and the upcast.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `ability` | `Ability` | required |  |
| `dice` | `string` | required |  |
| `kind` | `string` | required |  |
| `length_ft` | `uint32` | required |  |

<a id="effect--zone-afflict"></a>

#### Effect::ZoneAfflict

A condition zone: the Zone's SNARING sibling — a CONCENTRATION area fixed to a board point that AFFLICTS rather than damages. A creature starting its turn within `radius_ft` makes an `ability` save; on a FAILURE it gains `condition` (a `conditions/` id) for that turn — web's restrained, sleet storm's prone, stinking cloud's incapacitated. Established via a Target self-cast; BENEFICIAL for side-legality (emergent per-turn, like the Zone), the placement AI-chosen. The condition RE-EVALUATES each turn the creature lingers (a made save frees it). LEDGERED: the escape/break-free check, the difficult-terrain rider, the enters-the-area trigger (start-turn-in only), and the upcast.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `ability` | `Ability` | required |  |
| `condition` | `string` | required |  |
| `dispersed_by_strong_wind` | `boolean` | default `false` |  |
| `radius_ft` | `uint32` | required |  |

<a id="effect--temp-hp"></a>

#### Effect::TempHp

A temporary hit-point grant: the target gains `dice` + `plus` temporary hit points — false life's ward. BENEFICIAL, instantaneous (NOT concentration): temp HP sits on the combatant and is spent before real HP (the dark-one's-blessing pool), taking the HIGHER of any existing pool and the fresh grant (SRD "decide whether to keep"). The authored expiry applies only when `expires_with_effect` is true.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `dice` | `string` | required |  |
| `expires_with_effect` | `boolean` | default `true` | Whether this grant expires with the effect's authored duration. |
| `plus` | `int64` | required |  |

<a id="effect--resist"></a>

#### Effect::Resist

A resistance grant: the delivered target gains resistance to `kind` damage — protection from energy's ward, halving that one kind — for the authored duration. A concentration grant is source-owned and lifts when focus breaks; non-concentration item magic expires on its own clock. LEDGERED: the player's choice among the five energy kinds (ship one — fire) and the SRD 1-hour cap outside a combat bubble.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `kind` | `string` | required |  |

<a id="effect--save-advantage"></a>

#### Effect::SaveAdvantage

Source-owned advantage on the listed saving throw abilities for the spell's duration.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `abilities` | `Ability[]` | required |  |

<a id="feature-action"></a>

### FeatureAction

One data-authored class-feature activation.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `delivery` | `Delivery` | optional | Optional spell-shaped target, area, and saving-throw gate. When present, the action's effects resolve through the ordinary cast substrate. |
| `economy` | `FeatureActionEconomy` | required | Which shared turn resource the action spends. |
| `effects` | `Effect[]` | required | Ordered consequences from the shared `Effect` vocabulary. Without `delivery`, validation accepts only effects with a feature-action reader. |
| `ledger` | `FeatureActionLedger` | required | Which existing use ledger authorizes and records the activation. This field carries no count: per-rest capacity remains `FeatureGrant.uses`. |
| `range` | `SpellRange` | optional | Range used when `delivery` sends the effects through the shared cast path. Absent means this is a self-interpreted feature action. |
| `save_dc` | `FeatureActionSaveDc` | optional | Saving-throw DC provenance for a delivered action. Required when its delivery asks for a save; absent for deliveries without one. |

<a id="feature-action-economy"></a>

### FeatureActionEconomy

The turn resource paid when a feature action is used.

<a id="feature-action-economy--action"></a>

#### FeatureActionEconomy::Action

Spend the actor's Action.

<a id="feature-action-economy--bonus"></a>

#### FeatureActionEconomy::Bonus

Spend the actor's Bonus Action.

<a id="feature-action-economy--reaction"></a>

#### FeatureActionEconomy::Reaction

Spend the actor's Reaction.

<a id="feature-action-economy--free"></a>

#### FeatureActionEconomy::Free

Spend no turn resource.

<a id="feature-action-ledger"></a>

### FeatureActionLedger

The already-existing store from which a feature action draws uses.

<a id="feature-action-ledger--per-rest"></a>

#### FeatureActionLedger::PerRest

The grant's existing `uses` count, written to `FEATURES_SPENT` and restored by the feature's ordinary rest cadence.

<a id="feature-action-ledger--per-turn"></a>

#### FeatureActionLedger::PerTurn

One activation in the current turn, represented by a combat `FeatureClock` rather than a second world counter.

<a id="feature-action-ledger--pool"></a>

#### FeatureActionLedger::Pool

Spend points from the authored pool id.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `string` | required | The data-authored pool id shared by every action that spends it. |

<a id="feature-action-ledger--uses"></a>

#### FeatureActionLedger::Uses

Spend one use from the authored use-counter id.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `string` | required | The data-authored counter id shared by every action that spends it. |

<a id="feature-action-ledger--per-rest-or-spell-slot"></a>

#### FeatureActionLedger::PerRestOrSpellSlot

A feature use with the existing spell-slot fallback printed by the SRD.

<a id="feature-action-ledger--per-rest-or-pool"></a>

#### FeatureActionLedger::PerRestOrPool

A feature use with a fallback spend from an authored pool id.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `string` | required | The data-authored pool used after the feature's own uses are spent. |

<a id="feature-action-ledger--recharge"></a>

#### FeatureActionLedger::Recharge

One in-combat use which returns when a d6 roll is at least `die_low`.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `die_low` | `uint8` | required | Inclusive low face of the recharge range, from 1 through 6. |

<a id="feature-action-save-dc"></a>

### FeatureActionSaveDc

How a delivered feature action derives the saving-throw DC used by the shared cast path.

<a id="feature-action-save-dc--fixed"></a>

#### FeatureActionSaveDc::Fixed

Use this exact authored DC, as printed on a creature stat block.

Carries `int64`.

<a id="feature-action-save-dc--caster-spell"></a>

#### FeatureActionSaveDc::CasterSpell

Use the spell save DC of the caster who generated this summoned body. This is valid only on an action carried by a scalable summon.

<a id="feature-action-save-dc--ability"></a>

#### FeatureActionSaveDc::Ability

Use 8 + the bearer's proficiency bonus + this ability modifier.

Carries `Ability`.

<a id="feature-fact"></a>

### FeatureFact

One typed fact projected from a reached class-feature grant. `Fact` is boolean presence. `Dice` selects the last `(class level, "NdM")` step at or below the bearer’s level. `Count` is a nonzero integer in the units documented by its key, optionally replaced by its last reached level step. `Level` exposes the granting class level. An absent row means the packet receives no such fact. Level tables must be nonempty, strictly increasing, within levels 1–20, and contain legal dice.

<a id="feature-fact--fact"></a>

#### FeatureFact::Fact

Boolean presence of `key`.

Carries `FeatureFactKey`.

<a id="feature-fact--dice"></a>

#### FeatureFact::Dice

A dice expression selected from a class-level progression table.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `by_level` | `[uint32, string][]` | required | Strictly increasing `(class level, "NdM")` steps. |
| `key` | `FeatureFactKey` | required | The packet fact receiving the selected dice. |

<a id="feature-fact--count"></a>

#### FeatureFact::Count

A nonzero authored count in the units documented by `key`.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `by_level` | `[uint32, uint32][]` | default `[]` | Optional strictly increasing `(class level, count)` replacements. |
| `count` | `uint32` | required | The nonzero count written to the packet. |
| `key` | `FeatureFactKey` | required | The packet fact receiving the count. |

<a id="feature-fact--weapon-filter"></a>

#### FeatureFact::WeaponFilter

A disjunction of weapon predicates; a weapon qualifies when any member matches.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `any` | `WeaponPredicate[]` | required | Nonempty alternatives evaluated in authored order. |
| `key` | `FeatureFactKey` | required | The packet fact receiving the authored predicates. |

<a id="feature-fact--level"></a>

#### FeatureFact::Level

The reached grant's owning class level.

Carries `FeatureFactKey`.

<a id="feature-fact--skill-proficiencies"></a>

#### FeatureFact::SkillProficiencies

Grants the listed skill proficiencies once the feature is reached.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `skills` | `Skill[]` | required | Nonempty skills granted to the composed soul. |

<a id="feature-fact--save-advantage"></a>

#### FeatureFact::SaveAdvantage

Grants saving-throw advantage in the listed scopes once the feature is reached.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `scopes` | `SaveAdvantageScope[]` | required | Nonempty scopes eligible for the advantage. |

<a id="feature-fact-key"></a>

### FeatureFactKey

A closed class-feature fact key consumed by the combat entry projection. Each key names one typed packet fact; feature ids remain open data ids and combat never branches on those strings.

<a id="feature-fact-key--prepared-slot-recovery"></a>

#### FeatureFactKey::PreparedSlotRecovery

Makes prepared-slot recovery available while its grant has a use remaining.

<a id="feature-fact-key--seen-effect-save-advantage"></a>

#### FeatureFactKey::SeenEffectSaveAdvantage

Grants advantage on eligible Dexterity saves.

<a id="feature-fact-key--skill-proficiencies"></a>

#### FeatureFactKey::SkillProficiencies

Grants the listed skill proficiencies once the feature is reached.

<a id="feature-fact-key--reroll-natural-ones"></a>

#### FeatureFactKey::RerollNaturalOnes

Rerolls a natural one on an attack roll, check, or saving throw.

<a id="feature-fact-key--save-advantage"></a>

#### FeatureFactKey::SaveAdvantage

Grants advantage on saving throws in the authored scopes.

<a id="feature-fact-key--temp-hp-on-enemy-fall"></a>

#### FeatureFactKey::TempHpOnEnemyFall

Enables temporary hit points when an enemy falls.

<a id="feature-fact-key--pact-slot-recovery"></a>

#### FeatureFactKey::PactSlotRecovery

Enables complete pact-slot recovery.

<a id="feature-fact-key--opportunity-disadvantage"></a>

#### FeatureFactKey::OpportunityDisadvantage

Makes opportunity attacks against the bearer disadvantaged.

<a id="feature-fact-key--half-on-fail-is-none"></a>

#### FeatureFactKey::HalfOnFailIsNone

Turns a successful save's half damage into no damage.

<a id="feature-fact-key--school-copy-cost-reduction"></a>

#### FeatureFactKey::SchoolCopyCostReduction

Reduces the time and price of copying eligible school spells.

<a id="feature-fact-key--unseen-sense-radius"></a>

#### FeatureFactKey::UnseenSenseRadius

Carries an invisible-creature sensing radius in feet.

<a id="feature-fact-key--expanded-spell-list"></a>

#### FeatureFactKey::ExpandedSpellList

Enables an expanded patron spell list.

<a id="feature-fact-key--chosen-damage-resistance"></a>

#### FeatureFactKey::ChosenDamageResistance

Enables a chosen damage resistance.

<a id="feature-fact-key--at-will-false-life"></a>

#### FeatureFactKey::AtWillFalseLife

Enables an at-will false-life casting.

<a id="feature-fact-key--adjacent-extra-attack"></a>

#### FeatureFactKey::AdjacentExtraAttack

Enables one adjacent-target attack after the bearer attacks.

<a id="feature-fact-key--reveal-marked-target-defenses"></a>

#### FeatureFactKey::RevealMarkedTargetDefenses

Reveals an affected target's defenses after a mark lands.

<a id="feature-fact-key--planar-banish-damage"></a>

#### FeatureFactKey::PlanarBanishDamage

Makes planar banishment damage available while its grant has a use remaining.

<a id="feature-fact-key--strength-check-floor"></a>

#### FeatureFactKey::StrengthCheckFloor

Floors eligible Strength checks at the bearer's Strength score.

<a id="feature-fact-key--partial-slot-recovery"></a>

#### FeatureFactKey::PartialSlotRecovery

Makes partial pact-slot recovery available while its grant has a use remaining.

<a id="feature-fact-key--repeated-attacker-ac"></a>

#### FeatureFactKey::RepeatedAttackerAc

Enables the defensive bonus after one creature hits repeatedly.

<a id="feature-fact-key--bound-weapon-capability"></a>

#### FeatureFactKey::BoundWeaponCapability

Entitles the bearer to bound-weapon rules.

<a id="feature-fact-key--condition-persistence"></a>

#### FeatureFactKey::ConditionPersistence

Prevents an authored condition from ending for lack of attack or damage.

<a id="feature-fact-key--marked-target-advantage"></a>

#### FeatureFactKey::MarkedTargetAdvantage

Grants attack advantage against the current marked target.

<a id="feature-fact-key--mark-persists"></a>

#### FeatureFactKey::MarkPersists

Preserves concentration on a mark when damage is taken.

<a id="feature-fact-key--proficient-check-floor"></a>

#### FeatureFactKey::ProficientCheckFloor

Sets a minimum natural roll for proficient checks.

<a id="feature-fact-key--cantrip-hit-push"></a>

#### FeatureFactKey::CantripHitPush

Enables a forced-movement rider on an eligible cantrip hit.

<a id="feature-fact-key--spellbook-ritual-casting"></a>

#### FeatureFactKey::SpellbookRitualCasting

Enables ritual casting from the wizard spellbook.

<a id="feature-fact-key--movement-boost"></a>

#### FeatureFactKey::MovementBoost

Enables authored movement modes and a speed bonus.

<a id="feature-fact-key--knowledge-expertise"></a>

#### FeatureFactKey::KnowledgeExpertise

Enables expertise in an authored knowledge skill.

<a id="feature-fact-key--hit-half-cover-aura"></a>

#### FeatureFactKey::HitHalfCoverAura

Enables a half-cover aura created by an eligible hit.

<a id="feature-fact-key--defensive-rider-choice"></a>

#### FeatureFactKey::DefensiveRiderChoice

Carries hit-rider damage dice by granting class level. Enables a choice among authored defensive riders.

<a id="feature-fact-key--damage-rider-choice"></a>

#### FeatureFactKey::DamageRiderChoice

Enables a choice among authored damage riders.

<a id="feature-fact-key--halve-damage-reaction"></a>

#### FeatureFactKey::HalveDamageReaction

Enables the reaction that halves one incoming attack's damage.

<a id="feature-fact-key--wounded-target-damage-die"></a>

#### FeatureFactKey::WoundedTargetDamageDie

Enables a once-per-turn damage die against a wounded target.

<a id="feature-fact-key--attacks-per-action"></a>

#### FeatureFactKey::AttacksPerAction

Carries the total number of attacks made by one Attack action.

<a id="feature-fact-key--opening-initiative-edge"></a>

#### FeatureFactKey::OpeningInitiativeEdge

Grants initiative advantage and movement when an authored condition starts.

<a id="feature-fact-key--offhand-ability-damage"></a>

#### FeatureFactKey::OffhandAbilityDamage

Adds the ability modifier to off-hand weapon damage.

<a id="feature-fact-key--condition-strength-skills"></a>

#### FeatureFactKey::ConditionStrengthSkills

Enables Strength-based authored skill checks while a condition holds.

<a id="feature-fact-key--stand-at-one-hp-uses"></a>

#### FeatureFactKey::StandAtOneHpUses

Enables a Constitution save to remain at one hit point and tracks its uses.

<a id="feature-fact-key--alternate-weapon-masteries"></a>

#### FeatureFactKey::AlternateWeaponMasteries

Lets each attack choose among the bearer's mastered weapon properties.

<a id="feature-fact-key--constitution-unarmored-ac"></a>

#### FeatureFactKey::ConstitutionUnarmoredAc

Enables Constitution in the unarmored barbarian AC calculation.

<a id="feature-fact-key--unarmed-damage-die"></a>

#### FeatureFactKey::UnarmedDamageDie

Carries an unarmed damage die by granting class level.

<a id="feature-fact-key--unarmed-weapon-filter"></a>

#### FeatureFactKey::UnarmedWeaponFilter

Carries the weapon predicates eligible to use an authored unarmed damage die.

<a id="feature-fact-key--grappled-target-advantage"></a>

#### FeatureFactKey::GrappledTargetAdvantage

Grants Advantage against a target currently grappled by the bearer.

<a id="feature-fact-key--charge-retention"></a>

#### FeatureFactKey::ChargeRetention

Gives an item charge a chance to remain unspent after use.

<a id="feature-fact-key--steed-companion-summon"></a>

#### FeatureFactKey::SteedCompanionSummon

Entitles the bearer to assume authored creature forms. Entitles the bearer to summon an authored steed companion profile.

<a id="feature-fact-key--short-rest-exhaustion-recovery"></a>

#### FeatureFactKey::ShortRestExhaustionRecovery

Removes one exhaustion level whenever the bearer finishes a short rest.

<a id="feature-fact-key--wisdom-unarmored-ac"></a>

#### FeatureFactKey::WisdomUnarmoredAc

Adds Wisdom to Armor Class while the bearer is unarmored and unshielded.

<a id="feature-fact-key--dexterity-natural-armor"></a>

#### FeatureFactKey::DexterityNaturalArmor

Sets an unarmored natural-armor base and adds Dexterity to Armor Class.

<a id="feature-fact-key--untrained-check-half-proficiency"></a>

#### FeatureFactKey::UntrainedCheckHalfProficiency

Adds half proficiency to an eligible check that otherwise lacks it.

<a id="feature-fact-key--class-level-hit-points"></a>

#### FeatureFactKey::ClassLevelHitPoints

Adds one hit point per granting class level to the derived maximum.

<a id="feature-grant"></a>

### FeatureGrant

One self-defining feature grant: its open id, sheet name, and every mechanic or explicit flavor-only declaration owned by its class, subclass, or race row.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `action` | `FeatureAction` | optional | An activated combat feature declared by this grant. The shared combat step pays the action economy; `ledger` names the existing use store. `effects` uses the same composable vocabulary as spells. `None` means this grant contributes no combat action. |
| `advisory` | `string` | optional | Optional player-facing guidance shown when this choice is selected. Absent means the option needs no additional advisory. |
| `choice` | `string` | optional | If set, this grant is one OPTION in a named choice group rather than an automatic class feature. Grants sharing a `choice` id are offered together when that group's lowest option level is reached. Absent = automatic at `level`. A mod adds another option by adding another grant with the same `choice` id. |
| `facts` | `FeatureFact[]` | optional | Typed combat facts this grant contributes once its class level is reached. Absent means the grant contributes no entry-packet fact. |
| `flavor` | `boolean` | default `false` | True when this named grant is intentionally sheet-only flavor. |
| `id` | `string` | required | Open authored id, unique within its owning class. |
| `level` | `uint32` | required | The class level, or character level for a race row, at which the feature is granted. |
| `levelup` | `LevelUpEffect` | optional | Optional generic character-growth operation supplied by this grant. |
| `modifiers` | `Modifier[]` | optional | The passive mechanics this grant carries. |
| `name` | `string` | required | Required sheet name owned by this open-id grant. |
| `passive` | `Effect[]` | default `[]` | Persistent effects contributed while this grant is reached. Only effects with a passive reader are accepted by validation. |
| `recharge` | `FeatureRecharge[]` | optional | Generic resource refresh rules owned by this grant. |
| `trigger` | `FeatureTrigger` | optional | A combat reaction, rider, aura, or boundary grant declared by this feature. `None` means crossing combat boundaries has no consequence from this grant. |
| `uses` | `integer` | optional | Base uses per rest from this level. A level-up resource row may instead derive or ladder the capacity. Absent means the grant has no own count. |

<a id="feature-level-value"></a>

### FeatureLevelValue

One strictly increasing class-level step in an authored feature value.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `level` | `uint32` | required | First class level at which `value` applies. |
| `value` | `int64` | required | Value from this level until the next step. |

<a id="feature-recharge"></a>

### FeatureRecharge

One generic recharge rule carried by a class-feature grant.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `amount` | `FeatureRechargeAmount` | required | Whether the boundary restores all uses or a positive fixed count. |
| `cadence` | `FeatureRechargeCadence` | required | The boundary that performs this refresh. |
| `countdown` | `RestCountdown` | optional | Optional multi-rest cooldown sampled when this recovery rule fires. |
| `ledger` | `FeatureRechargeLedger` | required | The existing resource ledger refreshed at the boundary. |

<a id="feature-recharge-amount"></a>

### FeatureRechargeAmount

How much of a feature-owned ledger one recharge boundary restores.

<a id="feature-recharge-amount--all"></a>

#### FeatureRechargeAmount::All

Restore the ledger completely.

<a id="feature-recharge-amount--count"></a>

#### FeatureRechargeAmount::Count

Restore at most `count` spent uses.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `count` | `uint32` | required | The positive number of uses restored at this boundary. |

<a id="feature-recharge-amount--class-level-divisor"></a>

#### FeatureRechargeAmount::ClassLevelDivisor

Restore one unit per `divisor` granting-class levels, rounded down.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `divisor` | `uint32` | required | Positive class-level divisor used to derive the restored amount. |

<a id="feature-recharge-cadence"></a>

### FeatureRechargeCadence

When a feature-owned ledger refreshes.

<a id="feature-recharge-cadence--short-rest"></a>

#### FeatureRechargeCadence::ShortRest

Refresh when a short rest completes; a long rest also refreshes it.

<a id="feature-recharge-cadence--long-rest"></a>

#### FeatureRechargeCadence::LongRest

Refresh only when a long rest completes.

<a id="feature-recharge-cadence--dawn"></a>

#### FeatureRechargeCadence::Dawn

Refresh at the world's dawn boundary.

<a id="feature-recharge-ledger"></a>

### FeatureRechargeLedger

The existing resource store refreshed by a feature row.

<a id="feature-recharge-ledger--grant-uses"></a>

#### FeatureRechargeLedger::GrantUses

The grant's own id in the per-rest feature-use ledger.

<a id="feature-recharge-ledger--pool"></a>

#### FeatureRechargeLedger::Pool

A data-authored point pool shared by compatible feature actions.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `string` | required | The nonempty id of the pool to refresh. |

<a id="feature-recharge-ledger--uses"></a>

#### FeatureRechargeLedger::Uses

A data-authored use counter shared by compatible feature actions.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `string` | required | The nonempty id of the use counter to refresh. |

<a id="feature-resource-ledger"></a>

### FeatureResourceLedger

A resource ledger address used by generic exchanges and minimum restores.

<a id="feature-resource-ledger--pool"></a>

#### FeatureResourceLedger::Pool

A data-authored point pool.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `string` | required |  |

<a id="feature-resource-ledger--uses"></a>

#### FeatureResourceLedger::Uses

A data-authored use counter.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `string` | required |  |

<a id="feature-resource-ledger--spell-slots"></a>

#### FeatureResourceLedger::SpellSlots

The ordinary level-indexed spell-slot ledger.

<a id="feature-trigger"></a>

### FeatureTrigger

One data-authored class-feature trigger.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `at` | `FeatureTriggerBoundary` | required | The one typed combat boundary which raises this row. |
| `economy` | `FeatureActionEconomy` | optional | Optional turn resource paid when the trigger is accepted. At TurnStart, Some(Free) offers an activation or decline before ordinary turn effects. |
| `effects` | `Effect[]` | required | Ordered consequences from the shared `Effect` vocabulary. Validation accepts only effects with a feature-trigger reader. |
| `ledger` | `FeatureActionLedger` | optional | Optional existing ledger charged by the trigger. A paid TurnStart activation names Pool; its effects carry the cost in that pool. |
| `when` | `FeatureTriggerCondition[]` | default `[]` | Every condition must hold. Empty means the boundary alone is enough. |

<a id="feature-trigger-boundary"></a>

### FeatureTriggerBoundary

The combat boundary at which a feature trigger is considered.

<a id="feature-trigger-boundary--initiative"></a>

#### FeatureTriggerBoundary::Initiative

Initiative is being rolled for one combatant.

<a id="feature-trigger-boundary--after-initiative"></a>

#### FeatureTriggerBoundary::AfterInitiative

Immediately after every combatant's Initiative has been established.

<a id="feature-trigger-boundary--turn-start"></a>

#### FeatureTriggerBoundary::TurnStart

The start of the feature bearer's turn.

<a id="feature-trigger-boundary--failed-save"></a>

#### FeatureTriggerBoundary::FailedSave

A saving throw has failed.

<a id="feature-trigger-boundary--roll"></a>

#### FeatureTriggerBoundary::Roll

A d20 roll has resolved.

<a id="feature-trigger-boundary--hit"></a>

#### FeatureTriggerBoundary::Hit

An attack has landed.

<a id="feature-trigger-boundary--weapon-damage-roll"></a>

#### FeatureTriggerBoundary::WeaponDamageRoll

The base weapon-damage dice of a landed hit, before riders are added.

<a id="feature-trigger-boundary--rage-start"></a>

#### FeatureTriggerBoundary::RageStart

The feature bearer has begun a Rage.

<a id="feature-trigger-boundary--cast"></a>

#### FeatureTriggerBoundary::Cast

A spell has been cast.

<a id="feature-trigger-boundary--heal"></a>

#### FeatureTriggerBoundary::Heal

Hit points have been restored.

<a id="feature-trigger-boundary--condition"></a>

#### FeatureTriggerBoundary::Condition

A condition has been applied or evaluated.

<a id="feature-trigger-boundary--turn-end"></a>

#### FeatureTriggerBoundary::TurnEnd

The end of the feature bearer's turn.

<a id="feature-trigger-condition"></a>

### FeatureTriggerCondition

A closed predicate evaluated from the packet raised at a trigger boundary.

<a id="feature-trigger-condition--self-actor"></a>

#### FeatureTriggerCondition::SelfActor

The creature acting at the boundary is this feature's bearer.

<a id="feature-trigger-condition--ally-within"></a>

#### FeatureTriggerCondition::AllyWithin

An ally of the bearer, or the bearer, stands within `radius_ft` feet of the bearer when the boundary is raised.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `radius_ft` | `uint32` | required |  |

<a id="feature-trigger-condition--failed-save"></a>

#### FeatureTriggerCondition::FailedSave

The saving throw rolled at the boundary failed.

<a id="feature-trigger-condition--hit-landed"></a>

#### FeatureTriggerCondition::HitLanded

The attack resolved at the boundary hit its target.

<a id="feature-trigger-condition--cast-of-school"></a>

#### FeatureTriggerCondition::CastOfSchool

The spell cast at the boundary belongs to the named school (for example `"evocation"`).

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `school` | `string` | required |  |

<a id="feature-trigger-condition--heal"></a>

#### FeatureTriggerCondition::Heal

The boundary applies healing.

<a id="feature-trigger-condition--rage-started"></a>

#### FeatureTriggerCondition::RageStarted

The boundary is the bearer's rage beginning.

<a id="feature-trigger-condition--target-has-not-taken-turn"></a>

#### FeatureTriggerCondition::TargetHasNotTakenTurn

The creature the boundary targets hasn't taken a turn yet in the current combat: its first turn in the fight has not begun.

<a id="feature-value"></a>

### FeatureValue

A numeric input a feature effect derives from the granting creature.

<a id="feature-value--flat"></a>

#### FeatureValue::Flat

The authored constant.

Carries `int64`.

<a id="feature-value--class-level"></a>

#### FeatureValue::ClassLevel

The level of the class whose reached grant supplied the action.

<a id="feature-value--ability-modifier"></a>

#### FeatureValue::AbilityModifier

The actor's modifier for the named ability.

Carries `Ability`.

<a id="feature-value--proficiency-bonus"></a>

#### FeatureValue::ProficiencyBonus

The actor's proficiency bonus.

<a id="feature-value--ability-modifier-plus-proficiency"></a>

#### FeatureValue::AbilityModifierPlusProficiency

The actor's modifier for the named ability plus its proficiency bonus.

Carries `Ability`.

<a id="forced-turn-rule"></a>

### ForcedTurnRule

Authorable `ForcedTurnRule` data exposed through the modding schema.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `action` | `AuthoredForcedAction` | required | Authored action. |
| `if_able` | `boolean` | default `true` | Authored if able. |

<a id="form-capability-policy"></a>

### FormCapabilityPolicy

Which ordinary capabilities the replacement body carries.

<a id="form-capability-policy--retain-mental-and-class-use-form-physical"></a>

#### FormCapabilityPolicy::RetainMentalAndClassUseFormPhysical

Retain mental and class capabilities while using form physical traits.

<a id="form-capability-policy--form-only"></a>

#### FormCapabilityPolicy::FormOnly

Use only the replacement form's capabilities.

<a id="form-ends"></a>

### FormEnds

Explicit form-ending predicates interpreted by the shared lifecycle.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `dead` | `boolean` | default `false` | Death ends the form. |
| `elapsed` | `boolean` | default `false` | The authored duration ending restores the original body. |
| `incapacitated` | `boolean` | default `false` | Incapacitation ends the form. |
| `voluntary` | `boolean` | default `false` | The bearer may end the form voluntarily. |

<a id="form-equipment-disposition"></a>

### FormEquipmentDisposition

One authored disposition available for worn or carried equipment.

<a id="form-equipment-disposition--wear-if-fits"></a>

#### FormEquipmentDisposition::WearIfFits

Retain equipment the new body can wear.

<a id="form-equipment-disposition--drop"></a>

#### FormEquipmentDisposition::Drop

Drop equipment in the bearer's current space.

<a id="form-equipment-disposition--merge"></a>

#### FormEquipmentDisposition::Merge

Merge equipment into the form and suppress its use until reversion.

<a id="form-equipment-policy"></a>

### FormEquipmentPolicy

Equipment handling for a replacement form.

<a id="form-equipment-policy--choose"></a>

#### FormEquipmentPolicy::Choose

Offer exactly the listed distinct dispositions.

Carries `FormEquipmentDisposition[]`.

<a id="form-equipment-policy--fixed"></a>

#### FormEquipmentPolicy::Fixed

Apply one disposition without a pending choice.

Carries `FormEquipmentDisposition`.

<a id="form-payload"></a>

### FormPayload

Authorable `FormPayload` data exposed through the modding schema.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `creature_id` | `string` | optional | Optional bestiary record supplying replacement physical statistics. |
| `duration_secs` | `LevelLadder` | optional | Duration in seconds, stepped by the granting class level. |
| `ends` | `FormEnds` | optional | Events that end this replacement through the ordinary form lifecycle. |
| `form_id` | `string` | required | Stable mechanics identity within the loaded corpus. |
| `policy` | `FormPolicy` | optional | Stat, proficiency, equipment, and capability arbitration for the form. |
| `replace_hit_points` | `boolean` | default `false` | True when the form owns a separate HP pool; false retains current HP. |
| `selection` | `FormSelection` | optional | Optional open-catalogue selection resolved before the cast transition. |
| `size` | `Size` | optional | Optional explicit size override, including size-only effects. |

<a id="form-policy"></a>

### FormPolicy

Shared replacement arbitration consumed by live play and search.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `capabilities` | `FormCapabilityPolicy` | required | Capability arbitration between bearer and replacement body. |
| `equipment` | `FormEquipmentPolicy` | required | Equipment disposition while the form is active. |
| `proficiencies` | `FormProficiencyPolicy` | required | Skill and saving-throw proficiency arbitration. |
| `retain_abilities` | `Ability[]` | required | Ability scores retained from the original body. |

<a id="form-proficiency-policy"></a>

### FormProficiencyPolicy

Arbitration used when both the bearer and form supply a proficiency.

<a id="form-proficiency-policy--higher-of-original-or-form"></a>

#### FormProficiencyPolicy::HigherOfOriginalOrForm

Use the greater of the original and form bonuses.

<a id="form-proficiency-policy--form"></a>

#### FormProficiencyPolicy::Form

Use only the form's authored bonus.

<a id="form-selection"></a>

### FormSelection

One open creature catalogue filtered entirely by authored parameters.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `creature_types` | `string[]` | required | Nonempty set of allowed open creature-type ids. |
| `known` | `KnownFormSelection` | optional | Optional durable known-form catalogue and its capacity. |
| `maximum_cr_quarters` | `LevelLadder` | required | Maximum challenge rating in quarter-CR units by granting class level. |
| `movement_minimum_levels` | `[MovementMode, uint32][]` | default `[]` | Minimum granting class level for each restricted movement mode. |

<a id="known-form-selection"></a>

### KnownFormSelection

Durable form knowledge owned by the grant and filled deterministically.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `count` | `LevelLadder` | required | Maximum number of retained known forms by granting class level. |
| `group` | `string` | required | Open storage group id; unrelated grants may keep separate catalogues. |
| `starters` | `string[]` | default `[]` | Ordered forms every bearer is assumed to have seen, admitted when legal. |

<a id="level-ladder"></a>

### LevelLadder

A positive value with strictly increasing granting-class-level steps.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `by_level` | `[uint32, uint32][]` | default `[]` | `(class level, value)` replacements, in ascending level order. |
| `count` | `uint32` | required | Value before the first reached step. |

<a id="level-up-effect"></a>

### LevelUpEffect

A generic character-growth operation contributed by a feature grant.

<a id="level-up-effect--ability-points"></a>

#### LevelUpEffect::AbilityPoints

Offer ability-score points under the ordinary score cap.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `count` | `uint32` | required | The positive number of points offered by this row. |

<a id="level-up-effect--fighting-style"></a>

#### LevelUpEffect::FightingStyle

Offer one selection from the authored fighting-style grant ids.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `from` | `string[]` | required | The nonempty feature ids eligible for the selection. |

<a id="level-up-effect--skill-expertise"></a>

#### LevelUpEffect::SkillExpertise

Double proficiency in eligible trained skills.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `count` | `uint32` | required | The positive number of skill proficiencies to double. |

<a id="level-up-effect--training-package"></a>

#### LevelUpEffect::TrainingPackage

Select one authored bundle of armor, weapon, cantrip, and skill training.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `options` | `TrainingPackageOption[]` | required | Nonempty packages with distinct open ids; the growth choice selects one. |

<a id="level-up-effect--language-training"></a>

#### LevelUpEffect::LanguageTraining

Add languages when this growth row is reached.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `count` | `uint32` | required | Positive number of languages selected. |
| `from` | `string[]` | default `[]` | Optional authored language ids to choose from. Empty permits any language in the loaded language table. |

<a id="level-up-effect--choice-capacity"></a>

#### LevelUpEffect::ChoiceCapacity

Define capacity for one authored choice group by class level.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `group` | `string` | required | Nonempty open id shared by the choices whose capacity this controls. |
| `ladder` | `[uint32, uint32][]` | required | Strictly increasing `(class level, capacity)` entries. |

<a id="level-up-effect--spellcasting-resource"></a>

#### LevelUpEffect::SpellcastingResource

Define a level-scaled capacity for an authored spellcasting resource.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `kind` | `string` | required | The nonempty generic resource kind, such as slots or pact slots. |
| `ladder` | `[uint32, uint32][]` | required | Strictly increasing `(class level, capacity)` entries. |

<a id="level-up-effect--spell-preparation-rule"></a>

#### LevelUpEffect::SpellPreparationRule

Define how many spells the class may prepare by class level.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `ability` | `Ability` | required | The ability used by the preparation rule. |
| `ladder` | `[uint32, uint32][]` | required | Strictly increasing `(class level, prepared count)` entries. |

<a id="level-up-effect--resource-capacity"></a>

#### LevelUpEffect::ResourceCapacity

Define a level-scaled capacity for a feature action's existing ledger.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `ladder` | `[uint32, uint32][]` | required | Strictly increasing `(class level, capacity)` entries. |
| `ledger` | `FeatureActionLedger` | required | The ledger whose capacity this row supplies. |

<a id="level-up-effect--class-level-resource"></a>

#### LevelUpEffect::ClassLevelResource

Derive an existing resource capacity from the granting class level.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `ledger` | `FeatureActionLedger` | required | The ledger whose capacity this row supplies. |
| `minimum` | `uint32` | required | The minimum capacity after the grant is reached. |
| `multiplier` | `uint32` | required | Capacity gained per granting class level. |

<a id="level-up-effect--ability-resource-capacity"></a>

#### LevelUpEffect::AbilityResourceCapacity

Derive an existing resource capacity from an ability modifier.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `ability` | `Ability` | required | The ability modifier used for the capacity. |
| `ledger` | `FeatureActionLedger` | required | The ledger whose capacity this row supplies. |
| `minimum` | `uint32` | required | The minimum capacity after the grant is reached. |

<a id="level-up-effect--resource-value"></a>

#### LevelUpEffect::ResourceValue

Derive an existing resource capacity from a generic feature value.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `ledger` | `FeatureActionLedger` | required | The ledger whose capacity this row supplies. |
| `value` | `FeatureValue` | required | The bearer-derived value, clamped to zero. |

<a id="level-up-effect--saving-throw-proficiency"></a>

#### LevelUpEffect::SavingThrowProficiency

Grant proficiency in the listed saving-throw abilities once reached.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `abilities` | `Ability[]` | required | Nonempty list of saving-throw abilities granted by this row. |

<a id="level-up-effect--prepared-spells"></a>

#### LevelUpEffect::PreparedSpells

Keep the listed spells prepared once their class-level rung is reached.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `ladder` | `[uint32, string[]][]` | required | Strictly increasing `(class level, spell ids)` entries with nonempty spell lists. |

<a id="mod-hook"></a>

### ModHook

Where a passive modifier lands — the closed hook set: one variant per NUMBER the engine already reads. A hook without a consumer stays out (ledger-don't-fake): attack/damage hooks arrive with the kit's weapon-identity read so the skirmish and the bubble apply them alike; save/check/heal hooks with theirs.

<a id="mod-hook--ac"></a>

#### ModHook::Ac

Armor class — the shared fighter build and the sheet (one derivation).

<a id="mod-hook--crit-range"></a>

#### ModHook::CritRange

The critical floor drops by `amount` (Improved Critical's 1 → 19-20).

<a id="mod-hook--crit-dice"></a>

#### ModHook::CritDice

Extra weapon damage dice on a critical hit (Savage Attacks' shape).

<a id="mod-hook--speed"></a>

#### ModHook::Speed

Foot-speed in FEET: the Barbarian's Fast Movement and the Monk's Unarmored Movement, gated by their own `ModWhen` at the bubble's move budget (the combat consumer; the travel-speed read is ledgered — sim-neutral, no worldgen soul takes these classes).

<a id="mod-hook--initiative"></a>

#### ModHook::Initiative

Initiative rolls made when combat opens.

<a id="mod-when"></a>

### ModWhen

When a modifier applies.

<a id="mod-when--always"></a>

#### ModWhen::Always

The modifier always applies (the default).

<a id="mod-when--armored"></a>

#### ModWhen::Armored

Only while wearing body armor (the Defense style's clause).

<a id="mod-when--unarmored"></a>

#### ModWhen::Unarmored

Only while wearing NO body armor: the barbarian/monk's speed bonuses, the inverse of [`ModWhen::Armored`].

<a id="mod-when--not-heavy-armor"></a>

#### ModWhen::NotHeavyArmor

Only while not wearing Heavy body armor: the 2024 Barbarian's Fast Movement clause. Medium and Light armor still receive the bonus.

<a id="modifier"></a>

### Modifier

One passive adjustment: `amount` onto `hook` while `when` holds — the data half of a feature's mechanics. Registry features may carry their mechanics here (Defense, Improved Critical do); an OPEN-id grant (a mod's own passive) must.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `amount` | `int64` | required | The signed amount added onto `hook`. |
| `hook` | `ModHook` | required | Where the adjustment lands. |
| `value` | `FeatureValue` | optional | Optional value derived from the bearer. When present, this replaces `amount`; absent preserves the authored constant. |
| `when` | `ModWhen` | optional | The clause under which it applies (default Always). |

<a id="movement-mode"></a>

### MovementMode

Authorable `MovementMode` data exposed through the modding schema.

<a id="movement-mode--walk"></a>

#### MovementMode::Walk

Select the walk behavior.

<a id="movement-mode--climb"></a>

#### MovementMode::Climb

Select the climb behavior.

<a id="movement-mode--swim"></a>

#### MovementMode::Swim

Select the swim behavior.

<a id="movement-mode--fly"></a>

#### MovementMode::Fly

Select the fly behavior.

<a id="movement-mode--burrow"></a>

#### MovementMode::Burrow

Select the burrow behavior.

<a id="movement-surface"></a>

### MovementSurface

A combat surface that ordinary walking does not otherwise permit.

<a id="movement-surface--vertical"></a>

#### MovementSurface::Vertical

A vertical wall or similar upright surface.

<a id="movement-surface--liquid"></a>

#### MovementSurface::Liquid

A liquid surface that would ordinarily require swimming.

<a id="on-save"></a>

### OnSave

What a failed save spares (SRD: "half as much damage on a successful one").

<a id="on-save--half"></a>

#### OnSave::Half

Select the half behavior.

<a id="on-save--nothing"></a>

#### OnSave::Nothing

Select the nothing behavior.

<a id="optional-effect-consequence"></a>

### OptionalEffectConsequence

A typed, optional consequence offered to the effect's source at a recurring event boundary. The choice is not a Reaction and spends no action economy.

<a id="optional-effect-consequence--speed-penalty-until-source-next-turn"></a>

#### OptionalEffectConsequence::SpeedPenaltyUntilSourceNextTurn

Reduce every movement mode by this many feet until the source's next turn starts. The reduction never lowers a mode below zero.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `amount_ft` | `uint32` | required |  |

<a id="persistent-reactivation"></a>

### PersistentReactivation

Authorable `PersistentReactivation` data exposed through the modding schema.

<a id="persistent-reactivation--action"></a>

#### PersistentReactivation::Action

Select the action behavior.

<a id="persistent-reactivation--bonus-action"></a>

#### PersistentReactivation::BonusAction

Select the bonus action behavior.

<a id="persistent-reactivation--movement"></a>

#### PersistentReactivation::Movement

Select the movement behavior.

<a id="persistent-reactivation-effect"></a>

### PersistentReactivationEffect

The typed consequence paid for by a persistent spell's later activation. Keeping this separate from the action economy prevents a spell from being transcribed as merely "reactivatable" when the reactivation does nothing.

<a id="persistent-reactivation-effect--teleport-self"></a>

#### PersistentReactivationEffect::TeleportSelf

Select the teleport self behavior.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `max_ft` | `uint32` | required |  |

<a id="persistent-reactivation-effect--repeat-damage"></a>

#### PersistentReactivationEffect::RepeatDamage

Select the repeat damage behavior.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `dice` | `string` | required |  |
| `kind` | `string` | required |  |

<a id="persistent-spell-payload"></a>

### PersistentSpellPayload

Authorable `PersistentSpellPayload` data exposed through the modding schema.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `antimagic` | `AntimagicPolicy` | required | Authored antimagic. |
| `duration_rounds` | `uint32` | required | Authored duration rounds. |
| `explicit_slot_choice` | `boolean` | default `false` | Authored explicit slot choice. |
| `reactivation` | `PersistentReactivation` | optional | Authored reactivation. |
| `reactivation_effect` | `PersistentReactivationEffect` | optional | Authored reactivation effect. |
| `reactivation_survives_miss` | `boolean` | default `false` | Install the persistent effect even when its initial spell attack misses. Omitted or false keeps installation conditional on a hit. |
| `tethered_to_target` | `boolean` | default `false` | End the spell if its target leaves the spell's range or has Total Cover from the caster. Omitted or false imposes neither ending. |

<a id="privileged-cast-mode"></a>

### PrivilegedCastMode

One legal profile for a class-granted cast.

<a id="privileged-cast-mode--base"></a>

#### PrivilegedCastMode::Base

Preserve the referenced spell's authored profile.

<a id="privileged-cast-mode--override"></a>

#### PrivilegedCastMode::Override

Apply bounded existing cast transformations and summon augmentation before the ordinary cast compiler sees the spell.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `transformations` | `CastTransformation[]` | required |  |

<a id="privileged-cast-payment"></a>

### PrivilegedCastPayment

The legal payment alternatives for one class-granted cast.

<a id="privileged-cast-payment--free-use-or-slot"></a>

#### PrivilegedCastPayment::FreeUseOrSlot

Spend the invoking grant's free use or one ordinary spell slot at or above this level. Availability is the union of the two alternatives.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `minimum_slot` | `uint32` | required |  |

<a id="privileged-cast-profile"></a>

### PrivilegedCastProfile

A bounded spell profile attached to an activated cast privilege.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `free_cast_level` | `uint32` | required | Fixed slot level used by the free alternative. |
| `modes` | `PrivilegedCastMode[]` | required | Complete legal profiles: an empty list is invalid. `Base` preserves the referenced spell; `Override` applies the listed transformations. |
| `payment` | `PrivilegedCastPayment` | required | Authored alternatives for paying the cast. |
| `summon` | `SummonAugmentation` | optional | Summon-only declaration data shared by every legal lifetime mode. |

<a id="range"></a>

### Range

Weapon-range band in feet.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `long` | `uint32` | required | Long range in feet — an attack beyond `normal` up to this is at disadvantage. |
| `normal` | `uint32` | required | Normal range in feet — no penalty within it. |

<a id="reaction-defense-payload"></a>

### ReactionDefensePayload

Content-authored pre-resolution defense or cancellation. The event window determines when it may be offered; identity never participates in dispatch.

<a id="reaction-defense-payload--timed-ac"></a>

#### ReactionDefensePayload::TimedAc

Select the timed ac behavior.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `bonus` | `int64` | required |  |
| `rounds` | `uint32` | required |  |

<a id="reaction-defense-payload--damage-reduction"></a>

#### ReactionDefensePayload::DamageReduction

Select the damage reduction behavior.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `dice` | `string` | required |  |
| `modifier` | `int64` | required |  |

<a id="reaction-defense-payload--cancel-pending-cast"></a>

#### ReactionDefensePayload::CancelPendingCast

Select the cancel pending cast behavior.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `check` | `CancellationCheck` | required |  |

<a id="reaction-defense-payload--cancel-ongoing-effect"></a>

#### ReactionDefensePayload::CancelOngoingEffect

Select the cancel ongoing effect behavior.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `check` | `CancellationCheck` | required |  |

<a id="repeat-save-gate"></a>

### RepeatSaveGate

Authorable `RepeatSaveGate` data exposed through the modding schema.

<a id="repeat-save-gate--always"></a>

#### RepeatSaveGate::Always

Select the always behavior.

<a id="repeat-save-gate--source-not-visible"></a>

#### RepeatSaveGate::SourceNotVisible

Select the source not visible behavior.

<a id="repeat-save-rule"></a>

### RepeatSaveRule

Authorable `RepeatSaveRule` data exposed through the modding schema.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `boundary` | `TurnBoundary` | required | Authored boundary. |
| `gate` | `RepeatSaveGate` | required | Authored gate. |

<a id="resource-exchange-rate"></a>

### ResourceExchangeRate

One finite conversion row in a generic resource-exchange route.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `destination_amount` | `uint32` | required | Positive destination units granted atomically. |
| `destination_tier` | `uint8` | required | Destination tier, or zero for an un-tiered pool/use ledger. |
| `minimum_class_level` | `uint32` | required | First granting-class level at which this row is legal. |
| `source_amount` | `uint32` | required | Positive source units consumed atomically. |
| `source_tier` | `uint8` | required | Source tier, or zero for an un-tiered pool/use ledger. |

<a id="resource-exchange-route"></a>

### ResourceExchangeRoute

One direction offered by a generic resource exchange.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `capacity_cap` | `boolean` | default `false` | Clamp the credit to the destination ledger's authored capacity. |
| `destination` | `FeatureResourceLedger` | required | Ledger credited by the accepted conversion. |
| `economy` | `FeatureActionEconomy` | required | Turn economy paid when this route is accepted. |
| `limit` | `FeatureActionLedger` | optional | Optional per-turn/rest/use gate paid in addition to the exchanged source. |
| `rates` | `ResourceExchangeRate[]` | required | Finite, duplicate-free conversion table. |
| `source` | `FeatureResourceLedger` | required | Ledger paid by the accepted conversion. |
| `temporary_destination` | `boolean` | default `false` | Mark created destination spell slots as temporary until a long rest. |

<a id="rest-countdown"></a>

### RestCountdown

A positive dice expression sampled when a recovered feature begins a multi-rest cooldown. The persisted counter falls once per completed rest.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `dice` | `string` | required | Positive dice expression whose total is the initial rest count. |

<a id="rider-exchange-budget"></a>

### RiderExchangeBudget

The resource surrendered atomically when accepting authored hit riders.

<a id="rider-exchange-budget--damage-dice"></a>

#### RiderExchangeBudget::DamageDice

Remove this many dice from the parent damage roll.

<a id="rider-exchange-budget--advantage"></a>

#### RiderExchangeBudget::Advantage

Forgo Advantage on the parent attack.

<a id="rider-exchange-choice"></a>

### RiderExchangeChoice

One open-id option in a generic rider exchange.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `blocks_opportunity_attacks` | `boolean` | default `false` | Prevent the target from making Opportunity Attacks until the source's next turn. |
| `cost` | `uint32` | required | Positive units removed from the exchange budget. |
| `effects` | `Effect[]` | required | Ordered consequences interpreted through the ordinary effect readers. |
| `follow_speed_fraction_denominator` | `integer` | optional | Denominator of the source's Speed it may spend to follow forced movement without provoking Opportunity Attacks. |
| `id` | `string` | required | Open authored id used by UI and recorded decisions, never dispatch. |
| `level` | `uint32` | required | First granting-class level at which this option is legal. |
| `next_other_creature_attack_bonus` | `int64` | default `0` | Flat bonus to the next attack by a creature other than the source. |
| `next_save_disadvantage` | `boolean` | default `false` | Give the target Disadvantage on its next saving throw. This one-shot persists until the save, independently of a turn-boundary rider. |
| `requires_carried_item` | `string` | optional | A goods/ id the source must carry on its person for this choice to be offered or paid; absent = no item is needed. |
| `save` | `Ability` | optional | Optional saving throw governing this choice's consequences. |
| `speed_penalty_ft` | `uint32` | default `0` | Reduce every movement mode by this many feet until the source's next turn. Zero means no reduction. |

<a id="save-advantage-scope"></a>

### SaveAdvantageScope

One context in which a feature grants saving-throw advantage.

<a id="save-advantage-scope--magic-abilities"></a>

#### SaveAdvantageScope::MagicAbilities

A magical effect using one of the listed saving-throw abilities.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `abilities` | `Ability[]` | required | Nonempty abilities eligible for the advantage. |

<a id="save-advantage-scope--poison"></a>

#### SaveAdvantageScope::Poison

A poison damage or poison-effect saving throw.

<a id="save-advantage-scope--fear"></a>

#### SaveAdvantageScope::Fear

A saving throw against becoming frightened.

<a id="save-advantage-scope--charm"></a>

#### SaveAdvantageScope::Charm

A saving throw against becoming charmed.

<a id="size"></a>

### Size

Creature size — the full SRD ladder (Tiny..Gargantuan). Races span Small/Medium; the bestiary's monsters reach the rest, and the hit die swings by it (`crate::srd::hit_die`).

<a id="size--tiny"></a>

#### Size::Tiny

Select the tiny behavior.

<a id="size--small"></a>

#### Size::Small

Select the small behavior.

<a id="size--medium"></a>

#### Size::Medium

Select the medium behavior.

<a id="size--large"></a>

#### Size::Large

Select the large behavior.

<a id="size--huge"></a>

#### Size::Huge

Select the huge behavior.

<a id="size--gargantuan"></a>

#### Size::Gargantuan

Select the gargantuan behavior.

<a id="skill"></a>

### Skill

An open, validated Skill id interned from authored data.

<a id="slot-scaled-damage"></a>

### SlotScaledDamage

Damage contributed by a hit rider whose size follows the spell-slot level spent at the hit boundary.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `base_dice` | `string` | required | Dice contributed at the first slot level. |
| `kind` | `string` | required | A `tables/damage_kinds.srd.ron` id. |
| `maximum_dice` | `integer` | optional | Optional cap on dice before creature-type or other ordinary bonuses. |
| `per_slot_die` | `string` | required | Dice added for every slot level above the first. |

<a id="source"></a>

### Source

Every file's top-level value carries `source`.

<a id="source--srd51"></a>

#### Source::Srd51

SRD 5.1 — retained nonconflicting catalogue material.

<a id="source--srd52"></a>

#### Source::Srd52

SRD 5.2.1 — the 2024-revision System Reference Document, the same CC-BY-4.0 grant as 5.1 and the current rules chassis. Its files carry the `.srd52.ron` suffix so provenance reads off the path; see `data/README.md` for which document rules a given value.

<a id="source--original"></a>

#### Source::Original

Original content authored for this game (not from the SRD).

<a id="source--phb2024"></a>

#### Source::Phb2024

Material transcribed from the 2024 Player's Handbook. This source is not redistributable by this project and belongs in a `phb2024` mod.

<a id="source--dmg2024"></a>

#### Source::Dmg2024

Material transcribed from the 2024 Dungeon Master's Guide. This source is not redistributable by this project and belongs in a `dmg2024` mod.

<a id="source--mm2024"></a>

#### Source::Mm2024

Material transcribed from the 2024 Monster Manual. This source is not redistributable by this project and belongs in an `mm2024` mod.

<a id="source--tce"></a>

#### Source::Tce

Material transcribed from Tasha's Cauldron of Everything. This source is not redistributable by this project and belongs in a `tce` mod.

<a id="source--xge"></a>

#### Source::Xge

Material transcribed from Xanathar's Guide to Everything. This source is not redistributable by this project and belongs in an `xge` mod.

<a id="spell-components"></a>

### SpellComponents

The spell's Verbal, Somatic and Material component requirements. A consumed material or one with a specified cost cannot be replaced by a Component Pouch or Spellcasting Focus.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `material` | `boolean` | default `false` | Authored material. |
| `material_consumed` | `boolean` | default `false` | Whether the spell consumes its material component. Defaults to false. |
| `material_costly` | `boolean` | default `false` | Whether the Components entry specifies a cost for the material. Records that requirement without storing a gold amount. Defaults to false. |
| `somatic` | `boolean` | default `false` | Authored somatic. |
| `verbal` | `boolean` | default `false` | Authored verbal. |

<a id="spell-range"></a>

### SpellRange

A spell's range. `Caster` is the SRD's "Self" (a Rust-reserved word).

<a id="spell-range--touch"></a>

#### SpellRange::Touch

Touch — the caster must reach the target (SRD "Touch").

<a id="spell-range--feet"></a>

#### SpellRange::Feet

A ranged spell out to this many feet.

Carries `uint32`.

<a id="spell-range--caster"></a>

#### SpellRange::Caster

Self — the spell affects only the caster (SRD "Self").

<a id="summon-augmentation"></a>

### SummonAugmentation

Reusable augmentation applied to an authored `Summon` recipe.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `choice_binding` | `SummonChoiceBinding` | optional | Optional binding from the cast choice into the joined body's action. |
| `dismiss` | `CastTime` | optional | Optional economy with which the source may dismiss the summon. |
| `linked_grants` | `SummonLinkedGrant[]` | default `[]` | Source-linked effects installed only when the generated body joins. |

<a id="summon-choice-binding"></a>

### SummonChoiceBinding

Bind an authored choice carried by the generated summon body.

<a id="summon-choice-binding--selected-damage-kind"></a>

#### SummonChoiceBinding::SelectedDamageKind

Select one kind from the joined body's authored `DamageTypeChoice`.

<a id="summon-grant-lifetime"></a>

### SummonGrantLifetime

The lifetime of a source-linked summon grant.

<a id="summon-grant-lifetime--same-summon"></a>

#### SummonGrantLifetime::SameSummon

The grant exists exactly while its joined source body exists.

<a id="summon-grant-participant"></a>

### SummonGrantParticipant

A participant in a source-linked summon grant.

<a id="summon-grant-participant--caster"></a>

#### SummonGrantParticipant::Caster

The creature that invoked the cast privilege.

<a id="summon-grant-participant--joined-body"></a>

#### SummonGrantParticipant::JoinedBody

The generated body written by the ordinary summon transition.

<a id="summon-linked-effect"></a>

### SummonLinkedEffect

An existing persistent effect installed when a generated body joins.

<a id="summon-linked-effect--selected-damage-kind-resistance"></a>

#### SummonLinkedEffect::SelectedDamageKindResistance

Resistance to the kind selected through `choice_binding`.

<a id="summon-linked-grant"></a>

### SummonLinkedGrant

One source-linked effect recipe installed by the ordinary summon join.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `effect` | `SummonLinkedEffect` | required | Existing persistent effect to instantiate. |
| `lifetime` | `SummonGrantLifetime` | required | Removal clock for the effect. |
| `recipient` | `SummonGrantParticipant` | required | Body receiving the effect. |
| `source` | `SummonGrantParticipant` | required | Body whose departure removes the effect. |

<a id="summon-scaling"></a>

### SummonScaling

Content-neutral formulas used by scalable summoned-spirit stat blocks.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `ac_base` | `int64` | required | Authored ac base. |
| `base_slot` | `uint32` | required | Authored base slot. |
| `caster_spell_attack` | `boolean` | default `false` | Authored caster spell attack. |
| `controlled` | `boolean` | default `false` | A controlled spirit shares its summoner's Initiative and requires a fresh verbal command each round; without one it can only Dodge. |
| `damage_flat_base` | `int64` | required | Authored damage flat base. |
| `damage_flat_per_slot` | `int64` | required | Flat damage added per slot to the generated body's natural attack and each delivered damage action carried by its creature row. |
| `hp_base` | `int64` | required | Authored hp base. |
| `hp_per_slot` | `int64` | required | Authored hp per slot. |
| `selected_variant` | `uint8` | default `0` | Cast-selected ordinal, zero for the first authored variant. |
| `strikes_divisor` | `uint32` | required | Authored strikes divisor. |
| `variants` | `SummonVariant[]` | default `[]` | Closed authored stat-block choices offered by the cast action. |

<a id="summon-variant"></a>

### SummonVariant

Authorable `SummonVariant` data exposed through the modding schema.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `ac_base` | `integer` | optional | Optional AC base for a variant whose printed body changes the shared `ac_base + slot` formula. |
| `creature_id` | `string` | required | Authored creature id. |
| `damage_flat_base` | `integer` | optional | Optional flat-damage base for a variant whose printed attack changes the shared `damage_flat_base + slot * damage_flat_per_slot` formula. |
| `hp_base` | `int64` | required | Authored hp base. |
| `id` | `string` | required | Authored id. |

<a id="training-package-option"></a>

### TrainingPackageOption

One selectable bundle of proficiencies and spell/skill training.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `ability_to_skills` | `array` | optional | Ability added to checks using these skills while the option is active. |
| `armor` | `ArmorCategory[]` | default `[]` | Armor categories added by this option. |
| `cantrips` | `uint32` | default `0` | Additional cantrips the option permits the bearer to select. |
| `id` | `string` | required | Open authored option id, unique inside its package row. |
| `weapons` | `WeaponTraining` | optional | Weapon categories and individual weapon ids added by this option. |

<a id="triggered-zone-outcome"></a>

### TriggeredZoneOutcome

The consequence of entering or starting a turn in a triggered area.

<a id="triggered-zone-outcome--heal"></a>

#### TriggeredZoneOutcome::Heal

Restore hit points; the upcast-adjusted dice are baked at cast time.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `dice` | `string` | required |  |

<a id="triggered-zone-outcome--save-negates-damage"></a>

#### TriggeredZoneOutcome::SaveNegatesDamage

Save-negates damage and source-owned riders. Riders are removed when the source's concentration ends.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `ability` | `Ability` | required |  |
| `dice` | `string` | required |  |
| `exhaustion` | `uint8` | default `0` |  |
| `kind` | `string` | required |  |
| `light_radius_ft` | `uint32` | default `0` |  |
| `suppress_invisibility` | `boolean` | default `false` |  |

<a id="triggered-zone-outcome--movement-damage"></a>

#### TriggeredZoneOutcome::MovementDamage

Deal `dice_per_5ft` once for every five feet voluntarily or forcibly travelled inside the area; no start-turn consequence is implied.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `dice_per_5ft` | `string` | required |  |
| `kind` | `string` | required |  |

<a id="triggered-zone-shape"></a>

### TriggeredZoneShape

Grid footprint used by a triggered spell area.

<a id="triggered-zone-shape--sphere"></a>

#### TriggeredZoneShape::Sphere

A radius measured with the board's square-grid distance.

<a id="triggered-zone-shape--cube"></a>

#### TriggeredZoneShape::Cube

A cube whose authored width is `radius_ft * 2` on this centered grid.

<a id="triggered-zone-uses"></a>

### TriggeredZoneUses

A finite zone-use ledger derived once when the spell is cast.

<a id="triggered-zone-uses--ability-modifier-plus"></a>

#### TriggeredZoneUses::AbilityModifierPlus

`plus + ability modifier`, clamped to at least `minimum` uses.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `ability` | `Ability` | required |  |
| `minimum` | `uint32` | required |  |
| `plus` | `int32` | required |  |

<a id="turn-boundary"></a>

### TurnBoundary

Authorable `TurnBoundary` data exposed through the modding schema.

<a id="turn-boundary--start"></a>

#### TurnBoundary::Start

Select the start behavior.

<a id="turn-boundary--end"></a>

#### TurnBoundary::End

Select the end behavior.

<a id="weapon-category"></a>

### WeaponCategory

The four SRD weapon categories (simple/martial × melee/ranged) — proficiency gates on this.

<a id="weapon-category--simple-melee"></a>

#### WeaponCategory::SimpleMelee

Select the simple melee behavior.

<a id="weapon-category--simple-ranged"></a>

#### WeaponCategory::SimpleRanged

Select the simple ranged behavior.

<a id="weapon-category--martial-melee"></a>

#### WeaponCategory::MartialMelee

Select the martial melee behavior.

<a id="weapon-category--martial-ranged"></a>

#### WeaponCategory::MartialRanged

Select the martial ranged behavior.

<a id="weapon-predicate"></a>

### WeaponPredicate

One generic weapon predicate in a feature fact. A weapon matches when its category is listed, every required property is present, and every forbidden property is absent.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `categories` | `WeaponCategory[]` | required | Nonempty weapon categories eligible for this alternative. |
| `forbidden_properties` | `WeaponProperty[]` | optional | Properties no eligible weapon may carry; empty means no exclusion. |
| `required_properties` | `WeaponProperty[]` | optional | Properties all eligible weapons must carry; empty means no requirement. |

<a id="weapon-property"></a>

### WeaponProperty

An SRD weapon property (finesse, heavy, thrown, …) — a tag that bends how a weapon is wielded or rolled.

<a id="weapon-property--ammunition"></a>

#### WeaponProperty::Ammunition

Fires ammunition within the given [`Range`] (bows, crossbows, slings).

Carries `Range`.

<a id="weapon-property--finesse"></a>

#### WeaponProperty::Finesse

May use Dexterity instead of Strength for attack and damage rolls.

<a id="weapon-property--heavy"></a>

#### WeaponProperty::Heavy

Small creatures attack with disadvantage (too large to wield well).

<a id="weapon-property--light"></a>

#### WeaponProperty::Light

Light enough for two-weapon fighting (the off-hand bonus attack).

<a id="weapon-property--loading"></a>

#### WeaponProperty::Loading

Only one shot per action, however many attacks the wielder has.

<a id="weapon-property--reach"></a>

#### WeaponProperty::Reach

Adds 5 ft to the wielder's reach for attacks and opportunity attacks.

<a id="weapon-property--special"></a>

#### WeaponProperty::Special

Carries special rules given in the weapon's own text (SRD "Special").

<a id="weapon-property--thrown"></a>

#### WeaponProperty::Thrown

May be thrown for a ranged attack within the given [`Range`].

Carries `Range`.

<a id="weapon-property--two-handed"></a>

#### WeaponProperty::TwoHanded

Requires two hands to wield.

<a id="weapon-property--versatile"></a>

#### WeaponProperty::Versatile

May be wielded one- or two-handed; the two-handed damage die is the given `NdM` string.

Carries `string`.

<a id="weapon-training"></a>

### WeaponTraining

Weapon training: the category flags plus any named ids (the rogue's hand-crossbow/longsword/rapier/shortsword list).

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `ids` | `string[]` | required | Extra individual weapon ids trained (the rogue's rapier/shortsword list). |
| `martial` | `boolean` | required | True = trained in all martial weapons. |
| `simple` | `boolean` | required | True = trained in all simple weapons. |


