optolith-database-schema 0.2.3 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (518) hide show
  1. package/CHANGELOG.md +73 -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 -94
  14. package/lib/types/Cantrip.d.ts +135 -148
  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 +643 -1221
  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 -1013
  67. package/lib/types/_ActivatableSkill.js +1 -31
  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 +8 -12
  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 +21 -25
  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 -163
  297. package/schema/Cantrip.schema.json +353 -271
  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 +1609 -2258
  339. package/schema/_ActivatableSelectOptionCategory.schema.json +1172 -0
  340. package/schema/_ActivatableSkill.schema.json +96 -1679
  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 +953 -765
  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 -225
  448. package/schema/specialAbility/BrawlingSpecialAbility.schema.json +35 -32
  449. package/schema/specialAbility/CeremonialItemSpecialAbility.schema.json +36 -33
  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 +47 -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,7 +1,7 @@
1
1
  {
2
- "$schema": "http://json-schema.org/draft-07/schema",
2
+ "$schema": "https://json-schema.org/draft/2019-09/schema",
3
3
  "$id": "/_Activatable.schema.json",
4
- "definitions": {
4
+ "$defs": {
5
5
  "Id": {
6
6
  "description": "The activatable entry's identifier. An unique, increasing integer.",
7
7
  "type": "integer",
@@ -33,13 +33,13 @@
33
33
  "properties": {
34
34
  "derived": {
35
35
  "description": "An entry category with optional further configuration. All available\nentries from the specified categories will be included as separate select\noptions. You can also specify a set of groups that should only be\nincluded. Groups not mentioned will be excluded then.",
36
- "$ref": "#/definitions/CategoryOption"
36
+ "$ref": "./_ActivatableSelectOptionCategory.schema.json#/$defs/SelectOptionCategory"
37
37
  },
38
38
  "explicit": {
39
39
  "description": "A list of explicit select options. If the identifier has a specific type,\nits entry is the base of this select option, where values defined here\noverride values from the base. Define the `src` property if the options\nare not derived from the rules text of the advantage/disadvantage/special\nability but instead are listed in a separate block and/or on a separate\npage.",
40
40
  "type": "array",
41
41
  "items": {
42
- "$ref": "#/definitions/ExplicitOption"
42
+ "$ref": "#/$defs/ExplicitSelectOption"
43
43
  },
44
44
  "minItems": 1
45
45
  }
@@ -48,17 +48,21 @@
48
48
  "minProperties": 1,
49
49
  "additionalProperties": false
50
50
  },
51
- "CategoryOption": {
51
+ "ExplicitSelectOption": {
52
52
  "oneOf": [
53
53
  {
54
54
  "type": "object",
55
55
  "properties": {
56
56
  "tag": {
57
- "const": "Blessings"
57
+ "const": "General"
58
+ },
59
+ "general": {
60
+ "$ref": "#/$defs/ExplicitGeneralSelectOption"
58
61
  }
59
62
  },
60
63
  "required": [
61
- "tag"
64
+ "tag",
65
+ "general"
62
66
  ],
63
67
  "additionalProperties": false
64
68
  },
@@ -66,11 +70,15 @@
66
70
  "type": "object",
67
71
  "properties": {
68
72
  "tag": {
69
- "const": "Cantrips"
73
+ "const": "Skill"
74
+ },
75
+ "skill": {
76
+ "$ref": "#/$defs/ExplicitSkillSelectOption"
70
77
  }
71
78
  },
72
79
  "required": [
73
- "tag"
80
+ "tag",
81
+ "skill"
74
82
  ],
75
83
  "additionalProperties": false
76
84
  },
@@ -78,640 +86,281 @@
78
86
  "type": "object",
79
87
  "properties": {
80
88
  "tag": {
81
- "const": "TradeSecrets"
89
+ "const": "CombatTechnique"
90
+ },
91
+ "combat_technique": {
92
+ "$ref": "#/$defs/ExplicitCombatTechniqueSelectOption"
82
93
  }
83
94
  },
84
95
  "required": [
85
- "tag"
96
+ "tag",
97
+ "combat_technique"
86
98
  ],
87
99
  "additionalProperties": false
100
+ }
101
+ ]
102
+ },
103
+ "ExplicitGeneralSelectOption": {
104
+ "type": "object",
105
+ "properties": {
106
+ "id": {
107
+ "description": "The option's identifier. An unique, increasing integer.",
108
+ "type": "integer",
109
+ "minimum": 1
88
110
  },
89
- {
90
- "type": "object",
91
- "properties": {
92
- "tag": {
93
- "const": "Scripts"
94
- }
95
- },
96
- "required": [
97
- "tag"
98
- ],
99
- "additionalProperties": false
111
+ "profession_only": {
112
+ "description": "Sometimes, professions use specific text selections that are not\ncontained in described lists. This ensures you can use them for\nprofessions only. They are not going to be displayed as options to the\nuser.",
113
+ "const": true
100
114
  },
101
- {
102
- "type": "object",
103
- "properties": {
104
- "tag": {
105
- "const": "AnimalShapes"
106
- }
107
- },
108
- "required": [
109
- "tag"
110
- ],
111
- "additionalProperties": false
115
+ "skill_applications": {
116
+ "description": "Registers new applications, which get enabled once this entry is\nactivated with its respective select option. It specifies an entry-unique\nidentifier and the skill it belongs to. A translation can be left out if\nits name equals the name of the origin select option.",
117
+ "$ref": "#/$defs/SkillApplications"
112
118
  },
113
- {
114
- "type": "object",
115
- "properties": {
116
- "tag": {
117
- "const": "ArcaneBardTraditions"
118
- }
119
- },
120
- "required": [
121
- "tag"
122
- ],
123
- "additionalProperties": false
119
+ "skill_uses": {
120
+ "description": "Registers uses, which get enabled once this entry is activated with its\nrespective select option. It specifies an entry-unique identifier and the\nskill it belongs to. A translation can be left out if its name equals the\nname of the origin select option.",
121
+ "$ref": "#/$defs/SkillUses"
124
122
  },
125
- {
126
- "type": "object",
127
- "properties": {
128
- "tag": {
129
- "const": "ArcaneDancerTraditions"
130
- }
131
- },
132
- "required": [
133
- "tag"
134
- ],
135
- "additionalProperties": false
123
+ "prerequisites": {
124
+ "$ref": "./_Prerequisite.schema.json#/$defs/GeneralPrerequisites"
136
125
  },
137
- {
138
- "type": "object",
139
- "properties": {
140
- "tag": {
141
- "const": "SexPractices"
142
- }
143
- },
144
- "required": [
145
- "tag"
146
- ],
147
- "additionalProperties": false
126
+ "ap_value": {
127
+ "description": "Specific AP cost for the select option.",
128
+ "type": "integer",
129
+ "minimum": 1
148
130
  },
149
- {
150
- "type": "object",
151
- "properties": {
152
- "tag": {
153
- "const": "Races"
154
- }
155
- },
156
- "required": [
157
- "tag"
158
- ],
159
- "additionalProperties": false
131
+ "src": {
132
+ "$ref": "./source/_PublicationRef.schema.json#/$defs/PublicationRefs"
160
133
  },
161
- {
134
+ "translations": {
135
+ "description": "All translations for the entry, identified by IETF language tag (BCP47).",
162
136
  "type": "object",
163
- "properties": {
164
- "tag": {
165
- "const": "Cultures"
137
+ "patternProperties": {
138
+ "^[a-z]{2}-[A-Z]{2}$": {
139
+ "$ref": "#/$defs/ExplicitGeneralSelectOptionTranslation"
166
140
  }
167
141
  },
168
- "required": [
169
- "tag"
170
- ],
142
+ "minProperties": 1,
171
143
  "additionalProperties": false
144
+ }
145
+ },
146
+ "required": [
147
+ "id",
148
+ "translations"
149
+ ],
150
+ "additionalProperties": false
151
+ },
152
+ "ExplicitGeneralSelectOptionTranslation": {
153
+ "type": "object",
154
+ "properties": {
155
+ "name": {
156
+ "description": "The name of the select option.",
157
+ "type": "string",
158
+ "minLength": 1
159
+ },
160
+ "name_in_profession": {
161
+ "description": "The name of the select option when displayed in a generated\nprofession text.",
162
+ "type": "string",
163
+ "minLength": 1
164
+ },
165
+ "description": {
166
+ "description": "The description of the select option. Useful for Bad Habits, Trade\nSecrets and other entries where a description is available.",
167
+ "type": "string",
168
+ "minLength": 1
169
+ },
170
+ "errata": {
171
+ "$ref": "./source/_Erratum.schema.json#/$defs/Errata"
172
+ }
173
+ },
174
+ "required": [
175
+ "name"
176
+ ],
177
+ "additionalProperties": false
178
+ },
179
+ "ExplicitSkillSelectOption": {
180
+ "type": "object",
181
+ "properties": {
182
+ "id": {
183
+ "description": "The skill's identifier. An unique, increasing integer.",
184
+ "type": "integer",
185
+ "minimum": 1
172
186
  },
173
- {
174
- "type": "object",
175
- "properties": {
176
- "tag": {
177
- "const": "BlessedTraditions"
178
- },
179
- "require_principles": {
180
- "description": "Should the principles (code) of the tradition be required to select the\nrespective tradition?",
181
- "const": true
182
- }
187
+ "skill_applications": {
188
+ "description": "Registers new applications, which get enabled once this entry is\nactivated with its respective select option. It specifies an entry-unique\nidentifier and the skill it belongs to. A translation can be left out if\nits name equals the name of the origin select option.",
189
+ "type": "array",
190
+ "items": {
191
+ "$ref": "./_ActivatableSelectOptionCategory.schema.json#/$defs/SkillApplicationOrUse"
183
192
  },
184
- "required": [
185
- "tag"
186
- ],
187
- "additionalProperties": false
193
+ "minItems": 1
188
194
  },
189
- {
190
- "type": "object",
191
- "properties": {
192
- "tag": {
193
- "const": "Elements"
194
- },
195
- "specific": {
196
- "description": "Only include entries with the listed identifiers.",
197
- "type": "array",
198
- "items": {
199
- "type": "object",
200
- "properties": {
201
- "id": {
202
- "description": "The element's identifier.",
203
- "type": "integer",
204
- "maximum": 6,
205
- "minimum": 1
206
- }
207
- },
208
- "required": [
209
- "id"
210
- ],
211
- "additionalProperties": false
212
- },
213
- "minItems": 1,
214
- "uniqueItems": true
215
- }
195
+ "skill_uses": {
196
+ "description": "Registers uses, which get enabled once this entry is activated with its\nrespective select option. It specifies an entry-unique identifier and the\nskill it belongs to. A translation can be left out if its name equals the\nname of the origin select option.",
197
+ "type": "array",
198
+ "items": {
199
+ "$ref": "./_ActivatableSelectOptionCategory.schema.json#/$defs/SkillApplicationOrUse"
216
200
  },
217
- "required": [
218
- "tag"
219
- ],
220
- "additionalProperties": false
201
+ "minItems": 1
221
202
  },
222
- {
223
- "type": "object",
224
- "properties": {
225
- "tag": {
226
- "const": "Properties"
227
- },
228
- "require_knowledge": {
229
- "description": "Does each property require it's corresponding property knowledge?",
230
- "const": true
231
- },
232
- "require_minimum_spellworks_on": {
233
- "description": "Require a minimum number of spellworks of the respective property to be\non a minimum skill rating.",
234
- "type": "object",
235
- "properties": {
236
- "number": {
237
- "description": "The minimum number of spellworks that need to be on the defined minimum\nskill rating.",
238
- "type": "integer",
239
- "minimum": 1
240
- },
241
- "value": {
242
- "description": "The minimum skill rating the defined minimum number of spellworks need\nto be on.",
243
- "type": "integer",
244
- "minimum": 1
245
- }
246
- },
247
- "required": [
248
- "number",
249
- "value"
250
- ],
251
- "additionalProperties": false
252
- }
253
- },
254
- "required": [
255
- "tag"
256
- ],
257
- "additionalProperties": false
203
+ "prerequisites": {
204
+ "$ref": "./_Prerequisite.schema.json#/$defs/GeneralPrerequisites"
258
205
  },
259
- {
260
- "type": "object",
261
- "properties": {
262
- "tag": {
263
- "const": "Aspects"
264
- },
265
- "require_knowledge": {
266
- "description": "Does each aspect require it's corresponding aspect knowledge?",
267
- "const": true
268
- },
269
- "use_master_of_suffix_as_name": {
270
- "description": "The generated name should be the *Master of (Aspect)* suffix for this\naspect instead of the aspect's name. If an aspect does not provide a\nsuffix (such as the General aspect), it is automatically excluded from\nthe list.",
271
- "const": true
272
- },
273
- "require_minimum_liturgies_on": {
274
- "description": "Require a minimum number of liturgies of the respective aspect to be on a\nminimum skill rating.",
275
- "type": "object",
276
- "properties": {
277
- "number": {
278
- "description": "The minimum number of liturgies that need to be on the defined minimum\nskill rating.",
279
- "type": "integer",
280
- "minimum": 1
281
- },
282
- "value": {
283
- "description": "The minimum skill rating the defined minimum number of liturgies need\nto be on.",
284
- "type": "integer",
285
- "minimum": 1
286
- }
287
- },
288
- "required": [
289
- "number",
290
- "value"
291
- ],
292
- "additionalProperties": false
293
- }
294
- },
295
- "required": [
296
- "tag"
297
- ],
298
- "additionalProperties": false
206
+ "ap_value": {
207
+ "description": "Specific AP cost for the select option.",
208
+ "type": "integer",
209
+ "minimum": 1
299
210
  },
300
- {
211
+ "src": {
212
+ "$ref": "./source/_PublicationRef.schema.json#/$defs/PublicationRefs"
213
+ },
214
+ "translations": {
215
+ "description": "All translations for the entry, identified by IETF language tag (BCP47).",
301
216
  "type": "object",
302
- "properties": {
303
- "tag": {
304
- "const": "Diseases"
305
- },
306
- "use_half_level_as_ap_value": {
307
- "description": "Only convert half the disease level into the AP value.",
308
- "const": true
217
+ "patternProperties": {
218
+ "^[a-z]{2}-[A-Z]{2}$": {
219
+ "$ref": "#/$defs/ExplicitSkillSelectOptionTranslation"
309
220
  }
310
221
  },
311
- "required": [
312
- "tag"
313
- ],
222
+ "minProperties": 1,
314
223
  "additionalProperties": false
224
+ }
225
+ },
226
+ "required": [
227
+ "id"
228
+ ],
229
+ "additionalProperties": false
230
+ },
231
+ "ExplicitSkillSelectOptionTranslation": {
232
+ "type": "object",
233
+ "properties": {
234
+ "errata": {
235
+ "$ref": "./source/_Erratum.schema.json#/$defs/Errata"
236
+ }
237
+ },
238
+ "required": [],
239
+ "minProperties": 1,
240
+ "additionalProperties": false
241
+ },
242
+ "ExplicitCombatTechniqueSelectOption": {
243
+ "type": "object",
244
+ "properties": {
245
+ "id": {
246
+ "description": "The combat technique's identifier.",
247
+ "$ref": "./_Identifier.schema.json#/$defs/CombatTechniqueIdentifier"
315
248
  },
316
- {
249
+ "prerequisites": {
250
+ "$ref": "./_Prerequisite.schema.json#/$defs/GeneralPrerequisites"
251
+ },
252
+ "ap_value": {
253
+ "description": "Specific AP cost for the select option.",
254
+ "type": "integer",
255
+ "minimum": 1
256
+ },
257
+ "src": {
258
+ "$ref": "./source/_PublicationRef.schema.json#/$defs/PublicationRefs"
259
+ },
260
+ "translations": {
261
+ "description": "All translations for the entry, identified by IETF language tag (BCP47).",
317
262
  "type": "object",
318
- "properties": {
319
- "tag": {
320
- "const": "Poisons"
321
- },
322
- "use_half_level_as_ap_value": {
323
- "description": "Only convert half the poison level into the AP value.",
324
- "const": true
263
+ "patternProperties": {
264
+ "^[a-z]{2}-[A-Z]{2}$": {
265
+ "$ref": "#/$defs/ExplicitCombatTechniqueSelectOptionTranslation"
325
266
  }
326
267
  },
327
- "required": [
328
- "tag"
329
- ],
268
+ "minProperties": 1,
330
269
  "additionalProperties": false
270
+ }
271
+ },
272
+ "required": [
273
+ "id"
274
+ ],
275
+ "additionalProperties": false
276
+ },
277
+ "ExplicitCombatTechniqueSelectOptionTranslation": {
278
+ "type": "object",
279
+ "properties": {
280
+ "errata": {
281
+ "$ref": "./source/_Erratum.schema.json#/$defs/Errata"
282
+ }
283
+ },
284
+ "required": [],
285
+ "minProperties": 1,
286
+ "additionalProperties": false
287
+ },
288
+ "Rules": {
289
+ "description": "The rule text.",
290
+ "$ref": "./_NonEmptyString.schema.json#/$defs/NonEmptyMarkdown"
291
+ },
292
+ "Effect": {
293
+ "description": "The effect description.",
294
+ "$ref": "./_NonEmptyString.schema.json#/$defs/NonEmptyMarkdown"
295
+ },
296
+ "CombatSpecialAbilityUsageType": {
297
+ "description": "The definition of how the combat special ability can be used in combat.",
298
+ "enum": [
299
+ "Passive",
300
+ "BasicManeuver",
301
+ "SpecialManeuver"
302
+ ]
303
+ },
304
+ "CombatSpecialAbilityType": {
305
+ "description": "The definition of if the combat special ability can be used when armed or\nwhen unarmed.",
306
+ "enum": [
307
+ "Armed",
308
+ "Unarmed"
309
+ ]
310
+ },
311
+ "SkillApplications": {
312
+ "description": "Registers new skill applications, which get enabled once this entry is\nactivated. It specifies an entry-unique identifier and the skill it belongs\nto. A translation can be left out if its name equals the name of the origin\nactivatable entry.",
313
+ "type": "array",
314
+ "items": {
315
+ "$ref": "#/$defs/SkillApplication"
316
+ },
317
+ "minItems": 1
318
+ },
319
+ "SkillApplication": {
320
+ "type": "object",
321
+ "properties": {
322
+ "id": {
323
+ "description": "The application's identifier. An entry-unique, increasing integer.",
324
+ "type": "integer",
325
+ "minimum": 1
331
326
  },
332
- {
327
+ "skill": {
328
+ "description": "The skill(s) this application belongs to.",
329
+ "$ref": "#/$defs/SkillApplicationAssociatedSkill"
330
+ },
331
+ "translations": {
332
+ "description": "All translations for the entry, identified by IETF language tag (BCP47).",
333
333
  "type": "object",
334
- "properties": {
335
- "tag": {
336
- "const": "Languages"
337
- },
338
- "prerequisites": {
339
- "description": "Generate prerequisites for each entry of the category.",
340
- "type": "array",
341
- "items": {
342
- "$ref": "#/definitions/OptionOptionPrerequisite"
343
- },
344
- "minItems": 1
334
+ "patternProperties": {
335
+ "^[a-z]{2}-[A-Z]{2}$": {
336
+ "$ref": "#/$defs/SkillApplicationTranslation"
345
337
  }
346
338
  },
347
- "required": [
348
- "tag"
349
- ],
339
+ "minProperties": 1,
350
340
  "additionalProperties": false
351
- },
341
+ }
342
+ },
343
+ "required": [
344
+ "id",
345
+ "skill"
346
+ ],
347
+ "additionalProperties": false
348
+ },
349
+ "SkillApplicationAssociatedSkill": {
350
+ "oneOf": [
352
351
  {
353
352
  "type": "object",
354
353
  "properties": {
355
354
  "tag": {
356
- "const": "Skills"
357
- },
358
- "categories": {
359
- "description": "A list of skill categories.",
360
- "type": "array",
361
- "items": {
362
- "oneOf": [
363
- {
364
- "type": "object",
365
- "properties": {
366
- "tag": {
367
- "const": "Skills"
368
- },
369
- "groups": {
370
- "description": "Only include entries of the specified groups.",
371
- "type": "array",
372
- "items": {
373
- "type": "object",
374
- "properties": {
375
- "id": {
376
- "description": "The skill group's identifier.",
377
- "type": "integer",
378
- "maximum": 5,
379
- "minimum": 1
380
- }
381
- },
382
- "required": [
383
- "id"
384
- ],
385
- "additionalProperties": false
386
- },
387
- "minItems": 1
388
- },
389
- "specific": {
390
- "description": "Only include (`Intersection`) or exclude (`Difference`) specific\nskills.",
391
- "type": "object",
392
- "properties": {
393
- "operation": {
394
- "oneOf": [
395
- {
396
- "type": "object",
397
- "properties": {
398
- "tag": {
399
- "const": "Intersection"
400
- }
401
- },
402
- "required": [
403
- "tag"
404
- ],
405
- "additionalProperties": false
406
- },
407
- {
408
- "type": "object",
409
- "properties": {
410
- "tag": {
411
- "const": "Difference"
412
- }
413
- },
414
- "required": [
415
- "tag"
416
- ],
417
- "additionalProperties": false
418
- }
419
- ]
420
- },
421
- "list": {
422
- "description": "The list of specific skills.",
423
- "type": "array",
424
- "items": {
425
- "type": "object",
426
- "properties": {
427
- "id": {
428
- "description": "The skill's identifier.",
429
- "type": "integer",
430
- "maximum": 59,
431
- "minimum": 1
432
- }
433
- },
434
- "required": [
435
- "id"
436
- ],
437
- "additionalProperties": false
438
- },
439
- "minItems": 1,
440
- "uniqueItems": true
441
- }
442
- },
443
- "required": [
444
- "operation",
445
- "list"
446
- ],
447
- "additionalProperties": false
448
- },
449
- "skill_applications": {
450
- "description": "Registers new applications, which get enabled once this entry is\nactivated with its respective select option. It specifies an\nentry-unique identifier, the skill it belongs to is derived from the\nselect option automatically. A translation can be left out if its\nname equals the name of the origin entry.",
451
- "type": "array",
452
- "items": {
453
- "type": "object",
454
- "properties": {
455
- "id": {
456
- "description": "The application's identifier. An entry-unique, increasing integer.",
457
- "type": "integer",
458
- "minimum": 1
459
- },
460
- "translations": {
461
- "description": "All translations for the entry, identified by IETF language tag\n(BCP47).",
462
- "type": "object",
463
- "patternProperties": {
464
- "^[a-z]{2}-[A-Z]{2}$": {
465
- "type": "object",
466
- "properties": {
467
- "name": {
468
- "description": "The name of the application if different from the activatable\nentry's\nname.",
469
- "type": "string",
470
- "minLength": 1
471
- }
472
- },
473
- "required": [
474
- "name"
475
- ],
476
- "additionalProperties": false
477
- }
478
- },
479
- "minProperties": 1,
480
- "additionalProperties": false
481
- }
482
- },
483
- "required": [
484
- "id"
485
- ],
486
- "additionalProperties": false
487
- },
488
- "minItems": 1
489
- },
490
- "skill_uses": {
491
- "description": "Registers uses, which get enabled once this entry is activated with\nits respective select option. It specifies an entry-unique\nidentifier, the skill it belongs to is derived from the select option\nautomatically. A translation can be left out if its name equals the\nname of the origin entry.",
492
- "type": "array",
493
- "items": {
494
- "type": "object",
495
- "properties": {
496
- "id": {
497
- "description": "The use's identifier. An entry-unique, increasing integer.",
498
- "type": "integer",
499
- "minimum": 1
500
- },
501
- "translations": {
502
- "description": "All translations for the entry, identified by IETF language tag\n(BCP47).",
503
- "type": "object",
504
- "patternProperties": {
505
- "^[a-z]{2}-[A-Z]{2}$": {
506
- "type": "object",
507
- "properties": {
508
- "name": {
509
- "description": "The name of the use if different from the activatable entry's\nname.",
510
- "type": "string",
511
- "minLength": 1
512
- }
513
- },
514
- "required": [
515
- "name"
516
- ],
517
- "additionalProperties": false
518
- }
519
- },
520
- "minProperties": 1,
521
- "additionalProperties": false
522
- }
523
- },
524
- "required": [
525
- "id"
526
- ],
527
- "additionalProperties": false
528
- },
529
- "minItems": 1
530
- },
531
- "prerequisites": {
532
- "description": "Generate prerequisites for each entry of the category.",
533
- "type": "array",
534
- "items": {
535
- "oneOf": [
536
- {
537
- "$ref": "#/definitions/OptionSkillSelfPrerequisite"
538
- },
539
- {
540
- "$ref": "#/definitions/OptionOptionPrerequisite"
541
- }
542
- ]
543
- },
544
- "minItems": 1
545
- }
546
- },
547
- "required": [
548
- "tag"
549
- ],
550
- "additionalProperties": false
551
- },
552
- {
553
- "type": "object",
554
- "properties": {
555
- "tag": {
556
- "$ref": "#/definitions/SkillWithEnhancementsCategory"
557
- },
558
- "specific": {
559
- "description": "Only include (`Intersection`) or exclude (`Difference`) specific\nentries.",
560
- "type": "object",
561
- "properties": {
562
- "operation": {
563
- "oneOf": [
564
- {
565
- "type": "object",
566
- "properties": {
567
- "tag": {
568
- "const": "Intersection"
569
- }
570
- },
571
- "required": [
572
- "tag"
573
- ],
574
- "additionalProperties": false
575
- },
576
- {
577
- "type": "object",
578
- "properties": {
579
- "tag": {
580
- "const": "Difference"
581
- }
582
- },
583
- "required": [
584
- "tag"
585
- ],
586
- "additionalProperties": false
587
- }
588
- ]
589
- },
590
- "list": {
591
- "description": "The list of specific entries.",
592
- "type": "array",
593
- "items": {
594
- "type": "object",
595
- "properties": {
596
- "id": {
597
- "description": "The entry's identifier.",
598
- "type": "integer",
599
- "maximum": 59,
600
- "minimum": 1
601
- }
602
- },
603
- "required": [
604
- "id"
605
- ],
606
- "additionalProperties": false
607
- },
608
- "minItems": 1,
609
- "uniqueItems": true
610
- }
611
- },
612
- "required": [
613
- "operation",
614
- "list"
615
- ],
616
- "additionalProperties": false
617
- },
618
- "prerequisites": {
619
- "description": "Generate prerequisites for each entry of the category.",
620
- "type": "array",
621
- "items": {
622
- "oneOf": [
623
- {
624
- "$ref": "#/definitions/OptionSkillSelfPrerequisite"
625
- },
626
- {
627
- "$ref": "#/definitions/OptionOptionPrerequisite"
628
- }
629
- ]
630
- },
631
- "minItems": 1
632
- }
633
- },
634
- "required": [
635
- "tag"
636
- ],
637
- "additionalProperties": false
638
- }
639
- ]
640
- },
641
- "minItems": 1
642
- },
643
- "ap_value": {
644
- "description": "Generate AP values for each entry.",
645
- "oneOf": [
646
- {
647
- "type": "object",
648
- "properties": {
649
- "tag": {
650
- "description": "Derive the cost from the improvement cost of each entry.\n\nAP Value = Improvement Cost × `multiplier` + `offset`",
651
- "const": "DerivedFromImprovementCost"
652
- },
653
- "multiplier": {
654
- "description": "This number is multiplied with the improvement cost of the entry\n(A = 1 to D = 4).",
655
- "type": "integer",
656
- "minimum": 2
657
- },
658
- "offset": {
659
- "description": "This number is added to the maybe multiplied improvement cost of the\nentry.",
660
- "type": "integer"
661
- }
662
- },
663
- "required": [
664
- "tag"
665
- ],
666
- "additionalProperties": false
667
- },
668
- {
669
- "type": "object",
670
- "properties": {
671
- "tag": {
672
- "const": "Fixed"
673
- },
674
- "map": {
675
- "description": "A mapping of skill identifiers to their specific AP values.",
676
- "type": "array",
677
- "items": {
678
- "type": "object",
679
- "properties": {
680
- "id": {
681
- "$ref": "./_Identifier.schema.json#/definitions/SkillIdentifier"
682
- },
683
- "ap_value": {
684
- "description": "The AP value for the specified entry.",
685
- "type": "integer",
686
- "minimum": 1
687
- }
688
- },
689
- "required": [
690
- "id",
691
- "ap_value"
692
- ],
693
- "additionalProperties": false
694
- }
695
- },
696
- "default": {
697
- "description": "The default value of an entry. Used as a fallback if no value is\nfound in `list`.",
698
- "type": "integer",
699
- "minimum": 1
700
- }
701
- },
702
- "required": [
703
- "tag",
704
- "map",
705
- "default"
706
- ],
707
- "additionalProperties": false
708
- }
709
- ]
355
+ "const": "Single"
356
+ },
357
+ "single": {
358
+ "$ref": "./_SimpleReferences.schema.json#/$defs/SkillReference"
710
359
  }
711
360
  },
712
361
  "required": [
713
362
  "tag",
714
- "categories"
363
+ "single"
715
364
  ],
716
365
  "additionalProperties": false
717
366
  },
@@ -719,443 +368,108 @@
719
368
  "type": "object",
720
369
  "properties": {
721
370
  "tag": {
722
- "const": "CombatTechniques"
371
+ "const": "Multiple"
723
372
  },
724
- "categories": {
725
- "description": "A list of combat technique categories.",
726
- "type": "array",
727
- "items": {
728
- "type": "object",
729
- "properties": {
730
- "tag": {
731
- "$ref": "#/definitions/CombatTechniqueCategory"
732
- },
733
- "specific": {
734
- "description": "Only include (`Intersection`) or exclude (`Difference`) specific\nentries.",
735
- "type": "object",
736
- "properties": {
737
- "operation": {
738
- "oneOf": [
739
- {
740
- "type": "object",
741
- "properties": {
742
- "tag": {
743
- "const": "Intersection"
744
- }
745
- },
746
- "required": [
747
- "tag"
748
- ],
749
- "additionalProperties": false
750
- },
751
- {
752
- "type": "object",
753
- "properties": {
754
- "tag": {
755
- "const": "Difference"
756
- }
757
- },
758
- "required": [
759
- "tag"
760
- ],
761
- "additionalProperties": false
762
- }
763
- ]
764
- },
765
- "list": {
766
- "description": "The list of specific entries.",
767
- "type": "array",
768
- "items": {
769
- "type": "object",
770
- "properties": {
771
- "id": {
772
- "description": "The entry's identifier.",
773
- "type": "integer",
774
- "maximum": 59,
775
- "minimum": 1
776
- }
777
- },
778
- "required": [
779
- "id"
780
- ],
781
- "additionalProperties": false
782
- },
783
- "minItems": 1,
784
- "uniqueItems": true
785
- }
786
- },
787
- "required": [
788
- "operation",
789
- "list"
790
- ],
791
- "additionalProperties": false
792
- },
793
- "prerequisites": {
794
- "description": "Generate prerequisites for each entry of the category.",
795
- "type": "array",
796
- "items": {
797
- "oneOf": [
798
- {
799
- "$ref": "#/definitions/OptionSkillSelfPrerequisite"
800
- },
801
- {
802
- "$ref": "#/definitions/OptionOptionPrerequisite"
803
- }
804
- ]
805
- },
806
- "minItems": 1
807
- }
808
- },
809
- "required": [
810
- "tag"
811
- ],
812
- "additionalProperties": false
813
- },
814
- "minItems": 1
815
- },
816
- "ap_value": {
817
- "description": "Generate AP values for each entry.",
818
- "oneOf": [
819
- {
820
- "type": "object",
821
- "properties": {
822
- "tag": {
823
- "description": "Derive the cost from the improvement cost of each entry.\n\nAP Value = Improvement Cost × `multiplier` + `offset`",
824
- "const": "DerivedFromImprovementCost"
825
- },
826
- "multiplier": {
827
- "description": "This number is multiplied with the improvement cost of the entry\n(A = 1 to D = 4).",
828
- "type": "integer",
829
- "minimum": 2
830
- },
831
- "offset": {
832
- "description": "This number is added to the maybe multiplied improvement cost of the\nentry.",
833
- "type": "integer"
834
- }
835
- },
836
- "required": [
837
- "tag"
838
- ],
839
- "additionalProperties": false
840
- },
841
- {
842
- "type": "object",
843
- "properties": {
844
- "tag": {
845
- "const": "Fixed"
846
- },
847
- "map": {
848
- "description": "A mapping of skill identifiers to their specific AP values.",
849
- "type": "array",
850
- "items": {
851
- "type": "object",
852
- "properties": {
853
- "id": {
854
- "$ref": "./_Identifier.schema.json#/definitions/CombatTechniqueIdentifier"
855
- },
856
- "ap_value": {
857
- "description": "The AP value for the specified entry.",
858
- "type": "integer",
859
- "minimum": 1
860
- }
861
- },
862
- "required": [
863
- "id",
864
- "ap_value"
865
- ],
866
- "additionalProperties": false
867
- }
868
- },
869
- "default": {
870
- "description": "The default value of an entry. Used as a fallback if no value is\nfound in `list`.",
871
- "type": "integer",
872
- "minimum": 1
873
- }
874
- },
875
- "required": [
876
- "tag",
877
- "map",
878
- "default"
879
- ],
880
- "additionalProperties": false
881
- }
882
- ]
373
+ "multiple": {
374
+ "$ref": "#/$defs/SkillApplicationAssociatedSkills"
883
375
  }
884
376
  },
885
377
  "required": [
886
378
  "tag",
887
- "categories"
379
+ "multiple"
888
380
  ],
889
381
  "additionalProperties": false
890
382
  }
891
383
  ]
892
384
  },
893
- "SkillWithEnhancementsCategory": {
894
- "enum": [
895
- "Spells",
896
- "Rituals",
897
- "LiturgicalChants",
898
- "Ceremonies"
899
- ]
900
- },
901
- "CombatTechniqueCategory": {
902
- "enum": [
903
- "CloseCombatTechniques",
904
- "RangedCombatTechniques"
905
- ]
906
- },
907
- "OptionSkillSelfPrerequisite": {
385
+ "SkillApplicationAssociatedSkills": {
908
386
  "type": "object",
909
387
  "properties": {
910
- "tag": {
911
- "const": "Self"
388
+ "list": {
389
+ "description": "The skills this application belongs to.",
390
+ "type": "array",
391
+ "items": {
392
+ "$ref": "./_SimpleReferences.schema.json#/$defs/SkillReference"
393
+ },
394
+ "minItems": 2
912
395
  },
913
- "value": {
914
- "description": "The entry requires itself on a certain Skill Rating.",
396
+ "required_skill_rating": {
397
+ "description": "If an application applies to multiple skills, it may need to ensure the\nrespective skill is on a certain skill rating if the activatable entry\ncannot ensure this prerequisite.",
915
398
  "type": "integer",
916
399
  "minimum": 1
917
400
  }
918
401
  },
919
402
  "required": [
920
- "tag",
921
- "value"
403
+ "list"
922
404
  ],
923
405
  "additionalProperties": false
924
406
  },
925
- "OptionOptionPrerequisite": {
926
- "description": "The entry requires or prohibits itself as a select option of another entry.",
407
+ "SkillApplicationTranslation": {
408
+ "type": "object",
409
+ "properties": {
410
+ "name": {
411
+ "description": "The name of the application if different from the activatable entry's name.",
412
+ "$ref": "./_NonEmptyString.schema.json#/$defs/NonEmptyString"
413
+ }
414
+ },
415
+ "required": [
416
+ "name"
417
+ ],
418
+ "additionalProperties": false
419
+ },
420
+ "SkillUses": {
421
+ "description": "Registers uses, which get enabled once this entry is activated. It specifies\nan entry-unique identifier and the skill it belongs to. A translation can be\nleft out if its name equals the name of the origin activatable entry.",
422
+ "type": "array",
423
+ "items": {
424
+ "$ref": "#/$defs/SkillUse"
425
+ },
426
+ "minItems": 1
427
+ },
428
+ "SkillUse": {
927
429
  "type": "object",
928
430
  "properties": {
929
- "tag": {
930
- "const": "SelectOption"
931
- },
932
431
  "id": {
933
- "description": "The target entry's identifier.",
934
- "$ref": "./_Identifier.schema.json#/definitions/ActivatableIdentifier"
432
+ "description": "The use's identifier. An entry-unique, increasing integer.",
433
+ "type": "integer",
434
+ "minimum": 1
935
435
  },
936
- "active": {
937
- "description": "Is the select option required (`true`) or prohibited (`false`)?",
938
- "type": "boolean"
436
+ "skill": {
437
+ "description": "The skill(s) this use belongs to.",
438
+ "$ref": "#/$defs/SkillUseAssociatedSkill"
939
439
  },
940
- "level": {
941
- "description": "The required level, if any.",
942
- "type": "integer",
943
- "minimum": 2
440
+ "translations": {
441
+ "description": "All translations for the entry, identified by IETF language tag (BCP47).",
442
+ "type": "object",
443
+ "patternProperties": {
444
+ "^[a-z]{2}-[A-Z]{2}$": {
445
+ "$ref": "#/$defs/SkillUseTranslation"
446
+ }
447
+ },
448
+ "minProperties": 1,
449
+ "additionalProperties": false
944
450
  }
945
451
  },
946
452
  "required": [
947
- "tag",
948
453
  "id",
949
- "active"
454
+ "skill"
950
455
  ],
951
456
  "additionalProperties": false
952
457
  },
953
- "ExplicitOption": {
458
+ "SkillUseAssociatedSkill": {
954
459
  "oneOf": [
955
460
  {
956
- "type": "object",
957
- "properties": {
958
- "tag": {
959
- "const": "General"
960
- },
961
- "id": {
962
- "description": "The option's identifier. An unique, increasing integer.",
963
- "type": "integer",
964
- "minimum": 1
965
- },
966
- "profession_only": {
967
- "description": "Sometimes, professions use specific text selections that are not\ncontained in described lists. This ensures you can use them for\nprofessions only. They are not going to be displayed as options to the\nuser.",
968
- "const": true
969
- },
970
- "skill_applications": {
971
- "description": "Registers new applications, which get enabled once this entry is\nactivated with its respective select option. It specifies an entry-unique\nidentifier and the skill it belongs to. A translation can be left out if\nits name equals the name of the origin select option.",
972
- "$ref": "#/definitions/SkillApplications"
973
- },
974
- "skill_uses": {
975
- "description": "Registers uses, which get enabled once this entry is activated with its\nrespective select option. It specifies an entry-unique identifier and the\nskill it belongs to. A translation can be left out if its name equals the\nname of the origin select option.",
976
- "$ref": "#/definitions/SkillUses"
977
- },
978
- "prerequisites": {
979
- "$ref": "./_Prerequisite.schema.json#/definitions/GeneralPrerequisites"
980
- },
981
- "ap_value": {
982
- "description": "Specific AP cost for the select option.",
983
- "type": "integer",
984
- "minimum": 1
985
- },
986
- "src": {
987
- "$ref": "./source/_PublicationRef.schema.json#/definitions/PublicationRefs"
988
- },
989
- "translations": {
990
- "description": "All translations for the entry, identified by IETF language tag (BCP47).",
991
- "type": "object",
992
- "patternProperties": {
993
- "^[a-z]{2}-[A-Z]{2}$": {
994
- "type": "object",
995
- "properties": {
996
- "name": {
997
- "description": "The name of the select option.",
998
- "type": "string",
999
- "minLength": 1
1000
- },
1001
- "name_in_profession": {
1002
- "description": "The name of the select option when displayed in a generated\nprofession text.",
1003
- "type": "string",
1004
- "minLength": 1
1005
- },
1006
- "description": {
1007
- "description": "The description of the select option. Useful for Bad Habits, Trade\nSecrets and other entries where a description is available.",
1008
- "type": "string",
1009
- "minLength": 1
1010
- },
1011
- "errata": {
1012
- "$ref": "./source/_Erratum.schema.json#/definitions/Errata"
1013
- }
1014
- },
1015
- "required": [
1016
- "name"
1017
- ],
1018
- "additionalProperties": false
1019
- }
1020
- },
1021
- "minProperties": 1,
1022
- "additionalProperties": false
1023
- }
1024
- },
1025
- "required": [
1026
- "tag",
1027
- "id",
1028
- "translations"
1029
- ],
1030
- "additionalProperties": false
1031
- },
1032
- {
1033
- "type": "object",
1034
- "properties": {
1035
- "tag": {
1036
- "const": "Skill"
1037
- },
1038
- "id": {
1039
- "description": "The skill's identifier. An unique, increasing integer.",
1040
- "type": "integer",
1041
- "minimum": 1
1042
- },
1043
- "skill_applications": {
1044
- "description": "Registers new applications, which get enabled once this entry is\nactivated with its respective select option. It specifies an entry-unique\nidentifier and the skill it belongs to. A translation can be left out if\nits name equals the name of the origin select option.",
1045
- "type": "array",
1046
- "items": {
1047
- "type": "object",
1048
- "properties": {
1049
- "id": {
1050
- "description": "The application's identifier. An entry-unique, increasing integer.",
1051
- "type": "integer",
1052
- "minimum": 1
1053
- },
1054
- "translations": {
1055
- "description": "All translations for the entry, identified by IETF language tag (BCP47).",
1056
- "type": "object",
1057
- "patternProperties": {
1058
- "^[a-z]{2}-[A-Z]{2}$": {
1059
- "type": "object",
1060
- "properties": {
1061
- "name": {
1062
- "description": "The name of the application if different from the activatable entry's\nname.",
1063
- "type": "string",
1064
- "minLength": 1
1065
- }
1066
- },
1067
- "required": [
1068
- "name"
1069
- ],
1070
- "additionalProperties": false
1071
- }
1072
- },
1073
- "minProperties": 1,
1074
- "additionalProperties": false
1075
- }
1076
- },
1077
- "required": [
1078
- "id"
1079
- ],
1080
- "additionalProperties": false
1081
- },
1082
- "minItems": 1
1083
- },
1084
- "skill_uses": {
1085
- "description": "Registers uses, which get enabled once this entry is activated with its\nrespective select option. It specifies an entry-unique identifier and the\nskill it belongs to. A translation can be left out if its name equals the\nname of the origin select option.",
1086
- "type": "array",
1087
- "items": {
1088
- "type": "object",
1089
- "properties": {
1090
- "id": {
1091
- "description": "The use's identifier. An entry-unique, increasing integer.",
1092
- "type": "integer",
1093
- "minimum": 1
1094
- },
1095
- "translations": {
1096
- "description": "All translations for the entry, identified by IETF language tag (BCP47).",
1097
- "type": "object",
1098
- "patternProperties": {
1099
- "^[a-z]{2}-[A-Z]{2}$": {
1100
- "type": "object",
1101
- "properties": {
1102
- "name": {
1103
- "description": "The name of the use if different from the activatable entry's name.",
1104
- "type": "string",
1105
- "minLength": 1
1106
- }
1107
- },
1108
- "required": [
1109
- "name"
1110
- ],
1111
- "additionalProperties": false
1112
- }
1113
- },
1114
- "minProperties": 1,
1115
- "additionalProperties": false
1116
- }
1117
- },
1118
- "required": [
1119
- "id"
1120
- ],
1121
- "additionalProperties": false
1122
- },
1123
- "minItems": 1
1124
- },
1125
- "prerequisites": {
1126
- "$ref": "./_Prerequisite.schema.json#/definitions/GeneralPrerequisites"
1127
- },
1128
- "ap_value": {
1129
- "description": "Specific AP cost for the select option.",
1130
- "type": "integer",
1131
- "minimum": 1
1132
- },
1133
- "src": {
1134
- "$ref": "./source/_PublicationRef.schema.json#/definitions/PublicationRefs"
461
+ "type": "object",
462
+ "properties": {
463
+ "tag": {
464
+ "const": "Single"
1135
465
  },
1136
- "translations": {
1137
- "description": "All translations for the entry, identified by IETF language tag (BCP47).",
1138
- "type": "object",
1139
- "patternProperties": {
1140
- "^[a-z]{2}-[A-Z]{2}$": {
1141
- "type": "object",
1142
- "properties": {
1143
- "errata": {
1144
- "$ref": "./source/_Erratum.schema.json#/definitions/Errata"
1145
- }
1146
- },
1147
- "required": [],
1148
- "minProperties": 1,
1149
- "additionalProperties": false
1150
- }
1151
- },
1152
- "minProperties": 1,
1153
- "additionalProperties": false
466
+ "single": {
467
+ "$ref": "./_SimpleReferences.schema.json#/$defs/SkillReference"
1154
468
  }
1155
469
  },
1156
470
  "required": [
1157
471
  "tag",
1158
- "id"
472
+ "single"
1159
473
  ],
1160
474
  "additionalProperties": false
1161
475
  },
@@ -1163,73 +477,66 @@
1163
477
  "type": "object",
1164
478
  "properties": {
1165
479
  "tag": {
1166
- "const": "CombatTechnique"
1167
- },
1168
- "id": {
1169
- "description": "The combat technique's identifier.",
1170
- "$ref": "./_Identifier.schema.json#/definitions/CombatTechniqueIdentifier"
1171
- },
1172
- "prerequisites": {
1173
- "$ref": "./_Prerequisite.schema.json#/definitions/GeneralPrerequisites"
480
+ "const": "Multiple"
1174
481
  },
1175
- "ap_value": {
1176
- "description": "Specific AP cost for the select option.",
1177
- "type": "integer",
1178
- "minimum": 1
1179
- },
1180
- "src": {
1181
- "$ref": "./source/_PublicationRef.schema.json#/definitions/PublicationRefs"
1182
- },
1183
- "translations": {
1184
- "description": "All translations for the entry, identified by IETF language tag (BCP47).",
1185
- "type": "object",
1186
- "patternProperties": {
1187
- "^[a-z]{2}-[A-Z]{2}$": {
1188
- "type": "object",
1189
- "properties": {
1190
- "errata": {
1191
- "$ref": "./source/_Erratum.schema.json#/definitions/Errata"
1192
- }
1193
- },
1194
- "required": [],
1195
- "minProperties": 1,
1196
- "additionalProperties": false
1197
- }
1198
- },
1199
- "minProperties": 1,
1200
- "additionalProperties": false
482
+ "multiple": {
483
+ "$ref": "#/$defs/SkillUseAssociatedSkills"
1201
484
  }
1202
485
  },
1203
486
  "required": [
1204
487
  "tag",
1205
- "id"
488
+ "multiple"
1206
489
  ],
1207
490
  "additionalProperties": false
1208
491
  }
1209
492
  ]
1210
493
  },
1211
- "Rules": {
1212
- "description": "The rule text.",
1213
- "type": "string",
1214
- "minLength": 1
494
+ "SkillUseAssociatedSkills": {
495
+ "type": "object",
496
+ "properties": {
497
+ "list": {
498
+ "description": "The skills this use belongs to.",
499
+ "type": "array",
500
+ "items": {
501
+ "$ref": "./_SimpleReferences.schema.json#/$defs/SkillReference"
502
+ },
503
+ "minItems": 2
504
+ }
505
+ },
506
+ "required": [
507
+ "list"
508
+ ],
509
+ "additionalProperties": false
1215
510
  },
1216
- "Effect": {
1217
- "description": "The effect description.",
1218
- "type": "string",
1219
- "minLength": 1
511
+ "SkillUseTranslation": {
512
+ "type": "object",
513
+ "properties": {
514
+ "name": {
515
+ "description": "The name of the use if different from the activatable entry's name.",
516
+ "$ref": "./_NonEmptyString.schema.json#/$defs/NonEmptyString"
517
+ }
518
+ },
519
+ "required": [
520
+ "name"
521
+ ],
522
+ "additionalProperties": false
1220
523
  },
1221
- "CombatSpecialAbilityType": {
1222
- "description": "The definition of how the combat special ability can be used in combat.",
524
+ "Penalty": {
525
+ "description": "The penalty the special ability gives when used.",
1223
526
  "oneOf": [
1224
527
  {
1225
528
  "type": "object",
1226
529
  "properties": {
1227
530
  "tag": {
1228
- "const": "Passive"
531
+ "const": "Single"
532
+ },
533
+ "single": {
534
+ "$ref": "#/$defs/SinglePenalty"
1229
535
  }
1230
536
  },
1231
537
  "required": [
1232
- "tag"
538
+ "tag",
539
+ "single"
1233
540
  ],
1234
541
  "additionalProperties": false
1235
542
  },
@@ -1237,11 +544,15 @@
1237
544
  "type": "object",
1238
545
  "properties": {
1239
546
  "tag": {
1240
- "const": "BasicManeuver"
547
+ "const": "ByHandedness"
548
+ },
549
+ "by_handedness": {
550
+ "$ref": "#/$defs/PenaltyByHandedness"
1241
551
  }
1242
552
  },
1243
553
  "required": [
1244
- "tag"
554
+ "tag",
555
+ "by_handedness"
1245
556
  ],
1246
557
  "additionalProperties": false
1247
558
  },
@@ -1249,236 +560,31 @@
1249
560
  "type": "object",
1250
561
  "properties": {
1251
562
  "tag": {
1252
- "const": "SpecialManeuver"
563
+ "const": "ByActivation"
564
+ },
565
+ "by_activation": {
566
+ "$ref": "#/$defs/PenaltyByActivation"
1253
567
  }
1254
568
  },
1255
569
  "required": [
1256
- "tag"
570
+ "tag",
571
+ "by_activation"
1257
572
  ],
1258
573
  "additionalProperties": false
1259
- }
1260
- ]
1261
- },
1262
- "SkillApplications": {
1263
- "description": "Registers new skill applications, which get enabled once this entry is\nactivated. It specifies an entry-unique identifier and the skill it belongs\nto. A translation can be left out if its name equals the name of the origin\nactivatable entry.",
1264
- "type": "array",
1265
- "items": {
1266
- "type": "object",
1267
- "properties": {
1268
- "id": {
1269
- "description": "The application's identifier. An entry-unique, increasing integer.",
1270
- "type": "integer",
1271
- "minimum": 1
1272
- },
1273
- "skill": {
1274
- "description": "The skill(s) this application belongs to.",
1275
- "oneOf": [
1276
- {
1277
- "type": "object",
1278
- "properties": {
1279
- "tag": {
1280
- "const": "Single"
1281
- },
1282
- "id": {
1283
- "description": "The referenced skill's identifier.",
1284
- "type": "integer",
1285
- "minimum": 1
1286
- }
1287
- },
1288
- "required": [
1289
- "tag",
1290
- "id"
1291
- ],
1292
- "additionalProperties": false
1293
- },
1294
- {
1295
- "type": "object",
1296
- "properties": {
1297
- "tag": {
1298
- "const": "Multiple"
1299
- },
1300
- "list": {
1301
- "description": "The skills this application belongs to.",
1302
- "type": "array",
1303
- "items": {
1304
- "type": "object",
1305
- "properties": {
1306
- "id": {
1307
- "description": "The referenced skill's identifier.",
1308
- "type": "integer",
1309
- "minimum": 1
1310
- }
1311
- },
1312
- "required": [
1313
- "id"
1314
- ],
1315
- "additionalProperties": false
1316
- },
1317
- "minItems": 2
1318
- },
1319
- "required_skill_rating": {
1320
- "description": "If an application applies to multiple skills, it may need to ensure the\nrespective skill is on a certain skill rating if the activatable entry\ncannot ensure this prerequisite.",
1321
- "type": "integer",
1322
- "minimum": 1
1323
- }
1324
- },
1325
- "required": [
1326
- "tag",
1327
- "list"
1328
- ],
1329
- "additionalProperties": false
1330
- }
1331
- ]
1332
- },
1333
- "translations": {
1334
- "description": "All translations for the entry, identified by IETF language tag (BCP47).",
1335
- "type": "object",
1336
- "patternProperties": {
1337
- "^[a-z]{2}-[A-Z]{2}$": {
1338
- "type": "object",
1339
- "properties": {
1340
- "name": {
1341
- "description": "The name of the application if different from the activatable entry's\nname.",
1342
- "type": "string",
1343
- "minLength": 1
1344
- }
1345
- },
1346
- "required": [
1347
- "name"
1348
- ],
1349
- "additionalProperties": false
1350
- }
1351
- },
1352
- "minProperties": 1,
1353
- "additionalProperties": false
1354
- }
1355
- },
1356
- "required": [
1357
- "id",
1358
- "skill"
1359
- ],
1360
- "additionalProperties": false
1361
- },
1362
- "minItems": 1
1363
- },
1364
- "SkillUses": {
1365
- "description": "Registers uses, which get enabled once this entry is activated. It specifies\nan entry-unique identifier and the skill it belongs to. A translation can be\nleft out if its name equals the name of the origin activatable entry.",
1366
- "type": "array",
1367
- "items": {
1368
- "type": "object",
1369
- "properties": {
1370
- "id": {
1371
- "description": "The use's identifier. An entry-unique, increasing integer.",
1372
- "type": "integer",
1373
- "minimum": 1
1374
- },
1375
- "skill": {
1376
- "description": "The skill(s) this use belongs to.",
1377
- "oneOf": [
1378
- {
1379
- "type": "object",
1380
- "properties": {
1381
- "tag": {
1382
- "const": "Single"
1383
- },
1384
- "id": {
1385
- "description": "The referenced skill's identifier.",
1386
- "type": "integer",
1387
- "minimum": 1
1388
- }
1389
- },
1390
- "required": [
1391
- "tag",
1392
- "id"
1393
- ],
1394
- "additionalProperties": false
1395
- },
1396
- {
1397
- "type": "object",
1398
- "properties": {
1399
- "tag": {
1400
- "const": "Multiple"
1401
- },
1402
- "list": {
1403
- "description": "The skills this use belongs to.",
1404
- "type": "array",
1405
- "items": {
1406
- "type": "object",
1407
- "properties": {
1408
- "id": {
1409
- "description": "The referenced skill's identifier.",
1410
- "type": "integer",
1411
- "minimum": 1
1412
- }
1413
- },
1414
- "required": [
1415
- "id"
1416
- ],
1417
- "additionalProperties": false
1418
- },
1419
- "minItems": 2
1420
- }
1421
- },
1422
- "required": [
1423
- "tag",
1424
- "list"
1425
- ],
1426
- "additionalProperties": false
1427
- }
1428
- ]
1429
- },
1430
- "translations": {
1431
- "description": "All translations for the entry, identified by IETF language tag (BCP47).",
1432
- "type": "object",
1433
- "patternProperties": {
1434
- "^[a-z]{2}-[A-Z]{2}$": {
1435
- "type": "object",
1436
- "properties": {
1437
- "name": {
1438
- "description": "The name of the use if different from the activatable entry's name.",
1439
- "type": "string",
1440
- "minLength": 1
1441
- }
1442
- },
1443
- "required": [
1444
- "name"
1445
- ],
1446
- "additionalProperties": false
1447
- }
1448
- },
1449
- "minProperties": 1,
1450
- "additionalProperties": false
1451
- }
1452
574
  },
1453
- "required": [
1454
- "id",
1455
- "skill"
1456
- ],
1457
- "additionalProperties": false
1458
- },
1459
- "minItems": 1
1460
- },
1461
- "Penalty": {
1462
- "description": "The penalty the special ability gives when used.",
1463
- "oneOf": [
1464
575
  {
1465
576
  "type": "object",
1466
577
  "properties": {
1467
578
  "tag": {
1468
- "const": "Single"
1469
- },
1470
- "value": {
1471
- "description": "The penalty value.",
1472
- "type": "integer"
579
+ "const": "Selection"
1473
580
  },
1474
- "applies_to_parry": {
1475
- "description": "Set to `true` if the penalty applies to the parry instead of the attack.",
1476
- "const": true
581
+ "selection": {
582
+ "$ref": "#/$defs/PenaltySelection"
1477
583
  }
1478
584
  },
1479
585
  "required": [
1480
586
  "tag",
1481
- "value"
587
+ "selection"
1482
588
  ],
1483
589
  "additionalProperties": false
1484
590
  },
@@ -1486,25 +592,15 @@
1486
592
  "type": "object",
1487
593
  "properties": {
1488
594
  "tag": {
1489
- "const": "ByHandedness"
1490
- },
1491
- "one_handed": {
1492
- "description": "The penalty value for one-handed weapons.",
1493
- "type": "integer"
1494
- },
1495
- "two_handed": {
1496
- "description": "The penalty value for two-handed weapons.",
1497
- "type": "integer"
595
+ "const": "ByLevel"
1498
596
  },
1499
- "applies_to_parry": {
1500
- "description": "Set to `true` if the penalty applies to the parry instead of the attack.",
1501
- "const": true
597
+ "by_level": {
598
+ "$ref": "#/$defs/PenaltyByLevel"
1502
599
  }
1503
600
  },
1504
601
  "required": [
1505
602
  "tag",
1506
- "one_handed",
1507
- "two_handed"
603
+ "by_level"
1508
604
  ],
1509
605
  "additionalProperties": false
1510
606
  },
@@ -1512,25 +608,15 @@
1512
608
  "type": "object",
1513
609
  "properties": {
1514
610
  "tag": {
1515
- "const": "ByActivation"
1516
- },
1517
- "active": {
1518
- "description": "The penalty value if the entry has been bought by the character.",
1519
- "type": "integer"
1520
- },
1521
- "inactive": {
1522
- "description": "The penalty value if the entry has not been bought by the character.",
1523
- "type": "integer"
611
+ "const": "ByAttack"
1524
612
  },
1525
- "applies_to_parry": {
1526
- "description": "Set to `true` if the penalty applies to the parry instead of the attack.",
1527
- "const": true
613
+ "by_attack": {
614
+ "$ref": "#/$defs/PenaltyByAttack"
1528
615
  }
1529
616
  },
1530
617
  "required": [
1531
618
  "tag",
1532
- "active",
1533
- "inactive"
619
+ "by_attack"
1534
620
  ],
1535
621
  "additionalProperties": false
1536
622
  },
@@ -1538,105 +624,111 @@
1538
624
  "type": "object",
1539
625
  "properties": {
1540
626
  "tag": {
1541
- "const": "Selection"
627
+ "const": "DependsOnHitZone"
1542
628
  },
1543
- "options": {
1544
- "oneOf": [
1545
- {
1546
- "type": "object",
1547
- "properties": {
1548
- "tag": {
1549
- "const": "Specific"
1550
- },
1551
- "list": {
1552
- "description": "The list of specific penalty options.",
1553
- "type": "array",
1554
- "items": {
1555
- "type": "object",
1556
- "properties": {
1557
- "value": {
1558
- "description": "The penalty value.",
1559
- "type": "integer"
1560
- }
1561
- },
1562
- "required": [
1563
- "value"
1564
- ],
1565
- "additionalProperties": false
1566
- },
1567
- "minItems": 2,
1568
- "uniqueItems": true
1569
- }
1570
- },
1571
- "required": [
1572
- "tag",
1573
- "list"
1574
- ],
1575
- "additionalProperties": false
1576
- },
1577
- {
1578
- "type": "object",
1579
- "properties": {
1580
- "tag": {
1581
- "const": "Range"
1582
- },
1583
- "minimum": {
1584
- "description": "The minimum penalty value.",
1585
- "type": "integer"
1586
- },
1587
- "maximum": {
1588
- "description": "The maximum penalty value.",
1589
- "type": "integer"
1590
- }
1591
- },
1592
- "required": [
1593
- "tag",
1594
- "minimum",
1595
- "maximum"
1596
- ],
1597
- "additionalProperties": false
1598
- }
1599
- ]
629
+ "depends_on_hit_zone": {
630
+ "type": "object",
631
+ "properties": {},
632
+ "required": [],
633
+ "additionalProperties": false
1600
634
  }
1601
635
  },
1602
636
  "required": [
1603
637
  "tag",
1604
- "options"
638
+ "depends_on_hit_zone"
1605
639
  ],
1606
640
  "additionalProperties": false
641
+ }
642
+ ]
643
+ },
644
+ "SinglePenalty": {
645
+ "type": "object",
646
+ "properties": {
647
+ "value": {
648
+ "description": "The penalty value.",
649
+ "type": "integer"
650
+ },
651
+ "applies_to_parry": {
652
+ "description": "Set to `true` if the penalty applies to the parry instead of the attack.",
653
+ "const": true
654
+ }
655
+ },
656
+ "required": [
657
+ "value"
658
+ ],
659
+ "additionalProperties": false
660
+ },
661
+ "PenaltyByHandedness": {
662
+ "type": "object",
663
+ "properties": {
664
+ "one_handed": {
665
+ "description": "The penalty value for one-handed weapons.",
666
+ "type": "integer"
667
+ },
668
+ "two_handed": {
669
+ "description": "The penalty value for two-handed weapons.",
670
+ "type": "integer"
1607
671
  },
672
+ "applies_to_parry": {
673
+ "description": "Set to `true` if the penalty applies to the parry instead of the attack.",
674
+ "const": true
675
+ }
676
+ },
677
+ "required": [
678
+ "one_handed",
679
+ "two_handed"
680
+ ],
681
+ "additionalProperties": false
682
+ },
683
+ "PenaltyByActivation": {
684
+ "type": "object",
685
+ "properties": {
686
+ "active": {
687
+ "description": "The penalty value if the entry has been bought by the character.",
688
+ "type": "integer"
689
+ },
690
+ "inactive": {
691
+ "description": "The penalty value if the entry has not been bought by the character.",
692
+ "type": "integer"
693
+ },
694
+ "applies_to_parry": {
695
+ "description": "Set to `true` if the penalty applies to the parry instead of the attack.",
696
+ "const": true
697
+ }
698
+ },
699
+ "required": [
700
+ "active",
701
+ "inactive"
702
+ ],
703
+ "additionalProperties": false
704
+ },
705
+ "PenaltySelection": {
706
+ "type": "object",
707
+ "properties": {
708
+ "options": {
709
+ "$ref": "#/$defs/PenaltySelectionOptions"
710
+ }
711
+ },
712
+ "required": [
713
+ "options"
714
+ ],
715
+ "additionalProperties": false
716
+ },
717
+ "PenaltySelectionOptions": {
718
+ "oneOf": [
1608
719
  {
1609
720
  "type": "object",
1610
721
  "properties": {
1611
722
  "tag": {
1612
- "const": "ByLevel"
1613
- },
1614
- "levels": {
1615
- "description": "A continuous range of penalties for each level. The first element is the\npenalty for the first level, the second element is the penalty for the\nsecond level, and so on.",
1616
- "type": "array",
1617
- "items": {
1618
- "type": "object",
1619
- "properties": {
1620
- "value": {
1621
- "description": "The penalty value for this level.",
1622
- "type": "integer"
1623
- }
1624
- },
1625
- "required": [
1626
- "value"
1627
- ],
1628
- "additionalProperties": false
1629
- },
1630
- "minItems": 2
723
+ "const": "Specific"
1631
724
  },
1632
- "external_id": {
1633
- "description": "The identifier of the combat-related special ability of which the level\ndefines the penalty instead.",
1634
- "$ref": "./_Identifier.schema.json#/definitions/CombatRelatedSpecialAbilityIdentifier"
725
+ "specific": {
726
+ "$ref": "#/$defs/SpecificPenaltySelectionOptions"
1635
727
  }
1636
728
  },
1637
729
  "required": [
1638
730
  "tag",
1639
- "levels"
731
+ "specific"
1640
732
  ],
1641
733
  "additionalProperties": false
1642
734
  },
@@ -1644,66 +736,159 @@
1644
736
  "type": "object",
1645
737
  "properties": {
1646
738
  "tag": {
1647
- "const": "ByAttack"
739
+ "const": "Range"
1648
740
  },
1649
- "list": {
1650
- "description": "A list of penalties for subsequent attacks. The first element is the\npenalty for the first attack, the second element is the penalty for the\nsecond attack, and so on. The order of the first element may be changed\nusing `initial_order`, so that e.g. if set to `2`, the first element is\nthe penalty for the second attack, the second element is the penalty for\nthe third attack, and so on.",
1651
- "type": "array",
1652
- "items": {
1653
- "type": "object",
1654
- "properties": {
1655
- "value": {
1656
- "description": "The penalty value for this order.",
1657
- "type": "integer"
1658
- }
1659
- },
1660
- "required": [
1661
- "value"
1662
- ],
1663
- "additionalProperties": false
1664
- },
1665
- "minItems": 1
1666
- },
1667
- "initial_order": {
1668
- "description": "The order of the first element in the `list` of penalties.",
1669
- "type": "number"
1670
- },
1671
- "attack_replacement": {
1672
- "description": "Set if a predefined different word should be used instead of the word\n`attack` for display purposes.",
1673
- "oneOf": [
1674
- {
1675
- "type": "object",
1676
- "properties": {
1677
- "tag": {
1678
- "const": "Throw"
1679
- }
1680
- },
1681
- "required": [
1682
- "tag"
1683
- ],
1684
- "additionalProperties": false
1685
- }
1686
- ]
741
+ "range": {
742
+ "$ref": "#/$defs/PenaltySelectionOptionsRange"
1687
743
  }
1688
744
  },
1689
745
  "required": [
1690
746
  "tag",
1691
- "list"
747
+ "range"
1692
748
  ],
1693
749
  "additionalProperties": false
750
+ }
751
+ ]
752
+ },
753
+ "SpecificPenaltySelectionOptions": {
754
+ "type": "object",
755
+ "properties": {
756
+ "list": {
757
+ "description": "The list of specific penalty options.",
758
+ "type": "array",
759
+ "items": {
760
+ "$ref": "#/$defs/SpecificPenaltySelectionOption"
761
+ },
762
+ "minItems": 2,
763
+ "uniqueItems": true
764
+ }
765
+ },
766
+ "required": [
767
+ "list"
768
+ ],
769
+ "additionalProperties": false
770
+ },
771
+ "SpecificPenaltySelectionOption": {
772
+ "type": "object",
773
+ "properties": {
774
+ "value": {
775
+ "description": "The penalty value.",
776
+ "type": "integer"
777
+ }
778
+ },
779
+ "required": [
780
+ "value"
781
+ ],
782
+ "additionalProperties": false
783
+ },
784
+ "PenaltySelectionOptionsRange": {
785
+ "type": "object",
786
+ "properties": {
787
+ "minimum": {
788
+ "description": "The minimum penalty value.",
789
+ "type": "integer"
1694
790
  },
1695
- {
1696
- "type": "object",
1697
- "properties": {
1698
- "tag": {
1699
- "const": "DependsOnHitZone"
1700
- }
791
+ "maximum": {
792
+ "description": "The maximum penalty value.",
793
+ "type": "integer"
794
+ }
795
+ },
796
+ "required": [
797
+ "minimum",
798
+ "maximum"
799
+ ],
800
+ "additionalProperties": false
801
+ },
802
+ "PenaltyByLevel": {
803
+ "type": "object",
804
+ "properties": {
805
+ "levels": {
806
+ "description": "A continuous range of penalties for each level. The first element is the\npenalty for the first level, the second element is the penalty for the\nsecond level, and so on.",
807
+ "type": "array",
808
+ "items": {
809
+ "$ref": "#/$defs/PenaltyByLevelLevel"
1701
810
  },
1702
- "required": [
1703
- "tag"
1704
- ],
1705
- "additionalProperties": false
811
+ "minItems": 2
812
+ },
813
+ "external": {
814
+ "description": "The combat-related special ability of which the level defines the penalty\ninstead.",
815
+ "$ref": "#/$defs/PenaltyByExternalLevel"
816
+ }
817
+ },
818
+ "required": [
819
+ "levels"
820
+ ],
821
+ "additionalProperties": false
822
+ },
823
+ "PenaltyByLevelLevel": {
824
+ "type": "object",
825
+ "properties": {
826
+ "value": {
827
+ "description": "The penalty value for this level.",
828
+ "type": "integer"
829
+ }
830
+ },
831
+ "required": [
832
+ "value"
833
+ ],
834
+ "additionalProperties": false
835
+ },
836
+ "PenaltyByExternalLevel": {
837
+ "description": "The combat-related special ability of which the level defines the penalty\ninstead.",
838
+ "type": "object",
839
+ "properties": {
840
+ "id": {
841
+ "description": "The identifier of the combat-related special ability of which the level\ndefines the penalty instead.",
842
+ "$ref": "./_Identifier.schema.json#/$defs/CombatRelatedSpecialAbilityIdentifier"
843
+ }
844
+ },
845
+ "required": [
846
+ "id"
847
+ ],
848
+ "additionalProperties": false
849
+ },
850
+ "PenaltyByAttack": {
851
+ "type": "object",
852
+ "properties": {
853
+ "list": {
854
+ "description": "A list of penalties for subsequent attacks. The first element is the\npenalty for the first attack, the second element is the penalty for the\nsecond attack, and so on. The order of the first element may be changed\nusing `initial_order`, so that e.g. if set to `2`, the first element is\nthe penalty for the second attack, the second element is the penalty for\nthe third attack, and so on.",
855
+ "type": "array",
856
+ "items": {
857
+ "$ref": "#/$defs/PenaltyByAttackOrderItem"
858
+ },
859
+ "minItems": 1
860
+ },
861
+ "initial_order": {
862
+ "description": "The order of the first element in the `list` of penalties.",
863
+ "type": "number"
864
+ },
865
+ "attack_replacement": {
866
+ "description": "Set if a predefined different word should be used instead of the word\n`attack` for display purposes.",
867
+ "$ref": "#/$defs/PenaltyByAttackReplacement"
868
+ }
869
+ },
870
+ "required": [
871
+ "list"
872
+ ],
873
+ "additionalProperties": false
874
+ },
875
+ "PenaltyByAttackOrderItem": {
876
+ "type": "object",
877
+ "properties": {
878
+ "value": {
879
+ "description": "The penalty value for this order.",
880
+ "type": "integer"
1706
881
  }
882
+ },
883
+ "required": [
884
+ "value"
885
+ ],
886
+ "additionalProperties": false
887
+ },
888
+ "PenaltyByAttackReplacement": {
889
+ "description": "Set if a predefined different word should be used instead of the word\n`attack` for display purposes.",
890
+ "enum": [
891
+ "Throw"
1707
892
  ]
1708
893
  },
1709
894
  "EnchantmentCost": {
@@ -1714,13 +899,13 @@
1714
899
  "tag": {
1715
900
  "const": "ArcaneEnergyCost"
1716
901
  },
1717
- "ae_cost": {
1718
- "$ref": "#/definitions/ArcaneEnergyCost"
902
+ "arcane_energy_cost": {
903
+ "$ref": "#/$defs/ArcaneEnergyCost"
1719
904
  }
1720
905
  },
1721
906
  "required": [
1722
907
  "tag",
1723
- "ae_cost"
908
+ "arcane_energy_cost"
1724
909
  ],
1725
910
  "additionalProperties": false
1726
911
  },
@@ -1731,7 +916,7 @@
1731
916
  "const": "BindingCost"
1732
917
  },
1733
918
  "binding_cost": {
1734
- "$ref": "#/definitions/BindingCost"
919
+ "$ref": "#/$defs/BindingCost"
1735
920
  }
1736
921
  },
1737
922
  "required": [
@@ -1751,88 +936,13 @@
1751
936
  "tag": {
1752
937
  "const": "Fixed"
1753
938
  },
1754
- "value": {
1755
- "description": "The AE cost value.",
1756
- "type": "integer",
1757
- "minimum": 1
1758
- },
1759
- "is_permanent": {
1760
- "description": "Set to `true` if the AE costs are permanent.",
1761
- "const": true
1762
- },
1763
- "interval": {
1764
- "description": "Specified if the AE cost `value` has to be paid for each time interval.",
1765
- "$ref": "./_ActivatableSkill.schema.json#/definitions/Duration/UnitValue"
1766
- },
1767
- "per_level": {
1768
- "description": "The AE cost are per level of the enchantment. It may either be displayed\nin a compressed way (e.g. `1 AE per level`) or in a verbose way (e.g. `1\nAE for level I; 2 AE for level II`).",
1769
- "oneOf": [
1770
- {
1771
- "type": "object",
1772
- "properties": {
1773
- "tag": {
1774
- "const": "Compressed"
1775
- }
1776
- },
1777
- "required": [
1778
- "tag"
1779
- ],
1780
- "additionalProperties": false
1781
- },
1782
- {
1783
- "type": "object",
1784
- "properties": {
1785
- "tag": {
1786
- "const": "Verbose"
1787
- }
1788
- },
1789
- "required": [
1790
- "tag"
1791
- ],
1792
- "additionalProperties": false
1793
- }
1794
- ]
1795
- },
1796
- "translations": {
1797
- "description": "All translations for the entry, identified by IETF language tag\n(BCP47).",
1798
- "type": "object",
1799
- "patternProperties": {
1800
- "^[a-z]{2}-[A-Z]{2}$": {
1801
- "type": "object",
1802
- "properties": {
1803
- "note": {
1804
- "description": "A note, appended to the generated string in parenthesis.",
1805
- "type": "object",
1806
- "properties": {
1807
- "default": {
1808
- "description": "The full note.",
1809
- "type": "string",
1810
- "minLength": 1
1811
- },
1812
- "compressed": {
1813
- "description": "A compressed note, if applicable. If not specified it should not\nbe displayed in small location.",
1814
- "type": "string",
1815
- "minLength": 1
1816
- }
1817
- },
1818
- "required": [
1819
- "default"
1820
- ],
1821
- "additionalProperties": false
1822
- }
1823
- },
1824
- "required": [],
1825
- "minProperties": 1,
1826
- "additionalProperties": false
1827
- }
1828
- },
1829
- "minProperties": 1,
1830
- "additionalProperties": false
939
+ "fixed": {
940
+ "$ref": "#/$defs/FixedArcaneEnergyCost"
1831
941
  }
1832
942
  },
1833
943
  "required": [
1834
944
  "tag",
1835
- "value"
945
+ "fixed"
1836
946
  ],
1837
947
  "additionalProperties": false
1838
948
  },
@@ -1842,79 +952,13 @@
1842
952
  "tag": {
1843
953
  "const": "PerCountable"
1844
954
  },
1845
- "value": {
1846
- "description": "The AE cost value that has to be per a specific countable entity.",
1847
- "type": "integer",
1848
- "minimum": 1
1849
- },
1850
- "base_value": {
1851
- "description": "If defined, in addition to the cost per entity you have to pay a flat\namount, regardless of the entity count.",
1852
- "type": "integer",
1853
- "minimum": 1
1854
- },
1855
- "translations": {
1856
- "description": "All translations for the entry, identified by IETF language tag\n(BCP47).",
1857
- "type": "object",
1858
- "patternProperties": {
1859
- "^[a-z]{2}-[A-Z]{2}$": {
1860
- "type": "object",
1861
- "properties": {
1862
- "per": {
1863
- "description": "The cost have to be per a specific countable entity, e.g. `8 AE per\nperson`.",
1864
- "type": "object",
1865
- "properties": {
1866
- "default": {
1867
- "description": "The full countable entity name.",
1868
- "type": "string",
1869
- "minLength": 1
1870
- },
1871
- "compressed": {
1872
- "description": "The compressed countable entity name.",
1873
- "type": "string",
1874
- "minLength": 1
1875
- }
1876
- },
1877
- "required": [
1878
- "default",
1879
- "compressed"
1880
- ],
1881
- "additionalProperties": false
1882
- },
1883
- "note": {
1884
- "description": "A note, appended to the generated string in parenthesis.",
1885
- "type": "object",
1886
- "properties": {
1887
- "default": {
1888
- "description": "The full note.",
1889
- "type": "string",
1890
- "minLength": 1
1891
- },
1892
- "compressed": {
1893
- "description": "A compressed note, if applicable. If not specified it should not\nbe displayed in small location.",
1894
- "type": "string",
1895
- "minLength": 1
1896
- }
1897
- },
1898
- "required": [
1899
- "default"
1900
- ],
1901
- "additionalProperties": false
1902
- }
1903
- },
1904
- "required": [
1905
- "per"
1906
- ],
1907
- "minProperties": 1,
1908
- "additionalProperties": false
1909
- }
1910
- },
1911
- "minProperties": 1,
1912
- "additionalProperties": false
955
+ "per_countable": {
956
+ "$ref": "#/$defs/ArcaneEnergyCostPerCountable"
1913
957
  }
1914
958
  },
1915
959
  "required": [
1916
960
  "tag",
1917
- "value"
961
+ "per_countable"
1918
962
  ],
1919
963
  "additionalProperties": false
1920
964
  },
@@ -1924,21 +968,13 @@
1924
968
  "tag": {
1925
969
  "const": "ActivationAndHalfInterval"
1926
970
  },
1927
- "value": {
1928
- "description": "The AE cost value that has to be payed for activation. Half of this value\nhas to be payed each interval.",
1929
- "type": "integer",
1930
- "minimum": 2,
1931
- "multipleOf": 2
1932
- },
1933
- "interval": {
1934
- "description": "The time interval for which the AE cost `value` has to be paid.",
1935
- "$ref": "./_ActivatableSkill.schema.json#/definitions/Duration/UnitValue"
971
+ "activation_and_half_interval": {
972
+ "$ref": "#/$defs/ActivationAndHalfIntervalArcaneEnergyCost"
1936
973
  }
1937
974
  },
1938
975
  "required": [
1939
976
  "tag",
1940
- "value",
1941
- "interval"
977
+ "activation_and_half_interval"
1942
978
  ],
1943
979
  "additionalProperties": false
1944
980
  },
@@ -1948,94 +984,13 @@
1948
984
  "tag": {
1949
985
  "const": "Indefinite"
1950
986
  },
1951
- "modifier": {
1952
- "description": "The indefinite AE cost may be modified by a certain value.",
1953
- "type": "object",
1954
- "properties": {
1955
- "arithmetic": {
1956
- "description": "The arithmetic how to apply the `value` to the indefinite base value.",
1957
- "oneOf": [
1958
- {
1959
- "type": "object",
1960
- "properties": {
1961
- "tag": {
1962
- "const": "Add"
1963
- }
1964
- },
1965
- "required": [
1966
- "tag"
1967
- ],
1968
- "additionalProperties": false
1969
- },
1970
- {
1971
- "type": "object",
1972
- "properties": {
1973
- "tag": {
1974
- "const": "Multiply"
1975
- }
1976
- },
1977
- "required": [
1978
- "tag"
1979
- ],
1980
- "additionalProperties": false
1981
- }
1982
- ]
1983
- },
1984
- "value": {
1985
- "description": "The value that is applied to the indefinite base value using the\ndefined `arithmetic`.",
1986
- "type": "integer",
1987
- "minimum": 1
1988
- }
1989
- },
1990
- "required": [
1991
- "arithmetic",
1992
- "value"
1993
- ],
1994
- "additionalProperties": false
1995
- },
1996
- "translations": {
1997
- "description": "All translations for the entry, identified by IETF language tag (BCP47).",
1998
- "type": "object",
1999
- "patternProperties": {
2000
- "^[a-z]{2}-[A-Z]{2}$": {
2001
- "type": "object",
2002
- "properties": {
2003
- "description": {
2004
- "description": "A description of where the cost come from.",
2005
- "type": "object",
2006
- "properties": {
2007
- "default": {
2008
- "description": "The full description of where the cost come from.",
2009
- "type": "string",
2010
- "minLength": 1
2011
- },
2012
- "compressed": {
2013
- "description": "A compressed description of where the cost come from for use in\nsmall areas (e.g. on character sheet).",
2014
- "type": "string",
2015
- "minLength": 1
2016
- }
2017
- },
2018
- "required": [
2019
- "default",
2020
- "compressed"
2021
- ],
2022
- "additionalProperties": false
2023
- }
2024
- },
2025
- "required": [
2026
- "description"
2027
- ],
2028
- "additionalProperties": false
2029
- }
2030
- },
2031
- "minProperties": 1,
2032
- "additionalProperties": false
987
+ "indefinite": {
988
+ "$ref": "#/$defs/IndefiniteArcaneEnergyCost"
2033
989
  }
2034
990
  },
2035
991
  "required": [
2036
992
  "tag",
2037
- "modifier",
2038
- "translations"
993
+ "indefinite"
2039
994
  ],
2040
995
  "additionalProperties": false
2041
996
  },
@@ -2045,89 +1000,13 @@
2045
1000
  "tag": {
2046
1001
  "const": "Disjunction"
2047
1002
  },
2048
- "interval": {
2049
- "description": "Specified if the selected AE cost option has to be paid for each time\ninterval.",
2050
- "type": "object",
2051
- "properties": {
2052
- "value": {
2053
- "description": "The interval itself.",
2054
- "$ref": "./_ActivatableSkill.schema.json#/definitions/Duration/UnitValue"
2055
- },
2056
- "activation_value": {
2057
- "description": "The AE cost value for activation.",
2058
- "type": "integer",
2059
- "minimum": 1
2060
- },
2061
- "after_activation": {
2062
- "description": "Set to `true` if the action where the enchantment is casted does\n**not** as a part of the first interval that has to be payed, so that\nthe first interval payment needs to be done after the activation.\n\nThis works different than other sustained spells, since for them the\nend of the cast usually already counts as part of the first interval.",
2063
- "type": "boolean"
2064
- }
2065
- },
2066
- "required": [
2067
- "value",
2068
- "activation_value",
2069
- "after_activation"
2070
- ],
2071
- "additionalProperties": false
2072
- },
2073
- "options": {
2074
- "description": "The possible AE cost values.",
2075
- "type": "array",
2076
- "items": {
2077
- "type": "object",
2078
- "properties": {
2079
- "value": {
2080
- "description": "A possible AE cost value.",
2081
- "type": "integer",
2082
- "minimum": 1
2083
- },
2084
- "translations": {
2085
- "description": "All translations for the entry, identified by IETF language tag\n(BCP47).",
2086
- "type": "object",
2087
- "patternProperties": {
2088
- "^[a-z]{2}-[A-Z]{2}$": {
2089
- "type": "object",
2090
- "properties": {
2091
- "note": {
2092
- "description": "A note, appended to the generated option string in parenthesis.",
2093
- "type": "object",
2094
- "properties": {
2095
- "default": {
2096
- "description": "The full note.",
2097
- "type": "string",
2098
- "minLength": 1
2099
- },
2100
- "compressed": {
2101
- "description": "A compressed note, if applicable. If not specified it should not\nbe displayed in small location.",
2102
- "type": "string",
2103
- "minLength": 1
2104
- }
2105
- },
2106
- "required": [
2107
- "default"
2108
- ],
2109
- "additionalProperties": false
2110
- }
2111
- },
2112
- "required": [],
2113
- "minProperties": 1,
2114
- "additionalProperties": false
2115
- }
2116
- },
2117
- "minProperties": 1,
2118
- "additionalProperties": false
2119
- }
2120
- },
2121
- "required": [
2122
- "value"
2123
- ],
2124
- "additionalProperties": false
2125
- }
2126
- }
2127
- },
2128
- "required": [
2129
- "tag",
2130
- "options"
1003
+ "disjunction": {
1004
+ "$ref": "#/$defs/ArcaneEnergyCostDisjunction"
1005
+ }
1006
+ },
1007
+ "required": [
1008
+ "tag",
1009
+ "disjunction"
2131
1010
  ],
2132
1011
  "additionalProperties": false
2133
1012
  },
@@ -2137,41 +1016,8 @@
2137
1016
  "tag": {
2138
1017
  "const": "None"
2139
1018
  },
2140
- "translations": {
2141
- "description": "All translations for the entry, identified by IETF language tag\n(BCP47).",
2142
- "type": "object",
2143
- "patternProperties": {
2144
- "^[a-z]{2}-[A-Z]{2}$": {
2145
- "type": "object",
2146
- "properties": {
2147
- "note": {
2148
- "description": "A note, appended to the generated string in parenthesis.",
2149
- "type": "object",
2150
- "properties": {
2151
- "default": {
2152
- "description": "The full note.",
2153
- "type": "string",
2154
- "minLength": 1
2155
- },
2156
- "compressed": {
2157
- "description": "A compressed note, if applicable. If not specified it should not\nbe displayed in small location.",
2158
- "type": "string",
2159
- "minLength": 1
2160
- }
2161
- },
2162
- "required": [
2163
- "default"
2164
- ],
2165
- "additionalProperties": false
2166
- }
2167
- },
2168
- "required": [],
2169
- "minProperties": 1,
2170
- "additionalProperties": false
2171
- }
2172
- },
2173
- "minProperties": 1,
2174
- "additionalProperties": false
1019
+ "none": {
1020
+ "$ref": "#/$defs/NoArcaneEnergyCost"
2175
1021
  }
2176
1022
  },
2177
1023
  "required": [
@@ -2184,14 +1030,320 @@
2184
1030
  "properties": {
2185
1031
  "tag": {
2186
1032
  "const": "Variable"
1033
+ },
1034
+ "variable": {
1035
+ "type": "object",
1036
+ "properties": {},
1037
+ "required": [],
1038
+ "additionalProperties": false
1039
+ }
1040
+ },
1041
+ "required": [
1042
+ "tag",
1043
+ "variable"
1044
+ ],
1045
+ "additionalProperties": false
1046
+ }
1047
+ ]
1048
+ },
1049
+ "FixedArcaneEnergyCost": {
1050
+ "type": "object",
1051
+ "properties": {
1052
+ "value": {
1053
+ "description": "The AE cost value.",
1054
+ "type": "integer",
1055
+ "minimum": 1
1056
+ },
1057
+ "is_permanent": {
1058
+ "description": "Set to `true` if the AE costs are permanent.",
1059
+ "const": true
1060
+ },
1061
+ "interval": {
1062
+ "description": "Specified if the AE cost `value` has to be paid for each time interval.",
1063
+ "$ref": "./_ActivatableSkillDuration.schema.json#/$defs/DurationUnitValue"
1064
+ },
1065
+ "per_level": {
1066
+ "description": "The AE cost are per level of the enchantment. It may either be displayed\nin a compressed way (e.g. `1 AE per level`) or in a verbose way (e.g. `1\nAE for level I; 2 AE for level II`).",
1067
+ "$ref": "#/$defs/FixedArcaneEnergyCostPerLevel"
1068
+ },
1069
+ "translations": {
1070
+ "description": "All translations for the entry, identified by IETF language tag (BCP47).",
1071
+ "type": "object",
1072
+ "patternProperties": {
1073
+ "^[a-z]{2}-[A-Z]{2}$": {
1074
+ "$ref": "#/$defs/FixedArcaneEnergyCostTranslation"
1075
+ }
1076
+ },
1077
+ "minProperties": 1,
1078
+ "additionalProperties": false
1079
+ }
1080
+ },
1081
+ "required": [
1082
+ "value"
1083
+ ],
1084
+ "additionalProperties": false
1085
+ },
1086
+ "FixedArcaneEnergyCostPerLevel": {
1087
+ "description": "The AE cost are per level of the enchantment. It may either be displayed\nin a compressed way (e.g. `1 AE per level`) or in a verbose way (e.g. `1\nAE for level I; 2 AE for level II`).",
1088
+ "enum": [
1089
+ "Compressed",
1090
+ "Verbose"
1091
+ ]
1092
+ },
1093
+ "FixedArcaneEnergyCostTranslation": {
1094
+ "type": "object",
1095
+ "properties": {
1096
+ "note": {
1097
+ "description": "A note, appended to the generated option string in parenthesis.",
1098
+ "$ref": "./_ResponsiveText.schema.json#/$defs/ResponsiveTextOptional"
1099
+ }
1100
+ },
1101
+ "required": [],
1102
+ "minProperties": 1,
1103
+ "additionalProperties": false
1104
+ },
1105
+ "ArcaneEnergyCostPerCountable": {
1106
+ "type": "object",
1107
+ "properties": {
1108
+ "value": {
1109
+ "description": "The AE cost value that has to be per a specific countable entity.",
1110
+ "type": "integer",
1111
+ "minimum": 1
1112
+ },
1113
+ "base_value": {
1114
+ "description": "If defined, in addition to the cost per entity you have to pay a flat\namount, regardless of the entity count.",
1115
+ "type": "integer",
1116
+ "minimum": 1
1117
+ },
1118
+ "translations": {
1119
+ "description": "All translations for the entry, identified by IETF language tag (BCP47).",
1120
+ "type": "object",
1121
+ "patternProperties": {
1122
+ "^[a-z]{2}-[A-Z]{2}$": {
1123
+ "$ref": "#/$defs/ArcaneEnergyCostPerCountableTranslation"
1124
+ }
1125
+ },
1126
+ "minProperties": 1,
1127
+ "additionalProperties": false
1128
+ }
1129
+ },
1130
+ "required": [
1131
+ "value"
1132
+ ],
1133
+ "additionalProperties": false
1134
+ },
1135
+ "ArcaneEnergyCostPerCountableTranslation": {
1136
+ "type": "object",
1137
+ "properties": {
1138
+ "per": {
1139
+ "description": "The cost have to be per a specific countable entity, e.g. `8 AE per\nperson`.",
1140
+ "$ref": "./_ResponsiveText.schema.json#/$defs/ResponsiveText"
1141
+ },
1142
+ "note": {
1143
+ "description": "A note, appended to the generated string in parenthesis.",
1144
+ "$ref": "./_ResponsiveText.schema.json#/$defs/ResponsiveTextOptional"
1145
+ }
1146
+ },
1147
+ "required": [
1148
+ "per"
1149
+ ],
1150
+ "additionalProperties": false
1151
+ },
1152
+ "ActivationAndHalfIntervalArcaneEnergyCost": {
1153
+ "type": "object",
1154
+ "properties": {
1155
+ "value": {
1156
+ "description": "The AE cost value that has to be payed for activation. Half of this value\nhas to be payed each interval.",
1157
+ "type": "integer",
1158
+ "minimum": 2,
1159
+ "multipleOf": 2
1160
+ },
1161
+ "interval": {
1162
+ "description": "The time interval for which the AE cost `value` has to be paid.",
1163
+ "$ref": "./_ActivatableSkillDuration.schema.json#/$defs/DurationUnitValue"
1164
+ }
1165
+ },
1166
+ "required": [
1167
+ "value",
1168
+ "interval"
1169
+ ],
1170
+ "additionalProperties": false
1171
+ },
1172
+ "IndefiniteArcaneEnergyCost": {
1173
+ "type": "object",
1174
+ "properties": {
1175
+ "modifier": {
1176
+ "description": "The indefinite AE cost may be modified by a certain value.",
1177
+ "$ref": "#/$defs/IndefiniteArcaneEnergyCostModifier"
1178
+ },
1179
+ "translations": {
1180
+ "description": "All translations for the entry, identified by IETF language tag (BCP47).",
1181
+ "type": "object",
1182
+ "patternProperties": {
1183
+ "^[a-z]{2}-[A-Z]{2}$": {
1184
+ "$ref": "#/$defs/IndefiniteArcaneEnergyCostTranslation"
1185
+ }
1186
+ },
1187
+ "minProperties": 1,
1188
+ "additionalProperties": false
1189
+ }
1190
+ },
1191
+ "required": [
1192
+ "modifier",
1193
+ "translations"
1194
+ ],
1195
+ "additionalProperties": false
1196
+ },
1197
+ "IndefiniteArcaneEnergyCostArithmetic": {
1198
+ "description": "Defines how the the `value` is set off against the check result.",
1199
+ "enum": [
1200
+ "Add",
1201
+ "Subtract"
1202
+ ]
1203
+ },
1204
+ "IndefiniteArcaneEnergyCostModifier": {
1205
+ "type": "object",
1206
+ "properties": {
1207
+ "arithmetic": {
1208
+ "description": "The arithmetic how to apply the `value` to the `base`.",
1209
+ "$ref": "#/$defs/IndefiniteArcaneEnergyCostArithmetic"
1210
+ },
1211
+ "value": {
1212
+ "description": "The value that is applied to the `base` using the defined `arithmetic`.",
1213
+ "type": "integer",
1214
+ "minimum": 1
1215
+ }
1216
+ },
1217
+ "required": [
1218
+ "arithmetic",
1219
+ "value"
1220
+ ],
1221
+ "additionalProperties": false
1222
+ },
1223
+ "IndefiniteArcaneEnergyCostTranslation": {
1224
+ "type": "object",
1225
+ "properties": {
1226
+ "description": {
1227
+ "description": "A description of where the cost come from.",
1228
+ "$ref": "./_ResponsiveText.schema.json#/$defs/ResponsiveText"
1229
+ }
1230
+ },
1231
+ "required": [
1232
+ "description"
1233
+ ],
1234
+ "additionalProperties": false
1235
+ },
1236
+ "ArcaneEnergyCostDisjunction": {
1237
+ "type": "object",
1238
+ "properties": {
1239
+ "interval": {
1240
+ "description": "Specified if the selected AE cost option has to be paid for each time\ninterval.",
1241
+ "$ref": "#/$defs/ArcaneEnergyCostDisjunctionInterval"
1242
+ },
1243
+ "options": {
1244
+ "description": "The possible AE cost values.",
1245
+ "type": "array",
1246
+ "items": {
1247
+ "$ref": "#/$defs/ArcaneEnergyCostDisjunctionOption"
1248
+ }
1249
+ }
1250
+ },
1251
+ "required": [
1252
+ "options"
1253
+ ],
1254
+ "additionalProperties": false
1255
+ },
1256
+ "ArcaneEnergyCostDisjunctionInterval": {
1257
+ "type": "object",
1258
+ "properties": {
1259
+ "value": {
1260
+ "description": "The interval itself.",
1261
+ "$ref": "./_ActivatableSkillDuration.schema.json#/$defs/DurationUnitValue"
1262
+ },
1263
+ "activation_value": {
1264
+ "description": "The AE cost value for activation.",
1265
+ "type": "integer",
1266
+ "minimum": 1
1267
+ },
1268
+ "after_activation": {
1269
+ "description": "Set to `true` if the action where the enchantment is casted does\n**not** as a part of the first interval that has to be payed, so that\nthe first interval payment needs to be done after the activation.\n\nThis works different than other sustained spells, since for them the\nend of the cast usually already counts as part of the first interval.",
1270
+ "type": "boolean"
1271
+ }
1272
+ },
1273
+ "required": [
1274
+ "value",
1275
+ "activation_value",
1276
+ "after_activation"
1277
+ ],
1278
+ "additionalProperties": false
1279
+ },
1280
+ "ArcaneEnergyCostDisjunctionOption": {
1281
+ "type": "object",
1282
+ "properties": {
1283
+ "value": {
1284
+ "description": "A possible AE cost value.",
1285
+ "type": "integer",
1286
+ "minimum": 1
1287
+ },
1288
+ "translations": {
1289
+ "description": "All translations for the entry, identified by IETF language tag (BCP47).",
1290
+ "type": "object",
1291
+ "patternProperties": {
1292
+ "^[a-z]{2}-[A-Z]{2}$": {
1293
+ "$ref": "#/$defs/ArcaneEnergyCostDisjunctionOptionTranslation"
1294
+ }
1295
+ },
1296
+ "minProperties": 1,
1297
+ "additionalProperties": false
1298
+ }
1299
+ },
1300
+ "required": [
1301
+ "value"
1302
+ ],
1303
+ "additionalProperties": false
1304
+ },
1305
+ "ArcaneEnergyCostDisjunctionOptionTranslation": {
1306
+ "type": "object",
1307
+ "properties": {
1308
+ "note": {
1309
+ "description": "A note, appended to the generated option string in parenthesis.",
1310
+ "$ref": "./_ResponsiveText.schema.json#/$defs/ResponsiveTextOptional"
1311
+ }
1312
+ },
1313
+ "required": [],
1314
+ "minProperties": 1,
1315
+ "additionalProperties": false
1316
+ },
1317
+ "NoArcaneEnergyCost": {
1318
+ "type": "object",
1319
+ "properties": {
1320
+ "translations": {
1321
+ "description": "All translations for the entry, identified by IETF language tag (BCP47).",
1322
+ "type": "object",
1323
+ "patternProperties": {
1324
+ "^[a-z]{2}-[A-Z]{2}$": {
1325
+ "$ref": "#/$defs/NoArcaneEnergyCostTranslation"
2187
1326
  }
2188
1327
  },
2189
- "required": [
2190
- "tag"
2191
- ],
1328
+ "minProperties": 1,
2192
1329
  "additionalProperties": false
2193
1330
  }
2194
- ]
1331
+ },
1332
+ "required": [],
1333
+ "minProperties": 1,
1334
+ "additionalProperties": false
1335
+ },
1336
+ "NoArcaneEnergyCostTranslation": {
1337
+ "type": "object",
1338
+ "properties": {
1339
+ "note": {
1340
+ "description": "A note, appended to the generated string in parenthesis.",
1341
+ "$ref": "./_ResponsiveText.schema.json#/$defs/ResponsiveTextOptional"
1342
+ }
1343
+ },
1344
+ "required": [],
1345
+ "minProperties": 1,
1346
+ "additionalProperties": false
2195
1347
  },
2196
1348
  "Volume": {
2197
1349
  "description": "The volume points the enchantment needs.",
@@ -2202,15 +1354,13 @@
2202
1354
  "tag": {
2203
1355
  "const": "Fixed"
2204
1356
  },
2205
- "points": {
2206
- "description": "The volume points.",
2207
- "type": "integer",
2208
- "minimum": 0
1357
+ "fixed": {
1358
+ "$ref": "#/$defs/FixedVolume"
2209
1359
  }
2210
1360
  },
2211
1361
  "required": [
2212
1362
  "tag",
2213
- "points"
1363
+ "fixed"
2214
1364
  ],
2215
1365
  "additionalProperties": false
2216
1366
  },
@@ -2220,15 +1370,13 @@
2220
1370
  "tag": {
2221
1371
  "const": "PerLevel"
2222
1372
  },
2223
- "points": {
2224
- "description": "The volume points per level.",
2225
- "type": "integer",
2226
- "minimum": 1
1373
+ "per_level": {
1374
+ "$ref": "#/$defs/VolumePerLevel"
2227
1375
  }
2228
1376
  },
2229
1377
  "required": [
2230
1378
  "tag",
2231
- "points"
1379
+ "per_level"
2232
1380
  ],
2233
1381
  "additionalProperties": false
2234
1382
  },
@@ -2238,29 +1386,13 @@
2238
1386
  "tag": {
2239
1387
  "const": "ByLevel"
2240
1388
  },
2241
- "list": {
2242
- "description": "The volume points for each level. The first element is the volume points\nfor the first level, the second element is the volume points for the\nsecond level, and so on.",
2243
- "type": "array",
2244
- "items": {
2245
- "type": "object",
2246
- "properties": {
2247
- "points": {
2248
- "description": "The volume points for this level.",
2249
- "type": "integer",
2250
- "minimum": 0
2251
- }
2252
- },
2253
- "required": [
2254
- "points"
2255
- ],
2256
- "additionalProperties": false
2257
- },
2258
- "minItems": 2
1389
+ "by_level": {
1390
+ "$ref": "#/$defs/VolumeByLevel"
2259
1391
  }
2260
1392
  },
2261
1393
  "required": [
2262
1394
  "tag",
2263
- "list"
1395
+ "by_level"
2264
1396
  ],
2265
1397
  "additionalProperties": false
2266
1398
  },
@@ -2271,7 +1403,7 @@
2271
1403
  "const": "Map"
2272
1404
  },
2273
1405
  "map": {
2274
- "$ref": "#/definitions/VolumeMap"
1406
+ "$ref": "#/$defs/VolumeMap"
2275
1407
  }
2276
1408
  },
2277
1409
  "required": [
@@ -2282,6 +1414,65 @@
2282
1414
  }
2283
1415
  ]
2284
1416
  },
1417
+ "FixedVolume": {
1418
+ "type": "object",
1419
+ "properties": {
1420
+ "points": {
1421
+ "description": "The volume points.",
1422
+ "type": "integer",
1423
+ "minimum": 0
1424
+ }
1425
+ },
1426
+ "required": [
1427
+ "points"
1428
+ ],
1429
+ "additionalProperties": false
1430
+ },
1431
+ "VolumePerLevel": {
1432
+ "type": "object",
1433
+ "properties": {
1434
+ "points": {
1435
+ "description": "The volume points per level.",
1436
+ "type": "integer",
1437
+ "minimum": 1
1438
+ }
1439
+ },
1440
+ "required": [
1441
+ "points"
1442
+ ],
1443
+ "additionalProperties": false
1444
+ },
1445
+ "VolumeByLevel": {
1446
+ "type": "object",
1447
+ "properties": {
1448
+ "list": {
1449
+ "description": "The volume points for each level. The first element is the volume points\nfor the first level, the second element is the volume points for the\nsecond level, and so on.",
1450
+ "type": "array",
1451
+ "items": {
1452
+ "$ref": "#/$defs/VolumeByLevelItem"
1453
+ },
1454
+ "minItems": 2
1455
+ }
1456
+ },
1457
+ "required": [
1458
+ "list"
1459
+ ],
1460
+ "additionalProperties": false
1461
+ },
1462
+ "VolumeByLevelItem": {
1463
+ "type": "object",
1464
+ "properties": {
1465
+ "points": {
1466
+ "description": "The volume points for this level.",
1467
+ "type": "integer",
1468
+ "minimum": 0
1469
+ }
1470
+ },
1471
+ "required": [
1472
+ "points"
1473
+ ],
1474
+ "additionalProperties": false
1475
+ },
2285
1476
  "VolumeMap": {
2286
1477
  "description": "A content that is `3/4/5 Points for Chimera, Daimonid, Golems, Undead /\nFairies, Ghosts / Demons, Elementals` may be respresented as the following\nmap:\n\n```yaml\noptions:\n - points: 3\n associated_options:\n - id:\n tag: General\n value: # ...\n # ...\n translations:\n en-US:\n label: \"Chimera, Daimonid, Golems, Undead\"\n label_standalone: \"Chimera/Daimonid/Golems/Undead\"\n - points: 4\n associated_options:\n - id:\n tag: General\n value: # ...\n # ...\n translations:\n en-US:\n label: \"Fairies, Ghosts\"\n label_standalone: \"Fairies/Ghosts\"\n - points: 5\n associated_options:\n - id:\n tag: General\n value: # ...\n # ...\n translations:\n en-US:\n label: \"Demons, Elementals\"\n label_standalone: \"Demons/Elementals\"\n```\n\nThis will generate the exact same string as seen above. The associated\noptions are not present in the example, but they link to the options the\nvolume specification is meant for.",
2287
1478
  "type": "object",
@@ -2290,7 +1481,7 @@
2290
1481
  "description": "The possible costs and associated labels.",
2291
1482
  "type": "array",
2292
1483
  "items": {
2293
- "$ref": "#/definitions/VolumeMapOption"
1484
+ "$ref": "#/$defs/VolumeMapOption"
2294
1485
  },
2295
1486
  "minItems": 2
2296
1487
  },
@@ -2299,23 +1490,7 @@
2299
1490
  "type": "object",
2300
1491
  "patternProperties": {
2301
1492
  "^[a-z]{2}-[A-Z]{2}$": {
2302
- "type": "object",
2303
- "properties": {
2304
- "list_prepend": {
2305
- "description": "Place a string between the `for` and the grouped map option labels.",
2306
- "type": "string"
2307
- },
2308
- "list_append": {
2309
- "description": "Place a string after the grouped map option labels.",
2310
- "type": "string"
2311
- },
2312
- "replacement": {
2313
- "description": "If the string from the book cannot be generated using the default\ngeneration technique, use this string. All options still need to be\ninserted propertly, since it may be used by in-game tools to provide a\nselection to players.",
2314
- "type": "string"
2315
- }
2316
- },
2317
- "required": [],
2318
- "additionalProperties": false
1493
+ "$ref": "#/$defs/VolumeMapTranslation"
2319
1494
  }
2320
1495
  },
2321
1496
  "minProperties": 1,
@@ -2327,6 +1502,26 @@
2327
1502
  ],
2328
1503
  "additionalProperties": false
2329
1504
  },
1505
+ "VolumeMapTranslation": {
1506
+ "type": "object",
1507
+ "properties": {
1508
+ "list_prepend": {
1509
+ "description": "Place a string between the `for` and the grouped map option labels.",
1510
+ "type": "string"
1511
+ },
1512
+ "list_append": {
1513
+ "description": "Place a string after the grouped map option labels.",
1514
+ "type": "string"
1515
+ },
1516
+ "replacement": {
1517
+ "description": "If the string from the book cannot be generated using the default\ngeneration technique, use this string. All options still need to be\ninserted propertly, since it may be used by in-game tools to provide a\nselection to players.",
1518
+ "type": "string"
1519
+ }
1520
+ },
1521
+ "required": [],
1522
+ "minProperties": 1,
1523
+ "additionalProperties": false
1524
+ },
2330
1525
  "VolumeMapOption": {
2331
1526
  "type": "object",
2332
1527
  "properties": {
@@ -2339,17 +1534,7 @@
2339
1534
  "description": "Links to the options this volume specification is meant for.",
2340
1535
  "type": "array",
2341
1536
  "items": {
2342
- "type": "object",
2343
- "properties": {
2344
- "id": {
2345
- "description": "The option's identifier.",
2346
- "$ref": "./_Identifier.schema.json#/definitions/VolumePointsOptionReferenceIdentifier"
2347
- }
2348
- },
2349
- "required": [
2350
- "id"
2351
- ],
2352
- "additionalProperties": false
1537
+ "$ref": "#/$defs/VolumeMapOptionAssociatedOption"
2353
1538
  }
2354
1539
  },
2355
1540
  "translations": {
@@ -2357,23 +1542,7 @@
2357
1542
  "type": "object",
2358
1543
  "patternProperties": {
2359
1544
  "^[a-z]{2}-[A-Z]{2}$": {
2360
- "type": "object",
2361
- "properties": {
2362
- "label": {
2363
- "description": "The description of the option for cost string generation.",
2364
- "type": "string",
2365
- "minLength": 1
2366
- },
2367
- "label_standalone": {
2368
- "description": "The description of the option if used standalone. Only used if\ndifferent from `label`.",
2369
- "type": "string",
2370
- "minLength": 1
2371
- }
2372
- },
2373
- "required": [
2374
- "label"
2375
- ],
2376
- "additionalProperties": false
1545
+ "$ref": "#/$defs/VolumeMapOptionTranslation"
2377
1546
  }
2378
1547
  },
2379
1548
  "minProperties": 1,
@@ -2386,6 +1555,36 @@
2386
1555
  ],
2387
1556
  "additionalProperties": false
2388
1557
  },
1558
+ "VolumeMapOptionAssociatedOption": {
1559
+ "type": "object",
1560
+ "properties": {
1561
+ "id": {
1562
+ "description": "The option's identifier.",
1563
+ "$ref": "./_Identifier.schema.json#/$defs/VolumePointsOptionReferenceIdentifier"
1564
+ }
1565
+ },
1566
+ "required": [
1567
+ "id"
1568
+ ],
1569
+ "additionalProperties": false
1570
+ },
1571
+ "VolumeMapOptionTranslation": {
1572
+ "type": "object",
1573
+ "properties": {
1574
+ "label": {
1575
+ "description": "The description of the option for cost string generation.",
1576
+ "$ref": "./_NonEmptyString.schema.json#/$defs/NonEmptyString"
1577
+ },
1578
+ "label_standalone": {
1579
+ "description": "The description of the option if used standalone. Only used if\ndifferent from `label`.",
1580
+ "$ref": "./_NonEmptyString.schema.json#/$defs/NonEmptyString"
1581
+ }
1582
+ },
1583
+ "required": [
1584
+ "label"
1585
+ ],
1586
+ "additionalProperties": false
1587
+ },
2389
1588
  "BindingCost": {
2390
1589
  "description": "The binding cost for an enchantment.",
2391
1590
  "oneOf": [
@@ -2395,15 +1594,13 @@
2395
1594
  "tag": {
2396
1595
  "const": "Fixed"
2397
1596
  },
2398
- "permanent_value": {
2399
- "description": "The permanent AE cost.",
2400
- "type": "integer",
2401
- "minimum": 1
1597
+ "fixed": {
1598
+ "$ref": "#/$defs/FixedBindingCost"
2402
1599
  }
2403
1600
  },
2404
1601
  "required": [
2405
1602
  "tag",
2406
- "permanent_value"
1603
+ "fixed"
2407
1604
  ],
2408
1605
  "additionalProperties": false
2409
1606
  },
@@ -2413,15 +1610,13 @@
2413
1610
  "tag": {
2414
1611
  "const": "PerLevel"
2415
1612
  },
2416
- "permanent_value": {
2417
- "description": "The permanent AE cost per level.",
2418
- "type": "integer",
2419
- "minimum": 1
1613
+ "per_level": {
1614
+ "$ref": "#/$defs/BindingCostPerLevel"
2420
1615
  }
2421
1616
  },
2422
1617
  "required": [
2423
1618
  "tag",
2424
- "permanent_value"
1619
+ "per_level"
2425
1620
  ],
2426
1621
  "additionalProperties": false
2427
1622
  },
@@ -2432,7 +1627,7 @@
2432
1627
  "const": "Map"
2433
1628
  },
2434
1629
  "map": {
2435
- "$ref": "#/definitions/BindingCostMap"
1630
+ "$ref": "#/$defs/BindingCostMap"
2436
1631
  }
2437
1632
  },
2438
1633
  "required": [
@@ -2443,6 +1638,34 @@
2443
1638
  }
2444
1639
  ]
2445
1640
  },
1641
+ "FixedBindingCost": {
1642
+ "type": "object",
1643
+ "properties": {
1644
+ "permanent_value": {
1645
+ "description": "The permanent AE cost.\n\nIf the enchantment has multiple levels, it is only applied for the first\nlevel.",
1646
+ "type": "integer",
1647
+ "minimum": 1
1648
+ }
1649
+ },
1650
+ "required": [
1651
+ "permanent_value"
1652
+ ],
1653
+ "additionalProperties": false
1654
+ },
1655
+ "BindingCostPerLevel": {
1656
+ "type": "object",
1657
+ "properties": {
1658
+ "permanent_value": {
1659
+ "description": "The permanent AE cost per level.",
1660
+ "type": "integer",
1661
+ "minimum": 1
1662
+ }
1663
+ },
1664
+ "required": [
1665
+ "permanent_value"
1666
+ ],
1667
+ "additionalProperties": false
1668
+ },
2446
1669
  "BindingCostMap": {
2447
1670
  "description": "A content that is `2/4/8 permanent AE for spell-swords with the combat\ntechnique Daggers, Swords, or Two-Handed Swords` may be respresented as the\nfollowing map:\n\n```yaml\noptions:\n - permanent_value: 2\n translations:\n en-US:\n label: \"Daggers\"\n label_standalone: \"Dagger\"\n - permanent_value: 4\n translations:\n en-US:\n label: \"Swords\"\n label_standalone: \"Sword\"\n - permanent_value: 8\n translations:\n en-US:\n label: \"Two-Handed Swords\"\n label_standalone: \"Two-Handed Sword\"\nlist_prepend: \"spell-swords with the combat technique\"\n```\n\nThis will generate the exact same string as seen above.",
2448
1671
  "type": "object",
@@ -2451,7 +1674,7 @@
2451
1674
  "description": "The possible costs and associated labels.",
2452
1675
  "type": "array",
2453
1676
  "items": {
2454
- "$ref": "#/definitions/VolumeMapOption"
1677
+ "$ref": "#/$defs/VolumeMapOption"
2455
1678
  },
2456
1679
  "minItems": 2
2457
1680
  },
@@ -2460,23 +1683,7 @@
2460
1683
  "type": "object",
2461
1684
  "patternProperties": {
2462
1685
  "^[a-z]{2}-[A-Z]{2}$": {
2463
- "type": "object",
2464
- "properties": {
2465
- "list_prepend": {
2466
- "description": "Place a string between the `for` and the grouped map option labels.",
2467
- "type": "string"
2468
- },
2469
- "list_append": {
2470
- "description": "Place a string after the grouped map option labels.",
2471
- "type": "string"
2472
- },
2473
- "replacement": {
2474
- "description": "If the string from the book cannot be generated using the default\ngeneration technique, use this string. All options still need to be\ninserted propertly, since it may be used by in-game tools to provide a\nselection to players.",
2475
- "type": "string"
2476
- }
2477
- },
2478
- "required": [],
2479
- "additionalProperties": false
1686
+ "$ref": "#/$defs/BindingCostMapTranslation"
2480
1687
  }
2481
1688
  },
2482
1689
  "minProperties": 1,
@@ -2488,6 +1695,26 @@
2488
1695
  ],
2489
1696
  "additionalProperties": false
2490
1697
  },
1698
+ "BindingCostMapTranslation": {
1699
+ "type": "object",
1700
+ "properties": {
1701
+ "list_prepend": {
1702
+ "description": "Place a string between the `for` and the grouped map option labels.",
1703
+ "$ref": "./_NonEmptyString.schema.json#/$defs/NonEmptyString"
1704
+ },
1705
+ "list_append": {
1706
+ "description": "Place a string after the grouped map option labels.",
1707
+ "$ref": "./_NonEmptyString.schema.json#/$defs/NonEmptyString"
1708
+ },
1709
+ "replacement": {
1710
+ "description": "If the string from the book cannot be generated using the default\ngeneration technique, use this string. All options still need to be\ninserted propertly, since it may be used by in-game tools to provide a\nselection to players.",
1711
+ "$ref": "./_NonEmptyString.schema.json#/$defs/NonEmptyString"
1712
+ }
1713
+ },
1714
+ "required": [],
1715
+ "minProperties": 1,
1716
+ "additionalProperties": false
1717
+ },
2491
1718
  "BindingCostMapOption": {
2492
1719
  "type": "object",
2493
1720
  "properties": {
@@ -2501,23 +1728,7 @@
2501
1728
  "type": "object",
2502
1729
  "patternProperties": {
2503
1730
  "^[a-z]{2}-[A-Z]{2}$": {
2504
- "type": "object",
2505
- "properties": {
2506
- "label": {
2507
- "description": "The description of the option for cost string generation.",
2508
- "type": "string",
2509
- "minLength": 1
2510
- },
2511
- "label_standalone": {
2512
- "description": "The description of the option if used standalone. Only used if\ndifferent from `label`.",
2513
- "type": "string",
2514
- "minLength": 1
2515
- }
2516
- },
2517
- "required": [
2518
- "label"
2519
- ],
2520
- "additionalProperties": false
1731
+ "$ref": "#/$defs/BindingCostMapOptionTranslation"
2521
1732
  }
2522
1733
  },
2523
1734
  "minProperties": 1,
@@ -2529,6 +1740,23 @@
2529
1740
  ],
2530
1741
  "additionalProperties": false
2531
1742
  },
1743
+ "BindingCostMapOptionTranslation": {
1744
+ "type": "object",
1745
+ "properties": {
1746
+ "label": {
1747
+ "description": "The description of the option for cost string generation.",
1748
+ "$ref": "./_NonEmptyString.schema.json#/$defs/NonEmptyString"
1749
+ },
1750
+ "label_standalone": {
1751
+ "description": "The description of the option if used standalone. Only used if\ndifferent from `label`.",
1752
+ "$ref": "./_NonEmptyString.schema.json#/$defs/NonEmptyString"
1753
+ }
1754
+ },
1755
+ "required": [
1756
+ "label"
1757
+ ],
1758
+ "additionalProperties": false
1759
+ },
2532
1760
  "Property": {
2533
1761
  "description": "The magic property's identifier. `DependingOnProperty` can only be used if\nthe special ability has an option to select a property.",
2534
1762
  "oneOf": [
@@ -2536,11 +1764,18 @@
2536
1764
  "type": "object",
2537
1765
  "properties": {
2538
1766
  "tag": {
2539
- "const": "DependingOnProperty"
1767
+ "const": "DependingOnSelection"
1768
+ },
1769
+ "depending_on_selection": {
1770
+ "type": "object",
1771
+ "properties": {},
1772
+ "required": [],
1773
+ "additionalProperties": false
2540
1774
  }
2541
1775
  },
2542
1776
  "required": [
2543
- "tag"
1777
+ "tag",
1778
+ "depending_on_selection"
2544
1779
  ],
2545
1780
  "additionalProperties": false
2546
1781
  },
@@ -2550,24 +1785,21 @@
2550
1785
  "tag": {
2551
1786
  "const": "Fixed"
2552
1787
  },
2553
- "id": {
2554
- "description": "The property's identifier.",
2555
- "type": "integer",
2556
- "minimum": 1
1788
+ "fixed": {
1789
+ "$ref": "./_SimpleReferences.schema.json#/$defs/PropertyReference"
2557
1790
  }
2558
1791
  },
2559
1792
  "required": [
2560
1793
  "tag",
2561
- "id"
1794
+ "fixed"
2562
1795
  ],
2563
1796
  "additionalProperties": false
2564
1797
  }
2565
1798
  ]
2566
1799
  },
2567
1800
  "Aspect": {
2568
- "description": "The blessed aspect's identifier.",
2569
- "type": "integer",
2570
- "minimum": 1
1801
+ "description": "The blessed aspect.",
1802
+ "$ref": "./_SimpleReferences.schema.json#/$defs/AspectReference"
2571
1803
  },
2572
1804
  "AdvancedSpecialAbility": {
2573
1805
  "description": "A reference to an advanced special ability.",
@@ -2578,15 +1810,13 @@
2578
1810
  "tag": {
2579
1811
  "const": "General"
2580
1812
  },
2581
- "id": {
2582
- "description": "The advanced special ability's numeric identifier.",
2583
- "type": "integer",
2584
- "minimum": 1
1813
+ "general": {
1814
+ "$ref": "./_SimpleReferences.schema.json#/$defs/AdvancedSpecialAbilityReference"
2585
1815
  }
2586
1816
  },
2587
1817
  "required": [
2588
1818
  "tag",
2589
- "id"
1819
+ "general"
2590
1820
  ],
2591
1821
  "additionalProperties": false
2592
1822
  },
@@ -2596,24 +1826,13 @@
2596
1826
  "tag": {
2597
1827
  "const": "RestrictOptions"
2598
1828
  },
2599
- "id": {
2600
- "description": "The advanced special ability's numeric identifier.",
2601
- "type": "integer",
2602
- "minimum": 1
2603
- },
2604
- "option": {
2605
- "description": "Specify the select option(s) that only are allowed for the referenced\nadvanced special ability; others are disallowed.",
2606
- "type": "array",
2607
- "items": {
2608
- "$ref": "./_Identifier.schema.json#/definitions/AdvancedSpecialAbilityRestrictedOptionIdentifier"
2609
- },
2610
- "minItems": 1
1829
+ "restrict_options": {
1830
+ "$ref": "#/$defs/RestrictAdvancedSpecialAbilityOptions"
2611
1831
  }
2612
1832
  },
2613
1833
  "required": [
2614
1834
  "tag",
2615
- "id",
2616
- "option"
1835
+ "restrict_options"
2617
1836
  ],
2618
1837
  "additionalProperties": false
2619
1838
  },
@@ -2623,42 +1842,13 @@
2623
1842
  "tag": {
2624
1843
  "const": "OneOf"
2625
1844
  },
2626
- "options": {
2627
- "description": "The possible advanced special abilities.",
2628
- "type": "object",
2629
- "properties": {
2630
- "id": {
2631
- "description": "The advanced special ability's numeric identifier.",
2632
- "type": "integer",
2633
- "minimum": 1
2634
- }
2635
- },
2636
- "required": [
2637
- "id"
2638
- ],
2639
- "additionalProperties": false
2640
- },
2641
- "is_selection_required_on_purchase": {
2642
- "description": "Do have to choose on when buying the special ability? Otherwise the\ndecision can be made later.",
2643
- "type": "boolean"
2644
- },
2645
- "option": {
2646
- "description": "Specify the select option(s) that only are allowed for the referenced\nadvanced special ability; others are disallowed.",
2647
- "type": "array",
2648
- "items": {
2649
- "$ref": "./_Identifier.schema.json#/definitions/AdvancedSpecialAbilityRestrictedOptionIdentifier"
2650
- },
2651
- "minItems": 1
2652
- },
2653
- "display_option": {
2654
- "$ref": "./prerequisites/DisplayOption.schema.json#/definitions/DisplayOption"
1845
+ "one_of": {
1846
+ "$ref": "#/$defs/OneOfAdvancedSpecialAbilityOptions"
2655
1847
  }
2656
1848
  },
2657
1849
  "required": [
2658
1850
  "tag",
2659
- "options",
2660
- "is_selection_required_on_purchase",
2661
- "option"
1851
+ "one_of"
2662
1852
  ],
2663
1853
  "additionalProperties": false
2664
1854
  },
@@ -2668,88 +1858,124 @@
2668
1858
  "tag": {
2669
1859
  "const": "DeriveFromExternalOption"
2670
1860
  },
2671
- "external_entry": {
2672
- "description": "The possible advanced special abilities.",
2673
- "$ref": "#/definitions/AdvancedSpecialAbilityDerivedExternalEntryId"
2674
- },
2675
- "mappings": {
2676
- "type": "array",
2677
- "items": {
2678
- "type": "object",
2679
- "properties": {
2680
- "from_option": {
2681
- "description": "The select option's identifier.",
2682
- "$ref": "#/definitions/AdvancedSpecialAbilityDerivedExternalEntryOptionId"
2683
- },
2684
- "to_advanced": {
2685
- "description": "The advanced special ability's identifier.",
2686
- "type": "object",
2687
- "properties": {
2688
- "id": {
2689
- "description": "The advanced special ability's numeric identifier.",
2690
- "type": "integer",
2691
- "minimum": 1
2692
- }
2693
- },
2694
- "required": [
2695
- "id"
2696
- ],
2697
- "additionalProperties": false
2698
- }
2699
- },
2700
- "required": [
2701
- "from_option",
2702
- "to_advanced"
2703
- ],
2704
- "additionalProperties": false
2705
- },
2706
- "minItems": 0
2707
- },
2708
- "display_option": {
2709
- "$ref": "./prerequisites/DisplayOption.schema.json#/definitions/DisplayOption"
2710
- },
2711
- "is_selection_required_on_purchase": {
2712
- "description": "Do have to choose on when buying the special ability? Otherwise the\ndecision can be made later.",
2713
- "type": "boolean"
2714
- },
2715
- "option": {
2716
- "description": "Specify the select option(s) that only are allowed for the referenced\nadvanced special ability; others are disallowed.",
2717
- "type": "array",
2718
- "items": {
2719
- "$ref": "./_Identifier.schema.json#/definitions/AdvancedSpecialAbilityRestrictedOptionIdentifier"
2720
- },
2721
- "minItems": 1
1861
+ "derive_from_external_option": {
1862
+ "$ref": "#/$defs/AdvancedSpecialAbilityDerivedFromExternalOption"
2722
1863
  }
2723
1864
  },
2724
1865
  "required": [
2725
1866
  "tag",
2726
- "external_entry",
2727
- "mappings",
2728
- "is_selection_required_on_purchase",
2729
- "option"
1867
+ "derive_from_external_option"
2730
1868
  ],
2731
1869
  "additionalProperties": false
2732
1870
  }
2733
1871
  ]
2734
1872
  },
1873
+ "RestrictAdvancedSpecialAbilityOptions": {
1874
+ "type": "object",
1875
+ "properties": {
1876
+ "id": {
1877
+ "description": "The advanced special ability's numeric identifier.",
1878
+ "type": "integer",
1879
+ "minimum": 1
1880
+ },
1881
+ "option": {
1882
+ "description": "Specify the select option(s) that only are allowed for the referenced\nadvanced special ability; others are disallowed.",
1883
+ "type": "array",
1884
+ "items": {
1885
+ "$ref": "./_Identifier.schema.json#/$defs/AdvancedSpecialAbilityRestrictedOptionIdentifier"
1886
+ },
1887
+ "minItems": 1
1888
+ }
1889
+ },
1890
+ "required": [
1891
+ "id",
1892
+ "option"
1893
+ ],
1894
+ "additionalProperties": false
1895
+ },
1896
+ "OneOfAdvancedSpecialAbilityOptions": {
1897
+ "type": "object",
1898
+ "properties": {
1899
+ "options": {
1900
+ "description": "The possible advanced special abilities.",
1901
+ "$ref": "./_SimpleReferences.schema.json#/$defs/AdvancedSpecialAbilityReference"
1902
+ },
1903
+ "is_selection_required_on_purchase": {
1904
+ "description": "Do have to choose the advanced special ability when buying the style\nspecial ability? Otherwise the decision can be made later.",
1905
+ "type": "boolean"
1906
+ },
1907
+ "display_option": {
1908
+ "$ref": "./prerequisites/DisplayOption.schema.json#/$defs/DisplayOption"
1909
+ }
1910
+ },
1911
+ "required": [
1912
+ "options",
1913
+ "is_selection_required_on_purchase"
1914
+ ],
1915
+ "additionalProperties": false
1916
+ },
1917
+ "AdvancedSpecialAbilityDerivedFromExternalOption": {
1918
+ "type": "object",
1919
+ "properties": {
1920
+ "external_entry": {
1921
+ "description": "The possible advanced special abilities.",
1922
+ "$ref": "./_Identifier.schema.json#/$defs/MagicalTraditionIdentifier"
1923
+ },
1924
+ "map": {
1925
+ "description": "Map options from the external entry to allowed advanced special abilities.",
1926
+ "type": "array",
1927
+ "items": {
1928
+ "$ref": "#/$defs/AdvancedSpecialAbilityDerivedFromExternalOptionMapping"
1929
+ },
1930
+ "minItems": 1
1931
+ },
1932
+ "display_option": {
1933
+ "$ref": "./prerequisites/DisplayOption.schema.json#/$defs/DisplayOption"
1934
+ }
1935
+ },
1936
+ "required": [
1937
+ "external_entry",
1938
+ "map"
1939
+ ],
1940
+ "additionalProperties": false
1941
+ },
1942
+ "AdvancedSpecialAbilityDerivedFromExternalOptionMapping": {
1943
+ "description": "Mapping from an option of the external entry to an allowed advanced special\nability.",
1944
+ "type": "object",
1945
+ "properties": {
1946
+ "from_option": {
1947
+ "description": "The select option's identifier.",
1948
+ "$ref": "./_Identifier.schema.json#/$defs/PatronIdentifier"
1949
+ },
1950
+ "to_advanced": {
1951
+ "description": "The advanced special ability's identifier.",
1952
+ "$ref": "./_SimpleReferences.schema.json#/$defs/AdvancedSpecialAbilityReference"
1953
+ }
1954
+ },
1955
+ "required": [
1956
+ "from_option",
1957
+ "to_advanced"
1958
+ ],
1959
+ "additionalProperties": false
1960
+ },
2735
1961
  "AdvancedSpecialAbilityDerivedExternalEntryId": {
2736
- "$ref": "./_Identifier.schema.json#/definitions/MagicalTraditionIdentifier"
1962
+ "$ref": "./_Identifier.schema.json#/$defs/MagicalTraditionIdentifier"
2737
1963
  },
2738
1964
  "AdvancedSpecialAbilityDerivedExternalEntryOptionId": {
2739
- "$ref": "./_Identifier.schema.json#/definitions/PatronIdentifier"
1965
+ "$ref": "./_Identifier.schema.json#/$defs/PatronIdentifier"
2740
1966
  },
2741
1967
  "AdvancedSpecialAbilities": {
2742
1968
  "description": "The Advanced Special Abilities for the respective Style Special Ability.\nSometimes, only a specific select option or a set of select options of an\nentry is allowed, which can be modelled by the option property. It can also\nbe that you can choose from a set of special abilities, but then you can't\nspecify an option.",
2743
1969
  "type": "array",
2744
1970
  "items": [
2745
1971
  {
2746
- "$ref": "#/definitions/AdvancedSpecialAbility"
1972
+ "$ref": "#/$defs/AdvancedSpecialAbility"
2747
1973
  },
2748
1974
  {
2749
- "$ref": "#/definitions/AdvancedSpecialAbility"
1975
+ "$ref": "#/$defs/AdvancedSpecialAbility"
2750
1976
  },
2751
1977
  {
2752
- "$ref": "#/definitions/AdvancedSpecialAbility"
1978
+ "$ref": "#/$defs/AdvancedSpecialAbility"
2753
1979
  }
2754
1980
  ],
2755
1981
  "minItems": 3,
@@ -2763,10 +1989,17 @@
2763
1989
  "properties": {
2764
1990
  "tag": {
2765
1991
  "const": "None"
1992
+ },
1993
+ "none": {
1994
+ "type": "object",
1995
+ "properties": {},
1996
+ "required": [],
1997
+ "additionalProperties": false
2766
1998
  }
2767
1999
  },
2768
2000
  "required": [
2769
- "tag"
2001
+ "tag",
2002
+ "none"
2770
2003
  ],
2771
2004
  "additionalProperties": false
2772
2005
  },
@@ -2775,10 +2008,17 @@
2775
2008
  "properties": {
2776
2009
  "tag": {
2777
2010
  "const": "DependingOnCombatStyle"
2011
+ },
2012
+ "depending_on_combat_style": {
2013
+ "type": "object",
2014
+ "properties": {},
2015
+ "required": [],
2016
+ "additionalProperties": false
2778
2017
  }
2779
2018
  },
2780
2019
  "required": [
2781
- "tag"
2020
+ "tag",
2021
+ "depending_on_combat_style"
2782
2022
  ],
2783
2023
  "additionalProperties": false
2784
2024
  },
@@ -2788,16 +2028,13 @@
2788
2028
  "tag": {
2789
2029
  "const": "All"
2790
2030
  },
2791
- "restrictions": {
2792
- "type": "array",
2793
- "items": {
2794
- "$ref": "#/definitions/ApplicableAllCombatTechniquesRestriction"
2795
- },
2796
- "minItems": 1
2031
+ "all": {
2032
+ "$ref": "#/$defs/AllApplicableCombatTechniques"
2797
2033
  }
2798
2034
  },
2799
2035
  "required": [
2800
- "tag"
2036
+ "tag",
2037
+ "all"
2801
2038
  ],
2802
2039
  "additionalProperties": false
2803
2040
  },
@@ -2807,16 +2044,13 @@
2807
2044
  "tag": {
2808
2045
  "const": "AllClose"
2809
2046
  },
2810
- "restrictions": {
2811
- "type": "array",
2812
- "items": {
2813
- "$ref": "#/definitions/ApplicableCloseCombatTechniquesRestriction"
2814
- },
2815
- "minItems": 1
2047
+ "all_close": {
2048
+ "$ref": "#/$defs/AllApplicableCloseCombatTechniques"
2816
2049
  }
2817
2050
  },
2818
2051
  "required": [
2819
- "tag"
2052
+ "tag",
2053
+ "all_close"
2820
2054
  ],
2821
2055
  "additionalProperties": false
2822
2056
  },
@@ -2826,16 +2060,13 @@
2826
2060
  "tag": {
2827
2061
  "const": "AllRanged"
2828
2062
  },
2829
- "restrictions": {
2830
- "type": "array",
2831
- "items": {
2832
- "$ref": "#/definitions/ApplicableRangedCombatTechniquesRestriction"
2833
- },
2834
- "minItems": 1
2063
+ "all_ranged": {
2064
+ "$ref": "#/$defs/AllApplicableRangedCombatTechniques"
2835
2065
  }
2836
2066
  },
2837
2067
  "required": [
2838
- "tag"
2068
+ "tag",
2069
+ "all_ranged"
2839
2070
  ],
2840
2071
  "additionalProperties": false
2841
2072
  },
@@ -2845,38 +2076,95 @@
2845
2076
  "tag": {
2846
2077
  "const": "Specific"
2847
2078
  },
2848
- "list": {
2849
- "type": "array",
2850
- "items": {
2851
- "type": "object",
2852
- "properties": {
2853
- "id": {
2854
- "$ref": "./_Identifier.schema.json#/definitions/CombatTechniqueIdentifier"
2855
- },
2856
- "restrictions": {
2857
- "type": "array",
2858
- "items": {
2859
- "$ref": "#/definitions/ApplicableSpecificCombatTechniquesRestriction"
2860
- },
2861
- "minItems": 1
2862
- }
2863
- },
2864
- "required": [
2865
- "id"
2866
- ],
2867
- "additionalProperties": false
2868
- },
2869
- "minItems": 1
2079
+ "specific": {
2080
+ "$ref": "#/$defs/SpecificApplicableCombatTechniques"
2870
2081
  }
2871
2082
  },
2872
2083
  "required": [
2873
2084
  "tag",
2874
- "list"
2085
+ "specific"
2875
2086
  ],
2876
2087
  "additionalProperties": false
2877
2088
  }
2878
2089
  ]
2879
2090
  },
2091
+ "AllApplicableCombatTechniques": {
2092
+ "type": "object",
2093
+ "properties": {
2094
+ "restrictions": {
2095
+ "type": "array",
2096
+ "items": {
2097
+ "$ref": "#/$defs/ApplicableAllCombatTechniquesRestriction"
2098
+ },
2099
+ "minItems": 1
2100
+ }
2101
+ },
2102
+ "required": [],
2103
+ "additionalProperties": false
2104
+ },
2105
+ "AllApplicableCloseCombatTechniques": {
2106
+ "type": "object",
2107
+ "properties": {
2108
+ "restrictions": {
2109
+ "type": "array",
2110
+ "items": {
2111
+ "$ref": "#/$defs/ApplicableCloseCombatTechniquesRestriction"
2112
+ },
2113
+ "minItems": 1
2114
+ }
2115
+ },
2116
+ "required": [],
2117
+ "additionalProperties": false
2118
+ },
2119
+ "AllApplicableRangedCombatTechniques": {
2120
+ "type": "object",
2121
+ "properties": {
2122
+ "restrictions": {
2123
+ "type": "array",
2124
+ "items": {
2125
+ "$ref": "#/$defs/ApplicableRangedCombatTechniquesRestriction"
2126
+ },
2127
+ "minItems": 1
2128
+ }
2129
+ },
2130
+ "required": [],
2131
+ "additionalProperties": false
2132
+ },
2133
+ "SpecificApplicableCombatTechniques": {
2134
+ "type": "object",
2135
+ "properties": {
2136
+ "list": {
2137
+ "type": "array",
2138
+ "items": {
2139
+ "$ref": "#/$defs/SpecificApplicableCombatTechnique"
2140
+ },
2141
+ "minItems": 1
2142
+ }
2143
+ },
2144
+ "required": [
2145
+ "list"
2146
+ ],
2147
+ "additionalProperties": false
2148
+ },
2149
+ "SpecificApplicableCombatTechnique": {
2150
+ "type": "object",
2151
+ "properties": {
2152
+ "id": {
2153
+ "$ref": "./_Identifier.schema.json#/$defs/CombatTechniqueIdentifier"
2154
+ },
2155
+ "restrictions": {
2156
+ "type": "array",
2157
+ "items": {
2158
+ "$ref": "#/$defs/ApplicableSpecificCombatTechniquesRestriction"
2159
+ },
2160
+ "minItems": 1
2161
+ }
2162
+ },
2163
+ "required": [
2164
+ "id"
2165
+ ],
2166
+ "additionalProperties": false
2167
+ },
2880
2168
  "ApplicableAllCombatTechniquesRestriction": {
2881
2169
  "oneOf": [
2882
2170
  {
@@ -2884,10 +2172,17 @@
2884
2172
  "properties": {
2885
2173
  "tag": {
2886
2174
  "const": "Improvised"
2175
+ },
2176
+ "improvised": {
2177
+ "type": "object",
2178
+ "properties": {},
2179
+ "required": [],
2180
+ "additionalProperties": false
2887
2181
  }
2888
2182
  },
2889
2183
  "required": [
2890
- "tag"
2184
+ "tag",
2185
+ "improvised"
2891
2186
  ],
2892
2187
  "additionalProperties": false
2893
2188
  },
@@ -2896,10 +2191,17 @@
2896
2191
  "properties": {
2897
2192
  "tag": {
2898
2193
  "const": "PointedBlade"
2194
+ },
2195
+ "pointed_blade": {
2196
+ "type": "object",
2197
+ "properties": {},
2198
+ "required": [],
2199
+ "additionalProperties": false
2899
2200
  }
2900
2201
  },
2901
2202
  "required": [
2902
- "tag"
2203
+ "tag",
2204
+ "pointed_blade"
2903
2205
  ],
2904
2206
  "additionalProperties": false
2905
2207
  },
@@ -2908,10 +2210,17 @@
2908
2210
  "properties": {
2909
2211
  "tag": {
2910
2212
  "const": "Mount"
2213
+ },
2214
+ "mount": {
2215
+ "type": "object",
2216
+ "properties": {},
2217
+ "required": [],
2218
+ "additionalProperties": false
2911
2219
  }
2912
2220
  },
2913
2221
  "required": [
2914
- "tag"
2222
+ "tag",
2223
+ "mount"
2915
2224
  ],
2916
2225
  "additionalProperties": false
2917
2226
  },
@@ -2921,15 +2230,13 @@
2921
2230
  "tag": {
2922
2231
  "const": "Race"
2923
2232
  },
2924
- "id": {
2925
- "description": "The race's numeric identifier.",
2926
- "type": "integer",
2927
- "minimum": 1
2233
+ "race": {
2234
+ "$ref": "#/$defs/ApplicableCombatTechniquesRaceRestriction"
2928
2235
  }
2929
2236
  },
2930
2237
  "required": [
2931
2238
  "tag",
2932
- "id"
2239
+ "race"
2933
2240
  ],
2934
2241
  "additionalProperties": false
2935
2242
  },
@@ -2939,19 +2246,28 @@
2939
2246
  "tag": {
2940
2247
  "const": "ExcludeCombatTechniques"
2941
2248
  },
2942
- "list": {
2943
- "description": "The combat techniques this combat special ability is **not** applicable\nto.",
2944
- "type": "array",
2945
- "items": {
2946
- "$ref": "./_Identifier.schema.json#/definitions/CombatTechniqueIdentifier"
2249
+ "exclude_combat_techniques": {
2250
+ "type": "object",
2251
+ "properties": {
2252
+ "list": {
2253
+ "description": "The combat techniques this combat special ability is **not** applicable to.",
2254
+ "type": "array",
2255
+ "items": {
2256
+ "$ref": "./_SimpleReferences.schema.json#/$defs/CombatTechniqueReference"
2257
+ },
2258
+ "minItems": 1,
2259
+ "uniqueItems": true
2260
+ }
2947
2261
  },
2948
- "minItems": 1,
2949
- "uniqueItems": true
2262
+ "required": [
2263
+ "list"
2264
+ ],
2265
+ "additionalProperties": false
2950
2266
  }
2951
2267
  },
2952
2268
  "required": [
2953
2269
  "tag",
2954
- "list"
2270
+ "exclude_combat_techniques"
2955
2271
  ],
2956
2272
  "additionalProperties": false
2957
2273
  }
@@ -2964,10 +2280,17 @@
2964
2280
  "properties": {
2965
2281
  "tag": {
2966
2282
  "const": "Improvised"
2283
+ },
2284
+ "improvised": {
2285
+ "type": "object",
2286
+ "properties": {},
2287
+ "required": [],
2288
+ "additionalProperties": false
2967
2289
  }
2968
2290
  },
2969
2291
  "required": [
2970
- "tag"
2292
+ "tag",
2293
+ "improvised"
2971
2294
  ],
2972
2295
  "additionalProperties": false
2973
2296
  },
@@ -2976,10 +2299,17 @@
2976
2299
  "properties": {
2977
2300
  "tag": {
2978
2301
  "const": "PointedBlade"
2302
+ },
2303
+ "pointed_blade": {
2304
+ "type": "object",
2305
+ "properties": {},
2306
+ "required": [],
2307
+ "additionalProperties": false
2979
2308
  }
2980
2309
  },
2981
2310
  "required": [
2982
- "tag"
2311
+ "tag",
2312
+ "pointed_blade"
2983
2313
  ],
2984
2314
  "additionalProperties": false
2985
2315
  },
