Show some seed settings
This commit is contained in:
91
package-lock.json
generated
91
package-lock.json
generated
@@ -15,10 +15,12 @@
|
||||
"crc-32": "^1.2.2",
|
||||
"js-base64": "^3.7.7",
|
||||
"localforage": "^1.10.0",
|
||||
"mustache": "^4.2.0",
|
||||
"vue": "^3.5.13",
|
||||
"vue-router": "^4.5.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@modyfi/vite-plugin-yaml": "^1.1.1",
|
||||
"@vitejs/plugin-vue": "^5.2.1",
|
||||
"vite": "^6.1.0",
|
||||
"vite-plugin-vue-devtools": "^7.7.2"
|
||||
@@ -909,6 +911,57 @@
|
||||
"@jridgewell/sourcemap-codec": "^1.4.14"
|
||||
}
|
||||
},
|
||||
"node_modules/@modyfi/vite-plugin-yaml": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/@modyfi/vite-plugin-yaml/-/vite-plugin-yaml-1.1.1.tgz",
|
||||
"integrity": "sha512-rEbfFNlMGLKpAYs2RsfLAhxCHFa6M4QKHHk0A4EYcCJAUwFtFO6qiEdLjUGUTtnRUxAC7GxxCa+ZbeUILSDvqQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@rollup/pluginutils": "5.1.0",
|
||||
"js-yaml": "4.1.0",
|
||||
"tosource": "2.0.0-alpha.3"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"vite": ">=3.2.7"
|
||||
}
|
||||
},
|
||||
"node_modules/@modyfi/vite-plugin-yaml/node_modules/@rollup/pluginutils": {
|
||||
"version": "5.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz",
|
||||
"integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/estree": "^1.0.0",
|
||||
"estree-walker": "^2.0.2",
|
||||
"picomatch": "^2.3.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"rollup": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@modyfi/vite-plugin-yaml/node_modules/picomatch": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
|
||||
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=8.6"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/jonschlinkert"
|
||||
}
|
||||
},
|
||||
"node_modules/@polka/url": {
|
||||
"version": "1.0.0-next.28",
|
||||
"resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz",
|
||||
@@ -1449,6 +1502,13 @@
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/argparse": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
|
||||
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
|
||||
"dev": true,
|
||||
"license": "Python-2.0"
|
||||
},
|
||||
"node_modules/asynckit": {
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
||||
@@ -2307,6 +2367,19 @@
|
||||
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/js-yaml": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
|
||||
"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"argparse": "^2.0.1"
|
||||
},
|
||||
"bin": {
|
||||
"js-yaml": "bin/js-yaml.js"
|
||||
}
|
||||
},
|
||||
"node_modules/jsesc": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
|
||||
@@ -2452,6 +2525,15 @@
|
||||
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/mustache": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz",
|
||||
"integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==",
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"mustache": "bin/mustache"
|
||||
}
|
||||
},
|
||||
"node_modules/nanoid": {
|
||||
"version": "3.3.8",
|
||||
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz",
|
||||
@@ -2787,6 +2869,15 @@
|
||||
"integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/tosource": {
|
||||
"version": "2.0.0-alpha.3",
|
||||
"resolved": "https://registry.npmjs.org/tosource/-/tosource-2.0.0-alpha.3.tgz",
|
||||
"integrity": "sha512-KAB2lrSS48y91MzFPFuDg4hLbvDiyTjOVgaK7Erw+5AmZXNq4sFRVn8r6yxSLuNs15PaokrDRpS61ERY9uZOug==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/totalist": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz",
|
||||
|
||||
@@ -16,10 +16,12 @@
|
||||
"crc-32": "^1.2.2",
|
||||
"js-base64": "^3.7.7",
|
||||
"localforage": "^1.10.0",
|
||||
"mustache": "^4.2.0",
|
||||
"vue": "^3.5.13",
|
||||
"vue-router": "^4.5.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@modyfi/vite-plugin-yaml": "^1.1.1",
|
||||
"@vitejs/plugin-vue": "^5.2.1",
|
||||
"vite": "^6.1.0",
|
||||
"vite-plugin-vue-devtools": "^7.7.2"
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
import { defineComponent } from "vue";
|
||||
|
||||
import SpritePicker from "@/components/SpritePicker.vue";
|
||||
import SeedSettings from "@/components/SeedSettings.vue";
|
||||
|
||||
import { Base64 } from "js-base64";
|
||||
import * as bps from "bps";
|
||||
@@ -11,6 +12,7 @@ import axios from "axios";
|
||||
|
||||
export default defineComponent({
|
||||
components: {
|
||||
SeedSettings,
|
||||
SpritePicker,
|
||||
},
|
||||
data() {
|
||||
@@ -21,6 +23,7 @@ export default defineComponent({
|
||||
sprite: null,
|
||||
patch: null,
|
||||
error: null,
|
||||
settings: null,
|
||||
};
|
||||
},
|
||||
props: {
|
||||
@@ -46,6 +49,7 @@ export default defineComponent({
|
||||
const sourceChecksum = instructions.sourceChecksum.toString(16).toUpperCase();
|
||||
if (sourceChecksum == this.rom_checksum) {
|
||||
this.patch = instructions;
|
||||
this.settings = seedData.settings;
|
||||
} else {
|
||||
this.error = "Patch does not specify correct source checksum.";
|
||||
}
|
||||
@@ -54,7 +58,6 @@ export default defineComponent({
|
||||
this.error = "Error parsing patch.";
|
||||
}
|
||||
} else {
|
||||
console.log(response.data);
|
||||
this.error = "Error loading seed.";
|
||||
}
|
||||
},
|
||||
@@ -131,7 +134,7 @@ export default defineComponent({
|
||||
{{ error }}
|
||||
</div>
|
||||
<ul class="list-group list-group-flush">
|
||||
<li class="list-group-item">
|
||||
<li v-if="!baserom" class="list-group-item">
|
||||
<div class="mb-2">
|
||||
<label for="rom-input" class="form-label">
|
||||
The Legend of Zelda: A Link to the Past (JP 1.0) Rom:
|
||||
@@ -142,6 +145,9 @@ export default defineComponent({
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li v-if="settings" class="list-group-item">
|
||||
<SeedSettings :settings="settings" />
|
||||
</li>
|
||||
<li class="list-group-item">
|
||||
<div class="mb-2">
|
||||
<SpritePicker @spriteUpdate="spriteUpdate" />
|
||||
|
||||
56
src/components/SeedSettings.vue
Normal file
56
src/components/SeedSettings.vue
Normal file
@@ -0,0 +1,56 @@
|
||||
<script>
|
||||
import { defineComponent } from "vue";
|
||||
|
||||
import settingsData from "@/data/settings-display.yaml";
|
||||
import mustache from "mustache";
|
||||
|
||||
export default defineComponent({
|
||||
props: {
|
||||
settings: {},
|
||||
},
|
||||
computed: {
|
||||
settingsDisplay() {
|
||||
const rendered = {};
|
||||
for (const setting of Object.keys(settingsData)) {
|
||||
rendered[setting] = {};
|
||||
for (const option of Object.keys(settingsData[setting])) {
|
||||
rendered[setting][option] = mustache.render(settingsData[setting][option], this.settings);
|
||||
}
|
||||
}
|
||||
return rendered;
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div v-if="settings.goal">
|
||||
Goal: {{ settingsDisplay.goal[settings.goal] }}
|
||||
</div>
|
||||
<div v-if="settings.weapons">
|
||||
Weapons: {{ settingsDisplay.weapons[settings.weapons] }}
|
||||
</div>
|
||||
<div v-if="settings.entrance_shuffle && settings.entrance_shuffle != 'vanilla'">
|
||||
{{ settingsDisplay.entrance_shuffle[settings.entrance_shuffle] }}
|
||||
</div>
|
||||
<div v-if="settings.enemy_shuffle && settings.enemy_shuffle != 'vanilla'">
|
||||
{{ settingsDisplay.enemy_shuffle[settings.enemy_shuffle] }}
|
||||
</div>
|
||||
<div v-if="settings.boss_shuffle && settings.boss_shuffle != 'vanilla'">
|
||||
{{ settingsDisplay.boss_shuffle[settings.boss_shuffle] }}
|
||||
</div>
|
||||
<div v-if="settings.small_keys && settings.small_keys != 'dungeon'">
|
||||
{{ settingsDisplay.dungeon_items[settings.small_keys] }} Small Keys
|
||||
</div>
|
||||
<div v-if="settings.big_keys && settings.big_keys != 'dungeon'">
|
||||
{{ settingsDisplay.dungeon_items[settings.big_keys] }} Big Keys
|
||||
</div>
|
||||
<div v-if="settings.maps && settings.maps != 'dungeon'">
|
||||
{{ settingsDisplay.dungeon_items[settings.maps] }} Maps
|
||||
</div>
|
||||
<div v-if="settings.compasses && settings.compasses != 'dungeon'">
|
||||
{{ settingsDisplay.dungeon_items[settings.compasses] }} Compasses
|
||||
</div>
|
||||
</template>
|
||||
37
src/data/settings-display.yaml
Normal file
37
src/data/settings-display.yaml
Normal file
@@ -0,0 +1,37 @@
|
||||
goal:
|
||||
ganon: "{{ crystals_ganon }} Crystal Ganon"
|
||||
fast_ganon: "{{ crystals_ganon }} Crystal Fast Ganon"
|
||||
all_dungeons: All Dungeons
|
||||
triforce_hunt: Triforce Hunt
|
||||
ganon_hunt: Ganon Hunt
|
||||
completionist: Completionist
|
||||
weapons:
|
||||
random: Randomized Swords
|
||||
assured: Assured Sword
|
||||
vanilla: Vanilla Swords
|
||||
swordless: Swordless
|
||||
mode:
|
||||
open: Open
|
||||
standard: Standard
|
||||
inverted: Inverted
|
||||
entrance_shuffle:
|
||||
vanilla: Vanilla Entrances
|
||||
full: Full Entrance Shuffle
|
||||
crossed: Crossed Entrance Shuffle
|
||||
swapped: Swapped Entrance Shuffle
|
||||
decoupled: Decoupled Entrance Shuffle
|
||||
enemy_shuffle:
|
||||
vanilla: Vanilla Enemies
|
||||
shuffled: Shuffled Enemies
|
||||
mimics: All Mimics
|
||||
boss_shuffle:
|
||||
vanilla: Vanilla Bosses
|
||||
simple: Simple Boss Shuffle
|
||||
full: Full Boss Shuffle
|
||||
random: Random Boss Shuffle
|
||||
prize_unique: Unique Prize Boss Shuffle
|
||||
dungeon_items:
|
||||
dungeon: Dungeon
|
||||
wild: Wild
|
||||
nearby: Nearby
|
||||
universal: Universal
|
||||
@@ -1,8 +1,9 @@
|
||||
import { fileURLToPath, URL } from 'node:url'
|
||||
|
||||
import { defineConfig } from 'vite'
|
||||
import vue from '@vitejs/plugin-vue'
|
||||
import vueDevTools from 'vite-plugin-vue-devtools'
|
||||
import { defineConfig } from "vite";
|
||||
import vue from "@vitejs/plugin-vue";
|
||||
import ViteYaml from "@modyfi/vite-plugin-yaml";
|
||||
import vueDevTools from "vite-plugin-vue-devtools";
|
||||
|
||||
// https://vite.dev/config/
|
||||
export default defineConfig({
|
||||
@@ -11,6 +12,7 @@ export default defineConfig({
|
||||
},
|
||||
plugins: [
|
||||
vue(),
|
||||
ViteYaml(),
|
||||
vueDevTools(),
|
||||
],
|
||||
resolve: {
|
||||
|
||||
Reference in New Issue
Block a user