SA2B: v2.2 Content Update (#1904)

* Ice Trap Support

* Support Animalsanity

* Add option for controlling number of emblems in pool

* Support Slow Trap

* Support Cutscene Traps

* Support Voice Shuffle

* Handle Boss Rush goals

* Fix create item reference to self.multiworld

* Support Ringlink

* Reduce beep frequency to 20

* Add Boss Rush Chaos Emerald Hunt Goal

* Fix Eternal Engine - Pipe 1 logic

* Add Chao voice shuffle

* Remove unused option

* Adjust wording of Required Cannon's Core Missions

* Fix incorrect region assignment

* Fix incorrect animal logics

* Fix Chao Race tooltip

* Remove Green Hill Animal Location

* Add Location Count info to tooltips

* Don't allow M4 first if animalsanity is active

* Add Iron Boots to Standard Logic Egg Quarters 5

* Make Vanilla Boss Rush actually Vanilla

* Increment Mod Version

* Increment Data Package Version

---------

Co-authored-by: RaspberrySpaceJam <tyler.summers@gmail.com>
This commit is contained in:
PoryGone
2023-06-27 17:38:58 -04:00
committed by GitHub
parent d51e0ec0ab
commit 1ced726d31
10 changed files with 3067 additions and 585 deletions

View File

@@ -329,7 +329,8 @@ def set_mission_upgrade_rules_standard(world: MultiWorld, player: int):
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule_safe(world, LocationName.egg_quarters_5, player,
lambda state: state.has(ItemName.rouge_pick_nails, player) and
state.has(ItemName.rouge_treasure_scope, player))
state.has(ItemName.rouge_treasure_scope, player) and
state.has(ItemName.rouge_iron_boots, player))
add_rule_safe(world, LocationName.lost_colony_5, player,
lambda state: state.has(ItemName.eggman_jet_engine, player) and
state.has(ItemName.eggman_large_cannon, player))
@@ -495,8 +496,6 @@ def set_mission_upgrade_rules_standard(world: MultiWorld, player: int):
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.hidden_base_pipe_1, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.eternal_engine_pipe_1, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.sand_ocean_pipe_1, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
@@ -827,6 +826,507 @@ def set_mission_upgrade_rules_standard(world: MultiWorld, player: int):
state.has(ItemName.knuckles_hammer_gloves, player) and
state.has(ItemName.knuckles_air_necklace, player))
# Animal Upgrade Requirements
if world.animalsanity[player]:
add_rule(world.get_location(LocationName.hidden_base_animal_2, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.cosmic_wall_animal_2, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.hidden_base_animal_3, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.death_chamber_animal_3, player),
lambda state: state.has(ItemName.knuckles_hammer_gloves, player))
add_rule(world.get_location(LocationName.eternal_engine_animal_3, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.crazy_gadget_animal_3, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
add_rule(world.get_location(LocationName.cosmic_wall_animal_3, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.cannon_core_animal_3, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.hidden_base_animal_4, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.death_chamber_animal_4, player),
lambda state: state.has(ItemName.knuckles_hammer_gloves, player))
add_rule(world.get_location(LocationName.eternal_engine_animal_4, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.crazy_gadget_animal_4, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
add_rule(world.get_location(LocationName.weapons_bed_animal_4, player),
lambda state: state.has(ItemName.eggman_jet_engine, player) and
state.has(ItemName.eggman_large_cannon, player))
add_rule(world.get_location(LocationName.mad_space_animal_4, player),
lambda state: state.has(ItemName.rouge_iron_boots, player))
add_rule(world.get_location(LocationName.cosmic_wall_animal_4, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.cannon_core_animal_4, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.mission_street_animal_5, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.hidden_base_animal_5, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.death_chamber_animal_5, player),
lambda state: state.has(ItemName.knuckles_hammer_gloves, player))
add_rule(world.get_location(LocationName.eternal_engine_animal_5, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.crazy_gadget_animal_5, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
add_rule(world.get_location(LocationName.weapons_bed_animal_5, player),
lambda state: state.has(ItemName.eggman_jet_engine, player) and
state.has(ItemName.eggman_large_cannon, player))
add_rule(world.get_location(LocationName.mad_space_animal_5, player),
lambda state: state.has(ItemName.rouge_iron_boots, player))
add_rule(world.get_location(LocationName.cosmic_wall_animal_5, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.cannon_core_animal_5, player),
lambda state: state.has(ItemName.tails_booster, player) and
(state.has(ItemName.eggman_jet_engine, player) or
state.has(ItemName.eggman_large_cannon, player)))
add_rule(world.get_location(LocationName.metal_harbor_animal_6, player),
lambda state: state.has(ItemName.sonic_light_shoes, player))
add_rule(world.get_location(LocationName.mission_street_animal_6, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.hidden_base_animal_6, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.pyramid_cave_animal_6, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
add_rule(world.get_location(LocationName.death_chamber_animal_6, player),
lambda state: state.has(ItemName.knuckles_hammer_gloves, player))
add_rule(world.get_location(LocationName.eternal_engine_animal_6, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.crazy_gadget_animal_6, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
add_rule(world.get_location(LocationName.weapons_bed_animal_6, player),
lambda state: state.has(ItemName.eggman_jet_engine, player) and
state.has(ItemName.eggman_large_cannon, player))
add_rule(world.get_location(LocationName.mad_space_animal_6, player),
lambda state: state.has(ItemName.rouge_iron_boots, player))
add_rule(world.get_location(LocationName.cosmic_wall_animal_6, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.cannon_core_animal_6, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.metal_harbor_animal_7, player),
lambda state: state.has(ItemName.sonic_light_shoes, player))
add_rule(world.get_location(LocationName.mission_street_animal_7, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.hidden_base_animal_7, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.pyramid_cave_animal_7, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
add_rule(world.get_location(LocationName.death_chamber_animal_7, player),
lambda state: state.has(ItemName.knuckles_shovel_claws, player) and
state.has(ItemName.knuckles_hammer_gloves, player))
add_rule(world.get_location(LocationName.eternal_engine_animal_7, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.crazy_gadget_animal_7, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
add_rule(world.get_location(LocationName.lost_colony_animal_7, player),
lambda state: state.has(ItemName.eggman_jet_engine, player) or
state.has(ItemName.eggman_large_cannon, player))
add_rule(world.get_location(LocationName.weapons_bed_animal_7, player),
lambda state: state.has(ItemName.eggman_jet_engine, player) and
state.has(ItemName.eggman_large_cannon, player))
add_rule(world.get_location(LocationName.security_hall_animal_7, player),
lambda state: state.has(ItemName.rouge_pick_nails, player) or
state.has(ItemName.rouge_iron_boots, player))
add_rule(world.get_location(LocationName.mad_space_animal_7, player),
lambda state: state.has(ItemName.rouge_iron_boots, player))
add_rule(world.get_location(LocationName.cosmic_wall_animal_7, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.cannon_core_animal_7, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.metal_harbor_animal_8, player),
lambda state: state.has(ItemName.sonic_light_shoes, player))
add_rule(world.get_location(LocationName.mission_street_animal_8, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.hidden_base_animal_8, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.pyramid_cave_animal_8, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
add_rule(world.get_location(LocationName.death_chamber_animal_8, player),
lambda state: state.has(ItemName.knuckles_shovel_claws, player) and
state.has(ItemName.knuckles_hammer_gloves, player))
add_rule(world.get_location(LocationName.eternal_engine_animal_8, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.crazy_gadget_animal_8, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
add_rule(world.get_location(LocationName.lost_colony_animal_8, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.weapons_bed_animal_8, player),
lambda state: state.has(ItemName.eggman_jet_engine, player) and
state.has(ItemName.eggman_large_cannon, player))
add_rule(world.get_location(LocationName.security_hall_animal_8, player),
lambda state: state.has(ItemName.rouge_pick_nails, player) and
state.has(ItemName.rouge_iron_boots, player))
add_rule(world.get_location(LocationName.mad_space_animal_8, player),
lambda state: state.has(ItemName.rouge_iron_boots, player))
add_rule(world.get_location(LocationName.cosmic_wall_animal_8, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.cannon_core_animal_8, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.eggman_jet_engine, player) and
state.has(ItemName.eggman_large_cannon, player))
add_rule(world.get_location(LocationName.metal_harbor_animal_9, player),
lambda state: state.has(ItemName.sonic_light_shoes, player))
add_rule(world.get_location(LocationName.mission_street_animal_9, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.hidden_base_animal_9, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.pyramid_cave_animal_9, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
add_rule(world.get_location(LocationName.death_chamber_animal_9, player),
lambda state: state.has(ItemName.knuckles_shovel_claws, player) and
state.has(ItemName.knuckles_hammer_gloves, player))
add_rule(world.get_location(LocationName.eternal_engine_animal_9, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.crazy_gadget_animal_9, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
add_rule(world.get_location(LocationName.final_rush_animal_9, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
add_rule(world.get_location(LocationName.lost_colony_animal_9, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.weapons_bed_animal_9, player),
lambda state: state.has(ItemName.eggman_jet_engine, player) and
state.has(ItemName.eggman_large_cannon, player))
add_rule(world.get_location(LocationName.mad_space_animal_9, player),
lambda state: state.has(ItemName.rouge_iron_boots, player))
add_rule(world.get_location(LocationName.cosmic_wall_animal_9, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.cannon_core_animal_9, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.eggman_jet_engine, player) and
state.has(ItemName.eggman_large_cannon, player))
add_rule(world.get_location(LocationName.wild_canyon_animal_10, player),
lambda state: state.has(ItemName.knuckles_shovel_claws, player))
add_rule(world.get_location(LocationName.metal_harbor_animal_10, player),
lambda state: state.has(ItemName.sonic_light_shoes, player))
add_rule(world.get_location(LocationName.mission_street_animal_10, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.aquatic_mine_animal_10, player),
lambda state: state.has(ItemName.knuckles_mystic_melody, player))
add_rule(world.get_location(LocationName.hidden_base_animal_10, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.pyramid_cave_animal_10, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
add_rule(world.get_location(LocationName.death_chamber_animal_10, player),
lambda state: state.has(ItemName.knuckles_shovel_claws, player) and
state.has(ItemName.knuckles_hammer_gloves, player))
add_rule(world.get_location(LocationName.eternal_engine_animal_10, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.crazy_gadget_animal_10, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
add_rule(world.get_location(LocationName.final_rush_animal_10, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
add_rule(world.get_location(LocationName.egg_quarters_animal_10, player),
lambda state: state.has(ItemName.rouge_iron_boots, player))
add_rule(world.get_location(LocationName.lost_colony_animal_10, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.weapons_bed_animal_10, player),
lambda state: state.has(ItemName.eggman_jet_engine, player) and
state.has(ItemName.eggman_large_cannon, player))
add_rule(world.get_location(LocationName.mad_space_animal_10, player),
lambda state: state.has(ItemName.rouge_iron_boots, player))
add_rule(world.get_location(LocationName.cosmic_wall_animal_10, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.cannon_core_animal_10, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.eggman_jet_engine, player) and
state.has(ItemName.eggman_large_cannon, player))
add_rule(world.get_location(LocationName.metal_harbor_animal_11, player),
lambda state: state.has(ItemName.sonic_light_shoes, player))
add_rule(world.get_location(LocationName.mission_street_animal_11, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.hidden_base_animal_11, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.pyramid_cave_animal_11, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
add_rule(world.get_location(LocationName.eternal_engine_animal_11, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.tails_bazooka, player))
add_rule(world.get_location(LocationName.crazy_gadget_animal_11, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player) and
(state.has(ItemName.sonic_flame_ring, player) or
state.has(ItemName.sonic_mystic_melody, player)))
add_rule(world.get_location(LocationName.final_rush_animal_11, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
add_rule(world.get_location(LocationName.lost_colony_animal_11, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.weapons_bed_animal_11, player),
lambda state: state.has(ItemName.eggman_jet_engine, player) and
state.has(ItemName.eggman_large_cannon, player))
add_rule(world.get_location(LocationName.white_jungle_animal_11, player),
lambda state: state.has(ItemName.shadow_air_shoes, player))
add_rule(world.get_location(LocationName.cosmic_wall_animal_11, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.cannon_core_animal_11, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.eggman_jet_engine, player) and
state.has(ItemName.eggman_large_cannon, player))
add_rule(world.get_location(LocationName.metal_harbor_animal_12, player),
lambda state: state.has(ItemName.sonic_light_shoes, player))
add_rule(world.get_location(LocationName.mission_street_animal_12, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.hidden_base_animal_12, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.pyramid_cave_animal_12, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
add_rule(world.get_location(LocationName.eternal_engine_animal_12, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.tails_bazooka, player))
add_rule(world.get_location(LocationName.crazy_gadget_animal_12, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player) and
state.has(ItemName.sonic_flame_ring, player) and
(state.has(ItemName.sonic_light_shoes, player) or
state.has(ItemName.sonic_mystic_melody, player)))
add_rule(world.get_location(LocationName.final_rush_animal_12, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
add_rule(world.get_location(LocationName.sand_ocean_animal_12, player),
lambda state: state.has(ItemName.eggman_jet_engine, player) and
state.has(ItemName.eggman_large_cannon, player))
add_rule(world.get_location(LocationName.lost_colony_animal_12, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.weapons_bed_animal_12, player),
lambda state: state.has(ItemName.eggman_jet_engine, player) and
state.has(ItemName.eggman_large_cannon, player))
add_rule(world.get_location(LocationName.white_jungle_animal_12, player),
lambda state: state.has(ItemName.shadow_air_shoes, player))
add_rule(world.get_location(LocationName.cosmic_wall_animal_12, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.cannon_core_animal_12, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.eggman_jet_engine, player) and
state.has(ItemName.eggman_large_cannon, player))
add_rule(world.get_location(LocationName.prison_lane_animal_13, player),
lambda state: state.has(ItemName.tails_booster, player) or
state.has(ItemName.tails_bazooka, player))
add_rule(world.get_location(LocationName.metal_harbor_animal_13, player),
lambda state: state.has(ItemName.sonic_light_shoes, player))
add_rule(world.get_location(LocationName.mission_street_animal_13, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.hidden_base_animal_13, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.pyramid_cave_animal_13, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
add_rule(world.get_location(LocationName.eternal_engine_animal_13, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.tails_bazooka, player))
add_rule(world.get_location(LocationName.crazy_gadget_animal_13, player),
lambda state: state.has(ItemName.sonic_light_shoes, player) and
state.has(ItemName.sonic_bounce_bracelet, player) and
state.has(ItemName.sonic_flame_ring, player))
add_rule(world.get_location(LocationName.final_rush_animal_13, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
add_rule(world.get_location(LocationName.sand_ocean_animal_13, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.lost_colony_animal_13, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.weapons_bed_animal_13, player),
lambda state: state.has(ItemName.eggman_jet_engine, player) and
state.has(ItemName.eggman_large_cannon, player))
add_rule(world.get_location(LocationName.white_jungle_animal_13, player),
lambda state: state.has(ItemName.shadow_air_shoes, player))
add_rule(world.get_location(LocationName.cosmic_wall_animal_13, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.cannon_core_animal_13, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.eggman_jet_engine, player) and
state.has(ItemName.eggman_large_cannon, player) and
(state.has(ItemName.knuckles_air_necklace, player) or
state.has(ItemName.knuckles_hammer_gloves, player)))
add_rule(world.get_location(LocationName.prison_lane_animal_14, player),
lambda state: state.has(ItemName.tails_bazooka, player))
add_rule(world.get_location(LocationName.metal_harbor_animal_14, player),
lambda state: state.has(ItemName.sonic_light_shoes, player))
add_rule(world.get_location(LocationName.mission_street_animal_14, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.hidden_base_animal_14, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.pyramid_cave_animal_14, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
add_rule(world.get_location(LocationName.eternal_engine_animal_14, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.tails_bazooka, player))
add_rule(world.get_location(LocationName.crazy_gadget_animal_14, player),
lambda state: state.has(ItemName.sonic_light_shoes, player) and
state.has(ItemName.sonic_bounce_bracelet, player) and
state.has(ItemName.sonic_flame_ring, player))
add_rule(world.get_location(LocationName.final_rush_animal_14, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
add_rule(world.get_location(LocationName.sand_ocean_animal_14, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.lost_colony_animal_14, player),
lambda state: state.has(ItemName.eggman_jet_engine, player) and
state.has(ItemName.eggman_large_cannon, player))
add_rule(world.get_location(LocationName.weapons_bed_animal_14, player),
lambda state: state.has(ItemName.eggman_jet_engine, player) and
state.has(ItemName.eggman_large_cannon, player))
add_rule(world.get_location(LocationName.white_jungle_animal_14, player),
lambda state: state.has(ItemName.shadow_air_shoes, player))
add_rule(world.get_location(LocationName.cosmic_wall_animal_14, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.cannon_core_animal_14, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.eggman_jet_engine, player) and
state.has(ItemName.eggman_large_cannon, player) and
state.has(ItemName.knuckles_air_necklace, player) and
state.has(ItemName.knuckles_hammer_gloves, player))
add_rule(world.get_location(LocationName.prison_lane_animal_15, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.tails_bazooka, player))
add_rule(world.get_location(LocationName.mission_street_animal_15, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.tails_bazooka, player))
add_rule(world.get_location(LocationName.hidden_base_animal_15, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.tails_bazooka, player))
add_rule(world.get_location(LocationName.pyramid_cave_animal_15, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
add_rule(world.get_location(LocationName.eternal_engine_animal_15, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.tails_bazooka, player))
add_rule(world.get_location(LocationName.crazy_gadget_animal_15, player),
lambda state: state.has(ItemName.sonic_light_shoes, player) and
state.has(ItemName.sonic_bounce_bracelet, player) and
state.has(ItemName.sonic_flame_ring, player))
add_rule(world.get_location(LocationName.final_rush_animal_15, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
add_rule(world.get_location(LocationName.iron_gate_animal_15, player),
lambda state: state.has(ItemName.eggman_jet_engine, player) and
state.has(ItemName.eggman_large_cannon, player))
add_rule(world.get_location(LocationName.sand_ocean_animal_15, player),
lambda state: state.has(ItemName.eggman_jet_engine, player) and
state.has(ItemName.eggman_large_cannon, player))
add_rule(world.get_location(LocationName.weapons_bed_animal_15, player),
lambda state: state.has(ItemName.eggman_jet_engine, player) and
state.has(ItemName.eggman_large_cannon, player))
add_rule(world.get_location(LocationName.white_jungle_animal_15, player),
lambda state: state.has(ItemName.shadow_air_shoes, player))
add_rule(world.get_location(LocationName.cosmic_wall_animal_15, player),
lambda state: state.has(ItemName.eggman_mystic_melody, player) and
state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.cannon_core_animal_15, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.eggman_jet_engine, player) and
state.has(ItemName.eggman_large_cannon, player) and
state.has(ItemName.knuckles_air_necklace, player) and
state.has(ItemName.knuckles_hammer_gloves, player))
add_rule(world.get_location(LocationName.mission_street_animal_16, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.tails_bazooka, player))
add_rule(world.get_location(LocationName.pyramid_cave_animal_16, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player) and
(state.has(ItemName.sonic_flame_ring, player) or
(state.has(ItemName.sonic_light_shoes, player) and
state.has(ItemName.sonic_mystic_melody, player))))
add_rule(world.get_location(LocationName.crazy_gadget_animal_16, player),
lambda state: state.has(ItemName.sonic_light_shoes, player) and
state.has(ItemName.sonic_bounce_bracelet, player) and
state.has(ItemName.sonic_flame_ring, player) and
state.has(ItemName.sonic_mystic_melody, player))
add_rule(world.get_location(LocationName.final_rush_animal_16, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
add_rule(world.get_location(LocationName.white_jungle_animal_16, player),
lambda state: state.has(ItemName.shadow_flame_ring, player) and
state.has(ItemName.shadow_air_shoes, player))
add_rule(world.get_location(LocationName.cannon_core_animal_16, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.eggman_jet_engine, player) and
state.has(ItemName.eggman_large_cannon, player) and
state.has(ItemName.knuckles_air_necklace, player) and
state.has(ItemName.knuckles_hammer_gloves, player))
add_rule(world.get_location(LocationName.pyramid_cave_animal_17, 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(world.get_location(LocationName.final_chase_animal_17, player),
lambda state: state.has(ItemName.shadow_flame_ring, player))
add_rule(world.get_location(LocationName.cannon_core_animal_17, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.eggman_jet_engine, player) and
state.has(ItemName.eggman_large_cannon, player) and
state.has(ItemName.knuckles_air_necklace, player) and
state.has(ItemName.knuckles_hammer_gloves, player) and
(state.has(ItemName.sonic_bounce_bracelet, player) or
state.has(ItemName.sonic_flame_ring, player)))
add_rule(world.get_location(LocationName.pyramid_cave_animal_18, 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(world.get_location(LocationName.cannon_core_animal_18, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.eggman_jet_engine, player) and
state.has(ItemName.eggman_large_cannon, player) and
state.has(ItemName.knuckles_air_necklace, player) and
state.has(ItemName.knuckles_hammer_gloves, player) and
state.has(ItemName.sonic_bounce_bracelet, player))
add_rule(world.get_location(LocationName.pyramid_cave_animal_19, 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(world.get_location(LocationName.cannon_core_animal_19, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.eggman_jet_engine, player) and
state.has(ItemName.eggman_large_cannon, player) and
state.has(ItemName.knuckles_air_necklace, player) and
state.has(ItemName.knuckles_hammer_gloves, player) and
state.has(ItemName.sonic_bounce_bracelet, player) and
state.has(ItemName.sonic_flame_ring, player))
add_rule(world.get_location(LocationName.radical_highway_animal_20, player),
lambda state: state.has(ItemName.shadow_flame_ring, player))
def set_mission_upgrade_rules_hard(world: MultiWorld, player: int):
# Mission 1 Upgrade Requirements
add_rule_safe(world, LocationName.pumpkin_hill_1, player,
@@ -1123,8 +1623,6 @@ def set_mission_upgrade_rules_hard(world: MultiWorld, player: int):
if world.whistlesanity[player].value == 1 or world.whistlesanity[player].value == 3:
add_rule(world.get_location(LocationName.hidden_base_pipe_1, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.eternal_engine_pipe_1, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.cosmic_wall_pipe_1, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
@@ -1359,6 +1857,338 @@ def set_mission_upgrade_rules_hard(world: MultiWorld, player: int):
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.knuckles_hammer_gloves, player))
# Animal Upgrade Requirements
if world.animalsanity[player]:
add_rule(world.get_location(LocationName.hidden_base_animal_2, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.cosmic_wall_animal_2, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.hidden_base_animal_3, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.death_chamber_animal_3, player),
lambda state: state.has(ItemName.knuckles_hammer_gloves, player))
add_rule(world.get_location(LocationName.eternal_engine_animal_3, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.cosmic_wall_animal_3, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.cannon_core_animal_3, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.hidden_base_animal_4, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.death_chamber_animal_4, player),
lambda state: state.has(ItemName.knuckles_hammer_gloves, player))
add_rule(world.get_location(LocationName.eternal_engine_animal_4, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.weapons_bed_animal_4, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.cosmic_wall_animal_4, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.cannon_core_animal_4, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.hidden_base_animal_5, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.death_chamber_animal_5, player),
lambda state: state.has(ItemName.knuckles_hammer_gloves, player))
add_rule(world.get_location(LocationName.eternal_engine_animal_5, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.weapons_bed_animal_5, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.cosmic_wall_animal_5, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.cannon_core_animal_5, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.hidden_base_animal_6, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.death_chamber_animal_6, player),
lambda state: state.has(ItemName.knuckles_hammer_gloves, player))
add_rule(world.get_location(LocationName.eternal_engine_animal_6, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.weapons_bed_animal_6, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.cosmic_wall_animal_6, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.cannon_core_animal_6, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.hidden_base_animal_7, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.death_chamber_animal_7, player),
lambda state: state.has(ItemName.knuckles_shovel_claws, player) and
state.has(ItemName.knuckles_hammer_gloves, player))
add_rule(world.get_location(LocationName.eternal_engine_animal_7, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.weapons_bed_animal_7, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.security_hall_animal_7, player),
lambda state: state.has(ItemName.rouge_pick_nails, player) or
state.has(ItemName.rouge_iron_boots, player))
add_rule(world.get_location(LocationName.cosmic_wall_animal_7, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.cannon_core_animal_7, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.hidden_base_animal_8, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.death_chamber_animal_8, player),
lambda state: state.has(ItemName.knuckles_shovel_claws, player) and
state.has(ItemName.knuckles_hammer_gloves, player))
add_rule(world.get_location(LocationName.eternal_engine_animal_8, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.weapons_bed_animal_8, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.security_hall_animal_8, player),
lambda state: state.has(ItemName.rouge_pick_nails, player) and
state.has(ItemName.rouge_iron_boots, player))
add_rule(world.get_location(LocationName.cosmic_wall_animal_8, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.cannon_core_animal_8, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.eggman_large_cannon, player))
add_rule(world.get_location(LocationName.mission_street_animal_9, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.hidden_base_animal_9, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.death_chamber_animal_9, player),
lambda state: state.has(ItemName.knuckles_shovel_claws, player) and
state.has(ItemName.knuckles_hammer_gloves, player))
add_rule(world.get_location(LocationName.eternal_engine_animal_9, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.final_rush_animal_9, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
add_rule(world.get_location(LocationName.weapons_bed_animal_9, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.cosmic_wall_animal_9, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.cannon_core_animal_9, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.eggman_large_cannon, player))
add_rule(world.get_location(LocationName.wild_canyon_animal_10, player),
lambda state: state.has(ItemName.knuckles_shovel_claws, player))
add_rule(world.get_location(LocationName.mission_street_animal_10, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.aquatic_mine_animal_10, player),
lambda state: state.has(ItemName.knuckles_mystic_melody, player))
add_rule(world.get_location(LocationName.hidden_base_animal_10, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.death_chamber_animal_10, player),
lambda state: state.has(ItemName.knuckles_shovel_claws, player) and
state.has(ItemName.knuckles_hammer_gloves, player))
add_rule(world.get_location(LocationName.eternal_engine_animal_10, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.final_rush_animal_10, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
add_rule(world.get_location(LocationName.egg_quarters_animal_10, player),
lambda state: state.has(ItemName.rouge_iron_boots, player))
add_rule(world.get_location(LocationName.lost_colony_animal_10, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.weapons_bed_animal_10, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.mad_space_animal_10, player),
lambda state: state.has(ItemName.rouge_iron_boots, player))
add_rule(world.get_location(LocationName.cosmic_wall_animal_10, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.cannon_core_animal_10, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.eggman_large_cannon, player))
add_rule(world.get_location(LocationName.mission_street_animal_11, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.hidden_base_animal_11, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.eternal_engine_animal_11, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.tails_bazooka, player))
add_rule(world.get_location(LocationName.final_rush_animal_11, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
add_rule(world.get_location(LocationName.lost_colony_animal_11, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.weapons_bed_animal_11, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.cosmic_wall_animal_11, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.cannon_core_animal_11, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.eggman_large_cannon, player))
add_rule(world.get_location(LocationName.mission_street_animal_12, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.hidden_base_animal_12, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.eternal_engine_animal_12, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.tails_bazooka, player))
add_rule(world.get_location(LocationName.crazy_gadget_animal_12, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player) and
state.has(ItemName.sonic_flame_ring, player))
add_rule(world.get_location(LocationName.final_rush_animal_12, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
add_rule(world.get_location(LocationName.lost_colony_animal_12, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.weapons_bed_animal_12, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.cosmic_wall_animal_12, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.cannon_core_animal_12, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.eggman_large_cannon, player))
add_rule(world.get_location(LocationName.prison_lane_animal_13, player),
lambda state: state.has(ItemName.tails_booster, player) or
state.has(ItemName.tails_bazooka, player))
add_rule(world.get_location(LocationName.mission_street_animal_13, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.hidden_base_animal_13, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.eternal_engine_animal_13, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.tails_bazooka, player))
add_rule(world.get_location(LocationName.crazy_gadget_animal_13, player),
lambda state: state.has(ItemName.sonic_light_shoes, player) and
state.has(ItemName.sonic_flame_ring, player))
add_rule(world.get_location(LocationName.final_rush_animal_13, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
add_rule(world.get_location(LocationName.lost_colony_animal_13, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.weapons_bed_animal_13, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.cosmic_wall_animal_13, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.cannon_core_animal_13, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.eggman_large_cannon, player))
add_rule(world.get_location(LocationName.prison_lane_animal_14, player),
lambda state: state.has(ItemName.tails_bazooka, player))
add_rule(world.get_location(LocationName.mission_street_animal_14, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.hidden_base_animal_14, player),
lambda state: state.has(ItemName.tails_booster, player))
add_rule(world.get_location(LocationName.eternal_engine_animal_14, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.tails_bazooka, player))
add_rule(world.get_location(LocationName.crazy_gadget_animal_14, player),
lambda state: state.has(ItemName.sonic_light_shoes, player) and
state.has(ItemName.sonic_flame_ring, player))
add_rule(world.get_location(LocationName.final_rush_animal_14, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
add_rule(world.get_location(LocationName.lost_colony_animal_14, player),
lambda state: state.has(ItemName.eggman_jet_engine, player) and
state.has(ItemName.eggman_large_cannon, player))
add_rule(world.get_location(LocationName.weapons_bed_animal_14, player),
lambda state: state.has(ItemName.eggman_jet_engine, player) and
state.has(ItemName.eggman_large_cannon, player))
add_rule(world.get_location(LocationName.cosmic_wall_animal_14, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.cannon_core_animal_14, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.eggman_large_cannon, player) and
state.has(ItemName.knuckles_hammer_gloves, player))
add_rule(world.get_location(LocationName.prison_lane_animal_15, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.tails_bazooka, player))
add_rule(world.get_location(LocationName.mission_street_animal_15, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.tails_bazooka, player))
add_rule(world.get_location(LocationName.hidden_base_animal_15, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.tails_bazooka, player))
add_rule(world.get_location(LocationName.eternal_engine_animal_15, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.tails_bazooka, player))
add_rule(world.get_location(LocationName.crazy_gadget_animal_15, player),
lambda state: state.has(ItemName.sonic_light_shoes, player) and
state.has(ItemName.sonic_flame_ring, player))
add_rule(world.get_location(LocationName.final_rush_animal_15, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
add_rule(world.get_location(LocationName.iron_gate_animal_15, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.sand_ocean_animal_15, player),
lambda state: state.has(ItemName.eggman_jet_engine, player) and
state.has(ItemName.eggman_large_cannon, player))
add_rule(world.get_location(LocationName.weapons_bed_animal_15, player),
lambda state: state.has(ItemName.eggman_jet_engine, player) and
state.has(ItemName.eggman_large_cannon, player))
add_rule(world.get_location(LocationName.cosmic_wall_animal_15, player),
lambda state: state.has(ItemName.eggman_jet_engine, player))
add_rule(world.get_location(LocationName.cannon_core_animal_15, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.eggman_large_cannon, player) and
state.has(ItemName.knuckles_hammer_gloves, player))
add_rule(world.get_location(LocationName.mission_street_animal_16, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.tails_bazooka, player))
add_rule(world.get_location(LocationName.crazy_gadget_animal_16, player),
lambda state: state.has(ItemName.sonic_light_shoes, player) and
state.has(ItemName.sonic_flame_ring, player))
add_rule(world.get_location(LocationName.final_rush_animal_16, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player))
add_rule(world.get_location(LocationName.cannon_core_animal_16, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.eggman_large_cannon, player) and
state.has(ItemName.knuckles_hammer_gloves, player))
add_rule(world.get_location(LocationName.final_chase_animal_17, player),
lambda state: state.has(ItemName.shadow_flame_ring, player))
add_rule(world.get_location(LocationName.cannon_core_animal_17, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.eggman_large_cannon, player) and
state.has(ItemName.knuckles_hammer_gloves, player))
add_rule(world.get_location(LocationName.cannon_core_animal_18, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.eggman_large_cannon, player) and
state.has(ItemName.knuckles_hammer_gloves, player))
add_rule(world.get_location(LocationName.pyramid_cave_animal_19, player),
lambda state: state.has(ItemName.sonic_bounce_bracelet, player) and
state.has(ItemName.sonic_mystic_melody, player))
add_rule(world.get_location(LocationName.cannon_core_animal_19, player),
lambda state: state.has(ItemName.tails_booster, player) and
state.has(ItemName.eggman_large_cannon, player) and
state.has(ItemName.knuckles_hammer_gloves, player) and
state.has(ItemName.sonic_flame_ring, player))
add_rule(world.get_location(LocationName.radical_highway_animal_20, player),
lambda state: state.has(ItemName.shadow_flame_ring, player))
def set_boss_gate_rules(world: MultiWorld, player: int, gate_bosses: typing.Dict[int, int]):
for x in range(len(gate_bosses)):
@@ -1367,7 +2197,7 @@ def set_boss_gate_rules(world: MultiWorld, player: int, gate_bosses: typing.Dict
lambda state: state.has(ItemName.knuckles_shovel_claws, player))
def set_rules(world: MultiWorld, player: int, gate_bosses: typing.Dict[int, int], mission_map: typing.Dict[int, int], mission_count_map: typing.Dict[int, int]):
def set_rules(world: MultiWorld, player: int, gate_bosses: typing.Dict[int, int], boss_rush_map: typing.Dict[int, int], mission_map: typing.Dict[int, int], mission_count_map: typing.Dict[int, int]):
# Mission Progression Rules (Mission 1 begets Mission 2, etc.)
set_mission_progress_rules(world, player, mission_map, mission_count_map)
@@ -1378,6 +2208,12 @@ def set_rules(world: MultiWorld, player: int, gate_bosses: typing.Dict[int, int]
elif world.logic_difficulty[player].value == 1:
set_mission_upgrade_rules_hard(world, player)
if world.goal[player] in [4, 5, 6]:
for i in range(16):
if boss_rush_map[i] == 10:
add_rule(world.get_location("Boss Rush - " + str(i + 1), player),
lambda state: (state.has(ItemName.knuckles_shovel_claws, player)))
# Upgrade Requirements for each boss gate
set_boss_gate_rules(world, player, gate_bosses)