@@ -2988,10 +2318,17 @@
2988
2318
  "properties": {
2989
2319
  "tag": {
2990
2320
  "const": "Mount"
2321
+ },
2322
+ "mount": {
2323
+ "type": "object",
2324
+ "properties": {},
2325
+ "required": [],
2326
+ "additionalProperties": false
2991
2327
  }
2992
2328
  },
2993
2329
  "required": [
2994
- "tag"
2330
+ "tag",
2331
+ "mount"
2995
2332
  ],
2996
2333
  "additionalProperties": false
2997
2334
  },
@@ -3000,10 +2337,17 @@
3000
2337
  "properties": {
3001
2338
  "tag": {
3002
2339
  "const": "HasParry"
2340
+ },
2341
+ "has_parry": {
2342
+ "type": "object",
2343
+ "properties": {},
2344
+ "required": [],
2345
+ "additionalProperties": false
3003
2346
  }
3004
2347
  },
3005
2348
  "required": [
3006
- "tag"
2349
+ "tag",
2350
+ "has_parry"
3007
2351
  ],
3008
2352
  "additionalProperties": false
3009
2353
  },
@@ -3012,10 +2356,17 @@
3012
2356
  "properties": {
3013
2357
  "tag": {
3014
2358
  "const": "OneHanded"
2359
+ },
2360
+ "one_handed": {
2361
+ "type": "object",
2362
+ "properties": {},
2363
+ "required": [],
2364
+ "additionalProperties": false
3015
2365
  }
3016
2366
  },
3017
2367
  "required": [
3018
- "tag"
2368
+ "tag",
2369
+ "one_handed"
3019
2370
  ],
3020
2371
  "additionalProperties": false
3021
2372
  },
@@ -3024,10 +2375,17 @@
3024
2375
  "properties": {
3025
2376
  "tag": {
3026
2377
  "const": "ParryingWeapon"
2378
+ },
2379
+ "parrying_weapon": {
2380
+ "type": "object",
2381
+ "properties": {},
2382
+ "required": [],
2383
+ "additionalProperties": false
3027
2384
  }
3028
2385
  },
3029
2386
  "required": [
3030
- "tag"
2387
+ "tag",
2388
+ "parrying_weapon"
3031
2389
  ],
3032
2390
  "additionalProperties": false
3033
2391
  },
@@ -3037,15 +2395,13 @@
3037
2395
  "tag": {
3038
2396
  "const": "Race"
3039
2397
  },
3040
- "id": {
3041
- "description": "The race's numeric identifier.",
3042
- "type": "integer",
3043
- "minimum": 1
2398
+ "race": {
2399
+ "$ref": "#/$defs/ApplicableCombatTechniquesRaceRestriction"
3044
2400
  }
3045
2401
  },
3046
2402
  "required": [
3047
2403
  "tag",
3048
- "id"
2404
+ "race"
3049
2405
  ],
3050
2406
  "additionalProperties": false
3051
2407
  },
@@ -3055,30 +2411,28 @@
3055
2411
  "tag": {
3056
2412
  "const": "ExcludeCombatTechniques"
3057
2413
  },
3058
- "list": {
3059
- "description": "The combat techniques this combat special ability is **not** applicable\nto.",
3060
- "type": "array",
3061
- "items": {
3062
- "type": "object",
3063
- "properties": {
3064
- "id": {
3065
- "description": "The close combat technique's numeric identifier.",
3066
- "type": "integer",
3067
- "minimum": 1
3068
- }
3069
- },
3070
- "required": [
3071
- "id"
3072
- ],
3073
- "additionalProperties": false
2414
+ "exclude_combat_techniques": {
2415
+ "type": "object",
2416
+ "properties": {
2417
+ "list": {
2418
+ "description": "The combat techniques this combat special ability is **not** applicable to.",
2419
+ "type": "array",
2420
+ "items": {
2421
+ "$ref": "./_SimpleReferences.schema.json#/$defs/CloseCombatTechniqueReference"
2422
+ },
2423
+ "minItems": 1,
2424
+ "uniqueItems": true
2425
+ }
3074
2426
  },
3075
- "minItems": 1,
3076
- "uniqueItems": true
2427
+ "required": [
2428
+ "list"
2429
+ ],
2430
+ "additionalProperties": false
3077
2431
  }
3078
2432
  },
3079
2433
  "required": [
3080
2434
  "tag",
3081
- "list"
2435
+ "exclude_combat_techniques"
3082
2436
  ],
3083
2437
  "additionalProperties": false
3084
2438
  }
@@ -3091,10 +2445,17 @@
3091
2445
  "properties": {
3092
2446
  "tag": {
3093
2447
  "const": "Improvised"
2448
+ },
2449
+ "improvised": {
2450
+ "type": "object",
2451
+ "properties": {},
2452
+ "required": [],
2453
+ "additionalProperties": false
3094
2454
  }
3095
2455
  },
3096
2456
  "required": [
3097
- "tag"
2457
+ "tag",
2458
+ "improvised"
3098
2459
  ],
3099
2460
  "additionalProperties": false
3100
2461
  },
@@ -3103,10 +2464,17 @@
3103
2464
  "properties": {
3104
2465
  "tag": {
3105
2466
  "const": "PointedBlade"
2467
+ },
2468
+ "pointed_blade": {
2469
+ "type": "object",
2470
+ "properties": {},
2471
+ "required": [],
2472
+ "additionalProperties": false
3106
2473
  }
3107
2474
  },
3108
2475
  "required": [
3109
- "tag"
2476
+ "tag",
2477
+ "pointed_blade"
3110
2478
  ],
3111
2479
  "additionalProperties": false
3112
2480
  },
@@ -3115,10 +2483,17 @@
3115
2483
  "properties": {
3116
2484
  "tag": {
3117
2485
  "const": "Mount"
2486
+ },
2487
+ "mount": {
2488
+ "type": "object",
2489
+ "properties": {},
2490
+ "required": [],
2491
+ "additionalProperties": false
3118
2492
  }
3119
2493
  },
