@archivist-gg/dnd5e 0.3.17 → 0.3.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/background/background.codec.js +5 -5
- package/dist/background/background.parser.js +4 -4
- package/dist/background/background.schema.js +3 -3
- package/dist/{chunk-7QN7XSAK.js → chunk-3SFGWFVQ.js} +1 -1
- package/dist/{chunk-2UDSN6VW.js → chunk-3SIUAFDQ.js} +1 -1
- package/dist/chunk-4J6DS3EJ.js +30 -0
- package/dist/{chunk-RLGQ5PZZ.js → chunk-5JXFJ5AU.js} +11 -1
- package/dist/{chunk-TULQ4FFX.js → chunk-64VNLMSG.js} +31 -9
- package/dist/{chunk-JSM6JFZR.js → chunk-7XJHI5H5.js} +2 -2
- package/dist/{chunk-YD2VAHA6.js → chunk-B2QHP6UF.js} +2 -2
- package/dist/{chunk-AZRGFUSR.js → chunk-BJGOSM76.js} +1 -1
- package/dist/{chunk-JCMUVZIK.js → chunk-BJWSOQUC.js} +1 -1
- package/dist/{chunk-ONTGZR5T.js → chunk-EJD47JHL.js} +64 -32
- package/dist/{chunk-FANQVQ3D.js → chunk-FJYBLXV7.js} +2 -2
- package/dist/{chunk-PQZ4LM4Z.js → chunk-FMUD3LDV.js} +1 -1
- package/dist/{chunk-PKX6TGRE.js → chunk-FMYWORTP.js} +2 -2
- package/dist/{chunk-G6PBI2BU.js → chunk-FVXLP7P3.js} +1 -1
- package/dist/{chunk-MBX25B6D.js → chunk-GVWEFECG.js} +1 -1
- package/dist/{chunk-Y5VVP73C.js → chunk-HY2SRSVM.js} +1 -1
- package/dist/{chunk-2JSQE3DD.js → chunk-JXWNXIIZ.js} +13 -0
- package/dist/{chunk-VRV3NNTA.js → chunk-LICYHPI3.js} +81 -5
- package/dist/{chunk-LF5AGJA4.js → chunk-LNT64X7C.js} +1 -1
- package/dist/{chunk-6EI737IO.js → chunk-NKZMQV2C.js} +1 -1
- package/dist/{chunk-T6QIF5XR.js → chunk-NTU2DXNG.js} +9 -2
- package/dist/{chunk-3VZZDKRA.js → chunk-NXUY5XQN.js} +63 -15
- package/dist/{chunk-QZSWN2KT.js → chunk-NZO7M5GV.js} +1 -1
- package/dist/{chunk-5MXFW4O3.js → chunk-OOL4KMG2.js} +1 -1
- package/dist/{chunk-H5PTKYXL.js → chunk-QA3YCOML.js} +1 -1
- package/dist/{chunk-3MGQFFNE.js → chunk-QFWQKS3M.js} +1 -1
- package/dist/{chunk-HTYMW5CH.js → chunk-RD2MID3M.js} +67 -3
- package/dist/{chunk-PXVNAY7T.js → chunk-TRBGC4ZG.js} +29 -1
- package/dist/{chunk-UUBJCNQU.js → chunk-UJCK5IW4.js} +2 -2
- package/dist/{chunk-OFCSP6MT.js → chunk-UNYR5GLI.js} +1 -1
- package/dist/{chunk-DOXSFYLH.js → chunk-VN5DLURA.js} +2 -2
- package/dist/{chunk-7ATNGKBS.js → chunk-VP5TIXDK.js} +1 -1
- package/dist/{chunk-QH36K2PU.js → chunk-WOHX7YTH.js} +7 -0
- package/dist/{chunk-YKL6SHRJ.js → chunk-XTEFPUSN.js} +1 -1
- package/dist/{chunk-RYLXAYIQ.js → chunk-ZOWKWMD2.js} +1 -1
- package/dist/class/class.codec.js +6 -6
- package/dist/class/class.parser.js +5 -5
- package/dist/class/class.schema.js +4 -4
- package/dist/dnd/amount-text.d.ts +4 -0
- package/dist/dnd/amount-text.js +3 -1
- package/dist/entities/registry-revision.d.ts +25 -0
- package/dist/entities/registry-revision.js +10 -0
- package/dist/feat/feat.codec.js +5 -5
- package/dist/feat/feat.parser.js +4 -4
- package/dist/feat/feat.schema.d.ts +9 -0
- package/dist/feat/feat.schema.js +3 -3
- package/dist/index.js +3720 -338
- package/dist/monster/monster.parser.js +5 -5
- package/dist/monster/monster.schema.js +4 -4
- package/dist/optional-feature/optional-feature.codec.js +5 -5
- package/dist/optional-feature/optional-feature.parser.js +4 -4
- package/dist/optional-feature/optional-feature.schema.d.ts +9 -0
- package/dist/optional-feature/optional-feature.schema.js +3 -3
- package/dist/pc/pc.additional-spells.d.ts +16 -2
- package/dist/pc/pc.additional-spells.js +4 -1
- package/dist/pc/pc.amount-bindings.d.ts +11 -2
- package/dist/pc/pc.amount-bindings.js +6 -1
- package/dist/pc/pc.decision-engine.d.ts +8 -0
- package/dist/pc/pc.decision-engine.js +13 -10
- package/dist/pc/pc.entry-overrides.js +3 -2
- package/dist/pc/pc.equipment.js +5 -4
- package/dist/pc/pc.feature-effects.d.ts +9 -2
- package/dist/pc/pc.feature-effects.js +15 -2
- package/dist/pc/pc.infusions.js +3 -2
- package/dist/pc/pc.member-choices.d.ts +33 -1
- package/dist/pc/pc.member-choices.js +12 -5
- package/dist/pc/pc.parser.js +1 -1
- package/dist/pc/pc.pools.js +3 -2
- package/dist/pc/pc.proficiencies.d.ts +14 -0
- package/dist/pc/pc.proficiencies.js +68 -19
- package/dist/pc/pc.proficiency-normalize.d.ts +14 -0
- package/dist/pc/pc.proficiency-normalize.js +9 -3
- package/dist/pc/pc.proficiency-query.js +1 -1
- package/dist/pc/pc.recalc.js +151 -55
- package/dist/pc/pc.resolver.d.ts +4 -1
- package/dist/pc/pc.resolver.js +10 -9
- package/dist/pc/pc.rest.js +3 -2
- package/dist/pc/pc.schema.d.ts +19 -0
- package/dist/pc/pc.schema.js +1 -1
- package/dist/pc/pc.spell-scope.d.ts +22 -0
- package/dist/pc/pc.tool-picks.js +2 -2
- package/dist/pc/pc.types.d.ts +65 -4
- package/dist/race/race.codec.js +6 -6
- package/dist/race/race.parser.js +5 -5
- package/dist/race/race.schema.js +4 -4
- package/dist/schemas/choice-schema.js +2 -2
- package/dist/schemas/feature-effect-schema.d.ts +9 -0
- package/dist/schemas/feature-effect-schema.js +1 -1
- package/dist/schemas/feature-schema.js +3 -3
- package/dist/subclass/subclass.codec.js +6 -6
- package/dist/subclass/subclass.parser.js +5 -5
- package/dist/subclass/subclass.schema.js +4 -4
- package/dist/types/choice.d.ts +2 -2
- package/dist/types/feature-effect.d.ts +18 -0
- package/dist/types/optional-feature.types.d.ts +1 -1
- package/package.json +1 -1
package/dist/pc/pc.rest.js
CHANGED
|
@@ -5,15 +5,16 @@ import "../chunk-DPUJDOKV.js";
|
|
|
5
5
|
import {
|
|
6
6
|
effectiveItemCharges,
|
|
7
7
|
effectiveItemRecovery
|
|
8
|
-
} from "../chunk-
|
|
8
|
+
} from "../chunk-NXUY5XQN.js";
|
|
9
9
|
import "../chunk-W6GC6OKK.js";
|
|
10
10
|
import "../chunk-B3DP42OM.js";
|
|
11
11
|
import "../chunk-IUAAXXNO.js";
|
|
12
|
+
import "../chunk-ZUQW5VBZ.js";
|
|
12
13
|
import "../chunk-IHE6KVC3.js";
|
|
13
14
|
import "../chunk-LHZXYFBU.js";
|
|
14
|
-
import "../chunk-ZUQW5VBZ.js";
|
|
15
15
|
import "../chunk-LVQLWRCU.js";
|
|
16
16
|
import "../chunk-CM5CWO4K.js";
|
|
17
|
+
import "../chunk-4J6DS3EJ.js";
|
|
17
18
|
import "../chunk-EVMUJYUD.js";
|
|
18
19
|
import "../chunk-VTTA2ALZ.js";
|
|
19
20
|
import "../chunk-ZCTUYGNV.js";
|
package/dist/pc/pc.schema.d.ts
CHANGED
|
@@ -90,6 +90,14 @@ export declare const characterOverridesShape: z.ZodObject<{
|
|
|
90
90
|
proficient: "proficient";
|
|
91
91
|
}>>>;
|
|
92
92
|
}, z.core.$strip>>;
|
|
93
|
+
weapons: z.ZodOptional<z.ZodObject<{
|
|
94
|
+
add: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
95
|
+
remove: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
96
|
+
}, z.core.$strip>>;
|
|
97
|
+
armor: z.ZodOptional<z.ZodObject<{
|
|
98
|
+
add: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
99
|
+
remove: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
100
|
+
}, z.core.$strip>>;
|
|
93
101
|
defenses: z.ZodOptional<z.ZodObject<{
|
|
94
102
|
resistances: z.ZodOptional<z.ZodObject<{
|
|
95
103
|
remove: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
@@ -381,6 +389,14 @@ export declare const characterSchema: z.ZodObject<{
|
|
|
381
389
|
proficient: "proficient";
|
|
382
390
|
}>>>;
|
|
383
391
|
}, z.core.$strip>>;
|
|
392
|
+
weapons: z.ZodOptional<z.ZodObject<{
|
|
393
|
+
add: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
394
|
+
remove: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
395
|
+
}, z.core.$strip>>;
|
|
396
|
+
armor: z.ZodOptional<z.ZodObject<{
|
|
397
|
+
add: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
398
|
+
remove: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
399
|
+
}, z.core.$strip>>;
|
|
384
400
|
defenses: z.ZodOptional<z.ZodObject<{
|
|
385
401
|
resistances: z.ZodOptional<z.ZodObject<{
|
|
386
402
|
remove: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
@@ -416,6 +432,9 @@ export declare const characterSchema: z.ZodObject<{
|
|
|
416
432
|
saves: z.ZodCatch<z.ZodOptional<z.ZodEnum<{
|
|
417
433
|
section: "section";
|
|
418
434
|
}>>>;
|
|
435
|
+
body: z.ZodCatch<z.ZodOptional<z.ZodEnum<{
|
|
436
|
+
wide: "wide";
|
|
437
|
+
}>>>;
|
|
419
438
|
}, z.core.$strip>>;
|
|
420
439
|
favorites: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
421
440
|
filters: z.ZodOptional<z.ZodObject<{
|
package/dist/pc/pc.schema.js
CHANGED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A spell damage rider's `spell_scope` read against the character's spells (found 2026-09-29: Potent Spellcasting,
|
|
3
|
+
* Empowered Evocation, Elemental Affinity, Radiant Soul and the Artificer riders said which spells they reach only in
|
|
4
|
+
* prose, so they reached none). Data, not per-feature code: every word of the scope is one test on the spell entity.
|
|
5
|
+
*/
|
|
6
|
+
import type { SpellScope } from "../types/feature-effect.js";
|
|
7
|
+
import type { Spell } from "../spell/spell.types.js";
|
|
8
|
+
import type { ResolvedCharacter, ResolvedSpell } from "./pc.types.js";
|
|
9
|
+
/** Does `spell` deal damage? Its data names at least one damage type. */
|
|
10
|
+
export declare function dealsDamage(spell: Pick<Spell, "damage">): boolean;
|
|
11
|
+
/**
|
|
12
|
+
* The slugs of the character's `spells` a rider with `scope` reaches, unique, in `spells` order: every spell that DEALS
|
|
13
|
+
* DAMAGE and matches every word the scope carries (see `SpellScope`). `pickedTypes` answers `damage_type_pick` (the
|
|
14
|
+
* types the character's pick names; none reaches no spell). No scope reaches none; an empty scope every damaging spell.
|
|
15
|
+
*/
|
|
16
|
+
export declare function spellsInScope(scope: SpellScope | undefined, spells: ReadonlyArray<Pick<ResolvedSpell, "slug" | "entity">>, pickedTypes: (choiceId: string) => string[]): string[];
|
|
17
|
+
/**
|
|
18
|
+
* The damage types the character chose at the `select-inline` `choiceId` of one of its class or subclass features (the
|
|
19
|
+
* 2014 Dragon Ancestor's "Red (Fire)", the 2024 Elemental Affinity's "fire"): the canonical types its answer's option
|
|
20
|
+
* names, in its value or its label. Empty when no feature offers that choice or it is unanswered.
|
|
21
|
+
*/
|
|
22
|
+
export declare function pickedDamageTypes(resolved: Pick<ResolvedCharacter, "classes">, choiceId: string): string[];
|
package/dist/pc/pc.tool-picks.js
CHANGED
|
@@ -5,9 +5,9 @@ import {
|
|
|
5
5
|
classToolPicks,
|
|
6
6
|
expandToolPool,
|
|
7
7
|
toolCategoriesOf
|
|
8
|
-
} from "../chunk-
|
|
8
|
+
} from "../chunk-QA3YCOML.js";
|
|
9
9
|
import "../chunk-KU3YLF6D.js";
|
|
10
|
-
import "../chunk-
|
|
10
|
+
import "../chunk-5JXFJ5AU.js";
|
|
11
11
|
export {
|
|
12
12
|
TOOL_CATEGORIES,
|
|
13
13
|
backgroundToolPicks,
|
package/dist/pc/pc.types.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { Ability } from "../types/choice.js";
|
|
1
|
+
import type { Ability, EntityFilter } from "../types/choice.js";
|
|
2
2
|
import type { ArmorEntity } from "../armor/armor.types.js";
|
|
3
3
|
import type { WeaponEntity } from "../weapon/weapon.types.js";
|
|
4
|
-
import type { WeaponScope } from "../types/feature-effect.js";
|
|
4
|
+
import type { SpellScope, WeaponScope } from "../types/feature-effect.js";
|
|
5
5
|
import type { ItemEntity } from "../item/item.types.js";
|
|
6
6
|
import type { SkillSlug, Feature, Choice } from "@archivist-gg/dnd5e";
|
|
7
7
|
import type { ClassEntity } from "@archivist-gg/dnd5e/class/class.types";
|
|
@@ -125,8 +125,8 @@ export type KnownSpellEntry = string | KnownSpellObject;
|
|
|
125
125
|
export type PassiveKind = "perception" | "investigation" | "insight";
|
|
126
126
|
/** The manual proficiency tri, in ONE place. The runtime twin is `proficiencyTri`
|
|
127
127
|
* (pc.schema.ts); `pc.recalc.ts` imports this name for the skills tri, and the plugin's
|
|
128
|
-
* `CharacterEditState
|
|
129
|
-
*
|
|
128
|
+
* `CharacterEditState` imports it for the tools tri its writers keep (R4-G4 §9.3, UR1;
|
|
129
|
+
* `setToolExpertise` since D4 A), so no consumer re-spells the union. */
|
|
130
130
|
export type ProficiencyTri = "none" | "proficient" | "expertise";
|
|
131
131
|
export interface CharacterOverrides {
|
|
132
132
|
scores?: Partial<Record<Ability, number>>;
|
|
@@ -181,6 +181,18 @@ export interface CharacterOverrides {
|
|
|
181
181
|
remove?: string[];
|
|
182
182
|
proficiency?: Record<string, ProficiencyTri>;
|
|
183
183
|
};
|
|
184
|
+
/** D4 A: the same add / remove pair for WEAPON and ARMOR proficiencies. A weapon value is a category (`simple`,
|
|
185
|
+
* `martial`) or one weapon (`longsword`, `hand-crossbow`); an armor value is `light`, `medium`, `heavy` or `shield`.
|
|
186
|
+
* Read through `proficiencyKey` (pc.proficiency-normalize.ts), so any spelling of a grant matches. No defaults, like
|
|
187
|
+
* `languages`/`tools`: an untouched note stays byte-identical. */
|
|
188
|
+
weapons?: {
|
|
189
|
+
add?: string[];
|
|
190
|
+
remove?: string[];
|
|
191
|
+
};
|
|
192
|
+
armor?: {
|
|
193
|
+
add?: string[];
|
|
194
|
+
remove?: string[];
|
|
195
|
+
};
|
|
184
196
|
/** Manual defense edits, mirroring `characterOverridesShape` (pc.schema.ts). SUPPRESSION-ONLY:
|
|
185
197
|
* the absent `add` channel is a DELIBERATE asymmetry with `languages`/`tools` above, not an
|
|
186
198
|
* oversight · do not "complete the pattern". The additive store is `character.defenses.*`,
|
|
@@ -263,8 +275,10 @@ export interface SheetPoolView {
|
|
|
263
275
|
folded?: string[];
|
|
264
276
|
}
|
|
265
277
|
export interface CharacterSheetState {
|
|
278
|
+
/** `saves: section` (SL) draws the saves as a sidebar section; `body: wide` (D13) is the wide three-column sheet. */
|
|
266
279
|
layout?: {
|
|
267
280
|
saves?: "section";
|
|
281
|
+
body?: "wide";
|
|
268
282
|
};
|
|
269
283
|
favorites?: string[];
|
|
270
284
|
filters?: {
|
|
@@ -345,6 +359,11 @@ export type FeatVia = {
|
|
|
345
359
|
kind: "background";
|
|
346
360
|
slug: string;
|
|
347
361
|
}
|
|
362
|
+
/** SRD-G T4 (audit §3b): a feat picked through a species trait (the SRD 5.2 Human's Versatile origin feat). */
|
|
363
|
+
| {
|
|
364
|
+
kind: "race";
|
|
365
|
+
slug: string;
|
|
366
|
+
}
|
|
348
367
|
/** D2b-A (design §2.2 step 6): a feat a POOL MEMBER grants (Lessons of the First Ones' Origin feat). `slug` is the
|
|
349
368
|
* member's note slug and `name` its display name; `classSlug` / `level` are the pool's class and anchor level. */
|
|
350
369
|
| {
|
|
@@ -394,6 +413,10 @@ export interface ResolvedFeature {
|
|
|
394
413
|
renderSuppressed?: boolean;
|
|
395
414
|
/** The feat's entire substance is a full ability-score improvement (a pure ASI). The DISPLAY layer hides these. */
|
|
396
415
|
buildOnly?: boolean;
|
|
416
|
+
/** The spells this feature's spell-scoped damage riders reach, as its data names them (`memberSpellTargets`): set by
|
|
417
|
+
* `assembleEffectFeatures` on a pool member (Agonizing Blast's cantrip pick, the 2014 invocation's `spell-known`
|
|
418
|
+
* prerequisite). A wrapper-only field; absent on every other feature, whose spell riders then reach no spell. */
|
|
419
|
+
spellTargets?: SpellTargets;
|
|
397
420
|
/** R4-G7 §7.1: EVERY LOWER copy the resolve-time fold collapsed into this wrapper, ASCENDING by level, with
|
|
398
421
|
* that copy's own card identity (`name`, and `description` = its `description` else its `entries` joined) and
|
|
399
422
|
* its `choices` when it carries any. A wrapper-only field, the `chosenInline` precedent: the shared registry
|
|
@@ -440,6 +463,9 @@ export interface ResolvedSpell {
|
|
|
440
463
|
/** True ONLY for a row from character.spells.known (removable / toggleable);
|
|
441
464
|
* absent on every grant · R4-G3b §5.2.7. */
|
|
442
465
|
persisted?: boolean;
|
|
466
|
+
/** True for a spell cast at will without a spell slot: a pool member's `innate` at-will grant (Armor of Shadows'
|
|
467
|
+
* Mage Armor). The Spells tab gives it the At Will chip, never a slot's CAST. Absent on every other row. */
|
|
468
|
+
atWill?: boolean;
|
|
443
469
|
}
|
|
444
470
|
export interface ResolvedClass {
|
|
445
471
|
entity: ClassEntity | null;
|
|
@@ -617,6 +643,38 @@ export interface DamageRider {
|
|
|
617
643
|
* `computeFeatureEffects`; consumed and DROPPED by recalc's rider resolution (an attack row never carries it). */
|
|
618
644
|
owner?: FeatureSource;
|
|
619
645
|
}
|
|
646
|
+
/** The spells a feature's spell-scoped damage rider reaches, as the member's DATA names them (`memberSpellTargets`):
|
|
647
|
+
* `refs` are the answers of its target picks (`target: true`, Agonizing Blast's cantrip) and its `spell-known`
|
|
648
|
+
* prerequisites (the 2014 invocation's Eldritch Blast); `open` holds the filter of each target pick left unanswered,
|
|
649
|
+
* which reaches a spell only when the character has exactly one legal answer (`spellsReached`). */
|
|
650
|
+
export interface SpellTargets {
|
|
651
|
+
refs: string[];
|
|
652
|
+
open: EntityFilter[];
|
|
653
|
+
}
|
|
654
|
+
/** A `damage-bonus` effect with `applies_to: spell` (Agonizing Blast's "your Charisma modifier") or `all` (Hexblade's
|
|
655
|
+
* Curse). The fold carries the authored amount with its `owner`, `targets` and `scope`; recalc resolves the amount against
|
|
656
|
+
* the owning class, reads the targets and the scope against the character's spells into `spells` and drops `owner`,
|
|
657
|
+
* `targets` and `scope`, keeping only riders that reach a spell. `damage_type` survives only when it is a canonical type
|
|
658
|
+
* (a `chosen` or prose type is the spell's own). How the sheet prints it is `addSpellDamageRiders` (inside the roll: an
|
|
659
|
+
* unconditional rider of the spell's own type) and `spellDamageRiderLines` (its own line: a `condition`, like a
|
|
660
|
+
* conditional weapon rider, or another damage type). */
|
|
661
|
+
export interface SpellDamageRider {
|
|
662
|
+
amount: string;
|
|
663
|
+
damage_type?: string;
|
|
664
|
+
source?: string;
|
|
665
|
+
condition?: string;
|
|
666
|
+
/** The scope's `once`: the rider adds to one damage roll of the casting ("one damage roll of that spell"). */
|
|
667
|
+
once?: boolean;
|
|
668
|
+
/** The slugs of the character's resolved spells this rider reaches (recalc). */
|
|
669
|
+
spells?: string[];
|
|
670
|
+
/** Fold only: see {@link DamageRider.owner}. */
|
|
671
|
+
owner?: FeatureSource;
|
|
672
|
+
/** Fold only: the feature's {@link SpellTargets} (a pool member's named spells). */
|
|
673
|
+
targets?: SpellTargets;
|
|
674
|
+
/** Fold only: the effect's `spell_scope` ({} for an unscoped `applies_to: all`: every damaging spell). Absent (and no
|
|
675
|
+
* `targets`) reaches no spell. */
|
|
676
|
+
scope?: SpellScope;
|
|
677
|
+
}
|
|
620
678
|
export interface AttackRow {
|
|
621
679
|
id: string;
|
|
622
680
|
name: string;
|
|
@@ -928,6 +986,9 @@ export interface DerivedStats {
|
|
|
928
986
|
*/
|
|
929
987
|
attacksPerAction: number;
|
|
930
988
|
attacks: AttackRow[];
|
|
989
|
+
/** Spell-scoped damage riders that reach at least one of the character's spells, amounts resolved (Agonizing Blast's
|
|
990
|
+
* "3" on Eldritch Blast). Absent when none does. The Spells tab adds them into the spell's roll. */
|
|
991
|
+
spellDamageRiders?: SpellDamageRider[];
|
|
931
992
|
equippedSlots: EquippedSlots;
|
|
932
993
|
carriedWeight: number;
|
|
933
994
|
attunementUsed: number;
|
package/dist/race/race.codec.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
2
|
raceCodec
|
|
3
|
-
} from "../chunk-
|
|
4
|
-
import "../chunk-
|
|
5
|
-
import "../chunk-
|
|
3
|
+
} from "../chunk-BJGOSM76.js";
|
|
4
|
+
import "../chunk-HY2SRSVM.js";
|
|
5
|
+
import "../chunk-FJYBLXV7.js";
|
|
6
6
|
import "../chunk-4U55VNC7.js";
|
|
7
|
-
import "../chunk-
|
|
7
|
+
import "../chunk-B2QHP6UF.js";
|
|
8
8
|
import "../chunk-WYGD2UGN.js";
|
|
9
9
|
import "../chunk-ZJXSXVFP.js";
|
|
10
|
-
import "../chunk-
|
|
11
|
-
import "../chunk-
|
|
10
|
+
import "../chunk-OOL4KMG2.js";
|
|
11
|
+
import "../chunk-JXWNXIIZ.js";
|
|
12
12
|
import "../chunk-UA5KS2PL.js";
|
|
13
13
|
export {
|
|
14
14
|
raceCodec
|
package/dist/race/race.parser.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
parseRace
|
|
3
|
-
} from "../chunk-
|
|
4
|
-
import "../chunk-
|
|
3
|
+
} from "../chunk-HY2SRSVM.js";
|
|
4
|
+
import "../chunk-FJYBLXV7.js";
|
|
5
5
|
import "../chunk-4U55VNC7.js";
|
|
6
|
-
import "../chunk-
|
|
6
|
+
import "../chunk-B2QHP6UF.js";
|
|
7
7
|
import "../chunk-WYGD2UGN.js";
|
|
8
8
|
import "../chunk-ZJXSXVFP.js";
|
|
9
|
-
import "../chunk-
|
|
10
|
-
import "../chunk-
|
|
9
|
+
import "../chunk-OOL4KMG2.js";
|
|
10
|
+
import "../chunk-JXWNXIIZ.js";
|
|
11
11
|
import "../chunk-UA5KS2PL.js";
|
|
12
12
|
export {
|
|
13
13
|
parseRace
|
package/dist/race/race.schema.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
fixedAsiSchema,
|
|
3
3
|
raceEntitySchema
|
|
4
|
-
} from "../chunk-
|
|
5
|
-
import "../chunk-
|
|
4
|
+
} from "../chunk-FJYBLXV7.js";
|
|
5
|
+
import "../chunk-B2QHP6UF.js";
|
|
6
6
|
import "../chunk-WYGD2UGN.js";
|
|
7
7
|
import "../chunk-ZJXSXVFP.js";
|
|
8
|
-
import "../chunk-
|
|
9
|
-
import "../chunk-
|
|
8
|
+
import "../chunk-OOL4KMG2.js";
|
|
9
|
+
import "../chunk-JXWNXIIZ.js";
|
|
10
10
|
import "../chunk-UA5KS2PL.js";
|
|
11
11
|
export {
|
|
12
12
|
fixedAsiSchema,
|
|
@@ -136,6 +136,15 @@ export declare const featureEffectSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
136
136
|
finesse: "finesse";
|
|
137
137
|
thrown: "thrown";
|
|
138
138
|
}>>]>>;
|
|
139
|
+
spell_scope: z.ZodOptional<z.ZodObject<{
|
|
140
|
+
list: z.ZodOptional<z.ZodString>;
|
|
141
|
+
level: z.ZodOptional<z.ZodNumber>;
|
|
142
|
+
school: z.ZodOptional<z.ZodString>;
|
|
143
|
+
damage_types: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
144
|
+
damage_type_pick: z.ZodOptional<z.ZodString>;
|
|
145
|
+
spells: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
146
|
+
once: z.ZodOptional<z.ZodBoolean>;
|
|
147
|
+
}, z.core.$strict>>;
|
|
139
148
|
condition: z.ZodOptional<z.ZodString>;
|
|
140
149
|
subject: z.ZodOptional<z.ZodString>;
|
|
141
150
|
}, z.core.$strip>, z.ZodObject<{
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
featureObjectSchema,
|
|
3
3
|
featureSchema
|
|
4
|
-
} from "../chunk-
|
|
4
|
+
} from "../chunk-B2QHP6UF.js";
|
|
5
5
|
import "../chunk-WYGD2UGN.js";
|
|
6
6
|
import "../chunk-ZJXSXVFP.js";
|
|
7
|
-
import "../chunk-
|
|
8
|
-
import "../chunk-
|
|
7
|
+
import "../chunk-OOL4KMG2.js";
|
|
8
|
+
import "../chunk-JXWNXIIZ.js";
|
|
9
9
|
export {
|
|
10
10
|
featureObjectSchema,
|
|
11
11
|
featureSchema
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
2
|
subclassCodec
|
|
3
|
-
} from "../chunk-
|
|
4
|
-
import "../chunk-
|
|
5
|
-
import "../chunk-
|
|
3
|
+
} from "../chunk-NZO7M5GV.js";
|
|
4
|
+
import "../chunk-UNYR5GLI.js";
|
|
5
|
+
import "../chunk-LNT64X7C.js";
|
|
6
6
|
import "../chunk-4U55VNC7.js";
|
|
7
7
|
import "../chunk-G6MHJDVT.js";
|
|
8
8
|
import "../chunk-CJYCVNW2.js";
|
|
9
|
-
import "../chunk-
|
|
9
|
+
import "../chunk-B2QHP6UF.js";
|
|
10
10
|
import "../chunk-WYGD2UGN.js";
|
|
11
11
|
import "../chunk-ZJXSXVFP.js";
|
|
12
|
-
import "../chunk-
|
|
13
|
-
import "../chunk-
|
|
12
|
+
import "../chunk-OOL4KMG2.js";
|
|
13
|
+
import "../chunk-JXWNXIIZ.js";
|
|
14
14
|
import "../chunk-UA5KS2PL.js";
|
|
15
15
|
export {
|
|
16
16
|
subclassCodec
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
parseSubclass
|
|
3
|
-
} from "../chunk-
|
|
4
|
-
import "../chunk-
|
|
3
|
+
} from "../chunk-UNYR5GLI.js";
|
|
4
|
+
import "../chunk-LNT64X7C.js";
|
|
5
5
|
import "../chunk-4U55VNC7.js";
|
|
6
6
|
import "../chunk-G6MHJDVT.js";
|
|
7
7
|
import "../chunk-CJYCVNW2.js";
|
|
8
|
-
import "../chunk-
|
|
8
|
+
import "../chunk-B2QHP6UF.js";
|
|
9
9
|
import "../chunk-WYGD2UGN.js";
|
|
10
10
|
import "../chunk-ZJXSXVFP.js";
|
|
11
|
-
import "../chunk-
|
|
12
|
-
import "../chunk-
|
|
11
|
+
import "../chunk-OOL4KMG2.js";
|
|
12
|
+
import "../chunk-JXWNXIIZ.js";
|
|
13
13
|
import "../chunk-UA5KS2PL.js";
|
|
14
14
|
export {
|
|
15
15
|
parseSubclass
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
subclassEntitySchema
|
|
3
|
-
} from "../chunk-
|
|
3
|
+
} from "../chunk-LNT64X7C.js";
|
|
4
4
|
import "../chunk-G6MHJDVT.js";
|
|
5
5
|
import "../chunk-CJYCVNW2.js";
|
|
6
|
-
import "../chunk-
|
|
6
|
+
import "../chunk-B2QHP6UF.js";
|
|
7
7
|
import "../chunk-WYGD2UGN.js";
|
|
8
8
|
import "../chunk-ZJXSXVFP.js";
|
|
9
|
-
import "../chunk-
|
|
10
|
-
import "../chunk-
|
|
9
|
+
import "../chunk-OOL4KMG2.js";
|
|
10
|
+
import "../chunk-JXWNXIIZ.js";
|
|
11
11
|
import "../chunk-UA5KS2PL.js";
|
|
12
12
|
export {
|
|
13
13
|
subclassEntitySchema
|
package/dist/types/choice.d.ts
CHANGED
|
@@ -22,8 +22,8 @@ export declare const ALL_SKILL_SLUGS: SkillSlug[];
|
|
|
22
22
|
* comparison, `matchPool` — a module-level helper it shares with its other call
|
|
23
23
|
* sites, not one of its own. `computeEffectiveProficiencies` reads ALL_LANGUAGES
|
|
24
24
|
* from HERE, directly — it does not go through the generator's KNOWN_LANGUAGES.
|
|
25
|
-
* · the PLUGIN: `proficiency-
|
|
26
|
-
*
|
|
25
|
+
* · the PLUGIN: `proficiency-picker.ts` (D4 A) lists STANDARD, EXOTIC ("Rare") and
|
|
26
|
+
* SECRET_LANGUAGES as its Languages rows, plus any held or removed value they miss.
|
|
27
27
|
* Membership is also what makes two spellings of one language FOLD onto a single
|
|
28
28
|
* row: a vocabulary MISS keys on the raw string and splits the row in two. */
|
|
29
29
|
export declare const STANDARD_LANGUAGES: string[];
|
|
@@ -5,6 +5,23 @@ export type SenseType = "darkvision" | "blindsight" | "tremorsense" | "truesight
|
|
|
5
5
|
* Unarmed Strike row, `finesse` and `thrown` the row's properties, and `weapon` every attack row (today's reach, the
|
|
6
6
|
* Unarmed Strike row included). A list reaches a row when ANY word matches it. */
|
|
7
7
|
export type WeaponScope = "weapon" | "melee" | "ranged" | "unarmed" | "finesse" | "thrown";
|
|
8
|
+
/** A spell damage rider's spell scope, the `damage-bonus` arm's `spell_scope` (found 2026-09-29: Potent Spellcasting,
|
|
9
|
+
* Empowered Evocation, Elemental Affinity and Radiant Soul said which spells they reach only in prose, so they reached
|
|
10
|
+
* none). The rider reaches a character's spell that DEALS DAMAGE when every word it carries matches: `list` the spell is
|
|
11
|
+
* on that class's list, `level` its exact level (0 = cantrip), `school` its school, `damage_types` it deals ANY of them,
|
|
12
|
+
* `damage_type_pick` it deals the damage type the character chose at that `select-inline` (its option value or a type
|
|
13
|
+
* named in its label, "Red (Fire)"), `spells` it is one of these (a name or a slug). `once`: the rider adds to ONE damage
|
|
14
|
+
* roll of the casting, however many rolls or targets the spell has ("one damage roll of that spell"). Read with
|
|
15
|
+
* `applies_to: spell` or `all`; `all` with no scope reaches every damaging spell. */
|
|
16
|
+
export interface SpellScope {
|
|
17
|
+
list?: string;
|
|
18
|
+
level?: number;
|
|
19
|
+
school?: string;
|
|
20
|
+
damage_types?: string[];
|
|
21
|
+
damage_type_pick?: string;
|
|
22
|
+
spells?: string[];
|
|
23
|
+
once?: boolean;
|
|
24
|
+
}
|
|
8
25
|
/** Present on every arm: whose numbers the effect changes. Absent === "self". The engine's fold readers skip
|
|
9
26
|
* every effect whose subject is present and not "self" (`foldsOnSelf` in pc.feature-effects.ts). */
|
|
10
27
|
type Subject = {
|
|
@@ -81,6 +98,7 @@ export type FeatureEffect = ({
|
|
|
81
98
|
damage_type: string;
|
|
82
99
|
amount: string;
|
|
83
100
|
applies_to?: "spell" | "all" | WeaponScope | WeaponScope[];
|
|
101
|
+
spell_scope?: SpellScope;
|
|
84
102
|
} & Qualified) | ({
|
|
85
103
|
kind: "proficiency";
|
|
86
104
|
proficiency_type: "skill" | "tool" | "language" | "saving-throw" | "armor" | "weapon";
|
|
@@ -9,7 +9,7 @@ import type { AdditionalSpellsEntry, ProgressionEntry } from "../schemas/entity-
|
|
|
9
9
|
* `feature_type` field is now an open string (see {@link OptionalFeatureEntity})
|
|
10
10
|
* so homebrew categories parse; this union is kept purely as a reference list.
|
|
11
11
|
*/
|
|
12
|
-
export type OptionalFeatureKind = "invocation" | "fighting_style" | "metamagic" | "maneuver" | "infusion" | "artificer_plan";
|
|
12
|
+
export type OptionalFeatureKind = "invocation" | "fighting_style" | "metamagic" | "maneuver" | "infusion" | "artificer_plan" | "pact_boon";
|
|
13
13
|
/** A class/subclass named reference carried by a level prerequisite; mirrors namedRefSchema. */
|
|
14
14
|
export type OptionalFeatureNamedRef = {
|
|
15
15
|
name: string;
|