@archivist-gg/dnd5e 0.3.4 → 0.3.5

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.
Files changed (63) hide show
  1. package/dist/background/background.codec.js +5 -5
  2. package/dist/background/background.parser.js +4 -4
  3. package/dist/background/background.schema.js +3 -3
  4. package/dist/{chunk-XQCSGNXE.js → chunk-2VDTW7QO.js} +1 -1
  5. package/dist/{chunk-XBQMCEI2.js → chunk-3JOTQW7A.js} +1 -1
  6. package/dist/{chunk-LMBAEIP6.js → chunk-3PZHBLFG.js} +1 -1
  7. package/dist/{chunk-5U5FFFA3.js → chunk-5RKLL2AD.js} +1 -1
  8. package/dist/{chunk-JRDPUDT5.js → chunk-63XQXPZL.js} +1 -1
  9. package/dist/{chunk-5XMQPTHD.js → chunk-6BFWZW6T.js} +1 -1
  10. package/dist/{chunk-YJJTISBN.js → chunk-CGRLQ34U.js} +2 -2
  11. package/dist/{chunk-R3VAKWKW.js → chunk-CV5XDJKU.js} +1 -1
  12. package/dist/{chunk-US5IKYCW.js → chunk-EHDATXP7.js} +1 -1
  13. package/dist/{chunk-T26ZVCL5.js → chunk-IWRVOCT5.js} +1 -1
  14. package/dist/{chunk-D5U7GMPX.js → chunk-KADJZGZY.js} +1 -1
  15. package/dist/{chunk-HB7XZXDK.js → chunk-KK33PIDN.js} +1 -1
  16. package/dist/{chunk-JJ46T5XX.js → chunk-KPEJMNRD.js} +5 -0
  17. package/dist/{chunk-XGOFP7AQ.js → chunk-N3A5ICBO.js} +1 -1
  18. package/dist/{chunk-H7KBLR4X.js → chunk-OAXWSVJB.js} +1 -1
  19. package/dist/{chunk-IMZFOOVL.js → chunk-RF4TYCA2.js} +1 -1
  20. package/dist/{chunk-RIXI5D3R.js → chunk-RVXC6ZHY.js} +2 -2
  21. package/dist/{chunk-HJ5EEZ47.js → chunk-ULCQ73LA.js} +1 -1
  22. package/dist/{chunk-FDBWYMZK.js → chunk-UMWIPLLM.js} +2 -2
  23. package/dist/{chunk-6PKV5V2H.js → chunk-UQ3ZFCWD.js} +1 -1
  24. package/dist/{chunk-COEOOQX2.js → chunk-V2MJE6NC.js} +1 -1
  25. package/dist/{chunk-OSQFPGLM.js → chunk-V373TRJE.js} +4 -2
  26. package/dist/{chunk-4FWNK4FD.js → chunk-W74BCA7V.js} +2 -2
  27. package/dist/{chunk-ZONJ66NE.js → chunk-WHVLNFTG.js} +1 -1
  28. package/dist/{chunk-WPWOHGPI.js → chunk-X3D6LXUU.js} +13 -0
  29. package/dist/{chunk-ESS46GR4.js → chunk-Y4AGLCY6.js} +1 -1
  30. package/dist/class/class.codec.js +6 -6
  31. package/dist/class/class.parser.js +5 -5
  32. package/dist/class/class.schema.js +4 -4
  33. package/dist/feat/feat.codec.js +5 -5
  34. package/dist/feat/feat.parser.js +4 -4
  35. package/dist/feat/feat.schema.d.ts +9 -0
  36. package/dist/feat/feat.schema.js +3 -3
  37. package/dist/index.js +23 -23
  38. package/dist/monster/monster.parser.js +5 -5
  39. package/dist/monster/monster.schema.js +4 -4
  40. package/dist/optional-feature/optional-feature.codec.js +4 -4
  41. package/dist/optional-feature/optional-feature.parser.js +3 -3
  42. package/dist/optional-feature/optional-feature.schema.d.ts +9 -0
  43. package/dist/optional-feature/optional-feature.schema.js +2 -2
  44. package/dist/pc/pc.decision-engine.js +2 -2
  45. package/dist/pc/pc.equipment.d.ts +1 -1
  46. package/dist/pc/pc.equipment.js +1 -1
  47. package/dist/pc/pc.feature-effects.d.ts +9 -0
  48. package/dist/pc/pc.feature-effects.js +1 -1
  49. package/dist/pc/pc.proficiencies.js +2 -2
  50. package/dist/pc/pc.recalc.js +5 -5
  51. package/dist/pc/pc.resolver.js +2 -2
  52. package/dist/race/race.codec.js +6 -6
  53. package/dist/race/race.parser.js +5 -5
  54. package/dist/race/race.schema.js +4 -4
  55. package/dist/schemas/choice-schema.js +2 -2
  56. package/dist/schemas/feature-effect-schema.d.ts +9 -0
  57. package/dist/schemas/feature-effect-schema.js +1 -1
  58. package/dist/schemas/feature-schema.js +3 -3
  59. package/dist/subclass/subclass.codec.js +6 -6
  60. package/dist/subclass/subclass.parser.js +5 -5
  61. package/dist/subclass/subclass.schema.js +4 -4
  62. package/dist/types/feature-effect.d.ts +7 -0
  63. package/package.json +1 -1
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  backgroundCodec
3
- } from "../chunk-HJ5EEZ47.js";
4
- import "../chunk-LMBAEIP6.js";
5
- import "../chunk-JRDPUDT5.js";
3
+ } from "../chunk-ULCQ73LA.js";
4
+ import "../chunk-3PZHBLFG.js";
5
+ import "../chunk-63XQXPZL.js";
6
6
  import "../chunk-IN4M4X7P.js";
7
- import "../chunk-T26ZVCL5.js";
8
- import "../chunk-WPWOHGPI.js";
7
+ import "../chunk-IWRVOCT5.js";
8
+ import "../chunk-X3D6LXUU.js";
9
9
  import "../chunk-UA5KS2PL.js";
10
10
  export {
11
11
  backgroundCodec
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  parseBackground
3
- } from "../chunk-LMBAEIP6.js";
4
- import "../chunk-JRDPUDT5.js";
3
+ } from "../chunk-3PZHBLFG.js";
4
+ import "../chunk-63XQXPZL.js";
5
5
  import "../chunk-IN4M4X7P.js";
