optolith-database-schema 0.9.0 → 0.10.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 (83) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/lib/main.js +8 -3
  3. package/lib/types/Advantage.d.ts +13 -2
  4. package/lib/types/Disadvantage.d.ts +12 -2
  5. package/lib/types/Profession.d.ts +12 -2
  6. package/lib/types/Talisman.d.ts +6 -6
  7. package/lib/types/_Activatable.d.ts +111 -3
  8. package/lib/types/_Activatable.js +4 -35
  9. package/lib/types/_ActivatableSelectOptionCategory.d.ts +30 -0
  10. package/lib/types/equipment/item/Poison.d.ts +21 -1
  11. package/lib/types/equipment/item/Poison.js +1 -0
  12. package/lib/types/equipment/item/Weapon.d.ts +4 -3
  13. package/lib/types/equipment/item/sub/ArmorType.d.ts +3 -3
  14. package/lib/types/prerequisites/DisplayOption.d.ts +14 -0
  15. package/lib/types/prerequisites/PrerequisiteGroups.d.ts +23 -1
  16. package/lib/types/prerequisites/single/AncestorBloodPrerequisite.d.ts +5 -0
  17. package/lib/types/prerequisites/single/AncestorBloodPrerequisite.js +1 -0
  18. package/lib/types/prerequisites/single/RatedMinimumNumberPrerequisite.d.ts +67 -0
  19. package/lib/types/prerequisites/single/RatedMinimumNumberPrerequisite.js +6 -0
  20. package/lib/types/prerequisites/single/RatedPrerequisite.d.ts +0 -55
  21. package/lib/types/prerequisites/single/RatedSumPrerequisite.d.ts +19 -0
  22. package/lib/types/prerequisites/single/RatedSumPrerequisite.js +1 -0
  23. package/lib/types/prerequisites/single/SexualCharacteristicPrerequisite.d.ts +11 -0
  24. package/lib/types/prerequisites/single/SexualCharacteristicPrerequisite.js +5 -0
  25. package/lib/types/prerequisites/single/TextPrerequisite.d.ts +29 -0
  26. package/lib/types/prerequisites/single/TextPrerequisite.js +5 -0
  27. package/lib/types/specialAbility/AdvancedCombatSpecialAbility.d.ts +11 -0
  28. package/lib/types/specialAbility/CeremonialItemSpecialAbility.d.ts +7 -2
  29. package/lib/types/specialAbility/CombatSpecialAbility.d.ts +6 -2
  30. package/lib/types/specialAbility/FatePointSpecialAbility.d.ts +5 -0
  31. package/lib/types/specialAbility/GeneralSpecialAbility.d.ts +12 -2
  32. package/lib/types/specialAbility/KarmaSpecialAbility.d.ts +7 -2
  33. package/lib/types/specialAbility/MagicalSpecialAbility.d.ts +11 -2
  34. package/lib/types/specialAbility/SikaryanDrainSpecialAbility.d.ts +5 -0
  35. package/lib/types/specialAbility/VampiricGift.d.ts +7 -2
  36. package/lib/types/traditionArtifacts/ArcaneOrbEnchantment.d.ts +2 -2
  37. package/lib/types/traditionArtifacts/AttireEnchantment.d.ts +2 -2
  38. package/lib/types/traditionArtifacts/BowlEnchantment.d.ts +2 -2
  39. package/lib/types/traditionArtifacts/CauldronEnchantment.d.ts +2 -2
  40. package/lib/types/traditionArtifacts/ChronicleEnchantment.d.ts +2 -2
  41. package/lib/types/traditionArtifacts/DaggerRitual.d.ts +2 -2
  42. package/lib/types/traditionArtifacts/FoolsHatEnchantment.d.ts +2 -2
  43. package/lib/types/traditionArtifacts/InstrumentEnchantment.d.ts +2 -2
  44. package/lib/types/traditionArtifacts/Krallenkettenzauber.d.ts +2 -2
  45. package/lib/types/traditionArtifacts/OrbEnchantment.d.ts +2 -2
  46. package/lib/types/traditionArtifacts/RingEnchantment.d.ts +2 -2
  47. package/lib/types/traditionArtifacts/SickleRitual.d.ts +2 -2
  48. package/lib/types/traditionArtifacts/SpellSwordEnchantment.d.ts +7 -2
  49. package/lib/types/traditionArtifacts/StaffEnchantment.d.ts +12 -2
  50. package/lib/types/traditionArtifacts/ToyEnchantment.d.ts +2 -2
  51. package/lib/types/traditionArtifacts/Trinkhornzauber.d.ts +2 -2
  52. package/lib/types/traditionArtifacts/WandEnchantment.d.ts +2 -2
  53. package/lib/types/traditionArtifacts/WeaponEnchantment.d.ts +2 -2
  54. package/lib/validation/schema.js +2 -2
  55. package/package.json +1 -1
  56. package/schema/Advantage.schema.json +11 -0
  57. package/schema/Disadvantage.schema.json +8 -0
  58. package/schema/Profession.schema.json +8 -0
  59. package/schema/Talisman.schema.json +2 -4
  60. package/schema/_Activatable.schema.json +166 -0
  61. package/schema/_ActivatableSelectOptionCategory.schema.json +141 -0
  62. package/schema/equipment/item/Poison.schema.json +55 -1
  63. package/schema/equipment/item/Weapon.schema.json +5 -1
  64. package/schema/equipment/item/sub/ArmorType.schema.json +1 -2
  65. package/schema/prerequisites/DisplayOption.schema.json +4 -0
  66. package/schema/prerequisites/PrerequisiteGroups.schema.json +98 -2
  67. package/schema/prerequisites/single/AncestorBloodPrerequisite.schema.json +14 -0
  68. package/schema/prerequisites/single/RatedMinimumNumberPrerequisite.schema.json +166 -0
  69. package/schema/prerequisites/single/RatedPrerequisite.schema.json +0 -125
  70. package/schema/prerequisites/single/RatedSumPrerequisite.schema.json +33 -0
  71. package/schema/prerequisites/single/SexualCharacteristicPrerequisite.schema.json +26 -0
  72. package/schema/prerequisites/single/TextPrerequisite.schema.json +14 -0
  73. package/schema/specialAbility/AdvancedCombatSpecialAbility.schema.json +8 -0
  74. package/schema/specialAbility/CeremonialItemSpecialAbility.schema.json +4 -0
  75. package/schema/specialAbility/CombatSpecialAbility.schema.json +4 -0
  76. package/schema/specialAbility/FatePointSpecialAbility.schema.json +4 -0
  77. package/schema/specialAbility/GeneralSpecialAbility.schema.json +8 -0
  78. package/schema/specialAbility/KarmaSpecialAbility.schema.json +4 -0
  79. package/schema/specialAbility/MagicalSpecialAbility.schema.json +8 -0
  80. package/schema/specialAbility/SikaryanDrainSpecialAbility.schema.json +4 -0
  81. package/schema/specialAbility/VampiricGift.schema.json +4 -0
  82. package/schema/traditionArtifacts/SpellSwordEnchantment.schema.json +4 -0
  83. package/schema/traditionArtifacts/StaffEnchantment.schema.json +8 -0
