optolith-database-schema 0.2.2 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (500) hide show
  1. package/CHANGELOG.md +71 -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 +22 -24
  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 +78 -94
  14. package/lib/types/Cantrip.d.ts +132 -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 +168 -290
  21. package/lib/types/DerivedCharacteristic.d.ts +4 -10
  22. package/lib/types/Disadvantage.d.ts +19 -23
  23. package/lib/types/Disease.d.ts +5 -140
  24. package/lib/types/Element.d.ts +9 -13
  25. package/lib/types/ExperienceLevel.d.ts +3 -9
  26. package/lib/types/EyeColor.d.ts +9 -13
  27. package/lib/types/FamiliarsTrick.d.ts +201 -290
  28. package/lib/types/HairColor.d.ts +9 -13
  29. package/lib/types/Lessons_Curriculum.d.ts +73 -138
  30. package/lib/types/Lessons_Guideline.d.ts +9 -13
  31. package/lib/types/LiturgicalChant.d.ts +55 -88
  32. package/lib/types/Locale.d.ts +1 -1
  33. package/lib/types/Locale.js +1 -1
  34. package/lib/types/MetaCondition.d.ts +18 -31
  35. package/lib/types/PactCategory.d.ts +48 -62
  36. package/lib/types/Patron.d.ts +66 -76
  37. package/lib/types/PatronCategory.d.ts +11 -21
  38. package/lib/types/PersonalityTrait.d.ts +31 -39
  39. package/lib/types/Profession.d.ts +296 -435
  40. package/lib/types/Property.d.ts +9 -13
  41. package/lib/types/Race.d.ts +99 -194
  42. package/lib/types/Region.d.ts +9 -13
  43. package/lib/types/Ritual.d.ts +58 -83
  44. package/lib/types/Service.d.ts +20 -25
  45. package/lib/types/SexPractice.d.ts +26 -34
  46. package/lib/types/Skill.d.ts +65 -90
  47. package/lib/types/SkillGroup.d.ts +13 -18
  48. package/lib/types/SkillModificationLevel.d.ts +72 -76
  49. package/lib/types/SocialStatus.d.ts +9 -13
  50. package/lib/types/Spell.d.ts +58 -83
  51. package/lib/types/State.d.ts +14 -20
  52. package/lib/types/Talisman.d.ts +44 -54
  53. package/lib/types/TargetCategory.d.ts +21 -16
  54. package/lib/types/UI.d.ts +1 -5
  55. package/lib/types/_Activatable.d.ts +607 -1177
  56. package/lib/types/_Activatable.js +0 -12
  57. package/lib/types/_ActivatableSelectOptionCategory.d.ts +356 -0
  58. package/lib/types/{prerequisites/single/CommonSuggestedByRCPPrerequisite.js → _ActivatableSelectOptionCategory.js} +0 -0
  59. package/lib/types/_ActivatableSkill.d.ts +24 -1013
  60. package/lib/types/_ActivatableSkill.js +1 -31
  61. package/lib/types/_ActivatableSkillCastingTime.d.ts +69 -0
  62. package/lib/types/_ActivatableSkillCastingTime.js +5 -0
  63. package/lib/types/_ActivatableSkillCheckResultBased.d.ts +41 -0
  64. package/lib/types/{equipment/_Armor.js → _ActivatableSkillCheckResultBased.js} +0 -3
  65. package/lib/types/_ActivatableSkillCost.d.ts +223 -0
  66. package/lib/types/_ActivatableSkillCost.js +1 -0
  67. package/lib/types/_ActivatableSkillDuration.d.ts +138 -0
  68. package/lib/types/_ActivatableSkillDuration.js +13 -0
  69. package/lib/types/_ActivatableSkillEffect.d.ts +68 -0
  70. package/lib/types/_ActivatableSkillEffect.js +1 -0
  71. package/lib/types/_ActivatableSkillRange.d.ts +103 -0
  72. package/lib/types/_ActivatableSkillRange.js +5 -0
  73. package/lib/types/_ActivatableSkillTargetCategory.d.ts +35 -0
  74. package/lib/types/_ActivatableSkillTargetCategory.js +1 -0
  75. package/lib/types/_AlternativeNames.d.ts +11 -0
  76. package/lib/types/_AlternativeNames.js +1 -0
  77. package/lib/types/_ArcaneTradition.d.ts +28 -0
  78. package/lib/types/_ArcaneTradition.js +4 -0
  79. package/lib/types/_Blessed.d.ts +22 -0
  80. package/lib/types/_Blessed.js +1 -0
  81. package/lib/types/_DiseasePoison.d.ts +116 -0
  82. package/lib/types/_DiseasePoison.js +5 -0
  83. package/lib/types/_Enhancements.d.ts +16 -20
  84. package/lib/types/_I18n.d.ts +1 -5
  85. package/lib/types/_Identifier.d.ts +32 -0
  86. package/lib/types/_Identifier.js +32 -0
  87. package/lib/types/_Influence.d.ts +27 -32
  88. package/lib/types/_LocaleMap.d.ts +10 -0
  89. package/lib/types/_LocaleMap.js +1 -0
  90. package/lib/types/_NonEmptyString.d.ts +9 -0
  91. package/lib/types/_NonEmptyString.js +1 -0
  92. package/lib/types/_Prerequisite.d.ts +61 -65
  93. package/lib/types/_ResponsiveText.d.ts +54 -0
  94. package/lib/types/_ResponsiveText.js +1 -0
  95. package/lib/types/_SimpleReferences.d.ts +334 -0
  96. package/lib/types/_SimpleReferences.js +1 -0
  97. package/lib/types/_SkillCheck.d.ts +6 -11
  98. package/lib/types/_Spellwork.d.ts +17 -0
  99. package/lib/types/_Spellwork.js +1 -0
  100. package/lib/types/equipment/EquipmentPackage.d.ts +24 -28
  101. package/lib/types/equipment/item/Alchemicum.d.ts +6 -0
  102. package/lib/types/equipment/item/Alchemicum.js +5 -0
  103. package/lib/types/equipment/item/Ammunition.d.ts +31 -0
  104. package/lib/types/equipment/item/Ammunition.js +5 -0
  105. package/lib/types/equipment/item/Animal.d.ts +18 -0
  106. package/lib/types/equipment/item/Animal.js +5 -0
  107. package/lib/types/equipment/item/AnimalCare.d.ts +48 -0
  108. package/lib/types/equipment/item/AnimalCare.js +5 -0
  109. package/lib/types/equipment/item/Armor.d.ts +185 -0
  110. package/lib/types/equipment/item/Armor.js +5 -0
  111. package/lib/types/equipment/item/BandageOrRemedy.d.ts +6 -0
  112. package/lib/types/equipment/item/BandageOrRemedy.js +5 -0
  113. package/lib/types/equipment/item/Book.d.ts +60 -0
  114. package/lib/types/equipment/item/Book.js +5 -0
  115. package/lib/types/equipment/item/CeremonialItem.d.ts +6 -0
  116. package/lib/types/equipment/item/CeremonialItem.js +5 -0
  117. package/lib/types/equipment/item/Clothes.d.ts +6 -0
  118. package/lib/types/equipment/item/Clothes.js +5 -0
  119. package/lib/types/equipment/item/Container.d.ts +6 -0
  120. package/lib/types/equipment/item/Container.js +5 -0
  121. package/lib/types/equipment/item/EquipmentOfBlessedOnes.d.ts +41 -0
  122. package/lib/types/equipment/item/EquipmentOfBlessedOnes.js +5 -0
  123. package/lib/types/equipment/item/GemOrPreciousStone.d.ts +43 -0
  124. package/lib/types/equipment/item/GemOrPreciousStone.js +5 -0
  125. package/lib/types/equipment/item/HealingHerb.d.ts +6 -0
  126. package/lib/types/equipment/item/HealingHerb.js +5 -0
  127. package/lib/types/equipment/item/Illumination.d.ts +6 -0
  128. package/lib/types/equipment/item/Illumination.js +5 -0
  129. package/lib/types/equipment/item/Jewelry.d.ts +60 -0
  130. package/lib/types/equipment/item/Jewelry.js +5 -0
  131. package/lib/types/equipment/item/Liebesspielzeug.d.ts +6 -0
  132. package/lib/types/equipment/item/Liebesspielzeug.js +5 -0
  133. package/lib/types/equipment/item/LuxuryGood.d.ts +6 -0
  134. package/lib/types/equipment/item/LuxuryGood.js +5 -0
  135. package/lib/types/equipment/item/MagicalArtifact.d.ts +39 -0
  136. package/lib/types/equipment/item/MagicalArtifact.js +5 -0
  137. package/lib/types/equipment/item/MusicalInstrument.d.ts +27 -0
  138. package/lib/types/equipment/item/MusicalInstrument.js +5 -0
  139. package/lib/types/equipment/item/OrienteeringAid.d.ts +6 -0
  140. package/lib/types/equipment/item/OrienteeringAid.js +5 -0
  141. package/lib/types/equipment/item/Poison.d.ts +163 -0
  142. package/lib/types/{Poison.js → equipment/item/Poison.js} +1 -1
  143. package/lib/types/equipment/item/RopeOrChain.d.ts +6 -0
  144. package/lib/types/equipment/item/RopeOrChain.js +5 -0
  145. package/lib/types/equipment/item/Stationary.d.ts +6 -0
  146. package/lib/types/equipment/item/Stationary.js +5 -0
  147. package/lib/types/equipment/item/ThievesTool.d.ts +6 -0
  148. package/lib/types/equipment/item/ThievesTool.js +5 -0
  149. package/lib/types/equipment/item/ToolOfTheTrade.d.ts +56 -0
  150. package/lib/types/equipment/item/ToolOfTheTrade.js +5 -0
  151. package/lib/types/equipment/item/TravelGearOrTool.d.ts +6 -0
  152. package/lib/types/equipment/item/TravelGearOrTool.js +5 -0
  153. package/lib/types/equipment/item/Vehicle.d.ts +18 -0
  154. package/lib/types/equipment/item/Vehicle.js +5 -0
  155. package/lib/types/equipment/item/Weapon.d.ts +152 -0
  156. package/lib/types/equipment/item/Weapon.js +5 -0
  157. package/lib/types/equipment/item/WeaponAccessory.d.ts +6 -0
  158. package/lib/types/equipment/item/WeaponAccessory.js +5 -0
  159. package/lib/types/equipment/item/_Item.d.ts +157 -0
  160. package/lib/types/equipment/item/_Item.js +1 -0
  161. package/lib/types/equipment/item/_MeleeWeapon.d.ts +113 -0
  162. package/lib/types/equipment/item/_MeleeWeapon.js +4 -0
  163. package/lib/types/equipment/item/_RangedWeapon.d.ts +108 -0
  164. package/lib/types/equipment/item/_RangedWeapon.js +4 -0
  165. package/lib/types/equipment/item/_Weapon.d.ts +57 -0
  166. package/lib/types/equipment/{_Weapon.js → item/_Weapon.js} +0 -3
  167. package/lib/types/equipment/item/sub/ArmorType.d.ts +36 -0
  168. package/lib/types/equipment/{ArmorType.js → item/sub/ArmorType.js} +1 -1
  169. package/lib/types/equipment/item/sub/Reach.d.ts +27 -0
  170. package/lib/types/equipment/{Reach.js → item/sub/Reach.js} +1 -1
  171. package/lib/types/magicalActions/AnimistPower.d.ts +168 -225
  172. package/lib/types/magicalActions/AnimistPower_Tribe.d.ts +9 -13
  173. package/lib/types/magicalActions/Curse.d.ts +115 -184
  174. package/lib/types/magicalActions/DominationRitual.d.ts +98 -136
  175. package/lib/types/magicalActions/ElvenMagicalSong.d.ts +79 -123
  176. package/lib/types/magicalActions/GeodeRitual.d.ts +124 -111
  177. package/lib/types/magicalActions/JesterTrick.d.ts +114 -109
  178. package/lib/types/magicalActions/MagicalDance.d.ts +71 -138
  179. package/lib/types/magicalActions/MagicalMelody.d.ts +65 -75
  180. package/lib/types/magicalActions/MagicalRune.d.ts +155 -189
  181. package/lib/types/magicalActions/ZibiljaRitual.d.ts +57 -65
  182. package/lib/types/magicalActions/_MusicTradition.d.ts +23 -13
  183. package/lib/types/magicalActions/_SkillReference.d.ts +1 -1
  184. package/lib/types/prerequisites/DisplayOption.d.ts +6 -8
  185. package/lib/types/prerequisites/PrerequisiteGroups.d.ts +194 -16
  186. package/lib/types/prerequisites/single/ActivatablePrerequisite.d.ts +0 -3
  187. package/lib/types/prerequisites/single/AnimistPowerPrerequisite.d.ts +0 -1
  188. package/lib/types/prerequisites/single/CulturePrerequisite.d.ts +0 -1
  189. package/lib/types/prerequisites/single/EnhancementPrerequisite.d.ts +17 -14
  190. package/lib/types/prerequisites/single/InfluencePrerequisite.d.ts +0 -1
  191. package/lib/types/prerequisites/single/PactPrerequisite.d.ts +5 -14
  192. package/lib/types/prerequisites/single/PrimaryAttributePrerequisite.d.ts +6 -6
  193. package/lib/types/prerequisites/single/PublicationPrerequisite.d.ts +0 -1
  194. package/lib/types/prerequisites/single/RacePrerequisite.d.ts +0 -1
  195. package/lib/types/prerequisites/single/RatedPrerequisite.d.ts +32 -41
  196. package/lib/types/prerequisites/single/RulePrerequisite.d.ts +0 -1
  197. package/lib/types/prerequisites/single/SexPrerequisite.d.ts +0 -1
  198. package/lib/types/prerequisites/single/SocialStatusPrerequisite.d.ts +0 -1
  199. package/lib/types/prerequisites/single/StatePrerequisite.d.ts +0 -1
  200. package/lib/types/prerequisites/single/TextPrerequisite.d.ts +11 -15
  201. package/lib/types/prerequisites/single/TraditionPrerequisite.d.ts +20 -12
  202. package/lib/types/rule/CoreRule.d.ts +198 -206
  203. package/lib/types/rule/FocusRule.d.ts +19 -24
  204. package/lib/types/rule/FocusRule_Subject.d.ts +9 -13
  205. package/lib/types/rule/OptionalRule.d.ts +12 -35
  206. package/lib/types/rule/_Rule.d.ts +19 -0
  207. package/lib/types/rule/_Rule.js +1 -0
  208. package/lib/types/source/Publication.d.ts +34 -48
  209. package/lib/types/source/_Erratum.d.ts +2 -1
  210. package/lib/types/source/_PublicationRef.d.ts +41 -37
  211. package/lib/types/specialAbility/AdvancedCombatSpecialAbility.d.ts +13 -17
  212. package/lib/types/specialAbility/AdvancedKarmaSpecialAbility.d.ts +8 -12
  213. package/lib/types/specialAbility/AdvancedMagicalSpecialAbility.d.ts +8 -12
  214. package/lib/types/specialAbility/AdvancedSkillSpecialAbility.d.ts +8 -12
  215. package/lib/types/specialAbility/AncestorGlyph.d.ts +8 -12
  216. package/lib/types/specialAbility/BlessedTradition.d.ts +92 -123
  217. package/lib/types/specialAbility/BrawlingSpecialAbility.d.ts +9 -13
  218. package/lib/types/specialAbility/CeremonialItemSpecialAbility.d.ts +8 -12
  219. package/lib/types/specialAbility/CombatSpecialAbility.d.ts +13 -17
  220. package/lib/types/specialAbility/CombatStyleSpecialAbility.d.ts +10 -18
  221. package/lib/types/specialAbility/CommandSpecialAbility.d.ts +1 -1
  222. package/lib/types/specialAbility/FamiliarSpecialAbility.d.ts +8 -12
  223. package/lib/types/specialAbility/FatePointSexSpecialAbility.d.ts +8 -12
  224. package/lib/types/specialAbility/FatePointSpecialAbility.d.ts +8 -12
  225. package/lib/types/specialAbility/GeneralSpecialAbility.d.ts +8 -12
  226. package/lib/types/specialAbility/KarmaSpecialAbility.d.ts +8 -12
  227. package/lib/types/specialAbility/LiturgicalStyleSpecialAbility.d.ts +8 -12
  228. package/lib/types/specialAbility/LycantropicGift.d.ts +8 -12
  229. package/lib/types/specialAbility/MagicStyleSpecialAbility.d.ts +8 -12
  230. package/lib/types/specialAbility/MagicalSpecialAbility.d.ts +8 -12
  231. package/lib/types/specialAbility/MagicalTradition.d.ts +38 -58
  232. package/lib/types/specialAbility/PactGift.d.ts +75 -62
  233. package/lib/types/specialAbility/ProtectiveWardingCircleSpecialAbility.d.ts +16 -23
  234. package/lib/types/specialAbility/Sermon.d.ts +8 -12
  235. package/lib/types/specialAbility/SexSpecialAbility.d.ts +8 -12
  236. package/lib/types/specialAbility/SikaryanDrainSpecialAbility.d.ts +8 -12
  237. package/lib/types/specialAbility/SkillStyleSpecialAbility.d.ts +8 -12
  238. package/lib/types/specialAbility/VampiricGift.d.ts +8 -12
  239. package/lib/types/specialAbility/Vision.d.ts +8 -12
  240. package/lib/types/specialAbility/_Tradition.d.ts +12 -0
  241. package/lib/types/specialAbility/_Tradition.js +1 -0
  242. package/lib/types/specialAbility/sub/Language.d.ts +78 -104
  243. package/lib/types/specialAbility/sub/Script.d.ts +24 -51
  244. package/lib/types/specialAbility/sub/TradeSecret.d.ts +14 -20
  245. package/lib/types/specialAbility/sub/_LanguageScript.d.ts +13 -0
  246. package/lib/types/specialAbility/sub/_LanguageScript.js +1 -0
  247. package/lib/types/traditionArtifacts/ArcaneOrbEnchantment.d.ts +20 -24
  248. package/lib/types/traditionArtifacts/AttireEnchantment.d.ts +21 -25
  249. package/lib/types/traditionArtifacts/BowlEnchantment.d.ts +20 -24
  250. package/lib/types/traditionArtifacts/CauldronEnchantment.d.ts +31 -34
  251. package/lib/types/traditionArtifacts/ChronicleEnchantment.d.ts +20 -24
  252. package/lib/types/traditionArtifacts/DaggerRitual.d.ts +45 -25
  253. package/lib/types/traditionArtifacts/FoolsHatEnchantment.d.ts +20 -24
  254. package/lib/types/traditionArtifacts/InstrumentEnchantment.d.ts +20 -24
  255. package/lib/types/traditionArtifacts/Krallenkettenzauber.d.ts +20 -24
  256. package/lib/types/traditionArtifacts/OrbEnchantment.d.ts +20 -24
  257. package/lib/types/traditionArtifacts/RingEnchantment.d.ts +20 -24
  258. package/lib/types/traditionArtifacts/SickleRitual.d.ts +20 -24
  259. package/lib/types/traditionArtifacts/SpellSwordEnchantment.d.ts +20 -24
  260. package/lib/types/traditionArtifacts/StaffEnchantment.d.ts +21 -25
  261. package/lib/types/traditionArtifacts/ToyEnchantment.d.ts +21 -25
  262. package/lib/types/traditionArtifacts/Trinkhornzauber.d.ts +20 -24
  263. package/lib/types/traditionArtifacts/WandEnchantment.d.ts +20 -24
  264. package/lib/types/traditionArtifacts/WeaponEnchantment.d.ts +19 -24
  265. package/lib/types/traditionArtifacts/sub/AnimalShape.d.ts +24 -16
  266. package/lib/types/traditionArtifacts/sub/AnimalShapePath.d.ts +9 -13
  267. package/lib/types/traditionArtifacts/sub/AnimalShapeSize.d.ts +9 -13
  268. package/lib/types/traditionArtifacts/sub/Brew.d.ts +9 -13
  269. package/lib/validation/schema.d.ts +11 -2
  270. package/lib/validation/schema.js +16 -4
  271. package/package.json +8 -7
  272. package/schema/Advantage.schema.json +49 -42
  273. package/schema/AnimalDisease.schema.json +17 -325
  274. package/schema/AnimalType.schema.json +17 -15
  275. package/schema/ArcaneBardTradition.schema.json +4 -42
  276. package/schema/ArcaneDancerTradition.schema.json +4 -42
  277. package/schema/Aspect.schema.json +21 -20
  278. package/schema/Attribute.schema.json +27 -27
  279. package/schema/Blessing.schema.json +188 -170
  280. package/schema/Cantrip.schema.json +334 -273
  281. package/schema/Ceremony.schema.json +90 -149
  282. package/schema/CombatTechnique_Close.schema.json +56 -67
  283. package/schema/CombatTechnique_Ranged.schema.json +46 -30
  284. package/schema/Condition.schema.json +46 -50
  285. package/schema/Continent.schema.json +18 -15
  286. package/schema/Culture.schema.json +408 -487
  287. package/schema/DerivedCharacteristic.schema.json +8 -8
  288. package/schema/Disadvantage.schema.json +45 -40
  289. package/schema/Disease.schema.json +7 -193
  290. package/schema/Element.schema.json +18 -15
  291. package/schema/ExperienceLevel.schema.json +5 -5
  292. package/schema/EyeColor.schema.json +17 -15
  293. package/schema/FamiliarsTrick.schema.json +491 -513
  294. package/schema/HairColor.schema.json +17 -15
  295. package/schema/Kirchenpraegung.schema.json +4 -4
  296. package/schema/Lessons_Curriculum.schema.json +202 -232
  297. package/schema/Lessons_Guideline.schema.json +17 -15
  298. package/schema/LiturgicalChant.schema.json +90 -149
  299. package/schema/Locale.schema.json +5 -5
  300. package/schema/MetaCondition.schema.json +46 -50
  301. package/schema/PactCategory.schema.json +101 -89
  302. package/schema/Patron.schema.json +239 -229
  303. package/schema/PatronCategory.schema.json +18 -27
  304. package/schema/PersonalityTrait.schema.json +50 -57
  305. package/schema/Profession.schema.json +810 -993
  306. package/schema/Property.schema.json +18 -16
  307. package/schema/Race.schema.json +200 -308
  308. package/schema/Region.schema.json +17 -15
  309. package/schema/Ritual.schema.json +111 -158
  310. package/schema/Service.schema.json +55 -51
  311. package/schema/SexPractice.schema.json +37 -39
  312. package/schema/Skill.schema.json +88 -89
  313. package/schema/SkillGroup.schema.json +23 -22
  314. package/schema/SkillModificationLevel.schema.json +93 -82
  315. package/schema/SocialStatus.schema.json +17 -15
  316. package/schema/Spell.schema.json +110 -158
  317. package/schema/State.schema.json +26 -25
  318. package/schema/Talisman.schema.json +115 -121
  319. package/schema/TargetCategory.schema.json +35 -20
  320. package/schema/UI.schema.json +830 -834
  321. package/schema/_Activatable.schema.json +1482 -2138
  322. package/schema/_ActivatableSelectOptionCategory.schema.json +1124 -0
  323. package/schema/_ActivatableSkill.schema.json +96 -1679
  324. package/schema/_ActivatableSkillCastingTime.schema.json +177 -0
  325. package/schema/_ActivatableSkillCheckResultBased.schema.json +101 -0
  326. package/schema/_ActivatableSkillCost.schema.json +448 -0
  327. package/schema/_ActivatableSkillDuration.schema.json +335 -0
  328. package/schema/_ActivatableSkillEffect.schema.json +153 -0
  329. package/schema/_ActivatableSkillRange.schema.json +221 -0
  330. package/schema/_ActivatableSkillTargetCategory.schema.json +117 -0
  331. package/schema/_AlternativeNames.schema.json +23 -0
  332. package/schema/_ArcaneTradition.schema.json +51 -0
  333. package/schema/_Blessed.schema.json +64 -0
  334. package/schema/_CommonnessRatedAdvantageDisadvantage.schema.json +2 -2
  335. package/schema/_Dice.schema.json +3 -3
  336. package/schema/_DiseasePoison.schema.json +173 -0
  337. package/schema/_Enhancements.schema.json +29 -26
  338. package/schema/_I18n.schema.json +8 -12
  339. package/schema/_Identifier.schema.json +73 -22
  340. package/schema/_ImprovementCost.schema.json +2 -2
  341. package/schema/_Influence.schema.json +48 -45
  342. package/schema/_NonEmptyString.schema.json +14 -0
  343. package/schema/_Prerequisite.schema.json +953 -765
  344. package/schema/_ResponsiveText.schema.json +66 -0
  345. package/schema/_Sex.schema.json +3 -3
  346. package/schema/_SimpleReferences.schema.json +586 -0
  347. package/schema/_SkillCheck.schema.json +5 -20
  348. package/schema/_Spellwork.schema.json +47 -0
  349. package/schema/equipment/EquipmentPackage.schema.json +37 -32
  350. package/schema/equipment/item/Alchemicum.schema.json +10 -0
  351. package/schema/equipment/item/Ammunition.schema.json +56 -0
  352. package/schema/equipment/item/Animal.schema.json +36 -0
  353. package/schema/equipment/item/AnimalCare.schema.json +124 -0
  354. package/schema/equipment/item/Armor.schema.json +288 -0
  355. package/schema/equipment/item/BandageOrRemedy.schema.json +10 -0
  356. package/schema/equipment/item/Book.schema.json +89 -0
  357. package/schema/equipment/item/CeremonialItem.schema.json +10 -0
  358. package/schema/equipment/item/Clothes.schema.json +10 -0
  359. package/schema/equipment/item/Container.schema.json +10 -0
  360. package/schema/equipment/item/EquipmentOfBlessedOnes.schema.json +59 -0
  361. package/schema/equipment/item/GemOrPreciousStone.schema.json +69 -0
  362. package/schema/equipment/item/HealingHerb.schema.json +10 -0
  363. package/schema/equipment/item/Illumination.schema.json +10 -0
  364. package/schema/equipment/item/Jewelry.schema.json +113 -0
  365. package/schema/equipment/item/Liebesspielzeug.schema.json +10 -0
  366. package/schema/equipment/item/LuxuryGood.schema.json +10 -0
  367. package/schema/equipment/item/MagicalArtifact.schema.json +64 -0
  368. package/schema/equipment/item/MusicalInstrument.schema.json +46 -0
  369. package/schema/equipment/item/OrienteeringAid.schema.json +10 -0
  370. package/schema/equipment/item/Poison.schema.json +378 -0
  371. package/schema/equipment/item/RopeOrChain.schema.json +10 -0
  372. package/schema/equipment/item/Stationary.schema.json +10 -0
  373. package/schema/equipment/item/ThievesTool.schema.json +10 -0
  374. package/schema/equipment/item/ToolOfTheTrade.schema.json +83 -0
  375. package/schema/equipment/item/TravelGearOrTool.schema.json +10 -0
  376. package/schema/equipment/item/Vehicle.schema.json +36 -0
  377. package/schema/equipment/item/Weapon.schema.json +265 -0
  378. package/schema/equipment/item/WeaponAccessory.schema.json +10 -0
  379. package/schema/equipment/item/_Item.schema.json +361 -0
  380. package/schema/equipment/item/_MeleeWeapon.schema.json +166 -0
  381. package/schema/equipment/item/_RangedWeapon.schema.json +172 -0
  382. package/schema/equipment/item/_Weapon.schema.json +99 -0
  383. package/schema/equipment/item/sub/ArmorType.schema.json +53 -0
  384. package/schema/equipment/{Reach.schema.json → item/sub/Reach.schema.json} +18 -16
  385. package/schema/magicalActions/AnimistPower.schema.json +413 -402
  386. package/schema/magicalActions/AnimistPower_Tribe.schema.json +17 -15
  387. package/schema/magicalActions/Curse.schema.json +288 -315
  388. package/schema/magicalActions/DominationRitual.schema.json +233 -220
  389. package/schema/magicalActions/ElvenMagicalSong.schema.json +132 -154
  390. package/schema/magicalActions/GeodeRitual.schema.json +284 -222
  391. package/schema/magicalActions/JesterTrick.schema.json +252 -202
  392. package/schema/magicalActions/MagicalDance.schema.json +147 -251
  393. package/schema/magicalActions/MagicalMelody.schema.json +129 -164
  394. package/schema/magicalActions/MagicalRune.schema.json +341 -323
  395. package/schema/magicalActions/ZibiljaRitual.schema.json +139 -112
  396. package/schema/magicalActions/_MusicTradition.schema.json +88 -14
  397. package/schema/magicalActions/_SkillReference.schema.json +4 -4
  398. package/schema/prerequisites/ConditionalPrerequisites.schema.json +3 -3
  399. package/schema/prerequisites/DisplayOption.schema.json +25 -14
  400. package/schema/prerequisites/PrerequisiteGroups.schema.json +928 -152
  401. package/schema/prerequisites/single/ActivatablePrerequisite.schema.json +13 -25
  402. package/schema/prerequisites/single/AnimistPowerPrerequisite.schema.json +4 -7
  403. package/schema/prerequisites/single/CulturePrerequisite.schema.json +4 -8
  404. package/schema/prerequisites/single/EnhancementPrerequisite.schema.json +30 -23
  405. package/schema/prerequisites/single/InfluencePrerequisite.schema.json +3 -7
  406. package/schema/prerequisites/single/PactPrerequisite.schema.json +9 -19
  407. package/schema/prerequisites/single/PrimaryAttributePrerequisite.schema.json +32 -33
  408. package/schema/prerequisites/single/PublicationPrerequisite.schema.json +3 -7
  409. package/schema/prerequisites/single/RacePrerequisite.schema.json +4 -8
  410. package/schema/prerequisites/single/RatedPrerequisite.schema.json +104 -107
  411. package/schema/prerequisites/single/RulePrerequisite.schema.json +4 -8
  412. package/schema/prerequisites/single/SexPrerequisite.schema.json +4 -8
  413. package/schema/prerequisites/single/SocialStatusPrerequisite.schema.json +3 -7
  414. package/schema/prerequisites/single/StatePrerequisite.schema.json +4 -8
  415. package/schema/prerequisites/single/TextPrerequisite.schema.json +36 -35
  416. package/schema/prerequisites/single/TraditionPrerequisite.schema.json +66 -68
  417. package/schema/rule/CoreRule.schema.json +904 -859
  418. package/schema/rule/FocusRule.schema.json +34 -30
  419. package/schema/rule/FocusRule_Subject.schema.json +17 -15
  420. package/schema/rule/OptionalRule.schema.json +24 -56
  421. package/schema/rule/_Rule.schema.json +52 -0
  422. package/schema/source/Publication.schema.json +45 -71
  423. package/schema/source/_Erratum.schema.json +5 -6
  424. package/schema/source/_PublicationRef.schema.json +87 -57
  425. package/schema/specialAbility/AdvancedCombatSpecialAbility.schema.json +41 -38
  426. package/schema/specialAbility/AdvancedKarmaSpecialAbility.schema.json +35 -32
  427. package/schema/specialAbility/AdvancedMagicalSpecialAbility.schema.json +35 -32
  428. package/schema/specialAbility/AdvancedSkillSpecialAbility.schema.json +35 -32
  429. package/schema/specialAbility/AncestorGlyph.schema.json +33 -30
  430. package/schema/specialAbility/BlessedTradition.schema.json +230 -225
  431. package/schema/specialAbility/BrawlingSpecialAbility.schema.json +35 -32
  432. package/schema/specialAbility/CeremonialItemSpecialAbility.schema.json +36 -33
  433. package/schema/specialAbility/CombatSpecialAbility.schema.json +41 -38
  434. package/schema/specialAbility/CombatStyleSpecialAbility.schema.json +39 -61
  435. package/schema/specialAbility/CommandSpecialAbility.schema.json +16 -16
  436. package/schema/specialAbility/FamiliarSpecialAbility.schema.json +33 -30
  437. package/schema/specialAbility/FatePointSexSpecialAbility.schema.json +33 -30
  438. package/schema/specialAbility/FatePointSpecialAbility.schema.json +35 -32
  439. package/schema/specialAbility/GeneralSpecialAbility.schema.json +35 -32
  440. package/schema/specialAbility/KarmaSpecialAbility.schema.json +33 -30
  441. package/schema/specialAbility/LiturgicalStyleSpecialAbility.schema.json +36 -33
  442. package/schema/specialAbility/LycantropicGift.schema.json +33 -30
  443. package/schema/specialAbility/MagicStyleSpecialAbility.schema.json +36 -33
  444. package/schema/specialAbility/MagicalSpecialAbility.schema.json +35 -32
  445. package/schema/specialAbility/MagicalTradition.schema.json +66 -87
  446. package/schema/specialAbility/PactGift.schema.json +240 -174
  447. package/schema/specialAbility/ProtectiveWardingCircleSpecialAbility.schema.json +39 -38
  448. package/schema/specialAbility/Sermon.schema.json +33 -30
  449. package/schema/specialAbility/SexSpecialAbility.schema.json +35 -32
  450. package/schema/specialAbility/SikaryanDrainSpecialAbility.schema.json +33 -30
  451. package/schema/specialAbility/SkillStyleSpecialAbility.schema.json +34 -31
  452. package/schema/specialAbility/VampiricGift.schema.json +33 -30
  453. package/schema/specialAbility/Vision.schema.json +33 -30
  454. package/schema/specialAbility/_Tradition.schema.json +23 -0
  455. package/schema/specialAbility/sub/Language.schema.json +170 -162
  456. package/schema/specialAbility/sub/Script.schema.json +35 -72
  457. package/schema/specialAbility/sub/TradeSecret.schema.json +26 -25
  458. package/schema/specialAbility/sub/_LanguageScript.schema.json +26 -0
  459. package/schema/traditionArtifacts/ArcaneOrbEnchantment.schema.json +46 -43
  460. package/schema/traditionArtifacts/AttireEnchantment.schema.json +47 -43
  461. package/schema/traditionArtifacts/BowlEnchantment.schema.json +46 -43
  462. package/schema/traditionArtifacts/CauldronEnchantment.schema.json +63 -56
  463. package/schema/traditionArtifacts/ChronicleEnchantment.schema.json +46 -43
  464. package/schema/traditionArtifacts/DaggerRitual.schema.json +132 -43
  465. package/schema/traditionArtifacts/FoolsHatEnchantment.schema.json +46 -43
  466. package/schema/traditionArtifacts/InstrumentEnchantment.schema.json +46 -43
  467. package/schema/traditionArtifacts/Krallenkettenzauber.schema.json +46 -43
  468. package/schema/traditionArtifacts/OrbEnchantment.schema.json +46 -43
  469. package/schema/traditionArtifacts/RingEnchantment.schema.json +46 -43
  470. package/schema/traditionArtifacts/SickleRitual.schema.json +46 -43
  471. package/schema/traditionArtifacts/SpellSwordEnchantment.schema.json +46 -43
  472. package/schema/traditionArtifacts/StaffEnchantment.schema.json +47 -43
  473. package/schema/traditionArtifacts/ToyEnchantment.schema.json +47 -43
  474. package/schema/traditionArtifacts/Trinkhornzauber.schema.json +46 -43
  475. package/schema/traditionArtifacts/WandEnchantment.schema.json +46 -43
  476. package/schema/traditionArtifacts/WeaponEnchantment.schema.json +46 -50
  477. package/schema/traditionArtifacts/sub/AnimalShape.schema.json +53 -25
  478. package/schema/traditionArtifacts/sub/AnimalShapePath.schema.json +17 -15
  479. package/schema/traditionArtifacts/sub/AnimalShapeSize.schema.json +17 -15
  480. package/schema/traditionArtifacts/sub/Brew.schema.json +17 -15
  481. package/lib/types/MagicalTraditionPlaceholder.d.ts +0 -32
  482. package/lib/types/MagicalTraditionPlaceholder.js +0 -5
  483. package/lib/types/Poison.d.ts +0 -208
  484. package/lib/types/equipment/ArmorType.d.ts +0 -31
  485. package/lib/types/equipment/Item.d.ts +0 -308
  486. package/lib/types/equipment/Item.js +0 -35
  487. package/lib/types/equipment/ItemGroup.d.ts +0 -31
  488. package/lib/types/equipment/ItemGroup.js +0 -5
  489. package/lib/types/equipment/Reach.d.ts +0 -31
  490. package/lib/types/equipment/_Armor.d.ts +0 -70
  491. package/lib/types/equipment/_Weapon.d.ts +0 -330
  492. package/lib/types/prerequisites/single/CommonSuggestedByRCPPrerequisite.d.ts +0 -3
  493. package/schema/MagicalTraditionPlaceholder.schema.json +0 -45
  494. package/schema/Poison.schema.json +0 -417
  495. package/schema/equipment/ArmorType.schema.json +0 -45
  496. package/schema/equipment/Item.schema.json +0 -621
  497. package/schema/equipment/ItemGroup.schema.json +0 -45
  498. package/schema/equipment/_Armor.schema.json +0 -125
  499. package/schema/equipment/_Weapon.schema.json +0 -664
  500. 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,19 +86,221 @@
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
110
+ },
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
114
+ },
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"
118
+ },
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"
122
+ },
123
+ "prerequisites": {
124
+ "$ref": "./_Prerequisite.schema.json#/$defs/GeneralPrerequisites"
125
+ },
126
+ "ap_value": {
127
+ "description": "Specific AP cost for the select option.",
128
+ "type": "integer",
129
+ "minimum": 1
130
+ },
131
+ "src": {
132
+ "$ref": "./source/_PublicationRef.schema.json#/$defs/PublicationRefs"
133
+ },
134
+ "translations": {
135
+ "description": "All translations for the entry, identified by IETF language tag (BCP47).",
136
+ "type": "object",
137
+ "patternProperties": {
138
+ "^[a-z]{2}-[A-Z]{2}$": {
139
+ "$ref": "#/$defs/ExplicitGeneralSelectOptionTranslation"
140
+ }
141
+ },
142
+ "minProperties": 1,
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
88
186
  },
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"
192
+ },
193
+ "minItems": 1
194
+ },
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"
200
+ },
201
+ "minItems": 1
202
+ },
203
+ "prerequisites": {
204
+ "$ref": "./_Prerequisite.schema.json#/$defs/GeneralPrerequisites"
205
+ },
206
+ "ap_value": {
207
+ "description": "Specific AP cost for the select option.",
208
+ "type": "integer",
209
+ "minimum": 1
210
+ },
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).",
216
+ "type": "object",
217
+ "patternProperties": {
218
+ "^[a-z]{2}-[A-Z]{2}$": {
219
+ "$ref": "#/$defs/ExplicitSkillSelectOptionTranslation"
220
+ }
221
+ },
222
+ "minProperties": 1,
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"
248
+ },
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).",
262
+ "type": "object",
263
+ "patternProperties": {
264
+ "^[a-z]{2}-[A-Z]{2}$": {
265
+ "$ref": "#/$defs/ExplicitCombatTechniqueSelectOptionTranslation"
266
+ }
267
+ },
268
+ "minProperties": 1,
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
+ "oneOf": [
89
299
  {
90
300
  "type": "object",
91
301
  "properties": {
92
302
  "tag": {
93
- "const": "Scripts"
303
+ "const": "Passive"
94
304
  }
95
305
  },
96
306
  "required": [
@@ -102,7 +312,7 @@
102
312
  "type": "object",
103
313
  "properties": {
104
314
  "tag": {
105
- "const": "AnimalShapes"
315
+ "const": "BasicManeuver"
106
316
  }
107
317
  },
108
318
  "required": [
@@ -114,19 +324,24 @@
114
324
  "type": "object",
115
325
  "properties": {
116
326
  "tag": {
117
- "const": "ArcaneBardTraditions"
327
+ "const": "SpecialManeuver"
118
328
  }
119
329
  },
120
330
  "required": [
121
331
  "tag"
122
332
  ],
123
333
  "additionalProperties": false
124
- },
334
+ }
335
+ ]
336
+ },
337
+ "CombatSpecialAbilityType": {
338
+ "description": "The definition of if the combat special ability can be used when armed or\nwhen unarmed.",
339
+ "oneOf": [
125
340
  {
126
341
  "type": "object",
127
342
  "properties": {
128
343
  "tag": {
129
- "const": "ArcaneDancerTraditions"
344
+ "const": "Armed"
130
345
  }
131
346
  },
132
347
  "required": [
@@ -138,23 +353,69 @@
138
353
  "type": "object",
139
354
  "properties": {
140
355
  "tag": {
141
- "const": "SexPractices"
356
+ "const": "Unarmed"
142
357
  }
143
358
  },
144
359
  "required": [
145
360
  "tag"
146
361
  ],
147
362
  "additionalProperties": false
363
+ }
364
+ ]
365
+ },
366
+ "SkillApplications": {
367
+ "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.",
368
+ "type": "array",
369
+ "items": {
370
+ "$ref": "#/$defs/SkillApplication"
371
+ },
372
+ "minItems": 1
373
+ },
374
+ "SkillApplication": {
375
+ "type": "object",
376
+ "properties": {
377
+ "id": {
378
+ "description": "The application's identifier. An entry-unique, increasing integer.",
379
+ "type": "integer",
380
+ "minimum": 1
381
+ },
382
+ "skill": {
383
+ "description": "The skill(s) this application belongs to.",
384
+ "$ref": "#/$defs/SkillApplicationAssociatedSkill"
148
385
  },
386
+ "translations": {
387
+ "description": "All translations for the entry, identified by IETF language tag (BCP47).",
388
+ "type": "object",
389
+ "patternProperties": {
390
+ "^[a-z]{2}-[A-Z]{2}$": {
391
+ "$ref": "#/$defs/SkillApplicationTranslation"
392
+ }
393
+ },
394
+ "minProperties": 1,
395
+ "additionalProperties": false
396
+ }
397
+ },
398
+ "required": [
399
+ "id",
400
+ "skill"
401
+ ],
402
+ "additionalProperties": false
403
+ },
404
+ "SkillApplicationAssociatedSkill": {
405
+ "oneOf": [
149
406
  {
150
407
  "type": "object",
151
408
  "properties": {
152
409
  "tag": {
153
- "const": "Races"
410
+ "const": "Single"
411
+ },
412
+ "single": {
413
+ "$ref": "./_SimpleReferences.schema.json#/$defs/SkillReference"
154
414
  }
155
415
  },
156
416
  "required": [
157
- "tag"
417
+ "tag",
418
+ "single"
158
419
  ],
159
420
  "additionalProperties": false
160
421
  },
@@ -162,27 +423,108 @@
162
423
  "type": "object",
163
424
  "properties": {
164
425
  "tag": {
165
- "const": "Cultures"
426
+ "const": "Multiple"
427
+ },
428
+ "multiple": {
429
+ "$ref": "#/$defs/SkillApplicationAssociatedSkills"
166
430
  }
167
431
  },
168
432
  "required": [
169
- "tag"
433
+ "tag",
434
+ "multiple"
170
435
  ],
171
436
  "additionalProperties": false
437
+ }
438
+ ]
439
+ },
440
+ "SkillApplicationAssociatedSkills": {
441
+ "type": "object",
442
+ "properties": {
443
+ "list": {
444
+ "description": "The skills this application belongs to.",
445
+ "type": "array",
446
+ "items": {
447
+ "$ref": "./_SimpleReferences.schema.json#/$defs/SkillReference"
448
+ },
449
+ "minItems": 2
172
450
  },
451
+ "required_skill_rating": {
452
+ "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.",
453
+ "type": "integer",
454
+ "minimum": 1
455
+ }
456
+ },
457
+ "required": [
458
+ "list"
459
+ ],
460
+ "additionalProperties": false
461
+ },
462
+ "SkillApplicationTranslation": {
463
+ "type": "object",
464
+ "properties": {
465
+ "name": {
466
+ "description": "The name of the application if different from the activatable entry's name.",
467
+ "$ref": "./_NonEmptyString.schema.json#/$defs/NonEmptyString"
468
+ }
469
+ },
470
+ "required": [
471
+ "name"
472
+ ],
473
+ "additionalProperties": false
474
+ },
475
+ "SkillUses": {
476
+ "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.",
477
+ "type": "array",
478
+ "items": {
479
+ "$ref": "#/$defs/SkillUse"
480
+ },
481
+ "minItems": 1
482
+ },
483
+ "SkillUse": {
484
+ "type": "object",
485
+ "properties": {
486
+ "id": {
487
+ "description": "The use's identifier. An entry-unique, increasing integer.",
488
+ "type": "integer",
489
+ "minimum": 1
490
+ },
491
+ "skill": {
492
+ "description": "The skill(s) this use belongs to.",
493
+ "$ref": "#/$defs/SkillUseAssociatedSkill"
494
+ },
495
+ "translations": {
496
+ "description": "All translations for the entry, identified by IETF language tag (BCP47).",
497
+ "type": "object",
498
+ "patternProperties": {
499
+ "^[a-z]{2}-[A-Z]{2}$": {
500
+ "$ref": "#/$defs/SkillUseTranslation"
501
+ }
502
+ },
503
+ "minProperties": 1,
504
+ "additionalProperties": false
505
+ }
506
+ },
507
+ "required": [
508
+ "id",
509
+ "skill"
510
+ ],
511
+ "additionalProperties": false
512
+ },
513
+ "SkillUseAssociatedSkill": {
514
+ "oneOf": [
173
515
  {
174
516
  "type": "object",
175
517
  "properties": {
176
518
  "tag": {
177
- "const": "BlessedTraditions"
519
+ "const": "Single"
178
520
  },
179
- "require_principles": {
180
- "description": "Should the principles (code) of the tradition be required to select the\nrespective tradition?",
181
- "const": true
521
+ "single": {
522
+ "$ref": "./_SimpleReferences.schema.json#/$defs/SkillReference"
182
523
  }
183
524
  },
184
525
  "required": [
185
- "tag"
526
+ "tag",
527
+ "single"
186
528
  ],
187
529
  "additionalProperties": false
188
530
  },
@@ -190,69 +532,66 @@
190
532
  "type": "object",
191
533
  "properties": {
192
534
  "tag": {
193
- "const": "Elements"
535
+ "const": "Multiple"
194
536
  },
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
537
+ "multiple": {
538
+ "$ref": "#/$defs/SkillUseAssociatedSkills"
215
539
  }
216
540
  },
217
541
  "required": [
218
- "tag"
542
+ "tag",
543
+ "multiple"
219
544
  ],
220
545
  "additionalProperties": false
221
- },
546
+ }
547
+ ]
548
+ },
549
+ "SkillUseAssociatedSkills": {
550
+ "type": "object",
551
+ "properties": {
552
+ "list": {
553
+ "description": "The skills this use belongs to.",
554
+ "type": "array",
555
+ "items": {
556
+ "$ref": "./_SimpleReferences.schema.json#/$defs/SkillReference"
557
+ },
558
+ "minItems": 2
559
+ }
560
+ },
561
+ "required": [
562
+ "list"
563
+ ],
564
+ "additionalProperties": false
565
+ },
566
+ "SkillUseTranslation": {
567
+ "type": "object",
568
+ "properties": {
569
+ "name": {
570
+ "description": "The name of the use if different from the activatable entry's name.",
571
+ "$ref": "./_NonEmptyString.schema.json#/$defs/NonEmptyString"
572
+ }
573
+ },
574
+ "required": [
575
+ "name"
576
+ ],
577
+ "additionalProperties": false
578
+ },
579
+ "Penalty": {
580
+ "description": "The penalty the special ability gives when used.",
581
+ "oneOf": [
222
582
  {
223
583
  "type": "object",
224
584
  "properties": {
225
585
  "tag": {
226
- "const": "Properties"
227
- },
228
- "require_knowledge": {
229
- "description": "Does each property require it's corresponding property knowledge?",
230
- "const": true
586
+ "const": "Single"
231
587
  },
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
588
+ "single": {
589
+ "$ref": "#/$defs/SinglePenalty"
252
590
  }
253
591
  },
254
592
  "required": [
255
- "tag"
593
+ "tag",
594
+ "single"
256
595
  ],
257
596
  "additionalProperties": false
258
597
  },
@@ -260,40 +599,15 @@
260
599
  "type": "object",
261
600
  "properties": {
262
601
  "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
602
+ "const": "ByHandedness"
272
603
  },
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
604
+ "by_handedness": {
605
+ "$ref": "#/$defs/PenaltyByHandedness"
293
606
  }
294
607
  },
295
608
  "required": [
296
- "tag"
609
+ "tag",
610
+ "by_handedness"
297
611
  ],
298
612
  "additionalProperties": false
299
613
  },
