1058 lines
		
	
	
		
			66 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			1058 lines
		
	
	
		
			66 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | from .Types import HatDLC, HatType, LocData, Difficulty, HitType | ||
|  | from typing import Dict, TYPE_CHECKING | ||
|  | from .Options import TasksanityCheckCount | ||
|  | 
 | ||
|  | if TYPE_CHECKING: | ||
|  |     from . import HatInTimeWorld | ||
|  | 
 | ||
|  | TASKSANITY_START_ID = 2000300204 | ||
|  | 
 | ||
|  | 
 | ||
|  | def get_total_locations(world: "HatInTimeWorld") -> int: | ||
|  |     total = 0 | ||
|  | 
 | ||
|  |     if not world.is_dw_only(): | ||
|  |         for name in location_table.keys(): | ||
|  |             if is_location_valid(world, name): | ||
|  |                 total += 1 | ||
|  | 
 | ||
|  |         if world.is_dlc1() and world.options.Tasksanity: | ||
|  |             total += world.options.TasksanityCheckCount | ||
|  | 
 | ||
|  |     if world.is_dw(): | ||
|  |         if world.options.DWShuffle: | ||
|  |             total += len(world.dw_shuffle) | ||
|  |             if world.options.DWEnableBonus: | ||
|  |                 total += len(world.dw_shuffle) | ||
|  |         else: | ||
|  |             total += 37 | ||
|  |             if world.is_dlc2(): | ||
|  |                 total += 1 | ||
|  | 
 | ||
|  |             if world.options.DWEnableBonus: | ||
|  |                 total += 37 | ||
|  |                 if world.is_dlc2(): | ||
|  |                     total += 1 | ||
|  | 
 | ||
|  |     return total | ||
|  | 
 | ||
|  | 
 | ||
|  | def location_dlc_enabled(world: "HatInTimeWorld", location: str) -> bool: | ||
|  |     data = location_table.get(location) or event_locs.get(location) | ||
|  | 
 | ||
|  |     if data.dlc_flags == HatDLC.none: | ||
|  |         return True | ||
|  |     elif data.dlc_flags == HatDLC.dlc1 and world.is_dlc1(): | ||
|  |         return True | ||
|  |     elif data.dlc_flags == HatDLC.dlc2 and world.is_dlc2(): | ||
|  |         return True | ||
|  |     elif data.dlc_flags == HatDLC.death_wish and world.is_dw(): | ||
|  |         return True | ||
|  |     elif data.dlc_flags == HatDLC.dlc1_dw and world.is_dlc1() and world.is_dw(): | ||
|  |         return True | ||
|  |     elif data.dlc_flags == HatDLC.dlc2_dw and world.is_dlc2() and world.is_dw(): | ||
|  |         return True | ||
|  | 
 | ||
|  |     return False | ||
|  | 
 | ||
|  | 
 | ||
|  | def is_location_valid(world: "HatInTimeWorld", location: str) -> bool: | ||
|  |     if not location_dlc_enabled(world, location): | ||
|  |         return False | ||
|  | 
 | ||
|  |     if not world.options.ShuffleStorybookPages and location in storybook_pages.keys(): | ||
|  |         return False | ||
|  | 
 | ||
|  |     if not world.options.ShuffleActContracts and location in contract_locations.keys(): | ||
|  |         return False | ||
|  | 
 | ||
|  |     if location not in world.shop_locs and location in shop_locations: | ||
|  |         return False | ||
|  | 
 | ||
|  |     data = location_table.get(location) or event_locs.get(location) | ||
|  |     if world.options.ExcludeTour and data.region == "Time Rift - Tour": | ||
|  |         return False | ||
|  | 
 | ||
|  |     # No need for all those event items if we're not doing candles | ||
|  |     if data.dlc_flags & HatDLC.death_wish: | ||
|  |         if world.options.DWExcludeCandles and location in event_locs.keys(): | ||
|  |             return False | ||
|  | 
 | ||
|  |         if world.options.DWShuffle and data.region in death_wishes and data.region not in world.dw_shuffle: | ||
|  |             return False | ||
|  | 
 | ||
|  |         if location in zero_jumps: | ||
|  |             if world.options.DWShuffle and "Zero Jumps" not in world.dw_shuffle: | ||
|  |                 return False | ||
|  | 
 | ||
|  |             difficulty: Difficulty = Difficulty(world.options.LogicDifficulty) | ||
|  |             if location in zero_jumps_hard and difficulty < Difficulty.HARD: | ||
|  |                 return False | ||
|  | 
 | ||
|  |             if location in zero_jumps_expert and difficulty < Difficulty.EXPERT: | ||
|  |                 return False | ||
|  | 
 | ||
|  |     return True | ||
|  | 
 | ||
|  | 
 | ||
|  | def get_location_names() -> Dict[str, int]: | ||
|  |     names = {name: data.id for name, data in location_table.items()} | ||
|  |     id_start: int = TASKSANITY_START_ID | ||
|  |     for i in range(TasksanityCheckCount.range_end): | ||
|  |         names.setdefault(f"Tasksanity Check {i+1}", id_start+i) | ||
|  | 
 | ||
|  |     for (key, loc_id) in death_wishes.items(): | ||
|  |         names.setdefault(f"{key} - Main Objective", loc_id) | ||
|  |         names.setdefault(f"{key} - All Clear", loc_id+1) | ||
|  | 
 | ||
|  |     return names | ||
|  | 
 | ||
|  | 
 | ||
