LTTP: ToH Crystal Switch Logic (#3172)
This commit is contained in:
parent
6087ec539b
commit
b372b9da20
|
@ -18,7 +18,8 @@ from .StateHelpers import (can_extend_magic, can_kill_most_things,
|
|||
can_shoot_arrows, has_beam_sword, has_crystals,
|
||||
has_fire_source, has_hearts, has_melee_weapon,
|
||||
has_misery_mire_medallion, has_sword, has_turtle_rock_medallion,
|
||||
has_triforce_pieces, can_use_bombs, can_bomb_or_bonk)
|
||||
has_triforce_pieces, can_use_bombs, can_bomb_or_bonk,
|
||||
can_activate_crystal_switch)
|
||||
from .UnderworldGlitchRules import underworld_glitches_rules
|
||||
|
||||
|
||||
|
@ -357,8 +358,10 @@ def global_rules(multiworld: MultiWorld, player: int):
|
|||
if not (multiworld.small_key_shuffle[player] and multiworld.big_key_shuffle[player]):
|
||||
add_rule(multiworld.get_location('Desert Palace - Prize', player), lambda state: state.multiworld.get_region('Desert Palace Main (Outer)', player).can_reach(state))
|
||||
|
||||
set_rule(multiworld.get_entrance('Tower of Hera Small Key Door', player), lambda state: state._lttp_has_key('Small Key (Tower of Hera)', player) or location_item_name(state, 'Tower of Hera - Big Key Chest', player) == ('Small Key (Tower of Hera)', player))
|
||||
set_rule(multiworld.get_entrance('Tower of Hera Big Key Door', player), lambda state: state.has('Big Key (Tower of Hera)', player))
|
||||
set_rule(multiworld.get_location('Tower of Hera - Basement Cage', player), lambda state: can_activate_crystal_switch(state, player))
|
||||
set_rule(multiworld.get_location('Tower of Hera - Map Chest', player), lambda state: can_activate_crystal_switch(state, player))
|
||||
set_rule(multiworld.get_entrance('Tower of Hera Small Key Door', player), lambda state: can_activate_crystal_switch(state, player) and (state._lttp_has_key('Small Key (Tower of Hera)', player) or location_item_name(state, 'Tower of Hera - Big Key Chest', player) == ('Small Key (Tower of Hera)', player)))
|
||||
set_rule(multiworld.get_entrance('Tower of Hera Big Key Door', player), lambda state: can_activate_crystal_switch(state, player) and state.has('Big Key (Tower of Hera)', player))
|
||||
if multiworld.enemy_shuffle[player]:
|
||||
add_rule(multiworld.get_entrance('Tower of Hera Big Key Door', player), lambda state: can_kill_most_things(state, player, 3))
|
||||
else:
|
||||
|
|
|
@ -106,6 +106,12 @@ def can_bomb_or_bonk(state: CollectionState, player: int) -> bool:
|
|||
return state.has("Pegasus Boots", player) or can_use_bombs(state, player)
|
||||
|
||||
|
||||
def can_activate_crystal_switch(state: CollectionState, player: int) -> bool:
|
||||
return (has_melee_weapon(state, player) or can_use_bombs(state, player) or can_shoot_arrows(state, player)
|
||||
or state.has_any(["Hookshot", "Cane of Somaria", "Cane of Byrna", "Fire Rod", "Ice Rod", "Blue Boomerang",
|
||||
"Red Boomerang"], player))
|
||||
|
||||
|
||||
def can_kill_most_things(state: CollectionState, player: int, enemies: int = 5) -> bool:
|
||||
if state.multiworld.enemy_shuffle[player]:
|
||||
# I don't fully understand Enemizer's logic for placing enemies in spots where they need to be killable, if any.
|
||||
|
@ -173,6 +179,7 @@ def can_melt_things(state: CollectionState, player: int) -> bool:
|
|||
def has_misery_mire_medallion(state: CollectionState, player: int) -> bool:
|
||||
return state.has(state.multiworld.worlds[player].required_medallions[0], player)
|
||||
|
||||
|
||||
def has_turtle_rock_medallion(state: CollectionState, player: int) -> bool:
|
||||
return state.has(state.multiworld.worlds[player].required_medallions[1], player)
|
||||
|
||||
|
|
|
@ -9,12 +9,16 @@ class TestTowerOfHera(TestDungeon):
|
|||
["Tower of Hera - Big Key Chest", False, []],
|
||||
["Tower of Hera - Big Key Chest", False, [], ['Small Key (Tower of Hera)']],
|
||||
["Tower of Hera - Big Key Chest", False, [], ['Lamp', 'Fire Rod']],
|
||||
["Tower of Hera - Big Key Chest", True, ['Small Key (Tower of Hera)', 'Lamp']],
|
||||
["Tower of Hera - Big Key Chest", True, ['Small Key (Tower of Hera)', 'Lamp', 'Bomb Upgrade (50)']],
|
||||
["Tower of Hera - Big Key Chest", True, ['Small Key (Tower of Hera)', 'Fire Rod']],
|
||||
|
||||
["Tower of Hera - Basement Cage", True, []],
|
||||
["Tower of Hera - Basement Cage", False, []],
|
||||
["Tower of Hera - Basement Cage", True, ['Bomb Upgrade (50)']],
|
||||
["Tower of Hera - Basement Cage", True, ['Progressive Sword']],
|
||||
|
||||
["Tower of Hera - Map Chest", True, []],
|
||||
["Tower of Hera - Map Chest", False, []],
|
||||
["Tower of Hera - Map Chest", True, ['Bomb Upgrade (50)']],
|
||||
["Tower of Hera - Map Chest", True, ['Progressive Sword']],
|
||||
|
||||
["Tower of Hera - Compass Chest", False, []],
|
||||
["Tower of Hera - Compass Chest", False, [], ['Big Key (Tower of Hera)']],
|
||||
|
|
|
@ -41,7 +41,8 @@ class TestDungeons(TestInvertedOWG):
|
|||
|
||||
["Tower of Hera - Basement Cage", False, []],
|
||||
["Tower of Hera - Basement Cage", False, [], ['Moon Pearl']],
|
||||
["Tower of Hera - Basement Cage", True, ['Pegasus Boots', 'Moon Pearl']],
|
||||
["Tower of Hera - Basement Cage", True, ['Pegasus Boots', 'Moon Pearl', 'Bomb Upgrade (50)']],
|
||||
["Tower of Hera - Basement Cage", True, ['Pegasus Boots', 'Moon Pearl', 'Progressive Sword']],
|
||||
|
||||
["Castle Tower - Room 03", False, []],
|
||||
["Castle Tower - Room 03", False, [], ['Bomb Upgrade (+5)', 'Bomb Upgrade (+10)', 'Bomb Upgrade (50)', 'Progressive Sword', 'Hammer', 'Progressive Bow', 'Fire Rod', 'Ice Rod', 'Cane of Somaria', 'Cane of Byrna']],
|
||||
|
|
|
@ -34,11 +34,11 @@ class TestDungeons(TestVanillaOWG):
|
|||
["Tower of Hera - Basement Cage", False, [], ['Pegasus Boots', "Flute", "Lamp"]],
|
||||
["Tower of Hera - Basement Cage", False, [], ['Pegasus Boots', "Magic Mirror", "Hammer"]],
|
||||
["Tower of Hera - Basement Cage", False, [], ['Pegasus Boots', "Magic Mirror", "Hookshot"]],
|
||||
["Tower of Hera - Basement Cage", True, ['Pegasus Boots']],
|
||||
["Tower of Hera - Basement Cage", True, ["Flute", "Magic Mirror"]],
|
||||
["Tower of Hera - Basement Cage", True, ["Progressive Glove", "Lamp", "Magic Mirror"]],
|
||||
["Tower of Hera - Basement Cage", True, ['Pegasus Boots', 'Bomb Upgrade (50)']],
|
||||
["Tower of Hera - Basement Cage", True, ["Flute", "Magic Mirror", 'Bomb Upgrade (50)']],
|
||||
["Tower of Hera - Basement Cage", True, ["Progressive Glove", "Lamp", "Magic Mirror", 'Bomb Upgrade (50)']],
|
||||
["Tower of Hera - Basement Cage", True, ["Flute", "Hookshot", "Hammer"]],
|
||||
["Tower of Hera - Basement Cage", True, ["Progressive Glove", "Lamp", "Magic Mirror"]],
|
||||
["Tower of Hera - Basement Cage", True, ["Progressive Glove", "Lamp", "Magic Mirror", 'Bomb Upgrade (50)']],
|
||||
|
||||
["Castle Tower - Room 03", False, []],
|
||||
["Castle Tower - Room 03", False, ['Progressive Sword'], ['Progressive Sword', 'Cape', 'Beat Agahnim 1']],
|
||||
|
|
Loading…
Reference in New Issue