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 f38d1e186b..9ee17d7595 100644 --- a/rust/data/presets/full-settings/Community Race Season 5.json +++ b/rust/data/presets/full-settings/Community Race Season 5.json @@ -4267,6 +4267,9 @@ "item_pool_preset": null, "stop_item_placement_early": false, "ammo_collect_fraction": 0.7, + "missile_size": 5, + "super_size": 5, + "powerbomb_size": 5, "item_pool": [ { "item": "Missile", diff --git a/rust/data/presets/full-settings/Default.json b/rust/data/presets/full-settings/Default.json index 61233b9894..6e5dc59501 100644 --- a/rust/data/presets/full-settings/Default.json +++ b/rust/data/presets/full-settings/Default.json @@ -4267,6 +4267,9 @@ "item_pool_preset": "Full", "stop_item_placement_early": false, "ammo_collect_fraction": 0.7, + "missile_size": 5, + "super_size": 5, + "powerbomb_size": 5, "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 ec23230088..b8c4f61a8f 100644 --- a/rust/data/presets/full-settings/Mentor Tournament.json +++ b/rust/data/presets/full-settings/Mentor Tournament.json @@ -4267,6 +4267,9 @@ "item_pool_preset": null, "stop_item_placement_early": false, "ammo_collect_fraction": 0.7, + "missile_size": 5, + "super_size": 5, + "powerbomb_size": 5, "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 83aec261e7..c4d912b3d0 100644 --- a/rust/data/presets/full-settings/Summer Series Expert Challenge.json +++ b/rust/data/presets/full-settings/Summer Series Expert Challenge.json @@ -4267,6 +4267,9 @@ "item_pool_preset": "Full", "stop_item_placement_early": false, "ammo_collect_fraction": 1.0, + "missile_size": 5, + "super_size": 5, + "powerbomb_size": 5, "item_pool": [ { "item": "Missile", diff --git a/rust/data/presets/item-progression/Challenge.json b/rust/data/presets/item-progression/Challenge.json index 9e2557aa51..176ad8ff92 100644 --- a/rust/data/presets/item-progression/Challenge.json +++ b/rust/data/presets/item-progression/Challenge.json @@ -8,6 +8,9 @@ "item_pool_preset": "Full", "stop_item_placement_early": false, "ammo_collect_fraction": 1.0, + "missile_size": 5, + "super_size": 5, + "powerbomb_size": 5, "item_pool": [ { "item": "Missile", diff --git a/rust/data/presets/item-progression/Desolate.json b/rust/data/presets/item-progression/Desolate.json index 9a9a72cc05..6a7fdb90d0 100644 --- a/rust/data/presets/item-progression/Desolate.json +++ b/rust/data/presets/item-progression/Desolate.json @@ -8,6 +8,9 @@ "item_pool_preset": "Reduced", "stop_item_placement_early": true, "ammo_collect_fraction": 1.0, + "missile_size": 5, + "super_size": 5, + "powerbomb_size": 5, "item_pool": [ { "item": "Missile", diff --git a/rust/data/presets/item-progression/Normal.json b/rust/data/presets/item-progression/Normal.json index dfbd74d43c..f9b60ff2e7 100644 --- a/rust/data/presets/item-progression/Normal.json +++ b/rust/data/presets/item-progression/Normal.json @@ -8,6 +8,9 @@ "item_pool_preset": "Full", "stop_item_placement_early": false, "ammo_collect_fraction": 0.7, + "missile_size": 5, + "super_size": 5, + "powerbomb_size": 5, "item_pool": [ { "item": "Missile", diff --git a/rust/data/presets/item-progression/Technical.json b/rust/data/presets/item-progression/Technical.json index a0b370c02a..41aaabe6d2 100644 --- a/rust/data/presets/item-progression/Technical.json +++ b/rust/data/presets/item-progression/Technical.json @@ -8,6 +8,9 @@ "item_pool_preset": "Full", "stop_item_placement_early": false, "ammo_collect_fraction": 1.0, + "missile_size": 5, + "super_size": 5, + "powerbomb_size": 5, "item_pool": [ { "item": "Missile", diff --git a/rust/data/presets/item-progression/Tricky.json b/rust/data/presets/item-progression/Tricky.json index bbc149cda9..e4d9961c7b 100644 --- a/rust/data/presets/item-progression/Tricky.json +++ b/rust/data/presets/item-progression/Tricky.json @@ -8,6 +8,9 @@ "item_pool_preset": "Full", "stop_item_placement_early": false, "ammo_collect_fraction": 0.7, + "missile_size": 5, + "super_size": 5, + "powerbomb_size": 5, "item_pool": [ { "item": "Missile", diff --git a/rust/maprando-logic/src/lib.rs b/rust/maprando-logic/src/lib.rs index 85a27ea35c..ce11ea6a9b 100644 --- a/rust/maprando-logic/src/lib.rs +++ b/rust/maprando-logic/src/lib.rs @@ -45,6 +45,9 @@ impl GlobalState { item: Item, game_data: &GameData, ammo_collect_fraction: f32, + missile_size: u16, + super_size: u16, + powerbomb_size: u16, tech: &[bool], ) { self.inventory.items[item as usize] = true; @@ -54,7 +57,7 @@ impl GlobalState { let new_max_missiles = (ammo_collect_fraction * self.inventory.collectible_missile_packs as f32) .round() as Capacity - * 5; + * (missile_size as Capacity); self.inventory.max_missiles = new_max_missiles; } Item::Super => { @@ -62,7 +65,7 @@ impl GlobalState { let new_max_supers = (ammo_collect_fraction * self.inventory.collectible_super_packs as f32) .round() as Capacity - * 5; + * (super_size as Capacity); self.inventory.max_supers = new_max_supers; } Item::PowerBomb => { @@ -70,7 +73,7 @@ impl GlobalState { let new_max_power_bombs = (ammo_collect_fraction * self.inventory.collectible_power_bomb_packs as f32) .round() as Capacity - * 5; + * (powerbomb_size as Capacity); self.inventory.max_power_bombs = new_max_power_bombs; } Item::ETank => { diff --git a/rust/maprando-web/src/randomize_helpers.rs b/rust/maprando-web/src/randomize_helpers.rs index 56dba4f545..35dcfe0c26 100644 --- a/rust/maprando-web/src/randomize_helpers.rs +++ b/rust/maprando-web/src/randomize_helpers.rs @@ -40,6 +40,9 @@ pub struct SeedHeaderTemplate<'a> { semi_filler_items: Vec, early_filler_items: Vec, item_placement_style: String, + missile_size: i32, + super_size: i32, + powerbomb_size: i32, difficulty: &'a DifficultyConfig, quality_of_life_preset: String, supers_double: bool, @@ -423,6 +426,9 @@ pub fn render_seed( .progression_rate ), random_tank: seed_data.settings.item_progression_settings.random_tank, + 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, filler_items: seed_data .settings .item_progression_settings diff --git a/rust/maprando-web/templates/generate/item_progression.html b/rust/maprando-web/templates/generate/item_progression.html index e0efc0c82d..766d669578 100644 --- a/rust/maprando-web/templates/generate/item_progression.html +++ b/rust/maprando-web/templates/generate/item_progression.html @@ -137,6 +137,49 @@

Item Progression

id="ammoCollectFraction" value="0.7" min="0.5" max="1.0" step="0.1" onchange="itemProgressionChanged()"> + +
+
+ +
+
+
+

+ +

+
+
+
+ + +
+ +
+
+ +
+ + +
+ +
+
+ +
+ + +
+ +
+
+
+
+
diff --git a/rust/maprando-web/templates/generate/scripts.html b/rust/maprando-web/templates/generate/scripts.html index d639626bd0..c1e863eb35 100644 --- a/rust/maprando-web/templates/generate/scripts.html +++ b/rust/maprando-web/templates/generate/scripts.html @@ -272,6 +272,9 @@ "starting_items": buildStartingItems(), "key_item_priority": buildItemPriorities(), "filler_items": buildFillerItems(), + "missile_size": tryParseInt(formData.get("tank_size_Missile")), + "super_size": tryParseInt(formData.get("tank_size_Super")), + "powerbomb_size": tryParseInt(formData.get("tank_size_PowerBomb")), }, "quality_of_life_settings": { "preset": formData.get("quality_of_life_preset"), @@ -1134,13 +1137,18 @@ for (x of preset.item_pool) { let item = x.item; let cnt = x.count; - let el = document.getElementById(`itemPool${item}`); - if (el.classList.contains("item-pool-input-multiple")) { - el.value = cnt; - } else { - applyRadioValue(`itemPool${item}`, cnt > 0 ? "Yes" : "No"); - } + let el = document.getElementById(`itemPool${item}`); + if (el.classList.contains("item-pool-input-multiple")) { + el.value = cnt; + } else { + applyRadioValue(`itemPool${item}`, cnt > 0 ? "Yes" : "No"); + } } + + document.getElementById("tankSizeMissile").value = preset.missile_size; + document.getElementById("tankSizeSuper").value = preset.super_size; + document.getElementById("tankSizePowerBomb").value = preset.powerbomb_size; + processItemPoolPreset(); applyRadioValue("startingItemsPreset", preset.starting_items_preset); for (x of preset.starting_items) { @@ -1273,8 +1281,8 @@ } } function validateItemPool() { - if (parseInt(document.getElementById("itemPoolMissile").value) > 199) { - document.getElementById("itemPoolMissile").value = "199"; + if (parseInt(document.getElementById("itemPoolMissile").value) > 999) { + document.getElementById("itemPoolMissile").value = "999"; } if (parseInt(document.getElementById("itemPoolETank").value) > 14) { document.getElementById("itemPoolETank").value = "14"; @@ -1282,11 +1290,11 @@ if (parseInt(document.getElementById("itemPoolReserveTank").value) > 4) { document.getElementById("itemPoolReserveTank").value = "4"; } - if (parseInt(document.getElementById("itemPoolSuper").value) > 19) { - document.getElementById("itemPoolSuper").value = "19"; + if (parseInt(document.getElementById("itemPoolSuper").value) > 99) { + document.getElementById("itemPoolSuper").value = "99"; } - if (parseInt(document.getElementById("itemPoolPowerBomb").value) > 19) { - document.getElementById("itemPoolPowerBomb").value = "19"; + if (parseInt(document.getElementById("itemPoolPowerBomb").value) > 99) { + document.getElementById("itemPoolPowerBomb").value = "99"; } if (parseInt(document.getElementById("itemPoolMissile").value) < 0) { @@ -1304,6 +1312,25 @@ if (parseInt(document.getElementById("itemPoolPowerBomb").value) < 0) { document.getElementById("itemPoolPowerBomb").value = "0"; } + + if (parseInt(document.getElementById("tankSizeMissile").value) < 1) { + document.getElementById("tankSizeMissile").value = "5"; + } + if (parseInt(document.getElementById("tankSizeMissile").value) * parseInt(document.getElementById("itemPoolMissile").value) > 32000) { + document.getElementById("tankSizeMissile").value = "5"; + } + if (parseInt(document.getElementById("tankSizeMissile").value) > 99) { + document.getElementById("tankSizeMissile").value = "99"; + } + if (parseInt(document.getElementById("tankSizeSuper").value) < 1) { + document.getElementById("tankSizeSuper").value = "5"; + } + if (parseInt(document.getElementById("tankSizeSuper").value) > 99) { + document.getElementById("tankSizeSuper").value = "99"; + } + if (parseInt(document.getElementById("tankSizePowerBomb").value) < 1) { + document.getElementById("tankSizePowerBomb").value = "5"; + } } function itemPoolPresetChanged() { processItemPoolPreset(); diff --git a/rust/maprando-web/templates/seed/item_progression_details.html b/rust/maprando-web/templates/seed/item_progression_details.html index 6f29d4a9f8..eb8e2cea1e 100644 --- a/rust/maprando-web/templates/seed/item_progression_details.html +++ b/rust/maprando-web/templates/seed/item_progression_details.html @@ -26,6 +26,12 @@
{% endif %} +
+
Tank Sizes:
+
+ Missile {{+ missile_size }}, Super {{+ super_size }}, PowerBomb {{+ powerbomb_size }} +
+
Stop item placement early:
{% if settings.item_progression_settings.stop_item_placement_early %}Yes{% else %}No{% endif %}
diff --git a/rust/maprando/src/patch.rs b/rust/maprando/src/patch.rs index 7313defed3..c9999aa4b3 100644 --- a/rust/maprando/src/patch.rs +++ b/rust/maprando/src/patch.rs @@ -767,6 +767,33 @@ impl Patcher<'_> { self.rom.write_u16(snes2pc(0xA9FB7B), escape_items)?; } + if self.settings.item_progression_settings.missile_size != 5 { + let m_sz = self.settings.item_progression_settings.missile_size as isize; + + self.rom.write_u16(snes2pc(0x84E0DD), m_sz)?; // PLM EEDB (Missile Tank) + self.rom.write_u16(snes2pc(0x84E4A6), m_sz)?; // PLM EF2F (Missile, Chozo) + self.rom.write_u16(snes2pc(0x84E977), m_sz)?; // PLM EF83 (Missile, Shot Block) + self.rom.write_u16(snes2pc(0x88E71B), m_sz)?; // Credits, Missile Item % Divisor + } + + if self.settings.item_progression_settings.super_size != 5 { + let s_sz = self.settings.item_progression_settings.super_size as isize; + + self.rom.write_u16(snes2pc(0x84E102), s_sz)?; // PLM EEDF (Super Tank) + self.rom.write_u16(snes2pc(0x84E4D8), s_sz)?; // PLM EF33 (Super, Chozo) + self.rom.write_u16(snes2pc(0x84E9AF), s_sz)?; // PLM EF87 (Super, Shot Block) + self.rom.write_u16(snes2pc(0x88E71D), s_sz)?; // Credits, Super Item % Divisor + } + + if self.settings.item_progression_settings.powerbomb_size != 5 { + let p_sz = self.settings.item_progression_settings.powerbomb_size as isize; + + self.rom.write_u16(snes2pc(0x84E127), p_sz)?; // PLM EEE3 (PB Tank) + self.rom.write_u16(snes2pc(0x84E50A), p_sz)?; // PLM EF37 (PB, Chozo) + self.rom.write_u16(snes2pc(0x84E9E7), p_sz)?; // PLM EF8B (PB, Shot Block) + self.rom.write_u16(snes2pc(0x88E71F), p_sz)?; // Credits, Power Bomb Item % Divisor + } + Ok(()) } @@ -2247,6 +2274,11 @@ impl Patcher<'_> { let mut starting_reserves = 0; let mut starting_supers = 0; let mut starting_powerbombs = 0; + + if starting_energy < 1 { + bail!("E-Tank size is too low".to_string()); + } + let item_bitmask_map: HashMap = vec![ (Item::Varia, 0x0001), (Item::SpringBall, 0x0002), @@ -2284,15 +2316,18 @@ impl Patcher<'_> { } else if beam_bitmask_map.contains_key(&x.item) { beam_mask |= beam_bitmask_map[&x.item]; } else if x.item == Item::Missile { - starting_missiles += (x.count as isize) * 5; + 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; } else if x.item == Item::ReserveTank { starting_reserves += (x.count as isize) * 100; } else if x.item == Item::Super { - starting_supers += (x.count as isize) * 5; + starting_supers += (x.count as isize) + * (self.settings.item_progression_settings.super_size as isize); } else if x.item == Item::PowerBomb { - starting_powerbombs += (x.count as isize) * 5; + starting_powerbombs += (x.count as isize) + * (self.settings.item_progression_settings.powerbomb_size as isize); } } let beam_equipped_mask = if beam_mask & 0x000C == 0x000C { diff --git a/rust/maprando/src/randomize.rs b/rust/maprando/src/randomize.rs index 6382d44b37..4604b732fe 100644 --- a/rust/maprando/src/randomize.rs +++ b/rust/maprando/src/randomize.rs @@ -3405,15 +3405,15 @@ pub fn filter_links( out } -fn get_minimal_tank_count(difficulty: &DifficultyConfig) -> usize { +fn get_minimal_energy(difficulty: &DifficultyConfig) -> Capacity { if difficulty.ridley_proficiency < 0.3 { - 12 + 1200 } else if difficulty.ridley_proficiency < 0.8 { - 9 + 900 } else if difficulty.ridley_proficiency < 0.9 { - 7 + 700 } else { - 3 + 300 } } @@ -3699,20 +3699,48 @@ impl<'r> Randomizer<'r> { } } - let mut minimal_tank_count = get_minimal_tank_count(&difficulty_tiers[0]); + let mut minimal_energy = get_minimal_energy(&difficulty_tiers[0]); 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_tank_count = minimal_tank_count.saturating_sub(x.count); + minimal_energy = minimal_energy.saturating_sub(100); } } - while initial_items_remaining[Item::ETank as usize] - + initial_items_remaining[Item::ReserveTank as usize] - < minimal_tank_count + while ((initial_items_remaining[Item::ETank as usize] * 100) as Capacity + + (initial_items_remaining[Item::ReserveTank as usize] * 100) as Capacity) + < minimal_energy { - initial_items_remaining[Item::ETank as usize] += 1; + if (initial_items_remaining[Item::ETank as usize] < 14) + && ((initial_items_remaining[Item::ETank as usize] + 1) * 100 <= 1400) + { + initial_items_remaining[Item::ETank as usize] += 1; + } else if initial_items_remaining[Item::ReserveTank as usize] < 4 { + initial_items_remaining[Item::ReserveTank as usize] += 1; + } else { + panic!("Can't ensure enough energy!"); + } + } + + // Enforce HUD-based total resource limits t(1400 energy, 999 reserve, 999 missile, 99 super, 99 PB) + while initial_items_remaining[Item::Missile as usize] + * settings.item_progression_settings.missile_size as usize + > 999 + { + initial_items_remaining[Item::Missile as usize] -= 1; + } + while initial_items_remaining[Item::Super as usize] + * settings.item_progression_settings.super_size as usize + > 99 + { + initial_items_remaining[Item::Super as usize] -= 1; + } + while initial_items_remaining[Item::PowerBomb as usize] + * settings.item_progression_settings.powerbomb_size as usize + > 99 + { + initial_items_remaining[Item::PowerBomb as usize] -= 1; } let target_initial_items = initial_items_remaining.clone(); @@ -3728,10 +3756,11 @@ impl<'r> Randomizer<'r> { .sum::() .saturating_sub(available_items) { - let tank_count = initial_items_remaining[Item::ETank as usize] - + initial_items_remaining[Item::ReserveTank as usize]; + 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 mut removal_options = ammo_shortage_weight.clone(); - if tank_count > minimal_tank_count { + if energy_left_to_place > minimal_energy { removal_options.extend(tank_shortage_weight.clone()); } let mut best_removal_item: Option = None; @@ -4400,6 +4429,9 @@ impl<'r> Randomizer<'r> { self.settings .item_progression_settings .ammo_collect_fraction, + self.settings.item_progression_settings.missile_size, + self.settings.item_progression_settings.super_size, + self.settings.item_progression_settings.powerbomb_size, &self.difficulty_tiers[0].tech, ); } @@ -5250,9 +5282,12 @@ impl<'r> Randomizer<'r> { .collect(), max_energy: (99 + collectible_etanks * 100) as Capacity, max_reserves: (collectible_reserve_tanks * 100) as Capacity, - max_missiles: (acf * collectible_missile_packs as f32).round() as Capacity * 5, - max_supers: (acf * collectible_super_packs as f32).round() as Capacity * 5, - max_power_bombs: (acf * collectible_pb_packs as f32).round() as Capacity * 5, + max_missiles: (acf * collectible_missile_packs as f32).round() as Capacity + * (self.settings.item_progression_settings.missile_size as i16), + max_supers: (acf * collectible_super_packs as f32).round() as Capacity + * (self.settings.item_progression_settings.super_size as i16), + max_power_bombs: (acf * collectible_pb_packs as f32).round() as Capacity + * (self.settings.item_progression_settings.powerbomb_size as i16), collectible_missile_packs: collectible_missile_packs as Capacity, collectible_super_packs: collectible_super_packs as Capacity, collectible_power_bomb_packs: collectible_pb_packs as Capacity, @@ -5291,6 +5326,9 @@ impl<'r> Randomizer<'r> { self.settings .item_progression_settings .ammo_collect_fraction, + self.settings.item_progression_settings.missile_size, + self.settings.item_progression_settings.super_size, + self.settings.item_progression_settings.powerbomb_size, &self.difficulty_tiers[0].tech, ); } @@ -5361,6 +5399,9 @@ impl<'r> Randomizer<'r> { x: StartLocation::default().x, y: StartLocation::default().y, }, + missile_size: self.settings.item_progression_settings.missile_size as i32, + super_size: self.settings.item_progression_settings.super_size as i32, + powerbomb_size: self.settings.item_progression_settings.powerbomb_size as i32, hub_location_name: String::new(), hub_obtain_route: vec![], hub_return_route: vec![], diff --git a/rust/maprando/src/settings.rs b/rust/maprando/src/settings.rs index 4ad5502483..eaf13b7fcf 100644 --- a/rust/maprando/src/settings.rs +++ b/rust/maprando/src/settings.rs @@ -101,6 +101,9 @@ pub struct ItemProgressionSettings { pub starting_items: Vec, pub key_item_priority: Vec, pub filler_items: Vec, + pub missile_size: u16, + pub super_size: u16, + pub powerbomb_size: u16, } #[repr(u8)] @@ -1051,7 +1054,21 @@ fn upgrade_item_progression_settings(settings: &mut serde_json::Value) -> Result if !item_progression_settings.contains_key("ammo_collect_fraction") { item_progression_settings.insert("ammo_collect_fraction".to_string(), (0.7).into()); } - + if !item_progression_settings.contains_key("etank_size") { + item_progression_settings.insert("etank_size".to_string(), (100).into()); + } + if !item_progression_settings.contains_key("reserve_size") { + item_progression_settings.insert("reserve_size".to_string(), (5).into()); + } + if !item_progression_settings.contains_key("missile_size") { + item_progression_settings.insert("missile_size".to_string(), (5).into()); + } + if !item_progression_settings.contains_key("super_size") { + item_progression_settings.insert("super_size".to_string(), (5).into()); + } + if !item_progression_settings.contains_key("powerbomb_size") { + item_progression_settings.insert("powerbomb_size".to_string(), (5).into()); + } Ok(()) } diff --git a/rust/maprando/src/spoiler_log.rs b/rust/maprando/src/spoiler_log.rs index 004b58cd4d..f5ed506ecb 100644 --- a/rust/maprando/src/spoiler_log.rs +++ b/rust/maprando/src/spoiler_log.rs @@ -196,6 +196,9 @@ pub struct SpoilerTraversal { #[derive(Serialize, Deserialize)] pub struct SpoilerLog { pub item_priority: Vec, + pub missile_size: i32, + pub super_size: i32, + pub powerbomb_size: i32, pub summary: Vec, pub objectives: Vec, pub escape: SpoilerEscape, @@ -514,9 +517,12 @@ fn get_spoiler_start_state( max_missiles: global_state.inventory.max_missiles, max_supers: global_state.inventory.max_supers, max_power_bombs: global_state.inventory.max_power_bombs, - collectible_missiles: global_state.inventory.collectible_missile_packs * 5, - collectible_supers: global_state.inventory.collectible_super_packs * 5, - collectible_power_bombs: global_state.inventory.collectible_power_bomb_packs * 5, + collectible_missiles: global_state.inventory.collectible_missile_packs + * randomizer.settings.item_progression_settings.missile_size as i16, + collectible_supers: global_state.inventory.collectible_super_packs + * randomizer.settings.item_progression_settings.super_size as i16, + collectible_power_bombs: global_state.inventory.collectible_power_bomb_packs + * randomizer.settings.item_progression_settings.powerbomb_size as i16, items, flags, } @@ -1321,6 +1327,9 @@ pub fn get_spoiler_log( .iter() .map(|x| format!("{x:?}")) .collect(), + missile_size: randomizer.settings.item_progression_settings.missile_size as i32, + super_size: randomizer.settings.item_progression_settings.super_size as i32, + powerbomb_size: randomizer.settings.item_progression_settings.powerbomb_size as i32, summary: spoiler_summaries, objectives: spoiler_objectives, start_location: SpoilerStartLocation { diff --git a/rust/maprando/tests/logic_scenarios.rs b/rust/maprando/tests/logic_scenarios.rs index 9a5d5c9d9e..e999c42b12 100644 --- a/rust/maprando/tests/logic_scenarios.rs +++ b/rust/maprando/tests/logic_scenarios.rs @@ -200,6 +200,9 @@ fn get_settings(scenario: &Scenario) -> Result { progression_rate: maprando::settings::ProgressionRate::Fast, item_placement_style: maprando::settings::ItemPlacementStyle::Neutral, item_priority_strength: maprando::settings::ItemPriorityStrength::Moderate, + missile_size: 5, + super_size: 5, + powerbomb_size: 5, random_tank: true, spazer_before_plasma: true, item_pool_preset: None, diff --git a/visualizer/script.js b/visualizer/script.js index f385247f94..04029e1343 100644 --- a/visualizer/script.js +++ b/visualizer/script.js @@ -505,9 +505,9 @@ fetch(`../spoiler.json`).then(c => c.json()).then(c => { let non_unique_counts = { "ETank": 1, "ReserveTank": 1, - "Missile": 5, - "PowerBomb": 5, - "Super": 5 + "Missile": c.missile_size, + "PowerBomb": c.powerbomb_size, + "Super": c.super_size }; let last = null; let added_item = false;