@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
@@ -498,6 +498,7 @@ spells.fiery-body.description: |-
498
498
 
499
499
  **Heightened (9th)** Touching you deals 4d6 fire damage, your unarmed attacks 2d4 more fire damage, and your fly Speed is 60 feet.
500
500
  spells.fire-shield.name: 'Fire Shield'
501
+ spells.fire-shield.state.blocked.name: 'Shield damage'
501
502
  spells.fire-shield.description: |-
502
503
  A hovering shield of fire gives you cold resistance 5 and protects you from mild and severe environmental cold. You can Raise a Shield with it for a +1 circumstance bonus to AC, and Shield Block with it: Hardness 10 (halved against water effects), 40 HP, no Broken Threshold, immune to fire. When you Shield Block an unarmed attack or an adjacent attacker's melee attack with it, the attacker takes 2d6 fire damage.
503
504
 
@@ -8,6 +8,7 @@ types.heritage.fields.versatile.description: 'Open to any ancestry.'
8
8
  types.class.fields.hp.name: 'Hit Points per level'
9
9
  types.class.fields.hp.description: 'Plus the Constitution modifier.'
10
10
  types.feature.fields.level.name: 'Level'
11
+ types.feature.fields.classOption.name: 'Class option'
11
12
  types.feat.fields.level.name: 'Level'
12
13
  types.feat.fields.category.name: 'Category'
13
14
  types.feat.fields.ancestry.name: 'Ancestry'
@@ -92,6 +93,7 @@ types.ritual.fields.duration.name: 'Duration'
92
93
  types.ritual.fields.durationAmount.name: 'Duration amount'
93
94
  types.ritual.fields.durationAmount.description: 'How many of the duration unit.'
94
95
  types.spell.fields.rank.name: 'Rank'
96
+ types.spell.fields.domain.name: 'Domain'
95
97
  types.spell.fields.cast.name: 'Actions to cast'
96
98
  types.spell.fields.range.name: 'Range (ft)'
97
99
  types.spell.fields.range.description: '0 for touch.'
@@ -2,8 +2,6 @@
2
2
  # Short rules text written for the pack.
3
3
  classes.wizard.name: Wizard
4
4
  classes.wizard.description: "A scholar of arcane magic who prepares spells from a spellbook. Key attribute: Intelligence. 6 Hit Points plus Constitution per level. Trained in Perception, Fortitude and Reflex, expert in Will; trained in simple weapons and unarmed attacks; trained in unarmored defense; trained in the wizard class DC, spell attack modifier and spell DC. Trained in Arcana and 2 skills plus Intelligence. Arcane prepared spellcasting with Intelligence: two spells of each rank (three from the next level) and five cantrips, prepared from your spellbook, plus your curriculum's extra cantrip and spell of each rank."
5
- classes.wizard.state.bondDrained.name: Ranks drained from the bonded item today
6
- classes.wizard.state.linkedFocusUsed.name: Linked Focus used today
7
5
  classes.wizard.choices.school.prompt: Arcane school
8
6
  classes.wizard.choices.curriculum-cantrip.prompt: 'Curriculum: a cantrip for your spellbook'
9
7
  classes.wizard.choices.curriculum.prompt: 'Curriculum: rank {slot} spells for your spellbook'
@@ -49,6 +47,8 @@ classes.wizard.theses.staff-nexus.name: Staff Nexus
49
47
  classes.wizard.theses.staff-nexus.description: 'You start with a makeshift staff holding a cantrip and a 1st-rank spell from your spellbook. At daily preparations, expend a spell to give it charges equal to its rank (two spells from 8th level, three from 16th); casting the 1st-rank spell from it costs a charge. You can merge it with another staff, adding its two spells.'
50
48
 
51
49
  features.wizard.arcane-bond.name: Arcane Bond
50
+ features.wizard.arcane-bond.state.bondDrained.name: Ranks drained from the bonded item today
51
+ features.wizard.arcane-bond.state.linkedFocusUsed.name: Linked Focus used today
52
52
  features.wizard.arcane-bond.description: 'Each day when you prepare spells, you designate an item you own as your bonded item. Drain Bonded Item (free action, arcane, once per day; your bonded item is on your person): this turn, you can cast one spell you prepared today and already cast, without spending a slot.'
53
53
  features.wizard.arcane-bond.actions.drain-bonded-item.name: Drain Bonded Item
54
54
  features.wizard.arcane-bond.actions.drain-bonded-item.steps.spell.prompt: A prepared spell you already cast today
