diff --git a/worlds/mm-recomp/EXAMPLE_YAML.yaml b/worlds/mm-recomp/EXAMPLE_YAML.yaml deleted file mode 100644 index a7a8d5ec1b0..00000000000 --- a/worlds/mm-recomp/EXAMPLE_YAML.yaml +++ /dev/null @@ -1,126 +0,0 @@ -# Q. What is this file? -# A. This file contains options which allow you to configure your multiworld experience while allowing -# others to play how they want as well. -# -# Q. How do I use it? -# A. The options in this file are weighted. This means the higher number you assign to a value, the -# more chances you have for that option to be chosen. For example, an option like this: -# -# map_shuffle: -# on: 5 -# off: 15 -# -# Means you have 5 chances for map shuffle to occur, and 15 chances for map shuffle to be turned -# off. -# -# Q. I've never seen a file like this before. What characters am I allowed to use? -# A. This is a .yaml file. You are allowed to use most characters. -# To test if your yaml is valid or not, you can use this website: -# http://www.yamllint.com/ -# You can also verify that your Archipelago options are valid at this site: -# https://archipelago.gg/check - -# Your name in-game, limited to 16 characters. -# {player} will be replaced with the player's slot number. -# {PLAYER} will be replaced with the player's slot number, if that slot number is greater than 1. -# {number} will be replaced with the counter value of the name. -# {NUMBER} will be replaced with the counter value of the name, if the counter value is greater than 1. -name: Player{number} - -# Used to describe your yaml. Useful if you have multiple files. -description: Default Majora's Mask Recompiled Template - -game: Majora's Mask Recompiled -requires: - version: 0.5.0 # Version of Archipelago required for this yaml to work as expected. - -Majora's Mask Recompiled: - # Game Options - progression_balancing: - # A system that can move progression earlier, to try and prevent the player from getting stuck and bored early. - # - # A lower setting means more getting stuck. A higher setting means less getting stuck. - # - # You can define additional values between the minimum and maximum values. - # Minimum value is 0 - # Maximum value is 99 - random: 0 - random-low: 0 - random-high: 0 - disabled: 0 # equivalent to 0 - normal: 50 # equivalent to 50 - extreme: 0 # equivalent to 99 - - accessibility: - # Set rules for reachability of your items/locations. - # - # - **Locations:** ensure everything can be reached and acquired. - # - **Items:** ensure all logically relevant items can be acquired. - # - **Minimal:** ensure what is needed to reach your goal can be acquired. - locations: 0 - items: 50 - minimal: 0 - - logic_difficulty: - # Set the logic difficulty used when generating. - easy: 50 - no_logic: 0 - - shuffle_swamphouse_reward: - # Choose whether to shuffle the Mask of Truth given at the end of the Southern Swamphouse. - 'false': 50 - 'true': 0 - - skullsanity: - # Choose what items gold skulltulas can give. - # - # vanilla: Keep the swamphouse in generation, but only place Skulltula tokens there. - # anything: Any item can be given by any Skulltula, and tokens can be found anywhere in any world. - # ignore: Remove the swamphouse from generation entirely, lowering the hint percentage. - vanilla: 50 - anything: 0 - ignore: 0 - - death_link: - # When you die, everyone dies. Of course the reverse is true too. - 'false': 50 - 'true': 0 - - # Item & Location Options - local_items: - # Forces these items to be in their native world. - [] - - non_local_items: - # Forces these items to be outside their native world. - [] - - start_inventory: - # Start with these items. - {} - - start_hints: - # Start with these item's locations prefilled into the ``!hint`` command. - [] - - start_location_hints: - # Start with these locations and their item prefilled into the ``!hint`` command. - [] - - exclude_locations: - # Prevent these locations from having an important item. - [] - - priority_locations: - # Prevent these locations from having an unimportant item. - [] - - item_links: - # Share part of your item pool with other players. - [] - - start_inventory_from_pool: - # Start with these items and don't place them in the world. - # - # The game decides what the replacement items will be. - {} diff --git a/worlds/mm-recomp/Items.py b/worlds/mm-recomp/Items.py deleted file mode 100644 index 7e74bd3fad1..00000000000 --- a/worlds/mm-recomp/Items.py +++ /dev/null @@ -1,455 +0,0 @@ -from typing import Callable, Dict, NamedTuple, Optional - -from BaseClasses import Item, ItemClassification, MultiWorld - - -class MMRItem(Item): - game = "Majora's Mask Recompiled" - - -class MMRItemData(NamedTuple): - code: Optional[int] = None - type: ItemClassification = ItemClassification.filler - num_exist: int = 1 - can_create: Callable = lambda options: True - - -item_data_table: Dict[str, MMRItemData] = { - "Stray Fairy (Clock Town)": MMRItemData( - code=0x3476942001007F, - type=ItemClassification.progression, - can_create=lambda options: options.fairysanity.value - ), - "Progressive Magic Upgrade": MMRItemData( - code=0x34769420020000, - type=ItemClassification.progression, - can_create=lambda options: options.shuffle_great_fairy_rewards.value - ), - "Great Spin Attack": MMRItemData( - code=0x34769420020001, - type=ItemClassification.useful, - can_create=lambda options: options.shuffle_great_fairy_rewards.value - ), - "Moon's Tear": MMRItemData( - code=0x34769420000096, - type=ItemClassification.progression - ), - "Land Title Deed": MMRItemData( - code=0x34769420000097, - type=ItemClassification.progression - ), - "Swamp Title Deed": MMRItemData( - code=0x34769420000098, - type=ItemClassification.progression - ), - # ~ "Mountain Title Deed": MMRItemData( - # ~ code=0x34769420000099, - # ~ type=ItemClassification.progression - # ~ ), - # ~ "Ocean Title Deed": MMRItemData( - # ~ code=0x3476942000009A, - # ~ type=ItemClassification.progression - # ~ ), - "Ocarina of Time": MMRItemData( - code=0x3476942000004C, - type=ItemClassification.progression, - can_create=lambda options: False - ), - "Heart Piece": MMRItemData( - code=0x3476942000000C, - type=ItemClassification.useful, - num_exist=52, - can_create=lambda options: False - ), - "Heart Container": MMRItemData( - code=0x3476942000000D, - type=ItemClassification.useful, - num_exist=14 - #num_exist=4 - ), - "Swamp Skulltula Token": MMRItemData( - code=0x34769420000052, - type=ItemClassification.progression, - num_exist=30, - can_create=lambda options: options.skullsanity.value == 1 - ), - "Progressive Wallet": MMRItemData( - code=0x34769420000008, - type=ItemClassification.progression, - num_exist=2 - ), - "Sonata of Awakening": MMRItemData( - code=0x34769420040061, - type=ItemClassification.progression - ), - # ~ "Goron's Lullaby": MMRItemData( - # ~ code=0x34769420040062, - # ~ type=ItemClassification.progression - # ~ ), - # ~ "New Wave Bossa Nova": MMRItemData( - # ~ code=0x34769420040063, - # ~ type=ItemClassification.progression - # ~ ), - # ~ "Elegy of Emptiness": MMRItemData( - # ~ code=0x34769420040064, - # ~ type=ItemClassification.progression - # ~ ), - "Oath to Order": MMRItemData( - code=0x34769420040065, - type=ItemClassification.progression - ), - "Song of Time": MMRItemData( - code=0x34769420040067, - type=ItemClassification.progression, - can_create=lambda options: False - ), - "Song of Healing": MMRItemData( - code=0x34769420040068, - type=ItemClassification.progression - ), - "Epona's Song": MMRItemData( - code=0x34769420040069, - type=ItemClassification.progression - ), - "Song of Soaring": MMRItemData( - code=0x3476942004006A, - type=ItemClassification.progression - ), - "Song of Storms": MMRItemData( - code=0x3476942004006B, - type=ItemClassification.progression - ), - "Deku Mask": MMRItemData( - code=0x34769420000078, - type=ItemClassification.progression - ), - "Goron Mask": MMRItemData( - code=0x34769420000079, - type=ItemClassification.progression - ), - "Zora Mask": MMRItemData( - code=0x3476942000007A, - type=ItemClassification.progression - ), - "Fierce Deity's Mask": MMRItemData( - code=0x3476942000007B, - type=ItemClassification.progression - ), - "Captain's Hat": MMRItemData( - code=0x3476942000007C, - type=ItemClassification.progression - ), - "Giant's Mask": MMRItemData( - code=0x3476942000007D, - type=ItemClassification.progression - ), - "All-Night Mask": MMRItemData( - code=0x3476942000007E, - type=ItemClassification.progression - ), - "Bunny Hood": MMRItemData( - code=0x3476942000007F, - type=ItemClassification.progression - ), - "Keaton Mask": MMRItemData( - code=0x34769420000080, - type=ItemClassification.progression - ), - "Garo Mask": MMRItemData( - code=0x34769420000081, - type=ItemClassification.progression - ), - "Romani Mask": MMRItemData( - code=0x34769420000082, - type=ItemClassification.progression - ), - "Circus Leader's Mask": MMRItemData( - code=0x34769420000083, - type=ItemClassification.progression - ), - "Postman's Hat": MMRItemData( - code=0x34769420000084, - type=ItemClassification.progression - ), - "Couple's Mask": MMRItemData( - code=0x34769420000085, - type=ItemClassification.progression - ), - "Great Fairy Mask": MMRItemData( - code=0x34769420000086, - type=ItemClassification.progression, - can_create=lambda options: options.shuffle_great_fairy_rewards.value - ), - "Gibdo Mask": MMRItemData( - code=0x34769420000087, - type=ItemClassification.progression - ), - "Don Gero Mask": MMRItemData( - code=0x34769420000088, - type=ItemClassification.progression - ), - "Kamaro Mask": MMRItemData( - code=0x34769420000089, - type=ItemClassification.progression - ), - "Mask of Truth": MMRItemData( - code=0x3476942000008A, - type=ItemClassification.progression, - can_create=lambda options: options.shuffle_swamphouse_reward.value - ), - "Stone Mask": MMRItemData( - code=0x3476942000008B, - type=ItemClassification.progression - ), - "Bremen Mask": MMRItemData( - code=0x3476942000008C, - type=ItemClassification.progression - ), - "Blast Mask": MMRItemData( - code=0x3476942000008D, - type=ItemClassification.progression - ), - "Mask of Scents": MMRItemData( - code=0x3476942000008E, - type=ItemClassification.progression - ), - "Kafei's Mask": MMRItemData( - code=0x3476942000008F, - type=ItemClassification.progression - ), - "Room Key": MMRItemData( - code=0x347694200000A0, - type=ItemClassification.progression - ), - "Letter to Kafei": MMRItemData( - code=0x347694200000AA, - type=ItemClassification.progression - ), - "Pendant of Memories": MMRItemData( - code=0x347694200000AB, - type=ItemClassification.progression - ), - "Priority Mail": MMRItemData( - code=0x347694200000A1, - type=ItemClassification.progression - ), - "Bottle of Chateau Romani": MMRItemData( - code=0x3476942000006F, - type=ItemClassification.progression - ), - "Progressive Sword": MMRItemData( - code=0x34769420000037, - type=ItemClassification.progression, - num_exist=2 - #num_exist=3 - ), - "Great Fairy Sword": MMRItemData( - code=0x3476942000003B, - type=ItemClassification.progression - ), - "Progressive Bow": MMRItemData( - code=0x34769420000022, - type=ItemClassification.progression, - num_exist=3 - ), - "Fire Arrow": MMRItemData( - code=0x34769420000025, - type=ItemClassification.progression - ), - "Ice Arrow": MMRItemData( - code=0x34769420000026, - type=ItemClassification.progression - ), - "Light Arrow": MMRItemData( - code=0x34769420000027, - type=ItemClassification.progression - ), - # ~ "Pictograph Box": MMRItemData( - # ~ code=0x34769420000043, - # ~ type=ItemClassification.progression - # ~ ), - "Lens of Truth": MMRItemData( - code=0x34769420000042, - type=ItemClassification.progression - ), - "Hookshot": MMRItemData( - code=0x34769420000041, - type=ItemClassification.progression - ), - # ~ "Mirror Shield": MMRItemData( - # ~ code=0x34769420000033, - # ~ type=ItemClassification.progression - # ~ ), - "Powder Keg": MMRItemData( - code=0x34769420000034, - type=ItemClassification.progression - ), - "Magic Bean": MMRItemData( - code=0x34769420000035, - type=ItemClassification.progression - ), - "Bottle of Red Potion": MMRItemData( - code=0x34769420000059, - type=ItemClassification.progression - ), - # ~ "Blue Potion": MMRItemData( - # ~ code=0x3476942000005D, - # ~ type=ItemClassification.progression - # ~ ), - "Stray Fairy (Woodfall)": MMRItemData( - code=0x34769420010000, - type=ItemClassification.progression, - num_exist=15, - can_create=lambda options: options.fairysanity.value - ), - # ~ "Stray Fairy (Snowhead)": MMRItemData( - # ~ code=0x34769420010001, - # ~ type=ItemClassification.progression, - # ~ num_exist=15 - # ~ ), - # ~ "Stray Fairy (Great Bay)": MMRItemData( - # ~ code=0x34769420010002, - # ~ type=ItemClassification.progression, - # ~ num_exist=15 - # ~ ), - # ~ "Stray Fairy (Stone Tower)": MMRItemData( - # ~ code=0x34769420010003, - # ~ type=ItemClassification.progression, - # ~ num_exist=15 - # ~ ), - "Small Key (Woodfall)": MMRItemData( - code=0x34769420090078, - type=ItemClassification.progression, - num_exist=1 - ), - # ~ "Small Key (Snowhead)": MMRItemData( - # ~ code=0x34769420090178, - # ~ type=ItemClassification.progression, - # ~ num_exist=3 - # ~ ), - # ~ "Small Key (Great Bay)": MMRItemData( - # ~ code=0x34769420090278, - # ~ type=ItemClassification.progression, - # ~ num_exist=1 - # ~ ), - # ~ "Small Key (Stone Tower)": MMRItemData( - # ~ code=0x34769420090378, - # ~ type=ItemClassification.progression, - # ~ num_exist=3 - # ~ ), - "Dungeon Map (Woodfall)": MMRItemData( - code=0x34769420090076, - type=ItemClassification.useful, - can_create=lambda options: False - ), - # ~ "Dungeon Map (Snowhead)": MMRItemData( - # ~ code=0x34769420090176, - # ~ type=ItemClassification.useful - # ~ ), - # ~ "Dungeon Map (Great Bay)": MMRItemData( - # ~ code=0x34769420090276, - # ~ type=ItemClassification.useful - # ~ ), - # ~ "Dungeon Map (Stone Tower)": MMRItemData( - # ~ code=0x34769420090376, - # ~ type=ItemClassification.useful - # ~ ), - "Compass (Woodfall)": MMRItemData( - code=0x34769420090075, - type=ItemClassification.useful, - can_create=lambda options: False - ), - # ~ "Compass (Snowhead)": MMRItemData( - # ~ code=0x34769420090175, - # ~ type=ItemClassification.useful - # ~ ), - # ~ "Compass (Great Bay)": MMRItemData( - # ~ code=0x34769420090275, - # ~ type=ItemClassification.useful - # ~ ), - # ~ "Compass (Stone Tower)": MMRItemData( - # ~ code=0x34769420090375, - # ~ type=ItemClassification.useful - # ~ ), - "Boss Key (Woodfall)": MMRItemData( - code=0x34769420090074, - type=ItemClassification.progression - ), - # ~ "Boss Key (Snowhead)": MMRItemData( - # ~ code=0x34769420090174, - # ~ type=ItemClassification.progression - # ~ ), - # ~ "Boss Key (Great Bay)": MMRItemData( - # ~ code=0x34769420090274, - # ~ type=ItemClassification.progression - # ~ ), - # ~ "Boss Key (Stone Tower)": MMRItemData( - # ~ code=0x34769420090374, - # ~ type=ItemClassification.progression - # ~ ), - "Odolwa's Remains": MMRItemData( - code=0x34769420000055, - type=ItemClassification.progression - ), - "Goht's Remains": MMRItemData( - code=0x34769420000056, - type=ItemClassification.progression - ), - "Gyorg's Remains": MMRItemData( - code=0x34769420000057, - type=ItemClassification.progression - ), - "Twinmold's Remains": MMRItemData( - code=0x34769420000058, - type=ItemClassification.progression - ), - "Progressive Bomb Bag": MMRItemData( - code=0x3476942000001B, - type=ItemClassification.progression, - num_exist=3 - ), - # ~ "Bombchu (1)": MMRItemData( - # ~ code=0x34769420000036, - # ~ type=ItemClassification.progression, - # ~ num_exist=4 - # ~ ), - # ~ "Bombchu (5)": MMRItemData( - # ~ code=0x3476942000003A, - # ~ type=ItemClassification.progression, - # ~ num_exist=1 - # ~ ), - "Bombchu (10)": MMRItemData( - code=0x3476942000001A, - type=ItemClassification.progression, - num_exist=1 - ), - # ~ "Blue Rupee": MMRItemData( - # ~ code=0x34769420000002, - # ~ type=ItemClassification.filler, - # ~ num_exist=2 - # ~ ), - # ~ "Red Rupee": MMRItemData( - # ~ code=0x34769420000004, - # ~ type=ItemClassification.filler, - # ~ num_exist=23 - # ~ ), - "Purple Rupee": MMRItemData( - code=0x34769420000005, - type=ItemClassification.useful, - num_exist=7, - can_create=lambda options: False - ), - "Silver Rupee": MMRItemData( - code=0x34769420000006, - type=ItemClassification.useful, - #num_exist=9 - num_exist=3 - ), - "Victory": MMRItemData( - type=ItemClassification.progression, - can_create=lambda options: False - ), -} - -item_table = {name: data.code for name, data in item_data_table.items() if data.code is not None} -code_to_item_table = {data.code: name for name, data in item_data_table.items() if data.code is not None} diff --git a/worlds/mm-recomp/Locations.py b/worlds/mm-recomp/Locations.py deleted file mode 100644 index 73abed3a67d..00000000000 --- a/worlds/mm-recomp/Locations.py +++ /dev/null @@ -1,1036 +0,0 @@ -from typing import Callable, Dict, NamedTuple, Optional - -from BaseClasses import Location, MultiWorld - - -class MMRLocation(Location): - game = "Majora's Mask Recompiled" - - -class MMRLocationData(NamedTuple): - region: str - address: Optional[int] = None - can_create: Callable = lambda options: True - locked_item: Optional[str] = None - - -location_data_table: Dict[str, MMRLocationData] = { - "Keaton Quiz": MMRLocationData( - region="Clock Town", - address=0x3476942007028C - ), - "Clock Tower Happy Mask Salesman #1": MMRLocationData( - region="Clock Town", - address=0x34769420040068 - ), - "Clock Tower Happy Mask Salesman #2": MMRLocationData( - region="Clock Town", - address=0x34769420000078 - ), - "Clock Town Postbox": MMRLocationData( - region="Clock Town", - address=0x347694200701F2 - ), - "Clock Town Hide-and-Seek": MMRLocationData( - region="Clock Town", - address=0x34769420000050 - ), - "Laundry Pool Stray Fairy (Clock Town)": MMRLocationData( - region="Clock Town", - address=0x3476942001007F - ), - "Laundry Pool Guru-Guru": MMRLocationData( - region="Clock Town", - address=0x3476942000008C - ), - "Laundry Pool Kafei's Request": MMRLocationData( - region="Clock Town", - address=0x347694200000AB - ), - "Laundry Pool Curiosity Shop Salesman #1": MMRLocationData( - region="Clock Town", - address=0x34769420000080 - ), - "Laundry Pool Curiosity Shop Salesman #2": MMRLocationData( - region="Clock Town", - address=0x347694200000A1 - ), - "South Clock Town Corner Chest": MMRLocationData( - region="Clock Town", - address=0x34769420066F00 - ), - "South Clock Town Final Day Tower Chest": MMRLocationData( - region="Clock Town", - address=0x34769420066F01 - ), - "East Clock Town Chest": MMRLocationData( - region="Clock Town", - address=0x34769420066C0A - ), - "East Clock Town Madame Aroma": MMRLocationData( - region="Clock Town", - address=0x3476942000008F - ), - "East Clock Town Mayor Dotour": MMRLocationData( - region="Clock Town", - address=0x3476942007026F - ), - "East Clock Town Shooting Gallery 40-49 Points": MMRLocationData( - region="Clock Town", - address=0x34769420000023 - ), - "East Clock Town Shooting Gallery Perfect 50 Points": MMRLocationData( - region="Clock Town", - address=0x3476942007011D - ), - "East Clock Town Honey and Darling Any Day": MMRLocationData( - region="Clock Town", - address=0x347694200800B5 - ), - "East Clock Town Honey and Darling All Days": MMRLocationData( - region="Clock Town", - address=0x347694200700B5 - ), - "East Clock Town Treasure Game Chest": MMRLocationData( - region="Clock Town", - address=0x34769420061700 - ), - "East Clock Town Sewer Chest": MMRLocationData( - region="Clock Town", - address=0x34769420062900 - ), - "East Clock Town Astral Observatory": MMRLocationData( - region="Clock Town", - address=0x34769420000096 - ), - "North Clock Town Tree HP": MMRLocationData( - region="Clock Town", - address=0x34769420056E0A - ), - "North Clock Town Deku Playground Any Day": MMRLocationData( - region="Clock Town", - address=0x347694200801C9 - ), - "North Clock Town Deku Playground All Days": MMRLocationData( - region="Clock Town", - address=0x347694200701C9 - ), - "North Clock Town Old Lady": MMRLocationData( - region="Clock Town", - address=0x3476942000008D - ), - "North Clock Town Great Fairy Reward": MMRLocationData( - region="Clock Town", - address=0x34769420030000 - ), - "North Clock Town Great Fairy Reward (Has Transformation Mask)": MMRLocationData( - region="Clock Town", - address=0x34769420000086 - ), - "West Clock Town Swordsman Expert Course": MMRLocationData( - region="Clock Town", - address=0x347694200701EF - ), - "West Clock Town Postman Counting": MMRLocationData( - region="Clock Town", - address=0x3476942007017D - ), - "West Clock Town Rosa Sisters": MMRLocationData( - region="Clock Town", - address=0x3476942007027B - ), - "West Clock Town Bank 200 Rupees": MMRLocationData( - region="Clock Town", - address=0x34769420000008 - ), - "West Clock Town Bank 1000 Rupees": MMRLocationData( - region="Clock Town", - address=0x34769420070177 - ), - "West Clock Town Priority Mail to Postman": MMRLocationData( - region="Clock Town", - address=0x34769420000084 - ), - "Moon's Tear Trade": MMRLocationData( - region="Clock Town", - address=0x34769420000097 - ), - "Moon's Tear Trade Freestanding HP": MMRLocationData( - region="Clock Town", - address=0x34769420056F0A - ), - "Top of Clock Tower (Ocarina of Time)": MMRLocationData( - region="Clock Town", - address=0x3476942000004C - ), - "Top of Clock Tower (Song of Time)": MMRLocationData( - region="Clock Town", - address=0x34769420040067 - ), - "Stock Pot Inn Reservation": MMRLocationData( - region="Clock Town", - address=0x347694200000A0 - ), - "Stock Pot Inn Midnight Meeting": MMRLocationData( - region="Clock Town", - address=0x347694200000AA - ), - "Stock Pot Inn Knife Chamber Chest": MMRLocationData( - region="Clock Town", - address=0x34769420066100 - ), - "Stock Pot Inn Employees Only Room Chest": MMRLocationData( - region="Clock Town", - address=0x34769420066101 - ), - "Stock Pot Inn ??? Hand": MMRLocationData( - region="Clock Town", - address=0x3476942007027D - ), - "Stock Pot Inn Granny Story #1": MMRLocationData( - region="Clock Town", - address=0x34769420070243 - ), - "Stock Pot Inn Granny Story #2": MMRLocationData( - region="Clock Town", - address=0x34769420080243 - ), - "Stock Pot Inn Anju and Kafei": MMRLocationData( - region="Clock Town", - address=0x34769420000085 - ), - "Milk Bar Show": MMRLocationData( - region="Clock Town", - address=0x34769420000083 - ), - "Milk Bar Priority Mail to Aroma": MMRLocationData( - region="Clock Town", - address=0x3476942000006F - ), - "Termina Stump Chest": MMRLocationData( - region="Termina Field", - address=0x34769420062D02 - ), - "Termina Tall Grass Chest": MMRLocationData( - region="Termina Field", - address=0x34769420062D01 - ), - "Termina Underwater Chest": MMRLocationData( - region="Termina Field", - address=0x34769420062D00 - ), - "Termina Tall Grass Grotto Chest": MMRLocationData( - region="Termina Field", - address=0x3476942006071F - ), - "Termina Peahat Grotto Chest": MMRLocationData( - region="Termina Field", - address=0x34769420060704 - ), - "Termina Dodongo Grotto Chest": MMRLocationData( - region="Termina Field", - address=0x34769420060700 - ), - "Termina Ikana Pillar Grotto Chest": MMRLocationData( - region="Termina Field", - address=0x3476942006071A - ), - "Termina Kamaro": MMRLocationData( - region="Termina Field", - address=0x34769420000089 - ), - "Milk Road Gorman Ranch Race": MMRLocationData( - region="Termina Field", - address=0x34769420000081 - ), - "Romani Ranch Grog": MMRLocationData( - region="Romani Ranch", - address=0x3476942000007F - ), - # ~ "Romani Ranch Helping Cremia": MMRLocationData( - # ~ region="Romani Ranch", - # ~ address=0x34769420000082 - # ~ ), - "Road to Swamp Tree HP": MMRLocationData( - region="Southern Swamp", - address=0x34769420054001 - ), - "Road to Swamp Grotto Chest": MMRLocationData( - region="Clock Town", - address=0x3476942006071E - ), - "Southern Swamp Deku Trade": MMRLocationData( - region="Southern Swamp", - address=0x34769420000098 - ), - "Southern Swamp Deku Trade Freestanding HP": MMRLocationData( - region="Southern Swamp", - address=0x3476942005451E - ), - "Southern Swamp Kotake Request": MMRLocationData( - region="Southern Swamp", - address=0x34769420000059 - ), - "Southern Swamp Mystery Woods Grotto Chest": MMRLocationData( - region="Southern Swamp", - address=0x3476942006071C - ), - "Southern Swamp Koume Tour Gift": MMRLocationData( - region="Southern Swamp", - address=0x34769420000043 - ), - "Swamphouse First Room Pot Near Entrance Token": MMRLocationData( - region="Swamphouse", - address=0x3476942006271E, - can_create=lambda options: options.skullsanity.value != 2 - ), - "Swamphouse First Room Crawling In Water Token": MMRLocationData( - region="Swamphouse", - address=0x34769420062708, - can_create=lambda options: options.skullsanity.value != 2 - ), - "Swamphouse First Room Crawling Right Column Token": MMRLocationData( - region="Swamphouse", - address=0x3476942006270F, - can_create=lambda options: options.skullsanity.value != 2 - ), - "Swamphouse First Room Crawling Left Column Token": MMRLocationData( - region="Swamphouse", - address=0x34769420062713, - can_create=lambda options: options.skullsanity.value != 2 - ), - "Swamphouse First Room Against Far Wall Token": MMRLocationData( - region="Swamphouse", - address=0x34769420062700, - can_create=lambda options: options.skullsanity.value != 2 - ), - "Swamphouse First Room Left Bugpatch Token": MMRLocationData( - region="Swamphouse", - address=0x34769420062709, - can_create=lambda options: options.skullsanity.value != 2 - ), - "Swamphouse First Room Right Bugpatch Token": MMRLocationData( - region="Swamphouse", - address=0x3476942006270C, - can_create=lambda options: options.skullsanity.value != 2 - ), - "Swamphouse First Room Upper Right Bugpatch Token": MMRLocationData( - region="Swamphouse", - address=0x3476942006270B, - can_create=lambda options: options.skullsanity.value != 2 - ), - "Swamphouse Monument Room Left Crate Token": MMRLocationData( - region="Swamphouse", - address=0x3476942006270A, - can_create=lambda options: options.skullsanity.value != 2 - ), - "Swamphouse Monument Room Right Crate Token": MMRLocationData( - region="Swamphouse", - address=0x3476942006271B, - can_create=lambda options: options.skullsanity.value != 2 - ), - "Swamphouse Monument Room Crawling Wall Token": MMRLocationData( - region="Swamphouse", - address=0x3476942006270D, - can_create=lambda options: options.skullsanity.value != 2 - ), - "Swamphouse Monument Room Crawling On Monument Token": MMRLocationData( - region="Swamphouse", - address=0x3476942006270E, - can_create=lambda options: options.skullsanity.value != 2 - ), - "Swamphouse Monument Room Behind Torch Token": MMRLocationData( - region="Swamphouse", - address=0x34769420062702, - can_create=lambda options: options.skullsanity.value != 2 - ), - "Swamphouse Pottery Room Beehive #1 Token": MMRLocationData( - region="Swamphouse", - address=0x34769420062717, - can_create=lambda options: options.skullsanity.value != 2 - ), - "Swamphouse Pottery Room Beehive #2 Token": MMRLocationData( - region="Swamphouse", - address=0x3476942006271C, - can_create=lambda options: options.skullsanity.value != 2 - ), - "Swamphouse Pottery Room Small Pot Token": MMRLocationData( - region="Swamphouse", - address=0x34769420062705, - can_create=lambda options: options.skullsanity.value != 2 - ), - "Swamphouse Pottery Room Left Large Pot Token": MMRLocationData( - region="Swamphouse", - address=0x34769420062710, - can_create=lambda options: options.skullsanity.value != 2 - ), - "Swamphouse Pottery Room Right Large Pot Token": MMRLocationData( - region="Swamphouse", - address=0x34769420062711, - can_create=lambda options: options.skullsanity.value != 2 - ), - "Swamphouse Pottery Room Behind Vines Token": MMRLocationData( - region="Swamphouse", - address=0x34769420062714, - can_create=lambda options: options.skullsanity.value != 2 - ), - "Swamphouse Pottery Room Upper Wall Token": MMRLocationData( - region="Swamphouse", - address=0x34769420062716, - can_create=lambda options: options.skullsanity.value != 2 - ), - "Swamphouse Golden Room Crawling Left Wall Token": MMRLocationData( - region="Swamphouse", - address=0x34769420062719, - can_create=lambda options: options.skullsanity.value != 2 - ), - "Swamphouse Golden Room Crawling Right Column Token": MMRLocationData( - region="Swamphouse", - address=0x34769420062704, - can_create=lambda options: options.skullsanity.value != 2 - ), - "Swamphouse Golden Room Against Far Wall Token": MMRLocationData( - region="Swamphouse", - address=0x34769420062701, - can_create=lambda options: options.skullsanity.value != 2 - ), - "Swamphouse Golden Room Beehive Token": MMRLocationData( - region="Swamphouse", - address=0x34769420062712, - can_create=lambda options: options.skullsanity.value != 2 - ), - "Swamphouse Tree Room Tall Grass #1 Token": MMRLocationData( - region="Swamphouse", - address=0x34769420062707, - can_create=lambda options: options.skullsanity.value != 2 - ), - "Swamphouse Tree Room Tall Grass #2 Token": MMRLocationData( - region="Swamphouse", - address=0x34769420062706, - can_create=lambda options: options.skullsanity.value != 2 - ), - "Swamphouse Tree Room Tree #1 Token": MMRLocationData( - region="Swamphouse", - address=0x34769420062715, - can_create=lambda options: options.skullsanity.value != 2 - ), - "Swamphouse Tree Room Tree #2 Token": MMRLocationData( - region="Swamphouse", - address=0x34769420062718, - can_create=lambda options: options.skullsanity.value != 2 - ), - "Swamphouse Tree Room Tree #3 Token": MMRLocationData( - region="Swamphouse", - address=0x3476942006271D, - can_create=lambda options: options.skullsanity.value != 2 - ), - "Swamphouse Tree Room Beehive Token": MMRLocationData( - region="Swamphouse", - address=0x3476942006271A, - can_create=lambda options: options.skullsanity.value != 2 - ), - "Swamphouse Reward": MMRLocationData( - region="Swamphouse", - address=0x3476942000008A - ), - "Southern Swamp Near Swamphouse Grotto Chest": MMRLocationData( - region="Southern Swamp (Deku Palace)", - address=0x3476942006071D - ), - "Southern Swamp Song Tablet": MMRLocationData( - region="Southern Swamp (Deku Palace)", - address=0x3476942004006A - ), - "Deku Palace HP": MMRLocationData( - region="Deku Palace", - address=0x34769420052B1E - ), - "Deku Palace Bean Grotto Chest": MMRLocationData( - region="Deku Palace", - address=0x34769420060705 - ), - "Deku Palace Monkey Song": MMRLocationData( - region="Deku Palace", - address=0x34769420040061 - ), - "Deku Palace Butler Race": MMRLocationData( - region="Southern Swamp (Deku Palace)", - address=0x3476942000008E - ), - "Woodfall Near Owl Statue Chest": MMRLocationData( - region="Woodfall", - address=0x34769420064602 - ), - "Woodfall After Great Fairy Cave Chest": MMRLocationData( - region="Woodfall", - address=0x34769420064601 - ), - "Woodfall Near Swamp Entrance Chest": MMRLocationData( - region="Woodfall", - address=0x34769420064600 - ), - "Woodfall Great Fairy Reward": MMRLocationData( - region="Woodfall", - address=0x34769420030001 - ), - "Woodfall Temple Entrance Chest": MMRLocationData( - region="Woodfall Temple", - address=0x34769420061B18 - ), - "Woodfall Temple Moving Flower Platform Room Chest": MMRLocationData( - region="Woodfall Temple", - address=0x34769420061B01 - ), - "Woodfall Temple Gagwab Chest": MMRLocationData( - region="Woodfall Temple", - address=0x34769420061B1D - ), - "Woodfall Temple Dragonfly Chest": MMRLocationData( - region="Woodfall Temple", - address=0x34769420061B1C - ), - "Woodfall Temple Black Boe Room Chest": MMRLocationData( - region="Woodfall Temple", - address=0x34769420061B19 - ), - "Woodfall Temple Wooden Flower Switch Chest": MMRLocationData( - region="Woodfall Temple", - address=0x34769420061B17 - ), - "Woodfall Temple Dinofols Chest": MMRLocationData( - region="Woodfall Temple", - address=0x34769420061B1B - ), - "Woodfall Temple Boss Key Chest": MMRLocationData( - region="Woodfall Temple", - address=0x34769420061B1E - ), - "Woodfall Temple Entrance Freestanding SF": MMRLocationData( - region="Woodfall Temple", - address=0x34769420011B2B - ), - "Woodfall Temple Wooden Flower Deku Baba SF": MMRLocationData( - region="Woodfall Temple", - address=0x34769420011B2E - ), - "Woodfall Temple Wooden Flower Pot SF": MMRLocationData( - region="Woodfall Temple", - address=0x34769420011B1C - ), - "Woodfall Temple Moving Flower Platform Room Beehive SF": MMRLocationData( - region="Woodfall Temple", - address=0x34769420011B1E - ), - "Woodfall Temple Wooden Flower Bubble SF": MMRLocationData( - region="Woodfall Temple", - address=0x34769420011B30 - ), - "Woodfall Temple Push Block Skulltula SF": MMRLocationData( - region="Woodfall Temple", - address=0x34769420011B31 - ), - "Woodfall Temple Push Block Bubble SF": MMRLocationData( - region="Woodfall Temple", - address=0x34769420011B2F - ), - "Woodfall Temple Push Block Beehive SF": MMRLocationData( - region="Woodfall Temple", - address=0x34769420011B1D - ), - "Woodfall Temple Final Room Right Lower Platform SF": MMRLocationData( - region="Woodfall Temple", - address=0x34769420011B2A - ), - "Woodfall Temple Final Room Right Upper Platform SF": MMRLocationData( - region="Woodfall Temple", - address=0x34769420011B32 - ), - "Woodfall Temple Final Room Left Upper Platform SF": MMRLocationData( - region="Woodfall Temple", - address=0x34769420011B2C - ), - "Woodfall Temple Final Room Bubble SF": MMRLocationData( - region="Woodfall Temple", - address=0x34769420011B2D - ), - "Woodfall Temple Heart Container": MMRLocationData( - region="Woodfall Temple", - address=0x34769420051F00 - ), - "Woodfall Temple Odolwa's Remains": MMRLocationData( - region="Woodfall Temple", - address=0x34769420000055 - ), - # ~ "Mountain Deku Trade": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420000099 - # ~ ), - # ~ "Ocean Deku Trade": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x3476942000009A - # ~ ), - # ~ "Mountain Deku Trade Freestanding HP": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420054D1E - # ~ ), - # ~ "Ocean Deku Trade Freestanding HP": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420054C1E - # ~ ), - # ~ "Canyon Deku Trade Freestanding HP": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x3476942005131E - # ~ ), - # ~ "Great Bay Scarecrow Ledge HP": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420053705 - # ~ ), - # ~ "Pirates' Fortress Tunnels HP": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x3476942005230C - # ~ ), - # ~ "Zora Cape Underwater Like-Like HP": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420053807 - # ~ ), - # ~ "Ikana Castle Pillar Freestanding HP": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420051D0A - # ~ ), - # ~ "Snowhead Temple Initial Runway Under Platform Bubble SF": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x3476942001212F - # ~ ), - # ~ "Snowhead Temple Initial Runway Tower Bubble SF": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420012130 - # ~ ), - # ~ "Snowhead Temple Elevator Freestanding SF": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420012132 - # ~ ), - # ~ "Snowhead Temple Grey Door Box SF": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x3476942001211E - # ~ ), - # ~ "Snowhead Temple Timed Switch Room Bubble SF": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x3476942001212C - # ~ ), - # ~ "Snowhead Temple Snowman Bubble SF": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x3476942001212B - # ~ ), - # ~ "Snowhead Temple Dinofols Room First SF": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420012131 - # ~ ), - # ~ "Snowhead Temple Dinofols Room Second SF": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x3476942001212D - # ~ ), - # ~ "Great Bay Temple Waterwheel Room Skulltula SF": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420014932 - # ~ ), - # ~ "Great Bay Temple Waterwheel Room Bubble SF": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420014930 - # ~ ), - # ~ "Great Bay Temple Blender Room Barrel SF": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x3476942001491C - # ~ ), - # ~ "Great Bay Temple Red-Green Pipe First Room SF": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x3476942001491E - # ~ ), - # ~ "Great Bay Temple Froggy Entrance Room Pot SF": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x3476942001491D - # ~ ), - # ~ "Great Bay Temple Green Pipe Lever Room Underwater Barrel SF": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x3476942001491A - # ~ ), - # ~ "Great Bay Temple SF (?)": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x3476942001492F - # ~ ), - "Road to Ikana Pillar Chest": MMRLocationData( - region="Termina Field", - address=0x34769420065300 - ), - "Road to Ikana Rock Grotto Chest": MMRLocationData( - region="Termina Field", - address=0x34769420060716 - ), - "Road to Ikana Stone Soldier": MMRLocationData( - region="Termina Field", - address=0x3476942000008B - ), - # ~ "Graveyard Day 1 Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420060C03 - # ~ ), - # ~ "Graveyard Day 2 Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420060C00 - # ~ ), - # ~ "Graveyard Day 3 Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420063000 - # ~ ), - # ~ "Graveyard Skull Keeta Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420064300 - # ~ ), - # ~ "Mountain Village Darmani": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420000079 - # ~ ), - # ~ "Great Bay Mikau": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x3476942000007A - # ~ ), - # ~ "The Moon Majora All Masks": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x3476942000007B - # ~ ), - # ~ "Ikana Canyon Pamela's Father": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420000087 - # ~ ), - # ~ "Mountain Village Hungry Goron": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420000088 - # ~ ), - # ~ "Road to Ikana Invisible Guard": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x3476942000008B - # ~ ), - # ~ "Twin Islands Ramp Grotto Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420060719 - # ~ ), - # ~ "Twin Islands Hot Water Grotto Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420060702 - # ~ ), - # ~ "Goron Village Lens Cave Rock Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420060706 - # ~ ), - # ~ "Goron Village Lens Cave Invisible Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420060703 - # ~ ), - # ~ "Goron Village Lens Cave Center Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420060701 - # ~ ), - # ~ "Snowhead Temple Initial Runway Ice Owls Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420062101 - # ~ ), - # ~ "Snowhead Temple Elevator Room Lower Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x3476942006211D - # ~ ), - # ~ "Snowhead Temple Bottom Floor Switch Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420062114 - # ~ ), - # ~ "Snowhead Temple Green Door Ice Owls Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420062118 - # ~ ), - # ~ "Snowhead Temple Orange Door Behind Block Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420062103 - # ~ ), - # ~ "Snowhead Temple Orange Door Upper Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420062115 - # ~ ), - # ~ "Snowhead Temple Grey Door Center Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x3476942006211C - # ~ ), - # ~ "Snowhead Temple Grey Door Upper Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420062119 - # ~ ), - # ~ "Snowhead Temple Upstairs 2F Icicle Room Hidden Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420062116 - # ~ ), - # ~ "Snowhead Temple Upstairs 2F Icicle Room Snowball Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420062104 - # ~ ), - # ~ "Snowhead Temple Wizzrobe Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x3476942006211E - # ~ ), - # ~ "Snowhead Temple Column Room 2F Hidden Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420062117 - # ~ ), - # ~ "Mountain Village Spring Waterfall Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420065A00 - # ~ ), - # ~ "Mountain Village Spring Ramp Grotto": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x3476942006071B - # ~ ), - # ~ "Twin Islands Spring Underwater Cave Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420065E00 - # ~ ), - # ~ "Twin Islands Spring Underwater Center Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420065E06 - # ~ ), - # ~ "Pirates' Fortress Exterior Underwater Log Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420063B00 - # ~ ), - # ~ "Pirates' Fortress Exterior Underwater Near Entrance Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420063B01 - # ~ ), - # ~ "Pirates' Fortress Exterior Underwater Corner Near Fortress Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420063B02 - # ~ ), - # ~ "Pirates' Fortress Tunnels Cage Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420062301 - # ~ ), - # ~ "Pirates' Fortress Tunnels Mines Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420062304 - # ~ ), - # ~ "Pirates' Fortress Tunnels Lower Mines Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420062306 - # ~ ), - # ~ "Pirates' Fortress Near Egg Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420062300 - # ~ ), - # ~ "Pirates' Fortress Pirates Surrounding Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420062303 - # ~ ), - # ~ "Pirates' Fortress Hub Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420061400 - # ~ ), - # ~ "Pirates' Fortress Hub Upper Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420061401 - # ~ ), - # ~ "Pirates' Fortress Leader's Room Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420062302 - # ~ ), - # ~ "Zora Cape Near Great Fairy Grotto Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420060715 - # ~ ), - # ~ "Great Bay Temple Four Torches Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420064918 - # ~ ), - # ~ "Great Bay Temple Eye Miniboss Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x3476942006491B - # ~ ), - # ~ "Great Bay Temple Red-Green Pipe First Room Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x3476942006491D - # ~ ), - # ~ "Great Bay Temple Bio-Baba Hall Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420064919 - # ~ ), - # ~ "Great Bay Temple Froggy Entrance Room Upper Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x3476942006491C - # ~ ), - # ~ "Great Bay Temple Froggy Entrance Room Underwater Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420064901 - # ~ ), - # ~ "Great Bay Temple Froggy Entrance Room Caged Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x3476942006491E - # ~ ), - # ~ "Great Bay Temple Green-Yellow Pipe Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420064915 - # ~ ), - # ~ "Great Bay Temple Green Pipe Freezable Waterwheel Upper Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420064914 - # ~ ), - # ~ "Great Bay Temple Green Pipe Freezable Waterwheel Lower Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420064917 - # ~ ), - # ~ "Great Bay Temple Green Pipe Lever Room Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420064916 - # ~ ), - # ~ "Secret Shrine Left Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420066000 - # ~ ), - # ~ "Secret Shrine Middle-Left Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420066001 - # ~ ), - # ~ "Secret Shrine Middle-Right Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420066002 - # ~ ), - # ~ "Secret Shrine Right Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420066003 - # ~ ), - # ~ "Secret Shrine Center Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x3476942006600A - # ~ ), - # ~ "Secret Shrine Grotto Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420060714 - # ~ ), - # ~ "Ikana Well Final Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420064B1B - # ~ ), - # ~ "Ikana Well Invisible Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420064B02 - # ~ ), - # ~ "Ikana Well Torch Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420064B01 - # ~ ), - # ~ "Stone Tower Inverted Outside Left Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x3476942006591F - # ~ ), - # ~ "Stone Tower Inverted Outside Middle Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x3476942006591E - # ~ ), - # ~ "Stone Tower Inverted Outside Right Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x3476942006591D - # ~ ), - # ~ "Stone Tower Temple First Room Center Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420061616 - # ~ ), - # ~ "Stone Tower Temple First Room Lower Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420061612 - # ~ ), - # ~ "Stone Tower Temple Armos Room Lava Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420061602 - # ~ ), - # ~ "Stone Tower Temple Armos Room Back Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x3476942006161D - # ~ ), - # ~ "Stone Tower Temple Armos Room Upper Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420061615 - # ~ ), - # ~ "Stone Tower Temple Eyegore Room Switch Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420061618 - # ~ ), - # ~ "Stone Tower Temple Eastern Water Room Sun Block Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x3476942006161C - # ~ ), - # ~ "Stone Tower Temple Eastern Water Room Underwater Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420061617 - # ~ ), - # ~ "Stone Tower Temple Wall Suns Room Sun Block Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x3476942006160B - # ~ ), - # ~ "Stone Tower Temple Wall Suns Room Center Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x3476942006160F - # ~ ), - # ~ "Stone Tower Temple Wall Air Gust Room Side Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420061619 - # ~ ), - # ~ "Stone Tower Temple Wall Air Gust Room End Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x3476942006160D - # ~ ), - # ~ "Stone Tower Temple Garo Master Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x3476942006161B - # ~ ), - # ~ "Stone Tower Temple After Garo Upside Down Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420061614 - # ~ ), - # ~ "Stone Tower Temple Eyegore Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x3476942006160C - # ~ ), - # ~ "Stone Tower Temple Inverted First Room Lower Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420061810 - # ~ ), - # ~ "Stone Tower Temple Inverted Eastern Air Gust Room Fire Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x3476942006180E - # ~ ), - # ~ "Stone Tower Temple Inverted Eastern Air Gust Room Snugly Tucked Cranny Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420061813 - # ~ ), - # ~ "Stone Tower Temple Inverted Eastern Air Gust Room Hall Floor Switch Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420061804 - # ~ ), - # ~ "Stone Tower Temple Inverted Wizzrobe Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420061811 - # ~ ), - # ~ "Stone Tower Temple Inverted Death Armos Maze Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x34769420061805 - # ~ ), - # ~ "Stone Tower Temple Inverted Gomess Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x3476942006181E - # ~ ), - # ~ "Stone Tower Temple Inverted Eyegore Chest": MMRLocationData( - # ~ region="Clock Town", - # ~ address=0x3476942006181A - # ~ ), - "Defeat Majora": MMRLocationData( - region="The Moon", - locked_item="Victory" - ), -} - -location_table = {name: data.address for name, data in location_data_table.items() if data.address is not None} -code_to_location_table = {data.address: name for name, data in location_data_table.items() if data.address is not None} -locked_locations = {name: data for name, data in location_data_table.items() if data.locked_item} diff --git a/worlds/mm-recomp/Options.py b/worlds/mm-recomp/Options.py deleted file mode 100644 index 99de230eb04..00000000000 --- a/worlds/mm-recomp/Options.py +++ /dev/null @@ -1,72 +0,0 @@ -from typing import Dict - -from Options import Choice, Option, Toggle, StartInventoryPool, DeathLink - - -#class HardMode(Toggle): -# """Only for the most masochistically inclined... Requires button activation!""" -# display_name = "Hard Mode" - - -#class ButtonColor(Choice): -# """Customize your button! Now available in 12 unique colors.""" -# display_name = "Button Color" -# option_red = 0 -# option_orange = 1 -# option_yellow = 2 -# option_green = 3 -# option_cyan = 4 -# option_blue = 5 -# option_magenta = 6 -# option_purple = 7 -# option_pink = 8 -# option_brown = 9 -# option_white = 10 -# option_black = 11 - - -class LogicDifficulty(Choice): - """Set the logic difficulty used when generating.""" - display_name = "Logic Difficulty" - option_easy = 0 - option_no_logic = 4 - default = 0 - - -class ShuffleSwamphouseReward(Toggle): - """Choose whether to shuffle the Mask of Truth given at the end of the Southern Swamphouse.""" - display_name = "Shuffle Swamphouse Reward" - - -class Skullsanity(Choice): - """Choose what items gold skulltulas can give. - - vanilla: Keep the swamphouse in generation, but only place Skulltula tokens there. - anything: Any item can be given by any Skulltula, and tokens can be found anywhere in any world. - ignore: Remove the swamphouse from generation entirely, lowering the hint percentage.""" - display_name = "Skullsanity" - option_vanilla = 0 - option_anything = 1 - option_ignore = 2 - default = 0 - - -class ShuffleGreatFairyRewards(Toggle): - """Choose whether to shuffle Great Fairy rewards.""" - display_name = "Shuffle Great Fairy Rewards" - - -class Fairysanity(Toggle): - """Choose whether Stray Fairies are shuffled into the pool.""" - display_name = "Fairysanity" - - -mmr_options: Dict[str, type(Option)] = { - "start_inventory_from_pool": StartInventoryPool, - "logic_difficulty": LogicDifficulty, - "shuffle_swamphouse_reward": ShuffleSwamphouseReward, - "skullsanity": Skullsanity, - "shuffle_great_fairy_rewards": ShuffleGreatFairyRewards, - "fairysanity": Fairysanity, - "death_link": DeathLink -} diff --git a/worlds/mm-recomp/Regions.py b/worlds/mm-recomp/Regions.py deleted file mode 100644 index f1d33ea5609..00000000000 --- a/worlds/mm-recomp/Regions.py +++ /dev/null @@ -1,53 +0,0 @@ -from typing import NamedTuple, Callable, List, Dict -from BaseClasses import CollectionState - - -class MMRRegionData(NamedTuple): - connecting_regions: List[str] = [] - - -region_data_table: Dict[str, MMRRegionData] = { - "Menu": MMRRegionData(["Clock Town"]), - "Clock Town": MMRRegionData(["Termina Field", "The Moon"]), - "The Moon": MMRRegionData([]), - "Termina Field": MMRRegionData(["Southern Swamp", "Romani Ranch", "Path to Mountain Village", "Great Bay", "Road to Ikana"]), - "Southern Swamp": MMRRegionData(["Southern Swamp (Deku Palace)"]), - "Romani Ranch": MMRRegionData([]), - "Southern Swamp (Deku Palace)": MMRRegionData(["Swamphouse", "Deku Palace", "Woodfall"]), - "Swamphouse": MMRRegionData([]), - "Deku Palace": MMRRegionData([]), - "Woodfall": MMRRegionData(["Woodfall Temple"]), - "Woodfall Temple": MMRRegionData([]), - "Path to Mountain Village": MMRRegionData(["Mountain Village"]), - "Mountain Village": MMRRegionData(["Twin Islands", "Path to Snowhead"]), - "Twin Islands": MMRRegionData(["Goron Village"]), - "Goron Village": MMRRegionData(["Goron Shrine"]), - "Goron Shrine": MMRRegionData([]), - "Path to Snowhead": MMRRegionData(["Snowhead Temple"]), - "Snowhead Temple": MMRRegionData([]), - "Great Bay": MMRRegionData(["Ocean Spider House", "Pirates' Fortress", "Pinnacle Rock", "Zora Cape"]), - "Ocean Spider House": MMRRegionData([]), - "Pirates' Fortress (Exterior)": MMRRegionData(["Pirates' Fortress Sewers", "Pirates' Fortress"]), - "Pirates' Fortress Sewers": MMRRegionData(["Pirates' Fortress"]), - "Pirates' Fortress": MMRRegionData([]), - "Pinnacle Rock": MMRRegionData([]), - "Zora Cape": MMRRegionData(["Zora Hall", "Great Bay Temple"]), - "Zora Hall": MMRRegionData([]), - "Great Bay Temple": MMRRegionData([]), - "Road to Ikana": MMRRegionData(["Ikana Graveyard", "Ikana Canyon"]), - "Ikana Graveyard": MMRRegionData([]), - "Ikana Canyon": MMRRegionData(["Secret Shrine", "Beneath the Well", "Ikana Castle", "Stone Tower"]), - "Secret Shrine": MMRRegionData([]), - "Beneath the Well": MMRRegionData(["Ikana Castle"]), - "Ikana Castle": MMRRegionData(["Inside Ikana Castle"]), - "Inside Ikana Castle": MMRRegionData([]), - "Stone Tower": MMRRegionData(["Stone Tower Temple", "Stone Tower (Inverted)"]), - "Stone Tower Temple": MMRRegionData([]), - "Stone Tower (Inverted)": MMRRegionData(["Stone Tower Temple (Inverted)"]), - "Stone Tower Temple (Inverted)": MMRRegionData([]), -} - -def get_exit(region, exit_name): - for exit in region.exits: - if exit.connected_region.name == exit_name: - return exit diff --git a/worlds/mm-recomp/Rules.py b/worlds/mm-recomp/Rules.py deleted file mode 100644 index 0af5bee8bd3..00000000000 --- a/worlds/mm-recomp/Rules.py +++ /dev/null @@ -1,569 +0,0 @@ -from typing import Callable, Dict - -from BaseClasses import CollectionState, MultiWorld - -def universal_item_rule(item): - pass - -def can_play_song(song, state, player): - return state.has(song, player) and state.has("Ocarina of Time", player) - -def can_get_magic_beans(state, player): - return state.has("Magic Bean", player) or (state.has("Deku Mask", player) and state.can_reach("Deku Palace", 'Region', player)) - -def has_bombchus(state, player): - return state.has("Bombchu (1)", player) or state.has("Bombchu (5)", player) or state.has("Bombchu (10)", player) - -def has_explosives(state, player): - return state.has("Progressive Bomb Bag", player) or has_bombchus(state, player) - -def has_projectiles(state, player): - return state.has("Progressive Bow", player) or (state.has("Deku Mask", player) and state.has("Progressive Magic Upgrade", player)) or state.has("Zora Mask", player) or state.has("Hookshot", player) - -def can_smack_hard(state, player): - return state.has("Progressive Sword", player) or state.has("Fierce Deity's Mask", player) or state.has("Great Fairy Sword", player) or state.has("Goron Mask", player) or state.has("Zora Mask", player) - -def can_smack(state, player): - return can_smack_hard(state, player) or state.has("Deku Mask", player) - -def can_clear_woodfall(state, player): - return state.can_reach("Woodfall Temple Odolwa's Remains", 'Location', player) - -def can_clear_snowhead(state, player): - return state.can_reach("Snowhead Temple Goht's Remains", 'Location', player) - -def can_clear_greatbay(state, player): - return state.can_reach("Great Bay Temple Gyorg's Remains", 'Location', player) - -def can_clear_stonetower(state, player): - return state.can_reach("Stone Tower Temple Twinmold's Remains", 'Location', player) - -def has_paper(state, player): - return state.has("Land Title Deed", player) or state.has("Swamp Title Deed", player) or state.has("Mountain Title Deed", player) or state.has("Ocean Title Deed", player) or state.has("Letter to Kafei", player) or state.has("Priority Mail", player) - -def has_bottle(state, player): - return state.has("Bottle", player) or state.has("Bottle of Chateau Romani", player) or state.has("Bottle of Red Potion", player) - -def can_plant_beans(state, player): - return can_get_magic_beans(state, player) and (has_bottle(state, player) or can_play_song("Song of Storms", state, player)) - -def can_use_powder_keg(state, player): - return state.has("Powder Keg", player) and state.has("Goron Mask", player) - -def can_use_magic_arrow(item, state, player): - return state.has(item, player) and state.has("Progressive Bow", player) and state.has("Progressive Magic Upgrade", player) - -def can_use_fire_arrows(state, player): - return can_use_magic_arrow("Fire Arrow", state, player) - -def can_use_ice_arrows(state, player): - return can_use_magic_arrow("Ice Arrow", state, player) - -def can_use_light_arrows(state, player): - return can_use_magic_arrow("Light Arrow", state, player) - -def has_gilded_sword(state, player): - return state.has("Progressive Sword", player, 3) - -def get_region_rules(player): - return { - "Clock Town -> The Moon": - lambda state: state.has("Ocarina of Time", player) and state.has("Oath to Order", player) and state.has("Odolwa's Remains", player) and state.has("Goht's Remains", player) and state.has("Gyorg's Remains", player) and state.has("Twinmold's Remains", player), - "Southern Swamp -> Southern Swamp (Deku Palace)": - lambda state: state.has("Bottle of Red Potion", player) or (has_projectiles(state, player) and state.has("Deku Mask", player)), # or state.has("Pictograph Box", player) - "Southern Swamp (Deku Palace) -> Swamphouse": - lambda state: state.has("Deku Mask", player) and can_use_fire_arrows(state, player), - "Southern Swamp (Deku Palace) -> Deku Palace": - lambda state: state.has("Deku Mask", player), - "Southern Swamp (Deku Palace) -> Woodfall": - lambda state: state.has("Deku Mask", player), - "Woodfall -> Woodfall Temple": - lambda state: can_play_song("Sonata of Awakening", state, player), - "Termina Field -> Path to Mountain Village": - lambda state: state.has("Progressive Bow", player), - "Path to Mountain Village -> Mountain Village": - lambda state: state.has("Goron Mask", player) or has_explosives(state, player) or can_use_fire_arrows(state, player), - "Path to Snowhead -> Snowhead Temple": - lambda state: state.has("Goron Mask", player) and can_play_song("Goron's Lullaby", state, player) and state.has("Progressive Magic Upgrade", player), - # ~ "Termina Field -> Great Bay": - # ~ lambda state: can_play_song("Epona's Song", state, player), - # ~ "Great Bay -> Ocean Spider House": - # ~ lambda state: has_explosives(state, player), - # ~ "Great Bay -> Pirates' Fortress": - # ~ lambda state: state.has("Zora Mask", state, player), - # ~ "Pirates' Fortress -> Pirates' Fortress (Interior)": - # ~ lambda state: state.has("Goron Mask", state, player) or state.has("Hookshot", player), - # ~ "Zora Cape -> Great Bay Temple": - # ~ lambda state: can_play_song("New Wave Bossa Nova", state, player) and state.has("Hookshot", player) and state.has("Zora Mask", state, player), - # ~ "Termina Field -> Ikana Graveyard": - # ~ lambda state: can_play_song("Epona's Song", state, player), - # ~ "Termina Field -> Ikana Canyon": - # ~ lambda state: can_play_song("Epona's Song", state, player) and state.has("Hookshot", player) and (state.has("Garo Mask", player) or state.has("Gibdo Mask", player)), - # ~ "Ikana Canyon -> Secret Shrine": - # ~ lambda state: can_use_light_arrows(state, player), - # ~ "Ikana Canyon -> Beneath the Well": - # ~ lambda state: can_use_ice_arrows(state, player) and state.has("Gibdo Mask", state, player) and has_bottle(state, player), - # ~ "Ikana Canyon -> Ikana Castle": - # ~ lambda state: can_use_ice_arrows(state, player) and (can_use_light_arrows(state, player) or (state.has("Gibdo Mask", state, player) and state.has("Mirror Shield", player) and has_bottle(state, player))), - # ~ "Ikana Canyon -> Stone Tower Temple": - # ~ lambda state: can_use_ice_arrows(state, player) and can_play_song("Elegy of Emptiness", state, player) and state.has("Goron Mask", player) and state.has("Zora Mask", player), - # ~ "Stone Tower Temple -> Stone Tower Temple (Inverted)": - # ~ lambda state: can_use_light_arrows(state, player), - } - -def get_location_rules(player): - return { - "Keaton Quiz": - lambda state: state.has("Keaton Mask", player), - "Clock Tower Happy Mask Salesman #1": - lambda state: state.has("Ocarina of Time", player), - "Clock Tower Happy Mask Salesman #2": - lambda state: state.has("Ocarina of Time", player), - "Clock Town Postbox": - lambda state: state.has("Postman's Hat", player), - "Clock Town Hide-and-Seek": - lambda state: has_projectiles(state, player), - "Laundry Pool Kafei's Request": - lambda state: state.has("Letter to Kafei", player), - "Laundry Pool Curiosity Shop Salesman #1": - lambda state: state.has("Letter to Kafei", player), - "Laundry Pool Curiosity Shop Salesman #2": - lambda state: state.has("Letter to Kafei", player), - "South Clock Town Corner Chest": - lambda state: state.has("Hookshot", player), - "South Clock Town Final Day Tower Chest": - lambda state: state.has("Hookshot", player) or (state.has("Deku Mask", player) and state.has("Moon's Tear", player)), - "East Clock Town Mayor Dotour": - lambda state: state.has("Couple's Mask", player), - "East Clock Town Shooting Gallery 40-49 Points": - lambda state: state.has("Progressive Bow", player), - "East Clock Town Shooting Gallery Perfect 50 Points": - lambda state: state.has("Progressive Bow", player), - "East Clock Town Honey and Darling Any Day": - lambda state: state.has("Progressive Bow", player) or state.has("Progressive Bomb Bag", player) or has_bombchus(state, player), - "East Clock Town Honey and Darling All Days": - lambda state: state.has("Progressive Bow", player) and state.has("Progressive Bomb Bag", player) and has_bombchus(state, player), - "East Clock Town Treasure Game Chest": - lambda state: state.has("Goron Mask", player), - "East Clock Town Sewer Chest": - lambda state: state.can_reach("Clock Town Hide-and-Seek", 'Location', player) and has_explosives(state, player), - "East Clock Town Astral Observatory": - lambda state: has_projectiles(state, player), - "North Clock Town Deku Playground Any Day": - lambda state: state.has("Deku Mask", player), - "North Clock Town Deku Playground All Days": - lambda state: state.has("Deku Mask", player), - "North Clock Town Old Lady": - lambda state: state.has("Progressive Sword", player) or state.has("Great Fairy Sword", player), - "North Clock Town Great Fairy Reward (Has Transformation Mask)": - lambda state: state.has("Stray Fairy (Clock Town)", player) and (state.has("Deku Mask", player) or state.has("Goron Mask", player) or state.has("Zora Mask", player)), - "North Clock Town Great Fairy Reward": - lambda state: state.has("Stray Fairy (Clock Town)", player), - "West Clock Town Swordsman Expert Course": - lambda state: state.has("Progressive Sword", player), - "West Clock Town Postman Counting": - lambda state: state.has("Bunny Hood", player), - "West Clock Town Rosa Sisters": - lambda state: state.has("Kamaro Mask", player), - "West Clock Town Bank 200 Rupees": - lambda state: state.has("Progressive Sword", player) and state.has("Progressive Wallet", player), - "West Clock Town Bank 1000 Rupees": - lambda state: state.has("Fierce Deity's Mask", player) and state.has("Great Fairy Sword", player) and state.has("Progressive Wallet", player, 2), - "West Clock Town Priority Mail to Postman": - lambda state: state.has("Priority Mail", player), - "Moon's Tear Trade": - lambda state: state.has("Moon's Tear", player), - "Top of Clock Tower (Ocarina of Time)": - lambda state: has_projectiles(state, player), - "Top of Clock Tower (Song of Time)": - lambda state: has_projectiles(state, player), - "Stock Pot Inn Midnight Meeting": - lambda state: state.has("Kafei's Mask", player), - "Stock Pot Inn Knife Chamber Chest": - lambda state: state.has("Room Key", player), - "Stock Pot Inn ??? Hand": - lambda state: has_paper(state, player), - "Stock Pot Inn Granny Story #1": - lambda state: state.has("All-Night Mask", player), - "Stock Pot Inn Granny Story #2": - lambda state: state.has("All-Night Mask", player), - "Stock Pot Inn Anju and Kafei": - lambda state: state.has("Kafei's Mask", player) and can_play_song("Epona's Song", state, player) and state.has("Letter to Kafei", player) and state.has("Pendant of Memories", player) and state.has("Hookshot", player) and (state.has("Garo Mask", player) or state.has("Gibdo Mask", player)), - "Milk Bar Show": - lambda state: state.has("Romani Mask", player) and state.has("Deku Mask", player) and state.has("Goron Mask", player) and state.has("Zora Mask", player) and state.has("Ocarina of Time", player), - "Milk Bar Priority Mail to Aroma": - lambda state: state.has("Romani Mask", player) and state.has("Kafei's Mask", player) and state.has("Priority Mail", player), - - - "Termina Stump Chest": - lambda state: state.has("Hookshot", player) or can_plant_beans(state, player), - "Termina Underwater Chest": - lambda state: state.has("Zora Mask", player), - "Termina Peahat Grotto Chest": - lambda state: can_smack_hard(state, player), - "Termina Dodongo Grotto Chest": - lambda state: can_smack_hard(state, player), - "Termina Kamaro": - lambda state: state.has("Ocarina of Time", player) and state.has("Song of Healing", player), - "Milk Road Gorman Ranch Race": - lambda state: state.has("Ocarina of Time", player) and state.has("Epona's Song", player), - "Road to Swamp Tree HP": - lambda state: has_projectiles(state, player), - - - "Romani Ranch Grog": - lambda state: state.has("Bremen Mask", player), - # ~ "Romani Ranch Helping Cremia": - # ~ lambda state: can_use_powder_keg(state, player) and state.has("Progressive Bow", player), - - - "Southern Swamp Deku Trade": - lambda state: state.has("Land Title Deed", player), - "Southern Swamp Deku Trade Freestanding HP": - lambda state: state.has("Land Title Deed", player) and state.has("Deku Mask", player), - "Southern Swamp Koume Tour Gift": - lambda state: state.has("Bottle of Red Potion", player), - "Southern Swamp Near Swamphouse Grotto Chest": - lambda state: state.has("Deku Mask", player), - "Southern Swamp Song Tablet": - lambda state: state.has("Deku Mask", player), - - - "Swamphouse First Room Pot Near Entrance Token": - lambda state: can_smack(state, player), - "Swamphouse First Room Crawling In Water Token": - lambda state: can_smack(state, player), - "Swamphouse First Room Crawling Right Column Token": - lambda state: can_smack(state, player) and state.has("Hookshot", player), - "Swamphouse First Room Crawling Left Column Token": - lambda state: can_smack(state, player) and state.has("Hookshot", player), - "Swamphouse First Room Against Far Wall Token": - lambda state: can_smack(state, player) and state.has("Hookshot", player) and can_plant_beans(state, player), - "Swamphouse First Room Left Bugpatch Token": - lambda state: can_smack(state, player) and has_bottle(state, player), - "Swamphouse First Room Right Bugpatch Token": - lambda state: can_smack(state, player) and has_bottle(state, player), - "Swamphouse First Room Upper Right Bugpatch Token": - lambda state: can_smack(state, player) and has_bottle(state, player), - "Swamphouse Monument Room Left Crate Token": - lambda state: can_smack(state, player), - "Swamphouse Monument Room Right Crate Token": - lambda state: can_smack(state, player), - "Swamphouse Monument Room Crawling Wall Token": - lambda state: can_smack(state, player) and state.has("Hookshot", player) and can_plant_beans(state, player), - "Swamphouse Monument Room Crawling On Monument Token": - lambda state: can_smack(state, player) and state.has("Hookshot", player) and can_plant_beans(state, player), - "Swamphouse Monument Room Behind Torch Token": - lambda state: can_smack(state, player), - "Swamphouse Pottery Room Beehive #1 Token": - lambda state: can_smack(state, player) and has_projectiles(state, player), - "Swamphouse Pottery Room Beehive #2 Token": - lambda state: can_smack(state, player) and has_projectiles(state, player), - "Swamphouse Pottery Room Small Pot Token": - lambda state: can_smack(state, player), - "Swamphouse Pottery Room Left Large Pot Token": - lambda state: can_smack(state, player), - "Swamphouse Pottery Room Right Large Pot Token": - lambda state: can_smack(state, player), - "Swamphouse Pottery Room Behind Vines Token": - lambda state: can_smack_hard(state, player), - "Swamphouse Pottery Room Upper Wall Token": - lambda state: can_smack(state, player) and can_play_song("Sonata of Awakening", state, player) and state.has("Deku Mask", player) and state.has("Hookshot", player), - "Swamphouse Golden Room Crawling Left Wall Token": - lambda state: can_smack(state, player) and state.has("Hookshot", player) and can_play_song("Sonata of Awakening", state, player) and state.has("Deku Mask", player), - "Swamphouse Golden Room Crawling Right Column Token": - lambda state: can_smack(state, player) and state.has("Hookshot", player), - "Swamphouse Golden Room Against Far Wall Token": - lambda state: can_smack(state, player) and state.has("Hookshot", player) and can_plant_beans(state, player), - "Swamphouse Golden Room Beehive Token": - lambda state: can_smack(state, player) and has_projectiles(state, player), - "Swamphouse Tree Room Tall Grass #1 Token": - lambda state: can_smack(state, player), - "Swamphouse Tree Room Tall Grass #2 Token": - lambda state: can_smack(state, player), - "Swamphouse Tree Room Tree #1 Token": - lambda state: can_smack(state, player), - "Swamphouse Tree Room Tree #2 Token": - lambda state: can_smack(state, player), - "Swamphouse Tree Room Tree #3 Token": - lambda state: can_smack(state, player), - "Swamphouse Tree Room Beehive Token": - lambda state: can_smack(state, player) and has_projectiles(state, player), - "Southern Swamp Swamphouse Reward": - lambda state: state.has("Swamp Skulltula Token", player, 30), - - - "Deku Palace Bean Grotto Chest": - lambda state: can_plant_beans(state, player) or state.has("Hookshot", player), - "Sonata of Awakening": - lambda state: state.has("Ocarina of Time", player) and can_plant_beans(state, player), - "Deku Palace Butler Race": - lambda state: can_clear_woodfall(state, player) and has_bottle(state, player), - - - "Woodfall Great Fairy Reward": - lambda state: state.has("Stray Fairy (Woodfall)", player, 15), - - - "Woodfall Temple Dragonfly Chest": - lambda state: state.has("Small Key (Woodfall)", player), - "Woodfall Temple Black Boe Room Chest": - lambda state: state.has("Small Key (Woodfall)", player), - "Woodfall Temple Wooden Flower Switch Chest": - lambda state: state.has("Progressive Bow", player), - "Woodfall Temple Dinofols Chest": - lambda state: state.has("Progressive Bow", player) and can_smack_hard(state, player), - "Woodfall Temple Boss Key Chest": - lambda state: state.has("Progressive Bow", player), - "Woodfall Temple Wooden Flower Bubble SF": - lambda state: state.has("Progressive Bow", player), - "Woodfall Temple Moving Flower Platform Room Beehive SF": - lambda state: has_projectiles(state, player) and state.has("Great Fairy Mask", player), - "Woodfall Temple Push Block Skulltula SF": - lambda state: state.has("Small Key (Woodfall)", player) and can_smack_hard(state, player), - "Woodfall Temple Push Block Bubble SF": - lambda state: state.has("Small Key (Woodfall)", player) and has_projectiles(state, player) and state.has("Great Fairy Mask", player), - "Woodfall Temple Push Block Beehive SF": - lambda state: state.has("Small Key (Woodfall)", player) and has_projectiles(state, player) and state.has("Great Fairy Mask", player), - "Woodfall Temple Final Room Right Lower Platform SF": - lambda state: state.has("Progressive Bow", player), - "Woodfall Temple Final Room Right Upper Platform SF": - lambda state: state.has("Progressive Bow", player), - "Woodfall Temple Final Room Left Upper Platform SF": - lambda state: state.has("Progressive Bow", player), - "Woodfall Temple Final Room Bubble SF": - lambda state: state.has("Progressive Bow", player) and state.has("Great Fairy Mask", player), - "Woodfall Temple Heart Container": - lambda state: state.has("Progressive Bow", player) and (state.has("Boss Key (Woodfall)", player) or state.has("Odolwa's Remains", player)), - "Woodfall Temple Odolwa's Remains": - lambda state: state.has("Progressive Bow", player) and (state.has("Boss Key (Woodfall)", player) or state.has("Odolwa's Remains", player)), - - - "Mountain Village Darmani": - lambda state: state.has("Lens of Truth", player) and state.has("Progressive Magic Upgrade", player) and can_play_song("Song of Healing", state, player), - "Mountain Village Hungry Goron": - lambda state: state.has("Goron Mask", player) and can_use_fire_arrows(state, player), - "Mountain Village Spring Ramp Grotto": - lambda state: state.has("Hookshot", player) or can_clear_snowhead(state, player), - - - "Twin Islands Ramp Grotto Chest": - lambda state: has_explosives(state, player) and (state.has("Goron Mask", player) or state.has("Hookshot", player)), - "Twin Islands Hot Water Grotto Chest": - lambda state: has_explosives(state, player) and ((can_use_fire_arrows(state, player) or state.can_reach("Mountain Village Darmani", 'Location', player)) or can_clear_snowhead(state, player)), - "Twin Islands Spring Underwater Cave Chest": - lambda state: state.has("Zora Mask", player) and can_clear_snowhead(state, player), - "Twin Islands Spring Underwater Center Chest": - lambda state: state.has("Zora Mask", player) and can_clear_snowhead(state, player), - - - "Goron Village Lens Cave Rock Chest": - lambda state: has_explosives(state, player), - "Goron's Lullaby": - lambda state: state.has("Goron Mask", player) and (state.can_reach("Mountain Village Darmani", 'Location', player) or can_use_fire_arrows(state, player)), - "Mountain Title Deed": - lambda state: state.has("Deku Mask", player) and state.has("Swamp Title Deed", player), - "Goron Village Freestanding HP": - lambda state: state.can_reach("Mountain Title Deed", 'Location', player), - - - "Snowhead Temple Initial Runway Under Platform Bubble SF": - lambda state: state.has("Great Fairy Mask", player) and state.has("Progressive Bow", player), - "Snowhead Temple Initial Runway Tower Bubble SF": - lambda state: state.has("Great Fairy Mask", player) and state.has("Progressive Bow", player) and state.has("Lens of Truth", player), - "Snowhead Temple Grey Door Box SF": - lambda state: state.has("Small Key (Snowhead)", player) and state.has("Great Fairy Mask", player) and has_explosives(state, player), - "Snowhead Temple Timed Switch Room Bubble SF": - lambda state: state.has("Small Key (Snowhead)", player) and state.has("Great Fairy Mask", player) and state.has("Progressive Bow", player) and state.has("Lens of Truth", player) and has_explosives(state, player), - "Snowhead Temple Eenos Bubble SF": - lambda state: state.has("Small Key (Snowhead)", player) and state.has("Great Fairy Mask", player) and state.has("Progressive Bow", player) and has_explosives(state, player), - "Snowhead Temple Dinolfols Room First SF": - lambda state: state.has("Small Key (Snowhead)", player) and has_explosives(state, player) and can_use_fire_arrows(state, player), - "Snowhead Temple Dinolfols Room Second SF": - lambda state: state.has("Small Key (Snowhead)", player) and has_explosives(state, player) and can_use_fire_arrows(state, player), - "Snowhead Temple Initial Runway Freezards Chest": - lambda state: can_use_fire_arrows(state, player), - "Snowhead Temple Green Door Freezards Chest": - lambda state: can_use_fire_arrows(state, player), - "Snowhead Temple Orange Door Upper Chest": - lambda state: state.has("Hookshot", player) or (state.has("Small Key (Snowhead)", player) and can_use_fire_arrows(state, player)), - "Snowhead Temple Grey Door Center Chest": - lambda state: state.has("Small Key (Snowhead)", player), - "Snowhead Temple Grey Door Upper Chest": - lambda state: state.has("Small Key (Snowhead)", player) and can_use_fire_arrows(state, player), - "Snowhead Temple Upstairs 2F Icicle Room Hidden Chest": - lambda state: state.has("Small Key (Snowhead)", player) and state.has("Lens of Truth", player) and has_explosives(state, player), - "Snowhead Temple Upstairs 2F Icicle Room Snowball Chest": - lambda state: state.has("Small Key (Snowhead)", player) and state.has("Progressive Bow", player) and has_explosives(state, player), - "Snowhead Temple Elevator Room Invisible Platform Chest": - lambda state: state.has("Lens of Truth", player) and (can_use_fire_arrows(state, player) or (state.has("Small Key (Snowhead)", player) and has_explosives(state, player))), - "Snowhead Temple Wizzrobe Chest": - lambda state: state.has("Small Key (Snowhead)", player) and has_explosives(state, player), - "Snowhead Temple Column Room 2F Hidden Chest": - lambda state: state.has("Small Key (Snowhead)", player) and state.has("Lens of Truth", state, player) and has_explosives(state, player) and (state.has("Hookshot", player) or (state.has("Deku Mask", player) and can_use_fire_arrows(state, player))), - "Snowhead Temple Boss Key Chest": - lambda state: state.has("Small Key (Snowhead)", player) and can_use_fire_arrows(state, player) and has_explosives(state, player), - "Snowhead Temple Heart Container": - lambda state: can_use_fire_arrows(state, player) and ((state.has("Boss Key (Snowhead)", player) and state.has("Small Key (Snowhead)", player) and has_explosives(state, player)) or state.has("Goht's Remains", player)), - "Snowhead Temple Goht's Remains": - lambda state: can_use_fire_arrows(state, player) and ((state.has("Boss Key (Snowhead)", player) and state.has("Small Key (Snowhead)", player) and has_explosives(state, player)) or state.has("Goht's Remains", player)), - - - # ~ "Great Bay Scarecrow Ledge HP": - # ~ lambda state: state.has("Hookshot", player) and can_plant_beans(state, player), - # ~ "Great Bay Mikau": - # ~ lambda state: state.can_play_song("Song of Healing", state, player), - # ~ "New Wave Bossa Nova": - # ~ lambda state: state.has("Zora Mask", player) and state.has("Progressive Magic Upgrade", state, player) and has_bottle(state, player), - - - # ~ "Pirates' Fortress Tunnels HP": - # ~ lambda state: state.has("Goron's Mask", player), - # ~ "Pirates' Fortress Tunnels Cage Chest": - # ~ lambda state: state.has("Goron's Mask", player), - # ~ "Pirates' Fortress Tunnels Mines Chest": - # ~ lambda state: state.has("Goron's Mask", player), - # ~ "Pirates' Fortress Tunnels Lower Mines Chest": - # ~ lambda state: state.has("Goron's Mask", player), - # ~ "Pirates' Fortress Near Egg Chest": - # ~ lambda state: state.has("Goron's Mask", player) or state.has("Hookshot", player), - # ~ "Pirates' Fortress Pirates Surrounding Chest": - # ~ lambda state: has_projectiles(state, player), - # ~ "Pirates' Fortress Hub Chest": - # ~ lambda state: state.has("Goron's Mask", player) or state.has("Hookshot", player), - # ~ "Pirates' Fortress Hub Upper Chest": - # ~ lambda state: state.has("Hookshot", player), - # ~ "Pirates' Fortress Leader's Room Chest": - # ~ lambda state: state.has("Hookshot", player), - - - # ~ "Zora Cape Near Great Fairy Grotto Chest": - # ~ lambda state: state.has("Goron Mask", player) or has_explosives(state, player), - # ~ "Zora Cape Underwater Like-Like HP": - # ~ lambda state: state.has("Zora Mask", player), - - - # ~ "Great Bay Temple Gekko Entrance Room Pot SF": - # ~ lambda state: state.has("Great Fairy Mask", player), - # ~ "Great Bay Temple Green Pipe Lever Room Underwater Barrel SF": - # ~ lambda state: can_use_ice_arrows(state, player), - # ~ "Great Bay Temple Four Torches Chest": - # ~ lambda state: can_use_fire_arrows(state, player), - # ~ "Great Bay Temple Wart Chest": - # ~ lambda state: state.has("Progressive Bow", player), - # ~ "Great Bay Temple Gekko Entrance Room Caged Chest": - # ~ lambda state: can_use_ice_arrows(state, player) and can_use_fire_arrows(state, player), - # ~ "Great Bay Temple Red-Green Pipe First Room Chest": - # ~ lambda state: can_use_ice_arrows(state, player), - # ~ "Great Bay Temple Green-Yellow Pipe Chest": - # ~ lambda state: can_use_ice_arrows(player, state), - # ~ "Great Bay Temple Green Pipe Freezable Waterwheel Upper Chest": - # ~ lambda state: can_use_ice_arrows(state, player), - # ~ "Great Bay Temple Green Pipe Freezable Waterwheel Lower Chest": - # ~ lambda state: can_use_ice_arrows(state, player), - # ~ "Great Bay Temple Green Pipe Lever Room Chest": - # ~ lambda state: can_use_ice_arrows(state, player) and can_use_fire_arrows(state, player), - # ~ "Great Bay Temple Heart Container": - # ~ lambda state: (can_use_ice_arrows(state, player) and can_use_fire_arrows(state, player) and state.has("Small Key (Great Bay Temple)", player) and state.has("Boss Key (Great Bay Temple)", player)) or (state.has("Gyorg's Remains", player) and state.has("Progressive Bow", player)), - # ~ "Great Bay Temple Gyorg's Remains": - # ~ lambda state: (can_use_ice_arrows(state, player) and can_use_fire_arrows(state, player) and state.has("Small Key (Great Bay Temple)", player) and state.has("Boss Key (Great Bay Temple)", player)) or (state.has("Gyorg's Remains", player) and state.has("Progressive Bow", player)), - - - # ~ "Road to Ikana Pillar Chest": - # ~ lambda state: state.has("Hookshot", player), - # ~ "Road to Ikana Rock Grotto Chest": - # ~ lambda state: state.has("Goron Mask", player), - # ~ "Road to Ikana Stone Soldier": - # ~ lambda state: can_play_song("Epona's Song", state, player) and has_bottle(state, player) and state.has("Progressive Magic Upgrade", player) and state.has("Lens of Truth", player), - - - # ~ "Graveyard Day 1 Chest": - # ~ lambda state: state.has("Captain's Hat", player) and can_smack_hard(state, player), - # ~ "Graveyard Day 2 Chest": - # ~ lambda state: state.has("Captain's Hat", player) and can_smack_hard(state, player) and has_explosives(state, player), - # ~ "Graveyard Day 3 Chest": - # ~ lambda state: state.has("Captain's Hat", player) and (can_smack_hard(state, player) or has_projectiles(state, player)), - # ~ "Graveyard Skull Keeta Chest": - # ~ lambda state: can_play_song("Sonata of Awakening", state, player) and can_smack_hard(state, player), - # ~ "Song of Storms": - # ~ lambda state: state.has("Captain's Hat", player) and can_smack_hard(state, player) and can_use_fire_arrows(state, player), - - # ~ "Ikana Canyon Pamela's Father": - # ~ lambda state: can_play_song("Song of Healing", state, player) and can_play_song("Song of Storms", state, player) and (has_explosives(state, player) or state.has("Stone Mask", player,)), - - - # ~ "Secret Shrine Left Chest": - # ~ lambda state: can_smack_hard(state, player), - # ~ "Secret Shrine Middle-Left Chest": - # ~ lambda state: can_smack_hard(state, player) and has_projectiles(state, player), - # ~ "Secret Shrine Middle-Right Chest": - # ~ lambda state: can_smack_hard(state, player) and has_projectiles(state, player), - # ~ "Secret Shrine Right Chest": - # ~ lambda state: can_smack_hard(state, player), - # ~ "Secret Shrine Center Chest": - # ~ lambda state: state.can_reach("Secret Shrine Left Chest", 'Location', player) and state.can_reach("Secret Shrine Middle-Left Chest", 'Location', player) and state.can_reach("Secret Shrine Middle-Right Chest", 'Location', player) and state.can_reach("Secret Shrine Right Chest", 'Location', player), - - - # ~ "Beneath the Well Torch Chest": - # ~ lambda state: has_bottle(state, player), - # ~ "Beneath the Well Invisible Chest": - # ~ lambda state: has_bottle(state, player) and can_plant_beans(state, player), - # ~ "Beneath the Well Final Chest": - # ~ lambda state: can_use_light_arrows(state, player) or (has_bottle(state, player) and can_plant_beans(state, player)), - - - # ~ "Ikana Castle Pillar Freestanding HP": - # ~ lambda state: state.has("Deku Mask", player) and state.has("Lens of Truth", state, player) and can_use_fire_arrows(state, player), - - - # ~ "Stone Tower Inverted Outside Left Chest": - # ~ lambda state: can_plant_beans(state, player), - # ~ "Stone Tower Inverted Outside Middle Chest": - # ~ lambda state: can_plant_beans(state, player), - # ~ "Stone Tower Inverted Outside Right Chest": - # ~ lambda state: can_plant_beans(state, player), - - - # ~ "Stone Tower Temple Armos Room Back Chest": - # ~ lambda state: can_use_light_arrows(state, player) or (state.has("Mirror Shield", player) and has_explosives(state, player)), - # ~ "Stone Tower Temple Eyegore Room Switch Chest": - # ~ lambda state: can_use_light_arrows(state, player) and (has_explosives(state, player) or state.has("Great Spin Attack", player)), - # ~ "Stone Tower Temple Eastern Water Room Sun Block Chest": - # ~ lambda state: can_use_light_arrows(state, player) or state.has("Mirror Shield", player), - # ~ "Stone Tower Temple Wall Suns Room Sun Block Chest": - # ~ lambda state: state.has("Small Key (Stone Tower Temple)", state, player) and (can_use_light_arrows(state, player) or state.has("Mirror Shield", player)), - # ~ "Stone Tower Temple Wall Suns Room Center Chest" - # ~ lambda state: state.has("Small Key (Stone Tower Temple)", state, player), and (can_use_light_arrows(state, player) or state.has("Mirror Shield", player)), - # ~ "Stone Tower Temple Wall Air Gust Room Side Chest": - # ~ lambda state: state.has("Small Key (Stone Tower Temple)", state, player) and state.has("Deku Mask", player) and (can_use_light_arrows(state, player) or state.has("Mirror Shield", player)), - # ~ "Stone Tower Temple Wall Air Gust Room End Chest": - # ~ lambda state: state.has("Small Key (Stone Tower Temple)", state, player) and state.has("Deku Mask", player) and (can_use_light_arrows(state, player) or state.has("Mirror Shield", player)), - # ~ "Stone Tower Temple Garo Master Chest": - # ~ lambda state: state.has("Small Key (Stone Tower Temple)", state, player) and state.has("Deku Mask", player) and (can_use_light_arrows(state, player) or state.has("Mirror Shield", player)), - # ~ "Stone Tower Temple After Garo Upside Down Chest": - # ~ lambda state: state.has("Small Key (Stone Tower Temple)", state, player) and state.has("Deku Mask", player) and can_use_light_arrows(state, player), - # ~ "Stone Tower Temple Eyegore Chest": - # ~ lambda state: state.has("Small Key (Stone Tower Temple)", state, player) and state.has("Deku Mask", player) and (can_use_light_arrows(state, player) or state.has("Mirror Shield", player)), - # ~ "Stone Tower Temple Inverted Eastern Air Gust Room Fire Chest": - # ~ lambda state: state.has("Deku Mask", player), - # ~ "Stone Tower Temple Inverted Eastern Air Gust Room Snugly Tucked Cranny Chest": - # ~ lambda state: state.has("Deku Mask", player) and can_use_fire_arrows(state, player), - # ~ "Stone Tower Temple Inverted Eastern Air Gust Room Hall Floor Switch Chest": - # ~ lambda state: state.has("Deku Mask", player), - # ~ "Stone Tower Temple Inverted Wizzrobe Chest": - # ~ lambda state: state.has("Small Key (Stone Tower Temple)", state, player) and state.has("Deku Mask", player), - # ~ "Stone Tower Temple Inverted Death Armos Maze Chest": - # ~ lambda state: state.has("Small Key (Stone Tower Temple)", state, player) and state.has("Deku Mask", player), - # ~ "Stone Tower Temple Inverted Gomess Chest": - # ~ lambda state: state.has("Small Key (Stone Tower Temple)", state, player) and state.has("Deku Mask", player), - # ~ "Stone Tower Temple Inverted Eyegore Chest": - # ~ lambda state: state.has("Small Key (Stone Tower Temple)", state, player) and state.has("Deku Mask", player), - # ~ "Stone Tower Temple Heart Container": - # ~ lambda state: state.has("Small Key (Stone Tower Temple)", state, player) and state.has("Deku Mask", player) and state.has("Giant's Mask", player) and (state.has("Boss Key (Stone Tower Temple)", state, player) or state.has("Twinmold's Remains", state, player)), - # ~ "Stone Tower Temple Twinmold's Remains": - # ~ lambda state: state.has("Small Key (Stone Tower Temple)", state, player) and state.has("Deku Mask", player) and state.has("Giant's Mask", player) and (state.has("Boss Key (Stone Tower Temple)", state, player) or state.has("Twinmold's Remains", state, player)), - - - "Defeat Majora": - lambda state: state.has("Fierce Deity's Mask", player) and state.has("Progressive Magic Upgrade", player) and ((state.has("Great Fairy Sword", player) or has_gilded_sword(state, player)) and state.has("Progressive Bow", player)) - } diff --git a/worlds/mm-recomp/__init__.py b/worlds/mm-recomp/__init__.py deleted file mode 100644 index c1d38d4fa54..00000000000 --- a/worlds/mm-recomp/__init__.py +++ /dev/null @@ -1,155 +0,0 @@ -from typing import List -from typing import Dict - -from BaseClasses import Region, Tutorial -from worlds.AutoWorld import WebWorld, World -from .Items import MMRItem, item_data_table, item_table, code_to_item_table -from .Locations import MMRLocation, location_data_table, location_table, code_to_location_table, locked_locations -from .Options import mmr_options -from .Regions import region_data_table, get_exit -from .Rules import * - - -class MMRWebWorld(WebWorld): - theme = "partyTime" - - setup_en = Tutorial( - tutorial_name="Start Guide", - description="A guide to playing Majora's Mask Recompiled in Archipelago.", - language="English", - file_name="guide_en.md", - link="guide/en", - authors=["LittleCube"] - ) - - tutorials = [setup_en] - - -class MMRWorld(World): - """A Zelda game we're not completely burnt out on.""" - - game = "Majora's Mask Recompiled" - data_version = 1 - web = MMRWebWorld() - option_definitions = mmr_options - location_name_to_id = location_table - item_name_to_id = item_table - - def generate_early(self): - pass - - def create_item(self, name: str) -> MMRItem: - return MMRItem(name, item_data_table[name].type, item_data_table[name].code, self.player) - - def create_items(self) -> None: - mw = self.multiworld - - item_pool: List[MMRItem] = [] - item_pool_count: Dict[str, int] = {} - for name, item in item_data_table.items(): - item_pool_count[name] = 0 - if item.code and item.can_create(self.options): - while item_pool_count[name] < item.num_exist: - item_pool.append(self.create_item(name)) - item_pool_count[name] += 1 - - mw.itempool += item_pool - - mw.push_precollected(self.create_item("Ocarina of Time")) - mw.push_precollected(self.create_item("Song of Time")) - mw.push_precollected(self.create_item("Progressive Sword")) - - def create_regions(self) -> None: - player = self.player - mw = self.multiworld - - # Create regions. - for region_name in region_data_table.keys(): - region = Region(region_name, player, mw) - mw.regions.append(region) - - # Create locations. - for region_name, region_data in region_data_table.items(): - region = mw.get_region(region_name, player) - region.add_locations({ - location_name: location_data.address for location_name, location_data in location_data_table.items() - if location_data.region == region_name and location_data.can_create(self.options) - }, MMRLocation) - region.add_exits(region_data.connecting_regions) - - # Place locked locations. - for location_name, location_data in locked_locations.items(): - # Ignore locations we never created. - if not location_data.can_create(self.options): - continue - - locked_item = self.create_item(location_data_table[location_name].locked_item) - mw.get_location(location_name, player).place_locked_item(locked_item) - - if not self.options.shuffle_swamphouse_reward.value: - mw.get_location("Swamphouse Reward", player).place_locked_item(self.create_item("Mask of Truth")) - - if self.options.skullsanity.value == 0: - for i in range(0, 31): - if i == 3: - continue - mw.get_location(code_to_location_table[0x34769420062700 | i], player).place_locked_item(self.create_item("Swamp Skulltula Token")) - - - if not self.options.shuffle_great_fairy_rewards.value: - mw.get_location("North Clock Town Great Fairy Reward", player).place_locked_item(self.create_item("Progressive Magic Upgrade")) - mw.get_location("North Clock Town Great Fairy Reward (Has Transformation Mask)", player).place_locked_item(self.create_item("Great Fairy Mask")) - mw.get_location("Woodfall Great Fairy Reward", player).place_locked_item(self.create_item("Great Spin Attack")) - - if not self.options.fairysanity.value: - mw.get_location("Laundry Pool Stray Fairy (Clock Town)", player).place_locked_item(self.create_item("Stray Fairy (Clock Town)")) - - mw.get_location("Woodfall Temple Entrance Chest", player).place_locked_item(self.create_item("Stray Fairy (Woodfall)")) - mw.get_location("Woodfall Temple Wooden Flower Switch Chest", player).place_locked_item(self.create_item("Stray Fairy (Woodfall)")) - mw.get_location("Woodfall Temple Black Boe Room Chest", player).place_locked_item(self.create_item("Stray Fairy (Woodfall)")) - mw.get_location("Woodfall Temple Entrance Freestanding SF", player).place_locked_item(self.create_item("Stray Fairy (Woodfall)")) - mw.get_location("Woodfall Temple Wooden Flower Deku Baba SF", player).place_locked_item(self.create_item("Stray Fairy (Woodfall)")) - mw.get_location("Woodfall Temple Wooden Flower Pot SF", player).place_locked_item(self.create_item("Stray Fairy (Woodfall)")) - mw.get_location("Woodfall Temple Moving Flower Platform Room Beehive SF", player).place_locked_item(self.create_item("Stray Fairy (Woodfall)")) - mw.get_location("Woodfall Temple Wooden Flower Bubble SF", player).place_locked_item(self.create_item("Stray Fairy (Woodfall)")) - mw.get_location("Woodfall Temple Push Block Skulltula SF", player).place_locked_item(self.create_item("Stray Fairy (Woodfall)")) - mw.get_location("Woodfall Temple Push Block Bubble SF", player).place_locked_item(self.create_item("Stray Fairy (Woodfall)")) - mw.get_location("Woodfall Temple Push Block Beehive SF", player).place_locked_item(self.create_item("Stray Fairy (Woodfall)")) - mw.get_location("Woodfall Temple Final Room Right Lower Platform SF", player).place_locked_item(self.create_item("Stray Fairy (Woodfall)")) - mw.get_location("Woodfall Temple Final Room Right Upper Platform SF", player).place_locked_item(self.create_item("Stray Fairy (Woodfall)")) - mw.get_location("Woodfall Temple Final Room Left Upper Platform SF", player).place_locked_item(self.create_item("Stray Fairy (Woodfall)")) - mw.get_location("Woodfall Temple Final Room Bubble SF", player).place_locked_item(self.create_item("Stray Fairy (Woodfall)")) - - # TODO: check options to see what player starts with - mw.get_location("Top of Clock Tower (Ocarina of Time)", player).place_locked_item(self.create_item(self.get_filler_item_name())) - mw.get_location("Top of Clock Tower (Song of Time)", player).place_locked_item(self.create_item(self.get_filler_item_name())) - - def get_filler_item_name(self) -> str: - return "Purple Rupee" - - def set_rules(self) -> None: - player = self.player - mw = self.multiworld - - # Completion condition. - mw.completion_condition[player] = lambda state: state.has("Victory", player) - - if (self.options.logic_difficulty == 4): - return - - region_rules = get_region_rules(player) - for entrance_name, rule in region_rules.items(): - entrance = mw.get_entrance(entrance_name, player) - entrance.access_rule = rule - - location_rules = get_location_rules(player) - for location in mw.get_locations(player): - name = location.name - if name in location_rules and location_data_table[name].can_create(self.options): - location.access_rule = location_rules[name] - - def fill_slot_data(self): - return { - "skullsanity": self.options.skullsanity.value, - "death_link": self.options.death_link.value - } diff --git a/worlds/mm-recomp/docs/de_MMR.md b/worlds/mm-recomp/docs/de_MMR.md deleted file mode 100644 index cde0a23cf6f..00000000000 --- a/worlds/mm-recomp/docs/de_MMR.md +++ /dev/null @@ -1,18 +0,0 @@ -# Clique - -## Was ist das für ein Spiel? - -~~Clique ist ein psychologisches Überlebens-Horror Spiel, in dem der Spieler der Versuchung wiederstehen muss große~~ -~~(rote) Knöpfe zu drücken.~~ - -Clique ist ein scherzhaftes Spiel, welches für Archipelago im März 2023 entwickelt wurde, um zu zeigen, wie einfach -es sein kann eine Welt für Archipelago zu entwicklen. Das Ziel des Spiels ist es den großen (standardmäßig) roten -Knopf zu drücken. Wenn ein Spieler auf dem `hard_mode` (schwieriger Modus) spielt, muss dieser warten bis jemand -anderes in der Multiworld den Knopf aktiviert, damit er gedrückt werden kann. - -Clique kann auf den meisten modernen, HTML5-fähigen Browsern gespielt werden. - -## Wo ist die Seite für die Einstellungen? - -Die [Seite für die Spielereinstellungen dieses Spiels](../player-options) enthält alle Optionen die man benötigt um -eine YAML-Datei zu konfigurieren und zu exportieren. diff --git a/worlds/mm-recomp/docs/en_MMR.md b/worlds/mm-recomp/docs/en_MMR.md deleted file mode 100644 index e9cb164fecb..00000000000 --- a/worlds/mm-recomp/docs/en_MMR.md +++ /dev/null @@ -1,16 +0,0 @@ -# Clique - -## What is this game? - -~~Clique is a psychological survival horror game where a player must survive the temptation to press red buttons.~~ - -Clique is a joke game developed for Archipelago in March 2023 to showcase how easy it can be to develop a world for -Archipelago. The objective of the game is to press the big red button. If a player is playing on `hard_mode`, they must -wait for someone else in the multiworld to "activate" their button before they can press it. - -Clique can be played on most modern HTML5-capable browsers. - -## Where is the options page? - -The [player options page for this game](../player-options) contains all the options you need to configure -and export a config file. diff --git a/worlds/mm-recomp/docs/guide_de.md b/worlds/mm-recomp/docs/guide_de.md deleted file mode 100644 index 26e08dbbdd7..00000000000 --- a/worlds/mm-recomp/docs/guide_de.md +++ /dev/null @@ -1,25 +0,0 @@ -# Clique Anleitung - -Nachdem dein Seed generiert wurde, gehe auf die Website von [Clique dem Spiel](http://clique.pharware.com/) und gib -Server-Daten, deinen Slot-Namen und ein Passwort (falls vorhanden) ein. Klicke dann auf "Connect" (Verbinden). - -Wenn du auf "Einfach" spielst, kannst du unbedenklich den Knopf drücken und deine "Befriedigung" erhalten. - -Wenn du auf "Schwer" spielst, ist es sehr wahrscheinlich, dass du warten musst bevor du dein Ziel erreichen kannst. -Glücklicherweise läuft Click auf den meißten großen Browsern, die HTML5 unterstützen. Das heißt du kannst Clique auf -deinem Handy starten und produktiv sein während du wartest! - -Falls du einige Ideen brauchst was du tun kannst, während du wartest bis der Knopf aktiviert wurde, versuche -(mindestens) eins der Folgenden: - -- Dein Zimmer aufräumen. -- Die Wäsche machen. -- Etwas Essen von einem X-Belieben Fast Food Restaruant holen. -- Das tägliche Wordle machen. -- ~~Deine Seele an **Phar** verkaufen.~~ -- Deine Hausaufgaben erledigen. -- Deine Post abholen. - - -~~Solltest du auf irgendwelche Probleme in diesem Spiel stoßen, solltest du keinesfalls nicht **thephar** auf~~ -~~Discord kontaktieren. *zwinker* *zwinker*~~ diff --git a/worlds/mm-recomp/docs/guide_en.md b/worlds/mm-recomp/docs/guide_en.md deleted file mode 100644 index c3c113fe905..00000000000 --- a/worlds/mm-recomp/docs/guide_en.md +++ /dev/null @@ -1,22 +0,0 @@ -# Clique Start Guide - -After rolling your seed, go to the [Clique Game](http://clique.pharware.com/) site and enter the server details, your -slot name, and a room password if one is required. Then click "Connect". - -If you're playing on "easy mode", just click the button and receive "Satisfaction". - -If you're playing on "hard mode", you may need to wait for activation before you can complete your objective. Luckily, -Clique runs in most major browsers that support HTML5, so you can load Clique on your phone and be productive while -you wait! - -If you need some ideas for what to do while waiting for button activation, give the following a try: - -- Clean your room. -- Wash the dishes. -- Get some food from a non-descript fast food restaurant. -- Do the daily Wordle. -- ~~Sell your soul to Phar.~~ -- Do your school work. - - -~~If you run into any issues with this game, definitely do not contact **thephar** on discord. *wink* *wink*~~