@@ -301,15 +615,15 @@
301
615
  "type": "object",
302
616
  "properties": {
303
617
  "tag": {
304
- "const": "Diseases"
618
+ "const": "ByActivation"
305
619
  },
306
- "use_half_level_as_ap_value": {
307
- "description": "Only convert half the disease level into the AP value.",
308
- "const": true
620
+ "by_activation": {
621
+ "$ref": "#/$defs/PenaltyByActivation"
309
622
  }
310
623
  },
311
624
  "required": [
312
- "tag"
625
+ "tag",
626
+ "by_activation"
313
627
  ],
314
628
  "additionalProperties": false
315
629
  },
@@ -317,15 +631,15 @@
317
631
  "type": "object",
318
632
  "properties": {
319
633
  "tag": {
320
- "const": "Poisons"
634
+ "const": "Selection"
321
635
  },
322
- "use_half_level_as_ap_value": {
323
- "description": "Only convert half the poison level into the AP value.",
324
- "const": true
636
+ "selection": {
637
+ "$ref": "#/$defs/PenaltySelection"
325
638
  }
326
639
  },
327
640
  "required": [
328
- "tag"
641
+ "tag",
642
+ "selection"
329
643
  ],
330
644
  "additionalProperties": false
331
645
  },
@@ -333,19 +647,15 @@
333
647
  "type": "object",
