optolith-database-schema 0.2.4 → 0.4.1

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 (518) hide show
  1. package/CHANGELOG.md +64 -0
  2. package/lib/config.d.ts +302 -250
  3. package/lib/config.js +302 -250
  4. package/lib/main.d.ts +3 -2
  5. package/lib/main.js +1 -1
  6. package/lib/types/Advantage.d.ts +23 -25
  7. package/lib/types/AnimalDisease.d.ts +18 -212
  8. package/lib/types/AnimalType.d.ts +9 -13
  9. package/lib/types/ArcaneBardTradition.d.ts +3 -27
  10. package/lib/types/ArcaneDancerTradition.d.ts +3 -27
  11. package/lib/types/Aspect.d.ts +14 -19
  12. package/lib/types/Attribute.d.ts +17 -23
  13. package/lib/types/Blessing.d.ts +81 -83
  14. package/lib/types/Cantrip.d.ts +132 -161
  15. package/lib/types/Ceremony.d.ts +55 -88
  16. package/lib/types/CombatTechnique_Close.d.ts +30 -39
  17. package/lib/types/CombatTechnique_Ranged.d.ts +28 -26
  18. package/lib/types/Condition.d.ts +18 -31
  19. package/lib/types/Continent.d.ts +9 -13
  20. package/lib/types/Culture.d.ts +164 -290
  21. package/lib/types/Culture.js +38 -0
  22. package/lib/types/DerivedCharacteristic.d.ts +4 -10
  23. package/lib/types/Disadvantage.d.ts +20 -24
  24. package/lib/types/Disease.d.ts +5 -140
  25. package/lib/types/Element.d.ts +9 -13
  26. package/lib/types/ExperienceLevel.d.ts +3 -9
  27. package/lib/types/EyeColor.d.ts +9 -13
  28. package/lib/types/FamiliarsTrick.d.ts +201 -290
  29. package/lib/types/HairColor.d.ts +9 -13
  30. package/lib/types/Lessons_Curriculum.d.ts +77 -138
  31. package/lib/types/Lessons_Guideline.d.ts +9 -13
  32. package/lib/types/LiturgicalChant.d.ts +55 -88
  33. package/lib/types/Locale.d.ts +1 -1
  34. package/lib/types/Locale.js +1 -1
  35. package/lib/types/MetaCondition.d.ts +18 -31
  36. package/lib/types/PactCategory.d.ts +48 -62
  37. package/lib/types/Patron.d.ts +60 -76
  38. package/lib/types/Patron.js +20 -0
  39. package/lib/types/PatronCategory.d.ts +11 -21
  40. package/lib/types/PersonalityTrait.d.ts +31 -39
  41. package/lib/types/Profession.d.ts +293 -435
  42. package/lib/types/Profession.js +6 -0
  43. package/lib/types/Property.d.ts +9 -13
  44. package/lib/types/Race.d.ts +95 -192
  45. package/lib/types/Race.js +11 -0
  46. package/lib/types/Region.d.ts +9 -13
  47. package/lib/types/Ritual.d.ts +58 -83
  48. package/lib/types/Service.d.ts +19 -25
  49. package/lib/types/Service.js +5 -0
  50. package/lib/types/SexPractice.d.ts +26 -34
  51. package/lib/types/Skill.d.ts +73 -102
  52. package/lib/types/Skill.js +19 -0
  53. package/lib/types/SkillGroup.d.ts +13 -18
  54. package/lib/types/SkillModificationLevel.d.ts +72 -76
  55. package/lib/types/SocialStatus.d.ts +9 -13
  56. package/lib/types/Spell.d.ts +58 -83
  57. package/lib/types/State.d.ts +14 -20
  58. package/lib/types/Talisman.d.ts +40 -54
  59. package/lib/types/Talisman.js +8 -0
  60. package/lib/types/TargetCategory.d.ts +21 -16
  61. package/lib/types/UI.d.ts +1 -5
  62. package/lib/types/_Activatable.d.ts +646 -1227
  63. package/lib/types/_Activatable.js +44 -13
  64. package/lib/types/_ActivatableSelectOptionCategory.d.ts +359 -0
  65. package/lib/types/_ActivatableSelectOptionCategory.js +8 -0
  66. package/lib/types/_ActivatableSkill.d.ts +24 -1016
  67. package/lib/types/_ActivatableSkill.js +1 -32
  68. package/lib/types/_ActivatableSkillCastingTime.d.ts +69 -0
  69. package/lib/types/_ActivatableSkillCastingTime.js +5 -0
  70. package/lib/types/_ActivatableSkillCheckResultBased.d.ts +39 -0
  71. package/lib/types/_ActivatableSkillCheckResultBased.js +16 -0
  72. package/lib/types/_ActivatableSkillCost.d.ts +223 -0
  73. package/lib/types/{prerequisites/single/CommonSuggestedByRCPPrerequisite.js → _ActivatableSkillCost.js} +0 -0
  74. package/lib/types/_ActivatableSkillDuration.d.ts +138 -0
  75. package/lib/types/_ActivatableSkillDuration.js +13 -0
  76. package/lib/types/_ActivatableSkillEffect.d.ts +68 -0
  77. package/lib/types/{equipment/_Armor.js → _ActivatableSkillEffect.js} +0 -3
  78. package/lib/types/_ActivatableSkillRange.d.ts +107 -0
  79. package/lib/types/_ActivatableSkillRange.js +5 -0
  80. package/lib/types/_ActivatableSkillTargetCategory.d.ts +39 -0
  81. package/lib/types/_ActivatableSkillTargetCategory.js +1 -0
  82. package/lib/types/_AlternativeNames.d.ts +11 -0
  83. package/lib/types/_AlternativeNames.js +1 -0
  84. package/lib/types/_ArcaneTradition.d.ts +28 -0
  85. package/lib/types/_ArcaneTradition.js +4 -0
  86. package/lib/types/_Blessed.d.ts +22 -0
  87. package/lib/types/_Blessed.js +1 -0
  88. package/lib/types/_DiseasePoison.d.ts +114 -0
  89. package/lib/types/_DiseasePoison.js +15 -0
  90. package/lib/types/_Enhancements.d.ts +16 -20
  91. package/lib/types/_I18n.d.ts +1 -5
  92. package/lib/types/_Identifier.d.ts +32 -0
  93. package/lib/types/_Identifier.js +32 -0
  94. package/lib/types/_Influence.d.ts +27 -32
  95. package/lib/types/_LocaleMap.d.ts +10 -0
  96. package/lib/types/_LocaleMap.js +1 -0
  97. package/lib/types/_NonEmptyString.d.ts +9 -0
  98. package/lib/types/_NonEmptyString.js +1 -0
  99. package/lib/types/_Prerequisite.d.ts +61 -65
  100. package/lib/types/_ResponsiveText.d.ts +54 -0
  101. package/lib/types/_ResponsiveText.js +1 -0
  102. package/lib/types/_Sex.d.ts +4 -5
  103. package/lib/types/_Sex.js +8 -1
  104. package/lib/types/_SimpleReferences.d.ts +334 -0
  105. package/lib/types/_SimpleReferences.js +1 -0
  106. package/lib/types/_SkillCheck.d.ts +12 -20
  107. package/lib/types/_SkillCheck.js +11 -1
  108. package/lib/types/_Spellwork.d.ts +18 -0
  109. package/lib/types/_Spellwork.js +1 -0
  110. package/lib/types/equipment/EquipmentPackage.d.ts +24 -28
  111. package/lib/types/equipment/item/Alchemicum.d.ts +6 -0
  112. package/lib/types/equipment/item/Alchemicum.js +5 -0
  113. package/lib/types/equipment/item/Ammunition.d.ts +31 -0
  114. package/lib/types/equipment/item/Ammunition.js +5 -0
  115. package/lib/types/equipment/item/Animal.d.ts +18 -0
  116. package/lib/types/equipment/item/Animal.js +5 -0
  117. package/lib/types/equipment/item/AnimalCare.d.ts +48 -0
  118. package/lib/types/equipment/item/AnimalCare.js +5 -0
  119. package/lib/types/equipment/item/Armor.d.ts +185 -0
  120. package/lib/types/equipment/item/Armor.js +5 -0
  121. package/lib/types/equipment/item/BandageOrRemedy.d.ts +36 -0
  122. package/lib/types/equipment/item/BandageOrRemedy.js +5 -0
  123. package/lib/types/equipment/item/Book.d.ts +60 -0
  124. package/lib/types/equipment/item/Book.js +5 -0
  125. package/lib/types/equipment/item/CeremonialItem.d.ts +41 -0
  126. package/lib/types/equipment/item/CeremonialItem.js +5 -0
  127. package/lib/types/equipment/item/Clothes.d.ts +6 -0
  128. package/lib/types/equipment/item/Clothes.js +5 -0
  129. package/lib/types/equipment/item/Container.d.ts +6 -0
  130. package/lib/types/equipment/item/Container.js +5 -0
  131. package/lib/types/equipment/item/EquipmentOfBlessedOnes.d.ts +28 -0
  132. package/lib/types/equipment/item/EquipmentOfBlessedOnes.js +5 -0
  133. package/lib/types/equipment/item/GemOrPreciousStone.d.ts +43 -0
  134. package/lib/types/equipment/item/GemOrPreciousStone.js +5 -0
  135. package/lib/types/equipment/item/IlluminationLightSource.d.ts +62 -0
  136. package/lib/types/equipment/item/IlluminationLightSource.js +9 -0
  137. package/lib/types/equipment/item/IlluminationRefillsOrSupplies.d.ts +6 -0
  138. package/lib/types/equipment/item/IlluminationRefillsOrSupplies.js +5 -0
  139. package/lib/types/equipment/item/Jewelry.d.ts +60 -0
  140. package/lib/types/equipment/item/Jewelry.js +5 -0
  141. package/lib/types/equipment/item/Liebesspielzeug.d.ts +6 -0
  142. package/lib/types/equipment/item/Liebesspielzeug.js +5 -0
  143. package/lib/types/equipment/item/LuxuryGood.d.ts +36 -0
  144. package/lib/types/equipment/item/LuxuryGood.js +5 -0
  145. package/lib/types/equipment/item/MagicalArtifact.d.ts +39 -0
  146. package/lib/types/equipment/item/MagicalArtifact.js +5 -0
  147. package/lib/types/equipment/item/MusicalInstrument.d.ts +22 -0
  148. package/lib/types/equipment/item/MusicalInstrument.js +5 -0
  149. package/lib/types/equipment/item/OrienteeringAid.d.ts +6 -0
  150. package/lib/types/equipment/item/OrienteeringAid.js +5 -0
  151. package/lib/types/equipment/item/Poison.d.ts +165 -0
  152. package/lib/types/equipment/item/Poison.js +12 -0
  153. package/lib/types/equipment/item/RopeOrChain.d.ts +6 -0
  154. package/lib/types/equipment/item/RopeOrChain.js +5 -0
  155. package/lib/types/equipment/item/Stationary.d.ts +6 -0
  156. package/lib/types/equipment/item/Stationary.js +5 -0
  157. package/lib/types/equipment/item/ThievesTool.d.ts +6 -0
  158. package/lib/types/equipment/item/ThievesTool.js +5 -0
  159. package/lib/types/equipment/item/ToolOfTheTrade.d.ts +56 -0
  160. package/lib/types/equipment/item/ToolOfTheTrade.js +5 -0
  161. package/lib/types/equipment/item/TravelGearOrTool.d.ts +6 -0
  162. package/lib/types/equipment/item/TravelGearOrTool.js +5 -0
  163. package/lib/types/equipment/item/Vehicle.d.ts +18 -0
  164. package/lib/types/equipment/item/Vehicle.js +5 -0
  165. package/lib/types/equipment/item/Weapon.d.ts +152 -0
  166. package/lib/types/equipment/item/Weapon.js +5 -0
  167. package/lib/types/equipment/item/WeaponAccessory.d.ts +6 -0
  168. package/lib/types/equipment/item/WeaponAccessory.js +5 -0
  169. package/lib/types/equipment/item/_Item.d.ts +163 -0
  170. package/lib/types/equipment/item/_Item.js +1 -0
  171. package/lib/types/equipment/item/_MeleeWeapon.d.ts +115 -0
  172. package/lib/types/equipment/item/_MeleeWeapon.js +4 -0
  173. package/lib/types/equipment/item/_RangedWeapon.d.ts +110 -0
  174. package/lib/types/equipment/item/_RangedWeapon.js +4 -0
  175. package/lib/types/equipment/item/_Weapon.d.ts +57 -0
  176. package/lib/types/equipment/{_Weapon.js → item/_Weapon.js} +0 -3
  177. package/lib/types/equipment/item/sub/ArmorType.d.ts +36 -0
  178. package/lib/types/equipment/{ArmorType.js → item/sub/ArmorType.js} +1 -1
  179. package/lib/types/equipment/item/sub/Reach.d.ts +27 -0
  180. package/lib/types/equipment/{Reach.js → item/sub/Reach.js} +1 -1
  181. package/lib/types/magicalActions/AnimistPower.d.ts +170 -225
  182. package/lib/types/magicalActions/AnimistPower_Tribe.d.ts +9 -13
  183. package/lib/types/magicalActions/Curse.d.ts +116 -184
  184. package/lib/types/magicalActions/DominationRitual.d.ts +98 -136
  185. package/lib/types/magicalActions/ElvenMagicalSong.d.ts +79 -123
  186. package/lib/types/magicalActions/GeodeRitual.d.ts +126 -111
  187. package/lib/types/magicalActions/JesterTrick.d.ts +117 -109
  188. package/lib/types/magicalActions/MagicalDance.d.ts +71 -138
  189. package/lib/types/magicalActions/MagicalMelody.d.ts +65 -75
  190. package/lib/types/magicalActions/MagicalRune.d.ts +155 -189
  191. package/lib/types/magicalActions/ZibiljaRitual.d.ts +57 -65
  192. package/lib/types/magicalActions/_MusicTradition.d.ts +21 -13
  193. package/lib/types/magicalActions/_MusicTradition.js +10 -1
  194. package/lib/types/magicalActions/_SkillReference.d.ts +1 -1
  195. package/lib/types/prerequisites/DisplayOption.d.ts +7 -8
  196. package/lib/types/prerequisites/PrerequisiteGroups.d.ts +195 -16
  197. package/lib/types/prerequisites/single/ActivatablePrerequisite.d.ts +0 -3
  198. package/lib/types/prerequisites/single/AnimistPowerPrerequisite.d.ts +0 -1
  199. package/lib/types/prerequisites/single/CulturePrerequisite.d.ts +0 -1
  200. package/lib/types/prerequisites/single/EnhancementPrerequisite.d.ts +17 -14
  201. package/lib/types/prerequisites/single/InfluencePrerequisite.d.ts +0 -1
  202. package/lib/types/prerequisites/single/PactPrerequisite.d.ts +5 -14
  203. package/lib/types/prerequisites/single/PrimaryAttributePrerequisite.d.ts +5 -6
  204. package/lib/types/prerequisites/single/PrimaryAttributePrerequisite.js +5 -1
  205. package/lib/types/prerequisites/single/PublicationPrerequisite.d.ts +0 -1
  206. package/lib/types/prerequisites/single/RacePrerequisite.d.ts +0 -1
  207. package/lib/types/prerequisites/single/RatedPrerequisite.d.ts +32 -41
  208. package/lib/types/prerequisites/single/RulePrerequisite.d.ts +0 -1
  209. package/lib/types/prerequisites/single/SexPrerequisite.d.ts +0 -1
  210. package/lib/types/prerequisites/single/SocialStatusPrerequisite.d.ts +0 -1
  211. package/lib/types/prerequisites/single/StatePrerequisite.d.ts +0 -1
  212. package/lib/types/prerequisites/single/TextPrerequisite.d.ts +9 -14
  213. package/lib/types/prerequisites/single/TextPrerequisite.js +5 -1
  214. package/lib/types/prerequisites/single/TraditionPrerequisite.d.ts +18 -12
  215. package/lib/types/prerequisites/single/TraditionPrerequisite.js +18 -1
  216. package/lib/types/rule/CoreRule.d.ts +256 -206
  217. package/lib/types/rule/CoreRule.js +5 -0
  218. package/lib/types/rule/FocusRule.d.ts +19 -24
  219. package/lib/types/rule/FocusRule_Subject.d.ts +9 -13
  220. package/lib/types/rule/OptionalRule.d.ts +12 -35
  221. package/lib/types/rule/_Rule.d.ts +20 -0
  222. package/lib/types/rule/_Rule.js +1 -0
  223. package/lib/types/source/Publication.d.ts +39 -56
  224. package/lib/types/source/Publication.js +10 -0
  225. package/lib/types/source/_Erratum.d.ts +2 -1
  226. package/lib/types/source/_PublicationRef.d.ts +43 -37
  227. package/lib/types/specialAbility/AdvancedCombatSpecialAbility.d.ts +13 -17
  228. package/lib/types/specialAbility/AdvancedKarmaSpecialAbility.d.ts +8 -12
  229. package/lib/types/specialAbility/AdvancedMagicalSpecialAbility.d.ts +8 -12
  230. package/lib/types/specialAbility/AdvancedSkillSpecialAbility.d.ts +8 -12
  231. package/lib/types/specialAbility/AncestorGlyph.d.ts +8 -12
  232. package/lib/types/specialAbility/BlessedTradition.d.ts +95 -123
  233. package/lib/types/specialAbility/BrawlingSpecialAbility.d.ts +9 -13
  234. package/lib/types/specialAbility/CeremonialItemSpecialAbility.d.ts +9 -13
  235. package/lib/types/specialAbility/CombatSpecialAbility.d.ts +13 -17
  236. package/lib/types/specialAbility/CombatStyleSpecialAbility.d.ts +10 -18
  237. package/lib/types/specialAbility/CommandSpecialAbility.d.ts +1 -1
  238. package/lib/types/specialAbility/FamiliarSpecialAbility.d.ts +8 -12
  239. package/lib/types/specialAbility/FatePointSexSpecialAbility.d.ts +8 -12
  240. package/lib/types/specialAbility/FatePointSpecialAbility.d.ts +8 -12
  241. package/lib/types/specialAbility/GeneralSpecialAbility.d.ts +8 -12
  242. package/lib/types/specialAbility/KarmaSpecialAbility.d.ts +8 -12
  243. package/lib/types/specialAbility/LiturgicalStyleSpecialAbility.d.ts +8 -12
  244. package/lib/types/specialAbility/LycantropicGift.d.ts +8 -12
  245. package/lib/types/specialAbility/MagicStyleSpecialAbility.d.ts +8 -12
  246. package/lib/types/specialAbility/MagicalSpecialAbility.d.ts +8 -12
  247. package/lib/types/specialAbility/MagicalTradition.d.ts +38 -58
  248. package/lib/types/specialAbility/PactGift.d.ts +73 -62
  249. package/lib/types/specialAbility/PactGift.js +10 -0
  250. package/lib/types/specialAbility/ProtectiveWardingCircleSpecialAbility.d.ts +16 -23
  251. package/lib/types/specialAbility/Sermon.d.ts +8 -12
  252. package/lib/types/specialAbility/SexSpecialAbility.d.ts +8 -12
  253. package/lib/types/specialAbility/SikaryanDrainSpecialAbility.d.ts +8 -12
  254. package/lib/types/specialAbility/SkillStyleSpecialAbility.d.ts +8 -12
  255. package/lib/types/specialAbility/VampiricGift.d.ts +8 -12
  256. package/lib/types/specialAbility/Vision.d.ts +8 -12
  257. package/lib/types/specialAbility/_Tradition.d.ts +12 -0
  258. package/lib/types/specialAbility/_Tradition.js +1 -0
  259. package/lib/types/specialAbility/sub/Language.d.ts +78 -104
  260. package/lib/types/specialAbility/sub/Script.d.ts +24 -51
  261. package/lib/types/specialAbility/sub/TradeSecret.d.ts +14 -20
  262. package/lib/types/specialAbility/sub/_LanguageScript.d.ts +13 -0
  263. package/lib/types/specialAbility/sub/_LanguageScript.js +1 -0
  264. package/lib/types/traditionArtifacts/ArcaneOrbEnchantment.d.ts +20 -24
  265. package/lib/types/traditionArtifacts/AttireEnchantment.d.ts +20 -24
  266. package/lib/types/traditionArtifacts/BowlEnchantment.d.ts +20 -24
  267. package/lib/types/traditionArtifacts/CauldronEnchantment.d.ts +31 -34
  268. package/lib/types/traditionArtifacts/ChronicleEnchantment.d.ts +20 -24
  269. package/lib/types/traditionArtifacts/DaggerRitual.d.ts +45 -25
  270. package/lib/types/traditionArtifacts/FoolsHatEnchantment.d.ts +20 -24
  271. package/lib/types/traditionArtifacts/InstrumentEnchantment.d.ts +20 -24
  272. package/lib/types/traditionArtifacts/Krallenkettenzauber.d.ts +20 -24
  273. package/lib/types/traditionArtifacts/OrbEnchantment.d.ts +20 -24
  274. package/lib/types/traditionArtifacts/RingEnchantment.d.ts +20 -24
  275. package/lib/types/traditionArtifacts/SickleRitual.d.ts +20 -24
  276. package/lib/types/traditionArtifacts/SpellSwordEnchantment.d.ts +20 -24
  277. package/lib/types/traditionArtifacts/StaffEnchantment.d.ts +21 -25
  278. package/lib/types/traditionArtifacts/ToyEnchantment.d.ts +21 -25
  279. package/lib/types/traditionArtifacts/Trinkhornzauber.d.ts +20 -24
  280. package/lib/types/traditionArtifacts/WandEnchantment.d.ts +20 -24
  281. package/lib/types/traditionArtifacts/WeaponEnchantment.d.ts +19 -24
  282. package/lib/types/traditionArtifacts/sub/AnimalShape.d.ts +24 -16
  283. package/lib/types/traditionArtifacts/sub/AnimalShapePath.d.ts +9 -13
  284. package/lib/types/traditionArtifacts/sub/AnimalShapeSize.d.ts +9 -13
  285. package/lib/types/traditionArtifacts/sub/Brew.d.ts +9 -13
  286. package/lib/validation/schema.d.ts +11 -2
  287. package/lib/validation/schema.js +16 -4
  288. package/package.json +8 -7
  289. package/schema/Advantage.schema.json +49 -42
  290. package/schema/AnimalDisease.schema.json +17 -325
  291. package/schema/AnimalType.schema.json +17 -15
  292. package/schema/ArcaneBardTradition.schema.json +4 -42
  293. package/schema/ArcaneDancerTradition.schema.json +4 -42
  294. package/schema/Aspect.schema.json +21 -20
  295. package/schema/Attribute.schema.json +27 -27
  296. package/schema/Blessing.schema.json +202 -147
  297. package/schema/Cantrip.schema.json +352 -292
  298. package/schema/Ceremony.schema.json +90 -149
  299. package/schema/CombatTechnique_Close.schema.json +56 -67
  300. package/schema/CombatTechnique_Ranged.schema.json +46 -30
  301. package/schema/Condition.schema.json +46 -50
  302. package/schema/Continent.schema.json +18 -15
  303. package/schema/Culture.schema.json +324 -495
  304. package/schema/DerivedCharacteristic.schema.json +8 -8
  305. package/schema/Disadvantage.schema.json +45 -40
  306. package/schema/Disease.schema.json +7 -193
  307. package/schema/Element.schema.json +18 -15
  308. package/schema/ExperienceLevel.schema.json +5 -5
  309. package/schema/EyeColor.schema.json +17 -15
  310. package/schema/FamiliarsTrick.schema.json +491 -513
  311. package/schema/HairColor.schema.json +17 -15
  312. package/schema/Kirchenpraegung.schema.json +4 -4
  313. package/schema/Lessons_Curriculum.schema.json +234 -236
  314. package/schema/Lessons_Guideline.schema.json +17 -15
  315. package/schema/LiturgicalChant.schema.json +90 -149
  316. package/schema/Locale.schema.json +5 -5
  317. package/schema/MetaCondition.schema.json +46 -50
  318. package/schema/PactCategory.schema.json +101 -89
  319. package/schema/Patron.schema.json +151 -229
  320. package/schema/PatronCategory.schema.json +18 -27
  321. package/schema/PersonalityTrait.schema.json +50 -57
  322. package/schema/Profession.schema.json +833 -993
  323. package/schema/Property.schema.json +18 -16
  324. package/schema/Race.schema.json +170 -311
  325. package/schema/Region.schema.json +17 -15
  326. package/schema/Ritual.schema.json +111 -158
  327. package/schema/Service.schema.json +33 -51
  328. package/schema/SexPractice.schema.json +37 -39
  329. package/schema/Skill.schema.json +95 -162
  330. package/schema/SkillGroup.schema.json +23 -22
  331. package/schema/SkillModificationLevel.schema.json +93 -82
  332. package/schema/SocialStatus.schema.json +17 -15
  333. package/schema/Spell.schema.json +110 -158
  334. package/schema/State.schema.json +26 -25
  335. package/schema/Talisman.schema.json +60 -121
  336. package/schema/TargetCategory.schema.json +35 -20
  337. package/schema/UI.schema.json +830 -834
  338. package/schema/_Activatable.schema.json +1612 -2261
  339. package/schema/_ActivatableSelectOptionCategory.schema.json +1172 -0
  340. package/schema/_ActivatableSkill.schema.json +96 -1692
  341. package/schema/_ActivatableSkillCastingTime.schema.json +177 -0
  342. package/schema/_ActivatableSkillCheckResultBased.schema.json +57 -0
  343. package/schema/_ActivatableSkillCost.schema.json +448 -0
  344. package/schema/_ActivatableSkillDuration.schema.json +335 -0
  345. package/schema/_ActivatableSkillEffect.schema.json +153 -0
  346. package/schema/_ActivatableSkillRange.schema.json +241 -0
  347. package/schema/_ActivatableSkillTargetCategory.schema.json +145 -0
  348. package/schema/_AlternativeNames.schema.json +23 -0
  349. package/schema/_ArcaneTradition.schema.json +51 -0
  350. package/schema/_Blessed.schema.json +64 -0
  351. package/schema/_CommonnessRatedAdvantageDisadvantage.schema.json +2 -2
  352. package/schema/_Dice.schema.json +3 -3
  353. package/schema/_DiseasePoison.schema.json +140 -0
  354. package/schema/_Enhancements.schema.json +29 -26
  355. package/schema/_I18n.schema.json +8 -12
  356. package/schema/_Identifier.schema.json +73 -22
  357. package/schema/_ImprovementCost.schema.json +2 -2
  358. package/schema/_Influence.schema.json +48 -45
  359. package/schema/_NonEmptyString.schema.json +14 -0
  360. package/schema/_Prerequisite.schema.json +830 -651
  361. package/schema/_ResponsiveText.schema.json +66 -0
  362. package/schema/_Sex.schema.json +6 -28
  363. package/schema/_SimpleReferences.schema.json +586 -0
  364. package/schema/_SkillCheck.schema.json +10 -69
  365. package/schema/_Spellwork.schema.json +54 -0
  366. package/schema/equipment/EquipmentPackage.schema.json +37 -32
  367. package/schema/equipment/item/Alchemicum.schema.json +10 -0
  368. package/schema/equipment/item/Ammunition.schema.json +56 -0
  369. package/schema/equipment/item/Animal.schema.json +36 -0
  370. package/schema/equipment/item/AnimalCare.schema.json +124 -0
  371. package/schema/equipment/item/Armor.schema.json +309 -0
  372. package/schema/equipment/item/BandageOrRemedy.schema.json +53 -0
  373. package/schema/equipment/item/Book.schema.json +89 -0
  374. package/schema/equipment/item/CeremonialItem.schema.json +59 -0
  375. package/schema/equipment/item/Clothes.schema.json +10 -0
  376. package/schema/equipment/item/Container.schema.json +10 -0
  377. package/schema/equipment/item/EquipmentOfBlessedOnes.schema.json +46 -0
  378. package/schema/equipment/item/GemOrPreciousStone.schema.json +69 -0
  379. package/schema/equipment/item/IlluminationLightSource.schema.json +122 -0
  380. package/schema/equipment/item/IlluminationRefillsOrSupplies.schema.json +10 -0
  381. package/schema/equipment/item/Jewelry.schema.json +113 -0
  382. package/schema/equipment/item/Liebesspielzeug.schema.json +10 -0
  383. package/schema/equipment/item/LuxuryGood.schema.json +53 -0
  384. package/schema/equipment/item/MagicalArtifact.schema.json +64 -0
  385. package/schema/equipment/item/MusicalInstrument.schema.json +41 -0
  386. package/schema/equipment/item/OrienteeringAid.schema.json +10 -0
  387. package/schema/equipment/item/Poison.schema.json +369 -0
  388. package/schema/equipment/item/RopeOrChain.schema.json +10 -0
  389. package/schema/equipment/item/Stationary.schema.json +10 -0
  390. package/schema/equipment/item/ThievesTool.schema.json +10 -0
  391. package/schema/equipment/item/ToolOfTheTrade.schema.json +82 -0
  392. package/schema/equipment/item/TravelGearOrTool.schema.json +10 -0
  393. package/schema/equipment/item/Vehicle.schema.json +36 -0
  394. package/schema/equipment/item/Weapon.schema.json +265 -0
  395. package/schema/equipment/item/WeaponAccessory.schema.json +10 -0
  396. package/schema/equipment/item/_Item.schema.json +403 -0
  397. package/schema/equipment/item/_MeleeWeapon.schema.json +180 -0
  398. package/schema/equipment/item/_RangedWeapon.schema.json +186 -0
  399. package/schema/equipment/item/_Weapon.schema.json +99 -0
  400. package/schema/equipment/item/sub/ArmorType.schema.json +53 -0
  401. package/schema/equipment/{Reach.schema.json → item/sub/Reach.schema.json} +18 -16
  402. package/schema/magicalActions/AnimistPower.schema.json +427 -402
  403. package/schema/magicalActions/AnimistPower_Tribe.schema.json +17 -15
  404. package/schema/magicalActions/Curse.schema.json +293 -313
  405. package/schema/magicalActions/DominationRitual.schema.json +233 -220
  406. package/schema/magicalActions/ElvenMagicalSong.schema.json +132 -154
  407. package/schema/magicalActions/GeodeRitual.schema.json +296 -220
  408. package/schema/magicalActions/JesterTrick.schema.json +269 -198
  409. package/schema/magicalActions/MagicalDance.schema.json +147 -251
  410. package/schema/magicalActions/MagicalMelody.schema.json +129 -164
  411. package/schema/magicalActions/MagicalRune.schema.json +341 -323
  412. package/schema/magicalActions/ZibiljaRitual.schema.json +139 -112
  413. package/schema/magicalActions/_MusicTradition.schema.json +44 -14
  414. package/schema/magicalActions/_SkillReference.schema.json +4 -4
  415. package/schema/prerequisites/ConditionalPrerequisites.schema.json +3 -3
  416. package/schema/prerequisites/DisplayOption.schema.json +33 -15
  417. package/schema/prerequisites/PrerequisiteGroups.schema.json +845 -62
  418. package/schema/prerequisites/single/ActivatablePrerequisite.schema.json +13 -25
  419. package/schema/prerequisites/single/AnimistPowerPrerequisite.schema.json +4 -7
  420. package/schema/prerequisites/single/CulturePrerequisite.schema.json +4 -8
  421. package/schema/prerequisites/single/EnhancementPrerequisite.schema.json +30 -23
  422. package/schema/prerequisites/single/InfluencePrerequisite.schema.json +3 -7
  423. package/schema/prerequisites/single/PactPrerequisite.schema.json +9 -19
  424. package/schema/prerequisites/single/PrimaryAttributePrerequisite.schema.json +10 -33
  425. package/schema/prerequisites/single/PublicationPrerequisite.schema.json +3 -7
  426. package/schema/prerequisites/single/RacePrerequisite.schema.json +4 -8
  427. package/schema/prerequisites/single/RatedPrerequisite.schema.json +104 -107
  428. package/schema/prerequisites/single/RulePrerequisite.schema.json +4 -8
  429. package/schema/prerequisites/single/SexPrerequisite.schema.json +4 -8
  430. package/schema/prerequisites/single/SocialStatusPrerequisite.schema.json +3 -7
  431. package/schema/prerequisites/single/StatePrerequisite.schema.json +4 -8
  432. package/schema/prerequisites/single/TextPrerequisite.schema.json +13 -34
  433. package/schema/prerequisites/single/TraditionPrerequisite.schema.json +22 -68
  434. package/schema/rule/CoreRule.schema.json +1295 -859
  435. package/schema/rule/FocusRule.schema.json +34 -30
  436. package/schema/rule/FocusRule_Subject.schema.json +17 -15
  437. package/schema/rule/OptionalRule.schema.json +24 -56
  438. package/schema/rule/_Rule.schema.json +59 -0
  439. package/schema/source/Publication.schema.json +47 -117
  440. package/schema/source/_Erratum.schema.json +5 -6
  441. package/schema/source/_PublicationRef.schema.json +103 -59
  442. package/schema/specialAbility/AdvancedCombatSpecialAbility.schema.json +41 -38
  443. package/schema/specialAbility/AdvancedKarmaSpecialAbility.schema.json +35 -32
  444. package/schema/specialAbility/AdvancedMagicalSpecialAbility.schema.json +35 -32
  445. package/schema/specialAbility/AdvancedSkillSpecialAbility.schema.json +35 -32
  446. package/schema/specialAbility/AncestorGlyph.schema.json +33 -30
  447. package/schema/specialAbility/BlessedTradition.schema.json +251 -224
  448. package/schema/specialAbility/BrawlingSpecialAbility.schema.json +35 -32
  449. package/schema/specialAbility/CeremonialItemSpecialAbility.schema.json +36 -34
  450. package/schema/specialAbility/CombatSpecialAbility.schema.json +41 -38
  451. package/schema/specialAbility/CombatStyleSpecialAbility.schema.json +39 -61
  452. package/schema/specialAbility/CommandSpecialAbility.schema.json +16 -16
  453. package/schema/specialAbility/FamiliarSpecialAbility.schema.json +33 -30
  454. package/schema/specialAbility/FatePointSexSpecialAbility.schema.json +33 -30
  455. package/schema/specialAbility/FatePointSpecialAbility.schema.json +35 -32
  456. package/schema/specialAbility/GeneralSpecialAbility.schema.json +35 -32
  457. package/schema/specialAbility/KarmaSpecialAbility.schema.json +33 -30
  458. package/schema/specialAbility/LiturgicalStyleSpecialAbility.schema.json +36 -33
  459. package/schema/specialAbility/LycantropicGift.schema.json +33 -30
  460. package/schema/specialAbility/MagicStyleSpecialAbility.schema.json +36 -33
  461. package/schema/specialAbility/MagicalSpecialAbility.schema.json +35 -32
  462. package/schema/specialAbility/MagicalTradition.schema.json +66 -87
  463. package/schema/specialAbility/PactGift.schema.json +196 -174
  464. package/schema/specialAbility/ProtectiveWardingCircleSpecialAbility.schema.json +39 -38
  465. package/schema/specialAbility/Sermon.schema.json +33 -30
  466. package/schema/specialAbility/SexSpecialAbility.schema.json +35 -32
  467. package/schema/specialAbility/SikaryanDrainSpecialAbility.schema.json +33 -30
  468. package/schema/specialAbility/SkillStyleSpecialAbility.schema.json +34 -31
  469. package/schema/specialAbility/VampiricGift.schema.json +33 -30
  470. package/schema/specialAbility/Vision.schema.json +33 -30
  471. package/schema/specialAbility/_Tradition.schema.json +23 -0
  472. package/schema/specialAbility/sub/Language.schema.json +170 -162
  473. package/schema/specialAbility/sub/Script.schema.json +35 -72
  474. package/schema/specialAbility/sub/TradeSecret.schema.json +26 -25
  475. package/schema/specialAbility/sub/_LanguageScript.schema.json +26 -0
  476. package/schema/traditionArtifacts/ArcaneOrbEnchantment.schema.json +46 -43
  477. package/schema/traditionArtifacts/AttireEnchantment.schema.json +46 -43
  478. package/schema/traditionArtifacts/BowlEnchantment.schema.json +46 -43
  479. package/schema/traditionArtifacts/CauldronEnchantment.schema.json +63 -56
  480. package/schema/traditionArtifacts/ChronicleEnchantment.schema.json +46 -43
  481. package/schema/traditionArtifacts/DaggerRitual.schema.json +132 -43
  482. package/schema/traditionArtifacts/FoolsHatEnchantment.schema.json +46 -43
  483. package/schema/traditionArtifacts/InstrumentEnchantment.schema.json +46 -43
  484. package/schema/traditionArtifacts/Krallenkettenzauber.schema.json +46 -43
  485. package/schema/traditionArtifacts/OrbEnchantment.schema.json +46 -43
  486. package/schema/traditionArtifacts/RingEnchantment.schema.json +46 -43
  487. package/schema/traditionArtifacts/SickleRitual.schema.json +46 -43
  488. package/schema/traditionArtifacts/SpellSwordEnchantment.schema.json +46 -43
  489. package/schema/traditionArtifacts/StaffEnchantment.schema.json +47 -43
  490. package/schema/traditionArtifacts/ToyEnchantment.schema.json +47 -43
  491. package/schema/traditionArtifacts/Trinkhornzauber.schema.json +46 -43
  492. package/schema/traditionArtifacts/WandEnchantment.schema.json +46 -43
  493. package/schema/traditionArtifacts/WeaponEnchantment.schema.json +46 -50
  494. package/schema/traditionArtifacts/sub/AnimalShape.schema.json +53 -25
  495. package/schema/traditionArtifacts/sub/AnimalShapePath.schema.json +17 -15
  496. package/schema/traditionArtifacts/sub/AnimalShapeSize.schema.json +17 -15
  497. package/schema/traditionArtifacts/sub/Brew.schema.json +17 -15
  498. package/lib/types/MagicalTraditionPlaceholder.d.ts +0 -32
  499. package/lib/types/MagicalTraditionPlaceholder.js +0 -5
  500. package/lib/types/Poison.d.ts +0 -208
  501. package/lib/types/Poison.js +0 -5
  502. package/lib/types/equipment/ArmorType.d.ts +0 -31
  503. package/lib/types/equipment/Item.d.ts +0 -308
  504. package/lib/types/equipment/Item.js +0 -35
  505. package/lib/types/equipment/ItemGroup.d.ts +0 -31
  506. package/lib/types/equipment/ItemGroup.js +0 -5
  507. package/lib/types/equipment/Reach.d.ts +0 -31
  508. package/lib/types/equipment/_Armor.d.ts +0 -70
  509. package/lib/types/equipment/_Weapon.d.ts +0 -330
  510. package/lib/types/prerequisites/single/CommonSuggestedByRCPPrerequisite.d.ts +0 -3
  511. package/schema/MagicalTraditionPlaceholder.schema.json +0 -45
  512. package/schema/Poison.schema.json +0 -417
  513. package/schema/equipment/ArmorType.schema.json +0 -45
  514. package/schema/equipment/Item.schema.json +0 -621
  515. package/schema/equipment/ItemGroup.schema.json +0 -45
  516. package/schema/equipment/_Armor.schema.json +0 -125
  517. package/schema/equipment/_Weapon.schema.json +0 -664
  518. package/schema/prerequisites/single/CommonSuggestedByRCPPrerequisite.schema.json +0 -18
