Skip to content

Commit

Permalink
enforce helmet checkpoints to always be in logic
Browse files Browse the repository at this point in the history
  • Loading branch information
TheLX5 committed Sep 20, 2024
1 parent 66e2d5f commit f4a8bcf
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 56 deletions.
8 changes: 0 additions & 8 deletions worlds/mmx3/Options.py
Original file line number Diff line number Diff line change
Expand Up @@ -369,12 +369,6 @@ class PlandoWeaknesses(OptionDict):
})
default = {}

class LogicHelmetCheckpoints(Toggle):
"""
Makes the "Use Any Checkpoint" feature from the Helmet Upgrade be in logic
"""
display_name = "Helmet Checkpoints In Logic"

class VoltCatfishTweaks(OptionSet):
"""
Behavior options for Volt Catfish. Everything can be stacked.
Expand Down Expand Up @@ -593,7 +587,6 @@ class SetPalettes(OptionDict):
DisableChargeFreeze,
LongJumps,
ZSaberInPool,
LogicHelmetCheckpoints,
]),
OptionGroup("Boss Weakness Options", [
BossWeaknessRando,
Expand Down Expand Up @@ -685,7 +678,6 @@ class MMX3Options(PerGameCommonOptions):
byte_medal_count: ByteMedalCount
logic_boss_weakness: LogicBossWeakness
logic_vile_required: LogicRequireVileDefeatForDoppler
logic_helmet_checkpoints: LogicHelmetCheckpoints
volt_catfish_tweaks: VoltCatfishTweaks
player_palettes: SetPalettes
palette_default: PaletteDefault
Expand Down
36 changes: 17 additions & 19 deletions worlds/mmx3/Regions.py
Original file line number Diff line number Diff line change
Expand Up @@ -457,25 +457,23 @@ def connect_regions(world: World):

connect(world, RegionName.dr_doppler_lab_4, RegionName.dr_doppler_lab_4_boss)

# Connect checkpoints
if world.options.logic_helmet_checkpoints.value:
# Connect Toxic Seahorse
connect(world, RegionName.toxic_seahorse, RegionName.toxic_seahorse_underwater)
connect(world, RegionName.toxic_seahorse, RegionName.toxic_seahorse_before_boss)

# Connect Tunnel Rhino
connect(world, RegionName.tunnel_rhino, RegionName.tunnel_rhino_wall_jump)
connect(world, RegionName.tunnel_rhino, RegionName.tunnel_rhino_climbing)

# Connect Neon Tiger
connect(world, RegionName.neon_tiger, RegionName.neon_tiger_bit_byte)
connect(world, RegionName.neon_tiger, RegionName.neon_tiger_hill)

# Connect Blast Hornet
connect(world, RegionName.blast_hornet, RegionName.blast_hornet_outside)

# Connect Dr. Doppler Lab levels
connect(world, RegionName.dr_doppler_lab_3, RegionName.dr_doppler_lab_3_after_rematches)
# Connect Toxic Seahorse checkpoints
connect(world, RegionName.toxic_seahorse, RegionName.toxic_seahorse_underwater)
connect(world, RegionName.toxic_seahorse, RegionName.toxic_seahorse_before_boss)

# Connect Tunnel Rhino checkpoints
connect(world, RegionName.tunnel_rhino, RegionName.tunnel_rhino_wall_jump)
connect(world, RegionName.tunnel_rhino, RegionName.tunnel_rhino_climbing)

# Connect Neon Tiger checkpoints
connect(world, RegionName.neon_tiger, RegionName.neon_tiger_bit_byte)
connect(world, RegionName.neon_tiger, RegionName.neon_tiger_hill)

# Connect Blast Hornet checkpoints
connect(world, RegionName.blast_hornet, RegionName.blast_hornet_outside)

# Connect Dr. Doppler Lab levels checkpoints
connect(world, RegionName.dr_doppler_lab_3, RegionName.dr_doppler_lab_3_after_rematches)


def create_region(multiworld: MultiWorld, player: int, active_locations, name: str, locations=None):
Expand Down
51 changes: 22 additions & 29 deletions worlds/mmx3/Rules.py
Original file line number Diff line number Diff line change
Expand Up @@ -322,6 +322,28 @@ def set_rules(world: MMX3World):
)
))

# Handle helmet logic
set_rule(multiworld.get_entrance(f"{RegionName.toxic_seahorse} -> {RegionName.toxic_seahorse_underwater}", player),
lambda state: state.has(ItemName.third_armor_helmet, player, 1))
set_rule(multiworld.get_entrance(f"{RegionName.toxic_seahorse} -> {RegionName.toxic_seahorse_before_boss}", player),
lambda state: state.has(ItemName.third_armor_helmet, player, 1))

set_rule(multiworld.get_entrance(f"{RegionName.tunnel_rhino} -> {RegionName.tunnel_rhino_wall_jump}", player),
lambda state: state.has(ItemName.third_armor_helmet, player, 1))
set_rule(multiworld.get_entrance(f"{RegionName.tunnel_rhino} -> {RegionName.tunnel_rhino_climbing}", player),
lambda state: state.has(ItemName.third_armor_helmet, player, 1))

set_rule(multiworld.get_entrance(f"{RegionName.neon_tiger} -> {RegionName.neon_tiger_bit_byte}", player),
lambda state: state.has(ItemName.third_armor_helmet, player, 1))
set_rule(multiworld.get_entrance(f"{RegionName.neon_tiger} -> {RegionName.neon_tiger_hill}", player),
lambda state: state.has(ItemName.third_armor_helmet, player, 1))

set_rule(multiworld.get_entrance(f"{RegionName.blast_hornet} -> {RegionName.blast_hornet_outside}", player),
lambda state: state.has(ItemName.third_armor_helmet, player, 1))

set_rule(multiworld.get_entrance(f"{RegionName.dr_doppler_lab_3} -> {RegionName.dr_doppler_lab_3_after_rematches}", player),
lambda state: state.has(ItemName.third_armor_helmet, player, 1))

# Handle bosses weakness
if world.options.logic_boss_weakness.value or world.options.boss_weakness_strictness.value >= 2:
add_boss_weakness_logic(world)
Expand All @@ -330,10 +352,6 @@ def set_rules(world: MMX3World):
if world.options.pickupsanity.value:
add_pickupsanity_logic(world)

# Handle helmet logic
if world.options.logic_helmet_checkpoints.value:
add_helmet_logic(world)


def check_weaknesses(state: CollectionState, player: int, rulesets: list) -> bool:
states = list()
Expand Down Expand Up @@ -424,28 +442,3 @@ def add_pickupsanity_logic(world: MMX3World):
lambda state: state.has(ItemName.tornado_fang, player))
set_rule(multiworld.get_location(LocationName.crush_crawfish_1up_2, player),
lambda state: state.has(ItemName.tornado_fang, player))

def add_helmet_logic(world: MMX3World):
player = world.player
multiworld = world.multiworld

set_rule(multiworld.get_entrance(f"{RegionName.toxic_seahorse} -> {RegionName.toxic_seahorse_underwater}", player),
lambda state: state.has(ItemName.third_armor_helmet, player, 1))
set_rule(multiworld.get_entrance(f"{RegionName.toxic_seahorse} -> {RegionName.toxic_seahorse_before_boss}", player),
lambda state: state.has(ItemName.third_armor_helmet, player, 1))

set_rule(multiworld.get_entrance(f"{RegionName.tunnel_rhino} -> {RegionName.tunnel_rhino_wall_jump}", player),
lambda state: state.has(ItemName.third_armor_helmet, player, 1))
set_rule(multiworld.get_entrance(f"{RegionName.tunnel_rhino} -> {RegionName.tunnel_rhino_climbing}", player),
lambda state: state.has(ItemName.third_armor_helmet, player, 1))

set_rule(multiworld.get_entrance(f"{RegionName.neon_tiger} -> {RegionName.neon_tiger_bit_byte}", player),
lambda state: state.has(ItemName.third_armor_helmet, player, 1))
set_rule(multiworld.get_entrance(f"{RegionName.neon_tiger} -> {RegionName.neon_tiger_hill}", player),
lambda state: state.has(ItemName.third_armor_helmet, player, 1))

set_rule(multiworld.get_entrance(f"{RegionName.blast_hornet} -> {RegionName.blast_hornet_outside}", player),
lambda state: state.has(ItemName.third_armor_helmet, player, 1))

set_rule(multiworld.get_entrance(f"{RegionName.dr_doppler_lab_3} -> {RegionName.dr_doppler_lab_3_after_rematches}", player),
lambda state: state.has(ItemName.third_armor_helmet, player, 1))

0 comments on commit f4a8bcf

Please sign in to comment.