6
- import "../chunk-T26ZVCL5.js";
7
- import "../chunk-WPWOHGPI.js";
6
+ import "../chunk-IWRVOCT5.js";
7
+ import "../chunk-X3D6LXUU.js";
8
8
  import "../chunk-UA5KS2PL.js";
9
9
  export {
10
10
  parseBackground
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  backgroundEntitySchema,
3
3
  langProfSchema
4
- } from "../chunk-JRDPUDT5.js";
4
+ } from "../chunk-63XQXPZL.js";
5
5
  import "../chunk-IN4M4X7P.js";
6
- import "../chunk-T26ZVCL5.js";
7
- import "../chunk-WPWOHGPI.js";
6
+ import "../chunk-IWRVOCT5.js";
7
+ import "../chunk-X3D6LXUU.js";
8
8
  import "../chunk-UA5KS2PL.js";
9
9
  export {
10
10
  backgroundEntitySchema,
@@ -29,7 +29,7 @@ import {
29
29
  import {
30
30
  assembleEffectFeatures,
31
31
  collectProficiencyEffectGrants
32
- } from "./chunk-JJ46T5XX.js";
32
+ } from "./chunk-KPEJMNRD.js";
33
33
  import {
34
34
  ALL_LANGUAGES,
35
35
  ALL_SKILL_SLUGS,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  parseRace
3
- } from "./chunk-XGOFP7AQ.js";
3
+ } from "./chunk-N3A5ICBO.js";
4
4
 
5
5
  // src/race/race.codec.ts
6
6
  import yaml from "js-yaml";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  backgroundEntitySchema
3
- } from "./chunk-JRDPUDT5.js";
3
+ } from "./chunk-63XQXPZL.js";
4
4
 
5
5
  // src/background/background.parser.ts
6
6
  import { parseYaml } from "@archivist-gg/core";
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-4U55VNC7.js";
4
4
  import {
5
5
  classEntitySchema
6
- } from "./chunk-YJJTISBN.js";
6
+ } from "./chunk-CGRLQ34U.js";
7
7
 
8
8
  // src/class/class.parser.ts
9
9
  import { parseYaml } from "@archivist-gg/core";
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-IN4M4X7P.js";
4
4
  import {
5
5
  choiceSchema
6
- } from "./chunk-T26ZVCL5.js";
6
+ } from "./chunk-IWRVOCT5.js";
7
7
  import {
8
8
  additionalSpellsEntrySchema,
9
9
  imageField
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  optionalFeatureEntitySchema
3
- } from "./chunk-ZONJ66NE.js";
3
+ } from "./chunk-WHVLNFTG.js";
4
4
 
5
5
  // src/optional-feature/optional-feature.parser.ts
6
6
  import { parseYaml } from "@archivist-gg/core";
@@ -8,7 +8,7 @@ import {
8
8
  } from "./chunk-CJYCVNW2.js";
9
9
  import {
10
10
  featureSchema
11
- } from "./chunk-4FWNK4FD.js";
11
+ } from "./chunk-W74BCA7V.js";
12
12
  import {
13
13
  resourceSchema
14
14
  } from "./chunk-YLL2QXY2.js";
@@ -18,7 +18,7 @@ import {
18
18
  } from "./chunk-IN4M4X7P.js";
19
19
  import {
20
20
  choiceSchema
21
- } from "./chunk-T26ZVCL5.js";
21
+ } from "./chunk-IWRVOCT5.js";
22
22
  import {
23
23
  additionalSpellsEntrySchema,
24
24
  imageField,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  parseSubclass
3
- } from "./chunk-HB7XZXDK.js";
3
+ } from "./chunk-KK33PIDN.js";
4
4
 
5
5
  // src/subclass/subclass.codec.ts
6
6
  import yaml from "js-yaml";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  parseClass
3
- } from "./chunk-5U5FFFA3.js";
3
+ } from "./chunk-5RKLL2AD.js";
4
4
 
5
5
  // src/class/class.codec.ts
6
6
  import yaml from "js-yaml";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  featureEffectSchema
3
- } from "./chunk-WPWOHGPI.js";
3
+ } from "./chunk-X3D6LXUU.js";
4
4
 
5
5
  // src/schemas/choice-schema.ts
6
6
  import { z } from "zod";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  featEntitySchema
3
- } from "./chunk-RIXI5D3R.js";
3
+ } from "./chunk-RVXC6ZHY.js";
4
4
 
5
5
  // src/feat/feat.parser.ts
6
6
  import { parseYaml } from "@archivist-gg/core";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  subclassEntitySchema
3
- } from "./chunk-H7KBLR4X.js";
3
+ } from "./chunk-OAXWSVJB.js";
4
4
  import {
5
5
  aliasFeaturesByLevelActionCost
6
6
  } from "./chunk-4U55VNC7.js";
@@ -22,6 +22,7 @@ function emptyFeatureEffectTotals() {
22
22
  hp_per_level_terms: [],
23
23
  speed_walk_bonus: 0,
24
24
  speed_walk_set: 0,
25
+ attunement_set: 0,
25
26
  ability_bonus: {},
26
27
  senses: { darkvision: 0, blindsight: 0, tremorsense: 0, truesight: 0 },
27
28
  ac_terms: [],
@@ -195,6 +196,10 @@ function applyEffect(out, eff, label, level) {
195
196
  }
196
197
  break;
197
198
  }
199
+ case "attunement-limit": {
200
+ out.attunement_set = Math.max(out.attunement_set, scaled(eff.value, "value", eff.scales_at, level));
201
+ break;
202
+ }
198
203
  case "sense":
199
204
  out.senses[eff.type] = Math.max(out.senses[eff.type], eff.range);
200
205
  break;
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  raceEntitySchema
3
- } from "./chunk-FDBWYMZK.js";
3
+ } from "./chunk-UMWIPLLM.js";
4
4
  import {
5
5
  aliasFeatureListActionCost
6
6
  } from "./chunk-4U55VNC7.js";
@@ -8,7 +8,7 @@ import {
8
8
  } from "./chunk-CJYCVNW2.js";
9
9
  import {
10
10
  featureSchema
11
- } from "./chunk-4FWNK4FD.js";
11
+ } from "./chunk-W74BCA7V.js";
12
12
  import {
13
13
  resourceSchema
14
14
  } from "./chunk-YLL2QXY2.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  parseOptionalFeature
3
- } from "./chunk-5XMQPTHD.js";
3
+ } from "./chunk-6BFWZW6T.js";
4
4
 