@@ -1,8 +1,8 @@
1
1
  {
2
- "$schema": "http://json-schema.org/draft-07/schema",
2
+ "$schema": "https://json-schema.org/draft/2019-09/schema",
3
3
  "$id": "/Profession.schema.json",
4
- "$ref": "#/definitions/Profession",
5
- "definitions": {
4
+ "$ref": "#/$defs/Profession",
5
+ "$defs": {
6
6
  "Profession": {
7
7
  "title": "Profession",
8
8
  "type": "object",
@@ -14,112 +14,225 @@
14
14
  },
15
15
  "group": {
16
16
  "description": "The profession group.",
17
- "$ref": "#/definitions/Group"
17
+ "$ref": "#/$defs/ProfessionGroup"
18
18
  },
19
+ "versions": {
20
+ "description": "A list of professions representing the same profession but with (slightly)\ndifferent stats. For example, there may be a profession in a regional\nsourcebook or in the core rules and a profession in an extension rulebook\nlike Magic of Aventuria, where the profession is basically called the same\nand almost has the same values, but the version from Magic of Aventuria\nfeatures a spell style special ability that does not exist in the core\nrules or regional sourcebook.\n\nThe profession representation may feature different values for different\nexplicitly mentioned experience levels. In most cases, there is only one\nstats package, which targets the experience level *Experienced*.",
21
+ "type": "array",
22
+ "items": {
23
+ "$ref": "#/$defs/ProfessionVersion"
24
+ },
25
+ "minItems": 1
26
+ }
27
+ },
28
+ "required": [
29
+ "id",
30
+ "group",
31
+ "versions"
32
+ ],
33
+ "additionalProperties": false
34
+ },
35
+ "ProfessionGroup": {
36
+ "oneOf": [
37
+ {
38
+ "type": "object",
39
+ "properties": {
40
+ "tag": {
41
+ "const": "Mundane"
42
+ },
43
+ "mundane": {
44
+ "$ref": "#/$defs/MundaneProfessionGroup"
45
+ }
46
+ },
47
+ "required": [
48
+ "tag",
49
+ "mundane"
50
+ ],
51
+ "additionalProperties": false
52
+ },
53
+ {
54
+ "type": "object",
55
+ "properties": {
56
+ "tag": {
57
+ "const": "Magical"
58
+ },
59
+ "magical": {
60
+ "$ref": "#/$defs/MagicalProfessionGroup"
61
+ }
62
+ },
63
+ "required": [
64
+ "tag",
65
+ "magical"
66
+ ],
67
+ "additionalProperties": false
68
+ },
69
+ {
70
+ "type": "object",
71
+ "properties": {
72
+ "tag": {
73
+ "const": "Blessed"
74
+ },
75
+ "blessed": {
76
+ "type": "object",
77
+ "properties": {},
78
+ "required": [],
79
+ "additionalProperties": false
80
+ }
81
+ },
82
+ "required": [
83
+ "tag",
84
+ "blessed"
85
+ ],
86
+ "additionalProperties": false
87
+ }
88
+ ]
89
+ },
90
+ "MundaneProfessionGroup": {
91
+ "enum": [
92
+ "Profane",
93
+ "Fighter",
94
+ "Religious"
95
+ ]
96
+ },
97
+ "MagicalProfessionGroup": {
98
+ "type": "object",
99
+ "properties": {
19
100
  "curriculum": {
20
101
  "description": "The curriculum/academy associated with this magical profession, if any.",
102
+ "$ref": "./_SimpleReferences.schema.json#/$defs/CurriculumReference"
103
+ }
104
+ },
105
+ "required": [],
106
+ "additionalProperties": false
107
+ },
108
+ "ProfessionVersion": {
109
+ "oneOf": [
110
+ {
21
111
  "type": "object",
22
112
  "properties": {
23
- "id": {
24
- "description": "The curriculum's identifier.",
25
- "type": "integer",
26
- "minimum": 1
113
+ "tag": {
114
+ "const": "Experienced"
115
+ },
116
+ "experienced": {
117
+ "$ref": "#/$defs/ExperiencedProfessionPackage"
27
118
  }
28
119
  },
29
120
  "required": [
30
- "id"
121
+ "tag",
122
+ "experienced"
31
123
  ],
32
124
  "additionalProperties": false
33
125
  },
34
- "representations": {
35
- "description": "A list of professions representing the same profession but with (slightly)\ndifferent stats. For example, there may be a profession in a regional\nsourcebook or in the core rules and a profession in an extension rulebook\nlike Magic of Aventuria, where the profession is basically called the same\nand almost has the same values, but the version from Magic of Aventuria\nfeatures a spell style special ability that does not exist in the core\nrules or regional sourcebook.\n\nThe profession representation may feature different values for different\nexplicitly mentioned experience levels. In most cases, there is only one\nstats package, which targets the experience level *Experienced*.",
126
+ {
127
+ "type": "object",
128
+ "properties": {
129
+ "tag": {
130
+ "const": "ByExperienceLevel"
131
+ },
132
+ "by_experience_level": {
133
+ "$ref": "#/$defs/ProfessionPackagesForDifferentExperienceLevels"
134
+ }
135
+ },
136
+ "required": [
137
+ "tag",
138
+ "by_experience_level"
139
+ ],
140
+ "additionalProperties": false
141
+ }
142
+ ]
143
+ },
144
+ "ExperiencedProfessionPackage": {
145
+ "type": "object",
146
+ "properties": {
147
+ "id": {
148
+ "description": "The profession representation variant's identifier. An unique, increasing\ninteger.",
149
+ "type": "integer",
150
+ "minimum": 1
151
+ },
152
+ "package": {
153
+ "$ref": "#/$defs/ProfessionPackage"
154
+ },
155
+ "src": {
156
+ "$ref": "./source/_PublicationRef.schema.json#/$defs/PublicationRefs"
157
+ },
158
+ "translations": {
159
+ "description": "All translations for the entry, identified by IETF language tag (BCP47).",
160
+ "type": "object",
161
+ "patternProperties": {
162
+ "^[a-z]{2}-[A-Z]{2}$": {
163
+ "$ref": "#/$defs/ProfessionTranslation"
164
+ }
165
+ },
166
+ "minProperties": 1,
167
+ "additionalProperties": false
168
+ }
169
+ },
170
+ "required": [
171
+ "id",
172
+ "package",
173
+ "src",
174
+ "translations"
175
+ ],
176
+ "additionalProperties": false
177
+ },
178
+ "ProfessionPackagesForDifferentExperienceLevels": {
179
+ "type": "object",
180
+ "properties": {
181
+ "id": {
182
+ "description": "The profession representation variant's identifier. An unique, increasing\ninteger.",
183
+ "type": "integer",
184
+ "minimum": 1
185
+ },
186
+ "packages_map": {
36
187
  "type": "array",
37
188
  "items": {
38
- "oneOf": [
39
- {
40
- "type": "object",
41
- "properties": {
42
- "tag": {
43
- "const": "Experienced"
44
- },
45
- "id": {
46
- "description": "The profession representation variant's identifier. An unique, increasing\ninteger.",
47
- "type": "integer",
48
- "minimum": 1
49
- },
50
- "package": {
51
- "$ref": "#/definitions/ProfessionRepresentationVariant"
52
- },
53
- "src": {
54
- "$ref": "./source/_PublicationRef.schema.json#/definitions/PublicationRefs"
55
- }
56
- },
57
- "required": [
58
- "tag",
59
- "id",
60
- "package",
61
- "src"
62
- ],
63
- "additionalProperties": false
64
- },
65
- {
66
- "type": "object",
67
- "properties": {
68
- "tag": {
69
- "const": "ByExperienceLevel"
70
- },
71
- "id": {
72
- "description": "The profession representation variant's identifier. An unique, increasing\ninteger.",
73
- "type": "integer",
74
- "minimum": 1
75
- },
76
- "packages": {
77
- "type": "array",
78
- "items": {
79
- "type": "object",
80
- "properties": {
81
- "experience_level_id": {
82
- "description": "The experience level this profession targets. The experience level\nmust be unique for this representation.",
83
- "type": "integer",
84
- "maximum": 7,
85
- "minimum": 1
86
- },
87
- "package": {
88
- "$ref": "#/definitions/ProfessionRepresentationVariant"
89
- }
90
- },
91
- "required": [
92
- "experience_level_id",
93
- "package"
94
- ],
95
- "additionalProperties": false
96
- }
97
- },
98
- "src": {
99
- "$ref": "./source/_PublicationRef.schema.json#/definitions/PublicationRefs"
100
- }
101
- },
102
- "required": [
103
- "tag",
104
- "id",
105
- "packages",
106
- "src"
107
- ],
108
- "additionalProperties": false
109
- }
110
- ]
189
+ "$ref": "#/$defs/ExperienceLevelDynamicProfessionPackage"
190
+ }
191
+ },
192
+ "src": {
193
+ "$ref": "./source/_PublicationRef.schema.json#/$defs/PublicationRefs"
194
+ },
195
+ "translations": {
196
+ "description": "All translations for the entry, identified by IETF language tag (BCP47).",
197
+ "type": "object",
198
+ "patternProperties": {
199
+ "^[a-z]{2}-[A-Z]{2}$": {
200
+ "$ref": "#/$defs/ProfessionTranslation"
201
+ }
111
202
  },
112
- "minItems": 1
203
+ "minProperties": 1,
204
+ "additionalProperties": false
113
205
  }
114
206
  },
115
207
  "required": [
116
208
  "id",
117
- "group",
118
- "representations"
209
+ "packages_map",
210
+ "src",
211
+ "translations"
212
+ ],
213
+ "additionalProperties": false
214
+ },
215
+ "ExperienceLevelDynamicProfessionPackage": {
216
+ "type": "object",
217
+ "properties": {
218
+ "experience_level_id": {
219
+ "description": "The experience level this profession targets. The experience level\nmust be unique for this representation.",
220
+ "type": "integer",
221
+ "default": 3,
222
+ "maximum": 7,
223
+ "minimum": 1
224
+ },
225
+ "package": {
226
+ "$ref": "#/$defs/ProfessionPackage"
227
+ }
228
+ },
229
+ "required": [
230
+ "experience_level_id",
231
+ "package"
119
232
  ],
120
233
  "additionalProperties": false
121
234
  },
122
- "ProfessionRepresentationVariant": {
235
+ "ProfessionPackage": {
123
236
  "title": "Profession Representation Variant",
124
237
  "type": "object",
125
238
  "properties": {
@@ -130,77 +243,52 @@
130
243
  },
131
244
  "prerequisites": {
132
245
  "description": "Which prerequisites must be met to buy the stat block? For example, a\ncharacter might need the advantage Spellcaster or Blessed. Note: the AP\ncost for a profession package does not include these prerequisites.",
133
- "$ref": "./_Prerequisite.schema.json#/definitions/ProfessionPrerequisites"
246
+ "$ref": "./_Prerequisite.schema.json#/$defs/ProfessionPrerequisites"
134
247
  },
135
248
  "options": {
136
- "type": "object",
137
- "properties": {
138
- "skill_specialization": {
139
- "$ref": "#/definitions/SkillSpecializationOptions"
140
- },
141
- "languages_scripts": {
142
- "$ref": "#/definitions/LanguagesScriptsOptions"
143
- },
144
- "combat_techniques": {
145
- "$ref": "#/definitions/CombatTechniquesOptions"
146
- },
147
- "cantrips": {
148
- "$ref": "#/definitions/CantripsOptions"
149
- },
150
- "curses": {
151
- "$ref": "#/definitions/CursesOptions"
152
- },
153
- "terrain_knowledge": {
154
- "$ref": "#/definitions/TerrainKnowledgeOptions"
155
- },
156
- "skills": {
157
- "$ref": "#/definitions/SkillsOptions"
158
- }
159
- },
160
- "required": [],
161
- "minProperties": 1,
162
- "additionalProperties": false
249
+ "description": "In some areas, the profession package grants a loose set of stats where the\nplayer must choose between different options for the profession package.",
250
+ "$ref": "#/$defs/ProfessionPackageOptions"
163
251
  },
164
252
  "special_abilities": {
165
253
  "description": "Any special abilities the profession receives from the package.",
166
254
  "type": "array",
167
255
  "items": {
168
- "$ref": "#/definitions/SpecialAbility"
256
+ "$ref": "#/$defs/SpecialAbility"
169
257
  }
170
258
  },
171
259
  "combat_techniques": {
172
260
  "description": "Provides ratings for the combat techniques that the hero receives from the\npackage.",
173
261
  "type": "array",
174
262
  "items": {
175
- "$ref": "#/definitions/CombatTechnique"
263
+ "$ref": "#/$defs/CombatTechniqueRating"
176
264
  }
177
265
  },
178
266
  "skills": {
179
267
  "description": "The skill ratings the package grants to the hero.",
180
268
  "type": "array",
181
269
  "items": {
182
- "$ref": "#/definitions/Skill"
270
+ "$ref": "#/$defs/SkillRating"
183
271
  }
184
272
  },
185
273
  "spells": {
186
274
  "description": "The skill ratings a magical profession receives for spells; these spells\nare considered activated. Spells from an unfamiliar Tradition, if any, are\nidentified as such.",
187
275
  "type": "array",
188
276
  "items": {
189
- "$ref": "#/definitions/Spell"
277
+ "$ref": "#/$defs/SpellRating"
190
278
  }
191
279
  },
192
280
  "liturgical_chants": {
193
281
  "description": "Clerical professions receive these liturgical chants at the listed skill\nratings. These liturgical chants are considered activated.",
194
282
  "type": "array",
195
283
  "items": {
196
- "$ref": "#/definitions/LiturgicalChant"
284
+ "$ref": "#/$defs/LiturgicalChantRating"
197
285
  }
198
286
  },
199
287
  "suggested_advantages": {
200
288
  "description": "Typical advantages for the profession.",
201
289
  "type": "array",
202
290
  "items": {
203
- "$ref": "./_CommonnessRatedAdvantageDisadvantage.schema.json#/definitions/CommonnessRatedAdvantageDisadvantage"
291
+ "$ref": "./_CommonnessRatedAdvantageDisadvantage.schema.json#/$defs/CommonnessRatedAdvantageDisadvantage"
204
292
  },
205
293
  "minItems": 1
206
294
  },
@@ -208,7 +296,7 @@
208
296
  "description": "Typical disadvantages for the profession.",
209
297
  "type": "array",
210
298
  "items": {
211
- "$ref": "./_CommonnessRatedAdvantageDisadvantage.schema.json#/definitions/CommonnessRatedAdvantageDisadvantage"
299
+ "$ref": "./_CommonnessRatedAdvantageDisadvantage.schema.json#/$defs/CommonnessRatedAdvantageDisadvantage"
212
300
  },
213
301
  "minItems": 1
214
302
  },
@@ -216,7 +304,7 @@
216
304
  "description": "These advantages do not fit well with this profession; to be checked with\nthe GM before taking any of them.",
217
305
  "type": "array",
218
306
  "items": {
219
- "$ref": "./_CommonnessRatedAdvantageDisadvantage.schema.json#/definitions/CommonnessRatedAdvantageDisadvantage"
307
+ "$ref": "./_CommonnessRatedAdvantageDisadvantage.schema.json#/$defs/CommonnessRatedAdvantageDisadvantage"
220
308
  },
221
309
  "minItems": 1
222
310
  },
@@ -224,107 +312,76 @@
224
312
  "description": "These disadvantages do not fit well with this profession; to be checked\nwith the GM before taking any of them.",
225
313
  "type": "array",
226
314
  "items": {
227
- "$ref": "./_CommonnessRatedAdvantageDisadvantage.schema.json#/definitions/CommonnessRatedAdvantageDisadvantage"
315
+ "$ref": "./_CommonnessRatedAdvantageDisadvantage.schema.json#/$defs/CommonnessRatedAdvantageDisadvantage"
228
316
  },
229
317
  "minItems": 1
230
318
  },
231
319
  "variants": {
232
320
  "description": "Provides examples of variants for the profession, which may include changes\nto AP values and additional or modified skill ratings, special abilities,\nor combat techniques, as compared to the basic profession. Usually picking\na variant is optional, but there are some rare exceptions where picking a\nvariant is required.",
233
- "oneOf": [
234
- {
235
- "type": "object",
236
- "properties": {
237
- "tag": {
238
- "const": "Required"
239
- },
240
- "list": {
241
- "type": "array",
242
- "items": {
243
- "$ref": "#/definitions/ProfessionVariant"
244
- },
245
- "minItems": 2
246
- }
247
- },
248
- "required": [
249
- "tag",
250
- "list"
251
- ],
252
- "additionalProperties": false
253
- },
254
- {
255
- "type": "object",
256
- "properties": {
257
- "tag": {
258
- "const": "Optional"
259
- },
260
- "list": {
261
- "type": "array",
262
- "items": {
263
- "$ref": "#/definitions/ProfessionVariant"
264
- },
265
- "minItems": 1
266
- }
267
- },
268
- "required": [
269
- "tag",
270
- "list"
271
- ],
272
- "additionalProperties": false
273
- }
274
- ]
321
+ "$ref": "#/$defs/ProfessionVariants"
322
+ }
323
+ },
324
+ "required": [
325
+ "ap_value"
326
+ ],
327
+ "additionalProperties": false
328
+ },
329
+ "ProfessionTranslation": {
330
+ "type": "object",
331
+ "properties": {
332
+ "name": {
333
+ "description": "Name of the basic profession.",
334
+ "$ref": "#/$defs/ProfessionName"
275
335
  },
276
- "translations": {
277
- "description": "All translations for the entry, identified by IETF language tag (BCP47).",
278
- "type": "object",
279
- "patternProperties": {
280
- "^[a-z]{2}-[A-Z]{2}$": {
281
- "type": "object",
282
- "properties": {
283
- "name": {
284
- "description": "Name of the basic profession.",
285
- "$ref": "#/definitions/Name"
286
- },
287
- "specification": {
288
- "description": "A name addition of the profession. This will contain texts like name of\nthe academy or the witch circle. It is enclosed in parenthesis.",
289
- "$ref": "#/definitions/Name"
290
- },
291
- "suggested_advantages": {
292
- "description": "Typical advantages for the profession.",
293
- "type": "string",
294
- "minLength": 1
295
- },
296
- "suggested_disadvantages": {
297
- "description": "Typical disadvantages for the profession.",
298
- "type": "string",
299
- "minLength": 1
300
- },
301
- "unsuitable_advantages": {
302
- "description": "These advantages do not fit well with this profession; to be checked with\nthe GM before taking any of them.",
303
- "type": "string",
304
- "minLength": 1
305
- },
306
- "unsuitable_disadvantages": {
307
- "description": "These disadvantages do not fit well with this profession; to be checked\nwith the GM before taking any of them.",
308
- "type": "string",
309
- "minLength": 1
310
- },
311
- "errata": {
312
- "$ref": "./source/_Erratum.schema.json#/definitions/Errata"
313
- }
314
- },
315
- "required": [
316
- "name"
317
- ],
318
- "additionalProperties": false
319
- }
336
+ "specification": {
337
+ "description": "A name addition of the profession. This will contain texts like name of\nthe academy or the witch circle. It is enclosed in parenthesis, but the\ndatabase entry must not contain parenthesis.",
338
+ "$ref": "#/$defs/ProfessionName"
339
+ },
340
+ "suggested_advantages": {
341
+ "description": "Typical advantages for the profession.",
342
+ "$ref": "./_NonEmptyString.schema.json#/$defs/NonEmptyString"
343
+ },
344
+ "suggested_disadvantages": {
345
+ "description": "Typical disadvantages for the profession.",
346
+ "$ref": "./_NonEmptyString.schema.json#/$defs/NonEmptyString"
347
+ },
348
+ "unsuitable_advantages": {
349
+ "description": "These advantages do not fit well with this profession; to be checked with\nthe GM before taking any of them.",
350
+ "$ref": "./_NonEmptyString.schema.json#/$defs/NonEmptyString"
351
+ },
352
+ "unsuitable_disadvantages": {
353
+ "description": "These disadvantages do not fit well with this profession; to be checked\nwith the GM before taking any of them.",
354
+ "$ref": "./_NonEmptyString.schema.json#/$defs/NonEmptyString"
355
+ },
356
+ "errata": {
357
+ "$ref": "./source/_Erratum.schema.json#/$defs/Errata"
358
+ }
359
+ },
360
+ "required": [
361
+ "name"
362
+ ],
363
+ "additionalProperties": false
364
+ },
365
+ "ProfessionVariants": {
366
+ "description": "Provides examples of variants for the profession, which may include changes\nto AP values and additional or modified skill ratings, special abilities, or\ncombat techniques, as compared to the basic profession. Usually picking a\nvariant is optional, but there are some rare exceptions where picking a\nvariant is required.",
367
+ "type": "object",
368
+ "properties": {
369
+ "is_selection_required": {
370
+ "description": "If the selection of a profession variant is required.",
371
+ "type": "boolean"
372
+ },
373
+ "list": {
374
+ "description": "The list of profession variants.",
375
+ "type": "array",
376
+ "items": {
377
+ "$ref": "#/$defs/ProfessionVariant"
320
378
  },
321
- "minProperties": 1,
322
- "additionalProperties": false
379
+ "minItems": 1
323
380
  }
324
381
  },
325
382
  "required": [
326
- "ap_value",
327
- "translations"
383
+ "is_selection_required",
384
+ "list"
328
385
  ],
329
386
  "additionalProperties": false
330
387
  },
@@ -343,273 +400,44 @@
343
400
  },
344
401
  "prerequisites": {
345
402
  "description": "Which prerequisites must be met to buy the stat block? For example, a\ncharacter might need the advantage Spellcaster or Blessed. Note: the AP\ncost for a profession package does not include these prerequisites.",
346
- "$ref": "./_Prerequisite.schema.json#/definitions/ProfessionPrerequisites"
403
+ "$ref": "./_Prerequisite.schema.json#/$defs/ProfessionPrerequisites"
347
404
  },
348
405
  "options": {
349
- "type": "object",
350
- "properties": {
351
- "skill_specialization": {
352
- "oneOf": [
353
- {
354
- "type": "object",
355
- "properties": {
356
- "tag": {
357
- "const": "Remove"
358
- }
359
- },
360
- "required": [
361
- "tag"
362
- ],
363
- "additionalProperties": false
364
- },
365
- {
366
- "type": "object",
367
- "properties": {
368
- "tag": {
369
- "const": "Override"
370
- },
371
- "value": {
372
- "$ref": "#/definitions/SkillSpecializationOptions"
373
- }
374
- },
375
- "required": [
376
- "tag",
377
- "value"
378
- ],
379
- "additionalProperties": false
380
- }
381
- ]
382
- },
383
- "languages_scripts": {
384
- "oneOf": [
385
- {
386
- "type": "object",
387
- "properties": {
388
- "tag": {
389
- "const": "Remove"
390
- }
391
- },
392
- "required": [
393
- "tag"
394
- ],
395
- "additionalProperties": false
396
- },
397
- {
398
- "type": "object",
399
- "properties": {
400
- "tag": {
401
- "const": "Override"
402
- },
403
- "value": {
404
- "$ref": "#/definitions/LanguagesScriptsOptions"
405
- }
406
- },
407
- "required": [
408
- "tag",
409
- "value"
410
- ],
411
- "additionalProperties": false
412
- }
413
- ]
414
- },
415
- "combat_techniques": {
416
- "oneOf": [
417
- {
418
- "type": "object",
419
- "properties": {
420
- "tag": {
421
- "const": "Remove"
422
- }
423
- },
424
- "required": [
425
- "tag"
426
- ],
427
- "additionalProperties": false
428
- },
429
- {
430
- "type": "object",
431
- "properties": {
432
- "tag": {
433
- "const": "Override"
434
- },
435
- "value": {
436
- "$ref": "#/definitions/CombatTechniquesOptions"
437
- }
438
- },
439
- "required": [
440
- "tag",
441
- "value"
442
- ],
443
- "additionalProperties": false
444
- }
445
- ]
446
- },
447
- "cantrips": {
448
- "oneOf": [
449
- {
450
- "type": "object",
451
- "properties": {
452
- "tag": {
453
- "const": "Remove"
454
- }
455
- },
456
- "required": [
457
- "tag"
458
- ],
459
- "additionalProperties": false
460
- },
461
- {
462
- "type": "object",
463
- "properties": {
464
- "tag": {
465
- "const": "Override"
466
- },
467
- "value": {
468
- "$ref": "#/definitions/CantripsOptions"
469
- }
470
- },
471
- "required": [
472
- "tag",
473
- "value"
474
- ],
475
- "additionalProperties": false
476
- }
477
- ]
478
- },
479
- "curses": {
480
- "oneOf": [
481
- {
482
- "type": "object",
483
- "properties": {
484
- "tag": {
485
- "const": "Remove"
486
- }
487
- },
488
- "required": [
489
- "tag"
490
- ],
491
- "additionalProperties": false
492
- },
493
- {
494
- "type": "object",
495
- "properties": {
496
- "tag": {
497
- "const": "Override"
498
- },
499
- "value": {
500
- "$ref": "#/definitions/CursesOptions"
501
- }
502
- },
503
- "required": [
504
- "tag",
505
- "value"
506
- ],
507
- "additionalProperties": false
508
- }
509
- ]
510
- },
511
- "terrain_knowledge": {
512
- "oneOf": [
513
- {
514
- "type": "object",
515
- "properties": {
516
- "tag": {
517
- "const": "Remove"
518
- }
519
- },
520
- "required": [
521
- "tag"
522
- ],
523
- "additionalProperties": false
524
- },
525
- {
526
- "type": "object",
527
- "properties": {
528
- "tag": {
529
- "const": "Override"
530
- },
531
- "value": {
532
- "$ref": "#/definitions/TerrainKnowledgeOptions"
533
- }
534
- },
535
- "required": [
536
- "tag",
537
- "value"
538
- ],
539
- "additionalProperties": false
540
- }
541
- ]
542
- },
543
- "skills": {
544
- "oneOf": [
545
- {
546
- "type": "object",
547
- "properties": {
548
- "tag": {
549
- "const": "Remove"
550
- }
551
- },
552
- "required": [
553
- "tag"
554
- ],
555
- "additionalProperties": false
556
- },
557
- {
558
- "type": "object",
559
- "properties": {
560
- "tag": {
561
- "const": "Override"
562
- },
563
- "value": {
564
- "$ref": "#/definitions/SkillsOptions"
565
- }
566
- },
567
- "required": [
568
- "tag",
569
- "value"
570
- ],
571
- "additionalProperties": false
572
- }
573
- ]
574
- }
575
- },
576
- "required": [],
577
- "minProperties": 1,
578
- "additionalProperties": false
406
+ "$ref": "#/$defs/ProfessionVariantPackageOptions"
579
407
  },
580
408
  "special_abilities": {
581
409
  "description": "Any special abilities the profession receives from the package variant.",
582
410
  "type": "array",
583
411
  "items": {
584
- "$ref": "#/definitions/VariantSpecialAbility"
412
+ "$ref": "#/$defs/VariantSpecialAbility"
585
413
  }
586
414
  },
587
415
  "combat_techniques": {
588
416
  "description": "Provides ratings for the combat techniques that the hero receives from the\npackage variant.",
589
417
  "type": "array",
590
418
  "items": {
591
- "$ref": "#/definitions/VariantCombatTechnique"
419
+ "$ref": "#/$defs/CombatTechniqueRating"
592
420
  }
593
421
  },
594
422
  "skills": {
595
423
  "description": "The skill ratings the package variant grants to the hero.",
596
424
  "type": "array",
597
425
  "items": {
598
- "$ref": "#/definitions/VariantSkill"
426
+ "$ref": "#/$defs/SkillRating"
599
427
  }
600
428
  },
601
429
  "spells": {
602
430
  "description": "The skill ratings a magical profession variant receives for spells; these\nspells are considered activated. Spells from an unfamiliar Tradition, if\nany, are identified as such.",
603
431
  "type": "array",
604
432
  "items": {
605
- "$ref": "#/definitions/VariantSpell"
433
+ "$ref": "#/$defs/SpellRating"
606
434
  }
607
435
  },
608
436
  "liturgical_chants": {
609
437
  "description": "Clerical professions receive these liturgical chants at the listed skill\nratings. These liturgical chants are considered activated.",
610
438
  "type": "array",
611
439
  "items": {
612
- "$ref": "#/definitions/VariantLiturgicalChant"
440
+ "$ref": "#/$defs/LiturgicalChantRating"
613
441
  }
614
442
  },
615
443
  "translations": {
@@ -617,17 +445,7 @@
617
445
  "type": "object",
618
446
  "patternProperties": {
619
447
  "^[a-z]{2}-[A-Z]{2}$": {
620
- "type": "object",
621
- "properties": {
622
- "name": {
623
- "description": "Name of the profession variant.",
624
- "$ref": "#/definitions/Name"
625
- }
626
- },
627
- "required": [
628
- "name"
629
- ],
630
- "additionalProperties": false
448
+ "$ref": "#/$defs/ProfessionVariantTranslation"
631
449
  }
632
450
  },
633
451
  "minProperties": 1,
@@ -641,6 +459,19 @@
641
459
  ],
642
460
  "additionalProperties": false
643
461
  },
