optolith-database-schema 0.1.21 → 0.1.22

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.
@@ -0,0 +1,1384 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema",
3
+ "$id": "/Profession.schema.json",
4
+ "$ref": "#/definitions/Profession",
5
+ "definitions": {
6
+ "Profession": {
7
+ "title": "Profession",
8
+ "type": "object",
9
+ "properties": {
10
+ "id": {
11
+ "description": "The profession's identifier. An unique, increasing integer.",
12
+ "type": "integer",
13
+ "minimum": 1
14
+ },
15
+ "representations": {
16
+ "description": "A list of professions representing the same profession but with (slightly)\ndifferent stats. For example, there may be a profession in a regional\nsourcebook or in the core rules and a profession in an extension rulebook\nlike Magic of Aventuria, where the profession is basically called the same\nand almost has the same values, but the version from Magic of Aventuria\nfeatures a spell style special ability that does not exist in the core\nrules or regional sourcebook.\n\nThe profession representation may feature different values for different\nexplicitly mentioned experience levels. In most cases, there is only one\nstats package, which targets the experience level *Experienced*.",
17
+ "type": "array",
18
+ "items": {
19
+ "oneOf": [
20
+ {
21
+ "type": "object",
22
+ "properties": {
23
+ "tag": {
24
+ "const": "Experienced"
25
+ },
26
+ "id": {
27
+ "description": "The profession representation variant's identifier. An unique, increasing\ninteger.",
28
+ "type": "integer",
29
+ "minimum": 1
30
+ },
31
+ "package": {
32
+ "$ref": "#/definitions/ProfessionRepresentationVariant"
33
+ },
34
+ "src": {
35
+ "$ref": "./source/_PublicationRef.schema.json#/definitions/PublicationRefs"
36
+ }
37
+ },
38
+ "required": [
39
+ "tag",
40
+ "id",
41
+ "package",
42
+ "src"
43
+ ],
44
+ "additionalProperties": false
45
+ },
46
+ {
47
+ "type": "object",
48
+ "properties": {
49
+ "tag": {
50
+ "const": "ByExperienceLevel"
51
+ },
52
+ "id": {
53
+ "description": "The profession representation variant's identifier. An unique, increasing\ninteger.",
54
+ "type": "integer",
55
+ "minimum": 1
56
+ },
57
+ "packages": {
58
+ "type": "array",
59
+ "items": {
60
+ "type": "object",
61
+ "properties": {
62
+ "experience_level_id": {
63
+ "description": "The experience level this profession targets. The experience level\nmust be unique for this representation.",
64
+ "type": "integer",
65
+ "maximum": 7,
66
+ "minimum": 1
67
+ },
68
+ "package": {
69
+ "$ref": "#/definitions/ProfessionRepresentationVariant"
70
+ }
71
+ },
72
+ "required": [
73
+ "experience_level_id",
74
+ "package"
75
+ ],
76
+ "additionalProperties": false
77
+ }
78
+ },
79
+ "src": {
80
+ "$ref": "./source/_PublicationRef.schema.json#/definitions/PublicationRefs"
81
+ }
82
+ },
83
+ "required": [
84
+ "tag",
85
+ "id",
86
+ "packages",
87
+ "src"
88
+ ],
89
+ "additionalProperties": false
90
+ }
91
+ ]
92
+ },
93
+ "minItems": 1
94
+ }
95
+ },
96
+ "required": [
97
+ "id",
98
+ "representations"
99
+ ],
100
+ "additionalProperties": false
101
+ },
102
+ "ProfessionRepresentationVariant": {
103
+ "title": "Profession Representation Variant",
104
+ "type": "object",
105
+ "properties": {
106
+ "ap_value": {
107
+ "description": "What does the professional package cost in adventure points?",
108
+ "type": "integer",
109
+ "minimum": 0
110
+ },
111
+ "prerequisites": {
112
+ "description": "Which prerequisites must be met to buy the stat block? For example, a\ncharacter might need the advantage Spellcaster or Blessed. Note: the AP\ncost for a profession package does not include these prerequisites.",
113
+ "$ref": "./_Prerequisite.schema.json#/definitions/ProfessionPrerequisites"
114
+ },
115
+ "options": {
116
+ "type": "object",
117
+ "properties": {
118
+ "skill_specialization": {
119
+ "$ref": "#/definitions/SkillSpecializationOptions"
120
+ },
121
+ "languages_scripts": {
122
+ "$ref": "#/definitions/LanguagesScriptsOptions"
123
+ },
124
+ "combat_techniques": {
125
+ "$ref": "#/definitions/CombatTechniquesOptions"
126
+ },
127
+ "cantrips": {
128
+ "$ref": "#/definitions/CantripsOptions"
129
+ },
130
+ "curses": {
131
+ "$ref": "#/definitions/CursesOptions"
132
+ },
133
+ "terrain_knowledge": {
134
+ "$ref": "#/definitions/TerrainKnowledgeOptions"
135
+ },
136
+ "skills": {
137
+ "$ref": "#/definitions/SkillsOptions"
138
+ }
139
+ },
140
+ "required": [],
141
+ "minProperties": 1,
142
+ "additionalProperties": false
143
+ },
144
+ "special_abilities": {
145
+ "description": "Any special abilities the profession receives from the package.",
146
+ "type": "array",
147
+ "items": {
148
+ "$ref": "#/definitions/SpecialAbility"
149
+ }
150
+ },
151
+ "combat_techniques": {
152
+ "description": "Provides ratings for the combat techniques that the hero receives from the\npackage.",
153
+ "type": "array",
154
+ "items": {
155
+ "$ref": "#/definitions/CombatTechnique"
156
+ }
157
+ },
158
+ "skills": {
159
+ "description": "The skill ratings the package grants to the hero.",
160
+ "type": "array",
161
+ "items": {
162
+ "$ref": "#/definitions/Skill"
163
+ }
164
+ },
165
+ "spells": {
166
+ "description": "The skill ratings a magical profession receives for spells; these spells\nare considered activated. Spells from an unfamiliar Tradition, if any, are\nidentified as such.",
167
+ "type": "array",
168
+ "items": {
169
+ "$ref": "#/definitions/Spell"
170
+ }
171
+ },
172
+ "liturgical_chants": {
173
+ "description": "Clerical professions receive these liturgical chants at the listed skill\nratings. These liturgical chants are considered activated.",
174
+ "type": "array",
175
+ "items": {
176
+ "$ref": "#/definitions/LiturgicalChant"
177
+ }
178
+ },
179
+ "suggested_advantages": {
180
+ "description": "Typical advantages for the profession.",
181
+ "type": "array",
182
+ "items": {
183
+ "$ref": "./_CommonnessRatedAdvantageDisadvantage.schema.json#/definitions/CommonnessRatedAdvantageDisadvantage"
184
+ },
185
+ "minItems": 1
186
+ },
187
+ "suggested_disadvantages": {
188
+ "description": "Typical disadvantages for the profession.",
189
+ "type": "array",
190
+ "items": {
191
+ "$ref": "./_CommonnessRatedAdvantageDisadvantage.schema.json#/definitions/CommonnessRatedAdvantageDisadvantage"
192
+ },
193
+ "minItems": 1
194
+ },
195
+ "unsuitable_advantages": {
196
+ "description": "These advantages do not fit well with this profession; to be checked with\nthe GM before taking any of them.",
197
+ "type": "array",
198
+ "items": {
199
+ "$ref": "./_CommonnessRatedAdvantageDisadvantage.schema.json#/definitions/CommonnessRatedAdvantageDisadvantage"
200
+ },
201
+ "minItems": 1
202
+ },
203
+ "unsuitable_disadvantages": {
204
+ "description": "These disadvantages do not fit well with this profession; to be checked\nwith the GM before taking any of them.",
205
+ "type": "array",
206
+ "items": {
207
+ "$ref": "./_CommonnessRatedAdvantageDisadvantage.schema.json#/definitions/CommonnessRatedAdvantageDisadvantage"
208
+ },
209
+ "minItems": 1
210
+ },
211
+ "variants": {
212
+ "description": "Provides examples of variants for the profession, which may include changes\nto AP values and additional or modified skill ratings, special abilities,\nor combat techniques, as compared to the basic profession. Usually picking\na variant is optional, but there are some rare exceptions where picking a\nvariant is required.",
213
+ "oneOf": [
214
+ {
215
+ "type": "object",
216
+ "properties": {
217
+ "tag": {
218
+ "const": "Required"
219
+ },
220
+ "list": {
221
+ "type": "array",
222
+ "items": {
223
+ "$ref": "#/definitions/ProfessionVariant"
224
+ },
225
+ "minItems": 2
226
+ }
227
+ },
228
+ "required": [
229
+ "tag",
230
+ "list"
231
+ ],
232
+ "additionalProperties": false
233
+ },
234
+ {
235
+ "type": "object",
236
+ "properties": {
237
+ "tag": {
238
+ "const": "Optional"
239
+ },
240
+ "list": {
241
+ "type": "array",
242
+ "items": {
243
+ "$ref": "#/definitions/ProfessionVariant"
244
+ },
245
+ "minItems": 1
246
+ }
247
+ },
248
+ "required": [
249
+ "tag",
250
+ "list"
251
+ ],
252
+ "additionalProperties": false
253
+ }
254
+ ]
255
+ },
256
+ "translations": {
257
+ "description": "All translations for the entry, identified by IETF language tag (BCP47).",
258
+ "type": "object",
259
+ "patternProperties": {
260
+ "^[a-z]{2}-[A-Z]{2}$": {
261
+ "type": "object",
262
+ "properties": {
263
+ "name": {
264
+ "description": "Name of the basic profession.",
265
+ "type": "string",
266
+ "minLength": 1
267
+ },
268
+ "suggested_advantages": {
269
+ "description": "Typical advantages for the profession.",
270
+ "type": "string",
271
+ "minLength": 1
272
+ },
273
+ "suggested_disadvantages": {
274
+ "description": "Typical disadvantages for the profession.",
275
+ "type": "string",
276
+ "minLength": 1
277
+ },
278
+ "unsuitable_advantages": {
279
+ "description": "These advantages do not fit well with this profession; to be checked with\nthe GM before taking any of them.",
280
+ "type": "string",
281
+ "minLength": 1
282
+ },
283
+ "unsuitable_disadvantages": {
284
+ "description": "These disadvantages do not fit well with this profession; to be checked\nwith the GM before taking any of them.",
285
+ "type": "string",
286
+ "minLength": 1
287
+ },
288
+ "errata": {
289
+ "$ref": "./source/_Erratum.schema.json#/definitions/Errata"
290
+ }
291
+ },
292
+ "required": [
293
+ "name"
294
+ ],
295
+ "additionalProperties": false
296
+ }
297
+ },
298
+ "minProperties": 1,
299
+ "additionalProperties": false
300
+ }
301
+ },
302
+ "required": [
303
+ "ap_value",
304
+ "translations"
305
+ ],
306
+ "additionalProperties": false
307
+ },
308
+ "ProfessionVariant": {
309
+ "title": "Profession Variant",
310
+ "type": "object",
311
+ "properties": {
312
+ "id": {
313
+ "description": "The profession variant's identifier. An unique, increasing integer.",
314
+ "type": "integer",
315
+ "minimum": 1
316
+ },
317
+ "ap_value": {
318
+ "description": "The AP value you have to pay for the package variant.",
319
+ "type": "integer"
320
+ },
321
+ "prerequisites": {
322
+ "description": "Which prerequisites must be met to buy the stat block? For example, a\ncharacter might need the advantage Spellcaster or Blessed. Note: the AP\ncost for a profession package does not include these prerequisites.",
323
+ "$ref": "./_Prerequisite.schema.json#/definitions/ProfessionPrerequisites"
324
+ },
325
+ "options": {
326
+ "type": "object",
327
+ "properties": {
328
+ "skill_specialization": {
329
+ "oneOf": [
330
+ {
331
+ "type": "object",
332
+ "properties": {
333
+ "tag": {
334
+ "const": "Remove"
335
+ }
336
+ },
337
+ "required": [
338
+ "tag"
339
+ ],
340
+ "additionalProperties": false
341
+ },
342
+ {
343
+ "type": "object",
344
+ "properties": {
345
+ "tag": {
346
+ "const": "Override"
347
+ },
348
+ "value": {
349
+ "$ref": "#/definitions/SkillSpecializationOptions"
350
+ }
351
+ },
352
+ "required": [
353
+ "tag",
354
+ "value"
355
+ ],
356
+ "additionalProperties": false
357
+ }
358
+ ]
359
+ },
360
+ "languages_scripts": {
361
+ "oneOf": [
362
+ {
363
+ "type": "object",
364
+ "properties": {
365
+ "tag": {
366
+ "const": "Remove"
367
+ }
368
+ },
369
+ "required": [
370
+ "tag"
371
+ ],
372
+ "additionalProperties": false
373
+ },
374
+ {
375
+ "type": "object",
376
+ "properties": {
377
+ "tag": {
378
+ "const": "Override"
379
+ },
380
+ "value": {
381
+ "$ref": "#/definitions/LanguagesScriptsOptions"
382
+ }
383
+ },
384
+ "required": [
385
+ "tag",
386
+ "value"
387
+ ],
388
+ "additionalProperties": false
389
+ }
390
+ ]
391
+ },
392
+ "combat_techniques": {
393
+ "oneOf": [
394
+ {
395
+ "type": "object",
396
+ "properties": {
397
+ "tag": {
398
+ "const": "Remove"
399
+ }
400
+ },
401
+ "required": [
402
+ "tag"
403
+ ],
404
+ "additionalProperties": false
405
+ },
406
+ {
407
+ "type": "object",
408
+ "properties": {
409
+ "tag": {
410
+ "const": "Override"
411
+ },
412
+ "value": {
413
+ "$ref": "#/definitions/CombatTechniquesOptions"
414
+ }
415
+ },
416
+ "required": [
417
+ "tag",
418
+ "value"
419
+ ],
420
+ "additionalProperties": false
421
+ }
422
+ ]
423
+ },
424
+ "cantrips": {
425
+ "oneOf": [
426
+ {
427
+ "type": "object",
428
+ "properties": {
429
+ "tag": {
430
+ "const": "Remove"
431
+ }
432
+ },
433
+ "required": [
434
+ "tag"
435
+ ],
436
+ "additionalProperties": false
437
+ },
438
+ {
439
+ "type": "object",
440
+ "properties": {
441
+ "tag": {
442
+ "const": "Override"
443
+ },
444
+ "value": {
445
+ "$ref": "#/definitions/CantripsOptions"
446
+ }
447
+ },
448
+ "required": [
449
+ "tag",
450
+ "value"
451
+ ],
452
+ "additionalProperties": false
453
+ }
454
+ ]
455
+ },
456
+ "curses": {
457
+ "oneOf": [
458
+ {
459
+ "type": "object",
460
+ "properties": {
461
+ "tag": {
462
+ "const": "Remove"
463
+ }
464
+ },
465
+ "required": [
466
+ "tag"
467
+ ],
468
+ "additionalProperties": false
469
+ },
470
+ {
471
+ "type": "object",
472
+ "properties": {
473
+ "tag": {
474
+ "const": "Override"
475
+ },
476
+ "value": {
477
+ "$ref": "#/definitions/CursesOptions"
478
+ }
479
+ },
480
+ "required": [
481
+ "tag",
482
+ "value"
483
+ ],
484
+ "additionalProperties": false
485
+ }
486
+ ]
487
+ },
488
+ "terrain_knowledge": {
489
+ "oneOf": [
490
+ {
491
+ "type": "object",
492
+ "properties": {
493
+ "tag": {
494
+ "const": "Remove"
495
+ }
496
+ },
497
+ "required": [
498
+ "tag"
499
+ ],
500
+ "additionalProperties": false
501
+ },
502
+ {
503
+ "type": "object",
504
+ "properties": {
505
+ "tag": {
506
+ "const": "Override"
507
+ },
508
+ "value": {
509
+ "$ref": "#/definitions/TerrainKnowledgeOptions"
510
+ }
511
+ },
512
+ "required": [
513
+ "tag",
514
+ "value"
515
+ ],
516
+ "additionalProperties": false
517
+ }
518
+ ]
519
+ },
520
+ "skills": {
521
+ "oneOf": [
522
+ {
523
+ "type": "object",
524
+ "properties": {
525
+ "tag": {
526
+ "const": "Remove"
527
+ }
528
+ },
529
+ "required": [
530
+ "tag"
531
+ ],
532
+ "additionalProperties": false
533
+ },
534
+ {
535
+ "type": "object",
536
+ "properties": {
537
+ "tag": {
538
+ "const": "Override"
539
+ },
540
+ "value": {
541
+ "$ref": "#/definitions/SkillsOptions"
542
+ }
543
+ },
544
+ "required": [
545
+ "tag",
546
+ "value"
547
+ ],
548
+ "additionalProperties": false
549
+ }
550
+ ]
551
+ }
552
+ },
553
+ "required": [],
554
+ "minProperties": 1,
555
+ "additionalProperties": false
556
+ },
557
+ "special_abilities": {
558
+ "description": "Any special abilities the profession receives from the package variant.",
559
+ "type": "array",
560
+ "items": {
561
+ "$ref": "#/definitions/VariantSpecialAbility"
562
+ }
563
+ },
564
+ "combat_techniques": {
565
+ "description": "Provides ratings for the combat techniques that the hero receives from the\npackage variant.",
566
+ "type": "array",
567
+ "items": {
568
+ "$ref": "#/definitions/VariantCombatTechnique"
569
+ }
570
+ },
571
+ "skills": {
572
+ "description": "The skill ratings the package variant grants to the hero.",
573
+ "type": "array",
574
+ "items": {
575
+ "$ref": "#/definitions/VariantSkill"
576
+ }
577
+ },
578
+ "spells": {
579
+ "description": "The skill ratings a magical profession variant receives for spells; these\nspells are considered activated. Spells from an unfamiliar Tradition, if\nany, are identified as such.",
580
+ "type": "array",
581
+ "items": {
582
+ "$ref": "#/definitions/VariantSpell"
583
+ }
584
+ },
585
+ "liturgical_chants": {
586
+ "description": "Clerical professions receive these liturgical chants at the listed skill\nratings. These liturgical chants are considered activated.",
587
+ "type": "array",
588
+ "items": {
589
+ "$ref": "#/definitions/VariantLiturgicalChant"
590
+ }
591
+ },
592
+ "translations": {
593
+ "description": "All translations for the entry, identified by IETF language tag (BCP47).",
594
+ "type": "object",
595
+ "patternProperties": {
596
+ "^[a-z]{2}-[A-Z]{2}$": {
597
+ "type": "object",
598
+ "properties": {
599
+ "name": {
600
+ "description": "Name of the profession variant.",
601
+ "type": "string",
602
+ "minLength": 1
603
+ }
604
+ },
605
+ "required": [
606
+ "name"
607
+ ],
608
+ "additionalProperties": false
609
+ }
610
+ },
611
+ "minProperties": 1,
612
+ "additionalProperties": false
613
+ }
614
+ },
615
+ "required": [
616
+ "id",
617
+ "ap_value",
618
+ "translations"
619
+ ],
620
+ "additionalProperties": false
621
+ },
622
+ "SpecialAbility": {
623
+ "oneOf": [
624
+ {
625
+ "type": "object",
626
+ "properties": {
627
+ "tag": {
628
+ "const": "Fixed"
629
+ },
630
+ "id": {
631
+ "description": "The identifier of the combat technique to provide the rating for.",
632
+ "$ref": "./_Identifier.schema.json#/definitions/SpecialAbilityIdentifier"
633
+ },
634
+ "level": {
635
+ "description": "The level of the received special ability.",
636
+ "type": "integer",
637
+ "minimum": 1
638
+ },
639
+ "options": {
640
+ "description": "Received select options. Order is important. Typically, you only need the\nfirst array index, though.",
641
+ "type": "array",
642
+ "items": {
643
+ "$ref": "./_Identifier.schema.json#/definitions/RequirableSelectOptionIdentifier"
644
+ },
645
+ "minItems": 1
646
+ }
647
+ },
648
+ "required": [
649
+ "tag",
650
+ "id"
651
+ ],
652
+ "additionalProperties": false
653
+ },
654
+ {
655
+ "type": "object",
656
+ "properties": {
657
+ "tag": {
658
+ "const": "Selection"
659
+ },
660
+ "options": {
661
+ "type": "array",
662
+ "items": {
663
+ "type": "object",
664
+ "properties": {
665
+ "id": {
666
+ "description": "The identifier of the combat technique to provide the rating for.",
667
+ "$ref": "./_Identifier.schema.json#/definitions/SpecialAbilityIdentifier"
668
+ },
669
+ "level": {
670
+ "description": "The level of the received special ability.",
671
+ "type": "integer",
672
+ "minimum": 1
673
+ },
674
+ "options": {
675
+ "description": "Received select options. Order is important. Typically, you only need the\nfirst array index, though.",
676
+ "type": "array",
677
+ "items": {
678
+ "$ref": "./_Identifier.schema.json#/definitions/RequirableSelectOptionIdentifier"
679
+ },
680
+ "minItems": 1
681
+ }
682
+ },
683
+ "required": [
684
+ "id"
685
+ ],
686
+ "additionalProperties": false
687
+ },
688
+ "minItems": 2
689
+ }
690
+ },
691
+ "required": [
692
+ "tag",
693
+ "options"
694
+ ],
695
+ "additionalProperties": false
696
+ }
697
+ ]
698
+ },
699
+ "VariantSpecialAbility": {
700
+ "oneOf": [
701
+ {
702
+ "type": "object",
703
+ "properties": {
704
+ "tag": {
705
+ "const": "Fixed"
706
+ },
707
+ "id": {
708
+ "description": "The identifier of the combat technique to provide the rating for.",
709
+ "$ref": "./_Identifier.schema.json#/definitions/SpecialAbilityIdentifier"
710
+ },
711
+ "active": {
712
+ "description": "if set to `false`, if the entry is granted by the basic package, it is\nremoved.",
713
+ "const": false
714
+ },
715
+ "level": {
716
+ "description": "The level of the received special ability.",
717
+ "type": "integer",
718
+ "minimum": 1
719
+ },
720
+ "options": {
721
+ "description": "Received select options. Order is important. Typically, you only need the\nfirst array index, though.",
722
+ "type": "array",
723
+ "items": {
724
+ "$ref": "./_Identifier.schema.json#/definitions/RequirableSelectOptionIdentifier"
725
+ },
726
+ "minItems": 1
727
+ }
728
+ },
729
+ "required": [
730
+ "tag",
731
+ "id"
732
+ ],
733
+ "additionalProperties": false
734
+ },
735
+ {
736
+ "type": "object",
737
+ "properties": {
738
+ "tag": {
739
+ "const": "Selection"
740
+ },
741
+ "active": {
742
+ "description": "if set to `false`, if the selection is granted by the basic package, it\nis removed.",
743
+ "const": false
744
+ },
745
+ "options": {
746
+ "type": "array",
747
+ "items": {
748
+ "type": "object",
749
+ "properties": {
750
+ "id": {
751
+ "description": "The identifier of the combat technique to provide the rating for.",
752
+ "$ref": "./_Identifier.schema.json#/definitions/SpecialAbilityIdentifier"
753
+ },
754
+ "level": {
755
+ "description": "The level of the received special ability.",
756
+ "type": "integer",
757
+ "minimum": 1
758
+ },
759
+ "options": {
760
+ "description": "Received select options. Order is important. Typically, you only need the\nfirst array index, though.",
761
+ "type": "array",
762
+ "items": {
763
+ "$ref": "./_Identifier.schema.json#/definitions/RequirableSelectOptionIdentifier"
764
+ },
765
+ "minItems": 1
766
+ }
767
+ },
768
+ "required": [
769
+ "id"
770
+ ],
771
+ "additionalProperties": false
772
+ },
773
+ "minItems": 2
774
+ }
775
+ },
776
+ "required": [
777
+ "tag",
778
+ "options"
779
+ ],
780
+ "additionalProperties": false
781
+ }
782
+ ]
783
+ },
784
+ "CombatTechnique": {
785
+ "type": "object",
786
+ "properties": {
787
+ "id": {
788
+ "description": "The identifier of the combat technique to provide the rating for.",
789
+ "$ref": "./_Identifier.schema.json#/definitions/CombatTechniqueIdentifier"
790
+ },
791
+ "rating": {
792
+ "description": "The rating provided for the combat technique.",
793
+ "type": "integer",
794
+ "minimum": 7
795
+ }
796
+ },
797
+ "required": [
798
+ "id",
799
+ "rating"
800
+ ],
801
+ "additionalProperties": false
802
+ },
803
+ "VariantCombatTechnique": {
804
+ "type": "object",
805
+ "properties": {
806
+ "id": {
807
+ "description": "The identifier of the combat technique to provide the rating for.",
808
+ "$ref": "./_Identifier.schema.json#/definitions/CombatTechniqueIdentifier"
809
+ },
810
+ "rating": {
811
+ "description": "The rating provided for the combat technique. It overrides the basic\npackage's rating.",
812
+ "type": "integer",
813
+ "minimum": 6
814
+ }
815
+ },
816
+ "required": [
817
+ "id",
818
+ "rating"
819
+ ],
820
+ "additionalProperties": false
821
+ },
822
+ "Skill": {
823
+ "type": "object",
824
+ "properties": {
825
+ "id": {
826
+ "description": "The identifier of the skill to provide the rating for.",
827
+ "type": "integer",
828
+ "maximum": 59,
829
+ "minimum": 1
830
+ },
831
+ "rating": {
832
+ "description": "The rating provided for the skill.",
833
+ "type": "integer",
834
+ "minimum": 1
835
+ }
836
+ },
837
+ "required": [
838
+ "id",
839
+ "rating"
840
+ ],
841
+ "additionalProperties": false
842
+ },
843
+ "VariantSkill": {
844
+ "type": "object",
845
+ "properties": {
846
+ "id": {
847
+ "description": "The identifier of the skill to provide the rating for.",
848
+ "type": "integer",
849
+ "maximum": 59,
850
+ "minimum": 1
851
+ },
852
+ "rating": {
853
+ "description": "The rating provided for the skill. It overrides the basic package's rating.",
854
+ "type": "integer",
855
+ "minimum": 0
856
+ }
857
+ },
858
+ "required": [
859
+ "id",
860
+ "rating"
861
+ ],
862
+ "additionalProperties": false
863
+ },
864
+ "Spell": {
865
+ "oneOf": [
866
+ {
867
+ "type": "object",
868
+ "properties": {
869
+ "tag": {
870
+ "const": "Fixed"
871
+ },
872
+ "id": {
873
+ "description": "The identifier of the spell to provide the rating for.",
874
+ "$ref": "#/definitions/SpellIdentifier"
875
+ },
876
+ "rating": {
877
+ "description": "The rating provided for the spell.",
878
+ "type": "integer",
879
+ "minimum": 1
880
+ }
881
+ },
882
+ "required": [
883
+ "tag",
884
+ "id",
885
+ "rating"
886
+ ],
887
+ "additionalProperties": false
888
+ },
889
+ {
890
+ "type": "object",
891
+ "properties": {
892
+ "tag": {
893
+ "const": "Selection"
894
+ },
895
+ "id": {
896
+ "description": "The identifiers of the spells to choose from to provide the rating for.",
897
+ "type": "array",
898
+ "items": {
899
+ "$ref": "#/definitions/SpellIdentifier"
900
+ },
901
+ "minItems": 2
902
+ },
903
+ "rating": {
904
+ "description": "The rating provided for the selected spell.",
905
+ "type": "integer",
906
+ "minimum": 1
907
+ }
908
+ },
909
+ "required": [
910
+ "tag",
911
+ "id",
912
+ "rating"
913
+ ],
914
+ "additionalProperties": false
915
+ }
916
+ ]
917
+ },
918
+ "VariantSpell": {
919
+ "oneOf": [
920
+ {
921
+ "type": "object",
922
+ "properties": {
923
+ "tag": {
924
+ "const": "Fixed"
925
+ },
926
+ "id": {
927
+ "description": "The identifier of the spell to provide the rating for.",
928
+ "$ref": "#/definitions/SpellIdentifier"
929
+ },
930
+ "rating": {
931
+ "description": "The rating provided for the spell. It overrides the basic package's\nrating.",
932
+ "type": "integer",
933
+ "minimum": 0
934
+ }
935
+ },
936
+ "required": [
937
+ "tag",
938
+ "id",
939
+ "rating"
940
+ ],
941
+ "additionalProperties": false
942
+ },
943
+ {
944
+ "type": "object",
945
+ "properties": {
946
+ "tag": {
947
+ "const": "Selection"
948
+ },
949
+ "id": {
950
+ "description": "The identifiers of the spells to choose from to provide the rating for.",
951
+ "type": "array",
952
+ "items": {
953
+ "$ref": "#/definitions/SpellIdentifier"
954
+ },
955
+ "minItems": 2
956
+ },
957
+ "rating": {
958
+ "description": "The rating provided for the selected spell. It overrides the basic\npackage's rating.",
959
+ "type": "integer",
960
+ "minimum": 0
961
+ }
962
+ },
963
+ "required": [
964
+ "tag",
965
+ "id",
966
+ "rating"
967
+ ],
968
+ "additionalProperties": false
969
+ }
970
+ ]
971
+ },
972
+ "SpellIdentifier": {
973
+ "oneOf": [
974
+ {
975
+ "type": "object",
976
+ "properties": {
977
+ "tag": {
978
+ "const": "Spellwork"
979
+ },
980
+ "id": {
981
+ "description": "The identifier of the spell to provide the rating for.",
982
+ "$ref": "./_Identifier.schema.json#/definitions/SpellworkIdentifier"
983
+ },
984
+ "tradition": {
985
+ "description": "If the spell is not part of the magical tradition required by the\npackage, this references the magical tradition it is part of. It can also\nbe used to define the target magical tradition of a spell if multiple\nmagical traditions are required and the spell is available to multiple\nof them.",
986
+ "type": "object",
987
+ "properties": {
988
+ "id": {
989
+ "description": "The unfamiliar or ambiguous magical tradition's identifier.",
990
+ "type": "number"
991
+ }
992
+ },
993
+ "required": [
994
+ "id"
995
+ ],
996
+ "additionalProperties": false
997
+ }
998
+ },
999
+ "required": [
1000
+ "tag",
1001
+ "id"
1002
+ ],
1003
+ "additionalProperties": false
1004
+ },
1005
+ {
1006
+ "type": "object",
1007
+ "properties": {
1008
+ "tag": {
1009
+ "const": "MagicalAction"
1010
+ },
1011
+ "id": {
1012
+ "description": "The identifier of the magical action to provide the rating for.",
1013
+ "$ref": "./_Identifier.schema.json#/definitions/MagicalActionIdentifier"
1014
+ }
1015
+ },
1016
+ "required": [
1017
+ "tag",
1018
+ "id"
1019
+ ],
1020
+ "additionalProperties": false
1021
+ }
1022
+ ]
1023
+ },
1024
+ "LiturgicalChant": {
1025
+ "oneOf": [
1026
+ {
1027
+ "type": "object",
1028
+ "properties": {
1029
+ "tag": {
1030
+ "const": "Fixed"
1031
+ },
1032
+ "id": {
1033
+ "description": "The identifier of the liturgical chant to provide the rating for.",
1034
+ "$ref": "./_Identifier.schema.json#/definitions/LiturgyIdentifier"
1035
+ },
1036
+ "rating": {
1037
+ "description": "The rating provided for the liturgical chant.",
1038
+ "type": "integer",
1039
+ "minimum": 1
1040
+ }
1041
+ },
1042
+ "required": [
1043
+ "tag",
1044
+ "id",
1045
+ "rating"
1046
+ ],
1047
+ "additionalProperties": false
1048
+ },
1049
+ {
1050
+ "type": "object",
1051
+ "properties": {
1052
+ "tag": {
1053
+ "const": "Selection"
1054
+ },
1055
+ "id": {
1056
+ "description": "The identifiers of the liturgical chants to choose from to provide the\nrating for.",
1057
+ "type": "array",
1058
+ "items": {
1059
+ "$ref": "./_Identifier.schema.json#/definitions/LiturgyIdentifier"
1060
+ },
1061
+ "minItems": 2
1062
+ },
1063
+ "rating": {
1064
+ "description": "The rating provided for the selected liturgical chant.",
1065
+ "type": "integer",
1066
+ "minimum": 1
1067
+ }
1068
+ },
1069
+ "required": [
1070
+ "tag",
1071
+ "id",
1072
+ "rating"
1073
+ ],
1074
+ "additionalProperties": false
1075
+ }
1076
+ ]
1077
+ },
1078
+ "VariantLiturgicalChant": {
1079
+ "oneOf": [
1080
+ {
1081
+ "type": "object",
1082
+ "properties": {
1083
+ "tag": {
1084
+ "const": "Fixed"
1085
+ },
1086
+ "id": {
1087
+ "description": "The identifier of the liturgical chant to provide the rating for.",
1088
+ "$ref": "./_Identifier.schema.json#/definitions/LiturgyIdentifier"
1089
+ },
1090
+ "rating": {
1091
+ "description": "The rating provided for the liturgical chant. It overrides the basic\npackage's rating.",
1092
+ "type": "integer",
1093
+ "minimum": 0
1094
+ }
1095
+ },
1096
+ "required": [
1097
+ "tag",
1098
+ "id",
1099
+ "rating"
1100
+ ],
1101
+ "additionalProperties": false
1102
+ },
1103
+ {
1104
+ "type": "object",
1105
+ "properties": {
1106
+ "tag": {
1107
+ "const": "Selection"
1108
+ },
1109
+ "id": {
1110
+ "description": "The identifiers of the liturgical chants to choose from to provide the\nrating for.",
1111
+ "type": "array",
1112
+ "items": {
1113
+ "$ref": "./_Identifier.schema.json#/definitions/LiturgyIdentifier"
1114
+ },
1115
+ "minItems": 2
1116
+ },
1117
+ "rating": {
1118
+ "description": "The rating provided for the selected liturgical chant. It overrides the\nbasic package's rating.",
1119
+ "type": "integer",
1120
+ "minimum": 0
1121
+ }
1122
+ },
1123
+ "required": [
1124
+ "tag",
1125
+ "id",
1126
+ "rating"
1127
+ ],
1128
+ "additionalProperties": false
1129
+ }
1130
+ ]
1131
+ },
1132
+ "SkillSpecializationOptions": {
1133
+ "description": "Select an application from a skill or from one of a list of skills where you\nget a skill specialization for. You can also specify a skill groups from\nwhich you can choose a skill.",
1134
+ "oneOf": [
1135
+ {
1136
+ "type": "object",
1137
+ "properties": {
1138
+ "tag": {
1139
+ "const": "Single"
1140
+ },
1141
+ "id": {
1142
+ "description": "The referenced skill's identifier.",
1143
+ "type": "integer",
1144
+ "minimum": 1
1145
+ }
1146
+ },
1147
+ "required": [
1148
+ "tag",
1149
+ "id"
1150
+ ],
1151
+ "additionalProperties": false
1152
+ },
1153
+ {
1154
+ "type": "object",
1155
+ "properties": {
1156
+ "tag": {
1157
+ "const": "Selection"
1158
+ },
1159
+ "options": {
1160
+ "description": "Possible skills to get a skill specialization for.",
1161
+ "type": "array",
1162
+ "items": {
1163
+ "type": "object",
1164
+ "properties": {
1165
+ "id": {
1166
+ "description": "The referenced skill's identifier.",
1167
+ "type": "integer",
1168
+ "minimum": 1
1169
+ }
1170
+ },
1171
+ "required": [
1172
+ "id"
1173
+ ],
1174
+ "additionalProperties": false
1175
+ },
1176
+ "minItems": 2
1177
+ }
1178
+ },
1179
+ "required": [
1180
+ "tag",
1181
+ "options"
1182
+ ],
1183
+ "additionalProperties": false
1184
+ },
1185
+ {
1186
+ "type": "object",
1187
+ "properties": {
1188
+ "tag": {
1189
+ "const": "Group"
1190
+ },
1191
+ "id": {
1192
+ "description": "The referenced skill group's identifier.",
1193
+ "type": "integer",
1194
+ "maximum": 5,
1195
+ "minimum": 1
1196
+ }
1197
+ },
1198
+ "required": [
1199
+ "tag",
1200
+ "id"
1201
+ ],
1202
+ "additionalProperties": false
1203
+ }
1204
+ ]
1205
+ },
1206
+ "LanguagesScriptsOptions": {
1207
+ "description": "Buy languages and scripts for a specific amount of AP.",
1208
+ "type": "object",
1209
+ "properties": {
1210
+ "ap_value": {
1211
+ "description": "The AP value you can buy languages and scripts for.",
1212
+ "type": "integer",
1213
+ "minimum": 2,
1214
+ "multipleOf": 2
1215
+ }
1216
+ },
1217
+ "required": [
1218
+ "ap_value"
1219
+ ],
1220
+ "additionalProperties": false
1221
+ },
1222
+ "CombatTechniquesOptions": {
1223
+ "description": "Select one or more combat techniques you get a CtR bonus for.",
1224
+ "type": "object",
1225
+ "properties": {
1226
+ "fixed": {
1227
+ "description": "Specify the number of combat techniques that can be selected so that they\nget increased to a specific CtR. There can be multiple selections with\ndifferent CtRs.",
1228
+ "type": "array",
1229
+ "items": {
1230
+ "type": "object",
1231
+ "properties": {
1232
+ "number": {
1233
+ "description": "The number of selectable combat techniques.",
1234
+ "type": "integer",
1235
+ "minimum": 1
1236
+ },
1237
+ "rating": {
1238
+ "description": "The rating provided for the selected combat technique(s).",
1239
+ "type": "integer",
1240
+ "minimum": 7
1241
+ }
1242
+ },
1243
+ "required": [
1244
+ "number",
1245
+ "rating"
1246
+ ],
1247
+ "additionalProperties": false
1248
+ },
1249
+ "minItems": 1
1250
+ },
1251
+ "rest_rating": {
1252
+ "description": "Define if after the fixed selections the remaining unselected combat\ntechniques will receive a certain rating as well.",
1253
+ "type": "integer",
1254
+ "minimum": 7
1255
+ },
1256
+ "options": {
1257
+ "description": "The list of combat techniques to choose from.",
1258
+ "type": "array",
1259
+ "items": {
1260
+ "type": "object",
1261
+ "properties": {
1262
+ "id": {
1263
+ "description": "The combat technique's identifier.",
1264
+ "$ref": "./_Identifier.schema.json#/definitions/CombatTechniqueIdentifier"
1265
+ }
1266
+ },
1267
+ "required": [
1268
+ "id"
1269
+ ],
1270
+ "additionalProperties": false
1271
+ },
1272
+ "minItems": 2
1273
+ }
1274
+ },
1275
+ "required": [
1276
+ "fixed",
1277
+ "options"
1278
+ ],
1279
+ "additionalProperties": false
1280
+ },
1281
+ "CantripsOptions": {
1282
+ "description": "Select one or more cantrips you receive.",
1283
+ "type": "object",
1284
+ "properties": {
1285
+ "number": {
1286
+ "description": "The number of selectable cantrips.",
1287
+ "type": "integer",
1288
+ "minimum": 1
1289
+ },
1290
+ "options": {
1291
+ "description": "The list of cantrips to choose from.",
1292
+ "type": "array",
1293
+ "items": {
1294
+ "type": "object",
1295
+ "properties": {
1296
+ "id": {
1297
+ "description": "The cantrip's identifier.",
1298
+ "type": "integer",
1299
+ "minimum": 1
1300
+ }
1301
+ },
1302
+ "required": [
1303
+ "id"
1304
+ ],
1305
+ "additionalProperties": false
1306
+ },
1307
+ "minItems": 2
1308
+ }
1309
+ },
1310
+ "required": [
1311
+ "number",
1312
+ "options"
1313
+ ],
1314
+ "additionalProperties": false
1315
+ },
1316
+ "CursesOptions": {
1317
+ "description": "Buy curses for a specific amount of AP.",
1318
+ "type": "object",
1319
+ "properties": {
1320
+ "ap_value": {
1321
+ "description": "The AP value you can buy curses for.",
1322
+ "type": "integer",
1323
+ "minimum": 2,
1324
+ "multipleOf": 2
1325
+ }
1326
+ },
1327
+ "required": [
1328
+ "ap_value"
1329
+ ],
1330
+ "additionalProperties": false
1331
+ },
1332
+ "TerrainKnowledgeOptions": {
1333
+ "description": "Select one of a list of possible terrain knowledges",
1334
+ "type": "object",
1335
+ "properties": {
1336
+ "options": {
1337
+ "description": "The list of possible terrain knowledges.",
1338
+ "type": "array",
1339
+ "items": {
1340
+ "type": "object",
1341
+ "properties": {
1342
+ "id": {
1343
+ "description": "The terrain knowledge option's identifier.",
1344
+ "type": "integer",
1345
+ "maximum": 10,
1346
+ "minimum": 1
1347
+ }
1348
+ },
1349
+ "required": [
1350
+ "id"
1351
+ ],
1352
+ "additionalProperties": false
1353
+ },
1354
+ "minItems": 2
1355
+ }
1356
+ },
1357
+ "required": [
1358
+ "options"
1359
+ ],
1360
+ "additionalProperties": false
1361
+ },
1362
+ "SkillsOptions": {
1363
+ "description": "Buy skills for a specific amount of AP.",
1364
+ "type": "object",
1365
+ "properties": {
1366
+ "group_id": {
1367
+ "description": "If specified, you may only choose from skills of the specified group.",
1368
+ "type": "integer",
1369
+ "maximum": 1,
1370
+ "minimum": 1
1371
+ },
1372
+ "ap_value": {
1373
+ "description": "The AP value you can buy skills for.",
1374
+ "type": "integer",
1375
+ "minimum": 1
1376
+ }
1377
+ },
1378
+ "required": [
1379
+ "ap_value"
1380
+ ],
1381
+ "additionalProperties": false
1382
+ }
1383
+ }
1384
+ }