rpg-engine 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1886) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +99 -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 +131 -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 +306 -0
  236. package/dist/dashboard/guide/cs.md +306 -0
  237. package/dist/dashboard/guide/da.md +306 -0
  238. package/dist/dashboard/guide/de.md +306 -0
  239. package/dist/dashboard/guide/el.md +306 -0
  240. package/dist/dashboard/guide/en.md +305 -0
  241. package/dist/dashboard/guide/es.md +306 -0
  242. package/dist/dashboard/guide/fi.md +306 -0
  243. package/dist/dashboard/guide/fr.md +306 -0
  244. package/dist/dashboard/guide/he.md +306 -0
  245. package/dist/dashboard/guide/hi.md +306 -0
  246. package/dist/dashboard/guide/hu.md +306 -0
  247. package/dist/dashboard/guide/is.md +306 -0
  248. package/dist/dashboard/guide/it.md +306 -0
  249. package/dist/dashboard/guide/ja.md +306 -0
  250. package/dist/dashboard/guide/ko.md +306 -0
  251. package/dist/dashboard/guide/nb.md +306 -0
  252. package/dist/dashboard/guide/nl.md +306 -0
  253. package/dist/dashboard/guide/pl.md +306 -0
  254. package/dist/dashboard/guide/pt.md +306 -0
  255. package/dist/dashboard/guide/ro.md +306 -0
  256. package/dist/dashboard/guide/ru.md +306 -0
  257. package/dist/dashboard/guide/sv.md +306 -0
  258. package/dist/dashboard/guide/tr.md +306 -0
  259. package/dist/dashboard/guide/uk.md +306 -0
  260. package/dist/dashboard/guide/zh.md +306 -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,244 @@
