narrat 0.18.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +30 -30
- package/lib/components/menu.vue.d.ts +2 -0
- package/lib/components/quests.vue.d.ts +25 -0
- package/lib/config.d.ts +16 -0
- package/lib/demo/bitsy/bitsy.d.ts +27 -0
- package/lib/display.d.ts +2 -0
- package/lib/index.esm.js +376 -68
- package/lib/index.js +377 -67
- package/lib/plugins.d.ts +22 -0
- package/lib/store.d.ts +1 -1
- package/lib/stores/inventory-store.d.ts +4 -1
- package/lib/stores/main-store.d.ts +15 -0
- package/lib/stores/quest-log.d.ts +36 -0
- package/lib/types/game-save.d.ts +2 -0
- package/lib/utils/data-helpers.d.ts +3 -0
- package/lib/utils/object-iterators.d.ts +8 -0
- package/lib/vm/commands/quest-commands.d.ts +5 -0
- package/package.json +85 -85
- package/CHANGELOG.md +0 -336
package/lib/index.esm.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Version:
|
|
1
|
+
// Version: 1.2.0 - June 25, 2022 14:14:05
|
|
2
2
|
import 'es6-promise/auto';
|
|
3
3
|
import { ref, reactive, readonly, defineComponent, openBlock, createElementBlock, normalizeStyle, createElementVNode, createCommentVNode, Fragment, renderList, normalizeClass, createBlock, Transition, withCtx, renderSlot, createTextVNode, computed, resolveComponent, withDirectives, vModelText, toDisplayString, TransitionGroup, createVNode, createApp } from 'vue';
|
|
4
4
|
import { defineStore, mapState, createPinia } from 'pinia';
|
|
@@ -30,7 +30,7 @@ function styleInject(css, ref) {
|
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
var css_248z = "/*! @import */\n\n/*! modern-normalize v1.0.0 | MIT License | https://github.com/sindresorhus/modern-normalize */\n\n/*\nDocument\n========\n*/\n\n/**\nUse a better box model (opinionated).\n*/\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n/**\nUse a more readable tab size (opinionated).\n*/\n\n:root {\n -moz-tab-size: 4;\n -o-tab-size: 4;\n tab-size: 4;\n}\n\n/**\n1. Correct the line height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n*/\n\nhtml {\n line-height: 1.15; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/*\nSections\n========\n*/\n\n/**\nRemove the margin in all browsers.\n*/\n\nbody {\n margin: 0;\n}\n\n/**\nImprove consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3)\n*/\n\nbody {\n font-family:\n\t\tsystem-ui,\n\t\t-apple-system, /* Firefox supports this but not yet `system-ui` */\n\t\t'Segoe UI',\n\t\tRoboto,\n\t\tHelvetica,\n\t\tArial,\n\t\tsans-serif,\n\t\t'Apple Color Emoji',\n\t\t'Segoe UI Emoji';\n}\n\n/*\nGrouping content\n================\n*/\n\n/**\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n*/\n\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n}\n\n/*\nText-level semantics\n====================\n*/\n\n/**\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr[title] {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n\n/**\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n1. Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3)\n2. Correct the odd 'em' font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n font-family:\n\t\tui-monospace,\n\t\tSFMono-Regular,\n\t\tConsolas,\n\t\t'Liberation Mono',\n\t\tMenlo,\n\t\tmonospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n font-size: 80%;\n}\n\n/**\nPrevent 'sub' and 'sup' elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/*\nTabular data\n============\n*/\n\n/**\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n*/\n\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n}\n\n/*\nForms\n=====\n*/\n\n/**\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\nRemove the inheritance of text transform in Edge and Firefox.\n1. Remove the inheritance of text transform in Firefox.\n*/\n\nbutton,\nselect { /* 1 */\n text-transform: none;\n}\n\n/**\nCorrect the inability to style clickable types in iOS and Safari.\n*/\n\nbutton,\n[type='button'],\n[type='reset'] {\n -webkit-appearance: button;\n}\n\n/**\nRemove the inner border and padding in Firefox.\n*/\n\n/**\nRestore the focus styles unset by the previous rule.\n*/\n\n/**\nRemove the additional ':invalid' styles in Firefox.\nSee: https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737\n*/\n\n/**\nRemove the padding so developers are not caught out when they zero out 'fieldset' elements in all browsers.\n*/\n\nlegend {\n padding: 0;\n}\n\n/**\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n/**\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n/**\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to 'inherit' in Safari.\n*/\n\n/*\nInteractive\n===========\n*/\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n display: list-item;\n}\n\n/**\n * Manually forked from SUIT CSS Base: https://github.com/suitcss/base\n * A thin layer on top of normalize.css that provides a starting point more\n * suitable for web applications.\n */\n\n/**\n * Removes the default spacing and border for appropriate elements.\n */\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n margin: 0;\n}\n\nbutton {\n background-color: transparent;\n background-image: none;\n}\n\n/**\n * Work around a Firefox/IE bug where the transparent `button` background\n * results in a loss of the default `button` focus styles.\n */\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\nfieldset {\n margin: 0;\n padding: 0;\n}\n\nol,\nul {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n/**\n * Tailwind custom reset styles\n */\n\n/**\n * 1. Use the user's configured `sans` font-family (with Tailwind's default\n * sans-serif font stack as a fallback) as a sane default.\n * 2. Use Tailwind's default \"normal\" line-height so the user isn't forced\n * to override it to ensure consistency even when using the default theme.\n */\n\nhtml {\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"; /* 1 */\n line-height: 1.5; /* 2 */\n}\n\n/**\n * Inherit font-family and line-height from `html` so users can set them as\n * a class directly on the `html` element.\n */\n\nbody {\n font-family: inherit;\n line-height: inherit;\n}\n\n/**\n * 1. Prevent padding and border from affecting element width.\n *\n * We used to set this in the html element and inherit from\n * the parent element for everything else. This caused issues\n * in shadow-dom-enhanced elements like <details> where the content\n * is wrapped by a div with box-sizing set to `content-box`.\n *\n * https://github.com/mozdevs/cssremedy/issues/4\n *\n *\n * 2. Allow adding a border to an element by just adding a border-width.\n *\n * By default, the way the browser specifies that an element should have no\n * border is by setting it's border-style to `none` in the user-agent\n * stylesheet.\n *\n * In order to easily add borders to elements by just setting the `border-width`\n * property, we change the default border-style for all elements to `solid`, and\n * use border-width to hide them instead. This way our `border` utilities only\n * need to set the `border-width` property instead of the entire `border`\n * shorthand, making our border utilities much more straightforward to compose.\n *\n * https://github.com/tailwindcss/tailwindcss/pull/116\n */\n\n*,\n::before,\n::after {\n box-sizing: border-box; /* 1 */\n border-width: 0; /* 2 */\n border-style: solid; /* 2 */\n border-color: #e5e7eb; /* 2 */\n}\n\n/*\n * Ensure horizontal rules are visible by default\n */\n\nhr {\n border-top-width: 1px;\n}\n\n/**\n * Undo the `border-style: none` reset that Normalize applies to images so that\n * our `border-{width}` utilities have the expected effect.\n *\n * The Normalize reset is unnecessary for us since we default the border-width\n * to 0 on all elements.\n *\n * https://github.com/tailwindcss/tailwindcss/issues/362\n */\n\nimg {\n border-style: solid;\n}\n\ntextarea {\n resize: vertical;\n}\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n color: #9ca3af;\n}\n\ninput:-ms-input-placeholder, textarea:-ms-input-placeholder {\n color: #9ca3af;\n}\n\ninput::placeholder,\ntextarea::placeholder {\n color: #9ca3af;\n}\n\nbutton {\n cursor: pointer;\n}\n\ntable {\n border-collapse: collapse;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\n/**\n * Reset links to optimize for opt-in styling instead of\n * opt-out.\n */\n\na {\n color: inherit;\n text-decoration: inherit;\n}\n\n/**\n * Reset form element properties that are easy to forget to\n * style explicitly so you don't inadvertently introduce\n * styles that deviate from your design system. These styles\n * supplement a partial reset that is already applied by\n * normalize.css.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n padding: 0;\n line-height: inherit;\n color: inherit;\n}\n\n/**\n * Use the configured 'mono' font family for elements that\n * are expected to be rendered with a monospace font, falling\n * back to the system monospace stack if there is no configured\n * 'mono' font family.\n */\n\npre,\ncode,\nkbd,\nsamp {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n/**\n * Make replaced elements `display: block` by default as that's\n * the behavior you want almost all of the time. Inspired by\n * CSS Remedy, with `svg` added as well.\n *\n * https://github.com/mozdevs/cssremedy/issues/14\n */\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block;\n vertical-align: middle;\n}\n\n/**\n * Constrain images and videos to the parent width and preserve\n * their instrinsic aspect ratio.\n *\n * https://github.com/mozdevs/cssremedy/issues/14\n */\n\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n\n.container {\n width: 100%;\n}\n\n@media (min-width: 640px) {\n .container {\n max-width: 640px;\n }\n}\n\n@media (min-width: 768px) {\n .container {\n max-width: 768px;\n }\n}\n\n@media (min-width: 1024px) {\n .container {\n max-width: 1024px;\n }\n}\n\n@media (min-width: 1280px) {\n .container {\n max-width: 1280px;\n }\n}\n\n@media (min-width: 1536px) {\n .container {\n max-width: 1536px;\n }\n}\n\n.bg-gray-800 {\n --tw-bg-opacity: 1;\n background-color: rgba(31, 41, 55, var(--tw-bg-opacity));\n}\n\n.border {\n border-width: 1px;\n}\n\n.flex {\n display: flex;\n}\n\n.table {\n display: table;\n}\n\n.grid {\n display: grid;\n}\n\n.hidden {\n display: none;\n}\n\n.flex-row {\n flex-direction: row;\n}\n\n.flex-col {\n flex-direction: column;\n}\n\n.flex-grow {\n flex-grow: 1;\n}\n\n.flex-shrink {\n flex-shrink: 1;\n}\n\n.list-disc {\n list-style-type: disc;\n}\n\n.absolute {\n position: absolute;\n}\n\n.resize {\n resize: both;\n}\n\n* {\n --tw-shadow: 0 0 #0000;\n}\n\n* {\n --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgba(59, 130, 246, 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n}\n\n.table-auto {\n table-layout: auto;\n}\n\n.line-through {\n text-decoration: line-through;\n}\n\n.w-full {\n width: 100%;\n}\n\n.gap-4 {\n gap: 1rem;\n}\n\n.grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n}\n\n.transform {\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n transform: translateX(var(--tw-translate-x)) translateY(var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.transition {\n transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n\n@-webkit-keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n@-webkit-keyframes ping {\n 75%, 100% {\n transform: scale(2);\n opacity: 0;\n }\n}\n\n@keyframes ping {\n 75%, 100% {\n transform: scale(2);\n opacity: 0;\n }\n}\n\n@-webkit-keyframes pulse {\n 50% {\n opacity: .5;\n }\n}\n\n@keyframes pulse {\n 50% {\n opacity: .5;\n }\n}\n\n@-webkit-keyframes bounce {\n 0%, 100% {\n transform: translateY(-25%);\n -webkit-animation-timing-function: cubic-bezier(0.8,0,1,1);\n animation-timing-function: cubic-bezier(0.8,0,1,1);\n }\n\n 50% {\n transform: none;\n -webkit-animation-timing-function: cubic-bezier(0,0,0.2,1);\n animation-timing-function: cubic-bezier(0,0,0.2,1);\n }\n}\n\n@keyframes bounce {\n 0%, 100% {\n transform: translateY(-25%);\n -webkit-animation-timing-function: cubic-bezier(0.8,0,1,1);\n animation-timing-function: cubic-bezier(0.8,0,1,1);\n }\n\n 50% {\n transform: none;\n -webkit-animation-timing-function: cubic-bezier(0,0,0.2,1);\n animation-timing-function: cubic-bezier(0,0,0.2,1);\n }\n}\n\n:root {\n --bg-color: #131720;\n --text-color: #d9e1f2;\n --primary: hsl(255, 30%, 55%);\n --focus: hsl(210, 90%, 50%);\n --secondary: #42b983;\n --border-color: hsla(0, 0%, 100%, 0.2);\n --light-1: hsl(210, 30%, 40%);\n --light-2: hsl(255, 30%, 50%);\n --light-background: linear-gradient(to right, var(--light-1), var(--light-2));\n --shadow-1: hsla(236, 50%, 50%, 0.3);\n --shadow-2: hsla(236, 50%, 50%, 0.4);\n --hud-background: rgba(0, 0, 0, 0.4);\n --hud-text-color: var(--text-color);\n --notifications-bg: darkslateblue;\n --skills-text-background: rgba(0, 0, 0, 0.5);\n --skills-text-color: var(--text-color);\n --skills-level-background: rgba(0, 0, 0, 0.5);\n --skills-level-color: orange;\n --skills-xp-bar-height: 40px;\n --skill-check-name-color: orange;\n --skill-check-difficulty: orange;\n --skill-check-success: green;\n --skill-check-failed: red;\n --skill-check-color: orange;\n --dialog-choice-color: orange;\n --dialog-choice-hover-color: var(--text-color);\n --inventory-text-background: rgba(0, 0, 0, 0.5);\n --inventory-text-color: var(--text-color);\n --inventory-amount-background: rgba(0, 0, 0, 0.5);\n --inventory-amount-color: orange;\n}\n\n.list-item {\n display: inline-block;\n margin-right: 10px;\n}\n\n.list-enter-active,\n.list-leave-active {\n transition: all 0.3s ease;\n}\n\n/* .list-move {\n transition: transform 0.3s ease;\n} */\n\n.list-enter-from,\n.list-leave-to {\n opacity: 0;\n transform: translateX(300px);\n}\n\n.notification-item {\n display: inline-block;\n margin-right: 10px;\n}\n\n.notification-enter-active,\n.notification-leave-active {\n transition: all 0.3s ease;\n}\n\n/* .notification-move {\n transition: transform 0.3s ease;\n} */\n\n.notification-enter-from,\n.notification-leave-to {\n opacity: 0;\n transform: translateY(-300px);\n}\n\n.fade-enter-active,\n.fade-leave-active {\n transition: opacity 0.3s ease;\n}\n\n.fade-enter-from,\n.fade-leave-to {\n opacity: 0;\n}\n\n.fade-in-enter-active {\n transition: opacity 0.1s ease;\n}\n\n.fade-in-enter-from {\n opacity: 0;\n}\n\nbody {\n padding: 0;\n margin: 0;\n font-family: Arial, sans-serif;\n background-color: black;\n}\n\n.select {\n background: var(--light-background);\n padding: 10px;\n}\n\n.option {\n background-color: var(--light-2);\n padding: 5px;\n color: var(--text-color);\n}\n\n.button {\n background: var(--light-background);\n color: var(--text-color);\n box-shadow: 0.4rem 0.4rem 2.4rem 0.2rem var(--shadow-1);\n border-radius: 100px;\n padding: 10px;\n font-weight: 800;\n font-size: 16px;\n margin: 10px;\n transition: 0.2s;\n}\n\n.button:focus,\n.button:hover {\n transform: translateY(-0.2rem);\n box-shadow: 0 0 2.4rem 0.2rem var(--shadow-2);\n}\n\n.input {\n background: var(--light-background);\n color: var(--text-color);\n box-shadow: 0.4rem 0.4rem 2.4rem 0.2rem var(--shadow-1);\n border-radius: 100px;\n padding: 10px;\n font-weight: 800;\n font-size: 16px;\n margin: 10px;\n transition: 0.2s;\n}\n\n.input:focus,\n.input:hover {\n transform: translateY(-0.2rem);\n box-shadow: 0 0 2.4rem 0.2rem var(--shadow-2);\n}\n\na {\n color: pink;\n text-decoration: underline;\n}\n\nth,\ntd {\n padding: 4px;\n border: 1px solid var(--text-color);\n text-align: center;\n}\n\n#game-holder {\n width: 100vw;\n height: 100vh;\n padding: 0;\n margin: 0;\n top: 0;\n left: 0;\n background-color: black;\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: -webkit-fill-available;\n}\n\n.title {\n font-size: 30px;\n font-weight: 700;\n text-align: center;\n}\n\n.container {\n padding: 20px;\n}\n\nh1,\nh2,\nh3,\nh4 {\n font-weight: 700;\n}\n\nh1 {\n font-size: 30px;\n}\n\nh2 {\n font-size: 26px;\n}\n\nh3 {\n font-size: 24px;\n}\n\nhr.solid {\n border: 1px solid var(--text-color);\n margin-top: 30px;\n margin-bottom: 30px;\n}\n\n.card-1 {\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);\n transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1);\n}\n\n.card-1:hover {\n box-shadow: 0 14px 28px rgba(0, 0, 0, 0.25), 0 10px 10px rgba(0, 0, 0, 0.22);\n}\n\n.card-2 {\n box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);\n}\n\n.card-3 {\n box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23);\n}\n\n.card-4 {\n box-shadow: 0 14px 28px rgba(0, 0, 0, 0.25), 0 10px 10px rgba(0, 0, 0, 0.22);\n}\n\n.card-5 {\n box-shadow: 0 19px 38px rgba(0, 0, 0, 0.3), 0 15px 12px rgba(0, 0, 0, 0.22);\n}\n\n.dialog-choice {\n transition: 0.2s;\n}\n\n.dialog-choice:hover {\n transform: scale(1.05, 1.05);\n transform-origin: center;\n}\n\n/* Somewhat arcane CSS to force the hover color to override the child style.\nOtherwise hovering choices doesn't change the color of skill check prompts. */\n\n.dialog-choice:not(:hover) > .skill-check-name,\n.passive-skill-check > .skill-check-name {\n color: var(--skill-check-name-color);\n}\n\n.dialog-choice:not(:hover) > .skill-check-difficulty,\n.passive-skill-check > .skill-check-difficulty {\n color: var(--skill-check-difficulty);\n}\n\n.skill-check-difficulty {\n font-weight: 700;\n}\n\n.dialog-choice:not(:hover) > .skill-check-success,\n.passive-skill-check > .skill-check-success {\n color: var(--skill-check-success);\n}\n\n.dialog-choice:not(:hover) > .skill-check-failed,\n.passive-skill-check > .skill-check-failed {\n color: var(--skill-check-failed);\n}\n\n.dialog-choice:not(:hover) > .skill-check,\n.passive-skill-check.skill-check {\n color: var(--skill-check-color);\n}\n\n.narrat-canvas {\n position: absolute;\n height: 100%;\n top: 0;\n left: 0;\n}\n\n/* Looks ugly */\n\n/* @keyframes strike-anim {\n 0% {\n width: 0;\n }\n 100% {\n width: 100%;\n }\n}\n.strike-anim {\n position: relative;\n}\n.strike-anim::after {\n content: ' ';\n position: absolute;\n top: 50%;\n left: 0;\n width: 100%;\n height: 1px;\n background: var(--text-color);\n animation-name: strike-anim;\n animation-duration: 0.5s;\n animation-timing-function: linear;\n animation-iteration-count: 1;\n animation-fill-mode: forwards;\n} */\n\n#touchTrigger {\n pointer-events: none;\n}\n\n@media (min-width: 640px) {\n}\n\n@media (min-width: 768px) {\n}\n\n@media (min-width: 1024px) {\n}\n\n@media (min-width: 1280px) {\n}\n\n@media (min-width: 1536px) {\n}\n";
|
|
33
|
+
var css_248z = "/*! @import */\n\n/*! modern-normalize v1.0.0 | MIT License | https://github.com/sindresorhus/modern-normalize */\n\n/*\nDocument\n========\n*/\n\n/**\nUse a better box model (opinionated).\n*/\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n/**\nUse a more readable tab size (opinionated).\n*/\n\n:root {\n -moz-tab-size: 4;\n -o-tab-size: 4;\n tab-size: 4;\n}\n\n/**\n1. Correct the line height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n*/\n\nhtml {\n line-height: 1.15; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/*\nSections\n========\n*/\n\n/**\nRemove the margin in all browsers.\n*/\n\nbody {\n margin: 0;\n}\n\n/**\nImprove consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3)\n*/\n\nbody {\n font-family:\n\t\tsystem-ui,\n\t\t-apple-system, /* Firefox supports this but not yet `system-ui` */\n\t\t'Segoe UI',\n\t\tRoboto,\n\t\tHelvetica,\n\t\tArial,\n\t\tsans-serif,\n\t\t'Apple Color Emoji',\n\t\t'Segoe UI Emoji';\n}\n\n/*\nGrouping content\n================\n*/\n\n/**\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n*/\n\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n}\n\n/*\nText-level semantics\n====================\n*/\n\n/**\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr[title] {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n\n/**\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n1. Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3)\n2. Correct the odd 'em' font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n font-family:\n\t\tui-monospace,\n\t\tSFMono-Regular,\n\t\tConsolas,\n\t\t'Liberation Mono',\n\t\tMenlo,\n\t\tmonospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n font-size: 80%;\n}\n\n/**\nPrevent 'sub' and 'sup' elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/*\nTabular data\n============\n*/\n\n/**\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n*/\n\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n}\n\n/*\nForms\n=====\n*/\n\n/**\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\nRemove the inheritance of text transform in Edge and Firefox.\n1. Remove the inheritance of text transform in Firefox.\n*/\n\nbutton,\nselect { /* 1 */\n text-transform: none;\n}\n\n/**\nCorrect the inability to style clickable types in iOS and Safari.\n*/\n\nbutton,\n[type='button'],\n[type='reset'] {\n -webkit-appearance: button;\n}\n\n/**\nRemove the inner border and padding in Firefox.\n*/\n\n/**\nRestore the focus styles unset by the previous rule.\n*/\n\n/**\nRemove the additional ':invalid' styles in Firefox.\nSee: https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737\n*/\n\n/**\nRemove the padding so developers are not caught out when they zero out 'fieldset' elements in all browsers.\n*/\n\nlegend {\n padding: 0;\n}\n\n/**\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n/**\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n/**\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to 'inherit' in Safari.\n*/\n\n/*\nInteractive\n===========\n*/\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n display: list-item;\n}\n\n/**\n * Manually forked from SUIT CSS Base: https://github.com/suitcss/base\n * A thin layer on top of normalize.css that provides a starting point more\n * suitable for web applications.\n */\n\n/**\n * Removes the default spacing and border for appropriate elements.\n */\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n margin: 0;\n}\n\nbutton {\n background-color: transparent;\n background-image: none;\n}\n\n/**\n * Work around a Firefox/IE bug where the transparent `button` background\n * results in a loss of the default `button` focus styles.\n */\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\nfieldset {\n margin: 0;\n padding: 0;\n}\n\nol,\nul {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n/**\n * Tailwind custom reset styles\n */\n\n/**\n * 1. Use the user's configured `sans` font-family (with Tailwind's default\n * sans-serif font stack as a fallback) as a sane default.\n * 2. Use Tailwind's default \"normal\" line-height so the user isn't forced\n * to override it to ensure consistency even when using the default theme.\n */\n\nhtml {\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"; /* 1 */\n line-height: 1.5; /* 2 */\n}\n\n/**\n * Inherit font-family and line-height from `html` so users can set them as\n * a class directly on the `html` element.\n */\n\nbody {\n font-family: inherit;\n line-height: inherit;\n}\n\n/**\n * 1. Prevent padding and border from affecting element width.\n *\n * We used to set this in the html element and inherit from\n * the parent element for everything else. This caused issues\n * in shadow-dom-enhanced elements like <details> where the content\n * is wrapped by a div with box-sizing set to `content-box`.\n *\n * https://github.com/mozdevs/cssremedy/issues/4\n *\n *\n * 2. Allow adding a border to an element by just adding a border-width.\n *\n * By default, the way the browser specifies that an element should have no\n * border is by setting it's border-style to `none` in the user-agent\n * stylesheet.\n *\n * In order to easily add borders to elements by just setting the `border-width`\n * property, we change the default border-style for all elements to `solid`, and\n * use border-width to hide them instead. This way our `border` utilities only\n * need to set the `border-width` property instead of the entire `border`\n * shorthand, making our border utilities much more straightforward to compose.\n *\n * https://github.com/tailwindcss/tailwindcss/pull/116\n */\n\n*,\n::before,\n::after {\n box-sizing: border-box; /* 1 */\n border-width: 0; /* 2 */\n border-style: solid; /* 2 */\n border-color: #e5e7eb; /* 2 */\n}\n\n/*\n * Ensure horizontal rules are visible by default\n */\n\nhr {\n border-top-width: 1px;\n}\n\n/**\n * Undo the `border-style: none` reset that Normalize applies to images so that\n * our `border-{width}` utilities have the expected effect.\n *\n * The Normalize reset is unnecessary for us since we default the border-width\n * to 0 on all elements.\n *\n * https://github.com/tailwindcss/tailwindcss/issues/362\n */\n\nimg {\n border-style: solid;\n}\n\ntextarea {\n resize: vertical;\n}\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n color: #9ca3af;\n}\n\ninput:-ms-input-placeholder, textarea:-ms-input-placeholder {\n color: #9ca3af;\n}\n\ninput::placeholder,\ntextarea::placeholder {\n color: #9ca3af;\n}\n\nbutton {\n cursor: pointer;\n}\n\ntable {\n border-collapse: collapse;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\n/**\n * Reset links to optimize for opt-in styling instead of\n * opt-out.\n */\n\na {\n color: inherit;\n text-decoration: inherit;\n}\n\n/**\n * Reset form element properties that are easy to forget to\n * style explicitly so you don't inadvertently introduce\n * styles that deviate from your design system. These styles\n * supplement a partial reset that is already applied by\n * normalize.css.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n padding: 0;\n line-height: inherit;\n color: inherit;\n}\n\n/**\n * Use the configured 'mono' font family for elements that\n * are expected to be rendered with a monospace font, falling\n * back to the system monospace stack if there is no configured\n * 'mono' font family.\n */\n\npre,\ncode,\nkbd,\nsamp {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n/**\n * Make replaced elements `display: block` by default as that's\n * the behavior you want almost all of the time. Inspired by\n * CSS Remedy, with `svg` added as well.\n *\n * https://github.com/mozdevs/cssremedy/issues/14\n */\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block;\n vertical-align: middle;\n}\n\n/**\n * Constrain images and videos to the parent width and preserve\n * their instrinsic aspect ratio.\n *\n * https://github.com/mozdevs/cssremedy/issues/14\n */\n\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n\n.container {\n width: 100%;\n}\n\n@media (min-width: 640px) {\n .container {\n max-width: 640px;\n }\n}\n\n@media (min-width: 768px) {\n .container {\n max-width: 768px;\n }\n}\n\n@media (min-width: 1024px) {\n .container {\n max-width: 1024px;\n }\n}\n\n@media (min-width: 1280px) {\n .container {\n max-width: 1280px;\n }\n}\n\n@media (min-width: 1536px) {\n .container {\n max-width: 1536px;\n }\n}\n\n.bg-gray-800 {\n --tw-bg-opacity: 1;\n background-color: rgba(31, 41, 55, var(--tw-bg-opacity));\n}\n\n.border {\n border-width: 1px;\n}\n\n.flex {\n display: flex;\n}\n\n.table {\n display: table;\n}\n\n.grid {\n display: grid;\n}\n\n.hidden {\n display: none;\n}\n\n.flex-row {\n flex-direction: row;\n}\n\n.flex-col {\n flex-direction: column;\n}\n\n.flex-grow {\n flex-grow: 1;\n}\n\n.flex-shrink {\n flex-shrink: 1;\n}\n\n.list-disc {\n list-style-type: disc;\n}\n\n.absolute {\n position: absolute;\n}\n\n.resize {\n resize: both;\n}\n\n* {\n --tw-shadow: 0 0 #0000;\n}\n\n* {\n --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgba(59, 130, 246, 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n}\n\n.table-auto {\n table-layout: auto;\n}\n\n.line-through {\n text-decoration: line-through;\n}\n\n.w-full {\n width: 100%;\n}\n\n.gap-4 {\n gap: 1rem;\n}\n\n.grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n}\n\n.transform {\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n transform: translateX(var(--tw-translate-x)) translateY(var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.transition {\n transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n\n@-webkit-keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n@-webkit-keyframes ping {\n 75%, 100% {\n transform: scale(2);\n opacity: 0;\n }\n}\n\n@keyframes ping {\n 75%, 100% {\n transform: scale(2);\n opacity: 0;\n }\n}\n\n@-webkit-keyframes pulse {\n 50% {\n opacity: .5;\n }\n}\n\n@keyframes pulse {\n 50% {\n opacity: .5;\n }\n}\n\n@-webkit-keyframes bounce {\n 0%, 100% {\n transform: translateY(-25%);\n -webkit-animation-timing-function: cubic-bezier(0.8,0,1,1);\n animation-timing-function: cubic-bezier(0.8,0,1,1);\n }\n\n 50% {\n transform: none;\n -webkit-animation-timing-function: cubic-bezier(0,0,0.2,1);\n animation-timing-function: cubic-bezier(0,0,0.2,1);\n }\n}\n\n@keyframes bounce {\n 0%, 100% {\n transform: translateY(-25%);\n -webkit-animation-timing-function: cubic-bezier(0.8,0,1,1);\n animation-timing-function: cubic-bezier(0.8,0,1,1);\n }\n\n 50% {\n transform: none;\n -webkit-animation-timing-function: cubic-bezier(0,0,0.2,1);\n animation-timing-function: cubic-bezier(0,0,0.2,1);\n }\n}\n\n:root {\n --bg-color: #131720;\n --text-color: #d9e1f2;\n --primary: hsl(255, 30%, 55%);\n --focus: hsl(210, 90%, 50%);\n --secondary: #42b983;\n --border-color: hsla(0, 0%, 100%, 0.2);\n --light-1: hsl(210, 30%, 40%);\n --light-2: hsl(255, 30%, 50%);\n --light-background: linear-gradient(to right, var(--light-1), var(--light-2));\n --shadow-1: hsla(236, 50%, 50%, 0.3);\n --shadow-2: hsla(236, 50%, 50%, 0.4);\n --hud-background: rgba(0, 0, 0, 0.4);\n --hud-text-color: var(--text-color);\n --notifications-bg: darkslateblue;\n --skills-text-background: rgba(0, 0, 0, 0.5);\n --skills-text-color: var(--text-color);\n --skills-level-background: rgba(0, 0, 0, 0.5);\n --skills-level-color: orange;\n --skills-xp-bar-height: 40px;\n --skill-check-name-color: orange;\n --skill-check-difficulty: orange;\n --skill-check-success: green;\n --skill-check-failed: red;\n --skill-check-color: orange;\n --dialog-choice-color: orange;\n --dialog-choice-hover-color: var(--text-color);\n --inventory-text-background: rgba(0, 0, 0, 0.5);\n --inventory-text-color: var(--text-color);\n --inventory-amount-background: rgba(0, 0, 0, 0.5);\n --inventory-amount-color: orange;\n --quest-title-color: yellow;\n --completed-quest-title-color: grey;\n --objective-in-progress-color: white;\n --objective-completed-color: grey;\n}\n\n.list-item {\n display: inline-block;\n margin-right: 10px;\n}\n\n.list-enter-active,\r\n.list-leave-active {\n transition: all 0.3s ease;\n}\n\n/* .list-move {\r\n transition: transform 0.3s ease;\r\n} */\n\n.list-enter-from,\r\n.list-leave-to {\n opacity: 0;\n transform: translateX(300px);\n}\n\n.notification-item {\n display: inline-block;\n margin-right: 10px;\n}\n\n.notification-enter-active,\r\n.notification-leave-active {\n transition: all 0.3s ease;\n}\n\n/* .notification-move {\r\n transition: transform 0.3s ease;\r\n} */\n\n.notification-enter-from,\r\n.notification-leave-to {\n opacity: 0;\n transform: translateY(-300px);\n}\n\n.fade-enter-active,\r\n.fade-leave-active {\n transition: opacity 0.3s ease;\n}\n\n.fade-enter-from,\r\n.fade-leave-to {\n opacity: 0;\n}\n\n.fade-in-enter-active {\n transition: opacity 0.1s ease;\n}\n\n.fade-in-enter-from {\n opacity: 0;\n}\n\nbody {\n padding: 0;\n margin: 0;\n font-family: Arial, sans-serif;\n background-color: black;\n}\n\n.select {\n background: var(--light-background);\n padding: 10px;\n}\n\n.option {\n background-color: var(--light-2);\n padding: 5px;\n color: var(--text-color);\n}\n\n.button {\n background: var(--light-background);\n color: var(--text-color);\n box-shadow: 0.4rem 0.4rem 2.4rem 0.2rem var(--shadow-1);\n border-radius: 100px;\n padding: 10px;\n font-weight: 800;\n font-size: 16px;\n margin: 10px;\n transition: 0.2s;\n}\n\n.button:focus,\r\n.button:hover {\n transform: translateY(-0.2rem);\n box-shadow: 0 0 2.4rem 0.2rem var(--shadow-2);\n}\n\n.input {\n background: var(--light-background);\n color: var(--text-color);\n box-shadow: 0.4rem 0.4rem 2.4rem 0.2rem var(--shadow-1);\n border-radius: 100px;\n padding: 10px;\n font-weight: 800;\n font-size: 16px;\n margin: 10px;\n transition: 0.2s;\n}\n\n.input:focus,\r\n.input:hover {\n transform: translateY(-0.2rem);\n box-shadow: 0 0 2.4rem 0.2rem var(--shadow-2);\n}\n\na {\n color: pink;\n text-decoration: underline;\n}\n\nth,\r\ntd {\n padding: 4px;\n border: 1px solid var(--text-color);\n text-align: center;\n}\n\n#game-holder {\n width: 100vw;\n height: 100vh;\n padding: 0;\n margin: 0;\n top: 0;\n left: 0;\n background-color: black;\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: -webkit-fill-available;\n}\n\n.title {\n font-size: 30px;\n font-weight: 700;\n text-align: center;\n}\n\n.container {\n padding: 20px;\n}\n\nh1,\r\nh2,\r\nh3,\r\nh4 {\n font-weight: 700;\n}\n\nh1 {\n font-size: 30px;\n}\n\nh2 {\n font-size: 26px;\n}\n\nh3 {\n font-size: 24px;\n}\n\nhr.solid {\n border: 1px solid var(--text-color);\n margin-top: 30px;\n margin-bottom: 30px;\n}\n\n.card-1 {\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);\n transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1);\n}\n\n.card-1:hover {\n box-shadow: 0 14px 28px rgba(0, 0, 0, 0.25), 0 10px 10px rgba(0, 0, 0, 0.22);\n}\n\n.card-2 {\n box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);\n}\n\n.card-3 {\n box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23);\n}\n\n.card-4 {\n box-shadow: 0 14px 28px rgba(0, 0, 0, 0.25), 0 10px 10px rgba(0, 0, 0, 0.22);\n}\n\n.card-5 {\n box-shadow: 0 19px 38px rgba(0, 0, 0, 0.3), 0 15px 12px rgba(0, 0, 0, 0.22);\n}\n\n.dialog-choice {\n transition: 0.2s;\n}\n\n.dialog-choice:hover {\n transform: scale(1.05, 1.05);\n transform-origin: center;\n}\n\n/* Somewhat arcane CSS to force the hover color to override the child style.\r\nOtherwise hovering choices doesn't change the color of skill check prompts. */\n\n.dialog-choice:not(:hover) > .skill-check-name,\r\n.passive-skill-check > .skill-check-name {\n color: var(--skill-check-name-color);\n}\n\n.dialog-choice:not(:hover) > .skill-check-difficulty,\r\n.passive-skill-check > .skill-check-difficulty {\n color: var(--skill-check-difficulty);\n}\n\n.skill-check-difficulty {\n font-weight: 700;\n}\n\n.dialog-choice:not(:hover) > .skill-check-success,\r\n.passive-skill-check > .skill-check-success {\n color: var(--skill-check-success);\n}\n\n.dialog-choice:not(:hover) > .skill-check-failed,\r\n.passive-skill-check > .skill-check-failed {\n color: var(--skill-check-failed);\n}\n\n.dialog-choice:not(:hover) > .skill-check,\r\n.passive-skill-check.skill-check {\n color: var(--skill-check-color);\n}\n\n.narrat-canvas {\n position: absolute;\n height: 100%;\n top: 0;\n left: 0;\n}\n\n/* Looks ugly */\n\n/* @keyframes strike-anim {\r\n 0% {\r\n width: 0;\r\n }\r\n 100% {\r\n width: 100%;\r\n }\r\n}\r\n.strike-anim {\r\n position: relative;\r\n}\r\n.strike-anim::after {\r\n content: ' ';\r\n position: absolute;\r\n top: 50%;\r\n left: 0;\r\n width: 100%;\r\n height: 1px;\r\n background: var(--text-color);\r\n animation-name: strike-anim;\r\n animation-duration: 0.5s;\r\n animation-timing-function: linear;\r\n animation-iteration-count: 1;\r\n animation-fill-mode: forwards;\r\n} */\n\n#touchTrigger {\n pointer-events: none;\n}\n\n@media (min-width: 640px) {\n}\n\n@media (min-width: 768px) {\n}\n\n@media (min-width: 1024px) {\n}\n\n@media (min-width: 1280px) {\n}\n\n@media (min-width: 1536px) {\n}\r\n";
|
|
34
34
|
styleInject(css_248z);
|
|
35
35
|
|
|
36
36
|
const f=ref([]),v=ref(null),m=ref(null),g=ref(null),h=reactive({current:""}),y=[],b=ref(!1),k=readonly(f),w=readonly(v),M=readonly(m),q=readonly(g),x=readonly(h),$=(e=w.value)=>{h.current=e;const t=k.value.findIndex((t=>t.name===e)),n=k.value.map((e=>e.name));for(let a=0;a<n.length;a++){if(a>0&&a<n.length-1){const e=n[a]+"Minus",r=n[a]+"Plus";h[e]=t<=a,h[r]=t>=a;}h[n[a]]=n[a]===e;}},V=(e=M.value)=>{h.orientation=e,h.isLandscape="landscape"===e,h.isPortrait="portrait"===e;},O=(e=q.value||"light")=>{h.theme=e,h.isDark="dark"===e,h.isLight="light"===e;};function j(e,t){if("undefined"==typeof window||!window.matchMedia)return !1;if("undefined"!=typeof window&&!window.matchMedia)return console.error("Vue3 Mq: No MatchMedia support detected in this browser. Responsive breakpoints not available."),!1;{b.value=!0;const n=window.matchMedia(e),a=({matches:e})=>{e&&t();};y.push({mql:n,cb:a});n.addEventListener&&"function"==typeof n.addEventListener?n.addEventListener("change",a):n.addListener(a),a(n);}}var L=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",bootstrap5:{xs:0,sm:576,md:768,lg:992,xl:1200,xxl:1400},bootstrap4:{xs:0,sm:576,md:768,lg:992,xl:1200},bootstrap3:{xs:0,sm:768,md:992,lg:1200},vuetify:{xs:0,sm:600,md:960,lg:1264,xl:1904},tailwind:{xs:0,sm:640,md:768,lg:1024,xl:1280,xxl:1536},devices:{phone:0,tablet:768,laptop:1370,desktop:1906}});const T=e=>{if(!e||"object"!=typeof e)return !1;const t=[];for(let n in e){const a=parseFloat(e[n]);n&&"string"==typeof n?/^[^a-z]/i.test(n)||/[^a-zA-Z0-9_]/.test(n)?console.warn(`Vue3 Mq: "${n}" is an invalid breakpoint key. Breakpoint keys must start with a letter and contain only alphanumeric characters and underscores. Skipping.`):!a&&0!==a||isNaN(a)||a<0?console.warn(`Vue3 Mq: "${n}: ${e[n]}" is not a valid breakpoint. Breakpoints should be a number of zero or above. Skipping.`):t.push({name:n,min:a}):console.warn(`Vue3 Mq: Invalid or missing breakpoint key (${JSON.stringify(n)}). Skipping.`);}t.some((e=>0===e.min))||console.warn("Vue3 Mq: You have not declared a breakpoint with a minimum value of 0. There may be screen sizes to which Vue3Mq does not respond.");return new Set(t.map((e=>e.min))).size<t.length&&console.warn("Vue3 Mq: Your breakpoint configuration contains duplicate values. Behaviour may be unpredictable."),0!==t.length&&t.sort(((e,t)=>e.min-t.min))};function R({breakpoints:e,preset:t}){const n=(e=>{if("string"==typeof e&&L[e])return L[e];{const t=Object.keys(L);return console.error(`Vue3 Mq: "${e}" is not a valid preset. Available options are: ${t.join(", ")}`),!1}})(t),a=T(e);if(!1===n&&!a)throw new TypeError("Vue3 Mq: You must provide a valid preset, or valid breakpoint settings.");var r;r=a||T(n),f.value=r,function(){for(;y.length>0;){const e=y.shift();if(e&&"object"==typeof e){const{mql:t,cb:n}=e;t.addEventListener&&"function"==typeof t.addEventListener?t.removeEventListener("change",n):t.removeListener(n);}}}(),(()=>{const e=Object.keys(h);for(let t of e)delete h[t];$(),V(),O();})();const o=k.value.reduce(((e,t,n,a)=>{const r=`(min-width: ${t.min}px)`,o=n<a.length-1?`(max-width: ${a[n+1].min-1}px)`:null,i=r+(o?" and "+o:"");return Object.assign(e,{[t.name]:i})}),{});for(const i in o){j(o[i],(()=>{$(i);}));}["portrait","landscape"].forEach((e=>{j(`(orientation: ${e})`,(()=>{V(e);}));})),["light","dark"].forEach((e=>{j(`(prefers-color-scheme: ${e})`,(()=>{O(e);}));}));}var N={install:(e,{preset:t="bootstrap5",breakpoints:n,defaultBreakpoint:a,defaultOrientation:r="landscape",defaultTheme:o}={})=>{try{const l=!1===["landscape","portrait"].includes(s=r)?(console.error(`Vue3 Mq: "${s}" is not a valid default orientation. Reverting to unset value.`),null):s,u=((e=null)=>!1===["dark","light"].includes(e)&&null!==e?(console.error(`Vue3 Mq: "${e}" is not a valid default theme. Reverting to unset value.`),null):e)(o);i=a,v.value=i,(e=>{m.value=e;})(l),(e=>{g.value=e;})(u),e.provide("mq",x),e.provide("updateBreakpoints",R),R({breakpoints:n,preset:t});}catch(l){console.error(l);}var i,s;}};
|
|
@@ -98,6 +98,7 @@ const defaultConfig = {
|
|
|
98
98
|
},
|
|
99
99
|
hudStats: {},
|
|
100
100
|
items: {},
|
|
101
|
+
quests: {},
|
|
101
102
|
};
|
|
102
103
|
|
|
103
104
|
function parserError(ctx, line, text) {
|
|
@@ -131,6 +132,12 @@ function getItemConfig(id) {
|
|
|
131
132
|
error(`Item config for skill ${id} doesn't exist`);
|
|
132
133
|
}
|
|
133
134
|
return item;
|
|
135
|
+
}
|
|
136
|
+
function getQuestConfig(questId) {
|
|
137
|
+
return config.quests[questId];
|
|
138
|
+
}
|
|
139
|
+
function getObjectiveConfig(quest, objectiveId) {
|
|
140
|
+
return getQuestConfig(quest).objectives[objectiveId];
|
|
134
141
|
}
|
|
135
142
|
|
|
136
143
|
var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
|
|
@@ -3744,6 +3751,29 @@ const useHud = defineStore('hud', {
|
|
|
3744
3751
|
},
|
|
3745
3752
|
});
|
|
3746
3753
|
|
|
3754
|
+
// Generate a pinia store named notifications with a state using the type NotificationsState, and save type NotificationsSave, with actions:
|
|
3755
|
+
// addNotification(text: string): Adds a new notification to the state, and deletes it after a timeout
|
|
3756
|
+
// deleteNotification(id: string): Deletes a notification from the state
|
|
3757
|
+
const useNotifications = defineStore('notifications', {
|
|
3758
|
+
state: () => ({ notifications: {} }),
|
|
3759
|
+
actions: {
|
|
3760
|
+
async addNotification(text) {
|
|
3761
|
+
const id = `${Date.now()}-${Math.random() * 10000}`;
|
|
3762
|
+
this.notifications[id] = {
|
|
3763
|
+
text,
|
|
3764
|
+
};
|
|
3765
|
+
if (getConfig().notifications.alsoPrintInDialogue) {
|
|
3766
|
+
writeText(`[NOTIFICATION] ${text}`);
|
|
3767
|
+
}
|
|
3768
|
+
await timeout(getConfig().notifications.timeOnScreen * 1000);
|
|
3769
|
+
this.deleteNotification(id);
|
|
3770
|
+
},
|
|
3771
|
+
deleteNotification(id) {
|
|
3772
|
+
delete this.notifications[id];
|
|
3773
|
+
},
|
|
3774
|
+
},
|
|
3775
|
+
});
|
|
3776
|
+
|
|
3747
3777
|
// create a pinia store named inventory with a state containing items and actions to add and delete items
|
|
3748
3778
|
// create a pinia store named inventory with a state of type ItemState and actions to add and delete items. Adding items should increase the amount of any existing item that matches the id.
|
|
3749
3779
|
const useInventory = defineStore('inventory', {
|
|
@@ -3753,14 +3783,14 @@ const useInventory = defineStore('inventory', {
|
|
|
3753
3783
|
actions: {
|
|
3754
3784
|
generateSaveData() {
|
|
3755
3785
|
return {
|
|
3756
|
-
items: this.items
|
|
3786
|
+
items: this.items,
|
|
3757
3787
|
};
|
|
3758
3788
|
},
|
|
3759
3789
|
loadSaveData(save) {
|
|
3760
3790
|
this.items = { ...this.items, ...save.items };
|
|
3761
3791
|
},
|
|
3762
3792
|
setupItems(items) {
|
|
3763
|
-
Object.keys(items).forEach(key => {
|
|
3793
|
+
Object.keys(items).forEach((key) => {
|
|
3764
3794
|
this.items[key] = {
|
|
3765
3795
|
amount: 0,
|
|
3766
3796
|
id: key,
|
|
@@ -3781,11 +3811,13 @@ const useInventory = defineStore('inventory', {
|
|
|
3781
3811
|
else {
|
|
3782
3812
|
this.items[item.id] = { ...item };
|
|
3783
3813
|
}
|
|
3814
|
+
useNotifications().addNotification(`Received item: ${getItemConfig(item.id).name} x ${item.amount}`);
|
|
3784
3815
|
},
|
|
3785
3816
|
remove(item) {
|
|
3786
3817
|
const existingItem = this.getExistingItem(item.id);
|
|
3787
3818
|
if (existingItem) {
|
|
3788
3819
|
existingItem.amount -= item.amount;
|
|
3820
|
+
useNotifications().addNotification(`Lost item: ${getItemConfig(item.id).name} x ${item.amount}`);
|
|
3789
3821
|
if (existingItem.amount <= 0) {
|
|
3790
3822
|
this.deleteItem(item.id);
|
|
3791
3823
|
}
|
|
@@ -3800,29 +3832,6 @@ const useInventory = defineStore('inventory', {
|
|
|
3800
3832
|
},
|
|
3801
3833
|
});
|
|
3802
3834
|
|
|
3803
|
-
// Generate a pinia store named notifications with a state using the type NotificationsState, and save type NotificationsSave, with actions:
|
|
3804
|
-
// addNotification(text: string): Adds a new notification to the state, and deletes it after a timeout
|
|
3805
|
-
// deleteNotification(id: string): Deletes a notification from the state
|
|
3806
|
-
const useNotifications = defineStore('notifications', {
|
|
3807
|
-
state: () => ({ notifications: {} }),
|
|
3808
|
-
actions: {
|
|
3809
|
-
async addNotification(text) {
|
|
3810
|
-
const id = `${Date.now()}-${Math.random() * 10000}`;
|
|
3811
|
-
this.notifications[id] = {
|
|
3812
|
-
text,
|
|
3813
|
-
};
|
|
3814
|
-
if (getConfig().notifications.alsoPrintInDialogue) {
|
|
3815
|
-
writeText(`[NOTIFICATION] ${text}`);
|
|
3816
|
-
}
|
|
3817
|
-
await timeout(getConfig().notifications.timeOnScreen * 1000);
|
|
3818
|
-
this.deleteNotification(id);
|
|
3819
|
-
},
|
|
3820
|
-
deleteNotification(id) {
|
|
3821
|
-
delete this.notifications[id];
|
|
3822
|
-
},
|
|
3823
|
-
},
|
|
3824
|
-
});
|
|
3825
|
-
|
|
3826
3835
|
// Create a pinia store named skills with a state using the type Skills, with actions:
|
|
3827
3836
|
// setupSkillCheck(skillCheck: SkillCheckState, id: string)
|
|
3828
3837
|
// passSkillCheck(skillCheckId: string)
|
|
@@ -3910,6 +3919,101 @@ function getFile(url) {
|
|
|
3910
3919
|
});
|
|
3911
3920
|
}
|
|
3912
3921
|
|
|
3922
|
+
const everyObject = (object, predicate) => {
|
|
3923
|
+
for (const key in object) {
|
|
3924
|
+
if (!predicate(object[key])) {
|
|
3925
|
+
return false;
|
|
3926
|
+
}
|
|
3927
|
+
}
|
|
3928
|
+
return true;
|
|
3929
|
+
};
|
|
3930
|
+
const filterObject = (object, predicate) => {
|
|
3931
|
+
const result = {};
|
|
3932
|
+
for (const key in object) {
|
|
3933
|
+
if (predicate(object[key])) {
|
|
3934
|
+
result[key] = object[key];
|
|
3935
|
+
}
|
|
3936
|
+
}
|
|
3937
|
+
return result;
|
|
3938
|
+
};
|
|
3939
|
+
|
|
3940
|
+
const useQuests = defineStore('quests', {
|
|
3941
|
+
state: () => ({
|
|
3942
|
+
quests: {},
|
|
3943
|
+
}),
|
|
3944
|
+
actions: {
|
|
3945
|
+
getQuest(questId) {
|
|
3946
|
+
const quest = this.quests[questId];
|
|
3947
|
+
if (quest) {
|
|
3948
|
+
return quest;
|
|
3949
|
+
}
|
|
3950
|
+
error(`Quest ${questId} doesn't exist!`);
|
|
3951
|
+
},
|
|
3952
|
+
getObjective(quest, objectiveId) {
|
|
3953
|
+
const questObjective = this.getQuest(quest).objectives[objectiveId];
|
|
3954
|
+
if (questObjective) {
|
|
3955
|
+
return questObjective;
|
|
3956
|
+
}
|
|
3957
|
+
error(`Objective ${objectiveId} doesn't exist in quest ${quest}!`);
|
|
3958
|
+
},
|
|
3959
|
+
setupQuests(quests) {
|
|
3960
|
+
// iterate through quests to generate quest states to add to this.quests object
|
|
3961
|
+
for (const key of Object.keys(quests)) {
|
|
3962
|
+
const data = quests[key];
|
|
3963
|
+
this.quests[key] = {
|
|
3964
|
+
id: key,
|
|
3965
|
+
state: 'hidden',
|
|
3966
|
+
objectives: {},
|
|
3967
|
+
};
|
|
3968
|
+
// iterate through data.objectives to populate the objectives array of this.quests[key]
|
|
3969
|
+
for (const objectiveKey of Object.keys(data.objectives)) {
|
|
3970
|
+
const objective = data.objectives[objectiveKey];
|
|
3971
|
+
this.quests[key].objectives[objectiveKey] = {
|
|
3972
|
+
id: objectiveKey,
|
|
3973
|
+
state: objective.hidden ? 'hidden' : 'unlocked',
|
|
3974
|
+
};
|
|
3975
|
+
}
|
|
3976
|
+
}
|
|
3977
|
+
},
|
|
3978
|
+
startQuest(questId) {
|
|
3979
|
+
this.getQuest(questId).state = 'unlocked';
|
|
3980
|
+
useNotifications().addNotification(`Started quest: ${getQuestConfig(questId).title}`);
|
|
3981
|
+
},
|
|
3982
|
+
startObjective(questId, objectiveId) {
|
|
3983
|
+
this.getObjective(questId, objectiveId).state = 'unlocked';
|
|
3984
|
+
useNotifications().addNotification(`New quest objective: ${getObjectiveConfig(questId, objectiveId).description}`);
|
|
3985
|
+
},
|
|
3986
|
+
completeObjective(questId, objectiveId) {
|
|
3987
|
+
this.getObjective(questId, objectiveId).state = 'completed';
|
|
3988
|
+
useNotifications().addNotification(`Objective completed!`);
|
|
3989
|
+
},
|
|
3990
|
+
completeQuest(questId, ending) {
|
|
3991
|
+
this.getQuest(questId).state = 'completed';
|
|
3992
|
+
if (ending) {
|
|
3993
|
+
this.getQuest(questId).ending = ending;
|
|
3994
|
+
}
|
|
3995
|
+
useNotifications().addNotification(`Quest completed: ${getQuestConfig(questId).title}`);
|
|
3996
|
+
},
|
|
3997
|
+
isQuestCompleted(questId) {
|
|
3998
|
+
const quest = this.getQuest(questId);
|
|
3999
|
+
return everyObject(quest.objectives, (objective) => objective.state === 'completed');
|
|
4000
|
+
},
|
|
4001
|
+
removeQuest(id) {
|
|
4002
|
+
delete this.quests[id];
|
|
4003
|
+
},
|
|
4004
|
+
generateSaveData() {
|
|
4005
|
+
return {
|
|
4006
|
+
quests: {
|
|
4007
|
+
...this.quests,
|
|
4008
|
+
},
|
|
4009
|
+
};
|
|
4010
|
+
},
|
|
4011
|
+
loadSaveData(data) {
|
|
4012
|
+
this.quests = data.quests;
|
|
4013
|
+
},
|
|
4014
|
+
},
|
|
4015
|
+
});
|
|
4016
|
+
|
|
3913
4017
|
// Create a pinia store named screens with a state using the type ScreenState, with actions:
|
|
3914
4018
|
// setScreen(screen: string): Sets the current screen to the given screen
|
|
3915
4019
|
// setButtons(buttons: { [key: string]: ButtonConfig }): Adds buttons to the buttons state by using the values in the buttons config object
|
|
@@ -3983,6 +4087,7 @@ function getModifiableDataPinia() {
|
|
|
3983
4087
|
skills: skills.skills,
|
|
3984
4088
|
buttons: screens.buttons,
|
|
3985
4089
|
items: inventory.items,
|
|
4090
|
+
quests: useQuests().quests,
|
|
3986
4091
|
};
|
|
3987
4092
|
}
|
|
3988
4093
|
|
|
@@ -4569,9 +4674,9 @@ async function runCommand(cmd, choices) {
|
|
|
4569
4674
|
catch (err) {
|
|
4570
4675
|
logger.log(`Error at: `, vmStore.currentStack.label);
|
|
4571
4676
|
console.error(err);
|
|
4572
|
-
error(`Narrat script runtime error at <span class="error-filename">${cmd.fileName}:${cmd.line + 1}</span>
|
|
4573
|
-
<b>${err}</b>
|
|
4574
|
-
Script: ${cmd.code}
|
|
4677
|
+
error(`Narrat script runtime error at <span class="error-filename">${cmd.fileName}:${cmd.line + 1}</span>
|
|
4678
|
+
<b>${err}</b>
|
|
4679
|
+
Script: ${cmd.code}
|
|
4575
4680
|
Label: ${vmStore.currentStack.label}`);
|
|
4576
4681
|
}
|
|
4577
4682
|
}
|
|
@@ -4706,6 +4811,8 @@ const useMain = defineStore('main', {
|
|
|
4706
4811
|
hudStore.setupHudStats(config.hudStats);
|
|
4707
4812
|
const inventoryStore = useInventory();
|
|
4708
4813
|
inventoryStore.setupItems(config.items);
|
|
4814
|
+
const questsStore = useQuests();
|
|
4815
|
+
questsStore.setupQuests(config.quests);
|
|
4709
4816
|
},
|
|
4710
4817
|
startMachine() {
|
|
4711
4818
|
const vmStore = useVM();
|
|
@@ -4811,6 +4918,7 @@ const useMain = defineStore('main', {
|
|
|
4811
4918
|
hud: hudStore.generateSaveData(),
|
|
4812
4919
|
audio: audioStore.generateSaveData(),
|
|
4813
4920
|
inventory: inventoryStore.generateSaveData(),
|
|
4921
|
+
quests: useQuests().generateSaveData(),
|
|
4814
4922
|
};
|
|
4815
4923
|
localStorage.setItem(SAVE_FILE, JSON.stringify(save));
|
|
4816
4924
|
},
|
|
@@ -4831,6 +4939,7 @@ const useMain = defineStore('main', {
|
|
|
4831
4939
|
hudStore.loadSaveData(save.hud);
|
|
4832
4940
|
audioStore.loadSaveData(save.audio);
|
|
4833
4941
|
inventoryStore.loadSaveData(save.inventory);
|
|
4942
|
+
useQuests().loadSaveData(save.quests);
|
|
4834
4943
|
},
|
|
4835
4944
|
getAllStates() {
|
|
4836
4945
|
return {
|
|
@@ -4844,6 +4953,7 @@ const useMain = defineStore('main', {
|
|
|
4844
4953
|
rendering: useRenderingStore(),
|
|
4845
4954
|
notifications: useNotifications(),
|
|
4846
4955
|
inventory: useInventory(),
|
|
4956
|
+
quests: useQuests(),
|
|
4847
4957
|
};
|
|
4848
4958
|
},
|
|
4849
4959
|
overrideStates(override) {
|
|
@@ -5069,7 +5179,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
5069
5179
|
], 4))
|
|
5070
5180
|
}
|
|
5071
5181
|
|
|
5072
|
-
var css_248z$1 = ".dialog-title {\n font-size: 20px;\n font-weight: bold;\n}\n\n.dialog-text {\n font-size: 16px;\n}\n\n.dialog-box {\n /* border-radius: 10px; */\n /* border: 1px solid #a8a8a8; */\n color: var(--text-color);\n /* background-color: #2e2e2e; */\n padding: 10px;\n padding-left: 2em;\n margin-bottom: 10px;\n}\n\n.dialog-choice {\n color: var(--dialog-choice-color);\n}\n\n.dialog-choice:hover {\n color: var(--dialog-choice-hover-color);\n cursor: pointer;\n}\n\n.buttons-container {\n width: 100%;\n padding: 10px;\n display: flex;\n justify-content: space-evenly;\n align-items: stretch;\n box-sizing: border-box;\n}\n\n.interact-button {\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n height: 50px;\n color: var(--text-color);\n border: 1px solid black;\n font-weight: bold;\n font-size: 24px;\n text-align: center;\n flex-grow: 2;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n}\n\n.interact-button:not(:last-child) {\n margin-right: 10px;\n}\n";
|
|
5182
|
+
var css_248z$1 = ".dialog-title {\n font-size: 20px;\n font-weight: bold;\n}\n\n.dialog-text {\n font-size: 16px;\n}\n\n.dialog-box {\n /* border-radius: 10px; */\n /* border: 1px solid #a8a8a8; */\n color: var(--text-color);\n /* background-color: #2e2e2e; */\n padding: 10px;\n padding-left: 2em;\n margin-bottom: 10px;\n}\n\n.dialog-choice {\n color: var(--dialog-choice-color);\n}\n\n.dialog-choice:hover {\n color: var(--dialog-choice-hover-color);\n cursor: pointer;\n}\n\n.buttons-container {\n width: 100%;\n padding: 10px;\n display: flex;\n justify-content: space-evenly;\n align-items: stretch;\n box-sizing: border-box;\n}\n\n.interact-button {\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n height: 50px;\n color: var(--text-color);\n border: 1px solid black;\n font-weight: bold;\n font-size: 24px;\n text-align: center;\n flex-grow: 2;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n}\n\n.interact-button:not(:last-child) {\n margin-right: 10px;\n}\r\n";
|
|
5073
5183
|
styleInject(css_248z$1);
|
|
5074
5184
|
|
|
5075
5185
|
script.render = render;
|
|
@@ -5116,7 +5226,7 @@ function render$1(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
5116
5226
|
], 4))
|
|
5117
5227
|
}
|
|
5118
5228
|
|
|
5119
|
-
var css_248z$2 = ".dialog-picture {\n position: absolute;\n width: 80px;\n height: 80px;\n border: 2px solid white;\n border-radius: 10px;\n background-color: grey;\n z-index: 99;\n}\n\n.dialog-picture img {\n width: 100%;\n height: 100%;\n}\n";
|
|
5229
|
+
var css_248z$2 = ".dialog-picture {\n position: absolute;\n width: 80px;\n height: 80px;\n border: 2px solid white;\n border-radius: 10px;\n background-color: grey;\n z-index: 99;\n}\n\n.dialog-picture img {\n width: 100%;\n height: 100%;\n}\r\n";
|
|
5120
5230
|
styleInject(css_248z$2);
|
|
5121
5231
|
|
|
5122
5232
|
script$1.render = render$1;
|
|
@@ -5170,7 +5280,7 @@ function render$2(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
5170
5280
|
}))
|
|
5171
5281
|
}
|
|
5172
5282
|
|
|
5173
|
-
var css_248z$3 = ".modal-mask {\n position: absolute;\n z-index: 9998;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.5);\n transition: opacity 0.3s ease;\n display: flex;\n flex-direction: column;\n flex-shrink: 2 2;\n align-items: center;\n justify-content: center;\n}\n\n.modal-container {\n min-width: 300px;\n max-width: 90vw;\n max-height: 100%;\n overflow-y: hidden;\n margin: 10px auto;\n padding: 20px 30px;\n border-radius: 5px;\n transition: all 0.3s ease;\n font-family: Helvetica, Arial, sans-serif;\n background: linear-gradient(to right, hsl(210, 30%, 20%), hsl(255, 30%, 25%));\n display: flex;\n flex-direction: column;\n}\n\n.modal-header {\n position: relative;\n}\n\n.modal-header h3 {\n flex-shrink: 0;\n margin-top: 0;\n color: var(--secondary);\n}\n\n.modal-body {\n margin: 20px 0;\n overflow-y: auto;\n flex-shrink: 2;\n}\n\n.modal-default-button {\n float: right;\n}\n\n/*\n * The following styles are auto-applied to elements with\n * transition=\"modal\" when their visibility is toggled\n * by Vue.js.\n *\n * You can easily play with the modal transition by editing\n * these styles.\n */\n\n.modal-enter {\n opacity: 0;\n}\n\n.modal-leave-active {\n opacity: 0;\n}\n\n.modal-enter .modal-container,\n.modal-leave-active .modal-container {\n transform: scale(1.1);\n}\n\n.close-button {\n border: 1px solid var(--text-color);\n border-radius: 50px;\n font-size: 30px;\n font-weight: 700;\n position: absolute;\n right: -20px;\n top: -10px;\n width: 50px;\n height: 50px;\n}\n\n.close-button:hover {\n background-color: var(--focus);\n}\n";
|
|
5283
|
+
var css_248z$3 = ".modal-mask {\n position: absolute;\n z-index: 9998;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.5);\n transition: opacity 0.3s ease;\n display: flex;\n flex-direction: column;\n flex-shrink: 2 2;\n align-items: center;\n justify-content: center;\n}\n\n.modal-container {\n min-width: 300px;\n max-width: 90vw;\n max-height: 100%;\n overflow-y: hidden;\n margin: 10px auto;\n padding: 20px 30px;\n border-radius: 5px;\n transition: all 0.3s ease;\n font-family: Helvetica, Arial, sans-serif;\n background: linear-gradient(to right, hsl(210, 30%, 20%), hsl(255, 30%, 25%));\n display: flex;\n flex-direction: column;\n}\n\n.modal-header {\n position: relative;\n}\n\n.modal-header h3 {\n flex-shrink: 0;\n margin-top: 0;\n color: var(--secondary);\n}\n\n.modal-body {\n margin: 20px 0;\n overflow-y: auto;\n flex-shrink: 2;\n}\n\n.modal-default-button {\n float: right;\n}\n\n/*\r\n * The following styles are auto-applied to elements with\r\n * transition=\"modal\" when their visibility is toggled\r\n * by Vue.js.\r\n *\r\n * You can easily play with the modal transition by editing\r\n * these styles.\r\n */\n\n.modal-enter {\n opacity: 0;\n}\n\n.modal-leave-active {\n opacity: 0;\n}\n\n.modal-enter .modal-container,\r\n.modal-leave-active .modal-container {\n transform: scale(1.1);\n}\n\n.close-button {\n border: 1px solid var(--text-color);\n border-radius: 50px;\n font-size: 30px;\n font-weight: 700;\n position: absolute;\n right: -20px;\n top: -10px;\n width: 50px;\n height: 50px;\n}\n\n.close-button:hover {\n background-color: var(--focus);\n}\r\n";
|
|
5174
5284
|
styleInject(css_248z$3);
|
|
5175
5285
|
|
|
5176
5286
|
script$2.render = render$2;
|
|
@@ -7414,7 +7524,7 @@ function render$3(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
7414
7524
|
]))
|
|
7415
7525
|
}
|
|
7416
7526
|
|
|
7417
|
-
var css_248z$4 = ".debug-menu {\n z-index: 9999;\n}\n\n.debug-button {\n position: fixed;\n bottom: 10px;\n right: 10px;\n padding: 5px;\n}\n\n.error-message {\n color: orangered;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n\n.error-filename {\n color: grey;\n text-decoration: underline;\n}\n\n.debug-menu-container {\n width: 100%;\n}\n\n.search-result {\n border: 1px solid var(--text-color);\n padding: 10px;\n font-weight: 700;\n font-size: 20px;\n width: 100;\n}\n\n.jump-menu-container {\n width: 80%;\n}\n\n.debug-info {\n position: fixed;\n background-color: rgba(0, 0, 0, 0.6);\n border: 1px dotted var(--text-color);\n top: 0;\n left: 0;\n padding: 5px;\n}\n\n.variables-viewer {\n height: 100%;\n}\n";
|
|
7527
|
+
var css_248z$4 = ".debug-menu {\n z-index: 9999;\n}\n\n.debug-button {\n position: fixed;\n bottom: 10px;\n right: 10px;\n padding: 5px;\n}\n\n.error-message {\n color: orangered;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n\n.error-filename {\n color: grey;\n text-decoration: underline;\n}\n\n.debug-menu-container {\n width: 100%;\n}\n\n.search-result {\n border: 1px solid var(--text-color);\n padding: 10px;\n font-weight: 700;\n font-size: 20px;\n width: 100;\n}\n\n.jump-menu-container {\n width: 80%;\n}\n\n.debug-info {\n position: fixed;\n background-color: rgba(0, 0, 0, 0.6);\n border: 1px dotted var(--text-color);\n top: 0;\n left: 0;\n padding: 5px;\n}\n\n.variables-viewer {\n height: 100%;\n}\r\n";
|
|
7418
7528
|
styleInject(css_248z$4);
|
|
7419
7529
|
|
|
7420
7530
|
script$3.render = render$3;
|
|
@@ -7471,7 +7581,7 @@ function render$4(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
7471
7581
|
]))
|
|
7472
7582
|
}
|
|
7473
7583
|
|
|
7474
|
-
var css_248z$5 = ".volume-label {\n /* margin: 5px 20px; */\n margin-right: 10px;\n font-size: 20px;\n font-weight: 700;\n}\n\n.volume-controls {\n font-size: 25px;\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 0 20px;\n}\n\n.volume-slider {\n width: 200px;\n background-color: blue;\n}\n";
|
|
7584
|
+
var css_248z$5 = ".volume-label {\n /* margin: 5px 20px; */\n margin-right: 10px;\n font-size: 20px;\n font-weight: 700;\n}\n\n.volume-controls {\n font-size: 25px;\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 0 20px;\n}\n\n.volume-slider {\n width: 200px;\n background-color: blue;\n}\r\n";
|
|
7475
7585
|
styleInject(css_248z$5);
|
|
7476
7586
|
|
|
7477
7587
|
script$4.render = render$4;
|
|
@@ -7529,7 +7639,7 @@ function render$5(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
7529
7639
|
], 4))
|
|
7530
7640
|
}
|
|
7531
7641
|
|
|
7532
|
-
var css_248z$6 = ".hud {\n position: absolute;\n right: 0;\n top: 0;\n display: flex;\n flex-direction: row-reverse;\n z-index: 3;\n}\n\n.hud-stat {\n border: 1px dotted white;\n background-color: var(--hud-background);\n color: var(--hud-text-color);\n padding: 5px;\n}\n\n.hud-icon {\n display: inline-block;\n height: 1em;\n}\n\n.hud-text {\n margin-left: 5px;\n}\n";
|
|
7642
|
+
var css_248z$6 = ".hud {\n position: absolute;\n right: 0;\n top: 0;\n display: flex;\n flex-direction: row-reverse;\n z-index: 3;\n}\n\n.hud-stat {\n border: 1px dotted white;\n background-color: var(--hud-background);\n color: var(--hud-text-color);\n padding: 5px;\n}\n\n.hud-icon {\n display: inline-block;\n height: 1em;\n}\n\n.hud-text {\n margin-left: 5px;\n}\r\n";
|
|
7533
7643
|
styleInject(css_248z$6);
|
|
7534
7644
|
|
|
7535
7645
|
script$5.render = render$5;
|
|
@@ -7566,7 +7676,7 @@ function render$6(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
7566
7676
|
]))
|
|
7567
7677
|
}
|
|
7568
7678
|
|
|
7569
|
-
var css_248z$7 = "#loading-bar {\n position: relative;\n width: 40vw;\n height: 100px;\n border-radius: 50px;\n background: black;\n}\n\n#inner-loading-bar {\n height: 100%;\n border-radius: 50px 0px 0px 50px;\n background: var(--light-background);\n}\n\n#loading-text {\n z-index: 99999;\n display: flex;\n align-items: center;\n justify-content: space-around;\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n}\n";
|
|
7679
|
+
var css_248z$7 = "#loading-bar {\n position: relative;\n width: 40vw;\n height: 100px;\n border-radius: 50px;\n background: black;\n}\n\n#inner-loading-bar {\n height: 100%;\n border-radius: 50px 0px 0px 50px;\n background: var(--light-background);\n}\n\n#loading-text {\n z-index: 99999;\n display: flex;\n align-items: center;\n justify-content: space-around;\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n}\r\n";
|
|
7570
7680
|
styleInject(css_248z$7);
|
|
7571
7681
|
|
|
7572
7682
|
script$6.render = render$6;
|
|
@@ -7591,7 +7701,7 @@ function render$7(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
7591
7701
|
class: "notification",
|
|
7592
7702
|
key: id
|
|
7593
7703
|
}, [
|
|
7594
|
-
createElementVNode("
|
|
7704
|
+
createElementVNode("h3", null, toDisplayString(notification.text), 1)
|
|
7595
7705
|
]))
|
|
7596
7706
|
}), 128))
|
|
7597
7707
|
]),
|
|
@@ -7599,7 +7709,7 @@ function render$7(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
7599
7709
|
}))
|
|
7600
7710
|
}
|
|
7601
7711
|
|
|
7602
|
-
var css_248z$8 = ".notifications-holder {\n position: fixed;\n top: 0;\n
|
|
7712
|
+
var css_248z$8 = ".notifications-holder {\n position: fixed;\n top: 0;\n right: 0;\n padding: 10px;\n display: flex;\n flex-direction: column-reverse;\n align-items: center;\n pointer-events: none;\n}\n\n.notification {\n margin-top: 10px;\n margin-bottom: 10px;\n border-radius: 10px;\n padding: 15px;\n background: var(--notifications-bg);\n width: 40vh;\n text-align: center;\n}\r\n";
|
|
7603
7713
|
styleInject(css_248z$8);
|
|
7604
7714
|
|
|
7605
7715
|
script$7.render = render$7;
|
|
@@ -7613,6 +7723,7 @@ function processText(text) {
|
|
|
7613
7723
|
data: vmStore.data,
|
|
7614
7724
|
skills: skillStore.skills,
|
|
7615
7725
|
items: useInventory().items,
|
|
7726
|
+
quests: useQuests().quests,
|
|
7616
7727
|
};
|
|
7617
7728
|
const [obj, newKey] = findDataHelper(searchableState, key);
|
|
7618
7729
|
return obj[newKey];
|
|
@@ -7755,6 +7866,9 @@ var script$8 = defineComponent({
|
|
|
7755
7866
|
openInventory() {
|
|
7756
7867
|
useMain().openModal('inventory');
|
|
7757
7868
|
},
|
|
7869
|
+
openQuests() {
|
|
7870
|
+
useMain().openModal('quests');
|
|
7871
|
+
},
|
|
7758
7872
|
closeMenu() {
|
|
7759
7873
|
useMain().closeModal();
|
|
7760
7874
|
},
|
|
@@ -7774,7 +7888,13 @@ var script$8 = defineComponent({
|
|
|
7774
7888
|
return true;
|
|
7775
7889
|
}
|
|
7776
7890
|
return false;
|
|
7777
|
-
}
|
|
7891
|
+
},
|
|
7892
|
+
showQuests() {
|
|
7893
|
+
if (Object.entries(getConfig().quests).length > 0) {
|
|
7894
|
+
return true;
|
|
7895
|
+
}
|
|
7896
|
+
return false;
|
|
7897
|
+
},
|
|
7778
7898
|
},
|
|
7779
7899
|
});
|
|
7780
7900
|
|
|
@@ -7802,11 +7922,19 @@ function render$8(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
7802
7922
|
id: "inventory-menu-button",
|
|
7803
7923
|
onClick: _cache[2] || (_cache[2] = (...args) => (_ctx.openInventory && _ctx.openInventory(...args)))
|
|
7804
7924
|
}, " Items "))
|
|
7925
|
+
: createCommentVNode("", true),
|
|
7926
|
+
(_ctx.showQuests)
|
|
7927
|
+
? (openBlock(), createElementBlock("button", {
|
|
7928
|
+
key: 2,
|
|
7929
|
+
class: "button menu-toggle-button",
|
|
7930
|
+
id: "quests-menu-button",
|
|
7931
|
+
onClick: _cache[3] || (_cache[3] = (...args) => (_ctx.openQuests && _ctx.openQuests(...args)))
|
|
7932
|
+
}, " Quests "))
|
|
7805
7933
|
: createCommentVNode("", true)
|
|
7806
7934
|
]))
|
|
7807
7935
|
}
|
|
7808
7936
|
|
|
7809
|
-
var css_248z$9 = ".menu-content {\n text-align: center;\n}\n\n.menu-toggle-button {\n margin: 0;\n padding: 2px;\n border-radius: 5px;\n}\n\n.menu-toggle-button:not(:last-child) {\n margin-right: 10px;\n}\n\n.menu-modal {\n width: 500px;\n}\n";
|
|
7937
|
+
var css_248z$9 = ".menu-content {\n text-align: center;\n}\n\n.menu-toggle-button {\n margin: 0;\n padding: 2px;\n border-radius: 5px;\n}\n\n.menu-toggle-button:not(:last-child) {\n margin-right: 10px;\n}\n\n.menu-modal {\n width: 500px;\n}\r\n";
|
|
7810
7938
|
styleInject(css_248z$9);
|
|
7811
7939
|
|
|
7812
7940
|
script$8.render = render$8;
|
|
@@ -7874,7 +8002,7 @@ function render$9(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
7874
8002
|
}, 8, ["onClose"]))
|
|
7875
8003
|
}
|
|
7876
8004
|
|
|
7877
|
-
var css_248z$a = ".quit-button {\n margin: 20px;\n text-align: center;\n}\n";
|
|
8005
|
+
var css_248z$a = ".quit-button {\n margin: 20px;\n text-align: center;\n}\r\n";
|
|
7878
8006
|
styleInject(css_248z$a);
|
|
7879
8007
|
|
|
7880
8008
|
script$9.render = render$9;
|
|
@@ -8019,7 +8147,7 @@ function render$a(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
8019
8147
|
}, 8, ["onClose"]))
|
|
8020
8148
|
}
|
|
8021
8149
|
|
|
8022
|
-
var css_248z$b = ".skills-modal {\n width: 800px;\n}\n\n.skills-container {\n display: grid;\n grid-auto-rows: auto;\n grid-template-columns: repeat(3, 1fr);\n grid-gap: 20px 20px;\n}\n\n.skill-display {\n width: 200px;\n height: 300px;\n position: relative;\n background-size: cover;\n}\n\n.skill-title {\n position: absolute;\n bottom: 0px;\n text-align: center;\n width: 100%;\n color: var(--skills-text-color);\n background: var(--skills-text-background);\n}\n\n.skill-level {\n position: absolute;\n top: 0;\n right: 0;\n font-weight: 700;\n font-size: 25px;\n color: var(--skills-level-color);\n width: var(--skills-xp-bar-height);\n height: var(--skills-xp-bar-height);\n background-color: var(--skills-level-background);\n}\n\n.skill-description-container {\n justify-content: space-between;\n align-items: center;\n}\n\n.skill-left {\n flex-direction: column;\n}\n\n.skill-right {\n flex-direction: column;\n align-items: baseline;\n}\n\n.skill-xp-container {\n position: absolute;\n top: 0;\n left: 0;\n height: var(--skills-xp-bar-height);\n width: calc(100% - var(--skills-xp-bar-height));\n background-color: rgba(0, 0, 0, 0.5);\n}\n\n.skill-xp-bar {\n position: absolute;\n top: 0;\n left: 0;\n width: 50%;\n height: 100%;\n background-color: rgba(0, 0, 250, 0.5);\n}\n\n.skill-xp-text {\n z-index: 2;\n}\n";
|
|
8150
|
+
var css_248z$b = ".skills-modal {\n width: 800px;\n}\n\n.skills-container {\n display: grid;\n grid-auto-rows: auto;\n grid-template-columns: repeat(3, 1fr);\n grid-gap: 20px 20px;\n}\n\n.skill-display {\n width: 200px;\n height: 300px;\n position: relative;\n background-size: cover;\n}\n\n.skill-title {\n position: absolute;\n bottom: 0px;\n text-align: center;\n width: 100%;\n color: var(--skills-text-color);\n background: var(--skills-text-background);\n}\n\n.skill-level {\n position: absolute;\n top: 0;\n right: 0;\n font-weight: 700;\n font-size: 25px;\n color: var(--skills-level-color);\n width: var(--skills-xp-bar-height);\n height: var(--skills-xp-bar-height);\n background-color: var(--skills-level-background);\n}\n\n.skill-description-container {\n justify-content: space-between;\n align-items: center;\n}\n\n.skill-left {\n flex-direction: column;\n}\n\n.skill-right {\n flex-direction: column;\n align-items: baseline;\n}\n\n.skill-xp-container {\n position: absolute;\n top: 0;\n left: 0;\n height: var(--skills-xp-bar-height);\n width: calc(100% - var(--skills-xp-bar-height));\n background-color: rgba(0, 0, 0, 0.5);\n}\n\n.skill-xp-bar {\n position: absolute;\n top: 0;\n left: 0;\n width: 50%;\n height: 100%;\n background-color: rgba(0, 0, 250, 0.5);\n}\n\n.skill-xp-text {\n z-index: 2;\n}\r\n";
|
|
8023
8151
|
styleInject(css_248z$b);
|
|
8024
8152
|
|
|
8025
8153
|
script$a.render = render$a;
|
|
@@ -8161,12 +8289,144 @@ function render$b(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
8161
8289
|
}, 8, ["onClose"]))
|
|
8162
8290
|
}
|
|
8163
8291
|
|
|
8164
|
-
var css_248z$c = ".inventory-modal {\n width: 800px;\n}\n\n.inventory-container {\n display: grid;\n grid-auto-rows: auto;\n grid-template-columns: repeat(3, 1fr);\n grid-gap: 20px 20px;\n}\n\n.item-display {\n width: 200px;\n height: 300px;\n position: relative;\n background-repeat: no-repeat;\n background-size: contain;\n}\n\n.item-title {\n position: absolute;\n bottom: 0px;\n text-align: center;\n width: 100%;\n color: var(--inventory-text-color);\n background: var(--inventory-text-background);\n}\n\n.item-amount {\n position: absolute;\n top: 0;\n right: 0;\n font-weight: 700;\n font-size: 25px;\n color: var(--inventory-amount-color);\n width: 40px;\n height: 40px;\n background-color: var(--inventory-amount-background);\n}\n\n.item-description-container {\n justify-content: space-between;\n align-items: center;\n}\n\n.item-left {\n flex-direction: column;\n}\n\n.item-right {\n flex-direction: column;\n align-items: baseline;\n}\
|
|
8292
|
+
var css_248z$c = ".inventory-modal {\n width: 800px;\n min-height: 50%;\n}\n\n.inventory-container {\n display: grid;\n grid-auto-rows: auto;\n grid-template-columns: repeat(3, 1fr);\n grid-gap: 20px 20px;\n}\n\n.item-display {\n width: 200px;\n height: 300px;\n position: relative;\n background-repeat: no-repeat;\n background-size: contain;\n}\n\n.item-title {\n position: absolute;\n bottom: 0px;\n text-align: center;\n width: 100%;\n color: var(--inventory-text-color);\n background: var(--inventory-text-background);\n}\n\n.item-amount {\n position: absolute;\n top: 0;\n right: 0;\n font-weight: 700;\n font-size: 25px;\n color: var(--inventory-amount-color);\n width: 40px;\n height: 40px;\n background-color: var(--inventory-amount-background);\n}\n\n.item-description-container {\n justify-content: space-between;\n align-items: center;\n}\n\n.item-left {\n flex-direction: column;\n}\n\n.item-right {\n flex-direction: column;\n align-items: baseline;\n}\r\n";
|
|
8165
8293
|
styleInject(css_248z$c);
|
|
8166
8294
|
|
|
8167
8295
|
script$b.render = render$b;
|
|
8168
8296
|
|
|
8169
8297
|
var script$c = defineComponent({
|
|
8298
|
+
setup() {
|
|
8299
|
+
const questsStore = useQuests();
|
|
8300
|
+
const quests = computed(() => questsStore.quests);
|
|
8301
|
+
return { quests };
|
|
8302
|
+
},
|
|
8303
|
+
computed: {
|
|
8304
|
+
questsToDisplay() {
|
|
8305
|
+
return filterObject(this.quests, (quest) => quest.state !== 'hidden');
|
|
8306
|
+
},
|
|
8307
|
+
},
|
|
8308
|
+
props: {
|
|
8309
|
+
close: (() => { }),
|
|
8310
|
+
},
|
|
8311
|
+
methods: {
|
|
8312
|
+
getQuestData(questId) {
|
|
8313
|
+
return getQuestConfig(questId);
|
|
8314
|
+
},
|
|
8315
|
+
getObjectiveData(questId, objectiveId) {
|
|
8316
|
+
return getObjectiveConfig(questId, objectiveId);
|
|
8317
|
+
},
|
|
8318
|
+
getDisplayTextForQuestState(quest) {
|
|
8319
|
+
switch (quest.state) {
|
|
8320
|
+
case 'hidden':
|
|
8321
|
+
return ' Hidden';
|
|
8322
|
+
case 'unlocked':
|
|
8323
|
+
return '';
|
|
8324
|
+
case 'completed':
|
|
8325
|
+
return ' (Completed)';
|
|
8326
|
+
default:
|
|
8327
|
+
return ' Unknown';
|
|
8328
|
+
}
|
|
8329
|
+
},
|
|
8330
|
+
getQuestDescription(quest) {
|
|
8331
|
+
if (quest.ending) {
|
|
8332
|
+
return quest.ending;
|
|
8333
|
+
}
|
|
8334
|
+
return this.getQuestData(quest.id).description;
|
|
8335
|
+
},
|
|
8336
|
+
getAvailableObjectives(quest) {
|
|
8337
|
+
return filterObject(quest.objectives, (objective) => {
|
|
8338
|
+
return objective.state !== 'hidden';
|
|
8339
|
+
});
|
|
8340
|
+
},
|
|
8341
|
+
},
|
|
8342
|
+
components: {
|
|
8343
|
+
Modal: script$2,
|
|
8344
|
+
VolumeControls: script$4,
|
|
8345
|
+
},
|
|
8346
|
+
});
|
|
8347
|
+
|
|
8348
|
+
const _hoisted_1$b = /*#__PURE__*/createElementVNode("h3", { class: "title" }, "Quests", -1);
|
|
8349
|
+
const _hoisted_2$9 = {
|
|
8350
|
+
key: 0,
|
|
8351
|
+
class: "quests-container"
|
|
8352
|
+
};
|
|
8353
|
+
const _hoisted_3$6 = { class: "quest-title" };
|
|
8354
|
+
const _hoisted_4$5 = { class: "quest-description" };
|
|
8355
|
+
const _hoisted_5$5 = {
|
|
8356
|
+
key: 0,
|
|
8357
|
+
class: "quest-objectives-container list-disc"
|
|
8358
|
+
};
|
|
8359
|
+
const _hoisted_6$5 = {
|
|
8360
|
+
key: 1,
|
|
8361
|
+
class: "menu-container"
|
|
8362
|
+
};
|
|
8363
|
+
const _hoisted_7$4 = /*#__PURE__*/createElementVNode("h2", { class: "title" }, "There are no quests!", -1);
|
|
8364
|
+
const _hoisted_8$3 = [
|
|
8365
|
+
_hoisted_7$4
|
|
8366
|
+
];
|
|
8367
|
+
|
|
8368
|
+
function render$c(_ctx, _cache, $props, $setup, $data, $options) {
|
|
8369
|
+
const _component_modal = resolveComponent("modal");
|
|
8370
|
+
|
|
8371
|
+
return (openBlock(), createBlock(_component_modal, {
|
|
8372
|
+
class: "quests",
|
|
8373
|
+
onClose: _ctx.close,
|
|
8374
|
+
containerCssClass: "quests-modal"
|
|
8375
|
+
}, {
|
|
8376
|
+
header: withCtx(() => [
|
|
8377
|
+
_hoisted_1$b
|
|
8378
|
+
]),
|
|
8379
|
+
body: withCtx(() => [
|
|
8380
|
+
(Object.keys(_ctx.questsToDisplay).length > 0)
|
|
8381
|
+
? (openBlock(), createElementBlock("div", _hoisted_2$9, [
|
|
8382
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.questsToDisplay, (quest) => {
|
|
8383
|
+
return (openBlock(), createElementBlock("div", {
|
|
8384
|
+
class: "quest-display",
|
|
8385
|
+
key: quest.id
|
|
8386
|
+
}, [
|
|
8387
|
+
createElementVNode("div", {
|
|
8388
|
+
class: normalizeClass(["quest-header",
|
|
8389
|
+
quest.state === 'completed'
|
|
8390
|
+
? 'quest-completed'
|
|
8391
|
+
: 'quest-in-progress'
|
|
8392
|
+
])
|
|
8393
|
+
}, [
|
|
8394
|
+
createElementVNode("h3", _hoisted_3$6, toDisplayString(_ctx.getQuestData(quest.id).title) + " " + toDisplayString(_ctx.getDisplayTextForQuestState(quest)), 1)
|
|
8395
|
+
], 2),
|
|
8396
|
+
createElementVNode("p", _hoisted_4$5, toDisplayString(_ctx.getQuestDescription(quest)), 1),
|
|
8397
|
+
(quest.state !== 'completed')
|
|
8398
|
+
? (openBlock(), createElementBlock("ul", _hoisted_5$5, [
|
|
8399
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.getAvailableObjectives(quest), (objective) => {
|
|
8400
|
+
return (openBlock(), createElementBlock("li", {
|
|
8401
|
+
class: "quest-objective-display",
|
|
8402
|
+
key: objective.id
|
|
8403
|
+
}, [
|
|
8404
|
+
createElementVNode("p", {
|
|
8405
|
+
class: normalizeClass(["quest-objective-description",
|
|
8406
|
+
objective.state === 'completed'
|
|
8407
|
+
? 'quest-objective-completed'
|
|
8408
|
+
: 'quest-objctive-in-progress'
|
|
8409
|
+
])
|
|
8410
|
+
}, toDisplayString(_ctx.getObjectiveData(quest.id, objective.id).description), 3)
|
|
8411
|
+
]))
|
|
8412
|
+
}), 128))
|
|
8413
|
+
]))
|
|
8414
|
+
: createCommentVNode("", true)
|
|
8415
|
+
]))
|
|
8416
|
+
}), 128))
|
|
8417
|
+
]))
|
|
8418
|
+
: (openBlock(), createElementBlock("div", _hoisted_6$5, _hoisted_8$3))
|
|
8419
|
+
]),
|
|
8420
|
+
_: 1
|
|
8421
|
+
}, 8, ["onClose"]))
|
|
8422
|
+
}
|
|
8423
|
+
|
|
8424
|
+
var css_248z$d = "/* Write CSS for this vue component */\n\n.quests-modal {\n width: 100%;\n min-height: 50%;\n}\n\n/* CSS for .quest-header with row flex */\n\n.quest-header {\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n\n.quest-display {\n}\n\n.quest-title {\n font-size: 1.5rem;\n font-weight: bold;\n margin-bottom: 0.5rem;\n}\n\n.quest-completed {\n color: var(--completed-quest-title-color);\n}\n\n.quest-in-progress {\n color: var(--quest-title-color);\n}\n\n.quest-state {\n font-size: 1.25rem;\n font-weight: bold;\n margin-bottom: 0.5rem;\n}\n\n.quest-description {\n font-size: 1.1rem;\n text-align: justify;\n font-style: italic;\n margin-bottom: 0.5rem;\n}\n\n.quest-objectives-container {\n margin-left: 10px;\n}\n\n.quest-objective-completed {\n color: var(--objective-completed-color);\n text-decoration: line-through;\n}\n\n.quest-objective-in-progress {\n color: var(--objective-in-progress-color);\n}\n\n.quest-objective-description {\n font-size: 1rem;\n margin-bottom: 0.5rem;\n}\r\n";
|
|
8425
|
+
styleInject(css_248z$d);
|
|
8426
|
+
|
|
8427
|
+
script$c.render = render$c;
|
|
8428
|
+
|
|
8429
|
+
var script$d = defineComponent({
|
|
8170
8430
|
setup() {
|
|
8171
8431
|
const dialogStore = useDialogStore();
|
|
8172
8432
|
const vmStore = useVM();
|
|
@@ -8193,6 +8453,7 @@ var script$c = defineComponent({
|
|
|
8193
8453
|
MainMenu: script$9,
|
|
8194
8454
|
Skills: script$a,
|
|
8195
8455
|
Inventory: script$b,
|
|
8456
|
+
Quests: script$c,
|
|
8196
8457
|
},
|
|
8197
8458
|
data() {
|
|
8198
8459
|
return {
|
|
@@ -8460,23 +8721,24 @@ var script$c = defineComponent({
|
|
|
8460
8721
|
},
|
|
8461
8722
|
});
|
|
8462
8723
|
|
|
8463
|
-
const _hoisted_1$
|
|
8464
|
-
const _hoisted_2$
|
|
8465
|
-
const _hoisted_3$
|
|
8724
|
+
const _hoisted_1$c = ["width", "height"];
|
|
8725
|
+
const _hoisted_2$a = /*#__PURE__*/createElementVNode("div", { class: "anchor" }, null, -1);
|
|
8726
|
+
const _hoisted_3$7 = {
|
|
8466
8727
|
key: 2,
|
|
8467
8728
|
class: "flex flex-col",
|
|
8468
8729
|
style: {"height":"100%","padding":"20px"}
|
|
8469
8730
|
};
|
|
8470
|
-
const _hoisted_4$
|
|
8471
|
-
const _hoisted_5$
|
|
8472
|
-
const _hoisted_6$
|
|
8473
|
-
const _hoisted_7$
|
|
8731
|
+
const _hoisted_4$6 = { id: "game-title-container" };
|
|
8732
|
+
const _hoisted_5$6 = { id: "game-title-text" };
|
|
8733
|
+
const _hoisted_6$6 = { class: "flex flex-col" };
|
|
8734
|
+
const _hoisted_7$5 = { key: 3 };
|
|
8474
8735
|
|
|
8475
|
-
function render$
|
|
8736
|
+
function render$d(_ctx, _cache, $props, $setup, $data, $options) {
|
|
8476
8737
|
const _component_Hud = resolveComponent("Hud");
|
|
8477
8738
|
const _component_Menu = resolveComponent("Menu");
|
|
8478
8739
|
const _component_Skills = resolveComponent("Skills");
|
|
8479
8740
|
const _component_Inventory = resolveComponent("Inventory");
|
|
8741
|
+
const _component_Quests = resolveComponent("Quests");
|
|
8480
8742
|
const _component_MainMenu = resolveComponent("MainMenu");
|
|
8481
8743
|
const _component_DialogPicture = resolveComponent("DialogPicture");
|
|
8482
8744
|
const _component_DialogBox = resolveComponent("DialogBox");
|
|
@@ -8510,9 +8772,15 @@ function render$c(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
8510
8772
|
onClose: _ctx.closeModal
|
|
8511
8773
|
}, null, 8, ["onClose"]))
|
|
8512
8774
|
: createCommentVNode("", true),
|
|
8775
|
+
(_ctx.modal === 'quests')
|
|
8776
|
+
? (openBlock(), createBlock(_component_Quests, {
|
|
8777
|
+
key: 2,
|
|
8778
|
+
onClose: _ctx.closeModal
|
|
8779
|
+
}, null, 8, ["onClose"]))
|
|
8780
|
+
: createCommentVNode("", true),
|
|
8513
8781
|
(_ctx.modal === 'menu')
|
|
8514
8782
|
? (openBlock(), createBlock(_component_MainMenu, {
|
|
8515
|
-
key:
|
|
8783
|
+
key: 3,
|
|
8516
8784
|
onClose: _ctx.closeModal
|
|
8517
8785
|
}, null, 8, ["onClose"]))
|
|
8518
8786
|
: createCommentVNode("", true),
|
|
@@ -8529,7 +8797,7 @@ function render$c(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
8529
8797
|
}),
|
|
8530
8798
|
(_ctx.inGame)
|
|
8531
8799
|
? (openBlock(), createElementBlock("div", {
|
|
8532
|
-
key:
|
|
8800
|
+
key: 4,
|
|
8533
8801
|
class: "background",
|
|
8534
8802
|
style: normalizeStyle(_ctx.backgroundStyle)
|
|
8535
8803
|
}, [
|
|
@@ -8538,12 +8806,12 @@ function render$c(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
8538
8806
|
height: _ctx.layoutHeight,
|
|
8539
8807
|
id: "background-canvas",
|
|
8540
8808
|
class: "narrat-canvas"
|
|
8541
|
-
}, null, 8, _hoisted_1$
|
|
8809
|
+
}, null, 8, _hoisted_1$c)
|
|
8542
8810
|
], 4))
|
|
8543
8811
|
: createCommentVNode("", true),
|
|
8544
8812
|
(_ctx.inGame)
|
|
8545
8813
|
? (openBlock(), createElementBlock("div", {
|
|
8546
|
-
key:
|
|
8814
|
+
key: 5,
|
|
8547
8815
|
class: "dialog override",
|
|
8548
8816
|
ref: "dialog",
|
|
8549
8817
|
style: normalizeStyle(_ctx.dialogStyle)
|
|
@@ -8565,16 +8833,16 @@ function render$c(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
8565
8833
|
]),
|
|
8566
8834
|
_: 1
|
|
8567
8835
|
}, 8, ["style"]),
|
|
8568
|
-
_hoisted_2$
|
|
8836
|
+
_hoisted_2$a
|
|
8569
8837
|
], 4))
|
|
8570
8838
|
: createCommentVNode("", true)
|
|
8571
8839
|
], 4))
|
|
8572
8840
|
: (_ctx.gameLoaded)
|
|
8573
|
-
? (openBlock(), createElementBlock("div", _hoisted_3$
|
|
8574
|
-
createElementVNode("div", _hoisted_4$
|
|
8575
|
-
createElementVNode("h1", _hoisted_5$
|
|
8841
|
+
? (openBlock(), createElementBlock("div", _hoisted_3$7, [
|
|
8842
|
+
createElementVNode("div", _hoisted_4$6, [
|
|
8843
|
+
createElementVNode("h1", _hoisted_5$6, toDisplayString(_ctx.gameTitle), 1)
|
|
8576
8844
|
]),
|
|
8577
|
-
createElementVNode("div", _hoisted_6$
|
|
8845
|
+
createElementVNode("div", _hoisted_6$6, [
|
|
8578
8846
|
createElementVNode("button", {
|
|
8579
8847
|
class: "button menu-button start-button override",
|
|
8580
8848
|
onClick: _cache[0] || (_cache[0] = (...args) => (_ctx.startGame && _ctx.startGame(...args)))
|
|
@@ -8588,7 +8856,7 @@ function render$c(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
8588
8856
|
: createCommentVNode("", true)
|
|
8589
8857
|
])
|
|
8590
8858
|
]))
|
|
8591
|
-
: (openBlock(), createElementBlock("div", _hoisted_7$
|
|
8859
|
+
: (openBlock(), createElementBlock("div", _hoisted_7$5, [
|
|
8592
8860
|
createVNode(_component_LoadingBar, {
|
|
8593
8861
|
percentage: _ctx.loadingPercentage,
|
|
8594
8862
|
step: _ctx.loadingStep
|
|
@@ -8601,10 +8869,10 @@ function render$c(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
8601
8869
|
], 4))
|
|
8602
8870
|
}
|
|
8603
8871
|
|
|
8604
|
-
var css_248z$
|
|
8605
|
-
styleInject(css_248z$
|
|
8872
|
+
var css_248z$e = "#app {\n background-color: var(--bg-color);\n width: 100%;\n height: 100%;\n position: absolute;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n color: var(--text-color);\n box-sizing: border-box;\n overflow: hidden;\n transform-origin: center center;\n}\n\n.game {\n background-color: var(--bg-color);\n position: relative;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n overflow: hidden;\n}\n\n.interact-button {\n height: 50px;\n border: 1px solid black;\n font-weight: bold;\n font-size: 20px;\n text-align: center;\n flex-grow: 2;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n}\n\n.interact-button:not(:last-child) {\n margin-right: 10px;\n}\n\n.dialog-container {\n flex-shrink: 2;\n /* padding: 20px; */\n min-height: 100%;\n width: 100%;\n background-color: (var(--bg-color));\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n align-items: center;\n overflow-x: hidden;\n}\n\n.dialog {\n overflow-y: auto;\n overflow-x: hidden;\n position: relative;\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n}\n\n.dialog::-webkit-scrollbar {\n display: none; /* webkit */\n}\n\n.dialog * {\n overflow-anchor: none;\n}\n\n.background {\n margin: 0;\n}\n\n#background-canvas {\n height: 100%;\n}\n\n.anchor {\n overflow-anchor: auto;\n height: 1px;\n}\n\n.menu-toggle {\n position: fixed;\n bottom: 0px;\n right: 15%;\n z-index: 2;\n}\n\n#game-title-container {\n margin-bottom: 50px;\n}\n\n#game-title-text {\n text-align: center;\n font-size: 50px;\n}\n\n.menu-button {\n font-size: 25px;\n}\r\n";
|
|
8873
|
+
styleInject(css_248z$e);
|
|
8606
8874
|
|
|
8607
|
-
script$
|
|
8875
|
+
script$d.render = render$d;
|
|
8608
8876
|
|
|
8609
8877
|
let canvas;
|
|
8610
8878
|
let ctx;
|
|
@@ -9128,6 +9396,41 @@ const removeItemPlugin = new CommandPlugin('remove_item', async (cmd) => {
|
|
|
9128
9396
|
return useVM().nextLine();
|
|
9129
9397
|
}, generateParser('remove_item'));
|
|
9130
9398
|
|
|
9399
|
+
// Write a CommandPlugin for starting a quest with the useQuests quests store
|
|
9400
|
+
const startQuestPlugin = new CommandPlugin('start_quest', async (cmd) => {
|
|
9401
|
+
const questId = cmd.args[0];
|
|
9402
|
+
const quests = useQuests();
|
|
9403
|
+
quests.startQuest(questId);
|
|
9404
|
+
return useVM().nextLine();
|
|
9405
|
+
}, generateParser('start_quest'));
|
|
9406
|
+
// Write a CommandPlugin for starting a quest objective with the cmd having arguments questId and objectiveId, using the useQuests store's startObjective method
|
|
9407
|
+
const startObjectivePlugin = new CommandPlugin('start_objective', async (cmd) => {
|
|
9408
|
+
const questId = cmd.args[0];
|
|
9409
|
+
const objectiveId = cmd.args[1];
|
|
9410
|
+
const quests = useQuests();
|
|
9411
|
+
quests.startObjective(questId, objectiveId);
|
|
9412
|
+
return useVM().nextLine();
|
|
9413
|
+
}, generateParser('start_objective'));
|
|
9414
|
+
// Write a CommandPlugin for completing a quest objective with the cmd having arguments questId and objectiveId, using the useQuests store's completeObjective method
|
|
9415
|
+
const completeObjectivePlugin = new CommandPlugin('complete_objective', async (cmd) => {
|
|
9416
|
+
const questId = cmd.args[0];
|
|
9417
|
+
const objectiveId = cmd.args[1];
|
|
9418
|
+
const quests = useQuests();
|
|
9419
|
+
quests.completeObjective(questId, objectiveId);
|
|
9420
|
+
return useVM().nextLine();
|
|
9421
|
+
}, generateParser('complete_objective'));
|
|
9422
|
+
// Write a CommandPlugin for completing a quest with the cmd having arguments questId, using the useQuests store's completeQuest method
|
|
9423
|
+
const completeQuestPlugin = new CommandPlugin('complete_quest', async (cmd) => {
|
|
9424
|
+
const questId = cmd.args[0];
|
|
9425
|
+
let ending;
|
|
9426
|
+
if (cmd.args.length > 1) {
|
|
9427
|
+
ending = cmd.args[1];
|
|
9428
|
+
}
|
|
9429
|
+
const quests = useQuests();
|
|
9430
|
+
quests.completeQuest(questId, ending);
|
|
9431
|
+
return useVM().nextLine();
|
|
9432
|
+
}, generateParser('complete_quest'));
|
|
9433
|
+
|
|
9131
9434
|
function registerBaseCommands(vm) {
|
|
9132
9435
|
vm.addCommand(addItemPlugin);
|
|
9133
9436
|
vm.addCommand(addLevelPlugin);
|
|
@@ -9150,6 +9453,11 @@ function registerBaseCommands(vm) {
|
|
|
9150
9453
|
vm.addCommand(talkCommand);
|
|
9151
9454
|
vm.addCommand(textCommandPlugin);
|
|
9152
9455
|
vm.addCommand(waitCommand);
|
|
9456
|
+
// Quests
|
|
9457
|
+
vm.addCommand(startQuestPlugin);
|
|
9458
|
+
vm.addCommand(startObjectivePlugin);
|
|
9459
|
+
vm.addCommand(completeObjectivePlugin);
|
|
9460
|
+
vm.addCommand(completeQuestPlugin);
|
|
9153
9461
|
}
|
|
9154
9462
|
|
|
9155
9463
|
class NarratPlugin {
|
|
@@ -9175,7 +9483,7 @@ vm.callHook('onPageLoaded');
|
|
|
9175
9483
|
async function startApp(config, options) {
|
|
9176
9484
|
const configFile = await getFile('data/config.json');
|
|
9177
9485
|
setConfig(JSON.parse(configFile));
|
|
9178
|
-
app = createApp(script$
|
|
9486
|
+
app = createApp(script$d, {
|
|
9179
9487
|
config,
|
|
9180
9488
|
options,
|
|
9181
9489
|
});
|
|
@@ -9192,7 +9500,7 @@ async function startApp(config, options) {
|
|
|
9192
9500
|
});
|
|
9193
9501
|
registerBaseCommands(vm);
|
|
9194
9502
|
logManager.setupDebugger(options.debug);
|
|
9195
|
-
console.log('%c Narrat game engine –
|
|
9503
|
+
console.log('%c Narrat game engine – 1.2.0 - June 25, 2022 14:14:05', 'background: #222; color: #bada55');
|
|
9196
9504
|
vm.callHook('onNarratSetup');
|
|
9197
9505
|
app.mount('#game-holder');
|
|
9198
9506
|
if (options.debug) {
|
|
@@ -9216,5 +9524,5 @@ async function startApp(config, options) {
|
|
|
9216
9524
|
startGameLoop();
|
|
9217
9525
|
}
|
|
9218
9526
|
|
|
9219
|
-
export { CommandPlugin, NarratPlugin, addCommand, aspectRatioFit, generateParser, getConfig, getItemConfig, getSkillConfig, registerPlugin, setConfig, startApp };
|
|
9527
|
+
export { CommandPlugin, NarratPlugin, addCommand, aspectRatioFit, generateParser, getConfig, getItemConfig, getObjectiveConfig, getQuestConfig, getSkillConfig, registerPlugin, setConfig, startApp };
|
|
9220
9528
|
//# sourceMappingURL=index.esm.js.map
|