Created new region for kitty boss (#233)
* Added own region for kitty boss Kitty boss had the same access restriction as upper lake desolation, which is wrong.
This commit is contained in:
parent
0ee6dd3f77
commit
b4ad0ebf52
|
@ -4,26 +4,28 @@ from .Options import is_option_enabled
|
|||
|
||||
EventId: Optional[int] = None
|
||||
|
||||
|
||||
class LocationData(NamedTuple):
|
||||
region: str
|
||||
name: str
|
||||
code: Optional[int]
|
||||
rule: Callable = lambda state: True
|
||||
|
||||
|
||||
def get_locations(world: Optional[MultiWorld], player: Optional[int]) -> Tuple[LocationData, ...]:
|
||||
# 1337000 - 1337155 Generic locations
|
||||
# 1337171 - 1337175 New Pickup checks
|
||||
# 1337246 - 1337249 Ancient Pyramid
|
||||
location_table: List[LocationData] = [
|
||||
# PresentItemLocations
|
||||
# Present item locations
|
||||
LocationData('Tutorial', 'Yo Momma 1', 1337000),
|
||||
LocationData('Tutorial', 'Yo Momma 2', 1337001),
|
||||
LocationData('Lake desolation', 'Starter chest 2', 1337002),
|
||||
LocationData('Lake desolation', 'Starter chest 3', 1337003),
|
||||
LocationData('Lake desolation', 'Starter chest 1', 1337004),
|
||||
LocationData('Lake desolation', 'Timespinner Wheel room', 1337005),
|
||||
LocationData('Upper lake desolation', 'Forget me not chest', 1337006),
|
||||
LocationData('Lower lake desolation', 'Chicken chest', 1337007, lambda state: state._timespinner_has_timestop(world, player)),
|
||||
LocationData('Lake desolation', 'Forget me not chest', 1337006, lambda state: state._timespinner_has_fire(world, player) and state.can_reach('Upper Lake Serene', 'Region', player)),
|
||||
LocationData('Lake desolation', 'Chicken chest', 1337007, lambda state: state._timespinner_has_timestop(world, player)),
|
||||
LocationData('Lower lake desolation', 'Not so secret room', 1337008, lambda state: state._timespinner_can_break_walls(world, player)),
|
||||
LocationData('Lower lake desolation', 'Tank chest', 1337009, lambda state: state._timespinner_has_timestop(world, player)),
|
||||
LocationData('Upper lake desolation', 'Upper desolation Oxygen recovery room', 1337010),
|
||||
|
@ -32,9 +34,9 @@ def get_locations(world: Optional[MultiWorld], player: Optional[int]) -> Tuple[L
|
|||
LocationData('Upper lake desolation', 'Upper desolation double jump cave floor', 1337013),
|
||||
LocationData('Upper lake desolation', 'Fire-Locked sparrow chest', 1337014),
|
||||
LocationData('Upper lake desolation', 'Crash site pedestal', 1337015),
|
||||
LocationData('Upper lake desolation', 'Crash site chest 1', 1337016, lambda state: state.has_all({'Killed Maw', 'Gas Mask'}, player)),
|
||||
LocationData('Upper lake desolation', 'Crash site chest 2', 1337017, lambda state: state.has_all({'Killed Maw', 'Gas Mask'}, player)),
|
||||
LocationData('Upper lake desolation', 'Kitty Boss', 1337018),
|
||||
LocationData('Upper lake desolation', 'Crash site chest 1', 1337016, lambda state: state.has_all({'Killed Maw'}, player)),
|
||||
LocationData('Upper lake desolation', 'Crash site chest 2', 1337017, lambda state: state.has_all({'Killed Maw'}, player)),
|
||||
LocationData('Eastern lake desolation', 'Kitty Boss', 1337018),
|
||||
LocationData('Library', 'Library Basement', 1337019),
|
||||
LocationData('Library', 'Library warp gate', 1337020),
|
||||
LocationData('Library', 'Librarian', 1337021),
|
||||
|
@ -103,7 +105,7 @@ def get_locations(world: Optional[MultiWorld], player: Optional[int]) -> Tuple[L
|
|||
LocationData('Emperors tower', 'Dad\'s Chambers chest', 1337084),
|
||||
LocationData('Emperors tower', 'Dad\'s Chambers pedestal', 1337085),
|
||||
|
||||
# PastItemLocations
|
||||
# Past item locations
|
||||
LocationData('Refugee Camp', 'Neliste\'s Bra', 1337086),
|
||||
LocationData('Refugee Camp', 'Refugee camp storage chest 3', 1337087),
|
||||
LocationData('Refugee Camp', 'Refugee camp storage chest 2', 1337088),
|
||||
|
@ -183,7 +185,7 @@ def get_locations(world: Optional[MultiWorld], player: Optional[int]) -> Tuple[L
|
|||
LocationData('Royal towers (upper)', 'Aelana\'s chest', 1337154),
|
||||
LocationData('Royal towers (upper)', 'Aelana\'s pedestal', 1337155),
|
||||
|
||||
#AncientPyramidLocations
|
||||
# Ancient pyramid locations
|
||||
LocationData('Ancient Pyramid (left)', 'Why not it\'s right there', 1337246),
|
||||
LocationData('Ancient Pyramid (left)', 'Conviction guarded room', 1337247),
|
||||
LocationData('Ancient Pyramid (left)', 'Pit secret room', 1337248, lambda state: state._timespinner_can_break_walls(world, player)),
|
||||
|
@ -197,7 +199,7 @@ def get_locations(world: Optional[MultiWorld], player: Optional[int]) -> Tuple[L
|
|||
location_table += (
|
||||
LocationData('Library', 'Library terminal 2', 1337156, lambda state: state.has('Tablet', player)),
|
||||
LocationData('Library', 'Library terminal 1', 1337157, lambda state: state.has('Tablet', player)),
|
||||
# 1337158 Is Lost in time
|
||||
# 1337158 Is lost in time
|
||||
LocationData('Library', 'Library terminal 3', 1337159, lambda state: state.has('Tablet', player)),
|
||||
LocationData('Library', 'V terminal 1', 1337160, lambda state: state.has_all({'Tablet', 'Library Keycard V'}, player)),
|
||||
LocationData('Library', 'V terminal 2', 1337161, lambda state: state.has_all({'Tablet', 'Library Keycard V'}, player)),
|
||||
|
@ -269,4 +271,4 @@ starter_progression_locations: Tuple[str, ...] = (
|
|||
'Starter chest 3',
|
||||
'Starter chest 1',
|
||||
'Timespinner Wheel room'
|
||||
)
|
||||
)
|
||||
|
|
|
@ -3,6 +3,7 @@ from BaseClasses import MultiWorld, Region, Entrance, Location, RegionType
|
|||
from .Options import is_option_enabled
|
||||
from .Locations import LocationData
|
||||
|
||||
|
||||
def create_regions(world: MultiWorld, player: int, locations: Tuple[LocationData, ...], location_cache: List[Location], pyramid_keys_unlock: str):
|
||||
locations_per_region = get_locations_per_region(locations)
|
||||
|
||||
|
@ -12,6 +13,7 @@ def create_regions(world: MultiWorld, player: int, locations: Tuple[LocationData
|
|||
create_region(world, player, locations_per_region, location_cache, 'Lake desolation'),
|
||||
create_region(world, player, locations_per_region, location_cache, 'Upper lake desolation'),
|
||||
create_region(world, player, locations_per_region, location_cache, 'Lower lake desolation'),
|
||||
create_region(world, player, locations_per_region, location_cache, 'Eastern lake desolation'),
|
||||
create_region(world, player, locations_per_region, location_cache, 'Library'),
|
||||
create_region(world, player, locations_per_region, location_cache, 'Library top'),
|
||||
create_region(world, player, locations_per_region, location_cache, 'Ifrit\'s Lair'),
|
||||
|
@ -51,7 +53,7 @@ def create_regions(world: MultiWorld, player: int, locations: Tuple[LocationData
|
|||
|
||||
if __debug__:
|
||||
throwIfAnyLocationIsNotAssignedToARegion(regions, locations_per_region.keys())
|
||||
|
||||
|
||||
world.regions += regions
|
||||
|
||||
connectStartingRegion(world, player)
|
||||
|
@ -63,11 +65,14 @@ def create_regions(world: MultiWorld, player: int, locations: Tuple[LocationData
|
|||
connect(world, player, names, 'Lake desolation', 'Skeleton Shaft', lambda state: state._timespinner_has_doublejump(world, player))
|
||||
connect(world, player, names, 'Lake desolation', 'Space time continuum', lambda state: state.has('Twin Pyramid Key', player))
|
||||
connect(world, player, names, 'Upper lake desolation', 'Lake desolation')
|
||||
connect(world, player, names, 'Upper lake desolation', 'Lower lake desolation')
|
||||
connect(world, player, names, 'Upper lake desolation', 'Eastern lake desolation')
|
||||
connect(world, player, names, 'Lower lake desolation', 'Lake desolation')
|
||||
connect(world, player, names, 'Lower lake desolation', 'Library')
|
||||
connect(world, player, names, 'Lower lake desolation', 'Space time continuum', lambda state: state.has('Twin Pyramid Key', player))
|
||||
connect(world, player, names, 'Library', 'Lower lake desolation')
|
||||
connect(world, player, names, 'Lower lake desolation', 'Eastern lake desolation')
|
||||
connect(world, player, names, 'Eastern lake desolation', 'Space time continuum', lambda state: state.has('Twin Pyramid Key', player))
|
||||
connect(world, player, names, 'Eastern lake desolation', 'Library')
|
||||
connect(world, player, names, 'Eastern lake desolation', 'Lower lake desolation')
|
||||
connect(world, player, names, 'Eastern lake desolation', 'Upper lake desolation', lambda state: state._timespinner_has_fire(world, player) and state.can_reach('Upper Lake Serene', 'Region', player))
|
||||
connect(world, player, names, 'Library', 'Eastern lake desolation')
|
||||
connect(world, player, names, 'Library', 'Library top', lambda state: state._timespinner_has_doublejump(world, player) or state.has('Talaria Attachment', player))
|
||||
connect(world, player, names, 'Library', 'Varndagroth tower left', lambda state: state._timespinner_has_keycard_D(world, player))
|
||||
connect(world, player, names, 'Library', 'Space time continuum', lambda state: state.has('Twin Pyramid Key', player))
|
||||
|
@ -174,7 +179,7 @@ def throwIfAnyLocationIsNotAssignedToARegion(regions: List[Region], regionNames:
|
|||
existingRegions.add(region.name)
|
||||
|
||||
if (regionNames - existingRegions):
|
||||
raise Exception("Tiemspinner: the following regions are used in locations: {}, but no such region exists".format(regionNames - existingRegions))
|
||||
raise Exception("Timespinner: the following regions are used in locations: {}, but no such region exists".format(regionNames - existingRegions))
|
||||
|
||||
|
||||
def create_location(player: int, location_data: LocationData, region: Region, location_cache: List[Location]) -> Location:
|
||||
|
@ -234,7 +239,7 @@ def connect(world: MultiWorld, player: int, used_names: Dict[str, int], source:
|
|||
name = target
|
||||
else:
|
||||
used_names[target] += 1
|
||||
name = target + (' ' * used_names[target])
|
||||
name = target + (' ' * used_names[target])
|
||||
|
||||
connection = Entrance(player, name, sourceRegion)
|
||||
|
||||
|
|
|
@ -226,4 +226,4 @@ def get_personal_items(player: int, locations: List[Location]) -> Dict[int, int]
|
|||
if location.address and location.item and location.item.code and location.item.player == player:
|
||||
personal_items[location.address] = location.item.code
|
||||
|
||||
return personal_items
|
||||
return personal_items
|
||||
|
|
Loading…
Reference in New Issue