3120
2494
  "required": [
3121
- "tag"
2495
+ "tag",
2496
+ "mount"
3122
2497
  ],
3123
2498
  "additionalProperties": false
3124
2499
  },
@@ -3128,15 +2503,13 @@
3128
2503
  "tag": {
3129
2504
  "const": "Race"
3130
2505
  },
3131
- "id": {
3132
- "description": "The race's numeric identifier.",
3133
- "type": "integer",
3134
- "minimum": 1
2506
+ "race": {
2507
+ "$ref": "#/$defs/ApplicableCombatTechniquesRaceRestriction"
3135
2508
  }
3136
2509
  },
3137
2510
  "required": [
3138
2511
  "tag",
3139
- "id"
2512
+ "race"
3140
2513
  ],
3141
2514
  "additionalProperties": false
3142
2515
  },
@@ -3146,30 +2519,28 @@
3146
2519
  "tag": {
3147
2520
  "const": "ExcludeCombatTechniques"
3148
2521
  },
3149
- "list": {
3150
- "description": "The combat techniques this combat special ability is **not** applicable\nto.",
3151
- "type": "array",
3152
- "items": {
3153
- "type": "object",
3154
- "properties": {
3155
- "id": {
3156
- "description": "The ranged combat technique's numeric identifier.",
3157
- "type": "integer",
3158
- "minimum": 1
3159
- }
3160
- },
3161
- "required": [
3162
- "id"
3163
- ],
3164
- "additionalProperties": false
2522
+ "exclude_combat_techniques": {
2523
+ "type": "object",
2524
+ "properties": {
2525
+ "list": {
2526
+ "description": "The combat techniques this combat special ability is **not** applicable to.",
2527
+ "type": "array",
2528
+ "items": {
2529
+ "$ref": "./_SimpleReferences.schema.json#/$defs/RangedCombatTechniqueReference"
2530
+ },
2531
+ "minItems": 1,
2532
+ "uniqueItems": true
2533
+ }
3165
2534
  },
3166
- "minItems": 1,
3167
- "uniqueItems": true
2535
+ "required": [
2536
+ "list"
2537
+ ],
2538
+ "additionalProperties": false
3168
2539
  }
3169
2540
  },
3170
2541
  "required": [
3171
2542
  "tag",
3172
- "list"
2543
+ "exclude_combat_techniques"
3173
2544
  ],
3174
2545
  "additionalProperties": false
3175
2546
  }