@@ -1,11 +1,11 @@
1
1
  /**
2
2
  * @main OrbEnchantment
3
3
  */
4
- import { Errata } from "../source/_Erratum.js";
5
- import { PublicationRefs } from "../source/_PublicationRef.js";
6
4
  import * as Activatable from "../_Activatable.js";
7
5
  import { LocaleMap } from "../_LocaleMap.js";
8
6
  import { GeneralPrerequisites } from "../_Prerequisite.js";
7
+ import { Errata } from "../source/_Erratum.js";
8
+ import { PublicationRefs } from "../source/_PublicationRef.js";
9
9
  /**
10
10
  * @title Orb Enchantment
11
11
  */
@@ -1,11 +1,11 @@
1
1
  /**
2
2
  * @main RingEnchantment
3
3
  */
4
- import { Errata } from "../source/_Erratum.js";
5
- import { PublicationRefs } from "../source/_PublicationRef.js";
6
4
  import * as Activatable from "../_Activatable.js";
7
5
  import { LocaleMap } from "../_LocaleMap.js";
8
6
  import { GeneralPrerequisites } from "../_Prerequisite.js";
7
+ import { Errata } from "../source/_Erratum.js";
8
+ import { PublicationRefs } from "../source/_PublicationRef.js";
9
9
  /**
10
10
  * @title Ring Enchantment
11
11
  */
@@ -1,11 +1,11 @@
1
1
  /**
2
2
  * @main SickleRitual
3
3
  */
