Fixed Flute Shuffle to not perform RNG on subsequent attempts
This commit is contained in:
@@ -359,7 +359,7 @@ def link_overworld(world, player):
|
|||||||
new_spots = list()
|
new_spots = list()
|
||||||
ignored_regions = set()
|
ignored_regions = set()
|
||||||
|
|
||||||
def addSpot(owid):
|
def addSpot(owid, ignore_proximity):
|
||||||
if world.owFluteShuffle[player] == 'balanced':
|
if world.owFluteShuffle[player] == 'balanced':
|
||||||
def getIgnored(regionname, base_owid, owid):
|
def getIgnored(regionname, base_owid, owid):
|
||||||
region = world.get_region(regionname, player)
|
region = world.get_region(regionname, player)
|
||||||
@@ -379,10 +379,12 @@ def link_overworld(world, player):
|
|||||||
|
|
||||||
new_ignored = {new_region}
|
new_ignored = {new_region}
|
||||||
getIgnored(new_region, OWTileRegions[new_region], OWTileRegions[new_region])
|
getIgnored(new_region, OWTileRegions[new_region], OWTileRegions[new_region])
|
||||||
if random.randint(0, 31) != 0 and new_ignored.intersection(ignored_regions):
|
if not ignore_proximity and random.randint(0, 31) != 0 and new_ignored.intersection(ignored_regions):
|
||||||
return False
|
return False
|
||||||
ignored_regions.update(new_ignored)
|
ignored_regions.update(new_ignored)
|
||||||
flute_pool.remove(owid)
|
flute_pool.remove(owid)
|
||||||
|
if ignore_proximity:
|
||||||
|
logging.getLogger('').warning(f'Warning: Adding flute spot within proximity: {hex(owid)}')
|
||||||
new_spots.append(owid)
|
new_spots.append(owid)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@@ -401,7 +403,7 @@ def link_overworld(world, player):
|
|||||||
target_spots = len(new_spots) + spots_to_place
|
target_spots = len(new_spots) + spots_to_place
|
||||||
|
|
||||||
if 'Desert Palace Teleporter Ledge' in sector[1] or 'Misery Mire Teleporter Ledge' in sector[1]:
|
if 'Desert Palace Teleporter Ledge' in sector[1] or 'Misery Mire Teleporter Ledge' in sector[1]:
|
||||||
addSpot(0x38) # guarantee desert/mire access
|
addSpot(0x38, False) # guarantee desert/mire access
|
||||||
|
|
||||||
random.shuffle(sector[1])
|
random.shuffle(sector[1])
|
||||||
f = 0
|
f = 0
|
||||||
@@ -413,7 +415,7 @@ def link_overworld(world, player):
|
|||||||
if t > 5:
|
if t > 5:
|
||||||
raise GenerationException('Infinite loop detected in flute shuffle')
|
raise GenerationException('Infinite loop detected in flute shuffle')
|
||||||
if sector[1][f] not in new_spots:
|
if sector[1][f] not in new_spots:
|
||||||
addSpot(flute_regions[sector[1][f]])
|
addSpot(flute_regions[sector[1][f]], t > 0)
|
||||||
f += 1
|
f += 1
|
||||||
|
|
||||||
region_total -= sector[0]
|
region_total -= sector[0]
|
||||||
|
|||||||
Reference in New Issue
Block a user