5etools-utils 0.8.37 → 0.9.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 (187) hide show
  1. package/README.md +1 -0
  2. package/bin/test-json-ua.js +5 -0
  3. package/lib/BrewTester.js +3 -3
  4. package/lib/TestJson.js +22 -7
  5. package/package.json +2 -1
  6. package/schema/brew/backgrounds.json +13 -13
  7. package/schema/brew/class/class.json +1 -1
  8. package/schema/brew/items-shared.json +1 -1
  9. package/schema/brew/races.json +1 -1
  10. package/schema/brew/spells/spells.json +61 -61
  11. package/schema/brew/util.json +47 -1
  12. package/schema/brew-fast/backgrounds.json +13 -13
  13. package/schema/brew-fast/class/class.json +1 -1
  14. package/schema/brew-fast/items-shared.json +1 -1
  15. package/schema/brew-fast/races.json +1 -1
  16. package/schema/brew-fast/spells/spells.json +61 -61
  17. package/schema/brew-fast/util.json +47 -1
  18. package/schema/site/backgrounds.json +1 -1
  19. package/schema/site/class/class.json +1 -1
  20. package/schema/site/items-shared.json +1 -1
  21. package/schema/site/races.json +1 -1
  22. package/schema/site/spells/spells.json +1 -1
  23. package/schema/site/util.json +48 -2
  24. package/schema/site-fast/backgrounds.json +1 -1
  25. package/schema/site-fast/class/class.json +1 -1
  26. package/schema/site-fast/items-shared.json +1 -1
  27. package/schema/site-fast/races.json +1 -1
  28. package/schema/site-fast/spells/spells.json +1 -1
  29. package/schema/site-fast/util.json +48 -2
  30. package/schema/ua/actions.json +97 -0
  31. package/schema/ua/adventure/adventure.json +12 -0
  32. package/schema/ua/adventures.json +214 -0
  33. package/schema/ua/backgrounds.json +326 -0
  34. package/schema/ua/bestiary/bestiary.json +3735 -0
  35. package/schema/ua/bestiary/fluff-bestiary.json +15 -0
  36. package/schema/ua/bestiary/fluff-index.json +11 -0
  37. package/schema/ua/bestiary/foundry.json +15 -0
  38. package/schema/ua/bestiary/index.json +11 -0
  39. package/schema/ua/bestiary/legendarygroups.json +202 -0
  40. package/schema/ua/bestiary/template.json +275 -0
  41. package/schema/ua/book/book.json +12 -0
  42. package/schema/ua/books.json +141 -0
  43. package/schema/ua/changelog.json +35 -0
  44. package/schema/ua/charcreationoptions.json +80 -0
  45. package/schema/ua/class/class.json +1881 -0
  46. package/schema/ua/class/foundry.json +397 -0
  47. package/schema/ua/class/index.json +11 -0
  48. package/schema/ua/conditionsdiseases.json +82 -0
  49. package/schema/ua/cultsboons.json +175 -0
  50. package/schema/ua/decks.json +504 -0
  51. package/schema/ua/deities.json +473 -0
  52. package/schema/ua/encounters.json +105 -0
  53. package/schema/ua/entry.json +3748 -0
  54. package/schema/ua/feats.json +117 -0
  55. package/schema/ua/fluff-backgrounds.json +15 -0
  56. package/schema/ua/fluff-charcreationoptions.json +43 -0
  57. package/schema/ua/fluff-conditionsdiseases.json +43 -0
  58. package/schema/ua/fluff-feats.json +15 -0
  59. package/schema/ua/fluff-items.json +15 -0
  60. package/schema/ua/fluff-languages.json +42 -0
  61. package/schema/ua/fluff-objects.json +15 -0
  62. package/schema/ua/fluff-races.json +214 -0
  63. package/schema/ua/fluff-recipes.json +42 -0
  64. package/schema/ua/fluff-vehicles.json +63 -0
  65. package/schema/ua/foundry-actions.json +15 -0
  66. package/schema/ua/foundry-backgrounds.json +53 -0
  67. package/schema/ua/foundry-feats.json +15 -0
  68. package/schema/ua/foundry-items.json +63 -0
  69. package/schema/ua/foundry-optionalfeatures.json +15 -0
  70. package/schema/ua/foundry-psionics.json +56 -0
  71. package/schema/ua/foundry-races.json +58 -0
  72. package/schema/ua/foundry-rewards.json +15 -0
  73. package/schema/ua/foundry-vehicles.json +15 -0
  74. package/schema/ua/generated/bookref-quick.json +72 -0
  75. package/schema/ua/generated/gendata-spell-source-lookup.json +230 -0
  76. package/schema/ua/homebrew.json +633 -0
  77. package/schema/ua/items-base.json +959 -0
  78. package/schema/ua/items-shared.json +267 -0
  79. package/schema/ua/items.json +1770 -0
  80. package/schema/ua/languages.json +123 -0
  81. package/schema/ua/life.json +17 -0
  82. package/schema/ua/loot.json +510 -0
  83. package/schema/ua/magicvariants.json +361 -0
  84. package/schema/ua/makebrew-creature.json +66 -0
  85. package/schema/ua/makecards.json +43 -0
  86. package/schema/ua/monsterfeatures.json +53 -0
  87. package/schema/ua/msbcr.json +60 -0
  88. package/schema/ua/names.json +94 -0
  89. package/schema/ua/objects.json +165 -0
  90. package/schema/ua/optionalfeatures.json +130 -0
  91. package/schema/ua/psionics.json +173 -0
  92. package/schema/ua/races.json +1668 -0
  93. package/schema/ua/recipes.json +185 -0
  94. package/schema/ua/renderdemo.json +16 -0
  95. package/schema/ua/rewards.json +93 -0
  96. package/schema/ua/senses.json +54 -0
  97. package/schema/ua/skills.json +54 -0
  98. package/schema/ua/spells/fluff-index.json +11 -0
  99. package/schema/ua/spells/fluff-spells.json +15 -0
  100. package/schema/ua/spells/foundry.json +15 -0
  101. package/schema/ua/spells/index.json +11 -0
  102. package/schema/ua/spells/roll20.json +112 -0
  103. package/schema/ua/spells/spells.json +1250 -0
  104. package/schema/ua/tables.json +220 -0
  105. package/schema/ua/trapshazards.json +236 -0
  106. package/schema/ua/util.json +4466 -0
  107. package/schema/ua/variantrules.json +74 -0
  108. package/schema/ua/vehicles.json +820 -0
  109. package/schema/ua-fast/actions.json +97 -0
  110. package/schema/ua-fast/adventure/adventure.json +12 -0
  111. package/schema/ua-fast/adventures.json +214 -0
  112. package/schema/ua-fast/backgrounds.json +326 -0
  113. package/schema/ua-fast/bestiary/bestiary.json +3735 -0
  114. package/schema/ua-fast/bestiary/fluff-bestiary.json +15 -0
  115. package/schema/ua-fast/bestiary/fluff-index.json +11 -0
  116. package/schema/ua-fast/bestiary/foundry.json +15 -0
  117. package/schema/ua-fast/bestiary/index.json +11 -0
  118. package/schema/ua-fast/bestiary/legendarygroups.json +202 -0
  119. package/schema/ua-fast/bestiary/template.json +275 -0
  120. package/schema/ua-fast/book/book.json +12 -0
  121. package/schema/ua-fast/books.json +141 -0
  122. package/schema/ua-fast/changelog.json +35 -0
  123. package/schema/ua-fast/charcreationoptions.json +80 -0
  124. package/schema/ua-fast/class/class.json +1881 -0
  125. package/schema/ua-fast/class/foundry.json +397 -0
  126. package/schema/ua-fast/class/index.json +11 -0
  127. package/schema/ua-fast/conditionsdiseases.json +82 -0
  128. package/schema/ua-fast/cultsboons.json +175 -0
  129. package/schema/ua-fast/decks.json +504 -0
  130. package/schema/ua-fast/deities.json +473 -0
  131. package/schema/ua-fast/encounters.json +105 -0
  132. package/schema/ua-fast/entry.json +3748 -0
  133. package/schema/ua-fast/feats.json +117 -0
  134. package/schema/ua-fast/fluff-backgrounds.json +15 -0
  135. package/schema/ua-fast/fluff-charcreationoptions.json +43 -0
  136. package/schema/ua-fast/fluff-conditionsdiseases.json +43 -0
  137. package/schema/ua-fast/fluff-feats.json +15 -0
  138. package/schema/ua-fast/fluff-items.json +15 -0
  139. package/schema/ua-fast/fluff-languages.json +42 -0
  140. package/schema/ua-fast/fluff-objects.json +15 -0
  141. package/schema/ua-fast/fluff-races.json +214 -0
  142. package/schema/ua-fast/fluff-recipes.json +42 -0
  143. package/schema/ua-fast/fluff-vehicles.json +63 -0
  144. package/schema/ua-fast/foundry-actions.json +15 -0
  145. package/schema/ua-fast/foundry-backgrounds.json +53 -0
  146. package/schema/ua-fast/foundry-feats.json +15 -0
  147. package/schema/ua-fast/foundry-items.json +63 -0
  148. package/schema/ua-fast/foundry-optionalfeatures.json +15 -0
  149. package/schema/ua-fast/foundry-psionics.json +56 -0
  150. package/schema/ua-fast/foundry-races.json +58 -0
  151. package/schema/ua-fast/foundry-rewards.json +15 -0
  152. package/schema/ua-fast/foundry-vehicles.json +15 -0
  153. package/schema/ua-fast/generated/bookref-quick.json +72 -0
  154. package/schema/ua-fast/generated/gendata-spell-source-lookup.json +230 -0
  155. package/schema/ua-fast/homebrew.json +631 -0
  156. package/schema/ua-fast/items-base.json +959 -0
  157. package/schema/ua-fast/items-shared.json +267 -0
  158. package/schema/ua-fast/items.json +1770 -0
  159. package/schema/ua-fast/languages.json +123 -0
  160. package/schema/ua-fast/life.json +17 -0
  161. package/schema/ua-fast/loot.json +510 -0
  162. package/schema/ua-fast/magicvariants.json +361 -0
  163. package/schema/ua-fast/makebrew-creature.json +66 -0
  164. package/schema/ua-fast/makecards.json +43 -0
  165. package/schema/ua-fast/monsterfeatures.json +53 -0
  166. package/schema/ua-fast/msbcr.json +60 -0
  167. package/schema/ua-fast/names.json +94 -0
  168. package/schema/ua-fast/objects.json +165 -0
  169. package/schema/ua-fast/optionalfeatures.json +130 -0
  170. package/schema/ua-fast/psionics.json +173 -0
  171. package/schema/ua-fast/races.json +1668 -0
  172. package/schema/ua-fast/recipes.json +185 -0
  173. package/schema/ua-fast/renderdemo.json +16 -0
  174. package/schema/ua-fast/rewards.json +93 -0
  175. package/schema/ua-fast/senses.json +54 -0
  176. package/schema/ua-fast/skills.json +54 -0
  177. package/schema/ua-fast/spells/fluff-index.json +11 -0
  178. package/schema/ua-fast/spells/fluff-spells.json +15 -0
  179. package/schema/ua-fast/spells/foundry.json +15 -0
  180. package/schema/ua-fast/spells/index.json +11 -0
  181. package/schema/ua-fast/spells/roll20.json +112 -0
  182. package/schema/ua-fast/spells/spells.json +1250 -0
  183. package/schema/ua-fast/tables.json +220 -0
  184. package/schema/ua-fast/trapshazards.json +236 -0
  185. package/schema/ua-fast/util.json +4466 -0
  186. package/schema/ua-fast/variantrules.json +74 -0
  187. package/schema/ua-fast/vehicles.json +820 -0
