Changed copy_world_limited to premature and made it only for one player

This commit is contained in:
codemann8
2022-10-30 15:52:40 -05:00
parent 6d434918e1
commit d532a579e8
3 changed files with 52 additions and 52 deletions

View File

@@ -1440,12 +1440,12 @@ def place_old_man(world, pool, player, ignore_list=[]):
def junk_fill_inaccessible(world, player): def junk_fill_inaccessible(world, player):
from Main import copy_world_limited from Main import copy_world_premature
find_inaccessible_regions(world, player) find_inaccessible_regions(world, player)
for p in range(1, world.players + 1): for p in range(1, world.players + 1):
world.key_logic[p] = {} world.key_logic[p] = {}
base_world = copy_world_limited(world) base_world = copy_world_premature(world, player)
base_world.override_bomb_check = True base_world.override_bomb_check = True
# remove regions that have a dungeon entrance # remove regions that have a dungeon entrance
@@ -1602,12 +1602,12 @@ def unbias_dungeons(Dungeon_Exits):
def build_accessible_entrance_list(world, start_region, player, assumed_inventory=[], cross_world=False, region_rules=True, exit_rules=True, include_one_ways=False): def build_accessible_entrance_list(world, start_region, player, assumed_inventory=[], cross_world=False, region_rules=True, exit_rules=True, include_one_ways=False):
from Main import copy_world_limited from Main import copy_world_premature
from Items import ItemFactory from Items import ItemFactory
for p in range(1, world.players + 1): for p in range(1, world.players + 1):
world.key_logic[p] = {} world.key_logic[p] = {}
base_world = copy_world_limited(world) base_world = copy_world_premature(world, player)
base_world.override_bomb_check = True base_world.override_bomb_check = True
connect_simple(base_world, 'Links House S&Q', start_region, player) connect_simple(base_world, 'Links House S&Q', start_region, player)
@@ -1710,12 +1710,12 @@ def get_distant_entrances(world, start_entrance, player):
def can_reach(world, entrance_name, region_name, player): def can_reach(world, entrance_name, region_name, player):
from Main import copy_world_limited from Main import copy_world_premature
from Items import ItemFactory from Items import ItemFactory
for p in range(1, world.players + 1): for p in range(1, world.players + 1):
world.key_logic[p] = {} world.key_logic[p] = {}
base_world = copy_world_limited(world) base_world = copy_world_premature(world, player)
base_world.override_bomb_check = True base_world.override_bomb_check = True
entrance = world.get_entrance(entrance_name, player) entrance = world.get_entrance(entrance_name, player)

10
Main.py
View File