4
- import { Errata } from "../source/_Erratum.js";
5
- import { PublicationRefs } from "../source/_PublicationRef.js";
6
4
  import * as Activatable from "../_Activatable.js";
7
5
  import { LocaleMap } from "../_LocaleMap.js";
8
6
  import { GeneralPrerequisites } from "../_Prerequisite.js";
7
+ import { Errata } from "../source/_Erratum.js";
8
+ import { PublicationRefs } from "../source/_PublicationRef.js";
9
9
  /**
10
10
  * @title Sickle Ritual
11
11
  */
@@ -1,11 +1,11 @@
1
1
  /**
2
2
  * @main SpellSwordEnchantment
3
3
  */
4
- import { Errata } from "../source/_Erratum.js";
5
- import { PublicationRefs } from "../source/_PublicationRef.js";
6
4
  import * as Activatable from "../_Activatable.js";
7
5
  import { LocaleMap } from "../_LocaleMap.js";
8
6
  import { GeneralPrerequisites } from "../_Prerequisite.js";
7
+ import { Errata } from "../source/_Erratum.js";
8
+ import { PublicationRefs } from "../source/_PublicationRef.js";
9
9
  /**
10
10
  * @title Spell-Sword Enchantment
11
11
  */
@@ -41,6 +41,11 @@ export declare type SpellSwordEnchantmentTranslation = {
41
41
  * @deprecated
42
42
  */
43
43
  bindingCost?: string;
44
+ /**
45
+ * The AP value. It is only used if the text cannot be generated from the
46
+ * given information.
47
+ */
48
+ ap_value?: Activatable.AdventurePointsValueReplacement;
44
49
  errata?: Errata;
45
50
  };
46
51
  export declare const validateSchema: import("../../validation/schema.js").TypeValidator<SpellSwordEnchantment>;
@@ -1,11 +1,12 @@
1
1
  /**
2
2
  * @main StaffEnchantment
3
3
  */
4
- import { Errata } from "../source/_Erratum.js";
5
- import { PublicationRefs } from "../source/_PublicationRef.js";
6
4
  import * as Activatable from "../_Activatable.js";
7
5
  import { LocaleMap } from "../_LocaleMap.js";
8
6
  import { GeneralPrerequisites } from "../_Prerequisite.js";
7
+ import { ResponsiveTextOptional } from "../_ResponsiveText.js";
8
+ import { Errata } from "../source/_Erratum.js";
9
+ import { PublicationRefs } from "../source/_PublicationRef.js";
9
10
  /**
10
11
  * @title Staff Enchantment
11
12
  */
@@ -37,10 +38,19 @@ export declare type StaffEnchantmentTranslation = {
37
38
  * @deprecated
38
39
  */
39
40
  aeCost?: string;
41
+ /**
42
+ * A note, appended to the generated cost string in parenthesis.
43
+ */
44
+ cost_note?: ResponsiveTextOptional;
40
45
  /**
41
46
  * @deprecated
42
47
  */
43
48
  bindingCost?: string;
49
+ /**
50
+ * The AP value. It is only used if the text cannot be generated from the
51
+ * given information.
52
+ */
53
+ ap_value?: Activatable.AdventurePointsValueReplacement;
44
54
  errata?: Errata;
45
55
  };
46
56
  export declare const validateSchema: import("../../validation/schema.js").TypeValidator<StaffEnchantment>;
@@ -1,11 +1,11 @@
1
1
  /**
2
2
  * @main ToyEnchantment
3
3
  */
4
- import { Errata } from "../source/_Erratum.js";
5
- import { PublicationRefs } from "../source/_PublicationRef.js";
6
4
  import * as Activatable from "../_Activatable.js";
7
5
  import { LocaleMap } from "../_LocaleMap.js";
8
6
  import { GeneralPrerequisites } from "../_Prerequisite.js";
7
+ import { Errata } from "../source/_Erratum.js";
8
+ import { PublicationRefs } from "../source/_PublicationRef.js";
9
9
  /**
10
10
  * @title Toy Enchantment
11
11
  */
@@ -1,11 +1,11 @@
1
1
  /**
2
2
  * @main Trinkhornzauber
3
3
  */
4
- import { Errata } from "../source/_Erratum.js";
5
- import { PublicationRefs } from "../source/_PublicationRef.js";
6
4
  import * as Activatable from "../_Activatable.js";
