From b018f42ee3fb59382c702ce0ea39c436aed3838a Mon Sep 17 00:00:00 2001 From: BootsinSoots <102177943+BootsinSoots@users.noreply.github.com> Date: Sun, 15 Oct 2023 18:21:22 -0400 Subject: [PATCH] Delete worlds/luigimansion directory --- worlds/luigimansion/Items.py | 86 -- worlds/luigimansion/Locations.py | 936 ------------------ worlds/luigimansion/Options.py | 115 --- worlds/luigimansion/ROM.py | 16 - worlds/luigimansion/Regions.py | 260 ----- worlds/luigimansion/Rules.py | 9 - worlds/luigimansion/__init__.py | 165 --- .../luigimansion/docs/en_Luigi's Mansion.md | 76 -- worlds/luigimansion/docs/setup_en.md | 144 --- 9 files changed, 1807 deletions(-) delete mode 100644 worlds/luigimansion/Items.py delete mode 100644 worlds/luigimansion/Locations.py delete mode 100644 worlds/luigimansion/Options.py delete mode 100644 worlds/luigimansion/ROM.py delete mode 100644 worlds/luigimansion/Regions.py delete mode 100644 worlds/luigimansion/Rules.py delete mode 100644 worlds/luigimansion/__init__.py delete mode 100644 worlds/luigimansion/docs/en_Luigi's Mansion.md delete mode 100644 worlds/luigimansion/docs/setup_en.md diff --git a/worlds/luigimansion/Items.py b/worlds/luigimansion/Items.py deleted file mode 100644 index aa92b6d4ac48..000000000000 --- a/worlds/luigimansion/Items.py +++ /dev/null @@ -1,86 +0,0 @@ -from typing import Dict, NamedTuple, Set - -from BaseClasses import ItemClassification, Item - - -class LMItem(Item): - game = "Luigi's Mansion" - - -class ItemData(NamedTuple): - group: str - code: int - classification: ItemClassification - count: int = 1 - - -item_table: Dict[str, ItemData] = { - "Heart Key": ItemData('Suite Key', 8500, ItemClassification.progression), - "Club Key": ItemData('Suite Key', 8501, ItemClassification.progression), - "Diamond Key": ItemData('Suite Key', 8502, ItemClassification.progression), - "Spade Key": ItemData('Suite Key', 8503, ItemClassification.progression), - # 'Parlor Key': ItemData('Door Key', 8504,), Left here in case I can play with starting location - "Anteroom Key": ItemData('Door Key', 8505, ItemClassification.progression), - # 'Wardrobe Key': ItemData('Door Key', 8506), does not actually exist - "Front Hallway Key": ItemData('Door Key', 8507, ItemClassification.progression), - "Master Bedroom Key": ItemData('Door Key', 8508, ItemClassification.progression), - "Nursery Key": ItemData('Door Key', 8509, ItemClassification.progression), - "Twins Bedroom Key": ItemData('Door Key', 8510, ItemClassification.progression), - "Ballroom Key": ItemData('Door Key', 8511, ItemClassification.progression), - "Storage Room Key": ItemData('Door Key', 8512, ItemClassification.progression), - "Fortune Teller Key": ItemData('Door Key', 8513, ItemClassification.progression), - "Laundry Key": ItemData('Door Key', 8514, ItemClassification.progression), - "2F Stairwell Key": ItemData('Door Key', 8515, ItemClassification.progression), - "Conservatory Key": ItemData('Door Key', 8516, ItemClassification.progression), - "Dining Room Key": ItemData('Door Key', 8517, ItemClassification.progression), - "Rec Room Key": ItemData('Door Key', 8518, ItemClassification.progression), - "Billiards Key": ItemData('Door Key', 8519, ItemClassification.progression), - "Safari Key": ItemData('Door Key', 8520, ItemClassification.progression), - "Balcony Key": ItemData('Door Key', 8521, ItemClassification.progression), - "Breaker Key": ItemData('Door Key', 8522, ItemClassification.progression), - "Cellar Key": ItemData('Door Key', 8523, ItemClassification.progression), - "Clockwork Key": ItemData('Door Key', 8524, ItemClassification.progression), - "Armory Key": ItemData('Door Key', 8525, ItemClassification.progression), - "Sitting Room Key": ItemData('Door Key', 8526, ItemClassification.progression), - "Pipe Room Key": ItemData('Door Key', 8527, ItemClassification.progression), - "Cold Storage Key": ItemData('Door Key', 8528, ItemClassification.progression), - "Art Studio Key": ItemData('Door Key', 8529, ItemClassification.progression), - "Fire Element Medal": ItemData('Medal', 8530, ItemClassification.progression), - "Water Element Medal": ItemData('Medal', 8531, ItemClassification.progression), - "Ice Element Medal": ItemData('Medal', 8532, ItemClassification.progression), - "Mario's Glove": ItemData('Mario Item', 8533, ItemClassification.progression), - "Mario's Hat": ItemData('Mario Item', 8534, ItemClassification.progression), - "Mario's Letter": ItemData('Mario Item', 8535, ItemClassification.progression), - "Mario's Star": ItemData('Mario Item', 8536, ItemClassification.progression), - "Mario's Shoe": ItemData('Mario Item', 8537, ItemClassification.progression), - "Boo": ItemData('Boo Item', 8538, ItemClassification.progression, count=35), - "Boo Radar": ItemData('Upgrade', 8539, ItemClassification.progression), - # does the Boo release cutscene trigger the butler, or is it acquiring the boo radar? - "Poltergust 4000": ItemData('Upgrade', 8540, ItemClassification.useful), - "Treasure Bundle": ItemData('Filler', 8541, ItemClassification.filler), - "Poison Mushroom": ItemData('Trap', 8542, ItemClassification.trap), - "Ghost": ItemData('Trap', 8543, ItemClassification.trap), - "Nothing": ItemData('Filler', 8544, ItemClassification.filler), - "Small Heart": ItemData('Filler', 8546, ItemClassification.filler), - "Medium Heart": ItemData('Filler', 8547, ItemClassification.filler), - "Large Heart": ItemData('Filler', 8548, ItemClassification.filler) -} - -filler_items: Dict[str, ItemData] = { - "Treasure Bundle": ItemData('Filler', 8549, ItemClassification.filler), - "Poison Mushroom": ItemData('Trap', 8550, ItemClassification.trap), - "Ghost": ItemData('Trap', 8551, ItemClassification.trap), - "Nothing": ItemData('Filler', 8552, ItemClassification.filler), - "Small Heart": ItemData('Filler', 8553, ItemClassification.filler), - "Medium Heart": ItemData('Filler', 8554, ItemClassification.filler), - "Large Heart": ItemData('Filler', 8555, ItemClassification.filler) -} - - -def get_item_names_per_category() -> Dict[str, Set[str]]: - categories: Dict[str, Set[str]] = {} - - for name, data in item_table.items(): - categories.setdefault(data.group, set()).add(name) - - return categories diff --git a/worlds/luigimansion/Locations.py b/worlds/luigimansion/Locations.py deleted file mode 100644 index f8222d026f06..000000000000 --- a/worlds/luigimansion/Locations.py +++ /dev/null @@ -1,936 +0,0 @@ -from typing import List, Tuple, Optional, Callable, NamedTuple, Union, Dict -from BaseClasses import MultiWorld, Location - -EventId: Optional[int] = None - - -# need to understand how Location subclasses are used to ensure passing of correct information - -class LMLocation(Location): - game: str = "Luigi's Mansion" - - -class LocationData(NamedTuple): - parent_region: str - name: str - code: Optional[int] - locked_item: Optional[str] = None - rule: Callable = lambda state: True - - -def get_locations(multiworld: Optional[MultiWorld], player: Optional[int]) -> Tuple[LocationData, ...]: - location_table: List[LocationData] = [ - LocationData("Wardrobe", 'Wardrobe Clear Chest', 8000, - rule=lambda state: state.has("Blackout", player)), - LocationData('Study', 'Study Clear Chest', 8001), - LocationData('Master Bedroom', 'Master Bedroom Clear Chest', 8002), - LocationData('Nursery', 'Nursery Clear Chest', 8003), - LocationData('1F Washroom', '1F Washroom Toilet', 8004), - LocationData('Fortune-Teller\'s Room', 'Fortune Teller Clear Chest', 8005, - rule=lambda state: state.has_group("Mario Item", player, multiworld.MarioItems[player])), - LocationData('Fortune-Teller\'s Room', 'Fortune Teller Candles Key', 8006, - rule=lambda state: state.has("Fire Element Medal", player)), - LocationData('Laundry Room', 'Laundry Washing Machine', 8007), - LocationData('Butler\'s Room', 'Butler Clear Chest', 8008, - rule=lambda state: state.has("Fire Element Medal", player) and state.has("Boo Release", - player)), - LocationData('Hidden Room', 'Hidden Room Large Chest L', 8009), - LocationData('Hidden Room', 'Hidden Room Large Chest C', 8010), - LocationData('Hidden Room', 'Hidden Room Large Chest R', 8011), - LocationData('Hidden Room', 'Hidden Room Small Chest L Floor', 8012), - LocationData('Hidden Room', 'Hidden Room Small Chest R Floor', 8013), - LocationData('Hidden Room', 'Hidden Room Small Chest L Shelf', 8014), - LocationData('Hidden Room', 'Hidden Room Small Chest R Shelf', 8015), - LocationData('Conservatory', 'Conservatory Clear Chest', 8016), - LocationData('Dining Room', 'Dining Room Clear Chest', 8017, - rule=lambda state: state.has("Fire Element Medal", player)), - LocationData('Rec Room', 'Rec Room Treadmill Key', 8018), - LocationData('Rec Room', 'Rec Room Clear Chest', 8019), - LocationData('Courtyard', 'Courtyard Birdhouse', 8020), - LocationData('2F Bathroom', '2F Bathroom Clear Chest', 8021), - LocationData('Nana\'s Room', 'Nana\'s Room Clear Chest', 8022), - LocationData('Observatory', 'Observatory Power Star', 8023), - LocationData('Twins\' Room', 'Twins\' Room Clear Chest', 8024, - rule=lambda state: state.has_group("Medal", player)), - LocationData('Billiards Room', 'Billiards Room Clear Chest', 8025), - LocationData('Balcony', 'Balcony Room Clear Chest', 8026, - rule=lambda state: state.has("Ice Element Medal", player)), - LocationData('Ceramics Studio', 'Ceramics Studio Clear Chest', 8027, - rule=lambda state: state.has("Ice Element Medal", player)), - LocationData('Sealed Room', 'Sealed Room NW Shelf Chest', 8028), - LocationData('Sealed Room', 'Sealed Room NE Shelf Chest', 8029), - LocationData('Sealed Room', 'Sealed Room SW Shelf Chest', 8030), - LocationData('Sealed Room', 'Sealed Room SE Shelf Chest', 8031), - LocationData('Sealed Room', 'Sealed Room Table Chest', 8032), - LocationData('Sealed Room', 'Sealed Room Lower Big Chest', 8033), - LocationData('Sealed Room', 'Sealed Room Upper L Big Chest', 8034), - LocationData('Sealed Room', 'Sealed Room Upper C Big Chest', 8035), - LocationData('Sealed Room', 'Sealed Room Upper R Big Chest', 8036), - LocationData('Armory', 'Armory 1st Gray Chest', 8037), - LocationData('Armory', 'Armory 2nd Gray Chest', 8038), - LocationData('Armory', 'Armory 3rd Gray Chest', 8039), - LocationData('Armory', 'Armory 4th Gray Chest', 8040), - LocationData('Armory', 'Armory 5th Gray Chest', 8041), - LocationData('Telephone Room', 'Telephone Room Wood Chest C Chest', 8042), - LocationData('Telephone Room', 'Telephone Room Wood Chest R1 Chest', 8043), - LocationData('Telephone Room', 'Telephone Room Wood Chest R2 Chest', 8044), - LocationData('Guest Room', 'Guest Room Clear Chest', 8045, - rule=lambda state: state.has("Water Element Medal", player)), - LocationData('Parlor', 'Parlor Clear Chest', 8046), - LocationData('Cold Storage', 'Cold Storage Clear Chest', 8047, - rule=lambda state: state.has("Fire Element Medal", player)), - LocationData('Breaker Room', 'Breaker Room Clear Chest', 8048, - rule=lambda state: state.has("Breaker Key", player)), - LocationData('The Well', 'The Well Key', 8049), - - # Ghost Affected Clear Chests. Rules applied to region entrances - LocationData('Wardrobe', 'Wardrobe Shelf Key', 8050), - LocationData('Hidden Room', 'Hidden Room Clear Chest', 8051), - LocationData('Mirror Room', 'Mirror Room Clear Chest', 8052), - LocationData('Kitchen', 'Kitchen Clear Chest', 8053), - LocationData('1F Bathroom', '1F Bathroom Shelf Key', 8054), - LocationData('Courtyard', 'Courtyard Clear Chest', 8055), - LocationData('Tea Room', 'Tea Room Clear Chest', 8056), - LocationData('2F Washroom', '2F Washroom Clear Chest', 8057), - LocationData('Projection Room', 'Projection Room Clear Chest', 8058), - LocationData('Safari Room', 'Safari Room Clear Chest', 8059), - LocationData('Cellar', 'Cellar Clear Chest', 8060), - LocationData('Roof', 'Roof Clear Chest', 8061), - LocationData('Sealed Room', 'Sealed Room Clear Chest', 8062), - LocationData('Armory', 'Armory Clear Chest', 8063), - LocationData('Pipe Room', 'Pipe Room Clear Chest', 8064, - rule=lambda state: state.has("Ice Element Medal", player)), - - # Game Event Locations - LocationData('Balcony', 'Diamond Door', None, "Blackout", lambda state: state.has("Diamond Key", player)), - LocationData('Storage Room', 'Storage Room Cage', None, "Boo Release"), - # LocationData('Nursery', 'Chauncey', None), - # LocationData('Graveyard', 'Bogmire', None), - LocationData("Balcony", "Boolossus Boo 1", None, "Boo"), - LocationData("Balcony", "Boolossus Boo 2", None, "Boo"), - LocationData("Balcony", "Boolossus Boo 3", None, "Boo"), - LocationData("Balcony", "Boolossus Boo 4", None, "Boo"), - LocationData("Balcony", "Boolossus Boo 5", None, "Boo"), - LocationData("Balcony", "Boolossus Boo 6", None, "Boo"), - LocationData("Balcony", "Boolossus Boo 7", None, "Boo"), - LocationData("Balcony", "Boolossus Boo 8", None, "Boo"), - LocationData("Balcony", "Boolossus Boo 9", None, "Boo"), - LocationData("Balcony", "Boolossus Boo 10", None, "Boo"), - LocationData("Balcony", "Boolossus Boo 11", None, "Boo"), - LocationData("Balcony", "Boolossus Boo 12", None, "Boo"), - LocationData("Balcony", "Boolossus Boo 13", None, "Boo"), - LocationData("Balcony", "Boolossus Boo 14", None, "Boo"), - LocationData("Balcony", "Boolossus Boo 15", None, "Boo"), - LocationData('Secret Altar', name="King Boo", code=None, locked_item="Mario's Painting", ) - ] - - # Adds all waterable plants as locations - if not multiworld or is_option_enabled(multiworld, player, "Plantsanity"): - location_table += ( - LocationData('Wardrobe Balcony', 'Wardrobe Balcony Plant 1', 8065, - rule=lambda state: state.has("Water Element Medal", player)), - LocationData('Wardrobe Balcony', 'Wardrobe Balcony Plant 2', 8066, - rule=lambda state: state.has("Water Element Medal", player)), - LocationData('Wardrobe Balcony', 'Wardrobe Balcony Plant 3', 8067, - rule=lambda state: state.has("Water Element Medal", player)), - LocationData('Wardrobe Balcony', 'Wardrobe Balcony Plant 4', 8068, - rule=lambda state: state.has("Water Element Medal", player)), - LocationData('Master Bedroom', 'Master Bedroom Plant', 8069, - rule=lambda state: state.has("Water Element Medal", player)), - # LocationData('Boneyard', 'Huge Flower', 8070, - # rule=lambda state: state.has("Water Element Medal", player) and state.has()), need to determine how to make unskippable - LocationData('Courtyard', 'Courtyard Fountain Plant 1', 8071, - rule=lambda state: state.has("Water Element Medal", player)), - LocationData('Courtyard', 'Courtyard Fountain Plant 2', 8072, - rule=lambda state: state.has("Water Element Medal", player)), - LocationData('Courtyard', 'Courtyard Fountain Plant 3', 8073, - rule=lambda state: state.has("Water Element Medal", player)), - LocationData('Courtyard', 'Courtyard Fountain Plant 4', 8074, - rule=lambda state: state.has("Water Element Medal", player)), - LocationData('Balcony', 'Balcony Plant 1', 8075, - rule=lambda state: state.has("Water Element Medal", player)), - LocationData('Balcony', 'Balcony Plant 2', 8076, - rule=lambda state: state.has("Water Element Medal", player)), - LocationData('Balcony', 'Balcony Plant 3', 8077, - rule=lambda state: state.has("Water Element Medal", player)), - LocationData('Balcony', 'Balcony Plant 4', 8078, - rule=lambda state: state.has("Water Element Medal", player)), - LocationData('Balcony', 'Balcony Plant 5', 8079, - rule=lambda state: state.has("Water Element Medal", player)), - LocationData('Balcony', 'Balcony Plant 6', 8080, - rule=lambda state: state.has("Water Element Medal", player)), - LocationData('Balcony', 'Balcony Plant 7', 8081, - rule=lambda state: state.has("Water Element Medal", player)), - LocationData('Balcony', 'Balcony Plant 8', 8082, - rule=lambda state: state.has("Water Element Medal", player)), - LocationData('Balcony', 'Balcony Plant 9', 8083, - rule=lambda state: state.has("Water Element Medal", player)), - LocationData('Balcony', 'Balcony Plant 10', 8084, - rule=lambda state: state.has("Water Element Medal", player)), - LocationData('Balcony', 'Balcony Plant 11', 8085, - rule=lambda state: state.has("Water Element Medal", player)), - LocationData('Balcony', 'Balcony Plant 12', 8086, - rule=lambda state: state.has("Water Element Medal", player)), - LocationData('Balcony', 'Balcony Plant 13', 8087, - rule=lambda state: state.has("Water Element Medal", player)), - LocationData('Balcony', 'Balcony Plant 14', 8088, - rule=lambda state: state.has("Water Element Medal", player)), - LocationData('Balcony', 'Balcony Plant 15', 8089, - rule=lambda state: state.has("Water Element Medal", player)), - LocationData('Balcony', 'Balcony Plant 16', 8090, - rule=lambda state: state.has("Water Element Medal", player)), - LocationData('Sitting Room', 'Sitting Room Plant', 8091, - rule=lambda state: state.has("Water Element Medal", player)), - LocationData('Guest Room', 'Guest Room Plant', 8092, - rule=lambda state: state.has("Water Element Medal", player)) - ) - - # Adds the myriad shakable objects as locations - if not multiworld or is_option_enabled(multiworld, player, "Interactables"): - location_table += ( - LocationData('Foyer', 'Foyer Dresser', 8093), - LocationData('Foyer', 'Heart Door Lamp', 8094), - LocationData('Foyer', 'Foyer Chandelier', 8095), - LocationData('Foyer', 'Foyer East Vase', 8096), - LocationData('Foyer', 'Foyer West Candlestick', 8097), - LocationData('Foyer', 'Foyer East Candlestick', 8098), - LocationData('Parlor', 'Parlor Chair', 8099), - LocationData('Parlor', 'Parlor Couch', 8100), - LocationData('Parlor', 'Parlor Table', 8101), - LocationData('Parlor', 'Parlor Chandelier', 8102), - LocationData('Parlor', 'Parlor Wine Table', 8103), - LocationData('Parlor', 'Parlor China Cabinet', 8104), - LocationData('Parlor', 'Parlor China Hutch', 8105), - LocationData('Parlor', 'Parlor End Table', 8106), - LocationData('Parlor', 'Parlor Painting 1', 8107), - LocationData('Parlor', 'Parlor Painting 2', 8108), - LocationData('Parlor', 'Parlor Painting 3', 8109), - LocationData('Parlor', 'Parlor Painting 4', 8110), - LocationData('Parlor', 'Parlor Painting 5', 8111), - LocationData('Anteroom', 'Anteroom East End Table', 8112), - LocationData('Anteroom', 'Anteroom Center End Table', 8113), - LocationData('Anteroom', 'Anteroom West End Table', 8114), - LocationData('Anteroom', 'Anteroom East Chandelier', 8115), - LocationData('Anteroom', 'Anteroom West Chandelier', 8116), - LocationData('Wardrobe', 'Wardrobe Chandelier', 8117), - LocationData('Wardrobe', 'Wardrobe Coat Rack', 8118), - LocationData('Wardrobe', 'Wardrobe Shoe Rack', 8119), - LocationData('Wardrobe', 'Wardrobe Hat Stand', 8120), - LocationData('Wardrobe', 'Wardrobe Mirror', 8121), - LocationData('Wardrobe', 'Wardrobe West Dresser', 8122), - LocationData('Wardrobe', 'Wardrobe Center Dresser', 8123), - LocationData('Wardrobe', 'Wardrobe East Dresser', 8124), - LocationData('Wardrobe Balcony', 'Wardrobe Balcony Brazier', 8125), - LocationData('Study', 'Study Lamp', 8126), - LocationData('Study', 'Study Hat Rack', 8127), - LocationData('Study', 'Study Chandelier', 8128), - LocationData('Study', 'Study Rocker', 8129), - LocationData('Study', 'Study Bottled Ship', 8130), - LocationData('Study', 'Study Desk', 8131), - LocationData('Study', 'Study Chair', 8132), - LocationData('Study', 'Study Book 1', 8133), - LocationData('Study', 'Study Book 2', 8134), - LocationData('Study', 'Study Painting 1', 8135), - LocationData('Study', 'Study Painting 2', 8136), - LocationData('Study', 'Study Painting 3', 8137), - LocationData('Study', 'Study Painting 4', 8138), - LocationData('Study', 'Study Bookshelf 1', 8139), - LocationData('Study', 'Study Bookshelf 2', 8140), - LocationData('Study', 'Study Bookshelf 3', 8141), - LocationData('Study', 'Study Bookshelf 4', 8142), - LocationData('Study', 'Study Bookshelf 5', 8143), - LocationData('Study', 'Study Bookshelf 6', 8144), - LocationData('Master Bedroom', 'Master Bedroom Dresser', 8145), - LocationData('Master Bedroom', 'Master Bedroom Stool', 8146), - LocationData('Master Bedroom', 'Master Bedroom Vanity', 8147), - LocationData('Master Bedroom', 'Master Bedroom End Table', 8148), - LocationData('Master Bedroom', 'Master Bedroom Bed', 8149), - LocationData('Master Bedroom', 'Master Bedroom Ceiling Fan', 8150), - LocationData('Master Bedroom', 'Master Bedroom Painting 1', 8151), - LocationData('Master Bedroom', 'Master Bedroom Painting 2', 8152), - LocationData('Master Bedroom', 'Master Bedroom Painting 3', 8153), - LocationData('Nursery', 'Nursery Vase', 8154), - LocationData('Nursery', 'Nursery Crib', 8155), - LocationData('Nursery', 'Nursery Rocking Horse', 8156), - LocationData('Nursery', 'Nursery Heart Dresser', 8157), - LocationData('Nursery', 'Nursery Chair 1', 8158), - LocationData('Nursery', 'Nursery Chair 2', 8159), - LocationData('Nursery', 'Nursery Table', 8160), - LocationData('Nursery', 'Nursery Toy Blocks', 8161), - LocationData('Nursery', 'Nursery Wall Picture', 8162), - LocationData('Nursery', 'Nursery Picture 1', 8163), - LocationData('Nursery', 'Nursery Picture 2', 8164), - LocationData('Twins\' Room', 'Twins\' Room Mobile', 8165), - LocationData('Twins\' Room', 'Twins\' Room Tennis Racket', 8166), - LocationData('Twins\' Room', 'Twins\' Room Dartboard', 8167), - LocationData('Twins\' Room', 'Twins\' Room Bunk Bed', 8168), - LocationData('Twins\' Room', 'Twins\' Room Light', 8169), - LocationData('Twins\' Room', 'Twins\' Room Train', 8170), - LocationData('Twins\' Room', 'Twins\' Room Cars', 8171), - LocationData('Twins\' Room', 'Twins\' Room Desk', 8172), - LocationData('Twins\' Room', 'Twins\' Room Picture 1', 8173), - LocationData('Twins\' Room', 'Twins\' Room Picture 2', 8174), - LocationData('Twins\' Room', 'Twins\' Room Chair 1', 8175), - LocationData('Twins\' Room', 'Twins\' Room Chair 2', 8176), - LocationData('1F Hallway', '1F Hallway Picture', 8177), - LocationData('1F Hallway', '1F Hallway Vase 1', 8178), - LocationData('1F Hallway', '1F Hallway Vase 2', 8179), - LocationData('1F Hallway', '1F Hallway Vase 3', 8180), - LocationData('1F Hallway', '1F Hallway Vase 4', 8181), - LocationData('1F Hallway', '1F Hallway Vase 5', 8182), - LocationData('1F Hallway', '1F Hallway Vase 6', 8183), - LocationData('1F Bathroom', '1F Bathroom Sink', 8184), - LocationData('1F Bathroom', '1F Bathroom Bathtub', 8185), - LocationData('1F Washroom', '1F Washroom Sink', 8186), - LocationData('1F Washroom', '1F Washroom Mirror', 8187), - LocationData('1F Washroom', '1F Washroom Picture', 8188), - LocationData('1F Washroom', '1F Washroom Radiator', 8189), - LocationData('1F Washroom', '1F Washroom Cabinet', 8190), - LocationData('1F Washroom', '1F Washroom Light', 8191), - LocationData('1F Washroom', '1F Washroom Water Closet', 8192), - LocationData('Ballroom', 'Ballroom West Chandelier', 8193), - LocationData('Ballroom', 'Ballroom East Chandelier', 8194), - LocationData('Ballroom', 'Ballroom Portrait 1', 8195), - LocationData('Ballroom', 'Ballroom Portrait 2', 8196), - LocationData('Ballroom', 'Ballroom Chair 1', 8197), - LocationData('Ballroom', 'Ballroom Chair 2', 8198), - LocationData('Ballroom', 'Ballroom Chair 3', 8199), - LocationData('Ballroom', 'Ballroom Chair 4', 8200), - LocationData('Storage Room', 'Storage Room Chair', 8201), - LocationData('Storage Room', 'Storage Room Bucket', 8202), - LocationData('Storage Room', 'Storage Room Light', 8203), - LocationData('Storage Room', 'Storage Room Chair Stack', 8204), - LocationData('Storage Room', 'Storage Room Crate 1', 8205), - LocationData('Storage Room', 'Storage Room Crate 2', 8206), - LocationData('Storage Room', 'Storage Room Crate 3', 8207), - LocationData('Storage Room', 'Storage Room Crate 4', 8208), - LocationData('Storage Room', 'Storage Room Crate 5', 8209), - LocationData('Storage Room', 'Storage Room Crate 6', 8210), - LocationData('Storage Room', 'Storage Room Crate 7', 8211), - LocationData('Storage Room', 'Storage Room Crate 8', 8212), - LocationData('Fortune-Teller\'s Room', 'Fortune-Teller\'s Room West Dresser', 8213), - LocationData('Fortune-Teller\'s Room', 'Fortune-Teller\'s Room East Dresser', 8214), - LocationData('Fortune-Teller\'s Room', 'Fortune-Teller\'s Room West Candlestick', 8215), - LocationData('Fortune-Teller\'s Room', 'Fortune-Teller\'s Room East Candlestick', 8216), - LocationData('Fortune-Teller\'s Room', 'Fortune-Teller\'s Room Chair', 8217), - LocationData('Fortune-Teller\'s Room', 'Fortune-Teller\'s Room Table', 8218), - LocationData('Mirror Room', 'Mirror Room Drawer', 8219), - LocationData('Mirror Room', 'Mirror Room Brazier', 8220), - LocationData('Mirror Room', 'Mirror Room West Candlestick', 8221), - LocationData('Mirror Room', 'Mirror Room East Candlestick', 8222), - LocationData('Mirror Room', 'Mirror Room West Chandelier', 8223), - LocationData('Mirror Room', 'Mirror Room East Chandelier', 8224), - LocationData('Laundry Room', 'Laundry Room Broom', 8225), - LocationData('Laundry Room', 'Laundry Room Bucket', 8226), - LocationData('Laundry Room', 'Laundry Room Dustpan', 8227), - LocationData('Laundry Room', 'Laundry Room Laundry Basket', 8228), - LocationData('Laundry Room', 'Laundry Room Cabinet', 8229), - LocationData('Laundry Room', 'Laundry Room Light', 8230), - LocationData('Laundry Room', 'Laundry Room Shelf 1', 8231), - LocationData('Laundry Room', 'Laundry Room Shelf 2', 8232), - LocationData('Butler\'s Room', 'Butler\'s Room Stool 1', 8233), - LocationData('Butler\'s Room', 'Butler\'s Room Stool 2', 8234), - LocationData('Butler\'s Room', 'Butler\'s Room Stool 3', 8235), - LocationData('Butler\'s Room', 'Butler\'s Room Stool 4', 8236), - LocationData('Butler\'s Room', 'Butler\'s Room Stool 5', 8237), - LocationData('Butler\'s Room', 'Butler\'s Room Mop Bucket', 8238), - LocationData('Butler\'s Room', 'Butler\'s Room Toilet Paper 1', 8239), - LocationData('Butler\'s Room', 'Butler\'s Room Toilet Paper 2', 8240), - LocationData('Butler\'s Room', 'Butler\'s Room Light', 8241), - LocationData('Butler\'s Room', 'Butler\'s Room Bucket', 8242), - LocationData('Butler\'s Room', 'Butler\'s Room Table', 8243), - LocationData('Butler\'s Room', 'Butler\'s Rorm Ironing Board', 8244), - LocationData('Butler\'s Room', 'Butler\'s Room Sewing Machine', 8245), - LocationData('Hidden Room', 'Hidden Room Candlestick 1', 8246), - LocationData('Hidden Room', 'Hidden Room Candlestick 2', 8247), - LocationData('Hidden Room', 'Hidden Room Trophy 1', 8248), - LocationData('Hidden Room', 'Hidden Room Trophy 2', 8249), - LocationData('Hidden Room', 'Hidden Room Chandelier', 8250), - LocationData('Hidden Room', 'Hidden Room Painting 1', 8251), - LocationData('Hidden Room', 'Hidden Room Painting 2', 8252), - LocationData('Hidden Room', 'Hidden Room Painting 3', 8253), - LocationData('Hidden Room', 'Hidden Room Painting 4', 8254), - LocationData('Hidden Room', 'Hidden Room Painting 5', 8255), - LocationData('Conservatory', 'Conservatory Picture 1', 8256), - LocationData('Conservatory', 'Conservatory Picture 2', 8257), - LocationData('Conservatory', 'Conservatory Picture 3', 8258), - LocationData('Conservatory', 'Conservatory Picture 4', 8259), - LocationData('Conservatory', 'Conservatory Chair 1', 8260), - LocationData('Conservatory', 'Conservatory Chair 2', 8261), - LocationData('Conservatory', 'Conservatory Music Stand 1', 8262), - LocationData('Conservatory', 'Conservatory Music Stand 2', 8263), - LocationData('Conservatory', 'Conservatory Piano', 8264), - LocationData('Conservatory', 'Conservatory Piano Bench', 8265), - LocationData('Conservatory', 'Conservatory Light', 8266), - LocationData('Conservatory', 'Conservatory Xylophone', 8267), - LocationData('Conservatory', 'Conservatory Cello', 8268), - LocationData('Conservatory', 'Conservatory Left Bongo', 8269), - LocationData('Conservatory', 'Conservatory Right Bongo', 8270), - LocationData('Conservatory', 'Conservatory Center Bongo', 8271), - LocationData('Conservatory', 'Conservatory Harp', 8272), - LocationData('Conservatory', 'Conservatory Saxophone', 8273), - LocationData('Conservatory', 'Conservatory Drawer', 8274), - LocationData('Dining Room', 'Dining Room West China Hutch', 8275), - LocationData('Dining Room', 'Dining Room East China Hutch', 8276), - LocationData('Dining Room', 'Dining Room West Brazier', 8277), - LocationData('Dining Room', 'Dining Room East Brazier', 8278), - LocationData('Dining Room', 'Dining Room Picture', 8279), - LocationData('Dining Room', 'Dining Room Table', 8280), - LocationData('Dining Room', 'Dining Room Table Mess 1', 8281), - LocationData('Dining Room', 'Dining Room Table Mess 2', 8282), - LocationData('Dining Room', 'Dining Room Table Mess 3', 8283), - LocationData('Dining Room', 'Dining Room Table Mess 4', 8284), - LocationData('Dining Room', 'Dining Room Table Mess 5', 8285), - LocationData('Kitchen', 'Kitchen Oven', 8286), - LocationData('Kitchen', 'Kitchen Refrigerator', 8287), - LocationData('Kitchen', 'Kitchen China Hutch', 8288), - LocationData('Kitchen', 'Kitchen Shelf 1', 8289), - LocationData('Kitchen', 'Kitchen Shelf 2', 8290), - LocationData('Kitchen', 'Kitchen Pan 1', 8291), - LocationData('Kitchen', 'Kitchen Pan 2', 8292), - LocationData('Kitchen', 'Kitchen Pan 3', 8293), - LocationData('Kitchen', 'Kitchen Rack 1', 8294), - LocationData('Kitchen', 'Kitchen Rack 2', 8295), - LocationData('Kitchen', 'Kitchen West Light', 8296), - LocationData('Kitchen', 'Kitchen East Light', 8297), - LocationData('Boneyard', 'Boneyard Faucet', 8298), - LocationData('Boneyard', 'Boneyard Sign', 8299), - LocationData('Graveyard', 'Graveyard Downspout', 8300), - LocationData('Graveyard', 'Graveyard Big Tombstone', 8301), - LocationData('Graveyard', 'Graveyard Left Brazier', 8302), - LocationData('Graveyard', 'Graveyard Right Brazier', 8303), - LocationData('Graveyard', 'Graveyard Tombstone 1', 8304), - LocationData('Graveyard', 'Graveyard Tombstone 2', 8305), - LocationData('Graveyard', 'Graveyard Tombstone 3', 8306), - LocationData('Graveyard', 'Graveyard Tombstone 4', 8307), - LocationData('Graveyard', 'Graveyard Tombstone 5', 8308), - LocationData('Graveyard', 'Graveyard Tombstone 6', 8309), - LocationData('Courtyard', 'Courtyard Outhouse', 8310), - LocationData('Courtyard', 'Courtyard West Lamppost', 8311), - LocationData('Courtyard', 'Courtyard East Lamppost', 8312), - LocationData('Courtyard', 'Courtyard West Statue', 8313), - LocationData('Courtyard', 'Courtyard East Statue', 8314), - LocationData('Well', 'Well Lantern', 8315), - LocationData('Foyer', 'Foyer Mirror', 8316), - LocationData('Foyer', 'Foyer West Vase', 8317), - LocationData('Rec Room', 'Rec Room Weight Rack', 8318), - LocationData('Rec Room', 'Rec Room Drawer', 8319), - LocationData('Rec Room', 'Rec Room Front Bicycle', 8320), - LocationData('Rec Room', 'Rec Room Rear Bicycle', 8321), - LocationData('Rec Room', 'Rec Room East Front Crest', 8322), - LocationData('Rec Room', 'Rec Room West Front Crest', 8323), - LocationData('Rec Room', 'Rec Room East Rear Crest', 8324), - LocationData('Rec Room', 'Rec Room West Rear Crest', 8325), - LocationData('Rec Room', 'Rec Room Left Punching Bag', 8326), - LocationData('Rec Room', 'Rec Room Right Punching Bag', 8327), - LocationData('Rec Room', 'Rec Room Center Punching Bag', 8328), - LocationData('Rec Room', 'Rec Room West Light', 8329), - LocationData('Rec Room', 'Rec Room East Light', 8330), - LocationData('2F Stairwell', '2F Stairwell Light', 8331), - LocationData('Tea Room', 'Tea Room Ice Bucket', 8332), - LocationData('Tea Room', 'Tea Room Tableware 1', 8333), - LocationData('Tea Room', 'Tea Room Tableware 2', 8334), - LocationData('Tea Room', 'Tea Room Tableware 3', 8335), - LocationData('Tea Room', 'Tea Room Tableware 4', 8336), - LocationData('Tea Room', 'Tea Room Chair 1', 8337), - LocationData('Tea Room', 'Tea Room Chair 2', 8338), - LocationData('Tea Room', 'Tea Room Chair 3', 8339), - LocationData('Tea Room', 'Tea Room Chair 4', 8340), - LocationData('Tea Room', 'Tea Room Chair 5', 8341), - LocationData('Tea Room', 'Tea Room Chair 6', 8342), - LocationData('Tea Room', 'Tea Room Chair 7', 8343), - LocationData('Tea Room', 'Tea Room Chair 8', 8344), - LocationData('Tea Room', 'Tea Room China 1', 8345), - LocationData('Tea Room', 'Tea Room China 2', 8346), - LocationData('Tea Room', 'Tea Room China 3', 8347), - LocationData('Tea Room', 'Tea Room China 4', 8348), - LocationData('Tea Room', 'Tea Room Drawer 1', 8349), - LocationData('Tea Room', 'Tea Room Drawer 2', 8350), - LocationData('Tea Room', 'Tea Room Table 1', 8351), - LocationData('Tea Room', 'Tea Room Table 2', 8352), - LocationData('Tea Room', 'Tea Room Chandelier', 8353), - LocationData('Tea Room', 'Tea Room Tea Box', 8354), - LocationData('Tea Room', 'Tea Room Candlestick 1', 8355), - LocationData('Tea Room', 'Tea Room Candlestick 2', 8356), - LocationData('2F Rear Hallway', '2F Rear Hallway Stairwell Light', 8357), - LocationData('2F Rear Hallway', '2F Rear Hallway Picture', 8358), - LocationData('2F Rear Hallway', '2F Rear Hallway Vase 1', 8359), - LocationData('2F Rear Hallway', '2F Rear Hallway Vase 2', 8360), - LocationData('2F Rear Hallway', '2F Rear Hallway Vase 3', 8361), - LocationData('2F Rear Hallway', '2F Rear Hallway Vase 4', 8362), - LocationData('2F Rear Hallway', '2F Rear Hallway Vase 5', 8363), - LocationData('2F Rear Hallway', '2F Rear Hallway Vase 6', 8364), - LocationData('2F Washroom', '2F Washroom Water Closet', 8365), - LocationData('2F Washroom', '2F Washroom Mirror', 8366), - LocationData('2F Washroom', '2F Washroom Toilet', 8367), - LocationData('2F Washroom', '2F Washroom Sink', 8368), - LocationData('2F Washroom', '2F Washroom Radiator', 8369), - LocationData('2F Washroom', '2F Washroom Picture', 8370), - LocationData('2F Washroom', '2F Washroom Shelf', 8371), - LocationData('2F Washroom', '2F Washroom Toilet Paper', 8372), - LocationData('2F Washroom', '2F Washroom Light', 8373), - LocationData('2F Bathroom', '2F Bathroom Sink', 8374), - LocationData('2F Bathroom', '2F Bathroom Bathtub', 8375), - LocationData('Nana\'s Room', 'Nana\'s Room Spinning Wheel', 8376), - LocationData('Nana\'s Room', 'Nana\'s Room Sewing Machine', 8377), - LocationData('Nana\'s Room', 'Nana\'s Room Dresser', 8378), - LocationData('Nana\'s Room', 'Nana\'s Room Loveseat', 8379), - LocationData('Nana\'s Room', 'Nana\'s Room Chair', 8380), - LocationData('Nana\'s Room', 'Nana\'s Room Table', 8381), - LocationData('Nana\'s Room', 'Nana\'s Room Rocker', 8382), - LocationData('Nana\'s Room', 'Nana\'s Room Light', 8383), - LocationData('Nana\'s Room', 'Nana\'s Room Books', 8384), - LocationData('Nana\'s Room', 'Nana\'s Room Pictures', 8385), - LocationData('Nana\'s Room', 'Nana\'s Room Trinkets', 8386), - LocationData('Nana\'s Room', 'Nana\'s Room Painting', 8387), - LocationData('Nana\'s Room', 'Nana\'s Room Side Table', 8388), - LocationData('Astral Hall', 'Astral Hall Left Drawer', 8389), - LocationData('Astral Hall', 'Astral Hall Right Drawer', 8390), - LocationData('Astral Hall', 'Astral Hall Chandelier', 8391), - LocationData('Astral Hall', 'Astral Hall Candelabra 1', 8392), - LocationData('Astral Hall', 'Astral Hall Candelabra 2', 8393), - LocationData('Astral Hall', 'Astral Hall Candelabra 3', 8394), - LocationData('Astral Hall', 'Astral Hall Candelabra 4', 8395), - LocationData('Astral Hall', 'Astral Hall Candelabra 5', 8396), - LocationData('Observatory', 'Observatory Dresser', 8397), - LocationData('Observatory', 'Observatory Chair', 8398), - LocationData('Billiards Room', 'Billiards Room Chess Table', 8399), - LocationData('Billiards Room', 'Billiards Room Chair 1', 8400), - LocationData('Billiards Room', 'Billiards Room Chair 2', 8401), - LocationData('Billiards Room', 'Billiards Room Chair 3', 8402), - LocationData('Billiards Room', 'Billiards Room Portrait 1', 8403), - LocationData('Billiards Room', 'Billiards Room Portrait 2', 8404), - LocationData('Billiards Room', 'Billiards Room Portrait 3', 8405), - LocationData('Billiards Room', 'Billiards Room Portrait 4', 8406), - LocationData('Billiards Room', 'Billiards Room Dart Board', 8407), - LocationData('Billiards Room', 'Billiards Room End Table 1', 8408), - LocationData('Billiards Room', 'Billiards Room End Table 2', 8409), - LocationData('Billiards Room', 'Billiards Room Ceiling Fan', 8410), - LocationData('Projection Room', 'Projection Room Cabinet', 8411), - LocationData('Projection Room', 'Projection Room Projector', 8412), - LocationData('Projection Room', 'Projection Room Projector Table', 8413), - LocationData('Projection Room', 'Projection Room West Light', 8414), - LocationData('Projection Room', 'Projection Room East Light', 8415), - LocationData('Projection Room', 'Projection Room Speaker 1', 8416), - LocationData('Projection Room', 'Projection Room Speaker 2', 8417), - LocationData('Safari Room', 'Safari Room Chair', 8418), - LocationData('Safari Room', 'Safari Room Leopard Print Box', 8419), - LocationData('Safari Room', 'Safari Room Boxes 1', 8420), - LocationData('Safari Room', 'Safari Room Boxes 2', 8421), - LocationData('Safari Room', 'Safari Room Light 1', 8422), - LocationData('Safari Room', 'Safari Room Light 2', 8423), - LocationData('Safari Room', 'Safari Room Mounted Deer 1', 8424), - LocationData('Safari Room', 'Safari Room Mounted Deer 2', 8425), - LocationData('Safari Room', 'Safari Room Mounted Deer 3', 8426), - LocationData('Safari Room', 'Safari Room Crate 1', 8427), - LocationData('Safari Room', 'Safari Room Crate 2', 8428), - LocationData('Safari Room', 'Safari Room Crate 3', 8429), - LocationData('Safari Room', 'Safari Room Crate 4', 8430), - LocationData('Safari Room', 'Safari Room Crate 5', 8431), - LocationData('Balcony', 'Balcony West Bench', 8432), - LocationData('Balcony', 'Balcony East Bench', 8433), - LocationData('Breaker Room', 'Breaker Room Table', 8434), - LocationData('Breaker Room', 'Breaker Room Light', 8435), - LocationData('Breaker Room', 'Breaker Room Metal Drum 1', 8436), - LocationData('Breaker Room', 'Breaker Room Metal Drum 2', 8437), - LocationData('Breaker Room', 'Breaker Room Barrel 1', 8438), - LocationData('Breaker Room', 'Breaker Room Barrel 2', 8439), - LocationData('Breaker Room', 'Breaker Room Barrel 3', 8440), - LocationData('Breaker Room', 'Breaker Room Barrel 4', 8441), - LocationData('Breaker Room', 'Breaker Room Barrel 5', 8442), - LocationData('Breaker Room', 'Breaker Room Barrel 6', 8443), - LocationData('Breaker Room', 'Breaker Room Barrel 7', 8444), - LocationData('Breaker Room', 'Breaker Room Barrel 8', 8445), - LocationData('Breaker Room', 'Breaker Room Barrel 9', 8446), - LocationData('Breaker Room', 'Breaker Room Barrel 10', 8447), - LocationData('Breaker Room', 'Breaker Room Barrel 11', 8448), - LocationData('Cellar', 'Cellar Light', 8449), - LocationData('Cellar', 'Cellar Crate 1', 8450), - LocationData('Cellar', 'Cellar Light 2', 8451), - LocationData('Cellar', 'Cellar Barrel 1', 8452), - LocationData('Cellar', 'Cellar Barrel 2', 8453), - LocationData('Cellar', 'Cellar Central Shelf Boxes', 8454), - LocationData('Cellar', 'Cellar Central Shelf 1st Shelf', 8455), - LocationData('Cellar', 'Cellar Central Shelf 2nd Shelf', 8456), - LocationData('Cellar', 'Cellar Central Shelf 3rd Shelf', 8457), - LocationData('Cellar', 'Cellar Right Shelf Boxes', 8458), - LocationData('Cellar', 'Cellar Right Shelf 1st Shelf', 8459), - LocationData('Cellar', 'Cellar Right Shelf 2nd Shelf', 8460), - LocationData('Cellar', 'Cellar Right Shelf 3rd Shelf', 8461), - LocationData('Telephone Room', 'Telephone Room Table', 8462), - LocationData('Telephone Room', 'Telephone Room Couch', 8463), - LocationData('Telephone Room', 'Telephone Room West Light', 8464), - LocationData('Telephone Room', 'Telephone Room East Light', 8465), - LocationData('Telephone Room', 'Telephone Room West Telephone', 8466), - LocationData('Telephone Room', 'Telephone Room East Telephone', 8467), - LocationData('Telephone Room', 'Telephone Room Center Telephone', 8468), - LocationData('Telephone Room', 'Telephone Room West Cabinet', 8469), - LocationData('Telephone Room', 'Telephone Room East Cabinet', 8470), - LocationData('Telephone Room', 'Telephone Room West Shelf', 8471), - LocationData('Telephone Room', 'Telephone Room East Shelf', 8472), - LocationData('Telephone Room', 'Telephone Room Center Shelf', 8473), - LocationData('Clockwork Room', 'Clockwork Room Nutcracker Chimes 1', 8474), - LocationData('Clockwork Room', 'Clockwork Room Nutcracker Chimes 2', 8475), - LocationData('Clockwork Room', 'Clockwork Room Chair 1', 8476), - LocationData('Clockwork Room', 'Clockwork Room Chair 2', 8477), - LocationData('Clockwork Room', 'Clockwork Room Chair 3', 8478), - LocationData('Clockwork Room', 'Clockwork Room Stool 1', 8479), - LocationData('Clockwork Room', 'Clockwork Room Stool 2', 8480), - LocationData('Clockwork Room', 'Clockwork Room Cuckoo CLock 1', 8481), - LocationData('Clockwork Room', 'Clockwork Room Cuckoo Clock 2', 8482), - LocationData('Clockwork Room', 'Clockwork Room Cuckoo Clock 3', 8483), - LocationData('Clockwork Room', 'Clockwork Room House Door 1', 8484), - LocationData('Clockwork Room', 'Clockwork Room House Door 2', 8485), - LocationData('Clockwork Room', 'Clockwork Room House Door 3', 8486), - LocationData('Clockwork Room', 'Clockwork Room House Door 4', 8487), - LocationData('Clockwork Room', 'Clockwork Room House Door 5', 8488), - LocationData('Clockwork Room', 'Clockwork Room House Door 6', 8489), - LocationData('Clockwork Room', 'Clockwork Room House Door 7', 8490), - LocationData('Clockwork Room', 'Clockwork Room House Door 8', 8491), - LocationData('Clockwork Room', 'Clockwork Room House Door 9', 8492), - LocationData('Clockwork Room', 'Clockwork Room House Door 10', 8493), - LocationData('Clockwork Room', 'Clockwork Room House Door 11', 8494), - LocationData('Clockwork Room', 'Clockwork Room House Door 12', 8495), - LocationData('Clockwork Room', 'Clockwork Room House Door 13', 8496), - LocationData('Clockwork Room', 'Clockwork Room House Door 14', 8497), - LocationData('Clockwork Room', 'Clockwork Room House Door 15', 8498), - LocationData('Clockwork Room', 'Clockwork Room House Door 16', 8499), - LocationData('Roof', 'Roof Pillar 1', 8500), - LocationData('Roof', 'Roof Pillar 2', 8501), - LocationData('Roof', 'Roof Pillar 3', 8502), - LocationData('Roof', 'Roof Pillar 4', 8503), - LocationData('Roof', 'Roof Pillar 5', 8504), - LocationData('Roof', 'Roof Pillar 6', 8505), - LocationData('Roof', 'Roof Pillar 7', 8506), - LocationData('Roof', 'Roof Pillar 8', 8507), - LocationData('Roof', 'Roof Pillar 9', 8508), - LocationData('Roof', 'Roof Pillar 10', 8509), - LocationData('Roof', 'Roof Pillar 11', 8510), - LocationData('Roof', 'Roof Pillar 12', 8511), - LocationData('Armory', 'Armory Armor Suits 1', 8512), - LocationData('Armory', 'Armory Armor Suits 2', 8513), - LocationData('Armory', 'Armory Armor Suits 3', 8514), - LocationData('Armory', 'Armory Armor Suits 4', 8515), - LocationData('Armory', 'Armory Armor Suits 5', 8516), - LocationData('Armory', 'Armory Armor Suits 6', 8517), - LocationData('Armory', 'Armory Armor Suits 7', 8518), - LocationData('Armory', 'Armory Armor Suits 8', 8519), - LocationData('Armory', 'Armory Armor Suits 9', 8520), - LocationData('Armory', 'Armory Armor Light', 8521), - LocationData('Armory', 'Armory Crate 1', 8522), - LocationData('Armory', 'Armory Crate 2', 8523), - LocationData('Armory', 'Armory Crate 3', 8524), - LocationData('Armory', 'Armory Crate 4', 8525), - LocationData('Armory', 'Armory Crate 5', 8526), - LocationData('Armory', 'Armory Crate 6', 8527), - LocationData('Armory', 'Armory Crate 7', 8528), - LocationData('Armory', 'Armory Crate 8', 8529), - LocationData('Armory', 'Armory Crate 9', 8530), - LocationData('Armory', 'Armory Crate 10', 8531), - LocationData('Ceramics Studio', 'Ceramics Studio Chair', 8532), - LocationData('Ceramics Studio', 'Ceramics Studio Light', 8533), - LocationData('Ceramics Studio', 'Ceramics Studio Table', 8534), - LocationData('Ceramics Studio', 'Ceramics Studio Boxes 1', 8535), - LocationData('Ceramics Studio', 'Ceramics Studio Boxes 2', 8536), - LocationData('Ceramics Studio', 'Ceramics Studio Boxes 3', 8537), - LocationData('Ceramics Studio', 'Ceramics Studio Crates 1', 8538), - LocationData('Ceramics Studio', 'Ceramics Studio Crates 2', 8539), - LocationData('Ceramics Studio', 'Ceramics Studio Crates 3', 8540), - LocationData('Ceramics Studio', 'Ceramics Studio Crates 4', 8541), - LocationData('Ceramics Studio', 'Ceramics Studio Crates 5', 8542), - LocationData('Ceramics Studio', 'Ceramics Studio Vase 1', 8543), - LocationData('Ceramics Studio', 'Ceramics Studio Vase 2', 8544), - LocationData('Ceramics Studio', 'Ceramics Studio Vase 3', 8545), - LocationData('Ceramics Studio', 'Ceramics Studio Vase 4', 8546), - LocationData('Ceramics Studio', 'Ceramics Studio Vase 5', 8547), - LocationData('Ceramics Studio', 'Ceramics Studio Vase 6', 8548), - LocationData('Ceramics Studio', 'Ceramics Studio Vase 7', 8549), - LocationData('Ceramics Studio', 'Ceramics Studio Vase 8', 8550), - LocationData('Ceramics Studio', 'Ceramics Studio Vase 9', 8551), - LocationData('Ceramics Studio', 'Ceramics Studio Vase 10', 8552), - LocationData('Ceramics Studio', 'Ceramics Studio Vase 11', 8553), - LocationData('Ceramics Studio', 'Ceramics Studio Vase 12', 8554), - LocationData('Ceramics Studio', 'Ceramics Studio Vase 13', 8555), - LocationData('Ceramics Studio', 'Ceramics Studio Chandelier', 8556), - LocationData('Ceramics Studio', 'Ceramics Studio Mirror', 8557), - LocationData('Ceramics Studio', 'Ceramics Studio Picture', 8558), - LocationData('Ceramics Studio', 'Ceramics Studio Table', 8559), - LocationData('Ceramics Studio', 'Ceramics Studio Shiny Plate 1', 8560), - LocationData('Ceramics Studio', 'Ceramics Studio Shiny Plate 2', 8561), - LocationData('Ceramics Studio', 'Ceramics Studio Candlestick 1', 8562), - LocationData('Ceramics Studio', 'Ceramics Studio Candlestick 2', 8563), - LocationData('Ceramics Studio', 'Ceramics Studio Candlestick 3', 8564), - LocationData('Ceramics Studio', 'Ceramics Studio Candlestick 4', 8565), - LocationData('Ceramics Studio', 'Ceramics Studio Trophy 1', 8566), - LocationData('Ceramics Studio', 'Ceramics Studio Trophy 2', 8567), - LocationData('Ceramics Studio', 'Ceramics Studio Trophy 3', 8568), - LocationData('Ceramics Studio', 'Ceramics Studio Trophy 4', 8569), - LocationData('Sitting Room', 'Setting Room Hat Rack', 8570), - LocationData('Sitting Room', 'Setting Room Plant', 8571), - LocationData('Sitting Room', 'Setting Room Water Pot', 8572), - LocationData('Sitting Room', 'Setting Room Loveseat', 8573), - LocationData('Sitting Room', 'Setting Room Chair', 8574), - LocationData('Sitting Room', 'Setting Room Table', 8575), - LocationData('Sitting Room', 'Setting Room Painting', 8576), - LocationData('Guest Room', 'Guest Room Chair', 8577), - LocationData('Guest Room', 'Guest Room Bed', 8578), - LocationData('Guest Room', 'Guest Room Plant', 8579), - LocationData('Guest Room', 'Guest Room Desk', 8580), - LocationData('Guest Room', 'Guest Room End Table', 8581), - LocationData('Guest Room', 'Guest Room Painting', 8582), - LocationData('Guest Room', 'Guest Room Doll 1', 8583), - LocationData('Guest Room', 'Guest Room Doll 2', 8584), - LocationData('Cold Storage', 'Cold Storage Barrel 1', 8585), - LocationData('Cold Storage', 'Cold Storage Barrel 2', 8586), - LocationData('Cold Storage', 'Cold Storage Crate 1', 8587), - LocationData('Cold Storage', 'Cold Storage Crate 2', 8588), - LocationData('Cold Storage', 'Cold Storage Shelf 1', 8589), - LocationData('Cold Storage', 'Cold Storage Shelf 2', 8590), - LocationData('Pipe Room', 'Pipe Room Ice Barrel', 8591), - LocationData('Pipe Room', 'Pipe Room Crate', 8592), - LocationData('Pipe Room', 'Pipe Room Bucket', 8593), - LocationData('Basement Stairwell', 'Basement Stairwell Light', 8594), - LocationData('Basement Stairwell', 'Basement Stairwell Wall Light', 8595), - LocationData('Artist Studio', 'Artist Studio Stools', 8596), - LocationData('Artist Studio', 'Artist Studio Muscle Bust', 8597), - LocationData('Artist Studio', 'Artist Studio Shelf Unit', 8598), - LocationData('Artist Studio', 'Artist Studio Shelf Items', 8599), - LocationData('Artist Studio', 'Artist Studio Ghost Easel 1', 8600), - LocationData('Artist Studio', 'Artist Studio Ghost Easel 2', 8601), - LocationData('Artist Studio', 'Artist Studio Ghost Easel 3', 8602), - LocationData('Artist Studio', 'Artist Studio Ghost Easel 4', 8603), - LocationData('Artist Studio', 'Artist Studio Ghost Easel 5', 8604), - LocationData('Artist Studio', 'Artist Studio Ghost Easel 6', 8605), - LocationData('Artist Studio', 'Artist Studio Ghost Easel 7', 8606), - LocationData('Secret Altar', 'Secret Altar Brazier 1', 8607), - LocationData('Secret Altar', 'Secret Altar Brazier 2', 8608), - LocationData('Secret Altar', 'Secret Altar Chandelier 1', 8609), - LocationData('Secret Altar', 'Secret Altar Chandelier 2', 8610), - LocationData('Secret Altar', 'Secret Altar Chandelier 3', 8611) - ) - # Adds Toads as locations - if not multiworld or is_option_enabled(multiworld, player, "Toadsanity"): - location_table += ( - LocationData('Foyer', 'Foyer Toad', 8650), - LocationData('Wardrobe', 'Wardrobe Balcony Toad', 8651), - LocationData('1F Washroom', '1F Washroom Toad', 8652), - LocationData('Courtyard', 'Courtyard Toad', 8653) - ) - - # Adds Portrait Ghosts as locations - if not multiworld or is_option_enabled(multiworld, player, "PortraitGhosts"): - location_table += ( - LocationData('Study', 'Neville, the Bookish Father', 8654), - LocationData('Master Bedroom', 'Lydia, the Mirror-Gazing Mother', 8655), - LocationData('Nursery', 'Chauncey, the Spoiled Baby', 8656), - LocationData('Twins\' Room', 'Henry and Orville, the Twin Brothers', 8657, - rule=lambda state: state.has_group("Medal", player)), - LocationData('Ballroom', 'The Floating Whirlindas, the Dancing Couple', 8658), - LocationData('Butler\'s Room', 'Shivers, the Wandering Butler', 8659, - rule=lambda state: state.has("Fire Element Medal", player) - and state.has("Boo Release", player)), - LocationData('Fortune-Teller\'s Room', 'Madame Clairvoya, the Freaky Fortune-Teller', 8660, - rule=lambda state: state.has_group("Mario Item", player, multiworld.MarioItems[player])), - LocationData('Conservatory', ' Melody Pianissima, the Beautiful Pianist', 8661), - LocationData('Dining Room', 'Mr. Luggs, the Glutton', 8662, - rule=lambda state: state.has("Fire Element Medal", player)), - LocationData('Boneyard', 'Spooky, the Guard Dog', 8663, - rule=lambda state: state.has("Water Element Medal", player)), - LocationData('Graveyard', 'Bogmire, the Cemetary Shadow', 8664), - LocationData('Rec Room', 'Biff Atlas, the Bodybuilder', 8665), - LocationData('Billiards Room', 'Slim Bankshot, the Lonely Poolshark', 8666), - LocationData('2F Bathroom', 'Miss Petunia, the Bathing Beauty', 8667, - rule=lambda state: state.has("Ice Element Medal", player)), - LocationData('Nana\'s Room', 'Nana, the Scarf-Knitting Granny', 8668), - LocationData('Guest Room', 'Sue Pea, the Dozing Girl', 8669, - rule=lambda state: state.has("Water Element Medal", player)), - LocationData('Wardrobe', 'Uncle Grimmly, Hermit of the Darkness', 8670, - rule=lambda state: state.has("Blackout", player)), - LocationData('Balcony', 'Boolossus, the Jumbo Ghost', 8671, - rule=lambda state: state.has("Ice Element Medal", player)), - LocationData('Ceramics Studio', 'Jarvis, the Jar Collector', 8672, - rule=lambda state: state.has("Ice Element Medal", player)), - LocationData('Clockwork Room', 'Clockwork Soldiers, the Toy Platoon', 8673), - LocationData('Artist\'s Studio', 'Vincent van Gore, the Starving Artist', 8674), - LocationData('Cold Storage', 'Sir Weston, the Chilly Climber', 8675, - rule=lambda state: state.has("Fire Element Medal", player)) - ) - - # Adds Blue Ghosts and Gold Mice as locations - if not multiworld or is_option_enabled(multiworld, player, "SpeedySpirits"): - location_table += ( - LocationData('Wardrobe', 'Wardrobe Speedy Spirit', 8676), - LocationData('Study', 'Study Speedy Spirit', 8677), - LocationData('Nursery', 'Nursery Speedy Spirit', 8678), - LocationData('Storage Room', 'Storage Room Speedy Spirit', 8679), - LocationData('Hidden Room', 'Hidden Room Speedy Spirit', 8680), - LocationData('Conservatory', 'Conservatory Speedy Spirit', 8681), - LocationData('Dining Room', 'Dining Room Speedy Spirit', 8682), - LocationData('Kitchen', 'Kitchen Speedy Spirit', 8683), - LocationData('Rec Room', 'Rec Room Speedy Spirit', 8684), - LocationData('Nana\' Room', 'Nana\'s Room Speedy Spirit', 8685), - LocationData('Billiards Room', 'Billiards Room Speedy Spirit', 8686), - LocationData('Twins\' Room', 'Twins\' Room Speedy Spirit', 8687), - LocationData('Breaker Room', 'Breaker Room Speedy Spirit', 8688), - LocationData('Cellar', 'Cellar Speedy Spirit', 8689), - LocationData('Sealed Room', 'Sealed Room Speedy Spirit', 8690), - # Gold Mice Locations - LocationData('Study', 'Study Cheese Gold Mouse', 8691), - LocationData('Fortune-Teller\'s Room', 'Fortune-Teller\'s Room Cheese Gold Mouse', 8692), - LocationData('Dining Room', 'Dining Room Cheese Gold Mouse', 8693), - LocationData('Tea Room', 'Tea Room Cheese Gold Mouse', 8694), - LocationData('Safari Room', 'Safari Room Cheese Gold Mouse', 8695), - LocationData('1F Hallway', '1F Hallway Chance Gold Mouse', 8696), - LocationData('Kitchen', 'Kitchen Chance Gold Mouse', 8697), - LocationData('Tea Room', 'Tea Room Chance Gold Mouse', 8698), - LocationData('2F Rear Hallway', '2F Rear Hallway Chance Gold Mouse', 8699), - LocationData('Sealed Room', 'Sealed Room Chance Gold Mouse', 8700) - ) - - # 1337199 - 1337236 Reserved for future use - - # Turns Boos into check locations and adds Boos as items - if not multiworld or is_option_enabled(multiworld, player, "Boosanity"): - location_table += ( - LocationData('Parlor', 'Parlor Boo', 8701, rule=lambda state: state.has("Boo Radar", player)), - LocationData('Anteroom', 'Anteroom Boo', 8702, rule=lambda state: state.has("Boo Radar", player)), - LocationData('Wardrobe', 'Wardrobe Boo', 8703, rule=lambda state: state.has("Boo Radar", player)), - LocationData('Study', 'Study Boo', 8704, rule=lambda state: state.has("Boo Radar", player)), - LocationData('Master Bedroom', 'Master Bedroom Boo', 8705, - rule=lambda state: state.has("Boo Radar", player)), - LocationData('Nursery', 'Nursery Boo', 8706, rule=lambda state: state.has("Boo Radar", player)), - LocationData('Twins\' Room', 'Twins\' Room Boo', 8707, - rule=lambda state: state.has_group("Medal", player) and state.has("Boo Radar", player)), - LocationData('Laundry Room', 'Laundry Room Boo', 8708, rule=lambda state: state.has("Boo Radar", player)), - LocationData('Butler\'s Room', 'Butler\'s Room Boo', 8709, - rule=lambda state: state.has("Fire Element Medal", player) and state.has("Boo Release", player) - and state.has("Boo Radar", player)), - LocationData('Hidden Room', 'Hidden Room Boo', 8710, rule=lambda state: state.has("Boo Radar", player)), - LocationData('Fortune-Teller\'s Room', 'Fortune-Teller\'s Room Boo', 8711, - rule=lambda state: state.has_group("Mario Item", player, multiworld.MarioItems[player]) - and state.has("Boo Radar", player)), - LocationData('Mirror Room', 'Mirror Room Boo', 8712, rule=lambda state: state.has("Boo Radar", player)), - LocationData('Ballroom', 'Ballroom Boo', 8713, rule=lambda state: state.has("Boo Radar", player)), - LocationData('Storage Room', 'Storage Room Boo', 8714, rule=lambda state: state.has("Boo Radar", player)), - LocationData('Dining Room', 'Dining Room Boo', 8715, - rule=lambda state: state.has("Fire Element Medal", player) and state.has("Boo Radar", player)), - LocationData('Kitchen', 'Kitchen Boo', 8716, rule=lambda state: state.has("Boo Radar", player)), - LocationData('Conservatory', 'Conservatory Boo', 8717, rule=lambda state: state.has("Boo Radar", player)), - LocationData('Rec Room', 'Rec Room Boo', 8718, rule=lambda state: state.has("Boo Radar", player)), - LocationData('Billiards Room', 'Billiards Room Boo', 8719, - rule=lambda state: state.has("Boo Radar", player)), - LocationData('Projection Room', 'Projection Room Boo', 8720, - rule=lambda state: state.has("Boo Radar", player)), - LocationData('Tea Room', 'Tea Room Boo', 8721, rule=lambda state: state.has("Boo Radar", player)), - LocationData('Nana\'s Room', 'Nana\'s Room Boo', 8722, rule=lambda state: state.has("Boo Radar", player)), - LocationData('Sitting Room', 'Sitting Room Boo', 8723, - rule=lambda state: state.has("Fire Element Medal", player) - and state.has("Water Element Medal", player) - and state.has("Boo Radar", player) - ), - LocationData('Guest Room', 'Guest Room Boo', 8724, - rule=lambda state: state.has("Water Element Medal", player) and state.has("Boo Radar", - player)), - LocationData('Safari Room', 'Safari Room Boo', 8725, rule=lambda state: state.has("Boo Radar", player)), - LocationData('Artist\'s Studio', 'Artist\'s Studio Boo', 8726, - rule=lambda state: state.has("Boo Radar", player)), - LocationData('Armory', 'Armory Boo', 8727, rule=lambda state: state.has("Boo Radar", player)), - LocationData('Ceramics Studio', 'Ceramics Studio Boo', 8728, - rule=lambda state: state.has("Ice Element Medal", player) - and state.has("Boo Radar", player)), - LocationData('Telephone Room', 'Telephone Room Boo', 8729, - rule=lambda state: state.has("Boo Radar", player)), - LocationData('Clockwork Room', 'Clockwork Room Boo', 8730, - rule=lambda state: state.has("Boo Radar", player)), - LocationData('Astral Hall', 'Astral Hall Boo', 8731, - rule=lambda state: state.has("Fire Element Medal", player) - and state.has("Boo Radar", player)), - LocationData('Breaker Room', 'Breaker Room Boo', 8732, - rule=lambda state: state.has("Blackout", player) and state.has("Boo Radar", player)), - LocationData('Cellar', 'Cellar Boo', 8733, rule=lambda state: state.has("Boo Radar", player)), - LocationData('Pipe Room', 'Pipe Room Boo', 8734, rule=lambda state: state.has("Boo Radar", player)), - LocationData('Cold Storage', 'Cold Storage Boo', 8735, - rule=lambda state: state.has("Fire Element Medal", player) - and state.has("Boo Radar", player)) - - ) - else: - # event location data for boos. Create as locked during location creation - location_table += ( - LocationData('Parlor', 'Parlor Boo', None, "Boo", lambda state: state.has("Boo Radar", player)), - LocationData('Anteroom', 'Anteroom Boo', None, "Boo", lambda state: state.has("Boo Radar", player)), - LocationData('Wardrobe', 'Wardrobe Boo', None, "Boo", lambda state: state.has("Boo Radar", player)), - LocationData('Study', 'Study Boo', None, "Boo", lambda state: state.has("Boo Radar", player)), - LocationData('Master Bedroom', 'Master Bedroom Boo', None, "Boo", lambda state: state.has("Boo Radar", - player)), - LocationData('Nursery', 'Nursery Boo', None, "Boo", lambda state: state.has("Boo Radar", player)), - LocationData('Twins\' Room', 'Twins\' Room Boo', None, "Boo", - rule=lambda state: state.has_group("Medal", player) - and state.has("Boo Radar", player)), - LocationData('Laundry Room', 'Laundry Room Boo', None, "Boo", lambda state: state.has("Boo Radar", player)), - LocationData('Butler\'s Room', 'Butler\'s Room Boo', None, "Boo", - rule=lambda state: state.has("Fire Element Medal", player) - and state.has("Boo Release", player) - and state.has("Boo Radar", player)), - LocationData('Hidden Room', 'Hidden Room Boo', None, "Boo", lambda state: state.has("Boo Radar", player)), - LocationData('Fortune-Teller\'s Room', 'Fortune-Teller\'s Room Boo', None, "Boo", - rule=lambda state: state.has_group("Mario Item", player, multiworld.MarioItems[player]) - and state.has("Boo Radar", player)), - LocationData('Mirror Room', 'Mirror Room Boo', None, "Boo", lambda state: state.has("Boo Radar", player)), - LocationData('Ballroom', 'Ballroom Boo', None, "Boo", lambda state: state.has("Boo Radar", player)), - LocationData('Storage Room', 'Storage Room Boo', None, "Boo", lambda state: state.has("Boo Radar", player)), - LocationData('Dining Room', 'Dining Room Boo', None, "Boo", - rule=lambda state: state.has("Fire Element Medal", player) - and state.has("Boo Radar", player)), - LocationData('Kitchen', 'Kitchen Boo', None, "Boo", lambda state: state.has("Boo Radar", player)), - LocationData('Conservatory', 'Conservatory Boo', None, "Boo", lambda state: state.has("Boo Radar", player)), - LocationData('Rec Room', 'Rec Room Boo', None, "Boo", lambda state: state.has("Boo Radar", player)), - LocationData('Billiards Room', 'Billiards Room Boo', None, "Boo", - lambda state: state.has("Boo Radar", player)), - LocationData('Projection Room', 'Projection Room Boo', None, "Boo", - lambda state: state.has("Boo Radar", player)), - LocationData('Tea Room', 'Tea Room Boo', None, "Boo", lambda state: state.has("Boo Radar", player)), - LocationData('Nana\'s Room', 'Nana\'s Room Boo', None, "Boo", lambda state: state.has("Boo Radar", player)), - LocationData('Sitting Room', 'Sitting Room Boo', None, "Boo", - rule=lambda state: state.has("Fire Element Medal", player) - and state.has("Water Element Medal", player) - and state.has("Boo Radar", player)), - LocationData('Guest Room', 'Guest Room Boo', None, "Boo", - rule=lambda state: state.has("Water Element Medal", player) - and state.has("Boo Radar", player)), - LocationData('Safari Room', 'Safari Room Boo', None, "Boo", lambda state: state.has("Boo Radar", player)), - LocationData('Artist\'s Studio', 'Artist\'s Studio Boo', None, "Boo", - lambda state: state.has("Boo Radar", player)), - LocationData('Armory', 'Armory Boo', None, "Boo", lambda state: state.has("Boo Radar", player)), - LocationData('Ceramics Studio', 'Ceramics Studio Boo', None, "Boo", - rule=lambda state: state.has("Ice Element Medal", player) - and state.has("Boo Radar", player)), - LocationData('Telephone Room', 'Telephone Room Boo', None, "Boo", - lambda state: state.has("Boo Radar", player)), - LocationData('Clockwork Room', 'Clockwork Room Boo', None, "Boo", - lambda state: state.has("Boo Radar", player)), - LocationData('Astral Hall', 'Astral Hall Boo', None, "Boo", - rule=lambda state: state.has("Fire Element Medal", player) - and state.has("Boo Radar", player)), - LocationData('Breaker Room', 'Breaker Room Boo', None, "Boo", - rule=lambda state: state.has("Blackout", player) - and state.has("Boo Radar", player)), - LocationData('Cellar', 'Cellar Boo', None, "Boo", lambda state: state.has("Boo Radar", player)), - LocationData('Pipe Room', 'Pipe Room Boo', None, "Boo", lambda state: state.has("Boo Radar", player)), - LocationData('Cold Storage', 'Cold Storage Boo', None, "Boo", - lambda state: state.has("Fire Element Medal", player) - and state.has("Boo Radar", player)) - ) - return tuple(location_table) - - -def is_option_enabled(world: MultiWorld, player: int, name: str) -> bool: - return get_option_value(world, player, name) > 0 - - -def get_option_value(world: MultiWorld, player: int, name: str) -> Union[int, Dict, List]: - option = getattr(world, name, None) - if option == None: - return 0 - - return option[player].value diff --git a/worlds/luigimansion/Options.py b/worlds/luigimansion/Options.py deleted file mode 100644 index f17e73ce2072..000000000000 --- a/worlds/luigimansion/Options.py +++ /dev/null @@ -1,115 +0,0 @@ -from typing import Dict - -from Options import Toggle, Range, Option - - -# Will look into feasibility of options later. - - -class StartWithBetterVacuum(Toggle): - """Start with Poltergust 4000""" - display_name = "Better Vacuum" - - -# These might end up being the same -class StartHiddenMansion(Toggle): - """Begin in the Hidden Mansion""" - display_name = "Hidden Mansion" - - -class SpeedySpirits(Toggle): - """Adds Blue Ghosts and Gold Mice to location pool""" - display_name = "Speedy Spirits" - - -class StartWithBooRadar(Toggle): - """Start with Boo Radar""" - display_name = "Boo Radar" - - -# class DoorRando(Toggle): -# "Keys wil open different doors than normal, and doors may require elements instead of keys" -# display_name = "Door Randomization" -# Heavy logic editing required - -class Toadsanity(Toggle): - """Adds Toads to location pool""" - display_name = "Toadsanity" - - -class Plants(Toggle): - """Adds all plants to location pool""" - display_name = "Plantsanity" - - -class Interactables(Toggle): - """Adds every interactable, such a dressers and light fixtures, to the location pool""" - display_name = "Interactables" - - -class MarioItems(Range): - """How many Mario Items it takes to capture the Fortune-Teller. 0 = Starts Capturable""" - display_name = "Fortune-Teller Requirements" - range_start = 0 - range_end = 5 - default = 5 - - -class WashroomBooCount(Range): - """Set the number of Boos required to reach the 1F Washroom. 0 = Starts Open""" - display_name = "Washroom Boo Count" - range_start = 0 - range_end = 50 - default = 5 - - -class BalconyBooCount(Range): - """Set the number of Boos required to reach the Balcony. 0 = Starts Open""" - display_name = "Washroom Boo Count" - range_start = 0 - range_end = 50 - default = 20 - - -class FinalBooCount(Range): - """Set the number of Boos required to reach the Secret Altar. 0 = Starts Open""" - display_name = "Altar Boo Count" - range_start = 0 - range_end = 50 - default = 40 - - -class Boosanity(Toggle): - """Turns Boos into Items and Locations""" - display_name = "Boosanity" - - -class PortraitGhosts(Toggle): - """Turn Portrait Ghosts into checks in addition to their clear chests""" - display_name = "Portrait Ghosts" - - -class Enemizer(Toggle): - """ - Ghosts in room encounters have random elements. Be aware that softlocks are possible and common with this option on. - Be Ready. - """ - display_name = "Enemizer" - - -luigimansion_options: Dict[str, Option] = { - "StartWithBetterVacuum": StartWithBetterVacuum, - "StartWithBooRadar": StartWithBooRadar, - "StartHiddenMansion": StartHiddenMansion, - "SpeedySpirits": SpeedySpirits, - "Toadsanity": Toadsanity, - "Plantsanity": Plants, - "Interactables": Interactables, - "MarioItems": MarioItems, - "WashroomBooCount": WashroomBooCount, - "BalconyBooCount": BalconyBooCount, - "FinalBooCount": FinalBooCount, - "Boosanity": Boosanity, - "PortraitGhosts": PortraitGhosts, - "Enemizer": Enemizer -} diff --git a/worlds/luigimansion/ROM.py b/worlds/luigimansion/ROM.py deleted file mode 100644 index c68ce6ccc873..000000000000 --- a/worlds/luigimansion/ROM.py +++ /dev/null @@ -1,16 +0,0 @@ - -# import - -# Need to extract and modify jmp tables to assign items spawns -# For furnitureinfo items (interactables & plants), specify entry number in itemappeartable to spawn object. Will need to expand itemappeartable to include other items -# the above does include some base checks -# For chest items, edit treasuretable with either money amounts or specific key/mario item/element in other slot, by room. Only one true chest per room -# Must expand iteminfotable for use with treasuretable. treasuretable references iteminfotable -# Portrait Ghosts, toads and Boos unsure -# Blue Ghost and Gold Mice also use iteminfotable. Must add "other" field to jmp iyapootable. (iyapoo are the money ghosts) -# need to add AP type checks to table somehow and trigger the item send -# Need way to unpack and then edit jump tables automatically. -# Need a way to add a custom item type that, when acquired, triggers the client to send an item -# Need to adjust location names and items names to match code in game. (optional) -# Need methods to give items to Luigi in game -# How are keys/items/money stored once received??? How do they get committed to memory? diff --git a/worlds/luigimansion/Regions.py b/worlds/luigimansion/Regions.py deleted file mode 100644 index e656076d92e1..000000000000 --- a/worlds/luigimansion/Regions.py +++ /dev/null @@ -1,260 +0,0 @@ -from typing import List, Set, Dict, Tuple, Optional, Callable, Union -from BaseClasses import MultiWorld, Region, Entrance, Location, ItemClassification -from .Items import LMItem -from .Locations import LocationData -from worlds.generic.Rules import add_rule - - -def create_regions(multiworld: MultiWorld, player: int, locations: tuple[LocationData, ...], - location_cache: List[Location]): - locations_per_region = get_locations_per_region(locations) - - regions = [ - create_region(multiworld, player, locations_per_region, location_cache, 'Menu'), - create_region(multiworld, player, locations_per_region, location_cache, 'Foyer'), - create_region(multiworld, player, locations_per_region, location_cache, 'Parlor'), - create_region(multiworld, player, locations_per_region, location_cache, 'Anteroom'), - create_region(multiworld, player, locations_per_region, location_cache, 'Wardrobe'), - create_region(multiworld, player, locations_per_region, location_cache, 'Wardrobe Balcony'), - create_region(multiworld, player, locations_per_region, location_cache, '2F Front Hallway'), - create_region(multiworld, player, locations_per_region, location_cache, 'Study'), - create_region(multiworld, player, locations_per_region, location_cache, 'Master Bedroom'), - create_region(multiworld, player, locations_per_region, location_cache, 'Nursery'), - create_region(multiworld, player, locations_per_region, location_cache, 'Twins\' Room'), - create_region(multiworld, player, locations_per_region, location_cache, '1F Hallway'), - create_region(multiworld, player, locations_per_region, location_cache, 'Laundry Room'), - create_region(multiworld, player, locations_per_region, location_cache, 'Butler\'s Room'), - create_region(multiworld, player, locations_per_region, location_cache, 'Hidden Room'), - create_region(multiworld, player, locations_per_region, location_cache, 'Fortune-Teller\'s Room'), - create_region(multiworld, player, locations_per_region, location_cache, 'Mirror Room'), - create_region(multiworld, player, locations_per_region, location_cache, 'Ballroom'), - create_region(multiworld, player, locations_per_region, location_cache, 'Storage Room'), - create_region(multiworld, player, locations_per_region, location_cache, 'Dining Room'), - create_region(multiworld, player, locations_per_region, location_cache, 'Kitchen'), - create_region(multiworld, player, locations_per_region, location_cache, 'Boneyard'), - create_region(multiworld, player, locations_per_region, location_cache, 'Graveyard'), - create_region(multiworld, player, locations_per_region, location_cache, 'Billiards Room'), - create_region(multiworld, player, locations_per_region, location_cache, 'Projection Room'), - create_region(multiworld, player, locations_per_region, location_cache, '1F Bathroom'), - create_region(multiworld, player, locations_per_region, location_cache, '1F Washroom'), - create_region(multiworld, player, locations_per_region, location_cache, 'Conservatory'), - create_region(multiworld, player, locations_per_region, location_cache, 'Courtyard'), - create_region(multiworld, player, locations_per_region, location_cache, 'Rec Room'), - create_region(multiworld, player, locations_per_region, location_cache, 'Basement Stairwell'), - create_region(multiworld, player, locations_per_region, location_cache, '2F Stairwell'), - create_region(multiworld, player, locations_per_region, location_cache, 'Tea Room'), - create_region(multiworld, player, locations_per_region, location_cache, '2F Rear Hallway'), - create_region(multiworld, player, locations_per_region, location_cache, 'Nana\'s Room'), - create_region(multiworld, player, locations_per_region, location_cache, '2F Bathroom'), - create_region(multiworld, player, locations_per_region, location_cache, '2F Washroom'), - create_region(multiworld, player, locations_per_region, location_cache, 'Astral Hall'), - create_region(multiworld, player, locations_per_region, location_cache, 'Observatory'), - create_region(multiworld, player, locations_per_region, location_cache, 'Sealed Room'), - create_region(multiworld, player, locations_per_region, location_cache, 'Sitting Room'), - create_region(multiworld, player, locations_per_region, location_cache, 'Guest Room'), - create_region(multiworld, player, locations_per_region, location_cache, 'Safari Room'), - create_region(multiworld, player, locations_per_region, location_cache, '3F Right Hallway'), - create_region(multiworld, player, locations_per_region, location_cache, '3F Left Hallway'), - create_region(multiworld, player, locations_per_region, location_cache, 'Artist\'s Studio'), - create_region(multiworld, player, locations_per_region, location_cache, 'Balcony'), - create_region(multiworld, player, locations_per_region, location_cache, 'Armory'), - create_region(multiworld, player, locations_per_region, location_cache, 'Ceramics Studio'), - create_region(multiworld, player, locations_per_region, location_cache, 'Telephone Room'), - create_region(multiworld, player, locations_per_region, location_cache, 'Clockwork Room'), - create_region(multiworld, player, locations_per_region, location_cache, 'Roof'), - create_region(multiworld, player, locations_per_region, location_cache, 'Breaker Room'), - create_region(multiworld, player, locations_per_region, location_cache, 'Cellar'), - create_region(multiworld, player, locations_per_region, location_cache, 'Basement Hallway'), - create_region(multiworld, player, locations_per_region, location_cache, 'Cold Storage'), - create_region(multiworld, player, locations_per_region, location_cache, 'Pipe Room'), - create_region(multiworld, player, locations_per_region, location_cache, 'The Well'), - create_region(multiworld, player, locations_per_region, location_cache, 'Secret Altar') - ] - - if __debug__: - throwIfAnyLocationIsNotAssignedToARegion(regions, locations_per_region.keys()) - - multiworld.regions += regions - - connect(multiworld, player, "Menu -> Foyer", 'Menu', 'Foyer') # name all connections - connect(multiworld, player, "Foyer -> Parlor", 'Foyer', 'Parlor') - connect(multiworld, player, "Parlor -> Anteroom", 'Parlor', 'Anteroom', - lambda state: state.has("Anteroom Key", player)) - connect(multiworld, player, "Anteroom -> Wardrobe", 'Anteroom', 'Wardrobe') - connect(multiworld, player, "Wardrobe -> Wardrobe Balcony", 'Wardrobe', 'Wardrobe Balcony') - connect(multiworld, player, "Foyer -> 2F Front Hallway", 'Foyer', '2F Front Hallway', - lambda state: state.has("Front Hallway Key", player)) - connect(multiworld, player, "2F Front Hallway -> Study", '2F Front Hallway', 'Study') - connect(multiworld, player, "2F Front Hallway -> Master Bedroom", '2F Front Hallway', 'Master Bedroom', - lambda state: state.has("Master Bedroom Key", player)) - connect(multiworld, player, "2F Front Hallway -> Nursery", '2F Front Hallway', 'Nursery', - lambda state: state.has("Nursery Key", player)) - connect(multiworld, player, "2F Front Hallway -> Twins' Room", '2F Front Hallway', 'Twins\' Room', - lambda state: state.has("Twins Bedroom Key", player)) - connect(multiworld, player, "Foyer -> 1F Hallway", 'Foyer', '1F Hallway', - lambda state: state.has("Heart Key", player)) - connect(multiworld, player, "1F Hallway -> Basement Stairwell", '1F Hallway', 'Basement Stairwell') - connect(multiworld, player, "1F Hallway -> 2F Stairwell", '1F Hallway', '2F Stairwell', - lambda state: state.has("2F Stairwell Key", player)) - connect(multiworld, player, "1F Hallway -> Courtyard", '1F Hallway', 'Courtyard', - lambda state: state.has("Club Key", player)) - connect(multiworld, player, "1F Hallway -> 1F Bathroom", '1F Hallway', '1F Bathroom') - connect(multiworld, player, "1F Hallway -> Conservatory", '1F Hallway', 'Conservatory', - lambda state: state.has("Conservatory Key", player)) - connect(multiworld, player, "1F Hallway -> Billiards Room", '1F Hallway', 'Billiards Room', - lambda state: state.has("Billiards Key", player)) - connect(multiworld, player, "1F Hallway -> 1F Washroom", '1F Hallway', '1F Washroom', - lambda state: state.has("Boo", player, multiworld.WashroomBooCount[player])) - connect(multiworld, player, "1F Hallway -> Ballroom", '1F Hallway', 'Ballroom', - lambda state: state.has("Ballroom Key", player)) - connect(multiworld, player, "1F Hallway -> Dining Room", '1F Hallway', 'Dining Room', - lambda state: state.has("Dining Room Key", player)) - connect(multiworld, player, "1F Hallway -> Laundry Room", '1F Hallway', 'Laundry Room', - lambda state: state.has("Laundry Key", player)) - connect(multiworld, player, "1F Hallway -> Fortune-Teller's Room", '1F Hallway', 'Fortune-Teller\'s Room', - lambda state: state.has("Fortune Teller Key", player)) - connect(multiworld, player, "Courtyard -> Rec Room", 'Courtyard', 'Rec Room', - lambda state: state.has("Rec Room Key", player)) - connect(multiworld, player, "Rec Room -> Courtyard", 'Rec Room', 'Courtyard', - lambda state: state.has("Rec Room Key", player)) - connect(multiworld, player, "Ballroom -> Storage Room", 'Ballroom', 'Storage Room', - lambda state: state.has("Storage Room Key", player)) - connect(multiworld, player, "Dining Room -> Kitchen", 'Dining Room', 'Kitchen') - connect(multiworld, player, "Kitchen -> Boneyard", 'Kitchen', 'Boneyard', - lambda state: state.has("Water Element Medal", player)) - connect(multiworld, player, "Boneyard -> Graveyard", 'Boneyard', 'Graveyard', - lambda state: state.has("Water Element Medal", player)) - connect(multiworld, player, "Billiards Room -> Projection Room", 'Billiards Room', 'Projection Room') - connect(multiworld, player, "Fortune-Teller's Room -> Mirror Room", 'Fortune-Teller\'s Room', 'Mirror Room', - lambda state: state.has("Fire Element Medal", player)) - connect(multiworld, player, "Laundry Room -> Butler's Room", 'Laundry Room', 'Butler\'s Room') - connect(multiworld, player, "Butler's Room -> Hidden Room", 'Butler\'s Room', 'Hidden Room') - connect(multiworld, player, "Courtyard -> The Well", 'Courtyard', 'The Well') - connect(multiworld, player, "Rec Room -> 2F Stairwell", 'Rec Room', '2F Stairwell') - connect(multiworld, player, "2F Stairwell -> Tea Room", '2F Stairwell', 'Tea Room', - lambda state: state.has("Water Element Medal", player)) - connect(multiworld, player, "2F Stairwell -> Rec Room", '2F Stairwell', 'Rec Room') - connect(multiworld, player, "2F Stairwell -> 2F Rear Hallway", '2F Stairwell', '2F Rear Hallway') - connect(multiworld, player, "2F Rear Hallway -> 2F Bathroom", '2F Rear Hallway', '2F Bathroom') - connect(multiworld, player, "2F Rear Hallway -> 2F Washroom", '2F Rear Hallway', '2F Washroom') - connect(multiworld, player, "2F Rear Hallway -> Nana's Room", '2F Rear Hallway', 'Nana\'s Room') - connect(multiworld, player, "2F Rear Hallway -> Astral Hall", '2F Rear Hallway', 'Astral Hall') - connect(multiworld, player, "2F Rear Hallway -> Sitting Room", '2F Rear Hallway', 'Sitting Room', - lambda state: state.has("Sitting Room Key", player)) - connect(multiworld, player, "2F Rear Hallway -> Safari Room", '2F Rear Hallway', 'Safari Room', - lambda state: state.has("Safari Key", player)) - connect(multiworld, player, "Astral Hall -> Observatory", 'Astral Hall', 'Observatory', - lambda state: state.has("Fire Element Medal", player)) - connect(multiworld, player, "Sitting Room -> Guest Room", 'Sitting Room', 'Guest Room', - lambda state: state.has("Fire Element Medal", player) and state.has("Water Element Medal", player)) - connect(multiworld, player, "Safari Room -> 3F Right Hallway", 'Safari Room', '3F Right Hallway') - connect(multiworld, player, "3F Right Hallway -> Artist's Studio", '3F Right Hallway', 'Artist\'s Studio', - lambda state: state.has("Art Studio Key", player)) - connect(multiworld, player, "3F Right Hallway -> Balcony", '3F Right Hallway', 'Balcony', - lambda state: state.has("Balcony Key", player) and state.has("Boo", player, - multiworld.BalconyBooCount[player])) - connect(multiworld, player, "Balcony -> 3F Left Hallway", 'Balcony', '3F Left Hallway', - lambda state: state.has("Diamond Key", player)) - connect(multiworld, player, "3F Left Hallway -> Armory", '3F Left Hallway', 'Armory', - lambda state: state.has("Armory Key", player)) - connect(multiworld, player, "3F Left Hallway -> Telephone Room", '3F Left Hallway', 'Telephone Room') - connect(multiworld, player, "Telephone Room -> Clockwork Room", 'Telephone Room', 'Clockwork Room', - lambda state: state.has("Clockwork Key", player)) - connect(multiworld, player, "Armory -> Ceramics Studio", 'Armory', 'Ceramics Studio') - connect(multiworld, player, "Clockwork Room -> Roof", 'Clockwork Room', 'Roof') - connect(multiworld, player, "Roof -> Sealed Room", 'Roof', 'Sealed Room') - connect(multiworld, player, "Basement Stairwell -> Breaker Room", 'Basement Stairwell', 'Breaker Room') - connect(multiworld, player, "Basement Stairwell -> Cellar", 'Basement Stairwell', 'Cellar', - lambda state: state.has("Cellar Key", player)) - connect(multiworld, player, "Cellar -> Basement Hallway", 'Cellar', 'Basement Hallway') - connect(multiworld, player, "Basement Hallway -> Cold Storage", 'Basement Hallway', 'Cold Storage', - lambda state: state.has("Cold Storage Key", player)) - connect(multiworld, player, "Basement Hallway -> Pipe Room", 'Basement Hallway', 'Pipe Room', - lambda state: state.has("Pipe Room Key", player)) - connect(multiworld, player, "Basement Hallway -> Secret Altar", 'Basement Hallway', 'Secret Altar', - lambda state: state.has("Spade Key", player) and state.has("Boo", player, multiworld.FinalBooCount[player])) - - -def throwIfAnyLocationIsNotAssignedToARegion(regions: List[Region], regionnames: Set[str]): - existingRegions = set() - - for region in regions: - existingRegions.add(region.name) - - if (regionnames - existingRegions): - raise Exception( - "LuigiMansion: the following regions are used in locations: {}, but no such region exists".format( - regionnames - existingRegions)) - - -def create_location(player: int, location_data: LocationData, region: Region, # check where event items are assigned - location_cache: List[Location]) -> Location: - location = Location(player, location_data.name, location_data.code, region) - location.access_rule = location_data.rule - - if location_data.code is None: - location.event = True - location.locked = True - location.place_locked_item(LMItem(location_data.locked_item, ItemClassification.progression, None, player)) - - location_cache.append(location) - - return location - - -def create_region(multiworld: MultiWorld, player: int, locations_per_region: Dict[str, List[LocationData]], - location_cache: List[Location], name: str) -> Region: - region = Region(name, player, multiworld) - - if name in locations_per_region: - for location_data in locations_per_region[name]: - location = create_location(player, location_data, region, location_cache) - if location.locked == True: - multiworld.worlds[player].locked_locations.append(location.name) - region.locations.append(location) - - return region - - -def connect(multiworld: MultiWorld, player: int, name: str, source: str, target: str, - rule: Optional[Callable] = None): - source_region = multiworld.get_region(source, player) - target_region = multiworld.get_region(target, player) - - connection = Entrance(player, name, source_region) - - if rule: - connection.access_rule = rule - - for region_to_type in multiworld.worlds[player].ghost_affected_regions: - if region_to_type == target_region.name: - if multiworld.worlds[player].ghost_affected_regions[region_to_type] == "Fire": - add_rule(connection, lambda state: state.has("Water Element Medal", player), "and") - elif multiworld.worlds[player].ghost_affected_regions[region_to_type] == "Water": - add_rule(connection, lambda state: state.has("Ice Element Medal", player), "and") - elif multiworld.worlds[player].ghost_affected_regions[region_to_type] == "Ice": - add_rule(connection, lambda state: state.has("Fire Element Medal", player), "and") - - source_region.exits.append(connection) - connection.connect(target_region) - - -def get_locations_per_region(locations: Tuple[LocationData, ...]) -> Dict[str, List[LocationData]]: - per_region: Dict[str, List[LocationData]] = {} - - for location in locations: - per_region.setdefault(location.parent_region, []).append(location) - - return per_region - - -def is_option_enabled(world: MultiWorld, player: int, name: str) -> bool: - return get_option_value(world, player, name) > 0 - - -def get_option_value(world: MultiWorld, player: int, name: str) -> Union[int, dict]: - option = getattr(world, name, None) - if option == None: - return 0 - - return option[player].value diff --git a/worlds/luigimansion/Rules.py b/worlds/luigimansion/Rules.py deleted file mode 100644 index f172e607e567..000000000000 --- a/worlds/luigimansion/Rules.py +++ /dev/null @@ -1,9 +0,0 @@ -from BaseClasses import Location, MultiWorld -from worlds.generic.Rules import add_rule - - -# Assign ghost_type to region list, access that attribute to set rules during connect function -def set_ghost_type(multiworld: MultiWorld, ghost_list: dict): - for region_name in ghost_list: - ghost_type = multiworld.random.choice(["Fire", "Water", "Ice", "No Element"]) - ghost_list.update({region_name: ghost_type}) diff --git a/worlds/luigimansion/__init__.py b/worlds/luigimansion/__init__.py deleted file mode 100644 index 7561442a54ff..000000000000 --- a/worlds/luigimansion/__init__.py +++ /dev/null @@ -1,165 +0,0 @@ -from typing import Dict, List, Set, Tuple, TextIO - -from BaseClasses import Item, MultiWorld, Location, Tutorial, ItemClassification -from .Items import item_table, filler_items, get_item_names_per_category -from .Locations import get_locations, EventId -from .Rules import set_ghost_type -from .Options import luigimansion_options -from .Regions import create_regions, is_option_enabled, get_option_value -from ..AutoWorld import World, WebWorld - - -# Incomplete, some function removal required - - -class LuigiMansionWebWorld(WebWorld): - theme = "stone" - setup = Tutorial( - "Multiworld Setup Guide", - "A guide to setting up the Luigi's Mansion randomizer connected to an Archipelago Multiworld", - "English", - "setup_en.md", - "setup/en", - ["BootsinSoots"] - ) - - tutorials = [setup] - - -class LuigiMansionWorld(World): - """ - Luigi\'s Mansion is an adventure game starring everyone's favorite plumber brother Luigi. - Luigi has won a strange mansion but on arriving, he discovers it's full of ghosts! - """ - - option_definitions = luigimansion_options - game = "Luigi's Mansion" - topology_present = True - data_version = 0 - web = LuigiMansionWebWorld() - - item_name_to_id = {name: data.code for name, data in item_table.items()} - location_name_to_id = {location.name: location.code for location in get_locations(None, None)} - item_name_groups = get_item_names_per_category() - - locked_locations: List[str] - location_cache: List[Location] - # Create list of Region names with randomization, reuse list to filter locations and entrances later. - ghost_affected_regions = { - "Anteroom": "No Element", - "Wardrobe": "No Element", - "Laundry Room": "No Element", - "Hidden Room": "Ice", - "Mirror Room": "No Element", - "Storage Room": "No Element", - "Kitchen": "Ice", - "1F Bathroom": "No Element", - "Courtyard": "No Element", - "Tea Room": "No Element", - "2F Washroom": "Fire", - "Projection Room": "No Element", - "Safari Room": "Water", - "Cellar": "No Element", - "Roof": "No Element", - "Sealed Room": "No Element", - "Armory": "No Element", - "Pipe Room": "No Element" - } - - def __init__(self, world: MultiWorld, player: int): - super().__init__(world, player) - - self.locked_locations = [] - self.location_cache = [] - - def generate_early(self): - # in generate_early the start_inventory isn't copied over to precollected_items yet, so we can still modify - # the options directly - if self.multiworld.Enemizer[self.player] == True: - set_ghost_type(self.multiworld, self.ghost_affected_regions) - - if self.multiworld.StartWithBooRadar[self.player] == True: - self.multiworld.precollected_items[self.player].append(self.create_item("Boo Radar")) - - def create_regions(self): - create_regions(self.multiworld, self.player, get_locations(self.multiworld, self.player), self.location_cache) - - def create_items(self): - pool: List[Item] = [] - excluded_items = get_excluded_items(self, self.multiworld, self.player) - for name, data in item_table.items(): - if name not in excluded_items: - if data.group != "Trap" or "Filler": - for _ in range(data.count): - item = self.create_item(name) - pool.append(item) - - fill_item_pool_with_filler_items(self, self.multiworld, self.player, self.locked_locations, self.location_cache, - pool) - - self.multiworld.itempool += pool - - def create_item(self, name: str) -> Item: - item_id: int = self.item_name_to_id[name] - - return Item(name, - item_table[name].classification, - item_id, self.player) - - def set_rules(self) -> None: - self.multiworld.completion_condition[self.player] = lambda state: state.has("Mario's Painting", self.player) - - def get_filler_item_name(self) -> str: - return self.multiworld.random.choice([item_name for item_name in filler_items]) - - def generate_basic(self): - pass - - - def fill_slot_data(self) -> Dict[str, object]: - slot_data: Dict[str, object] = {} - - for option_name in luigimansion_options: - slot_data[option_name] = get_option_value(self.multiworld, self.player, option_name) - - slot_data["StinkyMaw"] = True - slot_data["ProgressiveVerticalMovement"] = False - slot_data["ProgressiveKeycards"] = False - slot_data["PersonalItems"] = get_personal_items(self.player, self.location_cache) - - return slot_data - - -def get_excluded_items(self: LuigiMansionWorld, world: MultiWorld, player: int) -> Set[str]: - excluded_items: Set[str] = set() - - if world.Boosanity[self.player] == False: - excluded_items.add('Boo') - - for item in world.precollected_items[player]: - excluded_items.add(item.name) - - return excluded_items - - -def fill_item_pool_with_filler_items(self: LuigiMansionWorld, world: MultiWorld, player: int, - locked_locations: List[str], - location_cache: List[Location], pool: List[Item]): - for _ in range(len(location_cache) - len(locked_locations) - len(pool)): - item = world.create_item(self.get_filler_item_name(), player) - pool.append(item) - - return item - - -def get_personal_items(player: int, locations: List[Location]) -> Dict[int, int]: - personal_items: Dict[int, int] = {} - - for location in locations: - if location.address and location.item and location.item.code and location.item.player == player: - personal_items[location.address] = location.item.code - - return personal_items - - - diff --git a/worlds/luigimansion/docs/en_Luigi's Mansion.md b/worlds/luigimansion/docs/en_Luigi's Mansion.md deleted file mode 100644 index 7b447bf3d86c..000000000000 --- a/worlds/luigimansion/docs/en_Luigi's Mansion.md +++ /dev/null @@ -1,76 +0,0 @@ -# Luigi's Mansion - -## Where is the settings page? - -The [player settings page for this game](../player-settings) contains all the options you need to configure and export a -config file. - -## What does randomization do to this game? - -When it comes to Luigi's Mansion, randomization changes the locations of Mario's Items, door keys and element medallions, -as well as all the treasure bundles that are found in chests. This primarily changes the route the player must take -through the game. - -The Randomizer allows you to set different goals and modify the game in several other ways -([see below](#changes-from-the-vanilla-game)). - -## What items and locations get shuffled? - -Door Keys, Mario's items, and the element medallions are shuffled. These are found in the chests in various rooms in the -mansion, as well as a few specific objects that normally contain those items. There are options for Boos, Portrait Ghosts, Toads, Plants, Gold Mice, Blue -Ghosts (Speedy Spirits), and even every interactable object in the game. - -## Which items can be in another player's world? - -Keys, Mario's Items, and Element Medals can be found in other worlds, along with money , hearts, and poison mushrooms. - -## What does another world's item look like in Luigi's Mansion? - -Items belonging to other worlds are represented by an AP icon and are called AP items. - -## When the player receives an item, what happens? - -_______. - -## Changes from the vanilla game - -###### Customization options: - -- Add Plants into the pool as locations -- Add Portrait Ghosts into the pool as locations -- Add Speedy Spirits and Gold Mice into the pool as locations -- Add Boos into the pool as locations and items -- Add Toads into the pool as locations -- Add every interactable object within the game into the pool as locations -- Customize the Boo count requirement for the 1F Washroom, Balcony, and Secret Altar -- Customize the number of Mario's items needed to trigger the Fortune-teller -- Start with the stronger Poltergust -- Start with the Boo Radar -- Start in the Hidden Mansion -- Randomize the ghost types in certain rooms of the mansion - -###### Quality of life: - -- Various streamlining tweaks (removed cutscenes, dialogue, transitions) -- You can elect to lock the cave layout for the next run, giving you exactly the same floors and red chest contents as - on your previous attempt. This functionality is accessed via the bald NPC behind the counter at the Ancient Cave - Entrance -- Multiple people can connect to the same slot and collaboratively search for Iris treasures and blue chests -- Always start with Providence already in your inventory. (It is no longer obtained from red chests) -- (optional) Run button that allows you to move at faster than normal speed - -###### Quality of death: - -- Blue chest items that you received from the multiworld are kept, even if your party dies. (I.e., you do not need to - use Providence to make them permanent) -- Similarly, but in the opposite direction: All location checks you make are immediately sent out to the multiworld and - don't require Providence for persistence. -- (optional) Death link support. (I.e., if your party is defeated, everyone else participating in death link also dies) - -###### Bug fixes: - -- Vanilla game bugs that could result in softlocks or save file corruption have been fixed -- (optional) Bugfix for the algorithm that determines the item pool for red chest gear. Enabling this allows the cave to - generate shields, headgear, rings, and jewels in red chests even after floor B9 -- (optional) Bugfix for the outlandish cravings of capsule monsters in the US version. Enabling this makes feeding work - like in the JP and EU versions of the game, resulting in more reasonable cravings diff --git a/worlds/luigimansion/docs/setup_en.md b/worlds/luigimansion/docs/setup_en.md deleted file mode 100644 index f9e0d3725cfb..000000000000 --- a/worlds/luigimansion/docs/setup_en.md +++ /dev/null @@ -1,144 +0,0 @@ -# Lufia II Ancient Cave Multiworld Setup Guide - -## Required Software - -- [Archipelago](https://github.com/ArchipelagoMW/Archipelago/releases). Make sure to check the box for `SNI Client - Lufia II Ancient Cave Patch Setup` -- Hardware or software capable of loading and playing SNES ROM files - - An emulator capable of connecting to SNI - ([snes9x rr](https://github.com/gocha/snes9x-rr/releases), - [BizHawk](https://tasvideos.org/BizHawk), or - [RetroArch](https://retroarch.com?page=platforms) 1.10.3 or newer). Or, - - An SD2SNES, [FXPak Pro](https://krikzz.com/store/home/54-fxpak-pro.html), or other compatible hardware. **note: -modded SNES minis are currently not supported by SNI** -- Your American ROM file, probably named `Lufia II - Rise of the Sinistrals (USA).sfc` - -## Installation Procedures - -1. Download and install SNIClient from the link above, making sure to install the most recent version. - **The installer file is located in the assets section at the bottom of the version information**. - - During setup, you will be asked to locate your base ROM file. This is your American Lufia II - Rise of the Sinistrals ROM file. - -2. If you are using an emulator, you should assign your Lua capable emulator as your default program for launching ROM - files. - 1. Extract your emulator's folder to your Desktop, or somewhere you will remember. - 2. Right-click on a ROM file and select **Open with...** - 3. Check the box next to **Always use this app to open .sfc files** - 4. Scroll to the bottom of the list and click the grey text **Look for another App on this PC** - 5. Browse for your emulator's `.exe` file and click **Open**. This file should be located inside the folder you - extracted in step one. - -## Create a Config (.yaml) File - -### What is a config file and why do I need one? - -Your config file contains a set of configuration options which provide the generator with information about how it -should generate your game. Each player of a multiworld will provide their own config file. This setup allows each player -to enjoy an experience customized for their taste, and different players in the same multiworld can all have different -options. - -### Where do I get a config file? - -The [Player Settings](/games/Lufia%20II%20Ancient%20Cave/player-settings) page on the website allows you to configure -your personal settings and export a config file from them. - -### Verifying your config file - -If you would like to validate your config file to make sure it works, you may do so on the -[YAML Validator](/mysterycheck) page. - -## Generating a Single-Player Game - -1. Navigate to the [Player Settings](/games/Lufia%20II%20Ancient%20Cave/player-settings) page, configure your options, - and click the "Generate Game" button. -2. You will be presented with a "Seed Info" page. -3. Click the "Create New Room" link. -4. You will be presented with a server page, from which you can download your patch file. -5. Double-click on your patch file, and SNIClient will launch automatically, create your ROM from the patch file, and - open your emulator for you. -6. Since this is a single-player game, you will no longer need the client, so feel free to close it. - -## Joining a MultiWorld Game - -### Obtain your patch file and create your ROM - -When you join a multiworld game, you will be asked to provide your config file to whoever is hosting. Once that is done, -the host will provide you with either a link to download your patch file, or with a zip file containing everyone's patch -files. Your patch file should have a `.apl2ac` extension. - -Put your patch file on your desktop or somewhere convenient, and double click it. This should automatically launch the -client, and will also create your ROM in the same place as your patch file. - -### Connect to the client - -#### With an emulator - -When the client launched automatically, SNI should have also automatically launched in the background. If this is its -first time launching, you may be prompted to allow it to communicate through the Windows Firewall. - -##### snes9x Multitroid - -1. Load your ROM file if it hasn't already been loaded. -2. Click on the File menu and hover on **Lua Scripting** -3. Click on **New Lua Script Window...** -4. In the new window, click **Browse...** -5. Select the connector lua file included with your client - - Look in the Archipelago folder for `/SNI/lua/x64` or `/SNI/lua/x86` depending on if the - emulator is 64-bit or 32-bit. -6. If you see an error while loading the script that states `socket.dll missing` or similar, navigate to the folder of -the lua you are using in your file explorer and copy the `socket.dll` to the base folder of your snes9x install. - -##### BizHawk - -1. Ensure you have the BSNES core loaded. This is done with the main menubar, under: - - (≤ 2.8) `Config` 〉 `Cores` 〉 `SNES` 〉 `BSNES` - - (≥ 2.9) `Config` 〉 `Preferred Cores` 〉 `SNES` 〉 `BSNESv115+` -2. Load your ROM file if it hasn't already been loaded. - If you changed your core preference after loading the ROM, don't forget to reload it (default hotkey: Ctrl+R). -3. Drag+drop the `Connector.lua` file that you downloaded above onto the main EmuHawk window. - - Look in the Archipelago folder for `/SNI/lua/x64` or `/SNI/lua/x86` depending on if the - emulator is 64-bit or 32-bit. Please note the most recent versions of BizHawk are 64-bit only. - - You could instead open the Lua Console manually, click `Script` 〉 `Open Script`, and navigate to `Connector.lua` - with the file picker. - -##### RetroArch 1.10.3 or newer - -You only have to do these steps once. Note, RetroArch 1.9.x will not work as it is older than 1.10.3. - -1. Enter the RetroArch main menu screen. -2. Go to Settings --> User Interface. Set "Show Advanced Settings" to ON. -3. Go to Settings --> Network. Set "Network Commands" to ON. (It is found below Request Device 16.) Leave the default - Network Command Port at 55355. - -![Screenshot of Network Commands setting](/static/generated/docs/A%20Link%20to%20the%20Past/retroarch-network-commands-en.png) -4. Go to Main Menu --> Online Updater --> Core Downloader. Scroll down and select "Nintendo - SNES / SFC (bsnes-mercury - Performance)". - -When loading a ROM, be sure to select a **bsnes-mercury** core. These are the only cores that allow external tools to -read ROM data. - -#### With hardware - -This guide assumes you have downloaded the correct firmware for your device. If you have not done so already, please do -this now. SD2SNES and FXPak Pro users may download the appropriate firmware on the SD2SNES releases page. SD2SNES -releases page: [SD2SNES Releases Page](https://github.com/RedGuyyyy/sd2snes/releases) - -Other hardware may find helpful information on the usb2snes platforms -page: [usb2snes Supported Platforms Page](http://usb2snes.com/#supported-platforms) - -1. Close your emulator, which may have auto-launched. -2. Power on your device and load the ROM. - -### Connect to the Archipelago Server - -The patch file which launched your client should have automatically connected you to the AP Server. There are a few -reasons this may not happen however, including if the game is hosted on the website but was generated elsewhere. If the -client window shows "Server Status: Not Connected", simply ask the host for the address of the server, and copy/paste it -into the "Server" input field then press enter. - -The client will attempt to reconnect to the new server address, and should momentarily show "Server Status: Connected". - -### Play the game - -When the client shows both SNES Device and Server as connected, you're ready to begin playing. Congratulations on -successfully joining a multiworld game! You can execute various commands in your client. For more information regarding -these commands you can use `/help` for local client commands and `!help` for server commands.