5etools-utils 0.8.37 → 0.9.0

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