5
5
  // src/optional-feature/optional-feature.codec.ts
6
6
  import yaml from "js-yaml";
@@ -4,10 +4,10 @@ import {
4
4
  } from "./chunk-YLL2QXY2.js";
5
5
  import {
6
6
  choiceSchema
7
- } from "./chunk-T26ZVCL5.js";
7
+ } from "./chunk-IWRVOCT5.js";
8
8
  import {
9
9
  featureEffectSchema
10
- } from "./chunk-WPWOHGPI.js";
10
+ } from "./chunk-X3D6LXUU.js";
11
11
  import {
12
12
  additionalSpellsEntrySchema,
13
13
  imageField,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  parseBackground
3
- } from "./chunk-LMBAEIP6.js";
3
+ } from "./chunk-3PZHBLFG.js";
4
4
 
5
5
  // src/background/background.codec.ts
6
6
  import yaml from "js-yaml";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  featureSchema
3
- } from "./chunk-4FWNK4FD.js";
3
+ } from "./chunk-W74BCA7V.js";
4
4
  import {
5
5
  choiceSchema
6
- } from "./chunk-T26ZVCL5.js";
6
+ } from "./chunk-IWRVOCT5.js";
7
7
  import {
8
8
  additionalSpellsEntrySchema,
9
9
  imageField
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  featureObjectSchema
3
- } from "./chunk-4FWNK4FD.js";
3
+ } from "./chunk-W74BCA7V.js";
4
4
  import {
5
5
  imageField
6
6
  } from "./chunk-UA5KS2PL.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  MONSTER_KNOWN_KEYS,
3
3
  monsterSchema
4
- } from "./chunk-6PKV5V2H.js";
4
+ } from "./chunk-UQ3ZFCWD.js";
5
5
 
6
6
  // src/monster/monster.parser.ts
7
7
  import { parseYaml } from "@archivist-gg/core";
@@ -605,7 +605,7 @@ function computeCarriedWeight(resolved, registry) {
605
605
  }
606
606
  return total;
607
607
  }
608
- function computeSlotsAndAttacks(resolved, mods, profs, registry, warnings, proficiencyBonus, weaponAbilities = [], weaponMasteries = []) {
608
+ function computeSlotsAndAttacks(resolved, mods, profs, registry, warnings, proficiencyBonus, weaponAbilities = [], weaponMasteries = [], attunementFloor = 0) {
609
609
  var _a, _b, _c;
610
610
  const equippedSlots = assignSlots(resolved, registry, warnings);
611
611
  const overrides = (_a = resolved.definition.overrides) != null ? _a : {};
@@ -621,7 +621,9 @@ function computeSlotsAndAttacks(resolved, mods, profs, registry, warnings, profi
621
621
  carriedWeight: computeCarriedWeight(resolved, registry),
622
622
  // Attunement is persistent: an attuned item still occupies a slot even when unequipped (SRD).
623
623
  attunementUsed: ((_b = resolved.definition.equipment) != null ? _b : []).filter((e) => e.attuned).length,
624
- attunementLimit: (_c = overrides.attunement_limit) != null ? _c : 3
624
+ // PRECEDENCE: an explicit character override wins outright (a number the player typed is intent);
625
+ // otherwise the baseline 3 is raised — never lowered — by whatever features granted.
626
+ attunementLimit: (_c = overrides.attunement_limit) != null ? _c : Math.max(3, attunementFloor)
625
627
  };
626
628
  }
627
629
 
@@ -8,10 +8,10 @@ import {
8
8
  } from "./chunk-YLL2QXY2.js";
9
9
  import {
10
10
  choiceSchema
11
- } from "./chunk-T26ZVCL5.js";
11
+ } from "./chunk-IWRVOCT5.js";
12
12
  import {
13
13
  featureEffectSchema
14
- } from "./chunk-WPWOHGPI.js";
14
+ } from "./chunk-X3D6LXUU.js";
15
15
 
16
16
  // src/schemas/feature-schema.ts
17
17
  import { z as z2 } from "zod";
@@ -8,7 +8,7 @@ import {
8
8
  } from "./chunk-YLL2QXY2.js";
9
9
  import {
10
10
  featureEffectSchema
11
- } from "./chunk-WPWOHGPI.js";
11
+ } from "./chunk-X3D6LXUU.js";
12
12
  import {
13
13
  additionalSpellsEntrySchema,
14
14
  imageField,
@@ -25,6 +25,19 @@ var featureEffectSchema = z.discriminatedUnion("kind", [
25
25
  condition: conditionField,
26
26
  subject: subjectField
27
27
  }),
28
+ z.object({
29
+ // The attunement CAP, as data. `value` is an absolute cap ("you can now attune to up to four"),
30
+ // never an increment, so two grants MAX rather than sum and a grant can never lower the cap:
31
+ // recalc folds it as Math.max(3, granted). `scales_at` carries a whole progression on ONE effect —
32
+ // the `speed-bonus` / `extra-attack` shape (R4-G7 §7.3) — because the overlay has no level axis and
33
+ // the Artificer's three steps (10 -> 4, 14 -> 5, 18 -> 6) would otherwise need three separate
34
+ // features, one of which is embedded prose inside another feature's description.
35
+ kind: z.literal("attunement-limit"),
36
+ value: z.number().int().positive(),
37
+ scales_at: z.array(z.object({ level: z.number().int().min(1).max(20), value: z.number().int().positive() })).optional(),
38
+ condition: conditionField,
39
+ subject: subjectField
40
+ }),
28
41
  z.object({
29
42
  kind: z.literal("sense"),
30
43
  type: z.enum(["darkvision", "blindsight", "tremorsense", "truesight"]),
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  parseFeat
3
- } from "./chunk-D5U7GMPX.js";
3
+ } from "./chunk-KADJZGZY.js";
4
4
 
5
5
  // src/feat/feat.codec.ts
6
6
  import yaml from "js-yaml";
@@ -1,17 +1,17 @@
1
1
  import {
2
2
  classCodec
3
- } from "../chunk-US5IKYCW.js";
4
- import "../chunk-5U5FFFA3.js";
3
+ } from "../chunk-EHDATXP7.js";
4
+ import "../chunk-5RKLL2AD.js";
5
5
  import "../chunk-4U55VNC7.js";
6
- import "../chunk-YJJTISBN.js";
6
+ import "../chunk-CGRLQ34U.js";
7
7
  import "../chunk-23LZLBJK.js";
8
8
  import "../chunk-CJYCVNW2.js";