@@ -0,0 +1,4466 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "util.json",
4
+ "title": "Util",
5
+ "description": "Utility definitions to be used in other schemas.",
6
+ "version": "1.13.30",
7
+ "$defs": {
8
+ "metaDependenciesArray": {
9
+ "type": "array",
10
+ "items": {
11
+ "type": "string"
12
+ },
13
+ "minItems": 1,
14
+ "uniqueItems": true
15
+ },
16
+ "metaBlock": {
17
+ "type": "object",
18
+ "properties": {
19
+ "dependencies": {
20
+ "type": "object",
21
+ "patternProperties": {
22
+ "^[a-zA-Z]+$": {
23
+ "$ref": "#/$defs/metaDependenciesArray"
24
+ }
25
+ }
26
+ },
27
+ "otherSources": {
28
+ "type": "object",
29
+ "properties": {
30
+ "monster": {
31
+ "description": "Keys are other sources to be loaded; values are `otherSources` sources from that source to search for.",
32
+ "type": "object"
33
+ }
34
+ }
35
+ }
36
+ }
37
+ },
38
+ "url": {
39
+ "type": "string",
40
+ "description": "\"uri-reference\" is unsuitable for brew, as it requires URL-encoding \"'\" (see: https://www.ietf.org/rfc/rfc3986.txt)",
41
+ "format": "uri-reference"
42
+ },
43
+ "source": {
44
+ "type": "string",
45
+ "description": "An identifying string, as seen in the JSON in \"source\" fields.",
46
+ "pattern": "^[-a-zA-Z0-9 :&+!]+$"
47
+ },
48
+ "sourceJson": {
49
+ "type": "string",
50
+ "description": "An identifying string, as seen in the JSON in \"source\" fields.",
51
+ "pattern": "^(?:UA|XUA)[-a-zA-Z0-9 :&+!]+$"
52
+ },
53
+ "page": {
54
+ "type": "integer"
55
+ },
56
+ "otherSources": {
57
+ "type": "array",
58
+ "items": {
59
+ "type": "object",
60
+ "properties": {
61
+ "source": {
62
+ "$ref": "util.json#/$defs/source"
63
+ },
64
+ "page": {
65
+ "$ref": "#/$defs/page"
66
+ }
67
+ },
68
+ "required": [
69
+ "source"
70
+ ],
71
+ "additionalProperties": false
72
+ },
73
+ "uniqueItems": true,
74
+ "minItems": 1
75
+ },
76
+ "additionalSources": {
77
+ "type": "array",
78
+ "items": {
79
+ "type": "object",
80
+ "properties": {
81
+ "source": {
82
+ "$ref": "util.json#/$defs/source"
83
+ },
84
+ "page": {
85
+ "$ref": "#/$defs/page"
86
+ }
87
+ },
88
+ "required": [
89
+ "source"
90
+ ],
91
+ "additionalProperties": false
92
+ },
93
+ "uniqueItems": true,
94
+ "minItems": 1
95
+ },
96
+ "alias": {
97
+ "type": "array",
98
+ "items": {
99
+ "type": "string"
100
+ }
101
+ },
102
+ "reprintedAs": {
103
+ "type": "array",
104
+ "items": {
105
+ "oneOf": [
106
+ {
107
+ "description": "A UID, e.g. \"longsword|phb\"",
108
+ "type": "string"
109
+ },
110
+ {
111
+ "type": "object",
112
+ "properties": {
113
+ "uid": {
114
+ "description": "A UID, e.g. \"longsword|phb\"",
115
+ "type": "string"
116
+ },
117
+ "tag": {
118
+ "description": "A tag used in the renderer, e.g. \"creature\"",
119
+ "type": "string"
120
+ }
121
+ },
122
+ "additionalProperties": false,
123
+ "required": [
124
+ "tag",
125
+ "uid"
126
+ ]
127
+ }
128
+ ]
129
+ },
130
+ "uniqueItems": true,
131
+ "minItems": 1
132
+ },
133
+ "tagNameStats": {
134
+ "type": "string",
135
+ "enum": [
136
+ "spell",
137
+ "item",
138
+ "creature",
139
+ "condition",
140
+ "disease",
141
+ "status",
142
+ "background",
143
+ "race",
144
+ "optfeature",
145
+ "reward",
146
+ "feat",
147
+ "psionic",
148
+ "object",
149
+ "cult",
150
+ "boon",
151
+ "trap",
152
+ "hazard",
153
+ "deity",
154
+ "variantrule",
155
+ "charoption",
156
+ "vehicle",
157
+ "vehupgrade",
158
+ "class",
159
+ "action",
160
+ "language",
161
+ "classFeature",
162
+ "subclassFeature",
163
+ "table",
164
+ "recipe",
165
+ "skill",
166
+ "sense",
167
+ "legroup",
168
+ "deck",
169
+ "card"
170
+ ]
171
+ },
172
+ "propNameStats": {
173
+ "type": "string",
174
+ "enum": [
175
+ "subclass"
176
+ ]
177
+ },
178
+ "languageNameLower": {
179
+ "type": "string",
180
+ "enum": [
181
+ "abyssal",
182
+ "aquan",
183
+ "auran",
184
+ "celestial",
185
+ "common",
186
+ "common sign language",
187
+ "deep speech",
188
+ "draconic",
189
+ "druidic",
190
+ "dwarvish",
191
+ "elvish",
192
+ "giant",
193
+ "gith",
194
+ "gnomish",
195
+ "goblin",
196
+ "halfling",
197
+ "ignan",
198
+ "infernal",
199
+ "orc",
200
+ "other",
201
+ "primordial",
202
+ "sylvan",
203
+ "terran",
204
+ "thieves' cant",
205
+ "undercommon"
206
+ ]
207
+ },
208
+ "languageProficiencies": {
209
+ "type": "array",
210
+ "items": {
211
+ "type": "object",
212
+ "properties": {
213
+ "any": {
214
+ "type": "integer"
215
+ },
216
+ "anyStandard": {
217
+ "type": "integer"
218
+ },
219
+ "anyExotic": {
220
+ "type": "integer"
221
+ },
222
+ "abyssal": {
223
+ "const": true
224
+ },
225
+ "celestial": {
226
+ "const": true
227
+ },
228
+ "common": {
229
+ "const": true
230
+ },
231
+ "common sign language": {
232
+ "const": true
233
+ },
234
+ "deep speech": {
235
+ "const": true
236
+ },
237
+ "draconic": {
238
+ "const": true
239
+ },
240
+ "infernal": {
241
+ "const": true
242
+ },
243
+ "gith": {
244
+ "const": true
245
+ },
246
+ "gnomish": {
247
+ "const": true
248
+ },
249
+ "goblin": {
250
+ "const": true
251
+ },
252
+ "halfling": {
253
+ "const": true
254
+ },
255
+ "orc": {
256
+ "const": true
257
+ },
258
+ "primordial": {
259
+ "const": true
260
+ },
261
+ "aquan": {
262
+ "const": true
263
+ },
264
+ "auran": {
265
+ "const": true
266
+ },
267
+ "ignan": {
268
+ "const": true
269
+ },
270
+ "terran": {
271
+ "const": true
272
+ },
273
+ "sylvan": {
274
+ "const": true
275
+ },
276
+ "undercommon": {
277
+ "const": true
278
+ },
279
+ "dwarvish": {
280
+ "const": true
281
+ },
282
+ "elvish": {
283
+ "const": true
284
+ },
285
+ "giant": {
286
+ "const": true
287
+ },
288
+ "other": {
289
+ "const": true
290
+ },
291
+ "druidic": {
292
+ "const": true
293
+ },
294
+ "thieves' cant": {
295
+ "const": true
296
+ },
297
+ "choose": {
298
+ "type": "object",
299
+ "properties": {
300
+ "from": {
301
+ "type": "array",
302
+ "items": {
303
+ "$ref": "#/$defs/languageNameLower"
304
+ },
305
+ "uniqueItems": true
306
+ },
307
+ "count": {
308
+ "type": "integer"
309
+ }
310
+ },
311
+ "additionalProperties": false
312
+ }
313
+ },
314
+ "additionalProperties": false
315
+ },
316
+ "uniqueItems": true,
317
+ "minItems": 1
318
+ },
319
+ "toolNameLower": {
320
+ "type": "string",
321
+ "enum": [
322
+ "artisan's tools",
323
+ "alchemist's supplies",
324
+ "brewer's supplies",
325
+ "calligrapher's supplies",
326
+ "carpenter's tools",
327
+ "cartographer's tools",
328
+ "cobbler's tools",
329
+ "cook's utensils",
330
+ "glassblower's tools",
331
+ "jeweler's tools",
332
+ "leatherworker's tools",
333
+ "mason's tools",
334
+ "painter's supplies",
335
+ "potter's tools",
336
+ "smith's tools",
337
+ "tinker's tools",
338
+ "weaver's tools",
339
+ "woodcarver's tools",
340
+ "disguise kit",
341
+ "forgery kit",
342
+ "gaming set",
343
+ "dragonchess set",
344
+ "dice set",
345
+ "three-dragon ante set",
346
+ "herbalism kit",
347
+ "musical instrument",
348
+ "bagpipes",
349
+ "drum",
350
+ "dulcimer",
351
+ "flute",
352
+ "horn",
353
+ "lute",
354
+ "lyre",
355
+ "pan flute",
356
+ "shawm",
357
+ "viol",
358
+ "navigator's tools",
359
+ "thieves' tools",
360
+ "poisoner's kit",
361
+ "vehicles",
362
+ "vehicles (air)",
363
+ "vehicles (land)",
364
+ "vehicles (water)",
365
+ "vehicles (space)"
366
+ ]
367
+ },
368
+ "toolProficiencies": {
369
+ "type": "array",
370
+ "items": {
371
+ "type": "object",
372
+ "properties": {
373
+ "any": {
374
+ "type": "integer"
375
+ },
376
+ "anyArtisansTool": {
377
+ "type": "integer"
378
+ },
379
+ "artisan's tools": {
380
+ "const": true
381
+ },
382
+ "alchemist's supplies": {
383
+ "const": true
384
+ },
385
+ "brewer's supplies": {
386
+ "const": true
387
+ },
388
+ "calligrapher's supplies": {
389
+ "const": true
390
+ },
391
+ "carpenter's tools": {
392
+ "const": true
393
+ },
394
+ "cartographer's tools": {
395
+ "const": true
396
+ },
397
+ "cobbler's tools": {
398
+ "const": true
399
+ },
400
+ "cook's utensils": {
401
+ "const": true
402
+ },
403
+ "glassblower's tools": {
404
+ "const": true
405
+ },
406
+ "jeweler's tools": {
407
+ "const": true
408
+ },
409
+ "leatherworker's tools": {
410
+ "const": true
411
+ },
412
+ "mason's tools": {
413
+ "const": true
414
+ },
415
+ "painter's supplies": {
416
+ "const": true
417
+ },
418
+ "potter's tools": {
419
+ "const": true
420
+ },
421
+ "smith's tools": {
422
+ "const": true
423
+ },
424
+ "tinker's tools": {
425
+ "const": true
426
+ },
427
+ "weaver's tools": {
428
+ "const": true
429
+ },
430
+ "woodcarver's tools": {
431
+ "const": true
432
+ },
433
+ "disguise kit": {
434
+ "const": true
435
+ },
436
+ "forgery kit": {
437
+ "const": true
438
+ },
439
+ "gaming set": {
440
+ "const": true
441
+ },
442
+ "dragonchess set": {
443
+ "const": true
444
+ },
445
+ "dice set": {
446
+ "const": true
447
+ },
448
+ "three-dragon ante set": {
449
+ "const": true
450
+ },
451
+ "herbalism kit": {
452
+ "const": true
453
+ },
454
+ "anyMusicalInstrument": {
455
+ "type": "integer"
456
+ },
457
+ "musical instrument": {
458
+ "const": true
459
+ },
460
+ "bagpipes": {
461
+ "const": true
462
+ },
463
+ "drum": {
464
+ "const": true
465
+ },
466
+ "dulcimer": {
467
+ "const": true
468
+ },
469
+ "flute": {
470
+ "const": true
471
+ },
472
+ "horn": {
473
+ "const": true
474
+ },
475
+ "lute": {
476
+ "const": true
477
+ },
478
+ "lyre": {
479
+ "const": true
480
+ },
481
+ "pan flute": {
482
+ "const": true
483
+ },
484
+ "shawm": {
485
+ "const": true
486
+ },
487
+ "viol": {
488
+ "const": true
489
+ },
490
+ "navigator's tools": {
491
+ "const": true
492
+ },
493
+ "thieves' tools": {
494
+ "const": true
495
+ },
496
+ "poisoner's kit": {
497
+ "const": true
498
+ },
499
+ "vehicles": {
500
+ "const": true
501
+ },
502
+ "vehicles (air)": {
503
+ "const": true
504
+ },
505
+ "vehicles (land)": {
506
+ "const": true
507
+ },
508
+ "vehicles (water)": {
509
+ "const": true
510
+ },
511
+ "vehicles (space)": {
512
+ "const": true
513
+ },
514
+ "choose": {
515
+ "type": "object",
516
+ "properties": {
517
+ "from": {
518
+ "type": "array",
519
+ "items": {
520
+ "anyOf": [
521
+ {
522
+ "$ref": "#/$defs/toolNameLower"
523
+ },
524
+ {
525
+ "type": "string",
526
+ "enum": [
527
+ "anyArtisansTool",
528
+ "anyMusicalInstrument"
529
+ ]
530
+ }
531
+ ]
532
+ },
533
+ "uniqueItems": true,
534
+ "minItems": 2
535
+ },
536
+ "count": {
537
+ "type": "integer"
538
+ }
539
+ },
540
+ "additionalProperties": false
541
+ }
542
+ },
543
+ "additionalProperties": false
544
+ },
545
+ "uniqueItems": true,
546
+ "minItems": 1
547
+ },
548
+ "skillNameLower": {
549
+ "type": "string",
550
+ "enum": [
551
+ "athletics",
552
+ "acrobatics",
553
+ "sleight of hand",
554
+ "stealth",
555
+ "arcana",
556
+ "history",
557
+ "investigation",
558
+ "nature",
559
+ "religion",
560
+ "animal handling",
561
+ "insight",
562
+ "medicine",
563
+ "perception",
564
+ "survival",
565
+ "deception",
566
+ "intimidation",
567
+ "performance",
568
+ "persuasion"
569
+ ]
570
+ },
571
+ "skillProficiencies": {
572
+ "type": "array",
573
+ "items": {
574
+ "type": "object",
575
+ "properties": {
576
+ "any": {
577
+ "type": "integer"
578
+ },
579
+ "athletics": {
580
+ "const": true
581
+ },
582
+ "acrobatics": {
583
+ "const": true
584
+ },
585
+ "sleight of hand": {
586
+ "const": true
587
+ },
588
+ "stealth": {
589
+ "const": true
590
+ },
591
+ "arcana": {
592
+ "const": true
593
+ },
594
+ "history": {
595
+ "const": true
596
+ },
597
+ "investigation": {
598
+ "const": true
599
+ },
600
+ "nature": {
601
+ "const": true
602
+ },
603
+ "religion": {
604
+ "const": true
605
+ },
606
+ "animal handling": {
607
+ "const": true
608
+ },
609
+ "insight": {
610
+ "const": true
611
+ },
612
+ "medicine": {
613
+ "const": true
614
+ },
615
+ "perception": {
616
+ "const": true
617
+ },
618
+ "survival": {
619
+ "const": true
620
+ },
621
+ "deception": {
622
+ "const": true
623
+ },
624
+ "intimidation": {
625
+ "const": true
626
+ },
627
+ "performance": {
628
+ "const": true
629
+ },
630
+ "persuasion": {
631
+ "const": true
632
+ },
633
+ "choose": {
634
+ "type": "object",
635
+ "properties": {
636
+ "from": {
637
+ "type": "array",
638
+ "items": {
639
+ "$ref": "#/$defs/skillNameLower"
640
+ },
641
+ "uniqueItems": true,
642
+ "minItems": 2
643
+ },
644
+ "count": {
645
+ "type": "integer"
646
+ }
647
+ },
648
+ "additionalProperties": false
649
+ }
650
+ },
651
+ "additionalProperties": false
652
+ }
653
+ },
654
+ "skillToolLanguageProficiencies": {
655
+ "type": "array",
656
+ "items": {
657
+ "type": "object",
658
+ "properties": {
659
+ "anyLanguage": {
660
+ "type": "integer"
661
+ },
662
+ "anyStandardLanguage": {
663
+ "type": "integer"
664
+ },
665
+ "anyExoticLanguage": {
666
+ "type": "integer"
667
+ },
668
+ "abyssal": {
669
+ "const": true
670
+ },
671
+ "celestial": {
672
+ "const": true
673
+ },
674
+ "common": {
675
+ "const": true
676
+ },
677
+ "common sign language": {
678
+ "const": true
679
+ },
680
+ "deep speech": {
681
+ "const": true
682
+ },
683
+ "draconic": {
684
+ "const": true
685
+ },
686
+ "infernal": {
687
+ "const": true
688
+ },
689
+ "gith": {
690
+ "const": true
691
+ },
692
+ "gnomish": {
693
+ "const": true
694
+ },
695
+ "goblin": {
696
+ "const": true
697
+ },
698
+ "halfling": {
699
+ "const": true
700
+ },
701
+ "orc": {
702
+ "const": true
703
+ },
704
+ "primordial": {
705
+ "const": true
706
+ },
707
+ "aquan": {
708
+ "const": true
709
+ },
710
+ "auran": {
711
+ "const": true
712
+ },
713
+ "ignan": {
714
+ "const": true
715
+ },
716
+ "terran": {
717
+ "const": true
718
+ },
719
+ "sylvan": {
720
+ "const": true
721
+ },
722
+ "undercommon": {
723
+ "const": true
724
+ },
725
+ "dwarvish": {
726
+ "const": true
727
+ },
728
+ "elvish": {
729
+ "const": true
730
+ },
731
+ "giant": {
732
+ "const": true
733
+ },
734
+ "other": {
735
+ "const": true
736
+ },
737
+ "druidic": {
738
+ "const": true
739
+ },
740
+ "thieves' cant": {
741
+ "const": true
742
+ },
743
+ "otherLanguage": {
744
+ "const": true
745
+ },
746
+ "anyTool": {
747
+ "type": "integer"
748
+ },
749
+ "anyArtisansTool": {
750
+ "type": "integer"
751
+ },
752
+ "artisan's tools": {
753
+ "const": true
754
+ },
755
+ "alchemist's supplies": {
756
+ "const": true
757
+ },
758
+ "brewer's supplies": {
759
+ "const": true
760
+ },
761
+ "calligrapher's supplies": {
762
+ "const": true
763
+ },
764
+ "carpenter's tools": {
765
+ "const": true
766
+ },
767
+ "cartographer's tools": {
768
+ "const": true
769
+ },
770
+ "cobbler's tools": {
771
+ "const": true
772
+ },
773
+ "cook's utensils": {
774
+ "const": true
775
+ },
776
+ "glassblower's tools": {
777
+ "const": true
778
+ },
779
+ "jeweler's tools": {
780
+ "const": true
781
+ },
782
+ "leatherworker's tools": {
783
+ "const": true
784
+ },
785
+ "mason's tools": {
786
+ "const": true
787
+ },
788
+ "painter's supplies": {
789
+ "const": true
790
+ },
791
+ "potter's tools": {
792
+ "const": true
793
+ },
794
+ "smith's tools": {
795
+ "const": true
796
+ },
797
+ "tinker's tools": {
798
+ "const": true
799
+ },
800
+ "weaver's tools": {
801
+ "const": true
802
+ },
803
+ "woodcarver's tools": {
804
+ "const": true
805
+ },
806
+ "disguise kit": {
807
+ "const": true
808
+ },
809
+ "forgery kit": {
810
+ "const": true
811
+ },
812
+ "gaming set": {
813
+ "const": true
814
+ },
815
+ "dragonchess set": {
816
+ "const": true
817
+ },
818
+ "dice set": {
819
+ "const": true
820
+ },
821
+ "three-dragon ante set": {
822
+ "const": true
823
+ },
824
+ "herbalism kit": {
825
+ "const": true
826
+ },
827
+ "anyMusicalInstrument": {
828
+ "type": "integer"
829
+ },
830
+ "musical instrument": {
831
+ "const": true
832
+ },
833
+ "bagpipes": {
834
+ "const": true
835
+ },
836
+ "drum": {
837
+ "const": true
838
+ },
839
+ "dulcimer": {
840
+ "const": true
841
+ },
842
+ "flute": {
843
+ "const": true
844
+ },
845
+ "horn": {
846
+ "const": true
847
+ },
848
+ "lute": {
849
+ "const": true
850
+ },
851
+ "lyre": {
852
+ "const": true
853
+ },
854
+ "pan flute": {
855
+ "const": true
856
+ },
857
+ "shawm": {
858
+ "const": true
859
+ },
860
+ "viol": {
861
+ "const": true
862
+ },
863
+ "navigator's tools": {
864
+ "const": true
865
+ },
866
+ "thieves' tools": {
867
+ "const": true
868
+ },
869
+ "poisoner's kit": {
870
+ "const": true
871
+ },
872
+ "vehicles": {
873
+ "const": true
874
+ },
875
+ "vehicles (air)": {
876
+ "const": true
877
+ },
878
+ "vehicles (land)": {
879
+ "const": true
880
+ },
881
+ "vehicles (water)": {
882
+ "const": true
883
+ },
884
+ "vehicles (space)": {
885
+ "const": true
886
+ },
887
+ "anySkill": {
888
+ "type": "integer"
889
+ },
890
+ "athletics": {
891
+ "const": true
892
+ },
893
+ "acrobatics": {
894
+ "const": true
895
+ },
896
+ "sleight of hand": {
897
+ "const": true
898
+ },
899
+ "stealth": {
900
+ "const": true
901
+ },
902
+ "arcana": {
903
+ "const": true
904
+ },
905
+ "history": {
906
+ "const": true
907
+ },
908
+ "investigation": {
909
+ "const": true
910
+ },
911
+ "nature": {
912
+ "const": true
913
+ },
914
+ "religion": {
915
+ "const": true
916
+ },
917
+ "animal handling": {
918
+ "const": true
919
+ },
920
+ "insight": {
921
+ "const": true
922
+ },
923
+ "medicine": {
924
+ "const": true
925
+ },
926
+ "perception": {
927
+ "const": true
928
+ },
929
+ "survival": {
930
+ "const": true
931
+ },
932
+ "deception": {
933
+ "const": true
934
+ },
935
+ "intimidation": {
936
+ "const": true
937
+ },
938
+ "performance": {
939
+ "const": true
940
+ },
941
+ "persuasion": {
942
+ "const": true
943
+ },
944
+ "choose": {
945
+ "type": "array",
946
+ "items": {
947
+ "oneOf": [
948
+ {
949
+ "type": "object",
950
+ "properties": {
951
+ "from": {
952
+ "type": "array",
953
+ "items": {
954
+ "anyOf": [
955
+ {
956
+ "$ref": "#/$defs/languageNameLower"
957
+ },
958
+ {
959
+ "$ref": "#/$defs/toolNameLower"
960
+ },
961
+ {
962
+ "$ref": "#/$defs/skillNameLower"
963
+ },
964
+ {
965
+ "type": "string",
966
+ "enum": [
967
+ "anySkill",
968
+ "anyTool",
969
+ "anyArtisansTool",
970
+ "anyMusicalInstrument",
971
+ "anyLanguage",
972
+ "anyStandardLanguage",
973
+ "anyExoticLanguage"
974
+ ]
975
+ }
976
+ ]
977
+ },
978
+ "minItems": 2
979
+ },
980
+ "count": {
981
+ "type": "integer"
982
+ }
983
+ },
984
+ "required": [
985
+ "from"
986
+ ],
987
+ "additionalProperties": false
988
+ },
989
+ {
990
+ "type": "object",
991
+ "properties": {
992
+ "fromFilter": {
993
+ "type": "string"
994
+ },
995
+ "count": {
996
+ "type": "integer"
997
+ },
998
+ "type": {
999
+ "type": "string",
1000
+ "enum": [
1001
+ "weapon",
1002
+ "armor",
1003
+ "skill",
1004
+ "tool",
1005
+ "language",
1006
+ "savingThrow"
1007
+ ]
1008
+ }
1009
+ },
1010
+ "required": [
1011
+ "fromFilter",
1012
+ "type"
1013
+ ],
1014
+ "additionalProperties": false
1015
+ }
1016
+ ]
1017
+ },
1018
+ "uniqueItems": true,
1019
+ "minItems": 1
1020
+ }
1021
+ },
1022
+ "additionalProperties": false
1023
+ },
1024
+ "uniqueItems": true,
1025
+ "minItems": 1
1026
+ },
1027
+ "weaponProficiencies": {
1028
+ "type": "array",
1029
+ "items": {
1030
+ "type": "object",
1031
+ "properties": {
1032
+ "simple": {
1033
+ "const": true
1034
+ },
1035
+ "martial": {
1036
+ "const": true
1037
+ },
1038
+ "firearms": {
1039
+ "const": true
1040
+ },
1041
+ "battleaxe|phb": {
1042
+ "const": true
1043
+ },
1044
+ "club|phb": {
1045
+ "const": true
1046
+ },
1047
+ "dagger|phb": {
1048
+ "const": true
1049
+ },
1050
+ "flail|phb": {
1051
+ "const": true
1052
+ },
1053
+ "glaive|phb": {
1054
+ "const": true
1055
+ },
1056
+ "greataxe|phb": {
1057
+ "const": true
1058
+ },
1059
+ "greatclub|phb": {
1060
+ "const": true
1061
+ },
1062
+ "greatsword|phb": {
1063
+ "const": true
1064
+ },
1065
+ "halberd|phb": {
1066
+ "const": true
1067
+ },
1068
+ "handaxe|phb": {
1069
+ "const": true
1070
+ },
1071
+ "javelin|phb": {
1072
+ "const": true
1073
+ },
1074
+ "lance|phb": {
1075
+ "const": true
1076
+ },
1077
+ "light hammer|phb": {
1078
+ "const": true
1079
+ },
1080
+ "longsword|phb": {
1081
+ "const": true
1082
+ },
1083
+ "mace|phb": {
1084
+ "const": true
1085
+ },
1086
+ "maul|phb": {
1087
+ "const": true
1088
+ },
1089
+ "morningstar|phb": {
1090
+ "const": true
1091
+ },
1092
+ "pike|phb": {
1093
+ "const": true
1094
+ },
1095
+ "quarterstaff|phb": {
1096
+ "const": true
1097
+ },
1098
+ "rapier|phb": {
1099
+ "const": true
1100
+ },
1101
+ "scimitar|phb": {
1102
+ "const": true
1103
+ },
1104
+ "shortsword|phb": {
1105
+ "const": true
1106
+ },
1107
+ "sickle|phb": {
1108
+ "const": true
1109
+ },
1110
+ "spear|phb": {
1111
+ "const": true
1112
+ },
1113
+ "staff|phb": {
1114
+ "const": true
1115
+ },
1116
+ "trident|phb": {
1117
+ "const": true
1118
+ },
1119
+ "war pick|phb": {
1120
+ "const": true
1121
+ },
1122
+ "warhammer|phb": {
1123
+ "const": true
1124
+ },
1125
+ "whip|phb": {
1126
+ "const": true
1127
+ },
1128
+ "blowgun|phb": {
1129
+ "const": true
1130
+ },
1131
+ "dart|phb": {
1132
+ "const": true
1133
+ },
1134
+ "hand crossbow|phb": {
1135
+ "const": true
1136
+ },
1137
+ "heavy crossbow|phb": {
1138
+ "const": true
1139
+ },
1140
+ "light crossbow|phb": {
1141
+ "const": true
1142
+ },
1143
+ "longbow|phb": {
1144
+ "const": true
1145
+ },
1146
+ "net|phb": {
1147
+ "const": true
1148
+ },
1149
+ "shortbow|phb": {
1150
+ "const": true
1151
+ },
1152
+ "sling|phb": {
1153
+ "const": true
1154
+ },
1155
+ "double-bladed scimitar|erlw": {
1156
+ "const": true
1157
+ },
1158
+ "choose": {
1159
+ "type": "object",
1160
+ "properties": {
1161
+ "fromFilter": {
1162
+ "description": "A filter string, e.g. \"type=martial weapon|miscellaneous=mundane\"",
1163
+ "type": "string"
1164
+ },
1165
+ "count": {
1166
+ "type": "integer"
1167
+ }
1168
+ },
1169
+ "required": [
1170
+ "fromFilter"
1171
+ ],
1172
+ "additionalProperties": false
1173
+ }
1174
+ },
1175
+ "additionalProperties": false
1176
+ },
1177
+ "uniqueItems": true,
1178
+ "minItems": 1
1179
+ },
1180
+ "armorProficiencies": {
1181
+ "type": "array",
1182
+ "items": {
1183
+ "type": "object",
1184
+ "properties": {
1185
+ "light": {
1186
+ "const": true
1187
+ },
1188
+ "medium": {
1189
+ "const": true
1190
+ },
1191
+ "heavy": {
1192
+ "const": true
1193
+ },
1194
+ "shield|phb": {
1195
+ "const": true
1196
+ }
1197
+ },
1198
+ "additionalProperties": false
1199
+ },
1200
+ "uniqueItems": true,
1201
+ "minItems": 1
1202
+ },
1203
+ "savingThrowProficiencies": {
1204
+ "type": "array",
1205
+ "items": {
1206
+ "type": "object",
1207
+ "properties": {
1208
+ "str": {
1209
+ "const": true
1210
+ },
1211
+ "dex": {
1212
+ "const": true
1213
+ },
1214
+ "con": {
1215
+ "const": true
1216
+ },
1217
+ "int": {
1218
+ "const": true
1219
+ },
1220
+ "wis": {
1221
+ "const": true
1222
+ },
1223
+ "cha": {
1224
+ "const": true
1225
+ },
1226
+ "choose": {
1227
+ "type": "object",
1228
+ "properties": {
1229
+ "from": {
1230
+ "type": "array",
1231
+ "items": {
1232
+ "enum": [
1233
+ "str",
1234
+ "dex",
1235
+ "con",
1236
+ "int",
1237
+ "wis",
1238
+ "cha"
1239
+ ]
1240
+ },
1241
+ "uniqueItems": true,
1242
+ "minItems": 2
1243
+ },
1244
+ "count": {
1245
+ "type": "integer"
1246
+ }
1247
+ },
1248
+ "required": [
1249
+ "from"
1250
+ ],
1251
+ "additionalProperties": false
1252
+ }
1253
+ },
1254
+ "additionalProperties": false
1255
+ },
1256
+ "uniqueItems": true,
1257
+ "minItems": 1
1258
+ },
1259
+ "expertise": {
1260
+ "type": "array",
1261
+ "items": {
1262
+ "type": "object",
1263
+ "properties": {
1264
+ "anyProficientSkill": {
1265
+ "type": "number"
1266
+ },
1267
+ "athletics": {
1268
+ "const": true
1269
+ },
1270
+ "acrobatics": {
1271
+ "const": true
1272
+ },
1273
+ "sleight of hand": {
1274
+ "const": true
1275
+ },
1276
+ "stealth": {
1277
+ "const": true
1278
+ },
1279
+ "arcana": {
1280
+ "const": true
1281
+ },
1282
+ "history": {
1283
+ "const": true
1284
+ },
1285
+ "investigation": {
1286
+ "const": true
1287
+ },
1288
+ "nature": {
1289
+ "const": true
1290
+ },
1291
+ "religion": {
1292
+ "const": true
1293
+ },
1294
+ "animal handling": {
1295
+ "const": true
1296
+ },
1297
+ "insight": {
1298
+ "const": true
1299
+ },
1300
+ "medicine": {
1301
+ "const": true
1302
+ },
1303
+ "perception": {
1304
+ "const": true
1305
+ },
1306
+ "survival": {
1307
+ "const": true
1308
+ },
1309
+ "deception": {
1310
+ "const": true
1311
+ },
1312
+ "intimidation": {
1313
+ "const": true
1314
+ },
1315
+ "performance": {
1316
+ "const": true
1317
+ },
1318
+ "persuasion": {
1319
+ "const": true
1320
+ },
1321
+ "anyProficientTool": {
1322
+ "type": "number"
1323
+ },
1324
+ "artisan's tools": {
1325
+ "const": true
1326
+ },
1327
+ "alchemist's supplies": {
1328
+ "const": true
1329
+ },
1330
+ "brewer's supplies": {
1331
+ "const": true
1332
+ },
1333
+ "calligrapher's supplies": {
1334
+ "const": true
1335
+ },
1336
+ "carpenter's tools": {
1337
+ "const": true
1338
+ },
1339
+ "cartographer's tools": {
1340
+ "const": true
1341
+ },
1342
+ "cobbler's tools": {
1343
+ "const": true
1344
+ },
1345
+ "cook's utensils": {
1346
+ "const": true
1347
+ },
1348
+ "glassblower's tools": {
1349
+ "const": true
1350
+ },
1351
+ "jeweler's tools": {
1352
+ "const": true
1353
+ },
1354
+ "leatherworker's tools": {
1355
+ "const": true
1356
+ },
1357
+ "mason's tools": {
1358
+ "const": true
1359
+ },
1360
+ "painter's supplies": {
1361
+ "const": true
1362
+ },
1363
+ "potter's tools": {
1364
+ "const": true
1365
+ },
1366
+ "smith's tools": {
1367
+ "const": true
1368
+ },
1369
+ "tinker's tools": {
1370
+ "const": true
1371
+ },
1372
+ "weaver's tools": {
1373
+ "const": true
1374
+ },
1375
+ "woodcarver's tools": {
1376
+ "const": true
1377
+ },
1378
+ "disguise kit": {
1379
+ "const": true
1380
+ },
1381
+ "forgery kit": {
1382
+ "const": true
1383
+ },
1384
+ "gaming set": {
1385
+ "const": true
1386
+ },
1387
+ "dragonchess set": {
1388
+ "const": true
1389
+ },
1390
+ "dice set": {
1391
+ "const": true
1392
+ },
1393
+ "three-dragon ante set": {
1394
+ "const": true
1395
+ },
1396
+ "herbalism kit": {
1397
+ "const": true
1398
+ },
1399
+ "musical instrument": {
1400
+ "const": true
1401
+ },
1402
+ "bagpipes": {
1403
+ "const": true
1404
+ },
1405
+ "drum": {
1406
+ "const": true
1407
+ },
1408
+ "dulcimer": {
1409
+ "const": true
1410
+ },
1411
+ "flute": {
1412
+ "const": true
1413
+ },
1414
+ "horn": {
1415
+ "const": true
1416
+ },
1417
+ "lute": {
1418
+ "const": true
1419
+ },
1420
+ "lyre": {
1421
+ "const": true
1422
+ },
1423
+ "pan flute": {
1424
+ "const": true
1425
+ },
1426
+ "shawm": {
1427
+ "const": true
1428
+ },
1429
+ "viol": {
1430
+ "const": true
1431
+ },
1432
+ "navigator's tools": {
1433
+ "const": true
1434
+ },
1435
+ "thieves' tools": {
1436
+ "const": true
1437
+ },
1438
+ "vehicles": {
1439
+ "const": true
1440
+ },
1441
+ "vehicles (air)": {
1442
+ "const": true
1443
+ },
1444
+ "vehicles (land)": {
1445
+ "const": true
1446
+ },
1447
+ "vehicles (water)": {
1448
+ "const": true
1449
+ },
1450
+ "vehicles (space)": {
1451
+ "const": true
1452
+ },
1453
+ "poisoner's kit": {
1454
+ "const": true
1455
+ }
1456
+ }
1457
+ },
1458
+ "uniqueItems": true,
1459
+ "minItems": 1
1460
+ },
1461
+ "abilityScores": {
1462
+ "type": "array",
1463
+ "minItems": 1,
1464
+ "items": {
1465
+ "type": "object",
1466
+ "properties": {
1467
+ "str": {
1468
+ "type": "integer"
1469
+ },
1470
+ "dex": {
1471
+ "type": "integer"
1472
+ },
1473
+ "con": {
1474
+ "type": "integer"
1475
+ },
1476
+ "int": {
1477
+ "type": "integer"
1478
+ },
1479
+ "wis": {
1480
+ "type": "integer"
1481
+ },
1482
+ "cha": {
1483
+ "type": "integer"
1484
+ },
1485
+ "choose": {
1486
+ "type": "object",
1487
+ "properties": {
1488
+ "from": {
1489
+ "type": "array",
1490
+ "items": {
1491
+ "enum": [
1492
+ "str",
1493
+ "dex",
1494
+ "con",
1495
+ "int",
1496
+ "wis",
1497
+ "cha"
1498
+ ]
1499
+ },
1500
+ "uniqueItems": true,
1501
+ "minItems": 1
1502
+ },
1503
+ "count": {
1504
+ "type": "integer"
1505
+ },
1506
+ "amount": {
1507
+ "type": "integer"
1508
+ },
1509
+ "weighted": {
1510
+ "type": "object",
1511
+ "properties": {
1512
+ "from": {
1513
+ "type": "array",
1514
+ "items": {
1515
+ "enum": [
1516
+ "str",
1517
+ "dex",
1518
+ "con",
1519
+ "int",
1520
+ "wis",
1521
+ "cha"
1522
+ ]
1523
+ },
1524
+ "uniqueItems": true,
1525
+ "minItems": 1
1526
+ },
1527
+ "weights": {
1528
+ "type": "array",
1529
+ "items": {
1530
+ "type": "integer"
1531
+ },
1532
+ "minItems": 1
1533
+ }
1534
+ }
1535
+ },
1536
+ "entry": {
1537
+ "$ref": "entry.json"
1538
+ }
1539
+ },
1540
+ "additionalProperties": false
1541
+ },
1542
+ "hidden": {
1543
+ "type": "boolean"
1544
+ },
1545
+ "max": {
1546
+ "description": "The max ability score this ASI allows (otherwise assumed to be 20).",
1547
+ "type": "integer"
1548
+ }
1549
+ },
1550
+ "additionalProperties": false
1551
+ }
1552
+ },
1553
+ "additionalFeatsArray": {
1554
+ "type": "array",
1555
+ "items": {
1556
+ "type": "object",
1557
+ "properties": {
1558
+ "any": {
1559
+ "type": "integer"
1560
+ }
1561
+ },
1562
+ "additionalProperties": true
1563
+ },
1564
+ "uniqueItems": true,
1565
+ "minItems": 1
1566
+ },
1567
+ "proficiencyTag": {
1568
+ "type": "string",
1569
+ "enum": [
1570
+ "Skill Proficiency",
1571
+ "Armor Proficiency",
1572
+ "Weapon Proficiency",
1573
+ "Tool Proficiency",
1574
+ "Language Proficiency"
1575
+ ]
1576
+ },
1577
+ "_speedVal": {
1578
+ "oneOf": [
1579
+ {
1580
+ "type": "object",
1581
+ "properties": {
1582
+ "number": {
1583
+ "type": "integer"
1584
+ },
1585
+ "condition": {
1586
+ "type": "string"
1587
+ }
1588
+ },
1589
+ "required": [
1590
+ "number",
1591
+ "condition"
1592
+ ],
1593
+ "additionalProperties": false
1594
+ },
1595
+ {
1596
+ "type": "integer"
1597
+ },
1598
+ {
1599
+ "const": true
1600
+ }
1601
+ ]
1602
+ },
1603
+ "_speedMode": {
1604
+ "type": "string",
1605
+ "enum": [
1606
+ "walk",
1607
+ "burrow",
1608
+ "climb",
1609
+ "fly",
1610
+ "swim"
1611
+ ]
1612
+ },
1613
+ "speed": {
1614
+ "oneOf": [
1615
+ {
1616
+ "type": "object",
1617
+ "properties": {
1618
+ "walk": {
1619
+ "$ref": "#/$defs/_speedVal"
1620
+ },
1621
+ "burrow": {
1622
+ "$ref": "#/$defs/_speedVal"
1623
+ },
1624
+ "climb": {
1625
+ "$ref": "#/$defs/_speedVal"
1626
+ },
1627
+ "fly": {
1628
+ "$ref": "#/$defs/_speedVal"
1629
+ },
1630
+ "canHover": {
1631
+ "const": true
1632
+ },
1633
+ "swim": {
1634
+ "$ref": "#/$defs/_speedVal"
1635
+ },
1636
+ "choose": {
1637
+ "type": "object",
1638
+ "properties": {
1639
+ "from": {
1640
+ "type": "array",
1641
+ "items": {
1642
+ "$ref": "#/$defs/_speedMode"
1643
+ },
1644
+ "uniqueItems": true,
1645
+ "minItems": 2
1646
+ },
1647
+ "amount": {
1648
+ "type": "integer"
1649
+ },
1650
+ "note": {
1651
+ "type": "string"
1652
+ }
1653
+ },
1654
+ "required": [
1655
+ "amount",
1656
+ "from"
1657
+ ],
1658
+ "additionalProperties": false
1659
+ },
1660
+ "alternate": {
1661
+ "type": "object",
1662
+ "properties": {
1663
+ "walk": {
1664
+ "type": "array",
1665
+ "items": {
1666
+ "$ref": "#/$defs/_speedVal"
1667
+ },
1668
+ "uniqueItems": true
1669
+ },
1670
+ "burrow": {
1671
+ "type": "array",
1672
+ "items": {
1673
+ "$ref": "#/$defs/_speedVal"
1674
+ },
1675
+ "uniqueItems": true
1676
+ },
1677
+ "climb": {
1678
+ "type": "array",
1679
+ "items": {
1680
+ "$ref": "#/$defs/_speedVal"
1681
+ },
1682
+ "uniqueItems": true
1683
+ },
1684
+ "fly": {
1685
+ "type": "array",
1686
+ "items": {
1687
+ "$ref": "#/$defs/_speedVal"
1688
+ },
1689
+ "uniqueItems": true
1690
+ },
1691
+ "swim": {
1692
+ "type": "array",
1693
+ "items": {
1694
+ "$ref": "#/$defs/_speedVal"
1695
+ },
1696
+ "uniqueItems": true
1697
+ }
1698
+ }
1699
+ },
1700
+ "hidden": {
1701
+ "type": "array",
1702
+ "items": {
1703
+ "$ref": "#/$defs/_speedMode"
1704
+ },
1705
+ "uniqueItems": true,
1706
+ "minItems": 1
1707
+ }
1708
+ },
1709
+ "additionalProperties": false
1710
+ },
1711
+ {
1712
+ "type": "integer"
1713
+ },
1714
+ {
1715
+ "const": "Varies"
1716
+ }
1717
+ ]
1718
+ },
1719
+ "rarity": {
1720
+ "type": "string",
1721
+ "enum": [
1722
+ "rare",
1723
+ "uncommon",
1724
+ "very rare",
1725
+ "legendary",
1726
+ "artifact",
1727
+ "common"
1728
+ ]
1729
+ },
1730
+ "prerequisite": {
1731
+ "type": "array",
1732
+ "minItems": 1,
1733
+ "items": {
1734
+ "type": "object",
1735
+ "properties": {
1736
+ "level": {
1737
+ "oneOf": [
1738
+ {
1739
+ "type": "object",
1740
+ "properties": {
1741
+ "level": {
1742
+ "type": "integer"
1743
+ },
1744
+ "class": {
1745
+ "type": "object",
1746
+ "properties": {
1747
+ "name": {
1748
+ "type": "string"
1749
+ },
1750
+ "source": {
1751
+ "$ref": "util.json#/$defs/source"
1752
+ },
1753
+ "visible": {
1754
+ "description": "Governs whether or not the class name is visible in the list display/prerequisite line. *Not* recommended for features which implicitly carry a class restriction, such as Eldritch Invocations.",
1755
+ "const": true
1756
+ }
1757
+ },
1758
+ "required": [
1759
+ "name"
1760
+ ],
1761
+ "additionalProperties": false
1762
+ },
1763
+ "subclass": {
1764
+ "type": "object",
1765
+ "properties": {
1766
+ "name": {
1767
+ "type": "string"
1768
+ },
1769
+ "source": {
1770
+ "$ref": "util.json#/$defs/source"
1771
+ },
1772
+ "visible": {
1773
+ "description": "Governs whether or not the class name is visible in the list display/prerequisite line. *Not* recommended for features which implicitly carry a class restriction, such as Eldritch Invocations.",
1774
+ "const": true
1775
+ }
1776
+ },
1777
+ "required": [
1778
+ "name"
1779
+ ],
1780
+ "additionalProperties": false
1781
+ }
1782
+ },
1783
+ "required": [
1784
+ "level"
1785
+ ],
1786
+ "additionalProperties": false
1787
+ },
1788
+ {
1789
+ "type": "integer",
1790
+ "minimum": 1
1791
+ }
1792
+ ]
1793
+ },
1794
+ "pact": {
1795
+ "type": "string",
1796
+ "enum": [
1797
+ "Chain",
1798
+ "Tome",
1799
+ "Blade",
1800
+ "Talisman"
1801
+ ]
1802
+ },
1803
+ "patron": {
1804
+ "type": "string",
1805
+ "enum": [
1806
+ "The Archfey",
1807
+ "The Fiend",
1808
+ "The Great Old One",
1809
+ "The Hexblade",
1810
+ "The Raven Queen",
1811
+ "The Seeker"
1812
+ ]
1813
+ },
1814
+ "spell": {
1815
+ "type": "array",
1816
+ "items": {
1817
+ "$ref": "entry.json"
1818
+ }
1819
+ },
1820
+ "feat": {
1821
+ "type": "array",
1822
+ "items": {
1823
+ "$ref": "entry.json"
1824
+ }
1825
+ },
1826
+ "feature": {
1827
+ "type": "array",
1828
+ "items": {
1829
+ "$ref": "entry.json"
1830
+ }
1831
+ },
1832
+ "item": {
1833
+ "type": "array",
1834
+ "items": {
1835
+ "$ref": "entry.json"
1836
+ }
1837
+ },
1838
+ "itemType": {
1839
+ "type": "array",
1840
+ "items": {
1841
+ "$ref": "items-shared.json#/$defs/itemType"
1842
+ }
1843
+ },
1844
+ "itemProperty": {
1845
+ "oneOf": [
1846
+ {
1847
+ "$ref": "items-shared.json#/$defs/itemProperty"
1848
+ },
1849
+ {
1850
+ "type": "null"
1851
+ }
1852
+ ]
1853
+ },
1854
+ "other": {
1855
+ "description": "A free text prerequisite",
1856
+ "type": "string"
1857
+ },
1858
+ "otherSummary": {
1859
+ "description": "A free text prerequisite, with a shortened form for list display.",
1860
+ "type": "object",
1861
+ "properties": {
1862
+ "entry": {
1863
+ "type": "string"
1864
+ },
1865
+ "entrySummary": {
1866
+ "description": "Used in short/list displays",
1867
+ "type": "string"
1868
+ }
1869
+ },
1870
+ "required": [
1871
+ "entry",
1872
+ "entrySummary"
1873
+ ]
1874
+ },
1875
+ "race": {
1876
+ "type": "array",
1877
+ "items": {
1878
+ "type": "object",
1879
+ "properties": {
1880
+ "name": {
1881
+ "type": "string"
1882
+ },
1883
+ "displayEntry": {
1884
+ "description": "Optional long-form name to be used in the rendered entity.",
1885
+ "type": "string"
1886
+ },
1887
+ "subrace": {
1888
+ "type": "string"
1889
+ }
1890
+ },
1891
+ "required": [
1892
+ "name"
1893
+ ],
1894
+ "additionalProperties": false
1895
+ }
1896
+ },
1897
+ "background": {
1898
+ "type": "array",
1899
+ "items": {
1900
+ "type": "object",
1901
+ "properties": {
1902
+ "name": {
1903
+ "type": "string"
1904
+ },
1905
+ "displayEntry": {
1906
+ "description": "Optional long-form name to be used in the rendered entity.",
1907
+ "type": "string"
1908
+ }
1909
+ },
1910
+ "required": [
1911
+ "name"
1912
+ ],
1913
+ "additionalProperties": false
1914
+ }
1915
+ },
1916
+ "ability": {
1917
+ "type": "array",
1918
+ "items": {
1919
+ "type": "object",
1920
+ "properties": {
1921
+ "str": {
1922
+ "type": "integer"
1923
+ },
1924
+ "dex": {
1925
+ "type": "integer"
1926
+ },
1927
+ "con": {
1928
+ "type": "integer"
1929
+ },
1930
+ "int": {
1931
+ "type": "integer"
1932
+ },
1933
+ "wis": {
1934
+ "type": "integer"
1935
+ },
1936
+ "cha": {
1937
+ "type": "integer"
1938
+ }
1939
+ },
1940
+ "additionalProperties": false
1941
+ }
1942
+ },
1943
+ "spellcasting": {
1944
+ "const": true
1945
+ },
1946
+ "spellcasting2020": {
1947
+ "description": "Renders with the updated text found in UA2020: Feats",
1948
+ "const": true
1949
+ },
1950
+ "psionics": {
1951
+ "const": true
1952
+ },
1953
+ "proficiency": {
1954
+ "type": "array",
1955
+ "items": {
1956
+ "type": "object",
1957
+ "properties": {
1958
+ "armor": {
1959
+ "type": "string",
1960
+ "enum": [
1961
+ "light",
1962
+ "medium",
1963
+ "heavy"
1964
+ ]
1965
+ },
1966
+ "weapon": {
1967
+ "type": "string",
1968
+ "enum": [
1969
+ "simple",
1970
+ "martial"
1971
+ ]
1972
+ }
1973
+ },
1974
+ "additionalProperties": false
1975
+ }
1976
+ },
1977
+ "alignment": {
1978
+ "type": "array",
1979
+ "items": {
1980
+ "$ref": "util.json#/$defs/alignment"
1981
+ }
1982
+ },
1983
+ "campaign": {
1984
+ "type": "array",
1985
+ "items": {
1986
+ "type": "string",
1987
+ "enum": [
1988
+ "Dragonlance"
1989
+ ]
1990
+ }
1991
+ },
1992
+ "group": {
1993
+ "type": "array",
1994
+ "items": {
1995
+ "type": "string",
1996
+ "enum": [
1997
+ "expert",
1998
+ "mage",
1999
+ "priest",
2000
+ "warrior"
2001
+ ]
2002
+ }
2003
+ },
2004
+ "note": {
2005
+ "description": "An additional note that accompanies the proficiencies, but is not part of them.",
2006
+ "type": "string"
2007
+ }
2008
+ },
2009
+ "additionalProperties": false
2010
+ }
2011
+ },
2012
+ "creatureType": {
2013
+ "type": "string",
2014
+ "examples": [
2015
+ "aberration",
2016
+ "beast",
2017
+ "celestial",
2018
+ "construct",
2019
+ "dragon",
2020
+ "elemental",
2021
+ "fey",
2022
+ "fiend",
2023
+ "giant",
2024
+ "humanoid",
2025
+ "monstrosity",
2026
+ "ooze",
2027
+ "plant",
2028
+ "undead"
2029
+ ]
2030
+ },
2031
+ "alignment": {
2032
+ "type": "string",
2033
+ "description": "L: Lawful\n N: Neutral\n NX: Neutral (law/chaos axis)\n NY: Neutral (good/evil axis)\n C: Chaotic\n G: Good\n E: Evil\n U: Unaligned\n A: Any",
2034
+ "enum": [
2035
+ "L",
2036
+ "N",
2037
+ "NX",
2038
+ "NY",
2039
+ "C",
2040
+ "G",
2041
+ "E",
2042
+ "U",
2043
+ "A"
2044
+ ]
2045
+ },
2046
+ "size": {
2047
+ "type": "string",
2048
+ "description": "F: Fine\n D: Diminutive\n T: Tiny\n S: Small\n M: Medium\n L: Large\n H: Huge\n G: Gargantuan\n C: Colossal\n V: Varies.",
2049
+ "enum": [
2050
+ "T",
2051
+ "S",
2052
+ "M",
2053
+ "L",
2054
+ "H",
2055
+ "G",
2056
+ "V"
2057
+ ]
2058
+ },
2059
+ "dataCondition": {
2060
+ "type": "string",
2061
+ "enum": [
2062
+ "blinded",
2063
+ "charmed",
2064
+ "deafened",
2065
+ "exhaustion",
2066
+ "frightened",
2067
+ "grappled",
2068
+ "incapacitated",
2069
+ "invisible",
2070
+ "paralyzed",
2071
+ "petrified",
2072
+ "poisoned",
2073
+ "prone",
2074
+ "restrained",
2075
+ "stunned",
2076
+ "unconscious",
2077
+ "disease"
2078
+ ]
2079
+ },
2080
+ "dataDamageType": {
2081
+ "type": "string",
2082
+ "enum": [
2083
+ "acid",
2084
+ "bludgeoning",
2085
+ "cold",
2086
+ "fire",
2087
+ "force",
2088
+ "lightning",
2089
+ "necrotic",
2090
+ "piercing",
2091
+ "poison",
2092
+ "psychic",
2093
+ "radiant",
2094
+ "slashing",
2095
+ "thunder"
2096
+ ]
2097
+ },
2098
+ "dataOptionalfeatureType": {
2099
+ "type": "string",
2100
+ "description": "AF: Alchemical Formula\n AI: Artificer Infusion\n AS: Arcane Shot\n AS:V1-UA: Arcane Shot, V1 (UA)\n AS:V2-UA: Arcane Shot, V2 (UA)\n ED: Elemental Discipline\n EI: Eldritch Invocation\n FS:B: Fighting Style; Bard\n FS:F: Fighting Style; Fighter\n FS:P: Fighting Style; Paladin\n FS:R: Fighting Style; Ranger\n IWM:A: Infernal War Machine Upgrade, Armor\n IWM:G: Infernal War Machine Upgrade, Gadget\n IWM:W: Infernal War Machine Variant, Weapon\n MM: Metamagic\n MV: Maneuver\n MV:B: Maneuver, Battle Master\n MV:C2-UA: Maneuver, Cavalier V2 (UA)\n OR: Onomancy Resonant\n OTH: Other\n PB: Pact Boon\n RN: Rune Knight Rune\n SHP:F: Ship Upgrade, Figurehead\n SHP:H: Ship Upgrade, Hull\n SHP:M: Ship Upgrade, Movement\n SHP:O: Ship Upgrade, Miscellaneous\n SHP:W: Ship Upgrade, Weapon",
2101
+ "enum": [
2102
+ "ED",
2103
+ "EI",
2104
+ "MM",
2105
+ "MV",
2106
+ "MV:B",
2107
+ "OTH",
2108
+ "FS:F",
2109
+ "FS:B",
2110
+ "FS:R",
2111
+ "FS:P",
2112
+ "MV:C2-UA",
2113
+ "AS:V1-UA",
2114
+ "AS:V2-UA",
2115
+ "AS",
2116
+ "PB",
2117
+ "AI",
2118
+ "SHP:H",
2119
+ "SHP:M",
2120
+ "SHP:W",
2121
+ "SHP:F",
2122
+ "SHP:O",
2123
+ "IWM:W",
2124
+ "IWM:A",
2125
+ "IWM:G",
2126
+ "OR",
2127
+ "RN",
2128
+ "AF"
2129
+ ]
2130
+ },
2131
+ "damageImmunityArray": {
2132
+ "oneOf": [
2133
+ {
2134
+ "type": "array",
2135
+ "items": {
2136
+ "oneOf": [
2137
+ {
2138
+ "$ref": "#/$defs/dataDamageType"
2139
+ },
2140
+ {
2141
+ "type": "object",
2142
+ "properties": {
2143
+ "special": {
2144
+ "type": "string"
2145
+ }
2146
+ },
2147
+ "additionalProperties": false,
2148
+ "required": [
2149
+ "special"
2150
+ ]
2151
+ },
2152
+ {
2153
+ "type": "object",
2154
+ "properties": {
2155
+ "preNote": {
2156
+ "type": "string"
2157
+ },
2158
+ "immune": {
2159
+ "$ref": "#/$defs/damageImmunityArray"
2160
+ },
2161
+ "note": {
2162
+ "type": "string"
2163
+ },
2164
+ "cond": {
2165
+ "const": true
2166
+ }
2167
+ },
2168
+ "additionalProperties": false,
2169
+ "required": [
2170
+ "immune"
2171
+ ]
2172
+ }
2173
+ ]
2174
+ },
2175
+ "uniqueItems": true,
2176
+ "minItems": 1
2177
+ },
2178
+ {
2179
+ "type": "null"
2180
+ }
2181
+ ]
2182
+ },
2183
+ "damageImmunityArrayPlayer": {
2184
+ "type": "array",
2185
+ "items": {
2186
+ "oneOf": [
2187
+ {
2188
+ "$ref": "#/$defs/dataDamageType"
2189
+ },
2190
+ {
2191
+ "type": "object",
2192
+ "properties": {
2193
+ "choose": {
2194
+ "type": "object",
2195
+ "properties": {
2196
+ "from": {
2197
+ "$ref": "#/$defs/damageImmunityArrayPlayer"
2198
+ },
2199
+ "count": {
2200
+ "type": "integer"
2201
+ }
2202
+ },
2203
+ "additionalProperties": false,
2204
+ "required": [
2205
+ "from"
2206
+ ]
2207
+ }
2208
+ }
2209
+ }
2210
+ ]
2211
+ },
2212
+ "uniqueItems": true
2213
+ },
2214
+ "damageResistArray": {
2215
+ "oneOf": [
2216
+ {
2217
+ "type": "array",
2218
+ "items": {
2219
+ "oneOf": [
2220
+ {
2221
+ "$ref": "#/$defs/dataDamageType"
2222
+ },
2223
+ {
2224
+ "type": "object",
2225
+ "properties": {
2226
+ "special": {
2227
+ "type": "string"
2228
+ }
2229
+ },
2230
+ "additionalProperties": false,
2231
+ "required": [
2232
+ "special"
2233
+ ]
2234
+ },
2235
+ {
2236
+ "type": "object",
2237
+ "properties": {
2238
+ "preNote": {
2239
+ "type": "string"
2240
+ },
2241
+ "resist": {
2242
+ "$ref": "#/$defs/damageResistArray"
2243
+ },
2244
+ "note": {
2245
+ "type": "string"
2246
+ },
2247
+ "cond": {
2248
+ "const": true
2249
+ }
2250
+ },
2251
+ "additionalProperties": false,
2252
+ "required": [
2253
+ "resist"
2254
+ ]
2255
+ }
2256
+ ]
2257
+ },
2258
+ "uniqueItems": true,
2259
+ "minItems": 1
2260
+ },
2261
+ {
2262
+ "type": "null"
2263
+ }
2264
+ ]
2265
+ },
2266
+ "damageResistArrayPlayer": {
2267
+ "type": "array",
2268
+ "items": {
2269
+ "oneOf": [
2270
+ {
2271
+ "$ref": "#/$defs/dataDamageType"
2272
+ },
2273
+ {
2274
+ "type": "object",
2275
+ "properties": {
2276
+ "choose": {
2277
+ "type": "object",
2278
+ "properties": {
2279
+ "from": {
2280
+ "$ref": "#/$defs/damageResistArrayPlayer"
2281
+ },
2282
+ "count": {
2283
+ "type": "integer"
2284
+ }
2285
+ },
2286
+ "additionalProperties": false,
2287
+ "required": [
2288
+ "from"
2289
+ ]
2290
+ }
2291
+ }
2292
+ }
2293
+ ]
2294
+ },
2295
+ "uniqueItems": true,
2296
+ "minItems": 1
2297
+ },
2298
+ "damageVulnerabilityArray": {
2299
+ "oneOf": [
2300
+ {
2301
+ "type": "array",
2302
+ "items": {
2303
+ "oneOf": [
2304
+ {
2305
+ "$ref": "#/$defs/dataDamageType"
2306
+ },
2307
+ {
2308
+ "type": "object",
2309
+ "properties": {
2310
+ "special": {
2311
+ "type": "string"
2312
+ }
2313
+ },
2314
+ "additionalProperties": false,
2315
+ "required": [
2316
+ "special"
2317
+ ]
2318
+ },
2319
+ {
2320
+ "type": "object",
2321
+ "properties": {
2322
+ "preNote": {
2323
+ "type": "string"
2324
+ },
2325
+ "vulnerable": {
2326
+ "$ref": "#/$defs/damageVulnerabilityArray"
2327
+ },
2328
+ "note": {
2329
+ "type": "string"
2330
+ },
2331
+ "cond": {
2332
+ "const": true
2333
+ }
2334
+ },
2335
+ "additionalProperties": false,
2336
+ "required": [
2337
+ "vulnerable"
2338
+ ]
2339
+ }
2340
+ ]
2341
+ },
2342
+ "uniqueItems": true
2343
+ },
2344
+ {
2345
+ "type": "null"
2346
+ }
2347
+ ]
2348
+ },
2349
+ "damageVulnerabilityArrayPlayer": {
2350
+ "type": "array",
2351
+ "items": {
2352
+ "oneOf": [
2353
+ {
2354
+ "$ref": "#/$defs/dataDamageType"
2355
+ },
2356
+ {
2357
+ "type": "object",
2358
+ "properties": {
2359
+ "choose": {
2360
+ "type": "object",
2361
+ "properties": {
2362
+ "from": {
2363
+ "$ref": "#/$defs/damageVulnerabilityArrayPlayer"
2364
+ },
2365
+ "count": {
2366
+ "type": "integer"
2367
+ }
2368
+ },
2369
+ "additionalProperties": false,
2370
+ "required": [
2371
+ "from"
2372
+ ]
2373
+ }
2374
+ }
2375
+ }
2376
+ ]
2377
+ },
2378
+ "uniqueItems": true,
2379
+ "minItems": 1
2380
+ },
2381
+ "conditionImmunityArray": {
2382
+ "oneOf": [
2383
+ {
2384
+ "type": "array",
2385
+ "items": {
2386
+ "oneOf": [
2387
+ {
2388
+ "$ref": "#/$defs/dataCondition"
2389
+ },
2390
+ {
2391
+ "type": "object",
2392
+ "properties": {
2393
+ "special": {
2394
+ "type": "string"
2395
+ }
2396
+ },
2397
+ "additionalProperties": false,
2398
+ "required": [
2399
+ "special"
2400
+ ]
2401
+ },
2402
+ {
2403
+ "type": "object",
2404
+ "properties": {
2405
+ "preNote": {
2406
+ "type": "string"
2407
+ },
2408
+ "conditionImmune": {
2409
+ "$ref": "#/$defs/conditionImmunityArray"
2410
+ },
2411
+ "note": {
2412
+ "type": "string"
2413
+ }
2414
+ },
2415
+ "additionalProperties": false,
2416
+ "required": [
2417
+ "conditionImmune"
2418
+ ]
2419
+ }
2420
+ ]
2421
+ },
2422
+ "uniqueItems": true,
2423
+ "minItems": 1
2424
+ },
2425
+ {
2426
+ "type": "null"
2427
+ }
2428
+ ]
2429
+ },
2430
+ "conditionImmunityArrayPlayer": {
2431
+ "type": "array",
2432
+ "items": {
2433
+ "oneOf": [
2434
+ {
2435
+ "$ref": "#/$defs/dataCondition"
2436
+ },
2437
+ {
2438
+ "type": "object",
2439
+ "properties": {
2440
+ "choose": {
2441
+ "type": "object",
2442
+ "properties": {
2443
+ "from": {
2444
+ "$ref": "#/$defs/conditionImmunityArrayPlayer"
2445
+ },
2446
+ "count": {
2447
+ "type": "integer"
2448
+ }
2449
+ },
2450
+ "additionalProperties": false,
2451
+ "required": [
2452
+ "from"
2453
+ ]
2454
+ }
2455
+ }
2456
+ }
2457
+ ]
2458
+ },
2459
+ "uniqueItems": true,
2460
+ "minItems": 1
2461
+ },
2462
+ "resourcesArray": {
2463
+ "type": "array",
2464
+ "items": {
2465
+ "type": "object",
2466
+ "properties": {
2467
+ "name": {
2468
+ "type": "string"
2469
+ },
2470
+ "type": {
2471
+ "type": "string"
2472
+ },
2473
+ "recharge": {
2474
+ "type": "string"
2475
+ },
2476
+ "count": {
2477
+ "type": [
2478
+ "integer",
2479
+ "string"
2480
+ ]
2481
+ },
2482
+ "number": {
2483
+ "type": [
2484
+ "integer",
2485
+ "string"
2486
+ ]
2487
+ },
2488
+ "faces": {
2489
+ "type": [
2490
+ "integer",
2491
+ "string"
2492
+ ]
2493
+ }
2494
+ },
2495
+ "required": [
2496
+ "name",
2497
+ "type"
2498
+ ]
2499
+ },
2500
+ "uniqueItems": true
2501
+ },
2502
+ "sensesArray": {
2503
+ "type": "array",
2504
+ "items": {
2505
+ "type": "object",
2506
+ "propertyNames": {
2507
+ "enum": [
2508
+ "blindsight",
2509
+ "darkvision",
2510
+ "tremorsense",
2511
+ "truesight"
2512
+ ]
2513
+ },
2514
+ "additionalProperties": {
2515
+ "type": "integer"
2516
+ },
2517
+ "minProperties": 1
2518
+ },
2519
+ "uniqueItems": true
2520
+ },
2521
+ "_consumesObjectBase": {
2522
+ "type": "object",
2523
+ "properties": {
2524
+ "name": {
2525
+ "type": "string",
2526
+ "enum": [
2527
+ "Superiority Die",
2528
+ "Ki",
2529
+ "Channel Divinity",
2530
+ "Psionic Energy Die",
2531
+ "Wild Shape",
2532
+ "Sorcery Point",
2533
+ "Arcane Shot"
2534
+ ]
2535
+ }
2536
+ },
2537
+ "additionalProperties": false
2538
+ },
2539
+ "consumesObject": {
2540
+ "oneOf": [
2541
+ {
2542
+ "type": "object",
2543
+ "properties": {
2544
+ "name": {
2545
+ "type": "string",
2546
+ "enum": [
2547
+ "Superiority Die",
2548
+ "Ki",
2549
+ "Channel Divinity",
2550
+ "Psionic Energy Die",
2551
+ "Wild Shape",
2552
+ "Sorcery Point",
2553
+ "Arcane Shot"
2554
+ ]
2555
+ },
2556
+ "amount": {
2557
+ "type": "integer"
2558
+ }
2559
+ },
2560
+ "additionalProperties": false,
2561
+ "required": [
2562
+ "name"
2563
+ ]
2564
+ },
2565
+ {
2566
+ "type": "object",
2567
+ "properties": {
2568
+ "name": {
2569
+ "type": "string",
2570
+ "enum": [
2571
+ "Superiority Die",
2572
+ "Ki",
2573
+ "Channel Divinity",
2574
+ "Psionic Energy Die",
2575
+ "Wild Shape",
2576
+ "Sorcery Point",
2577
+ "Arcane Shot"
2578
+ ]
2579
+ },
2580
+ "amountMin": {
2581
+ "type": "integer"
2582
+ },
2583
+ "amountMax": {
2584
+ "type": "integer"
2585
+ }
2586
+ },
2587
+ "additionalProperties": false,
2588
+ "required": [
2589
+ "name",
2590
+ "amountMin",
2591
+ "amountMax"
2592
+ ]
2593
+ }
2594
+ ]
2595
+ },
2596
+ "dataDamageTags": {
2597
+ "type": "string",
2598
+ "description": "A: Acid\n B: Bludgeoning\n C: Cold\n F: Fire\n O: Force\n L: Lightning\n N: Necrotic\n P: Piercing\n I: Poison\n Y: Psychic\n R: Radiant\n S: Slashing\n T: Thunder",
2599
+ "enum": [
2600
+ "A",
2601
+ "B",
2602
+ "C",
2603
+ "F",
2604
+ "O",
2605
+ "L",
2606
+ "N",
2607
+ "P",
2608
+ "I",
2609
+ "Y",
2610
+ "R",
2611
+ "S",
2612
+ "T"
2613
+ ]
2614
+ },
2615
+ "spellSchool": {
2616
+ "type": "string",
2617
+ "enum": [
2618
+ "A",
2619
+ "V",
2620
+ "E",
2621
+ "I",
2622
+ "D",
2623
+ "N",
2624
+ "T",
2625
+ "C",
2626
+ "P"
2627
+ ]
2628
+ },
2629
+ "genericFluffArrayItemData": {
2630
+ "type": "object",
2631
+ "properties": {
2632
+ "name": {
2633
+ "type": "string"
2634
+ },
2635
+ "source": {
2636
+ "$ref": "util.json#/$defs/source"
2637
+ },
2638
+ "images": {
2639
+ "oneOf": [
2640
+ {
2641
+ "type": "array",
2642
+ "items": {
2643
+ "$ref": "entry.json#/$defs/entryImage"
2644
+ }
2645
+ },
2646
+ {
2647
+ "type": "null"
2648
+ }
2649
+ ]
2650
+ },
2651
+ "entries": {
2652
+ "type": "array",
2653
+ "items": {
2654
+ "$ref": "entry.json"
2655
+ }
2656
+ }
2657
+ },
2658
+ "additionalProperties": false
2659
+ },
2660
+ "genericFluffArray": {
2661
+ "type": "array",
2662
+ "minItems": 1,
2663
+ "uniqueItems": true,
2664
+ "items": {
2665
+ "anyOf": [
2666
+ {
2667
+ "type": "object",
2668
+ "properties": {
2669
+ "name": {
2670
+ "type": "string"
2671
+ },
2672
+ "source": {
2673
+ "$ref": "util.json#/$defs/source"
2674
+ },
2675
+ "images": {
2676
+ "oneOf": [
2677
+ {
2678
+ "type": "array",
2679
+ "items": {
2680
+ "$ref": "entry.json#/$defs/entryImage"
2681
+ }
2682
+ },
2683
+ {
2684
+ "type": "null"
2685
+ }
2686
+ ]
2687
+ },
2688
+ "entries": {
2689
+ "type": "array",
2690
+ "items": {
2691
+ "$ref": "entry.json"
2692
+ }
2693
+ }
2694
+ },
2695
+ "additionalProperties": false,
2696
+ "required": [
2697
+ "name",
2698
+ "source"
2699
+ ]
2700
+ },
2701
+ {
2702
+ "type": "object",
2703
+ "$comment": "This is a custom pre-processor tag, which merges together the array of objects into one. This allows proper inheritance, which JSON schema don't really do.",
2704
+ "properties": {
2705
+ "name": {
2706
+ "type": "string"
2707
+ },
2708
+ "source": {
2709
+ "$ref": "util.json#/$defs/source"
2710
+ },
2711
+ "images": {
2712
+ "oneOf": [
2713
+ {
2714
+ "type": "array",
2715
+ "items": {
2716
+ "$ref": "entry.json#/$defs/entryImage"
2717
+ }
2718
+ },
2719
+ {
2720
+ "type": "null"
2721
+ }
2722
+ ]
2723
+ },
2724
+ "entries": {
2725
+ "type": "array",
2726
+ "items": {
2727
+ "$ref": "entry.json"
2728
+ }
2729
+ },
2730
+ "_copy": {
2731
+ "type": "object",
2732
+ "properties": {
2733
+ "name": {
2734
+ "type": "string"
2735
+ },
2736
+ "source": {
2737
+ "$ref": "util.json#/$defs/source"
2738
+ },
2739
+ "pantheon": {
2740
+ "description": "Used in deity data",
2741
+ "type": "string"
2742
+ },
2743
+ "shortName": {
2744
+ "description": "Used in subclass data",
2745
+ "type": "string"
2746
+ },
2747
+ "className": {
2748
+ "description": "Used in subclass data",
2749
+ "type": "string"
2750
+ },
2751
+ "classSource": {
2752
+ "description": "Used in subclass data",
2753
+ "$ref": "util.json#/$defs/source"
2754
+ },
2755
+ "_mod": {
2756
+ "$ref": "#/$defs/_modObject"
2757
+ },
2758
+ "_trait": {
2759
+ "type": "object",
2760
+ "properties": {
2761
+ "name": {
2762
+ "type": "string"
2763
+ },
2764
+ "source": {
2765
+ "$ref": "util.json#/$defs/source"
2766
+ }
2767
+ },
2768
+ "required": [
2769
+ "name",
2770
+ "source"
2771
+ ]
2772
+ },
2773
+ "_preserve": {
2774
+ "type": "object",
2775
+ "patternProperties": {
2776
+ ".*": {
2777
+ "const": true
2778
+ }
2779
+ }
2780
+ }
2781
+ },
2782
+ "required": [
2783
+ "name",
2784
+ "source"
2785
+ ],
2786
+ "additionalProperties": false
2787
+ }
2788
+ },
2789
+ "additionalProperties": false,
2790
+ "required": [
2791
+ "_copy"
2792
+ ]
2793
+ }
2794
+ ]
2795
+ }
2796
+ },
2797
+ "tagsConditions": {
2798
+ "type": "array",
2799
+ "uniqueItems": true,
2800
+ "items": {
2801
+ "type": "string",
2802
+ "enum": [
2803
+ "blinded",
2804
+ "charmed",
2805
+ "deafened",
2806
+ "exhaustion",
2807
+ "frightened",
2808
+ "grappled",
2809
+ "incapacitated",
2810
+ "invisible",
2811
+ "paralyzed",
2812
+ "petrified",
2813
+ "poisoned",
2814
+ "prone",
2815
+ "restrained",
2816
+ "stunned",
2817
+ "unconscious"
2818
+ ]
2819
+ }
2820
+ },
2821
+ "tagsSavingThrow": {
2822
+ "type": "array",
2823
+ "minItems": 1,
2824
+ "uniqueItems": true,
2825
+ "items": {
2826
+ "type": "string",
2827
+ "enum": [
2828
+ "strength",
2829
+ "constitution",
2830
+ "dexterity",
2831
+ "intelligence",
2832
+ "wisdom",
2833
+ "charisma"
2834
+ ]
2835
+ }
2836
+ },
2837
+ "copyModifier": {
2838
+ "anyOf": [
2839
+ {
2840
+ "type": "object",
2841
+ "properties": {
2842
+ "mode": {
2843
+ "const": "replaceTxt"
2844
+ },
2845
+ "replace": {
2846
+ "type": "string"
2847
+ },
2848
+ "with": {
2849
+ "type": "string"
2850
+ },
2851
+ "flags": {
2852
+ "type": "string"
2853
+ },
2854
+ "props": {
2855
+ "description": "If unspecified, defaults to `[null, \"entries\", \"headerEntries\", \"footerEntries\"]`. To apply to _any_ string, including those outside of sub-properties (for instance, when trying to replace text in an array of plain strings), include `null` as one of the props (i.e. `\"props\": [null]`)",
2856
+ "type": "array",
2857
+ "items": {
2858
+ "type": [
2859
+ "string",
2860
+ "null"
2861
+ ]
2862
+ }
2863
+ }
2864
+ },
2865
+ "required": [
2866
+ "replace",
2867
+ "with"
2868
+ ],
2869
+ "additionalProperties": false
2870
+ },
2871
+ {
2872
+ "type": "object",
2873
+ "properties": {
2874
+ "mode": {
2875
+ "const": "replaceName"
2876
+ },
2877
+ "replace": {
2878
+ "type": "string"
2879
+ },
2880
+ "with": {
2881
+ "type": "string"
2882
+ },
2883
+ "flags": {
2884
+ "type": "string"
2885
+ }
2886
+ },
2887
+ "required": [
2888
+ "replace",
2889
+ "with"
2890
+ ],
2891
+ "additionalProperties": false
2892
+ },
2893
+ {
2894
+ "type": "object",
2895
+ "properties": {
2896
+ "mode": {
2897
+ "const": "appendStr"
2898
+ },
2899
+ "str": {
2900
+ "type": "string"
2901
+ },
2902
+ "joiner": {
2903
+ "type": "string"
2904
+ }
2905
+ },
2906
+ "required": [
2907
+ "str"
2908
+ ],
2909
+ "additionalProperties": false
2910
+ },
2911
+ {
2912
+ "type": "object",
2913
+ "properties": {
2914
+ "mode": {
2915
+ "const": "prependArr"
2916
+ },
2917
+ "items": {
2918
+ "anyOf": [
2919
+ {
2920
+ "type": "string"
2921
+ },
2922
+ {
2923
+ "type": "object"
2924
+ },
2925
+ {
2926
+ "type": "array"
2927
+ }
2928
+ ]
2929
+ }
2930
+ },
2931
+ "required": [
2932
+ "items"
2933
+ ],
2934
+ "additionalProperties": false
2935
+ },
2936
+ {
2937
+ "type": "object",
2938
+ "properties": {
2939
+ "mode": {
2940
+ "const": "appendArr"
2941
+ },
2942
+ "items": {
2943
+ "anyOf": [
2944
+ {
2945
+ "type": "string"
2946
+ },
2947
+ {
2948
+ "type": "object"
2949
+ },
2950
+ {
2951
+ "type": "array"
2952
+ }
2953
+ ]
2954
+ }
2955
+ },
2956
+ "required": [
2957
+ "items"
2958
+ ],
2959
+ "additionalProperties": false
2960
+ },
2961
+ {
2962
+ "type": "object",
2963
+ "properties": {
2964
+ "mode": {
2965
+ "const": "appendIfNotExistsArr"
2966
+ },
2967
+ "items": {
2968
+ "anyOf": [
2969
+ {
2970
+ "type": "string"
2971
+ },
2972
+ {
2973
+ "type": "object"
2974
+ },
2975
+ {
2976
+ "type": "array"
2977
+ }
2978
+ ]
2979
+ }
2980
+ },
2981
+ "required": [
2982
+ "items"
2983
+ ],
2984
+ "additionalProperties": false
2985
+ },
2986
+ {
2987
+ "type": "object",
2988
+ "properties": {
2989
+ "mode": {
2990
+ "const": "replaceArr"
2991
+ },
2992
+ "replace": {
2993
+ "oneOf": [
2994
+ {
2995
+ "type": "string"
2996
+ },
2997
+ {
2998
+ "type": "object",
2999
+ "properties": {
3000
+ "index": {
3001
+ "type": "integer"
3002
+ }
3003
+ },
3004
+ "required": [
3005
+ "index"
3006
+ ],
3007
+ "additionalProperties": false
3008
+ },
3009
+ {
3010
+ "type": "object",
3011
+ "properties": {
3012
+ "regex": {
3013
+ "type": "string"
3014
+ },
3015
+ "flags": {
3016
+ "type": "string"
3017
+ }
3018
+ },
3019
+ "required": [
3020
+ "regex"
3021
+ ],
3022
+ "additionalProperties": false
3023
+ }
3024
+ ]
3025
+ },
3026
+ "items": {
3027
+ "anyOf": [
3028
+ {
3029
+ "type": "object"
3030
+ },
3031
+ {
3032
+ "type": "array"
3033
+ }
3034
+ ]
3035
+ }
3036
+ },
3037
+ "required": [
3038
+ "replace",
3039
+ "items"
3040
+ ],
3041
+ "additionalProperties": false
3042
+ },
3043
+ {
3044
+ "type": "object",
3045
+ "properties": {
3046
+ "mode": {
3047
+ "const": "replaceOrAppendArr"
3048
+ },
3049
+ "replace": {
3050
+ "oneOf": [
3051
+ {
3052
+ "type": "string"
3053
+ },
3054
+ {
3055
+ "type": "object",
3056
+ "properties": {
3057
+ "index": {
3058
+ "type": "integer"
3059
+ }
3060
+ },
3061
+ "required": [
3062
+ "index"
3063
+ ],
3064
+ "additionalProperties": false
3065
+ },
3066
+ {
3067
+ "type": "object",
3068
+ "properties": {
3069
+ "regex": {
3070
+ "type": "string"
3071
+ },
3072
+ "flags": {
3073
+ "type": "string"
3074
+ }
3075
+ },
3076
+ "required": [
3077
+ "regex"
3078
+ ],
3079
+ "additionalProperties": false
3080
+ }
3081
+ ]
3082
+ },
3083
+ "items": {
3084
+ "anyOf": [
3085
+ {
3086
+ "type": "object"
3087
+ },
3088
+ {
3089
+ "type": "array"
3090
+ }
3091
+ ]
3092
+ }
3093
+ },
3094
+ "required": [
3095
+ "replace",
3096
+ "items"
3097
+ ],
3098
+ "additionalProperties": false
3099
+ },
3100
+ {
3101
+ "type": "object",
3102
+ "properties": {
3103
+ "mode": {
3104
+ "const": "insertArr"
3105
+ },
3106
+ "index": {
3107
+ "type": "integer"
3108
+ },
3109
+ "items": {
3110
+ "anyOf": [
3111
+ {
3112
+ "type": "object"
3113
+ },
3114
+ {
3115
+ "type": "string"
3116
+ },
3117
+ {
3118
+ "type": "array"
3119
+ }
3120
+ ]
3121
+ }
3122
+ },
3123
+ "required": [
3124
+ "index",
3125
+ "items"
3126
+ ],
3127
+ "additionalProperties": false
3128
+ },
3129
+ {
3130
+ "type": "object",
3131
+ "properties": {
3132
+ "mode": {
3133
+ "const": "removeArr"
3134
+ },
3135
+ "names": {
3136
+ "anyOf": [
3137
+ {
3138
+ "type": "string"
3139
+ },
3140
+ {
3141
+ "type": "array"
3142
+ }
3143
+ ]
3144
+ },
3145
+ "items": {
3146
+ "anyOf": [
3147
+ {
3148
+ "type": "string"
3149
+ },
3150
+ {
3151
+ "type": "array"
3152
+ }
3153
+ ]
3154
+ },
3155
+ "force": {
3156
+ "const": true
3157
+ }
3158
+ },
3159
+ "additionalProperties": false
3160
+ },
3161
+ {
3162
+ "type": "object",
3163
+ "properties": {
3164
+ "mode": {
3165
+ "const": "setProp"
3166
+ },
3167
+ "prop": {
3168
+ "type": "string"
3169
+ },
3170
+ "value": {}
3171
+ },
3172
+ "required": [
3173
+ "prop",
3174
+ "value"
3175
+ ],
3176
+ "additionalProperties": false
3177
+ },
3178
+ {
3179
+ "type": "object",
3180
+ "properties": {
3181
+ "mode": {
3182
+ "const": "calculateProp"
3183
+ },
3184
+ "prop": {
3185
+ "type": "string"
3186
+ },
3187
+ "formula": {
3188
+ "type": "string"
3189
+ }
3190
+ },
3191
+ "required": [
3192
+ "prop",
3193
+ "formula"
3194
+ ],
3195
+ "additionalProperties": false
3196
+ },
3197
+ {
3198
+ "type": "object",
3199
+ "properties": {
3200
+ "mode": {
3201
+ "const": "replaceSpells"
3202
+ },
3203
+ "spells": {
3204
+ "type": "object"
3205
+ },
3206
+ "daily": {
3207
+ "type": "object"
3208
+ }
3209
+ },
3210
+ "required": [
3211
+ "mode"
3212
+ ],
3213
+ "additionalProperties": false
3214
+ },
3215
+ {
3216
+ "type": "object",
3217
+ "properties": {
3218
+ "mode": {
3219
+ "const": "removeSpells"
3220
+ },
3221
+ "spells": {
3222
+ "type": "object"
3223
+ },
3224
+ "daily": {
3225
+ "type": "object"
3226
+ }
3227
+ },
3228
+ "required": [
3229
+ "mode"
3230
+ ],
3231
+ "additionalProperties": false
3232
+ },
3233
+ {
3234
+ "type": "object",
3235
+ "properties": {
3236
+ "mode": {
3237
+ "const": "addSpells"
3238
+ },
3239
+ "spells": {
3240
+ "type": "object"
3241
+ },
3242
+ "will": {
3243
+ "type": "array"
3244
+ },
3245
+ "daily": {
3246
+ "type": "object"
3247
+ },
3248
+ "weekly": {
3249
+ "type": "object"
3250
+ },
3251
+ "yearly": {
3252
+ "type": "object"
3253
+ }
3254
+ },
3255
+ "required": [
3256
+ "mode"
3257
+ ],
3258
+ "additionalProperties": false
3259
+ },
3260
+ {
3261
+ "type": "object",
3262
+ "properties": {
3263
+ "mode": {
3264
+ "const": "addSkills"
3265
+ },
3266
+ "skills": {
3267
+ "type": "object"
3268
+ }
3269
+ },
3270
+ "required": [
3271
+ "mode",
3272
+ "skills"
3273
+ ],
3274
+ "additionalProperties": false
3275
+ },
3276
+ {
3277
+ "type": "object",
3278
+ "properties": {
3279
+ "mode": {
3280
+ "const": "addSaves"
3281
+ },
3282
+ "saves": {
3283
+ "type": "object"
3284
+ }
3285
+ },
3286
+ "required": [
3287
+ "mode",
3288
+ "saves"
3289
+ ],
3290
+ "additionalProperties": false
3291
+ },
3292
+ {
3293
+ "type": "object",
3294
+ "properties": {
3295
+ "mode": {
3296
+ "const": "addAllSkills"
3297
+ },
3298
+ "skills": {
3299
+ "type": "integer"
3300
+ }
3301
+ },
3302
+ "required": [
3303
+ "mode",
3304
+ "skills"
3305
+ ],
3306
+ "additionalProperties": false
3307
+ },
3308
+ {
3309
+ "type": "object",
3310
+ "properties": {
3311
+ "mode": {
3312
+ "const": "addAllSaves"
3313
+ },
3314
+ "saves": {
3315
+ "type": "integer"
3316
+ }
3317
+ },
3318
+ "required": [
3319
+ "mode",
3320
+ "saves"
3321
+ ],
3322
+ "additionalProperties": false
3323
+ },
3324
+ {
3325
+ "type": "object",
3326
+ "properties": {
3327
+ "mode": {
3328
+ "const": "addSenses"
3329
+ },
3330
+ "senses": {
3331
+ "anyOf": [
3332
+ {
3333
+ "type": "object"
3334
+ },
3335
+ {
3336
+ "type": "array"
3337
+ }
3338
+ ]
3339
+ }
3340
+ },
3341
+ "required": [
3342
+ "mode",
3343
+ "senses"
3344
+ ],
3345
+ "additionalProperties": false
3346
+ },
3347
+ {
3348
+ "type": "object",
3349
+ "properties": {
3350
+ "mode": {
3351
+ "const": "scalarAddProp"
3352
+ },
3353
+ "prop": {
3354
+ "type": "string"
3355
+ },
3356
+ "scalar": {
3357
+ "type": "number"
3358
+ }
3359
+ },
3360
+ "required": [
3361
+ "mode",
3362
+ "scalar",
3363
+ "prop"
3364
+ ],
3365
+ "additionalProperties": false
3366
+ },
3367
+ {
3368
+ "type": "object",
3369
+ "properties": {
3370
+ "mode": {
3371
+ "const": "scalarMultProp"
3372
+ },
3373
+ "prop": {
3374
+ "type": "string"
3375
+ },
3376
+ "scalar": {
3377
+ "type": "number"
3378
+ },
3379
+ "floor": {
3380
+ "const": true
3381
+ }
3382
+ },
3383
+ "required": [
3384
+ "mode",
3385
+ "scalar",
3386
+ "prop"
3387
+ ],
3388
+ "additionalProperties": false
3389
+ },
3390
+ {
3391
+ "type": "object",
3392
+ "properties": {
3393
+ "mode": {
3394
+ "const": "scalarAddHit"
3395
+ },
3396
+ "scalar": {
3397
+ "type": "number"
3398
+ }
3399
+ },
3400
+ "required": [
3401
+ "mode",
3402
+ "scalar"
3403
+ ],
3404
+ "additionalProperties": false
3405
+ },
3406
+ {
3407
+ "type": "object",
3408
+ "properties": {
3409
+ "mode": {
3410
+ "const": "scalarAddDc"
3411
+ },
3412
+ "scalar": {
3413
+ "type": "number"
3414
+ }
3415
+ },
3416
+ "required": [
3417
+ "mode",
3418
+ "scalar"
3419
+ ],
3420
+ "additionalProperties": false
3421
+ },
3422
+ {
3423
+ "type": "object",
3424
+ "properties": {
3425
+ "mode": {
3426
+ "const": "maxSize"
3427
+ },
3428
+ "max": {
3429
+ "type": "string"
3430
+ }
3431
+ },
3432
+ "required": [
3433
+ "mode",
3434
+ "max"
3435
+ ],
3436
+ "additionalProperties": false
3437
+ },
3438
+ {
3439
+ "type": "object",
3440
+ "properties": {
3441
+ "mode": {
3442
+ "const": "scalarMultXp"
3443
+ },
3444
+ "scalar": {
3445
+ "type": "number"
3446
+ },
3447
+ "floor": {
3448
+ "const": true
3449
+ }
3450
+ },
3451
+ "required": [
3452
+ "mode",
3453
+ "scalar"
3454
+ ],
3455
+ "additionalProperties": false
3456
+ }
3457
+ ]
3458
+ },
3459
+ "copyBlock": {
3460
+ "type": "object",
3461
+ "properties": {
3462
+ "_copy": {
3463
+ "type": "object",
3464
+ "properties": {
3465
+ "name": {
3466
+ "type": "string"
3467
+ },
3468
+ "source": {
3469
+ "$ref": "util.json#/$defs/source"
3470
+ },
3471
+ "pantheon": {
3472
+ "description": "Used in deity data",
3473
+ "type": "string"
3474
+ },
3475
+ "shortName": {
3476
+ "description": "Used in subclass data",
3477
+ "type": "string"
3478
+ },
3479
+ "className": {
3480
+ "description": "Used in subclass data",
3481
+ "type": "string"
3482
+ },
3483
+ "classSource": {
3484
+ "description": "Used in subclass data",
3485
+ "$ref": "util.json#/$defs/source"
3486
+ },
3487
+ "_mod": {
3488
+ "$ref": "#/$defs/_modObject"
3489
+ },
3490
+ "_trait": {
3491
+ "type": "object",
3492
+ "properties": {
3493
+ "name": {
3494
+ "type": "string"
3495
+ },
3496
+ "source": {
3497
+ "$ref": "util.json#/$defs/source"
3498
+ }
3499
+ },
3500
+ "required": [
3501
+ "name",
3502
+ "source"
3503
+ ]
3504
+ },
3505
+ "_preserve": {
3506
+ "type": "object",
3507
+ "patternProperties": {
3508
+ ".*": {
3509
+ "const": true
3510
+ }
3511
+ }
3512
+ }
3513
+ },
3514
+ "required": [
3515
+ "name",
3516
+ "source"
3517
+ ],
3518
+ "additionalProperties": false
3519
+ }
3520
+ },
3521
+ "required": [
3522
+ "_copy"
3523
+ ]
3524
+ },
3525
+ "version": {
3526
+ "oneOf": [
3527
+ {
3528
+ "type": "object",
3529
+ "properties": {
3530
+ "name": {
3531
+ "type": "string"
3532
+ },
3533
+ "source": {
3534
+ "$ref": "util.json#/$defs/source"
3535
+ },
3536
+ "_mod": {
3537
+ "$ref": "#/$defs/_modObject"
3538
+ }
3539
+ },
3540
+ "required": [
3541
+ "name",
3542
+ "source"
3543
+ ]
3544
+ },
3545
+ {
3546
+ "type": "object",
3547
+ "properties": {
3548
+ "_template": {
3549
+ "type": "object",
3550
+ "properties": {
3551
+ "name": {
3552
+ "type": "string"
3553
+ },
3554
+ "source": {
3555
+ "$ref": "util.json#/$defs/source"
3556
+ },
3557
+ "_mod": {
3558
+ "$ref": "#/$defs/_modObject"
3559
+ }
3560
+ },
3561
+ "required": [
3562
+ "name",
3563
+ "source",
3564
+ "_mod"
3565
+ ]
3566
+ },
3567
+ "_implementations": {
3568
+ "type": "array",
3569
+ "items": {
3570
+ "type": "object",
3571
+ "properties": {
3572
+ "_variables": {
3573
+ "type": "object"
3574
+ }
3575
+ },
3576
+ "required": [
3577
+ "_variables"
3578
+ ]
3579
+ }
3580
+ }
3581
+ },
3582
+ "required": [
3583
+ "_template",
3584
+ "_implementations"
3585
+ ]
3586
+ }
3587
+ ]
3588
+ },
3589
+ "versionsArray": {
3590
+ "type": "array",
3591
+ "minItems": 1,
3592
+ "items": {
3593
+ "$ref": "#/$defs/version"
3594
+ }
3595
+ },
3596
+ "_modObject": {
3597
+ "type": "object",
3598
+ "patternProperties": {
3599
+ ".*": {
3600
+ "anyOf": [
3601
+ {
3602
+ "type": "string"
3603
+ },
3604
+ {
3605
+ "$ref": "#/$defs/copyModifier"
3606
+ },
3607
+ {
3608
+ "type": "array",
3609
+ "items": {
3610
+ "$ref": "#/$defs/copyModifier"
3611
+ }
3612
+ }
3613
+ ]
3614
+ }
3615
+ }
3616
+ },
3617
+ "srd": {
3618
+ "type": [
3619
+ "boolean",
3620
+ "string"
3621
+ ]
3622
+ },
3623
+ "basicRules": {
3624
+ "const": true
3625
+ },
3626
+ "legacy": {
3627
+ "const": true
3628
+ },
3629
+ "fluffObject": {
3630
+ "type": "object",
3631
+ "properties": {
3632
+ "entries": {
3633
+ "type": "array",
3634
+ "items": {
3635
+ "$ref": "entry.json"
3636
+ }
3637
+ },
3638
+ "images": {
3639
+ "type": "array",
3640
+ "items": {
3641
+ "$ref": "entry.json#/$defs/entryImage"
3642
+ }
3643
+ }
3644
+ }
3645
+ },
3646
+ "_additionalSpellObject": {
3647
+ "type": "object",
3648
+ "patternProperties": {
3649
+ "^\\d+$": {
3650
+ "description": "Spells keyed by character/class level.",
3651
+ "oneOf": [
3652
+ {
3653
+ "$ref": "#/$defs/_additionalSpellArrayOfStringOrFilterObject"
3654
+ },
3655
+ {
3656
+ "$ref": "#/$defs/_additionalSpellLevelObject"
3657
+ }
3658
+ ]
3659
+ },
3660
+ "^s\\d+$": {
3661
+ "description": "Spells keyed by spell level, access to which is gated behind the character advancing to a point where they could cast those spells with e.g. a Spellcasting class feature (Mark spells from ERLW races)",
3662
+ "oneOf": [
3663
+ {
3664
+ "$ref": "#/$defs/_additionalSpellArrayOfStringOrFilterObject"
3665
+ },
3666
+ {
3667
+ "$ref": "#/$defs/_additionalSpellLevelObject"
3668
+ }
3669
+ ]
3670
+ }
3671
+ },
3672
+ "properties": {
3673
+ "_": {
3674
+ "description": "Spells gained when gaining a particular feature, regardless of level or caster level",
3675
+ "oneOf": [
3676
+ {
3677
+ "$ref": "#/$defs/_additionalSpellArrayOfStringOrFilterObject"
3678
+ },
3679
+ {
3680
+ "$ref": "#/$defs/_additionalSpellLevelObject"
3681
+ }
3682
+ ]
3683
+ }
3684
+ }
3685
+ },
3686
+ "_additionalSpellLevelObject": {
3687
+ "type": "object",
3688
+ "properties": {
3689
+ "rest": {
3690
+ "description": "Spells which recharge on short or long rest",
3691
+ "$ref": "#/$defs/_additionalSpellRechargeObject"
3692
+ },
3693
+ "daily": {
3694
+ "description": "Spells which recharge on long rest",
3695
+ "$ref": "#/$defs/_additionalSpellRechargeObject"
3696
+ },
3697
+ "will": {
3698
+ "description": "At-will spells",
3699
+ "$ref": "#/$defs/_additionalSpellArrayOfStringOrFilterObject"
3700
+ },
3701
+ "ritual": {
3702
+ "description": "Ritual-only spells",
3703
+ "$ref": "#/$defs/_additionalSpellArrayOfStringOrFilterObject"
3704
+ },
3705
+ "resource": {
3706
+ "description": "Spells which cost a specific resource to use (such as Ki), but otherwise have no restrictions",
3707
+ "$ref": "#/$defs/_additionalSpellRechargeObject"
3708
+ },
3709
+ "_": {
3710
+ "description": "Spells which do not fall into the above categories (i.e. have no specific recharge, and are simply known)",
3711
+ "$ref": "#/$defs/_additionalSpellArrayOfStringOrFilterObject"
3712
+ }
3713
+ },
3714
+ "additionalProperties": false
3715
+ },
3716
+ "_additionalSpellRechargeObject": {
3717
+ "type": "object",
3718
+ "properties": {
3719
+ "1": {
3720
+ "$ref": "#/$defs/_additionalSpellArrayOfStringOrFilterObject"
3721
+ },
3722
+ "2": {
3723
+ "$ref": "#/$defs/_additionalSpellArrayOfStringOrFilterObject"
3724
+ },
3725
+ "3": {
3726
+ "$ref": "#/$defs/_additionalSpellArrayOfStringOrFilterObject"
3727
+ },
3728
+ "4": {
3729
+ "$ref": "#/$defs/_additionalSpellArrayOfStringOrFilterObject"
3730
+ },
3731
+ "5": {
3732
+ "$ref": "#/$defs/_additionalSpellArrayOfStringOrFilterObject"
3733
+ },
3734
+ "6": {
3735
+ "$ref": "#/$defs/_additionalSpellArrayOfStringOrFilterObject"
3736
+ },
3737
+ "7": {
3738
+ "$ref": "#/$defs/_additionalSpellArrayOfStringOrFilterObject"
3739
+ },
3740
+ "8": {
3741
+ "$ref": "#/$defs/_additionalSpellArrayOfStringOrFilterObject"
3742
+ },
3743
+ "9": {
3744
+ "$ref": "#/$defs/_additionalSpellArrayOfStringOrFilterObject"
3745
+ },
3746
+ "9e": {
3747
+ "$ref": "#/$defs/_additionalSpellArrayOfStringOrFilterObject"
3748
+ },
3749
+ "8e": {
3750
+ "$ref": "#/$defs/_additionalSpellArrayOfStringOrFilterObject"
3751
+ },
3752
+ "7e": {
3753
+ "$ref": "#/$defs/_additionalSpellArrayOfStringOrFilterObject"
3754
+ },
3755
+ "6e": {
3756
+ "$ref": "#/$defs/_additionalSpellArrayOfStringOrFilterObject"
3757
+ },
3758
+ "5e": {
3759
+ "$ref": "#/$defs/_additionalSpellArrayOfStringOrFilterObject"
3760
+ },
3761
+ "4e": {
3762
+ "$ref": "#/$defs/_additionalSpellArrayOfStringOrFilterObject"
3763
+ },
3764
+ "3e": {
3765
+ "$ref": "#/$defs/_additionalSpellArrayOfStringOrFilterObject"
3766
+ },
3767
+ "2e": {
3768
+ "$ref": "#/$defs/_additionalSpellArrayOfStringOrFilterObject"
3769
+ },
3770
+ "1e": {
3771
+ "$ref": "#/$defs/_additionalSpellArrayOfStringOrFilterObject"
3772
+ }
3773
+ },
3774
+ "additionalProperties": false
3775
+ },
3776
+ "_additionalSpellArrayOfStringOrFilterObject": {
3777
+ "type": "array",
3778
+ "minItems": 1,
3779
+ "items": {
3780
+ "oneOf": [
3781
+ {
3782
+ "type": "string"
3783
+ },
3784
+ {
3785
+ "type": "object",
3786
+ "properties": {
3787
+ "all": {
3788
+ "type": "string",
3789
+ "description": "A range of spells to be added, formatted similarly to the options in a {@filter ...} tag. \nFor example: \"level=0|class=Wizard\""
3790
+ }
3791
+ },
3792
+ "required": [
3793
+ "all"
3794
+ ],
3795
+ "additionalProperties": false
3796
+ },
3797
+ {
3798
+ "type": "object",
3799
+ "properties": {
3800
+ "choose": {
3801
+ "type": "string",
3802
+ "description": "A range of spells to be chosen from, formatted similarly to the options in a {@filter ...} tag. \nFor example: \"level=0|class=Wizard\""
3803
+ },
3804
+ "count": {
3805
+ "type": "integer"
3806
+ }
3807
+ },
3808
+ "required": [
3809
+ "choose"
3810
+ ],
3811
+ "additionalProperties": false
3812
+ },
3813
+ {
3814
+ "type": "object",
3815
+ "properties": {
3816
+ "choose": {
3817
+ "type": "object",
3818
+ "properties": {
3819
+ "from": {
3820
+ "description": "An array of spell UIDs to be chosen from.",
3821
+ "type": "array",
3822
+ "items": {
3823
+ "type": "string"
3824
+ },
3825
+ "uniqueItems": true
3826
+ },
3827
+ "count": {
3828
+ "type": "integer"
3829
+ }
3830
+ },
3831
+ "additionalProperties": false
3832
+ }
3833
+ },
3834
+ "required": [
3835
+ "choose"
3836
+ ],
3837
+ "additionalProperties": false
3838
+ }
3839
+ ]
3840
+ }
3841
+ },
3842
+ "additionalSpellsArray": {
3843
+ "description": "A collection of additional spells which a feature grants.\nThis array enables import functionality for VTTs, and should be used in addition to \"classSpells\"/\"subclassSpells\"/\"subSubclassSpells\" blocks which enable references on the site.",
3844
+ "type": "array",
3845
+ "minItems": 1,
3846
+ "items": {
3847
+ "type": "object",
3848
+ "properties": {
3849
+ "name": {
3850
+ "description": "Optional display name for the group",
3851
+ "type": "string"
3852
+ },
3853
+ "ability": {
3854
+ "description": "Optionally specify the ability score used for e.g. racial spellcasting",
3855
+ "oneOf": [
3856
+ {
3857
+ "type": "object",
3858
+ "properties": {
3859
+ "choose": {
3860
+ "type": "array",
3861
+ "items": {
3862
+ "type": "string",
3863
+ "enum": [
3864
+ "str",
3865
+ "dex",
3866
+ "con",
3867
+ "int",
3868
+ "wis",
3869
+ "cha"
3870
+ ]
3871
+ },
3872
+ "uniqueItems": true
3873
+ }
3874
+ },
3875
+ "required": [
3876
+ "choose"
3877
+ ],
3878
+ "additionalProperties": false
3879
+ },
3880
+ {
3881
+ "description": "\"inherit\" is used for special cases, where the ability score matches a choice the player made when taking the feature",
3882
+ "type": "string",
3883
+ "enum": [
3884
+ "str",
3885
+ "dex",
3886
+ "con",
3887
+ "int",
3888
+ "wis",
3889
+ "cha",
3890
+ "inherit"
3891
+ ]
3892
+ }
3893
+ ]
3894
+ },
3895
+ "resourceName": {
3896
+ "description": "Optional resource name for resource-cast spells in this group",
3897
+ "type": "string"
3898
+ },
3899
+ "innate": {
3900
+ "description": "Spells which can be innately cast, without expending normal spell resources",
3901
+ "$ref": "#/$defs/_additionalSpellObject"
3902
+ },
3903
+ "known": {
3904
+ "description": "Spells which are always known",
3905
+ "$ref": "#/$defs/_additionalSpellObject"
3906
+ },
3907
+ "prepared": {
3908
+ "description": "Spells which are always prepared",
3909
+ "$ref": "#/$defs/_additionalSpellObject"
3910
+ },
3911
+ "expanded": {
3912
+ "description": "Expansions to a class' default spell list, from which spells can be chosen (e.g. Warlock Patron spells)",
3913
+ "$ref": "#/$defs/_additionalSpellObject"
3914
+ }
3915
+ },
3916
+ "additionalProperties": false,
3917
+ "minProperties": 1
3918
+ }
3919
+ },
3920
+ "startingEquipment": {
3921
+ "description": "Optional well-structured data version of the \"default\" property, for use in applications that require it.",
3922
+ "type": "array",
3923
+ "items": {
3924
+ "type": "object",
3925
+ "patternProperties": {
3926
+ ".*": {
3927
+ "type": "array",
3928
+ "items": {
3929
+ "oneOf": [
3930
+ {
3931
+ "description": "An item UID, e.g. \"longsword|phb\"",
3932
+ "type": "string"
3933
+ },
3934
+ {
3935
+ "type": "object",
3936
+ "properties": {
3937
+ "item": {
3938
+ "description": "An item UID, e.g. \"longsword|phb\"",
3939
+ "type": "string"
3940
+ },
3941
+ "quantity": {
3942
+ "type": "integer"
3943
+ },
3944
+ "displayName": {
3945
+ "description": "The display name this item should be given",
3946
+ "type": "string"
3947
+ },
3948
+ "containsValue": {
3949
+ "description": "The value (in copper pieces) that this piece of equipment contains in coins.",
3950
+ "type": "integer"
3951
+ }
3952
+ },
3953
+ "required": [
3954
+ "item"
3955
+ ],
3956
+ "additionalProperties": false
3957
+ },
3958
+ {
3959
+ "type": "object",
3960
+ "properties": {
3961
+ "equipmentType": {
3962
+ "type": "string",
3963
+ "enum": [
3964
+ "weapon",
3965
+ "weaponSimple",
3966
+ "weaponSimpleMelee",
3967
+ "weaponMartial",
3968
+ "weaponMartialMelee",
3969
+ "instrumentMusical",
3970
+ "armorLight",
3971
+ "armorMedium",
3972
+ "armorHeavy",
3973
+ "weaponMelee",
3974
+ "weaponRanged",
3975
+ "focusSpellcasting",
3976
+ "setGaming",
3977
+ "toolArtisan"
3978
+ ]
3979
+ },
3980
+ "quantity": {
3981
+ "type": "integer"
3982
+ }
3983
+ },
3984
+ "required": [
3985
+ "equipmentType"
3986
+ ],
3987
+ "additionalProperties": false
3988
+ },
3989
+ {
3990
+ "type": "object",
3991
+ "properties": {
3992
+ "value": {
3993
+ "description": "A value in copper pieces",
3994
+ "type": "integer"
3995
+ }
3996
+ },
3997
+ "required": [
3998
+ "value"
3999
+ ],
4000
+ "additionalProperties": false
4001
+ },
4002
+ {
4003
+ "type": "object",
4004
+ "properties": {
4005
+ "special": {
4006
+ "description": "The name of a non-statted item, such as \"wooden stake\"",
4007
+ "type": "string"
4008
+ },
4009
+ "quantity": {
4010
+ "type": "integer"
4011
+ },
4012
+ "worthValue": {
4013
+ "description": "The worth (in copper pieces) of this piece of equipment.",
4014
+ "type": "integer"
4015
+ },
4016
+ "containsValue": {
4017
+ "description": "The value (in copper pieces) that this piece of equipment contains in coins.",
4018
+ "type": "integer"
4019
+ }
4020
+ },
4021
+ "required": [
4022
+ "special"
4023
+ ],
4024
+ "additionalProperties": false
4025
+ }
4026
+ ]
4027
+ }
4028
+ }
4029
+ }
4030
+ }
4031
+ },
4032
+ "reqAttuneTags": {
4033
+ "type": "array",
4034
+ "minItems": 1,
4035
+ "items": {
4036
+ "type": "object",
4037
+ "properties": {
4038
+ "background": {
4039
+ "type": "string"
4040
+ },
4041
+ "race": {
4042
+ "type": "string"
4043
+ },
4044
+ "creatureType": {
4045
+ "$ref": "#/$defs/creatureType"
4046
+ },
4047
+ "size": {
4048
+ "$ref": "#/$defs/size"
4049
+ },
4050
+ "class": {
4051
+ "type": "string"
4052
+ },
4053
+ "languageProficiency": {
4054
+ "$ref": "#/$defs/languageNameLower"
4055
+ },
4056
+ "skillProficiency": {
4057
+ "$ref": "#/$defs/skillNameLower"
4058
+ },
4059
+ "alignment": {
4060
+ "type": "array",
4061
+ "items": {
4062
+ "$ref": "#/$defs/alignment"
4063
+ }
4064
+ },
4065
+ "str": {
4066
+ "type": "integer"
4067
+ },
4068
+ "dex": {
4069
+ "type": "integer"
4070
+ },
4071
+ "con": {
4072
+ "type": "integer"
4073
+ },
4074
+ "int": {
4075
+ "type": "integer"
4076
+ },
4077
+ "wis": {
4078
+ "type": "integer"
4079
+ },
4080
+ "cha": {
4081
+ "type": "integer"
4082
+ },
4083
+ "spellcasting": {
4084
+ "const": true
4085
+ },
4086
+ "psionics": {
4087
+ "const": true
4088
+ }
4089
+ }
4090
+ }
4091
+ },
4092
+ "adventureBookData": {
4093
+ "type": "array",
4094
+ "items": {
4095
+ "$ref": "entry.json"
4096
+ },
4097
+ "minItems": 1
4098
+ },
4099
+ "optionalfeatureProgression": {
4100
+ "type": "array",
4101
+ "minItems": 1,
4102
+ "items": {
4103
+ "type": "object",
4104
+ "properties": {
4105
+ "name": {
4106
+ "type": "string"
4107
+ },
4108
+ "featureType": {
4109
+ "type": "array",
4110
+ "items": {
4111
+ "$ref": "#/$defs/dataOptionalfeatureType"
4112
+ },
4113
+ "uniqueItems": true
4114
+ },
4115
+ "progression": {
4116
+ "oneOf": [
4117
+ {
4118
+ "type": "array",
4119
+ "description": "Features gained when the total count of features increases according to level.",
4120
+ "items": {
4121
+ "type": "integer"
4122
+ },
4123
+ "minItems": 20,
4124
+ "maxItems": 20
4125
+ },
4126
+ {
4127
+ "type": "object",
4128
+ "description": "Features gained at the exact levels specified.",
4129
+ "patternProperties": {
4130
+ "^\\d+$": {
4131
+ "type": "integer"
4132
+ }
4133
+ },
4134
+ "additionalProperties": false
4135
+ },
4136
+ {
4137
+ "type": "object",
4138
+ "description": "Features gained at the level this feature is gained.",
4139
+ "properties": {
4140
+ "*": {
4141
+ "type": "integer"
4142
+ }
4143
+ },
4144
+ "additionalProperties": false
4145
+ }
4146
+ ]
4147
+ },
4148
+ "required": {
4149
+ "oneOf": [
4150
+ {
4151
+ "type": "array",
4152
+ "items": {
4153
+ "type": "array",
4154
+ "items": {
4155
+ "type": "string"
4156
+ }
4157
+ },
4158
+ "minItems": 20,
4159
+ "maxItems": 20
4160
+ },
4161
+ {
4162
+ "type": "object",
4163
+ "patternProperties": {
4164
+ "^\\d+$": {
4165
+ "type": "array",
4166
+ "items": {
4167
+ "type": "string"
4168
+ }
4169
+ }
4170
+ },
4171
+ "additionalProperties": false
4172
+ }
4173
+ ]
4174
+ }
4175
+ },
4176
+ "required": [
4177
+ "name",
4178
+ "featureType",
4179
+ "progression"
4180
+ ]
4181
+ }
4182
+ },
4183
+ "spellListSpellRef": {
4184
+ "description": "A reference to a spell or an existing spell list, linked by name and source. Assumes PHB as the source, if none is provided.",
4185
+ "oneOf": [
4186
+ {
4187
+ "description": "A group spell list",
4188
+ "type": "object",
4189
+ "properties": {
4190
+ "groupName": {
4191
+ "type": "string"
4192
+ },
4193
+ "groupSource": {
4194
+ "$ref": "util.json#/$defs/source"
4195
+ },
4196
+ "spellSchools": {
4197
+ "type": "array",
4198
+ "items": {
4199
+ "$ref": "#/$defs/spellSchool"
4200
+ },
4201
+ "minItems": 1,
4202
+ "uniqueItems": true
4203
+ }
4204
+ },
4205
+ "required": [
4206
+ "groupName",
4207
+ "groupSource"
4208
+ ],
4209
+ "additionalProperties": false
4210
+ },
4211
+ {
4212
+ "description": "Another class's spell list",
4213
+ "type": "object",
4214
+ "properties": {
4215
+ "className": {
4216
+ "type": "string"
4217
+ },
4218
+ "classSource": {
4219
+ "$ref": "util.json#/$defs/source"
4220
+ }
4221
+ },
4222
+ "required": [
4223
+ "className",
4224
+ "classSource"
4225
+ ],
4226
+ "additionalProperties": false
4227
+ },
4228
+ {
4229
+ "description": "Another subclass's spell list",
4230
+ "type": "object",
4231
+ "properties": {
4232
+ "className": {
4233
+ "type": "string"
4234
+ },
4235
+ "classSource": {
4236
+ "$ref": "util.json#/$defs/source"
4237
+ },
4238
+ "subclassName": {
4239
+ "type": "string"
4240
+ },
4241
+ "subclassSource": {
4242
+ "$ref": "util.json#/$defs/source"
4243
+ }
4244
+ },
4245
+ "required": [
4246
+ "className",
4247
+ "classSource",
4248
+ "subclassName",
4249
+ "subclassSource"
4250
+ ],
4251
+ "additionalProperties": false
4252
+ },
4253
+ {
4254
+ "description": "Another sub-subclass's spell list",
4255
+ "type": "object",
4256
+ "properties": {
4257
+ "className": {
4258
+ "type": "string"
4259
+ },
4260
+ "classSource": {
4261
+ "$ref": "util.json#/$defs/source"
4262
+ },
4263
+ "subclassName": {
4264
+ "type": "string"
4265
+ },
4266
+ "subclassSource": {
4267
+ "$ref": "util.json#/$defs/source"
4268
+ },
4269
+ "subSubclassName": {
4270
+ "type": "string"
4271
+ },
4272
+ "subSubclassSource": {
4273
+ "type": "string"
4274
+ }
4275
+ },
4276
+ "required": [
4277
+ "className",
4278
+ "classSource",
4279
+ "subclassName",
4280
+ "subclassSource",
4281
+ "subSubclassName",
4282
+ "subSubclassSource"
4283
+ ],
4284
+ "additionalProperties": false
4285
+ },
4286
+ {
4287
+ "description": "A spell UID of the form \"fireball\" (PHB source assumed by default) or \"shape water|xge\"",
4288
+ "type": "string"
4289
+ }
4290
+ ]
4291
+ },
4292
+ "foundrySystemObject": {
4293
+ "type": "object"
4294
+ },
4295
+ "foundryFlagsObject": {
4296
+ "type": "object"
4297
+ },
4298
+ "foundryAdvancementObject": {
4299
+ "type": "object"
4300
+ },
4301
+ "foundryAdvancementsArray": {
4302
+ "type": "array",
4303
+ "minItems": 1,
4304
+ "items": {
4305
+ "$ref": "#/$defs/foundryAdvancementObject"
4306
+ },
4307
+ "uniqueItems": true
4308
+ },
4309
+ "foundryImg": {
4310
+ "type": "string"
4311
+ },
4312
+ "foundrySubEntitiesObject": {
4313
+ "description": "A 5etools-data-like object of additional entities to import.",
4314
+ "type": "object"
4315
+ },
4316
+ "foundryEffectObject": {
4317
+ "type": "object",
4318
+ "properties": {
4319
+ "name": {
4320
+ "type": "string"
4321
+ },
4322
+ "img": {
4323
+ "type": "string"
4324
+ },
4325
+ "changes": {
4326
+ "type": "array",
4327
+ "items": {
4328
+ "type": "object",
4329
+ "properties": {
4330
+ "key": {
4331
+ "type": "string"
4332
+ },
4333
+ "mode": {
4334
+ "type": [
4335
+ "string",
4336
+ "integer"
4337
+ ]
4338
+ },
4339
+ "value": true,
4340
+ "priority": {
4341
+ "type": [
4342
+ "string",
4343
+ "integer"
4344
+ ]
4345
+ }
4346
+ },
4347
+ "required": [
4348
+ "key",
4349
+ "mode",
4350
+ "value"
4351
+ ],
4352
+ "additionalProperties": false
4353
+ }
4354
+ },
4355
+ "flags": {
4356
+ "type": "object"
4357
+ },
4358
+ "duration": {
4359
+ "type": "object"
4360
+ },
4361
+ "disabled": {
4362
+ "const": true
4363
+ },
4364
+ "transfer": {
4365
+ "const": true
4366
+ }
4367
+ },
4368
+ "required": [
4369
+ "changes"
4370
+ ],
4371
+ "additionalProperties": false
4372
+ },
4373
+ "foundryEffectsArray": {
4374
+ "type": "array",
4375
+ "items": {
4376
+ "$ref": "#/$defs/foundryEffectObject"
4377
+ },
4378
+ "minItems": 1,
4379
+ "uniqueItems": true
4380
+ },
4381
+ "foundrySideDataGenericObject": {
4382
+ "type": "object",
4383
+ "properties": {
4384
+ "name": {
4385
+ "type": "string"
4386
+ },
4387
+ "source": {
4388
+ "$ref": "util.json#/$defs/source"
4389
+ },
4390
+ "system": {
4391
+ "$ref": "#/$defs/foundrySystemObject"
4392
+ },
4393
+ "effects": {
4394
+ "type": "array",
4395
+ "items": {
4396
+ "$ref": "#/$defs/foundryEffectObject"
4397
+ }
4398
+ },
4399
+ "flags": {
4400
+ "$ref": "util.json#/$defs/foundryFlagsObject"
4401
+ },
4402
+ "img": {
4403
+ "type": "string"
4404
+ }
4405
+ },
4406
+ "required": [
4407
+ "name",
4408
+ "source"
4409
+ ],
4410
+ "additionalProperties": false
4411
+ },
4412
+ "foundrySideDataGenericArray": {
4413
+ "type": "array",
4414
+ "minItems": 1,
4415
+ "uniqueItems": true,
4416
+ "items": {
4417
+ "$ref": "#/$defs/foundrySideDataGenericObject"
4418
+ }
4419
+ },
4420
+ "foundrySideDataGenericFeatureArray": {
4421
+ "type": "array",
4422
+ "minItems": 1,
4423
+ "uniqueItems": true,
4424
+ "items": {
4425
+ "type": "object",
4426
+ "properties": {
4427
+ "name": {
4428
+ "type": "string"
4429
+ },
4430
+ "source": {
4431
+ "$ref": "util.json#/$defs/source"
4432
+ },
4433
+ "entries": {
4434
+ "type": "array",
4435
+ "items": {
4436
+ "$ref": "entry.json"
4437
+ }
4438
+ },
4439
+ "isIgnored": {
4440
+ "const": true
4441
+ },
4442
+ "ignoreSrdEffects": {
4443
+ "const": true
4444
+ },
4445
+ "system": {
4446
+ "$ref": "#/$defs/foundrySystemObject"
4447
+ },
4448
+ "actorDataMod": {
4449
+ "type": "object"
4450
+ },
4451
+ "effects": {
4452
+ "type": "array",
4453
+ "items": {
4454
+ "$ref": "#/$defs/foundryEffectObject"
4455
+ }
4456
+ }
4457
+ },
4458
+ "required": [
4459
+ "name",
4460
+ "source"
4461
+ ],
4462
+ "additionalProperties": false
4463
+ }
4464
+ }
4465
+ }
4466
+ }