7
5
  import { LocaleMap } from "../_LocaleMap.js";
8
6
  import { GeneralPrerequisites } from "../_Prerequisite.js";
7
+ import { Errata } from "../source/_Erratum.js";
8
+ import { PublicationRefs } from "../source/_PublicationRef.js";
9
9
  /**
10
10
  * @title Trinkhornzauber
11
11
  */
@@ -1,11 +1,11 @@
1
1
  /**
2
2
  * @main WandEnchantment
3
3
  */
4
- import { Errata } from "../source/_Erratum.js";
5
- import { PublicationRefs } from "../source/_PublicationRef.js";
6
4
  import * as Activatable from "../_Activatable.js";
7
5
  import { LocaleMap } from "../_LocaleMap.js";
8
6
  import { GeneralPrerequisites } from "../_Prerequisite.js";
7
+ import { Errata } from "../source/_Erratum.js";
8
+ import { PublicationRefs } from "../source/_PublicationRef.js";
9
9
  /**
10
10
  * @title Wand Enchantment
11
11
  */
@@ -1,11 +1,11 @@
1
1
  /**
2
2
  * @main WeaponEnchantment
3
3
  */
4
- import { Errata } from "../source/_Erratum.js";
5
- import { PublicationRefs } from "../source/_PublicationRef.js";
6
4
  import * as Activatable from "../_Activatable.js";
7
5
  import { LocaleMap } from "../_LocaleMap.js";
8
6
  import { GeneralPrerequisites } from "../_Prerequisite.js";
7
+ import { Errata } from "../source/_Erratum.js";
8
+ import { PublicationRefs } from "../source/_PublicationRef.js";
9
9
  /**
10
10
  * @title Weapon Enchantment
11
11
  */
@@ -1,12 +1,12 @@
1
1
  import { basename, dirname, extname, join, relative, sep } from "path";
2
2
  import { fileURLToPath } from "url";
3
3
  import { libDir } from "../../config/directories.js";
4
+ const baseNamePattern = /^(?:0|[1-9][0-9]*)_(?:[A-Z][a-zA-Z]*|[1-9][0-9]*)(?:-(?:[a-zA-Z]+|[1-9][0-9]*))*\.yml$/;
4
5
  const fileNameError = (fileName) => ({
5
6
  keyword: "filename",
6
7
  instancePath: "",
7
- message: `the file name "${fileName}" does not match the pattern ^[1-9][0-9]*_[A-Z][a-z]*(?:-[a-zA-Z][a-z]*)\\.yml$`
8
+ message: `the file name "${fileName}" does not match the pattern ${baseNamePattern.source}`
8
9
  });
9
- const baseNamePattern = /^[1-9][0-9]*_[A-Z][a-z]*(?:-[a-zA-Z][a-z]*)*\.yml$/;
10
10
  const changeFileExtension = (path, ext) => join(dirname(path), basename(path, extname(path)) + ext);
11
11
  const schemaIdFromSourcePath = (sourcePath) => {
12
12
  const relativePathOfType = relative(libDir, fileURLToPath(sourcePath));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "optolith-database-schema",
3
- "version": "0.9.0",
3
+ "version": "0.10.0",
4
4
  "description": "Definitions and utilities for the flat-file database of Optolith, a character creation tool for the Pen and Paper RPG “The Dark Eye 5”, and its external integrations into other software.",
5
5
  "keywords": [
6
6
  "tde",
@@ -75,6 +75,10 @@
75
75
  "name_in_library": {
76
76
  "$ref": "./_Activatable.schema.json#/$defs/NameInLibrary"
77
77
  },
78
+ "input": {
79
+ "description": "A string that is used as a label for an input field.",
80
+ "$ref": "./_Activatable.schema.json#/$defs/Input"
81
+ },
78
82
  "rules": {
79
83
  "$ref": "./_Activatable.schema.json#/$defs/Rules"
80
84
  },
@@ -83,6 +87,13 @@
83
87
  "type": "string",
84
88
  "minLength": 1
85
89
  },
90
+ "ap_value": {
91
+ "$ref": "./_Activatable.schema.json#/$defs/AdventurePointsValueReplacement"
92
+ },
93
+ "ap_value_append": {
94
+ "description": "A string that gets appended to the default AP Value text with a preceding\nspace. This always happens if present, even if the generated AP Value text\nis replaced.",
95
+ "$ref": "./_Activatable.schema.json#/$defs/AdventurePointsValueAppend"
96
+ },
86
97
  "errata": {
87
98
  "$ref": "./source/_Erratum.schema.json#/$defs/Errata"
88
99
  }
@@ -67,6 +67,10 @@
67
67
  "name_in_library": {
68
68
  "$ref": "./_Activatable.schema.json#/$defs/NameInLibrary"
69
69
  },
70
+ "input": {
71
+ "description": "A string that is used as a label for an input field.",
72
+ "$ref": "./_Activatable.schema.json#/$defs/Input"
73
+ },
70
74
  "rules": {
71
75
  "$ref": "./_Activatable.schema.json#/$defs/Rules"
72
76
  },
@@ -75,6 +79,10 @@
75
79
  "type": "string",
76
80
  "minLength": 1
77
81
  },
