optolith-database-schema 0.5.3 → 0.6.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.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,36 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ## [0.6.0](https://github.com/elyukai/optolith-database-schema/compare/v0.5.4...v0.6.0) (2022-12-10)
6
+
7
+
8
+ ### ⚠ BREAKING CHANGES
9
+
10
+ * rename common ingredients to typical ingredients
11
+
12
+ ### Features
13
+
14
+ * prerequisite disjunctions may have a display option ([36e9ceb](https://github.com/elyukai/optolith-database-schema/commit/36e9ceb26b52f673e13ea2323cb9a3283dc21586))
15
+ * weapons can be restricted to traditions during character creation ([5e085d2](https://github.com/elyukai/optolith-database-schema/commit/5e085d2258e6232e829f9e21cc7823d14ef42322))
16
+
17
+
18
+ ### Bug Fixes
19
+
20
+ * duration variant key convention ([dc1a05e](https://github.com/elyukai/optolith-database-schema/commit/dc1a05ed27e3f97b2cfc2ccfdbe4c20160b0b711))
21
+ * fixed cost countable translation might not be compressable ([561b4ad](https://github.com/elyukai/optolith-database-schema/commit/561b4ad0f9b938539826f734f8c84d45cc1c4543))
22
+ * missing equipment packages source references ([ff3ae6c](https://github.com/elyukai/optolith-database-schema/commit/ff3ae6cbb52902e00ea13179a88bb9abd19d6663))
23
+
24
+
25
+ * rename common ingredients to typical ingredients ([aa7fb6e](https://github.com/elyukai/optolith-database-schema/commit/aa7fb6ed41a756d65637520095b58b6226f410c9))
26
+
27
+ ### [0.5.4](https://github.com/elyukai/optolith-database-schema/compare/v0.5.3...v0.5.4) (2022-12-03)
28
+
29
+
30
+ ### Bug Fixes
31
+
32
+ * elective spellwork restriction structure ([3ceb624](https://github.com/elyukai/optolith-database-schema/commit/3ceb6244ec433bb60fe292dde32d99ac93edccb2))
33
+ * grouped common profession for cultures ([df66943](https://github.com/elyukai/optolith-database-schema/commit/df66943aadfd297d773dda7d4a0a65c8b79095ce))
34
+
5
35
  ### [0.5.3](https://github.com/elyukai/optolith-database-schema/compare/v0.5.2...v0.5.3) (2022-12-03)
6
36
 
7
37
 
@@ -4,7 +4,7 @@
4
4
  import { Errata } from "./source/_Erratum.js";
5
5
  import { PublicationRefs } from "./source/_PublicationRef.js";
6
6
  import { CommonnessRatedAdvantageDisadvantage } from "./_CommonnessRatedAdvantageDisadvantage.js";
7
- import { AdvantageIdentifier, DisadvantageIdentifier, MagicalTraditionIdentifier, ProfessionIdentifier, SkillIdentifier } from "./_Identifier.js";
7
+ import { AdvantageIdentifier, BlessedTraditionIdentifier, DisadvantageIdentifier, MagicalTraditionIdentifier, ProfessionIdentifier, SkillIdentifier } from "./_Identifier.js";
8
8
  import { LocaleMap } from "./_LocaleMap.js";
9
9
  import { NonEmptyString } from "./_NonEmptyString.js";
10
10
  import { BinarySex } from "./_Sex.js";
@@ -183,7 +183,7 @@ export declare enum MundaneProfessionSubgroupConstraint {
183
183
  Fighter = "Fighter",
184
184
  Religious = "Religious"
185
185
  }
186
- export declare type TraditionConstraint = {
186
+ export declare type MagicalTraditionConstraint = {
187
187
  /**
188
188
  * The magical tradition's identifier.
189
189
  */
@@ -198,16 +198,31 @@ export declare type TraditionConstraint = {
198
198
  */
199
199
  rarity?: Rarity;
200
200
  };
201
+ export declare type BlessedTraditionConstraint = {
202
+ /**
203
+ * The magical tradition's identifier.
204
+ */
205
+ id: BlessedTraditionIdentifier;
206
+ /**
207
+ * Some professions are more common than others. There may be cultures
208
+ * where some professions are not represented at all.
209
+ */
210
+ weighted_professions?: Weighted<ProfessionReference>;
211
+ /**
212
+ * Some traditions may be found in a culture, but are not that common.
213
+ */
214
+ rarity?: Rarity;
215
+ };
201
216
  export declare type MundaneCommonProfessionConstraint = {
202
217
  tag: "Profession";
203
218
  profession: ProfessionConstraint;
204
219
  } | {
205
220
  tag: "ProfessionSubgroup";
206
- profession_subgroup: ProfessionConstraint;
221
+ profession_subgroup: MundaneProfessionSubgroupConstraint;
207
222
  };
208
223
  export declare type MagicCommonProfessionConstraint = {
209
224
  tag: "Tradition";
210
- tradition: TraditionConstraint;
225
+ tradition: MagicalTraditionConstraint;
211
226
  } | {
212
227
  tag: "MagicDilettante";
213
228
  magic_dilettante: {};
@@ -217,12 +232,12 @@ export declare type MagicCommonProfessionConstraint = {
217
232
  };
218
233
  export declare type BlessedCommonProfessionConstraint = {
219
234
  tag: "Tradition";
220
- tradition: TraditionConstraint;
235
+ tradition: BlessedTraditionConstraint;
221
236
  };
222
237
  export declare type PlainCommonProfessions = CommonProfessionConstraints<ProfessionReference>;
223
238
  /**
224
239
  * Lists of professions by group.
225
- * @minProperties 2
240
+ * @minProperties 1
226
241
  */
227
242
  export declare type GroupedCommonProfessions = {
228
243
  mundane?: CommonProfessionConstraints<MundaneCommonProfessionConstraint>;
@@ -35,12 +35,12 @@ export declare type DerivedCharacteristicTranslation = {
35
35
  /**
36
36
  * Possible calculation strings for the final value.
37
37
  */
38
- calculation?: Calculation;
38
+ calculation?: CalculationTranslation;
39
39
  };
40
40
  /**
41
41
  * Possible calculation strings for the final value.
42
42
  */
43
- export declare type Calculation = {
43
+ export declare type CalculationTranslation = {
44
44
  /**
45
45
  * The default calculation string.
46
46
  * @minLength 1
@@ -5,7 +5,7 @@ import { Errata } from "./source/_Erratum.js";
5
5
  import { PublicationRefs } from "./source/_PublicationRef.js";
6
6
  import { DurationUnit, DurationUnitValue } from "./_ActivatableSkillDuration.js";
7
7
  import { LocaleMap } from "./_LocaleMap.js";
8
- import { ResponsiveText, ResponsiveTextReplace } from "./_ResponsiveText.js";
8
+ import { ResponsiveText, ResponsiveTextOptional, ResponsiveTextReplace } from "./_ResponsiveText.js";
9
9
  import { AnimalTypeReference, PropertyReference } from "./_SimpleReferences.js";
10
10
  /**
11
11
  * @title Familiar's Trick
@@ -142,7 +142,7 @@ export declare type FixedOneTimeCostTranslation = {
142
142
  * The cost have to be per a specific countable entity, e.g. `8 KP
143
143
  * per person`.
144
144
  */
145
- per?: ResponsiveText;
145
+ per?: ResponsiveTextOptional;
146
146
  };
147
147
  export declare type AllOneTimeCost = {
148
148
  /**
@@ -167,6 +167,7 @@ export declare type IndefiniteOneTimeCostTranslation = {
167
167
  };
168
168
  export declare type OneTimeDuration = {
169
169
  tag: "Immediate";
170
+ immediate: {};
170
171
  } | {
171
172
  tag: "Fixed";
172
173
  fixed: FixedOneTimeDuration;
@@ -84,12 +84,9 @@ export declare type ElectiveSpellwork = {
84
84
  */
85
85
  export declare type ElectiveSpellworkRestriction = {
86
86
  tag: "Element";
87
- /**
88
- * The element's identifier.
89
- * @integer
90
- * @minimum 1
91
- * @maximum 6
92
- */
87
+ element: ElectiveSpellworkElementRestriction;
88
+ };
89
+ export declare type ElectiveSpellworkElementRestriction = {
93
90
  id: ElementIdentifier;
94
91
  };
95
92
  /**
@@ -2,6 +2,7 @@ import * as Identifier from "./_Identifier.js";
2
2
  export declare type ActivatableIdentifier = Identifier.AdvantageIdentifier | Identifier.DisadvantageIdentifier | Identifier.GeneralSpecialAbilityIdentifier | Identifier.FatePointSpecialAbilityIdentifier | Identifier.CombatSpecialAbilityIdentifier | Identifier.MagicalSpecialAbilityIdentifier | Identifier.StaffEnchantmentIdentifier | Identifier.FamiliarSpecialAbilityIdentifier | Identifier.KarmaSpecialAbilityIdentifier | Identifier.ProtectiveWardingCircleSpecialAbilityIdentifier | Identifier.CombatStyleSpecialAbilityIdentifier | Identifier.AdvancedCombatSpecialAbilityIdentifier | Identifier.CommandSpecialAbilityIdentifier | Identifier.MagicStyleSpecialAbilityIdentifier | Identifier.AdvancedMagicalSpecialAbilityIdentifier | Identifier.SpellSwordEnchantmentIdentifier | Identifier.DaggerRitualIdentifier | Identifier.InstrumentEnchantmentIdentifier | Identifier.AttireEnchantmentIdentifier | Identifier.OrbEnchantmentIdentifier | Identifier.WandEnchantmentIdentifier | Identifier.BrawlingSpecialAbilityIdentifier | Identifier.AncestorGlyphIdentifier | Identifier.CeremonialItemSpecialAbilityIdentifier | Identifier.SermonIdentifier | Identifier.LiturgicalStyleSpecialAbilityIdentifier | Identifier.AdvancedKarmaSpecialAbilityIdentifier | Identifier.VisionIdentifier | Identifier.MagicalTraditionIdentifier | Identifier.BlessedTraditionIdentifier | Identifier.PactGiftIdentifier | Identifier.SikaryanDrainSpecialAbilityIdentifier | Identifier.LycantropicGiftIdentifier | Identifier.SkillStyleSpecialAbilityIdentifier | Identifier.AdvancedSkillSpecialAbilityIdentifier | Identifier.ArcaneOrbEnchantmentIdentifier | Identifier.CauldronEnchantmentIdentifier | Identifier.FoolsHatEnchantmentIdentifier | Identifier.ToyEnchantmentIdentifier | Identifier.BowlEnchantmentIdentifier | Identifier.FatePointSexSpecialAbilityIdentifier | Identifier.SexSpecialAbilityIdentifier | Identifier.WeaponEnchantmentIdentifier | Identifier.SickleRitualIdentifier | Identifier.RingEnchantmentIdentifier | Identifier.ChronicleEnchantmentIdentifier;
3
3
  export declare type SpecialAbilityIdentifier = Identifier.GeneralSpecialAbilityIdentifier | Identifier.FatePointSpecialAbilityIdentifier | Identifier.CombatSpecialAbilityIdentifier | Identifier.MagicalSpecialAbilityIdentifier | Identifier.StaffEnchantmentIdentifier | Identifier.FamiliarSpecialAbilityIdentifier | Identifier.KarmaSpecialAbilityIdentifier | Identifier.ProtectiveWardingCircleSpecialAbilityIdentifier | Identifier.CombatStyleSpecialAbilityIdentifier | Identifier.AdvancedCombatSpecialAbilityIdentifier | Identifier.CommandSpecialAbilityIdentifier | Identifier.MagicStyleSpecialAbilityIdentifier | Identifier.AdvancedMagicalSpecialAbilityIdentifier | Identifier.SpellSwordEnchantmentIdentifier | Identifier.DaggerRitualIdentifier | Identifier.InstrumentEnchantmentIdentifier | Identifier.AttireEnchantmentIdentifier | Identifier.OrbEnchantmentIdentifier | Identifier.WandEnchantmentIdentifier | Identifier.BrawlingSpecialAbilityIdentifier | Identifier.AncestorGlyphIdentifier | Identifier.CeremonialItemSpecialAbilityIdentifier | Identifier.SermonIdentifier | Identifier.LiturgicalStyleSpecialAbilityIdentifier | Identifier.AdvancedKarmaSpecialAbilityIdentifier | Identifier.VisionIdentifier | Identifier.MagicalTraditionIdentifier | Identifier.BlessedTraditionIdentifier | Identifier.PactGiftIdentifier | Identifier.SikaryanDrainSpecialAbilityIdentifier | Identifier.LycantropicGiftIdentifier | Identifier.SkillStyleSpecialAbilityIdentifier | Identifier.AdvancedSkillSpecialAbilityIdentifier | Identifier.ArcaneOrbEnchantmentIdentifier | Identifier.CauldronEnchantmentIdentifier | Identifier.FoolsHatEnchantmentIdentifier | Identifier.ToyEnchantmentIdentifier | Identifier.BowlEnchantmentIdentifier | Identifier.FatePointSexSpecialAbilityIdentifier | Identifier.SexSpecialAbilityIdentifier | Identifier.WeaponEnchantmentIdentifier | Identifier.SickleRitualIdentifier | Identifier.RingEnchantmentIdentifier | Identifier.ChronicleEnchantmentIdentifier;
4
4
  export declare type CombatRelatedSpecialAbilityIdentifier = Identifier.CombatSpecialAbilityIdentifier | Identifier.CombatStyleSpecialAbilityIdentifier | Identifier.AdvancedCombatSpecialAbilityIdentifier | Identifier.CommandSpecialAbilityIdentifier;
5
+ export declare type TraditionIdentifier = Identifier.MagicalTraditionIdentifier | Identifier.BlessedTraditionIdentifier;
5
6
  export declare type RatedIdentifier = Identifier.AttributeIdentifier | SkillIdentifier | Identifier.CloseCombatTechniqueIdentifier | Identifier.RangedCombatTechniqueIdentifier | Identifier.SpellIdentifier | Identifier.RitualIdentifier | Identifier.LiturgicalChantIdentifier | Identifier.CeremonyIdentifier;
6
7
  export declare type SkillIdentifier = Identifier.SkillIdentifier | Identifier.SpellIdentifier | Identifier.RitualIdentifier | Identifier.LiturgicalChantIdentifier | Identifier.CeremonyIdentifier;
7
8
  export declare type AdvancedSpecialAbilityRestrictedOptionIdentifier = Identifier.GeneralIdentifier | Identifier.SkillIdentifier | Identifier.ElementIdentifier;
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * @title Prerequisites
3
3
  */
4
+ import { DisplayOption } from "./prerequisites/DisplayOption.js";
4
5
  import { AdvantageDisadvantagePrerequisiteGroup, AnimistPowerPrerequisiteGroup, ArcaneTraditionPrerequisiteGroup, DerivedCharacteristicPrerequisiteGroup, EnhancementPrerequisiteGroup, GeneralPrerequisiteGroup, GeodeRitualPrerequisiteGroup, InfluencePrerequisiteGroup, LanguagePrerequisiteGroup, LiturgyPrerequisiteGroup, PersonalityTraitPrerequisiteGroup, ProfessionPrerequisiteGroup, PublicationPrerequisiteGroup, SpellworkPrerequisiteGroup } from "./prerequisites/PrerequisiteGroups.js";
5
6
  import { LocaleMap } from "./_LocaleMap.js";
6
7
  import { NonEmptyString } from "./_NonEmptyString.js";
@@ -24,6 +25,7 @@ export declare type PrerequisitesDisjunction<T> = {
24
25
  * @minItems 2
25
26
  */
26
27
  list: T[];
28
+ display_option?: DisplayOption;
27
29
  };
28
30
  export declare type PrerequisitesElement<T> = {
29
31
  tag: "Single";
@@ -1,5 +1,5 @@
1
1
  import { AdvantageIdentifier, AnimalTypeIdentifier, AnimistTribeIdentifier, ArmorIdentifier, AspectIdentifier, AttributeIdentifier, BlessedTraditionIdentifier, BlessingIdentifier, CantripIdentifier, CeremonyIdentifier, CloseCombatTechniqueIdentifier, CultureIdentifier, CurriculumIdentifier, DisadvantageIdentifier, ElementIdentifier, EyeColorIdentifier, GuidelineIdentifier, HairColorIdentifier, LanguageIdentifier, LiturgicalChantIdentifier, MagicalTraditionIdentifier, PactCategoryIdentifier, PactDomainIdentifier, PatronCategoryIdentifier, PatronIdentifier, PersonalityTraitIdentifier, ProfessionIdentifier, ProfessionVariantIdentifier, PropertyIdentifier, RaceIdentifier, RangedCombatTechniqueIdentifier, RitualIdentifier, ScriptIdentifier, SkillGroupIdentifier, SkillIdentifier, SocialStatusIdentifier, SpellIdentifier, SubjectIdentifier, TargetCategoryIdentifier, WeaponIdentifier } from "./_Identifier.js";
2
- import { CombatTechniqueIdentifier, SpellworkIdentifier } from "./_IdentifierGroup.js";
2
+ import { CombatTechniqueIdentifier, SpellworkIdentifier, TraditionIdentifier } from "./_IdentifierGroup.js";
3
3
  export declare type FocusRuleSubjectReference = {
4
4
  id: SubjectIdentifier;
5
5
  };
@@ -129,3 +129,6 @@ export declare type WeaponReference = {
129
129
  export declare type ArmorReference = {
130
130
  id: ArmorIdentifier;
131
131
  };
132
+ export declare type TraditionReference = {
133
+ id: TraditionIdentifier;
134
+ };
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * @main EquipmentPackage
3
3
  */
4
+ import { PublicationRefs } from "../source/_PublicationRef.js";
4
5
  import { EquipmentIdentifier } from "../_IdentifierGroup.js";
5
6
  import { LocaleMap } from "../_LocaleMap.js";
6
7
  import { NonEmptyString } from "../_NonEmptyString.js";
@@ -21,6 +22,7 @@ export declare type EquipmentPackage = {
21
22
  * @minItems 2
22
23
  */
23
24
  items: EquipmentPackageItem[];
25
+ src: PublicationRefs;
24
26
  /**
25
27
  * All translations for the entry, identified by IETF language tag (BCP47).
26
28
  */
@@ -49,11 +49,11 @@ export declare type ElixirTranslation = {
49
49
  */
50
50
  alternative_names?: AlternativeName[];
51
51
  /**
52
- * A list of common ingredients.
52
+ * A list of typical ingredients.
53
53
  * @minItems 1
54
54
  * @uniqueItems
55
55
  */
56
- common_ingredients: NonEmptyString[];
56
+ typical_ingredients: NonEmptyString[];
57
57
  /**
58
58
  * Prerequsites for the brewing process, if any.
59
59
  */
@@ -156,11 +156,11 @@ export declare type AlchemicalPoison = {
156
156
  };
157
157
  export declare type AlchemicalPoisonTranslation = {
158
158
  /**
159
- * A list of common ingredients.
159
+ * A list of typical ingredients.
160
160
  * @minItems 1
161
161
  * @uniqueItems
162
162
  */
163
- common_ingredients: NonEmptyString[];
163
+ typical_ingredients: NonEmptyString[];
164
164
  /**
165
165
  * Prerequsites for the brewing process, if any.
166
166
  */
@@ -5,7 +5,7 @@ import { Errata } from "../../source/_Erratum.js";
5
5
  import { PublicationRefs } from "../../source/_PublicationRef.js";
6
6
  import { LocaleMap } from "../../_LocaleMap.js";
7
7
  import { NonEmptyMarkdown, NonEmptyString } from "../../_NonEmptyString.js";
8
- import { BlessedTraditionReference, CultureReference, RaceReference } from "../../_SimpleReferences.js";
8
+ import { BlessedTraditionReference, CultureReference, RaceReference, TraditionReference } from "../../_SimpleReferences.js";
9
9
  import { Complexity, Cost, StructurePoints, Weight } from "./_Item.js";
10
10
  import { MeleeWeapon } from "./_MeleeWeapon.js";
11
11
  import { RangedWeapon } from "./_RangedWeapon.js";
@@ -43,6 +43,12 @@ export declare type Weapon = {
43
43
  * characters of a specific race or culture.
44
44
  */
45
45
  restricted_to_cultures?: RestrictedToCultures;
46
+ /**
47
+ * Define if during character creation this weapon can only be bought by
48
+ * characters of specific magical or blessed traditions.
49
+ * @minItems 1
50
+ */
51
+ restricted_to_traditions?: TraditionReference[];
46
52
  src: PublicationRefs;
47
53
  /**
48
54
  * All translations for the entry, identified by IETF language tag (BCP47).
@@ -93,6 +99,12 @@ export declare type SecondaryWeapon = {
93
99
  * characters of a specific race or culture.
94
100
  */
95
101
  restricted_to_cultures?: RestrictedToCultures;
102
+ /**
103
+ * Define if during character creation this weapon can only be bought by
104
+ * characters of specific magical or blessed traditions.
105
+ * @minItems 1
106
+ */
107
+ restricted_to_traditions?: TraditionReference[];
96
108
  /**
97
109
  * All translations for the entry, identified by IETF language tag (BCP47).
98
110
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "optolith-database-schema",
3
- "version": "0.5.3",
3
+ "version": "0.6.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",
@@ -255,7 +255,7 @@
255
255
  "Religious"
256
256
  ]
257
257
  },
258
- "TraditionConstraint": {
258
+ "MagicalTraditionConstraint": {
259
259
  "type": "object",
260
260
  "properties": {
261
261
  "id": {
@@ -295,6 +295,46 @@
295
295
  ],
296
296
  "additionalProperties": false
297
297
  },
298
+ "BlessedTraditionConstraint": {
299
+ "type": "object",
300
+ "properties": {
301
+ "id": {
302
+ "description": "The magical tradition's identifier.",
303
+ "$ref": "./_Identifier.schema.json#/$defs/BlessedTraditionIdentifier"
304
+ },
305
+ "weighted_professions": {
306
+ "description": "Some professions or profession variants are more common than others. There\nmay be cultures where some professions or profession variants are not\nrepresented at all.",
307
+ "type": "object",
308
+ "properties": {
309
+ "elements": {
310
+ "description": "The list of more common professions or profession variants.",
311
+ "type": "array",
312
+ "items": {
313
+ "$ref": "./_SimpleReferences.schema.json#/$defs/ProfessionReference"
314
+ },
315
+ "minItems": 1
316
+ },
317
+ "weight": {
318
+ "description": "The \"weight\" difference compared to other professions or profession\nvariants. Some professions or profession variants are simply more common\n(Mostly), but sometimes only specific elements are used (Only).",
319
+ "$ref": "#/$defs/Weight"
320
+ }
321
+ },
322
+ "required": [
323
+ "elements",
324
+ "weight"
325
+ ],
326
+ "additionalProperties": false
327
+ },
328
+ "rarity": {
329
+ "description": "Some traditions may be found in a culture, but are not that common.",
330
+ "$ref": "#/$defs/Rarity"
331
+ }
332
+ },
333
+ "required": [
334
+ "id"
335
+ ],
336
+ "additionalProperties": false
337
+ },
298
338
  "MundaneCommonProfessionConstraint": {
299
339
  "oneOf": [
300
340
  {
@@ -320,7 +360,7 @@
320
360
  "const": "ProfessionSubgroup"
321
361
  },
322
362
  "profession_subgroup": {
323
- "$ref": "#/$defs/ProfessionConstraint"
363
+ "$ref": "#/$defs/MundaneProfessionSubgroupConstraint"
324
364
  }
325
365
  },
326
366
  "required": [
@@ -340,7 +380,7 @@
340
380
  "const": "Tradition"
341
381
  },
342
382
  "tradition": {
343
- "$ref": "#/$defs/TraditionConstraint"
383
+ "$ref": "#/$defs/MagicalTraditionConstraint"
344
384
  }
345
385
  },
346
386
  "required": [
@@ -395,7 +435,7 @@
395
435
  "const": "Tradition"
396
436
  },
397
437
  "tradition": {
398
- "$ref": "#/$defs/TraditionConstraint"
438
+ "$ref": "#/$defs/BlessedTraditionConstraint"
399
439
  }
400
440
  },
401
441
  "required": [
@@ -504,7 +544,7 @@
504
544
  }
505
545
  },
506
546
  "required": [],
507
- "minProperties": 2,
547
+ "minProperties": 1,
508
548
  "additionalProperties": false
509
549
  },
510
550
  "CommonProfessions": {
@@ -52,7 +52,7 @@
52
52
  },
53
53
  "calculation": {
54
54
  "description": "Possible calculation strings for the final value.",
55
- "$ref": "#/$defs/Calculation"
55
+ "$ref": "#/$defs/CalculationTranslation"
56
56
  }
57
57
  },
58
58
  "required": [
@@ -61,7 +61,7 @@
61
61
  ],
62
62
  "additionalProperties": false
63
63
  },
64
- "Calculation": {
64
+ "CalculationTranslation": {
65
65
  "description": "Possible calculation strings for the final value.",
66
66
  "type": "object",
67
67
  "properties": {
@@ -338,7 +338,7 @@
338
338
  "properties": {
339
339
  "per": {
340
340
  "description": "The cost have to be per a specific countable entity, e.g. `8 KP\nper person`.",
341
- "$ref": "./_ResponsiveText.schema.json#/$defs/ResponsiveText"
341
+ "$ref": "./_ResponsiveText.schema.json#/$defs/ResponsiveTextOptional"
342
342
  }
343
343
  },
344
344
  "required": [],
@@ -396,10 +396,17 @@
396
396
  "properties": {
397
397
  "tag": {
398
398
  "const": "Immediate"
399
+ },
400
+ "immediate": {
401
+ "type": "object",
402
+ "properties": {},
403
+ "required": [],
404
+ "additionalProperties": false
399
405
  }
400
406
  },
401
407
  "required": [
402
- "tag"
408
+ "tag",
409
+ "immediate"
403
410
  ],
404
411
  "additionalProperties": false
405
412
  },
@@ -143,18 +143,33 @@
143
143
  },
144
144
  "ElectiveSpellworkRestriction": {
145
145
  "description": "The elective spellwork may only take effect if a certain condition is met.\nThe condition may be related to professions or profession variants, but it is\ndesigned so that it can work without a specific profession, as multiple may\nbelong to an institute, but with referencing other entities instead.",
146
+ "oneOf": [
147
+ {
148
+ "type": "object",
149
+ "properties": {
150
+ "tag": {
151
+ "const": "Element"
152
+ },
153
+ "element": {
154
+ "$ref": "#/$defs/ElectiveSpellworkElementRestriction"
155
+ }
156
+ },
157
+ "required": [
158
+ "tag",
159
+ "element"
160
+ ],
161
+ "additionalProperties": false
162
+ }
163
+ ]
164
+ },
165
+ "ElectiveSpellworkElementRestriction": {
146
166
  "type": "object",
147
167
  "properties": {
148
- "tag": {
149
- "const": "Element"
150
- },
151
168
  "id": {
152
- "description": "The element's identifier.",
153
169
  "$ref": "./_Identifier.schema.json#/$defs/ElementIdentifier"
154
170
  }
155
171
  },
156
172
  "required": [
157
- "tag",
158
173
  "id"
159
174
  ],
160
175
  "additionalProperties": false
@@ -296,6 +296,16 @@
296
296
  }
297
297
  ]
298
298
  },
299
+ "TraditionIdentifier": {
300
+ "oneOf": [
301
+ {
302
+ "$ref": "./_Identifier.schema.json#/$defs/MagicalTraditionIdentifier"
303
+ },
304
+ {
305
+ "$ref": "./_Identifier.schema.json#/$defs/BlessedTraditionIdentifier"
306
+ }
307
+ ]
308
+ },
299
309
  "RatedIdentifier": {
300
310
  "oneOf": [
301
311
  {
@@ -37,6 +37,9 @@
37
37
  "$ref": "./prerequisites/PrerequisiteGroups.schema.json#/$defs/DerivedCharacteristicPrerequisiteGroup"
38
38
  },
39
39
  "minItems": 2
40
+ },
41
+ "display_option": {
42
+ "$ref": "./prerequisites/DisplayOption.schema.json#/$defs/DisplayOption"
40
43
  }
41
44
  },
42
45
  "required": [
@@ -132,6 +135,9 @@
132
135
  "$ref": "./prerequisites/PrerequisiteGroups.schema.json#/$defs/PublicationPrerequisiteGroup"
133
136
  },
134
137
  "minItems": 2
138
+ },
139
+ "display_option": {
140
+ "$ref": "./prerequisites/DisplayOption.schema.json#/$defs/DisplayOption"
135
141
  }
136
142
  },
137
143
  "required": [
@@ -227,6 +233,9 @@
227
233
  "$ref": "./prerequisites/PrerequisiteGroups.schema.json#/$defs/GeneralPrerequisiteGroup"
228
234
  },
229
235
  "minItems": 2
236
+ },
237
+ "display_option": {
238
+ "$ref": "./prerequisites/DisplayOption.schema.json#/$defs/DisplayOption"
230
239
  }
231
240
  },
232
241
  "required": [
@@ -329,6 +338,9 @@
329
338
  "$ref": "./prerequisites/PrerequisiteGroups.schema.json#/$defs/GeneralPrerequisiteGroup"
330
339
  },
331
340
  "minItems": 2
341
+ },
342
+ "display_option": {
343
+ "$ref": "./prerequisites/DisplayOption.schema.json#/$defs/DisplayOption"
332
344
  }
333
345
  },
334
346
  "required": [
@@ -431,6 +443,9 @@
431
443
  "$ref": "./prerequisites/PrerequisiteGroups.schema.json#/$defs/ProfessionPrerequisiteGroup"
432
444
  },
433
445
  "minItems": 2
446
+ },
447
+ "display_option": {
448
+ "$ref": "./prerequisites/DisplayOption.schema.json#/$defs/DisplayOption"
434
449
  }
435
450
  },
436
451
  "required": [
@@ -533,6 +548,9 @@
533
548
  "$ref": "./prerequisites/PrerequisiteGroups.schema.json#/$defs/AdvantageDisadvantagePrerequisiteGroup"
534
549
  },
535
550
  "minItems": 2
551
+ },
552
+ "display_option": {
553
+ "$ref": "./prerequisites/DisplayOption.schema.json#/$defs/DisplayOption"
536
554
  }
537
555
  },
538
556
  "required": [
@@ -635,6 +653,9 @@
635
653
  "$ref": "./prerequisites/PrerequisiteGroups.schema.json#/$defs/ArcaneTraditionPrerequisiteGroup"
636
654
  },
637
655
  "minItems": 2
656
+ },
657
+ "display_option": {
658
+ "$ref": "./prerequisites/DisplayOption.schema.json#/$defs/DisplayOption"
638
659
  }
639
660
  },
640
661
  "required": [
@@ -730,6 +751,9 @@
730
751
  "$ref": "./prerequisites/PrerequisiteGroups.schema.json#/$defs/PersonalityTraitPrerequisiteGroup"
731
752
  },
732
753
  "minItems": 2
754
+ },
755
+ "display_option": {
756
+ "$ref": "./prerequisites/DisplayOption.schema.json#/$defs/DisplayOption"
733
757
  }
734
758
  },
735
759
  "required": [
@@ -825,6 +849,9 @@
825
849
  "$ref": "./prerequisites/PrerequisiteGroups.schema.json#/$defs/SpellworkPrerequisiteGroup"
826
850
  },
827
851
  "minItems": 2
852
+ },
853
+ "display_option": {
854
+ "$ref": "./prerequisites/DisplayOption.schema.json#/$defs/DisplayOption"
828
855
  }
829
856
  },
830
857
  "required": [
@@ -920,6 +947,9 @@
920
947
  "$ref": "./prerequisites/PrerequisiteGroups.schema.json#/$defs/LiturgyPrerequisiteGroup"
921
948
  },
922
949
  "minItems": 2
950
+ },
951
+ "display_option": {
952
+ "$ref": "./prerequisites/DisplayOption.schema.json#/$defs/DisplayOption"
923
953
  }
924
954
  },
925
955
  "required": [
@@ -1015,6 +1045,9 @@
1015
1045
  "$ref": "./prerequisites/PrerequisiteGroups.schema.json#/$defs/InfluencePrerequisiteGroup"
1016
1046
  },
1017
1047
  "minItems": 2
1048
+ },
1049
+ "display_option": {
1050
+ "$ref": "./prerequisites/DisplayOption.schema.json#/$defs/DisplayOption"
1018
1051
  }
1019
1052
  },
1020
1053
  "required": [
@@ -1117,6 +1150,9 @@
1117
1150
  "$ref": "./prerequisites/PrerequisiteGroups.schema.json#/$defs/LanguagePrerequisiteGroup"
1118
1151
  },
1119
1152
  "minItems": 2
1153
+ },
1154
+ "display_option": {
1155
+ "$ref": "./prerequisites/DisplayOption.schema.json#/$defs/DisplayOption"
1120
1156
  }
1121
1157
  },
1122
1158
  "required": [
@@ -1219,6 +1255,9 @@
1219
1255
  "$ref": "./prerequisites/PrerequisiteGroups.schema.json#/$defs/AnimistPowerPrerequisiteGroup"
1220
1256
  },
1221
1257
  "minItems": 2
1258
+ },
1259
+ "display_option": {
1260
+ "$ref": "./prerequisites/DisplayOption.schema.json#/$defs/DisplayOption"
1222
1261
  }
1223
1262
  },
1224
1263
  "required": [
@@ -1314,6 +1353,9 @@
1314
1353
  "$ref": "./prerequisites/PrerequisiteGroups.schema.json#/$defs/GeodeRitualPrerequisiteGroup"
1315
1354
  },
1316
1355
  "minItems": 2
1356
+ },
1357
+ "display_option": {
1358
+ "$ref": "./prerequisites/DisplayOption.schema.json#/$defs/DisplayOption"
1317
1359
  }
1318
1360
  },
1319
1361
  "required": [
@@ -1409,6 +1451,9 @@
1409
1451
  "$ref": "./prerequisites/PrerequisiteGroups.schema.json#/$defs/EnhancementPrerequisiteGroup"
1410
1452
  },
1411
1453
  "minItems": 2
1454
+ },
1455
+ "display_option": {
1456
+ "$ref": "./prerequisites/DisplayOption.schema.json#/$defs/DisplayOption"
1412
1457
  }
1413
1458
  },
1414
1459
  "required": [
@@ -505,6 +505,18 @@
505
505
  "id"
506
506
  ],
507
507
  "additionalProperties": false
508
+ },
509
+ "TraditionReference": {
510
+ "type": "object",
511
+ "properties": {
512
+ "id": {
513
+ "$ref": "./_IdentifierGroup.schema.json#/$defs/TraditionIdentifier"
514
+ }
515
+ },
516
+ "required": [
517
+ "id"
518
+ ],
519
+ "additionalProperties": false
508
520
  }
509
521
  }
510
522
  }
@@ -20,6 +20,9 @@
20
20
  },
21
21
  "minItems": 2
22
22
  },
23
+ "src": {
24
+ "$ref": "../source/_PublicationRef.schema.json#/$defs/PublicationRefs"
25
+ },
23
26
  "translations": {
24
27
  "description": "All translations for the entry, identified by IETF language tag (BCP47).",
25
28
  "type": "object",
@@ -35,6 +38,7 @@
35
38
  "required": [
36
39
  "id",
37
40
  "items",
41
+ "src",
38
42
  "translations"
39
43
  ],
40
44
  "additionalProperties": false
@@ -68,8 +68,8 @@
68
68
  },
69
69
  "minItems": 1
70
70
  },
71
- "common_ingredients": {
72
- "description": "A list of common ingredients.",
71
+ "typical_ingredients": {
72
+ "description": "A list of typical ingredients.",
73
73
  "type": "array",
74
74
  "items": {
75
75
  "$ref": "../../_NonEmptyString.schema.json#/$defs/NonEmptyString"
@@ -114,7 +114,7 @@
114
114
  },
115
115
  "required": [
116
116
  "name",
117
- "common_ingredients",
117
+ "typical_ingredients",
118
118
  "quality_levels"
119
119
  ],
120
120
  "additionalProperties": false
@@ -382,8 +382,8 @@
382
382
  "AlchemicalPoisonTranslation": {
383
383
  "type": "object",
384
384
  "properties": {
385
- "common_ingredients": {
386
- "description": "A list of common ingredients.",
385
+ "typical_ingredients": {
386
+ "description": "A list of typical ingredients.",
387
387
  "type": "array",
388
388
  "items": {
389
389
  "$ref": "../../_NonEmptyString.schema.json#/$defs/NonEmptyString"
@@ -397,7 +397,7 @@
397
397
  }
398
398
  },
399
399
  "required": [
400
- "common_ingredients"
400
+ "typical_ingredients"
401
401
  ],
402
402
  "additionalProperties": false
403
403
  },
@@ -38,6 +38,14 @@
38
38
  "description": "Define if during character creation this weapon can only be bought by\ncharacters of a specific race or culture.",
39
39
  "$ref": "#/$defs/RestrictedToCultures"
40
40
  },
41
+ "restricted_to_traditions": {
42
+ "description": "Define if during character creation this weapon can only be bought by\ncharacters of specific magical or blessed traditions.",
43
+ "type": "array",
44
+ "items": {
45
+ "$ref": "../../_SimpleReferences.schema.json#/$defs/TraditionReference"
46
+ },
47
+ "minItems": 1
48
+ },
41
49
  "src": {
42
50
  "$ref": "../../source/_PublicationRef.schema.json#/$defs/PublicationRefs"
43
51
  },
@@ -118,6 +126,14 @@
118
126
  "description": "Define if during character creation this weapon can only be bought by\ncharacters of a specific race or culture.",
119
127
  "$ref": "#/$defs/RestrictedToCultures"
120
128
  },
129
+ "restricted_to_traditions": {
130
+ "description": "Define if during character creation this weapon can only be bought by\ncharacters of specific magical or blessed traditions.",
131
+ "type": "array",
132
+ "items": {
133
+ "$ref": "../../_SimpleReferences.schema.json#/$defs/TraditionReference"
134
+ },
135
+ "minItems": 1
136
+ },
121
137
  "translations": {
122
138
  "description": "All translations for the entry, identified by IETF language tag (BCP47).",
123
139
  "type": "object",