462
+ "ProfessionVariantTranslation": {
463
+ "type": "object",
464
+ "properties": {
465
+ "name": {
466
+ "description": "Name of the profession variant.",
467
+ "$ref": "#/$defs/ProfessionName"
468
+ }
469
+ },
470
+ "required": [
471
+ "name"
472
+ ],
473
+ "additionalProperties": false
474
+ },
644
475
  "SpecialAbility": {
645
476
  "oneOf": [
646
477
  {
@@ -649,27 +480,13 @@
649
480
  "tag": {
650
481
  "const": "Fixed"
651
482
  },
652
- "id": {
653
- "description": "The identifier of the combat technique to provide the rating for.",
654
- "$ref": "./_Identifier.schema.json#/definitions/SpecialAbilityIdentifier"
655
- },
656
- "level": {
657
- "description": "The level of the received special ability.",
658
- "type": "integer",
659
- "minimum": 1
660
- },
661
- "options": {
662
- "description": "Received select options. Order is important. Typically, you only need the\nfirst array index, though.",
663
- "type": "array",
664
- "items": {
665
- "$ref": "./_Identifier.schema.json#/definitions/RequirableSelectOptionIdentifier"
666
- },
667
- "minItems": 1
483
+ "fixed": {
484
+ "$ref": "#/$defs/FixedSpecialAbility"
668
485
  }
669
486
  },
670
487
  "required": [
671
488
  "tag",
672
- "id"
489
+ "fixed"
673
490
  ],
674
491
  "additionalProperties": false
675
492
  },
@@ -679,44 +496,62 @@
679
496
  "tag": {
680
497
  "const": "Selection"
681
498
  },
682
- "options": {
683
- "type": "array",
684
- "items": {
685
- "type": "object",
686
- "properties": {
687
- "id": {
688
- "description": "The identifier of the combat technique to provide the rating for.",
689
- "$ref": "./_Identifier.schema.json#/definitions/SpecialAbilityIdentifier"
690
- },
691
- "level": {
692
- "description": "The level of the received special ability.",
693
- "type": "integer",
694
- "minimum": 1
695
- },
696
- "options": {
697
- "description": "Received select options. Order is important. Typically, you only need the\nfirst array index, though.",
698
- "type": "array",
699
- "items": {
700
- "$ref": "./_Identifier.schema.json#/definitions/RequirableSelectOptionIdentifier"
701
- },
702
- "minItems": 1
703
- }
704
- },
705
- "required": [
706
- "id"
707
- ],
708
- "additionalProperties": false
709
- },
710
- "minItems": 2
499
+ "selection": {
500
+ "$ref": "#/$defs/SpecialAbilitySelection"
711
501
  }
712
502
  },
713
503
  "required": [
714
504
  "tag",
715
- "options"
505
+ "selection"
716
506
  ],
717
507
  "additionalProperties": false
718
508
  }
719
- ]
509
+ ]
510
+ },
511
+ "FixedSpecialAbility": {
512
+ "$ref": "#/$defs/SpecialAbilityDefinition"
513
+ },
514
+ "SpecialAbilitySelection": {
515
+ "type": "object",
516
+ "properties": {
517
+ "options": {
518
+ "type": "array",
519
+ "items": {
520
+ "$ref": "#/$defs/SpecialAbilityDefinition"
521
+ },
522
+ "minItems": 2
523
+ }
524
+ },
525
+ "required": [
526
+ "options"
527
+ ],
528
+ "additionalProperties": false
529
+ },
530
+ "SpecialAbilityDefinition": {
531
+ "type": "object",
532
+ "properties": {
533
+ "id": {
534
+ "description": "The identifier of the combat technique to provide the rating for.",
535
+ "$ref": "./_Identifier.schema.json#/$defs/SpecialAbilityIdentifier"
536
+ },
537
+ "level": {
538
+ "description": "The level of the received special ability.",
539
+ "type": "integer",
540
+ "minimum": 1
541
+ },
542
+ "options": {
543
+ "description": "Received select options. Order is important. Typically, you only need the\nfirst array index, though.",
544
+ "type": "array",
545
+ "items": {
546
+ "$ref": "./_Identifier.schema.json#/$defs/RequirableSelectOptionIdentifier"
547
+ },
548
+ "minItems": 1
549
+ }
550
+ },
551
+ "required": [
552
+ "id"
553
+ ],
554
+ "additionalProperties": false
720
555
  },
