rpg-engine 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1886) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +101 -2
  3. package/dist/campaign/create-campaign.d.ts +6 -0
  4. package/dist/campaign/create-campaign.js +71 -0
  5. package/dist/campaign/find-campaign.d.ts +8 -0
  6. package/dist/campaign/find-campaign.js +28 -0
  7. package/dist/campaign/host-files.d.ts +16 -0
  8. package/dist/campaign/host-files.js +134 -0
  9. package/dist/campaign/index.d.ts +5 -0
  10. package/dist/campaign/index.js +6 -0
  11. package/dist/campaign/settings.d.ts +185 -0
  12. package/dist/campaign/settings.js +399 -0
  13. package/dist/campaign/state.d.ts +15 -0
  14. package/dist/campaign/state.js +52 -0
  15. package/dist/cli.d.ts +2 -0
  16. package/dist/cli.js +19 -0
  17. package/dist/command-line.d.ts +7 -0
  18. package/dist/command-line.js +140 -0
  19. package/dist/commands/advance.d.ts +7 -0
  20. package/dist/commands/advance.js +80 -0
  21. package/dist/commands/ask.d.ts +33 -0
  22. package/dist/commands/ask.js +280 -0
  23. package/dist/commands/change.d.ts +69 -0
  24. package/dist/commands/change.js +604 -0
  25. package/dist/commands/config.d.ts +59 -0
  26. package/dist/commands/config.js +512 -0
  27. package/dist/commands/effect-layer.d.ts +22 -0
  28. package/dist/commands/effect-layer.js +84 -0
  29. package/dist/commands/effect.d.ts +27 -0
  30. package/dist/commands/effect.js +369 -0
  31. package/dist/commands/find.d.ts +34 -0
  32. package/dist/commands/find.js +64 -0
  33. package/dist/commands/game-advance.d.ts +50 -0
  34. package/dist/commands/game-advance.js +103 -0
  35. package/dist/commands/game-effects.d.ts +68 -0
  36. package/dist/commands/game-effects.js +196 -0
  37. package/dist/commands/game-environment.d.ts +16 -0
  38. package/dist/commands/game-environment.js +24 -0
  39. package/dist/commands/game-events.d.ts +84 -0
  40. package/dist/commands/game-events.js +325 -0
  41. package/dist/commands/game-experience.d.ts +57 -0
  42. package/dist/commands/game-experience.js +119 -0
  43. package/dist/commands/game-grid-moves.d.ts +33 -0
  44. package/dist/commands/game-grid-moves.js +94 -0
  45. package/dist/commands/game-grids.d.ts +52 -0
  46. package/dist/commands/game-grids.js +162 -0
  47. package/dist/commands/game-here.d.ts +40 -0
  48. package/dist/commands/game-here.js +100 -0
  49. package/dist/commands/game-images.d.ts +31 -0
  50. package/dist/commands/game-images.js +87 -0
  51. package/dist/commands/game-journey.d.ts +62 -0
  52. package/dist/commands/game-journey.js +163 -0
  53. package/dist/commands/game-knowledge.d.ts +32 -0
  54. package/dist/commands/game-knowledge.js +120 -0
  55. package/dist/commands/game-maps.d.ts +20 -0
  56. package/dist/commands/game-maps.js +51 -0
  57. package/dist/commands/game-mode.d.ts +31 -0
  58. package/dist/commands/game-mode.js +128 -0
  59. package/dist/commands/game-money.d.ts +17 -0
  60. package/dist/commands/game-money.js +55 -0
  61. package/dist/commands/game-moods.d.ts +22 -0
  62. package/dist/commands/game-moods.js +32 -0
  63. package/dist/commands/game-moves.d.ts +14 -0
  64. package/dist/commands/game-moves.js +43 -0
  65. package/dist/commands/game-open.d.ts +18 -0
  66. package/dist/commands/game-open.js +47 -0
  67. package/dist/commands/game-outside.d.ts +14 -0
  68. package/dist/commands/game-outside.js +151 -0
  69. package/dist/commands/game-positions.d.ts +52 -0
  70. package/dist/commands/game-positions.js +244 -0
  71. package/dist/commands/game-quests.d.ts +46 -0
  72. package/dist/commands/game-quests.js +97 -0
  73. package/dist/commands/game-recipes.d.ts +34 -0
  74. package/dist/commands/game-recipes.js +109 -0
  75. package/dist/commands/game-reminders.d.ts +22 -0
  76. package/dist/commands/game-reminders.js +74 -0
  77. package/dist/commands/game-roads.d.ts +90 -0
  78. package/dist/commands/game-roads.js +284 -0
  79. package/dist/commands/game-rules.d.ts +17 -0
  80. package/dist/commands/game-rules.js +30 -0
  81. package/dist/commands/game-saves.d.ts +59 -0
  82. package/dist/commands/game-saves.js +249 -0
  83. package/dist/commands/game-scene.d.ts +69 -0
  84. package/dist/commands/game-scene.js +285 -0
  85. package/dist/commands/game-thresholds.d.ts +13 -0
  86. package/dist/commands/game-thresholds.js +41 -0
  87. package/dist/commands/game-time.d.ts +17 -0
  88. package/dist/commands/game-time.js +42 -0
  89. package/dist/commands/game-view-journal.d.ts +145 -0
  90. package/dist/commands/game-view-journal.js +129 -0
  91. package/dist/commands/game-view-map.d.ts +78 -0
  92. package/dist/commands/game-view-map.js +266 -0
  93. package/dist/commands/game-view-place.d.ts +160 -0
  94. package/dist/commands/game-view-place.js +388 -0
  95. package/dist/commands/game-world.d.ts +60 -0
  96. package/dist/commands/game-world.js +204 -0
  97. package/dist/commands/image.d.ts +19 -0
  98. package/dist/commands/image.js +185 -0
  99. package/dist/commands/index.d.ts +3 -0
  100. package/dist/commands/index.js +57 -0
  101. package/dist/commands/init.d.ts +23 -0
  102. package/dist/commands/init.js +44 -0
  103. package/dist/commands/install.d.ts +23 -0
  104. package/dist/commands/install.js +68 -0
  105. package/dist/commands/instructions.d.ts +4 -0
  106. package/dist/commands/instructions.js +97 -0
  107. package/dist/commands/mode.d.ts +23 -0
  108. package/dist/commands/mode.js +84 -0
  109. package/dist/commands/mood.d.ts +34 -0
  110. package/dist/commands/mood.js +113 -0
  111. package/dist/commands/move.d.ts +34 -0
  112. package/dist/commands/move.js +274 -0
  113. package/dist/commands/notes.d.ts +10 -0
  114. package/dist/commands/notes.js +37 -0
  115. package/dist/commands/page-counters.d.ts +24 -0
  116. package/dist/commands/page-counters.js +84 -0
  117. package/dist/commands/parts.d.ts +16 -0
  118. package/dist/commands/parts.js +49 -0
  119. package/dist/commands/problems.d.ts +5 -0
  120. package/dist/commands/problems.js +47 -0
  121. package/dist/commands/progression.d.ts +68 -0
  122. package/dist/commands/progression.js +206 -0
  123. package/dist/commands/rename.d.ts +16 -0
  124. package/dist/commands/rename.js +116 -0
  125. package/dist/commands/reveal.d.ts +25 -0
  126. package/dist/commands/reveal.js +193 -0
  127. package/dist/commands/roll.d.ts +56 -0
  128. package/dist/commands/roll.js +302 -0
  129. package/dist/commands/route.d.ts +19 -0
  130. package/dist/commands/route.js +110 -0
  131. package/dist/commands/rules.d.ts +48 -0
  132. package/dist/commands/rules.js +194 -0
  133. package/dist/commands/save.d.ts +68 -0
  134. package/dist/commands/save.js +141 -0
  135. package/dist/commands/scene.d.ts +105 -0
  136. package/dist/commands/scene.js +741 -0
  137. package/dist/commands/sheet.d.ts +136 -0
  138. package/dist/commands/sheet.js +445 -0
  139. package/dist/commands/show.d.ts +76 -0
  140. package/dist/commands/show.js +216 -0
  141. package/dist/commands/status.d.ts +54 -0
  142. package/dist/commands/status.js +291 -0
  143. package/dist/commands/translate.d.ts +23 -0
  144. package/dist/commands/translate.js +108 -0
  145. package/dist/commands/travel.d.ts +47 -0
  146. package/dist/commands/travel.js +457 -0
  147. package/dist/commands/validate.d.ts +4 -0
  148. package/dist/commands/validate.js +25 -0
  149. package/dist/commands/view.d.ts +272 -0
  150. package/dist/commands/view.js +623 -0
  151. package/dist/commands/worked-out.d.ts +116 -0
  152. package/dist/commands/worked-out.js +704 -0
  153. package/dist/commands/write.d.ts +51 -0
  154. package/dist/commands/write.js +1017 -0
  155. package/dist/core/command-reference.d.ts +6 -0
  156. package/dist/core/command-reference.js +47 -0
  157. package/dist/core/context.d.ts +140 -0
  158. package/dist/core/context.js +28 -0
  159. package/dist/core/field-kind.d.ts +6 -0
  160. package/dist/core/field-kind.js +5 -0
  161. package/dist/core/files.d.ts +4 -0
  162. package/dist/core/files.js +30 -0
  163. package/dist/core/formula.d.ts +164 -0
  164. package/dist/core/formula.js +590 -0
  165. package/dist/core/frozen.d.ts +2 -0
  166. package/dist/core/frozen.js +11 -0
  167. package/dist/core/length.d.ts +27 -0
  168. package/dist/core/length.js +49 -0
  169. package/dist/core/log.d.ts +27 -0
  170. package/dist/core/log.js +38 -0
  171. package/dist/core/memo.d.ts +2 -0
  172. package/dist/core/memo.js +17 -0
  173. package/dist/core/mood.d.ts +6 -0
  174. package/dist/core/mood.js +11 -0
  175. package/dist/core/problem.d.ts +6 -0
  176. package/dist/core/problem.js +1 -0
  177. package/dist/core/progression-rule.d.ts +21 -0
  178. package/dist/core/progression-rule.js +2 -0
  179. package/dist/core/registry.d.ts +31 -0
  180. package/dist/core/registry.js +25 -0
  181. package/dist/core/session-store.d.ts +90 -0
  182. package/dist/core/session-store.js +289 -0
  183. package/dist/core/store.d.ts +83 -0
  184. package/dist/core/store.js +224 -0
  185. package/dist/core/text.d.ts +12 -0
  186. package/dist/core/text.js +32 -0
  187. package/dist/core/version.d.ts +2 -0
  188. package/dist/core/version.js +6 -0
  189. package/dist/core/yaml-file.d.ts +10 -0
  190. package/dist/core/yaml-file.js +42 -0
  191. package/dist/counters/counter.d.ts +36 -0
  192. package/dist/counters/counter.js +59 -0
  193. package/dist/counters/index.d.ts +1 -0
  194. package/dist/counters/index.js +2 -0
  195. package/dist/dashboard/address.js +43 -0
  196. package/dist/dashboard/api.js +185 -0
  197. package/dist/dashboard/app.js +217 -0
  198. package/dist/dashboard/asked.js +132 -0
  199. package/dist/dashboard/assets/dice/dice-sharp.glb +0 -0
  200. package/dist/dashboard/assets/dice/dice.glb +0 -0
  201. package/dist/dashboard/assets/dice/dice.json +1 -0
  202. package/dist/dashboard/assets/dice/textures/ash.jpg +0 -0
  203. package/dist/dashboard/assets/dice/textures/granite.jpg +0 -0
  204. package/dist/dashboard/assets/dice/textures/marble.jpg +0 -0
  205. package/dist/dashboard/assets/dice/textures/onyx.jpg +0 -0
  206. package/dist/dashboard/assets/dice/textures/walnut.jpg +0 -0
  207. package/dist/dashboard/assets/favicon.svg +7 -0
  208. package/dist/dashboard/assets/icon-180.png +0 -0
  209. package/dist/dashboard/assets/icon-32.png +0 -0
  210. package/dist/dashboard/assets/master.svg +71 -0
  211. package/dist/dashboard/assets/sounds/dice-collision.wav +0 -0
  212. package/dist/dashboard/assets/sounds/dice-touch.wav +0 -0
  213. package/dist/dashboard/card.js +61 -0
  214. package/dist/dashboard/columns.js +37 -0
  215. package/dist/dashboard/combat.js +72 -0
  216. package/dist/dashboard/data.js +3 -0
  217. package/dist/dashboard/dice/burn.js +200 -0
  218. package/dist/dashboard/dice/celebration.js +199 -0
  219. package/dist/dashboard/dice/floor-cracks.js +149 -0
  220. package/dist/dashboard/dice/frost.js +51 -0
  221. package/dist/dashboard/dice/load.js +66 -0
  222. package/dist/dashboard/dice/models.js +138 -0
  223. package/dist/dashboard/dice/pool.js +49 -0
  224. package/dist/dashboard/dice/roller.js +101 -0
  225. package/dist/dashboard/dice/sets.js +49 -0
  226. package/dist/dashboard/dice/sounds.js +102 -0
  227. package/dist/dashboard/dice/stage.js +355 -0
  228. package/dist/dashboard/dice/throw.js +242 -0
  229. package/dist/dashboard/dice/tray.js +365 -0
  230. package/dist/dashboard/faces.js +16 -0
  231. package/dist/dashboard/footer.js +17 -0
  232. package/dist/dashboard/free-rolls.js +41 -0
  233. package/dist/dashboard/game-words.js +164 -0
  234. package/dist/dashboard/glass.js +12 -0
  235. package/dist/dashboard/guide/ar.md +308 -0
  236. package/dist/dashboard/guide/cs.md +308 -0
  237. package/dist/dashboard/guide/da.md +308 -0
  238. package/dist/dashboard/guide/de.md +308 -0
  239. package/dist/dashboard/guide/el.md +308 -0
  240. package/dist/dashboard/guide/en.md +307 -0
  241. package/dist/dashboard/guide/es.md +308 -0
  242. package/dist/dashboard/guide/fi.md +308 -0
  243. package/dist/dashboard/guide/fr.md +308 -0
  244. package/dist/dashboard/guide/he.md +308 -0
  245. package/dist/dashboard/guide/hi.md +308 -0
  246. package/dist/dashboard/guide/hu.md +308 -0
  247. package/dist/dashboard/guide/is.md +308 -0
  248. package/dist/dashboard/guide/it.md +308 -0
  249. package/dist/dashboard/guide/ja.md +308 -0
  250. package/dist/dashboard/guide/ko.md +308 -0
  251. package/dist/dashboard/guide/nb.md +308 -0
  252. package/dist/dashboard/guide/nl.md +308 -0
  253. package/dist/dashboard/guide/pl.md +308 -0
  254. package/dist/dashboard/guide/pt.md +308 -0
  255. package/dist/dashboard/guide/ro.md +308 -0
  256. package/dist/dashboard/guide/ru.md +308 -0
  257. package/dist/dashboard/guide/sv.md +308 -0
  258. package/dist/dashboard/guide/tr.md +308 -0
  259. package/dist/dashboard/guide/uk.md +308 -0
  260. package/dist/dashboard/guide/zh.md +308 -0
  261. package/dist/dashboard/guide-blocks.js +72 -0
  262. package/dist/dashboard/guide-markdown.js +63 -0
  263. package/dist/dashboard/help.js +92 -0
  264. package/dist/dashboard/i18n/ar.json +670 -0
  265. package/dist/dashboard/i18n/cs.json +670 -0
  266. package/dist/dashboard/i18n/da.json +670 -0
  267. package/dist/dashboard/i18n/de.json +670 -0
  268. package/dist/dashboard/i18n/el.json +670 -0
  269. package/dist/dashboard/i18n/es.json +670 -0
  270. package/dist/dashboard/i18n/fi.json +670 -0
  271. package/dist/dashboard/i18n/fr.json +670 -0
  272. package/dist/dashboard/i18n/he.json +670 -0
  273. package/dist/dashboard/i18n/hi.json +670 -0
  274. package/dist/dashboard/i18n/hu.json +670 -0
  275. package/dist/dashboard/i18n/is.json +670 -0
  276. package/dist/dashboard/i18n/it.json +670 -0
  277. package/dist/dashboard/i18n/ja.json +670 -0
  278. package/dist/dashboard/i18n/ko.json +670 -0
  279. package/dist/dashboard/i18n/nb.json +670 -0
  280. package/dist/dashboard/i18n/nl.json +670 -0
  281. package/dist/dashboard/i18n/pl.json +670 -0
  282. package/dist/dashboard/i18n/pt.json +670 -0
  283. package/dist/dashboard/i18n/ro.json +670 -0
  284. package/dist/dashboard/i18n/ru.json +670 -0
  285. package/dist/dashboard/i18n/sv.json +670 -0
  286. package/dist/dashboard/i18n/tr.json +670 -0
  287. package/dist/dashboard/i18n/uk.json +670 -0
  288. package/dist/dashboard/i18n/zh.json +670 -0
  289. package/dist/dashboard/icons.js +123 -0
  290. package/dist/dashboard/journal.js +188 -0
  291. package/dist/dashboard/labels.js +226 -0
  292. package/dist/dashboard/language-choice.js +83 -0
  293. package/dist/dashboard/languages.js +144 -0
  294. package/dist/dashboard/layout.js +93 -0
  295. package/dist/dashboard/map-sheet.js +32 -0
  296. package/dist/dashboard/map-symbols.js +79 -0
  297. package/dist/dashboard/markdown.js +72 -0
  298. package/dist/dashboard/master.js +69 -0
  299. package/dist/dashboard/mood-faces.js +16 -0
  300. package/dist/dashboard/mood.js +27 -0
  301. package/dist/dashboard/notes.js +203 -0
  302. package/dist/dashboard/notices.js +24 -0
  303. package/dist/dashboard/pages.js +32 -0
  304. package/dist/dashboard/party.js +65 -0
  305. package/dist/dashboard/place-map-view.js +362 -0
  306. package/dist/dashboard/place-map.js +204 -0
  307. package/dist/dashboard/prefs.js +97 -0
  308. package/dist/dashboard/reactions.js +28 -0
  309. package/dist/dashboard/requested.js +32 -0
  310. package/dist/dashboard/rolls.js +240 -0
  311. package/dist/dashboard/saves.js +154 -0
  312. package/dist/dashboard/scene.js +63 -0
  313. package/dist/dashboard/settings.js +362 -0
  314. package/dist/dashboard/setup.js +195 -0
  315. package/dist/dashboard/sheet.js +180 -0
  316. package/dist/dashboard/status.js +42 -0
  317. package/dist/dashboard/story.js +51 -0
  318. package/dist/dashboard/style.css +9355 -0
  319. package/dist/dashboard/text.js +158 -0
  320. package/dist/dashboard/theme.js +32 -0
  321. package/dist/dashboard/top.js +156 -0
  322. package/dist/dashboard/widgets.js +69 -0
  323. package/dist/dashboard/world-map.js +523 -0
  324. package/dist/dashboard/world.js +357 -0
  325. package/dist/dashboard-server.d.ts +38 -0
  326. package/dist/dashboard-server.js +818 -0
  327. package/dist/dice/evaluate.d.ts +30 -0
  328. package/dist/dice/evaluate.js +90 -0
  329. package/dist/dice/format.d.ts +3 -0
  330. package/dist/dice/format.js +26 -0
  331. package/dist/dice/index.d.ts +4 -0
  332. package/dist/dice/index.js +5 -0
  333. package/dist/dice/notation.d.ts +43 -0
  334. package/dist/dice/notation.js +132 -0
  335. package/dist/dice/proof.d.ts +4 -0
  336. package/dist/dice/proof.js +12 -0
  337. package/dist/dice/roll-dice.d.ts +29 -0
  338. package/dist/dice/roll-dice.js +43 -0
  339. package/dist/dice/words.d.ts +12 -0
  340. package/dist/dice/words.js +21 -0
  341. package/dist/effects/effect.d.ts +57 -0
  342. package/dist/effects/effect.js +123 -0
  343. package/dist/effects/index.d.ts +1 -0
  344. package/dist/effects/index.js +2 -0
  345. package/dist/grid/grid.d.ts +53 -0
  346. package/dist/grid/grid.js +151 -0
  347. package/dist/grid/index.d.ts +2 -0
  348. package/dist/grid/index.js +2 -0
  349. package/dist/grid/paths.d.ts +27 -0
  350. package/dist/grid/paths.js +128 -0
  351. package/dist/images/images.d.ts +26 -0
  352. package/dist/images/images.js +74 -0
  353. package/dist/images/index.d.ts +1 -0
  354. package/dist/images/index.js +2 -0
  355. package/dist/index.d.ts +1 -0
  356. package/dist/index.js +1 -0
  357. package/dist/instructions/index.d.ts +17 -0
  358. package/dist/instructions/index.js +48 -0
  359. package/dist/map/geometry.d.ts +22 -0
  360. package/dist/map/geometry.js +66 -0
  361. package/dist/map/index.d.ts +3 -0
  362. package/dist/map/index.js +5 -0
  363. package/dist/map/looks.d.ts +9 -0
  364. package/dist/map/looks.js +57 -0
  365. package/dist/map/ways.d.ts +36 -0
  366. package/dist/map/ways.js +78 -0
  367. package/dist/mcp-server.d.ts +22 -0
  368. package/dist/mcp-server.js +289 -0
  369. package/dist/money/index.d.ts +1 -0
  370. package/dist/money/index.js +2 -0
  371. package/dist/money/money.d.ts +48 -0
  372. package/dist/money/money.js +218 -0
  373. package/dist/page-words.d.ts +46 -0
  374. package/dist/page-words.js +221 -0
  375. package/dist/pages/check.d.ts +9 -0
  376. package/dist/pages/check.js +345 -0
  377. package/dist/pages/containers.d.ts +34 -0
  378. package/dist/pages/containers.js +181 -0
  379. package/dist/pages/environment.d.ts +26 -0
  380. package/dist/pages/environment.js +118 -0
  381. package/dist/pages/index.d.ts +15 -0
  382. package/dist/pages/index.js +16 -0
  383. package/dist/pages/inheritance.d.ts +80 -0
  384. package/dist/pages/inheritance.js +260 -0
  385. package/dist/pages/maps.d.ts +11 -0
  386. package/dist/pages/maps.js +14 -0
  387. package/dist/pages/markdown.d.ts +59 -0
  388. package/dist/pages/markdown.js +271 -0
  389. package/dist/pages/page-file.d.ts +26 -0
  390. package/dist/pages/page-file.js +166 -0
  391. package/dist/pages/page-types.d.ts +17 -0
  392. package/dist/pages/page-types.js +18 -0
  393. package/dist/pages/positions.d.ts +11 -0
  394. package/dist/pages/positions.js +23 -0
  395. package/dist/pages/rename-page.d.ts +39 -0
  396. package/dist/pages/rename-page.js +109 -0
  397. package/dist/pages/roads.d.ts +11 -0
  398. package/dist/pages/roads.js +40 -0
  399. package/dist/pages/standard-fields.d.ts +31 -0
  400. package/dist/pages/standard-fields.js +142 -0
  401. package/dist/pages/system-pages.d.ts +35 -0
  402. package/dist/pages/system-pages.js +98 -0
  403. package/dist/pages/world.d.ts +174 -0
  404. package/dist/pages/world.js +349 -0
  405. package/dist/pages/write-page.d.ts +27 -0
  406. package/dist/pages/write-page.js +311 -0
  407. package/dist/pictures/briefs.d.ts +25 -0
  408. package/dist/pictures/briefs.js +145 -0
  409. package/dist/pictures/chosen.d.ts +5 -0
  410. package/dist/pictures/chosen.js +21 -0
  411. package/dist/pictures/claude.d.ts +14 -0
  412. package/dist/pictures/claude.js +129 -0
  413. package/dist/pictures/codex.d.ts +20 -0
  414. package/dist/pictures/codex.js +154 -0
  415. package/dist/pictures/helpers.d.ts +26 -0
  416. package/dist/pictures/helpers.js +219 -0
  417. package/dist/pictures/index.d.ts +6 -0
  418. package/dist/pictures/index.js +8 -0
  419. package/dist/pictures/stop.d.ts +3 -0
  420. package/dist/pictures/stop.js +10 -0
  421. package/dist/pictures/svg.d.ts +4 -0
  422. package/dist/pictures/svg.js +129 -0
  423. package/dist/player-notes/index.d.ts +1 -0
  424. package/dist/player-notes/index.js +2 -0
  425. package/dist/player-notes/notes.d.ts +21 -0
  426. package/dist/player-notes/notes.js +50 -0
  427. package/dist/progression/index.d.ts +1 -0
  428. package/dist/progression/index.js +1 -0
  429. package/dist/progression/level-table.d.ts +41 -0
  430. package/dist/progression/level-table.js +123 -0
  431. package/dist/rules/index.d.ts +3 -0
  432. package/dist/rules/index.js +4 -0
  433. package/dist/rules/rule-book.d.ts +31 -0
  434. package/dist/rules/rule-book.js +157 -0
  435. package/dist/rules/search.d.ts +18 -0
  436. package/dist/rules/search.js +101 -0
  437. package/dist/rules/shown.d.ts +19 -0
  438. package/dist/rules/shown.js +44 -0
  439. package/dist/saves/index.d.ts +1 -0
  440. package/dist/saves/index.js +2 -0
  441. package/dist/saves/saves.d.ts +14 -0
  442. package/dist/saves/saves.js +27 -0
  443. package/dist/scene/index.d.ts +1 -0
  444. package/dist/scene/index.js +2 -0
  445. package/dist/scene/scene.d.ts +46 -0
  446. package/dist/scene/scene.js +44 -0
  447. package/dist/systems/game-system.d.ts +236 -0
  448. package/dist/systems/game-system.js +593 -0
  449. package/dist/systems/index.d.ts +2 -0
  450. package/dist/systems/index.js +3 -0
  451. package/dist/systems/words.d.ts +9 -0
  452. package/dist/systems/words.js +23 -0
  453. package/dist/time/game-date.d.ts +20 -0
  454. package/dist/time/game-date.js +59 -0
  455. package/dist/time/index.d.ts +1 -0
  456. package/dist/time/index.js +2 -0
  457. package/dist/triggers/index.d.ts +1 -0
  458. package/dist/triggers/index.js +2 -0
  459. package/dist/triggers/trigger.d.ts +43 -0
  460. package/dist/triggers/trigger.js +98 -0
  461. package/instructions/author.md +1 -0
  462. package/instructions/buttons-physical-dice.md +1 -0
  463. package/instructions/buttons.md +1 -0
  464. package/instructions/combat.md +3 -0
  465. package/instructions/core.md +54 -0
  466. package/instructions/dashboard.md +7 -0
  467. package/instructions/mentor-hints.md +1 -0
  468. package/instructions/mentor-tutorial.md +1 -0
  469. package/instructions/new-day.md +1 -0
  470. package/instructions/play.md +23 -0
  471. package/instructions/prose-literary.md +1 -0
  472. package/instructions/prose-pulp.md +1 -0
  473. package/instructions/prose-wry.md +1 -0
  474. package/instructions/session-zero.md +3 -0
  475. package/instructions/setup.md +3 -0
  476. package/instructions/start.md +1 -0
  477. package/instructions/story-arcs.md +1 -0
  478. package/instructions/story-episodes.md +1 -0
  479. package/instructions/story-mystery.md +1 -0
  480. package/instructions/style.md +1 -0
  481. package/package.json +85 -4
  482. package/systems/5e/LICENSE.md +25 -0
  483. package/systems/5e/images/acid-blob.svg +1 -0
  484. package/systems/5e/images/angel-outfit.svg +1 -0
  485. package/systems/5e/images/angler-fish.svg +1 -0
  486. package/systems/5e/images/angular-spider.svg +1 -0
  487. package/systems/5e/images/animal-skull.svg +1 -0
  488. package/systems/5e/images/bad-gnome.svg +1 -0
  489. package/systems/5e/images/badger.svg +1 -0
  490. package/systems/5e/images/bandit.svg +1 -0
  491. package/systems/5e/images/barn-owl.svg +1 -0
  492. package/systems/5e/images/basset-hound-head.svg +1 -0
  493. package/systems/5e/images/bat.svg +1 -0
  494. package/systems/5e/images/bear-face.svg +1 -0
  495. package/systems/5e/images/bear-head.svg +1 -0
  496. package/systems/5e/images/beetle-shell.svg +1 -0
  497. package/systems/5e/images/berry-bush.svg +1 -0
  498. package/systems/5e/images/bestial-fangs.svg +1 -0
  499. package/systems/5e/images/big-wave.svg +1 -0
  500. package/systems/5e/images/black-knight-helm.svg +1 -0
  501. package/systems/5e/images/boar-tusks.svg +1 -0
  502. package/systems/5e/images/boar.svg +1 -0
  503. package/systems/5e/images/bone-gnawer.svg +1 -0
  504. package/systems/5e/images/breastplate.svg +1 -0
  505. package/systems/5e/images/brute.svg +1 -0
  506. package/systems/5e/images/camel-head.svg +1 -0
  507. package/systems/5e/images/carnivore-mouth.svg +1 -0
  508. package/systems/5e/images/cassowary-head.svg +1 -0
  509. package/systems/5e/images/cat.svg +1 -0
  510. package/systems/5e/images/centaur.svg +1 -0
  511. package/systems/5e/images/centipede.svg +1 -0
  512. package/systems/5e/images/charging-bull.svg +1 -0
  513. package/systems/5e/images/closed-barbute.svg +1 -0
  514. package/systems/5e/images/cobra.svg +1 -0
  515. package/systems/5e/images/condor-emblem.svg +1 -0
  516. package/systems/5e/images/cowled.svg +1 -0
  517. package/systems/5e/images/crab-claw.svg +1 -0
  518. package/systems/5e/images/crab.svg +1 -0
  519. package/systems/5e/images/croc-jaws.svg +1 -0
  520. package/systems/5e/images/crow-dive.svg +1 -0
  521. package/systems/5e/images/crown.svg +1 -0
  522. package/systems/5e/images/crowned-skull.svg +1 -0
  523. package/systems/5e/images/cube.svg +1 -0
  524. package/systems/5e/images/cultist-lorc.svg +1 -0
  525. package/systems/5e/images/cultist-skoll.svg +1 -0
  526. package/systems/5e/images/curled-tentacle.svg +1 -0
  527. package/systems/5e/images/daemon-skull.svg +1 -0
  528. package/systems/5e/images/deer-head.svg +1 -0
  529. package/systems/5e/images/desert-skull.svg +1 -0
  530. package/systems/5e/images/devil-mask.svg +1 -0
  531. package/systems/5e/images/diablo-skull.svg +1 -0
  532. package/systems/5e/images/dinosaur-rex.svg +1 -0
  533. package/systems/5e/images/direwolf.svg +1 -0
  534. package/systems/5e/images/djinn.svg +1 -0
  535. package/systems/5e/images/donkey.svg +1 -0
  536. package/systems/5e/images/dragon-head-faithtoken.svg +1 -0
  537. package/systems/5e/images/dragon-head-lorc.svg +1 -0
  538. package/systems/5e/images/dragon-shield.svg +1 -0
  539. package/systems/5e/images/dragon-spiral.svg +1 -0
  540. package/systems/5e/images/dread-skull.svg +1 -0
  541. package/systems/5e/images/duality-mask.svg +1 -0
  542. package/systems/5e/images/dust-cloud.svg +1 -0
  543. package/systems/5e/images/dwarf-face.svg +1 -0
  544. package/systems/5e/images/dwarf-helmet.svg +1 -0
  545. package/systems/5e/images/eagle-emblem.svg +1 -0
  546. package/systems/5e/images/eagle-head.svg +1 -0
  547. package/systems/5e/images/egyptian-sphinx.svg +1 -0
  548. package/systems/5e/images/elephant-head.svg +1 -0
  549. package/systems/5e/images/elf-ear.svg +1 -0
  550. package/systems/5e/images/elf-helmet.svg +1 -0
  551. package/systems/5e/images/ent-mouth.svg +1 -0
  552. package/systems/5e/images/ermine.svg +1 -0
  553. package/systems/5e/images/eruption.svg +1 -0
  554. package/systems/5e/images/evil-bat.svg +1 -0
  555. package/systems/5e/images/evil-minion.svg +1 -0
  556. package/systems/5e/images/evil-tree.svg +1 -0
  557. package/systems/5e/images/evil-wings.svg +1 -0
  558. package/systems/5e/images/eyestalk.svg +1 -0
  559. package/systems/5e/images/fairy.svg +1 -0
  560. package/systems/5e/images/farmer.svg +1 -0
  561. package/systems/5e/images/feline.svg +1 -0
  562. package/systems/5e/images/fire-silhouette.svg +1 -0
  563. package/systems/5e/images/fish-monster.svg +1 -0
  564. package/systems/5e/images/fleshy-mass.svg +1 -0
  565. package/systems/5e/images/fluffy-flame.svg +1 -0
  566. package/systems/5e/images/fly.svg +1 -0
  567. package/systems/5e/images/fox-head.svg +1 -0
  568. package/systems/5e/images/frankenstein-creature.svg +1 -0
  569. package/systems/5e/images/frog.svg +1 -0
  570. package/systems/5e/images/gargoyle.svg +1 -0
  571. package/systems/5e/images/gecko.svg +1 -0
  572. package/systems/5e/images/ghost.svg +1 -0
  573. package/systems/5e/images/giant.svg +1 -0
  574. package/systems/5e/images/goat.svg +1 -0
  575. package/systems/5e/images/goblin-head.svg +1 -0
  576. package/systems/5e/images/goblin.svg +1 -0
  577. package/systems/5e/images/golem-head.svg +1 -0
  578. package/systems/5e/images/gooey-daemon.svg +1 -0
  579. package/systems/5e/images/gorilla.svg +1 -0
  580. package/systems/5e/images/greek-sphinx.svg +1 -0
  581. package/systems/5e/images/griffin-symbol.svg +1 -0
  582. package/systems/5e/images/grim-reaper.svg +1 -0
  583. package/systems/5e/images/hanging-spider.svg +1 -0
  584. package/systems/5e/images/harpy.svg +1 -0
  585. package/systems/5e/images/hawk-emblem.svg +1 -0
  586. package/systems/5e/images/hooded-assassin.svg +1 -0
  587. package/systems/5e/images/horned-reptile.svg +1 -0
  588. package/systems/5e/images/horse-head-delapouite.svg +1 -0
  589. package/systems/5e/images/horse-head-lorc.svg +1 -0
  590. package/systems/5e/images/hound.svg +1 -0
  591. package/systems/5e/images/hydra.svg +1 -0
  592. package/systems/5e/images/hyena-head.svg +1 -0
  593. package/systems/5e/images/icicles-aura.svg +1 -0
  594. package/systems/5e/images/ifrit.svg +1 -0
  595. package/systems/5e/images/imp-laugh.svg +1 -0
  596. package/systems/5e/images/imp.svg +1 -0
  597. package/systems/5e/images/insect-jaws.svg +1 -0
  598. package/systems/5e/images/invisible-face.svg +1 -0
  599. package/systems/5e/images/jumping-dog.svg +1 -0
  600. package/systems/5e/images/kraken-tentacle.svg +1 -0
  601. package/systems/5e/images/labrador-head.svg +1 -0
  602. package/systems/5e/images/lion.svg +1 -0
  603. package/systems/5e/images/lizard-tongue.svg +1 -0
  604. package/systems/5e/images/lizardman.svg +1 -0
  605. package/systems/5e/images/long-antennae-bug.svg +1 -0
  606. package/systems/5e/images/long-legged-spider.svg +1 -0
  607. package/systems/5e/images/mammoth.svg +1 -0
  608. package/systems/5e/images/mandrill-head.svg +1 -0
  609. package/systems/5e/images/manta-ray.svg +1 -0
  610. package/systems/5e/images/masked-spider.svg +1 -0
  611. package/systems/5e/images/medusa-head.svg +1 -0
  612. package/systems/5e/images/mermaid.svg +1 -0
  613. package/systems/5e/images/metal-golem-head.svg +1 -0
  614. package/systems/5e/images/mimic-chest.svg +1 -0
  615. package/systems/5e/images/minotaur.svg +1 -0
  616. package/systems/5e/images/monk-face.svg +1 -0
  617. package/systems/5e/images/moon-bats.svg +1 -0
  618. package/systems/5e/images/mucous-pillar.svg +1 -0
  619. package/systems/5e/images/mummy-head.svg +1 -0
  620. package/systems/5e/images/mushrooms-cluster.svg +1 -0
  621. package/systems/5e/images/octopus.svg +1 -0
  622. package/systems/5e/images/ogre.svg +1 -0
  623. package/systems/5e/images/oni.svg +1 -0
  624. package/systems/5e/images/orc-head.svg +1 -0
  625. package/systems/5e/images/owl.svg +1 -0
  626. package/systems/5e/images/pan-flute.svg +1 -0
  627. package/systems/5e/images/pegasus.svg +1 -0
  628. package/systems/5e/images/person.svg +1 -0
  629. package/systems/5e/images/piranha.svg +1 -0
  630. package/systems/5e/images/plesiosaurus.svg +1 -0
  631. package/systems/5e/images/pointy-hat.svg +1 -0
  632. package/systems/5e/images/polar-bear.svg +1 -0
  633. package/systems/5e/images/rat.svg +1 -0
  634. package/systems/5e/images/rattlesnake.svg +1 -0
  635. package/systems/5e/images/raven.svg +1 -0
  636. package/systems/5e/images/rhinoceros-horn.svg +1 -0
  637. package/systems/5e/images/robber.svg +1 -0
  638. package/systems/5e/images/robin-hood-hat.svg +1 -0
  639. package/systems/5e/images/robot-golem.svg +1 -0
  640. package/systems/5e/images/rock-golem.svg +1 -0
  641. package/systems/5e/images/rolled-cloth.svg +1 -0
  642. package/systems/5e/images/rooster.svg +1 -0
  643. package/systems/5e/images/saber-toothed-cat-head.svg +1 -0
  644. package/systems/5e/images/salamander.svg +1 -0
  645. package/systems/5e/images/school-of-fish.svg +1 -0
  646. package/systems/5e/images/scorpion.svg +1 -0
  647. package/systems/5e/images/sea-serpent.svg +1 -0
  648. package/systems/5e/images/seahorse.svg +1 -0
  649. package/systems/5e/images/seated-mouse.svg +1 -0
  650. package/systems/5e/images/sensuousness.svg +1 -0
  651. package/systems/5e/images/shadow-follower.svg +1 -0
  652. package/systems/5e/images/shambling-mound.svg +1 -0
  653. package/systems/5e/images/shambling-zombie.svg +1 -0
  654. package/systems/5e/images/shark-fin.svg +1 -0
  655. package/systems/5e/images/shark-jaws.svg +1 -0
  656. package/systems/5e/images/skeleton.svg +1 -0
  657. package/systems/5e/images/slime.svg +1 -0
  658. package/systems/5e/images/small-fire.svg +1 -0
  659. package/systems/5e/images/snake-spiral.svg +1 -0
  660. package/systems/5e/images/snake-tongue.svg +1 -0
  661. package/systems/5e/images/snake-totem.svg +1 -0
  662. package/systems/5e/images/snake.svg +1 -0
  663. package/systems/5e/images/spark-spirit.svg +1 -0
  664. package/systems/5e/images/spartan.svg +1 -0
  665. package/systems/5e/images/spectre.svg +1 -0
  666. package/systems/5e/images/sperm-whale.svg +1 -0
  667. package/systems/5e/images/spider-alt.svg +1 -0
  668. package/systems/5e/images/spiked-dragon-head.svg +1 -0
  669. package/systems/5e/images/spiked-tail.svg +1 -0
  670. package/systems/5e/images/spotted-mushroom.svg +1 -0
  671. package/systems/5e/images/spy.svg +1 -0
  672. package/systems/5e/images/squid.svg +1 -0
  673. package/systems/5e/images/stag-head.svg +1 -0
  674. package/systems/5e/images/steam.svg +1 -0
  675. package/systems/5e/images/sun-priest.svg +1 -0
  676. package/systems/5e/images/tick.svg +1 -0
  677. package/systems/5e/images/tiger-head.svg +1 -0
  678. package/systems/5e/images/tiger.svg +1 -0
  679. package/systems/5e/images/toad-teeth.svg +1 -0
  680. package/systems/5e/images/tornado.svg +1 -0
  681. package/systems/5e/images/transparent-slime.svg +1 -0
  682. package/systems/5e/images/tree-face.svg +1 -0
  683. package/systems/5e/images/tribal-mask.svg +1 -0
  684. package/systems/5e/images/triceratops-head.svg +1 -0
  685. package/systems/5e/images/triton-head.svg +1 -0
  686. package/systems/5e/images/troglodyte.svg +1 -0
  687. package/systems/5e/images/troll.svg +1 -0
  688. package/systems/5e/images/turtle.svg +1 -0
  689. package/systems/5e/images/unicorn.svg +1 -0
  690. package/systems/5e/images/vampire-dracula.svg +1 -0
  691. package/systems/5e/images/viking-head.svg +1 -0
  692. package/systems/5e/images/visored-helm.svg +1 -0
  693. package/systems/5e/images/vulture.svg +1 -0
  694. package/systems/5e/images/warlord-helmet.svg +1 -0
  695. package/systems/5e/images/wasp-sting.svg +1 -0
  696. package/systems/5e/images/werewolf.svg +1 -0
  697. package/systems/5e/images/winged-sword.svg +1 -0
  698. package/systems/5e/images/witch-face.svg +1 -0
  699. package/systems/5e/images/wizard-face.svg +1 -0
  700. package/systems/5e/images/wolf-head.svg +1 -0
  701. package/systems/5e/images/wolf-howl.svg +1 -0
  702. package/systems/5e/images/woman-elf-face.svg +1 -0
  703. package/systems/5e/images/worm-mouth.svg +1 -0
  704. package/systems/5e/images/wyvern.svg +1 -0
  705. package/systems/5e/instructions/level-up.md +1 -0
  706. package/systems/5e/instructions/mentor-tutorial.md +1 -0
  707. package/systems/5e/instructions/play.md +5 -0
  708. package/systems/5e/instructions/quest-ends.md +1 -0
  709. package/systems/5e/instructions/session-zero.md +1 -0
  710. package/systems/5e/rules/Adventuring.md +228 -0
  711. package/systems/5e/rules/Beyond 1st Level.md +241 -0
  712. package/systems/5e/rules/Combat.md +504 -0
  713. package/systems/5e/rules/Conditions.md +110 -0
  714. package/systems/5e/rules/Diseases.md +41 -0
  715. package/systems/5e/rules/Equipment.md +731 -0
  716. package/systems/5e/rules/Fantasy-Historical Pantheons.md +112 -0
  717. package/systems/5e/rules/Madness.md +72 -0
  718. package/systems/5e/rules/Magic Items.md +142 -0
  719. package/systems/5e/rules/Monsters.md +403 -0
  720. package/systems/5e/rules/Nonplayer Characters.md +15 -0
  721. package/systems/5e/rules/Objects.md +40 -0
  722. package/systems/5e/rules/Poisons.md +64 -0
  723. package/systems/5e/rules/Races.md +33 -0
  724. package/systems/5e/rules/Spellcasting.md +225 -0
  725. package/systems/5e/rules/The Planes of Existence.md +59 -0
  726. package/systems/5e/rules/Traps.md +170 -0
  727. package/systems/5e/rules/Using Ability Scores.md +394 -0
  728. package/systems/5e/system.yaml +602 -0
  729. package/systems/5e/words/ar.yaml +421 -0
  730. package/systems/5e/words/cs.yaml +421 -0
  731. package/systems/5e/words/da.yaml +421 -0
  732. package/systems/5e/words/de.yaml +421 -0
  733. package/systems/5e/words/el.yaml +421 -0
  734. package/systems/5e/words/es.yaml +421 -0
  735. package/systems/5e/words/fi.yaml +421 -0
  736. package/systems/5e/words/fr.yaml +421 -0
  737. package/systems/5e/words/he.yaml +421 -0
  738. package/systems/5e/words/hi.yaml +421 -0
  739. package/systems/5e/words/hu.yaml +421 -0
  740. package/systems/5e/words/is.yaml +421 -0
  741. package/systems/5e/words/it.yaml +453 -0
  742. package/systems/5e/words/ja.yaml +421 -0
  743. package/systems/5e/words/ko.yaml +421 -0
  744. package/systems/5e/words/nb.yaml +421 -0
  745. package/systems/5e/words/nl.yaml +421 -0
  746. package/systems/5e/words/pl.yaml +421 -0
  747. package/systems/5e/words/pt.yaml +421 -0
  748. package/systems/5e/words/ro.yaml +421 -0
  749. package/systems/5e/words/ru.yaml +421 -0
  750. package/systems/5e/words/sv.yaml +421 -0
  751. package/systems/5e/words/tr.yaml +421 -0
  752. package/systems/5e/words/uk.yaml +421 -0
  753. package/systems/5e/words/zh.yaml +421 -0
  754. package/systems/5e/world/creatures/Aboleth.md +65 -0
  755. package/systems/5e/world/creatures/Acolyte.md +37 -0
  756. package/systems/5e/world/creatures/Adult Black Dragon.md +69 -0
  757. package/systems/5e/world/creatures/Adult Blue Dragon.md +66 -0
  758. package/systems/5e/world/creatures/Adult Brass Dragon.md +70 -0
  759. package/systems/5e/world/creatures/Adult Bronze Dragon.md +78 -0
  760. package/systems/5e/world/creatures/Adult Copper Dragon.md +70 -0
  761. package/systems/5e/world/creatures/Adult Gold Dragon.md +78 -0
  762. package/systems/5e/world/creatures/Adult Green Dragon.md +70 -0
  763. package/systems/5e/world/creatures/Adult Red Dragon.md +66 -0
  764. package/systems/5e/world/creatures/Adult Silver Dragon.md +74 -0
  765. package/systems/5e/world/creatures/Adult White Dragon.md +70 -0
  766. package/systems/5e/world/creatures/Air Elemental.md +43 -0
  767. package/systems/5e/world/creatures/Ancient Black Dragon.md +69 -0
  768. package/systems/5e/world/creatures/Ancient Blue Dragon.md +66 -0
  769. package/systems/5e/world/creatures/Ancient Brass Dragon.md +75 -0
  770. package/systems/5e/world/creatures/Ancient Bronze Dragon.md +78 -0
  771. package/systems/5e/world/creatures/Ancient Copper Dragon.md +75 -0
  772. package/systems/5e/world/creatures/Ancient Gold Dragon.md +78 -0
  773. package/systems/5e/world/creatures/Ancient Green Dragon.md +70 -0
  774. package/systems/5e/world/creatures/Ancient Red Dragon.md +66 -0
  775. package/systems/5e/world/creatures/Ancient Silver Dragon.md +74 -0
  776. package/systems/5e/world/creatures/Ancient White Dragon.md +70 -0
  777. package/systems/5e/world/creatures/Androsphinx.md +82 -0
  778. package/systems/5e/world/creatures/Animated Armor.md +39 -0
  779. package/systems/5e/world/creatures/Ankheg.md +31 -0
  780. package/systems/5e/world/creatures/Ape.md +32 -0
  781. package/systems/5e/world/creatures/Archmage.md +63 -0
  782. package/systems/5e/world/creatures/Assassin.md +48 -0
  783. package/systems/5e/world/creatures/Awakened Shrub.md +34 -0
  784. package/systems/5e/world/creatures/Awakened Tree.md +35 -0
  785. package/systems/5e/world/creatures/Axe Beak.md +26 -0
  786. package/systems/5e/world/creatures/Azer.md +40 -0
  787. package/systems/5e/world/creatures/Baboon.md +30 -0
  788. package/systems/5e/world/creatures/Badger.md +31 -0
  789. package/systems/5e/world/creatures/Balor.md +55 -0
  790. package/systems/5e/world/creatures/Bandit Captain.md +45 -0
  791. package/systems/5e/world/creatures/Bandit.md +33 -0
  792. package/systems/5e/world/creatures/Barbed Devil.md +52 -0
  793. package/systems/5e/world/creatures/Basilisk.md +35 -0
  794. package/systems/5e/world/creatures/Bat.md +34 -0
  795. package/systems/5e/world/creatures/Bearded Devil.md +48 -0
  796. package/systems/5e/world/creatures/Behir.md +44 -0
  797. package/systems/5e/world/creatures/Berserker.md +33 -0
  798. package/systems/5e/world/creatures/Black Bear.md +38 -0
  799. package/systems/5e/world/creatures/Black Dragon Wyrmling.md +41 -0
  800. package/systems/5e/world/creatures/Black Pudding.md +46 -0
  801. package/systems/5e/world/creatures/Blink Dog.md +36 -0
  802. package/systems/5e/world/creatures/Blood Hawk.md +36 -0
  803. package/systems/5e/world/creatures/Blue Dragon Wyrmling.md +36 -0
  804. package/systems/5e/world/creatures/Boar.md +33 -0
  805. package/systems/5e/world/creatures/Bone Devil.md +47 -0
  806. package/systems/5e/world/creatures/Brass Dragon Wyrmling.md +40 -0
  807. package/systems/5e/world/creatures/Bronze Dragon Wyrmling.md +45 -0
  808. package/systems/5e/world/creatures/Brown Bear.md +38 -0
  809. package/systems/5e/world/creatures/Bugbear.md +39 -0
  810. package/systems/5e/world/creatures/Bulette.md +37 -0
  811. package/systems/5e/world/creatures/Camel.md +24 -0
  812. package/systems/5e/world/creatures/Cat.md +31 -0
  813. package/systems/5e/world/creatures/Centaur.md +40 -0
  814. package/systems/5e/world/creatures/Chain Devil.md +52 -0
  815. package/systems/5e/world/creatures/Chimera.md +41 -0
  816. package/systems/5e/world/creatures/Chuul.md +45 -0
  817. package/systems/5e/world/creatures/Clay Golem.md +52 -0
  818. package/systems/5e/world/creatures/Cloaker.md +56 -0
  819. package/systems/5e/world/creatures/Cloud Giant.md +46 -0
  820. package/systems/5e/world/creatures/Cockatrice.md +26 -0
  821. package/systems/5e/world/creatures/Commoner.md +27 -0
  822. package/systems/5e/world/creatures/Constrictor Snake.md +29 -0
  823. package/systems/5e/world/creatures/Copper Dragon Wyrmling.md +40 -0
  824. package/systems/5e/world/creatures/Couatl.md +54 -0
  825. package/systems/5e/world/creatures/Crab.md +33 -0
  826. package/systems/5e/world/creatures/Crocodile.md +32 -0
  827. package/systems/5e/world/creatures/Cult Fanatic.md +46 -0
  828. package/systems/5e/world/creatures/Cultist.md +34 -0
  829. package/systems/5e/world/creatures/Darkmantle.md +42 -0
  830. package/systems/5e/world/creatures/Death Dog.md +36 -0
  831. package/systems/5e/world/creatures/Deep Gnome (Svirfneblin).md +46 -0
  832. package/systems/5e/world/creatures/Deer.md +24 -0
  833. package/systems/5e/world/creatures/Deva.md +57 -0
  834. package/systems/5e/world/creatures/Dire Wolf.md +34 -0
  835. package/systems/5e/world/creatures/Djinni.md +50 -0
  836. package/systems/5e/world/creatures/Doppelganger.md +45 -0
  837. package/systems/5e/world/creatures/Draft Horse.md +24 -0
  838. package/systems/5e/world/creatures/Dragon Turtle.md +47 -0
  839. package/systems/5e/world/creatures/Dragonborn.md +58 -0
  840. package/systems/5e/world/creatures/Dretch.md +39 -0
  841. package/systems/5e/world/creatures/Drider.md +58 -0
  842. package/systems/5e/world/creatures/Drow Elf.md +46 -0
  843. package/systems/5e/world/creatures/Druid (creature).md +41 -0
  844. package/systems/5e/world/creatures/Dryad.md +53 -0
  845. package/systems/5e/world/creatures/Duergar.md +45 -0
  846. package/systems/5e/world/creatures/Dust Mephit.md +42 -0
  847. package/systems/5e/world/creatures/Dwarf.md +48 -0
  848. package/systems/5e/world/creatures/Eagle.md +31 -0
  849. package/systems/5e/world/creatures/Earth Elemental.md +44 -0
  850. package/systems/5e/world/creatures/Efreeti.md +48 -0
  851. package/systems/5e/world/creatures/Elephant.md +33 -0
  852. package/systems/5e/world/creatures/Elf.md +44 -0
  853. package/systems/5e/world/creatures/Elk.md +32 -0
  854. package/systems/5e/world/creatures/Erinyes.md +51 -0
  855. package/systems/5e/world/creatures/Ettercap.md +48 -0
  856. package/systems/5e/world/creatures/Ettin.md +42 -0
  857. package/systems/5e/world/creatures/Fire Elemental.md +43 -0
  858. package/systems/5e/world/creatures/Fire Giant.md +35 -0
  859. package/systems/5e/world/creatures/Flesh Golem.md +53 -0
  860. package/systems/5e/world/creatures/Flying Snake.md +34 -0
  861. package/systems/5e/world/creatures/Flying Sword.md +38 -0
  862. package/systems/5e/world/creatures/Frog.md +32 -0
  863. package/systems/5e/world/creatures/Frost Giant.md +35 -0
  864. package/systems/5e/world/creatures/Gargoyle.md +42 -0
  865. package/systems/5e/world/creatures/Gelatinous Cube.md +49 -0
  866. package/systems/5e/world/creatures/Ghast.md +40 -0
  867. package/systems/5e/world/creatures/Ghost.md +49 -0
  868. package/systems/5e/world/creatures/Ghoul.md +31 -0
  869. package/systems/5e/world/creatures/Giant Ape.md +32 -0
  870. package/systems/5e/world/creatures/Giant Badger.md +37 -0
  871. package/systems/5e/world/creatures/Giant Bat.md +34 -0
  872. package/systems/5e/world/creatures/Giant Boar.md +33 -0
  873. package/systems/5e/world/creatures/Giant Centipede.md +27 -0
  874. package/systems/5e/world/creatures/Giant Constrictor Snake.md +30 -0
  875. package/systems/5e/world/creatures/Giant Crab.md +33 -0
  876. package/systems/5e/world/creatures/Giant Crocodile.md +38 -0
  877. package/systems/5e/world/creatures/Giant Eagle.md +40 -0
  878. package/systems/5e/world/creatures/Giant Elk.md +37 -0
  879. package/systems/5e/world/creatures/Giant Fire Beetle.md +33 -0
  880. package/systems/5e/world/creatures/Giant Frog.md +40 -0
  881. package/systems/5e/world/creatures/Giant Goat.md +33 -0
  882. package/systems/5e/world/creatures/Giant Hyena.md +30 -0
  883. package/systems/5e/world/creatures/Giant Lizard.md +29 -0
  884. package/systems/5e/world/creatures/Giant Octopus.md +41 -0
  885. package/systems/5e/world/creatures/Giant Owl.md +38 -0
  886. package/systems/5e/world/creatures/Giant Poisonous Snake.md +27 -0
  887. package/systems/5e/world/creatures/Giant Rat.md +39 -0
  888. package/systems/5e/world/creatures/Giant Scorpion.md +32 -0
  889. package/systems/5e/world/creatures/Giant Sea Horse.md +36 -0
  890. package/systems/5e/world/creatures/Giant Shark.md +38 -0
  891. package/systems/5e/world/creatures/Giant Spider.md +45 -0
  892. package/systems/5e/world/creatures/Giant Toad.md +39 -0
  893. package/systems/5e/world/creatures/Giant Vulture.md +43 -0
  894. package/systems/5e/world/creatures/Giant Wasp.md +25 -0
  895. package/systems/5e/world/creatures/Giant Weasel.md +31 -0
  896. package/systems/5e/world/creatures/Giant Wolf Spider.md +41 -0
  897. package/systems/5e/world/creatures/Gibbering Mouther.md +41 -0
  898. package/systems/5e/world/creatures/Glabrezu.md +48 -0
  899. package/systems/5e/world/creatures/Gladiator.md +49 -0
  900. package/systems/5e/world/creatures/Gnoll.md +38 -0
  901. package/systems/5e/world/creatures/Gnome.md +37 -0
  902. package/systems/5e/world/creatures/Goat.md +32 -0
  903. package/systems/5e/world/creatures/Goblin.md +36 -0
  904. package/systems/5e/world/creatures/Gold Dragon Wyrmling.md +45 -0
  905. package/systems/5e/world/creatures/Gorgon.md +39 -0
  906. package/systems/5e/world/creatures/Gray Ooze.md +42 -0
  907. package/systems/5e/world/creatures/Green Dragon Wyrmling.md +42 -0
  908. package/systems/5e/world/creatures/Green Hag.md +49 -0
  909. package/systems/5e/world/creatures/Grick.md +39 -0
  910. package/systems/5e/world/creatures/Griffon.md +38 -0
  911. package/systems/5e/world/creatures/Grimlock.md +39 -0
  912. package/systems/5e/world/creatures/Guard.md +29 -0
  913. package/systems/5e/world/creatures/Guardian Naga.md +55 -0
  914. package/systems/5e/world/creatures/Gynosphinx.md +71 -0
  915. package/systems/5e/world/creatures/Half-Elf.md +40 -0
  916. package/systems/5e/world/creatures/Half-Orc.md +44 -0
  917. package/systems/5e/world/creatures/Half-Red Dragon Veteran.md +42 -0
  918. package/systems/5e/world/creatures/Halfling.md +39 -0
  919. package/systems/5e/world/creatures/Harpy.md +39 -0
  920. package/systems/5e/world/creatures/Hawk.md +31 -0
  921. package/systems/5e/world/creatures/Hell Hound.md +40 -0
  922. package/systems/5e/world/creatures/Hezrou.md +45 -0
  923. package/systems/5e/world/creatures/High Elf.md +22 -0
  924. package/systems/5e/world/creatures/Hill Dwarf.md +16 -0
  925. package/systems/5e/world/creatures/Hill Giant.md +33 -0
  926. package/systems/5e/world/creatures/Hippogriff.md +37 -0
  927. package/systems/5e/world/creatures/Hobgoblin.md +35 -0
  928. package/systems/5e/world/creatures/Homunculus.md +35 -0
  929. package/systems/5e/world/creatures/Horned Devil.md +49 -0
  930. package/systems/5e/world/creatures/Human.md +29 -0
  931. package/systems/5e/world/creatures/Hunter Shark.md +38 -0
  932. package/systems/5e/world/creatures/Hydra.md +49 -0
  933. package/systems/5e/world/creatures/Hyena.md +30 -0
  934. package/systems/5e/world/creatures/Ice Devil.md +56 -0
  935. package/systems/5e/world/creatures/Ice Mephit.md +45 -0
  936. package/systems/5e/world/creatures/Imp.md +45 -0
  937. package/systems/5e/world/creatures/Invisible Stalker.md +42 -0
  938. package/systems/5e/world/creatures/Iron Golem.md +52 -0
  939. package/systems/5e/world/creatures/Jackal.md +33 -0
  940. package/systems/5e/world/creatures/Killer Whale.md +39 -0
  941. package/systems/5e/world/creatures/Knight.md +48 -0
  942. package/systems/5e/world/creatures/Kobold.md +37 -0
  943. package/systems/5e/world/creatures/Kraken.md +69 -0
  944. package/systems/5e/world/creatures/Lamia.md +46 -0
  945. package/systems/5e/world/creatures/Lemure.md +37 -0
  946. package/systems/5e/world/creatures/Lich.md +82 -0
  947. package/systems/5e/world/creatures/Lightfoot Halfling.md +18 -0
  948. package/systems/5e/world/creatures/Lion.md +42 -0
  949. package/systems/5e/world/creatures/Lizard.md +26 -0
  950. package/systems/5e/world/creatures/Lizardfolk.md +45 -0
  951. package/systems/5e/world/creatures/Mage.md +47 -0
  952. package/systems/5e/world/creatures/Magma Mephit.md +45 -0
  953. package/systems/5e/world/creatures/Magmin.md +37 -0
  954. package/systems/5e/world/creatures/Mammoth.md +35 -0
  955. package/systems/5e/world/creatures/Manticore.md +42 -0
  956. package/systems/5e/world/creatures/Marilith.md +56 -0
  957. package/systems/5e/world/creatures/Mastiff.md +32 -0
  958. package/systems/5e/world/creatures/Medusa.md +46 -0
  959. package/systems/5e/world/creatures/Merfolk.md +32 -0
  960. package/systems/5e/world/creatures/Merrow.md +42 -0
  961. package/systems/5e/world/creatures/Mimic.md +46 -0
  962. package/systems/5e/world/creatures/Minotaur Skeleton.md +38 -0
  963. package/systems/5e/world/creatures/Minotaur.md +42 -0
  964. package/systems/5e/world/creatures/Mule.md +32 -0
  965. package/systems/5e/world/creatures/Mummy Lord.md +82 -0
  966. package/systems/5e/world/creatures/Mummy.md +38 -0
  967. package/systems/5e/world/creatures/Nalfeshnee.md +49 -0
  968. package/systems/5e/world/creatures/Night Hag.md +50 -0
  969. package/systems/5e/world/creatures/Nightmare.md +39 -0
  970. package/systems/5e/world/creatures/Noble.md +36 -0
  971. package/systems/5e/world/creatures/Ochre Jelly.md +42 -0
  972. package/systems/5e/world/creatures/Octopus.md +41 -0
  973. package/systems/5e/world/creatures/Ogre Zombie.md +34 -0
  974. package/systems/5e/world/creatures/Ogre.md +30 -0
  975. package/systems/5e/world/creatures/Oni.md +53 -0
  976. package/systems/5e/world/creatures/Orc.md +36 -0
  977. package/systems/5e/world/creatures/Otyugh.md +42 -0
  978. package/systems/5e/world/creatures/Owl.md +35 -0
  979. package/systems/5e/world/creatures/Owlbear.md +38 -0
  980. package/systems/5e/world/creatures/Panther.md +37 -0
  981. package/systems/5e/world/creatures/Pegasus.md +28 -0
  982. package/systems/5e/world/creatures/Phase Spider.md +41 -0
  983. package/systems/5e/world/creatures/Pit Fiend.md +61 -0
  984. package/systems/5e/world/creatures/Planetar.md +56 -0
  985. package/systems/5e/world/creatures/Plesiosaurus.md +32 -0
  986. package/systems/5e/world/creatures/Poisonous Snake.md +26 -0
  987. package/systems/5e/world/creatures/Polar Bear.md +38 -0
  988. package/systems/5e/world/creatures/Pony.md +24 -0
  989. package/systems/5e/world/creatures/Priest.md +47 -0
  990. package/systems/5e/world/creatures/Pseudodragon.md +44 -0
  991. package/systems/5e/world/creatures/Purple Worm.md +42 -0
  992. package/systems/5e/world/creatures/Quasit.md +44 -0
  993. package/systems/5e/world/creatures/Quipper.md +36 -0
  994. package/systems/5e/world/creatures/Rakshasa.md +45 -0
  995. package/systems/5e/world/creatures/Rat.md +30 -0
  996. package/systems/5e/world/creatures/Raven.md +31 -0
  997. package/systems/5e/world/creatures/Red Dragon Wyrmling.md +36 -0
  998. package/systems/5e/world/creatures/Reef Shark.md +38 -0
  999. package/systems/5e/world/creatures/Remorhaz.md +39 -0
  1000. package/systems/5e/world/creatures/Rhinoceros.md +30 -0
  1001. package/systems/5e/world/creatures/Riding Horse.md +24 -0
  1002. package/systems/5e/world/creatures/Roc.md +39 -0
  1003. package/systems/5e/world/creatures/Rock Gnome.md +27 -0
  1004. package/systems/5e/world/creatures/Roper.md +48 -0
  1005. package/systems/5e/world/creatures/Rug of Smothering.md +38 -0
  1006. package/systems/5e/world/creatures/Rust Monster.md +39 -0
  1007. package/systems/5e/world/creatures/Saber-Toothed Tiger.md +36 -0
  1008. package/systems/5e/world/creatures/Sahuagin.md +49 -0
  1009. package/systems/5e/world/creatures/Salamander.md +44 -0
  1010. package/systems/5e/world/creatures/Satyr.md +38 -0
  1011. package/systems/5e/world/creatures/Scorpion.md +26 -0
  1012. package/systems/5e/world/creatures/Scout.md +40 -0
  1013. package/systems/5e/world/creatures/Sea Hag.md +46 -0
  1014. package/systems/5e/world/creatures/Sea Horse.md +25 -0
  1015. package/systems/5e/world/creatures/Shadow.md +45 -0
  1016. package/systems/5e/world/creatures/Shambling Mound.md +42 -0
  1017. package/systems/5e/world/creatures/Shield Guardian.md +49 -0
  1018. package/systems/5e/world/creatures/Shrieker.md +31 -0
  1019. package/systems/5e/world/creatures/Silver Dragon Wyrmling.md +39 -0
  1020. package/systems/5e/world/creatures/Skeleton.md +33 -0
  1021. package/systems/5e/world/creatures/Solar.md +76 -0
  1022. package/systems/5e/world/creatures/Specter.md +38 -0
  1023. package/systems/5e/world/creatures/Spider.md +38 -0
  1024. package/systems/5e/world/creatures/Spirit Naga.md +50 -0
  1025. package/systems/5e/world/creatures/Sprite.md +37 -0
  1026. package/systems/5e/world/creatures/Spy.md +42 -0
  1027. package/systems/5e/world/creatures/Steam Mephit.md +40 -0
  1028. package/systems/5e/world/creatures/Stirge.md +29 -0
  1029. package/systems/5e/world/creatures/Stone Giant.md +45 -0
  1030. package/systems/5e/world/creatures/Stone Golem.md +46 -0
  1031. package/systems/5e/world/creatures/Storm Giant.md +51 -0
  1032. package/systems/5e/world/creatures/Succubus-Incubus.md +50 -0
  1033. package/systems/5e/world/creatures/Swarm of Bats.md +39 -0
  1034. package/systems/5e/world/creatures/Swarm of Insects.md +52 -0
  1035. package/systems/5e/world/creatures/Swarm of Poisonous Snakes.md +33 -0
  1036. package/systems/5e/world/creatures/Swarm of Quippers.md +39 -0
  1037. package/systems/5e/world/creatures/Swarm of Rats.md +35 -0
  1038. package/systems/5e/world/creatures/Swarm of Ravens.md +33 -0
  1039. package/systems/5e/world/creatures/Tarrasque.md +76 -0
  1040. package/systems/5e/world/creatures/Thug.md +40 -0
  1041. package/systems/5e/world/creatures/Tiefling.md +40 -0
  1042. package/systems/5e/world/creatures/Tiger.md +37 -0
  1043. package/systems/5e/world/creatures/Treant.md +45 -0
  1044. package/systems/5e/world/creatures/Tribal Warrior.md +33 -0
  1045. package/systems/5e/world/creatures/Triceratops.md +33 -0
  1046. package/systems/5e/world/creatures/Troll.md +42 -0
  1047. package/systems/5e/world/creatures/Tyrannosaurus Rex.md +32 -0
  1048. package/systems/5e/world/creatures/Unicorn.md +70 -0
  1049. package/systems/5e/world/creatures/Vampire Spawn.md +55 -0
  1050. package/systems/5e/world/creatures/Vampire.md +91 -0
  1051. package/systems/5e/world/creatures/Veteran.md +38 -0
  1052. package/systems/5e/world/creatures/Violet Fungus.md +34 -0
  1053. package/systems/5e/world/creatures/Vrock.md +49 -0
  1054. package/systems/5e/world/creatures/Vulture.md +34 -0
  1055. package/systems/5e/world/creatures/Warhorse Skeleton.md +29 -0
  1056. package/systems/5e/world/creatures/Warhorse.md +29 -0
  1057. package/systems/5e/world/creatures/Water Elemental.md +47 -0
  1058. package/systems/5e/world/creatures/Weasel.md +30 -0
  1059. package/systems/5e/world/creatures/Werebear.md +45 -0
  1060. package/systems/5e/world/creatures/Wereboar.md +45 -0
  1061. package/systems/5e/world/creatures/Wererat.md +45 -0
  1062. package/systems/5e/world/creatures/Weretiger.md +51 -0
  1063. package/systems/5e/world/creatures/Werewolf.md +45 -0
  1064. package/systems/5e/world/creatures/White Dragon Wyrmling.md +37 -0
  1065. package/systems/5e/world/creatures/Wight.md +47 -0
  1066. package/systems/5e/world/creatures/Will-o'-Wisp.md +47 -0
  1067. package/systems/5e/world/creatures/Winter Wolf.md +44 -0
  1068. package/systems/5e/world/creatures/Wolf.md +34 -0
  1069. package/systems/5e/world/creatures/Worg.md +35 -0
  1070. package/systems/5e/world/creatures/Wraith.md +41 -0
  1071. package/systems/5e/world/creatures/Wyvern.md +37 -0
  1072. package/systems/5e/world/creatures/Xorn.md +48 -0
  1073. package/systems/5e/world/creatures/Young Black Dragon.md +47 -0
  1074. package/systems/5e/world/creatures/Young Blue Dragon.md +42 -0
  1075. package/systems/5e/world/creatures/Young Brass Dragon.md +46 -0
  1076. package/systems/5e/world/creatures/Young Bronze Dragon.md +51 -0
  1077. package/systems/5e/world/creatures/Young Copper Dragon.md +46 -0
  1078. package/systems/5e/world/creatures/Young Gold Dragon.md +51 -0
  1079. package/systems/5e/world/creatures/Young Green Dragon.md +48 -0
  1080. package/systems/5e/world/creatures/Young Red Dragon.md +42 -0
  1081. package/systems/5e/world/creatures/Young Silver Dragon.md +45 -0
  1082. package/systems/5e/world/creatures/Young White Dragon.md +48 -0
  1083. package/systems/5e/world/creatures/Zombie.md +34 -0
  1084. package/systems/5e/world/items/Abacus.md +5 -0
  1085. package/systems/5e/world/items/Acid.md +8 -0
  1086. package/systems/5e/world/items/Adamantine Armor.md +6 -0
  1087. package/systems/5e/world/items/Alchemist's Fire.md +8 -0
  1088. package/systems/5e/world/items/Alchemist's Supplies.md +7 -0
  1089. package/systems/5e/world/items/Ammunition, +1, +2, or +3.md +6 -0
  1090. package/systems/5e/world/items/Amulet of Health.md +7 -0
  1091. package/systems/5e/world/items/Amulet of Proof against Detection and Location.md +7 -0
  1092. package/systems/5e/world/items/Amulet of the Planes.md +7 -0
  1093. package/systems/5e/world/items/Amulet.md +7 -0
  1094. package/systems/5e/world/items/Animated Shield.md +7 -0
  1095. package/systems/5e/world/items/Antitoxin.md +7 -0
  1096. package/systems/5e/world/items/Apparatus of the Crab.md +37 -0
  1097. package/systems/5e/world/items/Armor of Invulnerability.md +7 -0
  1098. package/systems/5e/world/items/Armor of Resistance.md +15 -0
  1099. package/systems/5e/world/items/Armor of Vulnerability.md +9 -0
  1100. package/systems/5e/world/items/Armor, +1, +2, or +3.md +6 -0
  1101. package/systems/5e/world/items/Arrow of Slaying.md +10 -0
  1102. package/systems/5e/world/items/Arrow-Catching Shield.md +7 -0
  1103. package/systems/5e/world/items/Arrows.md +6 -0
  1104. package/systems/5e/world/items/Backpack.md +5 -0
  1105. package/systems/5e/world/items/Bag of Beans.md +25 -0
  1106. package/systems/5e/world/items/Bag of Devouring.md +12 -0
  1107. package/systems/5e/world/items/Bag of Holding.md +10 -0
  1108. package/systems/5e/world/items/Bag of Tricks.md +51 -0
  1109. package/systems/5e/world/items/Bagpipes.md +7 -0
  1110. package/systems/5e/world/items/Ball Bearings.md +8 -0
  1111. package/systems/5e/world/items/Barding.md +7 -0
  1112. package/systems/5e/world/items/Barrel.md +5 -0
  1113. package/systems/5e/world/items/Basic Poison.md +7 -0
  1114. package/systems/5e/world/items/Basket.md +5 -0
  1115. package/systems/5e/world/items/Battleaxe.md +10 -0
  1116. package/systems/5e/world/items/Bead of Force.md +10 -0
  1117. package/systems/5e/world/items/Bedroll.md +5 -0
  1118. package/systems/5e/world/items/Bell.md +4 -0
  1119. package/systems/5e/world/items/Belt of Dwarvenkind.md +18 -0
  1120. package/systems/5e/world/items/Belt of Giant Strength.md +17 -0
  1121. package/systems/5e/world/items/Berserker Axe.md +11 -0
  1122. package/systems/5e/world/items/Bit and Bridle.md +5 -0
  1123. package/systems/5e/world/items/Blanket.md +5 -0
  1124. package/systems/5e/world/items/Block and Tackle.md +7 -0
  1125. package/systems/5e/world/items/Blowgun Needles.md +6 -0
  1126. package/systems/5e/world/items/Blowgun.md +10 -0
  1127. package/systems/5e/world/items/Book.md +7 -0
  1128. package/systems/5e/world/items/Boots of Elvenkind.md +6 -0
  1129. package/systems/5e/world/items/Boots of Levitation.md +7 -0
  1130. package/systems/5e/world/items/Boots of Speed.md +9 -0
  1131. package/systems/5e/world/items/Boots of Striding and Springing.md +7 -0
  1132. package/systems/5e/world/items/Boots of the Winterlands.md +11 -0
  1133. package/systems/5e/world/items/Bowl of Commanding Water Elementals.md +8 -0
  1134. package/systems/5e/world/items/Bracers of Archery.md +7 -0
  1135. package/systems/5e/world/items/Bracers of Defense.md +7 -0
  1136. package/systems/5e/world/items/Brazier of Commanding Fire Elementals.md +8 -0
  1137. package/systems/5e/world/items/Breastplate.md +9 -0
  1138. package/systems/5e/world/items/Brewer's Supplies.md +7 -0
  1139. package/systems/5e/world/items/Brooch of Shielding.md +7 -0
  1140. package/systems/5e/world/items/Broom of Flying.md +8 -0
  1141. package/systems/5e/world/items/Bucket.md +5 -0
  1142. package/systems/5e/world/items/Bullseye Lantern.md +8 -0
  1143. package/systems/5e/world/items/Burglar's Pack.md +6 -0
  1144. package/systems/5e/world/items/Calligrapher's Supplies.md +7 -0
  1145. package/systems/5e/world/items/Caltrops.md +8 -0
  1146. package/systems/5e/world/items/Candle of Invocation.md +25 -0
  1147. package/systems/5e/world/items/Candle.md +6 -0
  1148. package/systems/5e/world/items/Cape of the Mountebank.md +8 -0
  1149. package/systems/5e/world/items/Carpenter's Tools.md +7 -0
  1150. package/systems/5e/world/items/Carpet of Flying.md +17 -0
  1151. package/systems/5e/world/items/Carriage.md +5 -0
  1152. package/systems/5e/world/items/Cart.md +5 -0
  1153. package/systems/5e/world/items/Cartographer's Tools.md +7 -0
  1154. package/systems/5e/world/items/Censer of Controlling Air Elementals.md +8 -0
  1155. package/systems/5e/world/items/Chain Mail.md +11 -0
  1156. package/systems/5e/world/items/Chain Shirt.md +9 -0
  1157. package/systems/5e/world/items/Chain.md +9 -0
  1158. package/systems/5e/world/items/Chalk.md +5 -0
  1159. package/systems/5e/world/items/Chariot.md +5 -0
  1160. package/systems/5e/world/items/Chest.md +5 -0
  1161. package/systems/5e/world/items/Chime of Opening.md +8 -0
  1162. package/systems/5e/world/items/Circlet of Blasting.md +6 -0
  1163. package/systems/5e/world/items/Climber's Kit.md +7 -0
  1164. package/systems/5e/world/items/Cloak of Arachnida.md +13 -0
  1165. package/systems/5e/world/items/Cloak of Displacement.md +7 -0
  1166. package/systems/5e/world/items/Cloak of Elvenkind.md +7 -0
  1167. package/systems/5e/world/items/Cloak of Protection.md +7 -0
  1168. package/systems/5e/world/items/Cloak of the Bat.md +9 -0
  1169. package/systems/5e/world/items/Cloak of the Manta Ray.md +6 -0
  1170. package/systems/5e/world/items/Club.md +10 -0
  1171. package/systems/5e/world/items/Cobbler's Tools.md +7 -0
  1172. package/systems/5e/world/items/Common Clothes.md +6 -0
  1173. package/systems/5e/world/items/Component Pouch.md +7 -0
  1174. package/systems/5e/world/items/Cook's Utensils.md +7 -0
  1175. package/systems/5e/world/items/Costume Clothes.md +6 -0
  1176. package/systems/5e/world/items/Crossbow Bolt Case.md +8 -0
  1177. package/systems/5e/world/items/Crossbow Bolts.md +6 -0
  1178. package/systems/5e/world/items/Crowbar.md +7 -0
  1179. package/systems/5e/world/items/Crystal Ball.md +15 -0
  1180. package/systems/5e/world/items/Crystal.md +7 -0
  1181. package/systems/5e/world/items/Cube of Force.md +32 -0
  1182. package/systems/5e/world/items/Cubic Gate.md +10 -0
  1183. package/systems/5e/world/items/Dagger of Venom.md +8 -0
  1184. package/systems/5e/world/items/Dagger.md +10 -0
  1185. package/systems/5e/world/items/Dancing Sword.md +11 -0
  1186. package/systems/5e/world/items/Dart.md +10 -0
  1187. package/systems/5e/world/items/Decanter of Endless Water.md +12 -0
  1188. package/systems/5e/world/items/Deck of Illusions.md +48 -0
  1189. package/systems/5e/world/items/Deck of Many Things.md +113 -0
  1190. package/systems/5e/world/items/Defender.md +9 -0
  1191. package/systems/5e/world/items/Demon Armor.md +9 -0
  1192. package/systems/5e/world/items/Dice Set.md +6 -0
  1193. package/systems/5e/world/items/Dimensional Shackles.md +8 -0
  1194. package/systems/5e/world/items/Diplomat's Pack.md +6 -0
  1195. package/systems/5e/world/items/Disguise Kit.md +7 -0
  1196. package/systems/5e/world/items/Dragon Scale Mail.md +19 -0
  1197. package/systems/5e/world/items/Dragon Slayer.md +8 -0
  1198. package/systems/5e/world/items/Drum.md +7 -0
  1199. package/systems/5e/world/items/Dulcimer.md +7 -0
  1200. package/systems/5e/world/items/Dungeoneer's Pack.md +6 -0
  1201. package/systems/5e/world/items/Dust of Disappearance.md +6 -0
  1202. package/systems/5e/world/items/Dust of Dryness.md +10 -0
  1203. package/systems/5e/world/items/Dust of Sneezing and Choking.md +8 -0
  1204. package/systems/5e/world/items/Dwarven Plate.md +6 -0
  1205. package/systems/5e/world/items/Dwarven Thrower.md +7 -0
  1206. package/systems/5e/world/items/Efficient Quiver.md +8 -0
  1207. package/systems/5e/world/items/Efreeti Bottle.md +14 -0
  1208. package/systems/5e/world/items/Elemental Gem.md +13 -0
  1209. package/systems/5e/world/items/Elven Chain.md +6 -0
  1210. package/systems/5e/world/items/Emblem.md +6 -0
  1211. package/systems/5e/world/items/Entertainer's Pack.md +6 -0
  1212. package/systems/5e/world/items/Eversmoking Bottle.md +8 -0
  1213. package/systems/5e/world/items/Exotic Saddle.md +7 -0
  1214. package/systems/5e/world/items/Explorer's Pack.md +6 -0
  1215. package/systems/5e/world/items/Eyes of Charming.md +7 -0
  1216. package/systems/5e/world/items/Eyes of Minute Seeing.md +6 -0
  1217. package/systems/5e/world/items/Eyes of the Eagle.md +7 -0
  1218. package/systems/5e/world/items/Feather Token.md +26 -0
  1219. package/systems/5e/world/items/Feed.md +6 -0
  1220. package/systems/5e/world/items/Figurine of Wondrous Power.md +52 -0
  1221. package/systems/5e/world/items/Fine Clothes.md +6 -0
  1222. package/systems/5e/world/items/Fishing Tackle.md +7 -0
  1223. package/systems/5e/world/items/Flail.md +9 -0
  1224. package/systems/5e/world/items/Flame Tongue.md +7 -0
  1225. package/systems/5e/world/items/Flask or Tankard.md +5 -0
  1226. package/systems/5e/world/items/Flute.md +7 -0
  1227. package/systems/5e/world/items/Folding Boat.md +14 -0
  1228. package/systems/5e/world/items/Forgery Kit.md +7 -0
  1229. package/systems/5e/world/items/Frost Brand.md +11 -0
  1230. package/systems/5e/world/items/Galley.md +5 -0
  1231. package/systems/5e/world/items/Gauntlets of Ogre Power.md +7 -0
  1232. package/systems/5e/world/items/Gem of Brightness.md +12 -0
  1233. package/systems/5e/world/items/Gem of Seeing.md +9 -0
  1234. package/systems/5e/world/items/Giant Slayer.md +8 -0
  1235. package/systems/5e/world/items/Glaive.md +10 -0
  1236. package/systems/5e/world/items/Glamoured Studded Leather.md +6 -0
  1237. package/systems/5e/world/items/Glass Bottle.md +6 -0
  1238. package/systems/5e/world/items/Glassblower's Tools.md +7 -0
  1239. package/systems/5e/world/items/Gloves of Missile Snaring.md +7 -0
  1240. package/systems/5e/world/items/Gloves of Swimming and Climbing.md +7 -0
  1241. package/systems/5e/world/items/Goggles of Night.md +6 -0
  1242. package/systems/5e/world/items/Grappling Hook.md +5 -0
  1243. package/systems/5e/world/items/Greataxe.md +10 -0
  1244. package/systems/5e/world/items/Greatclub.md +10 -0
  1245. package/systems/5e/world/items/Greatsword.md +10 -0
  1246. package/systems/5e/world/items/Halberd.md +10 -0
  1247. package/systems/5e/world/items/Half Plate Armor.md +11 -0
  1248. package/systems/5e/world/items/Hammer of Thunderbolts.md +10 -0
  1249. package/systems/5e/world/items/Hammer.md +5 -0
  1250. package/systems/5e/world/items/Hand Crossbow.md +11 -0
  1251. package/systems/5e/world/items/Handaxe.md +10 -0
  1252. package/systems/5e/world/items/Handy Haversack.md +12 -0
  1253. package/systems/5e/world/items/Hat of Disguise.md +7 -0
  1254. package/systems/5e/world/items/Headband of Intellect.md +7 -0
  1255. package/systems/5e/world/items/Healer's Kit.md +8 -0
  1256. package/systems/5e/world/items/Heavy Crossbow.md +11 -0
  1257. package/systems/5e/world/items/Helm of Brilliance.md +16 -0
  1258. package/systems/5e/world/items/Helm of Comprehending Languages.md +6 -0
  1259. package/systems/5e/world/items/Helm of Telepathy.md +9 -0
  1260. package/systems/5e/world/items/Helm of Teleportation.md +7 -0
  1261. package/systems/5e/world/items/Hempen Rope.md +9 -0
  1262. package/systems/5e/world/items/Herbalism Kit.md +7 -0
  1263. package/systems/5e/world/items/Hide Armor.md +10 -0
  1264. package/systems/5e/world/items/Holy Avenger.md +9 -0
  1265. package/systems/5e/world/items/Holy Water.md +10 -0
  1266. package/systems/5e/world/items/Hooded Lantern.md +8 -0
  1267. package/systems/5e/world/items/Horn of Blasting.md +8 -0
  1268. package/systems/5e/world/items/Horn of Valhalla.md +17 -0
  1269. package/systems/5e/world/items/Horn.md +7 -0
  1270. package/systems/5e/world/items/Horseshoes of Speed.md +6 -0
  1271. package/systems/5e/world/items/Horseshoes of a Zephyr.md +6 -0
  1272. package/systems/5e/world/items/Hourglass.md +5 -0
  1273. package/systems/5e/world/items/Hunting Trap.md +7 -0
  1274. package/systems/5e/world/items/Immovable Rod.md +6 -0
  1275. package/systems/5e/world/items/Ink Pen.md +4 -0
  1276. package/systems/5e/world/items/Ink.md +5 -0
  1277. package/systems/5e/world/items/Instant Fortress.md +12 -0
  1278. package/systems/5e/world/items/Ioun Stone.md +47 -0
  1279. package/systems/5e/world/items/Iron Bands of Binding.md +12 -0
  1280. package/systems/5e/world/items/Iron Flask.md +33 -0
  1281. package/systems/5e/world/items/Iron Pot.md +6 -0
  1282. package/systems/5e/world/items/Iron Spikes.md +6 -0
  1283. package/systems/5e/world/items/Javelin of Lightning.md +8 -0
  1284. package/systems/5e/world/items/Javelin.md +10 -0
  1285. package/systems/5e/world/items/Jeweler's Tools.md +7 -0
  1286. package/systems/5e/world/items/Jug or Pitcher.md +5 -0
  1287. package/systems/5e/world/items/Keelboat.md +7 -0
  1288. package/systems/5e/world/items/Ladder.md +7 -0
  1289. package/systems/5e/world/items/Lamp.md +7 -0
  1290. package/systems/5e/world/items/Lance.md +12 -0
  1291. package/systems/5e/world/items/Lantern of Revealing.md +6 -0
  1292. package/systems/5e/world/items/Leather Armor.md +10 -0
  1293. package/systems/5e/world/items/Leatherworker's Tools.md +7 -0
  1294. package/systems/5e/world/items/Light Crossbow.md +11 -0
  1295. package/systems/5e/world/items/Light Hammer.md +10 -0
  1296. package/systems/5e/world/items/Lock.md +7 -0
  1297. package/systems/5e/world/items/Longbow.md +10 -0
  1298. package/systems/5e/world/items/Longship.md +5 -0
  1299. package/systems/5e/world/items/Longsword.md +10 -0
  1300. package/systems/5e/world/items/Luck Blade.md +11 -0
  1301. package/systems/5e/world/items/Lute.md +7 -0
  1302. package/systems/5e/world/items/Lyre.md +7 -0
  1303. package/systems/5e/world/items/Mace of Disruption.md +9 -0
  1304. package/systems/5e/world/items/Mace of Smiting.md +8 -0
  1305. package/systems/5e/world/items/Mace of Terror.md +9 -0
  1306. package/systems/5e/world/items/Mace.md +9 -0
  1307. package/systems/5e/world/items/Magnifying Glass.md +6 -0
  1308. package/systems/5e/world/items/Manacles.md +7 -0
  1309. package/systems/5e/world/items/Mantle of Spell Resistance.md +7 -0
  1310. package/systems/5e/world/items/Manual of Bodily Health.md +6 -0
  1311. package/systems/5e/world/items/Manual of Gainful Exercise.md +6 -0
  1312. package/systems/5e/world/items/Manual of Golems.md +17 -0
  1313. package/systems/5e/world/items/Manual of Quickness of Action.md +6 -0
  1314. package/systems/5e/world/items/Map or Scroll Case.md +8 -0
  1315. package/systems/5e/world/items/Marvelous Pigments.md +14 -0
  1316. package/systems/5e/world/items/Mason's Tools.md +7 -0
  1317. package/systems/5e/world/items/Maul.md +10 -0
  1318. package/systems/5e/world/items/Medallion of Thoughts.md +7 -0
  1319. package/systems/5e/world/items/Merchant's Scale.md +8 -0
  1320. package/systems/5e/world/items/Mess Kit.md +7 -0
  1321. package/systems/5e/world/items/Military Saddle.md +7 -0
  1322. package/systems/5e/world/items/Miner's Pick.md +6 -0
  1323. package/systems/5e/world/items/Mirror of Life Trapping.md +18 -0
  1324. package/systems/5e/world/items/Mithral Armor.md +6 -0
  1325. package/systems/5e/world/items/Morningstar.md +9 -0
  1326. package/systems/5e/world/items/Navigator's Tools.md +7 -0
  1327. package/systems/5e/world/items/Necklace of Adaptation.md +7 -0
  1328. package/systems/5e/world/items/Necklace of Fireballs.md +8 -0
  1329. package/systems/5e/world/items/Necklace of Prayer Beads.md +18 -0
  1330. package/systems/5e/world/items/Net.md +12 -0
  1331. package/systems/5e/world/items/Nine Lives Stealer.md +9 -0
  1332. package/systems/5e/world/items/Oathbow.md +11 -0
  1333. package/systems/5e/world/items/Oil of Etherealness.md +6 -0
  1334. package/systems/5e/world/items/Oil of Sharpness.md +6 -0
  1335. package/systems/5e/world/items/Oil of Slipperiness.md +8 -0
  1336. package/systems/5e/world/items/Oil.md +8 -0
  1337. package/systems/5e/world/items/Orb of Dragonkind.md +31 -0
  1338. package/systems/5e/world/items/Orb.md +7 -0
  1339. package/systems/5e/world/items/Pack Saddle.md +7 -0
  1340. package/systems/5e/world/items/Padded Armor.md +11 -0
  1341. package/systems/5e/world/items/Painter's Supplies.md +7 -0
  1342. package/systems/5e/world/items/Pan Flute.md +7 -0
  1343. package/systems/5e/world/items/Paper.md +5 -0
  1344. package/systems/5e/world/items/Parchment.md +5 -0
  1345. package/systems/5e/world/items/Pearl of Power.md +7 -0
  1346. package/systems/5e/world/items/Perfume.md +5 -0
  1347. package/systems/5e/world/items/Periapt of Health.md +6 -0
  1348. package/systems/5e/world/items/Periapt of Proof against Poison.md +6 -0
  1349. package/systems/5e/world/items/Periapt of Wound Closure.md +7 -0
  1350. package/systems/5e/world/items/Philter of Love.md +6 -0
  1351. package/systems/5e/world/items/Pike.md +10 -0
  1352. package/systems/5e/world/items/Pipes of Haunting.md +6 -0
  1353. package/systems/5e/world/items/Pipes of the Sewers.md +11 -0
  1354. package/systems/5e/world/items/Piton.md +5 -0
  1355. package/systems/5e/world/items/Plate Armor of Etherealness.md +7 -0
  1356. package/systems/5e/world/items/Plate Armor.md +12 -0
  1357. package/systems/5e/world/items/Playing Card Set.md +6 -0
  1358. package/systems/5e/world/items/Poisoner's Kit.md +7 -0
  1359. package/systems/5e/world/items/Pole.md +7 -0
  1360. package/systems/5e/world/items/Portable Hole.md +14 -0
  1361. package/systems/5e/world/items/Portable Ram.md +8 -0
  1362. package/systems/5e/world/items/Potion of Animal Friendship.md +6 -0
  1363. package/systems/5e/world/items/Potion of Clairvoyance.md +6 -0
  1364. package/systems/5e/world/items/Potion of Climbing.md +6 -0
  1365. package/systems/5e/world/items/Potion of Diminution.md +6 -0
  1366. package/systems/5e/world/items/Potion of Flying.md +6 -0
  1367. package/systems/5e/world/items/Potion of Gaseous Form.md +6 -0
  1368. package/systems/5e/world/items/Potion of Giant Strength.md +16 -0
  1369. package/systems/5e/world/items/Potion of Growth.md +6 -0
  1370. package/systems/5e/world/items/Potion of Healing.md +19 -0
  1371. package/systems/5e/world/items/Potion of Heroism.md +6 -0
  1372. package/systems/5e/world/items/Potion of Invisibility.md +6 -0
  1373. package/systems/5e/world/items/Potion of Mind Reading.md +6 -0
  1374. package/systems/5e/world/items/Potion of Poison.md +8 -0
  1375. package/systems/5e/world/items/Potion of Resistance.md +14 -0
  1376. package/systems/5e/world/items/Potion of Speed.md +6 -0
  1377. package/systems/5e/world/items/Potion of Water Breathing.md +6 -0
  1378. package/systems/5e/world/items/Potter's Tools.md +7 -0
  1379. package/systems/5e/world/items/Pouch.md +7 -0
  1380. package/systems/5e/world/items/Priest's Pack.md +6 -0
  1381. package/systems/5e/world/items/Quarterstaff.md +10 -0
  1382. package/systems/5e/world/items/Quiver.md +7 -0
  1383. package/systems/5e/world/items/Rapier.md +10 -0
  1384. package/systems/5e/world/items/Rations.md +8 -0
  1385. package/systems/5e/world/items/Reliquary.md +7 -0
  1386. package/systems/5e/world/items/Restorative Ointment.md +8 -0
  1387. package/systems/5e/world/items/Riding Saddle.md +7 -0
  1388. package/systems/5e/world/items/Ring Mail.md +10 -0
  1389. package/systems/5e/world/items/Ring of Animal Influence.md +10 -0
  1390. package/systems/5e/world/items/Ring of Djinni Summoning.md +11 -0
  1391. package/systems/5e/world/items/Ring of Elemental Command.md +41 -0
  1392. package/systems/5e/world/items/Ring of Evasion.md +7 -0
  1393. package/systems/5e/world/items/Ring of Feather Falling.md +7 -0
  1394. package/systems/5e/world/items/Ring of Free Action.md +7 -0
  1395. package/systems/5e/world/items/Ring of Invisibility.md +7 -0
  1396. package/systems/5e/world/items/Ring of Jumping.md +7 -0
  1397. package/systems/5e/world/items/Ring of Mind Shielding.md +11 -0
  1398. package/systems/5e/world/items/Ring of Protection.md +7 -0
  1399. package/systems/5e/world/items/Ring of Regeneration.md +7 -0
  1400. package/systems/5e/world/items/Ring of Resistance.md +20 -0
  1401. package/systems/5e/world/items/Ring of Shooting Stars.md +26 -0
  1402. package/systems/5e/world/items/Ring of Spell Storing.md +11 -0
  1403. package/systems/5e/world/items/Ring of Spell Turning.md +7 -0
  1404. package/systems/5e/world/items/Ring of Swimming.md +6 -0
  1405. package/systems/5e/world/items/Ring of Telekinesis.md +7 -0
  1406. package/systems/5e/world/items/Ring of Three Wishes.md +6 -0
  1407. package/systems/5e/world/items/Ring of Warmth.md +7 -0
  1408. package/systems/5e/world/items/Ring of Water Walking.md +6 -0
  1409. package/systems/5e/world/items/Ring of X-ray Vision.md +9 -0
  1410. package/systems/5e/world/items/Ring of the Ram.md +9 -0
  1411. package/systems/5e/world/items/Robe of Eyes.md +15 -0
  1412. package/systems/5e/world/items/Robe of Scintillating Colors.md +7 -0
  1413. package/systems/5e/world/items/Robe of Stars.md +11 -0
  1414. package/systems/5e/world/items/Robe of Useful Items.md +33 -0
  1415. package/systems/5e/world/items/Robe of the Archmagi.md +13 -0
  1416. package/systems/5e/world/items/Robes.md +5 -0
  1417. package/systems/5e/world/items/Rod of Absorption.md +13 -0
  1418. package/systems/5e/world/items/Rod of Alertness.md +15 -0
  1419. package/systems/5e/world/items/Rod of Lordly Might.md +27 -0
  1420. package/systems/5e/world/items/Rod of Rulership.md +7 -0
  1421. package/systems/5e/world/items/Rod of Security.md +10 -0
  1422. package/systems/5e/world/items/Rod.md +7 -0
  1423. package/systems/5e/world/items/Rope of Climbing.md +10 -0
  1424. package/systems/5e/world/items/Rope of Entanglement.md +10 -0
  1425. package/systems/5e/world/items/Rowboat.md +7 -0
  1426. package/systems/5e/world/items/Sack.md +5 -0
  1427. package/systems/5e/world/items/Saddlebags.md +5 -0
  1428. package/systems/5e/world/items/Sailing Ship.md +5 -0
  1429. package/systems/5e/world/items/Scale Mail.md +10 -0
  1430. package/systems/5e/world/items/Scarab of Protection.md +10 -0
  1431. package/systems/5e/world/items/Scholar's Pack.md +6 -0
  1432. package/systems/5e/world/items/Scimitar of Speed.md +7 -0
  1433. package/systems/5e/world/items/Scimitar.md +10 -0
  1434. package/systems/5e/world/items/Sealing Wax.md +4 -0
  1435. package/systems/5e/world/items/Shawm.md +7 -0
  1436. package/systems/5e/world/items/Shield of Missile Attraction.md +9 -0
  1437. package/systems/5e/world/items/Shield, +1, +2, or +3.md +6 -0
  1438. package/systems/5e/world/items/Shield.md +9 -0
  1439. package/systems/5e/world/items/Shortbow.md +10 -0
  1440. package/systems/5e/world/items/Shortsword.md +10 -0
  1441. package/systems/5e/world/items/Shovel.md +5 -0
  1442. package/systems/5e/world/items/Sickle.md +10 -0
  1443. package/systems/5e/world/items/Signal Whistle.md +4 -0
  1444. package/systems/5e/world/items/Signet Ring.md +4 -0
  1445. package/systems/5e/world/items/Silk Rope.md +9 -0
  1446. package/systems/5e/world/items/Sled.md +5 -0
  1447. package/systems/5e/world/items/Sledgehammer.md +6 -0
  1448. package/systems/5e/world/items/Sling Bullets.md +6 -0
  1449. package/systems/5e/world/items/Sling.md +9 -0
  1450. package/systems/5e/world/items/Slippers of Spider Climbing.md +7 -0
  1451. package/systems/5e/world/items/Smith's Tools.md +7 -0
  1452. package/systems/5e/world/items/Soap.md +4 -0
  1453. package/systems/5e/world/items/Sovereign Glue.md +8 -0
  1454. package/systems/5e/world/items/Spear.md +10 -0
  1455. package/systems/5e/world/items/Spell Scroll.md +27 -0
  1456. package/systems/5e/world/items/Spellbook.md +7 -0
  1457. package/systems/5e/world/items/Spellguard Shield.md +7 -0
  1458. package/systems/5e/world/items/Sphere of Annihilation.md +20 -0
  1459. package/systems/5e/world/items/Splint Armor.md +12 -0
  1460. package/systems/5e/world/items/Sprig of Mistletoe.md +6 -0
  1461. package/systems/5e/world/items/Spyglass.md +7 -0
  1462. package/systems/5e/world/items/Staff of Charming.md +11 -0
  1463. package/systems/5e/world/items/Staff of Fire.md +11 -0
  1464. package/systems/5e/world/items/Staff of Frost.md +11 -0
  1465. package/systems/5e/world/items/Staff of Healing.md +9 -0
  1466. package/systems/5e/world/items/Staff of Power.md +23 -0
  1467. package/systems/5e/world/items/Staff of Striking.md +9 -0
  1468. package/systems/5e/world/items/Staff of Swarming Insects.md +11 -0
  1469. package/systems/5e/world/items/Staff of Thunder and Lightning.md +17 -0
  1470. package/systems/5e/world/items/Staff of Withering.md +9 -0
  1471. package/systems/5e/world/items/Staff of the Magi.md +25 -0
  1472. package/systems/5e/world/items/Staff of the Python.md +11 -0
  1473. package/systems/5e/world/items/Staff of the Woodlands.md +15 -0
  1474. package/systems/5e/world/items/Staff.md +7 -0
  1475. package/systems/5e/world/items/Steel Mirror.md +6 -0
  1476. package/systems/5e/world/items/Stone of Controlling Earth Elementals.md +6 -0
  1477. package/systems/5e/world/items/Stone of Good Luck.md +8 -0
  1478. package/systems/5e/world/items/Studded Leather Armor.md +10 -0
  1479. package/systems/5e/world/items/Sun Blade.md +11 -0
  1480. package/systems/5e/world/items/Sword of Life Stealing.md +7 -0
  1481. package/systems/5e/world/items/Sword of Sharpness.md +11 -0
  1482. package/systems/5e/world/items/Sword of Wounding.md +9 -0
  1483. package/systems/5e/world/items/Talisman of Pure Good.md +11 -0
  1484. package/systems/5e/world/items/Talisman of Ultimate Evil.md +11 -0
  1485. package/systems/5e/world/items/Talisman of the Sphere.md +7 -0
  1486. package/systems/5e/world/items/Thieves' Tools.md +7 -0
  1487. package/systems/5e/world/items/Tinderbox.md +7 -0
  1488. package/systems/5e/world/items/Tinker's Tools.md +7 -0
  1489. package/systems/5e/world/items/Tome of Clear Thought.md +6 -0
  1490. package/systems/5e/world/items/Tome of Leadership and Influence.md +6 -0
  1491. package/systems/5e/world/items/Tome of Understanding.md +6 -0
  1492. package/systems/5e/world/items/Torch.md +7 -0
  1493. package/systems/5e/world/items/Totem.md +6 -0
  1494. package/systems/5e/world/items/Traveler's Clothes.md +6 -0
  1495. package/systems/5e/world/items/Trident of Fish Command.md +7 -0
  1496. package/systems/5e/world/items/Trident.md +10 -0
  1497. package/systems/5e/world/items/Two-Person Tent.md +8 -0
  1498. package/systems/5e/world/items/Unarmed Strike.md +7 -0
  1499. package/systems/5e/world/items/Universal Solvent.md +6 -0
  1500. package/systems/5e/world/items/Vial.md +4 -0
  1501. package/systems/5e/world/items/Vicious Weapon.md +6 -0
  1502. package/systems/5e/world/items/Viol.md +7 -0
  1503. package/systems/5e/world/items/Vorpal Sword.md +9 -0
  1504. package/systems/5e/world/items/Wagon.md +5 -0
  1505. package/systems/5e/world/items/Wand of Binding.md +11 -0
  1506. package/systems/5e/world/items/Wand of Enemy Detection.md +9 -0
  1507. package/systems/5e/world/items/Wand of Fear.md +11 -0
  1508. package/systems/5e/world/items/Wand of Fireballs.md +9 -0
  1509. package/systems/5e/world/items/Wand of Lightning Bolts.md +9 -0
  1510. package/systems/5e/world/items/Wand of Magic Detection.md +6 -0
  1511. package/systems/5e/world/items/Wand of Magic Missiles.md +8 -0
  1512. package/systems/5e/world/items/Wand of Paralysis.md +9 -0
  1513. package/systems/5e/world/items/Wand of Polymorph.md +9 -0
  1514. package/systems/5e/world/items/Wand of Secrets.md +6 -0
  1515. package/systems/5e/world/items/Wand of Web.md +9 -0
  1516. package/systems/5e/world/items/Wand of Wonder.md +38 -0
  1517. package/systems/5e/world/items/Wand of the War Mage, +1, +2, or +3.md +7 -0
  1518. package/systems/5e/world/items/Wand.md +7 -0
  1519. package/systems/5e/world/items/War Pick.md +9 -0
  1520. package/systems/5e/world/items/Warhammer.md +10 -0
  1521. package/systems/5e/world/items/Warship.md +5 -0
  1522. package/systems/5e/world/items/Waterskin.md +5 -0
  1523. package/systems/5e/world/items/Weapon, +1, +2, or +3.md +6 -0
  1524. package/systems/5e/world/items/Weaver's Tools.md +7 -0
  1525. package/systems/5e/world/items/Well of Many Worlds.md +8 -0
  1526. package/systems/5e/world/items/Whetstone.md +5 -0
  1527. package/systems/5e/world/items/Whip.md +10 -0
  1528. package/systems/5e/world/items/Wind Fan.md +6 -0
  1529. package/systems/5e/world/items/Winged Boots.md +9 -0
  1530. package/systems/5e/world/items/Wings of Flying.md +7 -0
  1531. package/systems/5e/world/items/Woodcarver's Tools.md +7 -0
  1532. package/systems/5e/world/items/Wooden Staff.md +7 -0
  1533. package/systems/5e/world/items/Yew Wand.md +7 -0
  1534. package/systems/5e/world/topics/Acid Arrow.md +14 -0
  1535. package/systems/5e/world/topics/Acid Splash.md +14 -0
  1536. package/systems/5e/world/topics/Acolyte (background).md +103 -0
  1537. package/systems/5e/world/topics/Aid.md +14 -0
  1538. package/systems/5e/world/topics/Alarm.md +17 -0
  1539. package/systems/5e/world/topics/Alter Self.md +19 -0
  1540. package/systems/5e/world/topics/Animal Friendship.md +14 -0
  1541. package/systems/5e/world/topics/Animal Messenger.md +17 -0
  1542. package/systems/5e/world/topics/Animal Shapes.md +17 -0
  1543. package/systems/5e/world/topics/Animate Dead.md +18 -0
  1544. package/systems/5e/world/topics/Animate Objects.md +31 -0
  1545. package/systems/5e/world/topics/Antilife Shell.md +17 -0
  1546. package/systems/5e/world/topics/Antimagic Field.md +31 -0
  1547. package/systems/5e/world/topics/Antipathy-Sympathy.md +23 -0
  1548. package/systems/5e/world/topics/Arcane Eye.md +17 -0
  1549. package/systems/5e/world/topics/Arcane Hand.md +27 -0
  1550. package/systems/5e/world/topics/Arcane Lock.md +14 -0
  1551. package/systems/5e/world/topics/Arcane Sword.md +15 -0
  1552. package/systems/5e/world/topics/Arcanist's Magic Aura.md +18 -0
  1553. package/systems/5e/world/topics/Astral Projection.md +22 -0
  1554. package/systems/5e/world/topics/Augury.md +22 -0
  1555. package/systems/5e/world/topics/Awaken.md +14 -0
  1556. package/systems/5e/world/topics/Bane.md +15 -0
  1557. package/systems/5e/world/topics/Banishment.md +19 -0
  1558. package/systems/5e/world/topics/Barbarian.md +123 -0
  1559. package/systems/5e/world/topics/Bard Spells.md +147 -0
  1560. package/systems/5e/world/topics/Bard.md +139 -0
  1561. package/systems/5e/world/topics/Barkskin.md +13 -0
  1562. package/systems/5e/world/topics/Beacon of Hope.md +13 -0
  1563. package/systems/5e/world/topics/Bestow Curse.md +22 -0
  1564. package/systems/5e/world/topics/Black Tentacles.md +17 -0
  1565. package/systems/5e/world/topics/Blade Barrier.md +15 -0
  1566. package/systems/5e/world/topics/Bless.md +15 -0
  1567. package/systems/5e/world/topics/Blight.md +18 -0
  1568. package/systems/5e/world/topics/Blindness-Deafness.md +15 -0
  1569. package/systems/5e/world/topics/Blink.md +14 -0
  1570. package/systems/5e/world/topics/Blur.md +13 -0
  1571. package/systems/5e/world/topics/Branding Smite.md +15 -0
  1572. package/systems/5e/world/topics/Burning Hands.md +16 -0
  1573. package/systems/5e/world/topics/Call Lightning.md +19 -0
  1574. package/systems/5e/world/topics/Calm Emotions.md +17 -0
  1575. package/systems/5e/world/topics/Chain Lightning.md +16 -0
  1576. package/systems/5e/world/topics/Champion.md +24 -0
  1577. package/systems/5e/world/topics/Charm Person.md +14 -0
  1578. package/systems/5e/world/topics/Chill Touch.md +16 -0
  1579. package/systems/5e/world/topics/Circle of Death.md +14 -0
  1580. package/systems/5e/world/topics/Circle of the Land.md +96 -0
  1581. package/systems/5e/world/topics/Clairvoyance.md +17 -0
  1582. package/systems/5e/world/topics/Cleric Spells.md +140 -0
  1583. package/systems/5e/world/topics/Cleric.md +141 -0
  1584. package/systems/5e/world/topics/Clone.md +14 -0
  1585. package/systems/5e/world/topics/Cloudkill.md +19 -0
  1586. package/systems/5e/world/topics/College of Lore.md +23 -0
  1587. package/systems/5e/world/topics/Color Spray.md +16 -0
  1588. package/systems/5e/world/topics/Command.md +26 -0
  1589. package/systems/5e/world/topics/Commune with Nature.md +23 -0
  1590. package/systems/5e/world/topics/Commune.md +17 -0
  1591. package/systems/5e/world/topics/Comprehend Languages.md +15 -0
  1592. package/systems/5e/world/topics/Compulsion.md +15 -0
  1593. package/systems/5e/world/topics/Cone of Cold.md +16 -0
  1594. package/systems/5e/world/topics/Confusion.md +26 -0
  1595. package/systems/5e/world/topics/Conjure Animals.md +26 -0
  1596. package/systems/5e/world/topics/Conjure Celestial.md +19 -0
  1597. package/systems/5e/world/topics/Conjure Elemental.md +21 -0
  1598. package/systems/5e/world/topics/Conjure Fey.md +21 -0
  1599. package/systems/5e/world/topics/Conjure Minor Elementals.md +26 -0
  1600. package/systems/5e/world/topics/Conjure Woodland Beings.md +26 -0
  1601. package/systems/5e/world/topics/Contact Other Plane.md +15 -0
  1602. package/systems/5e/world/topics/Contagion.md +28 -0
  1603. package/systems/5e/world/topics/Contingency.md +16 -0
  1604. package/systems/5e/world/topics/Continual Flame.md +12 -0
  1605. package/systems/5e/world/topics/Control Water.md +29 -0
  1606. package/systems/5e/world/topics/Control Weather.md +48 -0
  1607. package/systems/5e/world/topics/Counterspell.md +14 -0
  1608. package/systems/5e/world/topics/Create Food and Water.md +12 -0
  1609. package/systems/5e/world/topics/Create Undead.md +18 -0
  1610. package/systems/5e/world/topics/Create or Destroy Water.md +18 -0
  1611. package/systems/5e/world/topics/Creation.md +26 -0
  1612. package/systems/5e/world/topics/Cure Wounds.md +14 -0
  1613. package/systems/5e/world/topics/Dancing Lights.md +15 -0
  1614. package/systems/5e/world/topics/Darkness.md +17 -0
  1615. package/systems/5e/world/topics/Darkvision.md +12 -0
  1616. package/systems/5e/world/topics/Daylight.md +16 -0
  1617. package/systems/5e/world/topics/Death Ward.md +16 -0
  1618. package/systems/5e/world/topics/Delayed Blast Fireball.md +21 -0
  1619. package/systems/5e/world/topics/Demiplane.md +14 -0
  1620. package/systems/5e/world/topics/Detect Evil and Good.md +15 -0
  1621. package/systems/5e/world/topics/Detect Magic.md +16 -0
  1622. package/systems/5e/world/topics/Detect Poison and Disease.md +16 -0
  1623. package/systems/5e/world/topics/Detect Thoughts.md +21 -0
  1624. package/systems/5e/world/topics/Dimension Door.md +16 -0
  1625. package/systems/5e/world/topics/Disguise Self.md +16 -0
  1626. package/systems/5e/world/topics/Disintegrate.md +20 -0
  1627. package/systems/5e/world/topics/Dispel Evil and Good.md +19 -0
  1628. package/systems/5e/world/topics/Dispel Magic.md +14 -0
  1629. package/systems/5e/world/topics/Divination.md +17 -0
  1630. package/systems/5e/world/topics/Divine Favor.md +13 -0
  1631. package/systems/5e/world/topics/Divine Word.md +19 -0
  1632. package/systems/5e/world/topics/Dominate Beast.md +21 -0
  1633. package/systems/5e/world/topics/Dominate Monster.md +21 -0
  1634. package/systems/5e/world/topics/Dominate Person.md +21 -0
  1635. package/systems/5e/world/topics/Draconic Bloodline.md +43 -0
  1636. package/systems/5e/world/topics/Dream.md +18 -0
  1637. package/systems/5e/world/topics/Druid Spells.md +140 -0
  1638. package/systems/5e/world/topics/Druid.md +146 -0
  1639. package/systems/5e/world/topics/Druidcraft.md +17 -0
  1640. package/systems/5e/world/topics/Earthquake.md +25 -0
  1641. package/systems/5e/world/topics/Eldritch Blast.md +14 -0
  1642. package/systems/5e/world/topics/Enhance Ability.md +27 -0
  1643. package/systems/5e/world/topics/Enlarge-Reduce.md +20 -0
  1644. package/systems/5e/world/topics/Entangle.md +17 -0
  1645. package/systems/5e/world/topics/Enthrall.md +12 -0
  1646. package/systems/5e/world/topics/Etherealness.md +22 -0
  1647. package/systems/5e/world/topics/Expeditious Retreat.md +13 -0
  1648. package/systems/5e/world/topics/Eyebite.md +19 -0
  1649. package/systems/5e/world/topics/Fabricate.md +16 -0
  1650. package/systems/5e/world/topics/Faerie Fire.md +15 -0
  1651. package/systems/5e/world/topics/Faithful Hound.md +16 -0
  1652. package/systems/5e/world/topics/False Life.md +14 -0
  1653. package/systems/5e/world/topics/Fear.md +15 -0
  1654. package/systems/5e/world/topics/Feather Fall.md +12 -0
  1655. package/systems/5e/world/topics/Feeblemind.md +18 -0
  1656. package/systems/5e/world/topics/Fighter.md +109 -0
  1657. package/systems/5e/world/topics/Find Familiar.md +25 -0
  1658. package/systems/5e/world/topics/Find Steed.md +20 -0
  1659. package/systems/5e/world/topics/Find Traps.md +14 -0
  1660. package/systems/5e/world/topics/Find the Path.md +15 -0
  1661. package/systems/5e/world/topics/Finger of Death.md +14 -0
  1662. package/systems/5e/world/topics/Fire Bolt.md +14 -0
  1663. package/systems/5e/world/topics/Fire Shield.md +16 -0
  1664. package/systems/5e/world/topics/Fire Storm.md +14 -0
  1665. package/systems/5e/world/topics/Fireball.md +16 -0
  1666. package/systems/5e/world/topics/Flame Blade.md +19 -0
  1667. package/systems/5e/world/topics/Flame Strike.md +14 -0
  1668. package/systems/5e/world/topics/Flaming Sphere.md +19 -0
  1669. package/systems/5e/world/topics/Flesh to Stone.md +19 -0
  1670. package/systems/5e/world/topics/Floating Disk.md +17 -0
  1671. package/systems/5e/world/topics/Fly.md +15 -0
  1672. package/systems/5e/world/topics/Fog Cloud.md +15 -0
  1673. package/systems/5e/world/topics/Forbiddance.md +19 -0
  1674. package/systems/5e/world/topics/Forcecage.md +22 -0
  1675. package/systems/5e/world/topics/Foresight.md +14 -0
  1676. package/systems/5e/world/topics/Freedom of Movement.md +14 -0
  1677. package/systems/5e/world/topics/Freezing Sphere.md +18 -0
  1678. package/systems/5e/world/topics/Gaseous Form.md +17 -0
  1679. package/systems/5e/world/topics/Gate.md +19 -0
  1680. package/systems/5e/world/topics/Geas.md +18 -0
  1681. package/systems/5e/world/topics/Gentle Repose.md +15 -0
  1682. package/systems/5e/world/topics/Giant Insect.md +19 -0
  1683. package/systems/5e/world/topics/Glibness.md +12 -0
  1684. package/systems/5e/world/topics/Globe of Invulnerability.md +17 -0
  1685. package/systems/5e/world/topics/Glyph of Warding.md +26 -0
  1686. package/systems/5e/world/topics/Goodberry.md +14 -0
  1687. package/systems/5e/world/topics/Grappler.md +17 -0
  1688. package/systems/5e/world/topics/Grease.md +14 -0
  1689. package/systems/5e/world/topics/Greater Invisibility.md +13 -0
  1690. package/systems/5e/world/topics/Greater Restoration.md +17 -0
  1691. package/systems/5e/world/topics/Guardian of Faith.md +14 -0
  1692. package/systems/5e/world/topics/Guards and Wards.md +34 -0
  1693. package/systems/5e/world/topics/Guidance.md +13 -0
  1694. package/systems/5e/world/topics/Guiding Bolt.md +14 -0
  1695. package/systems/5e/world/topics/Gust of Wind.md +19 -0
  1696. package/systems/5e/world/topics/Hallow.md +36 -0
  1697. package/systems/5e/world/topics/Hallucinatory Terrain.md +14 -0
  1698. package/systems/5e/world/topics/Harm.md +12 -0
  1699. package/systems/5e/world/topics/Haste.md +15 -0
  1700. package/systems/5e/world/topics/Heal.md +14 -0
  1701. package/systems/5e/world/topics/Healing Word.md +14 -0
  1702. package/systems/5e/world/topics/Heat Metal.md +17 -0
  1703. package/systems/5e/world/topics/Hellish Rebuke.md +14 -0
  1704. package/systems/5e/world/topics/Heroes' Feast.md +14 -0
  1705. package/systems/5e/world/topics/Heroism.md +15 -0
  1706. package/systems/5e/world/topics/Hideous Laughter.md +15 -0
  1707. package/systems/5e/world/topics/Hold Monster.md +15 -0
  1708. package/systems/5e/world/topics/Hold Person.md +15 -0
  1709. package/systems/5e/world/topics/Holy Aura.md +13 -0
  1710. package/systems/5e/world/topics/Hunter's Mark.md +15 -0
  1711. package/systems/5e/world/topics/Hunter.md +41 -0
  1712. package/systems/5e/world/topics/Hypnotic Pattern.md +15 -0
  1713. package/systems/5e/world/topics/Ice Storm.md +16 -0
  1714. package/systems/5e/world/topics/Identify.md +15 -0
  1715. package/systems/5e/world/topics/Illusory Script.md +19 -0
  1716. package/systems/5e/world/topics/Imprisonment.md +38 -0
  1717. package/systems/5e/world/topics/Incendiary Cloud.md +17 -0
  1718. package/systems/5e/world/topics/Inflict Wounds.md +14 -0
  1719. package/systems/5e/world/topics/Insect Plague.md +17 -0
  1720. package/systems/5e/world/topics/Instant Summons.md +19 -0
  1721. package/systems/5e/world/topics/Invisibility.md +15 -0
  1722. package/systems/5e/world/topics/Irresistible Dance.md +15 -0
  1723. package/systems/5e/world/topics/Jump.md +12 -0
  1724. package/systems/5e/world/topics/Knock.md +18 -0
  1725. package/systems/5e/world/topics/Legend Lore.md +14 -0
  1726. package/systems/5e/world/topics/Lesser Restoration.md +12 -0
  1727. package/systems/5e/world/topics/Levitate.md +17 -0
  1728. package/systems/5e/world/topics/Life Domain.md +38 -0
  1729. package/systems/5e/world/topics/Light.md +14 -0
  1730. package/systems/5e/world/topics/Lightning Bolt.md +16 -0
  1731. package/systems/5e/world/topics/Locate Animals or Plants.md +13 -0
  1732. package/systems/5e/world/topics/Locate Creature.md +17 -0
  1733. package/systems/5e/world/topics/Locate Object.md +17 -0
  1734. package/systems/5e/world/topics/Longstrider.md +14 -0
  1735. package/systems/5e/world/topics/Mage Armor.md +12 -0
  1736. package/systems/5e/world/topics/Mage Hand.md +16 -0
  1737. package/systems/5e/world/topics/Magic Circle.md +22 -0
  1738. package/systems/5e/world/topics/Magic Jar.md +24 -0
  1739. package/systems/5e/world/topics/Magic Missile.md +14 -0
  1740. package/systems/5e/world/topics/Magic Mouth.md +17 -0
  1741. package/systems/5e/world/topics/Magic Weapon.md +15 -0
  1742. package/systems/5e/world/topics/Magnificent Mansion.md +16 -0
  1743. package/systems/5e/world/topics/Major Image.md +19 -0
  1744. package/systems/5e/world/topics/Mass Cure Wounds.md +14 -0
  1745. package/systems/5e/world/topics/Mass Heal.md +12 -0
  1746. package/systems/5e/world/topics/Mass Healing Word.md +14 -0
  1747. package/systems/5e/world/topics/Mass Suggestion.md +20 -0
  1748. package/systems/5e/world/topics/Maze.md +17 -0
  1749. package/systems/5e/world/topics/Meld into Stone.md +17 -0
  1750. package/systems/5e/world/topics/Mending.md +14 -0
  1751. package/systems/5e/world/topics/Message.md +14 -0
  1752. package/systems/5e/world/topics/Meteor Swarm.md +14 -0
  1753. package/systems/5e/world/topics/Mind Blank.md +12 -0
  1754. package/systems/5e/world/topics/Minor Illusion.md +18 -0
  1755. package/systems/5e/world/topics/Mirage Arcane.md +18 -0
  1756. package/systems/5e/world/topics/Mirror Image.md +20 -0
  1757. package/systems/5e/world/topics/Mislead.md +17 -0
  1758. package/systems/5e/world/topics/Misty Step.md +12 -0
  1759. package/systems/5e/world/topics/Modify Memory.md +23 -0
  1760. package/systems/5e/world/topics/Monk.md +153 -0
  1761. package/systems/5e/world/topics/Moonbeam.md +21 -0
  1762. package/systems/5e/world/topics/Move Earth.md +21 -0
  1763. package/systems/5e/world/topics/Nondetection.md +12 -0
  1764. package/systems/5e/world/topics/Oath of Devotion.md +62 -0
  1765. package/systems/5e/world/topics/Paladin Spells.md +51 -0
  1766. package/systems/5e/world/topics/Paladin.md +173 -0
  1767. package/systems/5e/world/topics/Pass without Trace.md +13 -0
  1768. package/systems/5e/world/topics/Passwall.md +14 -0
  1769. package/systems/5e/world/topics/Path of the Berserker.md +21 -0
  1770. package/systems/5e/world/topics/Phantasmal Killer.md +15 -0
  1771. package/systems/5e/world/topics/Phantom Steed.md +15 -0
  1772. package/systems/5e/world/topics/Planar Ally.md +22 -0
  1773. package/systems/5e/world/topics/Planar Binding.md +16 -0
  1774. package/systems/5e/world/topics/Plane Shift.md +16 -0
  1775. package/systems/5e/world/topics/Plant Growth.md +18 -0
  1776. package/systems/5e/world/topics/Poison Spray.md +14 -0
  1777. package/systems/5e/world/topics/Polymorph.md +21 -0
  1778. package/systems/5e/world/topics/Power Word Kill.md +12 -0
  1779. package/systems/5e/world/topics/Power Word Stun.md +14 -0
  1780. package/systems/5e/world/topics/Prayer of Healing.md +14 -0
  1781. package/systems/5e/world/topics/Prestidigitation.md +21 -0
  1782. package/systems/5e/world/topics/Prismatic Spray.md +28 -0
  1783. package/systems/5e/world/topics/Prismatic Wall.md +34 -0
  1784. package/systems/5e/world/topics/Private Sanctum.md +25 -0
  1785. package/systems/5e/world/topics/Produce Flame.md +16 -0
  1786. package/systems/5e/world/topics/Programmed Illusion.md +18 -0
  1787. package/systems/5e/world/topics/Project Image.md +19 -0
  1788. package/systems/5e/world/topics/Protection from Energy.md +13 -0
  1789. package/systems/5e/world/topics/Protection from Evil and Good.md +15 -0
  1790. package/systems/5e/world/topics/Protection from Poison.md +14 -0
  1791. package/systems/5e/world/topics/Purify Food and Drink.md +13 -0
  1792. package/systems/5e/world/topics/Raise Dead.md +18 -0
  1793. package/systems/5e/world/topics/Ranger Spells.md +57 -0
  1794. package/systems/5e/world/topics/Ranger.md +162 -0
  1795. package/systems/5e/world/topics/Ray of Enfeeblement.md +15 -0
  1796. package/systems/5e/world/topics/Ray of Frost.md +14 -0
  1797. package/systems/5e/world/topics/Regenerate.md +14 -0
  1798. package/systems/5e/world/topics/Reincarnate.md +33 -0
  1799. package/systems/5e/world/topics/Remove Curse.md +12 -0
  1800. package/systems/5e/world/topics/Resilient Sphere.md +19 -0
  1801. package/systems/5e/world/topics/Resistance.md +13 -0
  1802. package/systems/5e/world/topics/Resurrection.md +20 -0
  1803. package/systems/5e/world/topics/Reverse Gravity.md +17 -0
  1804. package/systems/5e/world/topics/Revivify.md +12 -0
  1805. package/systems/5e/world/topics/Rogue.md +114 -0
  1806. package/systems/5e/world/topics/Rope Trick.md +18 -0
  1807. package/systems/5e/world/topics/Sacred Flame.md +14 -0
  1808. package/systems/5e/world/topics/Sanctuary.md +14 -0
  1809. package/systems/5e/world/topics/School of Evocation.md +24 -0
  1810. package/systems/5e/world/topics/Scorching Ray.md +16 -0
  1811. package/systems/5e/world/topics/Scrying.md +31 -0
  1812. package/systems/5e/world/topics/Secret Chest.md +16 -0
  1813. package/systems/5e/world/topics/See Invisibility.md +12 -0
  1814. package/systems/5e/world/topics/Seeming.md +18 -0
  1815. package/systems/5e/world/topics/Sending.md +14 -0
  1816. package/systems/5e/world/topics/Sequester.md +16 -0
  1817. package/systems/5e/world/topics/Shapechange.md +23 -0
  1818. package/systems/5e/world/topics/Shatter.md +16 -0
  1819. package/systems/5e/world/topics/Shield (spell).md +13 -0
  1820. package/systems/5e/world/topics/Shield of Faith.md +13 -0
  1821. package/systems/5e/world/topics/Shillelagh.md +12 -0
  1822. package/systems/5e/world/topics/Shocking Grasp.md +14 -0
  1823. package/systems/5e/world/topics/Silence.md +14 -0
  1824. package/systems/5e/world/topics/Silent Image.md +17 -0
  1825. package/systems/5e/world/topics/Simulacrum.md +18 -0
  1826. package/systems/5e/world/topics/Sleep.md +18 -0
  1827. package/systems/5e/world/topics/Sleet Storm.md +17 -0
  1828. package/systems/5e/world/topics/Slow.md +19 -0
  1829. package/systems/5e/world/topics/Sorcerer Spells.md +155 -0
  1830. package/systems/5e/world/topics/Sorcerer.md +166 -0
  1831. package/systems/5e/world/topics/Spare the Dying.md +12 -0
  1832. package/systems/5e/world/topics/Speak with Animals.md +13 -0
  1833. package/systems/5e/world/topics/Speak with Dead.md +14 -0
  1834. package/systems/5e/world/topics/Speak with Plants.md +20 -0
  1835. package/systems/5e/world/topics/Spider Climb.md +13 -0
  1836. package/systems/5e/world/topics/Spike Growth.md +15 -0
  1837. package/systems/5e/world/topics/Spirit Guardians.md +17 -0
  1838. package/systems/5e/world/topics/Spiritual Weapon.md +18 -0
  1839. package/systems/5e/world/topics/Stinking Cloud.md +17 -0
  1840. package/systems/5e/world/topics/Stone Shape.md +12 -0
  1841. package/systems/5e/world/topics/Stoneskin.md +13 -0
  1842. package/systems/5e/world/topics/Storm of Vengeance.md +23 -0
  1843. package/systems/5e/world/topics/Suggestion.md +19 -0
  1844. package/systems/5e/world/topics/Sunbeam.md +17 -0
  1845. package/systems/5e/world/topics/Sunburst.md +16 -0
  1846. package/systems/5e/world/topics/Symbol.md +36 -0
  1847. package/systems/5e/world/topics/Telekinesis.md +23 -0
  1848. package/systems/5e/world/topics/Telepathic Bond.md +15 -0
  1849. package/systems/5e/world/topics/Teleport.md +38 -0
  1850. package/systems/5e/world/topics/Teleportation Circle.md +16 -0
  1851. package/systems/5e/world/topics/Thaumaturgy.md +21 -0
  1852. package/systems/5e/world/topics/The Fiend.md +47 -0
  1853. package/systems/5e/world/topics/Thief.md +24 -0
  1854. package/systems/5e/world/topics/Thunderwave.md +16 -0
  1855. package/systems/5e/world/topics/Time Stop.md +14 -0
  1856. package/systems/5e/world/topics/Tiny Hut.md +17 -0
  1857. package/systems/5e/world/topics/Tongues.md +12 -0
  1858. package/systems/5e/world/topics/Transport via Plants.md +12 -0
  1859. package/systems/5e/world/topics/Tree Stride.md +15 -0
  1860. package/systems/5e/world/topics/True Polymorph.md +29 -0
  1861. package/systems/5e/world/topics/True Resurrection.md +16 -0
  1862. package/systems/5e/world/topics/True Seeing.md +12 -0
  1863. package/systems/5e/world/topics/True Strike.md +13 -0
  1864. package/systems/5e/world/topics/Unseen Servant.md +17 -0
  1865. package/systems/5e/world/topics/Vampiric Touch.md +15 -0
  1866. package/systems/5e/world/topics/Vicious Mockery.md +14 -0
  1867. package/systems/5e/world/topics/Wall of Fire.md +19 -0
  1868. package/systems/5e/world/topics/Wall of Force.md +15 -0
  1869. package/systems/5e/world/topics/Wall of Ice.md +19 -0
  1870. package/systems/5e/world/topics/Wall of Stone.md +23 -0
  1871. package/systems/5e/world/topics/Wall of Thorns.md +19 -0
  1872. package/systems/5e/world/topics/Warding Bond.md +14 -0
  1873. package/systems/5e/world/topics/Warlock Spells.md +99 -0
  1874. package/systems/5e/world/topics/Warlock.md +283 -0
  1875. package/systems/5e/world/topics/Water Breathing.md +13 -0
  1876. package/systems/5e/world/topics/Water Walk.md +15 -0
  1877. package/systems/5e/world/topics/Way of the Open Hand.md +25 -0
  1878. package/systems/5e/world/topics/Web.md +21 -0
  1879. package/systems/5e/world/topics/Weird.md +13 -0
  1880. package/systems/5e/world/topics/Wind Walk.md +14 -0
  1881. package/systems/5e/world/topics/Wind Wall.md +17 -0
  1882. package/systems/5e/world/topics/Wish.md +26 -0
  1883. package/systems/5e/world/topics/Wizard Spells.md +239 -0
  1884. package/systems/5e/world/topics/Wizard.md +141 -0
  1885. package/systems/5e/world/topics/Word of Recall.md +14 -0
  1886. package/systems/5e/world/topics/Zone of Truth.md +14 -0