9
- import "../chunk-4FWNK4FD.js";
9
+ import "../chunk-W74BCA7V.js";
10
10
  import "../chunk-WYGD2UGN.js";
11
11
  import "../chunk-YLL2QXY2.js";
12
12
  import "../chunk-IN4M4X7P.js";
13
- import "../chunk-T26ZVCL5.js";
14
- import "../chunk-WPWOHGPI.js";
13
+ import "../chunk-IWRVOCT5.js";
14
+ import "../chunk-X3D6LXUU.js";
15
15
  import "../chunk-UA5KS2PL.js";
16
16
  export {
17
17
  classCodec
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  parseClass
3
- } from "../chunk-5U5FFFA3.js";
3
+ } from "../chunk-5RKLL2AD.js";
4
4
  import "../chunk-4U55VNC7.js";
5
- import "../chunk-YJJTISBN.js";
5
+ import "../chunk-CGRLQ34U.js";
6
6
  import "../chunk-23LZLBJK.js";
7
7
  import "../chunk-CJYCVNW2.js";
8
- import "../chunk-4FWNK4FD.js";
8
+ import "../chunk-W74BCA7V.js";
9
9
  import "../chunk-WYGD2UGN.js";
10
10
  import "../chunk-YLL2QXY2.js";
11
11
  import "../chunk-IN4M4X7P.js";
12
- import "../chunk-T26ZVCL5.js";
13
- import "../chunk-WPWOHGPI.js";
12
+ import "../chunk-IWRVOCT5.js";
13
+ import "../chunk-X3D6LXUU.js";
14
14
  import "../chunk-UA5KS2PL.js";
15
15
  export {
16
16
  parseClass
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  classEntitySchema
3
- } from "../chunk-YJJTISBN.js";
3
+ } from "../chunk-CGRLQ34U.js";
4
4
  import "../chunk-23LZLBJK.js";
5
5
  import "../chunk-CJYCVNW2.js";
6
- import "../chunk-4FWNK4FD.js";
6
+ import "../chunk-W74BCA7V.js";
7
7
  import "../chunk-WYGD2UGN.js";
8
8
  import "../chunk-YLL2QXY2.js";
9
9
  import "../chunk-IN4M4X7P.js";
10
- import "../chunk-T26ZVCL5.js";
11
- import "../chunk-WPWOHGPI.js";
10
+ import "../chunk-IWRVOCT5.js";
11
+ import "../chunk-X3D6LXUU.js";
12
12
  import "../chunk-UA5KS2PL.js";
13
13
  export {
14
14
  classEntitySchema
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  featCodec
3
- } from "../chunk-ESS46GR4.js";
4
- import "../chunk-D5U7GMPX.js";
5
- import "../chunk-RIXI5D3R.js";
3
+ } from "../chunk-Y4AGLCY6.js";
4
+ import "../chunk-KADJZGZY.js";
5
+ import "../chunk-RVXC6ZHY.js";
6
6
  import "../chunk-YLL2QXY2.js";
7
- import "../chunk-T26ZVCL5.js";
8
- import "../chunk-WPWOHGPI.js";
7
+ import "../chunk-IWRVOCT5.js";
8
+ import "../chunk-X3D6LXUU.js";
9
9
  import "../chunk-UA5KS2PL.js";
10
10
  export {
11
11
  featCodec
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  parseFeat
3
- } from "../chunk-D5U7GMPX.js";
4
- import "../chunk-RIXI5D3R.js";
3
+ } from "../chunk-KADJZGZY.js";
4
+ import "../chunk-RVXC6ZHY.js";
5
5
  import "../chunk-YLL2QXY2.js";
6
- import "../chunk-T26ZVCL5.js";
7
- import "../chunk-WPWOHGPI.js";
6
+ import "../chunk-IWRVOCT5.js";
7
+ import "../chunk-X3D6LXUU.js";
8
8
  import "../chunk-UA5KS2PL.js";
9
9
  export {
10
10
  parseFeat
@@ -106,6 +106,15 @@ export declare const featEntitySchema: z.ZodObject<{
106
106
  }, z.core.$strip>>>;
107
107
  condition: z.ZodOptional<z.ZodString>;
108
108
  subject: z.ZodOptional<z.ZodString>;
109
+ }, z.core.$strip>, z.ZodObject<{
110
+ kind: z.ZodLiteral<"attunement-limit">;
111
+ value: z.ZodNumber;
112
+ scales_at: z.ZodOptional<z.ZodArray<z.ZodObject<{
113
+ level: z.ZodNumber;
114
+ value: z.ZodNumber;
115
+ }, z.core.$strip>>>;
116
+ condition: z.ZodOptional<z.ZodString>;
117
+ subject: z.ZodOptional<z.ZodString>;
109
118
  }, z.core.$strip>, z.ZodObject<{
110
119
  kind: z.ZodLiteral<"sense">;
111
120
  type: z.ZodEnum<{
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  featEntitySchema
3
- } from "../chunk-RIXI5D3R.js";
3
+ } from "../chunk-RVXC6ZHY.js";
4
4
  import "../chunk-YLL2QXY2.js";
5
- import "../chunk-T26ZVCL5.js";
6
- import "../chunk-WPWOHGPI.js";
5
+ import "../chunk-IWRVOCT5.js";
6
+ import "../chunk-X3D6LXUU.js";
7
7
  import "../chunk-UA5KS2PL.js";
8
8
  export {
9
9
  featEntitySchema
package/dist/index.js CHANGED
@@ -5,9 +5,9 @@ import "./chunk-HZA7OE7N.js";
5
5
  import "./chunk-2DFENQIJ.js";
6
6
  import {
7
7
  subclassCodec
8
- } from "./chunk-R3VAKWKW.js";
9
- import "./chunk-HB7XZXDK.js";
10
- import "./chunk-H7KBLR4X.js";
8
+ } from "./chunk-CV5XDJKU.js";
9
+ import "./chunk-KK33PIDN.js";
10
+ import "./chunk-OAXWSVJB.js";
11
11
  import {
12
12
  spellInputSchema
13
13
  } from "./chunk-656QCX4U.js";
@@ -19,9 +19,9 @@ import {
19
19
  } from "./chunk-WSVMLNTO.js";