package/i18n/en.yaml CHANGED
@@ -9,6 +9,7 @@ actions.create-character.name: Build a character
9
9
  actions.create-character.steps.ancestry.prompt: Choose an ancestry
10
10
  actions.create-character.steps.background.prompt: Choose a background
11
11
  actions.create-character.steps.class.prompt: Choose a class
12
+ actions.create-character.steps.freeBoosts.prompt: Choose four free attribute boosts
12
13
  actions.create-character.steps.heritage.prompt: Choose a heritage
13
14
  actions.random-character.name: Build a random character
14
15
  actions.random-character.steps.ancestry.prompt: Choose an ancestry
@@ -409,6 +410,18 @@ groups.feats.sections.skill.name: Skill feats
409
410
  groups.gear.label: Gear
410
411
  groups.heritage.label: Heritage
411
412
  groups.consumables.label: Consumables
413
+ groups.consumables.sections.potion.name: Potions
414
+ groups.consumables.sections.elixir.name: Elixirs
415
+ groups.consumables.sections.mutagen.name: Mutagens
416
+ groups.consumables.sections.bomb.name: Bombs
417
+ groups.consumables.sections.poison.name: Poisons
418
+ groups.consumables.sections.tool.name: Tools
419
+ groups.consumables.sections.scroll.name: Scrolls
420
+ groups.consumables.sections.talisman.name: Talismans
421
+ groups.consumables.sections.oil.name: Oils
422
+ groups.consumables.sections.ammunition.name: Ammunition
423
+ groups.consumables.sections.snare.name: Snares
424
+ groups.consumables.sections.other.name: Other consumables
412
425
  groups.rituals.label: Rituals
413
426
  groups.variant-features.label: Variant rules
414
427
  groups.boost-picks.label: Attribute boosts picked
@@ -418,7 +431,6 @@ groups.reactions.label: Reactions and shields
418
431
  groups.saves.label: Saving throws and Perception
419
432
  groups.shields.label: Shields
420
433
  groups.skill-increases.label: Skill increases
421
- groups.skill-ranks.label: Skill proficiency
422
434
  groups.skills.label: Skills
423
435
  groups.strikes.label: Strikes
424
436
  groups.summary.label: Character
@@ -682,6 +694,11 @@ tags.feat-action.name: 'Feat action'
682
694
  tags.class-dc.name: 'Class DC'
683
695
  tags.condition.name: 'Condition'
684
696
  tags.creation.name: 'Creation'
697
+ tags.creation.ancestry.name: 'Creation: ancestry'
698
+ tags.creation.heritage.name: 'Creation: heritage'
699
+ tags.creation.background.name: 'Creation: background'
700
+ tags.creation.class.name: 'Creation: class'
701
+ tags.creation.finish.name: 'Creation: finish'
685
702
  tags.d20.name: 'd20 roll'
686
703
  tags.damage.name: 'Damage'
687
704
  tags.damage.acid.name: 'Acid damage'
@@ -723,6 +740,7 @@ tags.group.spear.name: 'Spear group'
723
740
  tags.group.sword.name: 'Sword group'
724
741
  tags.hunt-prey.name: 'Hunt Prey'
725
742
  tags.level-up.name: 'Level up'
743
+ tags.level-up.gain.name: 'Level up: gain'
726
744
  tags.lore.name: 'Lore'
727
745
  tags.perception.name: 'Perception'
728
746
  tags.persistent-damage.name: 'Persistent damage'
package/pack.yaml CHANGED
@@ -1,6 +1,6 @@
1
1
  id: orc-2e
2
- version: 0.1.0
3
- specVersion: 0.1.0
2
+ version: 0.3.0
3
+ specVersion: 0.3.0
4
4
  license: ORC
5
5
  # The ORC License's four notices (Article III): the attribution of the Licensed Material used is the
6
6
  # credit line; the ORC Notice, the Reserved Material notice and the Expressly Designated Licensed
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opencharacter/orc-2e",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "description": "Open Character Format pack: Second Edition fantasy rules (Player Core, Player Core 2 and GM Core) under the ORC License.",
5
5
  "keywords": [
6
6
  "character-sheet",
@@ -51,7 +51,7 @@
51
51
  "access": "public"
52
52
  },
53
53
  "devDependencies": {
54
- "@opencharacter/engine": "0.1.0"
54
+ "@opencharacter/engine": "0.3.0"
55
55
  },
