@opencharacter/orc-2e 0.2.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.
Files changed (288) hide show
  1. package/README.md +69 -12
  2. package/content/classes/alchemist/fields/bomber.yaml +1 -1
  3. package/content/classes/alchemist/fields/chirurgeon.yaml +1 -1
  4. package/content/classes/alchemist/fields/mutagenist.yaml +1 -1
  5. package/content/classes/alchemist/fields/toxicologist.yaml +1 -1
  6. package/content/classes/alchemist.yaml +2 -34
  7. package/content/classes/barbarian/animals/ape.yaml +1 -1
  8. package/content/classes/barbarian/animals/bear.yaml +1 -1
  9. package/content/classes/barbarian/animals/bull.yaml +1 -1
  10. package/content/classes/barbarian/animals/cat.yaml +1 -1
  11. package/content/classes/barbarian/animals/deer.yaml +1 -1
  12. package/content/classes/barbarian/animals/frog.yaml +1 -1
  13. package/content/classes/barbarian/animals/shark.yaml +1 -1
  14. package/content/classes/barbarian/animals/snake.yaml +1 -1
  15. package/content/classes/barbarian/animals/wolf.yaml +1 -1
  16. package/content/classes/barbarian/instincts/animal.yaml +2 -14
  17. package/content/classes/barbarian/instincts/dragon.yaml +1 -2
  18. package/content/classes/barbarian/instincts/fury.yaml +1 -1
  19. package/content/classes/barbarian/instincts/giant.yaml +1 -1
  20. package/content/classes/barbarian/instincts/spirit.yaml +1 -2
  21. package/content/classes/barbarian/instincts/superstition.yaml +1 -1
  22. package/content/classes/barbarian/raging.yaml +3 -1
  23. package/content/classes/barbarian.yaml +2 -36
  24. package/content/classes/bard/muses/enigma.yaml +1 -1
  25. package/content/classes/bard/muses/maestro.yaml +1 -1
  26. package/content/classes/bard/muses/polymath.yaml +1 -1
  27. package/content/classes/bard/muses/warrior.yaml +1 -1
  28. package/content/classes/bard.yaml +2 -34
  29. package/content/classes/champion/causes/desecration.yaml +1 -1
  30. package/content/classes/champion/causes/grandeur.yaml +1 -1
  31. package/content/classes/champion/causes/iniquity.yaml +1 -1
  32. package/content/classes/champion/causes/justice.yaml +1 -1
  33. package/content/classes/champion/causes/liberation.yaml +1 -1
  34. package/content/classes/champion/causes/obedience.yaml +1 -1
  35. package/content/classes/champion/causes/redemption.yaml +1 -1
  36. package/content/classes/champion.yaml +2 -37
  37. package/content/classes/cleric/doctrines/cloistered-cleric.yaml +1 -1
  38. package/content/classes/cleric/doctrines/warpriest.yaml +1 -1
  39. package/content/classes/cleric.yaml +2 -28
  40. package/content/classes/druid/orders/animal.yaml +1 -1
  41. package/content/classes/druid/orders/leaf.yaml +1 -1
  42. package/content/classes/druid/orders/storm.yaml +1 -1
  43. package/content/classes/druid/orders/untamed.yaml +1 -1
  44. package/content/classes/druid.yaml +2 -34
  45. package/content/classes/fighter.yaml +1 -26
  46. package/content/classes/investigator.yaml +1 -26
  47. package/content/classes/monk.yaml +1 -26
  48. package/content/classes/oracle/mysteries/ancestors.yaml +3 -1
  49. package/content/classes/oracle/mysteries/battle.yaml +5 -1
  50. package/content/classes/oracle/mysteries/bones.yaml +3 -1
  51. package/content/classes/oracle/mysteries/cosmos.yaml +3 -1
  52. package/content/classes/oracle/mysteries/flames.yaml +3 -1
  53. package/content/classes/oracle/mysteries/life.yaml +4 -1
  54. package/content/classes/oracle/mysteries/lore.yaml +5 -1
  55. package/content/classes/oracle/mysteries/tempest.yaml +3 -1
  56. package/content/classes/oracle.yaml +2 -38
  57. package/content/classes/ranger/edges/flurry.yaml +1 -1
  58. package/content/classes/ranger/edges/outwit.yaml +1 -1
  59. package/content/classes/ranger/edges/precision.yaml +1 -1
  60. package/content/classes/ranger.yaml +2 -29
  61. package/content/classes/rogue/rackets/mastermind.yaml +1 -1
  62. package/content/classes/rogue/rackets/ruffian.yaml +1 -1
  63. package/content/classes/rogue/rackets/scoundrel.yaml +1 -1
  64. package/content/classes/rogue/rackets/thief.yaml +1 -1
  65. package/content/classes/rogue.yaml +2 -34
  66. package/content/classes/sorcerer/bloodlines/aberrant.yaml +1 -1
  67. package/content/classes/sorcerer/bloodlines/angelic.yaml +1 -1
  68. package/content/classes/sorcerer/bloodlines/demonic.yaml +1 -1
  69. package/content/classes/sorcerer/bloodlines/diabolic.yaml +1 -1
  70. package/content/classes/sorcerer/bloodlines/draconic.yaml +1 -1
  71. package/content/classes/sorcerer/bloodlines/elemental.yaml +1 -1
  72. package/content/classes/sorcerer/bloodlines/fey.yaml +1 -1
  73. package/content/classes/sorcerer/bloodlines/hag.yaml +1 -1
  74. package/content/classes/sorcerer/bloodlines/imperial.yaml +1 -1
  75. package/content/classes/sorcerer/bloodlines/undead.yaml +1 -1
  76. package/content/classes/sorcerer.yaml +2 -40
  77. package/content/classes/swashbuckler.yaml +1 -26
  78. package/content/classes/witch/patrons/faiths-flamekeeper.yaml +1 -1
  79. package/content/classes/witch/patrons/inscribed-one.yaml +1 -1
  80. package/content/classes/witch/patrons/resentment.yaml +1 -1
  81. package/content/classes/witch/patrons/silence-in-snow.yaml +1 -1
  82. package/content/classes/witch/patrons/spinner-of-threads.yaml +1 -1
  83. package/content/classes/witch/patrons/starless-shadow.yaml +1 -1
  84. package/content/classes/witch/patrons/wilding-steward.yaml +1 -1
  85. package/content/classes/witch.yaml +2 -37
  86. package/content/classes/wizard/schools/ars-grammatica.yaml +1 -1
  87. package/content/classes/wizard/schools/battle-magic.yaml +1 -1
  88. package/content/classes/wizard/schools/boundary.yaml +1 -1
  89. package/content/classes/wizard/schools/civic-wizardry.yaml +1 -1
  90. package/content/classes/wizard/schools/mentalism.yaml +1 -1
  91. package/content/classes/wizard/schools/protean-form.yaml +1 -1
  92. package/content/classes/wizard/schools/unified-magical-theory.yaml +1 -1
  93. package/content/classes/wizard/theses/experimental-spellshaping.yaml +1 -1
  94. package/content/classes/wizard/theses/improved-familiar-attunement.yaml +1 -1
  95. package/content/classes/wizard/theses/spell-blending.yaml +1 -1
  96. package/content/classes/wizard/theses/spell-substitution.yaml +1 -1
  97. package/content/classes/wizard/theses/staff-nexus.yaml +1 -1
  98. package/content/classes/wizard.yaml +3 -46
  99. package/content/domains/advanced/air.yaml +7 -0
  100. package/content/domains/advanced/ambition.yaml +7 -0
  101. package/content/domains/advanced/cities.yaml +7 -0
  102. package/content/domains/advanced/confidence.yaml +7 -0
  103. package/content/domains/advanced/creation.yaml +7 -0
  104. package/content/domains/advanced/darkness.yaml +7 -0
  105. package/content/domains/advanced/death.yaml +7 -0
  106. package/content/domains/advanced/destruction.yaml +7 -0
  107. package/content/domains/advanced/dreams.yaml +7 -0
  108. package/content/domains/advanced/earth.yaml +7 -0
  109. package/content/domains/advanced/family.yaml +7 -0
  110. package/content/domains/advanced/fate.yaml +7 -0
  111. package/content/domains/advanced/fire.yaml +7 -0
  112. package/content/domains/advanced/freedom.yaml +7 -0
  113. package/content/domains/advanced/healing.yaml +7 -0
  114. package/content/domains/advanced/indulgence.yaml +7 -0
  115. package/content/domains/advanced/knowledge.yaml +7 -0
  116. package/content/domains/advanced/luck.yaml +7 -0
  117. package/content/domains/advanced/magic.yaml +7 -0
  118. package/content/domains/advanced/might.yaml +7 -0
  119. package/content/domains/advanced/moon.yaml +7 -0
  120. package/content/domains/advanced/nature.yaml +7 -0
  121. package/content/domains/advanced/nightmares.yaml +7 -0
  122. package/content/domains/advanced/pain.yaml +7 -0
  123. package/content/domains/advanced/passion.yaml +7 -0
  124. package/content/domains/advanced/perfection.yaml +7 -0
  125. package/content/domains/advanced/protection.yaml +7 -0
  126. package/content/domains/advanced/secrecy.yaml +7 -0
  127. package/content/domains/advanced/sun.yaml +7 -0
  128. package/content/domains/advanced/travel.yaml +7 -0
  129. package/content/domains/advanced/trickery.yaml +7 -0
  130. package/content/domains/advanced/truth.yaml +7 -0
  131. package/content/domains/advanced/tyranny.yaml +7 -0
  132. package/content/domains/advanced/undeath.yaml +7 -0
  133. package/content/domains/advanced/water.yaml +7 -0
  134. package/content/domains/advanced/wealth.yaml +7 -0
  135. package/content/domains/advanced/zeal.yaml +7 -0
  136. package/content/domains/air.yaml +6 -0
  137. package/content/domains/ambition.yaml +6 -0
  138. package/content/domains/cities.yaml +6 -0
  139. package/content/domains/confidence.yaml +6 -0
  140. package/content/domains/creation.yaml +6 -0
  141. package/content/domains/darkness.yaml +6 -0
  142. package/content/domains/death.yaml +6 -0
  143. package/content/domains/destruction.yaml +6 -0
  144. package/content/domains/dreams.yaml +6 -0
  145. package/content/domains/earth.yaml +6 -0
  146. package/content/domains/family.yaml +6 -0
  147. package/content/domains/fate.yaml +6 -0
  148. package/content/domains/fire.yaml +6 -0
  149. package/content/domains/freedom.yaml +6 -0
  150. package/content/domains/healing.yaml +6 -0
  151. package/content/domains/indulgence.yaml +6 -0
  152. package/content/domains/knowledge.yaml +6 -0
  153. package/content/domains/luck.yaml +6 -0
  154. package/content/domains/magic.yaml +6 -0
  155. package/content/domains/might.yaml +6 -0
  156. package/content/domains/moon.yaml +6 -0
  157. package/content/domains/nature.yaml +6 -0
  158. package/content/domains/nightmares.yaml +6 -0
  159. package/content/domains/pain.yaml +6 -0
  160. package/content/domains/passion.yaml +6 -0
  161. package/content/domains/perfection.yaml +6 -0
  162. package/content/domains/protection.yaml +6 -0
  163. package/content/domains/secrecy.yaml +6 -0
  164. package/content/domains/sun.yaml +6 -0
  165. package/content/domains/travel.yaml +6 -0
  166. package/content/domains/trickery.yaml +6 -0
  167. package/content/domains/truth.yaml +6 -0
  168. package/content/domains/tyranny.yaml +6 -0
  169. package/content/domains/undeath.yaml +6 -0
  170. package/content/domains/water.yaml +6 -0
  171. package/content/domains/wealth.yaml +6 -0
  172. package/content/domains/zeal.yaml +6 -0
  173. package/content/effects/treated-disease.yaml +4 -0
  174. package/content/effects/treated-poison.yaml +4 -0
  175. package/content/feats/ancestry/gnome-obsession.yaml +1 -39
  176. package/content/feats/ancestry/tengu-feather-fan.yaml +3 -3
  177. package/content/feats/archetype/barbarian/barbarian-dedication.yaml +0 -2
  178. package/content/feats/archetype/champion/champions-reaction.yaml +1 -11
  179. package/content/feats/archetype/investigator/skill-mastery.yaml +2 -58
  180. package/content/feats/archetype/rogue/skill-mastery.yaml +2 -58
  181. package/content/feats/champion/deitys-domain.yaml +1 -22
  182. package/content/feats/cleric/advanced-domain.yaml +1 -187
  183. package/content/feats/cleric/domain-initiate.yaml +1 -199
  184. package/content/feats/oracle/domain-acumen.yaml +4 -138
  185. package/content/feats/skill/skill-training.yaml +1 -55
  186. package/content/feats/sorcerer/arcane-evolution.yaml +1 -26
  187. package/content/feats/sorcerer/occult-evolution.yaml +1 -26
  188. package/content/gear/compass-lensatic.yaml +1 -0
  189. package/content/gear/compass.yaml +1 -0
  190. package/content/gear/crowbar-levered.yaml +1 -0
  191. package/content/gear/crowbar.yaml +1 -0
  192. package/content/shields/specific/reflecting-shield.yaml +1 -1
  193. package/content/shields/specific/spellguard-shield.yaml +1 -0
  194. package/content/spells/agile-feet.yaml +1 -0
  195. package/content/spells/appearance-of-wealth.yaml +1 -0
  196. package/content/spells/athletic-rush.yaml +1 -0
  197. package/content/spells/bit-of-luck.yaml +1 -0
  198. package/content/spells/charming-touch.yaml +1 -0
  199. package/content/spells/cloak-of-shadow.yaml +1 -0
  200. package/content/spells/creative-splash.yaml +1 -0
  201. package/content/spells/cry-of-destruction.yaml +1 -0
  202. package/content/spells/dazzling-flash.yaml +1 -0
  203. package/content/spells/deaths-call.yaml +1 -0
  204. package/content/spells/face-in-the-crowd.yaml +1 -0
  205. package/content/spells/fire-ray.yaml +1 -0
  206. package/content/spells/guidance.yaml +2 -0
  207. package/content/spells/healers-blessing.yaml +1 -0
  208. package/content/spells/hurtling-stone.yaml +1 -0
  209. package/content/spells/ignite-ambition.yaml +1 -0
  210. package/content/spells/magics-vessel.yaml +1 -0
  211. package/content/spells/moonbeam.yaml +1 -0
  212. package/content/spells/overstuff.yaml +1 -0
  213. package/content/spells/perfected-mind.yaml +1 -0
  214. package/content/spells/protectors-sacrifice.yaml +1 -0
  215. package/content/spells/pushing-gust.yaml +1 -0
  216. package/content/spells/read-fate.yaml +1 -0
  217. package/content/spells/savor-the-sting.yaml +1 -0
  218. package/content/spells/scholarly-recollection.yaml +1 -0
  219. package/content/spells/soothing-words.yaml +1 -0
  220. package/content/spells/sudden-shift.yaml +1 -0
  221. package/content/spells/sure-strike.yaml +2 -0
  222. package/content/spells/sweet-dream.yaml +1 -0
  223. package/content/spells/tidal-surge.yaml +1 -0
  224. package/content/spells/touch-of-obedience.yaml +1 -0
  225. package/content/spells/touch-of-undeath.yaml +1 -0
  226. package/content/spells/true-target.yaml +2 -0
  227. package/content/spells/unimpeded-stride.yaml +1 -0
  228. package/content/spells/veil-of-confidence.yaml +1 -0
  229. package/content/spells/vibrant-thorns.yaml +1 -0
  230. package/content/spells/waking-nightmare.yaml +1 -0
  231. package/content/spells/weapon-surge.yaml +3 -0
  232. package/content/spells/whispering-quiet.yaml +1 -0
  233. package/content/spells/word-of-truth.yaml +1 -0
  234. package/dist/i18n/en.js +1 -1
  235. package/dist/i18n/en.json +196 -207
  236. package/dist/index.js +1 -1
  237. package/dist/release.json +7103 -3825
  238. package/i18n/en/ancestry-dragonblood.yaml +2 -2
  239. package/i18n/en/archetypes.yaml +6 -6
  240. package/i18n/en/backgrounds.yaml +6 -3
  241. package/i18n/en/battle-forms.yaml +0 -1
  242. package/i18n/en/champion.yaml +1 -1
  243. package/i18n/en/cleric.yaml +151 -149
  244. package/i18n/en/equipment.yaml +4 -1
  245. package/i18n/en/oracle.yaml +0 -38
  246. package/i18n/en/rogue.yaml +3 -3
  247. package/i18n/en/spellcasting.yaml +2 -2
  248. package/i18n/en/type-fields.yaml +2 -0
  249. package/i18n/en.yaml +19 -1
  250. package/pack.yaml +2 -2
  251. package/package.json +2 -2
  252. package/rules/advancement.yaml +1 -0
  253. package/rules/afflictions.yaml +2 -0
  254. package/rules/alchemist.yaml +14 -3
  255. package/rules/ancestry-feats.yaml +55 -13
  256. package/rules/archetypes.yaml +1 -0
  257. package/rules/barbarian.yaml +8 -21
  258. package/rules/bard.yaml +10 -4
  259. package/rules/building.yaml +7 -1
  260. package/rules/champion.yaml +3 -2
  261. package/rules/checks.yaml +1 -1
  262. package/rules/cleric.yaml +13 -3
  263. package/rules/conditions.yaml +1 -0
  264. package/rules/core.yaml +1 -0
  265. package/rules/creation.yaml +18 -0
  266. package/rules/druid.yaml +3 -2
  267. package/rules/equipment.yaml +7 -1
  268. package/rules/heritages.yaml +1 -1
  269. package/rules/investigator.yaml +3 -11
  270. package/rules/layout.yaml +19 -6
  271. package/rules/lores-pc2.yaml +176 -38
  272. package/rules/lores.yaml +226 -50
  273. package/rules/monk.yaml +2 -5
  274. package/rules/oracle.yaml +5 -3
  275. package/rules/ranger.yaml +3 -3
  276. package/rules/rogue.yaml +6 -1
  277. package/rules/skill-actions-athletics.yaml +1 -2
  278. package/rules/skill-actions-stealth.yaml +1 -2
  279. package/rules/skills.yaml +173 -56
  280. package/rules/sorcerer.yaml +16 -4
  281. package/rules/spellcasting.yaml +94 -24
  282. package/rules/spells-high.yaml +3 -3
  283. package/rules/strikes.yaml +3 -1
  284. package/rules/swashbuckler.yaml +4 -17
  285. package/rules/tags.yaml +6 -0
  286. package/rules/witch.yaml +2 -1
  287. package/rules/wizard.yaml +5 -3
  288. package/upgrades/0.2.0-to-0.3.0.yaml +657 -0