|  | ahit_locations = { | ||
|  |     "Spaceship - Rumbi Abuse": LocData(2000301000, "Spaceship", hit_type=HitType.umbrella_or_brewing), | ||
|  | 
 | ||
|  |     # 300000 range - Mafia Town/Battle of the Birds | ||
|  |     "Welcome to Mafia Town - Umbrella": LocData(2000301002, "Welcome to Mafia Town"), | ||
|  |     "Mafia Town - Old Man (Seaside Spaghetti)": LocData(2000303833, "Mafia Town Area"), | ||
|  |     "Mafia Town - Old Man (Steel Beams)": LocData(2000303832, "Mafia Town Area"), | ||
|  |     "Mafia Town - Blue Vault": LocData(2000302850, "Mafia Town Area"), | ||
|  |     "Mafia Town - Green Vault": LocData(2000302851, "Mafia Town Area"), | ||
|  |     "Mafia Town - Red Vault": LocData(2000302848, "Mafia Town Area"), | ||
|  |     "Mafia Town - Blue Vault Brewing Crate": LocData(2000305572, "Mafia Town Area", required_hats=[HatType.BREWING]), | ||
|  |     "Mafia Town - Plaza Under Boxes": LocData(2000304458, "Mafia Town Area"), | ||
|  |     "Mafia Town - Small Boat": LocData(2000304460, "Mafia Town Area"), | ||
|  |     "Mafia Town - Staircase Pon Cluster": LocData(2000304611, "Mafia Town Area"), | ||
|  |     "Mafia Town - Palm Tree": LocData(2000304609, "Mafia Town Area"), | ||
|  |     "Mafia Town - Port": LocData(2000305219, "Mafia Town Area"), | ||
|  |     "Mafia Town - Docks Chest": LocData(2000303534, "Mafia Town Area"), | ||
|  |     "Mafia Town - Ice Hat Cage": LocData(2000304831, "Mafia Town Area", required_hats=[HatType.ICE]), | ||
|  |     "Mafia Town - Hidden Buttons Chest": LocData(2000303483, "Mafia Town Area"), | ||
|  | 
 | ||
|  |     # These can be accessed from HUMT, the above locations can't be | ||
|  |     "Mafia Town - Dweller Boxes": LocData(2000304462, "Mafia Town Area (HUMT)"), | ||
|  |     "Mafia Town - Ledge Chest": LocData(2000303530, "Mafia Town Area (HUMT)"), | ||
|  |     "Mafia Town - Yellow Sphere Building Chest": LocData(2000303535, "Mafia Town Area (HUMT)"), | ||
|  |     "Mafia Town - Beneath Scaffolding": LocData(2000304456, "Mafia Town Area (HUMT)"), | ||
|  |     "Mafia Town - On Scaffolding": LocData(2000304457, "Mafia Town Area (HUMT)"), | ||
|  |     "Mafia Town - Cargo Ship": LocData(2000304459, "Mafia Town Area (HUMT)"), | ||
|  |     "Mafia Town - Beach Alcove": LocData(2000304463, "Mafia Town Area (HUMT)"), | ||
|  |     "Mafia Town - Wood Cage": LocData(2000304606, "Mafia Town Area (HUMT)"), | ||
|  |     "Mafia Town - Beach Patio": LocData(2000304610, "Mafia Town Area (HUMT)"), | ||
|  |     "Mafia Town - Steel Beam Nest": LocData(2000304608, "Mafia Town Area (HUMT)"), | ||
|  |     "Mafia Town - Top of Ruined Tower": LocData(2000304607, "Mafia Town Area (HUMT)", required_hats=[HatType.ICE]), | ||
|  |     "Mafia Town - Hot Air Balloon": LocData(2000304829, "Mafia Town Area (HUMT)", required_hats=[HatType.ICE]), | ||
|  |     "Mafia Town - Camera Badge 1": LocData(2000302003, "Mafia Town Area (HUMT)"), | ||
|  |     "Mafia Town - Camera Badge 2": LocData(2000302004, "Mafia Town Area (HUMT)"), | ||
|  |     "Mafia Town - Chest Beneath Aqueduct": LocData(2000303489, "Mafia Town Area (HUMT)"), | ||
|  |     "Mafia Town - Secret Cave": LocData(2000305220, "Mafia Town Area (HUMT)", required_hats=[HatType.BREWING]), | ||
|  |     "Mafia Town - Crow Chest": LocData(2000303532, "Mafia Town Area (HUMT)"), | ||
|  |     "Mafia Town - Above Boats": LocData(2000305218, "Mafia Town Area (HUMT)", hookshot=True), | ||
|  |     "Mafia Town - Slip Slide Chest": LocData(2000303529, "Mafia Town Area (HUMT)"), | ||
|  |     "Mafia Town - Behind Faucet": LocData(2000304214, "Mafia Town Area (HUMT)"), | ||
|  |     "Mafia Town - Clock Tower Chest": LocData(2000303481, "Mafia Town Area (HUMT)", hookshot=True), | ||
|  |     "Mafia Town - Top of Lighthouse": LocData(2000304213, "Mafia Town Area (HUMT)", hookshot=True), | ||
|  |     "Mafia Town - Mafia Geek Platform": LocData(2000304212, "Mafia Town Area (HUMT)"), | ||
|  |     "Mafia Town - Behind HQ Chest": LocData(2000303486, "Mafia Town Area (HUMT)"), | ||
|  | 
 | ||
|  |     "Mafia HQ - Hallway Brewing Crate": LocData(2000305387, "Down with the Mafia!", required_hats=[HatType.BREWING]), | ||
|  |     "Mafia HQ - Freezer Chest": LocData(2000303241, "Down with the Mafia!"), | ||
|  |     "Mafia HQ - Secret Room": LocData(2000304979, "Down with the Mafia!", required_hats=[HatType.ICE]), | ||
|  |     "Mafia HQ - Bathroom Stall Chest": LocData(2000303243, "Down with the Mafia!"), | ||
|  | 
 | ||
|  |     "Dead Bird Studio - Up the Ladder": LocData(2000304874, "Dead Bird Studio - Elevator Area"), | ||
|  |     "Dead Bird Studio - Red Building Top": LocData(2000305024, "Dead Bird Studio - Elevator Area"), | ||
|  |     "Dead Bird Studio - Behind Water Tower": LocData(2000305248, "Dead Bird Studio - Elevator Area"), | ||
|  |     "Dead Bird Studio - Side of House": LocData(2000305247, "Dead Bird Studio - Elevator Area"), | ||
|  | 
 | ||
|  |     "Dead Bird Studio - DJ Grooves Sign Chest": LocData(2000303901, "Dead Bird Studio - Post Elevator Area", | ||
|  |                                                         hit_type=HitType.umbrella_or_brewing), | ||
|  | 
 | ||
|  |     "Dead Bird Studio - Tightrope Chest": LocData(2000303898, "Dead Bird Studio - Post Elevator Area", | ||
|  |                                                   hit_type=HitType.umbrella_or_brewing), | ||
|  | 
 | ||
|  |     "Dead Bird Studio - Tepee Chest": LocData(2000303899, "Dead Bird Studio - Post Elevator Area", | ||
|  |                                               hit_type=HitType.umbrella_or_brewing), | ||
|  | 
 | ||
|  |     "Dead Bird Studio - Conductor Chest": LocData(2000303900, "Dead Bird Studio - Post Elevator Area", | ||
|  |                                                   hit_type=HitType.umbrella_or_brewing), | ||
|  | 
 | ||
|  |     "Murder on the Owl Express - Cafeteria": LocData(2000305313, "Murder on the Owl Express"), | ||
|  |     "Murder on the Owl Express - Luggage Room Top": LocData(2000305090, "Murder on the Owl Express"), | ||
|  |     "Murder on the Owl Express - Luggage Room Bottom": LocData(2000305091, "Murder on the Owl Express"), | ||
|  | 
 | ||
|  |     "Murder on the Owl Express - Raven Suite Room": LocData(2000305701, "Murder on the Owl Express", | ||
|  |                                                             required_hats=[HatType.BREWING]), | ||
|  | 
 | ||
|  |     "Murder on the Owl Express - Raven Suite Top": LocData(2000305312, "Murder on the Owl Express"), | ||
|  |     "Murder on the Owl Express - Lounge Chest": LocData(2000303963, "Murder on the Owl Express"), | ||
|  | 
 | ||
|  |     "Picture Perfect - Behind Badge Seller": LocData(2000304307, "Picture Perfect"), | ||
|  |     "Picture Perfect - Hats Buy Building": LocData(2000304530, "Picture Perfect"), | ||
|  | 
 | ||
|  |     "Dead Bird Studio Basement - Window Platform": LocData(2000305432, "Dead Bird Studio Basement", hookshot=True), | ||
|  |     "Dead Bird Studio Basement - Cardboard Conductor": LocData(2000305059, "Dead Bird Studio Basement", hookshot=True), | ||
|  |     "Dead Bird Studio Basement - Above Conductor Sign": LocData(2000305057, "Dead Bird Studio Basement", hookshot=True), | ||
|  |     "Dead Bird Studio Basement - Logo Wall": LocData(2000305207, "Dead Bird Studio Basement"), | ||
|  |     "Dead Bird Studio Basement - Disco Room": LocData(2000305061, "Dead Bird Studio Basement", hookshot=True), | ||
|  |     "Dead Bird Studio Basement - Small Room": LocData(2000304813, "Dead Bird Studio Basement"), | ||
|  |     "Dead Bird Studio Basement - Vent Pipe": LocData(2000305430, "Dead Bird Studio Basement"), | ||
|  |     "Dead Bird Studio Basement - Tightrope": LocData(2000305058, "Dead Bird Studio Basement", hookshot=True), | ||
|  |     "Dead Bird Studio Basement - Cameras": LocData(2000305431, "Dead Bird Studio Basement", hookshot=True), | ||
|  |     "Dead Bird Studio Basement - Locked Room": LocData(2000305819, "Dead Bird Studio Basement", hookshot=True), | ||
|  | 
 | ||
|  |     # Subcon Forest | ||
|  |     "Contractual Obligations - Cherry Bomb Bone Cage": LocData(2000324761, "Contractual Obligations"), | ||
|  |     "Subcon Village - Tree Top Ice Cube": LocData(2000325078, "Subcon Forest Area"), | ||
|  |     "Subcon Village - Graveyard Ice Cube": LocData(2000325077, "Subcon Forest Area"), | ||
|  |     "Subcon Village - House Top": LocData(2000325471, "Subcon Forest Area"), | ||
|  |     "Subcon Village - Ice Cube House": LocData(2000325469, "Subcon Forest Area"), | ||
|  |     "Subcon Village - Snatcher Statue Chest": LocData(2000323730, "Subcon Forest Area", paintings=1), | ||
|  |     "Subcon Village - Stump Platform Chest": LocData(2000323729, "Subcon Forest Area"), | ||
|  |     "Subcon Forest - Giant Tree Climb": LocData(2000325470, "Subcon Forest Area"), | ||
|  | 
 | ||
|  |     "Subcon Forest - Ice Cube Shack": LocData(2000324465, "Subcon Forest Area", paintings=1), | ||
|  |     "Subcon Forest - Swamp Gravestone": LocData(2000326296, "Subcon Forest Area", | ||
|  |                                                 required_hats=[HatType.BREWING], paintings=1), | ||
|  | 
 | ||
|  |     "Subcon Forest - Swamp Near Well": LocData(2000324762, "Subcon Forest Area", paintings=1), | ||
|  |     "Subcon Forest - Swamp Tree A": LocData(2000324763, "Subcon Forest Area", paintings=1), | ||
|  |     "Subcon Forest - Swamp Tree B": LocData(2000324764, "Subcon Forest Area", paintings=1), | ||
|  |     "Subcon Forest - Swamp Ice Wall": LocData(2000324706, "Subcon Forest Area", paintings=1), | ||
|  |     "Subcon Forest - Swamp Treehouse": LocData(2000325468, "Subcon Forest Area", paintings=1), | ||
|  |     "Subcon Forest - Swamp Tree Chest": LocData(2000323728, "Subcon Forest Area", paintings=1), | ||
|  | 
 | ||
|  |     "Subcon Forest - Burning House": LocData(2000324710, "Subcon Forest Area", paintings=2), | ||
|  |     "Subcon Forest - Burning Tree Climb": LocData(2000325079, "Subcon Forest Area", paintings=2), | ||
|  |     "Subcon Forest - Burning Stump Chest": LocData(2000323731, "Subcon Forest Area", paintings=2), | ||
|  |     "Subcon Forest - Burning Forest Treehouse": LocData(2000325467, "Subcon Forest Area", paintings=2), | ||
|  |     "Subcon Forest - Spider Bone Cage A": LocData(2000324462, "Subcon Forest Area", paintings=2), | ||
|  |     "Subcon Forest - Spider Bone Cage B": LocData(2000325080, "Subcon Forest Area", paintings=2), | ||
|  |     "Subcon Forest - Triple Spider Bounce": LocData(2000324765, "Subcon Forest Area", paintings=2), | ||
|  |     "Subcon Forest - Noose Treehouse": LocData(2000324856, "Subcon Forest Area", hookshot=True, paintings=2), | ||
|  | 
 | ||
|  |     "Subcon Forest - Long Tree Climb Chest": LocData(2000323734, "Subcon Forest Area", | ||
|  |                                                      required_hats=[HatType.DWELLER], paintings=2), | ||
|  | 
 | ||
|  |     "Subcon Forest - Boss Arena Chest": LocData(2000323735, "Subcon Forest Area"), | ||
|  | 
 | ||
|  |     "Subcon Forest - Manor Rooftop": LocData(2000325466, "Subcon Forest Area", | ||
|  |                                              hit_type=HitType.dweller_bell, paintings=1), | ||
|  | 
 | ||
|  |     "Subcon Forest - Infinite Yarn Bush": LocData(2000325478, "Subcon Forest Area", | ||
|  |                                                   required_hats=[HatType.BREWING], paintings=2), | ||
|  | 
 | ||
|  |     "Subcon Forest - Magnet Badge Bush": LocData(2000325479, "Subcon Forest Area", | ||
|  |                                                  required_hats=[HatType.BREWING], paintings=3), | ||
|  | 
 | ||
|  |     "Subcon Forest - Dweller Stump": LocData(2000324767, "Subcon Forest Area", | ||
|  |                                              required_hats=[HatType.DWELLER], paintings=3), | ||
|  | 
 | ||
|  |     "Subcon Forest - Dweller Floating Rocks": LocData(2000324464, "Subcon Forest Area", | ||
|  |                                                       required_hats=[HatType.DWELLER], paintings=3), | ||
|  | 
 | ||
|  |     "Subcon Forest - Dweller Platforming Tree A": LocData(2000324709, "Subcon Forest Area", paintings=3), | ||
|  | 
 | ||
|  |     "Subcon Forest - Dweller Platforming Tree B": LocData(2000324855, "Subcon Forest Area", | ||
|  |                                                           required_hats=[HatType.DWELLER], paintings=3), | ||
|  | 
 | ||
|  |     "Subcon Forest - Giant Time Piece": LocData(2000325473, "Subcon Forest Area", paintings=3), | ||
|  |     "Subcon Forest - Gallows": LocData(2000325472, "Subcon Forest Area", paintings=3), | ||
|  | 
 | ||
|  |     "Subcon Forest - Green and Purple Dweller Rocks": LocData(2000325082, "Subcon Forest Area", paintings=3), | ||
|  | 
 | ||
|  |     "Subcon Forest - Dweller Shack": LocData(2000324463, "Subcon Forest Area", | ||
|  |                                              required_hats=[HatType.DWELLER], paintings=3), | ||
|  | 
 | ||
|  |     "Subcon Forest - Tall Tree Hookshot Swing": LocData(2000324766, "Subcon Forest Area", | ||
|  |                                                         required_hats=[HatType.DWELLER], | ||
|  |                                                         hookshot=True, | ||
|  |                                                         paintings=3), | ||
|  | 
 | ||
|  |     "Subcon Well - Hookshot Badge Chest": LocData(2000324114, "The Subcon Well", | ||
|  |                                                   hit_type=HitType.umbrella_or_brewing, paintings=1), | ||
|  | 
 | ||
|  |     "Subcon Well - Above Chest": LocData(2000324612, "The Subcon Well", | ||
|  |                                          hit_type=HitType.umbrella_or_brewing, paintings=1), | ||
|  | 
 | ||
|  |     "Subcon Well - On Pipe": LocData(2000324311, "The Subcon Well", hookshot=True, | ||
|  |                                      hit_type=HitType.umbrella_or_brewing, paintings=1), | ||
|  | 
 | ||
|  |     "Subcon Well - Mushroom": LocData(2000325318, "The Subcon Well", | ||
|  |                                       hit_type=HitType.umbrella_or_brewing, paintings=1), | ||
|  | 
 | ||
|  |     "Queen Vanessa's Manor - Cellar": LocData(2000324841, "Queen Vanessa's Manor", | ||
|  |                                               hit_type=HitType.dweller_bell, paintings=1), | ||
|  | 
 | ||
|  |     "Queen Vanessa's Manor - Bedroom Chest": LocData(2000323808, "Queen Vanessa's Manor", | ||
|  |                                                      hit_type=HitType.dweller_bell, paintings=1), | ||
|  | 
 | ||
|  |     "Queen Vanessa's Manor - Hall Chest": LocData(2000323896, "Queen Vanessa's Manor", | ||
|  |                                                   hit_type=HitType.dweller_bell, paintings=1), | ||
|  | 
 | ||
|  |     "Queen Vanessa's Manor - Chandelier": LocData(2000325546, "Queen Vanessa's Manor", | ||
|  |                                                   hit_type=HitType.dweller_bell, paintings=1), | ||
|  | 
 | ||
|  |     # Alpine Skyline | ||
|  |     "Alpine Skyline - Goat Village: Below Hookpoint": LocData(2000334856, "Alpine Skyline Area (TIHS)"), | ||
|  |     "Alpine Skyline - Goat Village: Hidden Branch": LocData(2000334855, "Alpine Skyline Area (TIHS)"), | ||
|  |     "Alpine Skyline - Goat Refinery": LocData(2000333635, "Alpine Skyline Area (TIHS)", hookshot=True), | ||
|  |     "Alpine Skyline - Bird Pass Fork": LocData(2000335911, "Alpine Skyline Area (TIHS)", hookshot=True), | ||
|  | 
 | ||
|  |     "Alpine Skyline - Yellow Band Hills": LocData(2000335756, "Alpine Skyline Area (TIHS)", hookshot=True, | ||
|  |                                                   required_hats=[HatType.BREWING]), | ||
|  | 
 | ||
|  |     "Alpine Skyline - The Purrloined Village: Horned Stone": LocData(2000335561, "Alpine Skyline Area"), | ||
|  |     "Alpine Skyline - The Purrloined Village: Chest Reward": LocData(2000334831, "Alpine Skyline Area"), | ||
|  |     "Alpine Skyline - The Birdhouse: Triple Crow Chest": LocData(2000334758, "The Birdhouse"), | ||
|  | 
 | ||
|  |     "Alpine Skyline - The Birdhouse: Dweller Platforms Relic": LocData(2000336497, "The Birdhouse", | ||
|  |                                                                        required_hats=[HatType.DWELLER]), | ||
|  | 
 | ||
|  |     "Alpine Skyline - The Birdhouse: Brewing Crate House": LocData(2000336496, "The Birdhouse"), | ||
|  |     "Alpine Skyline - The Birdhouse: Hay Bale": LocData(2000335885, "The Birdhouse"), | ||
|  |     "Alpine Skyline - The Birdhouse: Alpine Crow Mini-Gauntlet": LocData(2000335886, "The Birdhouse"), | ||
|  |     "Alpine Skyline - The Birdhouse: Outer Edge": LocData(2000335492, "The Birdhouse"), | ||
|  | 
 | ||
|  |     "Alpine Skyline - Mystifying Time Mesa: Zipline": LocData(2000337058, "Alpine Skyline Area"), | ||
|  |     "Alpine Skyline - Mystifying Time Mesa: Gate Puzzle": LocData(2000336052, "Alpine Skyline Area"), | ||
|  |     "Alpine Skyline - Ember Summit": LocData(2000336311, "Alpine Skyline Area (TIHS)", hookshot=True), | ||
|  |     "Alpine Skyline - The Lava Cake: Center Fence Cage": LocData(2000335448, "The Lava Cake"), | ||
|  |     "Alpine Skyline - The Lava Cake: Outer Island Chest": LocData(2000334291, "The Lava Cake"), | ||
|  |     "Alpine Skyline - The Lava Cake: Dweller Pillars": LocData(2000335417, "The Lava Cake"), | ||
|  |     "Alpine Skyline - The Lava Cake: Top Cake": LocData(2000335418, "The Lava Cake"), | ||
|  |     "Alpine Skyline - The Twilight Path": LocData(2000334434, "Alpine Skyline Area", required_hats=[HatType.DWELLER]), | ||
|  |     "Alpine Skyline - The Twilight Bell: Wide Purple Platform": LocData(2000336478, "The Twilight Bell"), | ||
|  |     "Alpine Skyline - The Twilight Bell: Ice Platform": LocData(2000335826, "The Twilight Bell"), | ||
|  |     "Alpine Skyline - Goat Outpost Horn": LocData(2000334760, "Alpine Skyline Area"), | ||
|  |     "Alpine Skyline - Windy Passage": LocData(2000334776, "Alpine Skyline Area (TIHS)", hookshot=True), | ||
|  |     "Alpine Skyline - The Windmill: Inside Pon Cluster": LocData(2000336395, "The Windmill"), | ||
|  |     "Alpine Skyline - The Windmill: Entrance": LocData(2000335783, "The Windmill"), | ||
|  |     "Alpine Skyline - The Windmill: Dropdown": LocData(2000335815, "The Windmill"), | ||
|  |     "Alpine Skyline - The Windmill: House Window": LocData(2000335389, "The Windmill"), | ||
|  | 
 | ||
|  |     "The Finale - Frozen Item": LocData(2000304108, "The Finale"), | ||
|  | 
 | ||
|  |     "Bon Voyage! - Lamp Post Top": LocData(2000305321, "Bon Voyage!", dlc_flags=HatDLC.dlc1), | ||
|  |     "Bon Voyage! - Mafia Cargo Ship": LocData(2000304313, "Bon Voyage!", dlc_flags=HatDLC.dlc1), | ||
|  |     "The Arctic Cruise - Toilet": LocData(2000305109, "Cruise Ship", dlc_flags=HatDLC.dlc1), | ||
|  |     "The Arctic Cruise - Bar": LocData(2000304251, "Cruise Ship", dlc_flags=HatDLC.dlc1), | ||
|  |     "The Arctic Cruise - Dive Board Ledge": LocData(2000304254, "Cruise Ship", dlc_flags=HatDLC.dlc1), | ||
|  |     "The Arctic Cruise - Top Balcony": LocData(2000304255, "Cruise Ship", dlc_flags=HatDLC.dlc1), | ||
|  |     "The Arctic Cruise - Octopus Room": LocData(2000305253, "Cruise Ship", dlc_flags=HatDLC.dlc1), | ||
|  |     "The Arctic Cruise - Octopus Room Top": LocData(2000304249, "Cruise Ship", dlc_flags=HatDLC.dlc1), | ||
|  |     "The Arctic Cruise - Laundry Room": LocData(2000304250, "Cruise Ship", dlc_flags=HatDLC.dlc1), | ||
|  |     "The Arctic Cruise - Ship Side": LocData(2000304247, "Cruise Ship", dlc_flags=HatDLC.dlc1), | ||
|  |     "The Arctic Cruise - Silver Ring": LocData(2000305252, "Cruise Ship", dlc_flags=HatDLC.dlc1), | ||
|  |     "Rock the Boat - Reception Room - Suitcase": LocData(2000304045, "Rock the Boat", dlc_flags=HatDLC.dlc1), | ||
|  |     "Rock the Boat - Reception Room - Under Desk": LocData(2000304047, "Rock the Boat", dlc_flags=HatDLC.dlc1), | ||
|  |     "Rock the Boat - Lamp Post": LocData(2000304048, "Rock the Boat", dlc_flags=HatDLC.dlc1), | ||
|  |     "Rock the Boat - Iceberg Top": LocData(2000304046, "Rock the Boat", dlc_flags=HatDLC.dlc1), | ||
|  |     "Rock the Boat - Post Captain Rescue": LocData(2000304049, "Rock the Boat", dlc_flags=HatDLC.dlc1, | ||
|  |                                                    required_hats=[HatType.ICE]), | ||
|  | 
 | ||
|  |     "Nyakuza Metro - Main Station Dining Area": LocData(2000304105, "Nyakuza Free Roam", dlc_flags=HatDLC.dlc2), | ||
|  |     "Nyakuza Metro - Top of Ramen Shop": LocData(2000304104, "Nyakuza Free Roam", dlc_flags=HatDLC.dlc2), | ||
|  | 
 | ||
|  |     "Yellow Overpass Station - Brewing Crate": LocData(2000305413, "Yellow Overpass Station", | ||
|  |                                                        dlc_flags=HatDLC.dlc2, | ||
|  |                                                        required_hats=[HatType.BREWING]), | ||
|  | 
 | ||
|  |     "Bluefin Tunnel - Cat Vacuum": LocData(2000305111, "Bluefin Tunnel", dlc_flags=HatDLC.dlc2), | ||
|  | 
 | ||
|  |     "Pink Paw Station - Cat Vacuum": LocData(2000305110, "Pink Paw Station", | ||
|  |                                              dlc_flags=HatDLC.dlc2, | ||
|  |                                              hookshot=True, | ||
|  |                                              required_hats=[HatType.DWELLER]), | ||
|  | 
 | ||
|  |     "Pink Paw Station - Behind Fan": LocData(2000304106, "Pink Paw Station", | ||
|  |                                              dlc_flags=HatDLC.dlc2, | ||
|  |                                              hookshot=True, | ||
|  |                                              required_hats=[HatType.TIME_STOP, HatType.DWELLER]), | ||
|  | } | ||
|  | 
 | ||
