Show some seed settings

This commit is contained in:
2025-03-02 21:42:41 -06:00
parent f85f1ec3f6
commit 443150aab1
6 changed files with 199 additions and 5 deletions

91
package-lock.json generated
View File

@@ -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",

View File

@@ -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"

View File

@@ -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" />

View 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>

View 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

View File

@@ -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: {