82
+ "ap_value_append": {
83
+ "description": "A string that gets appended to the default AP Value text with a preceding\nspace. This always happens if present, even if the generated AP Value text\nis replaced.",
84
+ "$ref": "./_Activatable.schema.json#/$defs/AdventurePointsValueAppend"
85
+ },
78
86
  "errata": {
79
87
  "$ref": "./source/_Erratum.schema.json#/$defs/Errata"
80
88
  }
@@ -509,6 +509,14 @@
509
509
  "name": {
510
510
  "description": "Name of the profession variant.",
511
511
  "$ref": "#/$defs/ProfessionName"
512
+ },
513
+ "full_text": {
514
+ "description": "A text that replaces the generated text for the profession variant.",
515
+ "$ref": "./_NonEmptyString.schema.json#/$defs/NonEmptyString"
516
+ },
517
+ "concluding_text": {
518
+ "description": "A text that is appended to the generated text for the profession variant.\n\nHas no effect when `full_text` is set.",
519
+ "$ref": "./_NonEmptyString.schema.json#/$defs/NonEmptyString"
512
520
  }
513
521
  },
514
522
  "required": [
@@ -21,11 +21,11 @@
21
21
  "minItems": 1
22
22
  },
23
23
  "type": {
24
- "description": "The talisman type.",
24
+ "description": "The talisman type, if any.",
25
25
  "$ref": "#/$defs/TalismanType"
26
26
  },
