mirror of
https://github.com/MarioSpore/Grinch-AP.git
synced 2025-10-21 20:21:32 -06:00
OoT Entrance Randomizer (#125)
Add options: "shuffle_grotto_entrances": GrottoEntrances, "shuffle_dungeon_entrances": DungeonEntrances, "owl_drops": OwlDrops, "warp_songs": WarpSongs, "spawn_positions": SpawnPositions, Add Logic Trick: "Skip King Zora as Adult with Nothing"
This commit is contained in:
@@ -2,6 +2,7 @@ from collections import deque
|
||||
import logging
|
||||
|
||||
from .SaveContext import SaveContext
|
||||
from .Regions import TimeOfDay
|
||||
|
||||
from BaseClasses import CollectionState
|
||||
from worlds.generic.Rules import set_rule, add_rule, add_item_rule, forbid_item
|
||||
@@ -42,6 +43,36 @@ class OOTLogic(LogicMixin):
|
||||
return can_reach
|
||||
return self.age[player] == age
|
||||
|
||||
def _oot_reach_at_time(self, regionname, tod, already_checked, player):
|
||||
name_map = {
|
||||
TimeOfDay.DAY: self.day_reachable_regions[player],
|
||||
TimeOfDay.DAMPE: self.dampe_reachable_regions[player],
|
||||
TimeOfDay.ALL: self.day_reachable_regions[player].intersection(self.dampe_reachable_regions[player])
|
||||
}
|
||||
if regionname in name_map[tod]:
|
||||
return True
|
||||
region = self.world.get_region(regionname, player)
|
||||
if region.provides_time == TimeOfDay.ALL or regionname == 'Root':
|
||||
self.day_reachable_regions[player].add(regionname)
|
||||
self.dampe_reachable_regions[player].add(regionname)
|
||||
return True
|
||||
if region.provides_time == TimeOfDay.DAMPE:
|
||||
self.dampe_reachable_regions[player].add(regionname)
|
||||
return tod == TimeOfDay.DAMPE
|
||||
for entrance in region.entrances:
|
||||
if entrance.parent_region.name in already_checked:
|
||||
continue
|
||||
if self._oot_reach_at_time(entrance.parent_region.name, tod, already_checked + [regionname], player):
|
||||
if tod == TimeOfDay.DAY:
|
||||
self.day_reachable_regions[player].add(regionname)
|
||||
elif tod == TimeOfDay.DAMPE:
|
||||
self.dampe_reachable_regions[player].add(regionname)
|
||||
elif tod == TimeOfDay.ALL:
|
||||
self.day_reachable_regions[player].add(regionname)
|
||||
self.dampe_reachable_regions[player].add(regionname)
|
||||
return True
|
||||
return False
|
||||
|
||||
# Store the age before calling this!
|
||||
def _oot_update_age_reachable_regions(self, player):
|
||||
self.stale[player] = False
|
||||
@@ -62,6 +93,8 @@ class OOTLogic(LogicMixin):
|
||||
while queue:
|
||||
connection = queue.popleft()
|
||||
new_region = connection.connected_region
|
||||
if new_region is None:
|
||||
continue
|
||||
if new_region in rrp:
|
||||
bc.remove(connection)
|
||||
elif connection.can_reach(self):
|
||||
|
Reference in New Issue
Block a user