334
648
  "properties": {
335
649
  "tag": {
336
- "const": "Languages"
650
+ "const": "ByLevel"
337
651
  },
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
652
+ "by_level": {
653
+ "$ref": "#/$defs/PenaltyByLevel"
345
654
  }
346
655
  },
347
656
  "required": [
348
- "tag"
657
+ "tag",
658
+ "by_level"
349
659
  ],
350
660
  "additionalProperties": false
351
661
  },
@@ -353,365 +663,15 @@
353
663
  "type": "object",
354
664
  "properties": {
355
665
  "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
666
+ "const": "ByAttack"
642
667
  },
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
- ]
668
+ "by_attack": {
669
+ "$ref": "#/$defs/PenaltyByAttack"
710
670
  }
711
671
  },
712
672
  "required": [
713
673
  "tag",
714
- "categories"
674
+ "by_attack"
715
675
  ],
716
676
  "additionalProperties": false
717
677
  },
@@ -719,313 +679,104 @@
719
679
  "type": "object",
720
680
  "properties": {
721
681
  "tag": {
722
- "const": "CombatTechniques"
723
- },
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
- ]
682
+ "const": "DependsOnHitZone"
883
683
  }
884
684
  },
885
685
  "required": [
886
- "tag",
887
- "categories"
686
+ "tag"
888
687
  ],
