optolith-database-schema 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/AUTHORS +1 -0
  2. package/CHANGELOG.md +27 -0
  3. package/CODEOWNERS +1 -0
  4. package/LICENSE +378 -0
  5. package/README.md +17 -0
  6. package/lib/main.d.ts +1 -0
  7. package/lib/main.js +1 -0
  8. package/lib/types/ArcaneBardTradition.d.ts +32 -0
  9. package/lib/types/ArcaneBardTradition.js +4 -0
  10. package/lib/types/ArcaneDancerTradition.d.ts +32 -0
  11. package/lib/types/ArcaneDancerTradition.js +4 -0
  12. package/lib/types/Aspect.d.ts +36 -0
  13. package/lib/types/Aspect.js +4 -0
  14. package/lib/types/Attribute.d.ts +42 -0
  15. package/lib/types/Attribute.js +5 -0
  16. package/lib/types/CombatTechnique_Close.d.ts +80 -0
  17. package/lib/types/CombatTechnique_Close.js +4 -0
  18. package/lib/types/CombatTechnique_Ranged.d.ts +62 -0
  19. package/lib/types/CombatTechnique_Ranged.js +4 -0
  20. package/lib/types/Condition.d.ts +51 -0
  21. package/lib/types/Condition.js +4 -0
  22. package/lib/types/Culture.d.ts +494 -0
  23. package/lib/types/Culture.js +4 -0
  24. package/lib/types/DerivedCharacteristic.d.ts +65 -0
  25. package/lib/types/DerivedCharacteristic.js +4 -0
  26. package/lib/types/Element.d.ts +30 -0
  27. package/lib/types/Element.js +4 -0
  28. package/lib/types/ExperienceLevel.d.ts +68 -0
  29. package/lib/types/ExperienceLevel.js +4 -0
  30. package/lib/types/EyeColor.d.ts +30 -0
  31. package/lib/types/EyeColor.js +4 -0
  32. package/lib/types/HairColor.d.ts +30 -0
  33. package/lib/types/HairColor.js +4 -0
  34. package/lib/types/Lessons_Curriculum.d.ts +297 -0
  35. package/lib/types/Lessons_Curriculum.js +4 -0
  36. package/lib/types/Lessons_Guideline.d.ts +36 -0
  37. package/lib/types/Lessons_Guideline.js +4 -0
  38. package/lib/types/Locale.d.ts +38 -0
  39. package/lib/types/Locale.js +4 -0
  40. package/lib/types/MetaCondition.d.ts +54 -0
  41. package/lib/types/MetaCondition.js +4 -0
  42. package/lib/types/Property.d.ts +36 -0
  43. package/lib/types/Property.js +4 -0
  44. package/lib/types/Race.d.ts +524 -0
  45. package/lib/types/Race.js +13 -0
  46. package/lib/types/Region.d.ts +30 -0
  47. package/lib/types/Region.js +4 -0
  48. package/lib/types/Service.d.ts +40 -0
  49. package/lib/types/Service.js +4 -0
  50. package/lib/types/SexPractice.d.ts +53 -0
  51. package/lib/types/SexPractice.js +4 -0
  52. package/lib/types/Skill.d.ts +169 -0
  53. package/lib/types/Skill.js +4 -0
  54. package/lib/types/SkillGroup.d.ts +40 -0
  55. package/lib/types/SkillGroup.js +4 -0
  56. package/lib/types/SkillModificationIncrement.d.ts +82 -0
  57. package/lib/types/SkillModificationIncrement.js +4 -0
  58. package/lib/types/SocialStatus.d.ts +30 -0
  59. package/lib/types/SocialStatus.js +4 -0
  60. package/lib/types/State.d.ts +40 -0
  61. package/lib/types/State.js +4 -0
  62. package/lib/types/TargetCategory.d.ts +36 -0
  63. package/lib/types/TargetCategory.js +4 -0
  64. package/lib/types/_ActivatableSkill.d.ts +919 -0
  65. package/lib/types/_ActivatableSkill.js +38 -0
  66. package/lib/types/_CommonnessRatedAdvantageDisadvantage.d.ts +12 -0
  67. package/lib/types/_CommonnessRatedAdvantageDisadvantage.js +1 -0
  68. package/lib/types/_ImprovementCost.d.ts +9 -0
  69. package/lib/types/_ImprovementCost.js +10 -0
  70. package/lib/types/_Prerequisite.d.ts +274 -0
  71. package/lib/types/_Prerequisite.js +4 -0
  72. package/lib/types/_Sex.d.ts +11 -0
  73. package/lib/types/_Sex.js +4 -0
  74. package/lib/types/_SkillCheck.d.ts +28 -0
  75. package/lib/types/_SkillCheck.js +1 -0
  76. package/lib/types/magicalActions/AnimistPower.d.ts +227 -0
  77. package/lib/types/magicalActions/AnimistPower.js +4 -0
  78. package/lib/types/magicalActions/AnimistPower_Tribe.d.ts +30 -0
  79. package/lib/types/magicalActions/AnimistPower_Tribe.js +4 -0
  80. package/lib/types/magicalActions/Curse.d.ts +228 -0
  81. package/lib/types/magicalActions/Curse.js +4 -0
  82. package/lib/types/magicalActions/DominationRitual.d.ts +181 -0
  83. package/lib/types/magicalActions/DominationRitual.js +4 -0
  84. package/lib/types/magicalActions/ElvenMagicalSong.d.ts +149 -0
  85. package/lib/types/magicalActions/ElvenMagicalSong.js +4 -0
  86. package/lib/types/magicalActions/GeodeRitual.d.ts +162 -0
  87. package/lib/types/magicalActions/GeodeRitual.js +4 -0
  88. package/lib/types/magicalActions/JesterTrick.d.ts +167 -0
  89. package/lib/types/magicalActions/JesterTrick.js +4 -0
  90. package/lib/types/magicalActions/MagicalDance.d.ts +184 -0
  91. package/lib/types/magicalActions/MagicalDance.js +4 -0
  92. package/lib/types/magicalActions/MagicalMelody.d.ts +132 -0
  93. package/lib/types/magicalActions/MagicalMelody.js +4 -0
  94. package/lib/types/magicalActions/MagicalRune.d.ts +241 -0
  95. package/lib/types/magicalActions/MagicalRune.js +4 -0
  96. package/lib/types/magicalActions/ZibiljaRitual.d.ts +101 -0
  97. package/lib/types/magicalActions/ZibiljaRitual.js +4 -0
  98. package/lib/types/magicalActions/_MusicTradition.d.ts +28 -0
  99. package/lib/types/magicalActions/_MusicTradition.js +1 -0
  100. package/lib/types/magicalActions/_SkillReference.d.ts +13 -0
  101. package/lib/types/magicalActions/_SkillReference.js +5 -0
  102. package/lib/types/rule/FocusRule.d.ts +53 -0
  103. package/lib/types/rule/FocusRule.js +4 -0
  104. package/lib/types/rule/FocusRule_Subject.d.ts +31 -0
  105. package/lib/types/rule/FocusRule_Subject.js +4 -0
  106. package/lib/types/rule/OptionalRule.d.ts +65 -0
  107. package/lib/types/rule/OptionalRule.js +4 -0
  108. package/lib/types/source/Publication.d.ts +4 -0
  109. package/lib/types/source/Publication.js +4 -0
  110. package/lib/types/source/_Erratum.d.ts +25 -0
  111. package/lib/types/source/_Erratum.js +4 -0
  112. package/lib/types/source/_PublicationRef.d.ts +146 -0
  113. package/lib/types/source/_PublicationRef.js +4 -0
  114. package/lib/validation/integrity.d.ts +16 -0
  115. package/lib/validation/integrity.js +3 -0
  116. package/package.json +37 -0
  117. package/schema/ArcaneBardTradition.schema.json +49 -0
  118. package/schema/ArcaneDancerTradition.schema.json +49 -0
  119. package/schema/Aspect.schema.json +50 -0
  120. package/schema/Attribute.schema.json +57 -0
  121. package/schema/CombatTechnique_Close.schema.json +127 -0
  122. package/schema/CombatTechnique_Ranged.schema.json +83 -0
  123. package/schema/Condition.schema.json +84 -0
  124. package/schema/Culture.schema.json +858 -0
  125. package/schema/DerivedCharacteristic.schema.json +90 -0
  126. package/schema/Element.schema.json +45 -0
  127. package/schema/ExperienceLevel.schema.json +84 -0
  128. package/schema/EyeColor.schema.json +45 -0
  129. package/schema/HairColor.schema.json +45 -0
  130. package/schema/Lessons_Curriculum.schema.json +500 -0
  131. package/schema/Lessons_Guideline.schema.json +51 -0
  132. package/schema/Locale.schema.json +45 -0
  133. package/schema/MetaCondition.schema.json +85 -0
  134. package/schema/Property.schema.json +49 -0
  135. package/schema/Race.schema.json +724 -0
  136. package/schema/Region.schema.json +45 -0
  137. package/schema/Service.schema.json +58 -0
  138. package/schema/SexPractice.schema.json +72 -0
  139. package/schema/Skill.schema.json +278 -0
  140. package/schema/SkillGroup.schema.json +56 -0
  141. package/schema/SkillModificationIncrement.schema.json +98 -0
  142. package/schema/SocialStatus.schema.json +45 -0
  143. package/schema/State.schema.json +58 -0
  144. package/schema/TargetCategory.schema.json +51 -0
  145. package/schema/_ActivatableSkill.schema.json +1534 -0
  146. package/schema/_CommonnessRatedAdvantageDisadvantage.schema.json +22 -0
  147. package/schema/_ImprovementCost.schema.json +15 -0
  148. package/schema/_Prerequisite.schema.json +519 -0
  149. package/schema/_Sex.schema.json +36 -0
  150. package/schema/_SkillCheck.schema.json +94 -0
  151. package/schema/magicalActions/AnimistPower.schema.json +411 -0
  152. package/schema/magicalActions/AnimistPower_Tribe.schema.json +45 -0
  153. package/schema/magicalActions/Curse.schema.json +378 -0
  154. package/schema/magicalActions/DominationRitual.schema.json +288 -0
  155. package/schema/magicalActions/ElvenMagicalSong.schema.json +194 -0
  156. package/schema/magicalActions/GeodeRitual.schema.json +303 -0
  157. package/schema/magicalActions/JesterTrick.schema.json +292 -0
  158. package/schema/magicalActions/MagicalDance.schema.json +328 -0
  159. package/schema/magicalActions/MagicalMelody.schema.json +254 -0
  160. package/schema/magicalActions/MagicalRune.schema.json +426 -0
  161. package/schema/magicalActions/ZibiljaRitual.schema.json +159 -0
  162. package/schema/magicalActions/_MusicTradition.schema.json +44 -0
  163. package/schema/magicalActions/_SkillReference.schema.json +26 -0
  164. package/schema/rule/FocusRule.schema.json +71 -0
  165. package/schema/rule/FocusRule_Subject.schema.json +46 -0
  166. package/schema/rule/OptionalRule.schema.json +96 -0
  167. package/schema/source/Publication.schema.json +165 -0
  168. package/schema/source/_Erratum.schema.json +37 -0
  169. package/schema/source/_PublicationRef.schema.json +242 -0