|  | act_completions = { | ||
|  |     "Act Completion (Time Rift - Gallery)": LocData(2000312758, "Time Rift - Gallery", required_hats=[HatType.BREWING]), | ||
|  |     "Act Completion (Time Rift - The Lab)": LocData(2000312838, "Time Rift - The Lab"), | ||
|  | 
 | ||
|  |     "Act Completion (Welcome to Mafia Town)": LocData(2000311771, "Welcome to Mafia Town"), | ||
|  |     "Act Completion (Barrel Battle)": LocData(2000311958, "Barrel Battle"), | ||
|  |     "Act Completion (She Came from Outer Space)": LocData(2000312262, "She Came from Outer Space"), | ||
|  |     "Act Completion (Down with the Mafia!)": LocData(2000311326, "Down with the Mafia!"), | ||
|  |     "Act Completion (Cheating the Race)": LocData(2000312318, "Cheating the Race", required_hats=[HatType.TIME_STOP]), | ||
|  |     "Act Completion (Heating Up Mafia Town)": LocData(2000311481, "Heating Up Mafia Town", hit_type=HitType.umbrella), | ||
|  |     "Act Completion (The Golden Vault)": LocData(2000312250, "The Golden Vault"), | ||
|  |     "Act Completion (Time Rift - Bazaar)": LocData(2000312465, "Time Rift - Bazaar"), | ||
|  |     "Act Completion (Time Rift - Sewers)": LocData(2000312484, "Time Rift - Sewers"), | ||
|  |     "Act Completion (Time Rift - Mafia of Cooks)": LocData(2000311855, "Time Rift - Mafia of Cooks"), | ||
|  | 
 | ||
|  |     "Act Completion (Dead Bird Studio)": LocData(2000311383, "Dead Bird Studio", | ||
|  |                                                  hit_type=HitType.umbrella_or_brewing), | ||
|  | 
 | ||
|  |     "Act Completion (Murder on the Owl Express)": LocData(2000311544, "Murder on the Owl Express"), | ||
|  |     "Act Completion (Picture Perfect)": LocData(2000311587, "Picture Perfect"), | ||
|  |     "Act Completion (Train Rush)": LocData(2000312481, "Train Rush", hookshot=True), | ||
|  |     "Act Completion (The Big Parade)": LocData(2000311157, "The Big Parade", hit_type=HitType.umbrella), | ||
|  |     "Act Completion (Award Ceremony)": LocData(2000311488, "Award Ceremony"), | ||
|  |     "Act Completion (Dead Bird Studio Basement)": LocData(2000312253, "Dead Bird Studio Basement", hookshot=True), | ||
|  |     "Act Completion (Time Rift - The Owl Express)": LocData(2000312807, "Time Rift - The Owl Express"), | ||
|  |     "Act Completion (Time Rift - The Moon)": LocData(2000312785, "Time Rift - The Moon"), | ||
|  |     "Act Completion (Time Rift - Dead Bird Studio)": LocData(2000312577, "Time Rift - Dead Bird Studio"), | ||
|  | 
 | ||
|  |     "Act Completion (Contractual Obligations)": LocData(2000312317, "Contractual Obligations", paintings=1), | ||
|  | 
 | ||
|  |     "Act Completion (The Subcon Well)": LocData(2000311160, "The Subcon Well", | ||
|  |                                                 hookshot=True, hit_type=HitType.umbrella_or_brewing, paintings=1), | ||
|  | 
 | ||
|  |     "Act Completion (Toilet of Doom)": LocData(2000311984, "Toilet of Doom", | ||
|  |                                                hit_type=HitType.umbrella_or_brewing, hookshot=True, paintings=1), | ||
|  | 
 | ||
|  |     "Act Completion (Queen Vanessa's Manor)": LocData(2000312017, "Queen Vanessa's Manor", | ||
|  |                                                       hit_type=HitType.umbrella, paintings=1), | ||
|  | 
 | ||
|  |     "Act Completion (Mail Delivery Service)": LocData(2000312032, "Mail Delivery Service", | ||
|  |                                                       required_hats=[HatType.SPRINT]), | ||
|  | 
 | ||
|  |     "Act Completion (Your Contract has Expired)": LocData(2000311390, "Your Contract has Expired", | ||
|  |                                                           hit_type=HitType.umbrella), | ||
|  | 
 | ||
|  |     "Act Completion (Time Rift - Pipe)": LocData(2000313069, "Time Rift - Pipe", hookshot=True), | ||
|  |     "Act Completion (Time Rift - Village)": LocData(2000313056, "Time Rift - Village"), | ||
|  |     "Act Completion (Time Rift - Sleepy Subcon)": LocData(2000312086, "Time Rift - Sleepy Subcon"), | ||
|  | 
 | ||
|  |     "Act Completion (The Birdhouse)": LocData(2000311428, "The Birdhouse"), | ||
|  |     "Act Completion (The Lava Cake)": LocData(2000312509, "The Lava Cake"), | ||
|  |     "Act Completion (The Twilight Bell)": LocData(2000311540, "The Twilight Bell"), | ||
|  |     "Act Completion (The Windmill)": LocData(2000312263, "The Windmill"), | ||
|  |     "Act Completion (The Illness has Spread)": LocData(2000312022, "The Illness has Spread", hookshot=True), | ||
|  | 
 | ||
|  |     "Act Completion (Time Rift - The Twilight Bell)": LocData(2000312399, "Time Rift - The Twilight Bell", | ||
|  |                                                               required_hats=[HatType.DWELLER]), | ||
|  | 
 | ||
|  |     "Act Completion (Time Rift - Curly Tail Trail)": LocData(2000313335, "Time Rift - Curly Tail Trail", | ||
|  |                                                              required_hats=[HatType.ICE]), | ||
|  | 
 | ||
|  |     "Act Completion (Time Rift - Alpine Skyline)": LocData(2000311777, "Time Rift - Alpine Skyline"), | ||
|  | 
 | ||
|  |     "Act Completion (The Finale)": LocData(2000311872, "The Finale", hookshot=True, required_hats=[HatType.DWELLER]), | ||
|  |     "Act Completion (Time Rift - Tour)": LocData(2000311803, "Time Rift - Tour", dlc_flags=HatDLC.dlc1), | ||
|  | 
 | ||
|  |     "Act Completion (Bon Voyage!)": LocData(2000311520, "Bon Voyage!", dlc_flags=HatDLC.dlc1, hookshot=True), | ||
|  |     "Act Completion (Ship Shape)": LocData(2000311451, "Ship Shape", dlc_flags=HatDLC.dlc1), | ||
|  | 
 | ||
|  |     "Act Completion (Rock the Boat)": LocData(2000311437, "Rock the Boat", dlc_flags=HatDLC.dlc1, | ||
|  |                                               required_hats=[HatType.ICE]), | ||
|  | 
 | ||
|  |     "Act Completion (Time Rift - Balcony)": LocData(2000312226, "Time Rift - Balcony", dlc_flags=HatDLC.dlc1, | ||
|  |                                                     hookshot=True), | ||
|  | 
 | ||
|  |     "Act Completion (Time Rift - Deep Sea)": LocData(2000312434, "Time Rift - Deep Sea", dlc_flags=HatDLC.dlc1, | ||
|  |                                                      hookshot=True, required_hats=[HatType.DWELLER, HatType.ICE]), | ||
|  | 
 | ||
|  |     "Act Completion (Nyakuza Metro Intro)": LocData(2000311138, "Nyakuza Free Roam", dlc_flags=HatDLC.dlc2), | ||
|  | 
 | ||
|  |     "Act Completion (Yellow Overpass Station)": LocData(2000311206, "Yellow Overpass Station", | ||
|  |                                                         dlc_flags=HatDLC.dlc2, | ||
|  |                                                         hookshot=True), | ||
|  | 
 | ||
|  |     "Act Completion (Yellow Overpass Manhole)": LocData(2000311387, "Yellow Overpass Manhole", | ||
|  |                                                         dlc_flags=HatDLC.dlc2, | ||
|  |                                                         required_hats=[HatType.ICE]), | ||
|  | 
 | ||
|  |     "Act Completion (Green Clean Station)": LocData(2000311207, "Green Clean Station", dlc_flags=HatDLC.dlc2), | ||
|  | 
 | ||
|  |     "Act Completion (Green Clean Manhole)": LocData(2000311388, "Green Clean Manhole", | ||
|  |                                                     dlc_flags=HatDLC.dlc2, | ||
|  |                                                     required_hats=[HatType.ICE, HatType.DWELLER]), | ||
|  | 
 | ||
|  |     "Act Completion (Bluefin Tunnel)": LocData(2000311208, "Bluefin Tunnel", dlc_flags=HatDLC.dlc2), | ||
|  | 
 | ||
|  |     "Act Completion (Pink Paw Station)": LocData(2000311209, "Pink Paw Station", | ||
|  |                                                  dlc_flags=HatDLC.dlc2, | ||
|  |                                                  hookshot=True, | ||
|  |                                                  required_hats=[HatType.DWELLER]), | ||
|  | 
 | ||
|  |     "Act Completion (Pink Paw Manhole)": LocData(2000311389, "Pink Paw Manhole", | ||
|  |                                                  dlc_flags=HatDLC.dlc2, | ||
|  |                                                  required_hats=[HatType.ICE]), | ||
|  | 
 | ||
|  |     "Act Completion (Rush Hour)": LocData(2000311210, "Rush Hour", | ||
|  |                                           dlc_flags=HatDLC.dlc2, | ||
|  |                                           hookshot=True, | ||
|  |                                           required_hats=[HatType.ICE, HatType.BREWING]), | ||
|  | 
 | ||
|  |     "Act Completion (Time Rift - Rumbi Factory)": LocData(2000312736, "Time Rift - Rumbi Factory", | ||
|  |                                                           dlc_flags=HatDLC.dlc2), | ||
|  | } | ||
|  | 
 | ||