@@ -558,7 +558,7 @@ def copy_world(world):
return ret return ret
def copy_world_limited(world): def copy_world_premature(world, player):
# ToDo: Not good yet # ToDo: Not good yet
ret = World(world.players, world.owShuffle, world.owCrossed, world.owMixed, world.shuffle, world.doorShuffle, world.logic, world.mode, world.swords, ret = World(world.players, world.owShuffle, world.owCrossed, world.owMixed, world.shuffle, world.doorShuffle, world.logic, world.mode, world.swords,
world.difficulty, world.difficulty_adjustments, world.timer, world.progressive, world.goal, world.algorithm, world.difficulty, world.difficulty_adjustments, world.timer, world.progressive, world.goal, world.algorithm,
@@ -621,7 +621,6 @@ def copy_world_limited(world):
ret.is_copied_world = True ret.is_copied_world = True
for player in range(1, world.players + 1):
create_regions(ret, player) create_regions(ret, player)
update_world_regions(ret, player) update_world_regions(ret, player)
if world.logic[player] in ('owglitches', 'nologic'): if world.logic[player] in ('owglitches', 'nologic'):
@@ -634,7 +633,6 @@ def copy_world_limited(world):
create_rooms(ret, player) create_rooms(ret, player)
create_dungeons(ret, player) create_dungeons(ret, player)
for player in range(1, world.players + 1):
if world.mode[player] == 'standard': if world.mode[player] == 'standard':
parent = ret.get_region('Menu', player) parent = ret.get_region('Menu', player)
target = ret.get_region('Hyrule Castle Secret Entrance', player) target = ret.get_region('Hyrule Castle Secret Entrance', player)
@@ -645,6 +643,7 @@ def copy_world_limited(world):
# connect copied world # connect copied world
copied_locations = {(loc.name, loc.player): loc for loc in ret.get_locations()} # caches all locations copied_locations = {(loc.name, loc.player): loc for loc in ret.get_locations()} # caches all locations
for region in world.regions: for region in world.regions:
if region.player == player:
copied_region = ret.get_region(region.name, region.player) copied_region = ret.get_region(region.name, region.player)
copied_region.is_light_world = region.is_light_world copied_region.is_light_world = region.is_light_world
copied_region.is_dark_world = region.is_dark_world copied_region.is_dark_world = region.is_dark_world
@@ -656,15 +655,17 @@ def copy_world_limited(world):
ret.get_entrance(entrance.name, entrance.player).connect(copied_region) ret.get_entrance(entrance.name, entrance.player).connect(copied_region)
for item in world.precollected_items: for item in world.precollected_items:
if item.player == player:
ret.push_precollected(ItemFactory(item.name, item.player)) ret.push_precollected(ItemFactory(item.name, item.player))
for edge in world.owedges: for edge in world.owedges:
if edge.dest is not None: if edge.player == player and edge.dest:
copiededge = ret.check_for_owedge(edge.name, edge.player) copiededge = ret.check_for_owedge(edge.name, edge.player)
if copiededge is not None: if copiededge is not None:
copiededge.dest = ret.check_for_owedge(edge.dest.name, edge.dest.player) copiededge.dest = ret.check_for_owedge(edge.dest.name, edge.dest.player)
for door in world.doors: for door in world.doors:
if door.player == player:
entrance = ret.check_for_entrance(door.name, door.player) entrance = ret.check_for_entrance(door.name, door.player)
if entrance is not None: if entrance is not None:
destdoor = ret.check_for_door(entrance.door.name, entrance.door.player) destdoor = ret.check_for_door(entrance.door.name, entrance.door.player)
@@ -675,7 +676,6 @@ def copy_world_limited(world):
ret.key_logic = world.key_logic.copy() ret.key_logic = world.key_logic.copy()
from OverworldShuffle import categorize_world_regions from OverworldShuffle import categorize_world_regions
for player in range(1, world.players + 1):
categorize_world_regions(ret, player) categorize_world_regions(ret, player)
set_rules(ret, player) set_rules(ret, player)

View File

@@ -904,13 +904,13 @@ def can_reach_smith(world, player):
return found return found
def build_sectors(world, player): def build_sectors(world, player):
from Main import copy_world_limited from Main import copy_world_premature
from OWEdges import OWTileRegions from OWEdges import OWTileRegions
# perform accessibility check on duplicate world # perform accessibility check on duplicate world
for p in range(1, world.players + 1): for p in range(1, world.players + 1):
world.key_logic[p] = {} world.key_logic[p] = {}
base_world = copy_world_limited(world) base_world = copy_world_premature(world, player)
# build lists of contiguous regions accessible with full inventory (excl portals/mirror/flute/entrances) # build lists of contiguous regions accessible with full inventory (excl portals/mirror/flute/entrances)
regions = list(OWTileRegions.copy().keys()) regions = list(OWTileRegions.copy().keys())
@@ -970,7 +970,7 @@ def build_sectors(world, player):
def build_accessible_region_list(world, start_region, player, build_copy_world=False, cross_world=False, region_rules=True, ignore_ledges = False): def build_accessible_region_list(world, start_region, player, build_copy_world=False, cross_world=False, region_rules=True, ignore_ledges = False):
from BaseClasses import CollectionState from BaseClasses import CollectionState
from Main import copy_world_limited from Main import copy_world_premature
from Items import ItemFactory from Items import ItemFactory
from Utils import stack_size3a from Utils import stack_size3a
@@ -997,7 +997,7 @@ def build_accessible_region_list(world, start_region, player, build_copy_world=F
if build_copy_world: if build_copy_world:
for p in range(1, world.players + 1): for p in range(1, world.players + 1):
world.key_logic[p] = {} world.key_logic[p] = {}
base_world = copy_world_limited(world) base_world = copy_world_premature(world, player)
base_world.override_bomb_check = True base_world.override_bomb_check = True
else: else:
base_world = world base_world = world
@@ -1040,7 +1040,7 @@ def validate_layout(world, player):
'Pyramid Area': ['Pyramid Exit Ledge'] 'Pyramid Area': ['Pyramid Exit Ledge']
} }
from Main import copy_world_limited from Main import copy_world_premature
from Utils import stack_size3a from Utils import stack_size3a
from EntranceShuffle import default_dungeon_connections, default_connector_connections, default_item_connections, default_shop_connections, default_drop_connections, default_dropexit_connections from EntranceShuffle import default_dungeon_connections, default_connector_connections, default_item_connections, default_shop_connections, default_drop_connections, default_dropexit_connections
@@ -1073,7 +1073,7 @@ def validate_layout(world, player):
for p in range(1, world.players + 1): for p in range(1, world.players + 1):
world.key_logic[p] = {} world.key_logic[p] = {}
base_world = copy_world_limited(world) base_world = copy_world_premature(world, player)
explored_regions = list() explored_regions = list()
if world.shuffle[player] in ['vanilla', 'dungeonssimple', 'dungeonsfull'] or not world.shufflelinks[player]: if world.shuffle[player] in ['vanilla', 'dungeonssimple', 'dungeonsfull'] or not world.shufflelinks[player]: