5etools-utils 0.2.2 → 0.3.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 (281) hide show
  1. package/package.json +3 -2
  2. package/schema/brew/actions.json +109 -0
  3. package/schema/brew/adventure/adventure.json +12 -0
  4. package/schema/brew/adventures.json +249 -0
  5. package/schema/brew/backgrounds.json +425 -0
  6. package/schema/brew/bestiary/bestiary.json +3766 -0
  7. package/schema/brew/bestiary/fluff-bestiary.json +15 -0
  8. package/schema/brew/bestiary/foundry.json +15 -0
  9. package/schema/brew/bestiary/legendarygroups.json +202 -0
  10. package/schema/brew/bestiary/traits.json +85 -0
  11. package/schema/brew/book/book.json +12 -0
  12. package/schema/brew/books.json +137 -0
  13. package/schema/brew/charcreationoptions.json +96 -0
  14. package/schema/brew/class/class.json +2059 -0
  15. package/schema/brew/class/foundry.json +373 -0
  16. package/schema/brew/conditionsdiseases.json +103 -0
  17. package/schema/brew/cultsboons.json +196 -0
  18. package/schema/brew/deities.json +482 -0
  19. package/schema/brew/encounters.json +99 -0
  20. package/schema/brew/entry.json +3538 -0
  21. package/schema/brew/feats.json +215 -0
  22. package/schema/brew/fluff-backgrounds.json +15 -0
  23. package/schema/brew/fluff-charcreationoptions.json +43 -0
  24. package/schema/brew/fluff-conditionsdiseases.json +43 -0
  25. package/schema/brew/fluff-feats.json +15 -0
  26. package/schema/brew/fluff-items.json +15 -0
  27. package/schema/brew/fluff-languages.json +42 -0
  28. package/schema/brew/fluff-objects.json +15 -0
  29. package/schema/brew/fluff-races.json +214 -0
  30. package/schema/brew/fluff-recipes.json +42 -0
  31. package/schema/brew/fluff-vehicles.json +63 -0
  32. package/schema/brew/foundry-actions.json +15 -0
  33. package/schema/brew/foundry-backgrounds.json +47 -0
  34. package/schema/brew/foundry-feats.json +15 -0
  35. package/schema/brew/foundry-items.json +57 -0
  36. package/schema/brew/foundry-optionalfeatures.json +15 -0
  37. package/schema/brew/foundry-psionics.json +50 -0
  38. package/schema/brew/foundry-races.json +52 -0
  39. package/schema/brew/foundry-rewards.json +15 -0
  40. package/schema/brew/foundry-vehicles.json +15 -0
  41. package/schema/brew/generated/bookref-quick.json +72 -0
  42. package/schema/brew/homebrew.json +564 -0
  43. package/schema/brew/items-base.json +460 -0
  44. package/schema/brew/items-shared.json +295 -0
  45. package/schema/brew/items.json +1866 -0
  46. package/schema/brew/languages.json +127 -0
  47. package/schema/brew/loot.json +510 -0
  48. package/schema/brew/magicvariants.json +387 -0
  49. package/schema/brew/makebrew-creature.json +40 -0
  50. package/schema/brew/makecards.json +43 -0
  51. package/schema/brew/monsterfeatures.json +53 -0
  52. package/schema/brew/msbcr.json +60 -0
  53. package/schema/brew/names.json +91 -0
  54. package/schema/brew/objects.json +172 -0
  55. package/schema/brew/optionalfeatures.json +139 -0
  56. package/schema/brew/psionics.json +185 -0
  57. package/schema/brew/races.json +1799 -0
  58. package/schema/brew/recipes.json +191 -0
  59. package/schema/brew/renderdemo.json +16 -0
  60. package/schema/brew/rewards.json +102 -0
  61. package/schema/brew/senses.json +54 -0
  62. package/schema/brew/skills.json +54 -0
  63. package/schema/brew/spells/fluff-spells.json +15 -0
  64. package/schema/brew/spells/foundry.json +15 -0
  65. package/schema/brew/spells/roll20.json +112 -0
  66. package/schema/brew/spells/spells.json +1841 -0
  67. package/schema/brew/tables.json +202 -0
  68. package/schema/brew/trapshazards.json +249 -0
  69. package/schema/brew/util.json +3867 -0
  70. package/schema/brew/variantrules.json +74 -0
  71. package/schema/brew/vehicles.json +854 -0
  72. package/schema/brew-fast/actions.json +109 -0
  73. package/schema/brew-fast/adventure/adventure.json +12 -0
  74. package/schema/brew-fast/adventures.json +249 -0
  75. package/schema/brew-fast/backgrounds.json +425 -0
  76. package/schema/brew-fast/bestiary/bestiary.json +3766 -0
  77. package/schema/brew-fast/bestiary/fluff-bestiary.json +15 -0
  78. package/schema/brew-fast/bestiary/foundry.json +15 -0
  79. package/schema/brew-fast/bestiary/legendarygroups.json +202 -0
  80. package/schema/brew-fast/bestiary/traits.json +85 -0
  81. package/schema/brew-fast/book/book.json +12 -0
  82. package/schema/brew-fast/books.json +137 -0
  83. package/schema/brew-fast/charcreationoptions.json +96 -0
  84. package/schema/brew-fast/class/class.json +2059 -0
  85. package/schema/brew-fast/class/foundry.json +373 -0
  86. package/schema/brew-fast/conditionsdiseases.json +103 -0
  87. package/schema/brew-fast/cultsboons.json +196 -0
  88. package/schema/brew-fast/deities.json +482 -0
  89. package/schema/brew-fast/encounters.json +99 -0
  90. package/schema/brew-fast/entry.json +3538 -0
  91. package/schema/brew-fast/feats.json +215 -0
  92. package/schema/brew-fast/fluff-backgrounds.json +15 -0
  93. package/schema/brew-fast/fluff-charcreationoptions.json +43 -0
  94. package/schema/brew-fast/fluff-conditionsdiseases.json +43 -0
  95. package/schema/brew-fast/fluff-feats.json +15 -0
  96. package/schema/brew-fast/fluff-items.json +15 -0
  97. package/schema/brew-fast/fluff-languages.json +42 -0
  98. package/schema/brew-fast/fluff-objects.json +15 -0
  99. package/schema/brew-fast/fluff-races.json +214 -0
  100. package/schema/brew-fast/fluff-recipes.json +42 -0
  101. package/schema/brew-fast/fluff-vehicles.json +63 -0
  102. package/schema/brew-fast/foundry-actions.json +15 -0
  103. package/schema/brew-fast/foundry-backgrounds.json +47 -0
  104. package/schema/brew-fast/foundry-feats.json +15 -0
  105. package/schema/brew-fast/foundry-items.json +57 -0
  106. package/schema/brew-fast/foundry-optionalfeatures.json +15 -0
  107. package/schema/brew-fast/foundry-psionics.json +50 -0
  108. package/schema/brew-fast/foundry-races.json +52 -0
  109. package/schema/brew-fast/foundry-rewards.json +15 -0
  110. package/schema/brew-fast/foundry-vehicles.json +15 -0
  111. package/schema/brew-fast/generated/bookref-quick.json +72 -0
  112. package/schema/brew-fast/homebrew.json +562 -0
  113. package/schema/brew-fast/items-base.json +460 -0
  114. package/schema/brew-fast/items-shared.json +295 -0
  115. package/schema/brew-fast/items.json +1866 -0
  116. package/schema/brew-fast/languages.json +127 -0
  117. package/schema/brew-fast/loot.json +510 -0
  118. package/schema/brew-fast/magicvariants.json +387 -0
  119. package/schema/brew-fast/makebrew-creature.json +40 -0
  120. package/schema/brew-fast/makecards.json +43 -0
  121. package/schema/brew-fast/monsterfeatures.json +53 -0
  122. package/schema/brew-fast/msbcr.json +60 -0
  123. package/schema/brew-fast/names.json +91 -0
  124. package/schema/brew-fast/objects.json +172 -0
  125. package/schema/brew-fast/optionalfeatures.json +139 -0
  126. package/schema/brew-fast/psionics.json +185 -0
  127. package/schema/brew-fast/races.json +1799 -0
  128. package/schema/brew-fast/recipes.json +191 -0
  129. package/schema/brew-fast/renderdemo.json +16 -0
  130. package/schema/brew-fast/rewards.json +102 -0
  131. package/schema/brew-fast/senses.json +54 -0
  132. package/schema/brew-fast/skills.json +54 -0
  133. package/schema/brew-fast/spells/fluff-spells.json +15 -0
  134. package/schema/brew-fast/spells/foundry.json +15 -0
  135. package/schema/brew-fast/spells/roll20.json +112 -0
  136. package/schema/brew-fast/spells/spells.json +1841 -0
  137. package/schema/brew-fast/tables.json +202 -0
  138. package/schema/brew-fast/trapshazards.json +249 -0
  139. package/schema/brew-fast/util.json +3867 -0
  140. package/schema/brew-fast/variantrules.json +74 -0
  141. package/schema/brew-fast/vehicles.json +854 -0
  142. package/schema/site/actions.json +97 -0
  143. package/schema/site/adventure/adventure.json +12 -0
  144. package/schema/site/adventures.json +211 -0
  145. package/schema/site/backgrounds.json +306 -0
  146. package/schema/site/bestiary/bestiary.json +3537 -0
  147. package/schema/site/bestiary/fluff-bestiary.json +15 -0
  148. package/schema/site/bestiary/foundry.json +15 -0
  149. package/schema/site/bestiary/legendarygroups.json +202 -0
  150. package/schema/site/bestiary/traits.json +85 -0
  151. package/schema/site/book/book.json +12 -0
  152. package/schema/site/books.json +137 -0
  153. package/schema/site/charcreationoptions.json +80 -0
  154. package/schema/site/class/class.json +1792 -0
  155. package/schema/site/class/foundry.json +373 -0
  156. package/schema/site/conditionsdiseases.json +82 -0
  157. package/schema/site/cultsboons.json +172 -0
  158. package/schema/site/deities.json +461 -0
  159. package/schema/site/encounters.json +99 -0
  160. package/schema/site/entry.json +3471 -0
  161. package/schema/site/feats.json +199 -0
  162. package/schema/site/fluff-backgrounds.json +15 -0
  163. package/schema/site/fluff-charcreationoptions.json +43 -0
  164. package/schema/site/fluff-conditionsdiseases.json +43 -0
  165. package/schema/site/fluff-feats.json +15 -0
  166. package/schema/site/fluff-items.json +15 -0
  167. package/schema/site/fluff-languages.json +42 -0
  168. package/schema/site/fluff-objects.json +15 -0
  169. package/schema/site/fluff-races.json +214 -0
  170. package/schema/site/fluff-recipes.json +42 -0
  171. package/schema/site/fluff-vehicles.json +63 -0
  172. package/schema/site/foundry-actions.json +15 -0
  173. package/schema/site/foundry-backgrounds.json +47 -0
  174. package/schema/site/foundry-feats.json +15 -0
  175. package/schema/site/foundry-items.json +57 -0
  176. package/schema/site/foundry-optionalfeatures.json +15 -0
  177. package/schema/site/foundry-psionics.json +50 -0
  178. package/schema/site/foundry-races.json +52 -0
  179. package/schema/site/foundry-rewards.json +15 -0
  180. package/schema/site/foundry-vehicles.json +15 -0
  181. package/schema/site/generated/bookref-quick.json +72 -0
  182. package/schema/site/homebrew.json +564 -0
  183. package/schema/site/items-base.json +425 -0
  184. package/schema/site/items-shared.json +259 -0
  185. package/schema/site/items.json +1722 -0
  186. package/schema/site/languages.json +120 -0
  187. package/schema/site/loot.json +510 -0
  188. package/schema/site/magicvariants.json +355 -0
  189. package/schema/site/makebrew-creature.json +39 -0
  190. package/schema/site/makecards.json +43 -0
  191. package/schema/site/monsterfeatures.json +53 -0
  192. package/schema/site/msbcr.json +60 -0
  193. package/schema/site/names.json +91 -0
  194. package/schema/site/objects.json +165 -0
  195. package/schema/site/optionalfeatures.json +127 -0
  196. package/schema/site/psionics.json +173 -0
  197. package/schema/site/races.json +1708 -0
  198. package/schema/site/recipes.json +185 -0
  199. package/schema/site/renderdemo.json +16 -0
  200. package/schema/site/rewards.json +90 -0
  201. package/schema/site/senses.json +54 -0
  202. package/schema/site/skills.json +54 -0
  203. package/schema/site/spells/fluff-spells.json +15 -0
  204. package/schema/site/spells/foundry.json +15 -0
  205. package/schema/site/spells/roll20.json +112 -0
  206. package/schema/site/spells/spells.json +1238 -0
  207. package/schema/site/tables.json +185 -0
  208. package/schema/site/trapshazards.json +227 -0
  209. package/schema/site/util.json +3857 -0
  210. package/schema/site/variantrules.json +71 -0
  211. package/schema/site/vehicles.json +807 -0
  212. package/schema/site-fast/actions.json +97 -0
  213. package/schema/site-fast/adventure/adventure.json +12 -0
  214. package/schema/site-fast/adventures.json +211 -0
  215. package/schema/site-fast/backgrounds.json +306 -0
  216. package/schema/site-fast/bestiary/bestiary.json +3537 -0
  217. package/schema/site-fast/bestiary/fluff-bestiary.json +15 -0
  218. package/schema/site-fast/bestiary/foundry.json +15 -0
  219. package/schema/site-fast/bestiary/legendarygroups.json +202 -0
  220. package/schema/site-fast/bestiary/traits.json +85 -0
  221. package/schema/site-fast/book/book.json +12 -0
  222. package/schema/site-fast/books.json +137 -0
  223. package/schema/site-fast/charcreationoptions.json +80 -0
  224. package/schema/site-fast/class/class.json +1792 -0
  225. package/schema/site-fast/class/foundry.json +373 -0
  226. package/schema/site-fast/conditionsdiseases.json +82 -0
  227. package/schema/site-fast/cultsboons.json +172 -0
  228. package/schema/site-fast/deities.json +461 -0
  229. package/schema/site-fast/encounters.json +99 -0
  230. package/schema/site-fast/entry.json +3471 -0
  231. package/schema/site-fast/feats.json +199 -0
  232. package/schema/site-fast/fluff-backgrounds.json +15 -0
  233. package/schema/site-fast/fluff-charcreationoptions.json +43 -0
  234. package/schema/site-fast/fluff-conditionsdiseases.json +43 -0
  235. package/schema/site-fast/fluff-feats.json +15 -0
  236. package/schema/site-fast/fluff-items.json +15 -0
  237. package/schema/site-fast/fluff-languages.json +42 -0
  238. package/schema/site-fast/fluff-objects.json +15 -0
  239. package/schema/site-fast/fluff-races.json +214 -0
  240. package/schema/site-fast/fluff-recipes.json +42 -0
  241. package/schema/site-fast/fluff-vehicles.json +63 -0
  242. package/schema/site-fast/foundry-actions.json +15 -0
  243. package/schema/site-fast/foundry-backgrounds.json +47 -0
  244. package/schema/site-fast/foundry-feats.json +15 -0
  245. package/schema/site-fast/foundry-items.json +57 -0
  246. package/schema/site-fast/foundry-optionalfeatures.json +15 -0
  247. package/schema/site-fast/foundry-psionics.json +50 -0
  248. package/schema/site-fast/foundry-races.json +52 -0
  249. package/schema/site-fast/foundry-rewards.json +15 -0
  250. package/schema/site-fast/foundry-vehicles.json +15 -0
  251. package/schema/site-fast/generated/bookref-quick.json +72 -0
  252. package/schema/site-fast/homebrew.json +562 -0
  253. package/schema/site-fast/items-base.json +425 -0
  254. package/schema/site-fast/items-shared.json +259 -0
  255. package/schema/site-fast/items.json +1722 -0
  256. package/schema/site-fast/languages.json +120 -0
  257. package/schema/site-fast/loot.json +510 -0
  258. package/schema/site-fast/magicvariants.json +355 -0
  259. package/schema/site-fast/makebrew-creature.json +39 -0
  260. package/schema/site-fast/makecards.json +43 -0
  261. package/schema/site-fast/monsterfeatures.json +53 -0
  262. package/schema/site-fast/msbcr.json +60 -0
  263. package/schema/site-fast/names.json +91 -0
  264. package/schema/site-fast/objects.json +165 -0
  265. package/schema/site-fast/optionalfeatures.json +127 -0
  266. package/schema/site-fast/psionics.json +173 -0
  267. package/schema/site-fast/races.json +1708 -0
  268. package/schema/site-fast/recipes.json +185 -0
  269. package/schema/site-fast/renderdemo.json +16 -0
  270. package/schema/site-fast/rewards.json +90 -0
  271. package/schema/site-fast/senses.json +54 -0
  272. package/schema/site-fast/skills.json +54 -0
  273. package/schema/site-fast/spells/fluff-spells.json +15 -0
  274. package/schema/site-fast/spells/foundry.json +15 -0
  275. package/schema/site-fast/spells/roll20.json +112 -0
  276. package/schema/site-fast/spells/spells.json +1238 -0
  277. package/schema/site-fast/tables.json +185 -0
  278. package/schema/site-fast/trapshazards.json +227 -0
  279. package/schema/site-fast/util.json +3857 -0
  280. package/schema/site-fast/variantrules.json +71 -0
  281. package/schema/site-fast/vehicles.json +807 -0
