diff --git a/src/components/PresetPicker.vue b/src/components/PresetPicker.vue
index 81270d7..2af10ba 100644
--- a/src/components/PresetPicker.vue
+++ b/src/components/PresetPicker.vue
@@ -49,10 +49,12 @@ export default defineComponent({
},
presets() {
const filledPresets = {};
- for (const presetName of Object.keys(presets[this.generator])) {
- const preset = JSON.parse(JSON.stringify(presets[this.generator][presetName]));
- this.fillPreset(preset);
- filledPresets[presetName] = preset;
+ if (presets[this.generator]) {
+ for (const presetName of Object.keys(presets[this.generator])) {
+ const preset = JSON.parse(JSON.stringify(presets[this.generator][presetName]));
+ this.fillPreset(preset);
+ filledPresets[presetName] = preset;
+ }
}
return filledPresets;
},
diff --git a/src/components/SettingPicker.vue b/src/components/SettingPicker.vue
index 09243df..53500f2 100644
--- a/src/components/SettingPicker.vue
+++ b/src/components/SettingPicker.vue
@@ -46,9 +46,11 @@ export default defineComponent({
},
},
async mounted() {
- this.$refs.tips.forEach(el => new Tooltip(el));
- this.selected = await localforage.getItem(`${this.prefix}setting_${this.name}`) ?? this.settings.default;
- this.change();
+ this.$refs.tips?.forEach(el => new Tooltip(el));
+ if (this.settings) {
+ this.selected = await localforage.getItem(`${this.prefix}setting_${this.name}`) ?? this.settings.default;
+ this.change();
+ }
},
methods: {
async change() {
@@ -63,16 +65,18 @@ export default defineComponent({
- {{ settings.display ?? name }}:
-
+
diff --git a/src/components/SettingsPage.vue b/src/components/SettingsPage.vue
index 122377c..ec894f7 100644
--- a/src/components/SettingsPage.vue
+++ b/src/components/SettingsPage.vue
@@ -4,6 +4,8 @@ import { defineComponent } from "vue";
import axios from "axios";
import { Modal } from "bootstrap";
+import generatorSettings from "@/data/generator-settings.yaml";
+
import AccordionItem from "@/components/AccordionItem.vue";
import PresetPicker from "@/components/PresetPicker.vue";
import SettingPicker from "@/components/SettingPicker.vue";
@@ -20,6 +22,7 @@ export default defineComponent({
props: {
modelValue: {},
prefix: null,
+ generator: null,
},
data() {
return {
@@ -30,6 +33,11 @@ export default defineComponent({
modal: null,
};
},
+ computed: {
+ settings() {
+ return generatorSettings[this.generator];
+ }
+ },
mounted() {
this.modal = new Modal(document.getElementById("savePresetModal"), {});
},
@@ -45,7 +53,7 @@ export default defineComponent({
methods: {
async generate(race) {
const settings = {
- randomizer: "base",
+ randomizer: this.generator,
race: race ? "race" : "normal"
};
for (const setting of Object.keys(this.set)) {
@@ -128,92 +136,99 @@ export default defineComponent({
-
World:
-
-
-
+
+
+
Goal:
-
+
+ v-model="set.crystals_ganon" name="crystals_ganon" :generator="generator" :prefix="prefix" />
-
+ v-model="set.ganon_item" name="ganon_item" :generator="generator" :prefix="prefix" />
+
Entrance Shuffle:
-
+
+ v-model="set.skull_woods" name="skull_woods" :generator="generator" :prefix="prefix" />
+ v-model="set.linked_drops" name="linked_drops" :generator="generator" :prefix="prefix" />
-
+
Dungeon Shuffle:
-
+
+ v-model="set.lobbies" name="door_lobbies" :generator="generator" :prefix="prefix" />
+ v-model="set.door_type_mode" name="door_type_mode" :generator="generator" :prefix="prefix" />
+ v-model="set.trap_door_mode" name="trap_door_mode" :generator="generator" :prefix="prefix" />
+
+
+
+ Overworld Settings:
+
+
+
Enemizer:
-
-
-
+
+
+
Dungeon Item Shuffle:
-
-
-
-
+
+
+
+
Other Pool Settings:
-
-
-
-
-
+
+
+
+
+
Item Settings:
-
-
-
-
-
+
+
+
+
+
Challenge Modes:
-
+
diff --git a/src/data/generator-settings.yaml b/src/data/generator-settings.yaml
index 1f05c1d..a5b9720 100644
--- a/src/data/generator-settings.yaml
+++ b/src/data/generator-settings.yaml
@@ -29,6 +29,8 @@ base:
bombs: all
book: all
follower_shuffle: all
+ flute_shuffle: all
+ tile_swap: all
damage_challenge: all
hints: all
apr2025:
@@ -46,3 +48,34 @@ apr2025:
display: Wild
boots: ['normal', 'pseudoboots']
hints: all
+dungeon_map:
+ mode: all
+ weapons: all
+ goal: all
+ crystals_ganon: all
+ crystals_gt: all
+ ganon_item: all
+ entrance_shuffle: all
+ skull_woods: all
+ linked_drops: all
+ boss_shuffle: all
+ enemy_shuffle: all
+ damage_table_shuffle: all
+ small_keys: all
+ big_keys: all
+ maps: all
+ compasses: all
+ shop_shuffle: all
+ drop_shuffle: all
+ pottery: all
+ prize_shuffle: all
+ boots: all
+ flute: all
+ dark_rooms: all
+ bombs: all
+ book: all
+ follower_shuffle: all
+ flute_shuffle: all
+ tile_swap: all
+ damage_challenge: all
+ hints: all
diff --git a/src/data/presets.yaml b/src/data/presets.yaml
index aac47a7..164e38b 100644
--- a/src/data/presets.yaml
+++ b/src/data/presets.yaml
@@ -30,3 +30,6 @@ base:
drop_shuffle: keys
pottery: keys
dark_rooms: always_light_cone
+dungeon_map:
+ default:
+ display: Default
diff --git a/src/data/settings.yaml b/src/data/settings.yaml
index 863d3f4..7e91fd3 100644
--- a/src/data/settings.yaml
+++ b/src/data/settings.yaml
@@ -461,6 +461,28 @@ follower_shuffle:
display: None
shuffled:
display: Shuffled
+flute_shuffle:
+ display: Flute Spot Shuffle
+ default: vanilla
+ values:
+ vanilla:
+ display: Vanilla
+ tip: The eight flute spots are at their vanilla locations.
+ random:
+ display: Random
+ tip: The seven flute spots outside the Desert/Mire area are each moved to a random screen, with one spot available on the mountain.
+ balanced:
+ display: Balanced
+ tip: The seven flute spots outside the Desert/Mire area are each moved to a random screen such that no two flute spots are on adjacent screens.
+tile_swap:
+ display: Tile Swap
+ default: vanilla
+ values:
+ vanilla:
+ display: Normal
+ tile_swap:
+ display: Tile Swap
+ tip: Each tile on the overworld has a chance to be swapped with its inverted version.
damage_challenge:
display: Damage Mode
default: normal
diff --git a/src/router/index.js b/src/router/index.js
index 9fd2bde..4e13f9d 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -4,6 +4,7 @@ import MultiView from "@/views/MultiView.vue";
import GenerateView from "@/views/GenerateView.vue";
import GenerateMulti from "@/views/GenerateMulti.vue";
import GenerateApr2025View from "@/views/GenerateApr2025View.vue";
+import GenerateDungeonMapView from "@/views/GenerateDungeonMapView.vue";
const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL),
@@ -24,6 +25,10 @@ const router = createRouter({
path: '/generate/apr2025',
component: GenerateApr2025View,
},
+ {
+ path: '/generate/beta_test',
+ component: GenerateDungeonMapView,
+ },
{
path: '/seed/:id',
name: 'seed',
diff --git a/src/views/GenerateDungeonMapView.vue b/src/views/GenerateDungeonMapView.vue
new file mode 100644
index 0000000..f728f5a
--- /dev/null
+++ b/src/views/GenerateDungeonMapView.vue
@@ -0,0 +1,65 @@
+
+
+
+
+
+
diff --git a/src/views/GenerateView.vue b/src/views/GenerateView.vue
index 2feaae2..a998f7f 100644
--- a/src/views/GenerateView.vue
+++ b/src/views/GenerateView.vue
@@ -46,7 +46,7 @@ export default defineComponent({
Generate Seed
-
+