@opencharacter/5e-srd-5.1 0.1.0 → 0.3.0
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/README.md +58 -7
- package/content/backgrounds/acolyte.yaml +22 -0
- package/content/classes/barbarian.yaml +57 -0
- package/content/classes/bard.yaml +68 -0
- package/content/classes/cleric.yaml +83 -0
- package/content/classes/druid.yaml +61 -0
- package/content/classes/fighter.yaml +75 -0
- package/content/classes/monk.yaml +47 -0
- package/content/classes/paladin.yaml +76 -0
- package/content/classes/ranger.yaml +69 -0
- package/content/classes/rogue.yaml +59 -0
- package/content/classes/sorcerer.yaml +64 -0
- package/content/classes/warlock.yaml +71 -7
- package/content/classes/wizard.yaml +56 -0
- package/content/features/druid/natural-recovery.yaml +23 -45
- package/content/features/sorcerer/dragon-ancestor.yaml +1 -43
- package/content/features/sorcerer/elemental-affinity.yaml +29 -8
- package/content/features/sorcerer/metamagic.yaml +1 -93
- package/content/features/wizard/arcane-recovery.yaml +22 -67
- package/content/hunter-tactics/colossus-slayer.yaml +4 -0
- package/content/hunter-tactics/escape-the-horde.yaml +4 -0
- package/content/hunter-tactics/evasion.yaml +6 -0
- package/content/hunter-tactics/giant-killer.yaml +4 -0
- package/content/hunter-tactics/horde-breaker.yaml +4 -0
- package/content/hunter-tactics/multiattack-defense.yaml +4 -0
- package/content/hunter-tactics/stand-against-the-tide.yaml +4 -0
- package/content/hunter-tactics/steel-will.yaml +4 -0
- package/content/hunter-tactics/uncanny-dodge.yaml +6 -0
- package/content/hunter-tactics/volley.yaml +6 -0
- package/content/hunter-tactics/whirlwind-attack.yaml +6 -0
- package/content/invocations/bewitching-whispers.yaml +4 -2
- package/content/invocations/dreadful-word.yaml +4 -2
- package/content/invocations/eldritch-spear.yaml +3 -2
- package/content/invocations/minions-of-chaos.yaml +4 -2
- package/content/invocations/mire-the-mind.yaml +4 -2
- package/content/invocations/sculptor-of-flesh.yaml +4 -2
- package/content/invocations/sign-of-ill-omen.yaml +4 -2
- package/content/invocations/thief-of-five-fates.yaml +4 -2
- package/content/magic-items/arrow-of-slaying.yaml +1 -0
- package/content/magic-items/bag-of-holding.yaml +2 -0
- package/content/magic-items/efficient-quiver.yaml +2 -0
- package/content/magic-items/handy-haversack.yaml +2 -0
- package/content/magic-items/holy-avenger.yaml +9 -2
- package/content/magic-items/necklace-of-prayer-beads.yaml +1 -1
- package/content/magic-items/portable-hole.yaml +2 -0
- package/content/magic-items/ring-of-x-ray-vision.yaml +6 -0
- package/content/magic-items/robe-of-the-archmagi.yaml +1 -1
- package/content/magic-items/staff-of-charming.yaml +17 -12
- package/content/magic-items/staff-of-fire.yaml +9 -2
- package/content/magic-items/staff-of-frost.yaml +9 -2
- package/content/magic-items/staff-of-healing.yaml +9 -2
- package/content/magic-items/staff-of-power.yaml +2 -1
- package/content/magic-items/staff-of-swarming-insects.yaml +17 -12
- package/content/magic-items/staff-of-the-magi.yaml +2 -1
- package/content/magic-items/staff-of-the-python.yaml +7 -2
- package/content/magic-items/staff-of-the-woodlands.yaml +2 -1
- package/content/magic-items/staff-of-withering.yaml +9 -2
- package/content/metamagic/careful-spell.yaml +11 -0
- package/content/metamagic/distant-spell.yaml +11 -0
- package/content/metamagic/empowered-spell.yaml +22 -0
- package/content/metamagic/extended-spell.yaml +11 -0
- package/content/metamagic/heightened-spell.yaml +11 -0
- package/content/metamagic/quickened-spell.yaml +11 -0
- package/content/metamagic/subtle-spell.yaml +11 -0
- package/content/metamagic/twinned-spell.yaml +16 -0
- package/content/races/half-orc.yaml +0 -2
- package/content/races/tiefling.yaml +0 -3
- package/content/spells/death-ward.yaml +11 -0
- package/content/spells/eldritch-blast.yaml +1 -1
- package/content/subclasses/hunter.yaml +4 -29
- package/content/templates/eldritch-spear.yaml +4 -0
- package/content/traits/infernal-legacy.yaml +24 -2
- package/content/traits/relentless-endurance.yaml +11 -10
- package/content/weapons/javelin.yaml +1 -1
- package/dist/i18n/en.js +1 -1
- package/dist/i18n/en.json +301 -224
- package/dist/index.js +1 -1
- package/dist/release.json +6564 -7424
- package/i18n/en/monster-rules.yaml +1 -1
- package/i18n/en/type-fields.yaml +7 -0
- package/i18n/en.yaml +292 -246
- package/pack.yaml +2 -2
- package/package.json +2 -2
- package/rules/advancement.yaml +67 -38
- package/rules/checks.yaml +1 -1
- package/rules/classes.yaml +25 -4
- package/rules/combat.yaml +8 -2
- package/rules/conditions.yaml +1 -0
- package/rules/content-types.yaml +64 -4
- package/rules/core.yaml +6 -16
- package/rules/creation.yaml +26 -36
- package/rules/display.yaml +20 -11
- package/rules/equipment.yaml +13 -16
- package/rules/magic-items.yaml +19 -1
- package/rules/monsters.yaml +8 -2
- package/rules/rest.yaml +2 -73
- package/rules/spellcasting.yaml +1 -0
- package/rules/starting-equipment.yaml +17 -646
- package/rules/tags.yaml +12 -12
- package/upgrades/0.1.0-to-0.2.0.yaml +62 -0
- package/upgrades/0.2.0-to-0.3.0.yaml +152 -0
|
@@ -3,79 +3,34 @@ type: feature
|
|
|
3
3
|
actions:
|
|
4
4
|
- id: arcane-recovery
|
|
5
5
|
tags: [feature]
|
|
6
|
-
results: [
|
|
7
|
-
available:
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
level3: { type: integer, optional: true }
|
|
12
|
-
level4: { type: integer, optional: true }
|
|
13
|
-
level5: { type: integer, optional: true }
|
|
6
|
+
results: [recovered]
|
|
7
|
+
available: >-
|
|
8
|
+
!self.arcaneRecoveryUsed
|
|
9
|
+
&& spellSlots.level1.used + spellSlots.level2.used + spellSlots.level3.used
|
|
10
|
+
+ spellSlots.level4.used + spellSlots.level5.used > 0
|
|
14
11
|
steps:
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
- id: tooMany
|
|
32
|
-
kind: outcome
|
|
33
|
-
when: >-
|
|
34
|
-
flags.levels == 0 || flags.levels > ceil(self.level / 2)
|
|
35
|
-
|| flags.level1 < 0 || flags.level1 > spellSlots.level1.used
|
|
36
|
-
|| flags.level2 < 0 || flags.level2 > spellSlots.level2.used
|
|
37
|
-
|| flags.level3 < 0 || flags.level3 > spellSlots.level3.used
|
|
38
|
-
|| flags.level4 < 0 || flags.level4 > spellSlots.level4.used
|
|
39
|
-
|| flags.level5 < 0 || flags.level5 > spellSlots.level5.used
|
|
40
|
-
result: "'too-many'"
|
|
41
|
-
data:
|
|
42
|
-
maxLevels: ceil(self.level / 2)
|
|
12
|
+
# One spent slot per pick, of 5th level or lower, while the levels fit under half the
|
|
13
|
+
# wizard level.
|
|
14
|
+
- id: slots
|
|
15
|
+
kind: choice
|
|
16
|
+
options:
|
|
17
|
+
values: [1, 2, 3, 4, 5]
|
|
18
|
+
where: >-
|
|
19
|
+
countList(steps.slots.values, x == value)
|
|
20
|
+
< fieldOf('spellSlots.level{slot}.used', value)
|
|
21
|
+
&& sumList(steps.slots.values, x) + value <= ceil(self.level / 2)
|
|
22
|
+
repeat: { max: ceil(self.level / 2), min: 1 }
|
|
23
|
+
prefer: value
|
|
24
|
+
changes:
|
|
25
|
+
- type: adjust
|
|
26
|
+
field: { formula: "'spellSlots.level' + string(picked.value) + '.used'" }
|
|
27
|
+
by: -1
|
|
43
28
|
- id: recover
|
|
44
29
|
kind: changes
|
|
45
30
|
changes:
|
|
46
31
|
- { type: setState, entry: self, key: arcaneRecoveryUsed, value: true }
|
|
47
|
-
- {
|
|
48
|
-
type: adjust,
|
|
49
|
-
field: spellSlots.level1.used,
|
|
50
|
-
by: -flags.level1,
|
|
51
|
-
when: flags.level1 > 0,
|
|
52
|
-
}
|
|
53
|
-
- {
|
|
54
|
-
type: adjust,
|
|
55
|
-
field: spellSlots.level2.used,
|
|
56
|
-
by: -flags.level2,
|
|
57
|
-
when: flags.level2 > 0,
|
|
58
|
-
}
|
|
59
|
-
- {
|
|
60
|
-
type: adjust,
|
|
61
|
-
field: spellSlots.level3.used,
|
|
62
|
-
by: -flags.level3,
|
|
63
|
-
when: flags.level3 > 0,
|
|
64
|
-
}
|
|
65
|
-
- {
|
|
66
|
-
type: adjust,
|
|
67
|
-
field: spellSlots.level4.used,
|
|
68
|
-
by: -flags.level4,
|
|
69
|
-
when: flags.level4 > 0,
|
|
70
|
-
}
|
|
71
|
-
- {
|
|
72
|
-
type: adjust,
|
|
73
|
-
field: spellSlots.level5.used,
|
|
74
|
-
by: -flags.level5,
|
|
75
|
-
when: flags.level5 > 0,
|
|
76
|
-
}
|
|
77
32
|
- id: result
|
|
78
33
|
kind: outcome
|
|
79
34
|
result: "'recovered'"
|
|
80
35
|
data:
|
|
81
|
-
levels:
|
|
36
|
+
levels: sumList(steps.slots.values, x)
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
id: invocations.bewitching-whispers
|
|
2
2
|
type: invocation
|
|
3
|
+
state:
|
|
4
|
+
used: { type: boolean, default: false }
|
|
3
5
|
prerequisites:
|
|
4
6
|
- id: level
|
|
5
7
|
when: self.level >= 7
|
|
@@ -12,9 +14,9 @@ effects:
|
|
|
12
14
|
op: option
|
|
13
15
|
when: >-
|
|
14
16
|
action.item.id == @spells.compulsion && flags.slot == pactSlots.level
|
|
15
|
-
&& pactSlots.used < pactSlots.max && !self.
|
|
17
|
+
&& pactSlots.used < pactSlots.max && !self.used
|
|
16
18
|
value:
|
|
17
19
|
id: invocation
|
|
18
20
|
changes:
|
|
19
21
|
- { type: adjust, field: pactSlots.used, by: 1 }
|
|
20
|
-
- { type: setState,
|
|
22
|
+
- { type: setState, pick: owner, key: used, value: true }
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
id: invocations.dreadful-word
|
|
2
2
|
type: invocation
|
|
3
|
+
state:
|
|
4
|
+
used: { type: boolean, default: false }
|
|
3
5
|
prerequisites:
|
|
4
6
|
- id: level
|
|
5
7
|
when: self.level >= 7
|
|
@@ -12,9 +14,9 @@ effects:
|
|
|
12
14
|
op: option
|
|
13
15
|
when: >-
|
|
14
16
|
action.item.id == @spells.confusion && flags.slot == pactSlots.level
|
|
15
|
-
&& pactSlots.used < pactSlots.max && !self.
|
|
17
|
+
&& pactSlots.used < pactSlots.max && !self.used
|
|
16
18
|
value:
|
|
17
19
|
id: invocation
|
|
18
20
|
changes:
|
|
19
21
|
- { type: adjust, field: pactSlots.used, by: 1 }
|
|
20
|
-
- { type: setState,
|
|
22
|
+
- { type: setState, pick: owner, key: used, value: true }
|
|
@@ -3,5 +3,6 @@ type: invocation
|
|
|
3
3
|
prerequisites:
|
|
4
4
|
- id: spell
|
|
5
5
|
when: '@spells.eldritch-blast in spells.warlock'
|
|
6
|
-
|
|
7
|
-
-
|
|
6
|
+
keepsTemplates:
|
|
7
|
+
- template: templates.eldritch-spear
|
|
8
|
+
content: { type: spell, where: 'item.id == @spells.eldritch-blast' }
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
id: invocations.minions-of-chaos
|
|
2
2
|
type: invocation
|
|
3
|
+
state:
|
|
4
|
+
used: { type: boolean, default: false }
|
|
3
5
|
prerequisites:
|
|
4
6
|
- id: level
|
|
5
7
|
when: self.level >= 9
|
|
@@ -12,9 +14,9 @@ effects:
|
|
|
12
14
|
op: option
|
|
13
15
|
when: >-
|
|
14
16
|
action.item.id == @spells.conjure-elemental && flags.slot == pactSlots.level
|
|
15
|
-
&& pactSlots.used < pactSlots.max && !self.
|
|
17
|
+
&& pactSlots.used < pactSlots.max && !self.used
|
|
16
18
|
value:
|
|
17
19
|
id: invocation
|
|
18
20
|
changes:
|
|
19
21
|
- { type: adjust, field: pactSlots.used, by: 1 }
|
|
20
|
-
- { type: setState,
|
|
22
|
+
- { type: setState, pick: owner, key: used, value: true }
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
id: invocations.mire-the-mind
|
|
2
2
|
type: invocation
|
|
3
|
+
state:
|
|
4
|
+
used: { type: boolean, default: false }
|
|
3
5
|
prerequisites:
|
|
4
6
|
- id: level
|
|
5
7
|
when: self.level >= 5
|
|
@@ -12,9 +14,9 @@ effects:
|
|
|
12
14
|
op: option
|
|
13
15
|
when: >-
|
|
14
16
|
action.item.id == @spells.slow && flags.slot == pactSlots.level
|
|
15
|
-
&& pactSlots.used < pactSlots.max && !self.
|
|
17
|
+
&& pactSlots.used < pactSlots.max && !self.used
|
|
16
18
|
value:
|
|
17
19
|
id: invocation
|
|
18
20
|
changes:
|
|
19
21
|
- { type: adjust, field: pactSlots.used, by: 1 }
|
|
20
|
-
- { type: setState,
|
|
22
|
+
- { type: setState, pick: owner, key: used, value: true }
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
id: invocations.sculptor-of-flesh
|
|
2
2
|
type: invocation
|
|
3
|
+
state:
|
|
4
|
+
used: { type: boolean, default: false }
|
|
3
5
|
prerequisites:
|
|
4
6
|
- id: level
|
|
5
7
|
when: self.level >= 7
|
|
@@ -12,9 +14,9 @@ effects:
|
|
|
12
14
|
op: option
|
|
13
15
|
when: >-
|
|
14
16
|
action.item.id == @spells.polymorph && flags.slot == pactSlots.level
|
|
15
|
-
&& pactSlots.used < pactSlots.max && !self.
|
|
17
|
+
&& pactSlots.used < pactSlots.max && !self.used
|
|
16
18
|
value:
|
|
17
19
|
id: invocation
|
|
18
20
|
changes:
|
|
19
21
|
- { type: adjust, field: pactSlots.used, by: 1 }
|
|
20
|
-
- { type: setState,
|
|
22
|
+
- { type: setState, pick: owner, key: used, value: true }
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
id: invocations.sign-of-ill-omen
|
|
2
2
|
type: invocation
|
|
3
|
+
state:
|
|
4
|
+
used: { type: boolean, default: false }
|
|
3
5
|
prerequisites:
|
|
4
6
|
- id: level
|
|
5
7
|
when: self.level >= 5
|
|
@@ -12,9 +14,9 @@ effects:
|
|
|
12
14
|
op: option
|
|
13
15
|
when: >-
|
|
14
16
|
action.item.id == @spells.bestow-curse && flags.slot == pactSlots.level
|
|
15
|
-
&& pactSlots.used < pactSlots.max && !self.
|
|
17
|
+
&& pactSlots.used < pactSlots.max && !self.used
|
|
16
18
|
value:
|
|
17
19
|
id: invocation
|
|
18
20
|
changes:
|
|
19
21
|
- { type: adjust, field: pactSlots.used, by: 1 }
|
|
20
|
-
- { type: setState,
|
|
22
|
+
- { type: setState, pick: owner, key: used, value: true }
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
id: invocations.thief-of-five-fates
|
|
2
2
|
type: invocation
|
|
3
|
+
state:
|
|
4
|
+
used: { type: boolean, default: false }
|
|
3
5
|
grants:
|
|
4
6
|
- { item: spells.bane }
|
|
5
7
|
effects:
|
|
@@ -9,9 +11,9 @@ effects:
|
|
|
9
11
|
op: option
|
|
10
12
|
when: >-
|
|
11
13
|
action.item.id == @spells.bane && flags.slot == pactSlots.level
|
|
12
|
-
&& pactSlots.used < pactSlots.max && !self.
|
|
14
|
+
&& pactSlots.used < pactSlots.max && !self.used
|
|
13
15
|
value:
|
|
14
16
|
id: invocation
|
|
15
17
|
changes:
|
|
16
18
|
- { type: adjust, field: pactSlots.used, by: 1 }
|
|
17
|
-
- { type: setState,
|
|
19
|
+
- { type: setState, pick: owner, key: used, value: true }
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
id: magic-items.holy-avenger
|
|
2
2
|
type: template
|
|
3
|
-
tags: [magic
|
|
3
|
+
tags: [magic]
|
|
4
4
|
appliesTo: { type: weapon, where: "'sword' in item.tags" }
|
|
5
|
-
fields:
|
|
5
|
+
fields:
|
|
6
|
+
{
|
|
7
|
+
attunementClasses: [classes.paladin],
|
|
8
|
+
rarity: legendary,
|
|
9
|
+
requiresAttunement: true,
|
|
10
|
+
attackBonus: 3,
|
|
11
|
+
damageBonus: 3,
|
|
12
|
+
}
|
|
6
13
|
effects:
|
|
7
14
|
- target: { rolls: [damage], from: self }
|
|
8
15
|
op: add
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
id: magic-items.necklace-of-prayer-beads
|
|
2
2
|
type: magicItem
|
|
3
|
-
tags: [attunement.cleric, attunement.druid, attunement.paladin]
|
|
4
3
|
fields:
|
|
4
|
+
attunementClasses: [classes.cleric, classes.druid, classes.paladin]
|
|
5
5
|
category: wondrous-item
|
|
6
6
|
rarity: rare
|
|
7
7
|
requiresAttunement: true
|
|
@@ -28,3 +28,9 @@ actions:
|
|
|
28
28
|
- id: result
|
|
29
29
|
kind: outcome
|
|
30
30
|
result: "has(steps.save) && steps.save.result == 'failure' ? 'exhausted' : 'seeing'"
|
|
31
|
+
effects:
|
|
32
|
+
- target: { steps: [rest.long] }
|
|
33
|
+
op: changes
|
|
34
|
+
when: self.used
|
|
35
|
+
value:
|
|
36
|
+
changes: [{ type: setState, entry: self, key: used, value: false }]
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
id: magic-items.robe-of-the-archmagi
|
|
2
2
|
type: magicItem
|
|
3
|
-
tags: [attunement.sorcerer, attunement.warlock, attunement.wizard]
|
|
4
3
|
fields:
|
|
4
|
+
attunementClasses: [classes.sorcerer, classes.warlock, classes.wizard]
|
|
5
5
|
category: wondrous-item
|
|
6
6
|
rarity: legendary
|
|
7
7
|
requiresAttunement: true
|
|
@@ -1,18 +1,23 @@
|
|
|
1
1
|
id: magic-items.staff-of-charming
|
|
2
2
|
type: template
|
|
3
|
-
tags:
|
|
4
|
-
[
|
|
5
|
-
magic,
|
|
6
|
-
staff,
|
|
7
|
-
attunement.bard,
|
|
8
|
-
attunement.cleric,
|
|
9
|
-
attunement.druid,
|
|
10
|
-
attunement.sorcerer,
|
|
11
|
-
attunement.warlock,
|
|
12
|
-
attunement.wizard,
|
|
13
|
-
]
|
|
3
|
+
tags: [magic, staff]
|
|
14
4
|
appliesTo: { type: weapon, where: 'item.id == @weapons.quarterstaff' }
|
|
15
|
-
fields:
|
|
5
|
+
fields:
|
|
6
|
+
{
|
|
7
|
+
attunementClasses:
|
|
8
|
+
[
|
|
9
|
+
classes.bard,
|
|
10
|
+
classes.cleric,
|
|
11
|
+
classes.druid,
|
|
12
|
+
classes.sorcerer,
|
|
13
|
+
classes.warlock,
|
|
14
|
+
classes.wizard,
|
|
15
|
+
],
|
|
16
|
+
rarity: rare,
|
|
17
|
+
requiresAttunement: true,
|
|
18
|
+
maxCharges: 10,
|
|
19
|
+
recharge: 1d8 + 2,
|
|
20
|
+
}
|
|
16
21
|
state:
|
|
17
22
|
charges: { type: integer, min: 0, max: item.maxCharges, default: item.maxCharges }
|
|
18
23
|
grants:
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
id: magic-items.staff-of-fire
|
|
2
2
|
type: template
|
|
3
|
-
tags: [magic, staff
|
|
3
|
+
tags: [magic, staff]
|
|
4
4
|
appliesTo: { type: weapon, where: 'item.id == @weapons.quarterstaff' }
|
|
5
|
-
fields:
|
|
5
|
+
fields:
|
|
6
|
+
{
|
|
7
|
+
attunementClasses: [classes.druid, classes.sorcerer, classes.warlock, classes.wizard],
|
|
8
|
+
rarity: very-rare,
|
|
9
|
+
requiresAttunement: true,
|
|
10
|
+
maxCharges: 10,
|
|
11
|
+
recharge: 1d6 + 4,
|
|
12
|
+
}
|
|
6
13
|
state:
|
|
7
14
|
charges: { type: integer, min: 0, max: item.maxCharges, default: item.maxCharges }
|
|
8
15
|
grants:
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
id: magic-items.staff-of-frost
|
|
2
2
|
type: template
|
|
3
|
-
tags: [magic, staff
|
|
3
|
+
tags: [magic, staff]
|
|
4
4
|
appliesTo: { type: weapon, where: 'item.id == @weapons.quarterstaff' }
|
|
5
|
-
fields:
|
|
5
|
+
fields:
|
|
6
|
+
{
|
|
7
|
+
attunementClasses: [classes.druid, classes.sorcerer, classes.warlock, classes.wizard],
|
|
8
|
+
rarity: very-rare,
|
|
9
|
+
requiresAttunement: true,
|
|
10
|
+
maxCharges: 10,
|
|
11
|
+
recharge: 1d6 + 4,
|
|
12
|
+
}
|
|
6
13
|
state:
|
|
7
14
|
charges: { type: integer, min: 0, max: item.maxCharges, default: item.maxCharges }
|
|
8
15
|
grants:
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
id: magic-items.staff-of-healing
|
|
2
2
|
type: template
|
|
3
|
-
tags: [magic, staff
|
|
3
|
+
tags: [magic, staff]
|
|
4
4
|
appliesTo: { type: weapon, where: 'item.id == @weapons.quarterstaff' }
|
|
5
|
-
fields:
|
|
5
|
+
fields:
|
|
6
|
+
{
|
|
7
|
+
attunementClasses: [classes.bard, classes.cleric, classes.druid],
|
|
8
|
+
rarity: rare,
|
|
9
|
+
requiresAttunement: true,
|
|
10
|
+
maxCharges: 10,
|
|
11
|
+
recharge: 1d6 + 4,
|
|
12
|
+
}
|
|
6
13
|
state:
|
|
7
14
|
charges: { type: integer, min: 0, max: item.maxCharges, default: item.maxCharges }
|
|
8
15
|
grants:
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
id: magic-items.staff-of-power
|
|
2
2
|
type: template
|
|
3
|
-
tags: [magic, staff
|
|
3
|
+
tags: [magic, staff]
|
|
4
4
|
appliesTo: { type: weapon, where: 'item.id == @weapons.quarterstaff' }
|
|
5
5
|
fields:
|
|
6
6
|
{
|
|
7
|
+
attunementClasses: [classes.sorcerer, classes.warlock, classes.wizard],
|
|
7
8
|
rarity: very-rare,
|
|
8
9
|
requiresAttunement: true,
|
|
9
10
|
maxCharges: 20,
|
|
@@ -1,18 +1,23 @@
|
|
|
1
1
|
id: magic-items.staff-of-swarming-insects
|
|
2
2
|
type: template
|
|
3
|
-
tags:
|
|
4
|
-
[
|
|
5
|
-
magic,
|
|
6
|
-
staff,
|
|
7
|
-
attunement.bard,
|
|
8
|
-
attunement.cleric,
|
|
9
|
-
attunement.druid,
|
|
10
|
-
attunement.sorcerer,
|
|
11
|
-
attunement.warlock,
|
|
12
|
-
attunement.wizard,
|
|
13
|
-
]
|
|
3
|
+
tags: [magic, staff]
|
|
14
4
|
appliesTo: { type: weapon, where: 'item.id == @weapons.quarterstaff' }
|
|
15
|
-
fields:
|
|
5
|
+
fields:
|
|
6
|
+
{
|
|
7
|
+
attunementClasses:
|
|
8
|
+
[
|
|
9
|
+
classes.bard,
|
|
10
|
+
classes.cleric,
|
|
11
|
+
classes.druid,
|
|
12
|
+
classes.sorcerer,
|
|
13
|
+
classes.warlock,
|
|
14
|
+
classes.wizard,
|
|
15
|
+
],
|
|
16
|
+
rarity: rare,
|
|
17
|
+
requiresAttunement: true,
|
|
18
|
+
maxCharges: 10,
|
|
19
|
+
recharge: 1d6 + 4,
|
|
20
|
+
}
|
|
16
21
|
state:
|
|
17
22
|
charges: { type: integer, min: 0, max: item.maxCharges, default: item.maxCharges }
|
|
18
23
|
grants:
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
id: magic-items.staff-of-the-magi
|
|
2
2
|
type: template
|
|
3
|
-
tags: [magic, staff
|
|
3
|
+
tags: [magic, staff]
|
|
4
4
|
appliesTo: { type: weapon, where: 'item.id == @weapons.quarterstaff' }
|
|
5
5
|
fields:
|
|
6
6
|
{
|
|
7
|
+
attunementClasses: [classes.sorcerer, classes.warlock, classes.wizard],
|
|
7
8
|
rarity: legendary,
|
|
8
9
|
requiresAttunement: true,
|
|
9
10
|
maxCharges: 50,
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
id: magic-items.staff-of-the-python
|
|
2
2
|
type: template
|
|
3
|
-
tags: [magic, staff
|
|
3
|
+
tags: [magic, staff]
|
|
4
4
|
appliesTo: { type: weapon, where: 'item.id == @weapons.quarterstaff' }
|
|
5
|
-
fields:
|
|
5
|
+
fields:
|
|
6
|
+
{
|
|
7
|
+
attunementClasses: [classes.cleric, classes.druid, classes.warlock],
|
|
8
|
+
rarity: uncommon,
|
|
9
|
+
requiresAttunement: true,
|
|
10
|
+
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
id: magic-items.staff-of-the-woodlands
|
|
2
2
|
type: template
|
|
3
|
-
tags: [magic, staff
|
|
3
|
+
tags: [magic, staff]
|
|
4
4
|
appliesTo: { type: weapon, where: 'item.id == @weapons.quarterstaff' }
|
|
5
5
|
fields:
|
|
6
6
|
{
|
|
7
|
+
attunementClasses: [classes.druid],
|
|
7
8
|
rarity: rare,
|
|
8
9
|
requiresAttunement: true,
|
|
9
10
|
maxCharges: 10,
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
id: magic-items.staff-of-withering
|
|
2
2
|
type: template
|
|
3
|
-
tags: [magic, staff
|
|
3
|
+
tags: [magic, staff]
|
|
4
4
|
appliesTo: { type: weapon, where: 'item.id == @weapons.quarterstaff' }
|
|
5
|
-
fields:
|
|
5
|
+
fields:
|
|
6
|
+
{
|
|
7
|
+
attunementClasses: [classes.cleric, classes.druid, classes.warlock],
|
|
8
|
+
rarity: rare,
|
|
9
|
+
requiresAttunement: true,
|
|
10
|
+
maxCharges: 3,
|
|
11
|
+
recharge: 1d3,
|
|
12
|
+
}
|
|
6
13
|
state:
|
|
7
14
|
charges: { type: integer, min: 0, max: item.maxCharges, default: item.maxCharges }
|
|
8
15
|
effects:
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
id: metamagic.careful-spell
|
|
2
|
+
type: metamagic
|
|
3
|
+
effects:
|
|
4
|
+
- target: { choices: [metamagic] }
|
|
5
|
+
op: option
|
|
6
|
+
when: 'has(action.item.save) && sorcery.left >= 1'
|
|
7
|
+
value:
|
|
8
|
+
id: careful
|
|
9
|
+
flags: { metamagic: "'careful'" }
|
|
10
|
+
changes:
|
|
11
|
+
- { type: adjustState, entry: self, key: sorceryPointsSpent, by: 1 }
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
id: metamagic.distant-spell
|
|
2
|
+
type: metamagic
|
|
3
|
+
effects:
|
|
4
|
+
- target: { choices: [metamagic] }
|
|
5
|
+
op: option
|
|
6
|
+
when: 'sorcery.left >= 1'
|
|
7
|
+
value:
|
|
8
|
+
id: distant
|
|
9
|
+
flags: { metamagic: "'distant'" }
|
|
10
|
+
changes:
|
|
11
|
+
- { type: adjustState, entry: self, key: sorceryPointsSpent, by: 1 }
|