character.json 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. {
  2. "$schema": "http://json-schema.org/draft-06/schema#",
  3. "properties": {
  4. "name": {"type": "string"},
  5. "player": {"type": "string"},
  6. "classes": {
  7. "items": {
  8. "properties": {
  9. "level": {"type": "integer", "minimum": 1},
  10. "name": {"type": "string"},
  11. "spellBook": {"$ref": "file:spellbook.json#"}
  12. },
  13. "type": "object"
  14. },
  15. "type": "array"
  16. },
  17. "race": {"type": "string"},
  18. "alignment": {
  19. "type": "string",
  20. "enum": [
  21. "LG", "NG", "CG", "LN", "TN", "CN", "LE", "NE", "CE"
  22. ]
  23. },
  24. "deity": {"type": "string"},
  25. "size": {
  26. "type": "string",
  27. "enum": [
  28. "F", "D", "T", "S", "M", "L", "H", "G", "C"
  29. ]
  30. },
  31. "age": {"type": "string"},
  32. "gender": {"type": "string", "enum": ["M", "F", "N"]},
  33. "height": {"type": "string"},
  34. "weight": {"type": "number"},
  35. "eyes": {"type": "string"},
  36. "hair": {"type": "string"},
  37. "skin": {"type": "string"},
  38. "experience": {"type": "integer"},
  39. "health": {
  40. "properties": {
  41. "total": {"type": "integer", "minimum": 1},
  42. "rolled": {"type": "integer", "minimum": 1},
  43. "current": {"type": "integer", "minimum": -10},
  44. "temp": {"type": "integer", "minimum": 0},
  45. "nonlethal": {"type": "integer", "minimum": 0}
  46. },
  47. "type":"object"
  48. },
  49. "abilities": {
  50. },
  51. "skills": {
  52. "items": {
  53. "properties": {
  54. "name": {"type": "string"},
  55. "ranks": {"type": "integer"},
  56. "pointsSpent": {"type": "integer"}
  57. },
  58. "type": "object"
  59. },
  60. "type": "array"
  61. },
  62. "inventory": {
  63. "properties": {
  64. "items": {
  65. "items": {
  66. "properties": {
  67. "name": {"type": "string"},
  68. "count": {"type": "integer", "minimum": 1},
  69. "countEquipped": {"type": "integer", "minimum": 0},
  70. "value": {"$ref": "#/definitions/money"},
  71. "page": {"type": "string"},
  72. "slot": {
  73. "type": "string",
  74. "enum": [
  75. "HEAD",
  76. "FACE",
  77. "NECK",
  78. "TORSO",
  79. "BODY",
  80. "WAIST",
  81. "SHOULDER",
  82. "ARM",
  83. "HAND",
  84. "RING",
  85. "FEET",
  86. "MAIN_HAND",
  87. "OFF_HAND",
  88. "ONE_HAND",
  89. "TWO_HANDS"
  90. ]
  91. },
  92. "weight": {"type": "number"},
  93. "weapon": {
  94. "dependencies":{
  95. },
  96. "properties": {
  97. "attackBonus": {"type": "integer"},
  98. "damageBonus": {"type": "integer"},
  99. "damage": {"type": "string"},
  100. "secondaryDamage": {"type": "string"},
  101. "criticalThreat": {"type": "integer", "maximum": 20},
  102. "criticalDamage": {"type": "integer", "minimum": 2},
  103. "secondaryCriticalDamage": {"type": "integer", "minimum": 2},
  104. "range": {
  105. "type": "string"
  106. },
  107. "type": {
  108. "type": "string",
  109. "enum": [
  110. "Slashing",
  111. "Piercing",
  112. "Bludgeoning"
  113. ]
  114. }
  115. },
  116. "required": [
  117. "damage",
  118. "type",
  119. "range",
  120. "criticalThreat",
  121. "criticalDamage"
  122. ],
  123. "type": "object"
  124. },
  125. "armor": {
  126. "properties": {
  127. "bonus": {"type": "integer", "minimum": 0},
  128. "type": {
  129. "type": "string",
  130. "enum": ["Light", "Medium", "Heavy"]
  131. },
  132. "maxDex": {"type": "integer", "minimum": 0},
  133. "checkPenalty": {"type": "integer", "maximum": 0},
  134. "spellFailure": {"type": "integer", "minimum": 0, "maximum": 100},
  135. "speed": {"type": "integer"}
  136. },
  137. "type": "object"
  138. }
  139. },
  140. "oneOf": [
  141. {
  142. "properties": {
  143. "slot": {"enum": ["BODY", "OFF_HAND"]}
  144. },
  145. "required": [
  146. "armor"
  147. ]
  148. },
  149. {
  150. "properties": {
  151. "slot": {
  152. "enum": [
  153. "MAIN_HAND",
  154. "OFF_HAND",
  155. "ONE_HAND",
  156. "TWO_HANDS"
  157. ]
  158. }
  159. },
  160. "required": [
  161. "weapon"
  162. ]
  163. },
  164. {
  165. "not": {
  166. "properties": {
  167. "weapon": {},
  168. "armor": {}
  169. }
  170. }
  171. }
  172. ],
  173. "required": [
  174. "name",
  175. "count",
  176. "value",
  177. "weight"
  178. ],
  179. "type": "object"
  180. },
  181. "type": "array"
  182. },
  183. "equipment": {
  184. "properties": {
  185. "HEAD": {"type": "string"},
  186. "FACE": {"type": "string"},
  187. "NECK": {"type": "string"},
  188. "TORSO": {"type": "string"},
  189. "BODY": {"type": "string"},
  190. "WAIST": {"type": "string"},
  191. "SHOULDER": {"type": "string"},
  192. "ARM": {"type": "string"},
  193. "HAND": {"type": "string"},
  194. "RING1": {"type": "string"},
  195. "RING2": {"type": "string"},
  196. "FEET": {"type": "string"},
  197. "MAIN_HAND": {"type": "string"},
  198. "OFF_HAND": {"type": "string"}
  199. },
  200. "type": "object"
  201. }
  202. },
  203. "type": "object"
  204. }
  205. },
  206. "definitions": {
  207. "money": {
  208. "properties": {
  209. "pp": {"type": "integer", "minimum": 0},
  210. "gp": {"type": "integer", "minimum": 0},
  211. "sp": {"type": "integer", "minimum": 0},
  212. "cp": {"type": "integer", "minimum": 0}
  213. },
  214. "type": "object"
  215. }
  216. },
  217. "type": "object"
  218. }