Completed initial Inverted implementation
This commit is contained in:
@@ -514,8 +514,6 @@ def analyze_portals(world, player):
|
|||||||
|
|
||||||
def connect_portal(portal, world, player):
|
def connect_portal(portal, world, player):
|
||||||
ent, ext, entrance_name = portal_map[portal.name]
|
ent, ext, entrance_name = portal_map[portal.name]
|
||||||
if world.mode[player] == 'inverted' and portal.name in ['Ganons Tower', 'Agahnims Tower']:
|
|
||||||
ext = 'Inverted ' + ext
|
|
||||||
portal_entrance = world.get_entrance(portal.door.entrance.name, player) # ensures I get the right one for copying
|
portal_entrance = world.get_entrance(portal.door.entrance.name, player) # ensures I get the right one for copying
|
||||||
target_exit = world.get_entrance(ext, player)
|
target_exit = world.get_entrance(ext, player)
|
||||||
portal_entrance.connected_region = target_exit.parent_region
|
portal_entrance.connected_region = target_exit.parent_region
|
||||||
|
|||||||
1395
EntranceShuffle.py
1395
EntranceShuffle.py
File diff suppressed because it is too large
Load Diff
7
Main.py
7
Main.py
@@ -16,7 +16,7 @@ from PotShuffle import shuffle_pots
|
|||||||
from Regions import create_regions, create_shops, mark_light_world_regions, mark_dark_world_regions, create_dungeon_regions, adjust_locations
|
from Regions import create_regions, create_shops, mark_light_world_regions, mark_dark_world_regions, create_dungeon_regions, adjust_locations
|
||||||
from OWEdges import create_owedges
|
from OWEdges import create_owedges
|
||||||
from OverworldShuffle import link_overworld
|
from OverworldShuffle import link_overworld
|
||||||
from EntranceShuffle import link_entrances, link_inverted_entrances
|
from EntranceShuffle import link_entrances
|
||||||
from Rom import patch_rom, patch_race_rom, patch_enemizer, apply_rom_settings, LocalRom, JsonRom, get_hash_string
|
from Rom import patch_rom, patch_race_rom, patch_enemizer, apply_rom_settings, LocalRom, JsonRom, get_hash_string
|
||||||
from Doors import create_doors
|
from Doors import create_doors
|
||||||
from DoorShuffle import link_doors, connect_portal
|
from DoorShuffle import link_doors, connect_portal
|
||||||
@@ -152,10 +152,7 @@ def main(args, seed=None, fish=None):
|
|||||||
logger.info(world.fish.translate("cli","cli","shuffling.world"))
|
logger.info(world.fish.translate("cli","cli","shuffling.world"))
|
||||||
|
|
||||||
for player in range(1, world.players + 1):
|
for player in range(1, world.players + 1):
|
||||||
if world.mode[player] != 'inverted':
|
link_entrances(world, player)
|
||||||
link_entrances(world, player)
|
|
||||||
else:
|
|
||||||
link_inverted_entrances(world, player)
|
|
||||||
|
|
||||||
logger.info(world.fish.translate("cli","cli","shuffling.dungeons"))
|
logger.info(world.fish.translate("cli","cli","shuffling.dungeons"))
|
||||||
|
|
||||||
|
|||||||
2
Rom.py
2
Rom.py
@@ -700,7 +700,7 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False):
|
|||||||
if should_be_bunny(sanc_region, world.mode[player]):
|
if should_be_bunny(sanc_region, world.mode[player]):
|
||||||
rom.write_bytes(0x13fff2, [0x12, 0x00])
|
rom.write_bytes(0x13fff2, [0x12, 0x00])
|
||||||
|
|
||||||
lh_name = 'Links House' if world.mode[player] != 'inverted' else 'Inverted Links House'
|
lh_name = 'Links House'
|
||||||
links_house = world.get_region(lh_name, player)
|
links_house = world.get_region(lh_name, player)
|
||||||
if should_be_bunny(links_house, world.mode[player]):
|
if should_be_bunny(links_house, world.mode[player]):
|
||||||
rom.write_bytes(0x13fff0, [0x04, 0x01])
|
rom.write_bytes(0x13fff0, [0x04, 0x01])
|
||||||
|
|||||||
17
Rules.py
17
Rules.py
@@ -1889,7 +1889,7 @@ def set_big_bomb_rules(world, player):
|
|||||||
#add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: (state.can_lift_heavy_rocks(player) and state.has('Flippers', player) and state.can_flute(player) and state.has('Hammer', player) and state.has('Hookshot', player) and state.has_Pearl(player) and state.has_Mirror(player)))
|
#add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: (state.can_lift_heavy_rocks(player) and state.has('Flippers', player) and state.can_flute(player) and state.has('Hammer', player) and state.has('Hookshot', player) and state.has_Pearl(player) and state.has_Mirror(player)))
|
||||||
|
|
||||||
def set_inverted_big_bomb_rules(world, player):
|
def set_inverted_big_bomb_rules(world, player):
|
||||||
bombshop_entrance = world.get_region('Links House', player).entrances[0]
|
bombshop_entrance = world.get_region('Big Bomb Shop', player).entrances[0]
|
||||||
Normal_LW_entrances = ['Blinds Hideout',
|
Normal_LW_entrances = ['Blinds Hideout',
|
||||||
'Bonk Fairy (Light)',
|
'Bonk Fairy (Light)',
|
||||||
'Lake Hylia Fairy',
|
'Lake Hylia Fairy',
|
||||||
@@ -2008,7 +2008,7 @@ def set_inverted_big_bomb_rules(world, player):
|
|||||||
'Spectacle Rock Cave (Bottom)']
|
'Spectacle Rock Cave (Bottom)']
|
||||||
|
|
||||||
set_rule(world.get_entrance('Pyramid Fairy', player),
|
set_rule(world.get_entrance('Pyramid Fairy', player),
|
||||||
lambda state: state.can_reach('East Dark World', 'Region', player) and state.can_reach('Links House', 'Region', player) and state.has('Crystal 5', player) and state.has('Crystal 6', player))
|
lambda state: state.can_reach('Pyramid Area', 'Region', player) and state.can_reach('Big Bomb Shop', 'Region', player) and state.has('Crystal 5', player) and state.has('Crystal 6', player))
|
||||||
|
|
||||||
# Key for below abbreviations:
|
# Key for below abbreviations:
|
||||||
# P = pearl
|
# P = pearl
|
||||||
@@ -2028,25 +2028,25 @@ def set_inverted_big_bomb_rules(world, player):
|
|||||||
elif bombshop_entrance.name in Northern_DW_entrances:
|
elif bombshop_entrance.name in Northern_DW_entrances:
|
||||||
# You can just fly with the Flute, you can take a long walk with Mitts and Hammer,
|
# You can just fly with the Flute, you can take a long walk with Mitts and Hammer,
|
||||||
# or you can leave a Mirror portal nearby and then walk to the castle to Mirror again.
|
# or you can leave a Mirror portal nearby and then walk to the castle to Mirror again.
|
||||||
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.can_flute or (state.can_lift_heavy_rocks(player) and state.has('Hammer', player)) or (state.has_Mirror(player) and state.can_reach('Light World', 'Region', player)))
|
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.can_flute or (state.can_lift_heavy_rocks(player) and state.has('Hammer', player)) or (state.has_Mirror(player) and state.can_reach('Hyrule Castle Area', 'Region', player)))
|
||||||
elif bombshop_entrance.name in Southern_DW_entrances:
|
elif bombshop_entrance.name in Southern_DW_entrances:
|
||||||
# This is the same as north DW without the Mitts rock present.
|
# This is the same as north DW without the Mitts rock present.
|
||||||
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.has('Hammer', player) or state.can_flute(player) or (state.has_Mirror(player) and state.can_reach('Light World', 'Region', player)))
|
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.has('Hammer', player) or state.can_flute(player) or (state.has_Mirror(player) and state.can_reach('Hyrule Castle Area', 'Region', player)))
|
||||||
elif bombshop_entrance.name in Isolated_DW_entrances:
|
elif bombshop_entrance.name in Isolated_DW_entrances:
|
||||||
# There's just no way to escape these places with the bomb and no Flute.
|
# There's just no way to escape these places with the bomb and no Flute.
|
||||||
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.can_flute(player))
|
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.can_flute(player))
|
||||||
elif bombshop_entrance.name in LW_walkable_entrances:
|
elif bombshop_entrance.name in LW_walkable_entrances:
|
||||||
# You can fly with the flute, or leave a mirror portal and walk through the light world
|
# You can fly with the flute, or leave a mirror portal and walk through the light world
|
||||||
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.can_flute(player) or (state.has_Mirror(player) and state.can_reach('Light World', 'Region', player)))
|
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.can_flute(player) or (state.has_Mirror(player) and state.can_reach('Hyrule Castle Area', 'Region', player)))
|
||||||
elif bombshop_entrance.name in LW_bush_entrances:
|
elif bombshop_entrance.name in LW_bush_entrances:
|
||||||
# These entrances are behind bushes in LW so you need either Pearl or the tools to solve NDW bomb shop locations.
|
# These entrances are behind bushes in LW so you need either Pearl or the tools to solve NDW bomb shop locations.
|
||||||
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.has_Mirror(player) and (state.can_flute(player) or state.has_Pearl(player) or (state.can_lift_heavy_rocks(player) and state.has('Hammer', player))))
|
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.has_Mirror(player) and (state.can_flute(player) or state.has_Pearl(player) or (state.can_lift_heavy_rocks(player) and state.has('Hammer', player))))
|
||||||
elif bombshop_entrance.name == 'Dark World Shop':
|
elif bombshop_entrance.name == 'Dark World Shop':
|
||||||
# This is mostly the same as NDW but the Mirror path requires the Pearl, or using the Hammer
|
# This is mostly the same as NDW but the Mirror path requires the Pearl, or using the Hammer
|
||||||
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.can_flute or (state.can_lift_heavy_rocks(player) and state.has('Hammer', player)) or (state.has_Mirror(player) and state.can_reach('Light World', 'Region', player) and (state.has_Pearl(player) or state.has('Hammer', player))))
|
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.can_flute or (state.can_lift_heavy_rocks(player) and state.has('Hammer', player)) or (state.has_Mirror(player) and state.can_reach('Hyrule Castle Area', 'Region', player) and (state.has_Pearl(player) or state.has('Hammer', player))))
|
||||||
elif bombshop_entrance.name == 'Bumper Cave (Bottom)':
|
elif bombshop_entrance.name == 'Bumper Cave (Bottom)':
|
||||||
# This is mostly the same as NDW but the Mirror path requires being able to lift a rock.
|
# This is mostly the same as NDW but the Mirror path requires being able to lift a rock.
|
||||||
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.can_flute or (state.can_lift_heavy_rocks(player) and state.has('Hammer', player)) or (state.has_Mirror(player) and state.can_lift_rocks(player) and state.can_reach('Light World', 'Region', player)))
|
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.can_flute or (state.can_lift_heavy_rocks(player) and state.has('Hammer', player)) or (state.has_Mirror(player) and state.can_lift_rocks(player) and state.can_reach('Hyrule Castle Area', 'Region', player)))
|
||||||
elif bombshop_entrance.name == 'Old Man Cave (West)':
|
elif bombshop_entrance.name == 'Old Man Cave (West)':
|
||||||
# The three paths back are Mirror and DW walk, Mirror and Flute, or LW walk and then Mirror.
|
# The three paths back are Mirror and DW walk, Mirror and Flute, or LW walk and then Mirror.
|
||||||
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.has_Mirror(player) and ((state.can_lift_heavy_rocks(player) and state.has('Hammer', player)) or (state.can_lift_rocks(player) and state.has_Pearl(player)) or state.can_flute(player)))
|
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.has_Mirror(player) and ((state.can_lift_heavy_rocks(player) and state.has('Hammer', player)) or (state.can_lift_rocks(player) and state.has_Pearl(player)) or state.can_flute(player)))
|
||||||
@@ -2079,6 +2079,9 @@ def set_inverted_big_bomb_rules(world, player):
|
|||||||
set_rule(world.get_entrance('Pyramid Fairy', player), lambda state: False)
|
set_rule(world.get_entrance('Pyramid Fairy', player), lambda state: False)
|
||||||
else:
|
else:
|
||||||
raise Exception('No logic found for routing from %s to the pyramid.' % bombshop_entrance.name)
|
raise Exception('No logic found for routing from %s to the pyramid.' % bombshop_entrance.name)
|
||||||
|
|
||||||
|
if world.owShuffle[player] != 'vanilla':
|
||||||
|
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: False) #temp disable progression until routing to Pyramid get be guaranteed
|
||||||
|
|
||||||
|
|
||||||
def set_bunny_rules(world, player, inverted):
|
def set_bunny_rules(world, player, inverted):
|
||||||
|
|||||||
Reference in New Issue
Block a user