@@ -0,0 +1,362 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "preact/jsx-runtime";
2
+ // The map of the place where the party is (GRD-6, D-323, D-325), in ink and washes on light paper in both themes: walls hatched in bundles with a
3
+ // shade along them, the floor's outline rounded where it meets rock, the ground by the place's look and its kinds, the things of the legend drawn by kind, by
4
+ // square or by piece, doors and where squares lead, the squares' names; who stands where as coins, the one acting raised off the paper, a foe the master marked glowing (D-415); then the key, and who
5
+ // is where in words, the map's twin.
6
+ import { Fragment } from "preact";
7
+ import { useEffect, useRef, useState } from "preact/hooks";
8
+ import { CardHead } from "./card.js";
9
+ import { Glass, GlassDefs } from "./glass.js";
10
+ import { iconPath } from "./icons.js";
11
+ import { strangerLabel } from "./labels.js";
12
+ import { sideIcons, sideOf } from "./party.js";
13
+ import { columnName, exitSide, floorLoops, groundKinds, isSolid, isStandable, isWalled, kindAt, nextTo, piecesOf, squareName, squareOf, symbolAt, tracedLoop } from "./place-map.js";
14
+ import { conditionsPref, tokenSymbolsPref, useChoice, usePref } from "./prefs.js";
15
+ import { statusMarks, statusWords } from "./status.js";
16
+ import { t } from "./text.js";
17
+ // How wide a square is drawn, in pixels.
18
+ const size = 40;
19
+ // The order of who is where under the map.
20
+ const roles = ["pc", "companion", "other"];
21
+ export function PlaceMap({ map, place, acting, picking }) {
22
+ const svg = useRef(null);
23
+ const scale = useScale(svg);
24
+ const sides = map.exits.map((exit) => exitSide(map, squareOf(exit.square) ?? { column: 0, row: 0 }));
25
+ const [left, top] = [30 + (sides.includes("left") ? 30 : 0), 30 + (sides.includes("top") ? 36 : 0)];
26
+ const [right, bottom] = [14 + (sides.includes("right") ? 30 : 0), 14 + (sides.includes("bottom") ? 34 : 0)];
27
+ const X = (column) => left + column * size;
28
+ const Y = (row) => top + row * size;
29
+ const [width, height] = [left + map.columns * size + right, top + map.rows * size + bottom];
30
+ const squares = Array.from({ length: map.rows }, (_, row) => Array.from({ length: map.columns }, (_, column) => ({ column, row }))).flat();
31
+ const open = squares.filter((square) => !isSolid(map, square));
32
+ const loops = floorLoops(map, X, Y);
33
+ const walled = isWalled(map);
34
+ const floor = loops.map((loop) => tracedLoop(loop, false, size * 0.5)).join("");
35
+ const outline = walled ? loops.map((loop) => tracedLoop(loop, true, size * 0.5)).join("") : "";
36
+ const featureAt = (square) => map.legend.find((feature) => feature.symbol === symbolAt(map, square));
37
+ // Hatching only next to the rooms: farther the rock or the masonry is left as paper.
38
+ const nearRoom = (square) => [-1, 0, 1].some((dc) => [-1, 0, 1].some((dr) => !isSolid(map, { column: square.column + dc, row: square.row + dr })));
39
+ const things = map.legend.filter((feature) => !["wall", "rock", "floor", "door", "open-door", "secret-door", "opening", ...groundKinds].includes(feature.kind));
40
+ const standing = map.at.flatMap((one) => {
41
+ const square = squareOf(one.square);
42
+ return square === undefined ? [] : [{ ...one, at: square }];
43
+ });
44
+ const self = standing.find((one) => one.role === "pc");
45
+ // What one fills, in squares a side: a large creature stands on the square at the top left of its own (GRD-4).
46
+ const middle = (one) => [X(one.at.column) + (size * (one.side ?? 1)) / 2, Y(one.at.row) + (size * (one.side ?? 1)) / 2];
47
+ // The squares the character can still reach, and those it stands on, which are never out of its reach (D-328).
48
+ const reach = [
49
+ ...(map.reach ?? []).flatMap((name) => {
50
+ const square = squareOf(name);
51
+ return square === undefined ? [] : [square];
52
+ }),
53
+ ...(map.reach === undefined || self === undefined
54
+ ? []
55
+ : Array.from({ length: (self.side ?? 1) ** 2 }, (_, index) => ({ column: self.at.column + (index % (self.side ?? 1)), row: self.at.row + Math.floor(index / (self.side ?? 1)) }))),
56
+ ];
57
+ const letters = Math.max(11, 11 / scale);
58
+ const drawn = (_jsxs(_Fragment, { children: [_jsx("path", { class: "lm-floor-fill", d: floor, "fill-rule": "evenodd" }), _jsx("g", { class: "lm-ground", "clip-path": "url(#lm-open)", children: open.filter((square) => groundKinds.includes(kindAt(map, square))).map((square) => _jsx(Ground, { kind: kindAt(map, square), x: X(square.column), y: Y(square.row), side: size, seed: square }, squareName(square))) }), _jsx("path", { class: "lm-grid", d: open.map((square) => `M${X(square.column)} ${Y(square.row)}h${size}v${size}h${-size}z`).join(""), "clip-path": "url(#lm-open)" }), open.filter((square) => featureAt(square)?.difficult).map((square) => _jsx(Corner, { x: X(square.column), y: Y(square.row), side: size }, squareName(square))), things.map((feature) => piecesOf(map, feature.symbol, feature.kind).map((piece) => (_jsxs("g", { class: `lm-thing ${feature.kind}`, children: [_jsx("title", { children: [featureName(feature), feature.blocks ? t("blocks") : "", feature.difficult ? t("difficult") : ""].filter((part) => part !== "").join(", ") }), _jsx(Thing, { kind: feature.kind, symbol: feature.symbol, x: X(piece.left), y: Y(piece.top), w: (piece.right - piece.left) * size, h: (piece.bottom - piece.top) * size, cells: piece.squares.map((square) => [X(square.column), Y(square.row)]) })] }, `${feature.symbol} ${piece.left} ${piece.top}`)))), _jsx("path", { class: "lm-shade", d: outline, "clip-path": "url(#lm-open)", filter: "url(#lm-blur)" })] }));
59
+ return (_jsxs("section", { class: "lm", "aria-labelledby": "lm-title", children: [_jsx(CardHead, { icon: iconPath("world"), title: _jsx("h3", { id: "lm-title", children: t("Map") }), note: place }), _jsx("div", { class: picking === undefined ? "lm-frame" : "lm-frame panned", children: _jsxs("svg", { ref: svg, class: `lm-svg lm-look-${map.ground}`, viewBox: `0 0 ${width} ${height}`, ...(picking === undefined ? {} : { width: width * 1.2 }), role: "img", "aria-label": t("Map of {place}", { place }), children: [_jsxs("defs", { children: [_jsx(Patterns, {}), _jsx(GlassDefs, { prefix: "lm" }), _jsxs("radialGradient", { id: "lm-hostile-glow", children: [_jsx("stop", { offset: "0.75", "stop-color": "#c8321f", "stop-opacity": "0.3" }), _jsx("stop", { offset: "1", "stop-color": "#c8321f", "stop-opacity": "0" })] }), _jsx("clipPath", { id: "lm-open", children: _jsx("path", { d: floor, "clip-rule": "evenodd" }) }), !walled && (_jsx("mask", { id: "lm-fade", maskUnits: "userSpaceOnUse", x: 0, y: 0, width: width, height: height, children: _jsx("rect", { x: X(0) + size * 0.35, y: Y(0) + size * 0.35, width: map.columns * size - size * 0.7, height: map.rows * size - size * 0.7, fill: "#fff", filter: "url(#lm-soft)" }) })), standing.map((one, index) => (_jsx("clipPath", { id: `lm-token-${index}`, children: _jsx("circle", { cx: middle(one)[0], cy: middle(one)[1], r: size * (one.side ?? 1) * 0.43 }) }, index)))] }), _jsx("rect", { class: "lm-paper", width: width, height: height }), _jsx("g", { class: "lm-walls", children: squares.filter((square) => ["wall", "rock", "window"].includes(kindAt(map, square)) && nearRoom(square)).map((square) => (_jsxs(Fragment, { children: [_jsx("rect", { class: "lm-wall-under", x: X(square.column), y: Y(square.row), width: size, height: size }), _jsx("rect", { class: `lm-wall ${kindAt(map, square)}`, x: X(square.column), y: Y(square.row), width: size, height: size })] }, squareName(square)))) }), walled ? drawn : _jsx("g", { mask: "url(#lm-fade)", children: drawn }), reach.length > 0 && (_jsx("g", { class: "lm-out", "aria-hidden": "true", "clip-path": "url(#lm-open)", children: open.filter((square) => !reach.some((near) => near.column === square.column && near.row === square.row)).map((square) => (_jsx("rect", { x: X(square.column), y: Y(square.row), width: size, height: size }, squareName(square)))) })), _jsx("path", { class: "lm-outline", d: outline, filter: "url(#lm-ink)" }), squares.filter((square) => ["door", "open-door", "secret-door"].includes(kindAt(map, square))).map((square) => (_jsx(Door, { kind: kindAt(map, square), name: featureAt(square)?.name ?? "door", square: square, map: map, x: X(square.column), y: Y(square.row) }, squareName(square)))), map.exits.map((exit, index) => {
60
+ const square = squareOf(exit.square);
61
+ return square === undefined ? null : _jsx(Exit, { side: sides[index], to: exit.to, x: X(square.column) + size / 2, y: Y(square.row) + size / 2, letters: Math.max(13, 12 / scale) }, exit.square);
62
+ }), _jsxs("g", { class: "lm-coordinates", "font-size": letters, children: [Array.from({ length: map.columns }, (_, column) => _jsx("text", { x: X(column) + size / 2, y: top - 10, "text-anchor": "middle", children: columnName(column) }, `c${column}`)), Array.from({ length: map.rows }, (_, row) => _jsx("text", { x: left - 10, y: Y(row) + size / 2, "text-anchor": "end", "dominant-baseline": "middle", children: row + 1 }, `r${row}`))] }), _jsx("g", { class: "lm-tokens", children: standing.map((one, index) => _jsx(Token, { one: one, index: index, acting: one.name === acting, hostile: one.hostile === true, x: middle(one)[0], y: middle(one)[1], scale: scale }, index)) }), picking !== undefined && (_jsx("g", { class: "lm-picks", children: squares.filter((square) => isStandable(map, square)).map((square) => (_jsx("rect", { class: picking.selected === squareName(square) ? "lm-pick selected" : "lm-pick", x: X(square.column) + 1, y: Y(square.row) + 1, width: size - 2, height: size - 2, rx: 4, onClick: () => picking.onSelect(squareName(square)), children: _jsx("title", { children: squareName(square) }) }, squareName(square)))) }))] }) }), _jsxs("ul", { class: "lm-key", "aria-label": t("Legend"), children: [reach.length > 0 && (_jsxs("li", { children: [_jsxs("svg", { class: `lm-swatch lm-look-${map.ground}`, viewBox: "0 0 40 40", "aria-hidden": "true", children: [_jsx("rect", { class: "lm-floor-fill", width: 40, height: 40 }), _jsx("g", { class: "lm-out", children: _jsx("rect", { width: 40, height: 40 }) })] }), _jsx("span", { class: "lm-key-name", children: t("out of your move this turn") })] })), map.legend.filter((feature) => !["floor", "ground"].includes(feature.kind)).map((feature) => (_jsxs("li", { children: [_jsx(Swatch, { feature: feature, ground: map.ground }), _jsx("span", { class: "lm-key-name", children: featureName(feature) }), feature.blocks && !["wall", "rock"].includes(feature.kind) && _jsx("span", { class: "lm-key-note", children: t("blocks") }), feature.difficult && _jsx("span", { class: "lm-key-note", children: t("difficult") })] }, feature.symbol))), map.exits.map((exit) => (_jsxs("li", { class: "lm-key-exit", children: [_jsx("span", { class: "lm-key-square", children: exit.square }), _jsx("span", { children: `→ ${exit.to ?? t("somewhere")}` })] }, exit.square)))] }), standing.length > 0 && (_jsx("ul", { class: "lm-where", "aria-label": t("Who is where"), children: standing.toSorted((first, second) => roles.indexOf(first.role) - roles.indexOf(second.role)).map((one, index) => (_jsxs("li", { class: `lm-where-${one.role}${one.hostile === true ? " hostile" : ""}`, children: [_jsx("span", { class: "lm-where-name", children: one.stranger ? strangerLabel(one.name) : one.name }), _jsx("span", { class: "lm-key-square", children: one.square }), one.distance !== undefined
63
+ ? _jsx("span", { class: "lm-where-far", children: one.distance })
64
+ : self !== undefined && one !== self && (nextTo(one.at, self.at) || one.square === self.square) && _jsx("span", { class: "lm-where-far", children: t("next to you") })] }, index))) }))] }));
65
+ }
66
+ /** How much the map is scaled on the screen, from its drawn width to its shown one: the letters around it keep a readable size on a phone. */
67
+ function useScale(svg) {
68
+ const [scale, setScale] = useState(1);
69
+ useEffect(() => {
70
+ const element = svg.current;
71
+ if (element === null || typeof ResizeObserver === "undefined") {
72
+ return;
73
+ }
74
+ const measure = () => setScale(element.getBoundingClientRect().width / (element.viewBox.baseVal?.width || 1));
75
+ const observer = new ResizeObserver(measure);
76
+ observer.observe(element);
77
+ measure();
78
+ return () => observer.disconnect();
79
+ }, []);
80
+ return scale;
81
+ }
82
+ /** The patterns and filters of the map: Dyson's hatching in bundles, the grounds' textures, the ink's tremble, the washes, the soft edge. */
83
+ function Patterns() {
84
+ let seed = 11;
85
+ const random = () => {
86
+ seed = (seed * 16807) % 2147483647;
87
+ return seed / 2147483647;
88
+ };
89
+ const bundles = Array.from({ length: 36 }, (_, index) => ({ x: (index % 6) * 16 + 8 + (random() - 0.5) * 5, y: Math.floor(index / 6) * 16 + 8 + (random() - 0.5) * 5, turn: Math.round(random() * 180), lengths: [0, 1, 2, 3].map(() => 6 + random() * 2.5) }));
90
+ return (_jsxs(_Fragment, { children: [_jsx("pattern", { id: "lm-hatch", width: 96, height: 96, patternUnits: "userSpaceOnUse", children: bundles.map((bundle, index) => (_jsx("g", { transform: `translate(${bundle.x.toFixed(1)} ${bundle.y.toFixed(1)}) rotate(${bundle.turn})`, children: [-3.6, -1.2, 1.2, 3.6].map((offset, line) => _jsx("line", { class: "lm-hatch-line", x1: -bundle.lengths[line], y1: offset, x2: bundle.lengths[line], y2: offset }, line)) }, index))) }), _jsxs("pattern", { id: "lm-cobbles", width: 20, height: 20, patternUnits: "userSpaceOnUse", children: [_jsx("rect", { class: "lm-paving", width: 20, height: 20 }), [[1, 1, 8], [10, 1, 9], [1, 11, 5], [7, 11, 7], [15, 11, 4]].map(([x, y, w], index) => _jsx("rect", { class: "lm-cobble", x: x, y: y, width: w, height: 8, rx: 2.5 }, index))] }), _jsxs("pattern", { id: "lm-grass", width: 46, height: 46, patternUnits: "userSpaceOnUse", children: [_jsx("rect", { class: "lm-meadow", width: 46, height: 46 }), [[8, 12], [30, 6], [20, 30], [40, 36], [4, 40]].map(([x, y], index) => _jsx("path", { class: "lm-tuft", d: `M${x - 3} ${y}l1.5 -4M${x} ${y}v-5M${x + 3} ${y}l-1.5 -4` }, index))] }), _jsxs("pattern", { id: "lm-speckle", width: 30, height: 30, patternUnits: "userSpaceOnUse", children: [_jsx("rect", { class: "lm-rockfloor", width: 30, height: 30 }), [[5, 7, 1.1], [19, 4, 0.8], [12, 18, 1.3], [26, 22, 0.9], [4, 26, 0.7], [22, 13, 0.6]].map(([x, y, r], index) => _jsx("circle", { class: "lm-dot", cx: x, cy: y, r: r }, index))] }), _jsxs("filter", { id: "lm-ink", x: "-5%", y: "-5%", width: "110%", height: "110%", children: [_jsx("feTurbulence", { type: "fractalNoise", baseFrequency: "0.05", numOctaves: 2, seed: 7 }), _jsx("feDisplacementMap", { in: "SourceGraphic", scale: 2.6 })] }), _jsxs("filter", { id: "lm-wash", x: "-20%", y: "-20%", width: "140%", height: "140%", children: [_jsx("feTurbulence", { type: "fractalNoise", baseFrequency: "0.09", numOctaves: 2, seed: 3, result: "noise" }), _jsx("feDisplacementMap", { in: "SourceGraphic", in2: "noise", scale: 9, result: "moved" }), _jsx("feGaussianBlur", { in: "moved", stdDeviation: 1.6 })] }), _jsx("filter", { id: "lm-blur", x: "-10%", y: "-10%", width: "120%", height: "120%", children: _jsx("feGaussianBlur", { stdDeviation: 4 }) }), _jsx("filter", { id: "lm-soft", x: "-20%", y: "-20%", width: "140%", height: "140%", children: _jsx("feGaussianBlur", { stdDeviation: size * 0.45 }) })] }));
91
+ }
92
+ /** The mark of difficult ground: a fold in the square's corner, so that colour is never the only sign (D-325). */
93
+ function Corner({ x, y, side }) {
94
+ return _jsx("path", { class: "lm-corner", d: `M${x + 1} ${y + 1}h${side * 0.3}l${-side * 0.3} ${side * 0.3}z` });
95
+ }
96
+ /** Ground drawn on its square, under the things: water, rubble, mud, brush, open ground, a road. */
97
+ function Ground({ kind, x, y, side, seed }) {
98
+ const turn = (seed.column * 7 + seed.row * 13) % 5;
99
+ const at = (share) => share * side / 40;
100
+ let marks = null;
101
+ if (kind.endsWith("water")) {
102
+ marks = _jsx("path", { class: "lm-wave", d: `M${x + at(8)} ${y + at(14 + turn)}q4 -4 8 0t8 0M${x + at(18)} ${y + at(28 - turn)}q4 -4 8 0t8 0` });
103
+ }
104
+ else if (kind === "rubble") {
105
+ marks = [[10, 12, 4], [24, 9, 3], [30, 24, 5], [14, 28, 3.5], [22, 19, 2.5]].map(([px, py, r], index) => _jsx("path", { class: "lm-pebble", d: pebble(x + at((px + turn * 3) % 34 + 3), y + at(py), at(r)) }, index));
106
+ }
107
+ else if (kind === "brush" || kind === "ground") {
108
+ marks = (kind === "brush" ? [[10, 14], [26, 10], [18, 28], [31, 27]] : [[12, 16], [28, 30]]).map(([px, py], index) => (_jsx("path", { class: "lm-tuft", d: `M${x + at(px) - 4} ${y + at(py)}l2 -5M${x + at(px)} ${y + at(py)}v-6M${x + at(px) + 4} ${y + at(py)}l-2 -5` }, index)));
109
+ }
110
+ else if (kind === "road") {
111
+ marks = _jsx("path", { class: "lm-rut", d: `M${x} ${y + side * 0.3}h${side}M${x} ${y + side * 0.7}h${side}M${x + side * 0.3} ${y}v${side}M${x + side * 0.7} ${y}v${side}` });
112
+ }
113
+ else if (kind === "mud") {
114
+ marks = _jsx("path", { class: "lm-wave", d: `M${x + at(8)} ${y + at(16)}q3 3 6 0t6 0M${x + at(18)} ${y + at(28)}q3 3 6 0t6 0` });
115
+ }
116
+ return (_jsxs("g", { class: `lm-ground-${kind}`, children: [_jsx("rect", { class: "lm-ground-fill", x: x, y: y, width: side, height: side, filter: "url(#lm-wash)" }), marks] }));
117
+ }
118
+ /** A thing of the legend, by its kind (D-325), in its box; the kinds drawn one a square draw each of their squares. Any other is a box with its symbol. */
119
+ function Thing({ kind, symbol, x, y, w, h, cells }) {
120
+ const inset = (share) => ({ x: x + size * share, y: y + size * share, width: w - size * share * 2, height: h - size * share * 2 });
121
+ const [cx, cy, small] = [x + w / 2, y + h / 2, Math.min(w, h)];
122
+ const along = w >= h;
123
+ switch (kind) {
124
+ case "table":
125
+ return _jsx("rect", { ...inset(0.14), rx: 5, class: "lm-wood" });
126
+ case "counter":
127
+ return (_jsxs(_Fragment, { children: [_jsx("rect", { ...inset(0.12), rx: 2, class: "lm-wood dark" }), _jsx("line", { x1: x + size * 0.2, y1: y + h - size * 0.32, x2: x + w - size * 0.2, y2: y + h - size * 0.32, class: "lm-detail" })] }));
128
+ case "seat":
129
+ return _jsx("rect", { ...inset(0.3), rx: 3, class: "lm-wood" });
130
+ case "bed": {
131
+ const box = inset(0.1);
132
+ return (_jsxs(_Fragment, { children: [_jsx("rect", { ...box, rx: 3, class: "lm-cloth" }), _jsx("rect", { x: box.x + 4, y: box.y + 4, width: box.width - 8, height: Math.min(10, box.height / 4), rx: 3, class: "lm-paper-fill" })] }));
133
+ }
134
+ case "shelf": {
135
+ const box = inset(0.1);
136
+ return (_jsxs(_Fragment, { children: [_jsx("rect", { ...box, class: "lm-wood dark" }), [0.25, 0.5, 0.75].map((share) => (along
137
+ ? _jsx("line", { x1: box.x + box.width * share, y1: box.y, x2: box.x + box.width * share, y2: box.y + box.height, class: "lm-detail" }, share)
138
+ : _jsx("line", { x1: box.x, y1: box.y + box.height * share, x2: box.x + box.width, y2: box.y + box.height * share, class: "lm-detail" }, share)))] }));
139
+ }
140
+ case "hearth":
141
+ return (_jsxs(_Fragment, { children: [_jsx("rect", { ...inset(0.06), rx: 3, class: "lm-stone" }), _jsx("path", { class: "lm-flame", d: flame(cx, cy + small * 0.24, small * 0.42) })] }));
142
+ case "fire":
143
+ return (_jsxs(_Fragment, { children: [_jsx("circle", { cx: cx, cy: cy, r: small * 0.34, class: "lm-stone ring" }), _jsx("path", { class: "lm-flame", d: flame(cx, cy + small * 0.17, small * 0.36) })] }));
144
+ case "barrel":
145
+ return (_jsx(_Fragment, { children: cells.map(([cellX, cellY]) => (_jsxs(Fragment, { children: [_jsx("circle", { cx: cellX + size / 2, cy: cellY + size / 2, r: size * 0.33, class: "lm-wood" }), _jsx("circle", { cx: cellX + size / 2, cy: cellY + size / 2, r: size * 0.19, class: "lm-detail" })] }, `${cellX} ${cellY}`))) }));
146
+ case "crate":
147
+ return (_jsx(_Fragment, { children: cells.map(([cellX, cellY]) => (_jsxs(Fragment, { children: [_jsx("rect", { x: cellX + 6, y: cellY + 6, width: size - 12, height: size - 12, class: "lm-wood" }), _jsx("path", { d: `M${cellX + 6} ${cellY + 6}L${cellX + size - 6} ${cellY + size - 6}M${cellX + size - 6} ${cellY + 6}L${cellX + 6} ${cellY + size - 6}`, class: "lm-detail" })] }, `${cellX} ${cellY}`))) }));
148
+ case "stairs": {
149
+ const box = inset(0.05);
150
+ const steps = Math.max(4, Math.round((along ? box.width : box.height) / 8));
151
+ return (_jsxs(_Fragment, { children: [_jsx("rect", { ...box, class: "lm-paper-fill" }), Array.from({ length: steps - 1 }, (_, step) => {
152
+ const share = (step + 1) / steps;
153
+ return along
154
+ ? _jsx("line", { x1: box.x + box.width * share, y1: box.y, x2: box.x + box.width * share, y2: box.y + box.height, class: "lm-detail" }, step)
155
+ : _jsx("line", { x1: box.x, y1: box.y + box.height * share, x2: box.x + box.width, y2: box.y + box.height * share, class: "lm-detail" }, step);
156
+ })] }));
157
+ }
158
+ case "ladder":
159
+ return (_jsx("path", { class: "lm-detail strong", d: `M${cx - 7} ${y + 5}V${y + h - 5}M${cx + 7} ${y + 5}V${y + h - 5}${Array.from({ length: Math.max(1, Math.round(h / 8) - 1) }, (_, rung) => `M${cx - 7} ${y + 8 + rung * 8}h14`).join("")}` }));
160
+ case "trapdoor": {
161
+ const box = inset(0.12);
162
+ return (_jsxs(_Fragment, { children: [_jsx("rect", { ...box, class: "lm-wood" }), _jsx("path", { class: "lm-detail", d: `M${box.x} ${box.y + box.height / 3}h${box.width}M${box.x} ${box.y + box.height * 2 / 3}h${box.width}` })] }));
163
+ }
164
+ case "pit": {
165
+ const box = inset(0.06);
166
+ return (_jsxs(_Fragment, { children: [_jsx("rect", { ...box, class: "lm-pit" }), _jsx("rect", { x: box.x + 6, y: box.y + 6, width: Math.max(0, box.width - 12), height: Math.max(0, box.height - 12), class: "lm-pit deep" })] }));
167
+ }
168
+ case "pillar":
169
+ return _jsx(_Fragment, { children: cells.map(([cellX, cellY]) => _jsx("circle", { cx: cellX + size / 2, cy: cellY + size / 2, r: size * 0.3, class: "lm-ink-fill" }, `${cellX} ${cellY}`)) });
170
+ case "statue":
171
+ return (_jsxs(_Fragment, { children: [_jsx("rect", { ...inset(0.14), class: "lm-stone" }), _jsx("circle", { cx: cx, cy: cy, r: small * 0.2, class: "lm-ink-fill" })] }));
172
+ case "altar":
173
+ return (_jsxs(_Fragment, { children: [_jsx("rect", { ...inset(0.16), rx: 1, class: "lm-stone" }), _jsx("path", { class: "lm-detail", d: `M${x + size * 0.24} ${y + size * 0.3}h${w - size * 0.48}` })] }));
174
+ case "well":
175
+ return (_jsxs(_Fragment, { children: [_jsx("circle", { cx: cx, cy: cy, r: small * 0.36, class: "lm-stone" }), _jsx("circle", { cx: cx, cy: cy, r: small * 0.22, class: "lm-pit deep" })] }));
176
+ case "tree":
177
+ // A tree a square, the crowns overlapping: a wood, not a blob.
178
+ return (_jsxs(_Fragment, { children: [cells.map(([cellX, cellY]) => {
179
+ const jitter = ((cellX * 7 + cellY * 3) / size) % 5 - 2;
180
+ return _jsx("path", { class: "lm-canopy", d: canopy(cellX + size / 2 + jitter, cellY + size / 2 - jitter, size * 0.56) }, `${cellX} ${cellY}`);
181
+ }), cells.map(([cellX, cellY]) => _jsx("circle", { cx: cellX + size / 2, cy: cellY + size / 2, r: size * 0.07, class: "lm-ink-fill" }, `t${cellX} ${cellY}`))] }));
182
+ case "rocks":
183
+ return (_jsx(_Fragment, { children: cells.map(([cellX, cellY]) => (_jsxs(Fragment, { children: [_jsx("path", { class: "lm-stone", d: `M${cellX + 8} ${cellY + 26}l5 -13l9 -5l8 6l3 12l-9 8z` }), _jsx("path", { class: "lm-detail", d: `M${cellX + 22} ${cellY + 8}l-3 10l11 4` })] }, `${cellX} ${cellY}`))) }));
184
+ case "low-wall":
185
+ return (_jsxs(_Fragment, { children: [_jsx("path", { class: "lm-low-wall", d: along ? `M${x + 2} ${cy}H${x + w - 2}` : `M${cx} ${y + 2}V${y + h - 2}` }), cells.map(([cellX, cellY]) => _jsx("rect", { x: cellX + size / 2 - 3, y: cellY + size / 2 - 3, width: 6, height: 6, class: "lm-ink-fill" }, `${cellX} ${cellY}`))] }));
186
+ case "bridge":
187
+ return (_jsxs(_Fragment, { children: [_jsx("rect", { ...inset(0.1), class: "lm-wood" }), _jsx("path", { class: "lm-detail", d: Array.from({ length: Math.round((along ? w : h) / 8) }, (_, plank) => (along ? `M${x + size * 0.1 + plank * 8} ${y + size * 0.1}v${h - size * 0.2}` : `M${x + size * 0.1} ${y + size * 0.1 + plank * 8}h${w - size * 0.2}`)).join("") })] }));
188
+ case "machine":
189
+ return (_jsxs(_Fragment, { children: [_jsx("rect", { ...inset(0.12), rx: 3, class: "lm-metal" }), _jsx("circle", { cx: cx, cy: cy, r: small * 0.16, class: "lm-detail" })] }));
190
+ case "vehicle":
191
+ return (_jsxs(_Fragment, { children: [_jsx("rect", { ...inset(0.16), rx: 4, class: "lm-wood" }), _jsx("path", { class: "lm-detail strong", d: `M${x + size * 0.1} ${y + size * 0.3}v8M${x + w - size * 0.1} ${y + size * 0.3}v8M${x + size * 0.1} ${y + h - size * 0.3}v-8M${x + w - size * 0.1} ${y + h - size * 0.3}v-8` })] }));
192
+ case "tent":
193
+ return (_jsxs(_Fragment, { children: [_jsx("rect", { ...inset(0.08), class: "lm-cloth" }), _jsx("path", { class: "lm-detail", d: `M${x + size * 0.08} ${y + size * 0.08}L${x + w - size * 0.08} ${y + h - size * 0.08}M${x + w - size * 0.08} ${y + size * 0.08}L${x + size * 0.08} ${y + h - size * 0.08}` })] }));
194
+ case "building":
195
+ return _jsx(Roof, { x: x, y: y, w: w, h: h, cells: cells });
196
+ case "stall":
197
+ return (_jsxs(_Fragment, { children: [_jsx("rect", { ...inset(0.1), class: "lm-awning" }), _jsx("path", { class: "lm-detail", d: Array.from({ length: Math.max(1, Math.round(w / 10) - 1) }, (_, stripe) => `M${x + size * 0.1 + (stripe + 1) * 9} ${y + size * 0.1}v${h - size * 0.2}`).join("") })] }));
198
+ case "fountain":
199
+ return (_jsxs(_Fragment, { children: [_jsx("circle", { cx: cx, cy: cy, r: small * 0.44, class: "lm-stone" }), _jsx("circle", { cx: cx, cy: cy, r: small * 0.36, class: "lm-basin" }), _jsx("circle", { cx: cx, cy: cy, r: small * 0.1, class: "lm-stone" }), _jsx("path", { class: "lm-wave", d: `M${cx - small * 0.26} ${cy + small * 0.18}q4 -4 8 0t8 0` })] }));
200
+ case "cliff":
201
+ // The drop: a line along the top, teeth falling from it.
202
+ return (_jsxs(_Fragment, { children: [_jsx("path", { class: "lm-detail strong", d: `M${x} ${y + 4}H${x + w}` }), _jsx("path", { class: "lm-cliff", d: Array.from({ length: Math.round(w / 8) }, (_, tooth) => `M${x + 2 + tooth * 8} ${y + 5}l3 ${h * 0.55}l3 ${-h * 0.55}`).join("") })] }));
203
+ case "hedge":
204
+ return _jsx("path", { class: "lm-canopy", d: along ? `M${x + 6} ${cy - 7}h${w - 12}a7 7 0 0 1 0 14h${-(w - 12)}a7 7 0 0 1 0 -14z` : `M${cx - 7} ${y + 6}v${h - 12}a7 7 0 0 0 14 0v${-(h - 12)}a7 7 0 0 0 -14 0z` });
205
+ case "hazard":
206
+ return (_jsx(_Fragment, { children: cells.map(([cellX, cellY]) => (_jsxs(Fragment, { children: [_jsx("path", { class: "lm-hazard", d: `M${cellX + size / 2} ${cellY + size / 2 - 12}l12 21h-24z` }), _jsx("text", { class: "lm-hazard-mark", x: cellX + size / 2, y: cellY + size / 2 + 6, "text-anchor": "middle", children: "!" })] }, `${cellX} ${cellY}`))) }));
207
+ case "mark":
208
+ return (_jsxs(_Fragment, { children: [_jsx("circle", { cx: cx, cy: cy, r: small * 0.38, class: "lm-mark" }), _jsx("circle", { cx: cx, cy: cy, r: small * 0.24, class: "lm-mark" })] }));
209
+ default:
210
+ return (_jsxs(_Fragment, { children: [_jsx("rect", { ...inset(0.2), rx: 6, class: "lm-thing-any" }), _jsx("text", { class: "lm-thing-symbol", x: cx, y: cy + 1, "text-anchor": "middle", "dominant-baseline": "middle", children: symbol })] }));
211
+ }
212
+ }
213
+ /** Roofs: the piece's squares in tiles, its outline, the ridge along its longer side. */
214
+ function Roof({ x, y, w, h, cells }) {
215
+ const inPiece = (cellX, cellY) => cells.some(([px, py]) => px === cellX && py === cellY);
216
+ const edges = cells.flatMap(([cellX, cellY]) => [[cellX, cellY - size, `M${cellX} ${cellY}h${size}`], [cellX + size, cellY, `M${cellX + size} ${cellY}v${size}`], [cellX, cellY + size, `M${cellX} ${cellY + size}h${size}`], [
217
+ cellX - size,
218
+ cellY,
219
+ `M${cellX} ${cellY}v${size}`,
220
+ ]]
221
+ .filter(([nx, ny]) => !inPiece(nx, ny))
222
+ .map(([, , path]) => path));
223
+ const along = w >= h;
224
+ const middle = along ? y + Math.floor(h / size / 2) * size + (h / size % 2 === 1 ? size / 2 : 0) : x + Math.floor(w / size / 2) * size + (w / size % 2 === 1 ? size / 2 : 0);
225
+ const ridge = cells.filter(([cellX, cellY]) => (along ? cellY <= middle && cellY + size >= middle : cellX <= middle && cellX + size >= middle))
226
+ .map(([cellX, cellY]) => (along ? `M${cellX} ${middle}h${size}` : `M${middle} ${cellY}v${size}`)).join("");
227
+ return (_jsxs("g", { class: `lm-roof tone-${Math.round((x + y) / size) % 3}`, children: [cells.map(([cellX, cellY]) => _jsx("rect", { class: "lm-roof-tiles", x: cellX, y: cellY, width: size, height: size }, `${cellX} ${cellY}`)), _jsx("path", { class: "lm-roof-edge", d: edges.join("") }), _jsx("path", { class: "lm-ridge", d: ridge })] }));
228
+ }
229
+ /** A door: its leaf across the gap in the wall, along the wall it is in; open, swung; secret and found, dashed. */
230
+ function Door({ kind, name, square, map, x, y }) {
231
+ const closed = (column, row) => isSolid(map, { column, row }) || kindAt(map, { column, row }) === "building";
232
+ const across = closed(square.column - 1, square.row) && closed(square.column + 1, square.row);
233
+ const leaf = across ? { x: x + 2, y: y + size * 0.38, width: size - 4, height: size * 0.24 } : { x: x + size * 0.38, y: y + 2, width: size * 0.24, height: size - 4 };
234
+ return (_jsxs("g", { class: `lm-door ${kind}`, children: [_jsx("title", { children: `${name}, ${squareName(square)}` }), kind === "open-door"
235
+ ? (_jsx("path", { class: "lm-door-swing", d: across ? `M${x + 2} ${y + size / 2}A${size - 4} ${size - 4} 0 0 1 ${x + size - 2} ${y - size / 2 + 4}` : `M${x + size / 2} ${y + 2}A${size - 4} ${size - 4} 0 0 0 ${x + size + size / 2 - 4} ${y + size - 2}` }))
236
+ : _jsx("rect", { ...leaf, class: kind === "secret-door" ? "lm-door-leaf secret" : "lm-door-leaf" })] }));
237
+ }
238
+ /** Where a square leads: on the map's edge an arrow out of it and the place's name, as the world goes on there; inside, the name over the door. */
239
+ function Exit({ side, to, x, y, letters }) {
240
+ if (side === "inside") {
241
+ return to === undefined ? null : _jsx("text", { class: "lm-exit-name inside", x: x, y: y - size / 2 - 8, "text-anchor": "middle", children: to });
242
+ }
243
+ const [dx, dy] = side === "bottom" ? [0, 1] : side === "top" ? [0, -1] : side === "left" ? [-1, 0] : [1, 0];
244
+ // Past the squares' names on the top and the left.
245
+ const skip = side === "top" || side === "left" ? 22 : 0;
246
+ const [sx, sy] = [x + dx * (size * 0.5 + skip), y + dy * (size * 0.5 + skip)];
247
+ const [ex, ey] = [sx + dx * 16, sy + dy * 16];
248
+ return (_jsxs("g", { class: "lm-exit", children: [_jsx("path", { d: `M${sx} ${sy}L${ex} ${ey}M${ex - dy * 5 - dx * 5} ${ey - dx * 5 - dy * 5}L${ex} ${ey}L${ex + dy * 5 - dx * 5} ${ey + dx * 5 - dy * 5}` }), to !== undefined && (dx === 0
249
+ ? _jsx("text", { class: "lm-exit-name", x: ex, y: ey + dy * 15, "text-anchor": "middle", "dominant-baseline": "middle", "font-size": letters, children: to })
250
+ : _jsx("text", { class: "lm-exit-name", x: ex + dx * 12, y: ey, "text-anchor": "middle", "dominant-baseline": "middle", "font-size": letters, transform: `rotate(${dx < 0 ? -90 : 90} ${ex + dx * 12} ${ey})`, children: to }))] }));
251
+ }
252
+ /**
253
+ * Someone on the map, as a coin (D-409): their picture to its edge, or a stranger's number, as Creature 2's, or the hood, under glass, its edge bevelled, lit
254
+ * above and shaded below, its shadow low on the paper; no ring of a side. Whoever acts is raised off the paper, a little larger, its shadow wide and soft (D-419); a foe the master marked glows
255
+ * red a little (D-415); one of the party has the pip of their side at the lower left, with their class's symbol or the side's (D-414); anyone the pip of
256
+ * their state at the lower right, and its words in the token's title (D-419).
257
+ */
258
+ function Token({ one, index, acting, hostile, x, y, scale }) {
259
+ const [symbols] = usePref(tokenSymbolsPref);
260
+ const side = one.side ?? 1;
261
+ const r = size * side * 0.43;
262
+ const number = one.stranger ? /[A-Z]?\d+$/.exec(one.name)?.[0] : undefined;
263
+ const pip = symbols ? sideOf(one.role) : undefined;
264
+ // On a map shown small, as on a phone, the marks grow to stay readable, each toward the token's middle by as much as it grows, its paper too, so that the
265
+ // box round it keeps its outer edges and two tokens side by side keep their marks apart as at full size.
266
+ const grow = Math.min(1.4, Math.max(1, 0.65 / scale));
267
+ // The two pips below share the square's width with their neighbours' on either side: past 1.12 the player's character's, gold-ringed, would touch the
268
+ // state's pip, on the token or the next one; the number, alone above, grows on.
269
+ const below = Math.min(grow, 1.12);
270
+ const inward = (radius, paper, by = below) => (by - 1) * (radius + paper);
271
+ const pipPaper = pip === "you" ? 3 : 1.5;
272
+ return (_jsxs("g", { class: `lm-token ${one.role}${acting ? " acting" : ""}`, style: acting ? { transformOrigin: `${x}px ${y}px` } : undefined, children: [_jsx("title", { children: [`${one.stranger ? strangerLabel(one.name) : one.name}, ${one.square}`, ...statusWords(one)].join(" · ") }), hostile && (_jsxs(_Fragment, { children: [_jsx("circle", { class: "lm-hostile-glow", cx: x, cy: y, r: r + 7, fill: "url(#lm-hostile-glow)" }), _jsx("circle", { class: "lm-hostile", cx: x, cy: y, r: r + 2.4 })] })), _jsxs("g", { filter: "url(#lm-drop)", children: [_jsx("circle", { class: "lm-disc", cx: x, cy: y, r: r }), _jsx("circle", { class: "lm-ring", cx: x, cy: y, r: r - 0.5 }), one.image
273
+ ? _jsx("image", { href: `/images/${encodeURIComponent(one.image.file)}?v=${one.image.version}`, x: x - r, y: y - r, width: r * 2, height: r * 2, "clip-path": `url(#lm-token-${index})` })
274
+ : (_jsx("g", { transform: `translate(${x} ${y}) scale(${side})`, children: number !== undefined
275
+ ? _jsx("text", { class: "lm-number", y: 1, "text-anchor": "middle", "dominant-baseline": "middle", children: number })
276
+ : one.stranger
277
+ ? _jsx("path", { class: "lm-stranger", d: "M12 3c-4 0-6.5 3.5-6.5 8v3.5L4 20.5h16l-1.5-6V11c0-4.5-2.5-8-6.5-8Z", transform: "translate(-10.8 -11) scale(0.9)" })
278
+ : _jsx("text", { class: "lm-number", y: 1, "text-anchor": "middle", "dominant-baseline": "middle", children: one.name.slice(0, 1).toUpperCase() }) })), _jsx(Glass, { x: x, y: y, r: r, prefix: "lm" }), _jsx("path", { class: "lm-bevel-lit", d: crescent(x, y, r, 1.5) }), _jsx("path", { class: "lm-bevel-shade", d: crescent(x, y, r, -1.5) })] }), pip !== undefined && _jsx(MapPip, { side: pip, icon: one.stranger ? undefined : one.icon, x: x - r * 0.725 + inward(pipRadius, pipPaper), y: y + r * 0.725 - inward(pipRadius, pipPaper), grow: below }), one.image !== undefined && number !== undefined && _jsx(MapNumber, { number: number, x: x + r * 0.725 - inward(numberRadius, 1.5, grow), y: y - r * 0.725 + inward(numberRadius, 1.5, grow), grow: grow }), _jsx(MapStatus, { one: one, x: x + r * 0.56 - inward(statusRadius, 1.5), y: y + r * 0.56 - inward(statusRadius, 1.5), grow: below })] }));
279
+ }
280
+ // The marks on a token as on one of 40 pixels on the page: the side's pip of 17, the state's of 12, a number's coin 13 high.
281
+ const pipRadius = size * 0.43 * (17 / 40);
282
+ const statusRadius = size * 0.43 * (12 / 40);
283
+ const numberRadius = size * 0.43 * (13 / 40);
284
+ /**
285
+ * A token's pip on the map (D-414): as on the page, a disc of the side's colour with its symbol, ringed in the paper's colour; the same size for any creature,
286
+ * larger by `grow` on a map shown small.
287
+ */
288
+ function MapPip({ side, icon, x, y, grow }) {
289
+ const radius = pipRadius * grow;
290
+ // A symbol of 12 in the pip of 17.
291
+ const scale = (radius * 2 * (12 / 17)) / 24;
292
+ return (_jsxs("g", { class: `lm-pip ${side}`, "aria-hidden": "true", children: [_jsx("circle", { class: "lm-pip-paper", cx: x, cy: y, r: radius + (side === "you" ? 3 : 1.5) * grow }), side === "you" && _jsx("circle", { class: "lm-pip-gold", cx: x, cy: y, r: radius + 1.5 * grow }), _jsx("circle", { class: "lm-pip-disc", cx: x, cy: y, r: radius }), _jsx("path", { class: "lm-pip-symbol", d: icon ?? sideIcons[side], transform: `translate(${x - 12 * scale} ${y - 12 * scale}) scale(${scale})` })] }));
293
+ }
294
+ /**
295
+ * A stranger's number over their picture (D-420): as on the page, a small dark coin at the token's upper right, ringed in the paper's colour; wider for two
296
+ * letters; larger by `grow` on a map shown small.
297
+ */
298
+ function MapNumber({ number, x, y, grow }) {
299
+ // Figures of 8.5 on the coin.
300
+ const height = numberRadius * 2 * grow;
301
+ const width = Math.max(height, (number.length * 6 + 4) * grow);
302
+ return (_jsxs("g", { class: "lm-number-pip", "aria-hidden": "true", "font-size": 8.5 * grow, children: [_jsx("rect", { class: "lm-pip-paper", x: x - width / 2 - 1.5 * grow, y: y - height / 2 - 1.5 * grow, width: width + 3 * grow, height: height + 3 * grow, rx: height / 2 + 1.5 * grow }), _jsx("rect", { class: "lm-number-disc", x: x - width / 2, y: y - height / 2, width: width, height: height, rx: height / 2 }), _jsx("text", { class: "lm-number-small", x: x, y: y + 0.5 * grow, "text-anchor": "middle", "dominant-baseline": "middle", children: number })] }));
303
+ }
304
+ /**
305
+ * The pip of someone's state on the map (D-419): as on the page, smaller than the side's, a second coin behind when there are more; the same size for any
306
+ * creature, larger by `grow` on a map shown small.
307
+ */
308
+ function MapStatus({ one, x, y, grow }) {
309
+ const [shown] = useChoice(conditionsPref);
310
+ const marks = statusMarks(one);
311
+ if (shown === "never" || marks.length === 0) {
312
+ return null;
313
+ }
314
+ const radius = statusRadius * grow;
315
+ const paper = 1.5 * grow;
316
+ // A symbol of 9.6 in the pip of 12.
317
+ const scale = (radius * 2 * (24 / 30)) / 24;
318
+ // The second coin up more than out, within the token's square: a crescent of about 3 of the token's 40 past the paper round the first (D-420).
319
+ const behind = { x: radius * 0.3, y: radius * 0.85 };
320
+ const strong = marks[0].kind === "state";
321
+ return (_jsxs("g", { class: ["lm-status", strong ? "strong" : "", shown === "hover" ? "on-hover" : ""].filter((name) => name !== "").join(" "), "aria-hidden": "true", children: [marks.length > 1 && (_jsxs(_Fragment, { children: [_jsx("circle", { class: "lm-pip-paper", cx: x + behind.x, cy: y - behind.y, r: radius + paper }), _jsx("circle", { class: "lm-status-back", cx: x + behind.x, cy: y - behind.y, r: radius })] })), _jsx("circle", { class: "lm-pip-paper", cx: x, cy: y, r: radius + paper }), _jsx("circle", { class: "lm-status-disc", cx: x, cy: y, r: radius }), _jsx("path", { class: "lm-status-symbol", d: marks[0].icon, transform: `translate(${x - 12 * scale} ${y - 12 * scale}) scale(${scale})` })] }));
322
+ }
323
+ /** The thin crescent a coin's bevel lights, from its top when `offset` is positive or shades at its bottom when negative: the circle less itself moved by it. */
324
+ function crescent(x, y, r, offset) {
325
+ const half = Math.sqrt(r * r - (offset / 2) ** 2);
326
+ const middle = y + offset / 2;
327
+ const [outer, inner] = offset > 0 ? [1, 0] : [0, 1];
328
+ return `M${x - half} ${middle}A${r} ${r} 0 1 ${outer} ${x + half} ${middle}A${r} ${r} 0 0 ${inner} ${x - half} ${middle}Z`;
329
+ }
330
+ /** A thing of the legend drawn small, as on the map, for the key. */
331
+ function Swatch({ feature, ground }) {
332
+ return (_jsxs("svg", { class: `lm-swatch lm-look-${ground}`, viewBox: "0 0 40 40", "aria-hidden": "true", children: [_jsx("rect", { class: "lm-paper", width: 40, height: 40 }), ["wall", "rock", "window"].includes(feature.kind)
333
+ ? _jsx("rect", { class: `lm-wall ${feature.kind}`, width: 40, height: 40 })
334
+ : (_jsxs(_Fragment, { children: [_jsx("rect", { class: "lm-floor-fill", width: 40, height: 40 }), ["door", "open-door", "secret-door", "opening"].includes(feature.kind)
335
+ ? (_jsxs(_Fragment, { children: [_jsx("path", { class: "lm-outline", d: "M0 0V40M40 0V40" }), feature.kind !== "opening" && _jsx("rect", { class: feature.kind === "secret-door" ? "lm-door-leaf secret" : "lm-door-leaf", x: 14, y: 2, width: 12, height: 36 })] }))
336
+ : groundKinds.includes(feature.kind)
337
+ ? _jsx(Ground, { kind: feature.kind, x: 0, y: 0, side: 40, seed: { column: 0, row: 0 } })
338
+ : _jsx(Thing, { kind: feature.kind, symbol: feature.symbol, x: 0, y: 0, w: 40, h: 40, cells: [[0, 0]] }), feature.difficult && _jsx(Corner, { x: 0, y: 0, side: 40 })] }))] }));
339
+ }
340
+ /** A flame, from its foot. */
341
+ function flame(x, y, height) {
342
+ return `M${x} ${y}c${-height * 0.45} ${-height * 0.25} ${-height * 0.3} ${-height * 0.7} 0 ${-height}c${height * 0.05} ${height * 0.3} ${height * 0.35} ${height * 0.35} ${height * 0.3} ${height * 0.65}`
343
+ + `c${-height * 0.02} ${height * 0.2} ${-height * 0.15} ${height * 0.33} ${-height * 0.3} ${height * 0.35}z`;
344
+ }
345
+ /** A pebble of rubble. */
346
+ function pebble(x, y, r) {
347
+ return `M${x - r} ${y}l${r * 0.6} ${-r * 0.9}l${r} ${r * 0.2}l${r * 0.4} ${r}l${-r * 0.9} ${r * 0.6}z`;
348
+ }
349
+ /** A tree's crown: a circle of lobes. */
350
+ function canopy(x, y, r) {
351
+ const bumps = 9;
352
+ return Array.from({ length: bumps + 1 }, (_, index) => {
353
+ const angle = (index / bumps) * Math.PI * 2;
354
+ const [px, py] = [x + Math.cos(angle) * r, y + Math.sin(angle) * r];
355
+ return index === 0 ? `M${px} ${py}` : `A${r * 0.36} ${r * 0.36} 0 0 1 ${px} ${py}`;
356
+ }).join("") + "z";
357
+ }
358
+ /** A symbol of the map by its name: those every map has (GRD-1), a wall, the floor, a door, in the page's language; the others as the master named them. */
359
+ function featureName(feature) {
360
+ const builtIn = { wall: t("wall"), floor: t("floor"), door: t("door") };
361
+ return feature.name === feature.kind ? builtIn[feature.kind] ?? feature.name : feature.name;
362
+ }
@@ -0,0 +1,204 @@
1
+ /** Every kind the map draws its own way (D-325): the engine's list of squareKinds, which a test holds to it. */
2
+ export const drawnKinds = [
3
+ "wall",
4
+ "rock",
5
+ "floor",
6
+ "ground",
7
+ "road",
8
+ "door",
9
+ "open-door",
10
+ "secret-door",
11
+ "opening",
12
+ "window",
13
+ "low-wall",
14
+ "hedge",
15
+ "stairs",
16
+ "ladder",
17
+ "trapdoor",
18
+ "pit",
19
+ "cliff",
20
+ "bridge",
21
+ "shallow-water",
22
+ "deep-water",
23
+ "mud",
24
+ "rubble",
25
+ "brush",
26
+ "tree",
27
+ "rocks",
28
+ "pillar",
29
+ "statue",
30
+ "fire",
31
+ "hearth",
32
+ "well",
33
+ "fountain",
34
+ "table",
35
+ "seat",
36
+ "counter",
37
+ "bed",
38
+ "shelf",
39
+ "barrel",
40
+ "crate",
41
+ "altar",
42
+ "machine",
43
+ "vehicle",
44
+ "tent",
45
+ "stall",
46
+ "building",
47
+ "hazard",
48
+ "mark",
49
+ ];
50
+ /** The kinds drawn on their own squares under the things, as ground: water, rubble, mud, brush, open ground, a road. */
51
+ export const groundKinds = ["shallow-water", "deep-water", "rubble", "mud", "brush", "ground", "road"];
52
+ /** The kinds drawn one a square, as a row of trees is trees and not a blob (D-325); the others as one thing over the squares that touch. */
53
+ export const squareDrawnKinds = ["tree", "rocks", "pillar", "seat", "barrel", "crate", "hazard", "ladder", "trapdoor"];
54
+ /** The kinds one cannot see past nor stand on, which the floor's outline goes round. */
55
+ const solidKinds = ["wall", "rock", "outside", "window"];
56
+ /** The square a name such as C4 says, from A1 at the top left, AA after Z; none for anything else. */
57
+ export function squareOf(name) {
58
+ const match = /^([A-Z]+)(\d+)$/.exec(name.trim().toUpperCase());
59
+ return match === null ? undefined : { column: [...match[1]].reduce((total, letter) => total * 26 + letter.charCodeAt(0) - 64, 0) - 1, row: Number(match[2]) - 1 };
60
+ }
61
+ /** A column's letters, as the map's edge writes them: A, B… Z, AA. */
62
+ export function columnName(column) {
63
+ let letters = "";
64
+ for (let number = column + 1; number > 0; number = Math.floor((number - 1) / 26)) {
65
+ letters = String.fromCharCode(65 + ((number - 1) % 26)) + letters;
66
+ }
67
+ return letters;
68
+ }
69
+ /** A square's name, as the player says it: C4. */
70
+ export function squareName(square) {
71
+ return `${columnName(square.column)}${square.row + 1}`;
72
+ }
73
+ /** The symbol at a square; a space outside the grid. */
74
+ export function symbolAt(map, square) {
75
+ return map.lines[square.row]?.[square.column] ?? " ";
76
+ }
77
+ /** What a square is drawn as: its symbol's kind in the legend, outside for a space, thing for a symbol the legend does not give. */
78
+ export function kindAt(map, square) {
79
+ const symbol = symbolAt(map, square);
80
+ return symbol === " " ? "outside" : map.legend.find((feature) => feature.symbol === symbol)?.kind ?? "thing";
81
+ }
82
+ /** Whether a square is a wall, rock, a window or outside: what the floor's outline goes round. */
83
+ export function isSolid(map, square) {
84
+ return solidKinds.includes(kindAt(map, square));
85
+ }
86
+ /** Whether one can stand on a square (GRD-3): inside the map, on what the legend names, neither a wall nor what blocks. */
87
+ export function isStandable(map, square) {
88
+ const symbol = symbolAt(map, square);
89
+ const feature = map.legend.find((one) => one.symbol === symbol);
90
+ return symbol !== " " && feature !== undefined && feature.blocks !== true;
91
+ }
92
+ /** Whether the map has walls or rock: a building or a cave, which ends at its walls; without, an open map, which fades into the paper. */
93
+ export function isWalled(map) {
94
+ return map.lines.some((line) => [...line].some((symbol) => ["wall", "rock"].includes(map.legend.find((feature) => feature.symbol === symbol)?.kind ?? "")));
95
+ }
96
+ /** The pieces of a thing of the legend: its squares joined where they touch, each with the box around them; one a square for the kinds drawn so. */
97
+ export function piecesOf(map, symbol, kind) {
98
+ const seen = new Set();
99
+ const pieces = [];
100
+ const single = squareDrawnKinds.includes(kind);
101
+ for (let row = 0; row < map.rows; row++) {
102
+ for (let column = 0; column < map.columns; column++) {
103
+ if (symbolAt(map, { column, row }) !== symbol || seen.has(`${column},${row}`)) {
104
+ continue;
105
+ }
106
+ const squares = [];
107
+ const open = [{ column, row }];
108
+ seen.add(`${column},${row}`);
109
+ while (open.length > 0) {
110
+ const next = open.pop();
111
+ squares.push(next);
112
+ for (const [dc, dr] of single ? [] : [[1, 0], [-1, 0], [0, 1], [0, -1]]) {
113
+ const near = { column: next.column + dc, row: next.row + dr };
114
+ if (symbolAt(map, near) === symbol && !seen.has(`${near.column},${near.row}`)) {
115
+ seen.add(`${near.column},${near.row}`);
116
+ open.push(near);
117
+ }
118
+ }
119
+ }
120
+ const columns = squares.map((square) => square.column);
121
+ const rows = squares.map((square) => square.row);
122
+ pieces.push({ squares, left: Math.min(...columns), top: Math.min(...rows), right: Math.max(...columns) + 1, bottom: Math.max(...rows) + 1 });
123
+ }
124
+ }
125
+ return pieces;
126
+ }
127
+ /** The floor's outline as loops of the sides that face a wall, rock or the outside, each side going round the floor the same way. */
128
+ export function floorLoops(map, X, Y) {
129
+ const rockLike = map.legend.find((feature) => feature.symbol === "#")?.kind === "rock";
130
+ const edges = [];
131
+ for (let row = 0; row < map.rows; row++) {
132
+ for (let column = 0; column < map.columns; column++) {
133
+ if (isSolid(map, { column, row })) {
134
+ continue;
135
+ }
136
+ for (const [dc, dr, x1, y1, x2, y2] of [[0, -1, 0, 0, 1, 0], [1, 0, 1, 0, 1, 1], [0, 1, 1, 1, 0, 1], [-1, 0, 0, 1, 0, 0]]) {
137
+ const near = { column: column + dc, row: row + dr };
138
+ if (isSolid(map, near)) {
139
+ const beyond = kindAt(map, near);
140
+ edges.push({
141
+ x1: X(column + x1),
142
+ y1: Y(row + y1),
143
+ x2: X(column + x2),
144
+ y2: Y(row + y2),
145
+ // A door's sides along the wall are the wall's ends, drawn; only its side toward the outside is left open, as the way goes on there.
146
+ gap: beyond === "outside" && ["door", "open-door", "secret-door", "opening"].includes(kindAt(map, { column, row })),
147
+ rock: beyond === "rock" || (beyond === "outside" && rockLike),
148
+ });
149
+ }
150
+ }
151
+ }
152
+ }
153
+ const loops = [];
154
+ const unused = new Set(edges);
155
+ while (unused.size > 0) {
156
+ const first = unused.values().next().value;
157
+ const loop = [first];
158
+ unused.delete(first);
159
+ let last = first;
160
+ for (;;) {
161
+ const next = [...unused].find((edge) => edge.x1 === last.x2 && edge.y1 === last.y2);
162
+ if (next === undefined) {
163
+ break;
164
+ }
165
+ loop.push(next);
166
+ unused.delete(next);
167
+ last = next;
168
+ }
169
+ loops.push(loop);
170
+ }
171
+ return loops;
172
+ }
173
+ /**
174
+ * A loop of the floor's outline as a path: rounded at the corners where rock lies on both sides, as a cave's, at most half a square; with gaps, the doors'
175
+ * sides toward the outside left out and the loop left open, as the ink draws it; without, closed, as the floor's fill.
176
+ */
177
+ export function tracedLoop(loop, withGaps, rounding) {
178
+ const turns = (first, second) => Math.sign(first.x2 - first.x1) !== Math.sign(second.x2 - second.x1) || Math.sign(first.y2 - first.y1) !== Math.sign(second.y2 - second.y1);
179
+ const radius = (first, second) => (first.rock && second.rock && turns(first, second) ? rounding : 0);
180
+ let path = "";
181
+ loop.forEach((edge, index) => {
182
+ const before = loop[(index - 1 + loop.length) % loop.length];
183
+ const after = loop[(index + 1) % loop.length];
184
+ const [ux, uy] = [Math.sign(edge.x2 - edge.x1), Math.sign(edge.y2 - edge.y1)];
185
+ const [r1, r2] = [radius(before, edge), radius(edge, after)];
186
+ if (withGaps && edge.gap) {
187
+ return;
188
+ }
189
+ const start = path === "" || (withGaps && before.gap) ? `M${edge.x1 + ux * r1} ${edge.y1 + uy * r1}` : "";
190
+ path += `${start}L${edge.x2 - ux * r2} ${edge.y2 - uy * r2}`;
191
+ if (r2 > 0 && !(withGaps && after.gap)) {
192
+ path += `Q${edge.x2} ${edge.y2} ${after.x1 + Math.sign(after.x2 - after.x1) * r2} ${after.y1 + Math.sign(after.y2 - after.y1) * r2}`;
193
+ }
194
+ });
195
+ return withGaps ? path : `${path}Z`;
196
+ }
197
+ /** The side of the map a square that leads elsewhere is on, for its arrow; inside for a door in the map, into a building that is a place of its own. */
198
+ export function exitSide(map, square) {
199
+ return square.row === map.rows - 1 ? "bottom" : square.row === 0 ? "top" : square.column === 0 ? "left" : square.column === map.columns - 1 ? "right" : "inside";
200
+ }
201
+ /** Whether two squares touch, sides or corners. */
202
+ export function nextTo(first, second) {
203
+ return Math.max(Math.abs(first.column - second.column), Math.abs(first.row - second.row)) === 1;
204
+ }