20
20
  import {
21
21
  raceCodec
22
- } from "./chunk-XBQMCEI2.js";
23
- import "./chunk-XGOFP7AQ.js";
24
- import "./chunk-FDBWYMZK.js";
22
+ } from "./chunk-3JOTQW7A.js";
23
+ import "./chunk-N3A5ICBO.js";
24
+ import "./chunk-UMWIPLLM.js";
25
25
  import "./chunk-OZP6JFGT.js";
26
26
  import "./chunk-VQAXTIBW.js";
27
27
  import {
@@ -34,14 +34,14 @@ import {
34
34
  } from "./chunk-6PXTNCBP.js";
35
35
  import {
36
36
  parseMonster
37
- } from "./chunk-COEOOQX2.js";
38
- import "./chunk-6PKV5V2H.js";
37
+ } from "./chunk-V2MJE6NC.js";
38
+ import "./chunk-UQ3ZFCWD.js";
39
39
  import "./chunk-IKSMX4TN.js";
40
40
  import {
41
41
  optionalFeatureCodec
42
- } from "./chunk-IMZFOOVL.js";
43
- import "./chunk-5XMQPTHD.js";
44
- import "./chunk-ZONJ66NE.js";
42
+ } from "./chunk-RF4TYCA2.js";
43
+ import "./chunk-6BFWZW6T.js";
44
+ import "./chunk-WHVLNFTG.js";
45
45
  import {
46
46
  itemCodec
47
47
  } from "./chunk-4XTNPNQB.js";
@@ -64,21 +64,21 @@ import {
64
64
  } from "./chunk-LSLSG67V.js";
65
65
  import {
66
66
  featCodec
67
- } from "./chunk-ESS46GR4.js";
68
- import "./chunk-D5U7GMPX.js";
69
- import "./chunk-RIXI5D3R.js";
67
+ } from "./chunk-Y4AGLCY6.js";
68
+ import "./chunk-KADJZGZY.js";
69
+ import "./chunk-RVXC6ZHY.js";
70
70
  import "./chunk-DEEHHLAP.js";
71
71
  import "./chunk-PDJSUH24.js";
72
72
  import "./chunk-WELIKLZF.js";
73
73
  import {
74
74
  classCodec
75
- } from "./chunk-US5IKYCW.js";
76
- import "./chunk-5U5FFFA3.js";
75
+ } from "./chunk-EHDATXP7.js";
76
+ import "./chunk-5RKLL2AD.js";
77
77
  import "./chunk-4U55VNC7.js";
78
- import "./chunk-YJJTISBN.js";
78
+ import "./chunk-CGRLQ34U.js";
79
79
  import "./chunk-23LZLBJK.js";
80
80
  import "./chunk-CJYCVNW2.js";
81
- import "./chunk-4FWNK4FD.js";
81
+ import "./chunk-W74BCA7V.js";
82
82
  import "./chunk-WYGD2UGN.js";
83
83
  import "./chunk-YLL2QXY2.js";
84
84
  import {
@@ -91,12 +91,12 @@ import "./chunk-5N2GW72F.js";
91
91
  import "./chunk-JC5UNIVM.js";
92
92
  import {
93
93
  backgroundCodec
94
- } from "./chunk-HJ5EEZ47.js";
95
- import "./chunk-LMBAEIP6.js";
96
- import "./chunk-JRDPUDT5.js";
94
+ } from "./chunk-ULCQ73LA.js";
95
+ import "./chunk-3PZHBLFG.js";
96
+ import "./chunk-63XQXPZL.js";
97
97
  import "./chunk-IN4M4X7P.js";
98
- import "./chunk-T26ZVCL5.js";
99
- import "./chunk-WPWOHGPI.js";
98
+ import "./chunk-IWRVOCT5.js";
99
+ import "./chunk-X3D6LXUU.js";
100
100
  import "./chunk-UA5KS2PL.js";
101
101
 
102
102
  // src/monster/monster.codec.ts
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  migrateLegacy,
3
3
  parseMonster
4
- } from "../chunk-COEOOQX2.js";
5
- import "../chunk-6PKV5V2H.js";
6
- import "../chunk-4FWNK4FD.js";
4
+ } from "../chunk-V2MJE6NC.js";
5
+ import "../chunk-UQ3ZFCWD.js";
6
+ import "../chunk-W74BCA7V.js";
7
7
  import "../chunk-WYGD2UGN.js";
8
8
  import "../chunk-YLL2QXY2.js";
9
- import "../chunk-T26ZVCL5.js";
10
- import "../chunk-WPWOHGPI.js";
9
+ import "../chunk-IWRVOCT5.js";
10
+ import "../chunk-X3D6LXUU.js";
11
11
  import "../chunk-UA5KS2PL.js";
12
12
  export {
13
13
  migrateLegacy,
@@ -11,12 +11,12 @@ import {
11
11
  monsterSpeedSchema,
12
12
  monsterSpellcastingSchema,
13
13
  monsterTypeSchema
14
- } from "../chunk-6PKV5V2H.js";
15
- import "../chunk-4FWNK4FD.js";
14
+ } from "../chunk-UQ3ZFCWD.js";
15
+ import "../chunk-W74BCA7V.js";
16
16
  import "../chunk-WYGD2UGN.js";
17
17
  import "../chunk-YLL2QXY2.js";
18
- import "../chunk-T26ZVCL5.js";
19
- import "../chunk-WPWOHGPI.js";
18
+ import "../chunk-IWRVOCT5.js";
19
+ import "../chunk-X3D6LXUU.js";
20
20
  import "../chunk-UA5KS2PL.js";
21
21
  export {
22
22
  MONSTER_KNOWN_KEYS,
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  optionalFeatureCodec
3
- } from "../chunk-IMZFOOVL.js";
4
- import "../chunk-5XMQPTHD.js";
5
- import "../chunk-ZONJ66NE.js";
3
+ } from "../chunk-RF4TYCA2.js";
4
+ import "../chunk-6BFWZW6T.js";
5
+ import "../chunk-WHVLNFTG.js";
6
6
  import "../chunk-WYGD2UGN.js";
7
7
  import "../chunk-YLL2QXY2.js";
8
- import "../chunk-WPWOHGPI.js";
8
+ import "../chunk-X3D6LXUU.js";
9
9
  import "../chunk-UA5KS2PL.js";
10
10
  export {
11
11
  optionalFeatureCodec
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  parseOptionalFeature
3
- } from "../chunk-5XMQPTHD.js";
4
- import "../chunk-ZONJ66NE.js";
3
+ } from "../chunk-6BFWZW6T.js";
4
+ import "../chunk-WHVLNFTG.js";
5
5
  import "../chunk-WYGD2UGN.js";
