73 lines
3.2 KiB
Python
73 lines
3.2 KiB
Python
import typing
|
|
|
|
from BaseClasses import MultiWorld, Region, RegionType, Entrance, ItemClassification
|
|
from .Items import LegacyItem
|
|
from .Locations import LegacyLocation, diary_location_table, location_table, base_location_table
|
|
from .Names import LocationName, ItemName
|
|
|
|
prog = ItemClassification.progression
|
|
|
|
|
|
def create_regions(world, player: int):
|
|
|
|
locations: typing.List[str] = []
|
|
|
|
# Add required locations.
|
|
locations += [location for location in base_location_table]
|
|
locations += [location for location in diary_location_table]
|
|
|
|
# Add chests per settings.
|
|
if world.universal_fairy_chests[player]:
|
|
fairies = int(world.fairy_chests_per_zone[player]) * 4
|
|
for i in range(0, fairies):
|
|
locations += [f"Fairy Chest {i + 1}"]
|
|
else:
|
|
fairies = int(world.fairy_chests_per_zone[player])
|
|
for i in range(0, fairies):
|
|
locations += [f"{LocationName.castle} - Fairy Chest {i + 1}"]
|
|
locations += [f"{LocationName.garden} - Fairy Chest {i + 1}"]
|
|
locations += [f"{LocationName.tower} - Fairy Chest {i + 1}"]
|
|
locations += [f"{LocationName.dungeon} - Fairy Chest {i + 1}"]
|
|
|
|
if world.universal_chests[player]:
|
|
chests = int(world.chests_per_zone[player]) * 4
|
|
for i in range(0, chests):
|
|
locations += [f"Chest {i + 1}"]
|
|
else:
|
|
chests = int(world.chests_per_zone[player])
|
|
for i in range(0, chests):
|
|
locations += [f"{LocationName.castle} - Chest {i + 1}"]
|
|
locations += [f"{LocationName.garden} - Chest {i + 1}"]
|
|
locations += [f"{LocationName.tower} - Chest {i + 1}"]
|
|
locations += [f"{LocationName.dungeon} - Chest {i + 1}"]
|
|
|
|
# Set up the regions correctly.
|
|
world.regions += [
|
|
create_region(world, player, "Menu", None, [LocationName.outside]),
|
|
create_region(world, player, LocationName.castle, locations),
|
|
]
|
|
|
|
# Connect entrances and set up events.
|
|
world.get_entrance(LocationName.outside, player).connect(world.get_region(LocationName.castle, player))
|
|
world.get_location(LocationName.castle, player).place_locked_item(LegacyItem(ItemName.boss_castle, prog, None, player))
|
|
world.get_location(LocationName.garden, player).place_locked_item(LegacyItem(ItemName.boss_forest, prog, None, player))
|
|
world.get_location(LocationName.tower, player).place_locked_item(LegacyItem(ItemName.boss_tower, prog, None, player))
|
|
world.get_location(LocationName.dungeon, player).place_locked_item(LegacyItem(ItemName.boss_dungeon, prog, None, player))
|
|
world.get_location(LocationName.fountain, player).place_locked_item(LegacyItem(ItemName.boss_fountain, prog, None, player))
|
|
|
|
|
|
def create_region(world: MultiWorld, player: int, name: str, locations=None, exits=None):
|
|
# Shamelessly stolen from the ROR2 definition, lol
|
|
ret = Region(name, RegionType.Generic, name, player)
|
|
ret.world = world
|
|
if locations:
|
|
for location in locations:
|
|
loc_id = location_table.get(location, 0)
|
|
location = LegacyLocation(player, location, loc_id, ret)
|
|
ret.locations.append(location)
|
|
if exits:
|
|
for exit in exits:
|
|
ret.exits.append(Entrance(player, exit, ret))
|
|
|
|
return ret
|