889
688
  "additionalProperties": false
890
689
  }
891
690
  ]
892
691
  },
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": {
692
+ "SinglePenalty": {
908
693
  "type": "object",
909
694
  "properties": {
910
- "tag": {
911
- "const": "Self"
912
- },
913
695
  "value": {
914
- "description": "The entry requires itself on a certain Skill Rating.",
915
- "type": "integer",
916
- "minimum": 1
696
+ "description": "The penalty value.",
697
+ "type": "integer"
698
+ },
699
+ "applies_to_parry": {
700
+ "description": "Set to `true` if the penalty applies to the parry instead of the attack.",
701
+ "const": true
917
702
  }
918
703
  },
919
704
  "required": [
920
- "tag",
921
705
  "value"
922
706
  ],
923
707
  "additionalProperties": false
924
708
  },
925
- "OptionOptionPrerequisite": {
926
- "description": "The entry requires or prohibits itself as a select option of another entry.",
709
+ "PenaltyByHandedness": {
927
710
  "type": "object",
928
711
  "properties": {
929
- "tag": {
930
- "const": "SelectOption"
712
+ "one_handed": {
713
+ "description": "The penalty value for one-handed weapons.",
714
+ "type": "integer"
931
715
  },
932
- "id": {
933
- "description": "The target entry's identifier.",
934
- "$ref": "./_Identifier.schema.json#/definitions/ActivatableIdentifier"
716
+ "two_handed": {
717
+ "description": "The penalty value for two-handed weapons.",
718
+ "type": "integer"
935
719
  },
720
+ "applies_to_parry": {
721
+ "description": "Set to `true` if the penalty applies to the parry instead of the attack.",
722
+ "const": true
723
+ }
724
+ },
725
+ "required": [
726
+ "one_handed",
727
+ "two_handed"
728
+ ],
729
+ "additionalProperties": false
730
+ },
731
+ "PenaltyByActivation": {
732
+ "type": "object",
733
+ "properties": {
936
734
  "active": {
937
- "description": "Is the select option required (`true`) or prohibited (`false`)?",
938
- "type": "boolean"
735
+ "description": "The penalty value if the entry has been bought by the character.",
736
+ "type": "integer"
939
737
  },
940
- "level": {
941
- "description": "The required level, if any.",
942
- "type": "integer",
943
- "minimum": 2
738
+ "inactive": {
739
+ "description": "The penalty value if the entry has not been bought by the character.",
740
+ "type": "integer"
741
+ },
742
+ "applies_to_parry": {
743
+ "description": "Set to `true` if the penalty applies to the parry instead of the attack.",
744
+ "const": true
944
745
  }
945
746
  },
946
747
  "required": [
947
- "tag",
948
- "id",
949
- "active"
748
+ "active",
749
+ "inactive"
750
+ ],
751
+ "additionalProperties": false
752
+ },
753
+ "PenaltySelection": {
754
+ "type": "object",
755
+ "properties": {
756
+ "options": {
757
+ "$ref": "#/$defs/PenaltySelectionOptions"
758
+ }
759
+ },
760
+ "required": [
761
+ "options"
950
762
  ],
951
763
  "additionalProperties": false
952
764
  },
953
- "ExplicitOption": {
765
+ "PenaltySelectionOptions": {
954
766
  "oneOf": [
955
767
  {
956
768
  "type": "object",
957
769
  "properties": {
958
770
  "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"
771
+ "const": "Specific"
988
772
  },
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
773
+ "specific": {
774
+ "$ref": "#/$defs/SpecificPenaltySelectionOptions"
1023
775
  }
1024
776
  },
1025
777
  "required": [
1026
778
  "tag",
1027
- "id",
1028
- "translations"
779
+ "specific"
1029
780
  ],
1030
781
  "additionalProperties": false
1031
782
  },
@@ -1033,215 +784,187 @@
1033
784
  "type": "object",
1034
785
  "properties": {
1035
786
  "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
787
+ "const": "Range"
1083
788
  },
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"
1135
- },
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
789
+ "range": {
790
+ "$ref": "#/$defs/PenaltySelectionOptionsRange"
1154
791
  }
1155
792
  },
1156
793
  "required": [
1157
794
  "tag",
1158
- "id"
795
+ "range"
1159
796
  ],
1160
797
  "additionalProperties": false
798
+ }
799
+ ]
800
+ },
801
+ "SpecificPenaltySelectionOptions": {
802
+ "type": "object",
803
+ "properties": {
804
+ "list": {
805
+ "description": "The list of specific penalty options.",
806
+ "type": "array",
807
+ "items": {
808
+ "$ref": "#/$defs/SpecificPenaltySelectionOption"
809
+ },
810
+ "minItems": 2,
811
+ "uniqueItems": true
812
+ }
813
+ },
814
+ "required": [
815
+ "list"
816
+ ],
817
+ "additionalProperties": false
818
+ },
819
+ "SpecificPenaltySelectionOption": {
820
+ "type": "object",
821
+ "properties": {
822
+ "value": {
823
+ "description": "The penalty value.",
824
+ "type": "integer"
825
+ }
826
+ },
827
+ "required": [
828
+ "value"
829
+ ],
830
+ "additionalProperties": false
831
+ },
832
+ "PenaltySelectionOptionsRange": {
833
+ "type": "object",
834
+ "properties": {
835
+ "minimum": {
836
+ "description": "The minimum penalty value.",
837
+ "type": "integer"
1161
838
  },
1162
- {
1163
- "type": "object",
1164
- "properties": {
1165
- "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"
1174
- },
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
1201
- }
839
+ "maximum": {
840
+ "description": "The maximum penalty value.",
841
+ "type": "integer"
842
+ }
843
+ },
844
+ "required": [
845
+ "minimum",
846
+ "maximum"
847
+ ],
848
+ "additionalProperties": false
849
+ },
850
+ "PenaltyByLevel": {
851
+ "type": "object",
852
+ "properties": {
853
+ "levels": {
854
+ "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.",
855
+ "type": "array",
856
+ "items": {
857
+ "$ref": "#/$defs/PenaltyByLevelLevel"
1202
858
  },
1203
- "required": [
1204
- "tag",
1205
- "id"
1206
- ],
1207
- "additionalProperties": false
859
+ "minItems": 2
860
+ },
861
+ "external": {
862
+ "description": "The combat-related special ability of which the level defines the penalty\ninstead.",
863
+ "$ref": "#/$defs/PenaltyByExternalLevel"
864
+ }
865
+ },
866
+ "required": [
867
+ "levels"
868
+ ],
869
+ "additionalProperties": false
870
+ },
871
+ "PenaltyByLevelLevel": {
872
+ "type": "object",
873
+ "properties": {
874
+ "value": {
875
+ "description": "The penalty value for this level.",
876
+ "type": "integer"
877
+ }
878
+ },
879
+ "required": [
880
+ "value"
881
+ ],
882
+ "additionalProperties": false
883
+ },
884
+ "PenaltyByExternalLevel": {
885
+ "description": "The combat-related special ability of which the level defines the penalty\ninstead.",
886
+ "type": "object",
887
+ "properties": {
888
+ "id": {
889
+ "description": "The identifier of the combat-related special ability of which the level\ndefines the penalty instead.",
890
+ "$ref": "./_Identifier.schema.json#/$defs/CombatRelatedSpecialAbilityIdentifier"
891
+ }
892
+ },
893
+ "required": [
894
+ "id"
895
+ ],
896
+ "additionalProperties": false
897
+ },
898
+ "PenaltyByAttack": {
899
+ "type": "object",
900
+ "properties": {
901
+ "list": {
902
+ "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.",
903
+ "type": "array",
904
+ "items": {
905
+ "$ref": "#/$defs/PenaltyByAttackOrderItem"
906
+ },
907
+ "minItems": 1
908
+ },
909
+ "initial_order": {
910
+ "description": "The order of the first element in the `list` of penalties.",
911
+ "type": "number"
912
+ },
913
+ "attack_replacement": {
914
+ "description": "Set if a predefined different word should be used instead of the word\n`attack` for display purposes.",
915
+ "$ref": "#/$defs/PenaltyByAttackReplacement"
1208
916
  }
1209
- ]
1210
- },
1211
- "Rules": {
1212
- "description": "The rule text.",
1213
- "type": "string",
1214
- "minLength": 1
917
+ },
918
+ "required": [
919
+ "list"
920
+ ],
921
+ "additionalProperties": false
1215
922
  },