|  | storybook_pages = { | ||
|  |     "Mafia of Cooks - Page: Fish Pile": LocData(2000345091, "Time Rift - Mafia of Cooks"), | ||
|  |     "Mafia of Cooks - Page: Trash Mound": LocData(2000345090, "Time Rift - Mafia of Cooks"), | ||
|  |     "Mafia of Cooks - Page: Beside Red Building": LocData(2000345092, "Time Rift - Mafia of Cooks"), | ||
|  |     "Mafia of Cooks - Page: Behind Shipping Containers": LocData(2000345095, "Time Rift - Mafia of Cooks"), | ||
|  |     "Mafia of Cooks - Page: Top of Boat": LocData(2000345093, "Time Rift - Mafia of Cooks"), | ||
|  |     "Mafia of Cooks - Page: Below Dock": LocData(2000345094, "Time Rift - Mafia of Cooks"), | ||
|  | 
 | ||
|  |     "Dead Bird Studio (Rift) - Page: Behind Cardboard Planet": LocData(2000345449, "Time Rift - Dead Bird Studio"), | ||
|  |     "Dead Bird Studio (Rift) - Page: Near Time Rift Gate": LocData(2000345447, "Time Rift - Dead Bird Studio"), | ||
|  |     "Dead Bird Studio (Rift) - Page: Top of Metal Bar": LocData(2000345448, "Time Rift - Dead Bird Studio"), | ||
|  |     "Dead Bird Studio (Rift) - Page: Lava Lamp": LocData(2000345450, "Time Rift - Dead Bird Studio"), | ||
|  |     "Dead Bird Studio (Rift) - Page: Above Horse Picture": LocData(2000345451, "Time Rift - Dead Bird Studio"), | ||
|  |     "Dead Bird Studio (Rift) - Page: Green Screen": LocData(2000345452, "Time Rift - Dead Bird Studio"), | ||
|  |     "Dead Bird Studio (Rift) - Page: In The Corner": LocData(2000345453, "Time Rift - Dead Bird Studio"), | ||
|  |     "Dead Bird Studio (Rift) - Page: Above TV Room": LocData(2000345445, "Time Rift - Dead Bird Studio"), | ||
|  | 
 | ||
|  |     "Sleepy Subcon - Page: Behind Entrance Area": LocData(2000345373, "Time Rift - Sleepy Subcon"), | ||
|  |     "Sleepy Subcon - Page: Near Wrecking Ball": LocData(2000345327, "Time Rift - Sleepy Subcon"), | ||
|  |     "Sleepy Subcon - Page: Behind Crane": LocData(2000345371, "Time Rift - Sleepy Subcon"), | ||
|  |     "Sleepy Subcon - Page: Wrecked Treehouse": LocData(2000345326, "Time Rift - Sleepy Subcon"), | ||
|  |     "Sleepy Subcon - Page: Behind 2nd Rift Gate": LocData(2000345372, "Time Rift - Sleepy Subcon"), | ||
|  |     "Sleepy Subcon - Page: Rotating Platform": LocData(2000345328, "Time Rift - Sleepy Subcon"), | ||
|  |     "Sleepy Subcon - Page: Behind 3rd Rift Gate": LocData(2000345329, "Time Rift - Sleepy Subcon"), | ||
|  |     "Sleepy Subcon - Page: Frozen Tree": LocData(2000345330, "Time Rift - Sleepy Subcon"), | ||
|  |     "Sleepy Subcon - Page: Secret Library": LocData(2000345370, "Time Rift - Sleepy Subcon"), | ||
|  | 
 | ||
|  |     "Alpine Skyline (Rift) - Page: Entrance Area Hidden Ledge": LocData(2000345016, "Time Rift - Alpine Skyline"), | ||
|  |     "Alpine Skyline (Rift) - Page: Windmill Island Ledge": LocData(2000345012, "Time Rift - Alpine Skyline"), | ||
|  |     "Alpine Skyline (Rift) - Page: Waterfall Wooden Pillar": LocData(2000345015, "Time Rift - Alpine Skyline"), | ||
|  |     "Alpine Skyline (Rift) - Page: Lonely Birdhouse Top": LocData(2000345014, "Time Rift - Alpine Skyline"), | ||
|  |     "Alpine Skyline (Rift) - Page: Below Aqueduct": LocData(2000345013, "Time Rift - Alpine Skyline"), | ||
|  | 
 | ||
|  |     "Deep Sea - Page: Starfish": LocData(2000346454, "Time Rift - Deep Sea", dlc_flags=HatDLC.dlc1), | ||
|  |     "Deep Sea - Page: Mini Castle": LocData(2000346452, "Time Rift - Deep Sea", dlc_flags=HatDLC.dlc1), | ||
|  |     "Deep Sea - Page: Urchins": LocData(2000346449, "Time Rift - Deep Sea", dlc_flags=HatDLC.dlc1), | ||
|  | 
 | ||
|  |     "Deep Sea - Page: Big Castle": LocData(2000346450, "Time Rift - Deep Sea", dlc_flags=HatDLC.dlc1, | ||
|  |                                            hookshot=True), | ||
|  | 
 | ||
|  |     "Deep Sea - Page: Castle Top Chest": LocData(2000304850, "Time Rift - Deep Sea", dlc_flags=HatDLC.dlc1, | ||
|  |                                                  hookshot=True), | ||
|  | 
 | ||
|  |     "Deep Sea - Page: Urchin Ledge": LocData(2000346451, "Time Rift - Deep Sea", dlc_flags=HatDLC.dlc1, | ||
|  |                                              hookshot=True), | ||
|  | 
 | ||
|  |     "Deep Sea - Page: Hidden Castle Chest": LocData(2000304849, "Time Rift - Deep Sea", dlc_flags=HatDLC.dlc1, | ||
|  |                                                     hookshot=True), | ||
|  | 
 | ||
|  |     "Deep Sea - Page: Falling Platform": LocData(2000346456, "Time Rift - Deep Sea", dlc_flags=HatDLC.dlc1, | ||
|  |                                                  hookshot=True), | ||
|  | 
 | ||
|  |     "Deep Sea - Page: Lava Starfish": LocData(2000346453, "Time Rift - Deep Sea", dlc_flags=HatDLC.dlc1, | ||
|  |                                               hookshot=True), | ||
|  | 
 | ||
|  |     "Tour - Page: Mafia Town - Ledge": LocData(2000345038, "Time Rift - Tour", dlc_flags=HatDLC.dlc1), | ||
|  |     "Tour - Page: Mafia Town - Beach": LocData(2000345039, "Time Rift - Tour", dlc_flags=HatDLC.dlc1), | ||
|  |     "Tour - Page: Dead Bird Studio - C.A.W. Agents": LocData(2000345040, "Time Rift - Tour", dlc_flags=HatDLC.dlc1), | ||
|  |     "Tour - Page: Dead Bird Studio - Fragile Box": LocData(2000345041, "Time Rift - Tour", dlc_flags=HatDLC.dlc1), | ||
|  |     "Tour - Page: Subcon Forest - Giant Frozen Tree": LocData(2000345042, "Time Rift - Tour", dlc_flags=HatDLC.dlc1), | ||
|  |     "Tour - Page: Subcon Forest - Top of Pillar": LocData(2000345043, "Time Rift - Tour", dlc_flags=HatDLC.dlc1), | ||
|  |     "Tour - Page: Alpine Skyline - Birdhouse": LocData(2000345044, "Time Rift - Tour", dlc_flags=HatDLC.dlc1), | ||
|  |     "Tour - Page: Alpine Skyline - Behind Lava Isle": LocData(2000345047, "Time Rift - Tour", dlc_flags=HatDLC.dlc1), | ||
|  |     "Tour - Page: The Finale - Near Entrance": LocData(2000345087, "Time Rift - Tour", dlc_flags=HatDLC.dlc1), | ||
|  | 
 | ||
|  |     "Rumbi Factory - Page: Manhole": LocData(2000345891, "Time Rift - Rumbi Factory", dlc_flags=HatDLC.dlc2), | ||
|  |     "Rumbi Factory - Page: Shutter Doors": LocData(2000345888, "Time Rift - Rumbi Factory", dlc_flags=HatDLC.dlc2), | ||
|  | 
 | ||
|  |     "Rumbi Factory - Page: Toxic Waste Dispenser": LocData(2000345892, "Time Rift - Rumbi Factory", | ||
|  |                                                            dlc_flags=HatDLC.dlc2), | ||
|  | 
 | ||
|  |     "Rumbi Factory - Page: 3rd Area Ledge": LocData(2000345889, "Time Rift - Rumbi Factory", dlc_flags=HatDLC.dlc2), | ||
|  | 
 | ||
|  |     "Rumbi Factory - Page: Green Box Assembly Line": LocData(2000345884, "Time Rift - Rumbi Factory", | ||
|  |                                                              dlc_flags=HatDLC.dlc2), | ||
|  | 
 | ||
|  |     "Rumbi Factory - Page: Broken Window": LocData(2000345885, "Time Rift - Rumbi Factory", dlc_flags=HatDLC.dlc2), | ||
|  |     "Rumbi Factory - Page: Money Vault": LocData(2000345890, "Time Rift - Rumbi Factory", dlc_flags=HatDLC.dlc2), | ||
|  |     "Rumbi Factory - Page: Warehouse Boxes": LocData(2000345887, "Time Rift - Rumbi Factory", dlc_flags=HatDLC.dlc2), | ||
|  |     "Rumbi Factory - Page: Glass Shelf": LocData(2000345886, "Time Rift - Rumbi Factory", dlc_flags=HatDLC.dlc2), | ||
|  |     "Rumbi Factory - Page: Last Area": LocData(2000345883, "Time Rift - Rumbi Factory", dlc_flags=HatDLC.dlc2), | ||
|  | } | ||
|  | 
 | ||
