Files
Grinch-AP/worlds/sm/Regions.py
Fabian Dill ecd2675ea8 Tests: check that Regions are reachable (#1034)
* Tests: check that Regions are reachable
try to prevent errors from unconnected/never reachable Regions

* Test region access (#1039)

* Tests: note oot's default unreachable regions

* [SM] Fixed failing testAllStateCanReachEverything (#1087)

* [SM] Fixed failing testAllStateCanReachEverything

- by adding exclusion for Regions used only when corresponding Starting Location is used
- by removing unnecessary VARIA Regions used only for EscapeRando (not supported in AP anyway)

* Update worlds/sm/Regions.py

Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>

* Update worlds/sm/Rules.py

Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>

* Update worlds/sm/Regions.py

Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>

Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>

* Update test/general/TestReachability.py

---------

Co-authored-by: espeon65536 <81029175+espeon65536@users.noreply.github.com>
Co-authored-by: lordlou <87331798+lordlou@users.noreply.github.com>
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
2023-02-19 23:09:54 +01:00

43 lines
1.9 KiB
Python

def create_regions(self, world, player: int):
from . import create_region
from BaseClasses import Entrance
from logic.logic import Logic
from graph.vanilla.graph_locations import locationsDict
regions = []
for accessPoint in Logic.accessPoints:
if not accessPoint.Escape:
regions.append(create_region(self,
world,
player,
accessPoint.Name,
None,
[accessPoint.Name + "->" + key for key in accessPoint.intraTransitions.keys()]))
world.regions += regions
# create a region for each location and link each to what the location has access
# we make them one way so that the filler (and spoiler log) doesnt try to use those region as intermediary path
# this is required in AP because a location cant have multiple parent regions
locationRegions = []
for locationName, value in locationsDict.items():
locationRegions.append(create_region( self,
world,
player,
locationName,
[locationName]))
for key in value.AccessFrom.keys():
currentRegion =world.get_region(key, player)
currentRegion.exits.append(Entrance(player, key + "->"+ locationName, currentRegion))
world.regions += locationRegions
#create entrances
regionConcat = regions + locationRegions
for region in regionConcat:
for exit in region.exits:
exit.connect(world.get_region(exit.name[exit.name.find("->") + 2:], player))
world.regions += [
create_region(self, world, player, 'Menu', None, ['StartAP'])
]