1216
- "Effect": {
1217
- "description": "The effect description.",
1218
- "type": "string",
1219
- "minLength": 1
923
+ "PenaltyByAttackOrderItem": {
924
+ "type": "object",
925
+ "properties": {
926
+ "value": {
927
+ "description": "The penalty value for this order.",
928
+ "type": "integer"
929
+ }
930
+ },
931
+ "required": [
932
+ "value"
933
+ ],
934
+ "additionalProperties": false
1220
935
  },
1221
- "CombatSpecialAbilityType": {
1222
- "description": "The definition of how the combat special ability can be used in combat.",
936
+ "PenaltyByAttackReplacement": {
937
+ "description": "Set if a predefined different word should be used instead of the word\n`attack` for display purposes.",
1223
938
  "oneOf": [
1224
939
  {
1225
940
  "type": "object",
1226
941
  "properties": {
1227
942
  "tag": {
1228
- "const": "Passive"
943
+ "const": "Throw"
1229
944
  }
1230
945
  },
1231
946
  "required": [
1232
947
  "tag"
1233
948
  ],
1234
949
  "additionalProperties": false
1235
- },
950
+ }
951
+ ]
952
+ },
953
+ "EnchantmentCost": {
954
+ "oneOf": [
1236
955
  {
1237
956
  "type": "object",
1238
957
  "properties": {
1239
958
  "tag": {
1240
- "const": "BasicManeuver"
959
+ "const": "ArcaneEnergyCost"
960
+ },
961
+ "arcane_energy_cost": {
962
+ "$ref": "#/$defs/ArcaneEnergyCost"
1241
963
  }
1242
964
  },
1243
965
  "required": [
1244
- "tag"
966
+ "tag",
967
+ "arcane_energy_cost"
1245
968
  ],
1246
969
  "additionalProperties": false
1247
970
  },
@@ -1249,236 +972,36 @@
1249
972
  "type": "object",
1250
973
  "properties": {
1251
974
  "tag": {
1252
- "const": "SpecialManeuver"
975
+ "const": "BindingCost"
976
+ },
977
+ "binding_cost": {
978
+ "$ref": "#/$defs/BindingCost"
1253
979
  }
1254
980
  },
1255
981
  "required": [
1256
- "tag"
982
+ "tag",
983
+ "binding_cost"
1257
984
  ],
1258
985
  "additionalProperties": false
1259
986
  }
1260
987
  ]
1261
988
  },
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
- },
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.",
989
+ "ArcaneEnergyCost": {
990
+ "description": "The AE Cost.",
1463
991
  "oneOf": [
1464
992
  {
1465
993
  "type": "object",
1466
994
  "properties": {
1467
995
  "tag": {
1468
- "const": "Single"
1469
- },
1470
- "value": {
1471
- "description": "The penalty value.",
1472
- "type": "integer"
996
+ "const": "Fixed"
1473
997
  },
1474
- "applies_to_parry": {
1475
- "description": "Set to `true` if the penalty applies to the parry instead of the attack.",
1476
- "const": true
998
+ "fixed": {
999
+ "$ref": "#/$defs/FixedArcaneEnergyCost"
1477
1000
  }
1478
1001
  },
1479
1002
  "required": [
1480
1003
  "tag",
1481
- "value"
1004
+ "fixed"
1482
1005
  ],
1483
1006
  "additionalProperties": false
1484
1007
  },
@@ -1486,25 +1009,15 @@
1486
1009
  "type": "object",
1487
1010
  "properties": {
1488
1011
  "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"
1012
+ "const": "PerCountable"
1498
1013
  },
1499
- "applies_to_parry": {
1500
- "description": "Set to `true` if the penalty applies to the parry instead of the attack.",
1501
- "const": true
1014
+ "per_countable": {
1015
+ "$ref": "#/$defs/ArcaneEnergyCostPerCountable"
1502
1016
  }
1503
1017
  },
1504
1018
  "required": [
1505
1019
  "tag",
1506
- "one_handed",
1507
- "two_handed"
1020
+ "per_countable"
1508
1021
  ],
1509
1022
  "additionalProperties": false
1510
1023
  },
@@ -1512,25 +1025,15 @@
1512
1025
  "type": "object",
1513
1026
  "properties": {
1514
1027
  "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"
1028
+ "const": "ActivationAndHalfInterval"
1524
1029
  },
1525
- "applies_to_parry": {
1526
- "description": "Set to `true` if the penalty applies to the parry instead of the attack.",
1527
- "const": true
1030
+ "activation_and_half_interval": {
1031
+ "$ref": "#/$defs/ActivationAndHalfIntervalArcaneEnergyCost"
1528
1032
  }
1529
1033
  },
1530
1034
  "required": [
1531
1035
  "tag",
1532
- "active",
1533
- "inactive"
1036
+ "activation_and_half_interval"
1534
1037
  ],
1535
1038
  "additionalProperties": false
1536
1039
  },
@@ -1538,70 +1041,15 @@
1538
1041
  "type": "object",
1539
1042
  "properties": {
1540
1043
  "tag": {
1541
- "const": "Selection"
1044
+ "const": "Indefinite"
1542
1045
  },
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
- ]
1046
+ "indefinite": {
1047
+ "$ref": "#/$defs/IndefiniteArcaneEnergyCost"
1600
1048
  }
1601
1049
  },
1602
1050
  "required": [
1603
1051
  "tag",
1604
- "options"
1052
+ "indefinite"
1605
1053
  ],
1606
1054
  "additionalProperties": false
1607
1055
  },
@@ -1609,34 +1057,15 @@
1609
1057
  "type": "object",
1610
1058
  "properties": {
1611
1059
  "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
1060
+ "const": "Disjunction"
1631
1061
  },
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"
1062
+ "disjunction": {
1063
+ "$ref": "#/$defs/ArcaneEnergyCostDisjunction"
1635
1064
  }
1636
1065
  },
1637
1066
  "required": [
1638
1067
  "tag",
1639
- "levels"
1068
+ "disjunction"
1640
1069
  ],
1641
1070
  "additionalProperties": false
1642
1071
  },
@@ -1644,51 +1073,14 @@
1644
1073
  "type": "object",
1645
1074
  "properties": {
1646
1075
  "tag": {
1647
- "const": "ByAttack"
1648
- },
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"
1076
+ "const": "None"
1670
1077
  },
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
- ]
1078
+ "none": {
1079
+ "$ref": "#/$defs/NoArcaneEnergyCost"
1687
1080
  }
1688
1081
  },
1689
1082
  "required": [
1690
- "tag",
1691
- "list"
1083
+ "tag"
1692
1084
  ],
1693
1085
  "additionalProperties": false
1694
1086
  },
@@ -1696,7 +1088,7 @@
1696
1088
  "type": "object",
1697
1089
  "properties": {
1698
1090
  "tag": {
1699
- "const": "DependsOnHitZone"
1091
+ "const": "Variable"
1700
1092
  }
1701
1093
  },
1702
1094
  "required": [
@@ -1706,133 +1098,55 @@
1706
1098
  }
1707
1099
  ]
1708
1100
  },