56
56
  "engines": {
57
57
  "node": ">=22"
@@ -18,6 +18,7 @@ actions:
18
18
  available: '!character.creating && level < 20'
19
19
  steps:
20
20
  - id: gain
21
+ tags: [level-up.gain]
21
22
  kind: changes
22
23
  changes:
23
24
  - { type: adjust, field: level, by: 1 }
@@ -15,6 +15,7 @@ contentTypes:
15
15
  dc: { type: integer, min: 0 }
16
16
  stages: { type: integer, required: true, min: 1, max: 7 }
17
17
  damageType:
18
+ open: true
18
19
  type: enum
19
20
  values:
20
21
  [
@@ -40,6 +41,7 @@ contentTypes:
40
41
  stage5Damage: { type: dice }
41
42
  stage6Damage: { type: dice }
42
43
  damage2Type:
44
+ open: true
43
45
  type: enum
44
46
  values: [acid, cold, electricity, fire, mental, poison, sonic, spirit, vitality, void]
45
47
  default: poison
@@ -12,7 +12,12 @@ fields:
12
12
  formula: '[[0, 0, 0, 0, 0], [0, 0, 2, 3, 4], [0, 0, 4, 6, 8]][weapons.specialization][attacks.bomb.rank]'
13
13
  # A formula is for a family of alchemical consumables, recorded as the family's lowest item.
14
14
  alchemist.field:
15
- { type: enum, values: [none, bomber, chirurgeon, mutagenist, toxicologist], formula: "'none'" }
15
+ {
16
+ type: enum,
17
+ values: [none, bomber, chirurgeon, mutagenist, toxicologist],
18
+ formula: "'none'",
19
+ open: true,
20
+ }
16
21
  alchemist.vials.max: { type: integer, formula: 'max(0, 2 + attributes.int.mod)' }
17
22
  alchemist.vials.used: { type: integer, input: true, default: 0, min: 0, max: alchemist.vials.max }
18
23
  alchemist.formulas: { type: set, of: consumable }
@@ -44,6 +49,7 @@ actions:
44
49
  flat: { type: integer, optional: true }
45
50
  damageType:
46
51
  type: enum
52
+ open: true
47
53
  values:
48
54
  [
49
55
  acid,
@@ -61,7 +67,8 @@ actions:
61
67
  splash: { type: integer, optional: true, min: 0 }
62
68
  persistent: { type: dice, optional: true }
63
69
  persistentFlat: { type: integer, optional: true, min: 0 }
64
- persistentType: { type: enum, optional: true, values: [acid, bleed, fire, poison] }
70
+ persistentType:
71
+ { type: enum, optional: true, values: [acid, bleed, fire, poison], open: true }
65
72
  itemBonus: { type: integer, optional: true, min: 0, max: 4 }
66
73
  hitCondition:
67
74
  { type: enum, optional: true, values: [none, off-guard, enfeebled, frightened, speed] }
@@ -254,7 +261,11 @@ actions:
254
261
  display:
255
262
  fields:
256
263
  attacks.bomb.rank:
257
- { groups: [proficiencies], format: { bands: rank }, showWhen: attacks.bomb.rank > 0 }
264
+ {
265
+ groups: [proficiencies],
266
+ format: { bands: rank },
267
+ showWhen: attacks.bomb.rank > attacks.martial.rank,
268
+ }
258
269
  attacks.bomb.proficiency: { hidden: true }
259
270
  attacks.bomb.specialization: { hidden: true }
260
271
  alchemist.field: { groups: [summary], priority: 2, showWhen: "alchemist.field != 'none'" }
@@ -350,25 +350,67 @@ effects:
350
350
 
351
351
  display:
352
352
  fields:
353
- attacks.familiar: { groups: [proficiencies], priority: 2 }
353
+ attacks.familiar: { groups: [proficiencies], priority: 2, showWhen: size(attacks.familiar) > 0 }
354
354
  conditions.mistChild: { hidden: true }
355
355
  conditions.obfuscated: { hidden: true }
356
356
  bounceBack.ready: { hidden: true }
357
- skills.lore.dwarf.rank: { format: { bands: rank } }
357
+ skills.lore.dwarf.rank: { format: { bands: rank }, showWhen: skills.lore.dwarf.rank > 0 }
358
358
  skills.lore.dwarf.mod:
359
- { format: signed, rolls: [{ action: check, params: { check: skills.lore.dwarf.mod } }] }
360
- skills.lore.elf.rank: { format: { bands: rank } }
359
+ {
360
+ format: signed,
361
+ rolls: [{ action: check, params: { check: skills.lore.dwarf.mod } }],
362
+ with: [{ field: skills.lore.dwarf.rank, as: detail }],
363
+ showWhen: skills.lore.dwarf.rank > 0,
364
+ }
365
+ skills.lore.dwarf.increases: { showWhen: skills.lore.dwarf.rank > 0 }
366
+ skills.lore.dwarf.trainedByIncrease: { showWhen: skills.lore.dwarf.rank > 0 }
367
+ skills.lore.elf.rank: { format: { bands: rank }, showWhen: skills.lore.elf.rank > 0 }
361
368
  skills.lore.elf.mod:
362
- { format: signed, rolls: [{ action: check, params: { check: skills.lore.elf.mod } }] }
363
- skills.lore.goblin.rank: { format: { bands: rank } }
369
+ {
370
+ format: signed,
371
+ rolls: [{ action: check, params: { check: skills.lore.elf.mod } }],
372
+ with: [{ field: skills.lore.elf.rank, as: detail }],
373
+ showWhen: skills.lore.elf.rank > 0,
374
+ }
375
+ skills.lore.elf.increases: { showWhen: skills.lore.elf.rank > 0 }
376
+ skills.lore.elf.trainedByIncrease: { showWhen: skills.lore.elf.rank > 0 }
377
+ skills.lore.goblin.rank: { format: { bands: rank }, showWhen: skills.lore.goblin.rank > 0 }
364
378
  skills.lore.goblin.mod:
365
- { format: signed, rolls: [{ action: check, params: { check: skills.lore.goblin.mod } }] }
366
- skills.lore.halfling.rank: { format: { bands: rank } }
379
+ {
380
+ format: signed,
381
+ rolls: [{ action: check, params: { check: skills.lore.goblin.mod } }],
382
+ with: [{ field: skills.lore.goblin.rank, as: detail }],
383
+ showWhen: skills.lore.goblin.rank > 0,
384
+ }
385
+ skills.lore.goblin.increases: { showWhen: skills.lore.goblin.rank > 0 }
386
+ skills.lore.goblin.trainedByIncrease: { showWhen: skills.lore.goblin.rank > 0 }
387
+ skills.lore.halfling.rank: { format: { bands: rank }, showWhen: skills.lore.halfling.rank > 0 }
367
388
  skills.lore.halfling.mod:
368
- { format: signed, rolls: [{ action: check, params: { check: skills.lore.halfling.mod } }] }
369
- skills.lore.leshy.rank: { format: { bands: rank } }
389
+ {
390
+ format: signed,
391
+ rolls: [{ action: check, params: { check: skills.lore.halfling.mod } }],
392
+ with: [{ field: skills.lore.halfling.rank, as: detail }],
393
+ showWhen: skills.lore.halfling.rank > 0,
394
+ }
395
+ skills.lore.halfling.increases: { showWhen: skills.lore.halfling.rank > 0 }
396
+ skills.lore.halfling.trainedByIncrease: { showWhen: skills.lore.halfling.rank > 0 }
397
+ skills.lore.leshy.rank: { format: { bands: rank }, showWhen: skills.lore.leshy.rank > 0 }
370
398
  skills.lore.leshy.mod:
371
- { format: signed, rolls: [{ action: check, params: { check: skills.lore.leshy.mod } }] }
372
- skills.lore.orc.rank: { format: { bands: rank } }
399
+ {
400
+ format: signed,
401
+ rolls: [{ action: check, params: { check: skills.lore.leshy.mod } }],
402
+ with: [{ field: skills.lore.leshy.rank, as: detail }],
403
+ showWhen: skills.lore.leshy.rank > 0,
404
+ }
405
+ skills.lore.leshy.increases: { showWhen: skills.lore.leshy.rank > 0 }
406
+ skills.lore.leshy.trainedByIncrease: { showWhen: skills.lore.leshy.rank > 0 }
407
+ skills.lore.orc.rank: { format: { bands: rank }, showWhen: skills.lore.orc.rank > 0 }
373
408
  skills.lore.orc.mod:
374
- { format: signed, rolls: [{ action: check, params: { check: skills.lore.orc.mod } }] }
409
+ {
410
+ format: signed,
411
+ rolls: [{ action: check, params: { check: skills.lore.orc.mod } }],
412
+ with: [{ field: skills.lore.orc.rank, as: detail }],
413
+ showWhen: skills.lore.orc.rank > 0,
414
+ }
415
+ skills.lore.orc.increases: { showWhen: skills.lore.orc.rank > 0 }
416
+ skills.lore.orc.trainedByIncrease: { showWhen: skills.lore.orc.rank > 0 }
@@ -29,6 +29,7 @@ tags:
29
29
 
30
30
  contentTypes:
31
31
  archetype:
32
+ grantOnly: true
32
33
  copies: { max: 0 }
33
34
  fields:
34
35
  dedication: { type: id, of: feat, required: true }
@@ -2,16 +2,14 @@ fields:
2
2
  barbarian.instinct:
3
3
  type: enum
4
4
  values: [none, animal, dragon, fury, giant, spirit, superstition]
5
- formula: "'none'"
5
+ open: true
6
+ # The class's instinct sets it (each instinct's effect); Barbarian Dedication's pick otherwise.
7
+ formula: >-
8
+ size(picksOf('feats.archetype.barbarian.barbarian-dedication', 'instinct')) > 0
9
+ ? picksOf('feats.archetype.barbarian.barbarian-dedication', 'instinct')[0] : 'none'
6
10
  rage.active: { type: boolean, formula: false }
7
11
  rage.damage: { type: integer, formula: 2 }
8
12
  rage.altDamage: { type: integer, formula: 0 }
9
- rage.altType:
10
- {
11
- type: enum,
12
- values: [none, bludgeoning, fire, force, mental, poison, spirit],
13
- formula: "'none'",
14
- }
15
13
  rage.animalDamage: { type: integer, formula: 2 }
16
14
  rage.resists:
17
15
  {
@@ -129,22 +127,12 @@ display:
129
127
  - id: rage
130
128
  kind: actions
131
129
  priority: 0
132
- showWhen: 'countCopies(copy.item == @classes.barbarian) > 0'
130
+ showWhen: class.has.barbarian
133
131
  members: { type: action, where: "'rage' in item.tags" }
134
132
  fields:
135
- rage.active:
136
- {
137
- groups: [summary],
138
- priority: 1,
139
- showWhen: 'countCopies(copy.item == @classes.barbarian) > 0',
140
- }
133
+ rage.active: { groups: [summary], priority: 1, showWhen: class.has.barbarian }
141
134
  rage.tempHpBlocked:
142
- {
143
- groups: [turn],
144
- priority: 2,
145
- input: { widget: checkbox },
146
- showWhen: 'countCopies(copy.item == @classes.barbarian) > 0',
147
- }
135
+ { groups: [turn], priority: 2, input: { widget: checkbox }, showWhen: class.has.barbarian }
148
136
  rage.largerWeapon:
149
137
  {
150
138
  groups: [turn],
@@ -154,7 +142,6 @@ display:
154
142
  }
155
143
  rage.damage: { hidden: true }
156
144
  rage.altDamage: { hidden: true }
157
- rage.altType: { hidden: true }
158
145
  rage.animalDamage: { hidden: true }
159
146
  rage.resists: { groups: [defenses], priority: 2, showWhen: size(rage.resists) > 0 }
160
147
  rage.thrown: { hidden: true }
package/rules/bard.yaml CHANGED
@@ -1,5 +1,11 @@
1
1
  fields:
2
- bard.muse: { type: enum, values: [none, enigma, maestro, polymath, warrior], formula: "'none'" }
2
+ bard.muse:
3
+ {
4
+ type: enum,
5
+ values: [none, enigma, maestro, polymath, warrior],
6
+ formula: "'none'",
7
+ open: true,
8
+ }
3
9
  bard.muses: { type: set, of: tag, members: { under: [muse] } }
4
10
  bard.grantedFeats: { type: set, of: feat }
5
11
  # Bardic Lore has no increases input: it is trained by the feat and becomes expert only when
@@ -42,13 +48,13 @@ situational:
42
48
 
43
49
  display:
44
50
  fields:
45
- bard.muse: { groups: [summary], priority: 2 }
51
+ bard.muse: { groups: [summary], priority: 2, showWhen: class.has.bard }
46
52
  bard.muses: { hidden: true }
47
53
  bard.grantedFeats: { hidden: true }
48
- skills.lore.bardic.rank:
49
- { groups: [skill-ranks], format: { bands: rank }, showWhen: skills.lore.bardic.rank > 0 }
54
+ skills.lore.bardic.rank: { format: { bands: rank }, showWhen: skills.lore.bardic.rank > 0 }
50
55
  skills.lore.bardic.mod:
51
56
  groups: [skills]
52
57
  format: signed
53
58
  showWhen: skills.lore.bardic.rank > 0
54
59
  rolls: [{ action: check, params: { check: skills.lore.bardic.mod } }]
60
+ with: [{ field: skills.lore.bardic.rank, as: detail }]
@@ -19,6 +19,7 @@ contentTypes:
19
19
  - { target: ancestry.held, op: grant, value: { formula: item.id } }
20
20
 
21
21
  heritage:
22
+ grantOnly: true
22
23
  fields:
23
24
  ancestry: { type: id, of: ancestry }
24
25
  versatile: { type: boolean, default: false }
@@ -38,13 +39,18 @@ contentTypes:
38
39
  - { target: hp.class, op: add, value: item.hp }
39
40
 
40
41
  feature:
42
+ grantOnly: true
41
43
  fields:
42
44
  level: { type: integer, required: true, min: 1, max: 20 }
45
+ # The class option a subclass-like feature is, `<class>.<choice>`, which the class's choice
46
+ # offers: add-on instincts, muses and the like set it too.
47
+ classOption: { type: string, default: '' }
43
48
 
44
49
  feat:
45
50
  fields:
46
51
  level: { type: integer, required: true, min: 1, max: 20 }
47
- category: { type: enum, values: [ancestry, class, general, skill], required: true }
52
+ category:
53
+ { type: enum, values: [ancestry, class, general, skill], required: true, open: true }
48
54
  ancestry: { type: id, of: ancestry }
49
55
  heritage: { type: id, of: heritage }
50
56
  class: { type: id, of: class }
@@ -6,6 +6,7 @@ fields:
6
6
  champion.favoredCategory:
7
7
  { type: enum, values: [none, unarmed, simple, martial, advanced], formula: "'none'" }
8
8
  champion.cause:
9
+ open: true
9
10
  type: enum
10
11
  values: [none, desecration, grandeur, iniquity, justice, liberation, obedience, redemption]
11
12
  formula: "'none'"
@@ -67,8 +68,8 @@ situational:
67
68
 
68
69
  display:
69
70
  fields:
70
- champion.sanctification: { groups: [summary], priority: 2 }
71
- champion.cause: { groups: [summary], priority: 2 }
71
+ champion.sanctification: { groups: [summary], priority: 2, showWhen: class.has.champion }
72
+ champion.cause: { groups: [summary], priority: 2, showWhen: class.has.champion }
72
73
  champion.font: { hidden: true }
73
74
  champion.mercies: { hidden: true }
74
75
  champion.favoredCategory: { hidden: true }
package/rules/checks.yaml CHANGED
@@ -27,7 +27,7 @@ resultBands:
27
27
  when: >-
28
28
  roll.value == 3 || (roll.value == 2 && (roll.tallies.successToCrit > 0
29
29
  || (roll.tallies.successToCritOn19 > 0 && size(roll.kept) > 0 && roll.kept[0] == 19)))
30
- - { id: success, when: roll.value == 2 }
30
+ - { id: success, when: roll.value == 2, success: true }
31
31
  - id: failure
32
32
  when: >-
33
33
  (roll.value == 1 && roll.tallies.failToCritFail == 0)
package/rules/cleric.yaml CHANGED
@@ -3,9 +3,19 @@ fields:
3
3
  # Asked before the weapon itself, whose choice reads it.
4
4
  cleric.favoredCategory:
5
5
  { type: enum, values: [none, unarmed, simple, martial, advanced], formula: "'none'" }
6
- cleric.doctrine: { type: enum, values: [none, cloistered, warpriest], formula: "'none'" }
6
+ cleric.doctrine:
7
+ { type: enum, values: [none, cloistered, warpriest], formula: "'none'", open: true }
7
8
  cleric.domainSpells: { type: set, of: spell }
8
9
 
10
+ # A domain is picked by Domain Initiate (its initial domain spell) or Advanced Domain (its advanced
11
+ # one); Domain Acumen picks the initial domains of the oracle's mystery.
12
+ contentTypes:
13
+ domain:
14
+ grantOnly: true
15
+ copies: { max: 0 }
16
+ fields:
17
+ advanced: { type: boolean, default: false }
18
+
9
19
  tags:
10
20
  - trait.shadow
11
21
  - trait.consecration
@@ -76,7 +86,7 @@ situational:
76
86
 
77
87
  display:
78
88
  fields:
79
- cleric.sanctification: { groups: [summary], priority: 2 }
80
- cleric.doctrine: { groups: [summary], priority: 2 }
89
+ cleric.sanctification: { groups: [summary], priority: 2, showWhen: class.has.cleric }
90
+ cleric.doctrine: { groups: [summary], priority: 2, showWhen: class.has.cleric }
81
91
  cleric.favoredCategory: { hidden: true }
82
92
  cleric.domainSpells: { hidden: true }
@@ -7,6 +7,7 @@ contentTypes:
7
7
  by: { type: string, default: '' }
8
8
  damage: { type: dice, default: 1d6 }
9
9
  damageType:
10
+ open: true
10
11
  type: enum
11
12
  values:
12
13
  [
package/rules/core.yaml CHANGED
@@ -63,6 +63,7 @@ contentTypes:
63
63
 
64
64
  # Each pick is one activation, so a boost picked twice in different choices counts twice.
65
65
  boost:
66
+ grantOnly: true
66
67
  fields:
67
68
  attribute: { type: enum, values: [str, dex, con, int, wis, cha], required: true }
68
69
 
@@ -18,12 +18,14 @@ actions:
18
18
  available: character.creating
19
19
  steps:
20
20
  - id: ancestry
21
+ tags: [creation.ancestry]
21
22
  kind: choice
22
23
  options: { content: { type: ancestry } }
23
24
  changes:
24
25
  - type: addItem
25
26
  entry: { id: ancestry, item: picked.id }
26
27
  - id: heritage
28
+ tags: [creation.heritage]
27
29
  kind: choice
28
30
  options:
29
31
  content:
@@ -32,12 +34,14 @@ actions:
32
34
  changes:
33
35
  - { type: choose, path: { entry: ancestry, choice: [heritage] }, option: picked.id }
34
36
  - id: background
37
+ tags: [creation.background]
35
38
  kind: choice
36
39
  options: { content: { type: background } }
37
40
  changes:
38
41
  - type: addItem
39
42
  entry: { id: background, item: picked.id }
40
43
  - id: class
44
+ tags: [creation.class]
41
45
  kind: choice
42
46
  options: { content: { type: class } }
43
47
  changes:
@@ -49,6 +53,14 @@ actions:
49
53
  - id: backgroundPicks
50
54
  kind: choice
51
55
  options: { pending: { entry: "'background'" } }
56
+ # The four free boosts come before the class's choices, whose trained skills count the final
57
+ # Intelligence modifier.
58
+ - id: freeBoosts
59
+ kind: choice
60
+ options: { content: { type: boost, where: picks == 0 } }
61
+ repeat: { max: 4, min: 4 }
62
+ changes:
63
+ - { type: choose, path: { choice: [free-boosts] }, option: picked.id }
52
64
  - id: classPicks
53
65
  kind: choice
54
66
  options: { pending: { entry: "'class'" } }
@@ -56,6 +68,7 @@ actions:
56
68
  kind: choice
57
69
  options: { pending: {} }
58
70
  - id: finish
71
+ tags: [creation.finish]
59
72
  kind: changes
60
73
  sheet: proposed
61
74
  changes:
@@ -73,6 +86,7 @@ actions:
73
86
  available: character.creating
74
87
  steps:
75
88
  - id: ancestry
89
+ tags: [creation.ancestry]
76
90
  kind: choice
77
91
  options: { content: { type: ancestry } }
78
92
  random: true
@@ -80,6 +94,7 @@ actions:
80
94
  - type: addItem
81
95
  entry: { id: ancestry, item: picked.id }
82
96
  - id: heritage
97
+ tags: [creation.heritage]
83
98
  kind: choice
84
99
  options:
85
100
  content:
@@ -89,6 +104,7 @@ actions:
89
104
  changes:
90
105
  - { type: choose, path: { entry: ancestry, choice: [heritage] }, option: picked.id }
91
106
  - id: background
107
+ tags: [creation.background]
92
108
  kind: choice
93
109
  options: { content: { type: background } }
94
110
  random: true
@@ -96,6 +112,7 @@ actions:
96
112
  - type: addItem
97
113
  entry: { id: background, item: picked.id }
98
114
  - id: class
115
+ tags: [creation.class]
99
116
  kind: choice
100
117
  options: { content: { type: class } }
101
118
  random: true
@@ -146,6 +163,7 @@ actions:
146
163
  random: *random
147
164
  recommend: *pick
148
165
  - id: finish
166
+ tags: [creation.finish]
149
167
  kind: changes
150
168
  sheet: proposed
151
169
  changes:
package/rules/druid.yaml CHANGED
@@ -1,5 +1,6 @@
1
1
  fields:
2
- druid.order: { type: enum, values: [none, animal, leaf, storm, untamed], formula: "'none'" }
2
+ druid.order:
3
+ { type: enum, values: [none, animal, leaf, storm, untamed], formula: "'none'", open: true }
3
4
  druid.orders: { type: set, of: tag }
4
5
  druid.orderSpells: { type: set, of: spell }
5
6
  # Granted, not picked, so the class feat choice leaves them out (grants aren't in the `feats`
@@ -15,7 +16,7 @@ tags:
15
16
 
16
17
  display:
17
18
  fields:
18
- druid.order: { groups: [summary], priority: 2 }
19
+ druid.order: { groups: [summary], priority: 2, showWhen: class.has.druid }
19
20
  druid.orders: { hidden: true }
20
21
  druid.orderSpells: { hidden: true }
21
22
  druid.grantedFeats: { hidden: true }
@@ -46,7 +46,7 @@ contentTypes:
46
46
  checkPenalty: { type: integer, default: 0, min: 0 }
47
47
  speedPenalty: { type: integer, default: 0, min: 0 }
48
48
  strength: { type: integer }
49
- group: { type: enum, values: [cloth, leather, composite, chain, plate] }
49
+ group: { type: enum, values: [cloth, leather, composite, chain, plate], open: true }
50
50
  bulk: { type: decimal, default: 0, min: 0 }
51
51
  price: { type: decimal, min: 0 }
52
52
  # The item bonus to AC works without investing; the resilient rune's bonus and property runes
@@ -202,6 +202,7 @@ contentTypes:
202
202
  carried: true
203
203
  fields:
204
204
  category:
205
+ open: true
205
206
  type: enum
206
207
  values:
207
208
  [
@@ -228,6 +229,7 @@ contentTypes:
228
229
  damage: { type: dice }
229
230
  damageFlat: { type: integer, default: 0, min: 0 }
230
231
  damageType:
232
+ open: true
231
233
  type: enum
232
234
  values:
233
235
  [
@@ -249,6 +251,7 @@ contentTypes:
249
251
  persistent: { type: dice }
250
252
  persistentFlat: { type: integer, default: 0, min: 0 }
251
253
  persistentType:
254
+ open: true
252
255
  type: enum
253
256
  values: [none, acid, bleed, fire, poison]
254
257
  default: none
@@ -529,6 +532,9 @@ actions:
529
532
 
530
533
  # `trait.versatile` alone; the other damage type is the weapon's `versatile` field.
531
534
  tags:
535
+ - tool.compass
536
+ - tool.crowbar
537
+ - shield.against-spells
532
538
  - trait.attached
533
539
  - trait.concealable
534
540
  - trait.free-hand
@@ -9,5 +9,5 @@ situational:
9
9
 
10
10
  display:
11
11
  fields:
12
- speed.swim: { groups: [summary], priority: 2, unit: ft }
12
+ speed.swim: { groups: [summary], priority: 2, unit: ft, showWhen: speed.swim > 0 }
13
13
  speed.swim.base: { hidden: true }
@@ -1,6 +1,7 @@
1
1
  fields:
2
2
  investigator.leadBonus: { type: integer, formula: 0, min: 0 }
3
3
  investigator.methodology:
4
+ open: true
4
5
  type: enum
5
6
  values: [none, alchemical-sciences, empiricism, forensic-medicine, interrogation]
6
7
  formula: "'none'"
@@ -27,14 +28,5 @@ tags:
27
28
  display:
28
29
  fields:
29
30
  investigator.leadBonus:
30
- {
31
- groups: [proficiencies],
32
- priority: 2,
33
- showWhen: 'countCopies(copy.item == @classes.investigator) > 0',
34
- }
35
- investigator.methodology:
36
- {
37
- groups: [summary],
38
- priority: 2,
39
- showWhen: 'countCopies(copy.item == @classes.investigator) > 0',
40
- }
31
+ { groups: [proficiencies], priority: 2, showWhen: class.has.investigator }
32
+ investigator.methodology: { groups: [summary], priority: 2, showWhen: class.has.investigator }