6
6
  import "../chunk-YLL2QXY2.js";
7
- import "../chunk-WPWOHGPI.js";
7
+ import "../chunk-X3D6LXUU.js";
8
8
  import "../chunk-UA5KS2PL.js";
9
9
  export {
10
10
  parseOptionalFeature
@@ -97,6 +97,15 @@ export declare const optionalFeatureEntitySchema: z.ZodObject<{
97
97
  }, z.core.$strip>>>;
98
98
  condition: z.ZodOptional<z.ZodString>;
99
99
  subject: z.ZodOptional<z.ZodString>;
100
+ }, z.core.$strip>, z.ZodObject<{
101
+ kind: z.ZodLiteral<"attunement-limit">;
102
+ value: z.ZodNumber;
103
+ scales_at: z.ZodOptional<z.ZodArray<z.ZodObject<{
104
+ level: z.ZodNumber;
105
+ value: z.ZodNumber;
106
+ }, z.core.$strip>>>;
107
+ condition: z.ZodOptional<z.ZodString>;
108
+ subject: z.ZodOptional<z.ZodString>;
100
109
  }, z.core.$strip>, z.ZodObject<{
101
110
  kind: z.ZodLiteral<"sense">;
102
111
  type: z.ZodEnum<{
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  optionalFeatureEntitySchema
3
- } from "../chunk-ZONJ66NE.js";
3
+ } from "../chunk-WHVLNFTG.js";
4
4
  import "../chunk-WYGD2UGN.js";
5
5
  import "../chunk-YLL2QXY2.js";
6
- import "../chunk-WPWOHGPI.js";
6
+ import "../chunk-X3D6LXUU.js";
7
7
  import "../chunk-UA5KS2PL.js";
8
8
  export {
9
9
  optionalFeatureEntitySchema
@@ -4,7 +4,7 @@ import {
4
4
  collectChosenAbilityPoints,
5
5
  collectChosenProficiencies,
6
6
  computeEffectiveProficiencies
7
- } from "../chunk-XQCSGNXE.js";
7
+ } from "../chunk-2VDTW7QO.js";
8
8
  import "../chunk-UXPGW4TI.js";
9
9
  import "../chunk-DPUJDOKV.js";
10
10
  import "../chunk-O4SRD3J5.js";
@@ -14,7 +14,7 @@ import "../chunk-YHYTW5QA.js";
14
14
  import "../chunk-MI7P3NX3.js";
15
15
  import "../chunk-PVCEA4HZ.js";
16
16
  import "../chunk-UBBKSYBY.js";
17
- import "../chunk-JJ46T5XX.js";
17
+ import "../chunk-KPEJMNRD.js";
18
18
  import "../chunk-TOM66P2P.js";
19
19
  import "../chunk-KU3YLF6D.js";
20
20
  import "../chunk-RLGQ5PZZ.js";
@@ -38,5 +38,5 @@ export interface UnarmedStrikeSpec {
38
38
  * this row carries no weapon, so `Unarmed` is capitalised here beside `Unarmed Strike`, `5 ft` and `bludgeoning`
39
39
  * rather than in a renderer (R4-G6b live rider R-1). */
40
40
  export declare function buildUnarmedRow(mods: Record<Ability, number>, proficiencyBonus: number, spec?: UnarmedStrikeSpec): AttackRow;
41
- export declare function computeSlotsAndAttacks(resolved: ResolvedCharacter, mods: Record<Ability, number>, profs: ProficienciesForQuery, registry: EntityRegistry, warnings: string[], proficiencyBonus: number, weaponAbilities?: WeaponAbilityOverride[], weaponMasteries?: string[]): DerivedEquipment;
41
+ export declare function computeSlotsAndAttacks(resolved: ResolvedCharacter, mods: Record<Ability, number>, profs: ProficienciesForQuery, registry: EntityRegistry, warnings: string[], proficiencyBonus: number, weaponAbilities?: WeaponAbilityOverride[], weaponMasteries?: string[], attunementFloor?: number): DerivedEquipment;
42
42
  export {};
@@ -4,7 +4,7 @@ import {
4
4
  computeSlotsAndAttacks,
5
5
  emptyAppliedBonuses,
6
6
  isWeaponSlugProficient
7
- } from "../chunk-OSQFPGLM.js";
7
+ } from "../chunk-V373TRJE.js";
8
8
  import "../chunk-UIRMA5KM.js";
9
9
  import "../chunk-UBBKSYBY.js";
10
10
  import "../chunk-RLGQ5PZZ.js";
@@ -38,6 +38,15 @@ export interface FeatureEffectTotals {
38
38
  * A `scales_at` progression resolves BEFORE the max, at the effect's own source level (R4-G7 §7.3).
39
39
  */
40
40
  speed_walk_set: number;
41
+ /**
42
+ * Absolute attunement CAP granted by `attunement-limit` effects (the Artificer's Magic Item
43
+ * Adept / Savant / Master line). Max across all grants; 0 = nothing granted it. recalc applies it
44
+ * as Math.max(3, attunement_set) so a grant can never LOWER the baseline, and an explicit
45
+ * `overrides.attunement_limit` on the character still wins outright — a number the player typed is
46
+ * intent, not a derived value. A `scales_at` progression resolves BEFORE the max, at the effect's
47
+ * own source level (R4-G7 §7.3).
48
+ */
49
+ attunement_set: number;
41
50
  /** Flat ability-score bumps from `ability-score-increase` effects whose `abilities` is a FIXED LIST (the three level-20
42
51
  * capstones). `chosen` arms are the ASI SLOT's second encoding and MUST NOT fold (the synthesized feat decision pays
43
52
  * them; a flat fold double-counts). No cap: `max` is declared and unread (user ruling 2026-09-03). */
@@ -7,7 +7,7 @@ import {
7
7
  foldsNow,
8
8
  foldsOnSelf,
9
9
  selfEffectsOf
10
- } from "../chunk-JJ46T5XX.js";
10
+ } from "../chunk-KPEJMNRD.js";
11
11
  import "../chunk-TOM66P2P.js";
12
12
  import "../chunk-KU3YLF6D.js";
13
13
  import "../chunk-RLGQ5PZZ.js";
@@ -2,7 +2,7 @@ import {
2
2
  collectChosenProficiencies,
3
3
  collectProficiencyGrants,
4
4
  computeEffectiveProficiencies
5
- } from "../chunk-XQCSGNXE.js";
5
+ } from "../chunk-2VDTW7QO.js";
6
6
  import "../chunk-UXPGW4TI.js";