@@ -42,50 +42,12 @@ choices:
42
42
  # Asked first, so the repertoire's picks see the tradition and the free skills the bloodline's
43
43
  # trainings.
44
44
  - id: bloodline
45
- from:
46
- items:
47
- [
48
- classes.sorcerer.bloodlines.aberrant,
49
- classes.sorcerer.bloodlines.angelic,
50
- classes.sorcerer.bloodlines.demonic,
51
- classes.sorcerer.bloodlines.diabolic,
52
- classes.sorcerer.bloodlines.draconic,
53
- classes.sorcerer.bloodlines.elemental,
54
- classes.sorcerer.bloodlines.fey,
55
- classes.sorcerer.bloodlines.hag,
56
- classes.sorcerer.bloodlines.imperial,
57
- classes.sorcerer.bloodlines.undead,
58
- ]
45
+ from: { type: feature, where: "item.classOption == 'sorcerer.bloodline'" }
59
46
  - id: skills
60
47
  unique: skill-training
61
48
  pick: 2 + max(0, attributes.int.mod)
62
49
  from:
63
- values:
64
- [
65
- skill.acrobatics,
66
- skill.arcana,
67
- skill.athletics,
68
- skill.crafting,
69
- skill.deception,
70
- skill.diplomacy,
71
- skill.intimidation,
72
- skill.medicine,
73
- skill.nature,
74
- skill.occultism,
75
- skill.performance,
76
- skill.religion,
77
- skill.society,
78
- skill.stealth,
79
- skill.survival,
80
- skill.thievery,
81
- skill.lore.academia,
82
- skill.lore.circus,
83
- skill.lore.farming,
84
- skill.lore.legal,
85
- skill.lore.scribing,
86
- skill.lore.underworld,
87
- skill.lore.warfare,
88
- ]
50
+ values: { formula: skills.offered }
89
51
  where: '!(value in skills.trained) && !(value in skills.chosen) || value in choice.picks'