@@ -0,0 +1,1792 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "version": "2.11.0",
4
+ "$id": "class.json",
5
+ "type": "object",
6
+ "$defs": {
7
+ "_classTableGroupSubclass": {
8
+ "type": "array",
9
+ "items": {
10
+ "type": "object",
11
+ "properties": {
12
+ "name": {
13
+ "type": "string"
14
+ },
15
+ "source": {
16
+ "type": "string"
17
+ }
18
+ },
19
+ "required": [
20
+ "name",
21
+ "source"
22
+ ],
23
+ "additionalProperties": false
24
+ }
25
+ },
26
+ "classTableGroup": {
27
+ "oneOf": [
28
+ {
29
+ "type": "object",
30
+ "properties": {
31
+ "title": {
32
+ "type": "string"
33
+ },
34
+ "subclasses": {
35
+ "$ref": "#/$defs/_classTableGroupSubclass"
36
+ },
37
+ "colLabels": {
38
+ "type": "array",
39
+ "items": {
40
+ "type": "string"
41
+ }
42
+ },
43
+ "rows": {
44
+ "type": "array",
45
+ "items": {
46
+ "type": "array",
47
+ "items": {
48
+ "$ref": "../entry.json"
49
+ }
50
+ }
51
+ }
52
+ },
53
+ "required": [
54
+ "colLabels",
55
+ "rows"
56
+ ],
57
+ "additionalProperties": false
58
+ },
59
+ {
60
+ "type": "object",
61
+ "properties": {
62
+ "title": {
63
+ "type": "string"
64
+ },
65
+ "subclasses": {
66
+ "$ref": "#/$defs/_classTableGroupSubclass"
67
+ },
68
+ "colLabels": {
69
+ "type": "array",
70
+ "items": {
71
+ "type": "string"
72
+ }
73
+ },
74
+ "rowsSpellProgression": {
75
+ "description": "A count of spell points, starting with 1st-level spells at array index 0, to (n+1)th-level spells at array index n",
76
+ "type": "array",
77
+ "items": {
78
+ "type": "array",
79
+ "items": {
80
+ "type": "integer"
81
+ },
82
+ "minItems": 1,
83
+ "maxItems": 9
84
+ }
85
+ }
86
+ },
87
+ "required": [
88
+ "colLabels",
89
+ "rowsSpellProgression"
90
+ ],
91
+ "additionalProperties": false
92
+ }
93
+ ]
94
+ },
95
+ "classFeature": {
96
+ "type": "object",
97
+ "properties": {
98
+ "name": {
99
+ "type": "string"
100
+ },
101
+ "source": {
102
+ "type": "string"
103
+ },
104
+ "srd": {
105
+ "$ref": "../util.json#/$defs/srd"
106
+ },
107
+ "basicRules": {
108
+ "$ref": "../util.json#/$defs/basicRules"
109
+ },
110
+ "className": {
111
+ "type": "string"
112
+ },
113
+ "classSource": {
114
+ "type": "string"
115
+ },
116
+ "level": {
117
+ "type": "integer"
118
+ },
119
+ "header": {
120
+ "type": "integer"
121
+ },
122
+ "page": {
123
+ "$ref": "../util.json#/$defs/page"
124
+ },
125
+ "type": {
126
+ "type": "string",
127
+ "enum": [
128
+ "inset",
129
+ "item"
130
+ ]
131
+ },
132
+ "entries": {
133
+ "type": "array",
134
+ "items": {
135
+ "$ref": "../entry.json"
136
+ }
137
+ },
138
+ "isClassFeatureVariant": {
139
+ "type": "boolean"
140
+ },
141
+ "otherSources": {
142
+ "$ref": "../util.json#/$defs/otherSources"
143
+ },
144
+ "consumes": {
145
+ "$ref": "../util.json#/$defs/consumesObject"
146
+ }
147
+ },
148
+ "required": [
149
+ "name",
150
+ "source",
151
+ "className",
152
+ "classSource",
153
+ "level",
154
+ "entries"
155
+ ],
156
+ "additionalProperties": false
157
+ },
158
+ "subclassFeature": {
159
+ "type": "object",
160
+ "properties": {
161
+ "name": {
162
+ "type": "string"
163
+ },
164
+ "source": {
165
+ "type": "string"
166
+ },
167
+ "srd": {
168
+ "$ref": "../util.json#/$defs/srd"
169
+ },
170
+ "basicRules": {
171
+ "$ref": "../util.json#/$defs/basicRules"
172
+ },
173
+ "className": {
174
+ "type": "string"
175
+ },
176
+ "classSource": {
177
+ "type": "string"
178
+ },
179
+ "subclassShortName": {
180
+ "type": "string"
181
+ },
182
+ "subclassSource": {
183
+ "type": "string"
184
+ },
185
+ "level": {
186
+ "type": "integer"
187
+ },
188
+ "header": {
189
+ "type": "integer"
190
+ },
191
+ "page": {
192
+ "$ref": "../util.json#/$defs/page"
193
+ },
194
+ "type": {
195
+ "type": "string",
196
+ "enum": [
197
+ "inset",
198
+ "item"
199
+ ]
200
+ },
201
+ "entries": {
202
+ "type": "array",
203
+ "items": {
204
+ "$ref": "../entry.json"
205
+ }
206
+ },
207
+ "isClassFeatureVariant": {
208
+ "type": "boolean"
209
+ },
210
+ "isGainAtNextFeatureLevel": {
211
+ "description": "If this feature should only be (optionally) gained at the next \"gainSubclassFeature\" level, rather than at the level listed on the feature.",
212
+ "type": "boolean"
213
+ },
214
+ "otherSources": {
215
+ "$ref": "../util.json#/$defs/otherSources"
216
+ },
217
+ "consumes": {
218
+ "$ref": "../util.json#/$defs/consumesObject"
219
+ }
220
+ },
221
+ "required": [
222
+ "name",
223
+ "source",
224
+ "className",
225
+ "classSource",
226
+ "subclassShortName",
227
+ "subclassSource",
228
+ "level",
229
+ "entries"
230
+ ],
231
+ "additionalProperties": false
232
+ },
233
+ "proficiencies": {
234
+ "type": "object",
235
+ "properties": {
236
+ "armor": {
237
+ "type": "array",
238
+ "items": {
239
+ "oneOf": [
240
+ {
241
+ "type": "string",
242
+ "enum": [
243
+ "light",
244
+ "medium",
245
+ "heavy",
246
+ "{@item shield|phb|shields}"
247
+ ]
248
+ },
249
+ {
250
+ "type": "object",
251
+ "properties": {
252
+ "proficiency": {
253
+ "type": "string",
254
+ "enum": [
255
+ "light",
256
+ "medium",
257
+ "heavy",
258
+ "{@item shield|phb|shields}",
259
+ "special"
260
+ ]
261
+ },
262
+ "full": {
263
+ "description": "The complete text for this proficiency.",
264
+ "type": "string"
265
+ }
266
+ },
267
+ "required": [
268
+ "proficiency",
269
+ "full"
270
+ ]
271
+ }
272
+ ]
273
+ }
274
+ },
275
+ "weapons": {
276
+ "type": "array",
277
+ "items": {
278
+ "oneOf": [
279
+ {
280
+ "type": "string"
281
+ },
282
+ {
283
+ "type": "object",
284
+ "properties": {
285
+ "proficiency": {
286
+ "type": "string"
287
+ },
288
+ "optional": {
289
+ "type": "boolean"
290
+ }
291
+ },
292
+ "additionalProperties": false,
293
+ "required": [
294
+ "proficiency",
295
+ "optional"
296
+ ]
297
+ }
298
+ ]
299
+ }
300
+ },
301
+ "tools": {
302
+ "type": "array",
303
+ "items": {
304
+ "type": "string"
305
+ }
306
+ },
307
+ "skills": {
308
+ "$ref": "../util.json#/$defs/skillProficiencies"
309
+ }
310
+ }
311
+ },
312
+ "subclass": {
313
+ "anyOf": [
314
+ {
315
+ "type": "object",
316
+ "properties": {
317
+ "name": {
318
+ "type": "string"
319
+ },
320
+ "shortName": {
321
+ "type": "string"
322
+ },
323
+ "source": {
324
+ "type": "string"
325
+ },
326
+ "className": {
327
+ "description": "The name of the class this subclass belongs to.",
328
+ "type": "string"
329
+ },
330
+ "classSource": {
331
+ "description": "The source of the class this subclass belongs to (defaults to PHB).",
332
+ "type": "string"
333
+ },
334
+ "isReprinted": {
335
+ "type": "boolean"
336
+ },
337
+ "srd": {
338
+ "$ref": "../util.json#/$defs/srd"
339
+ },
340
+ "basicRules": {
341
+ "$ref": "../util.json#/$defs/basicRules"
342
+ },
343
+ "page": {
344
+ "$ref": "../util.json#/$defs/page"
345
+ },
346
+ "casterProgression": {
347
+ "enum": [
348
+ "full",
349
+ "1/2",
350
+ "1/3",
351
+ "pact",
352
+ "artificer"
353
+ ]
354
+ },
355
+ "spellcastingAbility": {
356
+ "enum": [
357
+ "str",
358
+ "dex",
359
+ "con",
360
+ "int",
361
+ "wis",
362
+ "cha"
363
+ ]
364
+ },
365
+ "cantripProgression": {
366
+ "type": "array",
367
+ "items": {
368
+ "type": "integer"
369
+ },
370
+ "minItems": 20,
371
+ "maxItems": 20
372
+ },
373
+ "spellsKnownProgression": {
374
+ "type": "array",
375
+ "items": {
376
+ "type": "integer"
377
+ },
378
+ "minItems": 20,
379
+ "maxItems": 20
380
+ },
381
+ "subclassFeatures": {
382
+ "type": "array",
383
+ "description": "Format: \" name | className | classSource | subclassShortName | subclassSource | level | source\"\nPHB is assumed for sources.\nfeatureSource is assumed to be the same as subclassSource.",
384
+ "items": {
385
+ "oneOf": [
386
+ {
387
+ "type": "string"
388
+ },
389
+ {
390
+ "type": "object",
391
+ "properties": {
392
+ "subclassFeature": {
393
+ "type": "string"
394
+ },
395
+ "gainSubclassFeature": {
396
+ "type": "boolean"
397
+ },
398
+ "gainSubclassFeatureHasContent": {
399
+ "description": "Features with \"gainSubclassFeature\" are generally ignored by e.g. VTT integrations, as having no meaningful content to import to sheets. Setting this flag informs the integration that this feature should not be ignored.",
400
+ "type": "boolean"
401
+ },
402
+ "tableDisplayName": {
403
+ "type": "string"
404
+ }
405
+ },
406
+ "required": [
407
+ "subclassFeature"
408
+ ]
409
+ }
410
+ ]
411
+ }
412
+ },
413
+ "optionalfeatureProgression": {
414
+ "$ref": "../util.json#/$defs/optionalfeatureProgression"
415
+ },
416
+ "subclassTableGroups": {
417
+ "type": "array",
418
+ "items": {
419
+ "$ref": "#/$defs/classTableGroup"
420
+ }
421
+ },
422
+ "otherSources": {
423
+ "$ref": "../util.json#/$defs/otherSources"
424
+ },
425
+ "additionalSpells": {
426
+ "$ref": "../util.json#/$defs/additionalSpellsArray"
427
+ }
428
+ },
429
+ "additionalProperties": false,
430
+ "required": [
431
+ "name",
432
+ "shortName",
433
+ "source",
434
+ "className",
435
+ "classSource",
436
+ "subclassFeatures"
437
+ ]
438
+ },
439
+ {
440
+ "type": "object",
441
+ "properties": {
442
+ "name": {
443
+ "type": "string"
444
+ },
445
+ "shortName": {
446
+ "type": "string"
447
+ },
448
+ "source": {
449
+ "type": "string"
450
+ },
451
+ "className": {
452
+ "description": "The name of the class this subclass belongs to.",
453
+ "type": "string"
454
+ },
455
+ "classSource": {
456
+ "description": "The source of the class this subclass belongs to (defaults to PHB).",
457
+ "type": "string"
458
+ },
459
+ "isReprinted": {
460
+ "type": "boolean"
461
+ },
462
+ "srd": {
463
+ "$ref": "../util.json#/$defs/srd"
464
+ },
465
+ "basicRules": {
466
+ "$ref": "../util.json#/$defs/basicRules"
467
+ },
468
+ "page": {
469
+ "$ref": "../util.json#/$defs/page"
470
+ },
471
+ "casterProgression": {
472
+ "enum": [
473
+ "full",
474
+ "1/2",
475
+ "1/3",
476
+ "pact",
477
+ "artificer"
478
+ ]
479
+ },
480
+ "spellcastingAbility": {
481
+ "enum": [
482
+ "str",
483
+ "dex",
484
+ "con",
485
+ "int",
486
+ "wis",
487
+ "cha"
488
+ ]
489
+ },
490
+ "cantripProgression": {
491
+ "type": "array",
492
+ "items": {
493
+ "type": "integer"
494
+ },
495
+ "minItems": 20,
496
+ "maxItems": 20
497
+ },
498
+ "spellsKnownProgression": {
499
+ "type": "array",
500
+ "items": {
501
+ "type": "integer"
502
+ },
503
+ "minItems": 20,
504
+ "maxItems": 20
505
+ },
506
+ "subclassFeatures": {
507
+ "type": "array",
508
+ "description": "Format: \" name | className | classSource | subclassShortName | subclassSource | level | source\"\nPHB is assumed for sources.\nfeatureSource is assumed to be the same as subclassSource.",
509
+ "items": {
510
+ "oneOf": [
511
+ {
512
+ "type": "string"
513
+ },
514
+ {
515
+ "type": "object",
516
+ "properties": {
517
+ "subclassFeature": {
518
+ "type": "string"
519
+ },
520
+ "gainSubclassFeature": {
521
+ "type": "boolean"
522
+ },
523
+ "gainSubclassFeatureHasContent": {
524
+ "description": "Features with \"gainSubclassFeature\" are generally ignored by e.g. VTT integrations, as having no meaningful content to import to sheets. Setting this flag informs the integration that this feature should not be ignored.",
525
+ "type": "boolean"
526
+ },
527
+ "tableDisplayName": {
528
+ "type": "string"
529
+ }
530
+ },
531
+ "required": [
532
+ "subclassFeature"
533
+ ]
534
+ }
535
+ ]
536
+ }
537
+ },
538
+ "optionalfeatureProgression": {
539
+ "$ref": "../util.json#/$defs/optionalfeatureProgression"
540
+ },
541
+ "subclassTableGroups": {
542
+ "type": "array",
543
+ "items": {
544
+ "$ref": "#/$defs/classTableGroup"
545
+ }
546
+ },
547
+ "otherSources": {
548
+ "$ref": "../util.json#/$defs/otherSources"
549
+ },
550
+ "additionalSpells": {
551
+ "$ref": "../util.json#/$defs/additionalSpellsArray"
552
+ },
553
+ "_copy": {
554
+ "type": "object",
555
+ "properties": {
556
+ "name": {
557
+ "type": "string"
558
+ },
559
+ "source": {
560
+ "type": "string"
561
+ },
562
+ "pantheon": {
563
+ "description": "Used in deity data",
564
+ "type": "string"
565
+ },
566
+ "shortName": {
567
+ "description": "Used in subclass data",
568
+ "type": "string"
569
+ },
570
+ "className": {
571
+ "description": "Used in subclass data",
572
+ "type": "string"
573
+ },
574
+ "classSource": {
575
+ "description": "Used in subclass data",
576
+ "type": "string"
577
+ },
578
+ "_mod": {
579
+ "$ref": "../util.json#/$defs/_modObject"
580
+ },
581
+ "_trait": {
582
+ "type": "object",
583
+ "properties": {
584
+ "name": {
585
+ "type": "string"
586
+ },
587
+ "source": {
588
+ "type": "string"
589
+ }
590
+ },
591
+ "required": [
592
+ "name",
593
+ "source"
594
+ ]
595
+ },
596
+ "_preserve": {
597
+ "type": "object",
598
+ "patternProperties": {
599
+ ".*": {
600
+ "const": true
601
+ }
602
+ }
603
+ }
604
+ },
605
+ "required": [
606
+ "name",
607
+ "source"
608
+ ],
609
+ "additionalProperties": false
610
+ }
611
+ },
612
+ "additionalProperties": false,
613
+ "required": [
614
+ "_copy"
615
+ ]
616
+ }
617
+ ]
618
+ },
619
+ "subclassData": {
620
+ "type": "object",
621
+ "properties": {
622
+ "name": {
623
+ "type": "string"
624
+ },
625
+ "shortName": {
626
+ "type": "string"
627
+ },
628
+ "source": {
629
+ "type": "string"
630
+ },
631
+ "className": {
632
+ "description": "The name of the class this subclass belongs to.",
633
+ "type": "string"
634
+ },
635
+ "classSource": {
636
+ "description": "The source of the class this subclass belongs to (defaults to PHB).",
637
+ "type": "string"
638
+ },
639
+ "isReprinted": {
640
+ "type": "boolean"
641
+ },
642
+ "srd": {
643
+ "$ref": "../util.json#/$defs/srd"
644
+ },
645
+ "basicRules": {
646
+ "$ref": "../util.json#/$defs/basicRules"
647
+ },
648
+ "page": {
649
+ "$ref": "../util.json#/$defs/page"
650
+ },
651
+ "casterProgression": {
652
+ "enum": [
653
+ "full",
654
+ "1/2",
655
+ "1/3",
656
+ "pact",
657
+ "artificer"
658
+ ]
659
+ },
660
+ "spellcastingAbility": {
661
+ "enum": [
662
+ "str",
663
+ "dex",
664
+ "con",
665
+ "int",
666
+ "wis",
667
+ "cha"
668
+ ]
669
+ },
670
+ "cantripProgression": {
671
+ "type": "array",
672
+ "items": {
673
+ "type": "integer"
674
+ },
675
+ "minItems": 20,
676
+ "maxItems": 20
677
+ },
678
+ "spellsKnownProgression": {
679
+ "type": "array",
680
+ "items": {
681
+ "type": "integer"
682
+ },
683
+ "minItems": 20,
684
+ "maxItems": 20
685
+ },
686
+ "subclassFeatures": {
687
+ "type": "array",
688
+ "description": "Format: \" name | className | classSource | subclassShortName | subclassSource | level | source\"\nPHB is assumed for sources.\nfeatureSource is assumed to be the same as subclassSource.",
689
+ "items": {
690
+ "oneOf": [
691
+ {
692
+ "type": "string"
693
+ },
694
+ {
695
+ "type": "object",
696
+ "properties": {
697
+ "subclassFeature": {
698
+ "type": "string"
699
+ },
700
+ "gainSubclassFeature": {
701
+ "type": "boolean"
702
+ },
703
+ "gainSubclassFeatureHasContent": {
704
+ "description": "Features with \"gainSubclassFeature\" are generally ignored by e.g. VTT integrations, as having no meaningful content to import to sheets. Setting this flag informs the integration that this feature should not be ignored.",
705
+ "type": "boolean"
706
+ },
707
+ "tableDisplayName": {
708
+ "type": "string"
709
+ }
710
+ },
711
+ "required": [
712
+ "subclassFeature"
713
+ ]
714
+ }
715
+ ]
716
+ }
717
+ },
718
+ "optionalfeatureProgression": {
719
+ "$ref": "../util.json#/$defs/optionalfeatureProgression"
720
+ },
721
+ "subclassTableGroups": {
722
+ "type": "array",
723
+ "items": {
724
+ "$ref": "#/$defs/classTableGroup"
725
+ }
726
+ },
727
+ "otherSources": {
728
+ "$ref": "../util.json#/$defs/otherSources"
729
+ },
730
+ "additionalSpells": {
731
+ "$ref": "../util.json#/$defs/additionalSpellsArray"
732
+ }
733
+ },
734
+ "additionalProperties": false
735
+ },
736
+ "requirements": {
737
+ "type": "object",
738
+ "properties": {
739
+ "str": {
740
+ "type": "integer"
741
+ },
742
+ "dex": {
743
+ "type": "integer"
744
+ },
745
+ "con": {
746
+ "type": "integer"
747
+ },
748
+ "int": {
749
+ "type": "integer"
750
+ },
751
+ "wis": {
752
+ "type": "integer"
753
+ },
754
+ "cha": {
755
+ "type": "integer"
756
+ },
757
+ "or": {
758
+ "type": "array",
759
+ "items": {
760
+ "type": "object",
761
+ "properties": {
762
+ "str": {
763
+ "type": "integer"
764
+ },
765
+ "dex": {
766
+ "type": "integer"
767
+ },
768
+ "con": {
769
+ "type": "integer"
770
+ },
771
+ "int": {
772
+ "type": "integer"
773
+ },
774
+ "wis": {
775
+ "type": "integer"
776
+ },
777
+ "cha": {
778
+ "type": "integer"
779
+ }
780
+ },
781
+ "additionalProperties": false
782
+ }
783
+ },
784
+ "entries": {
785
+ "type": "array",
786
+ "items": {
787
+ "$ref": "../entry.json"
788
+ }
789
+ }
790
+ },
791
+ "additionalProperties": false
792
+ },
793
+ "class": {
794
+ "anyOf": [
795
+ {
796
+ "type": "object",
797
+ "description": "A character class",
798
+ "properties": {
799
+ "name": {
800
+ "type": "string"
801
+ },
802
+ "source": {
803
+ "type": "string"
804
+ },
805
+ "otherSources": {
806
+ "$ref": "../util.json#/$defs/otherSources"
807
+ },
808
+ "srd": {
809
+ "$ref": "../util.json#/$defs/srd"
810
+ },
811
+ "basicRules": {
812
+ "$ref": "../util.json#/$defs/basicRules"
813
+ },
814
+ "isReprinted": {
815
+ "type": "boolean"
816
+ },
817
+ "classGroup": {
818
+ "type": "array",
819
+ "items": {
820
+ "type": "string",
821
+ "enum": [
822
+ "expert",
823
+ "mage",
824
+ "priest",
825
+ "warrior"
826
+ ]
827
+ }
828
+ },
829
+ "isSidekick": {
830
+ "type": "boolean"
831
+ },
832
+ "hd": {
833
+ "type": "object",
834
+ "properties": {
835
+ "number": {
836
+ "type": "integer"
837
+ },
838
+ "faces": {
839
+ "type": "integer"
840
+ }
841
+ },
842
+ "required": [
843
+ "number",
844
+ "faces"
845
+ ],
846
+ "additionalProperties": false
847
+ },
848
+ "proficiency": {
849
+ "type": "array",
850
+ "items": {
851
+ "type": "string",
852
+ "enum": [
853
+ "str",
854
+ "dex",
855
+ "con",
856
+ "int",
857
+ "wis",
858
+ "cha"
859
+ ]
860
+ }
861
+ },
862
+ "classTableGroups": {
863
+ "type": "array",
864
+ "items": {
865
+ "$ref": "#/$defs/classTableGroup"
866
+ }
867
+ },
868
+ "startingProficiencies": {
869
+ "$ref": "#/$defs/proficiencies"
870
+ },
871
+ "startingEquipment": {
872
+ "type": "object",
873
+ "properties": {
874
+ "additionalFromBackground": {
875
+ "type": "boolean"
876
+ },
877
+ "default": {
878
+ "type": "array",
879
+ "items": {
880
+ "type": "string"
881
+ }
882
+ },
883
+ "defaultData": {
884
+ "$ref": "../util.json#/$defs/startingEquipment"
885
+ },
886
+ "goldAlternative": {
887
+ "type": "string"
888
+ }
889
+ },
890
+ "required": [
891
+ "additionalFromBackground",
892
+ "default"
893
+ ],
894
+ "additionalProperties": false
895
+ },
896
+ "requirements": {
897
+ "$ref": "#/$defs/requirements"
898
+ },
899
+ "multiclassing": {
900
+ "type": "object",
901
+ "properties": {
902
+ "requirements": {
903
+ "$ref": "#/$defs/requirements"
904
+ },
905
+ "proficienciesGained": {
906
+ "$ref": "#/$defs/proficiencies"
907
+ },
908
+ "entries": {
909
+ "type": "array",
910
+ "items": {
911
+ "$ref": "../entry.json"
912
+ }
913
+ }
914
+ },
915
+ "additionalProperties": false
916
+ },
917
+ "casterProgression": {
918
+ "enum": [
919
+ "full",
920
+ "1/2",
921
+ "1/3",
922
+ "pact",
923
+ "artificer"
924
+ ]
925
+ },
926
+ "preparedSpells": {
927
+ "type": "string",
928
+ "description": "Formula for the number of spells the class can prepare, for example:\n\"<$level$> / 2 + <$int_mod$>\""
929
+ },
930
+ "spellcastingAbility": {
931
+ "enum": [
932
+ "str",
933
+ "dex",
934
+ "con",
935
+ "int",
936
+ "wis",
937
+ "cha"
938
+ ]
939
+ },
940
+ "cantripProgression": {
941
+ "type": "array",
942
+ "items": {
943
+ "type": "integer"
944
+ },
945
+ "minItems": 20,
946
+ "maxItems": 20
947
+ },
948
+ "spellsKnownProgression": {
949
+ "type": "array",
950
+ "items": {
951
+ "type": "integer"
952
+ },
953
+ "minItems": 20,
954
+ "maxItems": 20
955
+ },
956
+ "spellsKnownProgressionFixed": {
957
+ "description": "For e.g. Wizard, where the spells taken at each level must be <= the max spellcasting level, and cannot be swapped out afterward.",
958
+ "type": "array",
959
+ "items": {
960
+ "type": "integer"
961
+ },
962
+ "minItems": 20,
963
+ "maxItems": 20
964
+ },
965
+ "spellsKnownProgressionFixedAllowLowerLevel": {
966
+ "type": "boolean"
967
+ },
968
+ "spellsKnownProgressionFixedByLevel": {
969
+ "description": "For e.g. Warlock Mystic Arcanum. A map of <class level> -> <spell level> -> <number of spells known>",
970
+ "type": "object",
971
+ "patternProperties": {
972
+ "^\\d+$": {
973
+ "type": "object",
974
+ "properties": {
975
+ "1": {
976
+ "type": "integer"
977
+ },
978
+ "2": {
979
+ "type": "integer"
980
+ },
981
+ "3": {
982
+ "type": "integer"
983
+ },
984
+ "4": {
985
+ "type": "integer"
986
+ },
987
+ "5": {
988
+ "type": "integer"
989
+ },
990
+ "6": {
991
+ "type": "integer"
992
+ },
993
+ "7": {
994
+ "type": "integer"
995
+ },
996
+ "8": {
997
+ "type": "integer"
998
+ },
999
+ "9": {
1000
+ "type": "integer"
1001
+ }
1002
+ },
1003
+ "additionalProperties": false
1004
+ }
1005
+ },
1006
+ "additionalProperties": false
1007
+ },
1008
+ "optionalfeatureProgression": {
1009
+ "$ref": "../util.json#/$defs/optionalfeatureProgression"
1010
+ },
1011
+ "classFeatures": {
1012
+ "type": "array",
1013
+ "description": "Format: \" name | className | classSource | level | source \" , PHB is assumed as classSource and featureSource is assumed to be the same as classSource.",
1014
+ "items": {
1015
+ "oneOf": [
1016
+ {
1017
+ "type": "string"
1018
+ },
1019
+ {
1020
+ "type": "object",
1021
+ "properties": {
1022
+ "classFeature": {
1023
+ "type": "string"
1024
+ },
1025
+ "gainSubclassFeature": {
1026
+ "type": "boolean"
1027
+ }
1028
+ },
1029
+ "required": [
1030
+ "classFeature"
1031
+ ]
1032
+ }
1033
+ ]
1034
+ }
1035
+ },
1036
+ "subclassTitle": {
1037
+ "type": "string"
1038
+ },
1039
+ "page": {
1040
+ "$ref": "../util.json#/$defs/page"
1041
+ },
1042
+ "fluff": {
1043
+ "type": "array",
1044
+ "items": {
1045
+ "type": "object",
1046
+ "properties": {
1047
+ "name": {
1048
+ "type": "string"
1049
+ },
1050
+ "entries": {
1051
+ "type": "array",
1052
+ "items": {
1053
+ "$ref": "../entry.json"
1054
+ }
1055
+ },
1056
+ "page": {
1057
+ "$ref": "../util.json#/$defs/page"
1058
+ },
1059
+ "source": {
1060
+ "type": "string"
1061
+ },
1062
+ "type": {
1063
+ "type": "string"
1064
+ }
1065
+ },
1066
+ "required": [
1067
+ "entries",
1068
+ "source"
1069
+ ],
1070
+ "additionalProperties": false
1071
+ }
1072
+ },
1073
+ "additionalSpells": {
1074
+ "$ref": "../util.json#/$defs/additionalSpellsArray"
1075
+ }
1076
+ },
1077
+ "additionalProperties": false,
1078
+ "required": [
1079
+ "name",
1080
+ "source",
1081
+ "classFeatures"
1082
+ ]
1083
+ },
1084
+ {
1085
+ "type": "object",
1086
+ "description": "A character class",
1087
+ "properties": {
1088
+ "name": {
1089
+ "type": "string"
1090
+ },
1091
+ "source": {
1092
+ "type": "string"
1093
+ },
1094
+ "otherSources": {
1095
+ "$ref": "../util.json#/$defs/otherSources"
1096
+ },
1097
+ "srd": {
1098
+ "$ref": "../util.json#/$defs/srd"
1099
+ },
1100
+ "basicRules": {
1101
+ "$ref": "../util.json#/$defs/basicRules"
1102
+ },
1103
+ "isReprinted": {
1104
+ "type": "boolean"
1105
+ },
1106
+ "classGroup": {
1107
+ "type": "array",
1108
+ "items": {
1109
+ "type": "string",
1110
+ "enum": [
1111
+ "expert",
1112
+ "mage",
1113
+ "priest",
1114
+ "warrior"
1115
+ ]
1116
+ }
1117
+ },
1118
+ "isSidekick": {
1119
+ "type": "boolean"
1120
+ },
1121
+ "hd": {
1122
+ "type": "object",
1123
+ "properties": {
1124
+ "number": {
1125
+ "type": "integer"
1126
+ },
1127
+ "faces": {
1128
+ "type": "integer"
1129
+ }
1130
+ },
1131
+ "required": [
1132
+ "number",
1133
+ "faces"
1134
+ ],
1135
+ "additionalProperties": false
1136
+ },
1137
+ "proficiency": {
1138
+ "type": "array",
1139
+ "items": {
1140
+ "type": "string",
1141
+ "enum": [
1142
+ "str",
1143
+ "dex",
1144
+ "con",
1145
+ "int",
1146
+ "wis",
1147
+ "cha"
1148
+ ]
1149
+ }
1150
+ },
1151
+ "classTableGroups": {
1152
+ "type": "array",
1153
+ "items": {
1154
+ "$ref": "#/$defs/classTableGroup"
1155
+ }
1156
+ },
1157
+ "startingProficiencies": {
1158
+ "$ref": "#/$defs/proficiencies"
1159
+ },
1160
+ "startingEquipment": {
1161
+ "type": "object",
1162
+ "properties": {
1163
+ "additionalFromBackground": {
1164
+ "type": "boolean"
1165
+ },
1166
+ "default": {
1167
+ "type": "array",
1168
+ "items": {
1169
+ "type": "string"
1170
+ }
1171
+ },
1172
+ "defaultData": {
1173
+ "$ref": "../util.json#/$defs/startingEquipment"
1174
+ },
1175
+ "goldAlternative": {
1176
+ "type": "string"
1177
+ }
1178
+ },
1179
+ "required": [
1180
+ "additionalFromBackground",
1181
+ "default"
1182
+ ],
1183
+ "additionalProperties": false
1184
+ },
1185
+ "requirements": {
1186
+ "$ref": "#/$defs/requirements"
1187
+ },
1188
+ "multiclassing": {
1189
+ "type": "object",
1190
+ "properties": {
1191
+ "requirements": {
1192
+ "$ref": "#/$defs/requirements"
1193
+ },
1194
+ "proficienciesGained": {
1195
+ "$ref": "#/$defs/proficiencies"
1196
+ },
1197
+ "entries": {
1198
+ "type": "array",
1199
+ "items": {
1200
+ "$ref": "../entry.json"
1201
+ }
1202
+ }
1203
+ },
1204
+ "additionalProperties": false
1205
+ },
1206
+ "casterProgression": {
1207
+ "enum": [
1208
+ "full",
1209
+ "1/2",
1210
+ "1/3",
1211
+ "pact",
1212
+ "artificer"
1213
+ ]
1214
+ },
1215
+ "preparedSpells": {
1216
+ "type": "string",
1217
+ "description": "Formula for the number of spells the class can prepare, for example:\n\"<$level$> / 2 + <$int_mod$>\""
1218
+ },
1219
+ "spellcastingAbility": {
1220
+ "enum": [
1221
+ "str",
1222
+ "dex",
1223
+ "con",
1224
+ "int",
1225
+ "wis",
1226
+ "cha"
1227
+ ]
1228
+ },
1229
+ "cantripProgression": {
1230
+ "type": "array",
1231
+ "items": {
1232
+ "type": "integer"
1233
+ },
1234
+ "minItems": 20,
1235
+ "maxItems": 20
1236
+ },
1237
+ "spellsKnownProgression": {
1238
+ "type": "array",
1239
+ "items": {
1240
+ "type": "integer"
1241
+ },
1242
+ "minItems": 20,
1243
+ "maxItems": 20
1244
+ },
1245
+ "spellsKnownProgressionFixed": {
1246
+ "description": "For e.g. Wizard, where the spells taken at each level must be <= the max spellcasting level, and cannot be swapped out afterward.",
1247
+ "type": "array",
1248
+ "items": {
1249
+ "type": "integer"
1250
+ },
1251
+ "minItems": 20,
1252
+ "maxItems": 20
1253
+ },
1254
+ "spellsKnownProgressionFixedAllowLowerLevel": {
1255
+ "type": "boolean"
1256
+ },
1257
+ "spellsKnownProgressionFixedByLevel": {
1258
+ "description": "For e.g. Warlock Mystic Arcanum. A map of <class level> -> <spell level> -> <number of spells known>",
1259
+ "type": "object",
1260
+ "patternProperties": {
1261
+ "^\\d+$": {
1262
+ "type": "object",
1263
+ "properties": {
1264
+ "1": {
1265
+ "type": "integer"
1266
+ },
1267
+ "2": {
1268
+ "type": "integer"
1269
+ },
1270
+ "3": {
1271
+ "type": "integer"
1272
+ },
1273
+ "4": {
1274
+ "type": "integer"
1275
+ },
1276
+ "5": {
1277
+ "type": "integer"
1278
+ },
1279
+ "6": {
1280
+ "type": "integer"
1281
+ },
1282
+ "7": {
1283
+ "type": "integer"
1284
+ },
1285
+ "8": {
1286
+ "type": "integer"
1287
+ },
1288
+ "9": {
1289
+ "type": "integer"
1290
+ }
1291
+ },
1292
+ "additionalProperties": false
1293
+ }
1294
+ },
1295
+ "additionalProperties": false
1296
+ },
1297
+ "optionalfeatureProgression": {
1298
+ "$ref": "../util.json#/$defs/optionalfeatureProgression"
1299
+ },
1300
+ "classFeatures": {
1301
+ "type": "array",
1302
+ "description": "Format: \" name | className | classSource | level | source \" , PHB is assumed as classSource and featureSource is assumed to be the same as classSource.",
1303
+ "items": {
1304
+ "oneOf": [
1305
+ {
1306
+ "type": "string"
1307
+ },
1308
+ {
1309
+ "type": "object",
1310
+ "properties": {
1311
+ "classFeature": {
1312
+ "type": "string"
1313
+ },
1314
+ "gainSubclassFeature": {
1315
+ "type": "boolean"
1316
+ }
1317
+ },
1318
+ "required": [
1319
+ "classFeature"
1320
+ ]
1321
+ }
1322
+ ]
1323
+ }
1324
+ },
1325
+ "subclassTitle": {
1326
+ "type": "string"
1327
+ },
1328
+ "page": {
1329
+ "$ref": "../util.json#/$defs/page"
1330
+ },
1331
+ "fluff": {
1332
+ "type": "array",
1333
+ "items": {
1334
+ "type": "object",
1335
+ "properties": {
1336
+ "name": {
1337
+ "type": "string"
1338
+ },
1339
+ "entries": {
1340
+ "type": "array",
1341
+ "items": {
1342
+ "$ref": "../entry.json"
1343
+ }
1344
+ },
1345
+ "page": {
1346
+ "$ref": "../util.json#/$defs/page"
1347
+ },
1348
+ "source": {
1349
+ "type": "string"
1350
+ },
1351
+ "type": {
1352
+ "type": "string"
1353
+ }
1354
+ },
1355
+ "required": [
1356
+ "entries",
1357
+ "source"
1358
+ ],
1359
+ "additionalProperties": false
1360
+ }
1361
+ },
1362
+ "additionalSpells": {
1363
+ "$ref": "../util.json#/$defs/additionalSpellsArray"
1364
+ },
1365
+ "_copy": {
1366
+ "type": "object",
1367
+ "properties": {
1368
+ "name": {
1369
+ "type": "string"
1370
+ },
1371
+ "source": {
1372
+ "type": "string"
1373
+ },
1374
+ "pantheon": {
1375
+ "description": "Used in deity data",
1376
+ "type": "string"
1377
+ },
1378
+ "shortName": {
1379
+ "description": "Used in subclass data",
1380
+ "type": "string"
1381
+ },
1382
+ "className": {
1383
+ "description": "Used in subclass data",
1384
+ "type": "string"
1385
+ },
1386
+ "classSource": {
1387
+ "description": "Used in subclass data",
1388
+ "type": "string"
1389
+ },
1390
+ "_mod": {
1391
+ "$ref": "../util.json#/$defs/_modObject"
1392
+ },
1393
+ "_trait": {
1394
+ "type": "object",
1395
+ "properties": {
1396
+ "name": {
1397
+ "type": "string"
1398
+ },
1399
+ "source": {
1400
+ "type": "string"
1401
+ }
1402
+ },
1403
+ "required": [
1404
+ "name",
1405
+ "source"
1406
+ ]
1407
+ },
1408
+ "_preserve": {
1409
+ "type": "object",
1410
+ "patternProperties": {
1411
+ ".*": {
1412
+ "const": true
1413
+ }
1414
+ }
1415
+ }
1416
+ },
1417
+ "required": [
1418
+ "name",
1419
+ "source"
1420
+ ],
1421
+ "additionalProperties": false
1422
+ }
1423
+ },
1424
+ "additionalProperties": false,
1425
+ "required": [
1426
+ "_copy"
1427
+ ]
1428
+ }
1429
+ ]
1430
+ },
1431
+ "classData": {
1432
+ "description": "A character class",
1433
+ "type": "object",
1434
+ "properties": {
1435
+ "name": {
1436
+ "type": "string"
1437
+ },
1438
+ "source": {
1439
+ "type": "string"
1440
+ },
1441
+ "otherSources": {
1442
+ "$ref": "../util.json#/$defs/otherSources"
1443
+ },
1444
+ "srd": {
1445
+ "$ref": "../util.json#/$defs/srd"
1446
+ },
1447
+ "basicRules": {
1448
+ "$ref": "../util.json#/$defs/basicRules"
1449
+ },
1450
+ "isReprinted": {
1451
+ "type": "boolean"
1452
+ },
1453
+ "classGroup": {
1454
+ "type": "array",
1455
+ "items": {
1456
+ "type": "string",
1457
+ "enum": [
1458
+ "expert",
1459
+ "mage",
1460
+ "priest",
1461
+ "warrior"
1462
+ ]
1463
+ }
1464
+ },
1465
+ "isSidekick": {
1466
+ "type": "boolean"
1467
+ },
1468
+ "hd": {
1469
+ "type": "object",
1470
+ "properties": {
1471
+ "number": {
1472
+ "type": "integer"
1473
+ },
1474
+ "faces": {
1475
+ "type": "integer"
1476
+ }
1477
+ },
1478
+ "required": [
1479
+ "number",
1480
+ "faces"
1481
+ ],
1482
+ "additionalProperties": false
1483
+ },
1484
+ "proficiency": {
1485
+ "type": "array",
1486
+ "items": {
1487
+ "type": "string",
1488
+ "enum": [
1489
+ "str",
1490
+ "dex",
1491
+ "con",
1492
+ "int",
1493
+ "wis",
1494
+ "cha"
1495
+ ]
1496
+ }
1497
+ },
1498
+ "classTableGroups": {
1499
+ "type": "array",
1500
+ "items": {
1501
+ "$ref": "#/$defs/classTableGroup"
1502
+ }
1503
+ },
1504
+ "startingProficiencies": {
1505
+ "$ref": "#/$defs/proficiencies"
1506
+ },
1507
+ "startingEquipment": {
1508
+ "type": "object",
1509
+ "properties": {
1510
+ "additionalFromBackground": {
1511
+ "type": "boolean"
1512
+ },
1513
+ "default": {
1514
+ "type": "array",
1515
+ "items": {
1516
+ "type": "string"
1517
+ }
1518
+ },
1519
+ "defaultData": {
1520
+ "$ref": "../util.json#/$defs/startingEquipment"
1521
+ },
1522
+ "goldAlternative": {
1523
+ "type": "string"
1524
+ }
1525
+ },
1526
+ "required": [
1527
+ "additionalFromBackground",
1528
+ "default"
1529
+ ],
1530
+ "additionalProperties": false
1531
+ },
1532
+ "requirements": {
1533
+ "$ref": "#/$defs/requirements"
1534
+ },
1535
+ "multiclassing": {
1536
+ "type": "object",
1537
+ "properties": {
1538
+ "requirements": {
1539
+ "$ref": "#/$defs/requirements"
1540
+ },
1541
+ "proficienciesGained": {
1542
+ "$ref": "#/$defs/proficiencies"
1543
+ },
1544
+ "entries": {
1545
+ "type": "array",
1546
+ "items": {
1547
+ "$ref": "../entry.json"
1548
+ }
1549
+ }
1550
+ },
1551
+ "additionalProperties": false
1552
+ },
1553
+ "casterProgression": {
1554
+ "enum": [
1555
+ "full",
1556
+ "1/2",
1557
+ "1/3",
1558
+ "pact",
1559
+ "artificer"
1560
+ ]
1561
+ },
1562
+ "preparedSpells": {
1563
+ "type": "string",
1564
+ "description": "Formula for the number of spells the class can prepare, for example:\n\"<$level$> / 2 + <$int_mod$>\""
1565
+ },
1566
+ "spellcastingAbility": {
1567
+ "enum": [
1568
+ "str",
1569
+ "dex",
1570
+ "con",
1571
+ "int",
1572
+ "wis",
1573
+ "cha"
1574
+ ]
1575
+ },
1576
+ "cantripProgression": {
1577
+ "type": "array",
1578
+ "items": {
1579
+ "type": "integer"
1580
+ },
1581
+ "minItems": 20,
1582
+ "maxItems": 20
1583
+ },
1584
+ "spellsKnownProgression": {
1585
+ "type": "array",
1586
+ "items": {
1587
+ "type": "integer"
1588
+ },
1589
+ "minItems": 20,
1590
+ "maxItems": 20
1591
+ },
1592
+ "spellsKnownProgressionFixed": {
1593
+ "description": "For e.g. Wizard, where the spells taken at each level must be <= the max spellcasting level, and cannot be swapped out afterward.",
1594
+ "type": "array",
1595
+ "items": {
1596
+ "type": "integer"
1597
+ },
1598
+ "minItems": 20,
1599
+ "maxItems": 20
1600
+ },
1601
+ "spellsKnownProgressionFixedAllowLowerLevel": {
1602
+ "type": "boolean"
1603
+ },
1604
+ "spellsKnownProgressionFixedByLevel": {
1605
+ "description": "For e.g. Warlock Mystic Arcanum. A map of <class level> -> <spell level> -> <number of spells known>",
1606
+ "type": "object",
1607
+ "patternProperties": {
1608
+ "^\\d+$": {
1609
+ "type": "object",
1610
+ "properties": {
1611
+ "1": {
1612
+ "type": "integer"
1613
+ },
1614
+ "2": {
1615
+ "type": "integer"
1616
+ },
1617
+ "3": {
1618
+ "type": "integer"
1619
+ },
1620
+ "4": {
1621
+ "type": "integer"
1622
+ },
1623
+ "5": {
1624
+ "type": "integer"
1625
+ },
1626
+ "6": {
1627
+ "type": "integer"
1628
+ },
1629
+ "7": {
1630
+ "type": "integer"
1631
+ },
1632
+ "8": {
1633
+ "type": "integer"
1634
+ },
1635
+ "9": {
1636
+ "type": "integer"
1637
+ }
1638
+ },
1639
+ "additionalProperties": false
1640
+ }
1641
+ },
1642
+ "additionalProperties": false
1643
+ },
1644
+ "optionalfeatureProgression": {
1645
+ "$ref": "../util.json#/$defs/optionalfeatureProgression"
1646
+ },
1647
+ "classFeatures": {
1648
+ "type": "array",
1649
+ "description": "Format: \" name | className | classSource | level | source \" , PHB is assumed as classSource and featureSource is assumed to be the same as classSource.",
1650
+ "items": {
1651
+ "oneOf": [
1652
+ {
1653
+ "type": "string"
1654
+ },
1655
+ {
1656
+ "type": "object",
1657
+ "properties": {
1658
+ "classFeature": {
1659
+ "type": "string"
1660
+ },
1661
+ "gainSubclassFeature": {
1662
+ "type": "boolean"
1663
+ }
1664
+ },
1665
+ "required": [
1666
+ "classFeature"
1667
+ ]
1668
+ }
1669
+ ]
1670
+ }
1671
+ },
1672
+ "subclassTitle": {
1673
+ "type": "string"
1674
+ },
1675
+ "page": {
1676
+ "$ref": "../util.json#/$defs/page"
1677
+ },
1678
+ "fluff": {
1679
+ "type": "array",
1680
+ "items": {
1681
+ "type": "object",
1682
+ "properties": {
1683
+ "name": {
1684
+ "type": "string"
1685
+ },
1686
+ "entries": {
1687
+ "type": "array",
1688
+ "items": {
1689
+ "$ref": "../entry.json"
1690
+ }
1691
+ },
1692
+ "page": {
1693
+ "$ref": "../util.json#/$defs/page"
1694
+ },
1695
+ "source": {
1696
+ "type": "string"
1697
+ },
1698
+ "type": {
1699
+ "type": "string"
1700
+ }
1701
+ },
1702
+ "required": [
1703
+ "entries",
1704
+ "source"
1705
+ ],
1706
+ "additionalProperties": false
1707
+ }
1708
+ },
1709
+ "additionalSpells": {
1710
+ "$ref": "../util.json#/$defs/additionalSpellsArray"
1711
+ }
1712
+ },
1713
+ "additionalProperties": false
1714
+ },
1715
+ "spellRef": {
1716
+ "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.",
1717
+ "oneOf": [
1718
+ {
1719
+ "description": "Another class/subclass/subsubclass's spell list",
1720
+ "type": "object",
1721
+ "properties": {
1722
+ "className": {
1723
+ "type": "string"
1724
+ },
1725
+ "classSource": {
1726
+ "type": "string"
1727
+ },
1728
+ "subclassName": {
1729
+ "type": "string"
1730
+ },
1731
+ "subclassSource": {
1732
+ "type": "string"
1733
+ },
1734
+ "subSubclassName": {
1735
+ "type": "string"
1736
+ },
1737
+ "subSubclassSource": {
1738
+ "type": "string"
1739
+ }
1740
+ },
1741
+ "required": [
1742
+ "className",
1743
+ "classSource"
1744
+ ],
1745
+ "additionalProperties": false
1746
+ },
1747
+ {
1748
+ "description": "A spell UID of the form \"fireball\" (PHB source assumed by default) or \"shape water|xge\"",
1749
+ "type": "string"
1750
+ }
1751
+ ]
1752
+ }
1753
+ },
1754
+ "properties": {
1755
+ "_meta": {
1756
+ "$ref": "../util.json#/$defs/metaBlock"
1757
+ },
1758
+ "class": {
1759
+ "type": "array",
1760
+ "items": {
1761
+ "$ref": "#/$defs/class"
1762
+ },
1763
+ "minItems": 1,
1764
+ "uniqueItems": true
1765
+ },
1766
+ "subclass": {
1767
+ "type": "array",
1768
+ "items": {
1769
+ "$ref": "#/$defs/subclass"
1770
+ },
1771
+ "minItems": 1,
1772
+ "uniqueItems": true
1773
+ },
1774
+ "classFeature": {
1775
+ "type": "array",
1776
+ "items": {
1777
+ "$ref": "#/$defs/classFeature"
1778
+ },
1779
+ "minItems": 1,
1780
+ "uniqueItems": true
1781
+ },
1782
+ "subclassFeature": {
1783
+ "type": "array",
1784
+ "items": {
1785
+ "$ref": "#/$defs/subclassFeature"
1786
+ },
1787
+ "minItems": 1,
1788
+ "uniqueItems": true
1789
+ }
1790
+ },
1791
+ "additionalProperties": false
1792
+ }