|  | shop_locations = { | ||
|  |     "Badge Seller - Item 1": LocData(2000301003, "Badge Seller"), | ||
|  |     "Badge Seller - Item 2": LocData(2000301004, "Badge Seller"), | ||
|  |     "Badge Seller - Item 3": LocData(2000301005, "Badge Seller"), | ||
|  |     "Badge Seller - Item 4": LocData(2000301006, "Badge Seller"), | ||
|  |     "Badge Seller - Item 5": LocData(2000301007, "Badge Seller"), | ||
|  |     "Badge Seller - Item 6": LocData(2000301008, "Badge Seller"), | ||
|  |     "Badge Seller - Item 7": LocData(2000301009, "Badge Seller"), | ||
|  |     "Badge Seller - Item 8": LocData(2000301010, "Badge Seller"), | ||
|  |     "Badge Seller - Item 9": LocData(2000301011, "Badge Seller"), | ||
|  |     "Badge Seller - Item 10": LocData(2000301012, "Badge Seller"), | ||
|  |     "Mafia Boss Shop Item": LocData(2000301013, "Spaceship"), | ||
|  | 
 | ||
|  |     "Yellow Overpass Station - Yellow Ticket Booth": LocData(2000301014, "Yellow Overpass Station", | ||
|  |                                                              dlc_flags=HatDLC.dlc2), | ||
|  | 
 | ||
|  |     "Green Clean Station - Green Ticket Booth": LocData(2000301015, "Green Clean Station", dlc_flags=HatDLC.dlc2), | ||
|  |     "Bluefin Tunnel - Blue Ticket Booth": LocData(2000301016, "Bluefin Tunnel", dlc_flags=HatDLC.dlc2), | ||
|  | 
 | ||
|  |     "Pink Paw Station - Pink Ticket Booth": LocData(2000301017, "Pink Paw Station", dlc_flags=HatDLC.dlc2, | ||
|  |                                                     hookshot=True, required_hats=[HatType.DWELLER]), | ||
|  | 
 | ||
|  |     "Main Station Thug A - Item 1": LocData(2000301048, "Nyakuza Free Roam", dlc_flags=HatDLC.dlc2, | ||
|  |                                             nyakuza_thug="Hat_NPC_NyakuzaShop_0"), | ||
|  |     "Main Station Thug A - Item 2": LocData(2000301049, "Nyakuza Free Roam", dlc_flags=HatDLC.dlc2, | ||
|  |                                             nyakuza_thug="Hat_NPC_NyakuzaShop_0"), | ||
|  |     "Main Station Thug A - Item 3": LocData(2000301050, "Nyakuza Free Roam", dlc_flags=HatDLC.dlc2, | ||
|  |                                             nyakuza_thug="Hat_NPC_NyakuzaShop_0"), | ||
|  |     "Main Station Thug A - Item 4": LocData(2000301051, "Nyakuza Free Roam", dlc_flags=HatDLC.dlc2, | ||
|  |                                             nyakuza_thug="Hat_NPC_NyakuzaShop_0"), | ||
|  |     "Main Station Thug A - Item 5": LocData(2000301052, "Nyakuza Free Roam", dlc_flags=HatDLC.dlc2, | ||
|  |                                             nyakuza_thug="Hat_NPC_NyakuzaShop_0"), | ||
|  | 
 | ||
|  |     "Main Station Thug B - Item 1": LocData(2000301053, "Nyakuza Free Roam", dlc_flags=HatDLC.dlc2, | ||
|  |                                             nyakuza_thug="Hat_NPC_NyakuzaShop_1"), | ||
|  |     "Main Station Thug B - Item 2": LocData(2000301054, "Nyakuza Free Roam", dlc_flags=HatDLC.dlc2, | ||
|  |                                             nyakuza_thug="Hat_NPC_NyakuzaShop_1"), | ||
|  |     "Main Station Thug B - Item 3": LocData(2000301055, "Nyakuza Free Roam", dlc_flags=HatDLC.dlc2, | ||
|  |                                             nyakuza_thug="Hat_NPC_NyakuzaShop_1"), | ||
|  |     "Main Station Thug B - Item 4": LocData(2000301056, "Nyakuza Free Roam", dlc_flags=HatDLC.dlc2, | ||
|  |                                             nyakuza_thug="Hat_NPC_NyakuzaShop_1"), | ||
|  |     "Main Station Thug B - Item 5": LocData(2000301057, "Nyakuza Free Roam", dlc_flags=HatDLC.dlc2, | ||
|  |                                             nyakuza_thug="Hat_NPC_NyakuzaShop_1"), | ||
|  | 
 | ||
|  |     "Main Station Thug C - Item 1": LocData(2000301058, "Nyakuza Free Roam", dlc_flags=HatDLC.dlc2, | ||
|  |                                             nyakuza_thug="Hat_NPC_NyakuzaShop_2"), | ||
|  |     "Main Station Thug C - Item 2": LocData(2000301059, "Nyakuza Free Roam", dlc_flags=HatDLC.dlc2, | ||
|  |                                             nyakuza_thug="Hat_NPC_NyakuzaShop_2"), | ||
|  |     "Main Station Thug C - Item 3": LocData(2000301060, "Nyakuza Free Roam", dlc_flags=HatDLC.dlc2, | ||
|  |                                             nyakuza_thug="Hat_NPC_NyakuzaShop_2"), | ||
|  |     "Main Station Thug C - Item 4": LocData(2000301061, "Nyakuza Free Roam", dlc_flags=HatDLC.dlc2, | ||
|  |                                             nyakuza_thug="Hat_NPC_NyakuzaShop_2"), | ||
|  |     "Main Station Thug C - Item 5": LocData(2000301062, "Nyakuza Free Roam", dlc_flags=HatDLC.dlc2, | ||
|  |                                             nyakuza_thug="Hat_NPC_NyakuzaShop_2"), | ||
|  | 
 | ||
|  |     "Yellow Overpass Thug A - Item 1": LocData(2000301018, "Yellow Overpass Station", dlc_flags=HatDLC.dlc2, | ||
|  |                                                nyakuza_thug="Hat_NPC_NyakuzaShop_13"), | ||
|  |     "Yellow Overpass Thug A - Item 2": LocData(2000301019, "Yellow Overpass Station", dlc_flags=HatDLC.dlc2, | ||
|  |                                                nyakuza_thug="Hat_NPC_NyakuzaShop_13"), | ||
|  |     "Yellow Overpass Thug A - Item 3": LocData(2000301020, "Yellow Overpass Station", dlc_flags=HatDLC.dlc2, | ||
|  |                                                nyakuza_thug="Hat_NPC_NyakuzaShop_13"), | ||
|  |     "Yellow Overpass Thug A - Item 4": LocData(2000301021, "Yellow Overpass Station", dlc_flags=HatDLC.dlc2, | ||
|  |                                                nyakuza_thug="Hat_NPC_NyakuzaShop_13"), | ||
|  |     "Yellow Overpass Thug A - Item 5": LocData(2000301022, "Yellow Overpass Station", dlc_flags=HatDLC.dlc2, | ||
|  |                                                nyakuza_thug="Hat_NPC_NyakuzaShop_13"), | ||
|  | 
 | ||
|  |     "Yellow Overpass Thug B - Item 1": LocData(2000301043, "Yellow Overpass Station", dlc_flags=HatDLC.dlc2, | ||
|  |                                                nyakuza_thug="Hat_NPC_NyakuzaShop_5"), | ||
|  |     "Yellow Overpass Thug B - Item 2": LocData(2000301044, "Yellow Overpass Station", dlc_flags=HatDLC.dlc2, | ||
|  |                                                nyakuza_thug="Hat_NPC_NyakuzaShop_5"), | ||
|  |     "Yellow Overpass Thug B - Item 3": LocData(2000301045, "Yellow Overpass Station", dlc_flags=HatDLC.dlc2, | ||
|  |                                                nyakuza_thug="Hat_NPC_NyakuzaShop_5"), | ||
|  |     "Yellow Overpass Thug B - Item 4": LocData(2000301046, "Yellow Overpass Station", dlc_flags=HatDLC.dlc2, | ||
|  |                                                nyakuza_thug="Hat_NPC_NyakuzaShop_5"), | ||
|  |     "Yellow Overpass Thug B - Item 5": LocData(2000301047, "Yellow Overpass Station", dlc_flags=HatDLC.dlc2, | ||
|  |                                                nyakuza_thug="Hat_NPC_NyakuzaShop_5"), | ||
|  | 
 | ||
|  |     "Yellow Overpass Thug C - Item 1": LocData(2000301063, "Yellow Overpass Station", dlc_flags=HatDLC.dlc2, | ||
|  |                                                nyakuza_thug="Hat_NPC_NyakuzaShop_14"), | ||
|  |     "Yellow Overpass Thug C - Item 2": LocData(2000301064, "Yellow Overpass Station", dlc_flags=HatDLC.dlc2, | ||
|  |                                                nyakuza_thug="Hat_NPC_NyakuzaShop_14"), | ||
|  |     "Yellow Overpass Thug C - Item 3": LocData(2000301065, "Yellow Overpass Station", dlc_flags=HatDLC.dlc2, | ||
|  |                                                nyakuza_thug="Hat_NPC_NyakuzaShop_14"), | ||
|  |     "Yellow Overpass Thug C - Item 4": LocData(2000301066, "Yellow Overpass Station", dlc_flags=HatDLC.dlc2, | ||
|  |                                                nyakuza_thug="Hat_NPC_NyakuzaShop_14"), | ||
|  |     "Yellow Overpass Thug C - Item 5": LocData(2000301067, "Yellow Overpass Station", dlc_flags=HatDLC.dlc2, | ||
|  |                                                nyakuza_thug="Hat_NPC_NyakuzaShop_14"), | ||
|  | 
 | ||
|  |     "Green Clean Station Thug A - Item 1": LocData(2000301033, "Green Clean Station", dlc_flags=HatDLC.dlc2, | ||
|  |                                                    nyakuza_thug="Hat_NPC_NyakuzaShop_4"), | ||
|  |     "Green Clean Station Thug A - Item 2": LocData(2000301034, "Green Clean Station", dlc_flags=HatDLC.dlc2, | ||
|  |                                                    nyakuza_thug="Hat_NPC_NyakuzaShop_4"), | ||
|  |     "Green Clean Station Thug A - Item 3": LocData(2000301035, "Green Clean Station", dlc_flags=HatDLC.dlc2, | ||
|  |                                                    nyakuza_thug="Hat_NPC_NyakuzaShop_4"), | ||
|  |     "Green Clean Station Thug A - Item 4": LocData(2000301036, "Green Clean Station", dlc_flags=HatDLC.dlc2, | ||
|  |                                                    nyakuza_thug="Hat_NPC_NyakuzaShop_4"), | ||
|  |     "Green Clean Station Thug A - Item 5": LocData(2000301037, "Green Clean Station", dlc_flags=HatDLC.dlc2, | ||
|  |                                                    nyakuza_thug="Hat_NPC_NyakuzaShop_4"), | ||
|  | 
 | ||
|  |     # This guy requires either the yellow ticket or the Ice Hat | ||
|  |     "Green Clean Station Thug B - Item 1": LocData(2000301028, "Green Clean Station", dlc_flags=HatDLC.dlc2, | ||
|  |                                                    required_hats=[HatType.ICE], nyakuza_thug="Hat_NPC_NyakuzaShop_6"), | ||
|  |     "Green Clean Station Thug B - Item 2": LocData(2000301029, "Green Clean Station", dlc_flags=HatDLC.dlc2, | ||
|  |                                                    required_hats=[HatType.ICE], nyakuza_thug="Hat_NPC_NyakuzaShop_6"), | ||
|  |     "Green Clean Station Thug B - Item 3": LocData(2000301030, "Green Clean Station", dlc_flags=HatDLC.dlc2, | ||
|  |                                                    required_hats=[HatType.ICE], nyakuza_thug="Hat_NPC_NyakuzaShop_6"), | ||
|  |     "Green Clean Station Thug B - Item 4": LocData(2000301031, "Green Clean Station", dlc_flags=HatDLC.dlc2, | ||
|  |                                                    required_hats=[HatType.ICE], nyakuza_thug="Hat_NPC_NyakuzaShop_6"), | ||
|  |     "Green Clean Station Thug B - Item 5": LocData(2000301032, "Green Clean Station", dlc_flags=HatDLC.dlc2, | ||
|  |                                                    required_hats=[HatType.ICE], nyakuza_thug="Hat_NPC_NyakuzaShop_6"), | ||
|  | 
 | ||
|  |     "Bluefin Tunnel Thug - Item 1": LocData(2000301023, "Bluefin Tunnel", dlc_flags=HatDLC.dlc2, | ||
|  |                                             nyakuza_thug="Hat_NPC_NyakuzaShop_7"), | ||
|  |     "Bluefin Tunnel Thug - Item 2": LocData(2000301024, "Bluefin Tunnel", dlc_flags=HatDLC.dlc2, | ||
|  |                                             nyakuza_thug="Hat_NPC_NyakuzaShop_7"), | ||
|  |     "Bluefin Tunnel Thug - Item 3": LocData(2000301025, "Bluefin Tunnel", dlc_flags=HatDLC.dlc2, | ||
|  |                                             nyakuza_thug="Hat_NPC_NyakuzaShop_7"), | ||
|  |     "Bluefin Tunnel Thug - Item 4": LocData(2000301026, "Bluefin Tunnel", dlc_flags=HatDLC.dlc2, | ||
|  |                                             nyakuza_thug="Hat_NPC_NyakuzaShop_7"), | ||
|  |     "Bluefin Tunnel Thug - Item 5": LocData(2000301027, "Bluefin Tunnel", dlc_flags=HatDLC.dlc2, | ||
|  |                                             nyakuza_thug="Hat_NPC_NyakuzaShop_7"), | ||
|  | 
 | ||
|  |     "Pink Paw Station Thug - Item 1": LocData(2000301038, "Pink Paw Station", dlc_flags=HatDLC.dlc2, | ||
|  |                                               required_hats=[HatType.DWELLER], hookshot=True, | ||
|  |                                               nyakuza_thug="Hat_NPC_NyakuzaShop_12"), | ||
|  |     "Pink Paw Station Thug - Item 2": LocData(2000301039, "Pink Paw Station", dlc_flags=HatDLC.dlc2, | ||
|  |                                               required_hats=[HatType.DWELLER], hookshot=True, | ||
|  |                                               nyakuza_thug="Hat_NPC_NyakuzaShop_12"), | ||
|  |     "Pink Paw Station Thug - Item 3": LocData(2000301040, "Pink Paw Station", dlc_flags=HatDLC.dlc2, | ||
|  |                                               required_hats=[HatType.DWELLER], hookshot=True, | ||
|  |                                               nyakuza_thug="Hat_NPC_NyakuzaShop_12"), | ||
|  |     "Pink Paw Station Thug - Item 4": LocData(2000301041, "Pink Paw Station", dlc_flags=HatDLC.dlc2, | ||
|  |                                               required_hats=[HatType.DWELLER], hookshot=True, | ||
|  |                                               nyakuza_thug="Hat_NPC_NyakuzaShop_12"), | ||
|  |     "Pink Paw Station Thug - Item 5": LocData(2000301042, "Pink Paw Station", dlc_flags=HatDLC.dlc2, | ||
|  |                                               required_hats=[HatType.DWELLER], hookshot=True, | ||
|  |                                               nyakuza_thug="Hat_NPC_NyakuzaShop_12"), | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | contract_locations = { | ||
|  |     "Snatcher's Contract - The Subcon Well": LocData(2000300200, "Contractual Obligations"), | ||
|  |     "Snatcher's Contract - Toilet of Doom": LocData(2000300201, "Subcon Forest Area", paintings=1), | ||
|  |     "Snatcher's Contract - Queen Vanessa's Manor": LocData(2000300202, "Subcon Forest Area", paintings=1), | ||
|  |     "Snatcher's Contract - Mail Delivery Service": LocData(2000300203, "Subcon Forest Area", paintings=1), | ||
|  | } | ||
|  | 
 | ||
|  | # Don't put any of the locations from peaks here, the rules for their entrances are set already | ||
|  | zipline_unlocks = { | ||
|  |     "Alpine Skyline - Bird Pass Fork":                          "Zipline Unlock - The Birdhouse Path", | ||
|  |     "Alpine Skyline - Yellow Band Hills":                       "Zipline Unlock - The Birdhouse Path", | ||
|  |     "Alpine Skyline - The Purrloined Village: Horned Stone":    "Zipline Unlock - The Birdhouse Path", | ||
|  |     "Alpine Skyline - The Purrloined Village: Chest Reward":    "Zipline Unlock - The Birdhouse Path", | ||
|  | 
 | ||
|  |     "Alpine Skyline - Mystifying Time Mesa: Zipline":       "Zipline Unlock - The Lava Cake Path", | ||
|  |     "Alpine Skyline - Mystifying Time Mesa: Gate Puzzle":   "Zipline Unlock - The Lava Cake Path", | ||
|  |     "Alpine Skyline - Ember Summit":                        "Zipline Unlock - The Lava Cake Path", | ||
|  | 
 | ||
|  |     "Alpine Skyline - Goat Outpost Horn":   "Zipline Unlock - The Windmill Path", | ||
|  |     "Alpine Skyline - Windy Passage":       "Zipline Unlock - The Windmill Path", | ||
|  | 
 | ||
|  |     "Alpine Skyline - The Twilight Path":   "Zipline Unlock - The Twilight Bell Path", | ||
|  | } | ||
|  | 
 | ||
|  | # act completion rules should be set automatically as these are all event items | ||
|  | zero_jumps_hard = { | ||
|  |     "Time Rift - Sewers (Zero Jumps)": LocData(0, "Time Rift - Sewers", | ||
|  |                                                required_hats=[HatType.ICE], dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Time Rift - Bazaar (Zero Jumps)": LocData(0, "Time Rift - Bazaar", | ||
|  |                                                required_hats=[HatType.ICE], dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "The Big Parade (Zero Jumps)": LocData(0, "The Big Parade", | ||
|  |                                            hit_type=HitType.umbrella, | ||
|  |                                            required_hats=[HatType.ICE], | ||
|  |                                            dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Time Rift - Pipe (Zero Jumps)": LocData(0, "Time Rift - Pipe", hookshot=True, dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Time Rift - Curly Tail Trail (Zero Jumps)": LocData(0, "Time Rift - Curly Tail Trail", | ||
|  |                                                          required_hats=[HatType.ICE], dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Time Rift - The Twilight Bell (Zero Jumps)": LocData(0, "Time Rift - The Twilight Bell", | ||
|  |                                                           required_hats=[HatType.ICE, HatType.DWELLER], | ||
|  |                                                           hit_type=HitType.umbrella_or_brewing, | ||
|  |                                                           dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "The Illness has Spread (Zero Jumps)": LocData(0, "The Illness has Spread", | ||
|  |                                                    required_hats=[HatType.ICE], hookshot=True, | ||
|  |                                                    hit_type=HitType.umbrella_or_brewing, dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "The Finale (Zero Jumps)": LocData(0, "The Finale", | ||
|  |                                        required_hats=[HatType.ICE, HatType.DWELLER], | ||
|  |                                        hookshot=True, | ||
|  |                                        dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Pink Paw Station (Zero Jumps)": LocData(0, "Pink Paw Station", | ||
|  |                                              required_hats=[HatType.ICE], | ||
|  |                                              hookshot=True, | ||
|  |                                              dlc_flags=HatDLC.dlc2_dw), | ||
|  | } | ||
|  | 
 | ||
|  | zero_jumps_expert = { | ||
|  |     "The Birdhouse (Zero Jumps)": LocData(0, "The Birdhouse", | ||
|  |                                           required_hats=[HatType.ICE], | ||
|  |                                           dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "The Lava Cake (Zero Jumps)": LocData(0, "The Lava Cake", dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "The Windmill (Zero Jumps)": LocData(0, "The Windmill", | ||
|  |                                          required_hats=[HatType.ICE], | ||
|  |                                          misc_required=["No Bonk Badge"], | ||
|  |                                          dlc_flags=HatDLC.death_wish), | ||
|  |     "The Twilight Bell (Zero Jumps)": LocData(0, "The Twilight Bell", | ||
|  |                                               required_hats=[HatType.ICE, HatType.DWELLER], | ||
|  |                                               hit_type=HitType.umbrella_or_brewing, | ||
|  |                                               misc_required=["No Bonk Badge"], | ||
|  |                                               dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Sleepy Subcon (Zero Jumps)": LocData(0, "Time Rift - Sleepy Subcon", required_hats=[HatType.ICE], | ||
|  |                                           dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Ship Shape (Zero Jumps)": LocData(0, "Ship Shape", required_hats=[HatType.ICE], dlc_flags=HatDLC.dlc1_dw), | ||
|  | } | ||
|  | 
 | ||
|  | zero_jumps = { | ||
|  |     **zero_jumps_hard, | ||
|  |     **zero_jumps_expert, | ||
|  |     "Welcome to Mafia Town (Zero Jumps)": LocData(0, "Welcome to Mafia Town", dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Down with the Mafia! (Zero Jumps)": LocData(0, "Down with the Mafia!", | ||
|  |                                                  required_hats=[HatType.ICE], | ||
|  |                                                  dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Cheating the Race (Zero Jumps)": LocData(0, "Cheating the Race", | ||
|  |                                               required_hats=[HatType.TIME_STOP], | ||
|  |                                               dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "The Golden Vault (Zero Jumps)": LocData(0, "The Golden Vault", | ||
|  |                                              required_hats=[HatType.ICE], | ||
|  |                                              dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Dead Bird Studio (Zero Jumps)": LocData(0, "Dead Bird Studio", | ||
|  |                                              required_hats=[HatType.ICE], | ||
|  |                                              hit_type=HitType.umbrella_or_brewing, | ||
|  |                                              dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Murder on the Owl Express (Zero Jumps)": LocData(0, "Murder on the Owl Express", | ||
|  |                                                       required_hats=[HatType.ICE], | ||
|  |                                                       dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Picture Perfect (Zero Jumps)": LocData(0, "Picture Perfect", dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Train Rush (Zero Jumps)": LocData(0, "Train Rush", | ||
|  |                                        required_hats=[HatType.ICE], | ||
|  |                                        hookshot=True, | ||
|  |                                        dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Contractual Obligations (Zero Jumps)": LocData(0, "Contractual Obligations", | ||
|  |                                                     paintings=1, | ||
|  |                                                     dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Your Contract has Expired (Zero Jumps)": LocData(0, "Your Contract has Expired", | ||
|  |                                                       hit_type=HitType.umbrella, | ||
|  |                                                       dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     # No ice hat/painting required in Expert | ||
|  |     "Toilet of Doom (Zero Jumps)": LocData(0, "Toilet of Doom", | ||
|  |                                            hookshot=True, | ||
|  |                                            hit_type=HitType.umbrella_or_brewing, | ||
|  |                                            required_hats=[HatType.ICE], | ||
|  |                                            paintings=1, | ||
|  |                                            dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Mail Delivery Service (Zero Jumps)": LocData(0, "Mail Delivery Service", | ||
|  |                                                   required_hats=[HatType.SPRINT], | ||
|  |                                                   dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Time Rift - Alpine Skyline (Zero Jumps)": LocData(0, "Time Rift - Alpine Skyline", | ||
|  |                                                        required_hats=[HatType.ICE], | ||
|  |                                                        hookshot=True, | ||
|  |                                                        dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Time Rift - The Lab (Zero Jumps)": LocData(0, "Time Rift - The Lab", | ||
|  |                                                 required_hats=[HatType.ICE], | ||
|  |                                                 dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Yellow Overpass Station (Zero Jumps)": LocData(0, "Yellow Overpass Station", | ||
|  |                                                     required_hats=[HatType.ICE], | ||
|  |                                                     hookshot=True, | ||
|  |                                                     dlc_flags=HatDLC.dlc2_dw), | ||
|  | 
 | ||
|  |     "Green Clean Station (Zero Jumps)": LocData(0, "Green Clean Station", | ||
|  |                                                 required_hats=[HatType.ICE], | ||
|  |                                                 dlc_flags=HatDLC.dlc2_dw), | ||
|  | } | ||
|  | 
 | ||
|  | snatcher_coins = { | ||
|  |     "Snatcher Coin - Top of HQ (DWTM)": LocData(0, "Down with the Mafia!", snatcher_coin="Snatcher Coin - Top of HQ", | ||
|  |                                                 dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Snatcher Coin - Top of HQ (CTR)": LocData(0, "Cheating the Race", snatcher_coin="Snatcher Coin - Top of HQ", | ||
|  |                                                dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Snatcher Coin - Top of HQ (HUMT)": LocData(0, "Heating Up Mafia Town", snatcher_coin="Snatcher Coin - Top of HQ", | ||
|  |                                                 hit_type=HitType.umbrella, dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Snatcher Coin - Top of HQ (TGV)": LocData(0, "The Golden Vault", snatcher_coin="Snatcher Coin - Top of HQ", | ||
|  |                                                dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Snatcher Coin - Top of HQ (DW: BTH)": LocData(0, "Beat the Heat", snatcher_coin="Snatcher Coin - Top of HQ", | ||
|  |                                                    dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Snatcher Coin - Top of Tower": LocData(0, "Mafia Town Area (HUMT)", snatcher_coin="Snatcher Coin - Top of Tower", | ||
|  |                                             dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Snatcher Coin - Top of Tower (DW: BTH)": LocData(0, "Beat the Heat", snatcher_coin="Snatcher Coin - Top of Tower", | ||
|  |                                                       dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Snatcher Coin - Top of Tower (DW: CAT)": LocData(0, "Collect-a-thon", snatcher_coin="Snatcher Coin - Top of Tower", | ||
|  |                                                       dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Snatcher Coin - Top of Tower (SSFOS)": LocData(0, "She Speedran from Outer Space", | ||
|  |                                                     snatcher_coin="Snatcher Coin - Top of Tower", | ||
|  |                                                     dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Snatcher Coin - Top of Tower (DW: MJ)": LocData(0, "Mafia's Jumps", snatcher_coin="Snatcher Coin - Top of Tower", | ||
|  |                                                      dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Snatcher Coin - Under Ruined Tower": LocData(0, "Mafia Town Area", | ||
|  |                                                   snatcher_coin="Snatcher Coin - Under Ruined Tower", | ||
|  |                                                   dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Snatcher Coin - Under Ruined Tower (DW: CAT)": LocData(0, "Collect-a-thon", | ||
|  |                                                             snatcher_coin="Snatcher Coin - Under Ruined Tower", | ||
|  |                                                             dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Snatcher Coin - Under Ruined Tower (DW: SSFOS)": LocData(0, "She Speedran from Outer Space", | ||
|  |                                                               snatcher_coin="Snatcher Coin - Under Ruined Tower", | ||
|  |                                                               dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Snatcher Coin - Top of Red House (DBS)": LocData(0, "Dead Bird Studio - Elevator Area", | ||
|  |                                                       snatcher_coin="Snatcher Coin - Top of Red House", | ||
|  |                                                       dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Snatcher Coin - Top of Red House (DW: SB)": LocData(0, "Security Breach", | ||
|  |                                                          snatcher_coin="Snatcher Coin - Top of Red House", | ||
|  |                                                          dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Snatcher Coin - Train Rush": LocData(0, "Train Rush", snatcher_coin="Snatcher Coin - Train Rush", | ||
|  |                                           hookshot=True, dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Snatcher Coin - Train Rush (10 Seconds)": LocData(0, "10 Seconds until Self-Destruct", | ||
|  |                                                        snatcher_coin="Snatcher Coin - Train Rush", | ||
|  |                                                        hookshot=True, dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Snatcher Coin - Picture Perfect": LocData(0, "Picture Perfect", snatcher_coin="Snatcher Coin - Picture Perfect", | ||
|  |                                                dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Snatcher Coin - Swamp Tree": LocData(0, "Subcon Forest Area", snatcher_coin="Snatcher Coin - Swamp Tree", | ||
|  |                                           hookshot=True, paintings=1, | ||
|  |                                           dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Snatcher Coin - Swamp Tree (Speedrun Well)": LocData(0, "Speedrun Well", | ||
|  |                                                           snatcher_coin="Snatcher Coin - Swamp Tree", | ||
|  |                                                           hookshot=True, dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Snatcher Coin - Manor Roof": LocData(0, "Subcon Forest Area", snatcher_coin="Snatcher Coin - Manor Roof", | ||
|  |                                           hit_type=HitType.dweller_bell, paintings=1, | ||
|  |                                           dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Snatcher Coin - Giant Time Piece": LocData(0, "Subcon Forest Area", | ||
|  |                                                 snatcher_coin="Snatcher Coin - Giant Time Piece", | ||
|  |                                                 paintings=3, dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Snatcher Coin - Goat Village Top": LocData(0, "Alpine Skyline Area (TIHS)", | ||
|  |                                                 snatcher_coin="Snatcher Coin - Goat Village Top", | ||
|  |                                                 dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Snatcher Coin - Goat Village Top (Illness Speedrun)": LocData(0, "The Illness has Speedrun", | ||
|  |                                                                    snatcher_coin="Snatcher Coin - Goat Village Top", | ||
|  |                                                                    dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Snatcher Coin - Lava Cake": LocData(0, "The Lava Cake", snatcher_coin="Snatcher Coin - Lava Cake", | ||
|  |                                          dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Snatcher Coin - Windmill": LocData(0, "The Windmill", snatcher_coin="Snatcher Coin - Windmill", | ||
|  |                                         dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Snatcher Coin - Windmill (DW: WUW)": LocData(0, "Wound-Up Windmill", snatcher_coin="Snatcher Coin - Windmill", | ||
|  |                                                   hookshot=True, dlc_flags=HatDLC.death_wish), | ||
|  | 
 | ||
|  |     "Snatcher Coin - Green Clean Tower": LocData(0, "Green Clean Station", | ||
|  |                                                  snatcher_coin="Snatcher Coin - Green Clean Tower", | ||
|  |                                                  dlc_flags=HatDLC.dlc2_dw), | ||
|  | 
 | ||
|  |     "Snatcher Coin - Bluefin Cat Train": LocData(0, "Bluefin Tunnel", | ||
|  |                                                  snatcher_coin="Snatcher Coin - Bluefin Cat Train", | ||
|  |                                                  dlc_flags=HatDLC.dlc2_dw), | ||
|  | 
 | ||
|  |     "Snatcher Coin - Pink Paw Fence": LocData(0, "Pink Paw Station", | ||
|  |                                               snatcher_coin="Snatcher Coin - Pink Paw Fence", | ||
|  |                                               dlc_flags=HatDLC.dlc2_dw), | ||
|  | } | ||
|  | 
 | ||
|  | event_locs = { | ||
|  |     **zero_jumps, | ||
|  |     **snatcher_coins, | ||
|  |     "HUMT Access": LocData(0, "Heating Up Mafia Town"), | ||
|  |     "TOD Access": LocData(0, "Toilet of Doom"), | ||
|  |     "YCHE Access": LocData(0, "Your Contract has Expired"), | ||
|  |     "AFR Access": LocData(0, "Alpine Free Roam"), | ||
|  |     "TIHS Access": LocData(0, "The Illness has Spread"), | ||
|  | 
 | ||
|  |     "Birdhouse Cleared": LocData(0, "The Birdhouse", act_event=True), | ||
|  |     "Lava Cake Cleared": LocData(0, "The Lava Cake", act_event=True), | ||
|  |     "Windmill Cleared": LocData(0, "The Windmill", act_event=True), | ||
|  |     "Twilight Bell Cleared": LocData(0, "The Twilight Bell", act_event=True), | ||
|  |     "Time Piece Cluster": LocData(0, "The Finale", act_event=True), | ||
|  | 
 | ||
|  |     # not really an act | ||
|  |     "Nyakuza Intro Cleared": LocData(0, "Nyakuza Free Roam", dlc_flags=HatDLC.dlc2), | ||
|  | 
 | ||
|  |     "Yellow Overpass Station Cleared": LocData(0, "Yellow Overpass Station", dlc_flags=HatDLC.dlc2, act_event=True), | ||
|  |     "Green Clean Station Cleared": LocData(0, "Green Clean Station", dlc_flags=HatDLC.dlc2, act_event=True), | ||
|  |     "Bluefin Tunnel Cleared": LocData(0, "Bluefin Tunnel", dlc_flags=HatDLC.dlc2, act_event=True), | ||
|  |     "Pink Paw Station Cleared": LocData(0, "Pink Paw Station", dlc_flags=HatDLC.dlc2, act_event=True), | ||
|  |     "Yellow Overpass Manhole Cleared": LocData(0, "Yellow Overpass Manhole", dlc_flags=HatDLC.dlc2, act_event=True), | ||
|  |     "Green Clean Manhole Cleared": LocData(0, "Green Clean Manhole", dlc_flags=HatDLC.dlc2, act_event=True), | ||
|  |     "Pink Paw Manhole Cleared": LocData(0, "Pink Paw Manhole", dlc_flags=HatDLC.dlc2, act_event=True), | ||
|  |     "Rush Hour Cleared": LocData(0, "Rush Hour", dlc_flags=HatDLC.dlc2, act_event=True), | ||
|  | } | ||
|  | 
 | ||
|  | # DO NOT ALTER THE ORDER OF THIS LIST | ||
|  | death_wishes = { | ||
|  |     "Beat the Heat": 2000350000, | ||
|  |     "Snatcher's Hit List": 2000350002, | ||
|  |     "So You're Back From Outer Space": 2000350004, | ||
|  |     "Collect-a-thon": 2000350006, | ||
|  |     "Rift Collapse: Mafia of Cooks": 2000350008, | ||
|  |     "She Speedran from Outer Space": 2000350010, | ||
|  |     "Mafia's Jumps": 2000350012, | ||
|  |     "Vault Codes in the Wind": 2000350014, | ||
|  |     "Encore! Encore!": 2000350016, | ||
|  |     "Snatcher Coins in Mafia Town": 2000350018, | ||
|  | 
 | ||
|  |     "Security Breach": 2000350020, | ||
|  |     "The Great Big Hootenanny": 2000350022, | ||
|  |     "Rift Collapse: Dead Bird Studio": 2000350024, | ||
|  |     "10 Seconds until Self-Destruct": 2000350026, | ||
|  |     "Killing Two Birds": 2000350028, | ||
|  |     "Snatcher Coins in Battle of the Birds": 2000350030, | ||
|  |     "Zero Jumps": 2000350032, | ||
|  | 
 | ||
|  |     "Speedrun Well": 2000350034, | ||
|  |     "Rift Collapse: Sleepy Subcon": 2000350036, | ||
|  |     "Boss Rush": 2000350038, | ||
|  |     "Quality Time with Snatcher": 2000350040, | ||
|  |     "Breaching the Contract": 2000350042, | ||
|  |     "Snatcher Coins in Subcon Forest": 2000350044, | ||
|  | 
 | ||
|  |     "Bird Sanctuary": 2000350046, | ||
|  |     "Rift Collapse: Alpine Skyline": 2000350048, | ||
|  |     "Wound-Up Windmill": 2000350050, | ||
|  |     "The Illness has Speedrun": 2000350052, | ||
|  |     "Snatcher Coins in Alpine Skyline": 2000350054, | ||
|  |     "Camera Tourist": 2000350056, | ||
|  | 
 | ||
|  |     "The Mustache Gauntlet": 2000350058, | ||
|  |     "No More Bad Guys": 2000350060, | ||
|  | 
 | ||
|  |     "Seal the Deal": 2000350062, | ||
|  |     "Rift Collapse: Deep Sea": 2000350064, | ||
|  |     "Cruisin' for a Bruisin'": 2000350066, | ||
|  | 
 | ||
|  |     "Community Rift: Rhythm Jump Studio": 2000350068, | ||
|  |     "Community Rift: Twilight Travels": 2000350070, | ||
|  |     "Community Rift: The Mountain Rift": 2000350072, | ||
|  |     "Snatcher Coins in Nyakuza Metro": 2000350074, | ||
|  | } | ||
|  | 
 | ||
|  | location_table = { | ||
|  |     **ahit_locations, | ||
|  |     **act_completions, | ||
|  |     **storybook_pages, | ||
|  |     **contract_locations, | ||
|  |     **shop_locations, | ||
|  | } |