rpg-engine 0.0.0-stage → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +101 -2
- package/dist/campaign/create-campaign.d.ts +6 -0
- package/dist/campaign/create-campaign.js +71 -0
- package/dist/campaign/find-campaign.d.ts +8 -0
- package/dist/campaign/find-campaign.js +28 -0
- package/dist/campaign/host-files.d.ts +16 -0
- package/dist/campaign/host-files.js +134 -0
- package/dist/campaign/index.d.ts +5 -0
- package/dist/campaign/index.js +6 -0
- package/dist/campaign/settings.d.ts +185 -0
- package/dist/campaign/settings.js +399 -0
- package/dist/campaign/state.d.ts +15 -0
- package/dist/campaign/state.js +52 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +19 -0
- package/dist/command-line.d.ts +7 -0
- package/dist/command-line.js +140 -0
- package/dist/commands/advance.d.ts +7 -0
- package/dist/commands/advance.js +80 -0
- package/dist/commands/ask.d.ts +33 -0
- package/dist/commands/ask.js +280 -0
- package/dist/commands/change.d.ts +69 -0
- package/dist/commands/change.js +604 -0
- package/dist/commands/config.d.ts +59 -0
- package/dist/commands/config.js +512 -0
- package/dist/commands/effect-layer.d.ts +22 -0
- package/dist/commands/effect-layer.js +84 -0
- package/dist/commands/effect.d.ts +27 -0
- package/dist/commands/effect.js +369 -0
- package/dist/commands/find.d.ts +34 -0
- package/dist/commands/find.js +64 -0
- package/dist/commands/game-advance.d.ts +50 -0
- package/dist/commands/game-advance.js +103 -0
- package/dist/commands/game-effects.d.ts +68 -0
- package/dist/commands/game-effects.js +196 -0
- package/dist/commands/game-environment.d.ts +16 -0
- package/dist/commands/game-environment.js +24 -0
- package/dist/commands/game-events.d.ts +84 -0
- package/dist/commands/game-events.js +325 -0
- package/dist/commands/game-experience.d.ts +57 -0
- package/dist/commands/game-experience.js +119 -0
- package/dist/commands/game-grid-moves.d.ts +33 -0
- package/dist/commands/game-grid-moves.js +94 -0
- package/dist/commands/game-grids.d.ts +52 -0
- package/dist/commands/game-grids.js +162 -0
- package/dist/commands/game-here.d.ts +40 -0
- package/dist/commands/game-here.js +100 -0
- package/dist/commands/game-images.d.ts +31 -0
- package/dist/commands/game-images.js +87 -0
- package/dist/commands/game-journey.d.ts +62 -0
- package/dist/commands/game-journey.js +163 -0
- package/dist/commands/game-knowledge.d.ts +32 -0
- package/dist/commands/game-knowledge.js +120 -0
- package/dist/commands/game-maps.d.ts +20 -0
- package/dist/commands/game-maps.js +51 -0
- package/dist/commands/game-mode.d.ts +31 -0
- package/dist/commands/game-mode.js +128 -0
- package/dist/commands/game-money.d.ts +17 -0
- package/dist/commands/game-money.js +55 -0
- package/dist/commands/game-moods.d.ts +22 -0
- package/dist/commands/game-moods.js +32 -0
- package/dist/commands/game-moves.d.ts +14 -0
- package/dist/commands/game-moves.js +43 -0
- package/dist/commands/game-open.d.ts +18 -0
- package/dist/commands/game-open.js +47 -0
- package/dist/commands/game-outside.d.ts +14 -0
- package/dist/commands/game-outside.js +151 -0
- package/dist/commands/game-positions.d.ts +52 -0
- package/dist/commands/game-positions.js +244 -0
- package/dist/commands/game-quests.d.ts +46 -0
- package/dist/commands/game-quests.js +97 -0
- package/dist/commands/game-recipes.d.ts +34 -0
- package/dist/commands/game-recipes.js +109 -0
- package/dist/commands/game-reminders.d.ts +22 -0
- package/dist/commands/game-reminders.js +74 -0
- package/dist/commands/game-roads.d.ts +90 -0
- package/dist/commands/game-roads.js +284 -0
- package/dist/commands/game-rules.d.ts +17 -0
- package/dist/commands/game-rules.js +30 -0
- package/dist/commands/game-saves.d.ts +59 -0
- package/dist/commands/game-saves.js +249 -0
- package/dist/commands/game-scene.d.ts +69 -0
- package/dist/commands/game-scene.js +285 -0
- package/dist/commands/game-thresholds.d.ts +13 -0
- package/dist/commands/game-thresholds.js +41 -0
- package/dist/commands/game-time.d.ts +17 -0
- package/dist/commands/game-time.js +42 -0
- package/dist/commands/game-view-journal.d.ts +145 -0
- package/dist/commands/game-view-journal.js +129 -0
- package/dist/commands/game-view-map.d.ts +78 -0
- package/dist/commands/game-view-map.js +266 -0
- package/dist/commands/game-view-place.d.ts +160 -0
- package/dist/commands/game-view-place.js +388 -0
- package/dist/commands/game-world.d.ts +60 -0
- package/dist/commands/game-world.js +204 -0
- package/dist/commands/image.d.ts +19 -0
- package/dist/commands/image.js +185 -0
- package/dist/commands/index.d.ts +3 -0
- package/dist/commands/index.js +57 -0
- package/dist/commands/init.d.ts +23 -0
- package/dist/commands/init.js +44 -0
- package/dist/commands/install.d.ts +23 -0
- package/dist/commands/install.js +68 -0
- package/dist/commands/instructions.d.ts +4 -0
- package/dist/commands/instructions.js +97 -0
- package/dist/commands/mode.d.ts +23 -0
- package/dist/commands/mode.js +84 -0
- package/dist/commands/mood.d.ts +34 -0
- package/dist/commands/mood.js +113 -0
- package/dist/commands/move.d.ts +34 -0
- package/dist/commands/move.js +274 -0
- package/dist/commands/notes.d.ts +10 -0
- package/dist/commands/notes.js +37 -0
- package/dist/commands/page-counters.d.ts +24 -0
- package/dist/commands/page-counters.js +84 -0
- package/dist/commands/parts.d.ts +16 -0
- package/dist/commands/parts.js +49 -0
- package/dist/commands/problems.d.ts +5 -0
- package/dist/commands/problems.js +47 -0
- package/dist/commands/progression.d.ts +68 -0
- package/dist/commands/progression.js +206 -0
- package/dist/commands/rename.d.ts +16 -0
- package/dist/commands/rename.js +116 -0
- package/dist/commands/reveal.d.ts +25 -0
- package/dist/commands/reveal.js +193 -0
- package/dist/commands/roll.d.ts +56 -0
- package/dist/commands/roll.js +302 -0
- package/dist/commands/route.d.ts +19 -0
- package/dist/commands/route.js +110 -0
- package/dist/commands/rules.d.ts +48 -0
- package/dist/commands/rules.js +194 -0
- package/dist/commands/save.d.ts +68 -0
- package/dist/commands/save.js +141 -0
- package/dist/commands/scene.d.ts +105 -0
- package/dist/commands/scene.js +741 -0
- package/dist/commands/sheet.d.ts +136 -0
- package/dist/commands/sheet.js +445 -0
- package/dist/commands/show.d.ts +76 -0
- package/dist/commands/show.js +216 -0
- package/dist/commands/status.d.ts +54 -0
- package/dist/commands/status.js +291 -0
- package/dist/commands/translate.d.ts +23 -0
- package/dist/commands/translate.js +108 -0
- package/dist/commands/travel.d.ts +47 -0
- package/dist/commands/travel.js +457 -0
- package/dist/commands/validate.d.ts +4 -0
- package/dist/commands/validate.js +25 -0
- package/dist/commands/view.d.ts +272 -0
- package/dist/commands/view.js +623 -0
- package/dist/commands/worked-out.d.ts +116 -0
- package/dist/commands/worked-out.js +704 -0
- package/dist/commands/write.d.ts +51 -0
- package/dist/commands/write.js +1017 -0
- package/dist/core/command-reference.d.ts +6 -0
- package/dist/core/command-reference.js +47 -0
- package/dist/core/context.d.ts +140 -0
- package/dist/core/context.js +28 -0
- package/dist/core/field-kind.d.ts +6 -0
- package/dist/core/field-kind.js +5 -0
- package/dist/core/files.d.ts +4 -0
- package/dist/core/files.js +30 -0
- package/dist/core/formula.d.ts +164 -0
- package/dist/core/formula.js +590 -0
- package/dist/core/frozen.d.ts +2 -0
- package/dist/core/frozen.js +11 -0
- package/dist/core/length.d.ts +27 -0
- package/dist/core/length.js +49 -0
- package/dist/core/log.d.ts +27 -0
- package/dist/core/log.js +38 -0
- package/dist/core/memo.d.ts +2 -0
- package/dist/core/memo.js +17 -0
- package/dist/core/mood.d.ts +6 -0
- package/dist/core/mood.js +11 -0
- package/dist/core/problem.d.ts +6 -0
- package/dist/core/problem.js +1 -0
- package/dist/core/progression-rule.d.ts +21 -0
- package/dist/core/progression-rule.js +2 -0
- package/dist/core/registry.d.ts +31 -0
- package/dist/core/registry.js +25 -0
- package/dist/core/session-store.d.ts +90 -0
- package/dist/core/session-store.js +289 -0
- package/dist/core/store.d.ts +83 -0
- package/dist/core/store.js +224 -0
- package/dist/core/text.d.ts +12 -0
- package/dist/core/text.js +32 -0
- package/dist/core/version.d.ts +2 -0
- package/dist/core/version.js +6 -0
- package/dist/core/yaml-file.d.ts +10 -0
- package/dist/core/yaml-file.js +42 -0
- package/dist/counters/counter.d.ts +36 -0
- package/dist/counters/counter.js +59 -0
- package/dist/counters/index.d.ts +1 -0
- package/dist/counters/index.js +2 -0
- package/dist/dashboard/address.js +43 -0
- package/dist/dashboard/api.js +185 -0
- package/dist/dashboard/app.js +217 -0
- package/dist/dashboard/asked.js +132 -0
- package/dist/dashboard/assets/dice/dice-sharp.glb +0 -0
- package/dist/dashboard/assets/dice/dice.glb +0 -0
- package/dist/dashboard/assets/dice/dice.json +1 -0
- package/dist/dashboard/assets/dice/textures/ash.jpg +0 -0
- package/dist/dashboard/assets/dice/textures/granite.jpg +0 -0
- package/dist/dashboard/assets/dice/textures/marble.jpg +0 -0
- package/dist/dashboard/assets/dice/textures/onyx.jpg +0 -0
- package/dist/dashboard/assets/dice/textures/walnut.jpg +0 -0
- package/dist/dashboard/assets/favicon.svg +7 -0
- package/dist/dashboard/assets/icon-180.png +0 -0
- package/dist/dashboard/assets/icon-32.png +0 -0
- package/dist/dashboard/assets/master.svg +71 -0
- package/dist/dashboard/assets/sounds/dice-collision.wav +0 -0
- package/dist/dashboard/assets/sounds/dice-touch.wav +0 -0
- package/dist/dashboard/card.js +61 -0
- package/dist/dashboard/columns.js +37 -0
- package/dist/dashboard/combat.js +72 -0
- package/dist/dashboard/data.js +3 -0
- package/dist/dashboard/dice/burn.js +200 -0
- package/dist/dashboard/dice/celebration.js +199 -0
- package/dist/dashboard/dice/floor-cracks.js +149 -0
- package/dist/dashboard/dice/frost.js +51 -0
- package/dist/dashboard/dice/load.js +66 -0
- package/dist/dashboard/dice/models.js +138 -0
- package/dist/dashboard/dice/pool.js +49 -0
- package/dist/dashboard/dice/roller.js +101 -0
- package/dist/dashboard/dice/sets.js +49 -0
- package/dist/dashboard/dice/sounds.js +102 -0
- package/dist/dashboard/dice/stage.js +355 -0
- package/dist/dashboard/dice/throw.js +242 -0
- package/dist/dashboard/dice/tray.js +365 -0
- package/dist/dashboard/faces.js +16 -0
- package/dist/dashboard/footer.js +17 -0
- package/dist/dashboard/free-rolls.js +41 -0
- package/dist/dashboard/game-words.js +164 -0
- package/dist/dashboard/glass.js +12 -0
- package/dist/dashboard/guide/ar.md +308 -0
- package/dist/dashboard/guide/cs.md +308 -0
- package/dist/dashboard/guide/da.md +308 -0
- package/dist/dashboard/guide/de.md +308 -0
- package/dist/dashboard/guide/el.md +308 -0
- package/dist/dashboard/guide/en.md +307 -0
- package/dist/dashboard/guide/es.md +308 -0
- package/dist/dashboard/guide/fi.md +308 -0
- package/dist/dashboard/guide/fr.md +308 -0
- package/dist/dashboard/guide/he.md +308 -0
- package/dist/dashboard/guide/hi.md +308 -0
- package/dist/dashboard/guide/hu.md +308 -0
- package/dist/dashboard/guide/is.md +308 -0
- package/dist/dashboard/guide/it.md +308 -0
- package/dist/dashboard/guide/ja.md +308 -0
- package/dist/dashboard/guide/ko.md +308 -0
- package/dist/dashboard/guide/nb.md +308 -0
- package/dist/dashboard/guide/nl.md +308 -0
- package/dist/dashboard/guide/pl.md +308 -0
- package/dist/dashboard/guide/pt.md +308 -0
- package/dist/dashboard/guide/ro.md +308 -0
- package/dist/dashboard/guide/ru.md +308 -0
- package/dist/dashboard/guide/sv.md +308 -0
- package/dist/dashboard/guide/tr.md +308 -0
- package/dist/dashboard/guide/uk.md +308 -0
- package/dist/dashboard/guide/zh.md +308 -0
- package/dist/dashboard/guide-blocks.js +72 -0
- package/dist/dashboard/guide-markdown.js +63 -0
- package/dist/dashboard/help.js +92 -0
- package/dist/dashboard/i18n/ar.json +670 -0
- package/dist/dashboard/i18n/cs.json +670 -0
- package/dist/dashboard/i18n/da.json +670 -0
- package/dist/dashboard/i18n/de.json +670 -0
- package/dist/dashboard/i18n/el.json +670 -0
- package/dist/dashboard/i18n/es.json +670 -0
- package/dist/dashboard/i18n/fi.json +670 -0
- package/dist/dashboard/i18n/fr.json +670 -0
- package/dist/dashboard/i18n/he.json +670 -0
- package/dist/dashboard/i18n/hi.json +670 -0
- package/dist/dashboard/i18n/hu.json +670 -0
- package/dist/dashboard/i18n/is.json +670 -0
- package/dist/dashboard/i18n/it.json +670 -0
- package/dist/dashboard/i18n/ja.json +670 -0
- package/dist/dashboard/i18n/ko.json +670 -0
- package/dist/dashboard/i18n/nb.json +670 -0
- package/dist/dashboard/i18n/nl.json +670 -0
- package/dist/dashboard/i18n/pl.json +670 -0
- package/dist/dashboard/i18n/pt.json +670 -0
- package/dist/dashboard/i18n/ro.json +670 -0
- package/dist/dashboard/i18n/ru.json +670 -0
- package/dist/dashboard/i18n/sv.json +670 -0
- package/dist/dashboard/i18n/tr.json +670 -0
- package/dist/dashboard/i18n/uk.json +670 -0
- package/dist/dashboard/i18n/zh.json +670 -0
- package/dist/dashboard/icons.js +123 -0
- package/dist/dashboard/journal.js +188 -0
- package/dist/dashboard/labels.js +226 -0
- package/dist/dashboard/language-choice.js +83 -0
- package/dist/dashboard/languages.js +144 -0
- package/dist/dashboard/layout.js +93 -0
- package/dist/dashboard/map-sheet.js +32 -0
- package/dist/dashboard/map-symbols.js +79 -0
- package/dist/dashboard/markdown.js +72 -0
- package/dist/dashboard/master.js +69 -0
- package/dist/dashboard/mood-faces.js +16 -0
- package/dist/dashboard/mood.js +27 -0
- package/dist/dashboard/notes.js +203 -0
- package/dist/dashboard/notices.js +24 -0
- package/dist/dashboard/pages.js +32 -0
- package/dist/dashboard/party.js +65 -0
- package/dist/dashboard/place-map-view.js +362 -0
- package/dist/dashboard/place-map.js +204 -0
- package/dist/dashboard/prefs.js +97 -0
- package/dist/dashboard/reactions.js +28 -0
- package/dist/dashboard/requested.js +32 -0
- package/dist/dashboard/rolls.js +240 -0
- package/dist/dashboard/saves.js +154 -0
- package/dist/dashboard/scene.js +63 -0
- package/dist/dashboard/settings.js +362 -0
- package/dist/dashboard/setup.js +195 -0
- package/dist/dashboard/sheet.js +180 -0
- package/dist/dashboard/status.js +42 -0
- package/dist/dashboard/story.js +51 -0
- package/dist/dashboard/style.css +9355 -0
- package/dist/dashboard/text.js +158 -0
- package/dist/dashboard/theme.js +32 -0
- package/dist/dashboard/top.js +156 -0
- package/dist/dashboard/widgets.js +69 -0
- package/dist/dashboard/world-map.js +523 -0
- package/dist/dashboard/world.js +357 -0
- package/dist/dashboard-server.d.ts +38 -0
- package/dist/dashboard-server.js +818 -0
- package/dist/dice/evaluate.d.ts +30 -0
- package/dist/dice/evaluate.js +90 -0
- package/dist/dice/format.d.ts +3 -0
- package/dist/dice/format.js +26 -0
- package/dist/dice/index.d.ts +4 -0
- package/dist/dice/index.js +5 -0
- package/dist/dice/notation.d.ts +43 -0
- package/dist/dice/notation.js +132 -0
- package/dist/dice/proof.d.ts +4 -0
- package/dist/dice/proof.js +12 -0
- package/dist/dice/roll-dice.d.ts +29 -0
- package/dist/dice/roll-dice.js +43 -0
- package/dist/dice/words.d.ts +12 -0
- package/dist/dice/words.js +21 -0
- package/dist/effects/effect.d.ts +57 -0
- package/dist/effects/effect.js +123 -0
- package/dist/effects/index.d.ts +1 -0
- package/dist/effects/index.js +2 -0
- package/dist/grid/grid.d.ts +53 -0
- package/dist/grid/grid.js +151 -0
- package/dist/grid/index.d.ts +2 -0
- package/dist/grid/index.js +2 -0
- package/dist/grid/paths.d.ts +27 -0
- package/dist/grid/paths.js +128 -0
- package/dist/images/images.d.ts +26 -0
- package/dist/images/images.js +74 -0
- package/dist/images/index.d.ts +1 -0
- package/dist/images/index.js +2 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/instructions/index.d.ts +17 -0
- package/dist/instructions/index.js +48 -0
- package/dist/map/geometry.d.ts +22 -0
- package/dist/map/geometry.js +66 -0
- package/dist/map/index.d.ts +3 -0
- package/dist/map/index.js +5 -0
- package/dist/map/looks.d.ts +9 -0
- package/dist/map/looks.js +57 -0
- package/dist/map/ways.d.ts +36 -0
- package/dist/map/ways.js +78 -0
- package/dist/mcp-server.d.ts +22 -0
- package/dist/mcp-server.js +289 -0
- package/dist/money/index.d.ts +1 -0
- package/dist/money/index.js +2 -0
- package/dist/money/money.d.ts +48 -0
- package/dist/money/money.js +218 -0
- package/dist/page-words.d.ts +46 -0
- package/dist/page-words.js +221 -0
- package/dist/pages/check.d.ts +9 -0
- package/dist/pages/check.js +345 -0
- package/dist/pages/containers.d.ts +34 -0
- package/dist/pages/containers.js +181 -0
- package/dist/pages/environment.d.ts +26 -0
- package/dist/pages/environment.js +118 -0
- package/dist/pages/index.d.ts +15 -0
- package/dist/pages/index.js +16 -0
- package/dist/pages/inheritance.d.ts +80 -0
- package/dist/pages/inheritance.js +260 -0
- package/dist/pages/maps.d.ts +11 -0
- package/dist/pages/maps.js +14 -0
- package/dist/pages/markdown.d.ts +59 -0
- package/dist/pages/markdown.js +271 -0
- package/dist/pages/page-file.d.ts +26 -0
- package/dist/pages/page-file.js +166 -0
- package/dist/pages/page-types.d.ts +17 -0
- package/dist/pages/page-types.js +18 -0
- package/dist/pages/positions.d.ts +11 -0
- package/dist/pages/positions.js +23 -0
- package/dist/pages/rename-page.d.ts +39 -0
- package/dist/pages/rename-page.js +109 -0
- package/dist/pages/roads.d.ts +11 -0
- package/dist/pages/roads.js +40 -0
- package/dist/pages/standard-fields.d.ts +31 -0
- package/dist/pages/standard-fields.js +142 -0
- package/dist/pages/system-pages.d.ts +35 -0
- package/dist/pages/system-pages.js +98 -0
- package/dist/pages/world.d.ts +174 -0
- package/dist/pages/world.js +349 -0
- package/dist/pages/write-page.d.ts +27 -0
- package/dist/pages/write-page.js +311 -0
- package/dist/pictures/briefs.d.ts +25 -0
- package/dist/pictures/briefs.js +145 -0
- package/dist/pictures/chosen.d.ts +5 -0
- package/dist/pictures/chosen.js +21 -0
- package/dist/pictures/claude.d.ts +14 -0
- package/dist/pictures/claude.js +129 -0
- package/dist/pictures/codex.d.ts +20 -0
- package/dist/pictures/codex.js +154 -0
- package/dist/pictures/helpers.d.ts +26 -0
- package/dist/pictures/helpers.js +219 -0
- package/dist/pictures/index.d.ts +6 -0
- package/dist/pictures/index.js +8 -0
- package/dist/pictures/stop.d.ts +3 -0
- package/dist/pictures/stop.js +10 -0
- package/dist/pictures/svg.d.ts +4 -0
- package/dist/pictures/svg.js +129 -0
- package/dist/player-notes/index.d.ts +1 -0
- package/dist/player-notes/index.js +2 -0
- package/dist/player-notes/notes.d.ts +21 -0
- package/dist/player-notes/notes.js +50 -0
- package/dist/progression/index.d.ts +1 -0
- package/dist/progression/index.js +1 -0
- package/dist/progression/level-table.d.ts +41 -0
- package/dist/progression/level-table.js +123 -0
- package/dist/rules/index.d.ts +3 -0
- package/dist/rules/index.js +4 -0
- package/dist/rules/rule-book.d.ts +31 -0
- package/dist/rules/rule-book.js +157 -0
- package/dist/rules/search.d.ts +18 -0
- package/dist/rules/search.js +101 -0
- package/dist/rules/shown.d.ts +19 -0
- package/dist/rules/shown.js +44 -0
- package/dist/saves/index.d.ts +1 -0
- package/dist/saves/index.js +2 -0
- package/dist/saves/saves.d.ts +14 -0
- package/dist/saves/saves.js +27 -0
- package/dist/scene/index.d.ts +1 -0
- package/dist/scene/index.js +2 -0
- package/dist/scene/scene.d.ts +46 -0
- package/dist/scene/scene.js +44 -0
- package/dist/systems/game-system.d.ts +236 -0
- package/dist/systems/game-system.js +593 -0
- package/dist/systems/index.d.ts +2 -0
- package/dist/systems/index.js +3 -0
- package/dist/systems/words.d.ts +9 -0
- package/dist/systems/words.js +23 -0
- package/dist/time/game-date.d.ts +20 -0
- package/dist/time/game-date.js +59 -0
- package/dist/time/index.d.ts +1 -0
- package/dist/time/index.js +2 -0
- package/dist/triggers/index.d.ts +1 -0
- package/dist/triggers/index.js +2 -0
- package/dist/triggers/trigger.d.ts +43 -0
- package/dist/triggers/trigger.js +98 -0
- package/instructions/author.md +1 -0
- package/instructions/buttons-physical-dice.md +1 -0
- package/instructions/buttons.md +1 -0
- package/instructions/combat.md +3 -0
- package/instructions/core.md +54 -0
- package/instructions/dashboard.md +7 -0
- package/instructions/mentor-hints.md +1 -0
- package/instructions/mentor-tutorial.md +1 -0
- package/instructions/new-day.md +1 -0
- package/instructions/play.md +23 -0
- package/instructions/prose-literary.md +1 -0
- package/instructions/prose-pulp.md +1 -0
- package/instructions/prose-wry.md +1 -0
- package/instructions/session-zero.md +3 -0
- package/instructions/setup.md +3 -0
- package/instructions/start.md +1 -0
- package/instructions/story-arcs.md +1 -0
- package/instructions/story-episodes.md +1 -0
- package/instructions/story-mystery.md +1 -0
- package/instructions/style.md +1 -0
- package/package.json +85 -4
- package/systems/5e/LICENSE.md +25 -0
- package/systems/5e/images/acid-blob.svg +1 -0
- package/systems/5e/images/angel-outfit.svg +1 -0
- package/systems/5e/images/angler-fish.svg +1 -0
- package/systems/5e/images/angular-spider.svg +1 -0
- package/systems/5e/images/animal-skull.svg +1 -0
- package/systems/5e/images/bad-gnome.svg +1 -0
- package/systems/5e/images/badger.svg +1 -0
- package/systems/5e/images/bandit.svg +1 -0
- package/systems/5e/images/barn-owl.svg +1 -0
- package/systems/5e/images/basset-hound-head.svg +1 -0
- package/systems/5e/images/bat.svg +1 -0
- package/systems/5e/images/bear-face.svg +1 -0
- package/systems/5e/images/bear-head.svg +1 -0
- package/systems/5e/images/beetle-shell.svg +1 -0
- package/systems/5e/images/berry-bush.svg +1 -0
- package/systems/5e/images/bestial-fangs.svg +1 -0
- package/systems/5e/images/big-wave.svg +1 -0
- package/systems/5e/images/black-knight-helm.svg +1 -0
- package/systems/5e/images/boar-tusks.svg +1 -0
- package/systems/5e/images/boar.svg +1 -0
- package/systems/5e/images/bone-gnawer.svg +1 -0
- package/systems/5e/images/breastplate.svg +1 -0
- package/systems/5e/images/brute.svg +1 -0
- package/systems/5e/images/camel-head.svg +1 -0
- package/systems/5e/images/carnivore-mouth.svg +1 -0
- package/systems/5e/images/cassowary-head.svg +1 -0
- package/systems/5e/images/cat.svg +1 -0
- package/systems/5e/images/centaur.svg +1 -0
- package/systems/5e/images/centipede.svg +1 -0
- package/systems/5e/images/charging-bull.svg +1 -0
- package/systems/5e/images/closed-barbute.svg +1 -0
- package/systems/5e/images/cobra.svg +1 -0
- package/systems/5e/images/condor-emblem.svg +1 -0
- package/systems/5e/images/cowled.svg +1 -0
- package/systems/5e/images/crab-claw.svg +1 -0
- package/systems/5e/images/crab.svg +1 -0
- package/systems/5e/images/croc-jaws.svg +1 -0
- package/systems/5e/images/crow-dive.svg +1 -0
- package/systems/5e/images/crown.svg +1 -0
- package/systems/5e/images/crowned-skull.svg +1 -0
- package/systems/5e/images/cube.svg +1 -0
- package/systems/5e/images/cultist-lorc.svg +1 -0
- package/systems/5e/images/cultist-skoll.svg +1 -0
- package/systems/5e/images/curled-tentacle.svg +1 -0
- package/systems/5e/images/daemon-skull.svg +1 -0
- package/systems/5e/images/deer-head.svg +1 -0
- package/systems/5e/images/desert-skull.svg +1 -0
- package/systems/5e/images/devil-mask.svg +1 -0
- package/systems/5e/images/diablo-skull.svg +1 -0
- package/systems/5e/images/dinosaur-rex.svg +1 -0
- package/systems/5e/images/direwolf.svg +1 -0
- package/systems/5e/images/djinn.svg +1 -0
- package/systems/5e/images/donkey.svg +1 -0
- package/systems/5e/images/dragon-head-faithtoken.svg +1 -0
- package/systems/5e/images/dragon-head-lorc.svg +1 -0
- package/systems/5e/images/dragon-shield.svg +1 -0
- package/systems/5e/images/dragon-spiral.svg +1 -0
- package/systems/5e/images/dread-skull.svg +1 -0
- package/systems/5e/images/duality-mask.svg +1 -0
- package/systems/5e/images/dust-cloud.svg +1 -0
- package/systems/5e/images/dwarf-face.svg +1 -0
- package/systems/5e/images/dwarf-helmet.svg +1 -0
- package/systems/5e/images/eagle-emblem.svg +1 -0
- package/systems/5e/images/eagle-head.svg +1 -0
- package/systems/5e/images/egyptian-sphinx.svg +1 -0
- package/systems/5e/images/elephant-head.svg +1 -0
- package/systems/5e/images/elf-ear.svg +1 -0
- package/systems/5e/images/elf-helmet.svg +1 -0
- package/systems/5e/images/ent-mouth.svg +1 -0
- package/systems/5e/images/ermine.svg +1 -0
- package/systems/5e/images/eruption.svg +1 -0
- package/systems/5e/images/evil-bat.svg +1 -0
- package/systems/5e/images/evil-minion.svg +1 -0
- package/systems/5e/images/evil-tree.svg +1 -0
- package/systems/5e/images/evil-wings.svg +1 -0
- package/systems/5e/images/eyestalk.svg +1 -0
- package/systems/5e/images/fairy.svg +1 -0
- package/systems/5e/images/farmer.svg +1 -0
- package/systems/5e/images/feline.svg +1 -0
- package/systems/5e/images/fire-silhouette.svg +1 -0
- package/systems/5e/images/fish-monster.svg +1 -0
- package/systems/5e/images/fleshy-mass.svg +1 -0
- package/systems/5e/images/fluffy-flame.svg +1 -0
- package/systems/5e/images/fly.svg +1 -0
- package/systems/5e/images/fox-head.svg +1 -0
- package/systems/5e/images/frankenstein-creature.svg +1 -0
- package/systems/5e/images/frog.svg +1 -0
- package/systems/5e/images/gargoyle.svg +1 -0
- package/systems/5e/images/gecko.svg +1 -0
- package/systems/5e/images/ghost.svg +1 -0
- package/systems/5e/images/giant.svg +1 -0
- package/systems/5e/images/goat.svg +1 -0
- package/systems/5e/images/goblin-head.svg +1 -0
- package/systems/5e/images/goblin.svg +1 -0
- package/systems/5e/images/golem-head.svg +1 -0
- package/systems/5e/images/gooey-daemon.svg +1 -0
- package/systems/5e/images/gorilla.svg +1 -0
- package/systems/5e/images/greek-sphinx.svg +1 -0
- package/systems/5e/images/griffin-symbol.svg +1 -0
- package/systems/5e/images/grim-reaper.svg +1 -0
- package/systems/5e/images/hanging-spider.svg +1 -0
- package/systems/5e/images/harpy.svg +1 -0
- package/systems/5e/images/hawk-emblem.svg +1 -0
- package/systems/5e/images/hooded-assassin.svg +1 -0
- package/systems/5e/images/horned-reptile.svg +1 -0
- package/systems/5e/images/horse-head-delapouite.svg +1 -0
- package/systems/5e/images/horse-head-lorc.svg +1 -0
- package/systems/5e/images/hound.svg +1 -0
- package/systems/5e/images/hydra.svg +1 -0
- package/systems/5e/images/hyena-head.svg +1 -0
- package/systems/5e/images/icicles-aura.svg +1 -0
- package/systems/5e/images/ifrit.svg +1 -0
- package/systems/5e/images/imp-laugh.svg +1 -0
- package/systems/5e/images/imp.svg +1 -0
- package/systems/5e/images/insect-jaws.svg +1 -0
- package/systems/5e/images/invisible-face.svg +1 -0
- package/systems/5e/images/jumping-dog.svg +1 -0
- package/systems/5e/images/kraken-tentacle.svg +1 -0
- package/systems/5e/images/labrador-head.svg +1 -0
- package/systems/5e/images/lion.svg +1 -0
- package/systems/5e/images/lizard-tongue.svg +1 -0
- package/systems/5e/images/lizardman.svg +1 -0
- package/systems/5e/images/long-antennae-bug.svg +1 -0
- package/systems/5e/images/long-legged-spider.svg +1 -0
- package/systems/5e/images/mammoth.svg +1 -0
- package/systems/5e/images/mandrill-head.svg +1 -0
- package/systems/5e/images/manta-ray.svg +1 -0
- package/systems/5e/images/masked-spider.svg +1 -0
- package/systems/5e/images/medusa-head.svg +1 -0
- package/systems/5e/images/mermaid.svg +1 -0
- package/systems/5e/images/metal-golem-head.svg +1 -0
- package/systems/5e/images/mimic-chest.svg +1 -0
- package/systems/5e/images/minotaur.svg +1 -0
- package/systems/5e/images/monk-face.svg +1 -0
- package/systems/5e/images/moon-bats.svg +1 -0
- package/systems/5e/images/mucous-pillar.svg +1 -0
- package/systems/5e/images/mummy-head.svg +1 -0
- package/systems/5e/images/mushrooms-cluster.svg +1 -0
- package/systems/5e/images/octopus.svg +1 -0
- package/systems/5e/images/ogre.svg +1 -0
- package/systems/5e/images/oni.svg +1 -0
- package/systems/5e/images/orc-head.svg +1 -0
- package/systems/5e/images/owl.svg +1 -0
- package/systems/5e/images/pan-flute.svg +1 -0
- package/systems/5e/images/pegasus.svg +1 -0
- package/systems/5e/images/person.svg +1 -0
- package/systems/5e/images/piranha.svg +1 -0
- package/systems/5e/images/plesiosaurus.svg +1 -0
- package/systems/5e/images/pointy-hat.svg +1 -0
- package/systems/5e/images/polar-bear.svg +1 -0
- package/systems/5e/images/rat.svg +1 -0
- package/systems/5e/images/rattlesnake.svg +1 -0
- package/systems/5e/images/raven.svg +1 -0
- package/systems/5e/images/rhinoceros-horn.svg +1 -0
- package/systems/5e/images/robber.svg +1 -0
- package/systems/5e/images/robin-hood-hat.svg +1 -0
- package/systems/5e/images/robot-golem.svg +1 -0
- package/systems/5e/images/rock-golem.svg +1 -0
- package/systems/5e/images/rolled-cloth.svg +1 -0
- package/systems/5e/images/rooster.svg +1 -0
- package/systems/5e/images/saber-toothed-cat-head.svg +1 -0
- package/systems/5e/images/salamander.svg +1 -0
- package/systems/5e/images/school-of-fish.svg +1 -0
- package/systems/5e/images/scorpion.svg +1 -0
- package/systems/5e/images/sea-serpent.svg +1 -0
- package/systems/5e/images/seahorse.svg +1 -0
- package/systems/5e/images/seated-mouse.svg +1 -0
- package/systems/5e/images/sensuousness.svg +1 -0
- package/systems/5e/images/shadow-follower.svg +1 -0
- package/systems/5e/images/shambling-mound.svg +1 -0
- package/systems/5e/images/shambling-zombie.svg +1 -0
- package/systems/5e/images/shark-fin.svg +1 -0
- package/systems/5e/images/shark-jaws.svg +1 -0
- package/systems/5e/images/skeleton.svg +1 -0
- package/systems/5e/images/slime.svg +1 -0
- package/systems/5e/images/small-fire.svg +1 -0
- package/systems/5e/images/snake-spiral.svg +1 -0
- package/systems/5e/images/snake-tongue.svg +1 -0
- package/systems/5e/images/snake-totem.svg +1 -0
- package/systems/5e/images/snake.svg +1 -0
- package/systems/5e/images/spark-spirit.svg +1 -0
- package/systems/5e/images/spartan.svg +1 -0
- package/systems/5e/images/spectre.svg +1 -0
- package/systems/5e/images/sperm-whale.svg +1 -0
- package/systems/5e/images/spider-alt.svg +1 -0
- package/systems/5e/images/spiked-dragon-head.svg +1 -0
- package/systems/5e/images/spiked-tail.svg +1 -0
- package/systems/5e/images/spotted-mushroom.svg +1 -0
- package/systems/5e/images/spy.svg +1 -0
- package/systems/5e/images/squid.svg +1 -0
- package/systems/5e/images/stag-head.svg +1 -0
- package/systems/5e/images/steam.svg +1 -0
- package/systems/5e/images/sun-priest.svg +1 -0
- package/systems/5e/images/tick.svg +1 -0
- package/systems/5e/images/tiger-head.svg +1 -0
- package/systems/5e/images/tiger.svg +1 -0
- package/systems/5e/images/toad-teeth.svg +1 -0
- package/systems/5e/images/tornado.svg +1 -0
- package/systems/5e/images/transparent-slime.svg +1 -0
- package/systems/5e/images/tree-face.svg +1 -0
- package/systems/5e/images/tribal-mask.svg +1 -0
- package/systems/5e/images/triceratops-head.svg +1 -0
- package/systems/5e/images/triton-head.svg +1 -0
- package/systems/5e/images/troglodyte.svg +1 -0
- package/systems/5e/images/troll.svg +1 -0
- package/systems/5e/images/turtle.svg +1 -0
- package/systems/5e/images/unicorn.svg +1 -0
- package/systems/5e/images/vampire-dracula.svg +1 -0
- package/systems/5e/images/viking-head.svg +1 -0
- package/systems/5e/images/visored-helm.svg +1 -0
- package/systems/5e/images/vulture.svg +1 -0
- package/systems/5e/images/warlord-helmet.svg +1 -0
- package/systems/5e/images/wasp-sting.svg +1 -0
- package/systems/5e/images/werewolf.svg +1 -0
- package/systems/5e/images/winged-sword.svg +1 -0
- package/systems/5e/images/witch-face.svg +1 -0
- package/systems/5e/images/wizard-face.svg +1 -0
- package/systems/5e/images/wolf-head.svg +1 -0
- package/systems/5e/images/wolf-howl.svg +1 -0
- package/systems/5e/images/woman-elf-face.svg +1 -0
- package/systems/5e/images/worm-mouth.svg +1 -0
- package/systems/5e/images/wyvern.svg +1 -0
- package/systems/5e/instructions/level-up.md +1 -0
- package/systems/5e/instructions/mentor-tutorial.md +1 -0
- package/systems/5e/instructions/play.md +5 -0
- package/systems/5e/instructions/quest-ends.md +1 -0
- package/systems/5e/instructions/session-zero.md +1 -0
- package/systems/5e/rules/Adventuring.md +228 -0
- package/systems/5e/rules/Beyond 1st Level.md +241 -0
- package/systems/5e/rules/Combat.md +504 -0
- package/systems/5e/rules/Conditions.md +110 -0
- package/systems/5e/rules/Diseases.md +41 -0
- package/systems/5e/rules/Equipment.md +731 -0
- package/systems/5e/rules/Fantasy-Historical Pantheons.md +112 -0
- package/systems/5e/rules/Madness.md +72 -0
- package/systems/5e/rules/Magic Items.md +142 -0
- package/systems/5e/rules/Monsters.md +403 -0
- package/systems/5e/rules/Nonplayer Characters.md +15 -0
- package/systems/5e/rules/Objects.md +40 -0
- package/systems/5e/rules/Poisons.md +64 -0
- package/systems/5e/rules/Races.md +33 -0
- package/systems/5e/rules/Spellcasting.md +225 -0
- package/systems/5e/rules/The Planes of Existence.md +59 -0
- package/systems/5e/rules/Traps.md +170 -0
- package/systems/5e/rules/Using Ability Scores.md +394 -0
- package/systems/5e/system.yaml +602 -0
- package/systems/5e/words/ar.yaml +421 -0
- package/systems/5e/words/cs.yaml +421 -0
- package/systems/5e/words/da.yaml +421 -0
- package/systems/5e/words/de.yaml +421 -0
- package/systems/5e/words/el.yaml +421 -0
- package/systems/5e/words/es.yaml +421 -0
- package/systems/5e/words/fi.yaml +421 -0
- package/systems/5e/words/fr.yaml +421 -0
- package/systems/5e/words/he.yaml +421 -0
- package/systems/5e/words/hi.yaml +421 -0
- package/systems/5e/words/hu.yaml +421 -0
- package/systems/5e/words/is.yaml +421 -0
- package/systems/5e/words/it.yaml +453 -0
- package/systems/5e/words/ja.yaml +421 -0
- package/systems/5e/words/ko.yaml +421 -0
- package/systems/5e/words/nb.yaml +421 -0
- package/systems/5e/words/nl.yaml +421 -0
- package/systems/5e/words/pl.yaml +421 -0
- package/systems/5e/words/pt.yaml +421 -0
- package/systems/5e/words/ro.yaml +421 -0
- package/systems/5e/words/ru.yaml +421 -0
- package/systems/5e/words/sv.yaml +421 -0
- package/systems/5e/words/tr.yaml +421 -0
- package/systems/5e/words/uk.yaml +421 -0
- package/systems/5e/words/zh.yaml +421 -0
- package/systems/5e/world/creatures/Aboleth.md +65 -0
- package/systems/5e/world/creatures/Acolyte.md +37 -0
- package/systems/5e/world/creatures/Adult Black Dragon.md +69 -0
- package/systems/5e/world/creatures/Adult Blue Dragon.md +66 -0
- package/systems/5e/world/creatures/Adult Brass Dragon.md +70 -0
- package/systems/5e/world/creatures/Adult Bronze Dragon.md +78 -0
- package/systems/5e/world/creatures/Adult Copper Dragon.md +70 -0
- package/systems/5e/world/creatures/Adult Gold Dragon.md +78 -0
- package/systems/5e/world/creatures/Adult Green Dragon.md +70 -0
- package/systems/5e/world/creatures/Adult Red Dragon.md +66 -0
- package/systems/5e/world/creatures/Adult Silver Dragon.md +74 -0
- package/systems/5e/world/creatures/Adult White Dragon.md +70 -0
- package/systems/5e/world/creatures/Air Elemental.md +43 -0
- package/systems/5e/world/creatures/Ancient Black Dragon.md +69 -0
- package/systems/5e/world/creatures/Ancient Blue Dragon.md +66 -0
- package/systems/5e/world/creatures/Ancient Brass Dragon.md +75 -0
- package/systems/5e/world/creatures/Ancient Bronze Dragon.md +78 -0
- package/systems/5e/world/creatures/Ancient Copper Dragon.md +75 -0
- package/systems/5e/world/creatures/Ancient Gold Dragon.md +78 -0
- package/systems/5e/world/creatures/Ancient Green Dragon.md +70 -0
- package/systems/5e/world/creatures/Ancient Red Dragon.md +66 -0
- package/systems/5e/world/creatures/Ancient Silver Dragon.md +74 -0
- package/systems/5e/world/creatures/Ancient White Dragon.md +70 -0
- package/systems/5e/world/creatures/Androsphinx.md +82 -0
- package/systems/5e/world/creatures/Animated Armor.md +39 -0
- package/systems/5e/world/creatures/Ankheg.md +31 -0
- package/systems/5e/world/creatures/Ape.md +32 -0
- package/systems/5e/world/creatures/Archmage.md +63 -0
- package/systems/5e/world/creatures/Assassin.md +48 -0
- package/systems/5e/world/creatures/Awakened Shrub.md +34 -0
- package/systems/5e/world/creatures/Awakened Tree.md +35 -0
- package/systems/5e/world/creatures/Axe Beak.md +26 -0
- package/systems/5e/world/creatures/Azer.md +40 -0
- package/systems/5e/world/creatures/Baboon.md +30 -0
- package/systems/5e/world/creatures/Badger.md +31 -0
- package/systems/5e/world/creatures/Balor.md +55 -0
- package/systems/5e/world/creatures/Bandit Captain.md +45 -0
- package/systems/5e/world/creatures/Bandit.md +33 -0
- package/systems/5e/world/creatures/Barbed Devil.md +52 -0
- package/systems/5e/world/creatures/Basilisk.md +35 -0
- package/systems/5e/world/creatures/Bat.md +34 -0
- package/systems/5e/world/creatures/Bearded Devil.md +48 -0
- package/systems/5e/world/creatures/Behir.md +44 -0
- package/systems/5e/world/creatures/Berserker.md +33 -0
- package/systems/5e/world/creatures/Black Bear.md +38 -0
- package/systems/5e/world/creatures/Black Dragon Wyrmling.md +41 -0
- package/systems/5e/world/creatures/Black Pudding.md +46 -0
- package/systems/5e/world/creatures/Blink Dog.md +36 -0
- package/systems/5e/world/creatures/Blood Hawk.md +36 -0
- package/systems/5e/world/creatures/Blue Dragon Wyrmling.md +36 -0
- package/systems/5e/world/creatures/Boar.md +33 -0
- package/systems/5e/world/creatures/Bone Devil.md +47 -0
- package/systems/5e/world/creatures/Brass Dragon Wyrmling.md +40 -0
- package/systems/5e/world/creatures/Bronze Dragon Wyrmling.md +45 -0
- package/systems/5e/world/creatures/Brown Bear.md +38 -0
- package/systems/5e/world/creatures/Bugbear.md +39 -0
- package/systems/5e/world/creatures/Bulette.md +37 -0
- package/systems/5e/world/creatures/Camel.md +24 -0
- package/systems/5e/world/creatures/Cat.md +31 -0
- package/systems/5e/world/creatures/Centaur.md +40 -0
- package/systems/5e/world/creatures/Chain Devil.md +52 -0
- package/systems/5e/world/creatures/Chimera.md +41 -0
- package/systems/5e/world/creatures/Chuul.md +45 -0
- package/systems/5e/world/creatures/Clay Golem.md +52 -0
- package/systems/5e/world/creatures/Cloaker.md +56 -0
- package/systems/5e/world/creatures/Cloud Giant.md +46 -0
- package/systems/5e/world/creatures/Cockatrice.md +26 -0
- package/systems/5e/world/creatures/Commoner.md +27 -0
- package/systems/5e/world/creatures/Constrictor Snake.md +29 -0
- package/systems/5e/world/creatures/Copper Dragon Wyrmling.md +40 -0
- package/systems/5e/world/creatures/Couatl.md +54 -0
- package/systems/5e/world/creatures/Crab.md +33 -0
- package/systems/5e/world/creatures/Crocodile.md +32 -0
- package/systems/5e/world/creatures/Cult Fanatic.md +46 -0
- package/systems/5e/world/creatures/Cultist.md +34 -0
- package/systems/5e/world/creatures/Darkmantle.md +42 -0
- package/systems/5e/world/creatures/Death Dog.md +36 -0
- package/systems/5e/world/creatures/Deep Gnome (Svirfneblin).md +46 -0
- package/systems/5e/world/creatures/Deer.md +24 -0
- package/systems/5e/world/creatures/Deva.md +57 -0
- package/systems/5e/world/creatures/Dire Wolf.md +34 -0
- package/systems/5e/world/creatures/Djinni.md +50 -0
- package/systems/5e/world/creatures/Doppelganger.md +45 -0
- package/systems/5e/world/creatures/Draft Horse.md +24 -0
- package/systems/5e/world/creatures/Dragon Turtle.md +47 -0
- package/systems/5e/world/creatures/Dragonborn.md +58 -0
- package/systems/5e/world/creatures/Dretch.md +39 -0
- package/systems/5e/world/creatures/Drider.md +58 -0
- package/systems/5e/world/creatures/Drow Elf.md +46 -0
- package/systems/5e/world/creatures/Druid (creature).md +41 -0
- package/systems/5e/world/creatures/Dryad.md +53 -0
- package/systems/5e/world/creatures/Duergar.md +45 -0
- package/systems/5e/world/creatures/Dust Mephit.md +42 -0
- package/systems/5e/world/creatures/Dwarf.md +48 -0
- package/systems/5e/world/creatures/Eagle.md +31 -0
- package/systems/5e/world/creatures/Earth Elemental.md +44 -0
- package/systems/5e/world/creatures/Efreeti.md +48 -0
- package/systems/5e/world/creatures/Elephant.md +33 -0
- package/systems/5e/world/creatures/Elf.md +44 -0
- package/systems/5e/world/creatures/Elk.md +32 -0
- package/systems/5e/world/creatures/Erinyes.md +51 -0
- package/systems/5e/world/creatures/Ettercap.md +48 -0
- package/systems/5e/world/creatures/Ettin.md +42 -0
- package/systems/5e/world/creatures/Fire Elemental.md +43 -0
- package/systems/5e/world/creatures/Fire Giant.md +35 -0
- package/systems/5e/world/creatures/Flesh Golem.md +53 -0
- package/systems/5e/world/creatures/Flying Snake.md +34 -0
- package/systems/5e/world/creatures/Flying Sword.md +38 -0
- package/systems/5e/world/creatures/Frog.md +32 -0
- package/systems/5e/world/creatures/Frost Giant.md +35 -0
- package/systems/5e/world/creatures/Gargoyle.md +42 -0
- package/systems/5e/world/creatures/Gelatinous Cube.md +49 -0
- package/systems/5e/world/creatures/Ghast.md +40 -0
- package/systems/5e/world/creatures/Ghost.md +49 -0
- package/systems/5e/world/creatures/Ghoul.md +31 -0
- package/systems/5e/world/creatures/Giant Ape.md +32 -0
- package/systems/5e/world/creatures/Giant Badger.md +37 -0
- package/systems/5e/world/creatures/Giant Bat.md +34 -0
- package/systems/5e/world/creatures/Giant Boar.md +33 -0
- package/systems/5e/world/creatures/Giant Centipede.md +27 -0
- package/systems/5e/world/creatures/Giant Constrictor Snake.md +30 -0
- package/systems/5e/world/creatures/Giant Crab.md +33 -0
- package/systems/5e/world/creatures/Giant Crocodile.md +38 -0
- package/systems/5e/world/creatures/Giant Eagle.md +40 -0
- package/systems/5e/world/creatures/Giant Elk.md +37 -0
- package/systems/5e/world/creatures/Giant Fire Beetle.md +33 -0
- package/systems/5e/world/creatures/Giant Frog.md +40 -0
- package/systems/5e/world/creatures/Giant Goat.md +33 -0
- package/systems/5e/world/creatures/Giant Hyena.md +30 -0
- package/systems/5e/world/creatures/Giant Lizard.md +29 -0
- package/systems/5e/world/creatures/Giant Octopus.md +41 -0
- package/systems/5e/world/creatures/Giant Owl.md +38 -0
- package/systems/5e/world/creatures/Giant Poisonous Snake.md +27 -0
- package/systems/5e/world/creatures/Giant Rat.md +39 -0
- package/systems/5e/world/creatures/Giant Scorpion.md +32 -0
- package/systems/5e/world/creatures/Giant Sea Horse.md +36 -0
- package/systems/5e/world/creatures/Giant Shark.md +38 -0
- package/systems/5e/world/creatures/Giant Spider.md +45 -0
- package/systems/5e/world/creatures/Giant Toad.md +39 -0
- package/systems/5e/world/creatures/Giant Vulture.md +43 -0
- package/systems/5e/world/creatures/Giant Wasp.md +25 -0
- package/systems/5e/world/creatures/Giant Weasel.md +31 -0
- package/systems/5e/world/creatures/Giant Wolf Spider.md +41 -0
- package/systems/5e/world/creatures/Gibbering Mouther.md +41 -0
- package/systems/5e/world/creatures/Glabrezu.md +48 -0
- package/systems/5e/world/creatures/Gladiator.md +49 -0
- package/systems/5e/world/creatures/Gnoll.md +38 -0
- package/systems/5e/world/creatures/Gnome.md +37 -0
- package/systems/5e/world/creatures/Goat.md +32 -0
- package/systems/5e/world/creatures/Goblin.md +36 -0
- package/systems/5e/world/creatures/Gold Dragon Wyrmling.md +45 -0
- package/systems/5e/world/creatures/Gorgon.md +39 -0
- package/systems/5e/world/creatures/Gray Ooze.md +42 -0
- package/systems/5e/world/creatures/Green Dragon Wyrmling.md +42 -0
- package/systems/5e/world/creatures/Green Hag.md +49 -0
- package/systems/5e/world/creatures/Grick.md +39 -0
- package/systems/5e/world/creatures/Griffon.md +38 -0
- package/systems/5e/world/creatures/Grimlock.md +39 -0
- package/systems/5e/world/creatures/Guard.md +29 -0
- package/systems/5e/world/creatures/Guardian Naga.md +55 -0
- package/systems/5e/world/creatures/Gynosphinx.md +71 -0
- package/systems/5e/world/creatures/Half-Elf.md +40 -0
- package/systems/5e/world/creatures/Half-Orc.md +44 -0
- package/systems/5e/world/creatures/Half-Red Dragon Veteran.md +42 -0
- package/systems/5e/world/creatures/Halfling.md +39 -0
- package/systems/5e/world/creatures/Harpy.md +39 -0
- package/systems/5e/world/creatures/Hawk.md +31 -0
- package/systems/5e/world/creatures/Hell Hound.md +40 -0
- package/systems/5e/world/creatures/Hezrou.md +45 -0
- package/systems/5e/world/creatures/High Elf.md +22 -0
- package/systems/5e/world/creatures/Hill Dwarf.md +16 -0
- package/systems/5e/world/creatures/Hill Giant.md +33 -0
- package/systems/5e/world/creatures/Hippogriff.md +37 -0
- package/systems/5e/world/creatures/Hobgoblin.md +35 -0
- package/systems/5e/world/creatures/Homunculus.md +35 -0
- package/systems/5e/world/creatures/Horned Devil.md +49 -0
- package/systems/5e/world/creatures/Human.md +29 -0
- package/systems/5e/world/creatures/Hunter Shark.md +38 -0
- package/systems/5e/world/creatures/Hydra.md +49 -0
- package/systems/5e/world/creatures/Hyena.md +30 -0
- package/systems/5e/world/creatures/Ice Devil.md +56 -0
- package/systems/5e/world/creatures/Ice Mephit.md +45 -0
- package/systems/5e/world/creatures/Imp.md +45 -0
- package/systems/5e/world/creatures/Invisible Stalker.md +42 -0
- package/systems/5e/world/creatures/Iron Golem.md +52 -0
- package/systems/5e/world/creatures/Jackal.md +33 -0
- package/systems/5e/world/creatures/Killer Whale.md +39 -0
- package/systems/5e/world/creatures/Knight.md +48 -0
- package/systems/5e/world/creatures/Kobold.md +37 -0
- package/systems/5e/world/creatures/Kraken.md +69 -0
- package/systems/5e/world/creatures/Lamia.md +46 -0
- package/systems/5e/world/creatures/Lemure.md +37 -0
- package/systems/5e/world/creatures/Lich.md +82 -0
- package/systems/5e/world/creatures/Lightfoot Halfling.md +18 -0
- package/systems/5e/world/creatures/Lion.md +42 -0
- package/systems/5e/world/creatures/Lizard.md +26 -0
- package/systems/5e/world/creatures/Lizardfolk.md +45 -0
- package/systems/5e/world/creatures/Mage.md +47 -0
- package/systems/5e/world/creatures/Magma Mephit.md +45 -0
- package/systems/5e/world/creatures/Magmin.md +37 -0
- package/systems/5e/world/creatures/Mammoth.md +35 -0
- package/systems/5e/world/creatures/Manticore.md +42 -0
- package/systems/5e/world/creatures/Marilith.md +56 -0
- package/systems/5e/world/creatures/Mastiff.md +32 -0
- package/systems/5e/world/creatures/Medusa.md +46 -0
- package/systems/5e/world/creatures/Merfolk.md +32 -0
- package/systems/5e/world/creatures/Merrow.md +42 -0
- package/systems/5e/world/creatures/Mimic.md +46 -0
- package/systems/5e/world/creatures/Minotaur Skeleton.md +38 -0
- package/systems/5e/world/creatures/Minotaur.md +42 -0
- package/systems/5e/world/creatures/Mule.md +32 -0
- package/systems/5e/world/creatures/Mummy Lord.md +82 -0
- package/systems/5e/world/creatures/Mummy.md +38 -0
- package/systems/5e/world/creatures/Nalfeshnee.md +49 -0
- package/systems/5e/world/creatures/Night Hag.md +50 -0
- package/systems/5e/world/creatures/Nightmare.md +39 -0
- package/systems/5e/world/creatures/Noble.md +36 -0
- package/systems/5e/world/creatures/Ochre Jelly.md +42 -0
- package/systems/5e/world/creatures/Octopus.md +41 -0
- package/systems/5e/world/creatures/Ogre Zombie.md +34 -0
- package/systems/5e/world/creatures/Ogre.md +30 -0
- package/systems/5e/world/creatures/Oni.md +53 -0
- package/systems/5e/world/creatures/Orc.md +36 -0
- package/systems/5e/world/creatures/Otyugh.md +42 -0
- package/systems/5e/world/creatures/Owl.md +35 -0
- package/systems/5e/world/creatures/Owlbear.md +38 -0
- package/systems/5e/world/creatures/Panther.md +37 -0
- package/systems/5e/world/creatures/Pegasus.md +28 -0
- package/systems/5e/world/creatures/Phase Spider.md +41 -0
- package/systems/5e/world/creatures/Pit Fiend.md +61 -0
- package/systems/5e/world/creatures/Planetar.md +56 -0
- package/systems/5e/world/creatures/Plesiosaurus.md +32 -0
- package/systems/5e/world/creatures/Poisonous Snake.md +26 -0
- package/systems/5e/world/creatures/Polar Bear.md +38 -0
- package/systems/5e/world/creatures/Pony.md +24 -0
- package/systems/5e/world/creatures/Priest.md +47 -0
- package/systems/5e/world/creatures/Pseudodragon.md +44 -0
- package/systems/5e/world/creatures/Purple Worm.md +42 -0
- package/systems/5e/world/creatures/Quasit.md +44 -0
- package/systems/5e/world/creatures/Quipper.md +36 -0
- package/systems/5e/world/creatures/Rakshasa.md +45 -0
- package/systems/5e/world/creatures/Rat.md +30 -0
- package/systems/5e/world/creatures/Raven.md +31 -0
- package/systems/5e/world/creatures/Red Dragon Wyrmling.md +36 -0
- package/systems/5e/world/creatures/Reef Shark.md +38 -0
- package/systems/5e/world/creatures/Remorhaz.md +39 -0
- package/systems/5e/world/creatures/Rhinoceros.md +30 -0
- package/systems/5e/world/creatures/Riding Horse.md +24 -0
- package/systems/5e/world/creatures/Roc.md +39 -0
- package/systems/5e/world/creatures/Rock Gnome.md +27 -0
- package/systems/5e/world/creatures/Roper.md +48 -0
- package/systems/5e/world/creatures/Rug of Smothering.md +38 -0
- package/systems/5e/world/creatures/Rust Monster.md +39 -0
- package/systems/5e/world/creatures/Saber-Toothed Tiger.md +36 -0
- package/systems/5e/world/creatures/Sahuagin.md +49 -0
- package/systems/5e/world/creatures/Salamander.md +44 -0
- package/systems/5e/world/creatures/Satyr.md +38 -0
- package/systems/5e/world/creatures/Scorpion.md +26 -0
- package/systems/5e/world/creatures/Scout.md +40 -0
- package/systems/5e/world/creatures/Sea Hag.md +46 -0
- package/systems/5e/world/creatures/Sea Horse.md +25 -0
- package/systems/5e/world/creatures/Shadow.md +45 -0
- package/systems/5e/world/creatures/Shambling Mound.md +42 -0
- package/systems/5e/world/creatures/Shield Guardian.md +49 -0
- package/systems/5e/world/creatures/Shrieker.md +31 -0
- package/systems/5e/world/creatures/Silver Dragon Wyrmling.md +39 -0
- package/systems/5e/world/creatures/Skeleton.md +33 -0
- package/systems/5e/world/creatures/Solar.md +76 -0
- package/systems/5e/world/creatures/Specter.md +38 -0
- package/systems/5e/world/creatures/Spider.md +38 -0
- package/systems/5e/world/creatures/Spirit Naga.md +50 -0
- package/systems/5e/world/creatures/Sprite.md +37 -0
- package/systems/5e/world/creatures/Spy.md +42 -0
- package/systems/5e/world/creatures/Steam Mephit.md +40 -0
- package/systems/5e/world/creatures/Stirge.md +29 -0
- package/systems/5e/world/creatures/Stone Giant.md +45 -0
- package/systems/5e/world/creatures/Stone Golem.md +46 -0
- package/systems/5e/world/creatures/Storm Giant.md +51 -0
- package/systems/5e/world/creatures/Succubus-Incubus.md +50 -0
- package/systems/5e/world/creatures/Swarm of Bats.md +39 -0
- package/systems/5e/world/creatures/Swarm of Insects.md +52 -0
- package/systems/5e/world/creatures/Swarm of Poisonous Snakes.md +33 -0
- package/systems/5e/world/creatures/Swarm of Quippers.md +39 -0
- package/systems/5e/world/creatures/Swarm of Rats.md +35 -0
- package/systems/5e/world/creatures/Swarm of Ravens.md +33 -0
- package/systems/5e/world/creatures/Tarrasque.md +76 -0
- package/systems/5e/world/creatures/Thug.md +40 -0
- package/systems/5e/world/creatures/Tiefling.md +40 -0
- package/systems/5e/world/creatures/Tiger.md +37 -0
- package/systems/5e/world/creatures/Treant.md +45 -0
- package/systems/5e/world/creatures/Tribal Warrior.md +33 -0
- package/systems/5e/world/creatures/Triceratops.md +33 -0
- package/systems/5e/world/creatures/Troll.md +42 -0
- package/systems/5e/world/creatures/Tyrannosaurus Rex.md +32 -0
- package/systems/5e/world/creatures/Unicorn.md +70 -0
- package/systems/5e/world/creatures/Vampire Spawn.md +55 -0
- package/systems/5e/world/creatures/Vampire.md +91 -0
- package/systems/5e/world/creatures/Veteran.md +38 -0
- package/systems/5e/world/creatures/Violet Fungus.md +34 -0
- package/systems/5e/world/creatures/Vrock.md +49 -0
- package/systems/5e/world/creatures/Vulture.md +34 -0
- package/systems/5e/world/creatures/Warhorse Skeleton.md +29 -0
- package/systems/5e/world/creatures/Warhorse.md +29 -0
- package/systems/5e/world/creatures/Water Elemental.md +47 -0
- package/systems/5e/world/creatures/Weasel.md +30 -0
- package/systems/5e/world/creatures/Werebear.md +45 -0
- package/systems/5e/world/creatures/Wereboar.md +45 -0
- package/systems/5e/world/creatures/Wererat.md +45 -0
- package/systems/5e/world/creatures/Weretiger.md +51 -0
- package/systems/5e/world/creatures/Werewolf.md +45 -0
- package/systems/5e/world/creatures/White Dragon Wyrmling.md +37 -0
- package/systems/5e/world/creatures/Wight.md +47 -0
- package/systems/5e/world/creatures/Will-o'-Wisp.md +47 -0
- package/systems/5e/world/creatures/Winter Wolf.md +44 -0
- package/systems/5e/world/creatures/Wolf.md +34 -0
- package/systems/5e/world/creatures/Worg.md +35 -0
- package/systems/5e/world/creatures/Wraith.md +41 -0
- package/systems/5e/world/creatures/Wyvern.md +37 -0
- package/systems/5e/world/creatures/Xorn.md +48 -0
- package/systems/5e/world/creatures/Young Black Dragon.md +47 -0
- package/systems/5e/world/creatures/Young Blue Dragon.md +42 -0
- package/systems/5e/world/creatures/Young Brass Dragon.md +46 -0
- package/systems/5e/world/creatures/Young Bronze Dragon.md +51 -0
- package/systems/5e/world/creatures/Young Copper Dragon.md +46 -0
- package/systems/5e/world/creatures/Young Gold Dragon.md +51 -0
- package/systems/5e/world/creatures/Young Green Dragon.md +48 -0
- package/systems/5e/world/creatures/Young Red Dragon.md +42 -0
- package/systems/5e/world/creatures/Young Silver Dragon.md +45 -0
- package/systems/5e/world/creatures/Young White Dragon.md +48 -0
- package/systems/5e/world/creatures/Zombie.md +34 -0
- package/systems/5e/world/items/Abacus.md +5 -0
- package/systems/5e/world/items/Acid.md +8 -0
- package/systems/5e/world/items/Adamantine Armor.md +6 -0
- package/systems/5e/world/items/Alchemist's Fire.md +8 -0
- package/systems/5e/world/items/Alchemist's Supplies.md +7 -0
- package/systems/5e/world/items/Ammunition, +1, +2, or +3.md +6 -0
- package/systems/5e/world/items/Amulet of Health.md +7 -0
- package/systems/5e/world/items/Amulet of Proof against Detection and Location.md +7 -0
- package/systems/5e/world/items/Amulet of the Planes.md +7 -0
- package/systems/5e/world/items/Amulet.md +7 -0
- package/systems/5e/world/items/Animated Shield.md +7 -0
- package/systems/5e/world/items/Antitoxin.md +7 -0
- package/systems/5e/world/items/Apparatus of the Crab.md +37 -0
- package/systems/5e/world/items/Armor of Invulnerability.md +7 -0
- package/systems/5e/world/items/Armor of Resistance.md +15 -0
- package/systems/5e/world/items/Armor of Vulnerability.md +9 -0
- package/systems/5e/world/items/Armor, +1, +2, or +3.md +6 -0
- package/systems/5e/world/items/Arrow of Slaying.md +10 -0
- package/systems/5e/world/items/Arrow-Catching Shield.md +7 -0
- package/systems/5e/world/items/Arrows.md +6 -0
- package/systems/5e/world/items/Backpack.md +5 -0
- package/systems/5e/world/items/Bag of Beans.md +25 -0
- package/systems/5e/world/items/Bag of Devouring.md +12 -0
- package/systems/5e/world/items/Bag of Holding.md +10 -0
- package/systems/5e/world/items/Bag of Tricks.md +51 -0
- package/systems/5e/world/items/Bagpipes.md +7 -0
- package/systems/5e/world/items/Ball Bearings.md +8 -0
- package/systems/5e/world/items/Barding.md +7 -0
- package/systems/5e/world/items/Barrel.md +5 -0
- package/systems/5e/world/items/Basic Poison.md +7 -0
- package/systems/5e/world/items/Basket.md +5 -0
- package/systems/5e/world/items/Battleaxe.md +10 -0
- package/systems/5e/world/items/Bead of Force.md +10 -0
- package/systems/5e/world/items/Bedroll.md +5 -0
- package/systems/5e/world/items/Bell.md +4 -0
- package/systems/5e/world/items/Belt of Dwarvenkind.md +18 -0
- package/systems/5e/world/items/Belt of Giant Strength.md +17 -0
- package/systems/5e/world/items/Berserker Axe.md +11 -0
- package/systems/5e/world/items/Bit and Bridle.md +5 -0
- package/systems/5e/world/items/Blanket.md +5 -0
- package/systems/5e/world/items/Block and Tackle.md +7 -0
- package/systems/5e/world/items/Blowgun Needles.md +6 -0
- package/systems/5e/world/items/Blowgun.md +10 -0
- package/systems/5e/world/items/Book.md +7 -0
- package/systems/5e/world/items/Boots of Elvenkind.md +6 -0
- package/systems/5e/world/items/Boots of Levitation.md +7 -0
- package/systems/5e/world/items/Boots of Speed.md +9 -0
- package/systems/5e/world/items/Boots of Striding and Springing.md +7 -0
- package/systems/5e/world/items/Boots of the Winterlands.md +11 -0
- package/systems/5e/world/items/Bowl of Commanding Water Elementals.md +8 -0
- package/systems/5e/world/items/Bracers of Archery.md +7 -0
- package/systems/5e/world/items/Bracers of Defense.md +7 -0
- package/systems/5e/world/items/Brazier of Commanding Fire Elementals.md +8 -0
- package/systems/5e/world/items/Breastplate.md +9 -0
- package/systems/5e/world/items/Brewer's Supplies.md +7 -0
- package/systems/5e/world/items/Brooch of Shielding.md +7 -0
- package/systems/5e/world/items/Broom of Flying.md +8 -0
- package/systems/5e/world/items/Bucket.md +5 -0
- package/systems/5e/world/items/Bullseye Lantern.md +8 -0
- package/systems/5e/world/items/Burglar's Pack.md +6 -0
- package/systems/5e/world/items/Calligrapher's Supplies.md +7 -0
- package/systems/5e/world/items/Caltrops.md +8 -0
- package/systems/5e/world/items/Candle of Invocation.md +25 -0
- package/systems/5e/world/items/Candle.md +6 -0
- package/systems/5e/world/items/Cape of the Mountebank.md +8 -0
- package/systems/5e/world/items/Carpenter's Tools.md +7 -0
- package/systems/5e/world/items/Carpet of Flying.md +17 -0
- package/systems/5e/world/items/Carriage.md +5 -0
- package/systems/5e/world/items/Cart.md +5 -0
- package/systems/5e/world/items/Cartographer's Tools.md +7 -0
- package/systems/5e/world/items/Censer of Controlling Air Elementals.md +8 -0
- package/systems/5e/world/items/Chain Mail.md +11 -0
- package/systems/5e/world/items/Chain Shirt.md +9 -0
- package/systems/5e/world/items/Chain.md +9 -0
- package/systems/5e/world/items/Chalk.md +5 -0
- package/systems/5e/world/items/Chariot.md +5 -0
- package/systems/5e/world/items/Chest.md +5 -0
- package/systems/5e/world/items/Chime of Opening.md +8 -0
- package/systems/5e/world/items/Circlet of Blasting.md +6 -0
- package/systems/5e/world/items/Climber's Kit.md +7 -0
- package/systems/5e/world/items/Cloak of Arachnida.md +13 -0
- package/systems/5e/world/items/Cloak of Displacement.md +7 -0
- package/systems/5e/world/items/Cloak of Elvenkind.md +7 -0
- package/systems/5e/world/items/Cloak of Protection.md +7 -0
- package/systems/5e/world/items/Cloak of the Bat.md +9 -0
- package/systems/5e/world/items/Cloak of the Manta Ray.md +6 -0
- package/systems/5e/world/items/Club.md +10 -0
- package/systems/5e/world/items/Cobbler's Tools.md +7 -0
- package/systems/5e/world/items/Common Clothes.md +6 -0
- package/systems/5e/world/items/Component Pouch.md +7 -0
- package/systems/5e/world/items/Cook's Utensils.md +7 -0
- package/systems/5e/world/items/Costume Clothes.md +6 -0
- package/systems/5e/world/items/Crossbow Bolt Case.md +8 -0
- package/systems/5e/world/items/Crossbow Bolts.md +6 -0
- package/systems/5e/world/items/Crowbar.md +7 -0
- package/systems/5e/world/items/Crystal Ball.md +15 -0
- package/systems/5e/world/items/Crystal.md +7 -0
- package/systems/5e/world/items/Cube of Force.md +32 -0
- package/systems/5e/world/items/Cubic Gate.md +10 -0
- package/systems/5e/world/items/Dagger of Venom.md +8 -0
- package/systems/5e/world/items/Dagger.md +10 -0
- package/systems/5e/world/items/Dancing Sword.md +11 -0
- package/systems/5e/world/items/Dart.md +10 -0
- package/systems/5e/world/items/Decanter of Endless Water.md +12 -0
- package/systems/5e/world/items/Deck of Illusions.md +48 -0
- package/systems/5e/world/items/Deck of Many Things.md +113 -0
- package/systems/5e/world/items/Defender.md +9 -0
- package/systems/5e/world/items/Demon Armor.md +9 -0
- package/systems/5e/world/items/Dice Set.md +6 -0
- package/systems/5e/world/items/Dimensional Shackles.md +8 -0
- package/systems/5e/world/items/Diplomat's Pack.md +6 -0
- package/systems/5e/world/items/Disguise Kit.md +7 -0
- package/systems/5e/world/items/Dragon Scale Mail.md +19 -0
- package/systems/5e/world/items/Dragon Slayer.md +8 -0
- package/systems/5e/world/items/Drum.md +7 -0
- package/systems/5e/world/items/Dulcimer.md +7 -0
- package/systems/5e/world/items/Dungeoneer's Pack.md +6 -0
- package/systems/5e/world/items/Dust of Disappearance.md +6 -0
- package/systems/5e/world/items/Dust of Dryness.md +10 -0
- package/systems/5e/world/items/Dust of Sneezing and Choking.md +8 -0
- package/systems/5e/world/items/Dwarven Plate.md +6 -0
- package/systems/5e/world/items/Dwarven Thrower.md +7 -0
- package/systems/5e/world/items/Efficient Quiver.md +8 -0
- package/systems/5e/world/items/Efreeti Bottle.md +14 -0
- package/systems/5e/world/items/Elemental Gem.md +13 -0
- package/systems/5e/world/items/Elven Chain.md +6 -0
- package/systems/5e/world/items/Emblem.md +6 -0
- package/systems/5e/world/items/Entertainer's Pack.md +6 -0
- package/systems/5e/world/items/Eversmoking Bottle.md +8 -0
- package/systems/5e/world/items/Exotic Saddle.md +7 -0
- package/systems/5e/world/items/Explorer's Pack.md +6 -0
- package/systems/5e/world/items/Eyes of Charming.md +7 -0
- package/systems/5e/world/items/Eyes of Minute Seeing.md +6 -0
- package/systems/5e/world/items/Eyes of the Eagle.md +7 -0
- package/systems/5e/world/items/Feather Token.md +26 -0
- package/systems/5e/world/items/Feed.md +6 -0
- package/systems/5e/world/items/Figurine of Wondrous Power.md +52 -0
- package/systems/5e/world/items/Fine Clothes.md +6 -0
- package/systems/5e/world/items/Fishing Tackle.md +7 -0
- package/systems/5e/world/items/Flail.md +9 -0
- package/systems/5e/world/items/Flame Tongue.md +7 -0
- package/systems/5e/world/items/Flask or Tankard.md +5 -0
- package/systems/5e/world/items/Flute.md +7 -0
- package/systems/5e/world/items/Folding Boat.md +14 -0
- package/systems/5e/world/items/Forgery Kit.md +7 -0
- package/systems/5e/world/items/Frost Brand.md +11 -0
- package/systems/5e/world/items/Galley.md +5 -0
- package/systems/5e/world/items/Gauntlets of Ogre Power.md +7 -0
- package/systems/5e/world/items/Gem of Brightness.md +12 -0
- package/systems/5e/world/items/Gem of Seeing.md +9 -0
- package/systems/5e/world/items/Giant Slayer.md +8 -0
- package/systems/5e/world/items/Glaive.md +10 -0
- package/systems/5e/world/items/Glamoured Studded Leather.md +6 -0
- package/systems/5e/world/items/Glass Bottle.md +6 -0
- package/systems/5e/world/items/Glassblower's Tools.md +7 -0
- package/systems/5e/world/items/Gloves of Missile Snaring.md +7 -0
- package/systems/5e/world/items/Gloves of Swimming and Climbing.md +7 -0
- package/systems/5e/world/items/Goggles of Night.md +6 -0
- package/systems/5e/world/items/Grappling Hook.md +5 -0
- package/systems/5e/world/items/Greataxe.md +10 -0
- package/systems/5e/world/items/Greatclub.md +10 -0
- package/systems/5e/world/items/Greatsword.md +10 -0
- package/systems/5e/world/items/Halberd.md +10 -0
- package/systems/5e/world/items/Half Plate Armor.md +11 -0
- package/systems/5e/world/items/Hammer of Thunderbolts.md +10 -0
- package/systems/5e/world/items/Hammer.md +5 -0
- package/systems/5e/world/items/Hand Crossbow.md +11 -0
- package/systems/5e/world/items/Handaxe.md +10 -0
- package/systems/5e/world/items/Handy Haversack.md +12 -0
- package/systems/5e/world/items/Hat of Disguise.md +7 -0
- package/systems/5e/world/items/Headband of Intellect.md +7 -0
- package/systems/5e/world/items/Healer's Kit.md +8 -0
- package/systems/5e/world/items/Heavy Crossbow.md +11 -0
- package/systems/5e/world/items/Helm of Brilliance.md +16 -0
- package/systems/5e/world/items/Helm of Comprehending Languages.md +6 -0
- package/systems/5e/world/items/Helm of Telepathy.md +9 -0
- package/systems/5e/world/items/Helm of Teleportation.md +7 -0
- package/systems/5e/world/items/Hempen Rope.md +9 -0
- package/systems/5e/world/items/Herbalism Kit.md +7 -0
- package/systems/5e/world/items/Hide Armor.md +10 -0
- package/systems/5e/world/items/Holy Avenger.md +9 -0
- package/systems/5e/world/items/Holy Water.md +10 -0
- package/systems/5e/world/items/Hooded Lantern.md +8 -0
- package/systems/5e/world/items/Horn of Blasting.md +8 -0
- package/systems/5e/world/items/Horn of Valhalla.md +17 -0
- package/systems/5e/world/items/Horn.md +7 -0
- package/systems/5e/world/items/Horseshoes of Speed.md +6 -0
- package/systems/5e/world/items/Horseshoes of a Zephyr.md +6 -0
- package/systems/5e/world/items/Hourglass.md +5 -0
- package/systems/5e/world/items/Hunting Trap.md +7 -0
- package/systems/5e/world/items/Immovable Rod.md +6 -0
- package/systems/5e/world/items/Ink Pen.md +4 -0
- package/systems/5e/world/items/Ink.md +5 -0
- package/systems/5e/world/items/Instant Fortress.md +12 -0
- package/systems/5e/world/items/Ioun Stone.md +47 -0
- package/systems/5e/world/items/Iron Bands of Binding.md +12 -0
- package/systems/5e/world/items/Iron Flask.md +33 -0
- package/systems/5e/world/items/Iron Pot.md +6 -0
- package/systems/5e/world/items/Iron Spikes.md +6 -0
- package/systems/5e/world/items/Javelin of Lightning.md +8 -0
- package/systems/5e/world/items/Javelin.md +10 -0
- package/systems/5e/world/items/Jeweler's Tools.md +7 -0
- package/systems/5e/world/items/Jug or Pitcher.md +5 -0
- package/systems/5e/world/items/Keelboat.md +7 -0
- package/systems/5e/world/items/Ladder.md +7 -0
- package/systems/5e/world/items/Lamp.md +7 -0
- package/systems/5e/world/items/Lance.md +12 -0
- package/systems/5e/world/items/Lantern of Revealing.md +6 -0
- package/systems/5e/world/items/Leather Armor.md +10 -0
- package/systems/5e/world/items/Leatherworker's Tools.md +7 -0
- package/systems/5e/world/items/Light Crossbow.md +11 -0
- package/systems/5e/world/items/Light Hammer.md +10 -0
- package/systems/5e/world/items/Lock.md +7 -0
- package/systems/5e/world/items/Longbow.md +10 -0
- package/systems/5e/world/items/Longship.md +5 -0
- package/systems/5e/world/items/Longsword.md +10 -0
- package/systems/5e/world/items/Luck Blade.md +11 -0
- package/systems/5e/world/items/Lute.md +7 -0
- package/systems/5e/world/items/Lyre.md +7 -0
- package/systems/5e/world/items/Mace of Disruption.md +9 -0
- package/systems/5e/world/items/Mace of Smiting.md +8 -0
- package/systems/5e/world/items/Mace of Terror.md +9 -0
- package/systems/5e/world/items/Mace.md +9 -0
- package/systems/5e/world/items/Magnifying Glass.md +6 -0
- package/systems/5e/world/items/Manacles.md +7 -0
- package/systems/5e/world/items/Mantle of Spell Resistance.md +7 -0
- package/systems/5e/world/items/Manual of Bodily Health.md +6 -0
- package/systems/5e/world/items/Manual of Gainful Exercise.md +6 -0
- package/systems/5e/world/items/Manual of Golems.md +17 -0
- package/systems/5e/world/items/Manual of Quickness of Action.md +6 -0
- package/systems/5e/world/items/Map or Scroll Case.md +8 -0
- package/systems/5e/world/items/Marvelous Pigments.md +14 -0
- package/systems/5e/world/items/Mason's Tools.md +7 -0
- package/systems/5e/world/items/Maul.md +10 -0
- package/systems/5e/world/items/Medallion of Thoughts.md +7 -0
- package/systems/5e/world/items/Merchant's Scale.md +8 -0
- package/systems/5e/world/items/Mess Kit.md +7 -0
- package/systems/5e/world/items/Military Saddle.md +7 -0
- package/systems/5e/world/items/Miner's Pick.md +6 -0
- package/systems/5e/world/items/Mirror of Life Trapping.md +18 -0
- package/systems/5e/world/items/Mithral Armor.md +6 -0
- package/systems/5e/world/items/Morningstar.md +9 -0
- package/systems/5e/world/items/Navigator's Tools.md +7 -0
- package/systems/5e/world/items/Necklace of Adaptation.md +7 -0
- package/systems/5e/world/items/Necklace of Fireballs.md +8 -0
- package/systems/5e/world/items/Necklace of Prayer Beads.md +18 -0
- package/systems/5e/world/items/Net.md +12 -0
- package/systems/5e/world/items/Nine Lives Stealer.md +9 -0
- package/systems/5e/world/items/Oathbow.md +11 -0
- package/systems/5e/world/items/Oil of Etherealness.md +6 -0
- package/systems/5e/world/items/Oil of Sharpness.md +6 -0
- package/systems/5e/world/items/Oil of Slipperiness.md +8 -0
- package/systems/5e/world/items/Oil.md +8 -0
- package/systems/5e/world/items/Orb of Dragonkind.md +31 -0
- package/systems/5e/world/items/Orb.md +7 -0
- package/systems/5e/world/items/Pack Saddle.md +7 -0
- package/systems/5e/world/items/Padded Armor.md +11 -0
- package/systems/5e/world/items/Painter's Supplies.md +7 -0
- package/systems/5e/world/items/Pan Flute.md +7 -0
- package/systems/5e/world/items/Paper.md +5 -0
- package/systems/5e/world/items/Parchment.md +5 -0
- package/systems/5e/world/items/Pearl of Power.md +7 -0
- package/systems/5e/world/items/Perfume.md +5 -0
- package/systems/5e/world/items/Periapt of Health.md +6 -0
- package/systems/5e/world/items/Periapt of Proof against Poison.md +6 -0
- package/systems/5e/world/items/Periapt of Wound Closure.md +7 -0
- package/systems/5e/world/items/Philter of Love.md +6 -0
- package/systems/5e/world/items/Pike.md +10 -0
- package/systems/5e/world/items/Pipes of Haunting.md +6 -0
- package/systems/5e/world/items/Pipes of the Sewers.md +11 -0
- package/systems/5e/world/items/Piton.md +5 -0
- package/systems/5e/world/items/Plate Armor of Etherealness.md +7 -0
- package/systems/5e/world/items/Plate Armor.md +12 -0
- package/systems/5e/world/items/Playing Card Set.md +6 -0
- package/systems/5e/world/items/Poisoner's Kit.md +7 -0
- package/systems/5e/world/items/Pole.md +7 -0
- package/systems/5e/world/items/Portable Hole.md +14 -0
- package/systems/5e/world/items/Portable Ram.md +8 -0
- package/systems/5e/world/items/Potion of Animal Friendship.md +6 -0
- package/systems/5e/world/items/Potion of Clairvoyance.md +6 -0
- package/systems/5e/world/items/Potion of Climbing.md +6 -0
- package/systems/5e/world/items/Potion of Diminution.md +6 -0
- package/systems/5e/world/items/Potion of Flying.md +6 -0
- package/systems/5e/world/items/Potion of Gaseous Form.md +6 -0
- package/systems/5e/world/items/Potion of Giant Strength.md +16 -0
- package/systems/5e/world/items/Potion of Growth.md +6 -0
- package/systems/5e/world/items/Potion of Healing.md +19 -0
- package/systems/5e/world/items/Potion of Heroism.md +6 -0
- package/systems/5e/world/items/Potion of Invisibility.md +6 -0
- package/systems/5e/world/items/Potion of Mind Reading.md +6 -0
- package/systems/5e/world/items/Potion of Poison.md +8 -0
- package/systems/5e/world/items/Potion of Resistance.md +14 -0
- package/systems/5e/world/items/Potion of Speed.md +6 -0
- package/systems/5e/world/items/Potion of Water Breathing.md +6 -0
- package/systems/5e/world/items/Potter's Tools.md +7 -0
- package/systems/5e/world/items/Pouch.md +7 -0
- package/systems/5e/world/items/Priest's Pack.md +6 -0
- package/systems/5e/world/items/Quarterstaff.md +10 -0
- package/systems/5e/world/items/Quiver.md +7 -0
- package/systems/5e/world/items/Rapier.md +10 -0
- package/systems/5e/world/items/Rations.md +8 -0
- package/systems/5e/world/items/Reliquary.md +7 -0
- package/systems/5e/world/items/Restorative Ointment.md +8 -0
- package/systems/5e/world/items/Riding Saddle.md +7 -0
- package/systems/5e/world/items/Ring Mail.md +10 -0
- package/systems/5e/world/items/Ring of Animal Influence.md +10 -0
- package/systems/5e/world/items/Ring of Djinni Summoning.md +11 -0
- package/systems/5e/world/items/Ring of Elemental Command.md +41 -0
- package/systems/5e/world/items/Ring of Evasion.md +7 -0
- package/systems/5e/world/items/Ring of Feather Falling.md +7 -0
- package/systems/5e/world/items/Ring of Free Action.md +7 -0
- package/systems/5e/world/items/Ring of Invisibility.md +7 -0
- package/systems/5e/world/items/Ring of Jumping.md +7 -0
- package/systems/5e/world/items/Ring of Mind Shielding.md +11 -0
- package/systems/5e/world/items/Ring of Protection.md +7 -0
- package/systems/5e/world/items/Ring of Regeneration.md +7 -0
- package/systems/5e/world/items/Ring of Resistance.md +20 -0
- package/systems/5e/world/items/Ring of Shooting Stars.md +26 -0
- package/systems/5e/world/items/Ring of Spell Storing.md +11 -0
- package/systems/5e/world/items/Ring of Spell Turning.md +7 -0
- package/systems/5e/world/items/Ring of Swimming.md +6 -0
- package/systems/5e/world/items/Ring of Telekinesis.md +7 -0
- package/systems/5e/world/items/Ring of Three Wishes.md +6 -0
- package/systems/5e/world/items/Ring of Warmth.md +7 -0
- package/systems/5e/world/items/Ring of Water Walking.md +6 -0
- package/systems/5e/world/items/Ring of X-ray Vision.md +9 -0
- package/systems/5e/world/items/Ring of the Ram.md +9 -0
- package/systems/5e/world/items/Robe of Eyes.md +15 -0
- package/systems/5e/world/items/Robe of Scintillating Colors.md +7 -0
- package/systems/5e/world/items/Robe of Stars.md +11 -0
- package/systems/5e/world/items/Robe of Useful Items.md +33 -0
- package/systems/5e/world/items/Robe of the Archmagi.md +13 -0
- package/systems/5e/world/items/Robes.md +5 -0
- package/systems/5e/world/items/Rod of Absorption.md +13 -0
- package/systems/5e/world/items/Rod of Alertness.md +15 -0
- package/systems/5e/world/items/Rod of Lordly Might.md +27 -0
- package/systems/5e/world/items/Rod of Rulership.md +7 -0
- package/systems/5e/world/items/Rod of Security.md +10 -0
- package/systems/5e/world/items/Rod.md +7 -0
- package/systems/5e/world/items/Rope of Climbing.md +10 -0
- package/systems/5e/world/items/Rope of Entanglement.md +10 -0
- package/systems/5e/world/items/Rowboat.md +7 -0
- package/systems/5e/world/items/Sack.md +5 -0
- package/systems/5e/world/items/Saddlebags.md +5 -0
- package/systems/5e/world/items/Sailing Ship.md +5 -0
- package/systems/5e/world/items/Scale Mail.md +10 -0
- package/systems/5e/world/items/Scarab of Protection.md +10 -0
- package/systems/5e/world/items/Scholar's Pack.md +6 -0
- package/systems/5e/world/items/Scimitar of Speed.md +7 -0
- package/systems/5e/world/items/Scimitar.md +10 -0
- package/systems/5e/world/items/Sealing Wax.md +4 -0
- package/systems/5e/world/items/Shawm.md +7 -0
- package/systems/5e/world/items/Shield of Missile Attraction.md +9 -0
- package/systems/5e/world/items/Shield, +1, +2, or +3.md +6 -0
- package/systems/5e/world/items/Shield.md +9 -0
- package/systems/5e/world/items/Shortbow.md +10 -0
- package/systems/5e/world/items/Shortsword.md +10 -0
- package/systems/5e/world/items/Shovel.md +5 -0
- package/systems/5e/world/items/Sickle.md +10 -0
- package/systems/5e/world/items/Signal Whistle.md +4 -0
- package/systems/5e/world/items/Signet Ring.md +4 -0
- package/systems/5e/world/items/Silk Rope.md +9 -0
- package/systems/5e/world/items/Sled.md +5 -0
- package/systems/5e/world/items/Sledgehammer.md +6 -0
- package/systems/5e/world/items/Sling Bullets.md +6 -0
- package/systems/5e/world/items/Sling.md +9 -0
- package/systems/5e/world/items/Slippers of Spider Climbing.md +7 -0
- package/systems/5e/world/items/Smith's Tools.md +7 -0
- package/systems/5e/world/items/Soap.md +4 -0
- package/systems/5e/world/items/Sovereign Glue.md +8 -0
- package/systems/5e/world/items/Spear.md +10 -0
- package/systems/5e/world/items/Spell Scroll.md +27 -0
- package/systems/5e/world/items/Spellbook.md +7 -0
- package/systems/5e/world/items/Spellguard Shield.md +7 -0
- package/systems/5e/world/items/Sphere of Annihilation.md +20 -0
- package/systems/5e/world/items/Splint Armor.md +12 -0
- package/systems/5e/world/items/Sprig of Mistletoe.md +6 -0
- package/systems/5e/world/items/Spyglass.md +7 -0
- package/systems/5e/world/items/Staff of Charming.md +11 -0
- package/systems/5e/world/items/Staff of Fire.md +11 -0
- package/systems/5e/world/items/Staff of Frost.md +11 -0
- package/systems/5e/world/items/Staff of Healing.md +9 -0
- package/systems/5e/world/items/Staff of Power.md +23 -0
- package/systems/5e/world/items/Staff of Striking.md +9 -0
- package/systems/5e/world/items/Staff of Swarming Insects.md +11 -0
- package/systems/5e/world/items/Staff of Thunder and Lightning.md +17 -0
- package/systems/5e/world/items/Staff of Withering.md +9 -0
- package/systems/5e/world/items/Staff of the Magi.md +25 -0
- package/systems/5e/world/items/Staff of the Python.md +11 -0
- package/systems/5e/world/items/Staff of the Woodlands.md +15 -0
- package/systems/5e/world/items/Staff.md +7 -0
- package/systems/5e/world/items/Steel Mirror.md +6 -0
- package/systems/5e/world/items/Stone of Controlling Earth Elementals.md +6 -0
- package/systems/5e/world/items/Stone of Good Luck.md +8 -0
- package/systems/5e/world/items/Studded Leather Armor.md +10 -0
- package/systems/5e/world/items/Sun Blade.md +11 -0
- package/systems/5e/world/items/Sword of Life Stealing.md +7 -0
- package/systems/5e/world/items/Sword of Sharpness.md +11 -0
- package/systems/5e/world/items/Sword of Wounding.md +9 -0
- package/systems/5e/world/items/Talisman of Pure Good.md +11 -0
- package/systems/5e/world/items/Talisman of Ultimate Evil.md +11 -0
- package/systems/5e/world/items/Talisman of the Sphere.md +7 -0
- package/systems/5e/world/items/Thieves' Tools.md +7 -0
- package/systems/5e/world/items/Tinderbox.md +7 -0
- package/systems/5e/world/items/Tinker's Tools.md +7 -0
- package/systems/5e/world/items/Tome of Clear Thought.md +6 -0
- package/systems/5e/world/items/Tome of Leadership and Influence.md +6 -0
- package/systems/5e/world/items/Tome of Understanding.md +6 -0
- package/systems/5e/world/items/Torch.md +7 -0
- package/systems/5e/world/items/Totem.md +6 -0
- package/systems/5e/world/items/Traveler's Clothes.md +6 -0
- package/systems/5e/world/items/Trident of Fish Command.md +7 -0
- package/systems/5e/world/items/Trident.md +10 -0
- package/systems/5e/world/items/Two-Person Tent.md +8 -0
- package/systems/5e/world/items/Unarmed Strike.md +7 -0
- package/systems/5e/world/items/Universal Solvent.md +6 -0
- package/systems/5e/world/items/Vial.md +4 -0
- package/systems/5e/world/items/Vicious Weapon.md +6 -0
- package/systems/5e/world/items/Viol.md +7 -0
- package/systems/5e/world/items/Vorpal Sword.md +9 -0
- package/systems/5e/world/items/Wagon.md +5 -0
- package/systems/5e/world/items/Wand of Binding.md +11 -0
- package/systems/5e/world/items/Wand of Enemy Detection.md +9 -0
- package/systems/5e/world/items/Wand of Fear.md +11 -0
- package/systems/5e/world/items/Wand of Fireballs.md +9 -0
- package/systems/5e/world/items/Wand of Lightning Bolts.md +9 -0
- package/systems/5e/world/items/Wand of Magic Detection.md +6 -0
- package/systems/5e/world/items/Wand of Magic Missiles.md +8 -0
- package/systems/5e/world/items/Wand of Paralysis.md +9 -0
- package/systems/5e/world/items/Wand of Polymorph.md +9 -0
- package/systems/5e/world/items/Wand of Secrets.md +6 -0
- package/systems/5e/world/items/Wand of Web.md +9 -0
- package/systems/5e/world/items/Wand of Wonder.md +38 -0
- package/systems/5e/world/items/Wand of the War Mage, +1, +2, or +3.md +7 -0
- package/systems/5e/world/items/Wand.md +7 -0
- package/systems/5e/world/items/War Pick.md +9 -0
- package/systems/5e/world/items/Warhammer.md +10 -0
- package/systems/5e/world/items/Warship.md +5 -0
- package/systems/5e/world/items/Waterskin.md +5 -0
- package/systems/5e/world/items/Weapon, +1, +2, or +3.md +6 -0
- package/systems/5e/world/items/Weaver's Tools.md +7 -0
- package/systems/5e/world/items/Well of Many Worlds.md +8 -0
- package/systems/5e/world/items/Whetstone.md +5 -0
- package/systems/5e/world/items/Whip.md +10 -0
- package/systems/5e/world/items/Wind Fan.md +6 -0
- package/systems/5e/world/items/Winged Boots.md +9 -0
- package/systems/5e/world/items/Wings of Flying.md +7 -0
- package/systems/5e/world/items/Woodcarver's Tools.md +7 -0
- package/systems/5e/world/items/Wooden Staff.md +7 -0
- package/systems/5e/world/items/Yew Wand.md +7 -0
- package/systems/5e/world/topics/Acid Arrow.md +14 -0
- package/systems/5e/world/topics/Acid Splash.md +14 -0
- package/systems/5e/world/topics/Acolyte (background).md +103 -0
- package/systems/5e/world/topics/Aid.md +14 -0
- package/systems/5e/world/topics/Alarm.md +17 -0
- package/systems/5e/world/topics/Alter Self.md +19 -0
- package/systems/5e/world/topics/Animal Friendship.md +14 -0
- package/systems/5e/world/topics/Animal Messenger.md +17 -0
- package/systems/5e/world/topics/Animal Shapes.md +17 -0
- package/systems/5e/world/topics/Animate Dead.md +18 -0
- package/systems/5e/world/topics/Animate Objects.md +31 -0
- package/systems/5e/world/topics/Antilife Shell.md +17 -0
- package/systems/5e/world/topics/Antimagic Field.md +31 -0
- package/systems/5e/world/topics/Antipathy-Sympathy.md +23 -0
- package/systems/5e/world/topics/Arcane Eye.md +17 -0
- package/systems/5e/world/topics/Arcane Hand.md +27 -0
- package/systems/5e/world/topics/Arcane Lock.md +14 -0
- package/systems/5e/world/topics/Arcane Sword.md +15 -0
- package/systems/5e/world/topics/Arcanist's Magic Aura.md +18 -0
- package/systems/5e/world/topics/Astral Projection.md +22 -0
- package/systems/5e/world/topics/Augury.md +22 -0
- package/systems/5e/world/topics/Awaken.md +14 -0
- package/systems/5e/world/topics/Bane.md +15 -0
- package/systems/5e/world/topics/Banishment.md +19 -0
- package/systems/5e/world/topics/Barbarian.md +123 -0
- package/systems/5e/world/topics/Bard Spells.md +147 -0
- package/systems/5e/world/topics/Bard.md +139 -0
- package/systems/5e/world/topics/Barkskin.md +13 -0
- package/systems/5e/world/topics/Beacon of Hope.md +13 -0
- package/systems/5e/world/topics/Bestow Curse.md +22 -0
- package/systems/5e/world/topics/Black Tentacles.md +17 -0
- package/systems/5e/world/topics/Blade Barrier.md +15 -0
- package/systems/5e/world/topics/Bless.md +15 -0
- package/systems/5e/world/topics/Blight.md +18 -0
- package/systems/5e/world/topics/Blindness-Deafness.md +15 -0
- package/systems/5e/world/topics/Blink.md +14 -0
- package/systems/5e/world/topics/Blur.md +13 -0
- package/systems/5e/world/topics/Branding Smite.md +15 -0
- package/systems/5e/world/topics/Burning Hands.md +16 -0
- package/systems/5e/world/topics/Call Lightning.md +19 -0
- package/systems/5e/world/topics/Calm Emotions.md +17 -0
- package/systems/5e/world/topics/Chain Lightning.md +16 -0
- package/systems/5e/world/topics/Champion.md +24 -0
- package/systems/5e/world/topics/Charm Person.md +14 -0
- package/systems/5e/world/topics/Chill Touch.md +16 -0
- package/systems/5e/world/topics/Circle of Death.md +14 -0
- package/systems/5e/world/topics/Circle of the Land.md +96 -0
- package/systems/5e/world/topics/Clairvoyance.md +17 -0
- package/systems/5e/world/topics/Cleric Spells.md +140 -0
- package/systems/5e/world/topics/Cleric.md +141 -0
- package/systems/5e/world/topics/Clone.md +14 -0
- package/systems/5e/world/topics/Cloudkill.md +19 -0
- package/systems/5e/world/topics/College of Lore.md +23 -0
- package/systems/5e/world/topics/Color Spray.md +16 -0
- package/systems/5e/world/topics/Command.md +26 -0
- package/systems/5e/world/topics/Commune with Nature.md +23 -0
- package/systems/5e/world/topics/Commune.md +17 -0
- package/systems/5e/world/topics/Comprehend Languages.md +15 -0
- package/systems/5e/world/topics/Compulsion.md +15 -0
- package/systems/5e/world/topics/Cone of Cold.md +16 -0
- package/systems/5e/world/topics/Confusion.md +26 -0
- package/systems/5e/world/topics/Conjure Animals.md +26 -0
- package/systems/5e/world/topics/Conjure Celestial.md +19 -0
- package/systems/5e/world/topics/Conjure Elemental.md +21 -0
- package/systems/5e/world/topics/Conjure Fey.md +21 -0
- package/systems/5e/world/topics/Conjure Minor Elementals.md +26 -0
- package/systems/5e/world/topics/Conjure Woodland Beings.md +26 -0
- package/systems/5e/world/topics/Contact Other Plane.md +15 -0
- package/systems/5e/world/topics/Contagion.md +28 -0
- package/systems/5e/world/topics/Contingency.md +16 -0
- package/systems/5e/world/topics/Continual Flame.md +12 -0
- package/systems/5e/world/topics/Control Water.md +29 -0
- package/systems/5e/world/topics/Control Weather.md +48 -0
- package/systems/5e/world/topics/Counterspell.md +14 -0
- package/systems/5e/world/topics/Create Food and Water.md +12 -0
- package/systems/5e/world/topics/Create Undead.md +18 -0
- package/systems/5e/world/topics/Create or Destroy Water.md +18 -0
- package/systems/5e/world/topics/Creation.md +26 -0
- package/systems/5e/world/topics/Cure Wounds.md +14 -0
- package/systems/5e/world/topics/Dancing Lights.md +15 -0
- package/systems/5e/world/topics/Darkness.md +17 -0
- package/systems/5e/world/topics/Darkvision.md +12 -0
- package/systems/5e/world/topics/Daylight.md +16 -0
- package/systems/5e/world/topics/Death Ward.md +16 -0
- package/systems/5e/world/topics/Delayed Blast Fireball.md +21 -0
- package/systems/5e/world/topics/Demiplane.md +14 -0
- package/systems/5e/world/topics/Detect Evil and Good.md +15 -0
- package/systems/5e/world/topics/Detect Magic.md +16 -0
- package/systems/5e/world/topics/Detect Poison and Disease.md +16 -0
- package/systems/5e/world/topics/Detect Thoughts.md +21 -0
- package/systems/5e/world/topics/Dimension Door.md +16 -0
- package/systems/5e/world/topics/Disguise Self.md +16 -0
- package/systems/5e/world/topics/Disintegrate.md +20 -0
- package/systems/5e/world/topics/Dispel Evil and Good.md +19 -0
- package/systems/5e/world/topics/Dispel Magic.md +14 -0
- package/systems/5e/world/topics/Divination.md +17 -0
- package/systems/5e/world/topics/Divine Favor.md +13 -0
- package/systems/5e/world/topics/Divine Word.md +19 -0
- package/systems/5e/world/topics/Dominate Beast.md +21 -0
- package/systems/5e/world/topics/Dominate Monster.md +21 -0
- package/systems/5e/world/topics/Dominate Person.md +21 -0
- package/systems/5e/world/topics/Draconic Bloodline.md +43 -0
- package/systems/5e/world/topics/Dream.md +18 -0
- package/systems/5e/world/topics/Druid Spells.md +140 -0
- package/systems/5e/world/topics/Druid.md +146 -0
- package/systems/5e/world/topics/Druidcraft.md +17 -0
- package/systems/5e/world/topics/Earthquake.md +25 -0
- package/systems/5e/world/topics/Eldritch Blast.md +14 -0
- package/systems/5e/world/topics/Enhance Ability.md +27 -0
- package/systems/5e/world/topics/Enlarge-Reduce.md +20 -0
- package/systems/5e/world/topics/Entangle.md +17 -0
- package/systems/5e/world/topics/Enthrall.md +12 -0
- package/systems/5e/world/topics/Etherealness.md +22 -0
- package/systems/5e/world/topics/Expeditious Retreat.md +13 -0
- package/systems/5e/world/topics/Eyebite.md +19 -0
- package/systems/5e/world/topics/Fabricate.md +16 -0
- package/systems/5e/world/topics/Faerie Fire.md +15 -0
- package/systems/5e/world/topics/Faithful Hound.md +16 -0
- package/systems/5e/world/topics/False Life.md +14 -0
- package/systems/5e/world/topics/Fear.md +15 -0
- package/systems/5e/world/topics/Feather Fall.md +12 -0
- package/systems/5e/world/topics/Feeblemind.md +18 -0
- package/systems/5e/world/topics/Fighter.md +109 -0
- package/systems/5e/world/topics/Find Familiar.md +25 -0
- package/systems/5e/world/topics/Find Steed.md +20 -0
- package/systems/5e/world/topics/Find Traps.md +14 -0
- package/systems/5e/world/topics/Find the Path.md +15 -0
- package/systems/5e/world/topics/Finger of Death.md +14 -0
- package/systems/5e/world/topics/Fire Bolt.md +14 -0
- package/systems/5e/world/topics/Fire Shield.md +16 -0
- package/systems/5e/world/topics/Fire Storm.md +14 -0
- package/systems/5e/world/topics/Fireball.md +16 -0
- package/systems/5e/world/topics/Flame Blade.md +19 -0
- package/systems/5e/world/topics/Flame Strike.md +14 -0
- package/systems/5e/world/topics/Flaming Sphere.md +19 -0
- package/systems/5e/world/topics/Flesh to Stone.md +19 -0
- package/systems/5e/world/topics/Floating Disk.md +17 -0
- package/systems/5e/world/topics/Fly.md +15 -0
- package/systems/5e/world/topics/Fog Cloud.md +15 -0
- package/systems/5e/world/topics/Forbiddance.md +19 -0
- package/systems/5e/world/topics/Forcecage.md +22 -0
- package/systems/5e/world/topics/Foresight.md +14 -0
- package/systems/5e/world/topics/Freedom of Movement.md +14 -0
- package/systems/5e/world/topics/Freezing Sphere.md +18 -0
- package/systems/5e/world/topics/Gaseous Form.md +17 -0
- package/systems/5e/world/topics/Gate.md +19 -0
- package/systems/5e/world/topics/Geas.md +18 -0
- package/systems/5e/world/topics/Gentle Repose.md +15 -0
- package/systems/5e/world/topics/Giant Insect.md +19 -0
- package/systems/5e/world/topics/Glibness.md +12 -0
- package/systems/5e/world/topics/Globe of Invulnerability.md +17 -0
- package/systems/5e/world/topics/Glyph of Warding.md +26 -0
- package/systems/5e/world/topics/Goodberry.md +14 -0
- package/systems/5e/world/topics/Grappler.md +17 -0
- package/systems/5e/world/topics/Grease.md +14 -0
- package/systems/5e/world/topics/Greater Invisibility.md +13 -0
- package/systems/5e/world/topics/Greater Restoration.md +17 -0
- package/systems/5e/world/topics/Guardian of Faith.md +14 -0
- package/systems/5e/world/topics/Guards and Wards.md +34 -0
- package/systems/5e/world/topics/Guidance.md +13 -0
- package/systems/5e/world/topics/Guiding Bolt.md +14 -0
- package/systems/5e/world/topics/Gust of Wind.md +19 -0
- package/systems/5e/world/topics/Hallow.md +36 -0
- package/systems/5e/world/topics/Hallucinatory Terrain.md +14 -0
- package/systems/5e/world/topics/Harm.md +12 -0
- package/systems/5e/world/topics/Haste.md +15 -0
- package/systems/5e/world/topics/Heal.md +14 -0
- package/systems/5e/world/topics/Healing Word.md +14 -0
- package/systems/5e/world/topics/Heat Metal.md +17 -0
- package/systems/5e/world/topics/Hellish Rebuke.md +14 -0
- package/systems/5e/world/topics/Heroes' Feast.md +14 -0
- package/systems/5e/world/topics/Heroism.md +15 -0
- package/systems/5e/world/topics/Hideous Laughter.md +15 -0
- package/systems/5e/world/topics/Hold Monster.md +15 -0
- package/systems/5e/world/topics/Hold Person.md +15 -0
- package/systems/5e/world/topics/Holy Aura.md +13 -0
- package/systems/5e/world/topics/Hunter's Mark.md +15 -0
- package/systems/5e/world/topics/Hunter.md +41 -0
- package/systems/5e/world/topics/Hypnotic Pattern.md +15 -0
- package/systems/5e/world/topics/Ice Storm.md +16 -0
- package/systems/5e/world/topics/Identify.md +15 -0
- package/systems/5e/world/topics/Illusory Script.md +19 -0
- package/systems/5e/world/topics/Imprisonment.md +38 -0
- package/systems/5e/world/topics/Incendiary Cloud.md +17 -0
- package/systems/5e/world/topics/Inflict Wounds.md +14 -0
- package/systems/5e/world/topics/Insect Plague.md +17 -0
- package/systems/5e/world/topics/Instant Summons.md +19 -0
- package/systems/5e/world/topics/Invisibility.md +15 -0
- package/systems/5e/world/topics/Irresistible Dance.md +15 -0
- package/systems/5e/world/topics/Jump.md +12 -0
- package/systems/5e/world/topics/Knock.md +18 -0
- package/systems/5e/world/topics/Legend Lore.md +14 -0
- package/systems/5e/world/topics/Lesser Restoration.md +12 -0
- package/systems/5e/world/topics/Levitate.md +17 -0
- package/systems/5e/world/topics/Life Domain.md +38 -0
- package/systems/5e/world/topics/Light.md +14 -0
- package/systems/5e/world/topics/Lightning Bolt.md +16 -0
- package/systems/5e/world/topics/Locate Animals or Plants.md +13 -0
- package/systems/5e/world/topics/Locate Creature.md +17 -0
- package/systems/5e/world/topics/Locate Object.md +17 -0
- package/systems/5e/world/topics/Longstrider.md +14 -0
- package/systems/5e/world/topics/Mage Armor.md +12 -0
- package/systems/5e/world/topics/Mage Hand.md +16 -0
- package/systems/5e/world/topics/Magic Circle.md +22 -0
- package/systems/5e/world/topics/Magic Jar.md +24 -0
- package/systems/5e/world/topics/Magic Missile.md +14 -0
- package/systems/5e/world/topics/Magic Mouth.md +17 -0
- package/systems/5e/world/topics/Magic Weapon.md +15 -0
- package/systems/5e/world/topics/Magnificent Mansion.md +16 -0
- package/systems/5e/world/topics/Major Image.md +19 -0
- package/systems/5e/world/topics/Mass Cure Wounds.md +14 -0
- package/systems/5e/world/topics/Mass Heal.md +12 -0
- package/systems/5e/world/topics/Mass Healing Word.md +14 -0
- package/systems/5e/world/topics/Mass Suggestion.md +20 -0
- package/systems/5e/world/topics/Maze.md +17 -0
- package/systems/5e/world/topics/Meld into Stone.md +17 -0
- package/systems/5e/world/topics/Mending.md +14 -0
- package/systems/5e/world/topics/Message.md +14 -0
- package/systems/5e/world/topics/Meteor Swarm.md +14 -0
- package/systems/5e/world/topics/Mind Blank.md +12 -0
- package/systems/5e/world/topics/Minor Illusion.md +18 -0
- package/systems/5e/world/topics/Mirage Arcane.md +18 -0
- package/systems/5e/world/topics/Mirror Image.md +20 -0
- package/systems/5e/world/topics/Mislead.md +17 -0
- package/systems/5e/world/topics/Misty Step.md +12 -0
- package/systems/5e/world/topics/Modify Memory.md +23 -0
- package/systems/5e/world/topics/Monk.md +153 -0
- package/systems/5e/world/topics/Moonbeam.md +21 -0
- package/systems/5e/world/topics/Move Earth.md +21 -0
- package/systems/5e/world/topics/Nondetection.md +12 -0
- package/systems/5e/world/topics/Oath of Devotion.md +62 -0
- package/systems/5e/world/topics/Paladin Spells.md +51 -0
- package/systems/5e/world/topics/Paladin.md +173 -0
- package/systems/5e/world/topics/Pass without Trace.md +13 -0
- package/systems/5e/world/topics/Passwall.md +14 -0
- package/systems/5e/world/topics/Path of the Berserker.md +21 -0
- package/systems/5e/world/topics/Phantasmal Killer.md +15 -0
- package/systems/5e/world/topics/Phantom Steed.md +15 -0
- package/systems/5e/world/topics/Planar Ally.md +22 -0
- package/systems/5e/world/topics/Planar Binding.md +16 -0
- package/systems/5e/world/topics/Plane Shift.md +16 -0
- package/systems/5e/world/topics/Plant Growth.md +18 -0
- package/systems/5e/world/topics/Poison Spray.md +14 -0
- package/systems/5e/world/topics/Polymorph.md +21 -0
- package/systems/5e/world/topics/Power Word Kill.md +12 -0
- package/systems/5e/world/topics/Power Word Stun.md +14 -0
- package/systems/5e/world/topics/Prayer of Healing.md +14 -0
- package/systems/5e/world/topics/Prestidigitation.md +21 -0
- package/systems/5e/world/topics/Prismatic Spray.md +28 -0
- package/systems/5e/world/topics/Prismatic Wall.md +34 -0
- package/systems/5e/world/topics/Private Sanctum.md +25 -0
- package/systems/5e/world/topics/Produce Flame.md +16 -0
- package/systems/5e/world/topics/Programmed Illusion.md +18 -0
- package/systems/5e/world/topics/Project Image.md +19 -0
- package/systems/5e/world/topics/Protection from Energy.md +13 -0
- package/systems/5e/world/topics/Protection from Evil and Good.md +15 -0
- package/systems/5e/world/topics/Protection from Poison.md +14 -0
- package/systems/5e/world/topics/Purify Food and Drink.md +13 -0
- package/systems/5e/world/topics/Raise Dead.md +18 -0
- package/systems/5e/world/topics/Ranger Spells.md +57 -0
- package/systems/5e/world/topics/Ranger.md +162 -0
- package/systems/5e/world/topics/Ray of Enfeeblement.md +15 -0
- package/systems/5e/world/topics/Ray of Frost.md +14 -0
- package/systems/5e/world/topics/Regenerate.md +14 -0
- package/systems/5e/world/topics/Reincarnate.md +33 -0
- package/systems/5e/world/topics/Remove Curse.md +12 -0
- package/systems/5e/world/topics/Resilient Sphere.md +19 -0
- package/systems/5e/world/topics/Resistance.md +13 -0
- package/systems/5e/world/topics/Resurrection.md +20 -0
- package/systems/5e/world/topics/Reverse Gravity.md +17 -0
- package/systems/5e/world/topics/Revivify.md +12 -0
- package/systems/5e/world/topics/Rogue.md +114 -0
- package/systems/5e/world/topics/Rope Trick.md +18 -0
- package/systems/5e/world/topics/Sacred Flame.md +14 -0
- package/systems/5e/world/topics/Sanctuary.md +14 -0
- package/systems/5e/world/topics/School of Evocation.md +24 -0
- package/systems/5e/world/topics/Scorching Ray.md +16 -0
- package/systems/5e/world/topics/Scrying.md +31 -0
- package/systems/5e/world/topics/Secret Chest.md +16 -0
- package/systems/5e/world/topics/See Invisibility.md +12 -0
- package/systems/5e/world/topics/Seeming.md +18 -0
- package/systems/5e/world/topics/Sending.md +14 -0
- package/systems/5e/world/topics/Sequester.md +16 -0
- package/systems/5e/world/topics/Shapechange.md +23 -0
- package/systems/5e/world/topics/Shatter.md +16 -0
- package/systems/5e/world/topics/Shield (spell).md +13 -0
- package/systems/5e/world/topics/Shield of Faith.md +13 -0
- package/systems/5e/world/topics/Shillelagh.md +12 -0
- package/systems/5e/world/topics/Shocking Grasp.md +14 -0
- package/systems/5e/world/topics/Silence.md +14 -0
- package/systems/5e/world/topics/Silent Image.md +17 -0
- package/systems/5e/world/topics/Simulacrum.md +18 -0
- package/systems/5e/world/topics/Sleep.md +18 -0
- package/systems/5e/world/topics/Sleet Storm.md +17 -0
- package/systems/5e/world/topics/Slow.md +19 -0
- package/systems/5e/world/topics/Sorcerer Spells.md +155 -0
- package/systems/5e/world/topics/Sorcerer.md +166 -0
- package/systems/5e/world/topics/Spare the Dying.md +12 -0
- package/systems/5e/world/topics/Speak with Animals.md +13 -0
- package/systems/5e/world/topics/Speak with Dead.md +14 -0
- package/systems/5e/world/topics/Speak with Plants.md +20 -0
- package/systems/5e/world/topics/Spider Climb.md +13 -0
- package/systems/5e/world/topics/Spike Growth.md +15 -0
- package/systems/5e/world/topics/Spirit Guardians.md +17 -0
- package/systems/5e/world/topics/Spiritual Weapon.md +18 -0
- package/systems/5e/world/topics/Stinking Cloud.md +17 -0
- package/systems/5e/world/topics/Stone Shape.md +12 -0
- package/systems/5e/world/topics/Stoneskin.md +13 -0
- package/systems/5e/world/topics/Storm of Vengeance.md +23 -0
- package/systems/5e/world/topics/Suggestion.md +19 -0
- package/systems/5e/world/topics/Sunbeam.md +17 -0
- package/systems/5e/world/topics/Sunburst.md +16 -0
- package/systems/5e/world/topics/Symbol.md +36 -0
- package/systems/5e/world/topics/Telekinesis.md +23 -0
- package/systems/5e/world/topics/Telepathic Bond.md +15 -0
- package/systems/5e/world/topics/Teleport.md +38 -0
- package/systems/5e/world/topics/Teleportation Circle.md +16 -0
- package/systems/5e/world/topics/Thaumaturgy.md +21 -0
- package/systems/5e/world/topics/The Fiend.md +47 -0
- package/systems/5e/world/topics/Thief.md +24 -0
- package/systems/5e/world/topics/Thunderwave.md +16 -0
- package/systems/5e/world/topics/Time Stop.md +14 -0
- package/systems/5e/world/topics/Tiny Hut.md +17 -0
- package/systems/5e/world/topics/Tongues.md +12 -0
- package/systems/5e/world/topics/Transport via Plants.md +12 -0
- package/systems/5e/world/topics/Tree Stride.md +15 -0
- package/systems/5e/world/topics/True Polymorph.md +29 -0
- package/systems/5e/world/topics/True Resurrection.md +16 -0
- package/systems/5e/world/topics/True Seeing.md +12 -0
- package/systems/5e/world/topics/True Strike.md +13 -0
- package/systems/5e/world/topics/Unseen Servant.md +17 -0
- package/systems/5e/world/topics/Vampiric Touch.md +15 -0
- package/systems/5e/world/topics/Vicious Mockery.md +14 -0
- package/systems/5e/world/topics/Wall of Fire.md +19 -0
- package/systems/5e/world/topics/Wall of Force.md +15 -0
- package/systems/5e/world/topics/Wall of Ice.md +19 -0
- package/systems/5e/world/topics/Wall of Stone.md +23 -0
- package/systems/5e/world/topics/Wall of Thorns.md +19 -0
- package/systems/5e/world/topics/Warding Bond.md +14 -0
- package/systems/5e/world/topics/Warlock Spells.md +99 -0
- package/systems/5e/world/topics/Warlock.md +283 -0
- package/systems/5e/world/topics/Water Breathing.md +13 -0
- package/systems/5e/world/topics/Water Walk.md +15 -0
- package/systems/5e/world/topics/Way of the Open Hand.md +25 -0
- package/systems/5e/world/topics/Web.md +21 -0
- package/systems/5e/world/topics/Weird.md +13 -0
- package/systems/5e/world/topics/Wind Walk.md +14 -0
- package/systems/5e/world/topics/Wind Wall.md +17 -0
- package/systems/5e/world/topics/Wish.md +26 -0
- package/systems/5e/world/topics/Wizard Spells.md +239 -0
- package/systems/5e/world/topics/Wizard.md +141 -0
- package/systems/5e/world/topics/Word of Recall.md +14 -0
- package/systems/5e/world/topics/Zone of Truth.md +14 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
// The dice thrown on the page (D-278): the models loaded once, the stage, and each throw: all the dice together, then again those rerolled or exploded, past
|
|
2
|
+
// those that lie still; each shown turned by one of its symmetries so that it lands on its value, with its knocks. The tray loads it, with three.js and
|
|
3
|
+
// Rapier, at its first throw.
|
|
4
|
+
import { readChoice } from "../prefs.js";
|
|
5
|
+
import { loadDice } from "./load.js";
|
|
6
|
+
import { combine, landingTurn, symmetries } from "./models.js";
|
|
7
|
+
import { diceEdgesPref } from "./sets.js";
|
|
8
|
+
import { knock } from "./sounds.js";
|
|
9
|
+
import { makeStage } from "./stage.js";
|
|
10
|
+
import { loadPhysics, throwDice } from "./throw.js";
|
|
11
|
+
// How long the face before a reroll stays in sight, in milliseconds.
|
|
12
|
+
const beforeReroll = 300;
|
|
13
|
+
// How many frames late a knock may still sound.
|
|
14
|
+
const lateKnock = 4;
|
|
15
|
+
/** Loads the dice and their physics and makes the stage on the canvas; throws when the browser has no WebGL, or cannot run the physics' WebAssembly. */
|
|
16
|
+
export async function makeRoller(canvas) {
|
|
17
|
+
const [loaded] = await Promise.all([loadDice(readChoice(diceEdgesPref)), loadPhysics()]);
|
|
18
|
+
const stage = makeStage(canvas);
|
|
19
|
+
const turns = new Map([...loaded.models].map(([kind, model]) => [kind, symmetries(model.shape)]));
|
|
20
|
+
const model = (die) => loaded.models.get(die.kind);
|
|
21
|
+
return {
|
|
22
|
+
kinds: new Set(loaded.models.keys()),
|
|
23
|
+
async roll(dice, showing) {
|
|
24
|
+
// The edges chosen in Settings, rounded or sharp (D-354).
|
|
25
|
+
stage.place(dice.map((die) => die.kind), await loaded.looks(readChoice(diceEdgesPref)));
|
|
26
|
+
const poses = dice.map(() => undefined);
|
|
27
|
+
const lying = dice.map(() => undefined);
|
|
28
|
+
const throws = Math.max(0, ...dice.map((die) => die.values.length));
|
|
29
|
+
for (let round = 0; round < throws; round++) {
|
|
30
|
+
const rolling = dice.flatMap((die, index) => (die.values.length > round ? [index] : []));
|
|
31
|
+
const lyingDice = dice.flatMap((die, index) => {
|
|
32
|
+
const frame = lying[index];
|
|
33
|
+
return frame === undefined || rolling.includes(index) ? [] : [{ shape: model(die).shape, frame }];
|
|
34
|
+
});
|
|
35
|
+
const thrown = throwDice(rolling.map((index) => model(dice[index]).shape), stage.tray, Math.random, lyingDice);
|
|
36
|
+
const last = thrown.frames.at(-1) ?? [];
|
|
37
|
+
const landing = rolling.map((index, at) => landingTurn(model(dice[index]), turns.get(dice[index].kind) ?? [], last[at].quaternion, dice[index].values[round]));
|
|
38
|
+
// A die stops as it fell, its number at whatever angle (D-285).
|
|
39
|
+
const ended = await play(thrown, (frame) => {
|
|
40
|
+
rolling.forEach((index, at) => {
|
|
41
|
+
poses[index] = { position: frame[at].position, quaternion: combine(frame[at].quaternion, landing[at]) };
|
|
42
|
+
});
|
|
43
|
+
stage.show(poses);
|
|
44
|
+
}, showing);
|
|
45
|
+
if (!ended) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
rolling.forEach((index, at) => {
|
|
49
|
+
lying[index] = last[at];
|
|
50
|
+
});
|
|
51
|
+
// The face before a reroll stays in sight a moment.
|
|
52
|
+
if (round + 1 < throws && !showing.instant && !showing.skipping()) {
|
|
53
|
+
await new Promise((done) => setTimeout(done, beforeReroll));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
const instant = showing.instant || showing.skipping();
|
|
57
|
+
// A die that does not count burns away, or fades with reduced motion (D-358).
|
|
58
|
+
dice.forEach((die, index) => die.dropped && stage.dim(index, showing.instant));
|
|
59
|
+
// A rare face is celebrated, still when the throw was shown at once or cut short; at most 80 sparks or puffs in all, fewer on a phone.
|
|
60
|
+
const rares = dice.filter((die) => die.rare !== undefined).length;
|
|
61
|
+
const particles = Math.min(matchMedia("(max-width: 600px)").matches ? 24 : 40, Math.floor(80 / Math.max(1, rares)));
|
|
62
|
+
dice.forEach((die, index) => die.rare !== undefined && stage.celebrate(index, die.rare, { instant, particles }));
|
|
63
|
+
return true;
|
|
64
|
+
},
|
|
65
|
+
cover: (pixels) => stage.cover(pixels),
|
|
66
|
+
hide: () => stage.hide(),
|
|
67
|
+
resize: () => stage.resize(),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/** Shows a throw's frames, sixty to a second, with its knocks; its last frame alone with reduced motion; its end at once when the tray cuts it short. */
|
|
71
|
+
function play(thrown, show, showing) {
|
|
72
|
+
const frames = showing.instant ? thrown.frames.slice(-1) : thrown.frames;
|
|
73
|
+
const started = performance.now();
|
|
74
|
+
let heard = 0;
|
|
75
|
+
return new Promise((done) => {
|
|
76
|
+
const step = (now) => {
|
|
77
|
+
if (!showing.current()) {
|
|
78
|
+
done(false);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
// The first frame of the animation may begin a moment before the throw did.
|
|
82
|
+
const at = showing.skipping() ? frames.length - 1 : Math.min(frames.length - 1, Math.max(0, Math.floor((now - started) / (1000 / 60))));
|
|
83
|
+
show(frames[at]);
|
|
84
|
+
// The knocks up to this frame: none when the throw is shown at once or cut short, nor those left behind when the page stalled a moment, which would
|
|
85
|
+
// sound late, all together, the dice already still.
|
|
86
|
+
while (heard < thrown.knocks.length && thrown.knocks[heard].frame <= at) {
|
|
87
|
+
if (showing.sound && !showing.instant && !showing.skipping() && at - thrown.knocks[heard].frame <= lateKnock) {
|
|
88
|
+
knock(thrown.knocks[heard].strength, thrown.knocks[heard].onDie);
|
|
89
|
+
}
|
|
90
|
+
heard++;
|
|
91
|
+
}
|
|
92
|
+
if (at < frames.length - 1) {
|
|
93
|
+
requestAnimationFrame(step);
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
done(true);
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
requestAnimationFrame(step);
|
|
100
|
+
});
|
|
101
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// The look of the dice the player rolls (D-279, D-348, D-352): the theme's, or one of the sets chosen in Settings, as sets of real dice, each a material, a
|
|
2
|
+
// body and the ink of its numbers: resin, metal, wood, stone or crystal, the wood and the stone from CC0 pictures of ambientCG (assets/dice/textures). Kept in
|
|
3
|
+
// this browser alone.
|
|
4
|
+
import { readChoice } from "../prefs.js";
|
|
5
|
+
import { shownTheme } from "../theme.js";
|
|
6
|
+
const resin = { roughness: 0.35, metalness: 0.05, shine: 0 };
|
|
7
|
+
const metal = { roughness: 0.3, metalness: 1, shine: 1 };
|
|
8
|
+
// The gems and the glass: the page and their far faces seen through them (D-418).
|
|
9
|
+
const crystal = { roughness: 0.02, metalness: 0, shine: 1.5, clarity: 0.3 };
|
|
10
|
+
/** The sets, the theme's first, then by material: dark numbers on light bodies and light numbers on dark ones, to be read at a glance. */
|
|
11
|
+
export const diceSets = [
|
|
12
|
+
{ value: "theme", label: "Theme" },
|
|
13
|
+
{ value: "ivory", label: "Ivory", look: { finish: resin, body: "#ece3cf", ink: "#1f1d1b" } },
|
|
14
|
+
{ value: "obsidian", label: "Obsidian", look: { finish: resin, body: "#222227", ink: "#e0b84c" } },
|
|
15
|
+
{ value: "ruby", label: "Ruby", look: { finish: resin, body: "#8f1d2e", ink: "#f2c75a" } },
|
|
16
|
+
{ value: "emerald", label: "Emerald", look: { finish: resin, body: "#1c6b4b", ink: "#f4f0e6" } },
|
|
17
|
+
{ value: "sapphire", label: "Sapphire", look: { finish: resin, body: "#1f4c9c", ink: "#f4f0e6" } },
|
|
18
|
+
{ value: "amethyst", label: "Amethyst", look: { finish: resin, body: "#5d3590", ink: "#dcdce6" } },
|
|
19
|
+
{ value: "ruby-crystal", label: "Crystal ruby", look: { finish: crystal, body: "#8c0a1e", ink: "#f2c75a" } },
|
|
20
|
+
{ value: "sapphire-crystal", label: "Crystal sapphire", look: { finish: crystal, body: "#173aa6", ink: "#f4f0e6" } },
|
|
21
|
+
{ value: "amethyst-crystal", label: "Crystal amethyst", look: { finish: crystal, body: "#5e22b0", ink: "#f6f1ff" } },
|
|
22
|
+
// Clear as a drinking glass, and ice, frosted: their far numbers only engraved, so that the near ones are read.
|
|
23
|
+
{ value: "glass", label: "Glass", look: { finish: { roughness: 0, metalness: 0, shine: 0.8, clarity: 0.92, engraved: true, glassy: true, prism: 0.5 }, body: "#0b0d10", ink: "#c9971c", swatch: "#d8e9f0" } },
|
|
24
|
+
{ value: "ice", label: "Ice", look: { finish: { roughness: 0.5, metalness: 0, shine: 0.7, clarity: 0.55, engraved: true, glassy: true, frosted: true }, body: "#3f6276", ink: "#2c6fb5", swatch: "#c4e2f0" } },
|
|
25
|
+
{ value: "steel", label: "Steel", look: { finish: metal, body: "#c9ccd2", ink: "#16171a" } },
|
|
26
|
+
{ value: "brass", label: "Brass", look: { finish: { ...metal, roughness: 0.35 }, body: "#d2a64a", ink: "#2a1c08" } },
|
|
27
|
+
{ value: "walnut", label: "Walnut", look: { finish: { roughness: 0.6, metalness: 0, shine: 0, texture: "walnut" }, body: "#ffffff", ink: "#ecd29a" } },
|
|
28
|
+
{ value: "ash", label: "Ash", look: { finish: { roughness: 0.6, metalness: 0, shine: 0, texture: "ash" }, body: "#ffffff", ink: "#2e1c0e" } },
|
|
29
|
+
{ value: "marble", label: "Marble", look: { finish: { roughness: 0.15, metalness: 0, shine: 0.4, texture: "marble" }, body: "#ffffff", ink: "#1d1e24" } },
|
|
30
|
+
// Black onyx, polished, its bands barely seen (D-418).
|
|
31
|
+
{ value: "onyx", label: "Onyx", look: { finish: { roughness: 0.06, metalness: 0, shine: 0.7, texture: "onyx" }, body: "#3a3a3f", ink: "#e7c46a" } },
|
|
32
|
+
{ value: "granite", label: "Granite", look: { finish: { roughness: 0.25, metalness: 0, shine: 0.3, texture: "granite" }, body: "#ffffff", ink: "#141416" } },
|
|
33
|
+
];
|
|
34
|
+
/** Which set the player rolls. */
|
|
35
|
+
export const diceSetPref = { key: "rpg-engine.dice-set", initial: "theme", values: diceSets.map((set) => set.value) };
|
|
36
|
+
/** Whether the dice's edges are rounded or sharp, as a precision die's (D-354). */
|
|
37
|
+
export const diceEdgesPref = { key: "rpg-engine.dice-edges", initial: "rounded", values: ["rounded", "sharp"] };
|
|
38
|
+
/** The look of a set, by default the one chosen; the theme's by the theme shown: yellow resin with navy numbers on the dark page, navy with yellow on the light. */
|
|
39
|
+
export function diceLook(value = readChoice(diceSetPref)) {
|
|
40
|
+
const chosen = diceSets.find((set) => set.value === value)?.look;
|
|
41
|
+
if (chosen !== undefined) {
|
|
42
|
+
return chosen;
|
|
43
|
+
}
|
|
44
|
+
return shownTheme() === "dark" ? { finish: resin, body: "#f5c63e", ink: "#182c4c" } : { finish: resin, body: "#182c4c", ink: "#f5c63e" };
|
|
45
|
+
}
|
|
46
|
+
/** Where the picture of a grain is. */
|
|
47
|
+
export function texturePath(texture) {
|
|
48
|
+
return `/assets/dice/textures/${texture}.jpg`;
|
|
49
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
// The sound of the dice (D-278, D-283, D-357): one touch of a die in a felt-lined tray, recorded by the maintainer and equalized low, and the click of two dice
|
|
2
|
+
// hitting each other, recorded too, played at every knock of the physics, so the bounces of each throw make its pattern; as loud as the die hit, duller when
|
|
3
|
+
// softly, barely higher or lower each time. Until they load, the browser makes a knock of its own. Browsers let a page make sounds only after the player's
|
|
4
|
+
// first click or key.
|
|
5
|
+
let audio;
|
|
6
|
+
let output;
|
|
7
|
+
let touch;
|
|
8
|
+
let click;
|
|
9
|
+
// How loud the click is beside the touch: all of it where the ear hears best, it would cover the felt's thud. Dice clicking span less than they thud, some
|
|
10
|
+
// 18 dB from the softest to the hardest in a recording of five real dice, where their gain alone would make 37.
|
|
11
|
+
const clickLevel = 0.07;
|
|
12
|
+
const clickSpan = 0.75;
|
|
13
|
+
/** Lets the page make sounds, from a click or a key of the player's; the first time, it loads the samples. */
|
|
14
|
+
export function wakeSound() {
|
|
15
|
+
try {
|
|
16
|
+
if (audio === undefined) {
|
|
17
|
+
audio = new AudioContext();
|
|
18
|
+
// Many dice together never clip: a compressor before the speakers.
|
|
19
|
+
const compressor = audio.createDynamicsCompressor();
|
|
20
|
+
compressor.connect(audio.destination);
|
|
21
|
+
output = compressor;
|
|
22
|
+
void loadSample(audio, "dice-touch.wav").then((loaded) => {
|
|
23
|
+
touch = loaded;
|
|
24
|
+
});
|
|
25
|
+
void loadSample(audio, "dice-collision.wav").then((loaded) => {
|
|
26
|
+
click = loaded;
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
void audio.resume();
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
// No sound in this browser.
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/** A die's knock on the floor or on another die, as hard as given. */
|
|
36
|
+
export function knock(strength, onDie) {
|
|
37
|
+
if (audio === undefined || output === undefined || audio.state !== "running") {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
// Two dice meet each at half the speed between them, as two equal bodies do.
|
|
41
|
+
const loudness = Math.min(1, (onDie ? strength / 2 : strength) / 25);
|
|
42
|
+
if (touch === undefined) {
|
|
43
|
+
madeKnock(audio, output, loudness);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
// Two dice click, resin on resin, where the felt muffles a die's touch.
|
|
47
|
+
const hard = onDie && click !== undefined;
|
|
48
|
+
const source = audio.createBufferSource();
|
|
49
|
+
source.buffer = (hard ? click : undefined) ?? touch;
|
|
50
|
+
// The same die rings at the same pitch: a few hundredths up or down, only so that the same touch never sounds twice alike.
|
|
51
|
+
source.playbackRate.value = 0.97 + Math.random() * 0.06;
|
|
52
|
+
// A soft knock is a duller one: the felt lets less of the click through, from 300 Hz for the softest to some 12 kHz for the hardest, the touch's body
|
|
53
|
+
// being all below 1 kHz; two dice, from 5 kHz to 16 kHz, a click being all above 1 kHz.
|
|
54
|
+
const filter = audio.createBiquadFilter();
|
|
55
|
+
filter.type = "lowpass";
|
|
56
|
+
filter.frequency.value = hard ? 5000 * 3.2 ** loudness : 300 * 40 ** loudness;
|
|
57
|
+
filter.Q.value = Math.SQRT1_2;
|
|
58
|
+
// Each bounce, slower, is much softer than the one before, as a real die's on felt.
|
|
59
|
+
const gain = audio.createGain();
|
|
60
|
+
gain.gain.value = hard ? clickLevel * Math.max(0.05, loudness) ** clickSpan : Math.max(0.02, loudness ** 1.5);
|
|
61
|
+
source.connect(filter).connect(gain).connect(output);
|
|
62
|
+
source.start();
|
|
63
|
+
}
|
|
64
|
+
/** The browser's own knock: a short noise through a filter, with a short tone beneath it. */
|
|
65
|
+
function madeKnock(audio, output, loudness) {
|
|
66
|
+
const now = audio.currentTime;
|
|
67
|
+
const samples = Math.floor(audio.sampleRate * 0.06);
|
|
68
|
+
const noise = audio.createBuffer(1, samples, audio.sampleRate);
|
|
69
|
+
const data = noise.getChannelData(0);
|
|
70
|
+
for (let index = 0; index < samples; index++) {
|
|
71
|
+
data[index] = (Math.random() * 2 - 1) * Math.exp(-index / (samples / 7));
|
|
72
|
+
}
|
|
73
|
+
const click = audio.createBufferSource();
|
|
74
|
+
click.buffer = noise;
|
|
75
|
+
const filter = audio.createBiquadFilter();
|
|
76
|
+
filter.type = "bandpass";
|
|
77
|
+
filter.frequency.value = 1400 + loudness * 1800 + Math.random() * 600;
|
|
78
|
+
filter.Q.value = 1.4;
|
|
79
|
+
const clickGain = audio.createGain();
|
|
80
|
+
clickGain.gain.value = 0.15 + loudness * 0.45;
|
|
81
|
+
click.connect(filter).connect(clickGain).connect(output);
|
|
82
|
+
click.start(now);
|
|
83
|
+
const tone = audio.createOscillator();
|
|
84
|
+
tone.type = "sine";
|
|
85
|
+
tone.frequency.value = 900 - loudness * 300 + Math.random() * 80;
|
|
86
|
+
const toneGain = audio.createGain();
|
|
87
|
+
toneGain.gain.setValueAtTime(0.08 + loudness * 0.22, now);
|
|
88
|
+
toneGain.gain.exponentialRampToValueAtTime(0.001, now + 0.09);
|
|
89
|
+
tone.connect(toneGain).connect(output);
|
|
90
|
+
tone.start(now);
|
|
91
|
+
tone.stop(now + 0.1);
|
|
92
|
+
}
|
|
93
|
+
/** Loads and decodes a sample; undefined when it cannot, and the browser's own knock stays. */
|
|
94
|
+
async function loadSample(context, file) {
|
|
95
|
+
try {
|
|
96
|
+
const response = await fetch(`/assets/sounds/${file}`);
|
|
97
|
+
return await context.decodeAudioData(await response.arrayBuffer());
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
// Where the dice are shown (D-278): a three.js scene over the page, with a light, the dice's shadows on an invisible floor, and the dice of make-dice.py in the
|
|
2
|
+
// set chosen in Settings, by default the theme's (D-279, D-348, D-352): resin, metal mirroring a room made on the spot, wood or stone with its grain.
|
|
3
|
+
import * as THREE from "three";
|
|
4
|
+
import { RoomEnvironment } from "three/addons/environments/RoomEnvironment.js";
|
|
5
|
+
import { shownTheme } from "../theme.js";
|
|
6
|
+
import { burnAway, crack } from "./burn.js";
|
|
7
|
+
import { celebrate, embers, lightInk, makePictures } from "./celebration.js";
|
|
8
|
+
import { floorCrackMaterial } from "./floor-cracks.js";
|
|
9
|
+
import { frostPicture } from "./frost.js";
|
|
10
|
+
import { diceLook, texturePath } from "./sets.js";
|
|
11
|
+
// A die that does not count, as the lower of two d20 with advantage, goes out, whatever its set: its colour gone and darker, its body to a third of its
|
|
12
|
+
// light, its ink to some half, still read; never lighter, which on a dark die would look picked (D-348, D-414).
|
|
13
|
+
const dimmedBody = 0.35;
|
|
14
|
+
// How much of the window's foot the plate of the result covers, in pixels, until the plate of a throw is measured: from the window's edge to the plate's
|
|
15
|
+
// top, on a wide screen and on a phone, where it comes out of the bar of the sections.
|
|
16
|
+
const plateOnWide = 150;
|
|
17
|
+
// The window's height up to which the dice grow with it, in pixels: a laptop's or a desktop's; past it they keep their size.
|
|
18
|
+
const commonHeight = 900;
|
|
19
|
+
const plateOnPhone = 220;
|
|
20
|
+
const dimmedInk = 0.55;
|
|
21
|
+
// The fire the highest face's numbers light with, on every set and theme: a gold ink lights brighter, a dark one turns gold.
|
|
22
|
+
const branding = "#ffbf45";
|
|
23
|
+
/** Makes the stage on a canvas; throws when the browser has no WebGL. */
|
|
24
|
+
export function makeStage(canvas) {
|
|
25
|
+
const renderer = new THREE.WebGLRenderer({ canvas, alpha: true, antialias: true });
|
|
26
|
+
renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));
|
|
27
|
+
renderer.shadowMap.enabled = true;
|
|
28
|
+
renderer.shadowMap.type = THREE.PCFShadowMap;
|
|
29
|
+
// From high above, a little tilted, with a narrow view: the face that lands up is the one the player reads, even at the window's edges.
|
|
30
|
+
const camera = new THREE.PerspectiveCamera(18, 1, 0.1, 200);
|
|
31
|
+
const above = new THREE.Vector3(0, 45, 9);
|
|
32
|
+
const scene = new THREE.Scene();
|
|
33
|
+
scene.add(new THREE.HemisphereLight(0xffffff, 0x334466, 1.4));
|
|
34
|
+
const sun = new THREE.DirectionalLight(0xffffff, 2.2);
|
|
35
|
+
sun.position.set(-6, 14, 6);
|
|
36
|
+
sun.castShadow = true;
|
|
37
|
+
sun.shadow.mapSize.set(1024, 1024);
|
|
38
|
+
scene.add(sun);
|
|
39
|
+
const floor = new THREE.Mesh(new THREE.PlaneGeometry(400, 400), new THREE.ShadowMaterial({ opacity: 0.35 }));
|
|
40
|
+
floor.rotation.x = -Math.PI / 2;
|
|
41
|
+
floor.receiveShadow = true;
|
|
42
|
+
scene.add(floor);
|
|
43
|
+
let dice = [];
|
|
44
|
+
// The room the metals and the polished stones mirror, and the grains' pictures, each made or loaded once, the chosen set's at once.
|
|
45
|
+
let room;
|
|
46
|
+
const grains = new Map();
|
|
47
|
+
const grain = (name) => {
|
|
48
|
+
const known = grains.get(name);
|
|
49
|
+
if (known !== undefined) {
|
|
50
|
+
return known;
|
|
51
|
+
}
|
|
52
|
+
const loaded = new THREE.TextureLoader().load(texturePath(name));
|
|
53
|
+
loaded.colorSpace = THREE.SRGBColorSpace;
|
|
54
|
+
loaded.wrapS = THREE.RepeatWrapping;
|
|
55
|
+
loaded.wrapT = THREE.RepeatWrapping;
|
|
56
|
+
grains.set(name, loaded);
|
|
57
|
+
return loaded;
|
|
58
|
+
};
|
|
59
|
+
const chosenTexture = diceLook().finish.texture;
|
|
60
|
+
if (chosenTexture !== undefined) {
|
|
61
|
+
grain(chosenTexture);
|
|
62
|
+
}
|
|
63
|
+
// A body of the set's material; the grain laid from a different place on each die, once its picture is there, so that no two dice look alike.
|
|
64
|
+
const bodyOf = (finish, colour) => {
|
|
65
|
+
const kind = { name: "body", color: colour, roughness: finish.roughness, metalness: finish.metalness };
|
|
66
|
+
// A crystal: a varnish that mirrors on its faces, the page and its far faces seen through it.
|
|
67
|
+
const material = finish.clarity === undefined
|
|
68
|
+
? new THREE.MeshStandardMaterial(kind)
|
|
69
|
+
: new THREE.MeshPhysicalMaterial({ ...kind, clearcoat: 1, clearcoatRoughness: 0.03, transparent: true, opacity: 1 - finish.clarity, side: THREE.DoubleSide });
|
|
70
|
+
if (finish.glassy === true) {
|
|
71
|
+
glassy(material, finish.prism ?? 0);
|
|
72
|
+
}
|
|
73
|
+
if (finish.frosted === true) {
|
|
74
|
+
const frost = frostPicture();
|
|
75
|
+
material.bumpMap = frost;
|
|
76
|
+
material.bumpScale = 6;
|
|
77
|
+
material.roughnessMap = frost;
|
|
78
|
+
}
|
|
79
|
+
if (finish.shine > 0) {
|
|
80
|
+
room ??= new THREE.PMREMGenerator(renderer).fromScene(new RoomEnvironment(), 0.04).texture;
|
|
81
|
+
material.envMap = room;
|
|
82
|
+
material.envMapIntensity = finish.shine;
|
|
83
|
+
}
|
|
84
|
+
const picture = finish.texture === undefined ? undefined : grain(finish.texture);
|
|
85
|
+
if (picture !== undefined) {
|
|
86
|
+
const laid = picture.image === null || picture.image === undefined ? picture : picture.clone();
|
|
87
|
+
laid.offset.set(Math.random(), Math.random());
|
|
88
|
+
laid.needsUpdate = laid !== picture;
|
|
89
|
+
material.map = laid;
|
|
90
|
+
}
|
|
91
|
+
return material;
|
|
92
|
+
};
|
|
93
|
+
// The celebrations shown, drawn frame by frame while one of them moves.
|
|
94
|
+
let effects = [];
|
|
95
|
+
let pictures;
|
|
96
|
+
let moving = false;
|
|
97
|
+
const draw = (now) => {
|
|
98
|
+
moving = effects.map((effect) => effect.update(now)).some((still) => still);
|
|
99
|
+
renderer.render(scene, camera);
|
|
100
|
+
if (moving) {
|
|
101
|
+
requestAnimationFrame(draw);
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
const tray = { width: 7, depth: 4.5 };
|
|
105
|
+
let covering;
|
|
106
|
+
// The dice lie on a table that moves up the window as the tray ends above the plate.
|
|
107
|
+
const table = new THREE.Group();
|
|
108
|
+
scene.add(table);
|
|
109
|
+
const resize = () => {
|
|
110
|
+
const width = window.innerWidth;
|
|
111
|
+
const height = window.innerHeight;
|
|
112
|
+
renderer.setSize(width, height, false);
|
|
113
|
+
// The dice keep their size on the page in a taller window: past a common height the camera goes back, seeing more of the floor (D-375).
|
|
114
|
+
const back = Math.max(1, height / commonHeight);
|
|
115
|
+
camera.position.copy(above).multiplyScalar(back);
|
|
116
|
+
camera.lookAt(0, 0, 0);
|
|
117
|
+
camera.far = 200 * back;
|
|
118
|
+
camera.aspect = width / height;
|
|
119
|
+
camera.updateProjectionMatrix();
|
|
120
|
+
// The sun's shadows cover all that is seen.
|
|
121
|
+
Object.assign(sun.shadow.camera, { left: -12 * back, right: 12 * back, top: 12 * back, bottom: -12 * back });
|
|
122
|
+
sun.shadow.camera.updateProjectionMatrix();
|
|
123
|
+
// The tray fills what the camera sees on the floor, but for the window's foot the plate covers: no die lies under it (D-366).
|
|
124
|
+
const seen = 2 * Math.tan(THREE.MathUtils.degToRad(camera.fov / 2)) * camera.position.length();
|
|
125
|
+
const far = Math.max(3, seen / 2 - 1.2);
|
|
126
|
+
const covered = (covering ?? (matchMedia("(max-width: 600px)").matches ? plateOnPhone : plateOnWide)) / height * seen;
|
|
127
|
+
const front = Math.max(6 - far, far - covered);
|
|
128
|
+
tray.depth = (front + far) / 2;
|
|
129
|
+
tray.width = Math.max(3, far * camera.aspect);
|
|
130
|
+
table.position.z = (front - far) / 2;
|
|
131
|
+
};
|
|
132
|
+
// The crack of a natural 1 and the burn of a die set aside change the dice's shaders, and a rare face's halo and sparks have their own: made at the chosen
|
|
133
|
+
// set's first throw, while the dice fly, they cost no pause when a die cracks, burns or shines. The materials that keep them made, for that set's finish;
|
|
134
|
+
// the halo's and the sparks', and their pictures, for the page's life.
|
|
135
|
+
let primed;
|
|
136
|
+
const prime = (die, finish) => {
|
|
137
|
+
const key = `${finish.texture ?? ""} ${finish.shine > 0} ${finish.clarity ?? ""} ${finish.engraved === true} ${finish.glassy === true} ${finish.frosted === true} ${finish.prism ?? ""}`;
|
|
138
|
+
if (primed?.finish === key) {
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
primed?.materials.forEach((material) => material.dispose());
|
|
142
|
+
const copies = new THREE.Group();
|
|
143
|
+
// A copy of the die with materials of its own, its grain the set's picture.
|
|
144
|
+
const copy = () => {
|
|
145
|
+
const object = die.clone();
|
|
146
|
+
const materials = [];
|
|
147
|
+
object.traverse((part) => {
|
|
148
|
+
if (part instanceof THREE.Mesh) {
|
|
149
|
+
const material = part.material.clone();
|
|
150
|
+
material.map = material.map === null || finish.texture === undefined ? null : grain(finish.texture);
|
|
151
|
+
if (material.userData.engraved === true) {
|
|
152
|
+
engrave(material);
|
|
153
|
+
}
|
|
154
|
+
if (material.userData.glassy === true) {
|
|
155
|
+
glassy(material, Number(material.userData.prism ?? 0));
|
|
156
|
+
}
|
|
157
|
+
part.material = material;
|
|
158
|
+
materials.push(material);
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
copies.add(object);
|
|
162
|
+
return materials;
|
|
163
|
+
};
|
|
164
|
+
const cracked = copy();
|
|
165
|
+
crack(cracked, true);
|
|
166
|
+
const burnt = copy();
|
|
167
|
+
burnAway(new THREE.Group(), burnt, false, () => undefined);
|
|
168
|
+
primed = { finish: key, materials: [...cracked, ...burnt] };
|
|
169
|
+
if (pictures === undefined) {
|
|
170
|
+
pictures = makePictures();
|
|
171
|
+
Object.values(pictures).forEach((texture) => renderer.initTexture(texture));
|
|
172
|
+
copies.add(new THREE.Mesh(new THREE.PlaneGeometry(), new THREE.MeshBasicMaterial({ map: pictures.halo, transparent: true, depthWrite: false })));
|
|
173
|
+
copies.add(new THREE.Sprite(new THREE.SpriteMaterial({ map: pictures.star, transparent: true, depthWrite: false })));
|
|
174
|
+
copies.add(new THREE.Mesh(new THREE.PlaneGeometry(), floorCrackMaterial()));
|
|
175
|
+
copies.add(new THREE.Mesh(new THREE.PlaneGeometry(), new THREE.MeshBasicMaterial({ transparent: true, depthWrite: false })));
|
|
176
|
+
}
|
|
177
|
+
void renderer.compileAsync(copies, camera, scene);
|
|
178
|
+
};
|
|
179
|
+
const clear = () => {
|
|
180
|
+
dice.forEach((die) => {
|
|
181
|
+
table.remove(die.object);
|
|
182
|
+
die.materials.forEach((material) => {
|
|
183
|
+
// A grain's picture laid for this die alone goes with it.
|
|
184
|
+
if (material.map !== null && ![...grains.values()].includes(material.map)) {
|
|
185
|
+
material.map.dispose();
|
|
186
|
+
}
|
|
187
|
+
material.dispose();
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
effects.forEach((effect) => effect.dispose());
|
|
191
|
+
dice = [];
|
|
192
|
+
effects = [];
|
|
193
|
+
};
|
|
194
|
+
resize();
|
|
195
|
+
return {
|
|
196
|
+
tray,
|
|
197
|
+
place(kinds, looks) {
|
|
198
|
+
clear();
|
|
199
|
+
const look = diceLook();
|
|
200
|
+
dice = kinds.map((kind) => {
|
|
201
|
+
const object = (looks.get(kind) ?? new THREE.Group()).clone();
|
|
202
|
+
const materials = [];
|
|
203
|
+
object.traverse((part) => {
|
|
204
|
+
if (part instanceof THREE.Mesh) {
|
|
205
|
+
const ink = part.material.name === "ink";
|
|
206
|
+
const material = ink ? new THREE.MeshStandardMaterial({ name: "ink", color: look.ink, roughness: 0.6, metalness: 0.05 }) : bodyOf(look.finish, look.body);
|
|
207
|
+
if (ink && look.finish.engraved === true) {
|
|
208
|
+
engrave(material);
|
|
209
|
+
}
|
|
210
|
+
// Through a crystal, its numbers before its body, which veils the far ones.
|
|
211
|
+
part.renderOrder = ink ? 0 : 1;
|
|
212
|
+
part.material = material;
|
|
213
|
+
part.castShadow = true;
|
|
214
|
+
materials.push(material);
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
object.visible = false;
|
|
218
|
+
table.add(object);
|
|
219
|
+
return { object, materials };
|
|
220
|
+
});
|
|
221
|
+
const first = dice[0];
|
|
222
|
+
if (first !== undefined) {
|
|
223
|
+
prime(first.object, look.finish);
|
|
224
|
+
}
|
|
225
|
+
},
|
|
226
|
+
cover(pixels) {
|
|
227
|
+
covering = pixels;
|
|
228
|
+
resize();
|
|
229
|
+
},
|
|
230
|
+
show(poses) {
|
|
231
|
+
dice.forEach((die, index) => {
|
|
232
|
+
const pose = poses[index];
|
|
233
|
+
if (pose !== undefined) {
|
|
234
|
+
die.object.position.set(...pose.position);
|
|
235
|
+
die.object.quaternion.set(...pose.quaternion);
|
|
236
|
+
die.object.visible = true;
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
renderer.render(scene, camera);
|
|
240
|
+
},
|
|
241
|
+
dim(die, instant) {
|
|
242
|
+
const turning = (dice[die]?.materials ?? []).map((material) => ({
|
|
243
|
+
material,
|
|
244
|
+
from: material.color.clone(),
|
|
245
|
+
to: goneOut(material.color, material.name === "ink" ? dimmedInk : dimmedBody),
|
|
246
|
+
shine: material.envMapIntensity,
|
|
247
|
+
}));
|
|
248
|
+
// Out in a blink, not at a stroke (D-358): a metal set aside mirrors little; a wood or a stone keeps its grain, darker, as its colour tints it.
|
|
249
|
+
const goingOut = (amount) => {
|
|
250
|
+
turning.forEach(({ material, from, to, shine }) => {
|
|
251
|
+
material.color.lerpColors(from, to, amount);
|
|
252
|
+
material.envMapIntensity = shine * (1 - 0.7 * amount);
|
|
253
|
+
});
|
|
254
|
+
};
|
|
255
|
+
const dropped = dice[die];
|
|
256
|
+
if (dropped !== undefined) {
|
|
257
|
+
effects.push(burnAway(dropped.object, dropped.materials, instant, goingOut));
|
|
258
|
+
if (!moving) {
|
|
259
|
+
moving = true;
|
|
260
|
+
requestAnimationFrame(draw);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
renderer.render(scene, camera);
|
|
264
|
+
},
|
|
265
|
+
celebrate(die, rare, showing) {
|
|
266
|
+
const shown = dice[die];
|
|
267
|
+
if (shown !== undefined) {
|
|
268
|
+
pictures ??= makePictures();
|
|
269
|
+
const glow = themeColours().glow;
|
|
270
|
+
effects.push(celebrate(scene, seenUnder(shown.object.getWorldPosition(new THREE.Vector3()), camera.position), rare, glow, pictures, showing));
|
|
271
|
+
// The highest face's numbers lit with fire, a few embers flying off them as from a brand (D-363, D-410); the lowest's die cracked.
|
|
272
|
+
if (rare === "highest") {
|
|
273
|
+
const middle = shown.object.getWorldPosition(new THREE.Vector3());
|
|
274
|
+
effects.push(lightInk(shown.materials.filter((material) => material.name === "ink"), branding, showing.instant));
|
|
275
|
+
effects.push(embers(scene, middle, pictures, showing));
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
effects.push(crack(shown.materials, showing.instant));
|
|
279
|
+
}
|
|
280
|
+
if (!moving) {
|
|
281
|
+
moving = true;
|
|
282
|
+
requestAnimationFrame(draw);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
},
|
|
286
|
+
hide() {
|
|
287
|
+
clear();
|
|
288
|
+
renderer.render(scene, camera);
|
|
289
|
+
},
|
|
290
|
+
resize,
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
/** The point of the floor seen behind a die's middle, from the camera a little aslant: what goes around the die on the floor is centred there, not under it. */
|
|
294
|
+
function seenUnder(middle, eye) {
|
|
295
|
+
const along = eye.y / Math.max(1e-6, eye.y - middle.y);
|
|
296
|
+
return eye.clone().lerp(middle, along).setY(0);
|
|
297
|
+
}
|
|
298
|
+
/** Shows a die's numbers on its far half, seen through a clear die, only as engravings: faint and colourless; the near ones as they are. */
|
|
299
|
+
function engrave(material) {
|
|
300
|
+
material.transparent = true;
|
|
301
|
+
material.userData.engraved = true;
|
|
302
|
+
// Its shaders known apart from a plain ink's, even with a crack or a burn wrapped around this.
|
|
303
|
+
material.customProgramCacheKey = () => `engraved ${material.onBeforeCompile.toString()}`;
|
|
304
|
+
material.onBeforeCompile = (shader) => {
|
|
305
|
+
// How much the face a number is on is turned away from the camera: 0 facing it or aside, 1 turned away; a number goes from one to the other whole.
|
|
306
|
+
shader.vertexShader = shader.vertexShader
|
|
307
|
+
.replace("#include <common>", `#include <common>
|
|
308
|
+
attribute vec3 dieFace;
|
|
309
|
+
varying float engraving;`)
|
|
310
|
+
.replace("#include <project_vertex>", `#include <project_vertex>
|
|
311
|
+
engraving = smoothstep(0.05, -0.3, dot(normalize(normalMatrix * dieFace), normalize(-mvPosition.xyz)));`);
|
|
312
|
+
shader.fragmentShader = shader.fragmentShader
|
|
313
|
+
.replace("#include <common>", `#include <common>
|
|
314
|
+
varying float engraving;`)
|
|
315
|
+
.replace("#include <color_fragment>", `#include <color_fragment>
|
|
316
|
+
diffuseColor.rgb = mix(diffuseColor.rgb, vec3(1.0), engraving);
|
|
317
|
+
diffuseColor.a *= mix(1.0, 0.2, engraving);`);
|
|
318
|
+
};
|
|
319
|
+
material.needsUpdate = true;
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Makes a die all its reflections, as a glass: they add to what is behind it in full, which shows through it but at its edges, where it is seen aslant and
|
|
323
|
+
* mirrors more; there its light splits into the colours of the rainbow by the share given, as through a prism.
|
|
324
|
+
*/
|
|
325
|
+
function glassy(material, prism) {
|
|
326
|
+
material.blending = THREE.CustomBlending;
|
|
327
|
+
material.blendSrc = THREE.OneFactor;
|
|
328
|
+
material.blendDst = THREE.OneMinusSrcAlphaFactor;
|
|
329
|
+
material.userData.glassy = true;
|
|
330
|
+
material.userData.prism = prism;
|
|
331
|
+
material.customProgramCacheKey = () => `glassy ${prism} ${material.onBeforeCompile.toString()}`;
|
|
332
|
+
material.onBeforeCompile = (shader) => {
|
|
333
|
+
shader.fragmentShader = shader.fragmentShader.replace("#include <opaque_fragment>", `float facing = abs(dot(normalize(normal), normalize(vViewPosition)));
|
|
334
|
+
float edge = pow(1.0 - facing, 3.0);
|
|
335
|
+
outgoingLight += (0.5 + 0.5 * cos(6.2831853 * (vec3(0.0, 0.33, 0.67) + facing * 2.5))) * edge * ${prism.toFixed(2)};
|
|
336
|
+
diffuseColor.a = clamp(diffuseColor.a + 0.8 * edge, 0.0, 1.0);
|
|
337
|
+
#include <opaque_fragment>`);
|
|
338
|
+
};
|
|
339
|
+
material.needsUpdate = true;
|
|
340
|
+
}
|
|
341
|
+
/** A colour gone out: its grey, as light as it was, then darker by the share given. */
|
|
342
|
+
function goneOut(colour, share) {
|
|
343
|
+
const light = 0.2126 * colour.r + 0.7152 * colour.g + 0.0722 * colour.b;
|
|
344
|
+
return new THREE.Color(light * share, light * share, light * share);
|
|
345
|
+
}
|
|
346
|
+
/** By the theme (D-279, D-282): the glow of the rare faces. */
|
|
347
|
+
function themeColours() {
|
|
348
|
+
return shownTheme() === "dark"
|
|
349
|
+
? {
|
|
350
|
+
glow: { lights: true, highest: { halo: "#f5c63e", resting: 0.6, sparks: ["#f5c63e", "#ffefcf"] }, lowest: { crack: "#c2503f", hot: "#ffd2c6", ring: "#ff7a66" } },
|
|
351
|
+
}
|
|
352
|
+
: {
|
|
353
|
+
glow: { lights: false, highest: { halo: "#d1a61b", resting: 0.85, sparks: ["#c29803", "#254b83"] }, lowest: { crack: "#5e1f17", hot: "#e0442c", ring: "#a73929" } },
|
|
354
|
+
};
|
|
355
|
+
}
|