@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
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
id: metamagic.empowered-spell
|
|
2
|
+
type: metamagic
|
|
3
|
+
# Rerolls, once, the lowest damage dice at or below half their faces, up to the Charisma modifier
|
|
4
|
+
# (at least one).
|
|
5
|
+
effects:
|
|
6
|
+
- target: { rolls: [damage.spell] }
|
|
7
|
+
op: rollModifier
|
|
8
|
+
value:
|
|
9
|
+
kind: reroll
|
|
10
|
+
below: 'floor(maxOf(dieOf(roll.item.damage)) / 2)'
|
|
11
|
+
once: true
|
|
12
|
+
count: max(1, abilities.cha.mod)
|
|
13
|
+
when: >-
|
|
14
|
+
has(flags.metamagic) && flags.metamagic == 'empowered' && has(roll.item.damage)
|
|
15
|
+
- target: { choices: [metamagic] }
|
|
16
|
+
op: option
|
|
17
|
+
when: 'has(action.item.damage) && sorcery.left >= 1'
|
|
18
|
+
value:
|
|
19
|
+
id: empowered
|
|
20
|
+
flags: { metamagic: "'empowered'" }
|
|
21
|
+
changes:
|
|
22
|
+
- { type: adjustState, entry: self, key: sorceryPointsSpent, by: 1 }
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
id: metamagic.extended-spell
|
|
2
|
+
type: metamagic
|
|
3
|
+
effects:
|
|
4
|
+
- target: { choices: [metamagic] }
|
|
5
|
+
op: option
|
|
6
|
+
when: 'sorcery.left >= 1'
|
|
7
|
+
value:
|
|
8
|
+
id: extended
|
|
9
|
+
flags: { metamagic: "'extended'" }
|
|
10
|
+
changes:
|
|
11
|
+
- { type: adjustState, entry: self, key: sorceryPointsSpent, by: 1 }
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
id: metamagic.heightened-spell
|
|
2
|
+
type: metamagic
|
|
3
|
+
effects:
|
|
4
|
+
- target: { choices: [metamagic] }
|
|
5
|
+
op: option
|
|
6
|
+
when: 'has(action.item.save) && sorcery.left >= 3'
|
|
7
|
+
value:
|
|
8
|
+
id: heightened
|
|
9
|
+
flags: { metamagic: "'heightened'" }
|
|
10
|
+
changes:
|
|
11
|
+
- { type: adjustState, entry: self, key: sorceryPointsSpent, by: 3 }
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
id: metamagic.quickened-spell
|
|
2
|
+
type: metamagic
|
|
3
|
+
effects:
|
|
4
|
+
- target: { choices: [metamagic] }
|
|
5
|
+
op: option
|
|
6
|
+
when: 'sorcery.left >= 2'
|
|
7
|
+
value:
|
|
8
|
+
id: quickened
|
|
9
|
+
flags: { metamagic: "'quickened'" }
|
|
10
|
+
changes:
|
|
11
|
+
- { type: adjustState, entry: self, key: sorceryPointsSpent, by: 2 }
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
id: metamagic.subtle-spell
|
|
2
|
+
type: metamagic
|
|
3
|
+
effects:
|
|
4
|
+
- target: { choices: [metamagic] }
|
|
5
|
+
op: option
|
|
6
|
+
when: 'sorcery.left >= 1'
|
|
7
|
+
value:
|
|
8
|
+
id: subtle
|
|
9
|
+
flags: { metamagic: "'subtle'" }
|
|
10
|
+
changes:
|
|
11
|
+
- { type: adjustState, entry: self, key: sorceryPointsSpent, by: 1 }
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
id: metamagic.twinned-spell
|
|
2
|
+
type: metamagic
|
|
3
|
+
effects:
|
|
4
|
+
- target: { choices: [metamagic] }
|
|
5
|
+
op: option
|
|
6
|
+
when: 'sorcery.left >= max(1, action.item.level)'
|
|
7
|
+
value:
|
|
8
|
+
id: twinned
|
|
9
|
+
flags: { metamagic: "'twinned'" }
|
|
10
|
+
changes:
|
|
11
|
+
- {
|
|
12
|
+
type: adjustState,
|
|
13
|
+
entry: self,
|
|
14
|
+
key: sorceryPointsSpent,
|
|
15
|
+
by: 'max(1, action.item.level)',
|
|
16
|
+
}
|
|
@@ -3,9 +3,6 @@ type: race
|
|
|
3
3
|
fields:
|
|
4
4
|
speed: 30
|
|
5
5
|
size: medium
|
|
6
|
-
state:
|
|
7
|
-
hellishRebukeUsed: { type: boolean, default: false }
|
|
8
|
-
darknessUsed: { type: boolean, default: false }
|
|
9
6
|
effects:
|
|
10
7
|
- { target: abilities.int.base, op: add, value: 1 }
|
|
11
8
|
- { target: abilities.cha.base, op: add, value: 2 }
|
|
@@ -11,5 +11,16 @@ fields:
|
|
|
11
11
|
material: false
|
|
12
12
|
durationUnit: hour
|
|
13
13
|
durationAmount: 8
|
|
14
|
+
applied: true
|
|
14
15
|
actions:
|
|
15
16
|
- use: cast-spell
|
|
17
|
+
effects:
|
|
18
|
+
- id: ward
|
|
19
|
+
target: { incoming: { fields: [hp.current], tags: [damage] } }
|
|
20
|
+
op: atLeast
|
|
21
|
+
value: -(hp.current + hp.temp - 1)
|
|
22
|
+
when: hp.current > 0 && hp.current + hp.temp + incoming.amount <= 0
|
|
23
|
+
scope: applied
|
|
24
|
+
duration: { amount: 8, unit: hour }
|
|
25
|
+
then:
|
|
26
|
+
- { type: removeEffect, entry: self }
|
|
@@ -4,39 +4,14 @@ fields:
|
|
|
4
4
|
class: classes.ranger
|
|
5
5
|
choices:
|
|
6
6
|
- id: hunters-prey
|
|
7
|
-
from:
|
|
8
|
-
options:
|
|
9
|
-
- id: colossus-slayer
|
|
10
|
-
effects:
|
|
11
|
-
- { target: hunter.colossusSlayer, op: set, value: true }
|
|
12
|
-
- { id: giant-killer }
|
|
13
|
-
- { id: horde-breaker }
|
|
7
|
+
from: { type: hunterTactic, where: "item.feature == 'hunters-prey'" }
|
|
14
8
|
when: self.level >= 3
|
|
15
9
|
- id: defensive-tactics
|
|
16
|
-
from:
|
|
17
|
-
options:
|
|
18
|
-
- { id: escape-the-horde }
|
|
19
|
-
- { id: multiattack-defense }
|
|
20
|
-
- { id: steel-will }
|
|
10
|
+
from: { type: hunterTactic, where: "item.feature == 'defensive-tactics'" }
|
|
21
11
|
when: self.level >= 7
|
|
22
12
|
- id: multiattack
|
|
23
|
-
from:
|
|
24
|
-
options:
|
|
25
|
-
- id: volley
|
|
26
|
-
grants:
|
|
27
|
-
- { item: features.ranger.volley }
|
|
28
|
-
- id: whirlwind-attack
|
|
29
|
-
grants:
|
|
30
|
-
- { item: features.ranger.whirlwind-attack }
|
|
13
|
+
from: { type: hunterTactic, where: "item.feature == 'multiattack'" }
|
|
31
14
|
when: self.level >= 11
|
|
32
15
|
- id: superior-hunters-defense
|
|
33
|
-
from:
|
|
34
|
-
options:
|
|
35
|
-
- id: evasion
|
|
36
|
-
grants:
|
|
37
|
-
- { item: features.evasion }
|
|
38
|
-
- { id: stand-against-the-tide }
|
|
39
|
-
- id: uncanny-dodge
|
|
40
|
-
grants:
|
|
41
|
-
- { item: features.rogue.uncanny-dodge }
|
|
16
|
+
from: { type: hunterTactic, where: "item.feature == 'superior-hunters-defense'" }
|
|
42
17
|
when: self.level >= 15
|
|
@@ -1,9 +1,25 @@
|
|
|
1
1
|
id: traits.infernal-legacy
|
|
2
2
|
type: trait
|
|
3
|
+
state:
|
|
4
|
+
hellishRebukeUsed: { type: boolean, default: false }
|
|
5
|
+
darknessUsed: { type: boolean, default: false }
|
|
3
6
|
# The option casts at 2nd level with Charisma (`slot` and `castAbility`), whatever slot the app
|
|
4
7
|
# passed and even when a class knows the spell. A spell no class knows is also in spells.limited, so
|
|
5
8
|
# no slot is offered for it.
|
|
6
9
|
effects:
|
|
10
|
+
- target: { steps: [rest.long] }
|
|
11
|
+
op: changes
|
|
12
|
+
when: self.hellishRebukeUsed || self.darknessUsed
|
|
13
|
+
value:
|
|
14
|
+
changes:
|
|
15
|
+
- {
|
|
16
|
+
type: setState,
|
|
17
|
+
grant: owner,
|
|
18
|
+
key: hellishRebukeUsed,
|
|
19
|
+
value: false,
|
|
20
|
+
when: self.hellishRebukeUsed,
|
|
21
|
+
}
|
|
22
|
+
- { type: setState, grant: owner, key: darknessUsed, value: false, when: self.darknessUsed }
|
|
7
23
|
- { target: spellcasting.racial.mod, op: set, value: abilities.cha.mod }
|
|
8
24
|
- { target: spellcasting.racial.dc, op: set, value: 8 + proficiency.bonus + abilities.cha.mod }
|
|
9
25
|
- { target: spellcasting.racial.attack, op: set, value: proficiency.bonus + abilities.cha.mod }
|
|
@@ -41,7 +57,10 @@ effects:
|
|
|
41
57
|
id: hellish-rebuke
|
|
42
58
|
flags: { slot: 2, castAbility: "'cha'" }
|
|
43
59
|
changes:
|
|
44
|
-
-
|
|
60
|
+
- type: setState
|
|
61
|
+
grant: owner
|
|
62
|
+
key: hellishRebukeUsed
|
|
63
|
+
value: true
|
|
45
64
|
- target: { choices: [spell-cost] }
|
|
46
65
|
op: option
|
|
47
66
|
when: >-
|
|
@@ -50,7 +69,10 @@ effects:
|
|
|
50
69
|
id: darkness
|
|
51
70
|
flags: { slot: 2, castAbility: "'cha'" }
|
|
52
71
|
changes:
|
|
53
|
-
-
|
|
72
|
+
- type: setState
|
|
73
|
+
grant: owner
|
|
74
|
+
key: darknessUsed
|
|
75
|
+
value: true
|
|
54
76
|
grants:
|
|
55
77
|
- item: spells.thaumaturgy
|
|
56
78
|
- item: spells.hellish-rebuke
|
|
@@ -1,28 +1,29 @@
|
|
|
1
1
|
id: traits.relentless-endurance
|
|
2
2
|
type: trait
|
|
3
|
+
state:
|
|
4
|
+
used: { type: boolean, default: false }
|
|
3
5
|
followUps:
|
|
4
6
|
- id: relentless-endurance
|
|
5
7
|
becomes: hp.current == 0
|
|
6
|
-
when:
|
|
7
|
-
countCopies(has(copy.state.relentlessEnduranceUsed)
|
|
8
|
-
&& !copy.state.relentlessEnduranceUsed) > 0
|
|
8
|
+
when: '!self.used'
|
|
9
9
|
action: relentless-endurance
|
|
10
10
|
actions:
|
|
11
11
|
- id: relentless-endurance
|
|
12
12
|
tags: [feature]
|
|
13
13
|
results: [endured]
|
|
14
|
-
available:
|
|
15
|
-
hp.current == 0 && countCopies(has(copy.state.relentlessEnduranceUsed)
|
|
16
|
-
&& !copy.state.relentlessEnduranceUsed) > 0
|
|
14
|
+
available: hp.current == 0 && !self.used
|
|
17
15
|
steps:
|
|
18
16
|
- id: endure
|
|
19
17
|
kind: changes
|
|
20
18
|
changes:
|
|
21
19
|
- { type: set, field: hp.current, value: 1 }
|
|
22
|
-
- type: setState
|
|
23
|
-
copies: { type: race, where: has(self.relentlessEnduranceUsed) }
|
|
24
|
-
key: relentlessEnduranceUsed
|
|
25
|
-
value: true
|
|
20
|
+
- { type: setState, grant: self, key: used, value: true }
|
|
26
21
|
- id: result
|
|
27
22
|
kind: outcome
|
|
28
23
|
result: "'endured'"
|
|
24
|
+
effects:
|
|
25
|
+
- target: { steps: [rest.long] }
|
|
26
|
+
op: changes
|
|
27
|
+
when: self.used
|
|
28
|
+
value:
|
|
29
|
+
changes: [{ type: setState, grant: owner, key: used, value: false }]
|