27
27
  "ap_value": {
28
- "description": "The AP value for the required trade secret.",
28
+ "description": "The AP value for the required trade secret, if possible.",
29
29
  "type": "integer",
30
30
  "minimum": 5,
31
31
  "multipleOf": 5
@@ -48,8 +48,6 @@
48
48
  "required": [
49
49
  "id",
50
50
  "tradition",
51
- "type",
52
- "ap_value",
53
51
  "src",
54
52
  "translations"
55
53
  ],
@@ -123,6 +123,11 @@
123
123
  "prerequisites": {
124
124
  "$ref": "./_Prerequisite.schema.json#/$defs/GeneralPrerequisites"
125
125
  },
126
+ "binding_cost": {
127
+ "description": "Specific binding cost for the select option. Only has an effect if the\nassociated entry supports binding costs.",
128
+ "type": "integer",
129
+ "minimum": 0
130
+ },
126
131
  "ap_value": {
127
132
  "description": "Specific AP cost for the select option.",
128
133
  "type": "integer",
@@ -202,6 +207,11 @@
202
207
  "prerequisites": {
203
208
  "$ref": "./_Prerequisite.schema.json#/$defs/GeneralPrerequisites"
204
209
  },
210
+ "binding_cost": {
211
+ "description": "Specific binding cost for the select option. Only has an effect if the\nassociated entry supports binding costs.",
212
+ "type": "integer",
213
+ "minimum": 0
214
+ },
205
215
  "ap_value": {
206
216
  "description": "Specific AP cost for the select option.",
207
217
  "type": "integer",
@@ -248,6 +258,11 @@
248
258
  "prerequisites": {
249
259
  "$ref": "./_Prerequisite.schema.json#/$defs/GeneralPrerequisites"
250
260
  },
261
+ "binding_cost": {
262
+ "description": "Specific binding cost for the select option. Only has an effect if the\nassociated entry supports binding costs.",
263
+ "type": "integer",
264
+ "minimum": 0
265
+ },
251
266
  "ap_value": {
252
267
  "description": "Specific AP cost for the select option.",
253
268
  "type": "integer",
@@ -1192,6 +1207,10 @@
1192
1207
  "IndefiniteArcaneEnergyCost": {
1193
1208
  "type": "object",
1194
1209
  "properties": {
1210
+ "modifier": {
1211
+ "description": "Specified if the indefinite AP cost description needs to be modified by a\ncertain value.",
1212
+ "$ref": "#/$defs/IndefiniteArcaneEnergyCostModifier"
1213
+ },
1195
1214
  "translations": {
1196
1215
  "description": "All translations for the entry, identified by IETF language tag (BCP47).",
1197
1216
  "type": "object",
@@ -1209,6 +1228,30 @@
1209
1228
  ],
1210
1229
  "additionalProperties": false
1211
1230
  },
1231
+ "IndefiniteArcaneEnergyCostModifier": {
1232
+ "type": "object",
1233
+ "properties": {
1234
+ "arithmetic": {
1235
+ "description": "The arithmetic how to apply the `value` to the `base`.",
1236
+ "$ref": "#/$defs/IndefiniteArcaneEnergyCostModifierArithmetic"
1237
+ },
1238
+ "value": {
1239
+ "description": "The value that is applied to the `base` using the defined `arithmetic`.",
1240
+ "type": "integer",
1241
+ "minimum": 1
1242
+ }
1243
+ },
1244
+ "required": [
1245
+ "arithmetic",
1246
+ "value"
1247
+ ],
1248
+ "additionalProperties": false
1249
+ },
1250
+ "IndefiniteArcaneEnergyCostModifierArithmetic": {
1251
+ "enum": [
1252
+ "Add"
1253
+ ]
1254
+ },
1212
1255
  "IndefiniteArcaneEnergyCostTranslation": {
1213
1256
  "type": "object",
1214
1257
  "properties": {
@@ -1399,6 +1442,22 @@
1399
1442
  "map"
1400
1443
  ],
1401
1444
  "additionalProperties": false
1445
+ },
1446
+ {
1447
+ "type": "object",
1448
+ "properties": {
1449
+ "tag": {
1450
+ "const": "DerivedFromSelection"
1451
+ },
1452
+ "derived_from_selection": {
1453
+ "$ref": "#/$defs/VolumeDerivedFromSelection"
1454
+ }
1455
+ },
1456
+ "required": [
1457
+ "tag",
1458
+ "derived_from_selection"
1459
+ ],
1460
+ "additionalProperties": false
1402
1461
  }
1403
1462
  ]
1404
1463
  },
@@ -1573,6 +1632,20 @@
1573
1632
  ],
1574
1633
  "additionalProperties": false
1575
1634
  },
1635
+ "VolumeDerivedFromSelection": {
1636
+ "type": "object",
1637
+ "properties": {
1638
+ "fallback": {
1639
+ "description": "The volume for the selection if it does not define a specific one.",
1640
+ "type": "integer",
1641
+ "minimum": 0
1642
+ }
1643
+ },
1644
+ "required": [
1645
+ "fallback"
1646
+ ],
1647
+ "additionalProperties": false
1648
+ },
1576
1649
  "BindingCost": {
1577
1650
  "description": "The binding cost for an enchantment.",
1578
1651
  "oneOf": [
@@ -1623,6 +1696,22 @@
1623
1696
  "map"
1624
1697
  ],
1625
1698
  "additionalProperties": false
1699
+ },
1700
+ {
1701
+ "type": "object",
1702
+ "properties": {
1703
+ "tag": {
1704
+ "const": "DerivedFromSelection"
1705
+ },
1706
+ "derived_from_selection": {
1707
+ "$ref": "#/$defs/BindingCostDerivedFromSelection"
1708
+ }
1709
+ },
1710
+ "required": [
1711
+ "tag",
1712
+ "derived_from_selection"
1713
+ ],
1714
+ "additionalProperties": false
1626
1715
  }
1627
1716
  ]
1628
1717
  },
@@ -1745,6 +1834,20 @@
1745
1834
  ],
1746
1835
  "additionalProperties": false
1747
1836
  },