721
556
  "VariantSpecialAbility": {
722
557
  "oneOf": [
@@ -726,31 +561,13 @@
726
561
  "tag": {
727
562
  "const": "Fixed"
728
563
  },
729
- "id": {
730
- "description": "The identifier of the combat technique to provide the rating for.",
731
- "$ref": "./_Identifier.schema.json#/definitions/SpecialAbilityIdentifier"
732
- },
733
- "active": {
734
- "description": "if set to `false`, if the entry is granted by the basic package, it is\nremoved.",
735
- "const": false
736
- },
737
- "level": {
738
- "description": "The level of the received special ability.",
739
- "type": "integer",
740
- "minimum": 1
741
- },
742
- "options": {
743
- "description": "Received select options. Order is important. Typically, you only need the\nfirst array index, though.",
744
- "type": "array",
745
- "items": {
746
- "$ref": "./_Identifier.schema.json#/definitions/RequirableSelectOptionIdentifier"
747
- },
748
- "minItems": 1
564
+ "fixed": {
565
+ "$ref": "#/$defs/FixedVariantSpecialAbility"
749
566
  }
750
567
  },
751
568
  "required": [
752
569
  "tag",
753
- "id"
570
+ "fixed"
754
571
  ],
755
572
  "additionalProperties": false
756
573
  },
@@ -760,79 +577,80 @@
760
577
  "tag": {
761
578
  "const": "Selection"
762
579
  },
763
- "active": {
764
- "description": "if set to `false`, if the selection is granted by the basic package, it\nis removed.",
765
- "const": false
766
- },
767
- "options": {
768
- "type": "array",
769
- "items": {
770
- "type": "object",
771
- "properties": {
772
- "id": {
773
- "description": "The identifier of the combat technique to provide the rating for.",
774
- "$ref": "./_Identifier.schema.json#/definitions/SpecialAbilityIdentifier"
775
- },
776
- "level": {
777
- "description": "The level of the received special ability.",
778
- "type": "integer",
779
- "minimum": 1
780
- },
781
- "options": {
782
- "description": "Received select options. Order is important. Typically, you only need the\nfirst array index, though.",
783
- "type": "array",
784
- "items": {
785
- "$ref": "./_Identifier.schema.json#/definitions/RequirableSelectOptionIdentifier"
786
- },
787
- "minItems": 1
788
- }
789
- },
790
- "required": [
791
- "id"
792
- ],
793
- "additionalProperties": false
794
- },
795
- "minItems": 2
580
+ "selection": {
581
+ "$ref": "#/$defs/VariantSpecialAbilitySelection"
796
582
  }
797
583
  },
798
584
  "required": [
799
585
  "tag",
800
- "options"
586
+ "selection"
801
587
  ],
802
588
  "additionalProperties": false
803
589
  }