90
52
  effects:
91
53
  - { target: skills.chosen, op: grant, value: { formula: pick.value } }
@@ -118,32 +118,7 @@ choices:
118
118
  unique: skill-training
119
119
  pick: 4 + max(0, attributes.int.mod)
120
120
  from:
121
- values:
122
- [
123
- skill.acrobatics,
124
- skill.arcana,
125
- skill.athletics,
126
- skill.crafting,
127
- skill.deception,
128
- skill.diplomacy,
129
- skill.intimidation,
130
- skill.medicine,
131
- skill.nature,
132
- skill.occultism,
133
- skill.performance,
134
- skill.religion,
135
- skill.society,
136
- skill.stealth,
137
- skill.survival,
138
- skill.thievery,
139
- skill.lore.academia,
140
- skill.lore.circus,
141
- skill.lore.farming,
142
- skill.lore.legal,
143
- skill.lore.scribing,
144
- skill.lore.underworld,
145
- skill.lore.warfare,
146
- ]
121
+ values: { formula: skills.offered }
147
122
  where: '!(value in skills.trained) && !(value in skills.chosen) || value in choice.picks'
148
123
  effects:
149
124
  - { target: skills.chosen, op: grant, value: { formula: pick.value } }
@@ -1,6 +1,6 @@
1
1
  id: classes.witch.patrons.faiths-flamekeeper
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: witch.patron }
4
4
  effects:
5
5
  - { target: witch.patron, op: set, value: "'faiths-flamekeeper'" }
6
6
  - { target: spellcasting.tradition, op: set, value: "'divine'" }
@@ -1,6 +1,6 @@
1
1
  id: classes.witch.patrons.inscribed-one
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: witch.patron }
4
4
  effects:
5
5
  - { target: witch.patron, op: set, value: "'inscribed-one'" }
6
6
  - { target: spellcasting.tradition, op: set, value: "'arcane'" }
@@ -1,6 +1,6 @@
1
1
  id: classes.witch.patrons.resentment
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: witch.patron }
4
4
  effects:
5
5
  - { target: witch.patron, op: set, value: "'resentment'" }
6
6
  - { target: spellcasting.tradition, op: set, value: "'occult'" }
@@ -1,6 +1,6 @@
1
1
  id: classes.witch.patrons.silence-in-snow
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: witch.patron }
4
4
  effects:
5
5
  - { target: witch.patron, op: set, value: "'silence-in-snow'" }
6
6
  - { target: spellcasting.tradition, op: set, value: "'primal'" }
@@ -1,6 +1,6 @@
1
1
  id: classes.witch.patrons.spinner-of-threads
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: witch.patron }
4
4
  effects:
5
5
  - { target: witch.patron, op: set, value: "'spinner-of-threads'" }
6
6
  - { target: spellcasting.tradition, op: set, value: "'occult'" }
@@ -1,6 +1,6 @@
1
1
  id: classes.witch.patrons.starless-shadow
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: witch.patron }
4
4
  effects:
5
5
  - { target: witch.patron, op: set, value: "'starless-shadow'" }
6
6
  - { target: spellcasting.tradition, op: set, value: "'occult'" }
@@ -1,6 +1,6 @@
1
1
  id: classes.witch.patrons.wilding-steward
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: witch.patron }
4
4
  effects:
5
5
  - { target: witch.patron, op: set, value: "'wilding-steward'" }
6
6
  - { target: spellcasting.tradition, op: set, value: "'primal'" }
@@ -41,17 +41,7 @@ grants:
41
41
  choices:
42
42
  # Asked first, so the familiar's spells follow the tradition.
43
43
  - id: patron
44
- from:
45
- items:
46
- [
47
- classes.witch.patrons.faiths-flamekeeper,
48
- classes.witch.patrons.inscribed-one,
49
- classes.witch.patrons.resentment,
50
- classes.witch.patrons.silence-in-snow,
51
- classes.witch.patrons.spinner-of-threads,
52
- classes.witch.patrons.starless-shadow,
53
- classes.witch.patrons.wilding-steward,
54
- ]
44
+ from: { type: feature, where: "item.classOption == 'witch.patron'" }
55
45
  - id: hex
56
46
  from:
57
47
  options:
@@ -65,32 +55,7 @@ choices:
65
55
  unique: skill-training
66
56
  pick: 3 + max(0, attributes.int.mod)
67
57
  from:
68
- values:
69
- [
70
- skill.acrobatics,
71
- skill.arcana,
72
- skill.athletics,
73
- skill.crafting,
74
- skill.deception,
75
- skill.diplomacy,
76
- skill.intimidation,
77
- skill.medicine,
78
- skill.nature,
79
- skill.occultism,
80
- skill.performance,
81
- skill.religion,
82
- skill.society,
83
- skill.stealth,
84
- skill.survival,
85
- skill.thievery,
86
- skill.lore.academia,
87
- skill.lore.circus,
88
- skill.lore.farming,
89
- skill.lore.legal,
90
- skill.lore.scribing,
91
- skill.lore.underworld,
92
- skill.lore.warfare,
93
- ]
58
+ values: { formula: skills.offered }
94
59
  where: '!(value in skills.trained) && !(value in skills.chosen) || value in choice.picks'
95
60
  effects:
96
61
  - { target: skills.chosen, op: grant, value: { formula: pick.value } }
@@ -1,6 +1,6 @@
1
1
  id: classes.wizard.schools.ars-grammatica
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: wizard.school }
4
4
  effects:
5
5
  - { target: wizard.school, op: set, value: "'ars-grammatica'" }
6
6
  - { target: spellcasting.extraSlots, op: add, value: 1 }
@@ -1,6 +1,6 @@
1
1
  id: classes.wizard.schools.battle-magic
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: wizard.school }
4
4
  effects:
5
5
  - { target: wizard.school, op: set, value: "'battle-magic'" }
6
6
  - { target: spellcasting.extraSlots, op: add, value: 1 }
@@ -1,6 +1,6 @@
1
1
  id: classes.wizard.schools.boundary
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: wizard.school }
4
4
  effects:
5
5
  - { target: wizard.school, op: set, value: "'boundary'" }
6
6
  - { target: spellcasting.extraSlots, op: add, value: 1 }
@@ -1,6 +1,6 @@
1
1
  id: classes.wizard.schools.civic-wizardry
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: wizard.school }
4
4
  effects:
5
5
  - { target: wizard.school, op: set, value: "'civic-wizardry'" }
6
6
  - { target: spellcasting.extraSlots, op: add, value: 1 }
@@ -1,6 +1,6 @@
1
1
  id: classes.wizard.schools.mentalism
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: wizard.school }
4
4
  effects:
5
5
  - { target: wizard.school, op: set, value: "'mentalism'" }
6
6
  - { target: spellcasting.extraSlots, op: add, value: 1 }
@@ -1,6 +1,6 @@
1
1
  id: classes.wizard.schools.protean-form
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: wizard.school }
4
4
  effects:
5
5
  - { target: wizard.school, op: set, value: "'protean-form'" }
6
6
  - { target: spellcasting.extraSlots, op: add, value: 1 }
@@ -1,6 +1,6 @@
1
1
  id: classes.wizard.schools.unified-magical-theory
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: wizard.school }
4
4
  effects:
5
5
  - { target: wizard.school, op: set, value: "'unified-magical-theory'" }
6
6
  - { target: focus.points, op: add, value: 1 }
@@ -1,6 +1,6 @@
1
1
  id: classes.wizard.theses.experimental-spellshaping
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: wizard.thesis }
4
4
  effects:
5
5
  - { target: wizard.thesis, op: set, value: "'experimental-spellshaping'" }
6
6
  choices:
@@ -1,6 +1,6 @@
1
1
  id: classes.wizard.theses.improved-familiar-attunement
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: wizard.thesis }
4
4
  # Drain Familiar is Drain Bonded Item's action here.
5
5
  effects:
6
6
  - { target: wizard.thesis, op: set, value: "'improved-familiar-attunement'" }
@@ -1,6 +1,6 @@
1
1
  id: classes.wizard.theses.spell-blending
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: wizard.thesis }
4
4
  # The trades are inputs per rank that the slot counts read (`spellBlending.*`).
5
5
  effects:
6
6
  - { target: wizard.thesis, op: set, value: "'spell-blending'" }
@@ -1,6 +1,6 @@
1
1
  id: classes.wizard.theses.spell-substitution
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: wizard.thesis }
4
4
  # A curriculum slot still takes only a curriculum spell (the `curriculum-slots` constraint checks
5
5
  # it).
6
6
  effects:
@@ -1,5 +1,5 @@
1
1
  id: classes.wizard.theses.staff-nexus
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: wizard.thesis }
4
4
  effects:
5
5
  - { target: wizard.thesis, op: set, value: "'staff-nexus'" }
@@ -47,17 +47,7 @@ grants:
47
47
  choices:
48
48
  # The curriculum is asked next, before the rest of the spellbook.
49
49
  - id: school
50
- from:
51
- items:
52
- [
53
- classes.wizard.schools.ars-grammatica,
54
- classes.wizard.schools.battle-magic,
55
- classes.wizard.schools.boundary,
56
- classes.wizard.schools.civic-wizardry,
57
- classes.wizard.schools.mentalism,
58
- classes.wizard.schools.protean-form,
59
- classes.wizard.schools.unified-magical-theory,
60
- ]
50
+ from: { type: feature, where: "item.classOption == 'wizard.school'" }
61
51
  - id: curriculum-cantrip
62
52
  unique: spellbook
63
53
  pick: "wizard.school == 'unified-magical-theory' ? 0 : 1"
@@ -89,45 +79,12 @@ choices:
89
79
  effects:
90
80
  - { target: spells.book, op: grant, value: { formula: pick.id } }
91
81
  - id: thesis
92
- from:
93
- items:
94
- [
95
- classes.wizard.theses.experimental-spellshaping,
96
- classes.wizard.theses.improved-familiar-attunement,
97
- classes.wizard.theses.spell-blending,
98
- classes.wizard.theses.spell-substitution,
99
- classes.wizard.theses.staff-nexus,
100
- ]
82
+ from: { type: feature, where: "item.classOption == 'wizard.thesis'" }
101
83
  - id: skills
102
84
  unique: skill-training
103
85
  pick: 2 + max(0, attributes.int.mod)
104
86
  from:
105
- values:
106
- [
107
- skill.acrobatics,
108
- skill.arcana,
109
- skill.athletics,
110
- skill.crafting,
111
- skill.deception,
112
- skill.diplomacy,
113
- skill.intimidation,
114
- skill.medicine,
115
- skill.nature,
116
- skill.occultism,
117
- skill.performance,
118
- skill.religion,
119
- skill.society,
120
- skill.stealth,
121
- skill.survival,
122
- skill.thievery,
123
- skill.lore.academia,
124
- skill.lore.circus,
125
- skill.lore.farming,
126
- skill.lore.legal,
127
- skill.lore.scribing,
128
- skill.lore.underworld,
129
- skill.lore.warfare,
130
- ]
87
+ values: { formula: skills.offered }
131
88
  where: '!(value in skills.trained) && !(value in skills.chosen) || value in choice.picks'
132
89
  effects:
133
90
  - { target: skills.chosen, op: grant, value: { formula: pick.value } }
@@ -0,0 +1,7 @@
1
+ id: domains.advanced.air
2
+ type: domain
3
+ fields: { advanced: true }
4
+ prerequisites:
5
+ - { id: initial, when: '@spells.pushing-gust in cleric.domainSpells' }
6
+ grants:
7
+ - item: spells.disperse-into-air
@@ -0,0 +1,7 @@
1
+ id: domains.advanced.ambition
2
+ type: domain
3
+ fields: { advanced: true }
4
+ prerequisites:
5
+ - { id: initial, when: '@spells.ignite-ambition in cleric.domainSpells' }
6
+ grants:
7
+ - item: spells.competitive-edge
@@ -0,0 +1,7 @@
1
+ id: domains.advanced.cities
2
+ type: domain
3
+ fields: { advanced: true }
4
+ prerequisites:
5
+ - { id: initial, when: '@spells.face-in-the-crowd in cleric.domainSpells' }
6
+ grants:
7
+ - item: spells.pulse-of-civilization
@@ -0,0 +1,7 @@
1
+ id: domains.advanced.confidence
2
+ type: domain
3
+ fields: { advanced: true }
4
+ prerequisites:
5
+ - { id: initial, when: '@spells.veil-of-confidence in cleric.domainSpells' }
6
+ grants:
7
+ - item: spells.delusional-pride
@@ -0,0 +1,7 @@
1
+ id: domains.advanced.creation
2
+ type: domain
3
+ fields: { advanced: true }
4
+ prerequisites:
5
+ - { id: initial, when: '@spells.creative-splash in cleric.domainSpells' }
6
+ grants:
7
+ - item: spells.artistic-flourish
@@ -0,0 +1,7 @@
1
+ id: domains.advanced.darkness
2
+ type: domain
3
+ fields: { advanced: true }
4
+ prerequisites:
5
+ - { id: initial, when: '@spells.cloak-of-shadow in cleric.domainSpells' }
6
+ grants:
7
+ - item: spells.darkened-sight
@@ -0,0 +1,7 @@
1
+ id: domains.advanced.death
2
+ type: domain
3
+ fields: { advanced: true }
4
+ prerequisites:
5
+ - { id: initial, when: '@spells.deaths-call in cleric.domainSpells' }
6
+ grants:
7
+ - item: spells.eradicate-undeath
@@ -0,0 +1,7 @@
1
+ id: domains.advanced.destruction
2
+ type: domain
3
+ fields: { advanced: true }
4
+ prerequisites:
5
+ - { id: initial, when: '@spells.cry-of-destruction in cleric.domainSpells' }
6
+ grants:
7
+ - item: spells.destructive-aura
@@ -0,0 +1,7 @@
1
+ id: domains.advanced.dreams
2
+ type: domain
3
+ fields: { advanced: true }
4
+ prerequisites:
5
+ - { id: initial, when: '@spells.sweet-dream in cleric.domainSpells' }
6
+ grants:
7
+ - item: spells.dreamers-call
@@ -0,0 +1,7 @@
1
+ id: domains.advanced.earth
2
+ type: domain
3
+ fields: { advanced: true }
4
+ prerequisites:
5
+ - { id: initial, when: '@spells.hurtling-stone in cleric.domainSpells' }
6
+ grants:
7
+ - item: spells.localized-quake
@@ -0,0 +1,7 @@
1
+ id: domains.advanced.family
2
+ type: domain
3
+ fields: { advanced: true }
4
+ prerequisites:
5
+ - { id: initial, when: '@spells.soothing-words in cleric.domainSpells' }
6
+ grants:
7
+ - item: spells.unity
@@ -0,0 +1,7 @@
1
+ id: domains.advanced.fate
2
+ type: domain
3
+ fields: { advanced: true }
4
+ prerequisites:
5
+ - { id: initial, when: '@spells.read-fate in cleric.domainSpells' }
6
+ grants:
7
+ - item: spells.tempt-fate
@@ -0,0 +1,7 @@
1
+ id: domains.advanced.fire
2
+ type: domain
3
+ fields: { advanced: true }
4
+ prerequisites:
5
+ - { id: initial, when: '@spells.fire-ray in cleric.domainSpells' }
6
+ grants:
7
+ - item: spells.flame-barrier
@@ -0,0 +1,7 @@
1
+ id: domains.advanced.freedom
2
+ type: domain
3
+ fields: { advanced: true }
4
+ prerequisites:
5
+ - { id: initial, when: '@spells.unimpeded-stride in cleric.domainSpells' }
6
+ grants:
7
+ - item: spells.word-of-freedom
@@ -0,0 +1,7 @@
1
+ id: domains.advanced.healing
2
+ type: domain
3
+ fields: { advanced: true }
4
+ prerequisites:
5
+ - { id: initial, when: '@spells.healers-blessing in cleric.domainSpells' }
6
+ grants:
7
+ - item: spells.rebuke-death
@@ -0,0 +1,7 @@
1
+ id: domains.advanced.indulgence
2
+ type: domain
3
+ fields: { advanced: true }
4
+ prerequisites:
5
+ - { id: initial, when: '@spells.overstuff in cleric.domainSpells' }
6
+ grants:
7
+ - item: spells.take-its-course
@@ -0,0 +1,7 @@
1
+ id: domains.advanced.knowledge
2
+ type: domain
3
+ fields: { advanced: true }
4
+ prerequisites:
5
+ - { id: initial, when: '@spells.scholarly-recollection in cleric.domainSpells' }
6
+ grants:
7
+ - item: spells.know-the-enemy
@@ -0,0 +1,7 @@
1
+ id: domains.advanced.luck
2
+ type: domain
3
+ fields: { advanced: true }
4
+ prerequisites:
5
+ - { id: initial, when: '@spells.bit-of-luck in cleric.domainSpells' }
6
+ grants:
7
+ - item: spells.lucky-break
@@ -0,0 +1,7 @@
1
+ id: domains.advanced.magic
2
+ type: domain
3
+ fields: { advanced: true }
4
+ prerequisites:
5
+ - { id: initial, when: '@spells.magics-vessel in cleric.domainSpells' }
6
+ grants:
7
+ - item: spells.mystic-beacon
@@ -0,0 +1,7 @@
1
+ id: domains.advanced.might
2
+ type: domain
3
+ fields: { advanced: true }
4
+ prerequisites:
5
+ - { id: initial, when: '@spells.athletic-rush in cleric.domainSpells' }
6
+ grants:
7
+ - item: spells.enduring-might
@@ -0,0 +1,7 @@
1
+ id: domains.advanced.moon
2
+ type: domain
3
+ fields: { advanced: true }
4
+ prerequisites:
5
+ - { id: initial, when: '@spells.moonbeam in cleric.domainSpells' }
6
+ grants:
7
+ - item: spells.touch-of-the-moon
@@ -0,0 +1,7 @@
1
+ id: domains.advanced.nature
2
+ type: domain
3
+ fields: { advanced: true }
4
+ prerequisites:
5
+ - { id: initial, when: '@spells.vibrant-thorns in cleric.domainSpells' }
6
+ grants:
7
+ - item: spells.natures-bounty
@@ -0,0 +1,7 @@
1
+ id: domains.advanced.nightmares
2
+ type: domain
3
+ fields: { advanced: true }
4
+ prerequisites:
5
+ - { id: initial, when: '@spells.waking-nightmare in cleric.domainSpells' }
6
+ grants:
7
+ - item: spells.shared-nightmare
@@ -0,0 +1,7 @@
1
+ id: domains.advanced.pain
2
+ type: domain
3
+ fields: { advanced: true }
4
+ prerequisites:
5
+ - { id: initial, when: '@spells.savor-the-sting in cleric.domainSpells' }
6
+ grants:
7
+ - item: spells.retributive-pain
@@ -0,0 +1,7 @@
1
+ id: domains.advanced.passion
2
+ type: domain
3
+ fields: { advanced: true }
4
+ prerequisites:
5
+ - { id: initial, when: '@spells.charming-touch in cleric.domainSpells' }
6
+ grants:
7
+ - item: spells.captivating-adoration
@@ -0,0 +1,7 @@
1
+ id: domains.advanced.perfection
2
+ type: domain
3
+ fields: { advanced: true }
4
+ prerequisites:
5
+ - { id: initial, when: '@spells.perfected-mind in cleric.domainSpells' }
6
+ grants:
7
+ - item: spells.perfected-body
@@ -0,0 +1,7 @@
1
+ id: domains.advanced.protection
2
+ type: domain
3
+ fields: { advanced: true }
4
+ prerequisites:
5
+ - { id: initial, when: '@spells.protectors-sacrifice in cleric.domainSpells' }
6
+ grants:
7
+ - item: spells.protectors-sphere
@@ -0,0 +1,7 @@
1
+ id: domains.advanced.secrecy
2
+ type: domain
3
+ fields: { advanced: true }
4
+ prerequisites:
5
+ - { id: initial, when: '@spells.whispering-quiet in cleric.domainSpells' }
6
+ grants:
7
+ - item: spells.safeguard-secret
@@ -0,0 +1,7 @@
1
+ id: domains.advanced.sun
2
+ type: domain
3
+ fields: { advanced: true }
4
+ prerequisites:
5
+ - { id: initial, when: '@spells.dazzling-flash in cleric.domainSpells' }
6
+ grants:
7
+ - item: spells.vital-luminance
@@ -0,0 +1,7 @@
1
+ id: domains.advanced.travel
2
+ type: domain
3
+ fields: { advanced: true }
4
+ prerequisites:
5
+ - { id: initial, when: '@spells.agile-feet in cleric.domainSpells' }
6
+ grants:
7
+ - item: spells.travelers-transit