1
+ // Positions in play (D-259, POS-1–POS-8): where a place is, its own position or one worked out; relations turned into a position; regions; what is near a point;
2
+ // each on its map, with the coordinates its map uses (D-320).
3
+ import { lengthHelp, readLength } from "../core/length.js";
4
+ import { comparableText } from "../core/text.js";
5
+ import { biomes, directionHelp, directionName, directionTo, distanceBetween, meanPoint, placeKinds, pointAlong, pointFrom, readDirection } from "../map/index.js";
6
+ import { environmentAt, formatPosition, isEmptyField, locate, pageNamed, pagesWithName, parsePageReference, readPosition, readStops } from "../pages/index.js";
7
+ import { mapKey, mapOf, sameFrame } from "./game-maps.js";
8
+ import { lengthText, roadsOf } from "./game-roads.js";
9
+ /** How to write a relation, for messages. */
10
+ export const relationHelp = "a distance, a direction and a place with a position, such as 12 km NE of [[Guadoscuro]]";
11
+ /**
12
+ * Where a page is on the map (POS-4): the first of its chain, itself first, with a position: its own; for a stop, on the line between the nearest stops of its
13
+ * road that have one, by the lengths; undefined when none has one. A character or an item is where the place that holds it is.
14
+ */
15
+ export function positionOf(world, page) {
16
+ for (const holder of [page, ...locate(world, page).chain]) {
17
+ const position = placedPosition(world, holder);
18
+ if (position !== undefined) {
19
+ return position;
20
+ }
21
+ }
22
+ return undefined;
23
+ }
24
+ /** A place's own position, or the one its roads give it, rather than its container's: the places that show on the map. */
25
+ export function placedPosition(world, page) {
26
+ return page.type !== "place" || page.system !== undefined ? undefined : placedOf(world).positions.get(page.path);
27
+ }
28
+ /**
29
+ * The position a write gives a place (POS-2): written as the engine writes it, or as relations, whose points are averaged, with the largest distance between
30
+ * them. When no place with the same coordinates has a position yet, the one a relation starts from becomes the centre of its map: `origin`, to write too. The
31
+ * places it is given from share their coordinates, and those of the place written when something already holds it (POS-8); a place nothing holds yet takes
32
+ * them, and `map` names the map to put it in. Refused with the fix otherwise.
33
+ */
34
+ export function positionFromWrite(world, value, name) {
35
+ const own = readPosition(value);
36
+ if (own !== undefined) {
37
+ return { position: own, spread: 0 };
38
+ }
39
+ const texts = Array.isArray(value) ? value.map(String) : [String(value)];
40
+ const relations = texts.map((text) => relationOf(text));
41
+ const places = relations.map((relation) => referenceOf(world, relation.place, name));
42
+ const map = sharedMap(world, places, pageNamed(world, name), name);
43
+ const unplaced = places.filter((place) => positionOf(world, place) === undefined);
44
+ const known = world.pages.filter((page) => page.system === undefined && readPosition(page.fields.position) !== undefined && mapOf(world, page).frame === mapOf(world, places[0]).frame);
45
+ if (unplaced.length > 0 && (known.length > 0 || new Set(unplaced).size > 1 || unplaced.length < places.length)) {
46
+ const such = known.length === 0 ? "" : `, such as ${known.slice(0, 3).map((page) => page.name).join(", ")}`;
47
+ throw new Error(`${unplaced[0].name} has no position yet: give it one first, relative to a place that has one${such}, then write ${name}. Nothing changed.`);
48
+ }
49
+ const origin = unplaced[0];
50
+ const points = relations.map((relation, index) => pointFrom(positionOf(world, places[index]) ?? { east: 0, north: 0 }, relation.degrees, relation.metres));
51
+ const spread = Math.max(0, ...points.flatMap((point) => points.map((other) => distanceBetween(point, other))));
52
+ return { position: meanPoint(points), spread, ...(origin === undefined ? {} : { origin }), ...(map === undefined ? {} : { map }) };
53
+ }
54
+ /** The regions of the world (POS-6): places of the campaign with a radius and a position, their own or one their roads give them. */
55
+ export function regionsOf(world) {
56
+ return placedOf(world).regions;
57
+ }
58
+ /** The smallest region of a map, by its key (POS-8), that covers a point (POS-6); undefined when none does. */
59
+ export function regionAt(world, point, map = "") {
60
+ return regionsOf(world)
61
+ .filter((region) => mapKey(world, region.page) === map && distanceBetween(region.centre, point) <= region.radius)
62
+ .sort((first, second) => first.radius - second.radius)[0];
63
+ }
64
+ /**
65
+ * The places near a point (TRV-13): those with a position of their own or from their roads within 3 km, nearest first, at most 5, or else the nearest one; each
66
+ * as "Torre Mozza, 2.1 km north-east". Regions and roads are left out.
67
+ */
68
+ export function nearPlaces(world, point, measures, map = "", except = []) {
69
+ const placed = placesByDistance(world, point, map, except);
70
+ const near = placed.filter((place) => place.distance <= 3000).slice(0, 5);
71
+ return (near.length > 0 ? near : placed.slice(0, 1)).map((place) => `${place.page.name}, ${relationText(point, place.position, measures)}`);
72
+ }
73
+ /** "12 km west of Guadoscuro": a point of a map told from its nearest place with a position, or that place's name at it; its position when there is none. */
74
+ export function pointText(world, point, measures, map = "") {
75
+ const nearest = placesByDistance(world, point, map, [])[0];
76
+ if (nearest === undefined) {
77
+ return formatPosition(point);
78
+ }
79
+ const relation = relationText(nearest.position, point, measures);
80
+ return relation === "here" ? nearest.page.name : `${relation} of ${nearest.page.name}`;
81
+ }
82
+ /** "2.1 km north-east", from a point to another; "here" closer than 50 m. */
83
+ export function relationText(from, to, measures) {
84
+ const distance = distanceBetween(from, to);
85
+ return distance < 50 ? "here" : `${lengthText(distance, measures)} ${directionName(directionTo(from, to))}`;
86
+ }
87
+ /**
88
+ * What write says when a place first comes on the map without a kind, a region apart, or becomes a region without a biome (POS-7): the names the map draws. `before`
89
+ * is the world before the write, `existing` the page as it was there.
90
+ */
91
+ export function mapLookNotes(before, existing, after, page) {
92
+ const placed = (world, candidate) => candidate !== undefined && placedPosition(world, candidate) !== undefined;
93
+ const region = (world, candidate) => candidate !== undefined && regionsOf(world).some((found) => found.page.path === candidate.path);
94
+ const isRoad = page.fields.stops !== undefined;
95
+ const biome = environmentAt(after, page).some(({ entry }) => comparableText(entry.name) === "biome");
96
+ return [
97
+ !isRoad && !region(after, page) && isEmptyField(page.fields.kind) && placed(after, page) && !placed(before, existing)
98
+ ? `For the dashboard's map, give ${page.name} a kind, as set kind=${placeKinds[2]}: ${placeKinds.join(", ")}.`
99
+ : "",
100
+ region(after, page) && !region(before, existing) && !biome
101
+ ? `For the map, give ${page.name}'s environment a biome, as add environment="biome: ${biomes[0]}": ${biomes.join(", ")}; what it holds shares it.`
102
+ : "",
103
+ ].filter((note) => note !== "");
104
+ }
105
+ /** The roads shorter than the straight line between two of their stops that have a position of their own (POS-5): a length or a position is wrong. */
106
+ export function shortRoadProblems(world) {
107
+ return shortRoads(world).map((short) => short.problem);
108
+ }
109
+ /** What write says of the roads a place's position or a road's stops make shorter than the straight line (POS-5): those of the page, or with it as a stop. */
110
+ export function shortRoadNotes(world, page) {
111
+ const same = (name) => comparableText(name) === comparableText(page.name);
112
+ return shortRoads(world).filter((short) => [short.road, short.from, short.to].some(same)).map(({ problem }) => `${problem.message} Fix: ${problem.fix}.`);
113
+ }
114
+ /** The roads shorter than the straight line (POS-5): each stop with the next one that has a position, in order; with the road and the stops it is about. */
115
+ function shortRoads(world) {
116
+ return [...roadsOf(world).pages.values()].flatMap((road) => {
117
+ const read = readStops(road.fields.stops);
118
+ if ("problem" in read) {
119
+ return [];
120
+ }
121
+ const placed = read.stops.flatMap((name, index) => {
122
+ const page = pagesWithName(world, name)[0];
123
+ const position = ownPositionNamed(world, name);
124
+ return position === undefined || page === undefined ? [] : [{ name, index, position, page }];
125
+ });
126
+ const along = (index) => read.lengths.slice(0, index).reduce((sum, length) => sum + length, 0);
127
+ return placed.slice(1).flatMap((stop, index) => {
128
+ const before = placed[index];
129
+ // A passage between maps measures nothing in a straight line (POS-8, ROA-8).
130
+ if (mapKey(world, before.page) !== mapKey(world, stop.page)) {
131
+ return [];
132
+ }
133
+ const [length, straight] = [along(stop.index) - along(before.index), distanceBetween(before.position, stop.position)];
134
+ const km = (metres) => Math.round(metres / 100) / 10;
135
+ return length >= straight * 0.99 ? [] : [{
136
+ road: road.name,
137
+ from: before.name,
138
+ to: stop.name,
139
+ problem: {
140
+ path: road.path,
141
+ message: `${road.name} is ${km(length)} km from ${before.name} to ${stop.name}, shorter than the ${km(straight)} km between them in a straight line: a length or a position is wrong.`,
142
+ fix: `write ${road.name}, set stops again with the right lengths, or write the position of ${before.name} or ${stop.name} again`,
143
+ },
144
+ }];
145
+ });
146
+ });
147
+ }
148
+ /** A relation as written (POS-2): a length in metric, a direction of the compass, "of" and a link; refused with how to write it. */
149
+ function relationOf(text) {
150
+ const match = /^\s*(\d+(?:\.\d+)?\s*k?m)\s+(.+?)\s+of\s+(\[\[[^\]]+\]\])\s*$/i.exec(text);
151
+ const metres = match === null ? undefined : readLength(match[1]);
152
+ const degrees = match === null ? undefined : readDirection(match[2]);
153
+ if (match === null || metres === undefined || degrees === undefined) {
154
+ const why = match === null ? `write ${relationHelp}` : metres === undefined ? `write the distance ${lengthHelp}` : `the direction must be ${directionHelp}`;
155
+ throw new Error(`"${text}" is not a position: ${why}. Nothing changed.`);
156
+ }
157
+ return { metres, degrees, place: parsePageReference(match[3]).name };
158
+ }
159
+ /**
160
+ * The map whose coordinates the places a position is given from share (POS-8): refused when they do not, or when the place written is held where they are not;
161
+ * the map to put it in when nothing holds it yet and they are on a map a place holds, which write names.
162
+ */
163
+ function sharedMap(world, places, written, name) {
164
+ const first = places[0];
165
+ const other = places.find((place) => !sameFrame(world, place, first));
166
+ if (other !== undefined) {
167
+ throw new Error(`${first.name} and ${other.name} are on maps with other coordinates: give the position of ${name} from places of one map. Nothing changed.`);
168
+ }
169
+ const map = mapOf(world, first);
170
+ const held = written !== undefined && (locate(world, written).chain.length > 0 || written.fields.map !== undefined);
171
+ if (written !== undefined && held && !sameFrame(world, written, first)) {
172
+ const where = mapOf(world, written).root?.name ?? "the main map";
173
+ throw new Error(`${name} is on ${where === "the main map" ? where : `the map of ${where}`}, ${first.name} on ${map.root === undefined ? "the main map" : `that of ${map.root.name}`}: give its position from a place of its map, or of one with the same coordinates. Nothing changed.`);
174
+ }
175
+ return held || written?.fields.map !== undefined ? undefined : map.root;
176
+ }
177
+ /** The place a relation starts from: a place of the campaign, not the place being written. */
178
+ function referenceOf(world, name, written) {
179
+ const page = pageNamed(world, name);
180
+ if (page === undefined || page.type !== "place" || page.system !== undefined) {
181
+ throw new Error(`${name} is ${page === undefined ? "no page" : "not a place of the campaign"}: a position is given from a place that has one. Nothing changed.`);
182
+ }
183
+ if (comparableText(page.name) === comparableText(written)) {
184
+ throw new Error(`${written} cannot be placed from itself: give its position from another place. Nothing changed.`);
185
+ }
186
+ return page;
187
+ }
188
+ /**
189
+ * The positions and regions of a world, once for each world: the places' own positions, then each stop without one on the line between the nearest stops of its
190
+ * road that have one, by the lengths (POS-4), the first road that gives one; the regions among them (POS-6).
191
+ */
192
+ function placedOf(world) {
193
+ let placed = known.get(world);
194
+ if (placed === undefined) {
195
+ placed = readPlaced(world);
196
+ known.set(world, placed);
197
+ }
198
+ return placed;
199
+ }
200
+ const known = new WeakMap();
201
+ function readPlaced(world) {
202
+ const positions = new Map();
203
+ for (const page of world.pages.filter((candidate) => candidate.type === "place" && candidate.system === undefined)) {
204
+ const own = readPosition(page.fields.position);
205
+ if (own !== undefined) {
206
+ positions.set(page.path, own);
207
+ }
208
+ }
209
+ for (const road of roadsOf(world).pages.values()) {
210
+ const read = readStops(road.fields.stops);
211
+ const pages = "problem" in read ? [] : read.stops.map((name) => pagesWithName(world, name)[0]);
212
+ const owned = pages.map((page) => (page === undefined ? undefined : readPosition(page.fields.position)));
213
+ const along = (index) => ("problem" in read ? 0 : read.lengths.slice(0, index).reduce((sum, length) => sum + length, 0));
214
+ pages.forEach((page, index) => {
215
+ const before = owned.slice(0, index).findLastIndex((position) => position !== undefined);
216
+ const after = owned.findIndex((position, at) => at > index && position !== undefined);
217
+ // Only between stops of the same map: a passage between maps places nothing (POS-8).
218
+ const shared = page !== undefined && before !== -1 && after !== -1 && [pages[before], pages[after]].every((other) => other !== undefined && mapKey(world, page) === mapKey(world, other));
219
+ if (page !== undefined && page.type === "place" && !positions.has(page.path) && shared) {
220
+ const [from, to] = [owned[before], owned[after]];
221
+ positions.set(page.path, pointAlong(from, to, (along(index) - along(before)) / (along(after) - along(before))));
222
+ }
223
+ });
224
+ }
225
+ const regions = world.pages.flatMap((page) => {
226
+ const radius = isEmptyField(page.fields.radius) ? undefined : readLength(page.fields.radius);
227
+ const centre = radius === undefined ? undefined : positions.get(page.path);
228
+ return centre === undefined || radius === undefined || page.type !== "place" || page.system !== undefined ? [] : [{ page, centre, radius }];
229
+ });
230
+ return { positions, regions };
231
+ }
232
+ /** The places of a map with a position of their own or from their roads, nearest to a point first; regions and roads left out. */
233
+ function placesByDistance(world, point, map, except) {
234
+ const { positions } = placedOf(world);
235
+ return world.pages.flatMap((page) => {
236
+ const position = positions.get(page.path);
237
+ const listed = position !== undefined && isEmptyField(page.fields.radius) && isEmptyField(page.fields.stops) && !except.includes(page) && mapKey(world, page) === map;
238
+ return listed ? [{ page, position, distance: distanceBetween(point, position) }] : [];
239
+ }).sort((first, second) => first.distance - second.distance);
240
+ }
241
+ function ownPositionNamed(world, name) {
242
+ const page = pagesWithName(world, name)[0];
243
+ return page?.type === "place" && page.system === undefined ? readPosition(page.fields.position) : undefined;
244
+ }
@@ -0,0 +1,46 @@
1
+ import type { Context } from "../core/context.ts";
2
+ import type { Problem } from "../core/problem.ts";
3
+ import { type Page, type World } from "../pages/index.ts";
4
+ import { type GameDate } from "../time/index.ts";
5
+ /** What a quest measures (D-367): its counters with a maximum, its clock with its name, its deadline with the game minutes left, and whether it is the main one. */
6
+ export interface QuestMeasures {
7
+ main: boolean;
8
+ counters: {
9
+ field: string;
10
+ value: number;
11
+ max: number;
12
+ }[];
13
+ clock?: {
14
+ value: number;
15
+ max: number;
16
+ name?: string;
17
+ };
18
+ deadline?: {
19
+ date: string;
20
+ minutes?: number;
21
+ };
22
+ }
23
+ /** What a quest measures, as its fields write it; a field that does not read is left out, and validate says why. */
24
+ export declare function questMeasures(page: Page, now: GameDate | undefined): QuestMeasures;
25
+ /** "clues 3/5, I rapitori lasciano la torre 2/6, deadline day 27, 10:00 (in 1d 2h)": what a quest measures, in the chat's words; empty when nothing. */
26
+ export declare function measuresText(measures: QuestMeasures): string;
27
+ /**
28
+ * What status says of an open quest (D-239, D-369): whether it is the main one, what it measures, and what to do when every goal is ticked or its deadline
29
+ * passed: the story's end is the master's to say, never the engine's.
30
+ */
31
+ export declare function openQuestText(page: Page, now: GameDate | undefined): string;
32
+ /** What write says when it makes a quest (D-239): every goal ticked. */
33
+ export declare function tickedQuestNotes(existing: Page | undefined, page: Page): string[];
34
+ /** What scene close says of each open quest whose goals are all ticked, and write of the one it leaves so. */
35
+ export declare function tickedQuestNote(page: Page): string;
36
+ /**
37
+ * What write says as a quest opens, made open or opened from planned (D-367, D-369): what the player's journal shows of it, so that the master writes it there.
38
+ * Kept in the output, never in the instructions, since only who opens a quest needs it.
39
+ */
40
+ export declare function newQuestNotes(existing: Page | undefined, page: Page): string[];
41
+ /** A public line as a quest the character knows is taken, done or failed (D-369): the story tells it. */
42
+ export declare function logQuestChange(root: string, context: Context, existing: Page | undefined, page: Page): void;
43
+ /** The quests whose deadline or clock does not read (D-369): the journal leaves them out, so validate says how to write them. */
44
+ export declare function questProblems(world: World): Problem[];
45
+ /** Whether a page is an open quest whose goals are all ticked. */
46
+ export declare function isTickedOpenQuest(page: Page | undefined): boolean;
@@ -0,0 +1,97 @@
1
+ import { appendLogEntry } from "../core/log.js";
2
+ import { comparableText } from "../core/text.js";
3
+ import { readCounter } from "../counters/index.js";
4
+ import { everyGoalTicked, isEmptyField } from "../pages/index.js";
5
+ import { formatDuration, formatGameDate, minutesBetween, readGameDate } from "../time/index.js";
6
+ import { newDatedLogEntry } from "./game-time.js";
7
+ // What the master does with such a quest.
8
+ const advice = "if the story has ended it, write status done";
9
+ // The fields of a quest the journal shows apart; any other counter is a bar.
10
+ const ownFields = new Set(["status", "kind", "giver", "place", "deadline", "clock", "clock-name"]);
11
+ // The statuses the player character knows a quest by (D-250).
12
+ const knownStatuses = ["open", "done", "failed"];
13
+ /** What a quest measures, as its fields write it; a field that does not read is left out, and validate says why. */
14
+ export function questMeasures(page, now) {
15
+ const counters = Object.entries(page.fields).filter(([field]) => !ownFields.has(field)).flatMap(([field, value]) => {
16
+ const counter = readCounter(value);
17
+ return counter?.max === undefined || counter.max < 1 ? [] : [{ field, value: counter.value, max: counter.max }];
18
+ });
19
+ const clock = readCounter(page.fields.clock);
20
+ const name = typeof page.fields["clock-name"] === "string" && page.fields["clock-name"].trim() !== "" ? page.fields["clock-name"].trim() : undefined;
21
+ const deadline = readGameDate(page.fields.deadline);
22
+ return {
23
+ main: (Array.isArray(page.fields.kind) ? page.fields.kind : [page.fields.kind]).some((kind) => comparableText(String(kind ?? "")) === "main"),
24
+ counters,
25
+ ...(clock?.max === undefined || clock.max < 1 ? {} : { clock: { value: clock.value, max: clock.max, ...(name === undefined ? {} : { name }) } }),
26
+ ...(deadline === undefined ? {} : { deadline: { date: formatGameDate(deadline), ...(now === undefined ? {} : { minutes: minutesBetween(now, deadline) }) } }),
27
+ };
28
+ }
29
+ /** "clues 3/5, I rapitori lasciano la torre 2/6, deadline day 27, 10:00 (in 1d 2h)": what a quest measures, in the chat's words; empty when nothing. */
30
+ export function measuresText(measures) {
31
+ const deadline = measures.deadline;
32
+ const left = deadline?.minutes === undefined ? "" : deadline.minutes <= 0 ? " (passed)" : ` (in ${formatDuration(deadline.minutes)})`;
33
+ return [
34
+ ...measures.counters.map((counter) => `${counter.field} ${counter.value}/${counter.max}`),
35
+ ...(measures.clock === undefined ? [] : [`${measures.clock.name ?? "clock"} ${measures.clock.value}/${measures.clock.max}`]),
36
+ ...(deadline === undefined ? [] : [`deadline ${deadline.date}${left}`]),
37
+ ].join(", ");
38
+ }
39
+ /**
40
+ * What status says of an open quest (D-239, D-369): whether it is the main one, what it measures, and what to do when every goal is ticked or its deadline
41
+ * passed: the story's end is the master's to say, never the engine's.
42
+ */
43
+ export function openQuestText(page, now) {
44
+ const measures = questMeasures(page, now);
45
+ const passed = measures.deadline?.minutes !== undefined && measures.deadline.minutes <= 0;
46
+ const notes = [
47
+ ...(measures.main ? ["main"] : []),
48
+ ...(measuresText(measures) === "" ? [] : [measuresText(measures)]),
49
+ ...(isTickedOpenQuest(page) ? [`every goal ticked: ${advice}`] : []),
50
+ ...(passed ? ["deadline passed: if the story has ended it, write status failed"] : []),
51
+ ];
52
+ return notes.length === 0 ? page.name : `${page.name} (${notes.join("; ")})`;
53
+ }
54
+ /** What write says when it makes a quest (D-239): every goal ticked. */
55
+ export function tickedQuestNotes(existing, page) {
56
+ return isTickedOpenQuest(page) && !isTickedOpenQuest(existing) ? [tickedQuestNote(page)] : [];
57
+ }
58
+ /** What scene close says of each open quest whose goals are all ticked, and write of the one it leaves so. */
59
+ export function tickedQuestNote(page) {
60
+ return `Every goal of ${page.name} is ticked and it is still open: ${advice}.`;
61
+ }
62
+ /**
63
+ * What write says as a quest opens, made open or opened from planned (D-367, D-369): what the player's journal shows of it, so that the master writes it there.
64
+ * Kept in the output, never in the instructions, since only who opens a quest needs it.
65
+ */
66
+ export function newQuestNotes(existing, page) {
67
+ return page.type === "quest" && page.fields.status === "open" && existing?.fields.status !== "open"
68
+ ? [
69
+ "The player's journal shows this quest now. Give it only what the story has, and keep each up to date: goals as - [ ] lines in the character's words, "
70
+ + "- [x] when done, new ones as they come up; a counter of steps the character can count, such as clues: 0/5; clock: 0/6 for a danger the character sees "
71
+ + "growing, with clock-name saying what happens when it fills; deadline: the date the character was given, such as day 27, 10:00, with what happens then "
72
+ + "as a planned event on that date; giver and place as links; kind: main for the one main quest; what was promised, in the text.",
73
+ ]
74
+ : [];
75
+ }
76
+ /** A public line as a quest the character knows is taken, done or failed (D-369): the story tells it. */
77
+ export function logQuestChange(root, context, existing, page) {
78
+ const status = String(page.fields.status ?? "");
79
+ if (page.type === "quest" && knownStatuses.includes(status) && existing?.fields.status !== page.fields.status) {
80
+ appendLogEntry(root, newDatedLogEntry(root, context, "quest-changed", "public", { quest: page.name, status }));
81
+ }
82
+ }
83
+ /** The quests whose deadline or clock does not read (D-369): the journal leaves them out, so validate says how to write them. */
84
+ export function questProblems(world) {
85
+ return world.pages.filter((page) => page.type === "quest").flatMap((page) => [
86
+ ...(!isEmptyField(page.fields.deadline) && readGameDate(page.fields.deadline) === undefined
87
+ ? [{ path: page.path, message: `The deadline of ${page.name}, ${JSON.stringify(page.fields.deadline)}, is not a game date.`, fix: "write it as day 27, 10:00" }]
88
+ : []),
89
+ ...(!isEmptyField(page.fields.clock) && (readCounter(page.fields.clock)?.max ?? 0) < 1
90
+ ? [{ path: page.path, message: `The clock of ${page.name}, ${JSON.stringify(page.fields.clock)}, has no maximum.`, fix: "write it as 0/6" }]
91
+ : []),
92
+ ]);
93
+ }
94
+ /** Whether a page is an open quest whose goals are all ticked. */
95
+ export function isTickedOpenQuest(page) {
96
+ return page?.type === "quest" && page.fields.status === "open" && everyGoalTicked(page.body);
97
+ }
@@ -0,0 +1,34 @@
1
+ import type { Effect } from "../effects/index.ts";
2
+ import { type Page, type World } from "../pages/index.ts";
3
+ import type { GameSystem, Recipe } from "../systems/index.ts";
4
+ /** The recipe of the game system with this name, with the system; refused, with those it has, when it has none. */
5
+ export declare function recipeNamed(system: GameSystem | undefined, name: string): {
6
+ system: GameSystem;
7
+ recipe: Recipe;
8
+ };
9
+ /** The pages a recipe without a page goes to: the living player characters, and the living companions where one of them is. */
10
+ export declare function partyPages(world: World): Page[];
11
+ /** The effects of a page split by the recipe: those that last until one of its occasions, which it ends (DAT-5), and the others. */
12
+ export declare function effectsAtRecipe(page: Page, recipe: Recipe): {
13
+ ending: Effect[];
14
+ remaining: Effect[];
15
+ };
16
+ /**
17
+ * The counters of a page that the recipe brings back, as the page reads them, with the value each goes to (DAT-4, DAT-9): "max", which a counter without a
18
+ * maximum cannot take, or a value. Those it names, then the uses whose occasion it ends, as much as their refill gives, then those it regains, when no choice
19
+ * is left to the player.
20
+ */
21
+ export declare function recipeTargets(world: World, recipe: Recipe, page: Page): {
22
+ field: string;
23
+ target: "max" | number;
24
+ }[];
25
+ /**
26
+ * What a recipe's regain leaves to the player (DAT-4): "which hit-dice come back, up to 2 of hit-dice-d10 1/3, hit-dice-d6 0/2", when fewer
27
+ * come back than are spent, in more than one counter.
28
+ */
29
+ export declare function recipeChoices(world: World, recipe: Recipe, page: Page): string[];
30
+ /**
31
+ * The page's other counters away from their usual value, which the recipe leaves to the master: their maximum, or zero for those the status line shows only
32
+ * when they are not, such as exhaustion; each with the rule of a threshold it is at, or of one without a value, as in "exhaustion 1/6 (rules "Exhaustion")".
33
+ */
34
+ export declare function notBroughtBack(world: World, system: GameSystem, recipe: Recipe, page: Page): string[];
@@ -0,0 +1,109 @@
1
+ // The recipes of a game system (D-185, DAT-4): which pages a rest goes to, the effects it ends, the fields it brings back, and what it leaves to the master.
2
+ import { comparableText } from "../core/text.js";
3
+ import { readCounter } from "../counters/index.js";
4
+ import { isDeclaredUncounted, isInParty, locate } from "../pages/index.js";
5
+ import { effectiveFields, effectsOf } from "./effect-layer.js";
6
+ import { formulaValue, refillAmount } from "./worked-out.js";
7
+ /** The recipe of the game system with this name, with the system; refused, with those it has, when it has none. */
8
+ export function recipeNamed(system, name) {
9
+ const recipe = system?.recipes.find((candidate) => comparableText(candidate.name) === comparableText(name.trim()));
10
+ if (system === undefined || recipe === undefined) {
11
+ const recipes = system === undefined || system.recipes.length === 0 ? "" : ` Its recipes: ${system.recipes.map((candidate) => candidate.name).join(", ")}.`;
12
+ throw new Error(`${system === undefined ? "The campaign has no game system, so it has no" : `The system ${system.name} has no`} recipe "${name.trim()}".${recipes} Nothing changed.`);
13
+ }
14
+ return { system, recipe };
15
+ }
16
+ /** The pages a recipe without a page goes to: the living player characters, and the living companions where one of them is. */
17
+ export function partyPages(world) {
18
+ const players = world.pages.filter((page) => isInParty(page) && page.fields.role === "pc");
19
+ const places = new Set(players.map((page) => locate(world, page).chain[0]?.name));
20
+ const companions = world.pages.filter((page) => isInParty(page) && page.fields.role === "companion" && places.has(locate(world, page).chain[0]?.name));
21
+ return [...players, ...companions];
22
+ }
23
+ /** The effects of a page split by the recipe: those that last until one of its occasions, which it ends (DAT-5), and the others. */
24
+ export function effectsAtRecipe(page, recipe) {
25
+ const ends = (effect) => {
26
+ const end = effect.end;
27
+ return end !== undefined && "occasion" in end && recipe.ends.some((occasion) => comparableText(occasion) === comparableText(end.occasion));
28
+ };
29
+ const effects = effectsOf(page);
30
+ return { ending: effects.filter(ends), remaining: effects.filter((effect) => !ends(effect)) };
31
+ }
32
+ /**
33
+ * The counters of a page that the recipe brings back, as the page reads them, with the value each goes to (DAT-4, DAT-9): "max", which a counter without a
34
+ * maximum cannot take, or a value. Those it names, then the uses whose occasion it ends, as much as their refill gives, then those it regains, when no choice
35
+ * is left to the player.
36
+ */
37
+ export function recipeTargets(world, recipe, page) {
38
+ const fields = effectiveFields(world, page);
39
+ const named = Object.entries(fields).flatMap(([field, value]) => {
40
+ const target = targetOf(recipe, field);
41
+ const counter = isDeclaredUncounted(world, field) ? undefined : readCounter(value);
42
+ return target === undefined || counter === undefined || (target === "max" && counter.max === undefined) ? [] : [{ field, target }];
43
+ });
44
+ const refilled = Object.entries(fields).flatMap(([field, value]) => {
45
+ const counter = isDeclaredUncounted(world, field) || targetOf(recipe, field) !== undefined ? undefined : readCounter(value);
46
+ const amount = counter?.max === undefined ? undefined : refillAmount(world, fields, field, recipe.ends, counter.max);
47
+ return counter?.max === undefined || amount === undefined || amount === 0 || counter.value >= counter.max ? [] : [{ field, target: Math.min(counter.max, counter.value + amount) }];
48
+ });
49
+ return [...named, ...refilled, ...regainsOf(world, recipe, fields).flatMap((pool) => pool.targets)];
50
+ }
51
+ /**
52
+ * What a recipe's regain leaves to the player (DAT-4): "which hit-dice come back, up to 2 of hit-dice-d10 1/3, hit-dice-d6 0/2", when fewer
53
+ * come back than are spent, in more than one counter.
54
+ */
55
+ export function recipeChoices(world, recipe, page) {
56
+ return regainsOf(world, recipe, effectiveFields(world, page)).flatMap((pool) => (pool.choice === undefined ? [] : [pool.choice]));
57
+ }
58
+ /**
59
+ * The page's other counters away from their usual value, which the recipe leaves to the master: their maximum, or zero for those the status line shows only
60
+ * when they are not, such as exhaustion; each with the rule of a threshold it is at, or of one without a value, as in "exhaustion 1/6 (rules "Exhaustion")".
61
+ */
62
+ export function notBroughtBack(world, system, recipe, page) {
63
+ const atZero = (field) => system.statusLine.some((entry) => entry.whenSet && comparableText(entry.field) === comparableText(field));
64
+ return Object.entries(effectiveFields(world, page)).flatMap(([field, value]) => {
65
+ // What the recipe sets, or leaves to the player among what it regains, is not left to the master.
66
+ const handled = targetOf(recipe, field) !== undefined || regainOf(recipe, field) !== undefined;
67
+ const counter = isDeclaredUncounted(world, field) || handled ? undefined : readCounter(value);
68
+ if (counter?.max === undefined || counter.value === (atZero(field) ? 0 : counter.max)) {
69
+ return [];
70
+ }
71
+ // The rule of a threshold that holds at every value, or at this one.
72
+ const rule = system.thresholds.find((threshold) => comparableText(threshold.field) === comparableText(field) && (threshold.value === undefined || threshold.value === counter.value))?.rule;
73
+ return [`${field} ${String(value).trim()}${rule === undefined ? "" : ` (rules "${rule}")`}`];
74
+ });
75
+ }
76
+ /**
77
+ * The regains of a recipe on these fields (DAT-4): for each, the counters it names that are spent and how many come back in all. When all that is spent comes
78
+ * back, or only one counter is spent, they are targets; otherwise the player chooses.
79
+ */
80
+ function regainsOf(world, recipe, fields) {
81
+ return Object.entries(recipe.regain).flatMap(([name, formula]) => {
82
+ const spent = Object.entries(fields).flatMap(([field, value]) => {
83
+ const counter = isDeclaredUncounted(world, field) || !matches(name, field) ? undefined : readCounter(value);
84
+ return counter?.max === undefined || counter.value >= counter.max ? [] : [{ field, value: counter.value, max: counter.max }];
85
+ });
86
+ const budget = Math.max(0, Math.floor(formulaValue(world, fields, formula) ?? 0));
87
+ const missing = spent.reduce((total, counter) => total + counter.max - counter.value, 0);
88
+ if (spent.length === 0 || budget === 0) {
89
+ return [];
90
+ }
91
+ if (missing <= budget || spent.length === 1) {
92
+ return [{ targets: spent.map((counter) => ({ field: counter.field, target: Math.min(counter.max, counter.value + budget) })) }];
93
+ }
94
+ const counters = spent.map((counter) => `${counter.field} ${counter.value}/${counter.max}`).join(", ");
95
+ return [{ targets: [], choice: `which ${name.replace(/-?\*$/, "")} come back, up to ${budget} of ${counters}: change each one by what they take` }];
96
+ });
97
+ }
98
+ /** The regain of a recipe that names a field, by its name or by a name ending in *. */
99
+ function regainOf(recipe, field) {
100
+ return Object.keys(recipe.regain).find((name) => matches(name, field));
101
+ }
102
+ function matches(name, field) {
103
+ return name.endsWith("*") ? comparableText(field).startsWith(comparableText(name.slice(0, -1))) : comparableText(name) === comparableText(field);
104
+ }
105
+ /** What a recipe asks of a field: "max", a value, or nothing; a name ending in * stands for every field that begins so, such as slots-*. */
106
+ function targetOf(recipe, field) {
107
+ const entry = Object.entries(recipe.set).find(([name]) => name.endsWith("*") ? comparableText(field).startsWith(comparableText(name.slice(0, -1))) : comparableText(name) === comparableText(field));
108
+ return entry?.[1];
109
+ }
@@ -0,0 +1,22 @@
1
+ import { type Effect } from "../effects/index.ts";
2
+ import type { Page, World } from "../pages/index.ts";
3
+ import type { Scene } from "../scene/index.ts";
4
+ import type { GameSystem } from "../systems/index.ts";
5
+ /** "Viola keeps Eroismo (Corrado): lost 7 hp. Read rules Concentration.": what someone keeps alive, when the counter the game system names goes down by `lost` (EFF-14). */
6
+ export declare function keepingLossNote(world: World, scene: Scene | undefined, system: GameSystem | undefined, name: string, field: string, lost: number): string;
7
+ /** "Corrado keeps Scudo della fede (Viola): now Paralyzed. Read rules Concentration.": what someone keeps alive, when they take a condition the game system names (EFF-14). */
8
+ export declare function keepingConditionNote(world: World, scene: Scene | undefined, system: GameSystem | undefined, name: string, condition: string): string;
9
+ /**
10
+ * "Malco already keeps Scudo della fede (Malco). Read rules Concentration.": someone given one more effect to keep alive, read in the world before it was added (EFF-14).
11
+ * The same effect on another target is the same thing kept, as Bless on three.
12
+ */
13
+ export declare function secondKeptNote(world: World, scene: Scene | undefined, system: GameSystem | undefined, effect: Effect): string;
14
+ /** "End of Malco's turn: Paralyzed (by Corrado). Start of Ghoul 1's turn: In fiamme.": the effects on who ends a turn and on who starts the next, as the turn passes (EFF-15). */
15
+ export declare function turnEffectsNote(world: World, scene: Scene | undefined, ending: string | undefined, starting: string): string;
16
+ /** "Still on Corrado, with no end: Mummy Rot.": the effects without an end on who rests, whose text may ask for something at a rest (EFF-15). */
17
+ export declare function restingEffectsNote(page: Page): string;
18
+ /**
19
+ * "Corrado has temp-hp 3, which goes first: …": a counter that shields the one that went down by `lost`, while it is above 0 (DAT-14). The change took it all
20
+ * from the shielded counter: the note says how to put it right.
21
+ */
22
+ export declare function shieldNotes(world: World, system: GameSystem | undefined, page: Page, field: string, lost: number): string[];
@@ -0,0 +1,74 @@
1
+ // What a fight asks the master to keep by hand, said when it happens (D-266): what can break what someone keeps alive (EFF-14), the effects at a turn and at a rest
2
+ // (EFF-15), the counter that shields another (DAT-14). The engine only says it: it ends and changes nothing by itself.
3
+ import { comparableText } from "../core/text.js";
4
+ import { readCounter } from "../counters/index.js";
5
+ import { keeperOf } from "../effects/index.js";
6
+ import { effectiveFields, effectsOf } from "./effect-layer.js";
7
+ import { effectsOn, keptEffectHolders, keptEffects } from "./game-effects.js";
8
+ /** "Viola keeps Eroismo (Corrado): lost 7 hp. Read rules Concentration.": what someone keeps alive, when the counter the game system names goes down by `lost` (EFF-14). */
9
+ export function keepingLossNote(world, scene, system, name, field, lost) {
10
+ const keeping = system?.keeping;
11
+ // Damage a shield takes first, as temporary hit points, is damage still.
12
+ const shielded = Object.entries(system?.shields ?? {}).find(([shield]) => comparableText(shield) === comparableText(field))?.[1] ?? field;
13
+ if (keeping === undefined || comparableText(shielded) !== comparableText(keeping.counter) || !(lost > 0)) {
14
+ return "";
15
+ }
16
+ const kept = keptEffects(world, scene, name);
17
+ return kept.length === 0 ? "" : `${name} keeps ${kept.join(" · ")}: lost ${lost} ${field}. Read rules ${keeping.rules}.`;
18
+ }
19
+ /** "Corrado keeps Scudo della fede (Viola): now Paralyzed. Read rules Concentration.": what someone keeps alive, when they take a condition the game system names (EFF-14). */
20
+ export function keepingConditionNote(world, scene, system, name, condition) {
21
+ const keeping = system?.keeping;
22
+ if (keeping === undefined || !keeping.conditions.some((named) => comparableText(named) === comparableText(condition))) {
23
+ return "";
24
+ }
25
+ const kept = keptEffects(world, scene, name);
26
+ return kept.length === 0 ? "" : `${name} keeps ${kept.join(" · ")}: now ${condition}. Read rules ${keeping.rules}.`;
27
+ }
28
+ /**
29
+ * "Malco already keeps Scudo della fede (Malco). Read rules Concentration.": someone given one more effect to keep alive, read in the world before it was added (EFF-14).
30
+ * The same effect on another target is the same thing kept, as Bless on three.
31
+ */
32
+ export function secondKeptNote(world, scene, system, effect) {
33
+ const keeper = keeperOf(effect);
34
+ if (system?.keeping === undefined || keeper === undefined) {
35
+ return "";
36
+ }
37
+ const others = keptEffectHolders(world, scene, keeper).filter((kept) => comparableText(kept.effect) !== comparableText(effect.name));
38
+ return others.length === 0 ? "" : `${keeper} already keeps ${others.map((kept) => `${kept.effect} (${kept.holders.join(", ")})`).join(" · ")}. Read rules ${system.keeping.rules}.`;
39
+ }
40
+ /** "End of Malco's turn: Paralyzed (by Corrado). Start of Ghoul 1's turn: In fiamme.": the effects on who ends a turn and on who starts the next, as the turn passes (EFF-15). */
41
+ export function turnEffectsNote(world, scene, ending, starting) {
42
+ const on = (name) => effectsOn(world, scene, name).map(effectWithKeeper);
43
+ const parts = [
44
+ ending === undefined || on(ending).length === 0 ? "" : `End of ${ending}'s turn: ${on(ending).join(", ")}.`,
45
+ on(starting).length === 0 ? "" : `Start of ${starting}'s turn: ${on(starting).join(", ")}.`,
46
+ ].filter((part) => part !== "");
47
+ return parts.length === 0 ? "" : `${parts.join(" ")} Read in their text what acts now.`;
48
+ }
49
+ /** "Still on Corrado, with no end: Mummy Rot.": the effects without an end on who rests, whose text may ask for something at a rest (EFF-15). */
50
+ export function restingEffectsNote(page) {
51
+ const endless = effectsOf(page).filter((effect) => effect.end === undefined).map(effectWithKeeper);
52
+ return endless.length === 0 ? "" : `Still on ${page.name}, with no end: ${endless.join(", ")}. Read in their text whether a rest asks for something.`;
53
+ }
54
+ /**
55
+ * "Corrado has temp-hp 3, which goes first: …": a counter that shields the one that went down by `lost`, while it is above 0 (DAT-14). The change took it all
56
+ * from the shielded counter: the note says how to put it right.
57
+ */
58
+ export function shieldNotes(world, system, page, field, lost) {
59
+ if (system === undefined || !(lost > 0)) {
60
+ return [];
61
+ }
62
+ const fields = Object.entries(effectiveFields(world, page));
63
+ return Object.entries(system.shields).filter(([, shielded]) => comparableText(shielded) === comparableText(field)).flatMap(([shield]) => {
64
+ const value = readCounter(fields.find(([name]) => comparableText(name) === comparableText(shield))?.[1])?.value ?? 0;
65
+ const rule = system.thresholds.find((threshold) => comparableText(threshold.field) === comparableText(shield))?.rule;
66
+ const read = rule === undefined ? "" : ` Read rules ${rule}.`;
67
+ return value > 0 ? [`${page.name} has ${shield} ${value}, which goes first: if this was damage, give ${field} back what ${shield} takes and take it from ${shield}, with change.${read}`] : [];
68
+ });
69
+ }
70
+ /** "Paralyzed (by Corrado)": an effect with who keeps it alive. */
71
+ function effectWithKeeper(effect) {
72
+ const keeper = keeperOf(effect);
73
+ return keeper === undefined ? effect.name : `${effect.name} (by ${keeper})`;
74
+ }