804
590
  ]
805
591
  },
806
- "CombatTechnique": {
592
+ "FixedVariantSpecialAbility": {
807
593
  "type": "object",
808
594
  "properties": {
809
595
  "id": {
810
596
  "description": "The identifier of the combat technique to provide the rating for.",
811
- "$ref": "./_Identifier.schema.json#/definitions/CombatTechniqueIdentifier"
597
+ "$ref": "./_Identifier.schema.json#/$defs/SpecialAbilityIdentifier"
812
598
  },
813
- "rating": {
814
- "description": "The rating provided for the combat technique.",
599
+ "level": {
600
+ "description": "The level of the received special ability.",
815
601
  "type": "integer",
816
- "minimum": 7
602
+ "minimum": 1
603
+ },
604
+ "options": {
605
+ "description": "Received select options. Order is important. Typically, you only need the\nfirst array index, though.",
606
+ "type": "array",
607
+ "items": {
608
+ "$ref": "./_Identifier.schema.json#/$defs/RequirableSelectOptionIdentifier"
609
+ },
610
+ "minItems": 1
611
+ },
612
+ "active": {
613
+ "description": "if set to `false`, if the selection is granted by the basic package, it\nis removed.",
614
+ "const": false
817
615
  }
818
616
  },
819
617
  "required": [
820
- "id",
821
- "rating"
618
+ "id"
619
+ ],
620
+ "additionalProperties": false
621
+ },
622
+ "VariantSpecialAbilitySelection": {
623
+ "type": "object",
624
+ "properties": {
625
+ "active": {
626
+ "description": "if set to `false`, if the selection is granted by the basic package, it\nis removed.",
627
+ "const": false
628
+ },
629
+ "options": {
630
+ "type": "array",
631
+ "items": {
632
+ "$ref": "#/$defs/SpecialAbilityDefinition"
633
+ },
634
+ "minItems": 2
635
+ }
636
+ },
637
+ "required": [
638
+ "options"
822
639
  ],
823
640
  "additionalProperties": false
824
641
  },
825
- "VariantCombatTechnique": {
642
+ "CombatTechniqueRating": {
826
643
  "type": "object",
827
644
  "properties": {
828
645
  "id": {
829
646
  "description": "The identifier of the combat technique to provide the rating for.",
830
- "$ref": "./_Identifier.schema.json#/definitions/CombatTechniqueIdentifier"
647
+ "$ref": "./_Identifier.schema.json#/$defs/CombatTechniqueIdentifier"
831
648
  },
832
649
  "rating": {
833
- "description": "The rating provided for the combat technique. It overrides the basic\npackage's rating.",
650
+ "description": "The rating bonus provided for the combat technique. If used in a profession\nvariant, it can also be used to lower the bonus of the base profession.\n\n**Note:** This is a rating *bonus*, so it will be *added* to the default\nvalue of 6.",
834
651
  "type": "integer",
835
- "minimum": 6
652
+ "maximum": 6,
653
+ "minimum": -6
836
654
  }
837
655
  },
838
656
  "required": [
@@ -841,7 +659,7 @@
841
659
  ],
842
660
  "additionalProperties": false
843
661
  },
844
- "Skill": {
662
+ "SkillRating": {
845
663
  "type": "object",
846
664
  "properties": {
847
665
  "id": {
@@ -851,9 +669,10 @@
851
669
  "minimum": 1
852
670
  },
853
671
  "rating": {
854
- "description": "The rating provided for the skill.",
672
+ "description": "The rating bonus provided for the skill. If used in a profession variant,\nit can also be used to lower the bonus of the base profession",
855
673
  "type": "integer",
856
- "minimum": 1
674
+ "maximum": 8,
675
+ "minimum": -8
857
676
  }
858
677
  },
859
678
  "required": [
@@ -862,19 +681,22 @@
862
681
  ],
863
682
  "additionalProperties": false
864
683
  },
865
- "VariantSkill": {
684
+ "SpellRating": {
866
685
  "type": "object",
867
686
  "properties": {
868
687
  "id": {
869
- "description": "The identifier of the skill to provide the rating for.",
870
- "type": "integer",
871
- "maximum": 59,
872
- "minimum": 1
688
+ "description": "The identifier(s) of the spell(s) to choose from to provide the rating for.\nIf multiple spells are provided, they must all have the same improvement\ncost.",
689
+ "type": "array",
690
+ "items": {
691
+ "$ref": "#/$defs/SpellIdentifier"
692
+ },
693
+ "minItems": 1
873
694
  },
874
695
  "rating": {
875
- "description": "The rating provided for the skill. It overrides the basic package's rating.",
696
+ "description": "The rating bonus provided for the (selected) spell. If used in a profession\nvariant, it can also be used to lower the bonus of the base profession.",
876
697
  "type": "integer",
877
- "minimum": 0
698
+ "maximum": 10,
699
+ "minimum": -10
878
700
  }
879
701
  },
880
702
  "required": [
@@ -883,28 +705,21 @@
883
705
  ],
884
706
  "additionalProperties": false
885
707
  },
886
- "Spell": {
708
+ "SpellIdentifier": {
887
709
  "oneOf": [
888
710
  {
889
711
  "type": "object",
890
712
  "properties": {
891
713
  "tag": {
892
- "const": "Fixed"
893
- },
894
- "id": {
895
- "description": "The identifier of the spell to provide the rating for.",
896
- "$ref": "#/definitions/SpellIdentifier"
714
+ "const": "Spellwork"
897
715
  },
898
- "rating": {
899
- "description": "The rating provided for the spell.",
900
- "type": "integer",
901
- "minimum": 1
716
+ "spellwork": {
717
+ "$ref": "#/$defs/ProfessionSpellworkIdentifier"
902
718
  }
903
719
  },
904
720
  "required": [
905
721
  "tag",
906
- "id",
907
- "rating"
722
+ "spellwork"
908
723
  ],
909
724
  "additionalProperties": false
910
725
  },
@@ -912,244 +727,385 @@
912
727
  "type": "object",
913
728
  "properties": {
914
729
  "tag": {
915
- "const": "Selection"
916
- },
917
- "id": {
918
- "description": "The identifiers of the spells to choose from to provide the rating for.",
919
- "type": "array",
920
- "items": {
921
- "$ref": "#/definitions/SpellIdentifier"
922
- },
923
- "minItems": 2
730
+ "const": "MagicalAction"
924
731
  },
925
- "rating": {
926
- "description": "The rating provided for the selected spell.",
927
- "type": "integer",
928
- "minimum": 1
732
+ "magical_action": {
733
+ "$ref": "#/$defs/ProfessionMagicalActionIdentifier"
929
734
  }
930
735
  },
931
736
  "required": [
932
737
  "tag",
933
- "id",
934
- "rating"
738
+ "magical_action"
935
739
  ],
936
740
  "additionalProperties": false
937
741
  }
938
742
  ]
939
743
  },
940
- "VariantSpell": {
941
- "oneOf": [
942
- {
943
- "type": "object",
944
- "properties": {
945
- "tag": {
946
- "const": "Fixed"
947
- },
948
- "id": {
949
- "description": "The identifier of the spell to provide the rating for.",
950
- "$ref": "#/definitions/SpellIdentifier"
744
+ "ProfessionSpellworkIdentifier": {
745
+ "type": "object",
746
+ "properties": {
747
+ "id": {
748
+ "description": "The identifier of the spell to provide the rating for.",
749
+ "$ref": "./_Identifier.schema.json#/$defs/SpellworkIdentifier"
750
+ },
751
+ "tradition": {
752
+ "description": "If the spell is not part of the magical tradition required by the\npackage, this references the magical tradition it is part of. It can also\nbe used to define the target magical tradition of a spell if multiple\nmagical traditions are required and the spell is available to multiple\nof them.",
753
+ "$ref": "./_SimpleReferences.schema.json#/$defs/MagicalTraditionReference"
754
+ }
755
+ },
756
+ "required": [
757
+ "id"
758
+ ],
759
+ "additionalProperties": false
760
+ },
761
+ "ProfessionMagicalActionIdentifier": {
762
+ "type": "object",
763
+ "properties": {
764
+ "id": {
765
+ "description": "The identifier of the magical action to provide the rating for.",
766
+ "$ref": "./_Identifier.schema.json#/$defs/MagicalActionIdentifier"
767
+ }
768
+ },
769
+ "required": [
770
+ "id"
771
+ ],
772
+ "additionalProperties": false
773
+ },
774
+ "LiturgicalChantRating": {
775
+ "type": "object",
776
+ "properties": {
777
+ "id": {
778
+ "description": "The identifier(s) of the liturgical chant(s) to choose from to provide\nthe rating for. If multiple liturgical chants are provided, they must all\nhave the same improvement cost.",
779
+ "type": "array",
780
+ "items": {
781
+ "$ref": "./_Identifier.schema.json#/$defs/LiturgyIdentifier"
782
+ },
783
+ "minItems": 1
784
+ },
785
+ "rating": {
786
+ "description": "The rating bonus provided for the selected liturgical chant. If used in a\nprofession variant, it can also be used to lower the bonus of the base\nprofession.",
787
+ "type": "integer",
788
+ "maximum": 10,
789
+ "minimum": -10
790
+ }
791
+ },
792
+ "required": [
793
+ "id",
794
+ "rating"
795
+ ],
796
+ "additionalProperties": false
797
+ },
798
+ "ProfessionPackageOptions": {
799
+ "description": "In some areas, the profession package grants a loose set of stats where the\nplayer must choose between different options for the profession package.",
800
+ "type": "object",
801
+ "properties": {
802
+ "skill_specialization": {
803
+ "$ref": "#/$defs/SkillSpecializationOptions"
804
+ },
805
+ "languages_scripts": {
806
+ "$ref": "#/$defs/LanguagesScriptsOptions"
807
+ },
808
+ "combat_techniques": {
809
+ "$ref": "#/$defs/CombatTechniquesOptions"
810
+ },
811
+ "cantrips": {
812
+ "$ref": "#/$defs/CantripsOptions"
813
+ },
814
+ "curses": {
815
+ "$ref": "#/$defs/CursesOptions"
816
+ },
817
+ "terrain_knowledge": {
818
+ "$ref": "#/$defs/TerrainKnowledgeOptions"
819
+ },
820
+ "skills": {
821
+ "$ref": "#/$defs/SkillsOptions"
822
+ }
823
+ },
824
+ "required": [],
825
+ "minProperties": 1,
826
+ "additionalProperties": false
827
+ },
828
+ "ProfessionVariantPackageOptions": {
829
+ "description": "In some areas, the profession package grants a loose set of stats where the\nplayer must choose between different options for the profession package. The\nvariant may override or remove those options.",
830
+ "type": "object",
831
+ "properties": {
832
+ "skill_specialization": {
833
+ "oneOf": [
834
+ {
835
+ "type": "object",
836
+ "properties": {
837
+ "tag": {
838
+ "const": "Remove"
839
+ },
840
+ "remove": {
841
+ "type": "object",
842
+ "properties": {},
843
+ "required": [],
844
+ "additionalProperties": false
845
+ }
846
+ },
847
+ "required": [
848
+ "tag",
849
+ "remove"
850
+ ],
851
+ "additionalProperties": false
951
852
  },
952
- "rating": {
953
- "description": "The rating provided for the spell. It overrides the basic package's\nrating.",
954
- "type": "integer",
955
- "minimum": 0
853
+ {
854
+ "type": "object",
855
+ "properties": {
856
+ "tag": {
857
+ "const": "Override"
858
+ },
859
+ "override": {
860
+ "$ref": "#/$defs/SkillSpecializationOptions"
861
+ }
862
+ },
863
+ "required": [
864
+ "tag",
865
+ "override"
866
+ ],
867
+ "additionalProperties": false
956
868
  }
957
- },
958
- "required": [
959
- "tag",
960
- "id",
961
- "rating"
962
- ],
963
- "additionalProperties": false
869
+ ]
964
870
  },
965
- {
966
- "type": "object",
967
- "properties": {
968
- "tag": {
969
- "const": "Selection"
871
+ "languages_scripts": {
872
+ "oneOf": [
873
+ {
874
+ "type": "object",
875
+ "properties": {
876
+ "tag": {
877
+ "const": "Remove"
878
+ },
879
+ "remove": {
880
+ "type": "object",
881
+ "properties": {},
882
+ "required": [],
883
+ "additionalProperties": false
884
+ }
885
+ },
886
+ "required": [
887
+ "tag",
888
+ "remove"
889
+ ],
890
+ "additionalProperties": false
970
891
  },
971
- "id": {
972
- "description": "The identifiers of the spells to choose from to provide the rating for.",
973
- "type": "array",
974
- "items": {
975
- "$ref": "#/definitions/SpellIdentifier"
892
+ {
893
+ "type": "object",
894
+ "properties": {
895
+ "tag": {
896
+ "const": "Override"
897
+ },
898
+ "override": {
899
+ "$ref": "#/$defs/LanguagesScriptsOptions"
900
+ }
901
+ },
902
+ "required": [
903
+ "tag",
904
+ "override"
905
+ ],
906
+ "additionalProperties": false
907
+ }
908
+ ]
909
+ },
910
+ "combat_techniques": {
911
+ "oneOf": [
912
+ {
913
+ "type": "object",
914
+ "properties": {
915
+ "tag": {
916
+ "const": "Remove"
917
+ },
918
+ "remove": {
919
+ "type": "object",
920
+ "properties": {},
921
+ "required": [],
922
+ "additionalProperties": false
923
+ }
976
924
  },
977
- "minItems": 2
925
+ "required": [
926
+ "tag",
927
+ "remove"
928
+ ],
929
+ "additionalProperties": false
978
930
  },
979
- "rating": {
980
- "description": "The rating provided for the selected spell. It overrides the basic\npackage's rating.",
981
- "type": "integer",
982
- "minimum": 0
931
+ {
932
+ "type": "object",
933
+ "properties": {
934
+ "tag": {
935
+ "const": "Override"
936
+ },
937
+ "override": {
938
+ "$ref": "#/$defs/CombatTechniquesOptions"
939
+ }
940
+ },
941
+ "required": [
942
+ "tag",
943
+ "override"
944
+ ],
945
+ "additionalProperties": false
983
946
  }
984
- },
985
- "required": [
986
- "tag",
987
- "id",
988
- "rating"
989
- ],
990
- "additionalProperties": false
991
- }
992
- ]
993
- },
994
- "SpellIdentifier": {
995
- "oneOf": [
996
- {
997
- "type": "object",
998
- "properties": {
999
- "tag": {
1000
- "const": "Spellwork"
947
+ ]
948
+ },
949
+ "cantrips": {
950
+ "oneOf": [
951
+ {
952
+ "type": "object",
953
+ "properties": {
954
+ "tag": {
955
+ "const": "Remove"
956
+ },
957
+ "remove": {
958
+ "type": "object",
959
+ "properties": {},
960
+ "required": [],
961
+ "additionalProperties": false
962
+ }
963
+ },
964
+ "required": [
965
+ "tag",
966
+ "remove"
967
+ ],
968
+ "additionalProperties": false
1001
969
  },
1002
- "id": {
1003
- "description": "The identifier of the spell to provide the rating for.",
1004
- "$ref": "./_Identifier.schema.json#/definitions/SpellworkIdentifier"
970
+ {
971
+ "type": "object",
972
+ "properties": {
973
+ "tag": {
974
+ "const": "Override"
975
+ },
976
+ "override": {
977
+ "$ref": "#/$defs/CantripsOptions"
978
+ }
979
+ },
980
+ "required": [
981
+ "tag",
982
+ "override"
983
+ ],
984
+ "additionalProperties": false
985
+ }
986
+ ]
987
+ },
988
+ "curses": {
989
+ "oneOf": [
990
+ {
991
+ "type": "object",
992
+ "properties": {
993
+ "tag": {
994
+ "const": "Remove"
995
+ },
996
+ "remove": {
997
+ "type": "object",
998
+ "properties": {},
999
+ "required": [],
1000
+ "additionalProperties": false
1001
+ }
1002
+ },
1003
+ "required": [
1004
+ "tag",
1005
+ "remove"
1006
+ ],
1007
+ "additionalProperties": false
1005
1008
  },
1006
- "tradition": {
1007
- "description": "If the spell is not part of the magical tradition required by the\npackage, this references the magical tradition it is part of. It can also\nbe used to define the target magical tradition of a spell if multiple\nmagical traditions are required and the spell is available to multiple\nof them.",
1009
+ {
1008
1010
  "type": "object",
1009
1011
  "properties": {
1010
- "id": {
1011
- "description": "The unfamiliar or ambiguous magical tradition's identifier.",
1012
- "type": "number"
1012
+ "tag": {
1013
+ "const": "Override"
1014
+ },
1015
+ "override": {
1016
+ "$ref": "#/$defs/CursesOptions"
1013
1017
  }
1014
1018
  },
1015
1019
  "required": [
1016
- "id"
1020
+ "tag",
1021
+ "override"
1017
1022
  ],
1018
1023
  "additionalProperties": false
1019
1024
  }
1020
- },
1021
- "required": [
1022
- "tag",
1023
- "id"
1024
- ],
1025
- "additionalProperties": false
1026
- },
1027
- {
1028
- "type": "object",
1029
- "properties": {
1030
- "tag": {
1031
- "const": "MagicalAction"
1032
- },
1033
- "id": {
1034
- "description": "The identifier of the magical action to provide the rating for.",
1035
- "$ref": "./_Identifier.schema.json#/definitions/MagicalActionIdentifier"
1036
- }
1037
- },
1038
- "required": [
1039
- "tag",
1040
- "id"
1041
- ],
1042
- "additionalProperties": false
1043
- }
1044
- ]
1045
- },
1046
- "LiturgicalChant": {
1047
- "oneOf": [
1048
- {
1049
- "type": "object",
1050
- "properties": {
1051
- "tag": {
1052
- "const": "Fixed"
1053
- },
1054
- "id": {
1055
- "description": "The identifier of the liturgical chant to provide the rating for.",
1056
- "$ref": "./_Identifier.schema.json#/definitions/LiturgyIdentifier"
1057
- },
1058
- "rating": {
1059
- "description": "The rating provided for the liturgical chant.",
1060
- "type": "integer",
1061
- "minimum": 1
1062
- }
1063
- },
1064
- "required": [
1065
- "tag",
1066
- "id",
1067
- "rating"
1068
- ],
1069
- "additionalProperties": false
1025
+ ]
1070
1026
  },
1071
- {
1072
- "type": "object",
1073
- "properties": {
1074
- "tag": {
1075
- "const": "Selection"
1076
- },
1077
- "id": {
1078
- "description": "The identifiers of the liturgical chants to choose from to provide the\nrating for.",
1079
- "type": "array",
1080
- "items": {
1081
- "$ref": "./_Identifier.schema.json#/definitions/LiturgyIdentifier"
1027
+ "terrain_knowledge": {
1028
+ "oneOf": [
1029
+ {
1030
+ "type": "object",
1031
+ "properties": {
1032
+ "tag": {
1033
+ "const": "Remove"
1034
+ },
1035
+ "remove": {
1036
+ "type": "object",
1037
+ "properties": {},
1038
+ "required": [],
1039
+ "additionalProperties": false
1040
+ }
1082
1041
  },
1083
- "minItems": 2
1084
- },
1085
- "rating": {
1086
- "description": "The rating provided for the selected liturgical chant.",
1087
- "type": "integer",
1088
- "minimum": 1
1089
- }
1090
- },
1091
- "required": [
1092
- "tag",
1093
- "id",
1094
- "rating"
1095
- ],
1096
- "additionalProperties": false
1097
- }
1098
- ]
1099
- },
1100
- "VariantLiturgicalChant": {
1101
- "oneOf": [
1102
- {
1103
- "type": "object",
1104
- "properties": {
1105
- "tag": {
1106
- "const": "Fixed"
1107
- },
1108
- "id": {
1109
- "description": "The identifier of the liturgical chant to provide the rating for.",
1110
- "$ref": "./_Identifier.schema.json#/definitions/LiturgyIdentifier"
1042
+ "required": [
1043
+ "tag",
1044
+ "remove"
1045
+ ],
1046
+ "additionalProperties": false
1111
1047
  },
1112
- "rating": {
1113
- "description": "The rating provided for the liturgical chant. It overrides the basic\npackage's rating.",
1114
- "type": "integer",
1115
- "minimum": 0
1048
+ {
1049
+ "type": "object",
1050
+ "properties": {
1051
+ "tag": {
1052
+ "const": "Override"
1053
+ },
1054
+ "override": {
1055
+ "$ref": "#/$defs/TerrainKnowledgeOptions"
1056
+ }
1057
+ },
1058
+ "required": [
1059
+ "tag",
1060
+ "override"
1061
+ ],
1062
+ "additionalProperties": false
1116
1063
  }
1117
- },
1118
- "required": [
1119
- "tag",
1120
- "id",
1121
- "rating"
1122
- ],
1123
- "additionalProperties": false
1064
+ ]
1124
1065
  },
1125
- {
1126
- "type": "object",
1127
- "properties": {
1128
- "tag": {
1129
- "const": "Selection"
1130
- },
1131
- "id": {
1132
- "description": "The identifiers of the liturgical chants to choose from to provide the\nrating for.",
1133
- "type": "array",
1134
- "items": {
1135
- "$ref": "./_Identifier.schema.json#/definitions/LiturgyIdentifier"
1066
+ "skills": {
1067
+ "oneOf": [
1068
+ {
1069
+ "type": "object",
1070
+ "properties": {
1071
+ "tag": {
1072
+ "const": "Remove"
1073
+ },
1074
+ "remove": {
1075
+ "type": "object",
1076
+ "properties": {},
1077
+ "required": [],
1078
+ "additionalProperties": false
1079
+ }
1136
1080
  },
1137
- "minItems": 2
1081
+ "required": [
1082
+ "tag",
1083
+ "remove"
1084
+ ],
1085
+ "additionalProperties": false
1138
1086
  },
1139
- "rating": {
1140
- "description": "The rating provided for the selected liturgical chant. It overrides the\nbasic package's rating.",
1141
- "type": "integer",
1142
- "minimum": 0
1087
+ {
1088
+ "type": "object",
1089
+ "properties": {
1090
+ "tag": {
1091
+ "const": "Override"
1092
+ },
1093
+ "override": {
1094
+ "$ref": "#/$defs/SkillsOptions"
1095
+ }
1096
+ },
1097
+ "required": [
1098
+ "tag",
1099
+ "override"
1100
+ ],
1101
+ "additionalProperties": false
1143
1102
  }
1144
- },
1145
- "required": [
1146
- "tag",
1147
- "id",
1148
- "rating"
1149
- ],
1150
- "additionalProperties": false
1103
+ ]
1151
1104
  }
1152
- ]
1105
+ },
1106
+ "required": [],
1107
+ "minProperties": 1,
1108
+ "additionalProperties": false
1153
1109
  },
1154
1110
  "SkillSpecializationOptions": {
1155
1111
  "description": "Select an application from a skill or from one of a list of skills where you\nget a skill specialization for. You can also specify a skill groups from\nwhich you can choose a skill.",
@@ -1160,47 +1116,13 @@
1160
1116
  "tag": {
1161
1117
  "const": "Single"
1162
1118
  },
1163
- "id": {
1164
- "description": "The referenced skill's identifier.",
1165
- "type": "integer",
1166
- "minimum": 1
1167
- }
1168
- },
1169
- "required": [
1170
- "tag",
1171
- "id"
1172
- ],
1173
- "additionalProperties": false
1174
- },
1175
- {
1176
- "type": "object",
1177
- "properties": {
1178
- "tag": {
1179
- "const": "Selection"
1180
- },
1181
- "options": {
1182
- "description": "Possible skills to get a skill specialization for.",
1183
- "type": "array",
1184
- "items": {
1185
- "type": "object",
1186
- "properties": {
1187
- "id": {
1188
- "description": "The referenced skill's identifier.",
1189
- "type": "integer",
1190
- "minimum": 1
1191
- }
1192
- },
1193
- "required": [
1194
- "id"
1195
- ],
1196
- "additionalProperties": false
1197
- },
1198
- "minItems": 2
1119
+ "single": {
1120
+ "$ref": "#/$defs/SingleSkillSpecializationOption"
1199
1121
  }
1200
1122
  },
1201
1123
  "required": [
1202
1124
  "tag",
1203
- "options"
1125
+ "single"
1204
1126
  ],
1205
1127
  "additionalProperties": false
1206
1128
  },
@@ -1210,21 +1132,39 @@
1210
1132
  "tag": {
1211
1133
  "const": "Group"
1212
1134
  },
1213
- "id": {
1214
- "description": "The referenced skill group's identifier.",
1215
- "type": "integer",
1216
- "maximum": 5,
1217
- "minimum": 1
1135
+ "group": {
1136
+ "$ref": "#/$defs/SkillGroupSkillSpecializationOption"
1218
1137
  }
1219
1138
  },
1220
1139
  "required": [
1221
1140
  "tag",
1222
- "id"
1141
+ "group"
1223
1142
  ],
1224
1143
  "additionalProperties": false
1225
1144
  }
1226
1145
  ]
1227
1146
  },
1147
+ "SingleSkillSpecializationOption": {
1148
+ "type": "object",
1149
+ "properties": {
1150
+ "options": {
1151
+ "description": "Possible skills to get a skill specialization for.",
1152
+ "type": "array",
1153
+ "items": {
1154
+ "$ref": "./_SimpleReferences.schema.json#/$defs/SkillReference"
1155
+ },
1156
+ "minItems": 1,
1157
+ "uniqueItems": true
1158
+ }
1159
+ },
1160
+ "required": [
1161
+ "options"
1162
+ ],
1163
+ "additionalProperties": false
1164
+ },
1165
+ "SkillGroupSkillSpecializationOption": {
1166
+ "$ref": "./_SimpleReferences.schema.json#/$defs/SkillGroupReference"
1167
+ },
1228
1168
  "LanguagesScriptsOptions": {
1229
1169
  "description": "Buy languages and scripts for a specific amount of AP.",
1230
1170
  "type": "object",
@@ -1249,47 +1189,21 @@
1249
1189
  "description": "Specify the number of combat techniques that can be selected so that they\nget increased to a specific CtR. There can be multiple selections with\ndifferent CtRs.",
1250
1190
  "type": "array",
1251
1191
  "items": {
1252
- "type": "object",
1253
- "properties": {
1254
- "number": {
1255
- "description": "The number of selectable combat techniques.",
1256
- "type": "integer",
1257
- "minimum": 1
1258
- },
1259
- "rating": {
1260
- "description": "The rating provided for the selected combat technique(s).",
1261
- "type": "integer",
1262
- "minimum": 7
1263
- }
1264
- },
1265
- "required": [
1266
- "number",
1267
- "rating"
1268
- ],
1269
- "additionalProperties": false
1192
+ "$ref": "#/$defs/RatingForCombatTechniquesNumber"
1270
1193
  },
1271
1194
  "minItems": 1
1272
1195
  },
1273
1196
  "rest_rating": {
1274
- "description": "Define if after the fixed selections the remaining unselected combat\ntechniques will receive a certain rating as well.",
1197
+ "description": "Define if after the fixed selections the remaining unselected combat\ntechniques will receive a certain rating bonus as well.",
1275
1198
  "type": "integer",
1276
- "minimum": 7
1199
+ "maximum": 6,
1200
+ "minimum": 1
1277
1201
  },
1278
1202
  "options": {
1279
1203
  "description": "The list of combat techniques to choose from.",
1280
1204
  "type": "array",
1281
1205
  "items": {
1282
- "type": "object",
1283
- "properties": {
1284
- "id": {
1285
- "description": "The combat technique's identifier.",
1286
- "$ref": "./_Identifier.schema.json#/definitions/CombatTechniqueIdentifier"
1287
- }
1288
- },
1289
- "required": [
1290
- "id"
1291
- ],
1292
- "additionalProperties": false
1206
+ "$ref": "./_SimpleReferences.schema.json#/$defs/CombatTechniqueReference"
1293
1207
  },
1294
1208
  "minItems": 2
1295
1209
  }
@@ -1300,6 +1214,27 @@
1300
1214
  ],
1301
1215
  "additionalProperties": false
1302
1216
  },
1217
+ "RatingForCombatTechniquesNumber": {
1218
+ "type": "object",
1219
+ "properties": {
1220
+ "number": {
1221
+ "description": "The number of selectable combat techniques.",
1222
+ "type": "integer",
1223
+ "minimum": 1
1224
+ },
1225
+ "rating": {
1226
+ "description": "The rating bonus provided for the selected combat technique(s).\n\n**Note:** This is a rating *bonus*, so it will be *added* to the default\nvalue of 6.",
1227
+ "type": "integer",
1228
+ "maximum": 6,
1229
+ "minimum": 1
1230
+ }
1231
+ },
1232
+ "required": [
1233
+ "number",
1234
+ "rating"
1235
+ ],
1236
+ "additionalProperties": false
1237
+ },
1303
1238
  "CantripsOptions": {
1304
1239
  "description": "Select one or more cantrips you receive.",
1305
1240
  "type": "object",
@@ -1313,18 +1248,7 @@
1313
1248
  "description": "The list of cantrips to choose from.",
1314
1249
  "type": "array",
1315
1250
  "items": {
1316
- "type": "object",
1317
- "properties": {
1318
- "id": {
1319
- "description": "The cantrip's identifier.",
1320
- "type": "integer",
1321
- "minimum": 1
1322
- }
1323
- },
1324
- "required": [
1325
- "id"
1326
- ],
1327
- "additionalProperties": false
1251
+ "$ref": "./_SimpleReferences.schema.json#/$defs/CantripReference"
1328
1252
  },
1329
1253
  "minItems": 2
1330
1254
  }
@@ -1359,19 +1283,7 @@
1359
1283
  "description": "The list of possible terrain knowledges.",
1360
1284
  "type": "array",
1361
1285
  "items": {
1362
- "type": "object",
1363
- "properties": {
1364
- "id": {
1365
- "description": "The terrain knowledge option's identifier.",
1366
- "type": "integer",
1367
- "maximum": 10,
1368
- "minimum": 1
1369
- }
1370
- },
1371
- "required": [
1372
- "id"
1373
- ],
1374
- "additionalProperties": false
1286
+ "$ref": "#/$defs/TerrainKnowledgeOptionReference"
1375
1287
  },
1376
1288
  "minItems": 2
1377
1289
  }
@@ -1381,15 +1293,28 @@
1381
1293
  ],
1382
1294
  "additionalProperties": false
1383
1295
  },
1296
+ "TerrainKnowledgeOptionReference": {
1297
+ "type": "object",
1298
+ "properties": {
1299
+ "id": {
1300
+ "description": "The terrain knowledge option's identifier.",
1301
+ "type": "integer",
1302
+ "maximum": 10,
1303
+ "minimum": 1
1304
+ }
1305
+ },
1306
+ "required": [
1307
+ "id"
1308
+ ],
1309
+ "additionalProperties": false
1310
+ },
1384
1311
  "SkillsOptions": {
1385
1312
  "description": "Buy skills for a specific amount of AP.",
1386
1313
  "type": "object",
1387
1314
  "properties": {
1388
- "group_id": {
1315
+ "group": {
1389
1316
  "description": "If specified, you may only choose from skills of the specified group.",
1390
- "type": "integer",
1391
- "maximum": 1,
1392
- "minimum": 1
1317
+ "$ref": "./_SimpleReferences.schema.json#/$defs/SkillGroupReference"
1393
1318
  },
1394
1319
  "ap_value": {
1395
1320
  "description": "The AP value you can buy skills for.",
@@ -1402,26 +1327,26 @@
1402
1327
  ],
1403
1328
  "additionalProperties": false
1404
1329
  },
1405
- "Name": {
1330
+ "ProfessionName": {
1406
1331
  "description": "The name of the profession that may have sex-specific names.",
1407
1332
  "oneOf": [
1408
1333
  {
1409
- "$ref": "#/definitions/NonEmptyString"
1334
+ "$ref": "./_NonEmptyString.schema.json#/$defs/NonEmptyString"
1410
1335
  },
1411
1336
  {
1412
1337
  "type": "object",
1413
1338
  "properties": {
1414
1339
  "default": {
1415
1340
  "description": "The name from the source publication.",
1416
- "$ref": "#/definitions/NonEmptyString"
1341
+ "$ref": "./_NonEmptyString.schema.json#/$defs/NonEmptyString"
1417
1342
  },
1418
1343
  "male": {
1419
1344
  "description": "The male name.",
1420
- "$ref": "#/definitions/NonEmptyString"
1345
+ "$ref": "./_NonEmptyString.schema.json#/$defs/NonEmptyString"
1421
1346
  },
1422
1347
  "female": {
1423
1348
  "description": "The female name.",
1424
- "$ref": "#/definitions/NonEmptyString"
1349
+ "$ref": "./_NonEmptyString.schema.json#/$defs/NonEmptyString"
1425
1350
  }
1426
1351
  },
1427
1352
  "required": [
@@ -1432,91 +1357,6 @@
1432
1357
  "additionalProperties": false
1433
1358
  }
1434
1359
  ]
1435
- },
1436
- "Group": {
1437
- "oneOf": [
1438
- {
1439
- "type": "object",
1440
- "properties": {
1441
- "tag": {
1442
- "const": "Mundane"
1443
- },
1444
- "sub": {
1445
- "oneOf": [
1446
- {
1447
- "type": "object",
1448
- "properties": {
1449
- "tag": {
1450
- "const": "Profane"
1451
- }
1452
- },
1453
- "required": [
1454
- "tag"
1455
- ],
1456
- "additionalProperties": false
1457
- },
1458
- {
1459
- "type": "object",
1460
- "properties": {
1461
- "tag": {
1462
- "const": "Fighter"
1463
- }
1464
- },
1465
- "required": [
1466
- "tag"
1467
- ],
1468
- "additionalProperties": false
1469
- },
1470
- {
1471
- "type": "object",
1472
- "properties": {
1473
- "tag": {
1474
- "const": "Religious"
1475
- }
1476
- },
1477
- "required": [
1478
- "tag"
1479
- ],
1480
- "additionalProperties": false
1481
- }
1482
- ]
1483
- }
1484
- },
1485
- "required": [
1486
- "tag",
1487
- "sub"
1488
- ],
1489
- "additionalProperties": false
1490
- },
1491
- {
1492
- "type": "object",
1493
- "properties": {
1494
- "tag": {
1495
- "const": "Magical"
1496
- }
1497
- },
1498
- "required": [
1499
- "tag"
1500
- ],
1501
- "additionalProperties": false
1502
- },
1503
- {
1504
- "type": "object",
1505
- "properties": {
1506
- "tag": {
1507
- "const": "Blessed"
1508
- }
1509
- },
1510
- "required": [
1511
- "tag"
1512
- ],
1513
- "additionalProperties": false
1514
- }
1515
- ]
1516
- },
1517
- "NonEmptyString": {
1518
- "type": "string",
1519
- "minLength": 1
1520
1360
  }
1521
1361
  }
1522
1362
  }