From 518776cfce9d9bc4b8968812ef0727a6f7d95567 Mon Sep 17 00:00:00 2001 From: aquanight Date: Wed, 5 Aug 2026 20:25:08 -0600 Subject: [PATCH 1/7] E-Tank Multiplier Customization --- .../presets/full-settings/Community Race Season 5.json | 2 ++ rust/data/presets/full-settings/Default.json | 2 ++ rust/data/presets/full-settings/Mentor Tournament.json | 2 ++ .../full-settings/Summer Series Expert Challenge.json | 2 ++ rust/data/presets/item-progression/Challenge.json | 2 ++ rust/data/presets/item-progression/Desolate.json | 2 ++ rust/data/presets/item-progression/Normal.json | 2 ++ rust/data/presets/item-progression/Technical.json | 2 ++ rust/data/presets/item-progression/Tricky.json | 2 ++ rust/maprando-logic/src/lib.rs | 6 ++++-- rust/maprando/src/randomize.rs | 4 ++++ rust/maprando/src/settings.rs | 8 ++++++++ 12 files changed, 34 insertions(+), 2 deletions(-) diff --git a/rust/data/presets/full-settings/Community Race Season 5.json b/rust/data/presets/full-settings/Community Race Season 5.json index 7849f7668..2a4a26277 100644 --- a/rust/data/presets/full-settings/Community Race Season 5.json +++ b/rust/data/presets/full-settings/Community Race Season 5.json @@ -4284,6 +4284,8 @@ "missile_size": 5, "super_size": 5, "powerbomb_size": 5, + "etank_multiplier": 1, + "reserve_multiplier": 1, "item_pool": [ { "item": "Missile", diff --git a/rust/data/presets/full-settings/Default.json b/rust/data/presets/full-settings/Default.json index 769504a14..681125a92 100644 --- a/rust/data/presets/full-settings/Default.json +++ b/rust/data/presets/full-settings/Default.json @@ -4284,6 +4284,8 @@ "missile_size": 5, "super_size": 5, "powerbomb_size": 5, + "etank_multiplier": 1, + "reserve_multiplier": 1, "item_pool": [ { "item": "Missile", diff --git a/rust/data/presets/full-settings/Mentor Tournament.json b/rust/data/presets/full-settings/Mentor Tournament.json index 8932aaa99..dfce2e46b 100644 --- a/rust/data/presets/full-settings/Mentor Tournament.json +++ b/rust/data/presets/full-settings/Mentor Tournament.json @@ -4284,6 +4284,8 @@ "missile_size": 5, "super_size": 5, "powerbomb_size": 5, + "etank_multiplier": 1, + "reserve_multiplier": 1, "item_pool": [ { "item": "Missile", diff --git a/rust/data/presets/full-settings/Summer Series Expert Challenge.json b/rust/data/presets/full-settings/Summer Series Expert Challenge.json index e2fa09e24..5e540bfbc 100644 --- a/rust/data/presets/full-settings/Summer Series Expert Challenge.json +++ b/rust/data/presets/full-settings/Summer Series Expert Challenge.json @@ -4284,6 +4284,8 @@ "missile_size": 5, "super_size": 5, "powerbomb_size": 5, + "etank_multiplier": 1, + "reserve_multiplier": 1, "item_pool": [ { "item": "Missile", diff --git a/rust/data/presets/item-progression/Challenge.json b/rust/data/presets/item-progression/Challenge.json index 176ad8ff9..2f44ac6b0 100644 --- a/rust/data/presets/item-progression/Challenge.json +++ b/rust/data/presets/item-progression/Challenge.json @@ -11,6 +11,8 @@ "missile_size": 5, "super_size": 5, "powerbomb_size": 5, + "etank_multiplier": 1, + "reserve_multiplier": 1, "item_pool": [ { "item": "Missile", diff --git a/rust/data/presets/item-progression/Desolate.json b/rust/data/presets/item-progression/Desolate.json index 6a7fdb90d..270308cdf 100644 --- a/rust/data/presets/item-progression/Desolate.json +++ b/rust/data/presets/item-progression/Desolate.json @@ -11,6 +11,8 @@ "missile_size": 5, "super_size": 5, "powerbomb_size": 5, + "etank_multiplier": 1, + "reserve_multiplier": 1, "item_pool": [ { "item": "Missile", diff --git a/rust/data/presets/item-progression/Normal.json b/rust/data/presets/item-progression/Normal.json index f9b60ff2e..69138dd63 100644 --- a/rust/data/presets/item-progression/Normal.json +++ b/rust/data/presets/item-progression/Normal.json @@ -11,6 +11,8 @@ "missile_size": 5, "super_size": 5, "powerbomb_size": 5, + "etank_multiplier": 1, + "reserve_multiplier": 1, "item_pool": [ { "item": "Missile", diff --git a/rust/data/presets/item-progression/Technical.json b/rust/data/presets/item-progression/Technical.json index 41aaabe6d..b9e0035f2 100644 --- a/rust/data/presets/item-progression/Technical.json +++ b/rust/data/presets/item-progression/Technical.json @@ -11,6 +11,8 @@ "missile_size": 5, "super_size": 5, "powerbomb_size": 5, + "etank_multiplier": 1, + "reserve_multiplier": 1, "item_pool": [ { "item": "Missile", diff --git a/rust/data/presets/item-progression/Tricky.json b/rust/data/presets/item-progression/Tricky.json index e4d9961c7..c40b3f219 100644 --- a/rust/data/presets/item-progression/Tricky.json +++ b/rust/data/presets/item-progression/Tricky.json @@ -11,6 +11,8 @@ "missile_size": 5, "super_size": 5, "powerbomb_size": 5, + "etank_multiplier": 1, + "reserve_multiplier": 1, "item_pool": [ { "item": "Missile", diff --git a/rust/maprando-logic/src/lib.rs b/rust/maprando-logic/src/lib.rs index 34707226d..4c60392e7 100644 --- a/rust/maprando-logic/src/lib.rs +++ b/rust/maprando-logic/src/lib.rs @@ -48,6 +48,8 @@ impl GlobalState { missile_size: u16, super_size: u16, powerbomb_size: u16, + etank_multiplier: u8, + reserve_multiplier: u8, tech: &[bool], ) { self.inventory.items[item as usize] = true; @@ -83,7 +85,7 @@ impl GlobalState { self.inventory.max_power_bombs = new_max_power_bombs; } Item::ETank => { - self.inventory.max_energy = std::cmp::min(1499, self.inventory.max_energy + 100); + self.inventory.max_energy = std::cmp::min(1499, self.inventory.max_energy + (100 * etank_multiplier as Capacity)); if !tech[game_data.manage_reserves_tech_idx] { self.inventory.max_reserves = Capacity::min(self.inventory.max_reserves, self.inventory.max_energy); @@ -92,7 +94,7 @@ impl GlobalState { Item::ReserveTank => { self.inventory.collectible_reserve_tanks += 1; self.inventory.max_reserves = - std::cmp::min(400, self.inventory.collectible_reserve_tanks * 100); + std::cmp::min(400, self.inventory.collectible_reserve_tanks * (100 * reserve_multiplier as Capacity)); if !tech[game_data.manage_reserves_tech_idx] { self.inventory.max_reserves = Capacity::min(self.inventory.max_reserves, self.inventory.max_energy); diff --git a/rust/maprando/src/randomize.rs b/rust/maprando/src/randomize.rs index a2a426e25..8ded06d4d 100644 --- a/rust/maprando/src/randomize.rs +++ b/rust/maprando/src/randomize.rs @@ -4414,6 +4414,8 @@ impl<'r> Randomizer<'r> { self.settings.item_progression_settings.missile_size, self.settings.item_progression_settings.super_size, self.settings.item_progression_settings.powerbomb_size, + self.settings.item_progression_settings.etank_multiplier, + self.settings.item_progression_settings.reserve_multiplier, &self.difficulty_tiers[0].tech, ); } @@ -5311,6 +5313,8 @@ impl<'r> Randomizer<'r> { self.settings.item_progression_settings.missile_size, self.settings.item_progression_settings.super_size, self.settings.item_progression_settings.powerbomb_size, + self.settings.item_progression_settings.etank_multiplier, + self.settings.item_progression_settings.reserve_multiplier, &self.difficulty_tiers[0].tech, ); } diff --git a/rust/maprando/src/settings.rs b/rust/maprando/src/settings.rs index cd22f56ea..728397322 100644 --- a/rust/maprando/src/settings.rs +++ b/rust/maprando/src/settings.rs @@ -104,6 +104,8 @@ pub struct ItemProgressionSettings { pub missile_size: u16, pub super_size: u16, pub powerbomb_size: u16, + pub etank_multiplier: u8, + pub reserve_multiplier: u8, } #[repr(u8)] @@ -1125,6 +1127,12 @@ fn upgrade_item_progression_settings(settings: &mut serde_json::Value) -> Result if !item_progression_settings.contains_key("powerbomb_size") { item_progression_settings.insert("powerbomb_size".to_string(), (5).into()); } + if !item_progression_settings.contains_key("etank_multiplier") { + item_progression_settings.insert("etank_multiplier".to_string(), (1).into()); + } + if !item_progression_settings.contains_key("reserve_multiplier") { + item_progression_settings.insert("reserve_multiplier".to_string(), (1).into()); + } Ok(()) } From 2f28b0eecf6358941f077273826406eb611f0845 Mon Sep 17 00:00:00 2001 From: aquanight Date: Fri, 7 Aug 2026 18:54:56 -0600 Subject: [PATCH 2/7] In-game and UI implementation --- .../generate/help/progression/ammo_size.html | 10 ++++-- .../templates/generate/item_progression.html | 20 ++++++++++- .../templates/generate/scripts.html | 25 ++++++++++++++ rust/maprando/src/patch.rs | 22 +++++++++++-- rust/maprando/src/randomize.rs | 33 ++++++++++++------- 5 files changed, 94 insertions(+), 16 deletions(-) diff --git a/rust/maprando-web/templates/generate/help/progression/ammo_size.html b/rust/maprando-web/templates/generate/help/progression/ammo_size.html index 4c826a5e5..8f370f930 100644 --- a/rust/maprando-web/templates/generate/help/progression/ammo_size.html +++ b/rust/maprando-web/templates/generate/help/progression/ammo_size.html @@ -7,8 +7,14 @@

Ammo Size Settings

@@ -252,6 +252,24 @@

value="0" onchange="itemPoolChanged()">

+ +
+ + +
+ +
+
+ +
+ + +
+ +
+
diff --git a/rust/maprando-web/templates/generate/scripts.html b/rust/maprando-web/templates/generate/scripts.html index b3514ceb8..e0276b4ee 100644 --- a/rust/maprando-web/templates/generate/scripts.html +++ b/rust/maprando-web/templates/generate/scripts.html @@ -291,6 +291,8 @@ "missile_size": tryParseInt(formData.get("ammo_size_Missile")), "super_size": tryParseInt(formData.get("ammo_size_Super")), "powerbomb_size": tryParseInt(formData.get("ammo_size_PowerBomb")), + "etank_multiplier": tryParseInt(formData.get("multiplier_ETank")), + "reserve_multiplier": tryParseInt(formData.get("multiplier_ReserveTank")), }, "quality_of_life_settings": { "preset": formData.get("quality_of_life_preset"), @@ -1220,6 +1222,8 @@ document.getElementById("ammoSizeMissile").value = preset.missile_size; document.getElementById("ammoSizeSuper").value = preset.super_size; document.getElementById("ammoSizePowerBomb").value = preset.powerbomb_size; + document.getElementById("multiplierETank").value = preset.etank_multiplier; + document.getElementById("multiplierReserveTank").value = preset.reserve_multiplier; processItemPoolPreset(); applyRadioValue("startingItemsPreset", preset.starting_items_preset); @@ -1342,6 +1346,8 @@ document.getElementById("ammoSizeMissile").value = "5"; document.getElementById("ammoSizeSuper").value = "5"; document.getElementById("ammoSizePowerBomb").value = "5"; + document.getElementById("multiplierETank").value = "1"; + document.getElementById("multiplierReserveTank").value = "1"; } if (document.getElementById("itemPoolPresetReduced").checked) { document.getElementById("stopItemPlacementEarlyYes").checked = true; @@ -1356,6 +1362,8 @@ document.getElementById("ammoSizeMissile").value = "5"; document.getElementById("ammoSizeSuper").value = "5"; document.getElementById("ammoSizePowerBomb").value = "5"; + document.getElementById("multiplierETank").value = "1"; + document.getElementById("multiplierReserveTank").value = "1"; } } function validateAmmoSize() { @@ -1374,6 +1382,23 @@ if (parseInt(document.getElementById("ammoSizePowerBomb").value) < 1) { document.getElementById("ammoSizePowerBomb").value = "5"; } + if (parseInt(document.getElementById("ammoSizePowerBomb").value) > 99) { + document.getElementById("ammoSizePowerBomb").value = "99"; + } + + if (parseInt(document.getElementById("multiplierETank").value) < 1) { + document.getElementById("multiplierETank").value = "1"; + } + if (parseInt(document.getElementById("multiplierETank").value) > 14) { + document.getElementById("multiplierETank").value = "14"; + } + + if (parseInt(document.getElementById("multiplierReserveTank").value) < 1) { + document.getElementById("multiplierReserveTank").value = "1"; + } + if (parseInt(document.getElementById("multiplierReserveTank").value) > 4) { + document.getElementById("multiplierReserveTank").value = "4"; + } } function validateItemPool() { diff --git a/rust/maprando/src/patch.rs b/rust/maprando/src/patch.rs index f35bf1fcb..ff22c5e83 100644 --- a/rust/maprando/src/patch.rs +++ b/rust/maprando/src/patch.rs @@ -816,6 +816,24 @@ impl Patcher<'_> { self.rom.write_u16(snes2pc(0x84E9E7), p_sz)?; // PLM EF8B (PB, Shot Block) self.rom.write_u16(snes2pc(0x8BE71F), p_sz)?; // Credits, Power Bomb Item % Divisor } + + if self.settings.item_progression_settings.etank_multiplier > 1 { + let e_sz = self.settings.item_progression_settings.etank_multiplier as isize * 100; + + self.rom.write_u16(snes2pc(0x84E0B8), e_sz)?; // PLM EED7 (E-Tank) + self.rom.write_u16(snes2pc(0x84E474), e_sz)?; // PLM EF2B (E-Tank, Chozo) + self.rom.write_u16(snes2pc(0x84E93F), e_sz)?; // PLM EF7F (E-Tank, Shot Block) + self.rom.write_u16(snes2pc(0x88E717), e_sz)?; // Credits, E-Tank Item % Divisor + } + + if self.settings.item_progression_settings.reserve_multiplier > 1 { + let r_sz = self.settings.item_progression_settings.reserve_multiplier as isize * 100; + + self.rom.write_u16(snes2pc(0x84E444), r_sz as isize)?; // PLM EF27 (Reserve Tank) + self.rom.write_u16(snes2pc(0x84E909), r_sz as isize)?; // PLM EF7B (Reserve Tank, Chozo) + self.rom.write_u16(snes2pc(0x84EE43), r_sz as isize)?; // PLM EFCF (Reserve Tank, Shot Block) + self.rom.write_u16(snes2pc(0x88E719), r_sz as isize)?; // Credits, Reserve Tank Item % Divisor + } Ok(()) } @@ -2311,9 +2329,9 @@ impl Patcher<'_> { starting_missiles += (x.count as isize) * (self.settings.item_progression_settings.missile_size as isize); } else if x.item == Item::ETank { - starting_energy += (x.count as isize) * 100; + starting_energy += (x.count as isize) * 100 * (self.settings.item_progression_settings.etank_multiplier as isize); } else if x.item == Item::ReserveTank { - starting_reserves += (x.count as isize) * 100; + starting_reserves += (x.count as isize) * 100 * (self.settings.item_progression_settings.reserve_multiplier as isize); } else if x.item == Item::Super { starting_supers += (x.count as isize) * (self.settings.item_progression_settings.super_size as isize); diff --git a/rust/maprando/src/randomize.rs b/rust/maprando/src/randomize.rs index 8ded06d4d..b1a9ce02d 100644 --- a/rust/maprando/src/randomize.rs +++ b/rust/maprando/src/randomize.rs @@ -3702,24 +3702,35 @@ impl<'r> Randomizer<'r> { // Although ETanks and Reserve Tanks are fixed to 100 energy, the following // code is written in a generic way that could support changing this in the future. let mut minimal_energy = get_minimal_energy(&difficulty_tiers[0]); + + let mut starting_etank_energy = 0 as Capacity; + let mut starting_reserve_energy = 0 as Capacity; + for x in &starting_items { initial_items_remaining[x.item as usize] -= usize::min(x.count, initial_items_remaining[x.item as usize]); - if x.item == Item::ETank || x.item == Item::ReserveTank { - minimal_energy = minimal_energy.saturating_sub(100 * x.count as Capacity); + if x.item == Item::ETank { + starting_etank_energy += (100 * x.count * settings.item_progression_settings.etank_multiplier as usize) as Capacity; + } + else if x.item == Item::ReserveTank { + starting_reserve_energy += (100 * x.count * settings.item_progression_settings.reserve_multiplier as usize) as Capacity; } } + minimal_energy = minimal_energy.saturating_sub(std::cmp::min(1400, starting_etank_energy)); + minimal_energy = minimal_energy.saturating_sub(std::cmp::min(400, starting_reserve_energy)); + + let mut initial_etank_energy = std::cmp::min(1400, (initial_items_remaining[Item::ETank as usize] * settings.item_progression_settings.etank_multiplier as usize * 100) as Capacity); + let mut initial_reserve_energy = std::cmp::min(400, (initial_items_remaining[Item::ReserveTank as usize] * settings.item_progression_settings.reserve_multiplier as usize * 100) as Capacity); - while ((initial_items_remaining[Item::ETank as usize] * 100) as Capacity - + (initial_items_remaining[Item::ReserveTank as usize] * 100) as Capacity) - < minimal_energy + while initial_etank_energy + initial_reserve_energy < minimal_energy { - if (initial_items_remaining[Item::ETank as usize] < 14) - && ((initial_items_remaining[Item::ETank as usize] + 1) * 100 <= 1400) + if initial_etank_energy < 1400 { initial_items_remaining[Item::ETank as usize] += 1; - } else if initial_items_remaining[Item::ReserveTank as usize] < 4 { + initial_etank_energy = std::cmp::min(1400, initial_etank_energy + 100 * settings.item_progression_settings.etank_multiplier as Capacity); + } else if initial_reserve_energy < 400 { initial_items_remaining[Item::ReserveTank as usize] += 1; + initial_reserve_energy = std::cmp::min(400, initial_reserve_energy + 100 * settings.item_progression_settings.reserve_multiplier as Capacity); } else { panic!("Can't ensure enough energy!"); } @@ -3738,9 +3749,9 @@ impl<'r> Randomizer<'r> { .sum::() .saturating_sub(available_items) { - let energy_left_to_place = ((initial_items_remaining[Item::ETank as usize] * 100) - as Capacity) - + ((initial_items_remaining[Item::ReserveTank as usize] * 100) as Capacity); + let etank_energy_left_to_place = (initial_items_remaining[Item::ETank as usize] * 100 * settings.item_progression_settings.etank_multiplier as usize) as Capacity; + let reserve_energy_left_to_place = (initial_items_remaining[Item::ReserveTank as usize] * 100 * settings.item_progression_settings.reserve_multiplier as usize) as Capacity; + let energy_left_to_place = etank_energy_left_to_place + reserve_energy_left_to_place; let mut removal_options = ammo_shortage_weight.clone(); if energy_left_to_place > minimal_energy { removal_options.extend(tank_shortage_weight.clone()); From 7b7bffac23d7b1846cabb8f9aeceabf062575a2f Mon Sep 17 00:00:00 2001 From: aquanight Date: Fri, 7 Aug 2026 19:00:32 -0600 Subject: [PATCH 3/7] Fix tests/formatting --- rust/maprando-logic/src/lib.rs | 12 ++++-- rust/maprando/src/patch.rs | 24 ++++++----- rust/maprando/src/randomize.rs | 60 ++++++++++++++++++-------- rust/maprando/tests/logic_scenarios.rs | 2 + 4 files changed, 68 insertions(+), 30 deletions(-) diff --git a/rust/maprando-logic/src/lib.rs b/rust/maprando-logic/src/lib.rs index 4c60392e7..312dcc969 100644 --- a/rust/maprando-logic/src/lib.rs +++ b/rust/maprando-logic/src/lib.rs @@ -85,7 +85,10 @@ impl GlobalState { self.inventory.max_power_bombs = new_max_power_bombs; } Item::ETank => { - self.inventory.max_energy = std::cmp::min(1499, self.inventory.max_energy + (100 * etank_multiplier as Capacity)); + self.inventory.max_energy = std::cmp::min( + 1499, + self.inventory.max_energy + (100 * etank_multiplier as Capacity), + ); if !tech[game_data.manage_reserves_tech_idx] { self.inventory.max_reserves = Capacity::min(self.inventory.max_reserves, self.inventory.max_energy); @@ -93,8 +96,11 @@ impl GlobalState { } Item::ReserveTank => { self.inventory.collectible_reserve_tanks += 1; - self.inventory.max_reserves = - std::cmp::min(400, self.inventory.collectible_reserve_tanks * (100 * reserve_multiplier as Capacity)); + self.inventory.max_reserves = std::cmp::min( + 400, + self.inventory.collectible_reserve_tanks + * (100 * reserve_multiplier as Capacity), + ); if !tech[game_data.manage_reserves_tech_idx] { self.inventory.max_reserves = Capacity::min(self.inventory.max_reserves, self.inventory.max_energy); diff --git a/rust/maprando/src/patch.rs b/rust/maprando/src/patch.rs index ff22c5e83..cb46445f1 100644 --- a/rust/maprando/src/patch.rs +++ b/rust/maprando/src/patch.rs @@ -816,23 +816,23 @@ impl Patcher<'_> { self.rom.write_u16(snes2pc(0x84E9E7), p_sz)?; // PLM EF8B (PB, Shot Block) self.rom.write_u16(snes2pc(0x8BE71F), p_sz)?; // Credits, Power Bomb Item % Divisor } - + if self.settings.item_progression_settings.etank_multiplier > 1 { let e_sz = self.settings.item_progression_settings.etank_multiplier as isize * 100; - + self.rom.write_u16(snes2pc(0x84E0B8), e_sz)?; // PLM EED7 (E-Tank) self.rom.write_u16(snes2pc(0x84E474), e_sz)?; // PLM EF2B (E-Tank, Chozo) self.rom.write_u16(snes2pc(0x84E93F), e_sz)?; // PLM EF7F (E-Tank, Shot Block) self.rom.write_u16(snes2pc(0x88E717), e_sz)?; // Credits, E-Tank Item % Divisor } - + if self.settings.item_progression_settings.reserve_multiplier > 1 { let r_sz = self.settings.item_progression_settings.reserve_multiplier as isize * 100; - - self.rom.write_u16(snes2pc(0x84E444), r_sz as isize)?; // PLM EF27 (Reserve Tank) - self.rom.write_u16(snes2pc(0x84E909), r_sz as isize)?; // PLM EF7B (Reserve Tank, Chozo) - self.rom.write_u16(snes2pc(0x84EE43), r_sz as isize)?; // PLM EFCF (Reserve Tank, Shot Block) - self.rom.write_u16(snes2pc(0x88E719), r_sz as isize)?; // Credits, Reserve Tank Item % Divisor + + self.rom.write_u16(snes2pc(0x84E444), r_sz)?; // PLM EF27 (Reserve Tank) + self.rom.write_u16(snes2pc(0x84E909), r_sz)?; // PLM EF7B (Reserve Tank, Chozo) + self.rom.write_u16(snes2pc(0x84EE43), r_sz)?; // PLM EFCF (Reserve Tank, Shot Block) + self.rom.write_u16(snes2pc(0x88E719), r_sz)?; // Credits, Reserve Tank Item % Divisor } Ok(()) @@ -2329,9 +2329,13 @@ impl Patcher<'_> { starting_missiles += (x.count as isize) * (self.settings.item_progression_settings.missile_size as isize); } else if x.item == Item::ETank { - starting_energy += (x.count as isize) * 100 * (self.settings.item_progression_settings.etank_multiplier as isize); + starting_energy += (x.count as isize) + * 100 + * (self.settings.item_progression_settings.etank_multiplier as isize); } else if x.item == Item::ReserveTank { - starting_reserves += (x.count as isize) * 100 * (self.settings.item_progression_settings.reserve_multiplier as isize); + starting_reserves += (x.count as isize) + * 100 + * (self.settings.item_progression_settings.reserve_multiplier as isize); } else if x.item == Item::Super { starting_supers += (x.count as isize) * (self.settings.item_progression_settings.super_size as isize); diff --git a/rust/maprando/src/randomize.rs b/rust/maprando/src/randomize.rs index b1a9ce02d..09a74ef8e 100644 --- a/rust/maprando/src/randomize.rs +++ b/rust/maprando/src/randomize.rs @@ -3702,35 +3702,55 @@ impl<'r> Randomizer<'r> { // Although ETanks and Reserve Tanks are fixed to 100 energy, the following // code is written in a generic way that could support changing this in the future. let mut minimal_energy = get_minimal_energy(&difficulty_tiers[0]); - + let mut starting_etank_energy = 0 as Capacity; let mut starting_reserve_energy = 0 as Capacity; - + for x in &starting_items { initial_items_remaining[x.item as usize] -= usize::min(x.count, initial_items_remaining[x.item as usize]); if x.item == Item::ETank { - starting_etank_energy += (100 * x.count * settings.item_progression_settings.etank_multiplier as usize) as Capacity; - } - else if x.item == Item::ReserveTank { - starting_reserve_energy += (100 * x.count * settings.item_progression_settings.reserve_multiplier as usize) as Capacity; + starting_etank_energy += + (100 * x.count * settings.item_progression_settings.etank_multiplier as usize) + as Capacity; + } else if x.item == Item::ReserveTank { + starting_reserve_energy += (100 + * x.count + * settings.item_progression_settings.reserve_multiplier as usize) + as Capacity; } } minimal_energy = minimal_energy.saturating_sub(std::cmp::min(1400, starting_etank_energy)); minimal_energy = minimal_energy.saturating_sub(std::cmp::min(400, starting_reserve_energy)); - - let mut initial_etank_energy = std::cmp::min(1400, (initial_items_remaining[Item::ETank as usize] * settings.item_progression_settings.etank_multiplier as usize * 100) as Capacity); - let mut initial_reserve_energy = std::cmp::min(400, (initial_items_remaining[Item::ReserveTank as usize] * settings.item_progression_settings.reserve_multiplier as usize * 100) as Capacity); - while initial_etank_energy + initial_reserve_energy < minimal_energy - { - if initial_etank_energy < 1400 - { + let mut initial_etank_energy = std::cmp::min( + 1400, + (initial_items_remaining[Item::ETank as usize] + * settings.item_progression_settings.etank_multiplier as usize + * 100) as Capacity, + ); + let mut initial_reserve_energy = std::cmp::min( + 400, + (initial_items_remaining[Item::ReserveTank as usize] + * settings.item_progression_settings.reserve_multiplier as usize + * 100) as Capacity, + ); + + while initial_etank_energy + initial_reserve_energy < minimal_energy { + if initial_etank_energy < 1400 { initial_items_remaining[Item::ETank as usize] += 1; - initial_etank_energy = std::cmp::min(1400, initial_etank_energy + 100 * settings.item_progression_settings.etank_multiplier as Capacity); + initial_etank_energy = std::cmp::min( + 1400, + initial_etank_energy + + 100 * settings.item_progression_settings.etank_multiplier as Capacity, + ); } else if initial_reserve_energy < 400 { initial_items_remaining[Item::ReserveTank as usize] += 1; - initial_reserve_energy = std::cmp::min(400, initial_reserve_energy + 100 * settings.item_progression_settings.reserve_multiplier as Capacity); + initial_reserve_energy = std::cmp::min( + 400, + initial_reserve_energy + + 100 * settings.item_progression_settings.reserve_multiplier as Capacity, + ); } else { panic!("Can't ensure enough energy!"); } @@ -3749,8 +3769,14 @@ impl<'r> Randomizer<'r> { .sum::() .saturating_sub(available_items) { - let etank_energy_left_to_place = (initial_items_remaining[Item::ETank as usize] * 100 * settings.item_progression_settings.etank_multiplier as usize) as Capacity; - let reserve_energy_left_to_place = (initial_items_remaining[Item::ReserveTank as usize] * 100 * settings.item_progression_settings.reserve_multiplier as usize) as Capacity; + let etank_energy_left_to_place = (initial_items_remaining[Item::ETank as usize] + * 100 + * settings.item_progression_settings.etank_multiplier as usize) + as Capacity; + let reserve_energy_left_to_place = (initial_items_remaining[Item::ReserveTank as usize] + * 100 + * settings.item_progression_settings.reserve_multiplier as usize) + as Capacity; let energy_left_to_place = etank_energy_left_to_place + reserve_energy_left_to_place; let mut removal_options = ammo_shortage_weight.clone(); if energy_left_to_place > minimal_energy { diff --git a/rust/maprando/tests/logic_scenarios.rs b/rust/maprando/tests/logic_scenarios.rs index 067788b8a..30b3862e8 100644 --- a/rust/maprando/tests/logic_scenarios.rs +++ b/rust/maprando/tests/logic_scenarios.rs @@ -203,6 +203,8 @@ fn get_settings(scenario: &Scenario) -> Result { missile_size: 5, super_size: 5, powerbomb_size: 5, + etank_multiplier: 1, + reserve_multiplier: 1, random_tank: true, spazer_before_plasma: true, item_pool_preset: None, From 862320479ea8e02ca9142faa3b69eeeb0cd2dcb4 Mon Sep 17 00:00:00 2001 From: aquanight Date: Fri, 7 Aug 2026 19:11:57 -0600 Subject: [PATCH 4/7] Add to seed details --- rust/maprando-web/src/randomize_helpers.rs | 4 ++++ .../maprando-web/templates/seed/item_progression_details.html | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/rust/maprando-web/src/randomize_helpers.rs b/rust/maprando-web/src/randomize_helpers.rs index 91ee9c39a..2e6a7cdc5 100644 --- a/rust/maprando-web/src/randomize_helpers.rs +++ b/rust/maprando-web/src/randomize_helpers.rs @@ -43,6 +43,8 @@ pub struct SeedHeaderTemplate<'a> { missile_size: i32, super_size: i32, powerbomb_size: i32, + etank_multiplier: i32, + reserve_multiplier: i32, difficulty: &'a DifficultyConfig, quality_of_life_preset: String, supers_double: bool, @@ -442,6 +444,8 @@ pub fn render_seed( missile_size: seed_data.settings.item_progression_settings.missile_size as i32, super_size: seed_data.settings.item_progression_settings.super_size as i32, powerbomb_size: seed_data.settings.item_progression_settings.powerbomb_size as i32, + etank_multiplier: seed_data.settings.item_progression_settings.etank_multiplier as i32, + reserve_multiplier: seed_data.settings.item_progression_settings.reserve_multiplier as i32, filler_items: seed_data .settings .item_progression_settings diff --git a/rust/maprando-web/templates/seed/item_progression_details.html b/rust/maprando-web/templates/seed/item_progression_details.html index 4c81056af..f89140ca2 100644 --- a/rust/maprando-web/templates/seed/item_progression_details.html +++ b/rust/maprando-web/templates/seed/item_progression_details.html @@ -27,9 +27,9 @@ {% endif %}
-
Ammo Size:
+
Resource Customization:
- Missile {{+ missile_size }}, Super {{+ super_size }}, PowerBomb {{+ powerbomb_size }} + Missile {{+ missile_size }}, Super {{+ super_size }}, PowerBomb {{+ powerbomb_size }}, Energy {{+ etank_multiplier }}, Reserve {{+ reserve_multiplier }}
From 2fd2fff86f2e1d65dc4fd72ab6cc30f76d57061f Mon Sep 17 00:00:00 2001 From: aquanight Date: Fri, 7 Aug 2026 19:14:48 -0600 Subject: [PATCH 5/7] Formatting again --- rust/maprando-web/src/randomize_helpers.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/rust/maprando-web/src/randomize_helpers.rs b/rust/maprando-web/src/randomize_helpers.rs index 2e6a7cdc5..7af7b9168 100644 --- a/rust/maprando-web/src/randomize_helpers.rs +++ b/rust/maprando-web/src/randomize_helpers.rs @@ -444,8 +444,14 @@ pub fn render_seed( missile_size: seed_data.settings.item_progression_settings.missile_size as i32, super_size: seed_data.settings.item_progression_settings.super_size as i32, powerbomb_size: seed_data.settings.item_progression_settings.powerbomb_size as i32, - etank_multiplier: seed_data.settings.item_progression_settings.etank_multiplier as i32, - reserve_multiplier: seed_data.settings.item_progression_settings.reserve_multiplier as i32, + etank_multiplier: seed_data + .settings + .item_progression_settings + .etank_multiplier as i32, + reserve_multiplier: seed_data + .settings + .item_progression_settings + .reserve_multiplier as i32, filler_items: seed_data .settings .item_progression_settings From a72767455139431ed5e521a5876aff4e58cbe716 Mon Sep 17 00:00:00 2001 From: Brent Kerby Date: Fri, 14 Aug 2026 07:34:40 -0600 Subject: [PATCH 6/7] Rename ammoSize/multiplier to pickupSize --- .../Community Race Season 5.json | 6 +- rust/data/presets/full-settings/Default.json | 6 +- .../full-settings/Mentor Tournament.json | 6 +- .../Summer Series Expert Challenge.json | 6 +- .../presets/item-progression/Challenge.json | 6 +- .../presets/item-progression/Desolate.json | 6 +- .../data/presets/item-progression/Normal.json | 6 +- .../presets/item-progression/Technical.json | 6 +- .../data/presets/item-progression/Tricky.json | 6 +- rust/maprando-logic/src/lib.rs | 9 +- rust/maprando-web/src/randomize_helpers.rs | 14 +--- .../generate/help/progression/ammo_size.html | 24 ------ .../help/progression/pickup_size.html | 18 ++++ .../templates/generate/item_progression.html | 26 +++--- .../templates/generate/scripts.html | 84 +++++++++---------- rust/maprando-web/templates/releases.html | 2 +- .../seed/item_progression_details.html | 6 +- rust/maprando/src/patch.rs | 12 +-- rust/maprando/src/randomize.rs | 29 ++++--- rust/maprando/src/settings.rs | 12 +-- rust/maprando/tests/logic_scenarios.rs | 4 +- 21 files changed, 140 insertions(+), 154 deletions(-) delete mode 100644 rust/maprando-web/templates/generate/help/progression/ammo_size.html create mode 100644 rust/maprando-web/templates/generate/help/progression/pickup_size.html diff --git a/rust/data/presets/full-settings/Community Race Season 5.json b/rust/data/presets/full-settings/Community Race Season 5.json index 2a4a26277..d7f5cf658 100644 --- a/rust/data/presets/full-settings/Community Race Season 5.json +++ b/rust/data/presets/full-settings/Community Race Season 5.json @@ -4284,8 +4284,8 @@ "missile_size": 5, "super_size": 5, "powerbomb_size": 5, - "etank_multiplier": 1, - "reserve_multiplier": 1, + "etank_size": 1, + "reserve_size": 1, "item_pool": [ { "item": "Missile", @@ -4884,4 +4884,4 @@ "disable_bluesuit": false, "enable_major_glitches": false } -} \ No newline at end of file +} diff --git a/rust/data/presets/full-settings/Default.json b/rust/data/presets/full-settings/Default.json index 681125a92..cc8a4fc3a 100644 --- a/rust/data/presets/full-settings/Default.json +++ b/rust/data/presets/full-settings/Default.json @@ -4284,8 +4284,8 @@ "missile_size": 5, "super_size": 5, "powerbomb_size": 5, - "etank_multiplier": 1, - "reserve_multiplier": 1, + "etank_size": 1, + "reserve_size": 1, "item_pool": [ { "item": "Missile", @@ -4796,4 +4796,4 @@ "savestate": "No", "random_seed": null } -} \ No newline at end of file +} diff --git a/rust/data/presets/full-settings/Mentor Tournament.json b/rust/data/presets/full-settings/Mentor Tournament.json index dfce2e46b..082b08d5e 100644 --- a/rust/data/presets/full-settings/Mentor Tournament.json +++ b/rust/data/presets/full-settings/Mentor Tournament.json @@ -4284,8 +4284,8 @@ "missile_size": 5, "super_size": 5, "powerbomb_size": 5, - "etank_multiplier": 1, - "reserve_multiplier": 1, + "etank_size": 1, + "reserve_size": 1, "item_pool": [ { "item": "Missile", @@ -4884,4 +4884,4 @@ "disable_bluesuit": false, "enable_major_glitches": false } -} \ No newline at end of file +} diff --git a/rust/data/presets/full-settings/Summer Series Expert Challenge.json b/rust/data/presets/full-settings/Summer Series Expert Challenge.json index 5e540bfbc..67efad88c 100644 --- a/rust/data/presets/full-settings/Summer Series Expert Challenge.json +++ b/rust/data/presets/full-settings/Summer Series Expert Challenge.json @@ -4284,8 +4284,8 @@ "missile_size": 5, "super_size": 5, "powerbomb_size": 5, - "etank_multiplier": 1, - "reserve_multiplier": 1, + "etank_size": 1, + "reserve_size": 1, "item_pool": [ { "item": "Missile", @@ -4796,4 +4796,4 @@ "disable_bluesuit": false, "enable_major_glitches": false } -} \ No newline at end of file +} diff --git a/rust/data/presets/item-progression/Challenge.json b/rust/data/presets/item-progression/Challenge.json index 2f44ac6b0..f102546c6 100644 --- a/rust/data/presets/item-progression/Challenge.json +++ b/rust/data/presets/item-progression/Challenge.json @@ -11,8 +11,8 @@ "missile_size": 5, "super_size": 5, "powerbomb_size": 5, - "etank_multiplier": 1, - "reserve_multiplier": 1, + "etank_size": 1, + "reserve_size": 1, "item_pool": [ { "item": "Missile", @@ -310,4 +310,4 @@ "priority": "No" } ] -} \ No newline at end of file +} diff --git a/rust/data/presets/item-progression/Desolate.json b/rust/data/presets/item-progression/Desolate.json index 270308cdf..00cb2adad 100644 --- a/rust/data/presets/item-progression/Desolate.json +++ b/rust/data/presets/item-progression/Desolate.json @@ -11,8 +11,8 @@ "missile_size": 5, "super_size": 5, "powerbomb_size": 5, - "etank_multiplier": 1, - "reserve_multiplier": 1, + "etank_size": 1, + "reserve_size": 1, "item_pool": [ { "item": "Missile", @@ -241,4 +241,4 @@ {"item": "Varia", "priority": "No"}, {"item": "Gravity", "priority": "No"} ] -} \ No newline at end of file +} diff --git a/rust/data/presets/item-progression/Normal.json b/rust/data/presets/item-progression/Normal.json index 69138dd63..1a694d837 100644 --- a/rust/data/presets/item-progression/Normal.json +++ b/rust/data/presets/item-progression/Normal.json @@ -11,8 +11,8 @@ "missile_size": 5, "super_size": 5, "powerbomb_size": 5, - "etank_multiplier": 1, - "reserve_multiplier": 1, + "etank_size": 1, + "reserve_size": 1, "item_pool": [ { "item": "Missile", @@ -309,4 +309,4 @@ "priority": "No" } ] -} \ No newline at end of file +} diff --git a/rust/data/presets/item-progression/Technical.json b/rust/data/presets/item-progression/Technical.json index b9e0035f2..b02cc86e6 100644 --- a/rust/data/presets/item-progression/Technical.json +++ b/rust/data/presets/item-progression/Technical.json @@ -11,8 +11,8 @@ "missile_size": 5, "super_size": 5, "powerbomb_size": 5, - "etank_multiplier": 1, - "reserve_multiplier": 1, + "etank_size": 1, + "reserve_size": 1, "item_pool": [ { "item": "Missile", @@ -310,4 +310,4 @@ "priority": "No" } ] -} \ No newline at end of file +} diff --git a/rust/data/presets/item-progression/Tricky.json b/rust/data/presets/item-progression/Tricky.json index c40b3f219..d952ffa11 100644 --- a/rust/data/presets/item-progression/Tricky.json +++ b/rust/data/presets/item-progression/Tricky.json @@ -11,8 +11,8 @@ "missile_size": 5, "super_size": 5, "powerbomb_size": 5, - "etank_multiplier": 1, - "reserve_multiplier": 1, + "etank_size": 1, + "reserve_size": 1, "item_pool": [ { "item": "Missile", @@ -310,4 +310,4 @@ "priority": "No" } ] -} \ No newline at end of file +} diff --git a/rust/maprando-logic/src/lib.rs b/rust/maprando-logic/src/lib.rs index 312dcc969..0f020d4a4 100644 --- a/rust/maprando-logic/src/lib.rs +++ b/rust/maprando-logic/src/lib.rs @@ -48,8 +48,8 @@ impl GlobalState { missile_size: u16, super_size: u16, powerbomb_size: u16, - etank_multiplier: u8, - reserve_multiplier: u8, + etank_size: u8, + reserve_size: u8, tech: &[bool], ) { self.inventory.items[item as usize] = true; @@ -87,7 +87,7 @@ impl GlobalState { Item::ETank => { self.inventory.max_energy = std::cmp::min( 1499, - self.inventory.max_energy + (100 * etank_multiplier as Capacity), + self.inventory.max_energy + (100 * etank_size as Capacity), ); if !tech[game_data.manage_reserves_tech_idx] { self.inventory.max_reserves = @@ -98,8 +98,7 @@ impl GlobalState { self.inventory.collectible_reserve_tanks += 1; self.inventory.max_reserves = std::cmp::min( 400, - self.inventory.collectible_reserve_tanks - * (100 * reserve_multiplier as Capacity), + self.inventory.collectible_reserve_tanks * (100 * reserve_size as Capacity), ); if !tech[game_data.manage_reserves_tech_idx] { self.inventory.max_reserves = diff --git a/rust/maprando-web/src/randomize_helpers.rs b/rust/maprando-web/src/randomize_helpers.rs index 7af7b9168..c240adced 100644 --- a/rust/maprando-web/src/randomize_helpers.rs +++ b/rust/maprando-web/src/randomize_helpers.rs @@ -43,8 +43,8 @@ pub struct SeedHeaderTemplate<'a> { missile_size: i32, super_size: i32, powerbomb_size: i32, - etank_multiplier: i32, - reserve_multiplier: i32, + etank_size: i32, + reserve_size: i32, difficulty: &'a DifficultyConfig, quality_of_life_preset: String, supers_double: bool, @@ -444,14 +444,8 @@ pub fn render_seed( missile_size: seed_data.settings.item_progression_settings.missile_size as i32, super_size: seed_data.settings.item_progression_settings.super_size as i32, powerbomb_size: seed_data.settings.item_progression_settings.powerbomb_size as i32, - etank_multiplier: seed_data - .settings - .item_progression_settings - .etank_multiplier as i32, - reserve_multiplier: seed_data - .settings - .item_progression_settings - .reserve_multiplier as i32, + etank_size: seed_data.settings.item_progression_settings.etank_size as i32, + reserve_size: seed_data.settings.item_progression_settings.reserve_size as i32, filler_items: seed_data .settings .item_progression_settings diff --git a/rust/maprando-web/templates/generate/help/progression/ammo_size.html b/rust/maprando-web/templates/generate/help/progression/ammo_size.html deleted file mode 100644 index 8f370f930..000000000 --- a/rust/maprando-web/templates/generate/help/progression/ammo_size.html +++ /dev/null @@ -1,24 +0,0 @@ - \ No newline at end of file diff --git a/rust/maprando-web/templates/generate/help/progression/pickup_size.html b/rust/maprando-web/templates/generate/help/progression/pickup_size.html new file mode 100644 index 000000000..c77a69957 --- /dev/null +++ b/rust/maprando-web/templates/generate/help/progression/pickup_size.html @@ -0,0 +1,18 @@ + diff --git a/rust/maprando-web/templates/generate/item_progression.html b/rust/maprando-web/templates/generate/item_progression.html index 09688d8ea..775b1b5a9 100644 --- a/rust/maprando-web/templates/generate/item_progression.html +++ b/rust/maprando-web/templates/generate/item_progression.html @@ -220,53 +220,53 @@

- - +
- +
-
- +
-
- +
-
- +
-
- +
-
@@ -536,7 +536,7 @@

{% include "help/progression/random_tank.html" %} {% include "help/progression/spazer_before_plasma.html" %} {% include "help/progression/ammo_collect_fraction.html" %} -{% include "help/progression/ammo_size.html" %} +{% include "help/progression/pickup_size.html" %} {% include "help/progression/item_pool.html" %} {% include "help/progression/stop_item_placement_early.html" %} {% include "help/progression/starting_items.html" %} diff --git a/rust/maprando-web/templates/generate/scripts.html b/rust/maprando-web/templates/generate/scripts.html index e0276b4ee..f62fd5902 100644 --- a/rust/maprando-web/templates/generate/scripts.html +++ b/rust/maprando-web/templates/generate/scripts.html @@ -288,11 +288,11 @@ "starting_items": buildStartingItems(), "key_item_priority": buildItemPriorities(), "filler_items": buildFillerItems(), - "missile_size": tryParseInt(formData.get("ammo_size_Missile")), - "super_size": tryParseInt(formData.get("ammo_size_Super")), - "powerbomb_size": tryParseInt(formData.get("ammo_size_PowerBomb")), - "etank_multiplier": tryParseInt(formData.get("multiplier_ETank")), - "reserve_multiplier": tryParseInt(formData.get("multiplier_ReserveTank")), + "missile_size": tryParseInt(formData.get("pickup_size_Missile")), + "super_size": tryParseInt(formData.get("pickup_size_Super")), + "powerbomb_size": tryParseInt(formData.get("pickup_size_PowerBomb")), + "etank_size": tryParseInt(formData.get("pickup_size_ETank")), + "reserve_size": tryParseInt(formData.get("pickup_size_ReserveTank")), }, "quality_of_life_settings": { "preset": formData.get("quality_of_life_preset"), @@ -1219,11 +1219,11 @@ } } - document.getElementById("ammoSizeMissile").value = preset.missile_size; - document.getElementById("ammoSizeSuper").value = preset.super_size; - document.getElementById("ammoSizePowerBomb").value = preset.powerbomb_size; - document.getElementById("multiplierETank").value = preset.etank_multiplier; - document.getElementById("multiplierReserveTank").value = preset.reserve_multiplier; + document.getElementById("pickupSizeMissile").value = preset.missile_size; + document.getElementById("pickupSizeSuper").value = preset.super_size; + document.getElementById("pickupSizePowerBomb").value = preset.powerbomb_size; + document.getElementById("pickupSizeETank").value = preset.etank_size; + document.getElementById("pickupSizeReserveTank").value = preset.reserve_size; processItemPoolPreset(); applyRadioValue("startingItemsPreset", preset.starting_items_preset); @@ -1343,11 +1343,11 @@ {% for item in item_names_single %} document.getElementById("itemPool{{+ item }}Yes").checked = true; {% endfor %} - document.getElementById("ammoSizeMissile").value = "5"; - document.getElementById("ammoSizeSuper").value = "5"; - document.getElementById("ammoSizePowerBomb").value = "5"; - document.getElementById("multiplierETank").value = "1"; - document.getElementById("multiplierReserveTank").value = "1"; + document.getElementById("pickupSizeMissile").value = "5"; + document.getElementById("pickupSizeSuper").value = "5"; + document.getElementById("pickupSizePowerBomb").value = "5"; + document.getElementById("pickupSizeETank").value = "1"; + document.getElementById("pickupSizeReserveTank").value = "1"; } if (document.getElementById("itemPoolPresetReduced").checked) { document.getElementById("stopItemPlacementEarlyYes").checked = true; @@ -1359,45 +1359,45 @@ {% for item in item_names_single %} document.getElementById("itemPool{{+ item }}Yes").checked = true; {% endfor %} - document.getElementById("ammoSizeMissile").value = "5"; - document.getElementById("ammoSizeSuper").value = "5"; - document.getElementById("ammoSizePowerBomb").value = "5"; - document.getElementById("multiplierETank").value = "1"; - document.getElementById("multiplierReserveTank").value = "1"; + document.getElementById("pickupSizeMissile").value = "5"; + document.getElementById("pickupSizeSuper").value = "5"; + document.getElementById("pickupSizePowerBomb").value = "5"; + document.getElementById("pickupSizeETank").value = "1"; + document.getElementById("pickupSizeReserveTank").value = "1"; } } -function validateAmmoSize() { - if (parseInt(document.getElementById("ammoSizeMissile").value) < 1) { - document.getElementById("ammoSizeMissile").value = "5"; +function validatePickupSize() { + if (parseInt(document.getElementById("pickupSizeMissile").value) < 1) { + document.getElementById("pickupSizeMissile").value = "5"; } - if (parseInt(document.getElementById("ammoSizeMissile").value) > 999) { - document.getElementById("ammoSizeMissile").value = "999"; + if (parseInt(document.getElementById("pickupSizeMissile").value) > 999) { + document.getElementById("pickupSizeMissile").value = "999"; } - if (parseInt(document.getElementById("ammoSizeSuper").value) < 1) { - document.getElementById("ammoSizeSuper").value = "5"; + if (parseInt(document.getElementById("pickupSizeSuper").value) < 1) { + document.getElementById("pickupSizeSuper").value = "5"; } - if (parseInt(document.getElementById("ammoSizeSuper").value) > 99) { - document.getElementById("ammoSizeSuper").value = "99"; + if (parseInt(document.getElementById("pickupSizeSuper").value) > 99) { + document.getElementById("pickupSizeSuper").value = "99"; } - if (parseInt(document.getElementById("ammoSizePowerBomb").value) < 1) { - document.getElementById("ammoSizePowerBomb").value = "5"; + if (parseInt(document.getElementById("pickupSizePowerBomb").value) < 1) { + document.getElementById("pickupSizePowerBomb").value = "5"; } - if (parseInt(document.getElementById("ammoSizePowerBomb").value) > 99) { - document.getElementById("ammoSizePowerBomb").value = "99"; + if (parseInt(document.getElementById("pickupSizePowerBomb").value) > 99) { + document.getElementById("pickupSizePowerBomb").value = "99"; } - if (parseInt(document.getElementById("multiplierETank").value) < 1) { - document.getElementById("multiplierETank").value = "1"; + if (parseInt(document.getElementById("pickupSizeETank").value) < 1) { + document.getElementById("pickupSizeETank").value = "1"; } - if (parseInt(document.getElementById("multiplierETank").value) > 14) { - document.getElementById("multiplierETank").value = "14"; + if (parseInt(document.getElementById("pickupSizeETank").value) > 14) { + document.getElementById("pickupSizeETank").value = "14"; } - if (parseInt(document.getElementById("multiplierReserveTank").value) < 1) { - document.getElementById("multiplierReserveTank").value = "1"; + if (parseInt(document.getElementById("pickupSizeReserveTank").value) < 1) { + document.getElementById("pickupSizeReserveTank").value = "1"; } - if (parseInt(document.getElementById("multiplierReserveTank").value) > 4) { - document.getElementById("multiplierReserveTank").value = "4"; + if (parseInt(document.getElementById("pickupSizeReserveTank").value) > 4) { + document.getElementById("pickupSizeReserveTank").value = "4"; } } @@ -1443,7 +1443,7 @@ document.getElementById("itemPoolPresetFull").checked = false; document.getElementById("itemPoolPresetReduced").checked = false; validateItemPool(); - validateAmmoSize(); + validatePickupSize(); itemProgressionChanged(); } diff --git a/rust/maprando-web/templates/releases.html b/rust/maprando-web/templates/releases.html index 2f952cc6a..7ff2a471b 100644 --- a/rust/maprando-web/templates/releases.html +++ b/rust/maprando-web/templates/releases.html @@ -27,7 +27,7 @@

Release History

  • The "Alternate" setting is renamed to "Vibrant".
-
  • New "Ammo size" options are added, under "Item progression / Item pool". +
  • New "Pickup size" options are added, under "Item progression / Item pool".
  • Audio-related fixes:
    • Fixed an issue that could cause heavy audio lag after a quick reload, most diff --git a/rust/maprando-web/templates/seed/item_progression_details.html b/rust/maprando-web/templates/seed/item_progression_details.html index f89140ca2..201f347e2 100644 --- a/rust/maprando-web/templates/seed/item_progression_details.html +++ b/rust/maprando-web/templates/seed/item_progression_details.html @@ -27,9 +27,9 @@
  • {% endif %}
    -
    Resource Customization:
    +
    Pickup sizes:
    - Missile {{+ missile_size }}, Super {{+ super_size }}, PowerBomb {{+ powerbomb_size }}, Energy {{+ etank_multiplier }}, Reserve {{+ reserve_multiplier }} + Missile {{+ missile_size }}, Super {{+ super_size }}, PowerBomb {{+ powerbomb_size }}, Energy {{+ etank_size }}, Reserve {{+ reserve_size }}
    @@ -78,4 +78,4 @@ {{+ early_filler_items.join(", ") }}
    -{% endif %} \ No newline at end of file +{% endif %} diff --git a/rust/maprando/src/patch.rs b/rust/maprando/src/patch.rs index cb46445f1..0a021d844 100644 --- a/rust/maprando/src/patch.rs +++ b/rust/maprando/src/patch.rs @@ -817,8 +817,8 @@ impl Patcher<'_> { self.rom.write_u16(snes2pc(0x8BE71F), p_sz)?; // Credits, Power Bomb Item % Divisor } - if self.settings.item_progression_settings.etank_multiplier > 1 { - let e_sz = self.settings.item_progression_settings.etank_multiplier as isize * 100; + if self.settings.item_progression_settings.etank_size > 1 { + let e_sz = self.settings.item_progression_settings.etank_size as isize * 100; self.rom.write_u16(snes2pc(0x84E0B8), e_sz)?; // PLM EED7 (E-Tank) self.rom.write_u16(snes2pc(0x84E474), e_sz)?; // PLM EF2B (E-Tank, Chozo) @@ -826,8 +826,8 @@ impl Patcher<'_> { self.rom.write_u16(snes2pc(0x88E717), e_sz)?; // Credits, E-Tank Item % Divisor } - if self.settings.item_progression_settings.reserve_multiplier > 1 { - let r_sz = self.settings.item_progression_settings.reserve_multiplier as isize * 100; + if self.settings.item_progression_settings.reserve_size > 1 { + let r_sz = self.settings.item_progression_settings.reserve_size as isize * 100; self.rom.write_u16(snes2pc(0x84E444), r_sz)?; // PLM EF27 (Reserve Tank) self.rom.write_u16(snes2pc(0x84E909), r_sz)?; // PLM EF7B (Reserve Tank, Chozo) @@ -2331,11 +2331,11 @@ impl Patcher<'_> { } else if x.item == Item::ETank { starting_energy += (x.count as isize) * 100 - * (self.settings.item_progression_settings.etank_multiplier as isize); + * (self.settings.item_progression_settings.etank_size as isize); } else if x.item == Item::ReserveTank { starting_reserves += (x.count as isize) * 100 - * (self.settings.item_progression_settings.reserve_multiplier as isize); + * (self.settings.item_progression_settings.reserve_size as isize); } else if x.item == Item::Super { starting_supers += (x.count as isize) * (self.settings.item_progression_settings.super_size as isize); diff --git a/rust/maprando/src/randomize.rs b/rust/maprando/src/randomize.rs index 09a74ef8e..7a4a89adb 100644 --- a/rust/maprando/src/randomize.rs +++ b/rust/maprando/src/randomize.rs @@ -3711,13 +3711,12 @@ impl<'r> Randomizer<'r> { usize::min(x.count, initial_items_remaining[x.item as usize]); if x.item == Item::ETank { starting_etank_energy += - (100 * x.count * settings.item_progression_settings.etank_multiplier as usize) + (100 * x.count * settings.item_progression_settings.etank_size as usize) as Capacity; } else if x.item == Item::ReserveTank { - starting_reserve_energy += (100 - * x.count - * settings.item_progression_settings.reserve_multiplier as usize) - as Capacity; + starting_reserve_energy += + (100 * x.count * settings.item_progression_settings.reserve_size as usize) + as Capacity; } } minimal_energy = minimal_energy.saturating_sub(std::cmp::min(1400, starting_etank_energy)); @@ -3726,13 +3725,13 @@ impl<'r> Randomizer<'r> { let mut initial_etank_energy = std::cmp::min( 1400, (initial_items_remaining[Item::ETank as usize] - * settings.item_progression_settings.etank_multiplier as usize + * settings.item_progression_settings.etank_size as usize * 100) as Capacity, ); let mut initial_reserve_energy = std::cmp::min( 400, (initial_items_remaining[Item::ReserveTank as usize] - * settings.item_progression_settings.reserve_multiplier as usize + * settings.item_progression_settings.reserve_size as usize * 100) as Capacity, ); @@ -3742,14 +3741,14 @@ impl<'r> Randomizer<'r> { initial_etank_energy = std::cmp::min( 1400, initial_etank_energy - + 100 * settings.item_progression_settings.etank_multiplier as Capacity, + + 100 * settings.item_progression_settings.etank_size as Capacity, ); } else if initial_reserve_energy < 400 { initial_items_remaining[Item::ReserveTank as usize] += 1; initial_reserve_energy = std::cmp::min( 400, initial_reserve_energy - + 100 * settings.item_progression_settings.reserve_multiplier as Capacity, + + 100 * settings.item_progression_settings.reserve_size as Capacity, ); } else { panic!("Can't ensure enough energy!"); @@ -3771,11 +3770,11 @@ impl<'r> Randomizer<'r> { { let etank_energy_left_to_place = (initial_items_remaining[Item::ETank as usize] * 100 - * settings.item_progression_settings.etank_multiplier as usize) + * settings.item_progression_settings.etank_size as usize) as Capacity; let reserve_energy_left_to_place = (initial_items_remaining[Item::ReserveTank as usize] * 100 - * settings.item_progression_settings.reserve_multiplier as usize) + * settings.item_progression_settings.reserve_size as usize) as Capacity; let energy_left_to_place = etank_energy_left_to_place + reserve_energy_left_to_place; let mut removal_options = ammo_shortage_weight.clone(); @@ -4451,8 +4450,8 @@ impl<'r> Randomizer<'r> { self.settings.item_progression_settings.missile_size, self.settings.item_progression_settings.super_size, self.settings.item_progression_settings.powerbomb_size, - self.settings.item_progression_settings.etank_multiplier, - self.settings.item_progression_settings.reserve_multiplier, + self.settings.item_progression_settings.etank_size, + self.settings.item_progression_settings.reserve_size, &self.difficulty_tiers[0].tech, ); } @@ -5350,8 +5349,8 @@ impl<'r> Randomizer<'r> { self.settings.item_progression_settings.missile_size, self.settings.item_progression_settings.super_size, self.settings.item_progression_settings.powerbomb_size, - self.settings.item_progression_settings.etank_multiplier, - self.settings.item_progression_settings.reserve_multiplier, + self.settings.item_progression_settings.etank_size, + self.settings.item_progression_settings.reserve_size, &self.difficulty_tiers[0].tech, ); } diff --git a/rust/maprando/src/settings.rs b/rust/maprando/src/settings.rs index 728397322..c9a58f9b6 100644 --- a/rust/maprando/src/settings.rs +++ b/rust/maprando/src/settings.rs @@ -104,8 +104,8 @@ pub struct ItemProgressionSettings { pub missile_size: u16, pub super_size: u16, pub powerbomb_size: u16, - pub etank_multiplier: u8, - pub reserve_multiplier: u8, + pub etank_size: u8, + pub reserve_size: u8, } #[repr(u8)] @@ -1127,11 +1127,11 @@ fn upgrade_item_progression_settings(settings: &mut serde_json::Value) -> Result if !item_progression_settings.contains_key("powerbomb_size") { item_progression_settings.insert("powerbomb_size".to_string(), (5).into()); } - if !item_progression_settings.contains_key("etank_multiplier") { - item_progression_settings.insert("etank_multiplier".to_string(), (1).into()); + if !item_progression_settings.contains_key("etank_size") { + item_progression_settings.insert("etank_size".to_string(), (1).into()); } - if !item_progression_settings.contains_key("reserve_multiplier") { - item_progression_settings.insert("reserve_multiplier".to_string(), (1).into()); + if !item_progression_settings.contains_key("reserve_size") { + item_progression_settings.insert("reserve_size".to_string(), (1).into()); } Ok(()) } diff --git a/rust/maprando/tests/logic_scenarios.rs b/rust/maprando/tests/logic_scenarios.rs index 30b3862e8..c7fff7e17 100644 --- a/rust/maprando/tests/logic_scenarios.rs +++ b/rust/maprando/tests/logic_scenarios.rs @@ -203,8 +203,8 @@ fn get_settings(scenario: &Scenario) -> Result { missile_size: 5, super_size: 5, powerbomb_size: 5, - etank_multiplier: 1, - reserve_multiplier: 1, + etank_size: 1, + reserve_size: 1, random_tank: true, spazer_before_plasma: true, item_pool_preset: None, From 0a7bc92bda2aaaad1d63a24539702ab7fd128fd1 Mon Sep 17 00:00:00 2001 From: Brent Kerby Date: Fri, 14 Aug 2026 07:41:47 -0600 Subject: [PATCH 7/7] fix capitalization in pickup size modal --- .../templates/generate/help/progression/pickup_size.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/maprando-web/templates/generate/help/progression/pickup_size.html b/rust/maprando-web/templates/generate/help/progression/pickup_size.html index c77a69957..0455af96b 100644 --- a/rust/maprando-web/templates/generate/help/progression/pickup_size.html +++ b/rust/maprando-web/templates/generate/help/progression/pickup_size.html @@ -8,7 +8,7 @@

    Pickup sizes