1837
+ "BindingCostDerivedFromSelection": {
1838
+ "type": "object",
1839
+ "properties": {
1840
+ "fallback": {
1841
+ "description": "The binding cost for the selection if it does not define a specific one.",
1842
+ "type": "integer",
1843
+ "minimum": 0
1844
+ }
1845
+ },
1846
+ "required": [
1847
+ "fallback"
1848
+ ],
1849
+ "additionalProperties": false
1850
+ },
1748
1851
  "Property": {
1749
1852
  "description": "The magic property's identifier. `DependingOnProperty` can only be used if\nthe special ability has an option to select a property.",
1750
1853
  "oneOf": [
@@ -1795,6 +1898,10 @@
1795
1898
  "AdvancedSpecialAbilityDerivedExternalEntryOptionId": {
1796
1899
  "$ref": "./_Identifier.schema.json#/$defs/PatronIdentifier"
1797
1900
  },
1901
+ "PrerequisitesReplacement": {
1902
+ "description": "The prerequisites text. It is only used if the text cannot be generated from\nthe given information.",
1903
+ "$ref": "./_NonEmptyString.schema.json#/$defs/NonEmptyMarkdown"
1904
+ },
1798
1905
  "ApplicableCombatTechniques": {
1799
1906
  "oneOf": [
1800
1907
  {
@@ -2537,6 +2644,22 @@
2537
2644
  ],
2538
2645
  "additionalProperties": false
2539
2646
  },
2647
+ {
2648
+ "type": "object",
2649
+ "properties": {
2650
+ "tag": {
2651
+ "const": "DerivedFromSelection"
2652
+ },
2653
+ "derived_from_selection": {
2654
+ "$ref": "#/$defs/AdventurePointsDerivedFromSelection"
2655
+ }
2656
+ },
2657
+ "required": [
2658
+ "tag",
2659
+ "derived_from_selection"
2660
+ ],
2661
+ "additionalProperties": false
2662
+ },
2540
2663
  {
2541
2664
  "type": "object",
2542
2665
  "properties": {
@@ -2570,10 +2693,53 @@
2570
2693
  },
2571
2694
  "minItems": 2
2572
2695
  },
2696
+ "AdventurePointsDerivedFromSelection": {
2697
+ "description": "The adventure points value is derived from the selection of the special\nability. Its display value may be able to be derived from the given\ninformation for the select options. If that is not the case or the generated\ntext would not match the original one, a replacement text can be provided.",
2698
+ "type": "object",
2699
+ "properties": {
2700
+ "translations": {
2701
+ "description": "All translations for the entry, identified by IETF language tag (BCP47).",
2702
+ "type": "object",
2703
+ "patternProperties": {
2704
+ "^[a-z]{2}-[A-Z]{2}$": {
2705
+ "$ref": "#/$defs/AdventurePointsDerivedFromSelectionTranslation"
2706
+ }
2707
+ },
2708
+ "minProperties": 1,
2709
+ "additionalProperties": false
2710
+ }
2711
+ },
2712
+ "required": [],
2713
+ "additionalProperties": false
2714
+ },
2715
+ "AdventurePointsDerivedFromSelectionTranslation": {
2716
+ "type": "object",
2717
+ "properties": {
2718
+ "replacement": {
2719
+ "description": "A replacement for the generated text if it would not match the original\none.",
2720
+ "$ref": "./_NonEmptyString.schema.json#/$defs/NonEmptyMarkdown"
2721
+ }
2722
+ },
2723
+ "required": [],
2724
+ "minProperties": 1,
2725
+ "additionalProperties": false
2726
+ },
2573
2727
  "AdventurePointsSingleValue": {
2574
2728
  "description": "A single adventure points value.",
2575
2729
  "type": "integer",
2576
2730
  "minimum": 0
2731
+ },
2732
+ "Input": {
2733
+ "description": "A string that is used as a label for an input field.",
2734
+ "$ref": "./_NonEmptyString.schema.json#/$defs/NonEmptyString"
2735
+ },
2736
+ "AdventurePointsValueReplacement": {
2737
+ "description": "The AP value. It is only used if the text cannot be generated from the given\ninformation.",
2738
+ "$ref": "./_NonEmptyString.schema.json#/$defs/NonEmptyMarkdown"
2739
+ },
2740
+ "AdventurePointsValueAppend": {
2741
+ "description": "A string that gets appended to the default AP Value text with a preceding\nspace. This always happens if present, even if the generated AP Value text is\nreplaced.",
2742
+ "$ref": "./_NonEmptyString.schema.json#/$defs/NonEmptyMarkdown"
2577
2743
  }
2578
2744
  }
2579
2745
  }