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",
|
"crc-32": "^1.2.2",
|
||||||
"js-base64": "^3.7.7",
|
"js-base64": "^3.7.7",
|
||||||
"localforage": "^1.10.0",
|
"localforage": "^1.10.0",
|
||||||
|
"mustache": "^4.2.0",
|
||||||
"vue": "^3.5.13",
|
"vue": "^3.5.13",
|
||||||
"vue-router": "^4.5.0"
|
"vue-router": "^4.5.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@modyfi/vite-plugin-yaml": "^1.1.1",
|
||||||
"@vitejs/plugin-vue": "^5.2.1",
|
"@vitejs/plugin-vue": "^5.2.1",
|
||||||
"vite": "^6.1.0",
|
"vite": "^6.1.0",
|
||||||
"vite-plugin-vue-devtools": "^7.7.2"
|
"vite-plugin-vue-devtools": "^7.7.2"
|
||||||
@@ -909,6 +911,57 @@
|
|||||||
"@jridgewell/sourcemap-codec": "^1.4.14"
|
"@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": {
|
"node_modules/@polka/url": {
|
||||||
"version": "1.0.0-next.28",
|
"version": "1.0.0-next.28",
|
||||||
"resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz",
|
"resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz",
|
||||||
@@ -1449,6 +1502,13 @@
|
|||||||
"node": ">=0.10.0"
|
"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": {
|
"node_modules/asynckit": {
|
||||||
"version": "0.4.0",
|
"version": "0.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
||||||
@@ -2307,6 +2367,19 @@
|
|||||||
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
|
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
|
||||||
"dev": true
|
"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": {
|
"node_modules/jsesc": {
|
||||||
"version": "3.1.0",
|
"version": "3.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
|
||||||
@@ -2452,6 +2525,15 @@
|
|||||||
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
|
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
|
||||||
"dev": true
|
"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": {
|
"node_modules/nanoid": {
|
||||||
"version": "3.3.8",
|
"version": "3.3.8",
|
||||||
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz",
|
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz",
|
||||||
@@ -2787,6 +2869,15 @@
|
|||||||
"integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==",
|
"integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==",
|
||||||
"dev": true
|
"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": {
|
"node_modules/totalist": {
|
||||||
"version": "3.0.1",
|
"version": "3.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz",
|
||||||
|
|||||||
@@ -16,10 +16,12 @@
|
|||||||
"crc-32": "^1.2.2",
|
"crc-32": "^1.2.2",
|
||||||
"js-base64": "^3.7.7",
|
"js-base64": "^3.7.7",
|
||||||
"localforage": "^1.10.0",
|
"localforage": "^1.10.0",
|
||||||
|
"mustache": "^4.2.0",
|
||||||
"vue": "^3.5.13",
|
"vue": "^3.5.13",
|
||||||
"vue-router": "^4.5.0"
|
"vue-router": "^4.5.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@modyfi/vite-plugin-yaml": "^1.1.1",
|
||||||
"@vitejs/plugin-vue": "^5.2.1",
|
"@vitejs/plugin-vue": "^5.2.1",
|
||||||
"vite": "^6.1.0",
|
"vite": "^6.1.0",
|
||||||
"vite-plugin-vue-devtools": "^7.7.2"
|
"vite-plugin-vue-devtools": "^7.7.2"
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
import { defineComponent } from "vue";
|
import { defineComponent } from "vue";
|
||||||
|
|
||||||
import SpritePicker from "@/components/SpritePicker.vue";
|
import SpritePicker from "@/components/SpritePicker.vue";
|
||||||
|
import SeedSettings from "@/components/SeedSettings.vue";
|
||||||
|
|
||||||
import { Base64 } from "js-base64";
|
import { Base64 } from "js-base64";
|
||||||
import * as bps from "bps";
|
import * as bps from "bps";
|
||||||
@@ -11,6 +12,7 @@ import axios from "axios";
|
|||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
components: {
|
components: {
|
||||||
|
SeedSettings,
|
||||||
SpritePicker,
|
SpritePicker,
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
@@ -21,6 +23,7 @@ export default defineComponent({
|
|||||||
sprite: null,
|
sprite: null,
|
||||||
patch: null,
|
patch: null,
|
||||||
error: null,
|
error: null,
|
||||||
|
settings: null,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
@@ -46,6 +49,7 @@ export default defineComponent({
|
|||||||
const sourceChecksum = instructions.sourceChecksum.toString(16).toUpperCase();
|
const sourceChecksum = instructions.sourceChecksum.toString(16).toUpperCase();
|
||||||
if (sourceChecksum == this.rom_checksum) {
|
if (sourceChecksum == this.rom_checksum) {
|
||||||
this.patch = instructions;
|
this.patch = instructions;
|
||||||
|
this.settings = seedData.settings;
|
||||||
} else {
|
} else {
|
||||||
this.error = "Patch does not specify correct source checksum.";
|
this.error = "Patch does not specify correct source checksum.";
|
||||||
}
|
}
|
||||||
@@ -54,7 +58,6 @@ export default defineComponent({
|
|||||||
this.error = "Error parsing patch.";
|
this.error = "Error parsing patch.";
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
console.log(response.data);
|
|
||||||
this.error = "Error loading seed.";
|
this.error = "Error loading seed.";
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -131,7 +134,7 @@ export default defineComponent({
|
|||||||
{{ error }}
|
{{ error }}
|
||||||
</div>
|
</div>
|
||||||
<ul class="list-group list-group-flush">
|
<ul class="list-group list-group-flush">
|
||||||
<li class="list-group-item">
|
<li v-if="!baserom" class="list-group-item">
|
||||||
<div class="mb-2">
|
<div class="mb-2">
|
||||||
<label for="rom-input" class="form-label">
|
<label for="rom-input" class="form-label">
|
||||||
The Legend of Zelda: A Link to the Past (JP 1.0) Rom:
|
The Legend of Zelda: A Link to the Past (JP 1.0) Rom:
|
||||||
@@ -142,6 +145,9 @@ export default defineComponent({
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
|
<li v-if="settings" class="list-group-item">
|
||||||
|
<SeedSettings :settings="settings" />
|
||||||
|
</li>
|
||||||
<li class="list-group-item">
|
<li class="list-group-item">
|
||||||
<div class="mb-2">
|
<div class="mb-2">
|
||||||
<SpritePicker @spriteUpdate="spriteUpdate" />
|
<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 { fileURLToPath, URL } from 'node:url'
|
||||||
|
|
||||||
import { defineConfig } from 'vite'
|
import { defineConfig } from "vite";
|
||||||
import vue from '@vitejs/plugin-vue'
|
import vue from "@vitejs/plugin-vue";
|
||||||
import vueDevTools from 'vite-plugin-vue-devtools'
|
import ViteYaml from "@modyfi/vite-plugin-yaml";
|
||||||
|
import vueDevTools from "vite-plugin-vue-devtools";
|
||||||
|
|
||||||
// https://vite.dev/config/
|
// https://vite.dev/config/
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
@@ -11,6 +12,7 @@ export default defineConfig({
|
|||||||
},
|
},
|
||||||
plugins: [
|
plugins: [
|
||||||
vue(),
|
vue(),
|
||||||
|
ViteYaml(),
|
||||||
vueDevTools(),
|
vueDevTools(),
|
||||||
],
|
],
|
||||||
resolve: {
|
resolve: {
|
||||||
|
|||||||
Reference in New Issue
Block a user