Some Inverted situations getting applied/removed in Mixed OW
This commit is contained in:
@@ -104,6 +104,7 @@ class World(object):
|
||||
self.__dict__.setdefault(attr, {})[player] = val
|
||||
set_player_attr('_region_cache', {})
|
||||
set_player_attr('player_names', [])
|
||||
set_player_attr('owswaps', [[],[],[]])
|
||||
set_player_attr('remote_items', False)
|
||||
set_player_attr('required_medallions', ['Ether', 'Quake'])
|
||||
set_player_attr('swamp_patch_required', False)
|
||||
@@ -111,7 +112,7 @@ class World(object):
|
||||
set_player_attr('ganon_at_pyramid', True)
|
||||
set_player_attr('ganonstower_vanilla', True)
|
||||
set_player_attr('sewer_light_cone', self.mode[player] == 'standard')
|
||||
set_player_attr('fix_trock_doors', self.shuffle[player] != 'vanilla' or self.mode[player] == 'inverted')
|
||||
set_player_attr('fix_trock_doors', self.shuffle[player] != 'vanilla' or ((self.mode[player] == 'inverted') != (0x05 in self.owswaps[player][0] and self.owMixed[player])))
|
||||
set_player_attr('fix_skullwoods_exit', self.shuffle[player] not in ['vanilla', 'simple', 'restricted', 'dungeonssimple'] or self.doorShuffle[player] not in ['vanilla'])
|
||||
set_player_attr('fix_palaceofdarkness_exit', self.shuffle[player] not in ['vanilla', 'simple', 'restricted', 'dungeonssimple'])
|
||||
set_player_attr('fix_trock_exit', self.shuffle[player] not in ['vanilla', 'simple', 'restricted', 'dungeonssimple'])
|
||||
@@ -149,7 +150,6 @@ class World(object):
|
||||
set_player_attr('mixed_travel', 'prevent')
|
||||
set_player_attr('standardize_palettes', 'standardize')
|
||||
set_player_attr('force_fix', {'gt': False, 'sw': False, 'pod': False, 'tr': False})
|
||||
set_player_attr('owswaps', [[],[],[]])
|
||||
set_player_attr('prizes', {'pull': [0, 0, 0], 'crab': [0, 0], 'stun': 0, 'fish': 0})
|
||||
|
||||
set_player_attr('exp_cache', defaultdict(dict))
|
||||
@@ -3049,7 +3049,6 @@ class Settings(object):
|
||||
args.shufflepots[p] = True if settings[7] & 0x4 else False
|
||||
|
||||
|
||||
@unique
|
||||
class KeyRuleType(FastEnum):
|
||||
WorstCase = 0
|
||||
AllowSmall = 1
|
||||
|
||||
@@ -89,7 +89,7 @@ def link_doors_main(world, player):
|
||||
if world.mode[player] == 'standard':
|
||||
world.get_portal('Sanctuary', player).destination = True
|
||||
world.get_portal('Desert East', player).destination = True
|
||||
if world.mode[player] == 'inverted':
|
||||
if (world.mode[player] == 'inverted') != (0x30 in world.owswaps[player][0] and world.owMixed[player]):
|
||||
world.get_portal('Desert West', player).destination = True
|
||||
else:
|
||||
world.get_portal('Skull 2 West', player).destination = True
|
||||
@@ -1838,7 +1838,9 @@ def find_accessible_entrances(world, player, builder):
|
||||
elif world.mode[player] != 'inverted':
|
||||
start_regions = ['Links House', 'Sanctuary']
|
||||
else:
|
||||
start_regions = ['Links House', 'Dark Sanctuary Hint', 'Hyrule Castle Ledge']
|
||||
start_regions = ['Links House', 'Dark Sanctuary Hint']
|
||||
if (world.mode[player] == 'inverted') != (0x1b in world.owswaps[player][0] and world.owMixed[player]):
|
||||
start_regions.append('Hyrule Castle Ledge')
|
||||
regs = convert_regions(start_regions, world, player)
|
||||
visited_regions = set()
|
||||
visited_entrances = []
|
||||
@@ -1853,7 +1855,7 @@ def find_accessible_entrances(world, player, builder):
|
||||
while len(queue) > 0:
|
||||
next_region = queue.popleft()
|
||||
visited_regions.add(next_region)
|
||||
if world.mode[player] == 'inverted' and next_region.name == 'Tower Agahnim 1':
|
||||
if (world.mode[player] == 'inverted') != (0x1b in world.owswaps[player][0] and world.owMixed[player]) and next_region.name == 'Tower Agahnim 1':
|
||||
connect = world.get_region('Hyrule Castle Ledge', player)
|
||||
if connect not in queue and connect not in visited_regions:
|
||||
queue.append(connect)
|
||||
|
||||
@@ -1230,6 +1230,7 @@ def simple_shuffle_dungeons(world, player):
|
||||
dungeon_entrances.append('Ganons Tower')
|
||||
dungeon_exits.append('Ganons Tower Exit')
|
||||
else:
|
||||
# TODO: Should we be ignoring world.shuffle_ganon??
|
||||
dungeon_entrances.append('Ganons Tower')
|
||||
dungeon_exits.append('Agahnims Tower Exit')
|
||||
|
||||
|
||||
2
Fill.py
2
Fill.py
@@ -697,7 +697,7 @@ def balance_money_progression(world):
|
||||
sphere_locations = get_sphere_locations(state, unchecked_locations)
|
||||
checked_locations = []
|
||||
for player in range(1, world.players+1):
|
||||
kiki_payable = state.prog_items[('Moon Pearl', player)] > 0 or world.mode[player] == 'inverted'
|
||||
kiki_payable = state.prog_items[('Moon Pearl', player)] > 0 or (world.mode[player] == 'inverted') != (0x1e in world.owswaps[player][0] and world.owMixed[player])
|
||||
if kiki_payable and world.get_region('Palace of Darkness Area', player) in state.reachable_regions[player]:
|
||||
if not kiki_paid[player]:
|
||||
kiki_check[player] = True
|
||||
|
||||
@@ -398,6 +398,7 @@ def set_up_take_anys(world, player):
|
||||
if world.mode[player] == 'inverted':
|
||||
if 'Dark Sanctuary Hint' in take_any_locations:
|
||||
take_any_locations.remove('Dark Sanctuary Hint')
|
||||
if (world.mode[player] == 'inverted') != (0x29 in world.owswaps[player][0] and world.owMixed[player]):
|
||||
if 'Archery Game' in take_any_locations:
|
||||
take_any_locations.remove('Archery Game')
|
||||
|
||||
|
||||
@@ -1898,7 +1898,7 @@ def val_mire(key_logic, world, player):
|
||||
|
||||
def val_turtle(key_logic, world, player):
|
||||
# todo: check vanilla key logic when TR back doors are accessible
|
||||
if world.shuffle[player] == 'vanilla' and world.mode[player] != 'inverted' and world.logic[player] in ('noglitches', 'minorglitches'):
|
||||
if world.shuffle[player] == 'vanilla' and (world.mode[player] == 'inverted') == (0x05 in world.owswaps[player][0] and world.owMixed[player]) and world.logic[player] in ('noglitches', 'minorglitches'):
|
||||
val_rule(key_logic.door_rules['TR Hub NW'], 1)
|
||||
val_rule(key_logic.door_rules['TR Pokey 1 NW'], 2)
|
||||
val_rule(key_logic.door_rules['TR Chain Chomps Down Stairs'], 3)
|
||||
|
||||
@@ -1116,7 +1116,7 @@ def mark_dark_world_regions(world, player):
|
||||
def create_shops(world, player):
|
||||
world.shops[player] = []
|
||||
for region_name, (room_id, type, shopkeeper, custom, locked, inventory, sram) in shop_table.items():
|
||||
if world.mode[player] == 'inverted' and region_name == 'Dark Lake Hylia Shop':
|
||||
if (world.mode[player] == 'inverted') != (0x35 in world.owswaps[player][0] and world.owMixed[player]) and region_name == 'Dark Lake Hylia Shop':
|
||||
locked = True
|
||||
inventory = [('Blue Potion', 160), ('Blue Shield', 50), ('Bombs (10)', 50)]
|
||||
region = world.get_region(region_name, player)
|
||||
|
||||
1
Rom.py
1
Rom.py
@@ -2471,6 +2471,7 @@ def set_inverted_mode(world, player, rom, inverted_buffer):
|
||||
if world.doorShuffle[player] == 'vanilla' or world.intensity[player] < 3:
|
||||
write_int16(rom, 0x15AEE + 2*0x38, 0x00E0)
|
||||
write_int16(rom, 0x15AEE + 2*0x25, 0x000C)
|
||||
|
||||
if (world.mode[player] == 'inverted') != (0x03 in world.owswaps[player][0] and world.owMixed[player]):
|
||||
if world.shuffle[player] in ['vanilla', 'dungeonsfull', 'dungeonssimple']:
|
||||
rom.write_bytes(snes_to_pc(0x308350), [0x00, 0x00, 0x01]) # mountain cave starts on OW
|
||||
|
||||
2
Rules.py
2
Rules.py
@@ -1491,8 +1491,8 @@ def swordless_rules(world, player):
|
||||
|
||||
set_rule(world.get_entrance('Misery Mire', player), lambda state: state.has_misery_mire_medallion(player)) # sword not required to use medallion for opening in swordless (!)
|
||||
set_rule(world.get_entrance('Turtle Rock', player), lambda state: state.has_turtle_rock_medallion(player) and state.can_reach('Turtle Rock Ledge', 'Region', player)) # sword not required to use medallion for opening in swordless (!)
|
||||
add_bunny_rule(world.get_entrance('Turtle Rock', player), player)
|
||||
add_bunny_rule(world.get_entrance('Misery Mire', player), player)
|
||||
add_bunny_rule(world.get_entrance('Turtle Rock', player), player)
|
||||
|
||||
std_kill_rooms = {
|
||||
'Hyrule Dungeon Armory Main': ['Hyrule Dungeon Armory S', 'Hyrule Dungeon Armory ES'], # One green guard
|
||||
|
||||
Reference in New Issue
Block a user