Initial Prize Shuffle Implementation

commit c89c5d3798e2a777011e90d565d74af792330d9f
commit 4159f2e7097fca648828a60d8f6878211d0ded9e
commit a80e3a4301d69146ccfffe0f2f375adac381e165
commit d8ac588cb904152831f514d8276be4e39a43dcd0
commit 68eb75e3391631355b4f56f1dcb7e9dadadf1fdf
commit ba241b47964eadfb40ad323f87b1117598dd91a6
commit aed2821c7165822f5fd5cc1ff3f58f2af095d915
commit bd1c5d8d35ae3cae5f27f236346fff057b7b8cd7
commit f034e31cc585a1648657fc2c4850ebc0c1d8bf78

Author: codemann8 <codemann8@gmail.com>
This commit is contained in:
codemann8
2024-05-23 18:39:02 -05:00
parent 8b295a74ad
commit 103e098a2e
25 changed files with 573 additions and 331 deletions

View File

@@ -11,7 +11,7 @@ from typing import List
from BaseClasses import DoorType, Direction, CrystalBarrier, RegionType, Polarity, PolSlot, flooded_keys, Sector
from BaseClasses import Hook, hook_from_door, Door
from Regions import dungeon_events, flooded_keys_reverse
from Regions import location_events, flooded_keys_reverse
from Dungeons import split_region_starts
from RoomData import DoorKind
@@ -884,19 +884,19 @@ class ExplorationState(object):
if key_checks and location not in self.found_locations:
if location.forced_item and 'Small Key' in location.item.name:
self.key_locations += 1
if location.name not in dungeon_events and '- Prize' not in location.name and location.name not in ['Agahnim 1', 'Agahnim 2']:
if location.name not in location_events and not location.prize:
self.ttl_locations += 1
if location not in self.found_locations:
self.found_locations.append(location)
if not bk_flag and (not location.forced_item or 'Big Key' in location.item.name):
self.bk_found.add(location)
if location.name in dungeon_events and location.name not in self.events:
if location.name in location_events and location.name not in self.events:
if self.flooded_key_check(location):
self.perform_event(location.name, key_region)
if location.name in flooded_keys_reverse.keys() and self.location_found(
flooded_keys_reverse[location.name]):
self.perform_event(flooded_keys_reverse[location.name], key_region)
if '- Prize' in location.name:
if location.prize:
self.prize_received = True
def flooded_key_check(self, location):
@@ -1096,7 +1096,7 @@ def count_locations_exclude_big_chest(locations, world, player):
def prize_or_event(loc):
return loc.name in dungeon_events or '- Prize' in loc.name or loc.name in ['Agahnim 1', 'Agahnim 2']
return loc.name in location_events or loc.prize
def reserved_location(loc, world, player):
@@ -1557,13 +1557,13 @@ def define_sector_features(sectors):
for sector in sectors:
for region in sector.regions:
for loc in region.locations:
if '- Prize' in loc.name or loc.name in ['Agahnim 1', 'Agahnim 2']:
if loc.prize or loc.name in ['Agahnim 1', 'Agahnim 2']:
pass
elif loc.forced_item and 'Small Key' in loc.item.name:
sector.key_only_locations += 1
elif loc.forced_item and loc.forced_item.bigkey:
sector.bk_provided = True
elif loc.name not in dungeon_events and not loc.forced_item:
elif loc.name not in location_events and not loc.forced_item:
sector.chest_locations += 1
sector.chest_location_set.add(loc.name)
if '- Big Chest' in loc.name or loc.name in ["Hyrule Castle - Zelda's Chest",
@@ -1773,6 +1773,8 @@ def build_orig_location_set(dungeon_map):
def requested_dungeon_items(world, player):
num = 0
if world.prizeshuffle[player] == 'dungeon':
num += 1
if not world.bigkeyshuffle[player]:
num += 1
if not world.compassshuffle[player]:
@@ -4055,7 +4057,7 @@ def calc_door_equation(door, sector, look_for_entrance, sewers_flag=None):
crystal_barrier = CrystalBarrier.Either
# todo: backtracking from double switch with orange on--
for loc in region.locations:
if loc.name in dungeon_events:
if loc.name in location_events:
found_events.add(loc.name)
for d in event_doors:
if loc.name == d.req_event: