From 63f012cce747f25a562622990d2381dded9fbe52 Mon Sep 17 00:00:00 2001 From: Jarno Date: Sun, 4 Dec 2022 22:02:46 +0100 Subject: [PATCH] Timespinner: Enter Sandman flag (#1263) --- worlds/timespinner/Locations.py | 4 ++-- worlds/timespinner/Options.py | 24 ++++++------------------ worlds/timespinner/Regions.py | 8 ++++++-- 3 files changed, 14 insertions(+), 22 deletions(-) diff --git a/worlds/timespinner/Locations.py b/worlds/timespinner/Locations.py index b881cf35..bdc3e380 100644 --- a/worlds/timespinner/Locations.py +++ b/worlds/timespinner/Locations.py @@ -186,12 +186,12 @@ def get_locations(world: Optional[MultiWorld], player: Optional[int]) -> Tuple[L LocationData('Royal towers (upper)', 'Royal Towers: Aelana\'s pedestal', 1337155), # Ancient pyramid locations - LocationData('Ancient Pyramid (left)', 'Ancient Pyramid: Why not it\'s right there', 1337246), + LocationData('Ancient Pyramid (entrance)', 'Ancient Pyramid: Why not it\'s right there', 1337246), LocationData('Ancient Pyramid (left)', 'Ancient Pyramid: Conviction guarded room', 1337247), LocationData('Ancient Pyramid (left)', 'Ancient Pyramid: Pit secret room', 1337248, lambda state: state._timespinner_can_break_walls(world, player)), LocationData('Ancient Pyramid (left)', 'Ancient Pyramid: Regret chest', 1337249, lambda state: state._timespinner_can_break_walls(world, player)), LocationData('Ancient Pyramid (right)', 'Ancient Pyramid: Nightmare Door chest', 1337236), - LocationData('Ancient Pyramid (right)', 'Killed Nightmare', EventId) + LocationData('Ancient Pyramid (right)', 'Killed Nightmare', EventId, lambda state: state.has_all({'Timespinner Wheel', 'Timespinner Spindle', 'Timespinner Gear 1', 'Timespinner Gear 2', 'Timespinner Gear 3'}, player)) ] # 1337156 - 1337170 Downloads diff --git a/worlds/timespinner/Options.py b/worlds/timespinner/Options.py index 5e0438a1..81c68663 100644 --- a/worlds/timespinner/Options.py +++ b/worlds/timespinner/Options.py @@ -9,16 +9,6 @@ class StartWithJewelryBox(Toggle): display_name = "Start with Jewelry Box" -#class ProgressiveVerticalMovement(Toggle): -# "Always find vertical movement in the following order Succubus Hairpin -> Light Wall -> Celestial Sash" -# display_name = "Progressive vertical movement" - - -#class ProgressiveKeycards(Toggle): -# "Always find Security Keycard's in the following order D -> C -> B -> A" -# display_name = "Progressive keycards" - - class DownloadableItems(DefaultOnToggle): "With the tablet you will be able to download items at terminals" display_name = "Downloadable items" @@ -49,11 +39,6 @@ class Inverted(Toggle): display_name = "Inverted" -#class StinkyMaw(Toggle): -# "Require gasmask for Maw" -# display_name = "Stinky Maw" - - class GyreArchives(Toggle): "Gyre locations are in logic. New warps are gated by Merchant Crow and Kobo" display_name = "Gyre Archives" @@ -292,18 +277,20 @@ class ShowDrops(Toggle): display_name = "Show Bestiary Item Drops" +class EnterSandman(Toggle): + "The Ancient Pyramid is unlocked by the Twin Pyramid Keys, but the final boss door opens if you have all 5 Timespinner pieces" + display_name = "Enter Sandman" + + # Some options that are available in the timespinner randomizer arent currently implemented timespinner_options: Dict[str, Option] = { "StartWithJewelryBox": StartWithJewelryBox, - #"ProgressiveVerticalMovement": ProgressiveVerticalMovement, - #"ProgressiveKeycards": ProgressiveKeycards, "DownloadableItems": DownloadableItems, "EyeSpy": EyeSpy, "StartWithMeyef": StartWithMeyef, "QuickSeed": QuickSeed, "SpecificKeycards": SpecificKeycards, "Inverted": Inverted, - #"StinkyMaw": StinkyMaw, "GyreArchives": GyreArchives, "Cantoran": Cantoran, "LoreChecks": LoreChecks, @@ -322,6 +309,7 @@ timespinner_options: Dict[str, Option] = { "LootTierDistro": LootTierDistro, "ShowBestiary": ShowBestiary, "ShowDrops": ShowDrops, + "EnterSandman": EnterSandman, "DeathLink": DeathLink, } diff --git a/worlds/timespinner/Regions.py b/worlds/timespinner/Regions.py index cd9c6b4c..ed0a30d3 100644 --- a/worlds/timespinner/Regions.py +++ b/worlds/timespinner/Regions.py @@ -46,6 +46,7 @@ def create_regions(world: MultiWorld, player: int, locations: Tuple[LocationData create_region(world, player, locations_per_region, location_cache, 'Royal towers'), create_region(world, player, locations_per_region, location_cache, 'Royal towers (upper)'), create_region(world, player, locations_per_region, location_cache, 'Temporal Gyre'), + create_region(world, player, locations_per_region, location_cache, 'Ancient Pyramid (entrance)'), create_region(world, player, locations_per_region, location_cache, 'Ancient Pyramid (left)'), create_region(world, player, locations_per_region, location_cache, 'Ancient Pyramid (right)'), create_region(world, player, locations_per_region, location_cache, 'Space time continuum') @@ -109,7 +110,7 @@ def create_regions(world: MultiWorld, player: int, locations: Tuple[LocationData connect(world, player, names, 'The lab (upper)', 'The lab (power off)') connect(world, player, names, 'The lab (upper)', 'Ravenlord\'s Lair', lambda state: state.has('Merchant Crow', player)) connect(world, player, names, 'The lab (upper)', 'Emperors tower', lambda state: state._timespinner_has_forwarddash_doublejump(world, player)) - connect(world, player, names, 'The lab (upper)', 'Ancient Pyramid (left)', lambda state: state.has_all({'Timespinner Wheel', 'Timespinner Spindle', 'Timespinner Gear 1', 'Timespinner Gear 2', 'Timespinner Gear 3'}, player)) + connect(world, player, names, 'The lab (upper)', 'Ancient Pyramid (entrance)', lambda state: state.has_all({'Timespinner Wheel', 'Timespinner Spindle', 'Timespinner Gear 1', 'Timespinner Gear 2', 'Timespinner Gear 3'}, player)) connect(world, player, names, 'Ravenlord\'s Lair', 'The lab (upper)') connect(world, player, names, 'Emperors tower', 'The lab (upper)') connect(world, player, names, 'Skeleton Shaft', 'Lake desolation') @@ -154,7 +155,9 @@ def create_regions(world: MultiWorld, player: int, locations: Tuple[LocationData connect(world, player, names, 'Royal towers', 'Royal towers (lower)') connect(world, player, names, 'Royal towers', 'Royal towers (upper)', lambda state: state._timespinner_has_doublejump(world, player)) connect(world, player, names, 'Royal towers (upper)', 'Royal towers') - connect(world, player, names, 'Ancient Pyramid (left)', 'The lab (upper)') + connect(world, player, names, 'Ancient Pyramid (entrance)', 'The lab (upper)', lambda state: not is_option_enabled(world, player, "EnterSandman")) + connect(world, player, names, 'Ancient Pyramid (entrance)', 'Ancient Pyramid (left)', lambda state: state._timespinner_has_doublejump(world, player)) + connect(world, player, names, 'Ancient Pyramid (left)', 'Ancient Pyramid (entrance)') connect(world, player, names, 'Ancient Pyramid (left)', 'Ancient Pyramid (right)', lambda state: state._timespinner_has_upwarddash(world, player)) connect(world, player, names, 'Ancient Pyramid (right)', 'Ancient Pyramid (left)', lambda state: state._timespinner_has_upwarddash(world, player)) connect(world, player, names, 'Space time continuum', 'Lake desolation', lambda state: pyramid_keys_unlock == "GateLakeDesolation") @@ -170,6 +173,7 @@ def create_regions(world: MultiWorld, player: int, locations: Tuple[LocationData connect(world, player, names, 'Space time continuum', 'Royal towers (lower)', lambda state: pyramid_keys_unlock == "GateRoyalTowers") connect(world, player, names, 'Space time continuum', 'Caves of Banishment (Maw)', lambda state: pyramid_keys_unlock == "GateMaw") connect(world, player, names, 'Space time continuum', 'Caves of Banishment (upper)', lambda state: pyramid_keys_unlock == "GateCavesOfBanishment") + connect(world, player, names, 'Space time continuum', 'Ancient Pyramid (entrance)', lambda state: is_option_enabled(world, player, "EnterSandman")) def throwIfAnyLocationIsNotAssignedToARegion(regions: List[Region], regionNames: Set[str]):