Adding Customizer support for Crossed OWR

Also made Layout OWR compatible with Mixed OWR with asterisk notation
This commit is contained in:
codemann8
2023-09-05 00:30:53 -05:00
parent c1f98dfb51
commit 927588a3d8
4 changed files with 296 additions and 75 deletions

View File

@@ -87,6 +87,7 @@ class World(object):
self.owedges = []
self._owedge_cache = {}
self.owswaps = {}
self.owcrossededges = {}
self.owwhirlpools = {}
self.owflutespots = {}
self.owsectors = {}
@@ -114,6 +115,7 @@ class World(object):
set_player_attr('_region_cache', {})
set_player_attr('player_names', [])
set_player_attr('owswaps', [[],[],[]])
set_player_attr('owcrossededges', [])
set_player_attr('owwhirlpools', [])
set_player_attr('owsectors', None)
set_player_attr('remote_items', False)
@@ -321,6 +323,16 @@ class World(object):
if isinstance(edgename, OWEdge):
return edgename
try:
if edgename[-1] == '*':
edgename = edgename[:-1]
edge = self.check_for_owedge(edgename, player)
if self.is_tile_swapped(edge.owIndex, player):
from OverworldShuffle import parallel_links
if edgename in parallel_links.keys() or edgename in parallel_links.inverse.keys():
edgename = parallel_links[edgename] if edgename in parallel_links.keys() else parallel_links.inverse[edgename][0]
return self.check_for_owedge(edgename, player)
else:
raise Exception("Edge notated with * doesn't have a parallel edge: %s" & edgename)
return self._owedge_cache[(edgename, player)]
except KeyError:
for edge in self.owedges:
@@ -2248,7 +2260,7 @@ class OWEdge(object):
self.unknownX = 0x0
self.unknownY = 0x0
if self.owIndex < 0x40 or self.owIndex >= 0x80:
if self.owIndex & 0x40 == 0:
self.worldType = WorldType.Light
else:
self.worldType = WorldType.Dark
@@ -2289,6 +2301,12 @@ class OWEdge(object):
self.specialID = special_id
return self
def is_tile_swapped(self, world):
return world.is_tile_swapped(self.owIndex, self.player)
def is_lw(self, world):
return (self.worldType == WorldType.Light) != self.is_tile_swapped(world)
def __eq__(self, other):
return isinstance(other, self.__class__) and self.name == other.name