@opencharacter/orc-2e 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.
Files changed (314) hide show
  1. package/README.md +74 -16
  2. package/content/backgrounds/driver.yaml +3 -3
  3. package/content/backgrounds/farmhand.yaml +1 -1
  4. package/content/backgrounds/miner.yaml +1 -1
  5. package/content/backgrounds/nomad.yaml +1 -1
  6. package/content/backgrounds/raised-by-belief.yaml +16 -16
  7. package/content/backgrounds/scholar.yaml +4 -4
  8. package/content/classes/alchemist/fields/bomber.yaml +1 -1
  9. package/content/classes/alchemist/fields/chirurgeon.yaml +1 -1
  10. package/content/classes/alchemist/fields/mutagenist.yaml +1 -1
  11. package/content/classes/alchemist/fields/toxicologist.yaml +1 -1
  12. package/content/classes/alchemist.yaml +2 -34
  13. package/content/classes/barbarian/animals/ape.yaml +1 -1
  14. package/content/classes/barbarian/animals/bear.yaml +1 -1
  15. package/content/classes/barbarian/animals/bull.yaml +1 -1
  16. package/content/classes/barbarian/animals/cat.yaml +1 -1
  17. package/content/classes/barbarian/animals/deer.yaml +1 -1
  18. package/content/classes/barbarian/animals/frog.yaml +1 -1
  19. package/content/classes/barbarian/animals/shark.yaml +1 -1
  20. package/content/classes/barbarian/animals/snake.yaml +1 -1
  21. package/content/classes/barbarian/animals/wolf.yaml +1 -1
  22. package/content/classes/barbarian/instincts/animal.yaml +2 -14
  23. package/content/classes/barbarian/instincts/dragon.yaml +1 -2
  24. package/content/classes/barbarian/instincts/fury.yaml +1 -1
  25. package/content/classes/barbarian/instincts/giant.yaml +1 -1
  26. package/content/classes/barbarian/instincts/spirit.yaml +1 -2
  27. package/content/classes/barbarian/instincts/superstition.yaml +1 -1
  28. package/content/classes/barbarian/raging.yaml +3 -1
  29. package/content/classes/barbarian.yaml +2 -36
  30. package/content/classes/bard/muses/enigma.yaml +1 -1
  31. package/content/classes/bard/muses/maestro.yaml +1 -1
  32. package/content/classes/bard/muses/polymath.yaml +1 -1
  33. package/content/classes/bard/muses/warrior.yaml +1 -1
  34. package/content/classes/bard.yaml +2 -34
  35. package/content/classes/champion/causes/desecration.yaml +1 -1
  36. package/content/classes/champion/causes/grandeur.yaml +1 -1
  37. package/content/classes/champion/causes/iniquity.yaml +1 -1
  38. package/content/classes/champion/causes/justice.yaml +1 -1
  39. package/content/classes/champion/causes/liberation.yaml +1 -1
  40. package/content/classes/champion/causes/obedience.yaml +1 -1
  41. package/content/classes/champion/causes/redemption.yaml +1 -1
  42. package/content/classes/champion/resistance.yaml +2 -0
  43. package/content/classes/champion.yaml +2 -37
  44. package/content/classes/cleric/doctrines/cloistered-cleric.yaml +1 -1
  45. package/content/classes/cleric/doctrines/warpriest.yaml +1 -1
  46. package/content/classes/cleric.yaml +2 -28
  47. package/content/classes/druid/orders/animal.yaml +1 -1
  48. package/content/classes/druid/orders/leaf.yaml +1 -1
  49. package/content/classes/druid/orders/storm.yaml +1 -1
  50. package/content/classes/druid/orders/untamed.yaml +1 -1
  51. package/content/classes/druid.yaml +2 -34
  52. package/content/classes/fighter.yaml +1 -26
  53. package/content/classes/investigator.yaml +1 -26
  54. package/content/classes/monk.yaml +1 -26
  55. package/content/classes/oracle/mysteries/ancestors.yaml +3 -1
  56. package/content/classes/oracle/mysteries/battle.yaml +5 -1
  57. package/content/classes/oracle/mysteries/bones.yaml +3 -1
  58. package/content/classes/oracle/mysteries/cosmos.yaml +3 -1
  59. package/content/classes/oracle/mysteries/flames.yaml +3 -1
  60. package/content/classes/oracle/mysteries/life.yaml +4 -1
  61. package/content/classes/oracle/mysteries/lore.yaml +5 -1
  62. package/content/classes/oracle/mysteries/tempest.yaml +3 -1
  63. package/content/classes/oracle.yaml +2 -38
  64. package/content/classes/ranger/edges/flurry.yaml +1 -1
  65. package/content/classes/ranger/edges/outwit.yaml +1 -1
  66. package/content/classes/ranger/edges/precision.yaml +1 -1
  67. package/content/classes/ranger.yaml +2 -29
  68. package/content/classes/rogue/rackets/mastermind.yaml +1 -1
  69. package/content/classes/rogue/rackets/ruffian.yaml +1 -1
  70. package/content/classes/rogue/rackets/scoundrel.yaml +1 -1
  71. package/content/classes/rogue/rackets/thief.yaml +1 -1
  72. package/content/classes/rogue.yaml +2 -34
  73. package/content/classes/sorcerer/bloodlines/aberrant.yaml +1 -1
  74. package/content/classes/sorcerer/bloodlines/angelic.yaml +1 -1
  75. package/content/classes/sorcerer/bloodlines/demonic.yaml +1 -1
  76. package/content/classes/sorcerer/bloodlines/diabolic.yaml +1 -1
  77. package/content/classes/sorcerer/bloodlines/draconic.yaml +1 -1
  78. package/content/classes/sorcerer/bloodlines/elemental.yaml +1 -1
  79. package/content/classes/sorcerer/bloodlines/fey.yaml +1 -1
  80. package/content/classes/sorcerer/bloodlines/hag.yaml +1 -1
  81. package/content/classes/sorcerer/bloodlines/imperial.yaml +1 -1
  82. package/content/classes/sorcerer/bloodlines/undead.yaml +1 -1
  83. package/content/classes/sorcerer.yaml +2 -40
  84. package/content/classes/swashbuckler.yaml +1 -26
  85. package/content/classes/witch/patrons/faiths-flamekeeper.yaml +1 -1
  86. package/content/classes/witch/patrons/inscribed-one.yaml +1 -1
  87. package/content/classes/witch/patrons/resentment.yaml +1 -1
  88. package/content/classes/witch/patrons/silence-in-snow.yaml +1 -1
  89. package/content/classes/witch/patrons/spinner-of-threads.yaml +1 -1
  90. package/content/classes/witch/patrons/starless-shadow.yaml +1 -1
  91. package/content/classes/witch/patrons/wilding-steward.yaml +1 -1
  92. package/content/classes/witch.yaml +2 -37
  93. package/content/classes/wizard/schools/ars-grammatica.yaml +1 -1
  94. package/content/classes/wizard/schools/battle-magic.yaml +1 -1
  95. package/content/classes/wizard/schools/boundary.yaml +1 -1
  96. package/content/classes/wizard/schools/civic-wizardry.yaml +1 -1
  97. package/content/classes/wizard/schools/mentalism.yaml +1 -1
  98. package/content/classes/wizard/schools/protean-form.yaml +1 -1
  99. package/content/classes/wizard/schools/unified-magical-theory.yaml +1 -1
  100. package/content/classes/wizard/theses/experimental-spellshaping.yaml +1 -1
  101. package/content/classes/wizard/theses/improved-familiar-attunement.yaml +1 -1
  102. package/content/classes/wizard/theses/spell-blending.yaml +1 -1
  103. package/content/classes/wizard/theses/spell-substitution.yaml +1 -1
  104. package/content/classes/wizard/theses/staff-nexus.yaml +1 -1
  105. package/content/classes/wizard.yaml +3 -52
  106. package/content/domains/advanced/air.yaml +7 -0
  107. package/content/domains/advanced/ambition.yaml +7 -0
  108. package/content/domains/advanced/cities.yaml +7 -0
  109. package/content/domains/advanced/confidence.yaml +7 -0
  110. package/content/domains/advanced/creation.yaml +7 -0
  111. package/content/domains/advanced/darkness.yaml +7 -0
  112. package/content/domains/advanced/death.yaml +7 -0
  113. package/content/domains/advanced/destruction.yaml +7 -0
  114. package/content/domains/advanced/dreams.yaml +7 -0
  115. package/content/domains/advanced/earth.yaml +7 -0
  116. package/content/domains/advanced/family.yaml +7 -0
  117. package/content/domains/advanced/fate.yaml +7 -0
  118. package/content/domains/advanced/fire.yaml +7 -0
  119. package/content/domains/advanced/freedom.yaml +7 -0
  120. package/content/domains/advanced/healing.yaml +7 -0
  121. package/content/domains/advanced/indulgence.yaml +7 -0
  122. package/content/domains/advanced/knowledge.yaml +7 -0
  123. package/content/domains/advanced/luck.yaml +7 -0
  124. package/content/domains/advanced/magic.yaml +7 -0
  125. package/content/domains/advanced/might.yaml +7 -0
  126. package/content/domains/advanced/moon.yaml +7 -0
  127. package/content/domains/advanced/nature.yaml +7 -0
  128. package/content/domains/advanced/nightmares.yaml +7 -0
  129. package/content/domains/advanced/pain.yaml +7 -0
  130. package/content/domains/advanced/passion.yaml +7 -0
  131. package/content/domains/advanced/perfection.yaml +7 -0
  132. package/content/domains/advanced/protection.yaml +7 -0
  133. package/content/domains/advanced/secrecy.yaml +7 -0
  134. package/content/domains/advanced/sun.yaml +7 -0
  135. package/content/domains/advanced/travel.yaml +7 -0
  136. package/content/domains/advanced/trickery.yaml +7 -0
  137. package/content/domains/advanced/truth.yaml +7 -0
  138. package/content/domains/advanced/tyranny.yaml +7 -0
  139. package/content/domains/advanced/undeath.yaml +7 -0
  140. package/content/domains/advanced/water.yaml +7 -0
  141. package/content/domains/advanced/wealth.yaml +7 -0
  142. package/content/domains/advanced/zeal.yaml +7 -0
  143. package/content/domains/air.yaml +6 -0
  144. package/content/domains/ambition.yaml +6 -0
  145. package/content/domains/cities.yaml +6 -0
  146. package/content/domains/confidence.yaml +6 -0
  147. package/content/domains/creation.yaml +6 -0
  148. package/content/domains/darkness.yaml +6 -0
  149. package/content/domains/death.yaml +6 -0
  150. package/content/domains/destruction.yaml +6 -0
  151. package/content/domains/dreams.yaml +6 -0
  152. package/content/domains/earth.yaml +6 -0
  153. package/content/domains/family.yaml +6 -0
  154. package/content/domains/fate.yaml +6 -0
  155. package/content/domains/fire.yaml +6 -0
  156. package/content/domains/freedom.yaml +6 -0
  157. package/content/domains/healing.yaml +6 -0
  158. package/content/domains/indulgence.yaml +6 -0
  159. package/content/domains/knowledge.yaml +6 -0
  160. package/content/domains/luck.yaml +6 -0
  161. package/content/domains/magic.yaml +6 -0
  162. package/content/domains/might.yaml +6 -0
  163. package/content/domains/moon.yaml +6 -0
  164. package/content/domains/nature.yaml +6 -0
  165. package/content/domains/nightmares.yaml +6 -0
  166. package/content/domains/pain.yaml +6 -0
  167. package/content/domains/passion.yaml +6 -0
  168. package/content/domains/perfection.yaml +6 -0
  169. package/content/domains/protection.yaml +6 -0
  170. package/content/domains/secrecy.yaml +6 -0
  171. package/content/domains/sun.yaml +6 -0
  172. package/content/domains/travel.yaml +6 -0
  173. package/content/domains/trickery.yaml +6 -0
  174. package/content/domains/truth.yaml +6 -0
  175. package/content/domains/tyranny.yaml +6 -0
  176. package/content/domains/undeath.yaml +6 -0
  177. package/content/domains/water.yaml +6 -0
  178. package/content/domains/wealth.yaml +6 -0
  179. package/content/domains/zeal.yaml +6 -0
  180. package/content/effects/treated-disease.yaml +4 -0
  181. package/content/effects/treated-poison.yaml +4 -0
  182. package/content/feats/ancestry/changeling-lore.yaml +3 -1
  183. package/content/feats/ancestry/gnome-obsession.yaml +1 -39
  184. package/content/feats/ancestry/tengu-feather-fan.yaml +3 -3
  185. package/content/feats/archetype/barbarian/barbarian-dedication.yaml +0 -2
  186. package/content/feats/archetype/champion/champions-reaction.yaml +1 -11
  187. package/content/feats/archetype/gladiator/gladiator-dedication.yaml +1 -1
  188. package/content/feats/archetype/investigator/skill-mastery.yaml +2 -58
  189. package/content/feats/archetype/rogue/skill-mastery.yaml +2 -58
  190. package/content/feats/archetype/scout/terrain-scout.yaml +6 -0
  191. package/content/feats/archetype/viking/viking-dedication.yaml +3 -1
  192. package/content/feats/champion/deitys-domain.yaml +1 -22
  193. package/content/feats/cleric/advanced-domain.yaml +1 -187
  194. package/content/feats/cleric/domain-initiate.yaml +1 -199
  195. package/content/feats/oracle/domain-acumen.yaml +4 -138
  196. package/content/feats/skill/additional-lore.yaml +12 -0
  197. package/content/feats/skill/assurance.yaml +8 -30
  198. package/content/feats/skill/skill-training.yaml +1 -55
  199. package/content/feats/skill/terrain-stalker.yaml +1 -0
  200. package/content/feats/sorcerer/arcane-evolution.yaml +1 -26
  201. package/content/feats/sorcerer/occult-evolution.yaml +1 -26
  202. package/content/features/wizard/arcane-bond.yaml +8 -4
  203. package/content/gear/compass-lensatic.yaml +1 -0
  204. package/content/gear/compass.yaml +1 -0
  205. package/content/gear/crowbar-levered.yaml +1 -0
  206. package/content/gear/crowbar.yaml +1 -0
  207. package/content/heritages/deep-orc.yaml +3 -1
  208. package/content/heritages/woodstalker-lizardfolk.yaml +3 -1
  209. package/content/shields/specific/reflecting-shield.yaml +1 -1
  210. package/content/shields/specific/spellguard-shield.yaml +1 -0
  211. package/content/spells/agile-feet.yaml +1 -0
  212. package/content/spells/appearance-of-wealth.yaml +1 -0
  213. package/content/spells/athletic-rush.yaml +1 -0
  214. package/content/spells/bit-of-luck.yaml +1 -0
  215. package/content/spells/charming-touch.yaml +1 -0
  216. package/content/spells/cloak-of-shadow.yaml +1 -0
  217. package/content/spells/creative-splash.yaml +1 -0
  218. package/content/spells/cry-of-destruction.yaml +1 -0
  219. package/content/spells/dazzling-flash.yaml +1 -0
  220. package/content/spells/deaths-call.yaml +1 -0
  221. package/content/spells/enduring-might.yaml +2 -0
  222. package/content/spells/energy-absorption.yaml +2 -0
  223. package/content/spells/face-in-the-crowd.yaml +1 -0
  224. package/content/spells/fire-ray.yaml +1 -0
  225. package/content/spells/fire-shield.yaml +31 -0
  226. package/content/spells/flame-barrier.yaml +2 -0
  227. package/content/spells/guidance.yaml +2 -0
  228. package/content/spells/healers-blessing.yaml +1 -0
  229. package/content/spells/hurtling-stone.yaml +1 -0
  230. package/content/spells/ignite-ambition.yaml +1 -0
  231. package/content/spells/magics-vessel.yaml +1 -0
  232. package/content/spells/moonbeam.yaml +1 -0
  233. package/content/spells/overstuff.yaml +1 -0
  234. package/content/spells/perfected-mind.yaml +1 -0
  235. package/content/spells/protectors-sacrifice.yaml +1 -0
  236. package/content/spells/pushing-gust.yaml +1 -0
  237. package/content/spells/read-fate.yaml +1 -0
  238. package/content/spells/savor-the-sting.yaml +1 -0
  239. package/content/spells/scholarly-recollection.yaml +1 -0
  240. package/content/spells/shield.yaml +2 -0
  241. package/content/spells/soothing-words.yaml +1 -0
  242. package/content/spells/sudden-shift.yaml +1 -0
  243. package/content/spells/sure-strike.yaml +2 -0
  244. package/content/spells/sweet-dream.yaml +1 -0
  245. package/content/spells/tidal-surge.yaml +1 -0
  246. package/content/spells/touch-of-obedience.yaml +1 -0
  247. package/content/spells/touch-of-undeath.yaml +1 -0
  248. package/content/spells/true-target.yaml +2 -0
  249. package/content/spells/unimpeded-stride.yaml +1 -0
  250. package/content/spells/veil-of-confidence.yaml +1 -0
  251. package/content/spells/vibrant-thorns.yaml +1 -0
  252. package/content/spells/waking-nightmare.yaml +1 -0
  253. package/content/spells/weapon-surge.yaml +3 -0
  254. package/content/spells/whispering-quiet.yaml +1 -0
  255. package/content/spells/word-of-truth.yaml +1 -0
  256. package/dist/i18n/en.js +1 -1
  257. package/dist/i18n/en.json +210 -209
  258. package/dist/index.js +1 -1
  259. package/dist/release.json +8629 -4618
  260. package/i18n/en/ancestry-dragonblood.yaml +2 -2
  261. package/i18n/en/archetypes.yaml +10 -6
  262. package/i18n/en/backgrounds.yaml +6 -3
  263. package/i18n/en/battle-forms.yaml +0 -1
  264. package/i18n/en/champion.yaml +1 -1
  265. package/i18n/en/cleric.yaml +151 -149
  266. package/i18n/en/equipment.yaml +4 -1
  267. package/i18n/en/lores-pc2.yaml +6 -0
  268. package/i18n/en/oracle.yaml +0 -38
  269. package/i18n/en/rogue.yaml +3 -3
  270. package/i18n/en/spellcasting.yaml +3 -2
  271. package/i18n/en/spells-high.yaml +1 -0
  272. package/i18n/en/type-fields.yaml +2 -0
  273. package/i18n/en/wizard.yaml +2 -2
  274. package/i18n/en.yaml +19 -1
  275. package/pack.yaml +2 -2
  276. package/package.json +2 -2
  277. package/rules/advancement.yaml +1 -0
  278. package/rules/afflictions.yaml +2 -0
  279. package/rules/alchemist.yaml +14 -3
  280. package/rules/ancestry-feats.yaml +55 -13
  281. package/rules/archetypes.yaml +1 -0
  282. package/rules/barbarian.yaml +8 -21
  283. package/rules/bard.yaml +10 -4
  284. package/rules/building.yaml +7 -1
  285. package/rules/champion.yaml +3 -2
  286. package/rules/checks.yaml +1 -1
  287. package/rules/cleric.yaml +13 -3
  288. package/rules/conditions.yaml +1 -0
  289. package/rules/core.yaml +1 -0
  290. package/rules/creation.yaml +18 -0
  291. package/rules/druid.yaml +3 -2
  292. package/rules/equipment.yaml +7 -1
  293. package/rules/heritages.yaml +1 -1
  294. package/rules/investigator.yaml +3 -11
  295. package/rules/layout.yaml +19 -6
  296. package/rules/lores-pc2.yaml +221 -36
  297. package/rules/lores.yaml +226 -50
  298. package/rules/monk.yaml +2 -5
  299. package/rules/oracle.yaml +5 -3
  300. package/rules/ranger.yaml +3 -3
  301. package/rules/rogue.yaml +6 -1
  302. package/rules/skill-actions-athletics.yaml +1 -2
  303. package/rules/skill-actions-stealth.yaml +1 -2
  304. package/rules/skills.yaml +173 -56
  305. package/rules/sorcerer.yaml +16 -4
  306. package/rules/spellcasting.yaml +105 -28
  307. package/rules/spells-high.yaml +3 -3
  308. package/rules/strikes.yaml +3 -1
  309. package/rules/swashbuckler.yaml +4 -17
  310. package/rules/tags.yaml +6 -0
  311. package/rules/witch.yaml +2 -1
  312. package/rules/wizard.yaml +6 -4
  313. package/upgrades/0.1.0-to-0.2.0.yaml +11 -0
  314. package/upgrades/0.2.0-to-0.3.0.yaml +657 -0
package/README.md CHANGED
@@ -14,6 +14,9 @@ planes and characters) is left out.
14
14
  pnpm add @opencharacter/engine @opencharacter/orc-2e
15
15
  ```
16
16
 
17
+ This release needs spec 0.3: `@opencharacter/engine` 0.3.0 or later. An engine for an older
18
+ spec refuses it (`spec-version-unsupported`).
19
+
17
20
  The package's default export is the built pack (a `PackRelease`), and `i18n/en` its English
18
21
  text:
19
22
 
@@ -28,9 +31,9 @@ const { ruleset } = loaded;
28
31
 
29
32
  // A new character, made by the random creation start: every pick is drawn, so it finishes.
30
33
  const blank = {
31
- specVersion: '0.1.0',
34
+ specVersion: '0.3.0',
32
35
  id: 'new-character',
33
- packs: [{ id: 'orc-2e', version: '0.1.0' }],
36
+ packs: [{ id: 'orc-2e', version: '0.3.0' }],
34
37
  creating: true,
35
38
  };
36
39
  const created = startAction(ruleset, blank, {
@@ -75,6 +78,54 @@ reading is listed under [Rule readings](#rule-readings).
75
78
  GM Core's relics and vehicles, the setting's proper nouns, and anything from the pre-Remaster
76
79
  (OGL) books, such as Ancestry Paragon and dual-class characters; GM Core's level 0 characters.
77
80
 
81
+ ## Add-on packs
82
+
83
+ A pack that depends on `orc-2e` can add to what it offers:
84
+
85
+ - **Subclasses:** a feature whose `classOption` names a class's choice (`barbarian.instinct`,
86
+ `bard.muse`, `cleric.doctrine`, `wizard.school`, …) joins that choice, and Champion's Reaction
87
+ for causes.
88
+ - **Domains:** a `domain` item joins Domain Initiate and Domain Acumen (an advanced one, with
89
+ `advanced: true`, Advanced Domain); an initial domain spell names its domain in its `domain`
90
+ field for Deity's Domain; a mystery grants its domains into `oracle.domains`.
91
+ - **Gear:** tags, not IDs, mark Force Open's crowbar (`tool.crowbar`), Sense Direction's compass
92
+ (`tool.compass`) and shields against spells (`shield.against-spells`).
93
+ - **Archetypes:** a new archetype declares its own `archetypes.<name>.feats` field tagged
94
+ `archetype-feats`; a feat for an existing archetype adds 1 to that archetype's field.
95
+ - **Open enums** (`extendEnums`): the identity fields (`barbarian.instinct`, `bard.muse`,
96
+ `champion.cause`, `cleric.doctrine`, `druid.order`, `investigator.methodology`,
97
+ `oracle.mystery`, `ranger.edge`, `rogue.racket`, `sorcerer.bloodline`, `swashbuckler.style`,
98
+ `wizard.school`, `wizard.thesis`, `witch.patron`, `alchemist.field`, `stance.current`), which
99
+ a new subclass feature sets with its own effect (`{ target: barbarian.instinct, op: set,
100
+ value: "'thunder'" }`), as the core's do; weapon `group` and `damageType`, armor `group`,
101
+ consumable `category`, `damageType` and `persistentType`, spell damage types (`damageType`,
102
+ `damage2Type`, `persistentType` and the cast's `damageType` state), affliction and persistent
103
+ damage condition damage types, feat `category`, and the damage type parameters of `cast-spell`
104
+ (`damageType`) and `bomb-strike` (`damageType`, `persistentType`), so an added bomb or spell
105
+ deals its type (`orc-2e:actions.bomb-strike.params.damageType`). A new damage type or group also needs its
106
+ tag (`damage.sonic`, `group.firearm`), declared and named in the add-on.
107
+ - **Choices** (`extendChoices`): written value and inline option choices take additions: the
108
+ dedications' identity picks (Barbarian Dedication's `instinct`), the follow-up feats' inline
109
+ options (Order Explorer's `order`, Additional Lore's `lore`), and the 15- and 16-skill lists.
110
+ - **Naming what an add-on adds:** it names each added value, option or key in its own text,
111
+ under the key this pack would use, and `createText` finds it there when the app passes the
112
+ ruleset's `enumOrigins`, `optionOrigins` and `familyOrigins`. For example,
113
+ `sonic` added to `orc-2e:types.weapon.fields.damageType` is
114
+ `types.weapon.fields.damageType.values.sonic.name: Sonic` (through `enumOrigins`), and an
115
+ Order Explorer option `stone` is
116
+ `feats.druid.order-explorer.choices.order.options.stone.name: Stone` (through
117
+ `optionOrigins`).
118
+ - **Skills and Lores:** a choice of any skill reads `skills.offered` and one of any Lore
119
+ `skills.lores`; an add-on's Lore declares its fields (`skills.lore.<name>.rank`, `.mod`, …,
120
+ as `rules/lores.yaml` does) and grants its tag into both with a rules effect.
121
+ - **Step tags** for rules-level `option` and `changes` effects: `creation.ancestry`,
122
+ `creation.heritage`, `creation.background`, `creation.class` and `creation.finish` (guided and
123
+ random creation), `level-up.gain`, and the actions' own (`strike.hit`, …).
124
+
125
+ Still closed: attributes, proficiency ranks, saves, spell traditions (and a staff's
126
+ `tradition`), weapon and armor categories, and physical damage types for `versatile` and
127
+ `modular`, the game's fixed sets.
128
+
78
129
  ## License
79
130
 
80
131
  - **License:** the ORC License. Its four notices (Article III) are in the manifest, which apps
@@ -271,7 +322,7 @@ reading is listed under [Rule readings](#rule-readings).
271
322
  first of three Lores of the player's choice, named by the subject the player writes
272
323
  (`skills.lore.custom1.subject`); Additional Lore offers all three. Assurance (farmhand, nomad, raised by belief, scholar) is an action for the skill it's
273
324
  chosen for: a fixed 10 + the proficiency bonus against the DC, no dice and no other bonus or
274
- penalty. Content can grant Assurance for a named skill (the grant's `skill` state): each background's Assurance is for the skill the book names (the driver's Lore, the scholar's and raised by belief's chosen skill, an inline option each). Player Core 2's eight new Lores and its
325
+ penalty. Its skill is a pick (any skill, or a trained Lore), which content granting Assurance for a named skill presets: each background's Assurance is for the skill the book names (the driver's Lore, the scholar's and raised by belief's chosen skill, an inline option each). Player Core 2's eight new Lores and its
275
326
  ten ancestry Lores are `rules/lores-pc2.yaml`; the cursed background's Warding Sign is the
276
327
  situational choice `wardingSign`, the feybound's Fey's Fortune `fortune`.
277
328
  - **Feats:** a slot per level for ancestry (1, 5, 9, 13, 17), general (3, 7, 11, 15, 19; skill feats
@@ -307,8 +358,8 @@ reading is listed under [Rule readings](#rule-readings).
307
358
  trained. Demoralize frightens, Trip knocks prone (1d6 bludgeoning on a critical success),
308
359
  Grapple grabs or restrains, Escape frees; Treat Wounds (any DC your rank allows, an hour
309
360
  doubling it) and Battle Medicine heal, Treat Poison and Treat Disease give the next save a
310
- circumstance modifier (an applied effect), Administer First Aid stabilizes; Feint makes the
311
- target off-guard to your melee Strikes (`feint.target`, which the Strike reads); a critical
361
+ circumstance modifier (an applied effect that save removes), Administer First Aid stabilizes;
362
+ Feint makes the target off-guard to your melee Strikes (`feint.target`, which the Strike reads); a critical
312
363
  failure to Trip or Shove is prone, to Disarm off-guard; Subsist's failure is fatigued. Attack-
313
364
  trait actions take and count the multiple attack penalty. Actions against several creatures
314
365
  (Hide, Sneak, Lie, Coerce, Make an Impression, Seek, …) roll once and give each one's degree
@@ -428,8 +479,9 @@ reading is listed under [Rule readings](#rule-readings).
428
479
  `prepare-spells` (inputs per rank the slot counts read); Improved Familiar Attunement
429
480
  and Staff Nexus text). Split Slot: `prepare-spells` may put a second
430
481
  spell in one slot below the highest rank, its copy naming the first's (`split`); casting either
431
- expends both. Drain Bonded Item is an action (the ranks drained today are the
432
- class copy's state, which `daily-preparations` clears). Feats: Counterspell (the expending),
482
+ expends both. Drain Bonded Item is an action (the ranks drained today, `bondDrained`, and
483
+ Linked Focus's `linkedFocusUsed` are Arcane Bond's saved grant state, which `daily-preparations`
484
+ clears). Feats: Counterspell (the expending),
433
485
  Linked Focus and twelve more, text where they shape a spell's range, area or traits.
434
486
  - **The cleric** (Player Core): Wisdom, divine prepared, and the divine font's 4 to 6 extra slots
435
487
  of heal or harm at the highest rank (to 9th), which `prepare-spells` fills. The deity is the
@@ -647,16 +699,19 @@ reading is listed under [Rule readings](#rule-readings).
647
699
  - **Hero Points**: an input, 1 to start, at most 3; spending them is the app's.
648
700
  - **Creation**: a guided start, `standard`, and a random one,
649
701
  `random`. Guided: an ancestry and its heritage, a background and a class, then what each brings in the book's order: the ancestry's
650
- boosts and the heritage's choices, the background's boosts (and a scholar's skill), the class's
651
- key attribute, its skill, its trained skills (3 + Intelligence, each one not trained yet) and
652
- its feat; then the rest (four free boosts, the ancestry feat, languages, a training freed by a
653
- skill trained twice), and full Hit Points. While being created the character needs an
702
+ boosts and the heritage's choices, the background's boosts (and a scholar's skill), the four
703
+ free boosts, the class's key attribute, its skill, its trained skills (3 + Intelligence, each
704
+ one not trained yet, counted with the free boosts in) and its feat; then the rest (the ancestry
705
+ feat, languages, a training freed by a skill trained twice), and full Hit Points. While being created the character needs an
654
706
  ancestry, a background and a class (`creation-ancestry-background-class`); it never has more
655
707
  than one of each (the content types' `copies: { max: 1 }`), created or not.
656
708
  - **Random** (`random-character`): the rules have players choose, so the odds are the pack's. The same picks in the same order, each drawn by the engine uniformly among the
657
709
  options eligible then (`random`): the ancestry, its heritage, the background
658
710
  and the class, then every pick they bring (heritage feats, the key attribute, trained
659
- skills, feats, languages, a freed training). Boosts follow a priority instead. An ancestry
711
+ skills, feats, languages, a freed training). One difference: the four free boosts come
712
+ after the class's picks, so a choice that sets the key attribute (a rogue's racket) is made
713
+ before they're placed; a trained skill the final Intelligence adds is drawn with the rest.
714
+ Boosts follow a priority instead. An ancestry
660
715
  takes its standard boosts (the book's default). The key attribute is planned with the
661
716
  class: the class's own (a barbarian's Strength), else Strength or Dexterity, a d2 deciding;
662
717
  the class's key attribute pick takes the planned one when it is offered (a rogue other than
@@ -743,7 +798,8 @@ Where the books leave a rule open, or the format needs a choice the books don't
743
798
  reads it as below. These are the pack's provisional calls; a table may rule otherwise.
744
799
 
745
800
  - **Random start:** the books have players choose, so the odds are the pack's. Each pick is
746
- drawn uniformly among the options eligible then, in the guided start's order. Boosts follow a
801
+ drawn uniformly among the options eligible then, in the guided start's order, except that
802
+ the free boosts follow the class's picks, once the key attribute is known. Boosts follow a
747
803
  priority instead: an ancestry takes its standard boosts; the key attribute is planned with the
748
804
  class (its own, else Strength or Dexterity on a d2); every boost goes to the first offered of
749
805
  the key attribute, Constitution, Dexterity, Wisdom, Strength, Intelligence and Charisma.
@@ -806,8 +862,10 @@ reads it as below. These are the pack's provisional calls; a table may rule othe
806
862
  flanked or in cover (situational choices), when a condition is gained (`applyEffect`), daily
807
863
  preparations (the pack's `daily-preparations` and `prepare-spells` say what happens), rests; a
808
864
  spell's duration, sustaining and dismissing it, its area and who is in it (an applied spell
809
- stays until the app removes it; a spell on "you and your allies" takes the caster as an ally
810
- too); summoned creatures; onset, intervals and virulence of afflictions.
865
+ stays until the app removes it, but one for the next roll, such as guidance, sure strike,
866
+ true target or weapon surge, ends on the roll it changes; a spell on "you and your allies"
867
+ takes the caster as an ally too); summoned creatures; onset, intervals and virulence of
868
+ afflictions.
811
869
  - **Text only:** critical specialization, armor specialization, the skill feats that change
812
870
  time, other creatures or what the GM tells you (58 of 106), the skill actions' movement,
813
871
  attitudes and detection toward one observer, innate spells from heritages, Lunge; the rogue's,
@@ -825,7 +883,7 @@ reads it as below. These are the pack's provisional calls; a table may rule othe
825
883
  any other Lore is a homebrew increases input and a trained-by-increase input (tagged
826
884
  `skill-increase`, they join level-up) and rank and modifier fields, trained by a homebrew
827
885
  effect granting its tag into `skills.trained`. The class's free skills and `extra-training`
828
- offer the first seven Lores only: a value choice lists its values.
886
+ offer the first seven Lores only: their lists are written out, as no formula lists fields by tag.
829
887
 
830
888
  ## Sources
831
889
 
@@ -1,6 +1,6 @@
1
1
  id: backgrounds.driver
2
2
  type: background
3
- # Assurance gets the picked Lore through its `skill` state, so its own choice isn't asked.
3
+ # Assurance's skill choice is preset to the picked Lore.
4
4
  effects:
5
5
  - target: skills.trained
6
6
  op: grant
@@ -27,7 +27,7 @@ choices:
27
27
  }
28
28
  - { target: skills.trainings, op: add, value: 1 }
29
29
  grants:
30
- - { item: feats.skill.assurance, state: { skill: "'skill.lore.driving'" } }
30
+ - { item: feats.skill.assurance, choices: { skill: [{ option: skill.lore.driving }] } }
31
31
  - id: piloting
32
32
  effects:
33
33
  - {
@@ -38,4 +38,4 @@ choices:
38
38
  }
39
39
  - { target: skills.trainings, op: add, value: 1 }
40
40
  grants:
41
- - { item: feats.skill.assurance, state: { skill: "'skill.lore.piloting'" } }
41
+ - { item: feats.skill.assurance, choices: { skill: [{ option: skill.lore.piloting }] } }
@@ -15,7 +15,7 @@ effects:
15
15
  }
16
16
  - { target: skills.trainings, op: add, value: 2 }
17
17
  grants:
18
- - { item: feats.skill.assurance, state: { skill: "'skill.athletics'" } }
18
+ - { item: feats.skill.assurance, choices: { skill: [{ option: skill.athletics }] } }
19
19
  choices:
20
20
  - id: boost
21
21
  unique: background-boosts
@@ -15,7 +15,7 @@ effects:
15
15
  }
16
16
  - { target: skills.trainings, op: add, value: 2 }
17
17
  grants:
18
- - item: feats.skill.terrain-expertise
18
+ - { item: feats.skill.terrain-expertise, choices: { terrain: [{ option: underground }] } }
19
19
  choices:
20
20
  - id: boost
21
21
  unique: background-boosts
@@ -9,7 +9,7 @@ effects:
9
9
  }
10
10
  - { target: skills.trainings, op: add, value: 1 }
11
11
  grants:
12
- - { item: feats.skill.assurance, state: { skill: "'skill.survival'" } }
12
+ - { item: feats.skill.assurance, choices: { skill: [{ option: skill.survival }] } }
13
13
  choices:
14
14
  - id: boost
15
15
  unique: background-boosts
@@ -28,7 +28,7 @@ choices:
28
28
  when: "!('skill.acrobatics' in skills.chosen)"
29
29
  - { target: skills.trainings, op: add, value: 1 }
30
30
  grants:
31
- - { item: feats.skill.assurance, state: { skill: "'skill.acrobatics'" } }
31
+ - { item: feats.skill.assurance, choices: { skill: [{ option: skill.acrobatics }] } }
32
32
  - id: arcana
33
33
  effects:
34
34
  - target: skills.trained
@@ -37,7 +37,7 @@ choices:
37
37
  when: "!('skill.arcana' in skills.chosen)"
38
38
  - { target: skills.trainings, op: add, value: 1 }
39
39
  grants:
40
- - { item: feats.skill.assurance, state: { skill: "'skill.arcana'" } }
40
+ - { item: feats.skill.assurance, choices: { skill: [{ option: skill.arcana }] } }
41
41
  - id: athletics
42
42
  effects:
43
43
  - target: skills.trained
@@ -46,7 +46,7 @@ choices:
46
46
  when: "!('skill.athletics' in skills.chosen)"
47
47
  - { target: skills.trainings, op: add, value: 1 }
48
48
  grants:
49
- - { item: feats.skill.assurance, state: { skill: "'skill.athletics'" } }
49
+ - { item: feats.skill.assurance, choices: { skill: [{ option: skill.athletics }] } }
50
50
  - id: crafting
51
51
  effects:
52
52
  - target: skills.trained
@@ -55,7 +55,7 @@ choices:
55
55
  when: "!('skill.crafting' in skills.chosen)"
56
56
  - { target: skills.trainings, op: add, value: 1 }
57
57
  grants:
58
- - { item: feats.skill.assurance, state: { skill: "'skill.crafting'" } }
58
+ - { item: feats.skill.assurance, choices: { skill: [{ option: skill.crafting }] } }
59
59
  - id: deception
60
60
  effects:
61
61
  - target: skills.trained
@@ -64,7 +64,7 @@ choices:
64
64
  when: "!('skill.deception' in skills.chosen)"
65
65
  - { target: skills.trainings, op: add, value: 1 }
66
66
  grants:
67
- - { item: feats.skill.assurance, state: { skill: "'skill.deception'" } }
67
+ - { item: feats.skill.assurance, choices: { skill: [{ option: skill.deception }] } }
68
68
  - id: diplomacy
69
69
  effects:
70
70
  - target: skills.trained
@@ -73,7 +73,7 @@ choices:
73
73
  when: "!('skill.diplomacy' in skills.chosen)"
74
74
  - { target: skills.trainings, op: add, value: 1 }
75
75
  grants:
76
- - { item: feats.skill.assurance, state: { skill: "'skill.diplomacy'" } }
76
+ - { item: feats.skill.assurance, choices: { skill: [{ option: skill.diplomacy }] } }
77
77
  - id: intimidation
78
78
  effects:
79
79
  - target: skills.trained
@@ -82,7 +82,7 @@ choices:
82
82
  when: "!('skill.intimidation' in skills.chosen)"
83
83
  - { target: skills.trainings, op: add, value: 1 }
84
84
  grants:
85
- - { item: feats.skill.assurance, state: { skill: "'skill.intimidation'" } }
85
+ - { item: feats.skill.assurance, choices: { skill: [{ option: skill.intimidation }] } }
86
86
  - id: medicine
87
87
  effects:
88
88
  - target: skills.trained
@@ -91,7 +91,7 @@ choices:
91
91
  when: "!('skill.medicine' in skills.chosen)"
92
92
  - { target: skills.trainings, op: add, value: 1 }
93
93
  grants:
94
- - { item: feats.skill.assurance, state: { skill: "'skill.medicine'" } }
94
+ - { item: feats.skill.assurance, choices: { skill: [{ option: skill.medicine }] } }
95
95
  - id: nature
96
96
  effects:
97
97
  - target: skills.trained
@@ -100,7 +100,7 @@ choices:
100
100
  when: "!('skill.nature' in skills.chosen)"
101
101
  - { target: skills.trainings, op: add, value: 1 }
102
102
  grants:
103
- - { item: feats.skill.assurance, state: { skill: "'skill.nature'" } }
103
+ - { item: feats.skill.assurance, choices: { skill: [{ option: skill.nature }] } }
104
104
  - id: occultism
105
105
  effects:
106
106
  - target: skills.trained
@@ -109,7 +109,7 @@ choices:
109
109
  when: "!('skill.occultism' in skills.chosen)"
110
110
  - { target: skills.trainings, op: add, value: 1 }
111
111
  grants:
112
- - { item: feats.skill.assurance, state: { skill: "'skill.occultism'" } }
112
+ - { item: feats.skill.assurance, choices: { skill: [{ option: skill.occultism }] } }
113
113
  - id: performance
114
114
  effects:
115
115
  - target: skills.trained
@@ -118,7 +118,7 @@ choices:
118
118
  when: "!('skill.performance' in skills.chosen)"
119
119
  - { target: skills.trainings, op: add, value: 1 }
120
120
  grants:
121
- - { item: feats.skill.assurance, state: { skill: "'skill.performance'" } }
121
+ - { item: feats.skill.assurance, choices: { skill: [{ option: skill.performance }] } }
122
122
  - id: religion
123
123
  effects:
124
124
  - target: skills.trained
@@ -127,7 +127,7 @@ choices:
127
127
  when: "!('skill.religion' in skills.chosen)"
128
128
  - { target: skills.trainings, op: add, value: 1 }
129
129
  grants:
130
- - { item: feats.skill.assurance, state: { skill: "'skill.religion'" } }
130
+ - { item: feats.skill.assurance, choices: { skill: [{ option: skill.religion }] } }
131
131
  - id: society
132
132
  effects:
133
133
  - target: skills.trained
@@ -136,7 +136,7 @@ choices:
136
136
  when: "!('skill.society' in skills.chosen)"
137
137
  - { target: skills.trainings, op: add, value: 1 }
138
138
  grants:
139
- - { item: feats.skill.assurance, state: { skill: "'skill.society'" } }
139
+ - { item: feats.skill.assurance, choices: { skill: [{ option: skill.society }] } }
140
140
  - id: stealth
141
141
  effects:
142
142
  - target: skills.trained
@@ -145,7 +145,7 @@ choices:
145
145
  when: "!('skill.stealth' in skills.chosen)"
146
146
  - { target: skills.trainings, op: add, value: 1 }
147
147
  grants:
148
- - { item: feats.skill.assurance, state: { skill: "'skill.stealth'" } }
148
+ - { item: feats.skill.assurance, choices: { skill: [{ option: skill.stealth }] } }
149
149
  - id: survival
150
150
  effects:
151
151
  - target: skills.trained
@@ -154,7 +154,7 @@ choices:
154
154
  when: "!('skill.survival' in skills.chosen)"
155
155
  - { target: skills.trainings, op: add, value: 1 }
156
156
  grants:
157
- - { item: feats.skill.assurance, state: { skill: "'skill.survival'" } }
157
+ - { item: feats.skill.assurance, choices: { skill: [{ option: skill.survival }] } }
158
158
  - id: thievery
159
159
  effects:
160
160
  - target: skills.trained
@@ -163,4 +163,4 @@ choices:
163
163
  when: "!('skill.thievery' in skills.chosen)"
164
164
  - { target: skills.trainings, op: add, value: 1 }
165
165
  grants:
166
- - { item: feats.skill.assurance, state: { skill: "'skill.thievery'" } }
166
+ - { item: feats.skill.assurance, choices: { skill: [{ option: skill.thievery }] } }
@@ -26,7 +26,7 @@ choices:
26
26
  when: "!('skill.arcana' in skills.chosen)"
27
27
  - { target: skills.trainings, op: add, value: 1 }
28
28
  grants:
29
- - { item: feats.skill.assurance, state: { skill: "'skill.arcana'" } }
29
+ - { item: feats.skill.assurance, choices: { skill: [{ option: skill.arcana }] } }
30
30
  - id: nature
31
31
  effects:
32
32
  - target: skills.trained
@@ -35,7 +35,7 @@ choices:
35
35
  when: "!('skill.nature' in skills.chosen)"
36
36
  - { target: skills.trainings, op: add, value: 1 }
37
37
  grants:
38
- - { item: feats.skill.assurance, state: { skill: "'skill.nature'" } }
38
+ - { item: feats.skill.assurance, choices: { skill: [{ option: skill.nature }] } }
39
39
  - id: occultism
40
40
  effects:
41
41
  - target: skills.trained
@@ -44,7 +44,7 @@ choices:
44
44
  when: "!('skill.occultism' in skills.chosen)"
45
45
  - { target: skills.trainings, op: add, value: 1 }
46
46
  grants:
47
- - { item: feats.skill.assurance, state: { skill: "'skill.occultism'" } }
47
+ - { item: feats.skill.assurance, choices: { skill: [{ option: skill.occultism }] } }
48
48
  - id: religion
49
49
  effects:
50
50
  - target: skills.trained
@@ -53,4 +53,4 @@ choices:
53
53
  when: "!('skill.religion' in skills.chosen)"
54
54
  - { target: skills.trainings, op: add, value: 1 }
55
55
  grants:
56
- - { item: feats.skill.assurance, state: { skill: "'skill.religion'" } }
56
+ - { item: feats.skill.assurance, choices: { skill: [{ option: skill.religion }] } }
@@ -1,6 +1,6 @@
1
1
  id: classes.alchemist.fields.bomber
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: alchemist.research-field }
4
4
  effects:
5
5
  - { target: alchemist.field, op: set, value: "'bomber'" }
6
6
  choices:
@@ -1,6 +1,6 @@
1
1
  id: classes.alchemist.fields.chirurgeon
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: alchemist.research-field }
4
4
  # Medicine checks use Crafting's modifier through an `atLeast` on Medicine's.
5
5
  effects:
6
6
  - { target: alchemist.field, op: set, value: "'chirurgeon'" }
@@ -1,6 +1,6 @@
1
1
  id: classes.alchemist.fields.mutagenist
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: alchemist.research-field }
4
4
  effects:
5
5
  - { target: alchemist.field, op: set, value: "'mutagenist'" }
6
6
  - target: { steps: [consumable.drink] }
@@ -1,6 +1,6 @@
1
1
  id: classes.alchemist.fields.toxicologist
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: alchemist.research-field }
4
4
  effects:
5
5
  - { target: alchemist.field, op: set, value: "'toxicologist'" }
6
6
  - target: { incoming: { fields: [hp.current], tags: [damage.poison] } }
@@ -45,44 +45,12 @@ grants:
45
45
  - { item: features.alchemist.medium-armor-mastery, when: level >= 19 }
46
46
  choices:
47
47
  - id: research-field
48
- from:
49
- items:
50
- [
51
- classes.alchemist.fields.bomber,
52
- classes.alchemist.fields.chirurgeon,
53
- classes.alchemist.fields.mutagenist,
54
- classes.alchemist.fields.toxicologist,
55
- ]
48
+ from: { type: feature, where: "item.classOption == 'alchemist.research-field'" }
56
49
  - id: skills
57
50
  unique: skill-training
58
51
  pick: 3 + max(0, attributes.int.mod)
59
52
  from:
60
- values:
61
- [
62
- skill.acrobatics,
63
- skill.arcana,
64
- skill.athletics,
65
- skill.crafting,
66
- skill.deception,
67
- skill.diplomacy,
68
- skill.intimidation,
69
- skill.medicine,
70
- skill.nature,
71
- skill.occultism,
72
- skill.performance,
73
- skill.religion,
74
- skill.society,
75
- skill.stealth,
76
- skill.survival,
77
- skill.thievery,
78
- skill.lore.academia,
79
- skill.lore.circus,
80
- skill.lore.farming,
81
- skill.lore.legal,
82
- skill.lore.scribing,
83
- skill.lore.underworld,
84
- skill.lore.warfare,
85
- ]
53
+ values: { formula: skills.offered }
86
54
  where: '!(value in skills.trained) && !(value in skills.chosen) || value in choice.picks'
87
55
  effects:
88
56
  - { target: skills.chosen, op: grant, value: { formula: pick.value } }
@@ -1,6 +1,6 @@
1
1
  id: classes.barbarian.animals.ape
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: barbarian.animal }
4
4
  # The animal's unarmed attacks are standard copies while you have it; Rage equips them.
5
5
  standardCopies:
6
6
  - { type: weapon, where: "'animal.ape' in item.tags" }
@@ -1,6 +1,6 @@
1
1
  id: classes.barbarian.animals.bear
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: barbarian.animal }
4
4
  # The animal's unarmed attacks are standard copies while you have it; Rage equips them.
5
5
  standardCopies:
6
6
  - { type: weapon, where: "'animal.bear' in item.tags" }
@@ -1,6 +1,6 @@
1
1
  id: classes.barbarian.animals.bull
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: barbarian.animal }
4
4
  # The animal's unarmed attacks are standard copies while you have it; Rage equips them.
5
5
  standardCopies:
6
6
  - { type: weapon, where: "'animal.bull' in item.tags" }
@@ -1,6 +1,6 @@
1
1
  id: classes.barbarian.animals.cat
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: barbarian.animal }
4
4
  # The animal's unarmed attacks are standard copies while you have it; Rage equips them.
5
5
  standardCopies:
6
6
  - { type: weapon, where: "'animal.cat' in item.tags" }
@@ -1,6 +1,6 @@
1
1
  id: classes.barbarian.animals.deer
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: barbarian.animal }
4
4
  # The animal's unarmed attacks are standard copies while you have it; Rage equips them.
5
5
  standardCopies:
6
6
  - { type: weapon, where: "'animal.deer' in item.tags" }
@@ -1,6 +1,6 @@
1
1
  id: classes.barbarian.animals.frog
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: barbarian.animal }
4
4
  # The animal's unarmed attacks are standard copies while you have it; Rage equips them.
5
5
  standardCopies:
6
6
  - { type: weapon, where: "'animal.frog' in item.tags" }
@@ -1,6 +1,6 @@
1
1
  id: classes.barbarian.animals.shark
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: barbarian.animal }
4
4
  # The animal's unarmed attacks are standard copies while you have it; Rage equips them.
5
5
  standardCopies:
6
6
  - { type: weapon, where: "'animal.shark' in item.tags" }
@@ -1,6 +1,6 @@
1
1
  id: classes.barbarian.animals.snake
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: barbarian.animal }
4
4
  # The animal's unarmed attacks are standard copies while you have it; Rage equips them.
5
5
  standardCopies:
6
6
  - { type: weapon, where: "'animal.snake' in item.tags" }
@@ -1,6 +1,6 @@
1
1
  id: classes.barbarian.animals.wolf
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: barbarian.animal }
4
4
  # The animal's unarmed attacks are standard copies while you have it; Rage equips them.
5
5
  standardCopies:
6
6
  - { type: weapon, where: "'animal.wolf' in item.tags" }
@@ -1,6 +1,6 @@
1
1
  id: classes.barbarian.instincts.animal
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: barbarian.instinct }
4
4
  effects:
5
5
  - { target: barbarian.instinct, op: set, value: "'animal'" }
6
6
  - { target: rage.animalDamage, op: set, value: 'level >= 15 ? 12 : level >= 7 ? 5 : 2' }
@@ -8,16 +8,4 @@ effects:
8
8
  - { target: rage.resists, op: grant, value: { tag: damage.slashing }, when: level >= 9 }
9
9
  choices:
10
10
  - id: animal
11
- from:
12
- items:
13
- [
14
- classes.barbarian.animals.ape,
15
- classes.barbarian.animals.bear,
16
- classes.barbarian.animals.bull,
17
- classes.barbarian.animals.cat,
18
- classes.barbarian.animals.deer,
19
- classes.barbarian.animals.frog,
20
- classes.barbarian.animals.shark,
21
- classes.barbarian.animals.snake,
22
- classes.barbarian.animals.wolf,
23
- ]
11
+ from: { type: feature, where: "item.classOption == 'barbarian.animal'" }
@@ -1,6 +1,6 @@
1
1
  id: classes.barbarian.instincts.dragon
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: barbarian.instinct }
4
4
  effects:
5
5
  - { target: barbarian.instinct, op: set, value: "'dragon'" }
6
6
  - { target: rage.altDamage, op: set, value: 'level >= 15 ? 16 : level >= 7 ? 8 : 4' }
@@ -9,7 +9,6 @@ choices:
9
9
  - id: breath
10
10
  from: { values: [bludgeoning, fire, force, mental, poison, spirit] }
11
11
  effects:
12
- - { target: rage.altType, op: set, value: pick.value }
13
12
  - target: rage.resists
14
13
  op: grant
15
14
  value: { formula: "'damage.' + pick.value" }
@@ -1,6 +1,6 @@
1
1
  id: classes.barbarian.instincts.fury
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: barbarian.instinct }
4
4
  effects:
5
5
  - { target: barbarian.instinct, op: set, value: "'fury'" }
6
6
  - { target: rage.damage, op: set, value: 'level >= 15 ? 13 : level >= 7 ? 7 : 3' }
@@ -1,6 +1,6 @@
1
1
  id: classes.barbarian.instincts.giant
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: barbarian.instinct }
4
4
  # The player sets `rage.largerWeapon` while wielding a larger weapon, since weapon size isn't
5
5
  # modeled.
6
6
  effects:
@@ -1,8 +1,7 @@
1
1
  id: classes.barbarian.instincts.spirit
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: barbarian.instinct }
4
4
  effects:
5
5
  - { target: barbarian.instinct, op: set, value: "'spirit'" }
6
6
  - { target: rage.altDamage, op: set, value: 'level >= 15 ? 13 : level >= 7 ? 7 : 3' }
7
- - { target: rage.altType, op: set, value: "'spirit'" }
8
7
  - { target: rage.resists, op: grant, value: { tag: damage.void }, when: level >= 9 }
@@ -1,6 +1,6 @@
1
1
  id: classes.barbarian.instincts.superstition
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: barbarian.instinct }
4
4
  effects:
5
5
  - { target: barbarian.instinct, op: set, value: "'superstition'" }
6
6
  - { target: rage.damage, op: set, value: 'level >= 15 ? 13 : level >= 7 ? 7 : 3' }