7
7
  import "../chunk-DPUJDOKV.js";
8
8
  import "../chunk-O4SRD3J5.js";
@@ -12,7 +12,7 @@ import "../chunk-YHYTW5QA.js";
12
12
  import "../chunk-MI7P3NX3.js";
13
13
  import "../chunk-PVCEA4HZ.js";
14
14
  import "../chunk-UBBKSYBY.js";
15
- import "../chunk-JJ46T5XX.js";
15
+ import "../chunk-KPEJMNRD.js";
16
16
  import "../chunk-TOM66P2P.js";
17
17
  import "../chunk-KU3YLF6D.js";
18
18
  import {
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  collectChosenAbilityPoints,
6
6
  collectChosenProficiencies
7
- } from "../chunk-XQCSGNXE.js";
7
+ } from "../chunk-2VDTW7QO.js";
8
8
  import {
9
9
  resourceLevelFor
10
10
  } from "../chunk-UXPGW4TI.js";
@@ -31,7 +31,7 @@ import {
31
31
  computeAppliedBonuses,
32
32
  computeSlotsAndAttacks,
33
33
  emptyAppliedBonuses
34
- } from "../chunk-OSQFPGLM.js";
34
+ } from "../chunk-V373TRJE.js";
35
35
  import "../chunk-UIRMA5KM.js";
36
36
  import "../chunk-UBBKSYBY.js";
37
37
  import {
@@ -39,7 +39,7 @@ import {
39
39
  computeFeatureEffects,
40
40
  foldsNow,
41
41
  selfEffectsOf
42
- } from "../chunk-JJ46T5XX.js";
42
+ } from "../chunk-KPEJMNRD.js";
43
43
  import "../chunk-TOM66P2P.js";
44
44
  import "../chunk-KU3YLF6D.js";
45
45
  import "../chunk-RLGQ5PZZ.js";
@@ -680,7 +680,7 @@ function recalc(resolved, registry) {
680
680
  let acBreakdownDerived = [];
681
681
  let acInformationalDerived = [];
682
682
  if (registry) {
683
- derivedEquipment = computeSlotsAndAttacks(resolved, mods, profsForApply, registry, warnings, proficiencyBonus, weaponAbilities, (_B = resolved.weaponMasteries) != null ? _B : []);
683
+ derivedEquipment = computeSlotsAndAttacks(resolved, mods, profsForApply, registry, warnings, proficiencyBonus, weaponAbilities, (_B = resolved.weaponMasteries) != null ? _B : [], featureEffects.attunement_set);
684
684
  if (derivedEquipment.equippedSlots.armor) {
685
685
  const featTerms = featureAcTermsFor(true);
686
686
  acDerived = derivedEquipment.ac + sumTerms(featTerms);
@@ -846,7 +846,7 @@ function recalc(resolved, registry) {
846
846
  equippedSlots: (_R = derivedEquipment == null ? void 0 : derivedEquipment.equippedSlots) != null ? _R : {},
847
847
  carriedWeight: (_S = derivedEquipment == null ? void 0 : derivedEquipment.carriedWeight) != null ? _S : 0,
848
848
  attunementUsed: (_T = derivedEquipment == null ? void 0 : derivedEquipment.attunementUsed) != null ? _T : 0,
849
- attunementLimit: (_V = derivedEquipment == null ? void 0 : derivedEquipment.attunementLimit) != null ? _V : (_U = overrides.attunement_limit) != null ? _U : 3,
849
+ attunementLimit: (_V = derivedEquipment == null ? void 0 : derivedEquipment.attunementLimit) != null ? _V : (_U = overrides.attunement_limit) != null ? _U : Math.max(3, featureEffects.attunement_set),
850
850
  conditionEffects,
851
851
  rollModifiers: featureEffects.rollModifiers,
852
852
  saveOutcomes: featureEffects.saveOutcomes
@@ -9,7 +9,7 @@ import {
9
9
  dedupeResolvedSpells,
10
10
  resolveOriginFeat,
11
11
  stripSlug
12
- } from "../chunk-XQCSGNXE.js";
12
+ } from "../chunk-2VDTW7QO.js";
13
13
  import "../chunk-UXPGW4TI.js";
14
14
  import "../chunk-DPUJDOKV.js";
15
15
  import "../chunk-O4SRD3J5.js";
@@ -19,7 +19,7 @@ import "../chunk-YHYTW5QA.js";
19
19
  import "../chunk-MI7P3NX3.js";
20
20
  import "../chunk-PVCEA4HZ.js";
21
21
  import "../chunk-UBBKSYBY.js";
22
- import "../chunk-JJ46T5XX.js";
22
+ import "../chunk-KPEJMNRD.js";
23
23
  import "../chunk-TOM66P2P.js";
24
24
  import "../chunk-KU3YLF6D.js";
25
25
  import "../chunk-RLGQ5PZZ.js";
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  raceCodec
3
- } from "../chunk-XBQMCEI2.js";
4
- import "../chunk-XGOFP7AQ.js";
5
- import "../chunk-FDBWYMZK.js";
3
+ } from "../chunk-3JOTQW7A.js";
4
+ import "../chunk-N3A5ICBO.js";
5
+ import "../chunk-UMWIPLLM.js";
6
6
  import "../chunk-4U55VNC7.js";
7
- import "../chunk-4FWNK4FD.js";
7
+ import "../chunk-W74BCA7V.js";
8
8
  import "../chunk-WYGD2UGN.js";
9
9
  import "../chunk-YLL2QXY2.js";
10
- import "../chunk-T26ZVCL5.js";
11
- import "../chunk-WPWOHGPI.js";
10
+ import "../chunk-IWRVOCT5.js";
11
+ import "../chunk-X3D6LXUU.js";
12
12
  import "../chunk-UA5KS2PL.js";
13
13
  export {
14
14
  raceCodec
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  parseRace
3
- } from "../chunk-XGOFP7AQ.js";
4
- import "../chunk-FDBWYMZK.js";
3
+ } from "../chunk-N3A5ICBO.js";
4
+ import "../chunk-UMWIPLLM.js";
5
5
  import "../chunk-4U55VNC7.js";
6
- import "../chunk-4FWNK4FD.js";
6
+ import "../chunk-W74BCA7V.js";
7
7
  import "../chunk-WYGD2UGN.js";
8
8
  import "../chunk-YLL2QXY2.js";
