From 49e878d2742cb593c56c4fdd2f5f1fa8cea00943 Mon Sep 17 00:00:00 2001 From: aquanight Date: Thu, 5 Mar 2026 23:18:40 -0700 Subject: [PATCH 1/6] Customizable Locked Doors --- rust/data/presets/doors/Ammo.json | 11 +++ rust/data/presets/doors/Beam.json | 11 +++ rust/data/presets/doors/Blue.json | 11 +++ .../Community Race Season 4.json | 12 ++- rust/data/presets/full-settings/Default.json | 12 ++- rust/maprando-web/src/web/generate.rs | 4 + rust/maprando-web/src/web/randomize.rs | 20 ++++- .../maprando-web/src/web/randomize/helpers.rs | 20 ++++- .../templates/generate/doors.html | 85 +++++++++++++++++++ .../templates/generate/help/doors.html | 6 +- .../maprando-web/templates/generate/main.html | 27 ++++-- .../templates/generate/scripts.html | 57 ++++++++++++- .../templates/seed/seed_header.html | 27 +++++- rust/maprando/src/preset.rs | 20 ++++- rust/maprando/src/randomize.rs | 75 ++++++++++------ rust/maprando/src/settings.rs | 41 ++++++++- 16 files changed, 395 insertions(+), 44 deletions(-) create mode 100644 rust/data/presets/doors/Ammo.json create mode 100644 rust/data/presets/doors/Beam.json create mode 100644 rust/data/presets/doors/Blue.json create mode 100644 rust/maprando-web/templates/generate/doors.html diff --git a/rust/data/presets/doors/Ammo.json b/rust/data/presets/doors/Ammo.json new file mode 100644 index 0000000000..4c29b04174 --- /dev/null +++ b/rust/data/presets/doors/Ammo.json @@ -0,0 +1,11 @@ +{ + "preset": "Ammo", + "red_doors_count": 30, + "green_doors_count": 15, + "yellow_doors_count": 10, + "charge_doors_count": 0, + "ice_doors_count": 0, + "wave_doors_count": 0, + "spazer_doors_count": 0, + "plasma_doors_count": 0 +} diff --git a/rust/data/presets/doors/Beam.json b/rust/data/presets/doors/Beam.json new file mode 100644 index 0000000000..844e670747 --- /dev/null +++ b/rust/data/presets/doors/Beam.json @@ -0,0 +1,11 @@ +{ + "preset": "Beam", + "red_doors_count": 18, + "green_doors_count": 10, + "yellow_doors_count": 7, + "charge_doors_count": 4, + "ice_doors_count": 4, + "wave_doors_count": 4, + "spazer_doors_count": 4, + "plasma_doors_count": 4 +} diff --git a/rust/data/presets/doors/Blue.json b/rust/data/presets/doors/Blue.json new file mode 100644 index 0000000000..71ef781c72 --- /dev/null +++ b/rust/data/presets/doors/Blue.json @@ -0,0 +1,11 @@ +{ + "preset": "Blue", + "red_doors_count": 0, + "green_doors_count": 0, + "yellow_doors_count": 0, + "charge_doors_count": 0, + "ice_doors_count": 0, + "wave_doors_count": 0, + "spazer_doors_count": 0, + "plasma_doors_count": 0 +} diff --git a/rust/data/presets/full-settings/Community Race Season 4.json b/rust/data/presets/full-settings/Community Race Season 4.json index 744d67113c..58859f508f 100644 --- a/rust/data/presets/full-settings/Community Race Season 4.json +++ b/rust/data/presets/full-settings/Community Race Season 4.json @@ -4638,7 +4638,17 @@ "objective_screen": "Enabled" }, "map_layout": "Standard", - "doors_mode": "Ammo", + "doors_settings": { + "preset": "Ammo", + "red_doors_count": 30, + "green_doors_count": 15, + "yellow_doors_count": 10, + "charge_doors_count": 0, + "ice_doors_count": 0, + "wave_doors_count": 0, + "spazer_doors_count": 0, + "plasma_doors_count": 0 + }, "start_location_settings": { "mode": "Random", "room_id": null, diff --git a/rust/data/presets/full-settings/Default.json b/rust/data/presets/full-settings/Default.json index f2aaab7fa8..b7818e54d3 100644 --- a/rust/data/presets/full-settings/Default.json +++ b/rust/data/presets/full-settings/Default.json @@ -4638,7 +4638,17 @@ "objective_screen": "Enabled" }, "map_layout": "Standard", - "doors_mode": "Ammo", + "doors_settings": { + "preset": "Ammo", + "red_doors_count": 30, + "green_doors_count": 15, + "yellow_doors_count": 10, + "charge_doors_count": 0, + "ice_doors_count": 0, + "wave_doors_count": 0, + "spazer_doors_count": 0, + "plasma_doors_count": 0 + }, "start_location_settings": { "mode": "Ship" }, diff --git a/rust/maprando-web/src/web/generate.rs b/rust/maprando-web/src/web/generate.rs index c92fed5a65..86a037e575 100644 --- a/rust/maprando-web/src/web/generate.rs +++ b/rust/maprando-web/src/web/generate.rs @@ -17,6 +17,7 @@ struct GenerateTemplate<'a> { skill_presets_json: String, item_presets_json: String, qol_presets_json: String, + doors_presets_json: String, objective_presets_json: String, item_priorities: Vec, item_names_multiple: Vec, @@ -117,6 +118,8 @@ async fn generate(app_data: web::Data) -> impl Responder { serde_json::to_string(&app_data.preset_data.item_progression_presets).unwrap(); let qol_presets_json = serde_json::to_string(&app_data.preset_data.quality_of_life_presets).unwrap(); + let doors_presets_json = + serde_json::to_string(&app_data.preset_data.doors_presets).unwrap(); let objective_presets_json = serde_json::to_string(&app_data.preset_data.objective_presets).unwrap(); @@ -167,6 +170,7 @@ async fn generate(app_data: web::Data) -> impl Responder { skill_presets_json, item_presets_json, qol_presets_json, + doors_presets_json, objective_presets_json, tech_description: &app_data.game_data.tech_description, tech_dependencies_str: &tech_dependencies_strs, diff --git a/rust/maprando-web/src/web/randomize.rs b/rust/maprando-web/src/web/randomize.rs index 70ccdd541f..8772922124 100644 --- a/rust/maprando-web/src/web/randomize.rs +++ b/rust/maprando-web/src/web/randomize.rs @@ -54,7 +54,15 @@ struct SeedData { momentum_conservation: bool, fanfares: String, objectives: Vec, - doors: String, + doors_preset: Option, + red_doors_count: i32, + green_doors_count: i32, + yellow_doors_count: i32, + charge_doors_count: i32, + ice_doors_count: i32, + wave_doors_count: i32, + spazer_doors_count: i32, + plasma_doors_count: i32, start_location_mode: String, map_layout: String, save_animals: String, @@ -333,7 +341,15 @@ async fn randomize( .iter() .map(|x| to_variant_name(x).unwrap().to_string()) .collect(), - doors: to_variant_name(&settings.doors_mode).unwrap().to_string(), + doors_preset: settings.doors_settings.preset.clone(), + red_doors_count: settings.doors_settings.red_doors_count, + green_doors_count: settings.doors_settings.green_doors_count, + yellow_doors_count: settings.doors_settings.yellow_doors_count, + charge_doors_count: settings.doors_settings.charge_doors_count, + ice_doors_count: settings.doors_settings.ice_doors_count, + wave_doors_count: settings.doors_settings.wave_doors_count, + spazer_doors_count: settings.doors_settings.spazer_doors_count, + plasma_doors_count: settings.doors_settings.plasma_doors_count, start_location_mode: if settings.start_location_settings.mode == StartLocationMode::Custom { output.randomization.start_location.name.clone() } else { diff --git a/rust/maprando-web/src/web/randomize/helpers.rs b/rust/maprando-web/src/web/randomize/helpers.rs index a590fb1dda..a51df5d265 100644 --- a/rust/maprando-web/src/web/randomize/helpers.rs +++ b/rust/maprando-web/src/web/randomize/helpers.rs @@ -60,7 +60,15 @@ pub struct SeedHeaderTemplate<'a> { fanfares: String, etank_refill: String, disableable_etanks: String, - doors: String, + doors_preset: String, + red_doors_count: i32, + green_doors_count: i32, + yellow_doors_count: i32, + charge_doors_count: i32, + ice_doors_count: i32, + wave_doors_count: i32, + spazer_doors_count: i32, + plasma_doors_count: i32, start_location_mode: String, map_layout: String, save_animals: String, @@ -466,7 +474,15 @@ pub fn render_seed( DisableETankSetting::Unrestricted => "Unrestricted", } .to_string(), - doors: seed_data.doors.clone(), + doors_preset: seed_data.doors_preset.clone().unwrap_or("Custom".to_string()), + red_doors_count: seed_data.red_doors_count, + green_doors_count: seed_data.green_doors_count, + yellow_doors_count: seed_data.yellow_doors_count, + charge_doors_count: seed_data.charge_doors_count, + ice_doors_count: seed_data.ice_doors_count, + wave_doors_count: seed_data.wave_doors_count, + spazer_doors_count: seed_data.spazer_doors_count, + plasma_doors_count: seed_data.plasma_doors_count, start_location_mode: seed_data.start_location_mode.clone(), map_layout: seed_data.map_layout.clone(), save_animals: seed_data.save_animals.clone(), diff --git a/rust/maprando-web/templates/generate/doors.html b/rust/maprando-web/templates/generate/doors.html new file mode 100644 index 0000000000..96d944ae15 --- /dev/null +++ b/rust/maprando-web/templates/generate/doors.html @@ -0,0 +1,85 @@ + + diff --git a/rust/maprando-web/templates/generate/help/doors.html b/rust/maprando-web/templates/generate/help/doors.html index 7b73287396..5484547094 100644 --- a/rust/maprando-web/templates/generate/help/doors.html +++ b/rust/maprando-web/templates/generate/help/doors.html @@ -1,9 +1,9 @@ - - + +
+
+ Doors details +
+
+ {% include "doors_details.html" %} +
+
From 30c8e10d64a53630153bf453d0293aff6ad67dad Mon Sep 17 00:00:00 2001 From: Brent Kerby Date: Mon, 9 Mar 2026 19:11:10 -0600 Subject: [PATCH 6/6] increase door count limit --- patches/rom_map/Bank 83.txt | 7 ++++--- patches/src/item_dots_disappear.asm | 4 ++-- .../maprando-web/templates/generate/doors.html | 18 +++++++++--------- rust/maprando-web/templates/generate/main.html | 2 +- rust/maprando/src/patch/map_tiles.rs | 4 ++-- rust/maprando/src/randomize.rs | 14 +++++++++----- 6 files changed, 27 insertions(+), 22 deletions(-) diff --git a/patches/rom_map/Bank 83.txt b/patches/rom_map/Bank 83.txt index 6e349082c3..46816f6359 100644 --- a/patches/rom_map/Bank 83.txt +++ b/patches/rom_map/Bank 83.txt @@ -1,10 +1,11 @@ 0000 - AD66: Used by vanilla game AD66 - AD72: escape_autosave.asm -B000 - B700: items_disappear.asm +B000 - B700: [FREE] B700 - B800: rng_fix.asm B800 - BA00: Mosaic (Area FX.asm) BA00 - BA15: vanilla_bugfixes.asm -BA15 - BB00: [free] +BA15 - BB00: [FREE] BB00 - BC40: disableable_etanks.asm -BC40 - F000: [free space] +BC40 - E000: [FREE] +E000 - F000: item_dots_disappear.asm F000 - end: Mosaic (FX data) \ No newline at end of file diff --git a/patches/src/item_dots_disappear.asm b/patches/src/item_dots_disappear.asm index 3bbabbf2e2..6af682a2bc 100644 --- a/patches/src/item_dots_disappear.asm +++ b/patches/src/item_dots_disappear.asm @@ -2,8 +2,8 @@ arch snes.cpu lorom ; Must match locations in patch/map_tiles.rs -!item_list_ptrs = $83B000 -!item_list_sizes = $83B00C +!item_list_ptrs = $83E000 +!item_list_sizes = $83E00C !bank_82_freespace_start = $82FD00 !bank_82_freespace_end = $82FD80 diff --git a/rust/maprando-web/templates/generate/doors.html b/rust/maprando-web/templates/generate/doors.html index 96d944ae15..9be5e08e5b 100644 --- a/rust/maprando-web/templates/generate/doors.html +++ b/rust/maprando-web/templates/generate/doors.html @@ -1,5 +1,5 @@