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
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'
)
)

View File

@ -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)

View File

@ -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