spell.json 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. {
  2. "$schema": "http://json-schema.org/draft-06/schema#",
  3. "properties": {
  4. "allowsSpellResistance": {
  5. "type": "boolean"
  6. },
  7. "area": {
  8. "oneOf":[
  9. {"$ref": "#/definitions/area/Line"},
  10. {"$ref": "#/definitions/area/Emission"},
  11. {"$ref": "#/definitions/area/Sphere"},
  12. {"$ref": "#/definitions/area/Cylinder"}
  13. ]
  14. },
  15. "castingTime": {
  16. "type": "string",
  17. "enum": ["Free", "Swift", "Move", "Standard", "Full"]
  18. },
  19. "classToLevel": {
  20. "patternProperties": {
  21. "^.*$": {"type": "integer", "minimum":0, "maximum":9}
  22. },
  23. "type": "object"
  24. },
  25. "components": {
  26. "items": {
  27. "enum": ["V", "S", "M", "F", "DF", "M_DF", "F_DF", "XP"]
  28. },
  29. "type": "array"
  30. },
  31. "description": {
  32. "type": "string"
  33. },
  34. "duration": {
  35. "oneOf":[
  36. {"type": "string"},
  37. {"$ref": "#/definitions/duration"}
  38. ]
  39. },
  40. "effect": {"$ref": "#/definitions/effect"},
  41. "keywords": {
  42. "items": {"type": "string"},
  43. "type": "array"
  44. },
  45. "name": {
  46. "type": "string"
  47. },
  48. "range": {
  49. "oneOf": [
  50. {"enum": ["Touch", "Close", "Medium", "Long", "Unlimited"]},
  51. {"$ref": "#/definitions/range"}
  52. ]
  53. },
  54. "savingThrow": {
  55. "type": "string"
  56. },
  57. "school": {
  58. "type": "string"
  59. },
  60. "subSchool": {
  61. "type": "string"
  62. },
  63. "target": {
  64. "oneOf":[
  65. {"type": "string"},
  66. {"$ref": "#/definitions/target"}
  67. ]
  68. }
  69. },
  70. "required": [
  71. "school",
  72. "name",
  73. "description",
  74. "castingTime",
  75. "effect",
  76. "classToLevel",
  77. "duration",
  78. "range",
  79. "components",
  80. "keywords",
  81. "savingThrow"
  82. ],
  83. "type": "object",
  84. "definitions": {
  85. "area": {
  86. "Line": {
  87. "properties":{
  88. "@type": {"const": "Line"},
  89. "distance": {"$ref": "file:common.json#/definitions/distance"}
  90. },
  91. "additionalProperties": false
  92. },
  93. "Emission": {
  94. "properties":{
  95. "@type": {"const": "Emission"},
  96. "emit": {"enum": ["BURST", "EMANATION", "SPREAD", "NONE"]}
  97. },
  98. "additionalProperties": false
  99. },
  100. "Sphere": {
  101. "properties":{
  102. "@type": {"const": "Sphere"},
  103. "radius": {
  104. "oneOf": [
  105. {"const": 0},
  106. {"$ref": "file:common.json#/definitions/distance"}
  107. ]
  108. },
  109. "emit": {"enum": ["BURST", "EMANATION", "SPREAD", "NONE"]},
  110. "aroundYou": {"type": "boolean"}
  111. },
  112. "additionalProperties": false
  113. },
  114. "Cylinder": {
  115. "properties":{
  116. "@type": {"const": "Cylinder"},
  117. "radius": {"$ref": "file:common.json#/definitions/distance"},
  118. "height": {"$ref": "file:common.json#/definitions/distance"}
  119. },
  120. "additionalProperties": false
  121. }
  122. },
  123. "duration": {
  124. "dependencies":{
  125. "per": ["step"]
  126. },
  127. "properties":{
  128. "duration": {"type": "integer", "exclusiveMinimum": 0},
  129. "per": {"type": "integer", "exclusiveMinimum": 0},
  130. "step": {"type": "integer", "exclusiveMinimum": 0},
  131. "unit":{
  132. "enum": ["round", "minute", "hour", "day"]
  133. }
  134. },
  135. "required": ["unit", "duration"],
  136. "type": "object",
  137. "additionalProperties": false
  138. },
  139. "effect": {
  140. "dependencies":{
  141. "beyond":["per", "resolved"],
  142. "count":["resolved"],
  143. "per":["resolved"],
  144. "step":["per", "resolved"],
  145. "upto":["per", "resolved"]
  146. },
  147. "properties": {
  148. "beyond": {"type": "integer", "exclusiveMinimum": 0},
  149. "count": {"type": "integer", "exclusiveMinimum": 0},
  150. "format": {"type": "string"},
  151. "per": {"type": "integer", "exclusiveMinimum": 0},
  152. "resolved": {"type": "string"},
  153. "step": {"type": "integer", "exclusiveMinimum": 0},
  154. "upto": {"type": "integer", "exclusiveMinimum": 0}
  155. },
  156. "required": ["format"],
  157. "type": "object",
  158. "additionalProperties": false
  159. },
  160. "range": {
  161. "dependencies": {
  162. "per": ["step"]
  163. },
  164. "properties": {
  165. "name": {"type": "string"},
  166. "range": {"$ref": "file:common.json#/definitions/distance"},
  167. "per": {"$ref": "file:common.json#/definitions/distance"},
  168. "step": {"type": "integer", "exclusiveMinimum": 0}
  169. },
  170. "type": "object",
  171. "required": ["name", "range"],
  172. "additionalProperties": false
  173. },
  174. "target": {
  175. "properties": {
  176. "count": {"type": "integer", "exclusiveMinimum": 0},
  177. "format": {"type": "string"},
  178. "per": {"type": "integer", "exclusiveMinimum": 0},
  179. "resolved": {"type": "string"},
  180. "step": {"type": "integer", "exclusiveMinimum": 0}
  181. },
  182. "required": ["format", "resolved", "count", "per", "step"],
  183. "type": "object",
  184. "additionalProperties": false
  185. }
  186. }
  187. }