1709
- "EnchantmentCost": {
1710
- "oneOf": [
1711
- {
1712
- "type": "object",
1713
- "properties": {
1714
- "tag": {
1715
- "const": "ArcaneEnergyCost"
1716
- },
1717
- "ae_cost": {
1718
- "$ref": "#/definitions/ArcaneEnergyCost"
1719
- }
1720
- },
1721
- "required": [
1722
- "tag",
1723
- "ae_cost"
1724
- ],
1725
- "additionalProperties": false
1101
+ "FixedArcaneEnergyCost": {
1102
+ "type": "object",
1103
+ "properties": {
1104
+ "value": {
1105
+ "description": "The AE cost value.",
1106
+ "type": "integer",
1107
+ "minimum": 1
1726
1108
  },
1727
- {
1109
+ "is_permanent": {
1110
+ "description": "Set to `true` if the AE costs are permanent.",
1111
+ "const": true
1112
+ },
1113
+ "interval": {
1114
+ "description": "Specified if the AE cost `value` has to be paid for each time interval.",
1115
+ "$ref": "./_ActivatableSkillDuration.schema.json#/$defs/DurationUnitValue"
1116
+ },
1117
+ "per_level": {
1118
+ "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`).",
1119
+ "$ref": "#/$defs/FixedArcaneEnergyCostPerLevel"
1120
+ },
1121
+ "translations": {
1122
+ "description": "All translations for the entry, identified by IETF language tag (BCP47).",
1728
1123
  "type": "object",
1729
- "properties": {
1730
- "tag": {
1731
- "const": "BindingCost"
1732
- },
1733
- "binding_cost": {
1734
- "$ref": "#/definitions/BindingCost"
1124
+ "patternProperties": {
1125
+ "^[a-z]{2}-[A-Z]{2}$": {
1126
+ "$ref": "#/$defs/FixedArcaneEnergyCostTranslation"
1735
1127
  }
1736
1128
  },
1737
- "required": [
1738
- "tag",
1739
- "binding_cost"
1740
- ],
1129
+ "minProperties": 1,
1741
1130
  "additionalProperties": false
1742
1131
  }
1743
- ]
1132
+ },
1133
+ "required": [
1134
+ "value"
1135
+ ],
1136
+ "additionalProperties": false
1744
1137
  },
1745
- "ArcaneEnergyCost": {
1746
- "description": "The AE Cost.",
1138
+ "FixedArcaneEnergyCostPerLevel": {
1139
+ "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`).",
1747
1140
  "oneOf": [
1748
1141
  {
1749
1142
  "type": "object",
1750
1143
  "properties": {
1751
1144
  "tag": {
1752
- "const": "Fixed"
1753
- },
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
1145
+ "const": "Compressed"
1831
1146
  }
1832
1147
  },
1833
1148
  "required": [
1834
- "tag",
1835
- "value"
1149
+ "tag"
1836
1150
  ],
1837
1151
  "additionalProperties": false
1838
1152
  },
@@ -1840,294 +1154,132 @@
1840
1154
  "type": "object",
1841
1155
  "properties": {
1842
1156
  "tag": {
1843
- "const": "PerCountable"
1844
- },
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
1157
+ "const": "Verbose"
1913
1158
  }
1914
1159
  },
1915
1160
  "required": [
1916
- "tag",
1917
- "value"
1161
+ "tag"
1918
1162
  ],
1919
1163
  "additionalProperties": false
1164
+ }
1165
+ ]
1166
+ },
1167
+ "FixedArcaneEnergyCostTranslation": {
1168
+ "type": "object",
1169
+ "properties": {
1170
+ "note": {
1171
+ "description": "A note, appended to the generated option string in parenthesis.",
1172
+ "$ref": "./_ResponsiveText.schema.json#/$defs/ResponsiveTextOptional"
1173
+ }
1174
+ },
1175
+ "required": [],
1176
+ "minProperties": 1,
1177
+ "additionalProperties": false
1178
+ },
1179
+ "ArcaneEnergyCostPerCountable": {
1180
+ "type": "object",
1181
+ "properties": {
1182
+ "value": {
1183
+ "description": "The AE cost value that has to be per a specific countable entity.",
1184
+ "type": "integer",
1185
+ "minimum": 1
1920
1186
  },
1921
- {
1187
+ "base_value": {
1188
+ "description": "If defined, in addition to the cost per entity you have to pay a flat\namount, regardless of the entity count.",
1189
+ "type": "integer",
1190
+ "minimum": 1
1191
+ },
1192
+ "translations": {
1193
+ "description": "All translations for the entry, identified by IETF language tag (BCP47).",
1922
1194
  "type": "object",
1923
- "properties": {
1924
- "tag": {
1925
- "const": "ActivationAndHalfInterval"
1926
- },
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"
1195
+ "patternProperties": {
1196
+ "^[a-z]{2}-[A-Z]{2}$": {
1197
+ "$ref": "#/$defs/ArcaneEnergyCostPerCountableTranslation"
1936
1198
  }
1937
1199
  },
1938
- "required": [
1939
- "tag",
1940
- "value",
1941
- "interval"
1942
- ],
1200
+ "minProperties": 1,
1943
1201
  "additionalProperties": false
1202
+ }
1203
+ },
1204
+ "required": [
1205
+ "value"
1206
+ ],
1207
+ "additionalProperties": false
1208
+ },
1209
+ "ArcaneEnergyCostPerCountableTranslation": {
1210
+ "type": "object",
1211
+ "properties": {
1212
+ "per": {
1213
+ "description": "The cost have to be per a specific countable entity, e.g. `8 AE per\nperson`.",
1214
+ "$ref": "./_ResponsiveText.schema.json#/$defs/ResponsiveText"
1944
1215
  },
1945
- {
1946
- "type": "object",
1947
- "properties": {
1948
- "tag": {
1949
- "const": "Indefinite"
1950
- },
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
1216
+ "note": {
1217
+ "description": "A note, appended to the generated string in parenthesis.",
1218
+ "$ref": "./_ResponsiveText.schema.json#/$defs/ResponsiveTextOptional"
1219
+ }
1220
+ },
1221
+ "required": [
1222
+ "per"
1223
+ ],
1224
+ "additionalProperties": false
1225
+ },
1226
+ "ActivationAndHalfIntervalArcaneEnergyCost": {
1227
+ "type": "object",
1228
+ "properties": {
1229
+ "value": {
1230
+ "description": "The AE cost value that has to be payed for activation. Half of this value\nhas to be payed each interval.",
1231
+ "type": "integer",
1232
+ "minimum": 2,
1233
+ "multipleOf": 2
1234
+ },
1235
+ "interval": {
1236
+ "description": "The time interval for which the AE cost `value` has to be paid.",
1237
+ "$ref": "./_ActivatableSkillDuration.schema.json#/$defs/DurationUnitValue"
1238
+ }
1239
+ },
1240
+ "required": [
1241
+ "value",
1242
+ "interval"
1243
+ ],
1244
+ "additionalProperties": false
1245
+ },
1246
+ "IndefiniteArcaneEnergyCost": {
1247
+ "type": "object",
1248
+ "properties": {
1249
+ "modifier": {
1250
+ "description": "The indefinite AE cost may be modified by a certain value.",
1251
+ "$ref": "#/$defs/IndefiniteArcaneEnergyCostModifier"
1252
+ },
1253
+ "translations": {
1254
+ "description": "All translations for the entry, identified by IETF language tag (BCP47).",
1255
+ "type": "object",
1256
+ "patternProperties": {
1257
+ "^[a-z]{2}-[A-Z]{2}$": {
1258
+ "$ref": "#/$defs/IndefiniteArcaneEnergyCostTranslation"
2033
1259
  }
2034
1260
  },
2035
- "required": [
2036
- "tag",
2037
- "modifier",
2038
- "translations"
2039
- ],
1261
+ "minProperties": 1,
2040
1262
  "additionalProperties": false
2041
- },
1263
+ }
1264
+ },
1265
+ "required": [
1266
+ "modifier",
1267
+ "translations"
1268
+ ],
1269
+ "additionalProperties": false
1270
+ },
1271
+ "IndefiniteArcaneEnergyCostArithmetic": {
1272
+ "description": "Defines how the the `value` is set off against the check result.",
1273
+ "oneOf": [
2042
1274
  {
2043
1275
  "type": "object",
2044
1276
  "properties": {
2045
1277
  "tag": {
2046
- "const": "Disjunction"
2047
- },
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
- }
1278
+ "const": "Add"
2126
1279
  }
2127
1280
  },
2128
1281
  "required": [
2129
- "tag",
2130
- "options"
1282
+ "tag"
2131
1283
  ],
2132
1284
  "additionalProperties": false
2133
1285
  },
@@ -2135,63 +1287,159 @@
2135
1287
  "type": "object",
2136
1288
  "properties": {
2137
1289
  "tag": {
2138
- "const": "None"
2139
- },
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
1290
+ "const": "Subtract"
2175
1291
  }
2176
1292
  },
2177
1293
  "required": [
2178
1294
  "tag"
2179
1295
  ],
2180
1296
  "additionalProperties": false
1297
+ }
1298
+ ]
1299
+ },
1300
+ "IndefiniteArcaneEnergyCostModifier": {
1301
+ "type": "object",
1302
+ "properties": {
1303
+ "arithmetic": {
1304
+ "description": "The arithmetic how to apply the `value` to the `base`.",
1305
+ "$ref": "#/$defs/IndefiniteArcaneEnergyCostArithmetic"
2181
1306
  },
2182
- {
1307
+ "value": {
1308
+ "description": "The value that is applied to the `base` using the defined `arithmetic`.",
1309
+ "type": "integer",
1310
+ "minimum": 1
1311
+ }
1312
+ },
1313
+ "required": [
1314
+ "arithmetic",
1315
+ "value"
1316
+ ],
1317
+ "additionalProperties": false
1318
+ },
1319
+ "IndefiniteArcaneEnergyCostTranslation": {
1320
+ "type": "object",
1321
+ "properties": {
1322
+ "description": {
1323
+ "description": "A description of where the cost come from.",
1324
+ "$ref": "./_ResponsiveText.schema.json#/$defs/ResponsiveText"
1325
+ }
1326
+ },
1327
+ "required": [
1328
+ "description"
1329
+ ],
1330
+ "additionalProperties": false
1331
+ },
1332
+ "ArcaneEnergyCostDisjunction": {
1333
+ "type": "object",
1334
+ "properties": {
1335
+ "interval": {
1336
+ "description": "Specified if the selected AE cost option has to be paid for each time\ninterval.",
1337
+ "$ref": "#/$defs/ArcaneEnergyCostDisjunctionInterval"
1338
+ },
1339
+ "options": {
1340
+ "description": "The possible AE cost values.",
1341
+ "type": "array",
1342
+ "items": {
1343
+ "$ref": "#/$defs/ArcaneEnergyCostDisjunctionOption"
1344
+ }
1345
+ }
1346
+ },
1347
+ "required": [
1348
+ "options"
1349
+ ],
1350
+ "additionalProperties": false
1351
+ },
1352
+ "ArcaneEnergyCostDisjunctionInterval": {
1353
+ "type": "object",
1354
+ "properties": {
1355
+ "value": {
1356
+ "description": "The interval itself.",
1357
+ "$ref": "./_ActivatableSkillDuration.schema.json#/$defs/DurationUnitValue"
1358
+ },
1359
+ "activation_value": {
1360
+ "description": "The AE cost value for activation.",
1361
+ "type": "integer",
1362
+ "minimum": 1
1363
+ },
1364
+ "after_activation": {
1365
+ "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.",
1366
+ "type": "boolean"
1367
+ }
1368
+ },
1369
+ "required": [
1370
+ "value",
1371
+ "activation_value",
1372
+ "after_activation"
1373
+ ],
1374
+ "additionalProperties": false
1375
+ },
1376
+ "ArcaneEnergyCostDisjunctionOption": {
1377
+ "type": "object",
1378
+ "properties": {
1379
+ "value": {
1380
+ "description": "A possible AE cost value.",
1381
+ "type": "integer",
1382
+ "minimum": 1
1383
+ },
1384
+ "translations": {
1385
+ "description": "All translations for the entry, identified by IETF language tag (BCP47).",
2183
1386
  "type": "object",
2184
- "properties": {
2185
- "tag": {
2186
- "const": "Variable"
1387
+ "patternProperties": {
1388
+ "^[a-z]{2}-[A-Z]{2}$": {
1389
+ "$ref": "#/$defs/ArcaneEnergyCostDisjunctionOptionTranslation"
2187
1390
  }
2188
1391
  },
2189
- "required": [
2190
- "tag"
2191
- ],
1392
+ "minProperties": 1,
2192
1393
  "additionalProperties": false
2193
1394
  }
2194
- ]
1395
+ },
1396
+ "required": [
1397
+ "value"
1398
+ ],
1399
+ "additionalProperties": false
1400
+ },
1401
+ "ArcaneEnergyCostDisjunctionOptionTranslation": {
1402
+ "type": "object",
1403
+ "properties": {
1404
+ "note": {
1405
+ "description": "A note, appended to the generated option string in parenthesis.",
1406
+ "$ref": "./_ResponsiveText.schema.json#/$defs/ResponsiveTextOptional"
1407
+ }
1408
+ },
1409
+ "required": [],
1410
+ "minProperties": 1,
1411
+ "additionalProperties": false
1412
+ },
1413
+ "NoArcaneEnergyCost": {
1414
+ "type": "object",
1415
+ "properties": {
1416
+ "translations": {
1417
+ "description": "All translations for the entry, identified by IETF language tag (BCP47).",
1418
+ "type": "object",
1419
+ "patternProperties": {
1420
+ "^[a-z]{2}-[A-Z]{2}$": {
1421
+ "$ref": "#/$defs/NoArcaneEnergyCostTranslation"
1422
+ }
1423
+ },
1424
+ "minProperties": 1,
1425
+ "additionalProperties": false
1426
+ }
1427
+ },
1428
+ "required": [],
1429
+ "minProperties": 1,
1430
+ "additionalProperties": false
1431
+ },
1432
+ "NoArcaneEnergyCostTranslation": {
1433
+ "type": "object",
1434
+ "properties": {
1435
+ "note": {
1436
+ "description": "A note, appended to the generated string in parenthesis.",
1437
+ "$ref": "./_ResponsiveText.schema.json#/$defs/ResponsiveTextOptional"
1438
+ }
1439
+ },
1440
+ "required": [],
1441
+ "minProperties": 1,
1442
+ "additionalProperties": false
2195
1443
  },
2196
1444
  "Volume": {
2197
1445
  "description": "The volume points the enchantment needs.",
@@ -2202,15 +1450,13 @@
2202
1450
  "tag": {
2203
1451
  "const": "Fixed"
2204
1452
  },
2205
- "points": {
2206
- "description": "The volume points.",
2207
- "type": "integer",
2208
- "minimum": 0
1453
+ "fixed": {
1454
+ "$ref": "#/$defs/FixedVolume"
2209
1455
  }
2210
1456
  },
2211
1457
  "required": [
2212
1458
  "tag",
2213
- "points"
1459
+ "fixed"
2214
1460
  ],
2215
1461
  "additionalProperties": false
2216
1462
  },
@@ -2220,15 +1466,13 @@
2220
1466
  "tag": {
2221
1467
  "const": "PerLevel"
2222
1468
  },
2223
- "points": {
2224
- "description": "The volume points per level.",
2225
- "type": "integer",
2226
- "minimum": 1
1469
+ "per_level": {
1470
+ "$ref": "#/$defs/VolumePerLevel"
2227
1471
  }
2228
1472
  },
2229
1473
  "required": [
2230
1474
  "tag",
2231
- "points"
1475
+ "per_level"
2232
1476
  ],
2233
1477
  "additionalProperties": false
2234
1478
  },
@@ -2238,29 +1482,13 @@
2238
1482
  "tag": {
2239
1483
  "const": "ByLevel"
2240
1484
  },
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
1485
+ "by_level": {
1486
+ "$ref": "#/$defs/VolumeByLevel"
2259
1487
  }
2260
1488
  },
2261
1489
  "required": [
2262
1490
  "tag",
2263
- "list"
1491
+ "by_level"
2264
1492
  ],
2265
1493
  "additionalProperties": false
2266
1494
  },
@@ -2271,7 +1499,7 @@
2271
1499
  "const": "Map"
2272
1500
  },
2273
1501
  "map": {
2274
- "$ref": "#/definitions/VolumeMap"
1502
+ "$ref": "#/$defs/VolumeMap"
2275
1503
  }
2276
1504
  },
2277
1505
  "required": [
@@ -2282,6 +1510,65 @@
2282
1510
  }
2283
1511
  ]
2284
1512
  },
1513
+ "FixedVolume": {
1514
+ "type": "object",
1515
+ "properties": {
1516
+ "points": {
1517
+ "description": "The volume points.",
1518
+ "type": "integer",
1519
+ "minimum": 0
1520
+ }
1521
+ },
1522
+ "required": [
1523
+ "points"
1524
+ ],
1525
+ "additionalProperties": false
1526
+ },
1527
+ "VolumePerLevel": {
1528
+ "type": "object",
1529
+ "properties": {
1530
+ "points": {
1531
+ "description": "The volume points per level.",
1532
+ "type": "integer",
1533
+ "minimum": 1
1534
+ }
1535
+ },
1536
+ "required": [
1537
+ "points"
1538
+ ],
1539
+ "additionalProperties": false
1540
+ },
1541
+ "VolumeByLevel": {
1542
+ "type": "object",
1543
+ "properties": {
1544
+ "list": {
1545
+ "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.",
1546
+ "type": "array",
1547
+ "items": {
1548
+ "$ref": "#/$defs/VolumeByLevelItem"
1549
+ },
1550
+ "minItems": 2
1551
+ }
1552
+ },
1553
+ "required": [
1554
+ "list"
1555
+ ],
1556
+ "additionalProperties": false
1557
+ },
1558
+ "VolumeByLevelItem": {
1559
+ "type": "object",
1560
+ "properties": {
1561
+ "points": {
1562
+ "description": "The volume points for this level.",
1563
+ "type": "integer",
1564
+ "minimum": 0
1565
+ }
1566
+ },
1567
+ "required": [
1568
+ "points"
1569
+ ],
1570
+ "additionalProperties": false
1571
+ },
2285
1572
  "VolumeMap": {
2286
1573
  "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
1574
  "type": "object",
@@ -2290,7 +1577,7 @@
2290
1577
  "description": "The possible costs and associated labels.",
2291
1578
  "type": "array",
2292
1579
  "items": {
2293
- "$ref": "#/definitions/VolumeMapOption"
1580
+ "$ref": "#/$defs/VolumeMapOption"
2294
1581
  },
2295
1582
  "minItems": 2
2296
1583
  },
@@ -2299,23 +1586,7 @@
2299
1586
  "type": "object",
2300
1587
  "patternProperties": {
2301
1588
  "^[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
1589
+ "$ref": "#/$defs/VolumeMapTranslation"
2319
1590
  }
2320
1591
  },
2321
1592
  "minProperties": 1,
@@ -2327,6 +1598,26 @@
2327
1598
  ],
2328
1599
  "additionalProperties": false
2329
1600
  },
1601
+ "VolumeMapTranslation": {
1602
+ "type": "object",
1603
+ "properties": {
1604
+ "list_prepend": {
1605
+ "description": "Place a string between the `for` and the grouped map option labels.",
1606
+ "type": "string"
1607
+ },
1608
+ "list_append": {
1609
+ "description": "Place a string after the grouped map option labels.",
1610
+ "type": "string"
1611
+ },
1612
+ "replacement": {
1613
+ "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.",
1614
+ "type": "string"
1615
+ }
1616
+ },
1617
+ "required": [],
1618
+ "minProperties": 1,
1619
+ "additionalProperties": false
1620
+ },
2330
1621
  "VolumeMapOption": {
2331
1622
  "type": "object",
2332
1623
  "properties": {
@@ -2339,17 +1630,7 @@
2339
1630
  "description": "Links to the options this volume specification is meant for.",
2340
1631
  "type": "array",
2341
1632
  "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
1633
+ "$ref": "#/$defs/VolumeMapOptionAssociatedOption"
2353
1634
  }
2354
1635
  },
2355
1636
  "translations": {
@@ -2357,23 +1638,7 @@
2357
1638
  "type": "object",
2358
1639
  "patternProperties": {
2359
1640
  "^[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
1641
+ "$ref": "#/$defs/VolumeMapOptionTranslation"
2377
1642
  }
2378
1643
  },
2379
1644
  "minProperties": 1,
@@ -2386,6 +1651,36 @@
2386
1651
  ],
2387
1652
  "additionalProperties": false
2388
1653
  },
1654
+ "VolumeMapOptionAssociatedOption": {
1655
+ "type": "object",
1656
+ "properties": {
1657
+ "id": {
1658
+ "description": "The option's identifier.",
1659
+ "$ref": "./_Identifier.schema.json#/$defs/VolumePointsOptionReferenceIdentifier"
1660
+ }
1661
+ },
1662
+ "required": [
1663
+ "id"
1664
+ ],
1665
+ "additionalProperties": false
1666
+ },
1667
+ "VolumeMapOptionTranslation": {
1668
+ "type": "object",
1669
+ "properties": {
1670
+ "label": {
1671
+ "description": "The description of the option for cost string generation.",
1672
+ "$ref": "./_NonEmptyString.schema.json#/$defs/NonEmptyString"
1673
+ },
1674
+ "label_standalone": {
1675
+ "description": "The description of the option if used standalone. Only used if\ndifferent from `label`.",
1676
+ "$ref": "./_NonEmptyString.schema.json#/$defs/NonEmptyString"
1677
+ }
1678
+ },
1679
+ "required": [
1680
+ "label"
1681
+ ],
1682
+ "additionalProperties": false
1683
+ },
2389
1684
  "BindingCost": {
2390
1685
  "description": "The binding cost for an enchantment.",
2391
1686
  "oneOf": [
@@ -2395,15 +1690,13 @@
2395
1690
  "tag": {
2396
1691
  "const": "Fixed"
2397
1692
  },
2398
- "permanent_value": {
2399
- "description": "The permanent AE cost.",
2400
- "type": "integer",
2401
- "minimum": 1
1693
+ "fixed": {
1694
+ "$ref": "#/$defs/FixedBindingCost"
2402
1695
  }
2403
1696
  },
2404
1697
  "required": [
2405
1698
  "tag",
2406
- "permanent_value"
1699
+ "fixed"
2407
1700
  ],
2408
1701
  "additionalProperties": false
2409
1702
  },
@@ -2413,15 +1706,13 @@
2413
1706
  "tag": {
2414
1707
  "const": "PerLevel"
2415
1708
  },
2416
- "permanent_value": {
2417
- "description": "The permanent AE cost per level.",
2418
- "type": "integer",
2419
- "minimum": 1
1709
+ "per_level": {
1710
+ "$ref": "#/$defs/BindingCostPerLevel"
2420
1711
  }
2421
1712
  },
2422
1713
  "required": [
2423
1714
  "tag",
2424
- "permanent_value"
1715
+ "per_level"
2425
1716
  ],
2426
1717
  "additionalProperties": false
2427
1718
  },
