optolith-database-schema 0.2.0 → 0.2.3

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,32 @@
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.2.3](https://github.com/elyukai/optolith-database-schema/compare/v0.2.2...v0.2.3) (2022-03-29)
6
+
7
+
8
+ ### Features
9
+
10
+ * allow dis-/advantages to not contribute to maximum AP value ([9e401d0](https://github.com/elyukai/optolith-database-schema/commit/9e401d0be40797a5758220233af6c162d1ce76fb))
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * state prerequisite should have unique tag ([7710fd5](https://github.com/elyukai/optolith-database-schema/commit/7710fd538582b85cd67cb81b2f791774102d17db))
16
+
17
+ ### [0.2.2](https://github.com/elyukai/optolith-database-schema/compare/v0.2.1...v0.2.2) (2022-03-29)
18
+
19
+
20
+ ### Features
21
+
22
+ * add offset option for deriving AP value from improvement cost ([f556207](https://github.com/elyukai/optolith-database-schema/commit/f55620751b7a68383c74ba8c4256d11802ab99c7))
23
+
24
+ ### [0.2.1](https://github.com/elyukai/optolith-database-schema/compare/v0.2.0...v0.2.1) (2022-03-29)
25
+
26
+
27
+ ### Bug Fixes
28
+
29
+ * category names and prerequisites should be defined separately ([eb312fe](https://github.com/elyukai/optolith-database-schema/commit/eb312fe2fc9973ef6be36937ebd8af8c8bf30e60))
30
+
5
31
  ## [0.2.0](https://github.com/elyukai/optolith-database-schema/compare/v0.1.28...v0.2.0) (2022-03-29)
6
32
 
7
33
 
@@ -16,7 +16,7 @@ export declare type Advantage = {
16
16
  skill_uses?: Activatable.SkillUses;
17
17
  maximum?: Activatable.Maximum;
18
18
  prerequisites?: AdvantageDisadvantagePrerequisites;
19
- ap_value: Activatable.AdventurePointsValue;
19
+ ap_value: Activatable.AdventurePointsValueAdvantagesDisadvantages;
20
20
  /**
21
21
  * Does this advantage not count towards the maximum of AP to be spent
22
22
  * on advantages?
@@ -14,7 +14,7 @@ export declare type Disadvantage = {
14
14
  select_options?: Activatable.SelectOptions;
15
15
  maximum?: Activatable.Maximum;
16
16
  prerequisites?: AdvantageDisadvantagePrerequisites;
17
- ap_value: Activatable.AdventurePointsValue;
17
+ ap_value: Activatable.AdventurePointsValueAdvantagesDisadvantages;
18
18
  /**
19
19
  * Does this disadvantage not count towards the maximum of AP to be granted by
20
20
  * disadvantages?
@@ -6,7 +6,7 @@ import { DisplayOption } from "./prerequisites/DisplayOption.js";
6
6
  import { Errata } from "./source/_Erratum.js";
7
7
  import { PublicationRefs } from "./source/_PublicationRef.js";
8
8
  import { Duration } from "./_ActivatableSkill.js";
9
- import { ActivatableIdentifier, AdvancedSpecialAbilityRestrictedOptionIdentifier, CombatRelatedSpecialAbilityIdentifier, CombatTechniqueIdentifier, CombatTechniqueTag, MagicalTraditionIdentifier, PatronIdentifier, SkillIdentifier, SkillWithEnhancementsTag, VolumePointsOptionReferenceIdentifier } from "./_Identifier.js";
9
+ import { ActivatableIdentifier, AdvancedSpecialAbilityRestrictedOptionIdentifier, CombatRelatedSpecialAbilityIdentifier, CombatTechniqueIdentifier, MagicalTraditionIdentifier, PatronIdentifier, SkillIdentifier, VolumePointsOptionReferenceIdentifier } from "./_Identifier.js";
10
10
  import { GeneralPrerequisites } from "./_Prerequisite.js";
11
11
  /**
12
12
  * The activatable entry's identifier. An unique, increasing integer.
@@ -316,8 +316,13 @@ declare type CategoryOption = {
316
316
  };
317
317
  };
318
318
  }[];
319
+ /**
320
+ * Generate prerequisites for each entry of the category.
321
+ * @minItems 1
322
+ */
323
+ prerequisites?: (OptionSkillSelfPrerequisite | OptionOptionPrerequisite)[];
319
324
  } | {
320
- tag: SkillWithEnhancementsTag;
325
+ tag: SkillWithEnhancementsCategory;
321
326
  /**
322
327
  * Only include (`Intersection`) or exclude (`Difference`) specific
323
328
  * entries.
@@ -343,60 +348,70 @@ declare type CategoryOption = {
343
348
  id: number;
344
349
  }[];
345
350
  };
351
+ /**
352
+ * Generate prerequisites for each entry of the category.
353
+ * @minItems 1
354
+ */
355
+ prerequisites?: (OptionSkillSelfPrerequisite | OptionOptionPrerequisite)[];
346
356
  })[];
347
357
  /**
348
- * Generate prerequisites for each entry of the category.
349
- * @minItems 1
358
+ * Generate AP values for each entry.
350
359
  */
351
- prerequisites?: (OptionSkillSelfPrerequisite | OptionOptionPrerequisite)[];
360
+ ap_value?: OptionSkillDeriveAdventurePointsValue<SkillIdentifier>;
361
+ } | {
362
+ tag: "CombatTechniques";
352
363
  /**
353
- * Generate AP values for each entry.
364
+ * A list of combat technique categories.
365
+ * @minItems 1
354
366
  */
355
- ap_value?: OptionSkillDeriveAdventurePointsValue<SkillIdentifier> | {
356
- tag: "CombatTechniques";
367
+ categories: {
368
+ tag: CombatTechniqueCategory;
357
369
  /**
358
- * A list of combat technique categories.
359
- * @minItems 1
370
+ * Only include (`Intersection`) or exclude (`Difference`) specific
371
+ * entries.
360
372
  */
361
- categories: {
362
- tag: CombatTechniqueTag;
373
+ specific?: {
374
+ operation: {
375
+ tag: "Intersection";
376
+ } | {
377
+ tag: "Difference";
378
+ };
363
379
  /**
364
- * Only include (`Intersection`) or exclude (`Difference`) specific
365
- * entries.
380
+ * The list of specific entries.
381
+ * @minItems 1
382
+ * @uniqueItems
366
383
  */
367
- specific?: {
368
- operation: {
369
- tag: "Intersection";
370
- } | {
371
- tag: "Difference";
372
- };
384
+ list: {
373
385
  /**
374
- * The list of specific entries.
375
- * @minItems 1
376
- * @uniqueItems
386
+ * The entry's identifier.
387
+ * @integer
388
+ * @minimum 1
389
+ * @maximum 59
377
390
  */
378
- list: {
379
- /**
380
- * The entry's identifier.
381
- * @integer
382
- * @minimum 1
383
- * @maximum 59
384
- */
385
- id: number;
386
- }[];
387
- };
388
- }[];
391
+ id: number;
392
+ }[];
393
+ };
389
394
  /**
390
395
  * Generate prerequisites for each entry of the category.
391
396
  * @minItems 1
392
397
  */
393
398
  prerequisites?: (OptionSkillSelfPrerequisite | OptionOptionPrerequisite)[];
394
- /**
395
- * Generate AP values for each entry.
396
- */
397
- ap_value?: OptionSkillDeriveAdventurePointsValue<CombatTechniqueIdentifier>;
398
- };
399
+ }[];
400
+ /**
401
+ * Generate AP values for each entry.
402
+ */
403
+ ap_value?: OptionSkillDeriveAdventurePointsValue<CombatTechniqueIdentifier>;
399
404
  };
405
+ declare enum SkillWithEnhancementsCategory {
406
+ Spells = "Spells",
407
+ Rituals = "Rituals",
408
+ LiturgicalChants = "LiturgicalChants",
409
+ Ceremonies = "Ceremonies"
410
+ }
411
+ declare enum CombatTechniqueCategory {
412
+ CloseCombatTechniques = "CloseCombatTechniques",
413
+ RangedCombatTechniques = "RangedCombatTechniques"
414
+ }
400
415
  declare type OptionSkillSelfPrerequisite = {
401
416
  tag: "Self";
402
417
  /**
@@ -430,14 +445,27 @@ declare type OptionOptionPrerequisite = {
430
445
  * Generate AP values for each entry.
431
446
  */
432
447
  declare type OptionSkillDeriveAdventurePointsValue<Identifier> = {
448
+ /**
449
+ * Derive the cost from the improvement cost of each entry.
450
+ *
451
+ * AP Value = Improvement Cost × `multiplier` + `offset`
452
+ */
433
453
  tag: "DerivedFromImprovementCost";
434
454
  /**
435
455
  * This number is multiplied with the improvement cost of the entry
436
456
  * (A = 1 to D = 4).
437
457
  * @integer
438
458
  * @minimum 2
459
+ * @default 1
439
460
  */
440
461
  multiplier?: number;
462
+ /**
463
+ * This number is added to the maybe multiplied improvement cost of the
464
+ * entry.
465
+ * @integer
466
+ * @default 0
467
+ */
468
+ offset?: number;
441
469
  } | {
442
470
  tag: "Fixed";
443
471
  /**
@@ -1786,25 +1814,49 @@ export declare type AdventurePointsValue = {
1786
1814
  */
1787
1815
  values: AdventurePointsSingleValue[];
1788
1816
  } | {
1789
- tag: "ByImprovementCost";
1790
1817
  /**
1791
- * An entry with a selection of skills may have different costs for
1792
- * different improvement costs of the selected skill.
1793
- *
1794
- * If the select options will not have entries with improvement cost A
1795
- * (combat techniques only), you may leave out A.
1796
- */
1797
- values: {
1798
- A?: AdventurePointsSingleValue;
1799
- B: AdventurePointsSingleValue;
1800
- C: AdventurePointsSingleValue;
1801
- D: AdventurePointsSingleValue;
1802
- };
1818
+ * Used if AP value is defined by the selected option(s) or special rules.
1819
+ */
1820
+ tag: "Indefinite";
1821
+ };
1822
+ export declare type AdventurePointsValueAdvantagesDisadvantages = {
1823
+ tag: "Fixed";
1824
+ /**
1825
+ * A fixed adventure points value. If the entry has levels, this is the cost
1826
+ * for each level as well.
1827
+ */
1828
+ value: AdventurePointsSingleValue;
1829
+ /**
1830
+ * The AP Value of the entry does not contribute to the AP maximum for
1831
+ * advantages or disadvantages, so it may also be bought if the maximum has
1832
+ * already been reached.
1833
+ */
1834
+ does_not_contribute_to_maximum?: true;
1835
+ } | {
1836
+ tag: "ByLevel";
1837
+ /**
1838
+ * An entry with levels may have different costs for each level. The length
1839
+ * of the list must match the amount of levels the special ability has.
1840
+ * @minItems 2
1841
+ */
1842
+ values: AdventurePointsSingleValue[];
1843
+ /**
1844
+ * The AP Value of the entry does not contribute to the AP maximum for
1845
+ * advantages or disadvantages, so it may also be bought if the maximum has
1846
+ * already been reached.
1847
+ */
1848
+ does_not_contribute_to_maximum?: true;
1803
1849
  } | {
1804
1850
  /**
1805
1851
  * Used if AP value is defined by the selected option(s) or special rules.
1806
1852
  */
1807
1853
  tag: "Indefinite";
1854
+ /**
1855
+ * The AP Value of the entry does not contribute to the AP maximum for
1856
+ * advantages or disadvantages, so it may also be bought if the maximum has
1857
+ * already been reached.
1858
+ */
1859
+ does_not_contribute_to_maximum?: true;
1808
1860
  };
1809
1861
  /**
1810
1862
  * A single adventure points value.
@@ -2,6 +2,18 @@
2
2
  * General type specifications used by multiple activatable entries.
3
3
  * @title Activatable
4
4
  */
5
+ var SkillWithEnhancementsCategory;
6
+ (function (SkillWithEnhancementsCategory) {
7
+ SkillWithEnhancementsCategory["Spells"] = "Spells";
8
+ SkillWithEnhancementsCategory["Rituals"] = "Rituals";
9
+ SkillWithEnhancementsCategory["LiturgicalChants"] = "LiturgicalChants";
10
+ SkillWithEnhancementsCategory["Ceremonies"] = "Ceremonies";
11
+ })(SkillWithEnhancementsCategory || (SkillWithEnhancementsCategory = {}));
12
+ var CombatTechniqueCategory;
13
+ (function (CombatTechniqueCategory) {
14
+ CombatTechniqueCategory["CloseCombatTechniques"] = "CloseCombatTechniques";
15
+ CombatTechniqueCategory["RangedCombatTechniques"] = "RangedCombatTechniques";
16
+ })(CombatTechniqueCategory || (CombatTechniqueCategory = {}));
5
17
  export {};
6
18
  // "Input": {
7
19
  // "description": "A string that is used as a placeholder text for an input field.",
@@ -124,7 +124,7 @@ declare enum VolumePointsOptionReferenceTag {
124
124
  General = "General",
125
125
  AnimalShapeSize = "AnimalShapeSize"
126
126
  }
127
- export declare enum CombatTechniqueTag {
127
+ declare enum CombatTechniqueTag {
128
128
  CloseCombatTechnique = "CloseCombatTechnique",
129
129
  RangedCombatTechnique = "RangedCombatTechnique"
130
130
  }
@@ -138,7 +138,7 @@ declare enum ExtensionRuleTag {
138
138
  FocusRule = "FocusRule",
139
139
  OptionalRule = "OptionalRule"
140
140
  }
141
- export declare enum SkillWithEnhancementsTag {
141
+ declare enum SkillWithEnhancementsTag {
142
142
  Spell = "Spell",
143
143
  Ritual = "Ritual",
144
144
  LiturgicalChant = "LiturgicalChant",
@@ -131,7 +131,7 @@ var VolumePointsOptionReferenceTag;
131
131
  VolumePointsOptionReferenceTag["General"] = "General";
132
132
  VolumePointsOptionReferenceTag["AnimalShapeSize"] = "AnimalShapeSize";
133
133
  })(VolumePointsOptionReferenceTag || (VolumePointsOptionReferenceTag = {}));
134
- export var CombatTechniqueTag;
134
+ var CombatTechniqueTag;
135
135
  (function (CombatTechniqueTag) {
136
136
  CombatTechniqueTag["CloseCombatTechnique"] = "CloseCombatTechnique";
137
137
  CombatTechniqueTag["RangedCombatTechnique"] = "RangedCombatTechnique";
@@ -149,7 +149,7 @@ var ExtensionRuleTag;
149
149
  ExtensionRuleTag["FocusRule"] = "FocusRule";
150
150
  ExtensionRuleTag["OptionalRule"] = "OptionalRule";
151
151
  })(ExtensionRuleTag || (ExtensionRuleTag = {}));
152
- export var SkillWithEnhancementsTag;
152
+ var SkillWithEnhancementsTag;
153
153
  (function (SkillWithEnhancementsTag) {
154
154
  SkillWithEnhancementsTag["Spell"] = "Spell";
155
155
  SkillWithEnhancementsTag["Ritual"] = "Ritual";
@@ -194,3 +194,4 @@ var CoreRuleDerivableContentTag;
194
194
  CoreRuleDerivableContentTag["MagicalSpecialAbility"] = "MagicalSpecialAbility";
195
195
  CoreRuleDerivableContentTag["BlessedTradition"] = "BlessedTradition";
196
196
  })(CoreRuleDerivableContentTag || (CoreRuleDerivableContentTag = {}));
197
+ export {};
@@ -5,7 +5,7 @@ import { DisplayOption } from "../DisplayOption.js";
5
5
  * @title State Prerequisite
6
6
  */
7
7
  export declare type StatePrerequisite = {
8
- tag: "Culture";
8
+ tag: "State";
9
9
  id: OneOrManyNumericIdentifiers;
10
10
  display_option?: DisplayOption;
11
11
  };
@@ -3,7 +3,7 @@
3
3
  * background information – or the referenced entities were not made available
4
4
  * for use yet – e.g. races –, but which should be displayed, because it is part
5
5
  * of the prerequisite string from the sources.
6
- * @title Impossible Prerequisite
6
+ * @title Text Prerequisite
7
7
  */
8
8
  export declare type TextPrerequisite = {
9
9
  tag: "Text";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "optolith-database-schema",
3
- "version": "0.2.0",
3
+ "version": "0.2.3",
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",
@@ -29,7 +29,7 @@
29
29
  "$ref": "./_Prerequisite.schema.json#/definitions/AdvantageDisadvantagePrerequisites"
30
30
  },
31
31
  "ap_value": {
32
- "$ref": "./_Activatable.schema.json#/definitions/AdventurePointsValue"
32
+ "$ref": "./_Activatable.schema.json#/definitions/AdventurePointsValueAdvantagesDisadvantages"
33
33
  },
34
34
  "has_no_maximum_spent_influence": {
35
35
  "description": "Does this advantage not count towards the maximum of AP to be spent\non advantages?",
@@ -23,7 +23,7 @@
23
23
  "$ref": "./_Prerequisite.schema.json#/definitions/AdvantageDisadvantagePrerequisites"
24
24
  },
25
25
  "ap_value": {
26
- "$ref": "./_Activatable.schema.json#/definitions/AdventurePointsValue"
26
+ "$ref": "./_Activatable.schema.json#/definitions/AdventurePointsValueAdvantagesDisadvantages"
27
27
  },
28
28
  "has_no_maximum_spent_influence": {
29
29
  "description": "Does this disadvantage not count towards the maximum of AP to be granted by\ndisadvantages?",
@@ -527,6 +527,21 @@
527
527
  "additionalProperties": false
528
528
  },
529
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
530
545
  }
531
546
  },
532
547
  "required": [
@@ -538,7 +553,7 @@
538
553
  "type": "object",
539
554
  "properties": {
540
555
  "tag": {
541
- "$ref": "./_Identifier.schema.json#/definitions/SkillWithEnhancementsTag"
556
+ "$ref": "#/definitions/SkillWithEnhancementsCategory"
542
557
  },
543
558
  "specific": {
544
559
  "description": "Only include (`Intersection`) or exclude (`Difference`) specific\nentries.",
@@ -599,6 +614,21 @@
599
614
  "list"
600
615
  ],
601
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
602
632
  }
603
633
  },
604
634
  "required": [
@@ -610,252 +640,242 @@
610
640
  },
611
641
  "minItems": 1
612
642
  },
613
- "prerequisites": {
614
- "description": "Generate prerequisites for each entry of the category.",
615
- "type": "array",
616
- "items": {
617
- "oneOf": [
618
- {
619
- "$ref": "#/definitions/OptionSkillSelfPrerequisite"
620
- },
621
- {
622
- "$ref": "#/definitions/OptionOptionPrerequisite"
623
- }
624
- ]
625
- },
626
- "minItems": 1
627
- },
628
643
  "ap_value": {
629
644
  "description": "Generate AP values for each entry.",
630
645
  "oneOf": [
631
646
  {
632
- "description": "Generate AP values for each entry.",
633
- "oneOf": [
634
- {
635
- "type": "object",
636
- "properties": {
637
- "tag": {
638
- "const": "DerivedFromImprovementCost"
639
- },
640
- "multiplier": {
641
- "description": "This number is multiplied with the improvement cost of the entry\n(A = 1 to D = 4).",
642
- "type": "integer",
643
- "minimum": 2
644
- }
645
- },
646
- "required": [
647
- "tag"
648
- ],
649
- "additionalProperties": false
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"
650
652
  },
651
- {
652
- "type": "object",
653
- "properties": {
654
- "tag": {
655
- "const": "Fixed"
656
- },
657
- "map": {
658
- "description": "A mapping of skill identifiers to their specific AP values.",
659
- "type": "array",
660
- "items": {
661
- "type": "object",
662
- "properties": {
663
- "id": {
664
- "$ref": "./_Identifier.schema.json#/definitions/SkillIdentifier"
665
- },
666
- "ap_value": {
667
- "description": "The AP value for the specified entry.",
668
- "type": "integer",
669
- "minimum": 1
670
- }
671
- },
672
- "required": [
673
- "id",
674
- "ap_value"
675
- ],
676
- "additionalProperties": false
677
- }
678
- },
679
- "default": {
680
- "description": "The default value of an entry. Used as a fallback if no value is\nfound in `list`.",
681
- "type": "integer",
682
- "minimum": 1
683
- }
684
- },
685
- "required": [
686
- "tag",
687
- "map",
688
- "default"
689
- ],
690
- "additionalProperties": false
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"
691
661
  }
692
- ]
662
+ },
663
+ "required": [
664
+ "tag"
665
+ ],
666
+ "additionalProperties": false
693
667
  },
694
668
  {
695
669
  "type": "object",
696
670
  "properties": {
697
671
  "tag": {
698
- "const": "CombatTechniques"
672
+ "const": "Fixed"
699
673
  },
700
- "categories": {
701
- "description": "A list of combat technique categories.",
674
+ "map": {
675
+ "description": "A mapping of skill identifiers to their specific AP values.",
702
676
  "type": "array",
703
677
  "items": {
704
678
  "type": "object",
705
679
  "properties": {
706
- "tag": {
707
- "$ref": "./_Identifier.schema.json#/definitions/CombatTechniqueTag"
680
+ "id": {
681
+ "$ref": "./_Identifier.schema.json#/definitions/SkillIdentifier"
708
682
  },
709
- "specific": {
710
- "description": "Only include (`Intersection`) or exclude (`Difference`) specific\nentries.",
711
- "type": "object",
712
- "properties": {
713
- "operation": {
714
- "oneOf": [
715
- {
716
- "type": "object",
717
- "properties": {
718
- "tag": {
719
- "const": "Intersection"
720
- }
721
- },
722
- "required": [
723
- "tag"
724
- ],
725
- "additionalProperties": false
726
- },
727
- {
728
- "type": "object",
729
- "properties": {
730
- "tag": {
731
- "const": "Difference"
732
- }
733
- },
734
- "required": [
735
- "tag"
736
- ],
737
- "additionalProperties": false
738
- }
739
- ]
740
- },
741
- "list": {
742
- "description": "The list of specific entries.",
743
- "type": "array",
744
- "items": {
745
- "type": "object",
746
- "properties": {
747
- "id": {
748
- "description": "The entry's identifier.",
749
- "type": "integer",
750
- "maximum": 59,
751
- "minimum": 1
752
- }
753
- },
754
- "required": [
755
- "id"
756
- ],
757
- "additionalProperties": false
758
- },
759
- "minItems": 1,
760
- "uniqueItems": true
761
- }
762
- },
763
- "required": [
764
- "operation",
765
- "list"
766
- ],
767
- "additionalProperties": false
683
+ "ap_value": {
684
+ "description": "The AP value for the specified entry.",
685
+ "type": "integer",
686
+ "minimum": 1
768
687
  }
769
688
  },
770
689
  "required": [
771
- "tag"
690
+ "id",
691
+ "ap_value"
772
692
  ],
773
693
  "additionalProperties": false
774
- },
775
- "minItems": 1
694
+ }
776
695
  },
777
- "prerequisites": {
778
- "description": "Generate prerequisites for each entry of the category.",
779
- "type": "array",
780
- "items": {
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
+ ]
710
+ }
711
+ },
712
+ "required": [
713
+ "tag",
714
+ "categories"
715
+ ],
716
+ "additionalProperties": false
717
+ },
718
+ {
719
+ "type": "object",
720
+ "properties": {
721
+ "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": {
781
738
  "oneOf": [
782
739
  {
783
- "$ref": "#/definitions/OptionSkillSelfPrerequisite"
740
+ "type": "object",
741
+ "properties": {
742
+ "tag": {
743
+ "const": "Intersection"
744
+ }
745
+ },
746
+ "required": [
747
+ "tag"
748
+ ],
749
+ "additionalProperties": false
784
750
  },
785
751
  {
786
- "$ref": "#/definitions/OptionOptionPrerequisite"
752
+ "type": "object",
753
+ "properties": {
754
+ "tag": {
755
+ "const": "Difference"
756
+ }
757
+ },
758
+ "required": [
759
+ "tag"
760
+ ],
761
+ "additionalProperties": false
787
762
  }
788
763
  ]
789
764
  },
790
- "minItems": 1
791
- },
792
- "ap_value": {
793
- "description": "Generate AP values for each entry.",
794
- "oneOf": [
795
- {
765
+ "list": {
766
+ "description": "The list of specific entries.",
767
+ "type": "array",
768
+ "items": {
796
769
  "type": "object",
797
770
  "properties": {
798
- "tag": {
799
- "const": "DerivedFromImprovementCost"
800
- },
801
- "multiplier": {
802
- "description": "This number is multiplied with the improvement cost of the entry\n(A = 1 to D = 4).",
771
+ "id": {
772
+ "description": "The entry's identifier.",
803
773
  "type": "integer",
804
- "minimum": 2
774
+ "maximum": 59,
775
+ "minimum": 1
805
776
  }
806
777
  },
807
778
  "required": [
808
- "tag"
779
+ "id"
809
780
  ],
810
781
  "additionalProperties": false
811
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": [
812
798
  {
813
- "type": "object",
814
- "properties": {
815
- "tag": {
816
- "const": "Fixed"
817
- },
818
- "map": {
819
- "description": "A mapping of skill identifiers to their specific AP values.",
820
- "type": "array",
821
- "items": {
822
- "type": "object",
823
- "properties": {
824
- "id": {
825
- "$ref": "./_Identifier.schema.json#/definitions/CombatTechniqueIdentifier"
826
- },
827
- "ap_value": {
828
- "description": "The AP value for the specified entry.",
829
- "type": "integer",
830
- "minimum": 1
831
- }
832
- },
833
- "required": [
834
- "id",
835
- "ap_value"
836
- ],
837
- "additionalProperties": false
838
- }
839
- },
840
- "default": {
841
- "description": "The default value of an entry. Used as a fallback if no value is\nfound in `list`.",
842
- "type": "integer",
843
- "minimum": 1
844
- }
845
- },
846
- "required": [
847
- "tag",
848
- "map",
849
- "default"
850
- ],
851
- "additionalProperties": false
799
+ "$ref": "#/definitions/OptionSkillSelfPrerequisite"
800
+ },
801
+ {
802
+ "$ref": "#/definitions/OptionOptionPrerequisite"
852
803
  }
853
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
854
873
  }
855
874
  },
856
875
  "required": [
857
876
  "tag",
858
- "categories"
877
+ "map",
878
+ "default"
859
879
  ],
860
880
  "additionalProperties": false
861
881
  }
@@ -870,6 +890,20 @@
870
890
  }
871
891
  ]
872
892
  },
893
+ "SkillWithEnhancementsCategory": {
894
+ "enum": [
895
+ "Spells",
896
+ "Rituals",
897
+ "LiturgicalChants",
898
+ "Ceremonies"
899
+ ]
900
+ },
901
+ "CombatTechniqueCategory": {
902
+ "enum": [
903
+ "CloseCombatTechniques",
904
+ "RangedCombatTechniques"
905
+ ]
906
+ },
873
907
  "OptionSkillSelfPrerequisite": {
874
908
  "type": "object",
875
909
  "properties": {
@@ -3294,31 +3328,57 @@
3294
3328
  "type": "object",
3295
3329
  "properties": {
3296
3330
  "tag": {
3297
- "const": "ByImprovementCost"
3331
+ "description": "Used if AP value is defined by the selected option(s) or special rules.",
3332
+ "const": "Indefinite"
3333
+ }
3334
+ },
3335
+ "required": [
3336
+ "tag"
3337
+ ],
3338
+ "additionalProperties": false
3339
+ }
3340
+ ]
3341
+ },
3342
+ "AdventurePointsValueAdvantagesDisadvantages": {
3343
+ "oneOf": [
3344
+ {
3345
+ "type": "object",
3346
+ "properties": {
3347
+ "tag": {
3348
+ "const": "Fixed"
3349
+ },
3350
+ "value": {
3351
+ "description": "A fixed adventure points value. If the entry has levels, this is the cost\nfor each level as well.",
3352
+ "$ref": "#/definitions/AdventurePointsSingleValue"
3353
+ },
3354
+ "does_not_contribute_to_maximum": {
3355
+ "description": "The AP Value of the entry does not contribute to the AP maximum for\nadvantages or disadvantages, so it may also be bought if the maximum has\nalready been reached.",
3356
+ "const": true
3357
+ }
3358
+ },
3359
+ "required": [
3360
+ "tag",
3361
+ "value"
3362
+ ],
3363
+ "additionalProperties": false
3364
+ },
3365
+ {
3366
+ "type": "object",
3367
+ "properties": {
3368
+ "tag": {
3369
+ "const": "ByLevel"
3298
3370
  },
3299
3371
  "values": {
3300
- "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.",
3301
- "type": "object",
3302
- "properties": {
3303
- "A": {
3304
- "$ref": "#/definitions/AdventurePointsSingleValue"
3305
- },
3306
- "B": {
3307
- "$ref": "#/definitions/AdventurePointsSingleValue"
3308
- },
3309
- "C": {
3310
- "$ref": "#/definitions/AdventurePointsSingleValue"
3311
- },
3312
- "D": {
3313
- "$ref": "#/definitions/AdventurePointsSingleValue"
3314
- }
3372
+ "description": "An entry with levels may have different costs for each level. The length\nof the list must match the amount of levels the special ability has.",
3373
+ "type": "array",
3374
+ "items": {
3375
+ "$ref": "#/definitions/AdventurePointsSingleValue"
3315
3376
  },
3316
- "required": [
3317
- "B",
3318
- "C",
3319
- "D"
3320
- ],
3321
- "additionalProperties": false
3377
+ "minItems": 2
3378
+ },
3379
+ "does_not_contribute_to_maximum": {
3380
+ "description": "The AP Value of the entry does not contribute to the AP maximum for\nadvantages or disadvantages, so it may also be bought if the maximum has\nalready been reached.",
3381
+ "const": true
3322
3382
  }
3323
3383
  },
3324
3384
  "required": [
@@ -3333,6 +3393,10 @@
3333
3393
  "tag": {
3334
3394
  "description": "Used if AP value is defined by the selected option(s) or special rules.",
3335
3395
  "const": "Indefinite"
3396
+ },
3397
+ "does_not_contribute_to_maximum": {
3398
+ "description": "The AP Value of the entry does not contribute to the AP maximum for\nadvantages or disadvantages, so it may also be bought if the maximum has\nalready been reached.",
3399
+ "const": true
3336
3400
  }
3337
3401
  },
3338
3402
  "required": [
@@ -8,7 +8,7 @@
8
8
  "type": "object",
9
9
  "properties": {
10
10
  "tag": {
11
- "const": "Culture"
11
+ "const": "State"
12
12
  },
13
13
  "id": {
14
14
  "$ref": "../../_Identifier.schema.json#/definitions/OneOrManyNumericIdentifiers"
@@ -3,7 +3,7 @@
3
3
  "$id": "/prerequisites/single/TextPrerequisite.schema.json",
4
4
  "definitions": {
5
5
  "TextPrerequisite": {
6
- "title": "Impossible Prerequisite",
6
+ "title": "Text Prerequisite",
7
7
  "description": "A prerequisite that is either not verifyable in general – e.g. roleplay or\nbackground information – or the referenced entities were not made available\nfor use yet – e.g. races –, but which should be displayed, because it is part\nof the prerequisite string from the sources.",
8
8
  "type": "object",
9
9
  "properties": {