@@ -3182,10 +2553,17 @@
3182
2553
  "properties": {
3183
2554
  "tag": {
3184
2555
  "const": "Improvised"
2556
+ },
2557
+ "improvised": {
2558
+ "type": "object",
2559
+ "properties": {},
2560
+ "required": [],
2561
+ "additionalProperties": false
3185
2562
  }
3186
2563
  },
3187
2564
  "required": [
3188
- "tag"
2565
+ "tag",
2566
+ "improvised"
3189
2567
  ],
3190
2568
  "additionalProperties": false
3191
2569
  },
@@ -3194,10 +2572,17 @@
3194
2572
  "properties": {
3195
2573
  "tag": {
3196
2574
  "const": "PointedBlade"
2575
+ },
2576
+ "pointed_blade": {
2577
+ "type": "object",
2578
+ "properties": {},
2579
+ "required": [],
2580
+ "additionalProperties": false
3197
2581
  }
3198
2582
  },
3199
2583
  "required": [
3200
- "tag"
2584
+ "tag",
2585
+ "pointed_blade"
3201
2586
  ],
3202
2587
  "additionalProperties": false
3203
2588
  },
@@ -3206,10 +2591,17 @@
3206
2591
  "properties": {
3207
2592
  "tag": {
3208
2593
  "const": "Mount"
2594
+ },
2595
+ "mount": {
2596
+ "type": "object",
2597
+ "properties": {},
2598
+ "required": [],
2599
+ "additionalProperties": false
3209
2600
  }
3210
2601
  },
3211
2602
  "required": [
3212
- "tag"
2603
+ "tag",
2604
+ "mount"
3213
2605
  ],
3214
2606
  "additionalProperties": false
3215
2607
  },
@@ -3219,15 +2611,13 @@
3219
2611
  "tag": {
3220
2612
  "const": "Race"
3221
2613
  },
3222
- "id": {
3223
- "description": "The race's numeric identifier.",
3224
- "type": "integer",
3225
- "minimum": 1
2614
+ "race": {
2615
+ "$ref": "#/$defs/ApplicableCombatTechniquesRaceRestriction"
3226
2616
  }
3227
2617
  },
3228
2618
  "required": [
3229
2619
  "tag",
3230
- "id"
2620
+ "race"
3231
2621
  ],
3232
2622
  "additionalProperties": false
3233
2623
  },
@@ -3238,9 +2628,7 @@
3238
2628
  "const": "Level"
3239
2629
  },
3240
2630
  "level": {
3241
- "description": "The combat special ability is only applicable on a certain level.",
3242
- "type": "integer",
3243
- "minimum": 1
2631
+ "$ref": "#/$defs/ApplicableCombatTechniquesLevelRestriction"
3244
2632
  }
3245
2633
  },
3246
2634
  "required": [
@@ -3255,91 +2643,54 @@
3255
2643
  "tag": {
3256
2644
  "const": "Weapons"
3257
2645
  },
3258
- "list": {
3259
- "description": "The specific weapons this combat special ability is only applicable to.",
3260
- "type": "array",
3261
- "items": {
3262
- "type": "object",
3263
- "properties": {
3264
- "id": {
3265
- "description": "The weapon's numeric identifier.",
3266
- "type": "integer",
3267
- "minimum": 1
3268
- }
3269
- },
3270
- "required": [
3271
- "id"
3272
- ],
3273
- "additionalProperties": false
3274
- },
3275
- "minItems": 1,
3276
- "uniqueItems": true
2646
+ "weapons": {
2647
+ "$ref": "#/$defs/ApplicableCombatTechniquesWeaponRestriction"
3277
2648
  }
3278
2649
  },
3279
2650
  "required": [
3280
2651
  "tag",
3281
- "list"
2652
+ "weapons"
3282
2653
  ],
3283
2654
  "additionalProperties": false
3284
2655
  }
3285
2656
  ]
3286
2657
  },
3287
- "AdventurePointsValue": {
3288
- "oneOf": [
3289
- {
3290
- "type": "object",
3291
- "properties": {
3292
- "tag": {
3293
- "const": "Fixed"
3294
- },
3295
- "value": {
3296
- "description": "A fixed adventure points value. If the entry has levels, this is the cost\nfor each level as well.",
3297
- "$ref": "#/definitions/AdventurePointsSingleValue"
3298
- }
3299
- },
3300
- "required": [
3301
- "tag",
3302
- "value"
3303
- ],
3304
- "additionalProperties": false
3305
- },
3306
- {
3307
- "type": "object",
3308
- "properties": {
3309
- "tag": {
3310
- "const": "ByLevel"
3311
- },
3312
- "values": {
3313
- "description": "An entry with levels may have different costs for each level. The length\nof the list must match the amount of levels the special ability has.",
3314
- "type": "array",
3315
- "items": {
3316
- "$ref": "#/definitions/AdventurePointsSingleValue"
3317
- },
3318
- "minItems": 2
3319
- }
3320
- },
3321
- "required": [
3322
- "tag",
3323
- "values"
3324
- ],
3325
- "additionalProperties": false
3326
- },
3327
- {
3328
- "type": "object",
3329
- "properties": {
3330
- "tag": {
3331
- "description": "Used if AP value is defined by the selected option(s) or special rules.",
3332
- "const": "Indefinite"
3333
- }
2658
+ "ApplicableCombatTechniquesRaceRestriction": {
2659
+ "$ref": "./_SimpleReferences.schema.json#/$defs/RaceReference"
2660
+ },
2661
+ "ApplicableCombatTechniquesLevelRestriction": {
2662
+ "type": "object",
2663
+ "properties": {
2664
+ "level": {
2665
+ "description": "The combat special ability is only applicable on a certain level.",
2666
+ "type": "integer",
2667
+ "minimum": 1
2668
+ }
2669
+ },
2670
+ "required": [
2671
+ "level"
2672
+ ],
2673
+ "additionalProperties": false
2674
+ },
2675
+ "ApplicableCombatTechniquesWeaponRestriction": {
2676
+ "type": "object",
2677
+ "properties": {
2678
+ "list": {
2679
+ "description": "The specific weapons this combat special ability is only applicable to.",
2680
+ "type": "array",
2681
+ "items": {
2682
+ "$ref": "./_SimpleReferences.schema.json#/$defs/WeaponReference"
3334
2683
  },
3335
- "required": [
3336
- "tag"
3337
- ],
3338
- "additionalProperties": false
2684
+ "minItems": 1,
2685
+ "uniqueItems": true
3339
2686
  }
3340
- ]
2687
+ },
2688
+ "required": [
2689
+ "list"
2690
+ ],
2691
+ "additionalProperties": false
3341
2692
  },
3342
- "AdventurePointsValueAdvantagesDisadvantages": {
2693
+ "AdventurePointsValue": {
3343
2694
  "oneOf": [
3344
2695
  {
3345
2696
  "type": "object",
@@ -3347,18 +2698,13 @@
3347
2698
  "tag": {
3348
2699
  "const": "Fixed"
3349
2700
  },
3350
- "value": {
3351
- "description": "A fixed adventure points value. If the entry has levels, this is the cost\nfor each level as well.",
3352
- "$ref": "#/definitions/AdventurePointsSingleValue"
3353
- },
3354
- "does_not_contribute_to_maximum": {
3355
- "description": "The AP Value of the entry does not contribute to the AP maximum for\nadvantages or disadvantages, so it may also be bought if the maximum has\nalready been reached.",
3356
- "const": true
2701
+ "fixed": {
2702
+ "$ref": "#/$defs/FixedAdventurePointsValue"
3357
2703
  }
3358
2704
  },
3359
2705
  "required": [
3360
2706
  "tag",
3361
- "value"
2707
+ "fixed"
3362
2708
  ],
3363
2709
  "additionalProperties": false
3364
2710
  },
@@ -3368,22 +2714,13 @@
3368
2714
  "tag": {
3369
2715
  "const": "ByLevel"
3370
2716
  },
3371
- "values": {
3372
- "description": "An entry with levels may have different costs for each level. The length\nof the list must match the amount of levels the special ability has.",
3373
- "type": "array",
3374
- "items": {
3375
- "$ref": "#/definitions/AdventurePointsSingleValue"
3376
- },
3377
- "minItems": 2
3378
- },
3379
- "does_not_contribute_to_maximum": {
3380
- "description": "The AP Value of the entry does not contribute to the AP maximum for\nadvantages or disadvantages, so it may also be bought if the maximum has\nalready been reached.",
3381
- "const": true
2717
+ "by_level": {
2718
+ "$ref": "#/$defs/AdventurePointsValueByLevel"
3382
2719
  }
3383
2720
  },
3384
2721
  "required": [
3385
2722
  "tag",
3386
- "values"
2723
+ "by_level"
3387
2724
  ],
3388
2725
  "additionalProperties": false
3389
2726
  },
@@ -3391,21 +2728,35 @@
3391
2728
  "type": "object",
3392
2729
  "properties": {
3393
2730
  "tag": {
3394
- "description": "Used if AP value is defined by the selected option(s) or special rules.",
3395
2731
  "const": "Indefinite"
3396
2732
  },
3397
- "does_not_contribute_to_maximum": {
3398
- "description": "The AP Value of the entry does not contribute to the AP maximum for\nadvantages or disadvantages, so it may also be bought if the maximum has\nalready been reached.",
3399
- "const": true
2733
+ "indefinite": {
2734
+ "type": "object",
2735
+ "properties": {},
2736
+ "required": [],
2737
+ "additionalProperties": false
3400
2738
  }
3401
2739
  },
3402
2740
  "required": [
3403
- "tag"
2741
+ "tag",
2742
+ "indefinite"
3404
2743
  ],
3405
2744
  "additionalProperties": false
3406
2745
  }
3407
2746
  ]
3408
2747
  },
2748
+ "FixedAdventurePointsValue": {
2749
+ "description": "A fixed adventure points value. If the entry has levels, this is the cost per\nlevel as well.",
2750
+ "$ref": "#/$defs/AdventurePointsSingleValue"
2751
+ },
2752
+ "AdventurePointsValueByLevel": {
2753
+ "description": "An entry with levels may have different costs for each level. The length of\nthe list must match the amount of levels the special ability has.",
2754
+ "type": "array",
2755
+ "items": {
2756
+ "$ref": "#/$defs/AdventurePointsSingleValue"
2757
+ },
2758
+ "minItems": 2
2759
+ },
3409
2760
  "AdventurePointsSingleValue": {
3410
2761
  "description": "A single adventure points value.",
3411
2762
  "type": "integer",