From 8f75384e2ebce6adf4a4abc7c3d5c5d8e997805d Mon Sep 17 00:00:00 2001 From: PoryGone <98504756+PoryGone@users.noreply.github.com> Date: Fri, 28 Mar 2025 16:11:31 -0400 Subject: [PATCH] SA2B - v2.4 Logic Fixes (#4770) * Logic tweaks * Docs updates * Delete extra file * One more logic tweak * Add missing logic change --- worlds/sa2b/CHANGELOG.md | 2 ++ worlds/sa2b/Rules.py | 30 +++++++++++------------------- worlds/sa2b/docs/setup_en.md | 5 ++++- 3 files changed, 17 insertions(+), 20 deletions(-) diff --git a/worlds/sa2b/CHANGELOG.md b/worlds/sa2b/CHANGELOG.md index 1a4aea3e..1a8a2386 100644 --- a/worlds/sa2b/CHANGELOG.md +++ b/worlds/sa2b/CHANGELOG.md @@ -59,6 +59,8 @@ - Going into submenus from the pause menu should no longer reset traps - `Sonic - Magic Gloves` are now plural - Junk items will no longer cause a crash when in a falling state +- Saves should no longer incorrectly be marked as not matching the connected server +- Fixed miscellaneous crashes - Chao Garden: - Prevent races from occasionally becoming uncompletable when using the "Prize Only" option - Properly allow Hero Chao to participate in Dark Races diff --git a/worlds/sa2b/Rules.py b/worlds/sa2b/Rules.py index 583b84c5..718c5fe0 100644 --- a/worlds/sa2b/Rules.py +++ b/worlds/sa2b/Rules.py @@ -1439,7 +1439,9 @@ def set_mission_upgrade_rules_standard(multiworld: MultiWorld, world: World, pla lambda state: state.has(ItemName.rouge_iron_boots, player)) add_rule(multiworld.get_location(LocationName.pyramid_cave_lifebox_5, player), - lambda state: state.has(ItemName.sonic_bounce_bracelet, player)) + lambda state: (state.has(ItemName.sonic_light_shoes, player) and + state.has(ItemName.sonic_bounce_bracelet, player) and + state.has(ItemName.sonic_mystic_melody, player))) add_rule(multiworld.get_location(LocationName.pyramid_cave_lifebox_6, player), lambda state: state.has(ItemName.sonic_bounce_bracelet, player)) @@ -1745,6 +1747,8 @@ def set_mission_upgrade_rules_standard(multiworld: MultiWorld, world: World, pla state.has(ItemName.sonic_bounce_bracelet, player) and state.has(ItemName.sonic_flame_ring, player))) + add_rule(multiworld.get_location(LocationName.eqq_quarters_itembox_9, player), + lambda state: state.has(ItemName.rouge_mystic_melody, player)) add_rule(multiworld.get_location(LocationName.lost_colony_itembox_9, player), lambda state: state.has(ItemName.eggman_jet_engine, player)) add_rule(multiworld.get_location(LocationName.security_hall_itembox_9, player), @@ -2464,10 +2468,6 @@ def set_mission_upgrade_rules_hard(multiworld: MultiWorld, world: World, player: add_rule(multiworld.get_location(LocationName.eternal_engine_omo_2, player), lambda state: state.has(ItemName.tails_booster, player)) - add_rule(multiworld.get_location(LocationName.weapons_bed_omo_2, player), - lambda state: state.has(ItemName.eggman_jet_engine, player) or - state.has(ItemName.eggman_large_cannon, player)) - add_rule(multiworld.get_location(LocationName.hidden_base_omo_3, player), lambda state: state.has(ItemName.tails_booster, player)) add_rule(multiworld.get_location(LocationName.eternal_engine_omo_3, player), @@ -3214,6 +3214,8 @@ def set_mission_upgrade_rules_hard(multiworld: MultiWorld, world: World, player: lambda state: (state.has(ItemName.sonic_light_shoes, player) and state.has(ItemName.sonic_flame_ring, player))) + add_rule(multiworld.get_location(LocationName.eqq_quarters_itembox_9, player), + lambda state: state.has(ItemName.rouge_mystic_melody, player)) add_rule(multiworld.get_location(LocationName.lost_colony_itembox_9, player), lambda state: state.has(ItemName.eggman_jet_engine, player)) add_rule(multiworld.get_location(LocationName.security_hall_itembox_9, player), @@ -3435,8 +3437,6 @@ def set_mission_upgrade_rules_hard(multiworld: MultiWorld, world: World, player: # Big Upgrade Requirements if world.options.bigsanity: - add_rule(multiworld.get_location(LocationName.metal_harbor_big, player), - lambda state: state.has(ItemName.sonic_bounce_bracelet, player)) add_rule(multiworld.get_location(LocationName.mission_street_big, player), lambda state: state.has(ItemName.tails_booster, player)) add_rule(multiworld.get_location(LocationName.hidden_base_big, player), @@ -3454,8 +3454,6 @@ def set_mission_upgrade_rules_hard(multiworld: MultiWorld, world: World, player: add_rule(multiworld.get_location(LocationName.lost_colony_big, player), lambda state: state.has(ItemName.eggman_jet_engine, player)) - add_rule(multiworld.get_location(LocationName.weapons_bed_big, player), - lambda state: state.has(ItemName.eggman_jet_engine, player)) add_rule(multiworld.get_location(LocationName.cannon_core_big_2, player), lambda state: state.has(ItemName.tails_booster, player)) @@ -3700,10 +3698,6 @@ def set_mission_upgrade_rules_expert(multiworld: MultiWorld, world: World, playe add_rule(multiworld.get_location(LocationName.eternal_engine_omo_2, player), lambda state: state.has(ItemName.tails_booster, player)) - add_rule(multiworld.get_location(LocationName.weapons_bed_omo_2, player), - lambda state: state.has(ItemName.eggman_jet_engine, player) or - state.has(ItemName.eggman_large_cannon, player)) - add_rule(multiworld.get_location(LocationName.hidden_base_omo_3, player), lambda state: state.has(ItemName.tails_booster, player)) add_rule(multiworld.get_location(LocationName.eternal_engine_omo_3, player), @@ -4210,7 +4204,8 @@ def set_mission_upgrade_rules_expert(multiworld: MultiWorld, world: World, playe lambda state: state.has(ItemName.eggman_jet_engine, player)) add_rule(multiworld.get_location(LocationName.eternal_engine_itembox_13, player), - lambda state: state.has(ItemName.tails_booster, player)) + lambda state: (state.has(ItemName.tails_booster, player) and + state.has(ItemName.tails_bazooka, player))) add_rule(multiworld.get_location(LocationName.mad_space_itembox_13, player), lambda state: state.has(ItemName.rouge_treasure_scope, player)) @@ -4218,7 +4213,8 @@ def set_mission_upgrade_rules_expert(multiworld: MultiWorld, world: World, playe lambda state: state.has(ItemName.eggman_jet_engine, player)) add_rule(multiworld.get_location(LocationName.eternal_engine_itembox_14, player), - lambda state: state.has(ItemName.tails_booster, player)) + lambda state: (state.has(ItemName.tails_booster, player) and + state.has(ItemName.tails_bazooka, player))) add_rule(multiworld.get_location(LocationName.cosmic_wall_itembox_14, player), lambda state: state.has(ItemName.eggman_jet_engine, player)) @@ -4264,8 +4260,6 @@ def set_mission_upgrade_rules_expert(multiworld: MultiWorld, world: World, playe # Big Upgrade Requirements if world.options.bigsanity: - add_rule(multiworld.get_location(LocationName.metal_harbor_big, player), - lambda state: state.has(ItemName.sonic_bounce_bracelet, player)) add_rule(multiworld.get_location(LocationName.mission_street_big, player), lambda state: state.has(ItemName.tails_booster, player)) add_rule(multiworld.get_location(LocationName.hidden_base_big, player), @@ -4276,8 +4270,6 @@ def set_mission_upgrade_rules_expert(multiworld: MultiWorld, world: World, playe add_rule(multiworld.get_location(LocationName.lost_colony_big, player), lambda state: state.has(ItemName.eggman_jet_engine, player)) - add_rule(multiworld.get_location(LocationName.weapons_bed_big, player), - lambda state: state.has(ItemName.eggman_jet_engine, player)) def set_boss_gate_rules(multiworld: MultiWorld, player: int, gate_bosses: typing.Dict[int, int]): diff --git a/worlds/sa2b/docs/setup_en.md b/worlds/sa2b/docs/setup_en.md index c34e45ce..fff504bb 100644 --- a/worlds/sa2b/docs/setup_en.md +++ b/worlds/sa2b/docs/setup_en.md @@ -129,7 +129,10 @@ If you wish to use the `SADX Music` option of the Randomizer, you must own a cop - If you enabled an `SADX Music` option, then most likely the music data was not copied properly into the mod folder (See Additional Options for instructions). - Mission 1 is missing a texture in the stage select UI. - - Most likely another mod is conflicting and overwriting the texture pack. It is recommeded to have the SA2B Archipelago mod load last in the mod manager. + - Most likely another mod is conflicting and overwriting the texture pack. It is recommended to have the SA2B Archipelago mod load last in the mod manager. + +- Minigame trap is un-winnable + - If you are using the SA2 Input Controls mod, it conflicts with certain minigames such as the Input Sequence Trap and medium difficulty Fishing Trap. Disabling the SA2 Input Controls mod should resolve the issue. ## Save File Safeguard (Advanced Option)