9
- import "../chunk-T26ZVCL5.js";
10
- import "../chunk-WPWOHGPI.js";
9
+ import "../chunk-IWRVOCT5.js";
10
+ import "../chunk-X3D6LXUU.js";
11
11
  import "../chunk-UA5KS2PL.js";
12
12
  export {
13
13
  parseRace
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  fixedAsiSchema,
3
3
  raceEntitySchema
4
- } from "../chunk-FDBWYMZK.js";
5
- import "../chunk-4FWNK4FD.js";
4
+ } from "../chunk-UMWIPLLM.js";
5
+ import "../chunk-W74BCA7V.js";
6
6
  import "../chunk-WYGD2UGN.js";
7
7
  import "../chunk-YLL2QXY2.js";
8
- import "../chunk-T26ZVCL5.js";
9
- import "../chunk-WPWOHGPI.js";
8
+ import "../chunk-IWRVOCT5.js";
9
+ import "../chunk-X3D6LXUU.js";
10
10
  import "../chunk-UA5KS2PL.js";
11
11
  export {
12
12
  fixedAsiSchema,
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  choiceSchema
3
- } from "../chunk-T26ZVCL5.js";
4
- import "../chunk-WPWOHGPI.js";
3
+ } from "../chunk-IWRVOCT5.js";
4
+ import "../chunk-X3D6LXUU.js";
5
5
  export {
6
6
  choiceSchema
7
7
  };
@@ -36,6 +36,15 @@ export declare const featureEffectSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
36
36
  }, z.core.$strip>>>;
37
37
  condition: z.ZodOptional<z.ZodString>;
38
38
  subject: z.ZodOptional<z.ZodString>;
39
+ }, z.core.$strip>, z.ZodObject<{
40
+ kind: z.ZodLiteral<"attunement-limit">;
41
+ value: z.ZodNumber;
42
+ scales_at: z.ZodOptional<z.ZodArray<z.ZodObject<{
43
+ level: z.ZodNumber;
44
+ value: z.ZodNumber;
45
+ }, z.core.$strip>>>;
46
+ condition: z.ZodOptional<z.ZodString>;
47
+ subject: z.ZodOptional<z.ZodString>;
39
48
  }, z.core.$strip>, z.ZodObject<{
40
49
  kind: z.ZodLiteral<"sense">;
41
50
  type: z.ZodEnum<{
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  featureEffectSchema
3
- } from "../chunk-WPWOHGPI.js";
3
+ } from "../chunk-X3D6LXUU.js";
4
4
  export {
5
5
  featureEffectSchema
6
6
  };
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  featureObjectSchema,
3
3
  featureSchema
4
- } from "../chunk-4FWNK4FD.js";
4
+ } from "../chunk-W74BCA7V.js";
5
5
  import "../chunk-WYGD2UGN.js";
6
6
  import "../chunk-YLL2QXY2.js";
7
- import "../chunk-T26ZVCL5.js";
8
- import "../chunk-WPWOHGPI.js";
7
+ import "../chunk-IWRVOCT5.js";
8
+ import "../chunk-X3D6LXUU.js";
9
9
  export {
10
10
  featureObjectSchema,
11
11
  featureSchema
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  subclassCodec
3
- } from "../chunk-R3VAKWKW.js";
4
- import "../chunk-HB7XZXDK.js";
5
- import "../chunk-H7KBLR4X.js";
3
+ } from "../chunk-CV5XDJKU.js";
4
+ import "../chunk-KK33PIDN.js";
5
+ import "../chunk-OAXWSVJB.js";
6
6
  import "../chunk-4U55VNC7.js";
7
7
  import "../chunk-23LZLBJK.js";
8
8
  import "../chunk-CJYCVNW2.js";
9
- import "../chunk-4FWNK4FD.js";
9
+ import "../chunk-W74BCA7V.js";
10
10
  import "../chunk-WYGD2UGN.js";
11
11
  import "../chunk-YLL2QXY2.js";
12
- import "../chunk-T26ZVCL5.js";
13
- import "../chunk-WPWOHGPI.js";
12
+ import "../chunk-IWRVOCT5.js";
13
+ import "../chunk-X3D6LXUU.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-HB7XZXDK.js";
4
- import "../chunk-H7KBLR4X.js";
3
+ } from "../chunk-KK33PIDN.js";
4
+ import "../chunk-OAXWSVJB.js";
5
5
  import "../chunk-4U55VNC7.js";
6
6
  import "../chunk-23LZLBJK.js";
7
7
  import "../chunk-CJYCVNW2.js";
8
- import "../chunk-4FWNK4FD.js";
8
+ import "../chunk-W74BCA7V.js";
9
9
  import "../chunk-WYGD2UGN.js";
10
10
  import "../chunk-YLL2QXY2.js";
11
- import "../chunk-T26ZVCL5.js";
12
- import "../chunk-WPWOHGPI.js";
11
+ import "../chunk-IWRVOCT5.js";
12
+ import "../chunk-X3D6LXUU.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-H7KBLR4X.js";
3
+ } from "../chunk-OAXWSVJB.js";
4
4
  import "../chunk-23LZLBJK.js";
5
5
  import "../chunk-CJYCVNW2.js";
6
- import "../chunk-4FWNK4FD.js";
6
+ import "../chunk-W74BCA7V.js";
7
7
  import "../chunk-WYGD2UGN.js";
8
8
  import "../chunk-YLL2QXY2.js";
9
- import "../chunk-T26ZVCL5.js";
10
- import "../chunk-WPWOHGPI.js";
9
+ import "../chunk-IWRVOCT5.js";
10
+ import "../chunk-X3D6LXUU.js";
11
11
  import "../chunk-UA5KS2PL.js";
12
12
  export {
13
13
  subclassEntitySchema
@@ -36,6 +36,13 @@ export type FeatureEffect = ({
36
36
  level: number;
37
37
  value: number;
38
38
  }[];
39
+ } & Qualified) | ({
40
+ kind: "attunement-limit";
41
+ value: number;
42
+ scales_at?: {
43
+ level: number;
44
+ value: number;
45
+ }[];
39
46
  } & Qualified) | ({
40
47
  kind: "sense";
41
48
  type: SenseType;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@archivist-gg/dnd5e",
3
- "version": "0.3.4",
3
+ "version": "0.3.5",
4
4
  "license": "MIT AND CC-BY-4.0",
5
5
  "type": "module",
6
6
  "publishConfig": {