@@ -0,0 +1,724 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema",
3
+ "$id": "Race.schema.json",
4
+ "$ref": "#/definitions/Race",
5
+ "definitions": {
6
+ "Race": {
7
+ "title": "Race",
8
+ "description": "A playable race with stats and skills.",
9
+ "type": "object",
10
+ "properties": {
11
+ "id": {
12
+ "description": "The race's identifier. An unique, increasing integer.",
13
+ "type": "integer",
14
+ "minimum": 1
15
+ },
16
+ "ap_value": {
17
+ "description": "How many Adventure Points does the race cost during character creation?",
18
+ "type": "integer",
19
+ "minimum": 0
20
+ },
21
+ "base_values": {
22
+ "description": "The race’s base values.",
23
+ "$ref": "#/definitions/BaseValues"
24
+ },
25
+ "attribute_adjustments": {
26
+ "description": "Describes how to raise or lower maximum attribute values during character\ncreation.",
27
+ "$ref": "#/definitions/AttributeAdjustments/Config"
28
+ },
29
+ "automatic_advantages": {
30
+ "description": "A list of automatically applied advantages. This does only work for\nadvantages with no further configuration such as level or special\nselection.",
31
+ "type": "array",
32
+ "items": {
33
+ "$ref": "#/definitions/AutomaticAdvantage"
34
+ },
35
+ "minItems": 1
36
+ },
37
+ "strongly_recommended_advantages": {
38
+ "description": "A list of strongly recommended advantages.",
39
+ "type": "array",
40
+ "items": {
41
+ "$ref": "./_CommonnessRatedAdvantageDisadvantage.schema.json#/definitions/CommonnessRatedAdvantageDisadvantage"
42
+ },
43
+ "minItems": 1
44
+ },
45
+ "strongly_recommended_disadvantages": {
46
+ "description": "A list of strongly recommended disadvantages.",
47
+ "type": "array",
48
+ "items": {
49
+ "$ref": "./_CommonnessRatedAdvantageDisadvantage.schema.json#/definitions/CommonnessRatedAdvantageDisadvantage"
50
+ },
51
+ "minItems": 1
52
+ },
53
+ "common_advantages": {
54
+ "description": "A list of common advantages. If common advantages are defined by race\nvariants, leave this field empty. It is overridden by the same field in\nrace variants.",
55
+ "type": "array",
56
+ "items": {
57
+ "$ref": "./_CommonnessRatedAdvantageDisadvantage.schema.json#/definitions/CommonnessRatedAdvantageDisadvantage"
58
+ },
59
+ "minItems": 1
60
+ },
61
+ "common_disadvantages": {
62
+ "description": "A list of common disadvantages. If common disadvantages are defined by race\nvariants, leave this field empty. It is overridden by the same field in\nrace variants.",
63
+ "type": "array",
64
+ "items": {
65
+ "$ref": "./_CommonnessRatedAdvantageDisadvantage.schema.json#/definitions/CommonnessRatedAdvantageDisadvantage"
66
+ },
67
+ "minItems": 1
68
+ },
69
+ "uncommon_advantages": {
70
+ "description": "A list of uncommon advantages. If uncommon advantages are defined by race\nvariants, leave this field empty. It is overridden by the same field in\nrace variants.",
71
+ "type": "array",
72
+ "items": {
73
+ "$ref": "./_CommonnessRatedAdvantageDisadvantage.schema.json#/definitions/CommonnessRatedAdvantageDisadvantage"
74
+ },
75
+ "minItems": 1
76
+ },
77
+ "uncommon_disadvantages": {
78
+ "description": "A list of uncommon disadvantages. If uncommon disadvantages are defined by\nrace variants, leave this field empty. It is overridden by the same field\nin race variants.",
79
+ "type": "array",
80
+ "items": {
81
+ "$ref": "./_CommonnessRatedAdvantageDisadvantage.schema.json#/definitions/CommonnessRatedAdvantageDisadvantage"
82
+ },
83
+ "minItems": 1
84
+ },
85
+ "weight": {
86
+ "description": "Configuration for random weight generation.",
87
+ "$ref": "#/definitions/Weight/Config"
88
+ },
89
+ "starting_age": {
90
+ "description": "Defines the starting ages for the race. It depends on the selected\nexperience level.",
91
+ "type": "array",
92
+ "items": {
93
+ "$ref": "#/definitions/StartingAgeConfigForExperienceLevel"
94
+ },
95
+ "minItems": 7,
96
+ "maxItems": 7
97
+ },
98
+ "variant_dependent": {
99
+ "description": "The race may have variants and associated configuration for each variant.\nIf the race is plain (has no variants), the values that would otherwise be\ndefined in the variant configuration need to be set for the whole race.\nThis excludes common and uncommon advantages and disadvantages, since they\nmay be defined for the whole race even if variants exist.",
100
+ "$ref": "#/definitions/VariantDependent"
101
+ },
102
+ "src": {
103
+ "$ref": "./source/_PublicationRef.schema.json#/definitions/PublicationRefs"
104
+ },
105
+ "translations": {
106
+ "description": "All translations for the entry, identified by IETF language tag (BCP47).",
107
+ "type": "object",
108
+ "patternProperties": {
109
+ "^[a-z]{2}-[A-Z]{2}$": {
110
+ "$ref": "#/definitions/RaceTranslation"
111
+ }
112
+ },
113
+ "minProperties": 1,
114
+ "additionalProperties": false
115
+ }
116
+ },
117
+ "required": [
118
+ "id",
119
+ "ap_value",
120
+ "base_values",
121
+ "attribute_adjustments",
122
+ "weight",
123
+ "starting_age",
124
+ "variant_dependent",
125
+ "src",
126
+ "translations"
127
+ ],
128
+ "additionalProperties": false
129
+ },
130
+ "BaseValues": {
131
+ "description": "The race’s base values.",
132
+ "type": "object",
133
+ "properties": {
134
+ "life_points": {
135
+ "description": "The race’s life point base value.",
136
+ "type": "integer"
137
+ },
138
+ "spirit": {
139
+ "description": "The race’s Spirit base value.",
140
+ "type": "integer"
141
+ },
142
+ "toughness": {
143
+ "description": "The race’s Toughness base value.",
144
+ "type": "integer"
145
+ },
146
+ "movement": {
147
+ "description": "The race’s tactical movement rate.",
148
+ "type": "integer",
149
+ "minimum": 1
150
+ }
151
+ },
152
+ "required": [
153
+ "life_points",
154
+ "spirit",
155
+ "toughness",
156
+ "movement"
157
+ ],
158
+ "additionalProperties": false
159
+ },
160
+ "AttributeAdjustments": {
161
+ "Config": {
162
+ "description": "Describes how to raise or lower maximum attribute values during character\ncreation.",
163
+ "type": "object",
164
+ "properties": {
165
+ "fix": {
166
+ "description": "An array of attribute maximum modifiers. The value will be added to the\ncurrent maximum of the ID-specified attribute (negative values will lower\nthe maximum).",
167
+ "type": "array",
168
+ "items": {
169
+ "$ref": "#/definitions/AttributeAdjustments/Fix"
170
+ },
171
+ "minItems": 1
172
+ },
173
+ "selection": {
174
+ "description": "Used if the player has to choose between different modifiers.",
175
+ "$ref": "#/definitions/AttributeAdjustments/Selection"
176
+ }
177
+ },
178
+ "required": [
179
+ "selection"
180
+ ],
181
+ "additionalProperties": false
182
+ },
183
+ "Fix": {
184
+ "type": "object",
185
+ "properties": {
186
+ "id": {
187
+ "description": "The attribute's identifier.",
188
+ "type": "integer",
189
+ "maximum": 8,
190
+ "minimum": 1
191
+ },
192
+ "value": {
193
+ "description": "The value by which the attribute's maximum is modified (negative values\nwill lower the maximum).",
194
+ "type": "integer"
195
+ }
196
+ },
197
+ "required": [
198
+ "id",
199
+ "value"
200
+ ],
201
+ "additionalProperties": false
202
+ },
203
+ "Selection": {
204
+ "type": "object",
205
+ "properties": {
206
+ "value": {
207
+ "description": "The value by which the selected attribute's maximum is modified\n(negative values will lower the maximum).",
208
+ "type": "integer"
209
+ },
210
+ "list": {
211
+ "description": "A list of attributes the player has to choose from.",
212
+ "type": "array",
213
+ "items": {
214
+ "$ref": "#/definitions/AttributeAdjustments/SelectionItem"
215
+ },
216
+ "minItems": 2
217
+ }
218
+ },
219
+ "required": [
220
+ "value",
221
+ "list"
222
+ ],
223
+ "additionalProperties": false
224
+ },
225
+ "SelectionItem": {
226
+ "type": "object",
227
+ "properties": {
228
+ "id": {
229
+ "description": "The attribute's identifier.",
230
+ "type": "integer",
231
+ "maximum": 8,
232
+ "minimum": 1
233
+ }
234
+ },
235
+ "required": [
236
+ "id"
237
+ ],
238
+ "additionalProperties": false
239
+ }
240
+ },
241
+ "AutomaticAdvantage": {
242
+ "type": "object",
243
+ "properties": {
244
+ "id": {
245
+ "description": "The advantage's identifier.",
246
+ "type": "integer",
247
+ "minimum": 1
248
+ }
249
+ },
250
+ "required": [
251
+ "id"
252
+ ],
253
+ "additionalProperties": false
254
+ },
255
+ "Weight": {
256
+ "Config": {
257
+ "description": "Configuration for random weight generation.",
258
+ "type": "object",
259
+ "properties": {
260
+ "base": {
261
+ "description": "The base value used for random weight. The height subtrahend; in case of\n`Height - 110 + 2D6` it is `110`.",
262
+ "type": "integer",
263
+ "minimum": 1
264
+ },
265
+ "random": {
266
+ "description": "The dice used for random weight.",
267
+ "type": "array",
268
+ "items": {
269
+ "$ref": "#/definitions/Weight/Die"
270
+ },
271
+ "minItems": 1
272
+ }
273
+ },
274
+ "required": [
275
+ "base",
276
+ "random"
277
+ ],
278
+ "additionalProperties": false
279
+ },
280
+ "Die": {
281
+ "type": "object",
282
+ "properties": {
283
+ "number": {
284
+ "description": "Number of dice of the same type. Example: 2 in 2D6.",
285
+ "type": "integer",
286
+ "minimum": 1
287
+ },
288
+ "sides": {
289
+ "description": "Number of sides on every die. Example: 6 in 2D6.",
290
+ "$ref": "#/definitions/DieType"
291
+ },
292
+ "offset_strategy": {
293
+ "description": "The strategy how to offset the randomly generated values against the\nbase value. Either they are all added or subtracted or even results are\nadded and odd results are subtracted.",
294
+ "$ref": "#/definitions/Weight/OffsetStrategy"
295
+ }
296
+ },
297
+ "required": [
298
+ "number",
299
+ "sides",
300
+ "offset_strategy"
301
+ ],
302
+ "additionalProperties": false
303
+ },
304
+ "OffsetStrategy": {
305
+ "description": "The strategy how to offset the randomly generated values against the\nbase value. Either they are all added or subtracted or even results are\nadded and odd results are subtracted.",
306
+ "oneOf": [
307
+ {
308
+ "type": "object",
309
+ "properties": {
310
+ "tag": {
311
+ "const": "Add"
312
+ }
313
+ },
314
+ "required": [
315
+ "tag"
316
+ ],
317
+ "additionalProperties": false
318
+ },
319
+ {
320
+ "type": "object",
321
+ "properties": {
322
+ "tag": {
323
+ "const": "Subtract"
324
+ }
325
+ },
326
+ "required": [
327
+ "tag"
328
+ ],
329
+ "additionalProperties": false
330
+ },
331
+ {
332
+ "type": "object",
333
+ "properties": {
334
+ "tag": {
335
+ "const": "AddEvenSubtractOdd"
336
+ }
337
+ },
338
+ "required": [
339
+ "tag"
340
+ ],
341
+ "additionalProperties": false
342
+ }
343
+ ]
344
+ }
345
+ },
346
+ "StartingAgeConfigForExperienceLevel": {
347
+ "type": "object",
348
+ "properties": {
349
+ "experience_level_id": {
350
+ "description": "The selected experience level's identifier.",
351
+ "type": "integer",
352
+ "maximum": 7,
353
+ "minimum": 1
354
+ },
355
+ "base": {
356
+ "description": "The base value for the selected experience level.",
357
+ "type": "integer",
358
+ "minimum": 1
359
+ },
360
+ "random": {
361
+ "description": "The random value for the selected experience level. It is going to be\nadded to the base value.",
362
+ "$ref": "#/definitions/Die"
363
+ }
364
+ },
365
+ "required": [
366
+ "experience_level_id",
367
+ "base",
368
+ "random"
369
+ ],
370
+ "additionalProperties": false
371
+ },
372
+ "VariantDependent": {
373
+ "description": "The race may have variants and associated configuration for each variant.\nIf the race is plain (has no variants), the values that would otherwise be\ndefined in the variant configuration need to be set for the whole race.\nThis excludes common and uncommon advantages and disadvantages, since they\nmay be defined for the whole race even if variants exist.",
374
+ "oneOf": [
375
+ {
376
+ "type": "object",
377
+ "properties": {
378
+ "tag": {
379
+ "const": "HasVariants"
380
+ },
381
+ "variants": {
382
+ "description": "A list of available race variants.",
383
+ "type": "array",
384
+ "items": {
385
+ "$ref": "#/definitions/RaceVariant"
386
+ },
387
+ "minItems": 1
388
+ }
389
+ },
390
+ "required": [
391
+ "tag",
392
+ "variants"
393
+ ],
394
+ "additionalProperties": false
395
+ },
396
+ {
397
+ "type": "object",
398
+ "properties": {
399
+ "tag": {
400
+ "const": "Plain"
401
+ },
402
+ "common_cultures": {
403
+ "description": "The list of common cultures.",
404
+ "type": "array",
405
+ "items": {
406
+ "$ref": "#/definitions/CommonCulture"
407
+ },
408
+ "minItems": 1
409
+ },
410
+ "hair_color": {
411
+ "description": "An array containing 20 (numeric) hair color identifiers. The array also represents the 20-sided die for a random hair color.",
412
+ "type": "array",
413
+ "items": {
414
+ "$ref": "#/definitions/HairColor"
415
+ },
416
+ "minItems": 20,
417
+ "maxItems": 20
418
+ },
419
+ "eye_color": {
420
+ "description": "An array containing 20 (numeric) eye color identifiers. The array also represents the 20-sided die for a random eye color.",
421
+ "type": "array",
422
+ "items": {
423
+ "$ref": "#/definitions/EyeColor"
424
+ },
425
+ "minItems": 20,
426
+ "maxItems": 20
427
+ },
428
+ "height": {
429
+ "description": "Configuration for random height generation.",
430
+ "$ref": "#/definitions/Height"
431
+ }
432
+ },
433
+ "required": [
434
+ "tag",
435
+ "common_cultures",
436
+ "hair_color",
437
+ "eye_color",
438
+ "height"
439
+ ],
440
+ "additionalProperties": false
441
+ }
442
+ ]
443
+ },
444
+ "RaceVariant": {
445
+ "title": "Race Variant",
446
+ "type": "object",
447
+ "properties": {
448
+ "id": {
449
+ "description": "An unique, increasing integer.",
450
+ "type": "integer",
451
+ "minimum": 1
452
+ },
453
+ "common_cultures": {
454
+ "description": "The list of common cultures.",
455
+ "type": "array",
456
+ "items": {
457
+ "$ref": "#/definitions/CommonCulture"
458
+ },
459
+ "minItems": 1
460
+ },
461
+ "common_advantages": {
462
+ "description": "A list of common advantages. If common advantages are defined by the base race, leave this field empty. This field overrides the same field of the base race, if both are defined.",
463
+ "type": "array",
464
+ "items": {
465
+ "$ref": "./_CommonnessRatedAdvantageDisadvantage.schema.json#/definitions/CommonnessRatedAdvantageDisadvantage"
466
+ },
467
+ "minItems": 1
468
+ },
469
+ "common_disadvantages": {
470
+ "description": "A list of common disadvantages. If common disadvantages are defined by the base race, leave this field empty. This field overrides the same field of the base race, if both are defined.",
471
+ "type": "array",
472
+ "items": {
473
+ "$ref": "./_CommonnessRatedAdvantageDisadvantage.schema.json#/definitions/CommonnessRatedAdvantageDisadvantage"
474
+ },
475
+ "minItems": 1
476
+ },
477
+ "uncommon_advantages": {
478
+ "description": "A list of uncommon advantages. If uncommon advantages are defined by the base race, leave this field empty. This field overrides the same field of the base race, if both are defined.",
479
+ "type": "array",
480
+ "items": {
481
+ "$ref": "./_CommonnessRatedAdvantageDisadvantage.schema.json#/definitions/CommonnessRatedAdvantageDisadvantage"
482
+ },
483
+ "minItems": 1
484
+ },
485
+ "uncommon_disadvantages": {
486
+ "description": "A list of uncommon disadvantages. If uncommon disadvantages are defined by the base race, leave this field empty. This field overrides the same field of the base race, if both are defined.",
487
+ "type": "array",
488
+ "items": {
489
+ "$ref": "./_CommonnessRatedAdvantageDisadvantage.schema.json#/definitions/CommonnessRatedAdvantageDisadvantage"
490
+ },
491
+ "minItems": 1
492
+ },
493
+ "hair_color": {
494
+ "description": "An array containing 20 (numeric) hair color identifiers. The array also represents the 20-sided die for a random hair color.",
495
+ "type": "array",
496
+ "items": {
497
+ "$ref": "#/definitions/HairColor"
498
+ },
499
+ "minItems": 20,
500
+ "maxItems": 20
501
+ },
502
+ "eye_color": {
503
+ "description": "An array containing 20 (numeric) eye color identifiers. The array also represents the 20-sided die for a random eye color.",
504
+ "type": "array",
505
+ "items": {
506
+ "$ref": "#/definitions/EyeColor"
507
+ },
508
+ "minItems": 20,
509
+ "maxItems": 20
510
+ },
511
+ "height": {
512
+ "description": "Configuration for random height generation.",
513
+ "$ref": "#/definitions/Height"
514
+ },
515
+ "translations": {
516
+ "description": "All translations for the entry, identified by IETF language tag (BCP47).",
517
+ "type": "object",
518
+ "patternProperties": {
519
+ "^[a-z]{2}-[A-Z]{2}$": {
520
+ "$ref": "#/definitions/RaceVariantTranslation"
521
+ }
522
+ },
523
+ "minProperties": 1,
524
+ "additionalProperties": false
525
+ }
526
+ },
527
+ "required": [
528
+ "id",
529
+ "common_cultures",
530
+ "hair_color",
531
+ "eye_color",
532
+ "height",
533
+ "translations"
534
+ ],
535
+ "additionalProperties": false
536
+ },
537
+ "CommonCulture": {
538
+ "type": "object",
539
+ "properties": {
540
+ "id": {
541
+ "description": "The culture's identifier.",
542
+ "type": "integer",
543
+ "minimum": 1
544
+ }
545
+ },
546
+ "required": [
547
+ "id"
548
+ ],
549
+ "additionalProperties": false
550
+ },
551
+ "HairColor": {
552
+ "type": "object",
553
+ "properties": {
554
+ "id": {
555
+ "description": "The hair color's identifier.",
556
+ "type": "integer",
557
+ "minimum": 1
558
+ }
559
+ },
560
+ "required": [
561
+ "id"
562
+ ],
563
+ "additionalProperties": false
564
+ },
565
+ "EyeColor": {
566
+ "type": "object",
567
+ "properties": {
568
+ "id": {
569
+ "description": "The hair color's identifier.",
570
+ "type": "integer",
571
+ "minimum": 1
572
+ }
573
+ },
574
+ "required": [
575
+ "id"
576
+ ],
577
+ "additionalProperties": false
578
+ },
579
+ "Height": {
580
+ "description": "Configuration for random height generation.",
581
+ "type": "object",
582
+ "properties": {
583
+ "base": {
584
+ "description": "The base value used for random height.",
585
+ "type": "integer",
586
+ "minimum": 1
587
+ },
588
+ "random": {
589
+ "description": "The dice used for random height.",
590
+ "type": "array",
591
+ "items": {
592
+ "$ref": "#/definitions/Die"
593
+ },
594
+ "minItems": 1
595
+ }
596
+ },
597
+ "required": [
598
+ "base",
599
+ "random"
600
+ ],
601
+ "additionalProperties": false
602
+ },
603
+ "RaceVariantTranslation": {
604
+ "type": "object",
605
+ "properties": {
606
+ "name": {
607
+ "description": "The race variant's name.",
608
+ "type": "string",
609
+ "minLength": 1
610
+ },
611
+ "common_advantages": {
612
+ "description": "The respective common advantages text from the source book. If common\nadvantages are defined by the base race, leave this field empty. This field\noverrides the same field of the base race, if both are defined.",
613
+ "type": "string",
614
+ "minLength": 1
615
+ },
616
+ "common_disadvantages": {
617
+ "description": "The respective common disadvantages text from the source book. If common\ndisadvantages are defined by the base race, leave this field empty. This\nfield overrides the same field of the base race, if both are defined.",
618
+ "type": "string",
619
+ "minLength": 1
620
+ },
621
+ "uncommon_advantages": {
622
+ "description": "The respective uncommon advantages text from the source book. If uncommon\nadvantages are defined by the base race, leave this field empty. This field\noverrides the same field of the base race, if both are defined.",
623
+ "type": "string",
624
+ "minLength": 1
625
+ },
626
+ "uncommon_disadvantages": {
627
+ "description": "The respective uncommon disadvantages text from the source book. If\nuncommon disadvantages are defined by the base race, leave this field\nempty. This field overrides the same field of the base race, if both are\ndefined.",
628
+ "type": "string",
629
+ "minLength": 1
630
+ }
631
+ },
632
+ "required": [
633
+ "name"
634
+ ],
635
+ "additionalProperties": false
636
+ },
637
+ "RaceTranslation": {
638
+ "type": "object",
639
+ "properties": {
640
+ "name": {
641
+ "description": "The race's name.",
642
+ "type": "string",
643
+ "minLength": 1
644
+ },
645
+ "attribute_adjustments": {
646
+ "description": "The respective attribute adjustments text from the source book.",
647
+ "type": "string",
648
+ "minLength": 1
649
+ },
650
+ "automatic_advantages": {
651
+ "description": "The respective automatic advantages text from the source book.",
652
+ "type": "string",
653
+ "minLength": 1
654
+ },
655
+ "strongly_recommended_advantages": {
656
+ "description": "The respective strongly recommended advantages text from the source book.",
657
+ "type": "string",
658
+ "minLength": 1
659
+ },
660
+ "strongly_recommended_disadvantages": {
661
+ "description": "The respective strongly recommended disadvantages text from the source book.",
662
+ "type": "string",
663
+ "minLength": 1
664
+ },
665
+ "common_advantages": {
666
+ "description": "The respective common advantages text from the source book. If common\nadvantages are defined by race variants, leave this field empty. It is\noverridden by the same field in race variants.",
667
+ "type": "string",
668
+ "minLength": 1
669
+ },
670
+ "common_disadvantages": {
671
+ "description": "The respective common disadvantages text from the source book. If common\ndisadvantages are defined by race variants, leave this field empty. It is\noverridden by the same field in race variants.",
672
+ "type": "string",
673
+ "minLength": 1
674
+ },
675
+ "uncommon_advantages": {
676
+ "description": "The respective uncommon advantages text from the source book. If uncommon\nadvantages are defined by race variants, leave this field empty. It is\noverridden by the same field in race variants.",
677
+ "type": "string",
678
+ "minLength": 1
679
+ },
680
+ "uncommon_disadvantages": {
681
+ "description": "The respective uncommon disadvantages text from the source book. If\nuncommon disadvantages are defined by race variants, leave this field\nempty. It is overridden by the same field in race variants.",
682
+ "type": "string",
683
+ "minLength": 1
684
+ },
685
+ "errata": {
686
+ "$ref": "./source/_Erratum.schema.json#/definitions/Errata"
687
+ }
688
+ },
689
+ "required": [
690
+ "name",
691
+ "attribute_adjustments"
692
+ ],
693
+ "additionalProperties": false
694
+ },
695
+ "Die": {
696
+ "title": "Die",
697
+ "type": "object",
698
+ "properties": {
699
+ "number": {
700
+ "description": "Number of dice of the same type. Example: 2 in 2D6.",
701
+ "type": "integer",
702
+ "minimum": 1
703
+ },
704
+ "sides": {
705
+ "description": "Number of sides on every die. Example: 6 in 2D6.",
706
+ "$ref": "#/definitions/DieType"
707
+ }
708
+ },
709
+ "required": [
710
+ "number",
711
+ "sides"
712
+ ],
713
+ "additionalProperties": false
714
+ },
715
+ "DieType": {
716
+ "description": "Number of sides on every dice. Example: 6 in 2D6.",
717
+ "enum": [
718
+ 3,
719
+ 6,
720
+ 20
721
+ ]
722
+ }
723
+ }
724
+ }