diff --git a/worlds/khrecom/Client.py b/worlds/khrecom/Client.py index 88af954fdc11..181bfeeca1aa 100644 --- a/worlds/khrecom/Client.py +++ b/worlds/khrecom/Client.py @@ -85,12 +85,19 @@ def on_package(self, cmd: str, args: dict): with open(os.path.join(self.game_communication_path, filename), 'w') as f: f.close() if "EXP Multiplier" in list(args['slot_data'].keys()): - exp_multiplier = args['slot_data']["XP Multiplier"] + exp_multiplier = args['slot_data']["EXP Multiplier"] else: exp_multiplier = 1 with open(os.path.join(self.game_communication_path, "xpmult.cfg"), 'w') as f: f.write(str(exp_multiplier)) f.close() + if "World Order" in list(args['slot_data'].keys()): + world_order = args['slot_data']["World Order"] + else: + world_order = "2,3,4,5,6,7,8,9,10" + with open(os.path.join(self.game_communication_path, "worldorder.cfg"), 'w') as f: + f.write(str(world_order)) + f.close() if cmd in {"ReceivedItems"}: start_index = args["index"] if start_index != len(self.items_received): diff --git a/worlds/khrecom/Items.py b/worlds/khrecom/Items.py index 478220fd461f..54647add2cc8 100644 --- a/worlds/khrecom/Items.py +++ b/worlds/khrecom/Items.py @@ -185,7 +185,7 @@ def get_items_by_category(category: str, disclude: list) -> Dict[str, KHRECOMIte "Card Set Soul Eater 1-3": KHRECOMItemData("Days Sets", code = 268_1391, classification = ItemClassification.filler, max_quantity = 1, weight = 10), "Card Set Soul Eater 4-6": KHRECOMItemData("Days Sets", code = 268_1392, classification = ItemClassification.filler, max_quantity = 1, weight = 10), "Card Set Soul Eater 7-9": KHRECOMItemData("Days Sets", code = 268_1393, classification = ItemClassification.filler, max_quantity = 1, weight = 10), - "Card Set Star Seeker 0": KHRECOMItemData("Days Sets", code = 268_1394, classification = ItemClassification.filler, max_quantity = 1, weight = 10), + "Card Set Soul Eater 0": KHRECOMItemData("Days Sets", code = 268_1394, classification = ItemClassification.filler, max_quantity = 1, weight = 10), "Card Set Star Seeker 1-3": KHRECOMItemData("Days Sets", code = 268_1401, classification = ItemClassification.filler, max_quantity = 1, weight = 10), "Card Set Star Seeker 4-6": KHRECOMItemData("Days Sets", code = 268_1402, classification = ItemClassification.filler, max_quantity = 1, weight = 10), "Card Set Star Seeker 7-9": KHRECOMItemData("Days Sets", code = 268_1403, classification = ItemClassification.filler, max_quantity = 1, weight = 10), diff --git a/worlds/khrecom/Locations.py b/worlds/khrecom/Locations.py index ad0b43924491..8cab298c45c7 100644 --- a/worlds/khrecom/Locations.py +++ b/worlds/khrecom/Locations.py @@ -29,7 +29,7 @@ def get_locations_by_category(category: str) -> Dict[str, KHRECOMLocationData]: "Starting Checks (Magic Cards Blizzard)": KHRECOMLocationData("Starting", 269_0003), "Starting Checks (Magic Cards Cure)": KHRECOMLocationData("Starting", 269_0004), - "Traverse Town Post Floor (Magic Cards Fire)": KHRECOMLocationData("Progression", 269_0101), + "01F Exit Hall Axel I (Magic Cards Fire)": KHRECOMLocationData("Progression", 269_0101), "Traverse Town Room of Beginnings": KHRECOMLocationData("Progression", 269_0102), "Traverse Town Room of Beginnings (Summon Cards Simba)": KHRECOMLocationData("Progression", 269_0103), "Traverse Town Room of Guidance": KHRECOMLocationData("Progression", 269_0104), @@ -77,7 +77,7 @@ def get_locations_by_category(category: str) -> Dict[str, KHRECOMLocationData]: "Agrabah Room of Rewards (Enemy Cards Luxord)": KHRECOMLocationData("Days" , 269_0509), #Days Location "Halloween Town Field (Attack Cards Pumpkinhead)": KHRECOMLocationData("Progression", 269_0601), - "Halloween Town Post Floor (Magic Cards Thunder)": KHRECOMLocationData("Progression", 269_0602), + "06F Exit Hall Larxene I (Magic Cards Thunder)": KHRECOMLocationData("Progression", 269_0602), "Halloween Town Room of Beginnings": KHRECOMLocationData("Progression", 269_0603), "Halloween Town Room of Guidance": KHRECOMLocationData("Progression", 269_0604), "Halloween Town Room of Truth": KHRECOMLocationData("Progression", 269_0605), @@ -85,7 +85,7 @@ def get_locations_by_category(category: str) -> Dict[str, KHRECOMLocationData]: "Halloween Town Room of Rewards (Attack Cards Bond of Flame)": KHRECOMLocationData("Days" , 269_0607), #Days Location "Atlantica Field (Attack Cards Crabclaw)": KHRECOMLocationData("Progression", 269_0701), - "Atlantica Post Floor (Magic Cards Aero)": KHRECOMLocationData("Progression", 269_0702), + "07F Exit Hall Riku I (Magic Cards Aero)": KHRECOMLocationData("Progression", 269_0702), "Atlantica Room of Beginnings": KHRECOMLocationData("Progression", 269_0703), "Atlantica Room of Guidance": KHRECOMLocationData("Progression", 269_0704), "Atlantica Room of Truth": KHRECOMLocationData("Progression", 269_0705), @@ -109,20 +109,20 @@ def get_locations_by_category(category: str) -> Dict[str, KHRECOMLocationData]: "Hollow Bastion Room of Rewards (Enemy Cards Xigbar)": KHRECOMLocationData("Days" , 269_0907), #Days Location "100 Acre Wood Clear (Summon Cards Bambi)": KHRECOMLocationData("Progression", 269_1001), - "100 Acre Wood Mini Game Bumble Rumble (Item Cards Elixir)": KHRECOMLocationData("Progression", 269_1002), - "100 Acre Wood Mini Game Whirlwind Plunge (Item Cards Mega-Ether)": KHRECOMLocationData("Progression", 269_1003), + "100 Acre Wood Bumble Rumble (Item Cards Elixir)": KHRECOMLocationData("Progression", 269_1002), + "100 Acre Wood Whirlwind Plunge (Item Cards Mega-Ether)": KHRECOMLocationData("Progression", 269_1003), "100 Acre Wood Tigger's Playground (Attack Cards Spellbinder)": KHRECOMLocationData("Progression", 269_1004), - #"Twilight Town Post Floor (Item Cards Mega-Potion)": KHRECOMLocationData("Progression", 269_1101), Bugged because of the post floor scene? + #"11F Exit Hall Riku III (Item Cards Mega-Potion)": KHRECOMLocationData("Progression", 269_1101), "Twilight Town Room of Beginnings": KHRECOMLocationData("Progression", 269_1102), "Twilight Town Room of Beginnings (Enemy Cards Vexen)": KHRECOMLocationData("Progression", 269_1103), "Twilight Town Room of Rewards (Enemy Cards Roxas)": KHRECOMLocationData("Days" , 269_1104), #Days Location #"Twilight Town Bounty (Enemy Cards Ansem)": KHRECOMLocationData("Days" , 269_1105), #Days Location - "Destiny Islands Post Floor (Attack Cards Oathkeeper)": KHRECOMLocationData("Progression", 269_1201), - "Destiny Islands Post Floor (Attack Cards Oblivion)": KHRECOMLocationData("Progression", 269_1202), - "Destiny Islands Post Floor (Enemy Cards Larxene)": KHRECOMLocationData("Progression", 269_1203), - "Destiny Islands Post Floor (Enemy Cards Riku)": KHRECOMLocationData("Progression", 269_1204), + "Destiny Islands Room of Guidance (Attack Cards Oathkeeper)": KHRECOMLocationData("Progression", 269_1201), + "12F Exit Hall Larxene II (Attack Cards Oblivion)": KHRECOMLocationData("Progression", 269_1202), + "12F Exit Hall Larxene II (Enemy Cards Larxene)": KHRECOMLocationData("Progression", 269_1203), + "12F Exit Hall Riku IV (Enemy Cards Riku)": KHRECOMLocationData("Progression", 269_1204), "Destiny Islands Room of Beginnings": KHRECOMLocationData("Progression", 269_1205), "Destiny Islands Room of Guidance": KHRECOMLocationData("Progression", 269_1206), "Destiny Islands Room of Guidance (Enemy Cards Darkside)": KHRECOMLocationData("Progression", 269_1207), @@ -168,6 +168,91 @@ def get_locations_by_category(category: str) -> Dict[str, KHRECOMLocationData]: "Heartless Wyvern": KHRECOMLocationData("Progression", 269_1430), "Heartless Yellow Opera": KHRECOMLocationData("Progression", 269_1431), + "Level 02 (Sleight Sliding Dash)": KHRECOMLocationData("Progression", 269_1501), + "Level 17 (Sleight Blitz)": KHRECOMLocationData("Progression", 269_1502), + "Level 07 (Sleight Stun Impact)": KHRECOMLocationData("Progression", 269_1503), + "Level 22 (Sleight Zantetsuken)": KHRECOMLocationData("Progression", 269_1504), + "Level 12 (Sleight Strike Raid)": KHRECOMLocationData("Progression", 269_1505), + "Level 27 (Sleight Sonic Blade)": KHRECOMLocationData("Progression", 269_1506), + "Level 42 (Sleight Ars Arcanum)": KHRECOMLocationData("Progression", 269_1507), + "Level 52 (Sleight Ragnarok)": KHRECOMLocationData("Progression", 269_1508), + "Castle Oblivion Entrance (Sleight Trinity Limit)": KHRECOMLocationData("Progression", 269_1509), + "01F Exit Hall Axel I (Sleight Fira)": KHRECOMLocationData("Progression", 269_1510), + "Starting Checks (Sleight Blizzara)": KHRECOMLocationData("Starting" , 269_1511), + "06F Exit Hall Larxene I (Sleight Thundara)": KHRECOMLocationData("Progression", 269_1512), + "Starting Checks (Sleight Cura)": KHRECOMLocationData("Starting" , 269_1513), + "Agrabah Bounty (Sleight Gravira)": KHRECOMLocationData("Progression", 269_1514), + "Wonderland Bounty (Sleight Stopra)": KHRECOMLocationData("Progression", 269_1515), + "07F Exit Hall Riku I (Sleight Aerora)": KHRECOMLocationData("Progression", 269_1516), + "01F Exit Hall Axel I (Sleight Firaga)": KHRECOMLocationData("Progression", 269_1517), + "Starting Checks (Sleight Blizzaga)": KHRECOMLocationData("Starting" , 269_1518), + "06F Exit Hall Larxene I (Sleight Thundaga)": KHRECOMLocationData("Progression", 269_1519), + "Starting Checks (Sleight Curaga)": KHRECOMLocationData("Starting" , 269_1520), + "Agrabah Bounty (Sleight Graviga)": KHRECOMLocationData("Progression", 269_1521), + "Wonderland Bounty (Sleight Stopga)": KHRECOMLocationData("Progression", 269_1522), + "07F Exit Hall Riku I (Sleight Aeroga)": KHRECOMLocationData("Progression", 269_1523), + "Monstro Bounty (Sleight Fire Raid)": KHRECOMLocationData("Progression", 269_1524), + "Olympus Coliseum Bounty (Sleight Blizzard Raid)": KHRECOMLocationData("Progression", 269_1525), + "Neverland Room of Rewards (Sleight Thunder Raid)": KHRECOMLocationData("Progression", 269_1526), + "Hollow Bastion Bounty (Sleight Reflect Raid)": KHRECOMLocationData("Progression", 269_1527), + "Destiny Islands Bounty (Sleight Judgment)": KHRECOMLocationData("Progression", 269_1528), + "100 Acre Wood Balloon Glider (Sleight Firaga Burst)": KHRECOMLocationData("Progression", 269_1529), + "Castle Oblivion Bounty (Sleight Raging Storm)": KHRECOMLocationData("Progression", 269_1530), + "Level 57 (Sleight Mega Flare)": KHRECOMLocationData("Progression", 269_1531), + "10F Exit Hall Vexen I (Sleight Freeze)": KHRECOMLocationData("Progression", 269_1532), + "Atlantica Bounty (Sleight Homing Blizzara)": KHRECOMLocationData("Progression", 269_1533), + "Monstro Room of Rewards (Sleight Aqua Splash)": KHRECOMLocationData("Progression", 269_1534), + "08F Exit Hall Riku II (Sleight Magnet Spiral)": KHRECOMLocationData("Progression", 269_1535), + "Level 32 (Sleight Lethal Frame)": KHRECOMLocationData("Progression", 269_1536), + "Atlantica Bounty (Sleight Shock Impact)": KHRECOMLocationData("Progression", 269_1537), + "Level 37 (Sleight Tornado)": KHRECOMLocationData("Progression", 269_1538), + "Atlantica Room of Rewards (Sleight Quake)": KHRECOMLocationData("Progression", 269_1539), + "Twilight Town Bounty (Sleight Warpinator)": KHRECOMLocationData("Progression", 269_1540), + "Agrabah Room of Rewards (Sleight Warp)": KHRECOMLocationData("Progression", 269_1541), + "Halloween Town Room of Rewards (Sleight Bind)": KHRECOMLocationData("Progression", 269_1542), + "100 Acre Wood Piglet (Sleight Confuse)": KHRECOMLocationData("Progression", 269_1543), + "Halloween Town Entrance (Sleight Terror)": KHRECOMLocationData("Progression", 269_1544), + "Wonderland Room of Rewards (Sleight Synchro)": KHRECOMLocationData("Progression", 269_1545), + "Halloween Town Bounty (Sleight Gifted Miracle)": KHRECOMLocationData("Progression", 269_1546), + "Neverland Bounty (Sleight Teleport)": KHRECOMLocationData("Progression", 269_1547), + "Level 47 (Sleight Holy)": KHRECOMLocationData("Progression", 269_1548), + "Traverse Town Room of Beginnings (Sleight Proud Roar LV2)": KHRECOMLocationData("Progression", 269_1549), + "Traverse Town Room of Beginnings (Sleight Proud Roar LV3)": KHRECOMLocationData("Progression", 269_1550), + "Monstro Room of Truth (Sleight Splash LV2)": KHRECOMLocationData("Progression", 269_1551), + "Monstro Room of Truth (Sleight Splash LV3)": KHRECOMLocationData("Progression", 269_1552), + "100 Acre Wood Clear (Sleight Paradise LV2)": KHRECOMLocationData("Progression", 269_1553), + "100 Acre Wood Clear (Sleight Paradise LV3)": KHRECOMLocationData("Progression", 269_1554), + "100 Acre Wood Jump-a-Thon (Sleight Idyll Romp)": KHRECOMLocationData("Progression", 269_1555), + "Hollow Bastion Room of Rewards (Sleight Flare Breath LV2)": KHRECOMLocationData("Progression", 269_1556), + "Hollow Bastion Room of Rewards (Sleight Flare Breath LV3)": KHRECOMLocationData("Progression", 269_1557), + "Agrabah Room of Truth (Sleight Showtime LV2)": KHRECOMLocationData("Progression", 269_1558), + "Agrabah Room of Truth (Sleight Showtime LV3)": KHRECOMLocationData("Progression", 269_1559), + "Neverland Room of Truth (Sleight Twinkle LV2)": KHRECOMLocationData("Progression", 269_1560), + "Neverland Room of Truth (Sleight Twinkle LV3)": KHRECOMLocationData("Progression", 269_1561), + "Olympus Coliseum Room of Truth (Sleight Cross-slash)": KHRECOMLocationData("Progression", 269_1562), + "Olympus Coliseum Room of Truth (Sleight Omnislash)": KHRECOMLocationData("Progression", 269_1563), + "100 Acre Wood Veggie Panic (Sleight Cross-slash+)": KHRECOMLocationData("Progression", 269_1564), + "Starting Checks (Sleight Magic LV2)": KHRECOMLocationData("Starting" , 269_1565), + "Starting Checks (Sleight Magic LV3)": KHRECOMLocationData("Starting" , 269_1566), + "Twilight Town Room of Rewards (Sleight Stardust Blitz)": KHRECOMLocationData("Progression", 269_1567), + "Starting Checks (Sleight Goofy Tornado LV2)": KHRECOMLocationData("Starting" , 269_1568), + "Starting Checks (Sleight Goofy Tornado LV3)": KHRECOMLocationData("Starting" , 269_1569), + "Starting Checks (Sleight Goofy Smash)": KHRECOMLocationData("Starting" , 269_1570), + "Starting Checks (Sleight Wild Crush)": KHRECOMLocationData("Starting" , 269_1571), + "Agrabah Ally (Sleight Sandstorm LV2)": KHRECOMLocationData("Progression", 269_1572), + "Agrabah Ally (Sleight Sandstorm LV3)": KHRECOMLocationData("Progression", 269_1573), + "Halloween Town Entrance (Sleight Surprise! LV2)": KHRECOMLocationData("Progression", 269_1574), + "Halloween Town Entrance (Sleight Surprise! LV3)": KHRECOMLocationData("Progression", 269_1575), + "Atlantica Ally (Sleight Spiral Wave LV2)": KHRECOMLocationData("Progression", 269_1576), + "Atlantica Ally (Sleight Spiral Wave LV3)": KHRECOMLocationData("Progression", 269_1577), + "Neverland Ally (Sleight Hummingbird LV2)": KHRECOMLocationData("Progression", 269_1578), + "Neverland Ally (Sleight Hummingbird LV3)": KHRECOMLocationData("Progression", 269_1579), + "Hollow Ally (Sleight Furious Volley LV2)": KHRECOMLocationData("Progression", 269_1580), + "Hollow Ally (Sleight Furious Volley LV3)": KHRECOMLocationData("Progression", 269_1581), + "Traverse Town Room of Beginnings (Sleight Lucky Bounty LV2)": KHRECOMLocationData("Progression", 269_1582), + "Traverse Town Room of Beginnings (Sleight Lucky Bounty LV3)": KHRECOMLocationData("Progression", 269_1583), + + "Final Marluxia": KHRECOMLocationData("Progression", 269_9999), } diff --git a/worlds/khrecom/Options.py b/worlds/khrecom/Options.py index 33b7f003fb1d..6e108185327a 100644 --- a/worlds/khrecom/Options.py +++ b/worlds/khrecom/Options.py @@ -44,6 +44,24 @@ class ChecksBehindLeon(Toggle): """ display_name = "Checks Behind Leon" +class ChecksBehindMinigames(Toggle): + """ + Toggle whether to include checks behind 100 Acre Woods Minigames. + """ + display_name = "Checks Behind Minigames" + +class ChecksBehindSleights(Toggle): + """ + Toggle whether to include checks behind Sleights. + """ + display_name = "Checks Behind Sleights" + +class ChecksBehindSleightsLevels(Toggle): + """ + Toggle whether to include checks behind Sleights received from Leveling Up. + """ + display_name = "Checks Behind Level Up Sleights" + class EXPMultiplier(Range): """ Multiplier to apply to XP received. @@ -63,3 +81,6 @@ class KHRECOMOptions(PerGameCommonOptions): days_locations: DaysLocations checks_behind_leon: ChecksBehindLeon exp_multiplier: EXPMultiplier + minigames: ChecksBehindMinigames + sleights: ChecksBehindSleights + levels: ChecksBehindSleightsLevels diff --git a/worlds/khrecom/Regions.py b/worlds/khrecom/Regions.py index 4a3ac7d5cbae..a607cefe5646 100644 --- a/worlds/khrecom/Regions.py +++ b/worlds/khrecom/Regions.py @@ -9,156 +9,159 @@ class KHRECOMRegionData(NamedTuple): region_exits: Optional[List[str]] -def create_regions(multiworld: MultiWorld, player: int, days: bool, checks_behind_leon: bool): - regions: Dict[str, RLRegionData] = { - "Menu": KHRECOMRegionData(None, ["Floor 1"]), - "Floor 1": KHRECOMRegionData([], ["Warp"]), - "Floor 2": KHRECOMRegionData([], []), - "Floor 3": KHRECOMRegionData([], []), - "Floor 4": KHRECOMRegionData([], []), - "Floor 5": KHRECOMRegionData([], []), - "Floor 6": KHRECOMRegionData([], []), - "Floor 7": KHRECOMRegionData([], []), - "Floor 8": KHRECOMRegionData([], []), - "Floor 9": KHRECOMRegionData([], []), - "Floor 10": KHRECOMRegionData([], []), - "Floor 11": KHRECOMRegionData([], []), - "Floor 12": KHRECOMRegionData([], []), - "Floor 13": KHRECOMRegionData([], []), +def create_regions(multiworld: MultiWorld, player: int, options): + regions: Dict[str, KHRECOMRegionData] = { + "Menu": KHRECOMRegionData(None, ["Traverse Town"]), + "Traverse Town": KHRECOMRegionData([], ["Castle Oblivion Halls"]), + "Wonderland": KHRECOMRegionData([], []), + "Olympus Coliseum": KHRECOMRegionData([], []), + "Monstro": KHRECOMRegionData([], []), + "Agrabah": KHRECOMRegionData([], []), + "Halloween Town": KHRECOMRegionData([], []), + "Atlantica": KHRECOMRegionData([], []), + "Neverland": KHRECOMRegionData([], []), + "Hollow Bastion": KHRECOMRegionData([], []), + "100 Acre Wood": KHRECOMRegionData([], []), + "Twilight Town": KHRECOMRegionData([], []), + "Destiny Islands": KHRECOMRegionData([], []), + "Castle Oblivion": KHRECOMRegionData([], []), "Heartless":KHRECOMRegionData([], []), - "Warp": KHRECOMRegionData([], ["Floor 2", "Floor 3", "Floor 4", - "Floor 5", "Floor 6", "Floor 7", - "Floor 8", "Floor 9", "Floor 10", - "Floor 11", "Floor 12", "Floor 13", "Heartless"]) + "Levels":KHRECOMRegionData([], []), + "Castle Oblivion Halls": KHRECOMRegionData([], ["Wonderland", "Olympus Coliseum", "Monstro", + "Agrabah", "Halloween Town", "Atlantica", + "Neverland", "Hollow Bastion", "100 Acre Wood", + "Twilight Town", "Destiny Islands", "Castle Oblivion", "Heartless", "Levels"]) } # Set up locations - regions["Floor 1"].locations.append("Starting Checks (Attack Cards Kingdom Key)") - regions["Floor 1"].locations.append("Starting Checks (Item Cards Potion)") - regions["Floor 1"].locations.append("Starting Checks (Magic Cards Blizzard)") - regions["Floor 1"].locations.append("Starting Checks (Magic Cards Cure)") - regions["Floor 1"].locations.append("Traverse Town Post Floor (Magic Cards Fire)") - if checks_behind_leon: - regions["Floor 1"].locations.append("Traverse Town Room of Beginnings") - regions["Floor 1"].locations.append("Traverse Town Room of Beginnings (Summon Cards Simba)") - regions["Floor 1"].locations.append("Traverse Town Room of Guidance") - regions["Floor 1"].locations.append("Traverse Town Room of Truth") - regions["Floor 1"].locations.append("Traverse Town Room of Truth (Enemy Cards Guard Armor)") - regions["Floor 1"].locations.append("Traverse Town Room of Rewards (Attack Cards Lionheart)") - if days: - regions["Floor 1"].locations.append("Traverse Town Bounty (Attack Cards Maverick Flare)") - regions["Floor 1"].locations.append("Traverse Town Room of Rewards (Enemy Cards Saix)") - - regions["Floor 2"].locations.append("Wonderland Bounty (Magic Cards Stop)") - regions["Floor 2"].locations.append("Wonderland Field (Attack Cards Lady Luck)") - regions["Floor 2"].locations.append("Wonderland Room of Beginnings") - regions["Floor 2"].locations.append("Wonderland Room of Beginnings (Enemy Cards Card Soldier)") - regions["Floor 2"].locations.append("Wonderland Room of Guidance") - regions["Floor 2"].locations.append("Wonderland Room of Truth") - regions["Floor 2"].locations.append("Wonderland Room of Truth (Enemy Cards Trickmaster)") - if days: - regions["Floor 2"].locations.append("Wonderland Room of Rewards (Enemy Cards Xemnas)") - - regions["Floor 3"].locations.append("Olympus Coliseum Field (Attack Card Olympia)") - regions["Floor 3"].locations.append("Olympus Coliseum Room of Beginnings") - regions["Floor 3"].locations.append("Olympus Coliseum Room of Guidance") - regions["Floor 3"].locations.append("Olympus Coliseum Room of Guidance (Item Cards Hi-Potion)") - regions["Floor 3"].locations.append("Olympus Coliseum Room of Truth") - regions["Floor 3"].locations.append("Olympus Coliseum Room of Truth (Enemy Cards Hades)") - regions["Floor 3"].locations.append("Olympus Coliseum Room of Truth (Summon Cards Cloud)") - regions["Floor 3"].locations.append("Olympus Coliseum Room of Rewards (Attack Cards Metal Chocobo)") - if days: - regions["Floor 3"].locations.append("Olympus Coliseum Room of Rewards (Attack Cards Total Eclipse)") - - regions["Floor 4"].locations.append("Monstro Field (Attack Cards Wishing Star)") - regions["Floor 4"].locations.append("Monstro Room of Beginnings") - regions["Floor 4"].locations.append("Monstro Room of Guidance") - regions["Floor 4"].locations.append("Monstro Room of Guidance (Enemy Cards Parasite Cage)") - regions["Floor 4"].locations.append("Monstro Room of Truth") - regions["Floor 4"].locations.append("Monstro Room of Truth (Summon Cards Dumbo)") - if days: - regions["Floor 4"].locations.append("Monstro Room of Rewards (Enemy Cards Xaldin)") - - regions["Floor 5"].locations.append("Agrabah Bounty (Magic Cards Gravity)") - regions["Floor 5"].locations.append("Agrabah Field (Attack Cards Three Wishes)") - regions["Floor 5"].locations.append("Agrabah Room of Beginnings") - regions["Floor 5"].locations.append("Agrabah Room of Guidance") - regions["Floor 5"].locations.append("Agrabah Room of Guidance (Item Cards Ether)") - regions["Floor 5"].locations.append("Agrabah Room of Truth") - regions["Floor 5"].locations.append("Agrabah Room of Truth (Enemy Cards Jafar)") - regions["Floor 5"].locations.append("Agrabah Room of Truth (Summon Cards Genie)") - if days: - regions["Floor 5"].locations.append("Agrabah Room of Rewards (Enemy Cards Luxord)") - - regions["Floor 6"].locations.append("Halloween Town Field (Attack Cards Pumpkinhead)") - regions["Floor 6"].locations.append("Halloween Town Post Floor (Magic Cards Thunder)") - regions["Floor 6"].locations.append("Halloween Town Room of Beginnings") - regions["Floor 6"].locations.append("Halloween Town Room of Guidance") - regions["Floor 6"].locations.append("Halloween Town Room of Truth") - regions["Floor 6"].locations.append("Halloween Town Room of Truth (Enemy Cards Oogie Boogie)") - if days: - regions["Floor 6"].locations.append("Halloween Town Room of Rewards (Attack Cards Bond of Flame)") - - regions["Floor 7"].locations.append("Atlantica Field (Attack Cards Crabclaw)") - regions["Floor 7"].locations.append("Atlantica Post Floor (Magic Cards Aero)") - regions["Floor 7"].locations.append("Atlantica Room of Beginnings") - regions["Floor 7"].locations.append("Atlantica Room of Guidance") - regions["Floor 7"].locations.append("Atlantica Room of Truth") - regions["Floor 7"].locations.append("Atlantica Room of Truth (Enemy Cards Ursula)") - if days: - regions["Floor 7"].locations.append("Atlantica Room of Rewards (Enemy Cards Demyx)") - - regions["Floor 8"].locations.append("Neverland Field (Attack Cards Fairy Harp)") - regions["Floor 8"].locations.append("Neverland Room of Beginnings") - regions["Floor 8"].locations.append("Neverland Room of Guidance") - regions["Floor 8"].locations.append("Neverland Room of Truth") - regions["Floor 8"].locations.append("Neverland Room of Truth (Enemy Cards Hook)") - regions["Floor 8"].locations.append("Neverland Room of Truth (Summon Cards Tinker Bell)") - if days: - regions["Floor 8"].locations.append("Neverland Room of Rewards (Attack Cards Midnight Roar)") - - regions["Floor 9"].locations.append("Hollow Bastion Field (Attack Cards Divine Rose)") - regions["Floor 9"].locations.append("Hollow Bastion Room of Beginnings") - regions["Floor 9"].locations.append("Hollow Bastion Room of Guidance") - regions["Floor 9"].locations.append("Hollow Bastion Room of Truth") - regions["Floor 9"].locations.append("Hollow Bastion Room of Truth (Enemy Cards Dragon Maleficent)") - regions["Floor 9"].locations.append("Hollow Bastion Room of Rewards (Summon Cards Mushu)") - if days: - regions["Floor 9"].locations.append("Hollow Bastion Room of Rewards (Enemy Cards Xigbar)") - - regions["Floor 10"].locations.append("100 Acre Wood Clear (Summon Cards Bambi)") - regions["Floor 10"].locations.append("100 Acre Wood Mini Game Bumble Rumble (Item Cards Elixir)") - regions["Floor 10"].locations.append("100 Acre Wood Mini Game Whirlwind Plunge (Item Cards Mega-Ether)") - regions["Floor 10"].locations.append("100 Acre Wood Tigger's Playground (Attack Cards Spellbinder)") - - #regions["Floor 11"].locations.append("Twilight Town Post Floor (Item Cards Mega-Potion)") Bugged because of the post floor scene? - regions["Floor 11"].locations.append("Twilight Town Room of Beginnings") - regions["Floor 11"].locations.append("Twilight Town Room of Beginnings (Enemy Cards Vexen)") - if days: - regions["Floor 11"].locations.append("Twilight Town Room of Rewards (Enemy Cards Roxas)") - #regions["Floor 11"].locations.append("Twilight Town Bounty (Enemy Cards Ansem)") - - regions["Floor 12"].locations.append("Destiny Islands Post Floor (Attack Cards Oathkeeper)") - regions["Floor 12"].locations.append("Destiny Islands Post Floor (Attack Cards Oblivion)") - regions["Floor 12"].locations.append("Destiny Islands Post Floor (Enemy Cards Larxene)") - regions["Floor 12"].locations.append("Destiny Islands Post Floor (Enemy Cards Riku)") - regions["Floor 12"].locations.append("Destiny Islands Room of Beginnings") - regions["Floor 12"].locations.append("Destiny Islands Room of Guidance") - regions["Floor 12"].locations.append("Destiny Islands Room of Guidance (Enemy Cards Darkside)") - regions["Floor 12"].locations.append("Destiny Islands Room of Rewards (Item Cards Megalixir)") - if days: - #regions["Floor 12"].locations.append("Destiny Islands Bounty (Enemy Cards Zexion)") - regions["Floor 12"].locations.append("Destiny Islands Room of Rewards (Attack Cards Two Become One)") - - regions["Floor 13"].locations.append("Castle Oblivion Field Marluxia") - regions["Floor 13"].locations.append("Castle Oblivion Room of Beginnings") - regions["Floor 13"].locations.append("Castle Oblivion Room of Beginnings (Enemy Cards Axel)") - if days: - #regions["Floor 13"].locations.append("Castle Oblivion Bounty (Enemy Cards Lexaeus)") - regions["Floor 13"].locations.append("Castle Oblivion Room of Rewards (Attack Cards Star Seeker)") - - regions["Floor 13"].locations.append("Final Marluxia") + regions["Traverse Town"].locations.append("Starting Checks (Attack Cards Kingdom Key)") + regions["Traverse Town"].locations.append("Starting Checks (Item Cards Potion)") + regions["Traverse Town"].locations.append("Starting Checks (Magic Cards Blizzard)") + regions["Traverse Town"].locations.append("Starting Checks (Magic Cards Cure)") + if options.checks_behind_leon: + regions["Traverse Town"].locations.append("Traverse Town Room of Beginnings") + regions["Traverse Town"].locations.append("Traverse Town Room of Beginnings (Summon Cards Simba)") + regions["Traverse Town"].locations.append("Traverse Town Room of Guidance") + regions["Traverse Town"].locations.append("Traverse Town Room of Truth") + regions["Traverse Town"].locations.append("Traverse Town Room of Truth (Enemy Cards Guard Armor)") + regions["Traverse Town"].locations.append("Traverse Town Room of Rewards (Attack Cards Lionheart)") + if options.days_locations: + regions["Traverse Town"].locations.append("Traverse Town Bounty (Attack Cards Maverick Flare)") + regions["Traverse Town"].locations.append("Traverse Town Room of Rewards (Enemy Cards Saix)") + + regions["Wonderland"].locations.append("Wonderland Bounty (Magic Cards Stop)") + regions["Wonderland"].locations.append("Wonderland Field (Attack Cards Lady Luck)") + regions["Wonderland"].locations.append("Wonderland Room of Beginnings") + regions["Wonderland"].locations.append("Wonderland Room of Beginnings (Enemy Cards Card Soldier)") + regions["Wonderland"].locations.append("Wonderland Room of Guidance") + regions["Wonderland"].locations.append("Wonderland Room of Truth") + regions["Wonderland"].locations.append("Wonderland Room of Truth (Enemy Cards Trickmaster)") + if options.days_locations: + regions["Wonderland"].locations.append("Wonderland Room of Rewards (Enemy Cards Xemnas)") + + regions["Olympus Coliseum"].locations.append("Olympus Coliseum Field (Attack Card Olympia)") + regions["Olympus Coliseum"].locations.append("Olympus Coliseum Room of Beginnings") + regions["Olympus Coliseum"].locations.append("Olympus Coliseum Room of Guidance") + regions["Olympus Coliseum"].locations.append("Olympus Coliseum Room of Guidance (Item Cards Hi-Potion)") + regions["Olympus Coliseum"].locations.append("Olympus Coliseum Room of Truth") + regions["Olympus Coliseum"].locations.append("Olympus Coliseum Room of Truth (Enemy Cards Hades)") + regions["Olympus Coliseum"].locations.append("Olympus Coliseum Room of Truth (Summon Cards Cloud)") + regions["Olympus Coliseum"].locations.append("Olympus Coliseum Room of Rewards (Attack Cards Metal Chocobo)") + if options.days_locations: + regions["Olympus Coliseum"].locations.append("Olympus Coliseum Room of Rewards (Attack Cards Total Eclipse)") + + regions["Monstro"].locations.append("Monstro Field (Attack Cards Wishing Star)") + regions["Monstro"].locations.append("Monstro Room of Beginnings") + regions["Monstro"].locations.append("Monstro Room of Guidance") + regions["Monstro"].locations.append("Monstro Room of Guidance (Enemy Cards Parasite Cage)") + regions["Monstro"].locations.append("Monstro Room of Truth") + regions["Monstro"].locations.append("Monstro Room of Truth (Summon Cards Dumbo)") + if options.days_locations: + regions["Monstro"].locations.append("Monstro Room of Rewards (Enemy Cards Xaldin)") + + regions["Agrabah"].locations.append("Agrabah Bounty (Magic Cards Gravity)") + regions["Agrabah"].locations.append("Agrabah Field (Attack Cards Three Wishes)") + regions["Agrabah"].locations.append("Agrabah Room of Beginnings") + regions["Agrabah"].locations.append("Agrabah Room of Guidance") + regions["Agrabah"].locations.append("Agrabah Room of Guidance (Item Cards Ether)") + regions["Agrabah"].locations.append("Agrabah Room of Truth") + regions["Agrabah"].locations.append("Agrabah Room of Truth (Enemy Cards Jafar)") + regions["Agrabah"].locations.append("Agrabah Room of Truth (Summon Cards Genie)") + if options.days_locations: + regions["Agrabah"].locations.append("Agrabah Room of Rewards (Enemy Cards Luxord)") + + regions["Halloween Town"].locations.append("Halloween Town Field (Attack Cards Pumpkinhead)") + regions["Halloween Town"].locations.append("Halloween Town Room of Beginnings") + regions["Halloween Town"].locations.append("Halloween Town Room of Guidance") + regions["Halloween Town"].locations.append("Halloween Town Room of Truth") + regions["Halloween Town"].locations.append("Halloween Town Room of Truth (Enemy Cards Oogie Boogie)") + if options.days_locations: + regions["Halloween Town"].locations.append("Halloween Town Room of Rewards (Attack Cards Bond of Flame)") + + regions["Atlantica"].locations.append("Atlantica Field (Attack Cards Crabclaw)") + regions["Atlantica"].locations.append("Atlantica Room of Beginnings") + regions["Atlantica"].locations.append("Atlantica Room of Guidance") + regions["Atlantica"].locations.append("Atlantica Room of Truth") + regions["Atlantica"].locations.append("Atlantica Room of Truth (Enemy Cards Ursula)") + if options.days_locations: + regions["Atlantica"].locations.append("Atlantica Room of Rewards (Enemy Cards Demyx)") + + regions["Neverland"].locations.append("Neverland Field (Attack Cards Fairy Harp)") + regions["Neverland"].locations.append("Neverland Room of Beginnings") + regions["Neverland"].locations.append("Neverland Room of Guidance") + regions["Neverland"].locations.append("Neverland Room of Truth") + regions["Neverland"].locations.append("Neverland Room of Truth (Enemy Cards Hook)") + regions["Neverland"].locations.append("Neverland Room of Truth (Summon Cards Tinker Bell)") + if options.days_locations: + regions["Neverland"].locations.append("Neverland Room of Rewards (Attack Cards Midnight Roar)") + + regions["Hollow Bastion"].locations.append("Hollow Bastion Field (Attack Cards Divine Rose)") + regions["Hollow Bastion"].locations.append("Hollow Bastion Room of Beginnings") + regions["Hollow Bastion"].locations.append("Hollow Bastion Room of Guidance") + regions["Hollow Bastion"].locations.append("Hollow Bastion Room of Truth") + regions["Hollow Bastion"].locations.append("Hollow Bastion Room of Truth (Enemy Cards Dragon Maleficent)") + regions["Hollow Bastion"].locations.append("Hollow Bastion Room of Rewards (Summon Cards Mushu)") + if options.days_locations: + regions["Hollow Bastion"].locations.append("Hollow Bastion Room of Rewards (Enemy Cards Xigbar)") + + regions["100 Acre Wood"].locations.append("100 Acre Wood Clear (Summon Cards Bambi)") + if options.minigames: + regions["100 Acre Wood"].locations.append("100 Acre Wood Bumble Rumble (Item Cards Elixir)") + regions["100 Acre Wood"].locations.append("100 Acre Wood Whirlwind Plunge (Item Cards Mega-Ether)") + regions["100 Acre Wood"].locations.append("100 Acre Wood Tigger's Playground (Attack Cards Spellbinder)") + + #regions["Twilight Town"].locations.append("11F Exit Hall Riku III (Item Cards Mega-Potion)") + regions["Twilight Town"].locations.append("Twilight Town Room of Beginnings") + regions["Twilight Town"].locations.append("Twilight Town Room of Beginnings (Enemy Cards Vexen)") + if options.days_locations: + regions["Twilight Town"].locations.append("Twilight Town Room of Rewards (Enemy Cards Roxas)") + #regions["Twilight Town"].locations.append("Twilight Town Bounty (Enemy Cards Ansem)") + + regions["Destiny Islands"].locations.append("Destiny Islands Room of Guidance (Attack Cards Oathkeeper)") + regions["Destiny Islands"].locations.append("Destiny Islands Room of Beginnings") + regions["Destiny Islands"].locations.append("Destiny Islands Room of Guidance") + regions["Destiny Islands"].locations.append("Destiny Islands Room of Guidance (Enemy Cards Darkside)") + regions["Destiny Islands"].locations.append("Destiny Islands Room of Rewards (Item Cards Megalixir)") + if options.days_locations: + #regions["Destiny Islands"].locations.append("Destiny Islands Bounty (Enemy Cards Zexion)") + regions["Destiny Islands"].locations.append("Destiny Islands Room of Rewards (Attack Cards Two Become One)") + + regions["Castle Oblivion"].locations.append("Castle Oblivion Field Marluxia") + regions["Castle Oblivion"].locations.append("Castle Oblivion Room of Beginnings") + regions["Castle Oblivion"].locations.append("Castle Oblivion Room of Beginnings (Enemy Cards Axel)") + if options.days_locations: + #regions["Castle Oblivion"].locations.append("Castle Oblivion Bounty (Enemy Cards Lexaeus)") + regions["Castle Oblivion"].locations.append("Castle Oblivion Room of Rewards (Attack Cards Star Seeker)") + + regions["Castle Oblivion"].locations.append("Final Marluxia") + + regions["Castle Oblivion Halls"].locations.append("01F Exit Hall Axel I (Magic Cards Fire)") + regions["Castle Oblivion Halls"].locations.append("06F Exit Hall Larxene I (Magic Cards Thunder)") + regions["Castle Oblivion Halls"].locations.append("07F Exit Hall Riku I (Magic Cards Aero)") + regions["Castle Oblivion Halls"].locations.append("12F Exit Hall Larxene II (Attack Cards Oblivion)") + regions["Castle Oblivion Halls"].locations.append("12F Exit Hall Larxene II (Enemy Cards Larxene)") + regions["Castle Oblivion Halls"].locations.append("12F Exit Hall Riku IV (Enemy Cards Riku)") regions["Heartless"].locations.append("Heartless Air Pirate") regions["Heartless"].locations.append("Heartless Air Soldier") @@ -192,25 +195,114 @@ def create_regions(multiworld: MultiWorld, player: int, days: bool, checks_behin regions["Heartless"].locations.append("Heartless Wyvern") regions["Heartless"].locations.append("Heartless Yellow Opera") + if options.sleights: + if options.levels: + regions["Levels"].locations.append("Level 02 (Sleight Sliding Dash)") + regions["Levels"].locations.append("Level 07 (Sleight Stun Impact)") + regions["Levels"].locations.append("Level 12 (Sleight Strike Raid)") + regions["Levels"].locations.append("Level 17 (Sleight Blitz)") + regions["Levels"].locations.append("Level 22 (Sleight Zantetsuken)") + regions["Levels"].locations.append("Level 27 (Sleight Sonic Blade)") + regions["Levels"].locations.append("Level 32 (Sleight Lethal Frame)") + regions["Levels"].locations.append("Level 37 (Sleight Tornado)") + regions["Levels"].locations.append("Level 42 (Sleight Ars Arcanum)") + regions["Levels"].locations.append("Level 47 (Sleight Holy)") + regions["Levels"].locations.append("Level 52 (Sleight Ragnarok)") + regions["Levels"].locations.append("Level 57 (Sleight Mega Flare)") + if options.minigames: + regions["100 Acre Wood"].locations.append("100 Acre Wood Balloon Glider (Sleight Firaga Burst)") + regions["100 Acre Wood"].locations.append("100 Acre Wood Veggie Panic (Sleight Cross-slash+)") + regions["100 Acre Wood"].locations.append("100 Acre Wood Jump-a-Thon (Sleight Idyll Romp)") + regions["100 Acre Wood"].locations.append("100 Acre Wood Clear (Sleight Paradise LV2)") + regions["100 Acre Wood"].locations.append("100 Acre Wood Clear (Sleight Paradise LV3)") + regions["100 Acre Wood"].locations.append("100 Acre Wood Piglet (Sleight Confuse)") + regions["Agrabah"].locations.append("Agrabah Bounty (Sleight Graviga)") + regions["Agrabah"].locations.append("Agrabah Bounty (Sleight Gravira)") + regions["Agrabah"].locations.append("Agrabah Ally (Sleight Sandstorm LV2)") + regions["Agrabah"].locations.append("Agrabah Ally (Sleight Sandstorm LV3)") + regions["Agrabah"].locations.append("Agrabah Room of Rewards (Sleight Warp)") + regions["Agrabah"].locations.append("Agrabah Room of Truth (Sleight Showtime LV2)") + regions["Agrabah"].locations.append("Agrabah Room of Truth (Sleight Showtime LV3)") + regions["Atlantica"].locations.append("Atlantica Bounty (Sleight Homing Blizzara)") + regions["Atlantica"].locations.append("Atlantica Bounty (Sleight Shock Impact)") + regions["Atlantica"].locations.append("Atlantica Ally (Sleight Spiral Wave LV2)") + regions["Atlantica"].locations.append("Atlantica Ally (Sleight Spiral Wave LV3)") + regions["Atlantica"].locations.append("Atlantica Room of Rewards (Sleight Quake)") + regions["Castle Oblivion Halls"].locations.append("01F Exit Hall Axel I (Sleight Fira)") + regions["Castle Oblivion Halls"].locations.append("01F Exit Hall Axel I (Sleight Firaga)") + regions["Castle Oblivion Halls"].locations.append("06F Exit Hall Larxene I (Sleight Thundara)") + regions["Castle Oblivion Halls"].locations.append("06F Exit Hall Larxene I (Sleight Thundaga)") + regions["Castle Oblivion Halls"].locations.append("07F Exit Hall Riku I (Sleight Aeroga)") + regions["Castle Oblivion Halls"].locations.append("07F Exit Hall Riku I (Sleight Aerora)") + regions["Castle Oblivion Halls"].locations.append("08F Exit Hall Riku II (Sleight Magnet Spiral)") + regions["Castle Oblivion Halls"].locations.append("10F Exit Hall Vexen I (Sleight Freeze)") + regions["Castle Oblivion"].locations.append("Castle Oblivion Bounty (Sleight Raging Storm)") + regions["Castle Oblivion"].locations.append("Castle Oblivion Entrance (Sleight Trinity Limit)") + regions["Destiny Islands"].locations.append("Destiny Islands Bounty (Sleight Judgment)") + regions["Halloween Town"].locations.append("Halloween Town Bounty (Sleight Gifted Miracle)") + regions["Halloween Town"].locations.append("Halloween Town Ally (Sleight Surprise! LV2)") + regions["Halloween Town"].locations.append("Halloween Town Ally (Sleight Surprise! LV3)") + regions["Halloween Town"].locations.append("Halloween Town Entrance (Sleight Terror)") + regions["Halloween Town"].locations.append("Halloween Town Room of Rewards (Sleight Bind)") + regions["Hollow Bastion"].locations.append("Hollow Bastion Bounty (Sleight Reflect Raid)") + regions["Hollow Bastion"].locations.append("Hollow Bastion Ally (Sleight Furious Volley LV2)") + regions["Hollow Bastion"].locations.append("Hollow Bastion Ally (Sleight Furious Volley LV3)") + regions["Hollow Bastion"].locations.append("Hollow Bastion Room of Rewards (Sleight Flare Breath LV2)") + regions["Hollow Bastion"].locations.append("Hollow Bastion Room of Rewards (Sleight Flare Breath LV3)") + regions["Monstro"].locations.append("Monstro Bounty (Sleight Fire Raid)") + regions["Monstro"].locations.append("Monstro Room of Rewards (Sleight Aqua Splash)") + regions["Monstro"].locations.append("Monstro Room of Truth (Sleight Splash LV2)") + regions["Monstro"].locations.append("Monstro Room of Truth (Sleight Splash LV3)") + regions["Neverland"].locations.append("Neverland Ally (Sleight Hummingbird LV2)") + regions["Neverland"].locations.append("Neverland Ally (Sleight Hummingbird LV3)") + regions["Neverland"].locations.append("Neverland Bounty (Sleight Teleport)") + regions["Neverland"].locations.append("Neverland Room of Rewards (Sleight Thunder Raid)") + regions["Neverland"].locations.append("Neverland Room of Truth (Sleight Twinkle LV2)") + regions["Neverland"].locations.append("Neverland Room of Truth (Sleight Twinkle LV3)") + regions["Olympus Coliseum"].locations.append("Olympus Coliseum Bounty (Sleight Blizzard Raid)") + regions["Olympus Coliseum"].locations.append("Olympus Coliseum Room of Truth (Sleight Cross-slash)") + regions["Olympus Coliseum"].locations.append("Olympus Coliseum Room of Truth (Sleight Omnislash)") + regions["Traverse Town"].locations.append("Starting Checks (Sleight Blizzaga)") + regions["Traverse Town"].locations.append("Starting Checks (Sleight Blizzara)") + regions["Traverse Town"].locations.append("Starting Checks (Sleight Cura)") + regions["Traverse Town"].locations.append("Starting Checks (Sleight Curaga)") + regions["Traverse Town"].locations.append("Starting Checks (Sleight Goofy Smash)") + regions["Traverse Town"].locations.append("Starting Checks (Sleight Goofy Tornado LV2)") + regions["Traverse Town"].locations.append("Starting Checks (Sleight Goofy Tornado LV3)") + regions["Traverse Town"].locations.append("Starting Checks (Sleight Magic LV2)") + regions["Traverse Town"].locations.append("Starting Checks (Sleight Magic LV3)") + regions["Traverse Town"].locations.append("Starting Checks (Sleight Wild Crush)") + if options.checks_behind_leon: + regions["Traverse Town"].locations.append("Traverse Town Room of Beginnings (Sleight Lucky Bounty LV2)") + regions["Traverse Town"].locations.append("Traverse Town Room of Beginnings (Sleight Lucky Bounty LV3)") + regions["Traverse Town"].locations.append("Traverse Town Room of Beginnings (Sleight Proud Roar LV2)") + regions["Traverse Town"].locations.append("Traverse Town Room of Beginnings (Sleight Proud Roar LV3)") + regions["Twilight Town"].locations.append("Twilight Town Bounty (Sleight Warpinator)") + regions["Twilight Town"].locations.append("Twilight Town Room of Rewards (Sleight Stardust Blitz)") + regions["Wonderland"].locations.append("Wonderland Bounty (Sleight Stopga)") + regions["Wonderland"].locations.append("Wonderland Bounty (Sleight Stopra)") + regions["Wonderland"].locations.append("Wonderland Room of Rewards (Sleight Synchro)") + # Set up the regions correctly. for name, data in regions.items(): multiworld.regions.append(create_region(multiworld, player, name, data)) - multiworld.get_entrance("Floor 1", player).connect(multiworld.get_region("Floor 1", player)) - multiworld.get_entrance("Floor 2", player).connect(multiworld.get_region("Floor 2", player)) - multiworld.get_entrance("Floor 3", player).connect(multiworld.get_region("Floor 3", player)) - multiworld.get_entrance("Floor 4", player).connect(multiworld.get_region("Floor 4", player)) - multiworld.get_entrance("Floor 5", player).connect(multiworld.get_region("Floor 5", player)) - multiworld.get_entrance("Floor 6", player).connect(multiworld.get_region("Floor 6", player)) - multiworld.get_entrance("Floor 7", player).connect(multiworld.get_region("Floor 7", player)) - multiworld.get_entrance("Floor 8", player).connect(multiworld.get_region("Floor 8", player)) - multiworld.get_entrance("Floor 9", player).connect(multiworld.get_region("Floor 9", player)) - multiworld.get_entrance("Floor 10", player).connect(multiworld.get_region("Floor 10", player)) - multiworld.get_entrance("Floor 11", player).connect(multiworld.get_region("Floor 11", player)) - multiworld.get_entrance("Floor 12", player).connect(multiworld.get_region("Floor 12", player)) - multiworld.get_entrance("Floor 13", player).connect(multiworld.get_region("Floor 13", player)) - multiworld.get_entrance("Heartless", player).connect(multiworld.get_region("Heartless", player)) - multiworld.get_entrance("Warp", player).connect(multiworld.get_region("Warp", player)) + multiworld.get_entrance("Traverse Town" , player).connect(multiworld.get_region("Traverse Town" , player)) + multiworld.get_entrance("Wonderland" , player).connect(multiworld.get_region("Wonderland" , player)) + multiworld.get_entrance("Olympus Coliseum" , player).connect(multiworld.get_region("Olympus Coliseum" , player)) + multiworld.get_entrance("Monstro" , player).connect(multiworld.get_region("Monstro" , player)) + multiworld.get_entrance("Agrabah" , player).connect(multiworld.get_region("Agrabah" , player)) + multiworld.get_entrance("Halloween Town" , player).connect(multiworld.get_region("Halloween Town" , player)) + multiworld.get_entrance("Atlantica" , player).connect(multiworld.get_region("Atlantica" , player)) + multiworld.get_entrance("Neverland" , player).connect(multiworld.get_region("Neverland" , player)) + multiworld.get_entrance("Hollow Bastion" , player).connect(multiworld.get_region("Hollow Bastion" , player)) + multiworld.get_entrance("100 Acre Wood" , player).connect(multiworld.get_region("100 Acre Wood" , player)) + multiworld.get_entrance("Twilight Town" , player).connect(multiworld.get_region("Twilight Town" , player)) + multiworld.get_entrance("Destiny Islands" , player).connect(multiworld.get_region("Destiny Islands" , player)) + multiworld.get_entrance("Castle Oblivion" , player).connect(multiworld.get_region("Castle Oblivion" , player)) + multiworld.get_entrance("Heartless" , player).connect(multiworld.get_region("Heartless" , player)) + multiworld.get_entrance("Castle Oblivion Halls", player).connect(multiworld.get_region("Castle Oblivion Halls", player)) + multiworld.get_entrance("Levels" , player).connect(multiworld.get_region("Levels" , player)) def create_region(multiworld: MultiWorld, player: int, name: str, data: KHRECOMRegionData): diff --git a/worlds/khrecom/Rules.py b/worlds/khrecom/Rules.py index 7889d84a0dc8..954ac5af93b0 100644 --- a/worlds/khrecom/Rules.py +++ b/worlds/khrecom/Rules.py @@ -47,22 +47,27 @@ def has_x_worlds(state: CollectionState, player: int, num_of_worlds) -> bool: def has_item(state: CollectionState, player: int, item) -> bool: return state.has(item, player) -def set_rules(multiworld: MultiWorld, player: int, days: bool): +def set_rules(multiworld: MultiWorld, player: int, options): #Location rules. #Keys multiworld.get_location("Traverse Town Room of Rewards (Attack Cards Lionheart)" , player).access_rule = lambda state: has_item(state, player,"Key to Rewards Traverse Town") multiworld.get_location("Olympus Coliseum Room of Rewards (Attack Cards Metal Chocobo)" , player).access_rule = lambda state: has_item(state, player,"Key to Rewards Olympus Coliseum") multiworld.get_location("Hollow Bastion Room of Rewards (Summon Cards Mushu)" , player).access_rule = lambda state: has_item(state, player,"Key to Rewards Hollow Bastion") multiworld.get_location("Destiny Islands Room of Rewards (Item Cards Megalixir)" , player).access_rule = lambda state: has_item(state, player,"Key to Rewards Destiny Islands") - multiworld.get_location("Atlantica Post Floor (Magic Cards Aero)" , player).access_rule = lambda state: has_item(state, player,"World Card Halloween Town") - #multiworld.get_location("Twilight Town Post Floor (Item Cards Mega-Potion)" , player).access_rule = lambda state: has_item(state, player,"World Card Halloween Town") and has_item(state, player,"World Card Atlantica") Bugged because of the post cutscene? - multiworld.get_location("Destiny Islands Post Floor (Enemy Cards Larxene)" , player).access_rule = lambda state: has_item(state, player,"World Card Halloween Town") and has_item(state, player,"World Card Atlantica") - multiworld.get_location("Destiny Islands Post Floor (Enemy Cards Riku)" , player).access_rule = lambda state: has_item(state, player,"World Card Halloween Town") and has_item(state, player,"World Card Atlantica") - multiworld.get_location("Destiny Islands Post Floor (Attack Cards Oblivion)" , player).access_rule = lambda state: has_item(state, player,"World Card Halloween Town") and has_item(state, player,"World Card Atlantica") + multiworld.get_location("06F Exit Hall Larxene I (Magic Cards Thunder)" , player).access_rule = lambda state: has_x_worlds(state, player, 4) + multiworld.get_location("06F Exit Hall Larxene I (Sleight Thundara)" , player).access_rule = lambda state: has_x_worlds(state, player, 4) + multiworld.get_location("06F Exit Hall Larxene I (Sleight Thundaga)" , player).access_rule = lambda state: has_x_worlds(state, player, 4) + multiworld.get_location("07F Exit Hall Riku I (Magic Cards Aero)" , player).access_rule = lambda state: has_x_worlds(state, player, 5) + multiworld.get_location("07F Exit Hall Riku I (Sleight Aerora)" , player).access_rule = lambda state: has_x_worlds(state, player, 5) + multiworld.get_location("07F Exit Hall Riku I (Sleight Aeroga)" , player).access_rule = lambda state: has_x_worlds(state, player, 5) + #multiworld.get_location("11F Exit Hall Riku III (Item Cards Mega-Potion)" , player).access_rule = lambda state: has_x_worlds(state, player, 6) + multiworld.get_location("12F Exit Hall Larxene II (Attack Cards Oblivion)" , player).access_rule = lambda state: has_x_worlds(state, player, 7) + multiworld.get_location("12F Exit Hall Larxene II (Enemy Cards Larxene)" , player).access_rule = lambda state: has_x_worlds(state, player, 7) + multiworld.get_location("12F Exit Hall Riku IV (Enemy Cards Riku)" , player).access_rule = lambda state: has_x_worlds(state, player, 7) multiworld.get_location("100 Acre Wood Tigger's Playground (Attack Cards Spellbinder)" , player).access_rule = lambda state: has_item(state, player,"World Card Neverland") and has_item(state, player,"World Card Monstro") #Days Rules - if days: + if options.days_locations: multiworld.get_location("Traverse Town Room of Rewards (Enemy Cards Saix)" , player).access_rule = lambda state: has_item(state, player,"Key to Rewards Traverse Town") multiworld.get_location("Wonderland Room of Rewards (Enemy Cards Xemnas)" , player).access_rule = lambda state: has_item(state, player,"Key to Rewards Wonderland") multiworld.get_location("Olympus Coliseum Room of Rewards (Attack Cards Total Eclipse)" , player).access_rule = lambda state: has_item(state, player,"Key to Rewards Olympus Coliseum") @@ -103,19 +108,43 @@ def set_rules(multiworld: MultiWorld, player: int, days: bool): multiworld.get_location("Heartless Wyvern" , player).access_rule = lambda state: has_item(state, player,"World Card Hollow Bastion") or has_castle_oblivion(state, player) multiworld.get_location("Heartless Yellow Opera" , player).access_rule = lambda state: has_item(state, player,"World Card Monstro") or has_item(state, player,"World Card Agrabah") or has_item(state, player,"World Card Neverland") or has_castle_oblivion(state, player) + if options.sleights: + if options.levels: + multiworld.get_location("Level 12 (Sleight Strike Raid)" , player).access_rule = lambda state: has_x_worlds(state, player, 2) + multiworld.get_location("Level 17 (Sleight Blitz)" , player).access_rule = lambda state: has_x_worlds(state, player, 2) + multiworld.get_location("Level 22 (Sleight Zantetsuken)" , player).access_rule = lambda state: has_x_worlds(state, player, 3) + multiworld.get_location("Level 27 (Sleight Sonic Blade)" , player).access_rule = lambda state: has_x_worlds(state, player, 3) + multiworld.get_location("Level 32 (Sleight Lethal Frame)" , player).access_rule = lambda state: has_x_worlds(state, player, 4) + multiworld.get_location("Level 37 (Sleight Tornado)" , player).access_rule = lambda state: has_x_worlds(state, player, 4) + multiworld.get_location("Level 42 (Sleight Ars Arcanum)" , player).access_rule = lambda state: has_x_worlds(state, player, 5) + multiworld.get_location("Level 47 (Sleight Holy)" , player).access_rule = lambda state: has_x_worlds(state, player, 5) + multiworld.get_location("Level 52 (Sleight Ragnarok)" , player).access_rule = lambda state: has_x_worlds(state, player, 6) + multiworld.get_location("Level 57 (Sleight Mega Flare)" , player).access_rule = lambda state: has_x_worlds(state, player, 6) + multiworld.get_location("Agrabah Room of Rewards (Sleight Warp)" , player).access_rule = lambda state: has_item(state, player, "Key to Rewards Agrabah") + multiworld.get_location("Atlantica Room of Rewards (Sleight Quake)" , player).access_rule = lambda state: has_item(state, player, "Key to Rewards Atlantica") + multiworld.get_location("Halloween Town Room of Rewards (Sleight Bind)" , player).access_rule = lambda state: has_item(state, player, "Key to Rewards Halloween Town") + multiworld.get_location("Hollow Bastion Room of Rewards (Sleight Flare Breath LV2)" , player).access_rule = lambda state: has_item(state, player, "Key to Rewards Hollow Bastion") + multiworld.get_location("Hollow Bastion Room of Rewards (Sleight Flare Breath LV3)" , player).access_rule = lambda state: has_item(state, player, "Key to Rewards Hollow Bastion") + multiworld.get_location("Monstro Room of Rewards (Sleight Aqua Splash)" , player).access_rule = lambda state: has_item(state, player, "Key to Rewards Monstro") + multiworld.get_location("Neverland Room of Rewards (Sleight Thunder Raid)" , player).access_rule = lambda state: has_item(state, player, "Key to Rewards Neverland") + multiworld.get_location("Twilight Town Room of Rewards (Sleight Stardust Blitz)" , player).access_rule = lambda state: has_item(state, player, "Key to Rewards Twilight Town") + multiworld.get_location("Wonderland Room of Rewards (Sleight Synchro)" , player).access_rule = lambda state: has_item(state, player, "Key to Rewards Wonderland") + multiworld.get_location("08F Exit Hall Riku II (Sleight Magnet Spiral)" , player).access_rule = lambda state: has_x_worlds(state, player, 5) + multiworld.get_location("10F Exit Hall Vexen I (Sleight Freeze)" , player).access_rule = lambda state: has_x_worlds(state, player, 6) + # Region rules. - multiworld.get_entrance("Floor 2" , player).access_rule = lambda state: has_item(state, player,"World Card Wonderland") - multiworld.get_entrance("Floor 3" , player).access_rule = lambda state: has_item(state, player,"World Card Olympus Coliseum") - multiworld.get_entrance("Floor 4" , player).access_rule = lambda state: has_item(state, player,"World Card Monstro") - multiworld.get_entrance("Floor 5" , player).access_rule = lambda state: has_item(state, player,"World Card Agrabah") - multiworld.get_entrance("Floor 6" , player).access_rule = lambda state: has_item(state, player,"World Card Halloween Town") - multiworld.get_entrance("Floor 7" , player).access_rule = lambda state: has_item(state, player,"World Card Atlantica") - multiworld.get_entrance("Floor 8" , player).access_rule = lambda state: has_item(state, player,"World Card Neverland") - multiworld.get_entrance("Floor 9" , player).access_rule = lambda state: has_item(state, player,"World Card Hollow Bastion") - multiworld.get_entrance("Floor 10" , player).access_rule = lambda state: has_item(state, player,"World Card 100 Acre Wood") - multiworld.get_entrance("Floor 11" , player).access_rule = lambda state: has_item(state, player,"World Card Twilight Town") and has_x_worlds(state, player, 4) - multiworld.get_entrance("Floor 12" , player).access_rule = lambda state: has_item(state, player,"World Card Destiny Islands") and has_x_worlds(state, player, 6) - multiworld.get_entrance("Floor 13" , player).access_rule = lambda state: has_castle_oblivion(state, player) + multiworld.get_entrance("Wonderland" , player).access_rule = lambda state: has_item(state, player,"World Card Wonderland") + multiworld.get_entrance("Olympus Coliseum" , player).access_rule = lambda state: has_item(state, player,"World Card Olympus Coliseum") + multiworld.get_entrance("Monstro" , player).access_rule = lambda state: has_item(state, player,"World Card Monstro") + multiworld.get_entrance("Agrabah" , player).access_rule = lambda state: has_item(state, player,"World Card Agrabah") + multiworld.get_entrance("Halloween Town" , player).access_rule = lambda state: has_item(state, player,"World Card Halloween Town") + multiworld.get_entrance("Atlantica" , player).access_rule = lambda state: has_item(state, player,"World Card Atlantica") + multiworld.get_entrance("Neverland" , player).access_rule = lambda state: has_item(state, player,"World Card Neverland") + multiworld.get_entrance("Hollow Bastion" , player).access_rule = lambda state: has_item(state, player,"World Card Hollow Bastion") + multiworld.get_entrance("100 Acre Wood" , player).access_rule = lambda state: has_item(state, player,"World Card 100 Acre Wood") + multiworld.get_entrance("Twilight Town" , player).access_rule = lambda state: has_item(state, player,"World Card Twilight Town") and has_x_worlds(state, player, 4) + multiworld.get_entrance("Destiny Islands" , player).access_rule = lambda state: has_item(state, player,"World Card Destiny Islands") and has_x_worlds(state, player, 6) + multiworld.get_entrance("Castle Oblivion" , player).access_rule = lambda state: has_castle_oblivion(state, player) diff --git a/worlds/khrecom/__init__.py b/worlds/khrecom/__init__.py index e09240647e62..10832e6d23e5 100644 --- a/worlds/khrecom/__init__.py +++ b/worlds/khrecom/__init__.py @@ -45,10 +45,12 @@ class KHRECOMWorld(World): item_name_to_id = {name: data.code for name, data in item_table.items()} location_name_to_id = {name: data.code for name, data in location_table.items()} + + world_order = [] def create_items(self): item_pool: List[KHRECOMItem] = [] - self.multiworld.get_location("Destiny Islands Post Floor (Enemy Cards Larxene)", self.player).place_locked_item(self.create_item("Friend Card Pluto")) + self.multiworld.get_location("12F Exit Hall Larxene II (Enemy Cards Larxene)", self.player).place_locked_item(self.create_item("Friend Card Pluto")) self.multiworld.get_location("Final Marluxia", self.player).place_locked_item(self.create_item("Victory")) starting_locations = get_locations_by_category("Starting") starting_locations = self.random.sample(list(starting_locations.keys()),4) @@ -115,11 +117,23 @@ def create_event(self, name: str) -> KHRECOMItem: return KHRECOMItem(name, data.classification, data.code, self.player) def set_rules(self): - set_rules(self.multiworld, self.player, self.options.days_locations) + set_rules(self.multiworld, self.player, self.options) def create_regions(self): - create_regions(self.multiworld, self.player, self.options.days_locations, self.options.checks_behind_leon) + create_regions(self.multiworld, self.player, self.options) def fill_slot_data(self) -> dict: - slot_data = {"EXP Multiplier": int(self.options.exp_multiplier)} - return slot_data \ No newline at end of file + self.decide_world_order() + world_order_string = "" + for world_id in self.world_order: + world_order_string = world_order_string + str(world_id) + "," + world_order_string = world_order_string[:-1] + slot_data = {"EXP Multiplier": int(self.options.exp_multiplier) + ,"World Order": world_order_string} + return slot_data + + def decide_world_order(self): + if len(self.world_order) == 0: + possible_world_assignments = [2,3,4,5,6,7,8,9,10] + self.random.shuffle(possible_world_assignments) + self.world_order = possible_world_assignments \ No newline at end of file