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:
Grrmo 2022-01-23 21:26:32 +01:00 committed by GitHub
parent 0ee6dd3f77
commit b4ad0ebf52
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 25 additions and 18 deletions

View File

@ -4,26 +4,28 @@ from .Options import is_option_enabled
EventId: Optional[int] = None EventId: Optional[int] = None
class LocationData(NamedTuple): class LocationData(NamedTuple):
region: str region: str
name: str name: str
code: Optional[int] code: Optional[int]
rule: Callable = lambda state: True rule: Callable = lambda state: True
def get_locations(world: Optional[MultiWorld], player: Optional[int]) -> Tuple[LocationData, ...]: def get_locations(world: Optional[MultiWorld], player: Optional[int]) -> Tuple[LocationData, ...]:
# 1337000 - 1337155 Generic locations # 1337000 - 1337155 Generic locations
# 1337171 - 1337175 New Pickup checks # 1337171 - 1337175 New Pickup checks
# 1337246 - 1337249 Ancient Pyramid # 1337246 - 1337249 Ancient Pyramid
location_table: List[LocationData] = [ location_table: List[LocationData] = [
# PresentItemLocations # Present item locations
LocationData('Tutorial', 'Yo Momma 1', 1337000), LocationData('Tutorial', 'Yo Momma 1', 1337000),
LocationData('Tutorial', 'Yo Momma 2', 1337001), LocationData('Tutorial', 'Yo Momma 2', 1337001),
LocationData('Lake desolation', 'Starter chest 2', 1337002), LocationData('Lake desolation', 'Starter chest 2', 1337002),
LocationData('Lake desolation', 'Starter chest 3', 1337003), LocationData('Lake desolation', 'Starter chest 3', 1337003),
LocationData('Lake desolation', 'Starter chest 1', 1337004), LocationData('Lake desolation', 'Starter chest 1', 1337004),
LocationData('Lake desolation', 'Timespinner Wheel room', 1337005), LocationData('Lake desolation', 'Timespinner Wheel room', 1337005),
LocationData('Upper lake desolation', 'Forget me not chest', 1337006), 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('Lower lake desolation', 'Chicken chest', 1337007, lambda state: state._timespinner_has_timestop(world, 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', '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('Lower lake desolation', 'Tank chest', 1337009, lambda state: state._timespinner_has_timestop(world, player)),
LocationData('Upper lake desolation', 'Upper desolation Oxygen recovery room', 1337010), 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', 'Upper desolation double jump cave floor', 1337013),
LocationData('Upper lake desolation', 'Fire-Locked sparrow chest', 1337014), LocationData('Upper lake desolation', 'Fire-Locked sparrow chest', 1337014),
LocationData('Upper lake desolation', 'Crash site pedestal', 1337015), 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 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', 'Gas Mask'}, player)), LocationData('Upper lake desolation', 'Crash site chest 2', 1337017, lambda state: state.has_all({'Killed Maw'}, player)),
LocationData('Upper lake desolation', 'Kitty Boss', 1337018), LocationData('Eastern lake desolation', 'Kitty Boss', 1337018),
LocationData('Library', 'Library Basement', 1337019), LocationData('Library', 'Library Basement', 1337019),
LocationData('Library', 'Library warp gate', 1337020), LocationData('Library', 'Library warp gate', 1337020),
LocationData('Library', 'Librarian', 1337021), 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 chest', 1337084),
LocationData('Emperors tower', 'Dad\'s Chambers pedestal', 1337085), LocationData('Emperors tower', 'Dad\'s Chambers pedestal', 1337085),
# PastItemLocations # Past item locations
LocationData('Refugee Camp', 'Neliste\'s Bra', 1337086), LocationData('Refugee Camp', 'Neliste\'s Bra', 1337086),
LocationData('Refugee Camp', 'Refugee camp storage chest 3', 1337087), LocationData('Refugee Camp', 'Refugee camp storage chest 3', 1337087),
LocationData('Refugee Camp', 'Refugee camp storage chest 2', 1337088), 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 chest', 1337154),
LocationData('Royal towers (upper)', 'Aelana\'s pedestal', 1337155), 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)', 'Why not it\'s right there', 1337246),
LocationData('Ancient Pyramid (left)', 'Conviction guarded room', 1337247), 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)), 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 += ( location_table += (
LocationData('Library', 'Library terminal 2', 1337156, lambda state: state.has('Tablet', player)), LocationData('Library', 'Library terminal 2', 1337156, lambda state: state.has('Tablet', player)),
LocationData('Library', 'Library terminal 1', 1337157, 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', '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 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)), LocationData('Library', 'V terminal 2', 1337161, lambda state: state.has_all({'Tablet', 'Library Keycard V'}, player)),

View File

@ -3,6 +3,7 @@ from BaseClasses import MultiWorld, Region, Entrance, Location, RegionType
from .Options import is_option_enabled from .Options import is_option_enabled
from .Locations import LocationData from .Locations import LocationData
def create_regions(world: MultiWorld, player: int, locations: Tuple[LocationData, ...], location_cache: List[Location], pyramid_keys_unlock: str): 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) 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, 'Lake desolation'),
create_region(world, player, locations_per_region, location_cache, 'Upper 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, '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'),
create_region(world, player, locations_per_region, location_cache, 'Library top'), create_region(world, player, locations_per_region, location_cache, 'Library top'),
create_region(world, player, locations_per_region, location_cache, 'Ifrit\'s Lair'), create_region(world, player, locations_per_region, location_cache, 'Ifrit\'s Lair'),
@ -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', '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, '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', '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', 'Lake desolation')
connect(world, player, names, 'Lower lake desolation', 'Library') connect(world, player, names, 'Lower lake desolation', 'Eastern lake desolation')
connect(world, player, names, 'Lower lake desolation', 'Space time continuum', lambda state: state.has('Twin Pyramid Key', player)) connect(world, player, names, 'Eastern 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, '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', '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', '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)) 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) existingRegions.add(region.name)
if (regionNames - existingRegions): 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: 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 name = target
else: else:
used_names[target] += 1 used_names[target] += 1
name = target + (' ' * used_names[target]) name = target + (' ' * used_names[target])
connection = Entrance(player, name, sourceRegion) connection = Entrance(player, name, sourceRegion)