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
 |