@@ -2432,7 +1723,7 @@
2432
1723
  "const": "Map"
2433
1724
  },
2434
1725
  "map": {
2435
- "$ref": "#/definitions/BindingCostMap"
1726
+ "$ref": "#/$defs/BindingCostMap"
2436
1727
  }
2437
1728
  },
2438
1729
  "required": [
@@ -2441,7 +1732,35 @@
2441
1732
  ],
2442
1733
  "additionalProperties": false
2443
1734
  }
2444
- ]
1735
+ ]
1736
+ },
1737
+ "FixedBindingCost": {
1738
+ "type": "object",
1739
+ "properties": {
1740
+ "permanent_value": {
1741
+ "description": "The permanent AE cost.\n\nIf the enchantment has multiple levels, it is only applied for the first\nlevel.",
1742
+ "type": "integer",
1743
+ "minimum": 1
1744
+ }
1745
+ },
1746
+ "required": [
1747
+ "permanent_value"
1748
+ ],
1749
+ "additionalProperties": false
1750
+ },
1751
+ "BindingCostPerLevel": {
1752
+ "type": "object",
1753
+ "properties": {
1754
+ "permanent_value": {
1755
+ "description": "The permanent AE cost per level.",
1756
+ "type": "integer",
1757
+ "minimum": 1
1758
+ }
1759
+ },
1760
+ "required": [
1761
+ "permanent_value"
1762
+ ],
1763
+ "additionalProperties": false
2445
1764
  },
2446
1765
  "BindingCostMap": {
2447
1766
  "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.",
@@ -2451,7 +1770,7 @@
2451
1770
  "description": "The possible costs and associated labels.",
2452
1771
  "type": "array",
2453
1772
  "items": {
2454
- "$ref": "#/definitions/VolumeMapOption"
1773
+ "$ref": "#/$defs/VolumeMapOption"
2455
1774
  },
2456
1775
  "minItems": 2
2457
1776
  },
@@ -2460,23 +1779,7 @@
2460
1779
  "type": "object",
2461
1780
  "patternProperties": {
2462
1781
  "^[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
1782
+ "$ref": "#/$defs/BindingCostMapTranslation"
2480
1783
  }
2481
1784
  },
2482
1785
  "minProperties": 1,
@@ -2488,6 +1791,26 @@
2488
1791
  ],
2489
1792
  "additionalProperties": false
2490
1793
  },
1794
+ "BindingCostMapTranslation": {
1795
+ "type": "object",
1796
+ "properties": {
1797
+ "list_prepend": {
1798
+ "description": "Place a string between the `for` and the grouped map option labels.",
1799
+ "$ref": "./_NonEmptyString.schema.json#/$defs/NonEmptyString"
1800
+ },
1801
+ "list_append": {
1802
+ "description": "Place a string after the grouped map option labels.",
1803
+ "$ref": "./_NonEmptyString.schema.json#/$defs/NonEmptyString"
1804
+ },
1805
+ "replacement": {
1806
+ "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.",
1807
+ "$ref": "./_NonEmptyString.schema.json#/$defs/NonEmptyString"
1808
+ }
1809
+ },
1810
+ "required": [],
1811
+ "minProperties": 1,
1812
+ "additionalProperties": false
1813
+ },
2491
1814
  "BindingCostMapOption": {
2492
1815
  "type": "object",
2493
1816
  "properties": {
@@ -2501,23 +1824,7 @@
2501
1824
  "type": "object",
2502
1825
  "patternProperties": {
2503
1826
  "^[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
1827
+ "$ref": "#/$defs/BindingCostMapOptionTranslation"
2521
1828
  }
2522
1829
  },
2523
1830
  "minProperties": 1,
@@ -2529,6 +1836,23 @@
2529
1836
  ],
2530
1837
  "additionalProperties": false
2531
1838
  },
1839
+ "BindingCostMapOptionTranslation": {
1840
+ "type": "object",
1841
+ "properties": {
1842
+ "label": {
1843
+ "description": "The description of the option for cost string generation.",
1844
+ "$ref": "./_NonEmptyString.schema.json#/$defs/NonEmptyString"
1845
+ },
1846
+ "label_standalone": {
1847
+ "description": "The description of the option if used standalone. Only used if\ndifferent from `label`.",
1848
+ "$ref": "./_NonEmptyString.schema.json#/$defs/NonEmptyString"
1849
+ }
1850
+ },
1851
+ "required": [
1852
+ "label"
1853
+ ],
1854
+ "additionalProperties": false
1855
+ },
2532
1856
  "Property": {
2533
1857
  "description": "The magic property's identifier. `DependingOnProperty` can only be used if\nthe special ability has an option to select a property.",
2534
1858
  "oneOf": [
@@ -2536,7 +1860,7 @@
2536
1860
  "type": "object",
2537
1861
  "properties": {
2538
1862
  "tag": {
2539
- "const": "DependingOnProperty"
1863
+ "const": "DependingOnSelection"
2540
1864
  }
2541
1865
  },
2542
1866
  "required": [
@@ -2550,24 +1874,21 @@
2550
1874
  "tag": {
2551
1875
  "const": "Fixed"
2552
1876
  },
2553
- "id": {
2554
- "description": "The property's identifier.",
2555
- "type": "integer",
2556
- "minimum": 1
1877
+ "fixed": {
1878
+ "$ref": "./_SimpleReferences.schema.json#/$defs/PropertyReference"
2557
1879
  }
2558
1880
  },
2559
1881
  "required": [
2560
1882
  "tag",
2561
- "id"
1883
+ "fixed"
2562
1884
  ],
2563
1885
  "additionalProperties": false
2564
1886
  }
2565
1887
  ]
2566
1888
  },
2567
1889
  "Aspect": {
2568
- "description": "The blessed aspect's identifier.",
2569
- "type": "integer",
2570
- "minimum": 1
1890
+ "description": "The blessed aspect.",
1891
+ "$ref": "./_SimpleReferences.schema.json#/$defs/AspectReference"
2571
1892
  },
2572
1893
  "AdvancedSpecialAbility": {
2573
1894
  "description": "A reference to an advanced special ability.",
@@ -2578,15 +1899,13 @@
2578
1899
  "tag": {
2579
1900
  "const": "General"
2580
1901
  },
2581
- "id": {
2582
- "description": "The advanced special ability's numeric identifier.",
2583
- "type": "integer",
2584
- "minimum": 1
1902
+ "general": {
1903
+ "$ref": "./_SimpleReferences.schema.json#/$defs/AdvancedSpecialAbilityReference"
2585
1904
  }
2586
1905
  },
2587
1906
  "required": [
2588
1907
  "tag",
2589
- "id"
1908
+ "general"
2590
1909
  ],
2591
1910
  "additionalProperties": false
2592
1911
  },
@@ -2596,24 +1915,13 @@
2596
1915
  "tag": {
2597
1916
  "const": "RestrictOptions"
2598
1917
  },
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
1918
+ "restrict_options": {
1919
+ "$ref": "#/$defs/RestrictAdvancedSpecialAbilityOptions"
2611
1920
  }
2612
1921
  },
2613
1922
  "required": [
2614
1923
  "tag",
2615
- "id",
2616
- "option"
1924
+ "restrict_options"
2617
1925
  ],
2618
1926
  "additionalProperties": false
2619
1927
  },
@@ -2623,42 +1931,13 @@
2623
1931
  "tag": {
2624
1932
  "const": "OneOf"
2625
1933
  },
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"
1934
+ "one_of": {
1935
+ "$ref": "#/$defs/OneOfAdvancedSpecialAbilityOptions"
2655
1936
  }
2656
1937
  },
2657
1938
  "required": [
2658
1939
  "tag",
2659
- "options",
2660
- "is_selection_required_on_purchase",
2661
- "option"
1940
+ "one_of"
2662
1941
  ],
2663
1942
  "additionalProperties": false
2664
1943
  },
@@ -2668,88 +1947,124 @@
2668
1947
  "tag": {
2669
1948
  "const": "DeriveFromExternalOption"
2670
1949
  },
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
1950
+ "derive_from_external_option": {
1951
+ "$ref": "#/$defs/AdvancedSpecialAbilityDerivedFromExternalOption"
2722
1952
  }
2723
1953
  },
2724
1954
  "required": [
2725
1955
  "tag",
2726
- "external_entry",
2727
- "mappings",
2728
- "is_selection_required_on_purchase",
2729
- "option"
1956
+ "derive_from_external_option"
2730
1957
  ],
2731
1958
  "additionalProperties": false
2732
1959
  }
2733
1960
  ]
2734
1961
  },
1962
+ "RestrictAdvancedSpecialAbilityOptions": {
1963
+ "type": "object",
1964
+ "properties": {
1965
+ "id": {
1966
+ "description": "The advanced special ability's numeric identifier.",
1967
+ "type": "integer",
1968
+ "minimum": 1
1969
+ },
1970
+ "option": {
1971
+ "description": "Specify the select option(s) that only are allowed for the referenced\nadvanced special ability; others are disallowed.",
1972
+ "type": "array",
1973
+ "items": {
1974
+ "$ref": "./_Identifier.schema.json#/$defs/AdvancedSpecialAbilityRestrictedOptionIdentifier"
1975
+ },
1976
+ "minItems": 1
1977
+ }
1978
+ },
1979
+ "required": [
1980
+ "id",
1981
+ "option"
1982
+ ],
1983
+ "additionalProperties": false
1984
+ },
1985
+ "OneOfAdvancedSpecialAbilityOptions": {
1986
+ "type": "object",
1987
+ "properties": {
1988
+ "options": {
1989
+ "description": "The possible advanced special abilities.",
1990
+ "$ref": "./_SimpleReferences.schema.json#/$defs/AdvancedSpecialAbilityReference"
1991
+ },
1992
+ "is_selection_required_on_purchase": {
1993
+ "description": "Do have to choose the advanced special ability when buying the style\nspecial ability? Otherwise the decision can be made later.",
1994
+ "type": "boolean"
1995
+ },
1996
+ "display_option": {
1997
+ "$ref": "./prerequisites/DisplayOption.schema.json#/$defs/DisplayOption"
1998
+ }
1999
+ },
2000
+ "required": [
2001
+ "options",
2002
+ "is_selection_required_on_purchase"
2003
+ ],
2004
+ "additionalProperties": false
2005
+ },
2006
+ "AdvancedSpecialAbilityDerivedFromExternalOption": {
2007
+ "type": "object",
2008
+ "properties": {
2009
+ "external_entry": {
2010
+ "description": "The possible advanced special abilities.",
2011
+ "$ref": "./_Identifier.schema.json#/$defs/MagicalTraditionIdentifier"
2012
+ },
2013
+ "map": {
2014
+ "description": "Map options from the external entry to allowed advanced special abilities.",
2015
+ "type": "array",
2016
+ "items": {
2017
+ "$ref": "#/$defs/AdvancedSpecialAbilityDerivedFromExternalOptionMapping"
2018
+ },
2019
+ "minItems": 1
2020
+ },
2021
+ "display_option": {
2022
+ "$ref": "./prerequisites/DisplayOption.schema.json#/$defs/DisplayOption"
2023
+ }
2024
+ },
2025
+ "required": [
2026
+ "external_entry",
2027
+ "map"
2028
+ ],
2029
+ "additionalProperties": false
2030
+ },
2031
+ "AdvancedSpecialAbilityDerivedFromExternalOptionMapping": {
2032
+ "description": "Mapping from an option of the external entry to an allowed advanced special\nability.",
2033
+ "type": "object",
2034
+ "properties": {
2035
+ "from_option": {
2036
+ "description": "The select option's identifier.",
2037
+ "$ref": "./_Identifier.schema.json#/$defs/PatronIdentifier"
2038
+ },
2039
+ "to_advanced": {
2040
+ "description": "The advanced special ability's identifier.",
2041
+ "$ref": "./_SimpleReferences.schema.json#/$defs/AdvancedSpecialAbilityReference"
2042
+ }
2043
+ },
2044
+ "required": [
2045
+ "from_option",
2046
+ "to_advanced"
2047
+ ],
2048
+ "additionalProperties": false
2049
+ },
2735
2050
  "AdvancedSpecialAbilityDerivedExternalEntryId": {
2736
- "$ref": "./_Identifier.schema.json#/definitions/MagicalTraditionIdentifier"
2051
+ "$ref": "./_Identifier.schema.json#/$defs/MagicalTraditionIdentifier"
2737
2052
  },
2738
2053
  "AdvancedSpecialAbilityDerivedExternalEntryOptionId": {
2739
- "$ref": "./_Identifier.schema.json#/definitions/PatronIdentifier"
2054
+ "$ref": "./_Identifier.schema.json#/$defs/PatronIdentifier"
2740
2055
  },
2741
2056
  "AdvancedSpecialAbilities": {
2742
2057
  "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
2058
  "type": "array",
2744
2059
  "items": [
2745
2060
  {
2746
- "$ref": "#/definitions/AdvancedSpecialAbility"
2061
+ "$ref": "#/$defs/AdvancedSpecialAbility"
2747
2062
  },
2748
2063
  {
2749
- "$ref": "#/definitions/AdvancedSpecialAbility"
2064
+ "$ref": "#/$defs/AdvancedSpecialAbility"
2750
2065
  },
2751
2066
  {
2752
- "$ref": "#/definitions/AdvancedSpecialAbility"
2067
+ "$ref": "#/$defs/AdvancedSpecialAbility"
2753
2068
  }
2754
2069
  ],
2755
2070
  "minItems": 3,
@@ -2788,16 +2103,13 @@
2788
2103
  "tag": {
2789
2104
  "const": "All"
2790
2105
  },
2791
- "restrictions": {
2792
- "type": "array",
2793
- "items": {
2794
- "$ref": "#/definitions/ApplicableAllCombatTechniquesRestriction"
2795
- },
2796
- "minItems": 1
2106
+ "all": {
2107
+ "$ref": "#/$defs/AllApplicableCombatTechniques"
2797
2108
  }
2798
2109
  },
2799
2110
  "required": [
2800
- "tag"
2111
+ "tag",
2112
+ "all"
2801
2113
  ],
2802
2114
  "additionalProperties": false
2803
2115
  },
@@ -2807,16 +2119,13 @@
2807
2119
  "tag": {
2808
2120
  "const": "AllClose"
2809
2121
  },
2810
- "restrictions": {
2811
- "type": "array",
2812
- "items": {
2813
- "$ref": "#/definitions/ApplicableCloseCombatTechniquesRestriction"
2814
- },
2815
- "minItems": 1
2122
+ "all_close": {
2123
+ "$ref": "#/$defs/AllApplicableCloseCombatTechniques"
2816
2124
  }
2817
2125
  },
2818
2126
  "required": [
2819
- "tag"
2127
+ "tag",
2128
+ "all_close"
2820
2129
  ],
2821
2130
  "additionalProperties": false
2822
2131
  },
@@ -2826,16 +2135,13 @@
2826
2135
  "tag": {
2827
2136
  "const": "AllRanged"
2828
2137
  },
2829
- "restrictions": {
2830
- "type": "array",
2831
- "items": {
2832
- "$ref": "#/definitions/ApplicableRangedCombatTechniquesRestriction"
2833
- },
2834
- "minItems": 1
2138
+ "all_ranged": {
2139
+ "$ref": "#/$defs/AllApplicableRangedCombatTechniques"
2835
2140
  }
2836
2141
  },
2837
2142
  "required": [
2838
- "tag"
2143
+ "tag",
2144
+ "all_ranged"
2839
2145
  ],
2840
2146
  "additionalProperties": false
2841
2147
  },
@@ -2845,38 +2151,95 @@
2845
2151
  "tag": {
2846
2152
  "const": "Specific"
2847
2153
  },
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
2154
+ "specific": {
2155
+ "$ref": "#/$defs/SpecificApplicableCombatTechniques"
2870
2156
  }
2871
2157
  },
2872
2158
  "required": [
2873
2159
  "tag",
2874
- "list"
2160
+ "specific"
2875
2161
  ],
2876
2162
  "additionalProperties": false
2877
2163
  }
2878
2164
  ]
2879
2165
  },
2166
+ "AllApplicableCombatTechniques": {
2167
+ "type": "object",
2168
+ "properties": {
2169
+ "restrictions": {
2170
+ "type": "array",
2171
+ "items": {
2172
+ "$ref": "#/$defs/ApplicableAllCombatTechniquesRestriction"
2173
+ },
2174
+ "minItems": 1
2175
+ }
2176
+ },
2177
+ "required": [],
2178
+ "additionalProperties": false
2179
+ },
2180
+ "AllApplicableCloseCombatTechniques": {
2181
+ "type": "object",
2182
+ "properties": {
2183
+ "restrictions": {
2184
+ "type": "array",
2185
+ "items": {
2186
+ "$ref": "#/$defs/ApplicableCloseCombatTechniquesRestriction"
2187
+ },
2188
+ "minItems": 1
2189
+ }
2190
+ },
2191
+ "required": [],
2192
+ "additionalProperties": false
2193
+ },
2194
+ "AllApplicableRangedCombatTechniques": {
2195
+ "type": "object",
2196
+ "properties": {
2197
+ "restrictions": {
2198
+ "type": "array",
2199
+ "items": {
2200
+ "$ref": "#/$defs/ApplicableRangedCombatTechniquesRestriction"
2201
+ },
2202
+ "minItems": 1
2203
+ }
2204
+ },
2205
+ "required": [],
2206
+ "additionalProperties": false
2207
+ },
2208
+ "SpecificApplicableCombatTechniques": {
2209
+ "type": "object",
2210
+ "properties": {
2211
+ "list": {
2212
+ "type": "array",
2213
+ "items": {
2214
+ "$ref": "#/$defs/SpecificApplicableCombatTechnique"
2215
+ },
2216
+ "minItems": 1
2217
+ }
2218
+ },
2219
+ "required": [
2220
+ "list"
2221
+ ],
2222
+ "additionalProperties": false
2223
+ },
2224
+ "SpecificApplicableCombatTechnique": {
2225
+ "type": "object",
2226
+ "properties": {
2227
+ "id": {
2228
+ "$ref": "./_Identifier.schema.json#/$defs/CombatTechniqueIdentifier"
2229
+ },
2230
+ "restrictions": {
2231
+ "type": "array",
2232
+ "items": {
2233
+ "$ref": "#/$defs/ApplicableSpecificCombatTechniquesRestriction"
2234
+ },
2235
+ "minItems": 1
2236
+ }
2237
+ },
2238
+ "required": [
2239
+ "id"
2240
+ ],
2241
+ "additionalProperties": false
2242
+ },
2880
2243
  "ApplicableAllCombatTechniquesRestriction": {
2881
2244
  "oneOf": [
2882
2245
  {
@@ -2921,15 +2284,13 @@
2921
2284
  "tag": {
2922
2285
  "const": "Race"
2923
2286
  },
2924
- "id": {
2925
- "description": "The race's numeric identifier.",
2926
- "type": "integer",
2927
- "minimum": 1
2287
+ "race": {
2288
+ "$ref": "#/$defs/ApplicableCombatTechniquesRaceRestriction"
2928
2289
  }
2929
2290
  },
2930
2291
  "required": [
2931
2292
  "tag",
2932
- "id"
2293
+ "race"
2933
2294
  ],
2934
2295
  "additionalProperties": false
2935
2296
  },
@@ -2939,19 +2300,28 @@
2939
2300
  "tag": {
2940
2301
  "const": "ExcludeCombatTechniques"
2941
2302
  },
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"
2303
+ "exclude_combat_techniques": {
2304
+ "type": "object",
2305
+ "properties": {
2306
+ "list": {
2307
+ "description": "The combat techniques this combat special ability is **not** applicable to.",
2308
+ "type": "array",
2309
+ "items": {
2310
+ "$ref": "./_SimpleReferences.schema.json#/$defs/CombatTechniqueReference"
2311
+ },
2312
+ "minItems": 1,
2313
+ "uniqueItems": true
2314
+ }
2947
2315
  },
2948
- "minItems": 1,
2949
- "uniqueItems": true
2316
+ "required": [
2317
+ "list"
2318
+ ],
2319
+ "additionalProperties": false
2950
2320
  }
2951
2321
  },
2952
2322
  "required": [
2953
2323
  "tag",
2954
- "list"
2324
+ "exclude_combat_techniques"
2955
2325
  ],
2956
2326
  "additionalProperties": false
2957
2327
  }
@@ -3037,15 +2407,13 @@
3037
2407
  "tag": {
3038
2408
  "const": "Race"
3039
2409
  },
3040
- "id": {
3041
- "description": "The race's numeric identifier.",
3042
- "type": "integer",
3043
- "minimum": 1
2410
+ "race": {
2411
+ "$ref": "#/$defs/ApplicableCombatTechniquesRaceRestriction"
3044
2412
  }
3045
2413
  },
3046
2414
  "required": [
3047
2415
  "tag",
3048
- "id"
2416
+ "race"
3049
2417
  ],
3050
2418
  "additionalProperties": false
3051
2419
  },
@@ -3055,30 +2423,28 @@
3055
2423
  "tag": {
3056
2424
  "const": "ExcludeCombatTechniques"
3057
2425
  },
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
2426
+ "exclude_combat_techniques": {
2427
+ "type": "object",
2428
+ "properties": {
2429
+ "list": {
2430
+ "description": "The combat techniques this combat special ability is **not** applicable to.",
2431
+ "type": "array",
2432
+ "items": {
2433
+ "$ref": "./_SimpleReferences.schema.json#/$defs/CloseCombatTechniqueReference"
2434
+ },
2435
+ "minItems": 1,
2436
+ "uniqueItems": true
2437
+ }
3074
2438
  },
3075
- "minItems": 1,
3076
- "uniqueItems": true
2439
+ "required": [
2440
+ "list"
2441
+ ],
2442
+ "additionalProperties": false
3077
2443
  }
3078
2444
  },
3079
2445
  "required": [
3080
2446
  "tag",
3081
- "list"
2447
+ "exclude_combat_techniques"
3082
2448
  ],
3083
2449
  "additionalProperties": false
3084
2450
  }
@@ -3128,15 +2494,13 @@
3128
2494
  "tag": {
3129
2495
  "const": "Race"
3130
2496
  },
3131
- "id": {
3132
- "description": "The race's numeric identifier.",
3133
- "type": "integer",
3134
- "minimum": 1
2497
+ "race": {
2498
+ "$ref": "#/$defs/ApplicableCombatTechniquesRaceRestriction"
3135
2499
  }
3136
2500
  },
3137
2501
  "required": [
3138
2502
  "tag",
3139
- "id"
2503
+ "race"
3140
2504
  ],
3141
2505
  "additionalProperties": false
3142
2506
  },
@@ -3146,30 +2510,28 @@
3146
2510
  "tag": {
3147
2511
  "const": "ExcludeCombatTechniques"
3148
2512
  },
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
2513
+ "exclude_combat_techniques": {
2514
+ "type": "object",
2515
+ "properties": {
2516
+ "list": {
2517
+ "description": "The combat techniques this combat special ability is **not** applicable to.",
2518
+ "type": "array",
2519
+ "items": {
2520
+ "$ref": "./_SimpleReferences.schema.json#/$defs/RangedCombatTechniqueReference"
2521
+ },
2522
+ "minItems": 1,
2523
+ "uniqueItems": true
2524
+ }
3165
2525
  },
3166
- "minItems": 1,
3167
- "uniqueItems": true
2526
+ "required": [
2527
+ "list"
2528
+ ],
2529
+ "additionalProperties": false
3168
2530
  }
3169
2531
  },
3170
2532
  "required": [
3171
2533
  "tag",
3172
- "list"
2534
+ "exclude_combat_techniques"
3173
2535
  ],
3174
2536
  "additionalProperties": false
3175
2537
  }
@@ -3219,15 +2581,13 @@
3219
2581
  "tag": {
3220
2582
  "const": "Race"
3221
2583
  },
3222
- "id": {
3223
- "description": "The race's numeric identifier.",
3224
- "type": "integer",
3225
- "minimum": 1
2584
+ "race": {
2585
+ "$ref": "#/$defs/ApplicableCombatTechniquesRaceRestriction"
3226
2586
  }
3227
2587
  },
3228
2588
  "required": [
3229
2589
  "tag",
3230
- "id"
2590
+ "race"
3231
2591
  ],
3232
2592
  "additionalProperties": false
3233
2593
  },
@@ -3238,9 +2598,7 @@
3238
2598
  "const": "Level"
3239
2599
  },
3240
2600
  "level": {
3241
- "description": "The combat special ability is only applicable on a certain level.",
3242
- "type": "integer",
3243
- "minimum": 1
2601
+ "$ref": "#/$defs/ApplicableCombatTechniquesLevelRestriction"
3244
2602
  }
3245
2603
  },
3246
2604
  "required": [
@@ -3255,35 +2613,53 @@
3255
2613
  "tag": {
3256
2614
  "const": "Weapons"
3257
2615
  },
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
2616
+ "weapons": {
2617
+ "$ref": "#/$defs/ApplicableCombatTechniquesWeaponRestriction"
3277
2618
  }
3278
2619
  },
3279
2620
  "required": [
3280
2621
  "tag",
3281
- "list"
2622
+ "weapons"
3282
2623
  ],
3283
2624
  "additionalProperties": false
3284
2625
  }
3285
2626
  ]
3286
2627
  },
2628
+ "ApplicableCombatTechniquesRaceRestriction": {
2629
+ "$ref": "./_SimpleReferences.schema.json#/$defs/RaceReference"
2630
+ },
2631
+ "ApplicableCombatTechniquesLevelRestriction": {
2632
+ "type": "object",
2633
+ "properties": {
2634
+ "level": {
2635
+ "description": "The combat special ability is only applicable on a certain level.",
2636
+ "type": "integer",
2637
+ "minimum": 1
2638
+ }
2639
+ },
2640
+ "required": [
2641
+ "level"
2642
+ ],
2643
+ "additionalProperties": false
2644
+ },
2645
+ "ApplicableCombatTechniquesWeaponRestriction": {
2646
+ "type": "object",
2647
+ "properties": {
2648
+ "list": {
2649
+ "description": "The specific weapons this combat special ability is only applicable to.",
2650
+ "type": "array",
2651
+ "items": {
2652
+ "$ref": "./_SimpleReferences.schema.json#/$defs/WeaponReference"
2653
+ },
2654
+ "minItems": 1,
2655
+ "uniqueItems": true
2656
+ }
2657
+ },
2658
+ "required": [
2659
+ "list"
2660
+ ],
2661
+ "additionalProperties": false
2662
+ },
3287
2663
  "AdventurePointsValue": {
3288
2664
  "oneOf": [
3289
2665
  {
@@ -3292,14 +2668,13 @@
3292
2668
  "tag": {
3293
2669
  "const": "Fixed"
3294
2670
  },
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"
2671
+ "fixed": {
2672
+ "$ref": "#/$defs/FixedAdventurePointsValue"
3298
2673
  }
3299
2674
  },
3300
2675
  "required": [
3301
2676
  "tag",
3302
- "value"
2677
+ "fixed"
3303
2678
  ],
3304
2679
  "additionalProperties": false
3305
2680
  },
@@ -3309,55 +2684,13 @@
3309
2684
  "tag": {
3310
2685
  "const": "ByLevel"
3311
2686
  },
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
- "const": "ByImprovementCost"
3332
- },
3333
- "values": {
3334
- "description": "An entry with a selection of skills may have different costs for\ndifferent improvement costs of the selected skill.\n\nIf the select options will not have entries with improvement cost A\n(combat techniques only), you may leave out A.",
3335
- "type": "object",
3336
- "properties": {
3337
- "A": {
3338
- "$ref": "#/definitions/AdventurePointsSingleValue"
3339
- },
3340
- "B": {
3341
- "$ref": "#/definitions/AdventurePointsSingleValue"
3342
- },
3343
- "C": {
3344
- "$ref": "#/definitions/AdventurePointsSingleValue"
3345
- },
3346
- "D": {
3347
- "$ref": "#/definitions/AdventurePointsSingleValue"
3348
- }
3349
- },
3350
- "required": [
3351
- "B",
3352
- "C",
3353
- "D"
3354
- ],
3355
- "additionalProperties": false
2687
+ "by_level": {
2688
+ "$ref": "#/$defs/AdventurePointsValueByLevel"
3356
2689
  }
3357
2690
  },
3358
2691
  "required": [
3359
2692
  "tag",
3360
- "values"
2693
+ "by_level"
3361
2694
  ],
3362
2695
  "additionalProperties": false
3363
2696
  },
@@ -3365,7 +2698,6 @@
3365
2698
  "type": "object",
3366
2699
  "properties": {
3367
2700
  "tag": {
3368
- "description": "Used if AP value is defined by the selected option(s) or special rules.",
3369
2701
  "const": "Indefinite"
3370
2702
  }
3371
2703
  },
@@ -3376,6 +2708,18 @@
3376
2708
  }
3377
2709
  ]
3378
2710
  },
2711
+ "FixedAdventurePointsValue": {
2712
+ "description": "A fixed adventure points value. If the entry has levels, this is the cost per\nlevel as well.",
2713
+ "$ref": "#/$defs/AdventurePointsSingleValue"
2714
+ },
2715
+ "AdventurePointsValueByLevel": {
2716
+ "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.",
2717
+ "type": "array",
2718
+ "items": {
2719
+ "$ref": "#/$defs/AdventurePointsSingleValue"
2720
+ },
2721
+ "minItems": 2
2722
+ },
3379
2723
  "AdventurePointsSingleValue": {
3380
2724
  "description": "A single adventure points value.",
3381
2725
  "type": "integer",