from typing import NamedTuple, Optional from .RamHandler import GrinchRamData from BaseClasses import Location, Region class GrinchLocationData(NamedTuple): region: str location_group: Optional[list[str]] id: Optional[int] update_ram_addr: list[GrinchRamData] reset_addr: Optional[list[GrinchRamData]] = ( None # Addresses to update once we find the item ) class GrinchLocation(Location): game: str = "The Grinch" @staticmethod def get_apid(id: int): base_id: int = 42069 return base_id + id if id is not None else None def __init__( self, player: int, name: str, parent: Region, data: GrinchLocationData ): address = None if data.id is None else GrinchLocation.get_apid(data.id) super(GrinchLocation, self).__init__( player, name, address=address, parent=parent ) self.code = data.id self.region = data.region self.type = data.location_group self.address = self.address def get_location_names_per_category() -> dict[str, set[str]]: categories: dict[str, set[str]] = {} for name, data in grinch_locations.items(): if data.location_group is None: continue for group in data.location_group: # iterate over each category categories.setdefault(group, set()).add(name) return categories grinch_locations = { # Going to use current map id as indicator whether or not you visited a location # Visitsanity "WV - First Visit": GrinchLocationData( "Whoville", ["Visitsanity", "Whoville"], 100, [GrinchRamData(0x010000, value=0x07)], ), "WV - Post Office - First Visit": GrinchLocationData( "Post Office", ["Visitsanity", "Whoville", "Post Office"], 101, [GrinchRamData(0x010000, value=0x0A)], ), "WV - City Hall - First Visit": GrinchLocationData( "City Hall", ["Visitsanity", "Whoville", "City Hall"], 102, [GrinchRamData(0x010000, value=0x08)], ), "WV - Clock Tower - First Visit": GrinchLocationData( "Clock Tower", ["Visitsanity", "Whoville", "Clock Tower"], 103, [GrinchRamData(0x010000, value=0x09)], ), "WF - First Visit": GrinchLocationData( "Who Forest", ["Visitsanity", "Who Forest"], 104, [GrinchRamData(0x010000, value=0x0B)], ), "WF - Ski Resort - First Visit": GrinchLocationData( "Ski Resort", ["Visitsanity", "Who Forest", "Ski Resort"], 105, [GrinchRamData(0x010000, value=0x0C)], ), "WF - Civic Center - First Visit": GrinchLocationData( "Civic Center", ["Visitsanity", "Who Forest", "Civic Center"], 106, [GrinchRamData(0x010000, value=0x0D)], ), "WD - First Visit": GrinchLocationData( "Who Dump", ["Visitsanity", "Who Dump"], 107, [GrinchRamData(0x010000, value=0x0E)], ), "WD - Minefield - First Visit": GrinchLocationData( "Minefield", ["Visitsanity", "Who Dump", "Minefield"], 108, [GrinchRamData(0x010000, value=0x11)], ), "WD - Power Plant - First Visit": GrinchLocationData( "Power Plant", ["Visitsanity", "Who Dump", "Power Plant"], 109, [GrinchRamData(0x010000, value=0x10)], ), "WD - Generator Building - First Visit": GrinchLocationData( "Generator Building", ["Visitsanity", "Who Dump", "Generator Building"], 110, [GrinchRamData(0x010000, value=0x0F)], ), "WL - South Shore - First Visit": GrinchLocationData( "Who Lake", ["Visitsanity", "Who Lake", "South Shore"], 111, [GrinchRamData(0x010000, value=0x12)], ), "WL - Submarine World - First Visit": GrinchLocationData( "Submarine World", ["Visitsanity", "Who Lake", "Submarine World"], 112, [GrinchRamData(0x010000, value=0x17)], ), "WL - Scout's Hut - First Visit": GrinchLocationData( "Scout's Hut", ["Visitsanity", "Who Lake", "Scout's Hut"], 113, [GrinchRamData(0x010000, value=0x13)], ), "WL - North Shore - First Visit": GrinchLocationData( "North Shore", ["Visitsanity", "Who Lake", "North Shore"], 114, [GrinchRamData(0x010000, value=0x14)], ), "WL - Mayor's Villa - First Visit": GrinchLocationData( "Mayor's Villa", ["Visitsanity", "Who Lake", "Mayor's Villa"], 115, [GrinchRamData(0x010000, value=0x16)], ), # Need to find mission completion address for handful of locations that are not documented. # Missions that have value are those ones we need to find the check for # Whoville Missions "WV - Post Office - Shuffling The Mail": GrinchLocationData( "Post Office", ["Whoville Missions", "Missions", "Whoville", "Post Office"], 201, [GrinchRamData(0x0100BE, binary_bit_pos=0)], ), "WV - Smashing Snowmen": GrinchLocationData( "Whoville", ["Whoville Missions", "Missions", "Whoville"], 200, [GrinchRamData(0x0100C5, value=10)], ), "WV - Painting The Mayor's Posters": GrinchLocationData( "Whoville", ["Whoville Missions", "Missions", "Whoville"], 202, [GrinchRamData(0x0100C6, value=10)], ), "WV - Launching Eggs Into Houses": GrinchLocationData( "Whoville", ["Whoville Missions", "Missions", "Whoville"], 203, [GrinchRamData(0x0100C7, value=10)], ), "WV - City Hall - Modifying The Mayor's Statue": GrinchLocationData( "City Hall", ["Whoville Missions", "Missions", "Whoville", "City Hall"], 204, [GrinchRamData(0x0100BE, binary_bit_pos=1)], ), "WV - Clock Tower - Advancing The Countdown-To-Xmas Clock": GrinchLocationData( "Clock Tower", ["Whoville Missions", "Missions", "Whoville", "Clock Tower"], 205, [GrinchRamData(0x0100BE, binary_bit_pos=2)], ), "WV - Squashing All Gifts": GrinchLocationData( "Whoville", ["Whoville Missions", "Missions", "Giftsanity", "Whoville"], 206, [GrinchRamData(0x01005C, value=500, byte_size=2)], ), # Who Forest Missions "WF - Making Xmas Trees Droop": GrinchLocationData( "Who Forest", ["Who Forest Missions", "Missions", "Who Forest"], 300, [GrinchRamData(0x0100C8, value=10)], ), "WF - Sabotaging Snow Cannon With Glue": GrinchLocationData( "Who Forest", ["Who Forest Missions", "Missions", "Who Forest"], 301, [GrinchRamData(0x0100BE, binary_bit_pos=3)], ), "WF - Putting Beehives In Cabins": GrinchLocationData( "Who Forest", ["Who Forest Missions", "Missions", "Who Forest"], 302, [GrinchRamData(0x0100CA, value=10)], ), "WF - Ski Resort - Sliming The Mayor's Skis": GrinchLocationData( "Ski Resort", ["Who Forest Missions", "Missions", "Who Forest", "Ski Resort"], 303, [GrinchRamData(0x0100BE, binary_bit_pos=4)], ), "WF - Civic Center - Replacing The Candles On The Cake With Fireworks": GrinchLocationData( "Civic Center", ["Who Forest Missions", "Missions", "Who Forest", "Civic Center"], 304, [GrinchRamData(0x0100BE, binary_bit_pos=5)], ), "WF - Squashing All Gifts": GrinchLocationData( "Who Forest", ["Who Forest Missions", "Missions", "Giftsanity", "Who Forest"], 305, [GrinchRamData(0x01005E, value=750, byte_size=2)], ), # Who Dump Missions "WD - Stealing Food From Birds": GrinchLocationData( "Who Dump", ["Who Dump Missions", "Missions", "Who Dump"], 400, [GrinchRamData(0x0100CB, value=10)], ), "WD - Feeding The Computer With Robot Parts": GrinchLocationData( "Who Dump", ["Who Dump Missions", "Missions", "Who Dump"], 401, [GrinchRamData(0x0100BF, binary_bit_pos=2)], ), "WD - Infesting The Mayor's House With Rats": GrinchLocationData( "Who Dump", ["Who Dump Missions", "Missions", "Who Dump"], 402, [GrinchRamData(0x0100BE, binary_bit_pos=6)], ), "WD - Conducting The Stinky Gas To Who-Bris' Shack": GrinchLocationData( "Who Dump", ["Who Dump Missions", "Missions", "Who Dump"], 403, [GrinchRamData(0x0100BE, binary_bit_pos=7)], ), "WD - Minefield - Shaving Who Dump Guardian": GrinchLocationData( "Minefield", ["Who Dump Missions", "Missions", "Who Dump", "Minefield"], 404, [GrinchRamData(0x0100BF, binary_bit_pos=0)], ), "WD - Generator Building - Short-Circuiting Power-Plant": GrinchLocationData( "Generator Building", ["Who Dump Missions", "Missions", "Who Dump", "Generator Building"], 405, [GrinchRamData(0x0100BF, binary_bit_pos=1)], ), "WD - Squashing All Gifts": GrinchLocationData( "Who Dump", ["Who Dump Missions", "Missions", "Who Dump", "Giftsanity"], 406, [GrinchRamData(0x010060, value=750, byte_size=2)], ), # Who Lake Missions "WL - South Shore - Putting Thistles In Shorts": GrinchLocationData( "Who Lake", [ "Who Lake Missions", "Missions", "Who Lake", "South Shore", "South Shore Missions", ], 500, [GrinchRamData(0x0100E5, value=10)], ), "WL - South Shore - Sabotaging The Tents": GrinchLocationData( "Who Lake", [ "Who Lake Missions", "Missions", "Who Lake", "South Shore", "South Shore Missions", ], 501, [GrinchRamData(0x0100E6, value=10)], ), "WL - North Shore - Drilling Holes In Canoes": GrinchLocationData( "North Shore", ["Who Lake Missions", "Missions", "Who Lake", "North Shore"], 502, [GrinchRamData(0x0100EE, value=10)], ), "WL - Submarine World - Modifying The Marine Mobile": GrinchLocationData( "Submarine World", ["Who Lake Missions", "Missions", "Who Lake", "Submarine World"], 503, [GrinchRamData(0x0100BF, binary_bit_pos=4)], ), "WL - Mayor's Villa - Hooking The Mayor's Bed To The Motorboat": GrinchLocationData( "Mayor's Villa", ["Who Lake Missions", "Missions", "Who Lake", "Mayor's Villa"], 504, [GrinchRamData(0x0100BF, binary_bit_pos=3)], ), "WL - Squashing All Gifts": GrinchLocationData( "Who Lake", ["Who Lake Missions", "Missions", "Who Lake", "Giftsanity"], 505, [GrinchRamData(0x010062, value=1000, byte_size=2)], ), # Need to find binary values for individual blueprints, but all ram addresses are found # Blueprints # Binoculars Blueprints "WV - Binoculars BP on Post Office Roof": GrinchLocationData( "Whoville", ["Binocular Blueprints", "Blueprints", "Whoville", "Whoville Blueprints"], 600, [GrinchRamData(0x01020B, binary_bit_pos=2)], ), "WV - City Hall - Binoculars BP left side of Library": GrinchLocationData( "City Hall", [ "Binocular Blueprints", "Blueprints", "Whoville", "Whoville Blueprints", "City Hall", "City Hall Blueprints", ], 601, [GrinchRamData(0x01021F, binary_bit_pos=6)], ), "WV - City Hall - Binoculars BP front side of Library": GrinchLocationData( "City Hall", [ "Binocular Blueprints", "Blueprints", "Whoville", "Whoville Blueprints", "City Hall", "City Hall Blueprints", ], 602, [GrinchRamData(0x01021F, binary_bit_pos=5)], ), "WV - City Hall - Binoculars BP right side of Library": GrinchLocationData( "City Hall", [ "Binocular Blueprints", "Blueprints", "Whoville", "Whoville Blueprints", "City Hall", "City Hall Blueprints", ], 603, [GrinchRamData(0x01021F, binary_bit_pos=4)], ), # Rotten Egg Launcher Blueprints "WV - REL BP left of City Hall": GrinchLocationData( "Whoville", [ "Rotten Egg Launcher Blueprints", "Blueprints", "Whoville", "Whoville Blueprints", ], 700, [GrinchRamData(0x01020B, binary_bit_pos=0)], ), "WV - REL BP left of Clock Tower": GrinchLocationData( "Whoville", [ "Rotten Egg Launcher Blueprints", "Blueprints", "Whoville", "Whoville Blueprints", ], 701, [GrinchRamData(0x01020B, binary_bit_pos=1)], ), "WV - Post Office - REL BP inside Silver Room": GrinchLocationData( "Post Office", [ "Rotten Egg Launcher Blueprints", "Blueprints", "Whoville", "Whoville Blueprints", "Post Office", "Post Office Blueprints", ], 702, [GrinchRamData(0x01021C, binary_bit_pos=1)], ), "WV - Post Office - REL BP at Entrance Door after Mission Completion": GrinchLocationData( "Post Office", [ "Rotten Egg Launcher Blueprints", "Blueprints", "Whoville", "Whoville Blueprints", "Post Office", "Post Office Blueprints", ], 703, [GrinchRamData(0x01021C, binary_bit_pos=2)], ), # Rocket Spring Blueprints "WF - RS BP behind Vacuum Tube": GrinchLocationData( "Who Forest", [ "Rocket Spring Blueprints", "Blueprints", "Who Forest", "Who Forest Blueprints", ], 800, [GrinchRamData(0x010243, binary_bit_pos=3)], ), "WF - RS BP in front of 2nd House near Vacuum Tube": GrinchLocationData( "Who Forest", [ "Rocket Spring Blueprints", "Blueprints", "Who Forest", "Who Forest Blueprints", ], 801, [GrinchRamData(0x010243, binary_bit_pos=1)], ), "WF - RS BP near Tree House on Ground": GrinchLocationData( "Who Forest", [ "Rocket Spring Blueprints", "Blueprints", "Who Forest", "Who Forest Blueprints", ], 802, [GrinchRamData(0x010243, binary_bit_pos=4)], ), "WF - RS BP behind Cable Car House": GrinchLocationData( "Who Forest", [ "Rocket Spring Blueprints", "Blueprints", "Who Forest", "Who Forest Blueprints", ], 804, [GrinchRamData(0x010242, binary_bit_pos=7)], ), "WF - RS BP near Who Snowball in Cave": GrinchLocationData( "Who Forest", [ "Rocket Spring Blueprints", "Blueprints", "Who Forest", "Who Forest Blueprints", ], 805, [GrinchRamData(0x010242, binary_bit_pos=6)], ), "WF - RS BP on Branch Platform closest to Glue Cannon": GrinchLocationData( "Who Forest", [ "Rocket Spring Blueprints", "Blueprints", "Who Forest", "Who Forest Blueprints", ], 806, [GrinchRamData(0x010243, binary_bit_pos=2)], ), "WF - RS BP on Branch Platform Near Beast": GrinchLocationData( "Who Forest", [ "Rocket Spring Blueprints", "Blueprints", "Who Forest", "Who Forest Blueprints", ], 807, [GrinchRamData(0x010243, binary_bit_pos=0)], ), "WF - RS BP on Branch Platform Elevated next to House": GrinchLocationData( "Who Forest", [ "Rocket Spring Blueprints", "Blueprints", "Who Forest", "Who Forest Blueprints", ], 808, [GrinchRamData(0x010243, binary_bit_pos=6)], ), "WF - RS BP on Tree House": GrinchLocationData( "Who Forest", [ "Rocket Spring Blueprints", "Blueprints", "Who Forest", "Who Forest Blueprints", ], 809, [GrinchRamData(0x010243, binary_bit_pos=5)], ), # Slime Shooter Blueprints "WF - SS BP in Branch Platform Elevated House": GrinchLocationData( "Who Forest", [ "Slime Shooter Blueprints", "Blueprints", "Who Forest", "Who Forest Blueprints", ], 900, [GrinchRamData(0x010244, binary_bit_pos=3)], ), "WF - SS BP in Branch Platform House next to Beast": GrinchLocationData( "Who Forest", [ "Slime Shooter Blueprints", "Blueprints", "Who Forest", "Who Forest Blueprints", ], 901, [GrinchRamData(0x010243, binary_bit_pos=7)], ), "WF - SS BP in House in front of Civic Center Cave": GrinchLocationData( "Who Forest", [ "Slime Shooter Blueprints", "Blueprints", "Who Forest", "Who Forest Blueprints", ], 902, [GrinchRamData(0x010244, binary_bit_pos=2)], ), "WF - SS BP in House next to Tree House": GrinchLocationData( "Who Forest", [ "Slime Shooter Blueprints", "Blueprints", "Who Forest", "Who Forest Blueprints", ], 903, [GrinchRamData(0x010244, binary_bit_pos=1)], ), "WF - SS BP in House across from Tree House": GrinchLocationData( "Who Forest", [ "Slime Shooter Blueprints", "Blueprints", "Who Forest", "Who Forest Blueprints", ], 904, [GrinchRamData(0x010244, binary_bit_pos=5)], ), "WF - SS BP in 2nd House near Vacuum Tube Right Side": GrinchLocationData( "Who Forest", [ "Slime Shooter Blueprints", "Blueprints", "Who Forest", "Who Forest Blueprints", ], 905, [GrinchRamData(0x010244, binary_bit_pos=4)], ), "WF - SS BP in 2nd House near Vacuum Tube Left Side": GrinchLocationData( "Who Forest", [ "Slime Shooter Blueprints", "Blueprints", "Who Forest", "Who Forest Blueprints", ], 906, [GrinchRamData(0x010244, binary_bit_pos=7)], ), "WF - SS BP in 2nd House near Vacuum Tube inbetween Blueprints": GrinchLocationData( "Who Forest", [ "Slime Shooter Blueprints", "Blueprints", "Who Forest", "Who Forest Blueprints", ], 907, [GrinchRamData(0x010244, binary_bit_pos=6)], ), "WF - SS BP in House near Vacuum Tube": GrinchLocationData( "Who Forest", [ "Slime Shooter Blueprints", "Blueprints", "Who Forest", "Who Forest Blueprints", ], 908, [GrinchRamData(0x010244, binary_bit_pos=0)], ), # Octopus Climbing Device "WD - OCD BP inside Middle Pipe": GrinchLocationData( "Who Dump", [ "Octopus Climbing Device Blueprints", "Blueprints", "Who Dump", "Who Dump Blueprints", ], 1001, [GrinchRamData(0x010252, binary_bit_pos=3)], ), "WD - OCD BP inside Right Pipe": GrinchLocationData( "Who Dump", [ "Octopus Climbing Device Blueprints", "Blueprints", "Who Dump", "Who Dump Blueprints", ], 1002, [GrinchRamData(0x010252, binary_bit_pos=5)], ), "WD - OCD BP in Vent to Mayor's House": GrinchLocationData( "Who Dump", [ "Octopus Climbing Device Blueprints", "Blueprints", "Who Dump", "Who Dump Blueprints", ], 1003, [GrinchRamData(0x010252, binary_bit_pos=1)], ), "WD - OCD BP inside Left Pipe": GrinchLocationData( "Who Dump", [ "Octopus Climbing Device Blueprints", "Blueprints", "Who Dump", "Who Dump Blueprints", ], 1004, [GrinchRamData(0x010252, binary_bit_pos=4)], ), "WD - OCD BP near Right Side of Power Plant Wall": GrinchLocationData( "Who Dump", [ "Octopus Climbing Device Blueprints", "Blueprints", "Who Dump", "Who Dump Blueprints", ], 1005, [GrinchRamData(0x010252, binary_bit_pos=0)], ), "WD - OCD BP near Who-Bris' Shack": GrinchLocationData( "Who Dump", [ "Octopus Climbing Device Blueprints", "Blueprints", "Who Dump", "Who Dump Blueprints", ], 1006, [GrinchRamData(0x010252, binary_bit_pos=2)], ), "WD - Minefield - OCD BP on Left Side of House": GrinchLocationData( "Minefield", [ "Octopus Climbing Device Blueprints", "Blueprints", "Who Dump", "Who Dump Blueprints", "Minefield", "Minefield Blueprints", ], 1007, [GrinchRamData(0x01026E, binary_bit_pos=2)], ), "WD - Minefield - OCD BP on Right Side of Shack": GrinchLocationData( "Minefield", [ "Octopus Climbing Device Blueprints", "Blueprints", "Who Dump", "Who Dump Blueprints", "Minefield", "Minefield Blueprints", ], 1008, [GrinchRamData(0x01026E, binary_bit_pos=4)], ), "WD - Minefield - OCD BP inside Guardian's House": GrinchLocationData( "Minefield", [ "Octopus Climbing Device Blueprints", "Blueprints", "Who Dump", "Who Dump Blueprints", "Minefield", "Minefield Blueprints", ], 1009, [GrinchRamData(0x01026E, binary_bit_pos=3)], ), # Marine Mobile Blueprints "WL - South Shore - MM BP on Bridge to Scout's Hut": GrinchLocationData( "Who Lake", [ "Marine Mobile Blueprints", "Blueprints", "Who Lake", "Who Lake Blueprints", "South Shore", "South Shore Blueprints", ], 1100, [GrinchRamData(0x010281, binary_bit_pos=5)], ), "WL - South Shore - MM BP across from Tent near Porcupine": GrinchLocationData( "Who Lake", [ "Marine Mobile Blueprints", "Blueprints", "Who Lake", "Who Lake Blueprints", "South Shore", "South Shore Blueprints", ], 1101, [GrinchRamData(0x010281, binary_bit_pos=6)], ), "WL - South Shore - MM BP near Outhouse": GrinchLocationData( "Who Lake", [ "Marine Mobile Blueprints", "Blueprints", "Who Lake", "Who Lake Blueprints", "South Shore", "South Shore Blueprints", ], 1102, [GrinchRamData(0x010281, binary_bit_pos=7)], ), "WL - South Shore - MM BP near Hill Bridge": GrinchLocationData( "Who Lake", [ "Marine Mobile Blueprints", "Blueprints", "Who Lake", "Who Lake Blueprints", "South Shore", "South Shore Blueprints", ], 1103, [GrinchRamData(0x010282, binary_bit_pos=0)], ), "WL - South Shore - MM BP on Scout's Hut Roof": GrinchLocationData( "Who Lake", [ "Marine Mobile Blueprints", "Blueprints", "Who Lake", "Who Lake Blueprints", "South Shore", "South Shore Blueprints", ], 1104, [GrinchRamData(0x010281, binary_bit_pos=4)], ), "WL - South Shore - MM BP on Grass Platform": GrinchLocationData( "Who Lake", [ "Marine Mobile Blueprints", "Blueprints", "Who Lake", "Who Lake Blueprints", "South Shore", "South Shore Blueprints", ], 1105, [GrinchRamData(0x010281, binary_bit_pos=2)], ), "WL - South Shore - MM BP across Zipline Platform": GrinchLocationData( "Who Lake", [ "Marine Mobile Blueprints", "Blueprints", "Who Lake", "Who Lake Blueprints", "South Shore", "South Shore Blueprints", ], 1106, [GrinchRamData(0x010281, binary_bit_pos=3)], ), "WL - South Shore - MM BP behind Summer Beast": GrinchLocationData( "Who Lake", [ "Marine Mobile Blueprints", "Blueprints", "Who Lake", "Who Lake Blueprints", "South Shore", "South Shore Blueprints", ], 1107, [GrinchRamData(0x010282, binary_bit_pos=1)], ), "WL - North Shore - MM BP below Bridge": GrinchLocationData( "North Shore", [ "Marine Mobile Blueprints", "Blueprints", "Who Lake", "Who Lake Blueprints", "North Shore", "North Shore Blueprints", ], 1108, [GrinchRamData(0x010293, binary_bit_pos=0)], ), "WL - North Shore - MM BP behind Skunk Hut": GrinchLocationData( "North Shore", [ "Marine Mobile Blueprints", "Blueprints", "Who Lake", "Who Lake Blueprints", "North Shore", "North Shore Blueprints", ], 1109, [GrinchRamData(0x010293, binary_bit_pos=2)], ), "WL - North Shore - MM BP inside Skunk Hut": GrinchLocationData( "North Shore", [ "Marine Mobile Blueprints", "Blueprints", "Who Lake", "Who Lake Blueprints", "North Shore", "North Shore Blueprints", ], 1110, [GrinchRamData(0x010292, binary_bit_pos=6)], ), "WL - North Shore - MM BP inside House's Fence": GrinchLocationData( "North Shore", [ "Marine Mobile Blueprints", "Blueprints", "Who Lake", "Who Lake Blueprints", "North Shore", "North Shore Blueprints", ], 1111, [GrinchRamData(0x010292, binary_bit_pos=7)], ), "WL - North Shore - MM BP inside Boulder Box near Bridge": GrinchLocationData( "North Shore", [ "Marine Mobile Blueprints", "Blueprints", "Who Lake", "Who Lake Blueprints", "North Shore", "North Shore Blueprints", ], 1112, [GrinchRamData(0x010293, binary_bit_pos=3)], ), "WL - North Shore - MM BP inside Boulder Box behind Skunk Hut": GrinchLocationData( "North Shore", [ "Marine Mobile Blueprints", "Blueprints", "Who Lake", "Who Lake Blueprints", "North Shore", "North Shore Blueprints", ], 1113, [GrinchRamData(0x010293, binary_bit_pos=4)], ), "WL - North Shore - MM BP inside Drill House": GrinchLocationData( "North Shore", [ "Marine Mobile Blueprints", "Blueprints", "Who Lake", "Who Lake Blueprints", "North Shore", "North Shore Blueprints", ], 1114, [GrinchRamData(0x010292, binary_bit_pos=5)], ), "WL - North Shore - MM BP on Crow Platform near Drill House": GrinchLocationData( "North Shore", [ "Marine Mobile Blueprints", "Blueprints", "Who Lake", "Who Lake Blueprints", "North Shore", "North Shore Blueprints", ], 1115, [GrinchRamData(0x010293, binary_bit_pos=1)], ), # Grinch Copter Blueprints "WV - City Hall - GC BP in Safe Room": GrinchLocationData( "City Hall", [ "Grinch Copter Blueprints", "Blueprints", "Whoville", "Whoville Blueprints", "City Hall", "City Hall Blueprints", ], 1200, [GrinchRamData(0x01021F, binary_bit_pos=7)], ), "WV - City Hall - GC BP in Statue Room": GrinchLocationData( "City Hall", [ "Grinch Copter Blueprints", "Blueprints", "Whoville", "Whoville Blueprints", "City Hall", "City Hall Blueprints", ], 1201, [GrinchRamData(0x010220, binary_bit_pos=0)], ), "WV - Clock Tower - GC BP in Bedroom": GrinchLocationData( "Clock Tower", [ "Grinch Copter Blueprints", "Blueprints", "Whoville", "Whoville Blueprints", "Clock Tower", "Clock Tower Blueprints", ], 1202, [GrinchRamData(0x010216, binary_bit_pos=3)], ), "WV - Clock Tower - GC BP in Bell Room": GrinchLocationData( "Clock Tower", [ "Grinch Copter Blueprints", "Blueprints", "Whoville", "Whoville Blueprints", "Clock Tower", "Clock Tower Blueprints", ], 1203, [GrinchRamData(0x010216, binary_bit_pos=2)], ), "WF - Ski Resort - GC BP inside Dog's Fence": GrinchLocationData( "Ski Resort", [ "Grinch Copter Blueprints", "Blueprints", "Who Forest", "Who Forest Blueprints", "Ski Resort", "Ski Resort Blueprints", ], 1204, [GrinchRamData(0x010234, binary_bit_pos=7)], ), "WF - Ski Resort - GC BP in Max Cave": GrinchLocationData( "Ski Resort", [ "Grinch Copter Blueprints", "Blueprints", "Who Forest", "Who Forest Blueprints", "Ski Resort", "Ski Resort Blueprints", ], 1205, [GrinchRamData(0x010234, binary_bit_pos=6)], ), "WF - Civic Center - GC BP on Left Side in Bat Cave Wall": GrinchLocationData( "Civic Center", [ "Grinch Copter Blueprints", "Blueprints", "Who Forest", "Who Forest Blueprints", "Civic Center", "Civic Center Blueprints", ], 1206, [GrinchRamData(0x01022A, binary_bit_pos=7)], ), "WF - Civic Center - GC BP in Frozen Ice": GrinchLocationData( "Civic Center", [ "Grinch Copter Blueprints", "Blueprints", "Who Forest", "Who Forest Blueprints", "Civic Center", "Civic Center Blueprints", ], 1207, [GrinchRamData(0x01022B, binary_bit_pos=0)], ), "WD - Power Plant - GC BP in Max Cave": GrinchLocationData( "Power Plant", [ "Grinch Copter Blueprints", "Blueprints", "Who Dump", "Who Dump Blueprints", "Power Plant", "Power Plant Blueprints", ], 1208, [GrinchRamData(0x010265, binary_bit_pos=1)], ), "WD - Power Plant - GC BP After First Gate": GrinchLocationData( "Power Plant", [ "Grinch Copter Blueprints", "Blueprints", "Who Dump", "Who Dump Blueprints", "Power Plant", "Power Plant Blueprints", ], 1209, [GrinchRamData(0x010265, binary_bit_pos=2)], ), "WD - Generator Building - GC BP on the Highest Platform": GrinchLocationData( "Generator Building", [ "Grinch Copter Blueprints", "Blueprints", "Who Dump", "Who Dump Blueprints", "Generator Building", "Generator Building Blueprints", ], 1210, [GrinchRamData(0x01026B, binary_bit_pos=0)], ), "WD - Generator Building - GC BP at the Entrance after Mission Completion": GrinchLocationData( "Generator Building", [ "Grinch Copter Blueprints", "Blueprints", "Who Dump", "Who Dump Blueprints", "Generator Building", "Generator Building Blueprints", ], 1211, [GrinchRamData(0x01026B, binary_bit_pos=1)], ), "WL - Submarine World - GC BP Just Below Water Surface": GrinchLocationData( "Submarine World", [ "Grinch Copter Blueprints", "Blueprints", "Who Lake", "Who Lake Blueprints", "Submarine World", "Submarine World Blueprints", ], 1212, [GrinchRamData(0x010289, binary_bit_pos=3)], ), "WL - Submarine World - GC BP Underwater": GrinchLocationData( "Submarine World", [ "Grinch Copter Blueprints", "Blueprints", "Who Lake", "Who Lake Blueprints", "Submarine World", "Submarine World Blueprints", ], 1213, [GrinchRamData(0x010289, binary_bit_pos=4)], ), "WL - Mayor's Villa - GC BP on Tree Branch": GrinchLocationData( "Mayor's Villa", [ "Grinch Copter Blueprints", "Blueprints", "Who Lake", "Who Lake Blueprints", "Mayor's Villa", "Mayor's Villa Blueprints", ], 1214, [GrinchRamData(0x010275, binary_bit_pos=7)], ), "WL - Mayor's Villa - GC BP in Pirate's Cave": GrinchLocationData( "Mayor's Villa", [ "Grinch Copter Blueprints", "Blueprints", "Who Lake", "Who Lake Blueprints", "Mayor's Villa", "Mayor's Villa Blueprints", ], 1215, [GrinchRamData(0x010275, binary_bit_pos=6)], ), # Sleigh Room Locations "MC - Sleigh Ride - Stealing All Gifts": GrinchLocationData( "Sleigh Room", ["Sleigh Ride"], 1300, [GrinchRamData(0x0100BF, binary_bit_pos=6)], ), "MC - Sleigh Ride - Neutralizing Santa": GrinchLocationData( "Sleigh Room", None, None, [GrinchRamData(0x0100BF, binary_bit_pos=7)] ), # [GrinchRamData(0x010000, value=0x3E)]), # Heart of Stones "WV - Post Office - Heart of Stone": GrinchLocationData( "Post Office", ["Heart of Stones", "Whoville", "Post Office"], 1400, [GrinchRamData(0x0101FA, binary_bit_pos=6)], ), "WF - Ski Resort - Heart of Stone": GrinchLocationData( "Ski Resort", ["Heart of Stones", "Who Forest", "Ski Resort"], 1401, [GrinchRamData(0x0101FA, binary_bit_pos=7)], ), "WD - Minefield - Heart of Stone": GrinchLocationData( "Minefield", ["Heart of Stones", "Who Dump", "Minefield"], 1402, [GrinchRamData(0x0101FB, binary_bit_pos=0)], ), "WL - North Shore - Heart of Stone": GrinchLocationData( "North Shore", ["Heart of Stones", "Who Lake", "North Shore"], 1403, [GrinchRamData(0x0101FB, binary_bit_pos=1)], ), # Supadow Minigames # "Spin N' Win - Easy": GrinchLocationData("Spin N' Win", ["Supadow Minigames", "Spin N' Win"], 1500, [GrinchRamData()]), # "Spin N' Win - Hard": GrinchLocationData("Spin N' Win", ["Supadow Minigames", "Spin N' Win"], 1501, [GrinchRamData()]), # "Spin N' Win - Real Tough": GrinchLocationData("Spin N' Win", ["Supadow Minigames", "Spin N' Win"], 1502, [GrinchRamData()]), # "Dankamania - Easy - 15 Points": GrinchLocationData("Dankamania", ["Supadow Minigames", "Dankamania"], 1503, [GrinchRamData()]), # "Dankamania - Hard - 15 Points": GrinchLocationData("Dankamania", ["Supadow Minigames", "Dankamania"], 1504, [GrinchRamData()]), # "Dankamania - Real Tough - 15 Points": GrinchLocationData("Dankamania", ["Supadow Minigames", "Dankamania"], 1505, [GrinchRamData()]), # "The Copter Race Contest - Easy": GrinchLocationData("The Copter Race Contest", ["Supadow Minigames", "The Copter Race Contest"], 1506, [GrinchRamData()]), # "The Copter Race Contest - Hard": GrinchLocationData("The Copter Race Contest", ["Supadow Minigames", "The Copter Race Contest"], 1507, [GrinchRamData()]), # "The Copter Race Contest - Real Tough": GrinchLocationData("The Copter Race Contest", ["Supadow Minigames", "The Copter Race Contest"], 1508, [GrinchRamData()]), # "Bike Race - 1st Place": GrinchLocationData("Bike Race", ["Supadow Minigames", "Bike Race"], 1509, [GrinchRamData()]), # "Bike Race - Top 2": GrinchLocationData("Bike Race", ["Supadow Minigames", "Bike Race"], 1510, [GrinchRamData()]), # "Bike Race - Top 3": GrinchLocationData("Bike Race", ["Supadow Minigames", "Bike Race"], 1511, [GrinchRamData()]), # Sleigh Part Locations "WV - Exhaust Pipes": GrinchLocationData( "Whoville", ["Sleigh Ride", "Whoville"], 1600, [GrinchRamData(0x0101FB, binary_bit_pos=2)], ), "WF - Skis": GrinchLocationData( "Who Forest", ["Sleigh Ride", "Who Forest"], 1601, [GrinchRamData(0x0101FB, binary_bit_pos=3)], ), "WD - Tires": GrinchLocationData( "Who Dump", ["Sleigh Ride", "Who Dump"], 1602, [GrinchRamData(0x0101FB, binary_bit_pos=4)], ), "WL - Submarine World - Twin-End Tuba": GrinchLocationData( "Submarine World", ["Sleigh Ride", "Who Lake", "South Shore"], 1603, [GrinchRamData(0x0101FB, binary_bit_pos=6)], ), "WL - South Shore - GPS": GrinchLocationData( "Who Lake", ["Sleigh Ride", "Who Lake", "Submarine World"], 1604, [GrinchRamData(0x0101FB, binary_bit_pos=5)], ), # Mount Crumpit Locations "MC - 1st Crate Squashed": GrinchLocationData( "Mount Crumpit", ["Mount Crumpit"], 1700, [GrinchRamData(0x095343, value=1)] ), "MC - 2nd Crate Squashed": GrinchLocationData( "Mount Crumpit", ["Mount Crumpit"], 1701, [GrinchRamData(0x095343, value=2)] ), "MC - 3rd Crate Squashed": GrinchLocationData( "Mount Crumpit", ["Mount Crumpit"], 1702, [GrinchRamData(0x095343, value=3)] ), "MC - 4th Crate Squashed": GrinchLocationData( "Mount Crumpit", ["Mount Crumpit"], 1703, [GrinchRamData(0x095343, value=4)] ), "MC - 5th Crate Squashed": GrinchLocationData( "Mount Crumpit", ["Mount Crumpit"], 1704, [GrinchRamData(0x095343, value=5)] ), } def grinch_locations_to_id() -> dict[str, int]: location_mappings: dict[str, int] = {} for LocationName, LocationData in grinch_locations.items(): location_mappings.update( {LocationName: GrinchLocation.get_apid(LocationData.id)} ) return location_mappings