diff --git a/data/lua/connector_khcom.lua b/data/lua/connector_khcom.lua index cb03d4e0dd40..7db27fab525b 100644 --- a/data/lua/connector_khcom.lua +++ b/data/lua/connector_khcom.lua @@ -4,122 +4,122 @@ client_communication_path = os.getenv('LOCALAPPDATA') .. "\\KHCOM\\" function define_location_ids() location_ids = {} - location_ids["Kingdom Key"] = 2671001 - location_ids["Three Wishes"] = 2671002 - location_ids["Crabclaw"] = 2671003 - location_ids["Pumpkinhead"] = 2671004 - location_ids["Fairy Harp"] = 2671005 - location_ids["Wishing Star"] = 2671006 - location_ids["Spellbinder"] = 2671007 - location_ids["Metal Chocobo"] = 2671008 - location_ids["Olympia"] = 2671009 - location_ids["Lionheart"] = 2671010 - location_ids["Lady Luck"] = 2671011 - location_ids["Divine Rose"] = 2671012 - location_ids["Oathkeeper"] = 2671013 - location_ids["Oblivion"] = 2671014 - location_ids["Diamond Dust"] = 2671015 - location_ids["One Winged Angel"] = 2671016 - location_ids["Fire"] = 2671017 - location_ids["Blizzard"] = 2671018 - location_ids["Thunder"] = 2671019 - location_ids["Cure"] = 2671020 - location_ids["Gravity"] = 2671021 - location_ids["Stop"] = 2671022 - location_ids["Aero"] = 2671023 - location_ids["Simba"] = 2671024 - location_ids["Genie"] = 2671025 - location_ids["Bambi"] = 2671026 - location_ids["Dumbo"] = 2671027 - location_ids["Tinker Bell"] = 2671028 - location_ids["Mushu"] = 2671029 - location_ids["Cloud"] = 2671030 - location_ids["Potion"] = 2671031 - location_ids["Hi-Potion"] = 2671032 - location_ids["Mega-Potion"] = 2671033 - location_ids["Ether"] = 2671034 - location_ids["Mega-Ether"] = 2671035 - location_ids["Elixir"] = 2671036 - location_ids["Megalixir"] = 2671037 - location_ids["Guard Armor"] = 2671038 - location_ids["Parasite Cage"] = 2671039 - location_ids["Trickmaster"] = 2671040 - location_ids["Darkside"] = 2671041 - location_ids["Card Soldier (Red)"] = 2671042 - location_ids["Hades"] = 2671043 - location_ids["Jafar"] = 2671044 - location_ids["Oogie Boogie"] = 2671045 - location_ids["Ursula"] = 2671046 - location_ids["Hook"] = 2671047 - location_ids["Dragon Maleficent"] = 2671048 - location_ids["Riku"] = 2671049 - location_ids["Axel"] = 2671050 - location_ids["Larxene"] = 2671051 - location_ids["Vexen"] = 2671052 - location_ids["Marluxia"] = 2671053 - location_ids["Shadow"] = 2672001 - location_ids["Soldier"] = 2672002 - location_ids["Large Body"] = 2672003 - location_ids["Red Nocturne"] = 2672004 - location_ids["Blue Rhapsody"] = 2672005 - location_ids["Yellow Opera"] = 2672006 - location_ids["Green Requiem"] = 2672007 - location_ids["Powerwild"] = 2672008 - location_ids["Bouncywild"] = 2672009 - location_ids["Air Soldier"] = 2672010 - location_ids["Bandit"] = 2672011 - location_ids["Fat Bandit"] = 2672012 - location_ids["Barrel Spider"] = 2672013 - location_ids["Search Ghost"] = 2672014 - location_ids["Sea Neon"] = 2672015 - location_ids["Screwdriver"] = 2672016 - location_ids["Aquatank"] = 2672017 - location_ids["Wight Knight"] = 2672018 - location_ids["Gargoyle"] = 2672019 - location_ids["Pirate"] = 2672020 - location_ids["Air Pirate"] = 2672021 - location_ids["Darkball"] = 2672022 - location_ids["Defender"] = 2672023 - location_ids["Wyvern"] = 2672024 - location_ids["Neoshadow"] = 2672025 - location_ids["White Mushroom"] = 2672026 - location_ids["Black Fungus"] = 2672027 - location_ids["Creeper Plant"] = 2672028 - location_ids["Tornado Step"] = 2672029 - location_ids["Crescendo"] = 2672030 - location_ids["Wizard"] = 2672031 - location_ids["Card Soldier (Black)"] = 2672036 - location_ids["Key of Beginnings F01"] = 2674001 - location_ids["Key of Beginnings F02"] = 2674002 - location_ids["Key of Beginnings F03"] = 2674003 - location_ids["Key of Beginnings F04"] = 2674004 - location_ids["Key of Beginnings F05"] = 2674005 - location_ids["Key of Beginnings F06"] = 2674006 - location_ids["Key of Beginnings F07"] = 2674007 - location_ids["Key of Beginnings F08"] = 2674008 - location_ids["Key of Beginnings F09"] = 2674009 - location_ids["Key of Beginnings F11"] = 2674011 - location_ids["Key of Beginnings F12"] = 2674012 - location_ids["Key of Beginnings F13"] = 2674013 - location_ids["Key of Guidance F01"] = 2674101 - location_ids["Key of Guidance F02"] = 2674102 - location_ids["Key of Guidance F03"] = 2674103 - location_ids["Key of Guidance F04"] = 2674104 - location_ids["Key of Guidance F05"] = 2674105 - location_ids["Key of Guidance F06"] = 2674106 - location_ids["Key of Guidance F07"] = 2674107 - location_ids["Key of Guidance F08"] = 2674108 - location_ids["Key of Guidance F09"] = 2674109 - location_ids["Key of Guidance F12"] = 2674112 - location_ids["Key to Truth F01"] = 2674201 - location_ids["Key to Truth F02"] = 2674202 - location_ids["Key to Truth F03"] = 2674203 - location_ids["Key to Truth F04"] = 2674204 - location_ids["Key to Truth F05"] = 2674205 - location_ids["Key to Truth F06"] = 2674206 - location_ids["Key to Truth F07"] = 2674207 - location_ids["Key to Truth F08"] = 2674208 - location_ids["Key to Truth F09"] = 2674209 + location_ids["Kingdom Key"] = 2670106 + location_ids["Three Wishes"] = 2670505 + location_ids["Crabclaw"] = 2670703 + location_ids["Pumpkinhead"] = 2670603 + location_ids["Fairy Harp"] = 2670803 + location_ids["Wishing Star"] = 2670406 + location_ids["Spellbinder"] = 2671002 + location_ids["Metal Chocobo"] = 2670309 + location_ids["Olympia"] = 2670304 + location_ids["Lionheart"] = 2670116 + location_ids["Lady Luck"] = 2670207 + location_ids["Divine Rose"] = 2670903 + location_ids["Oathkeeper"] = 2671203 + location_ids["Oblivion"] = 2671204 + location_ids["Diamond Dust"] = 2671304 + location_ids["One Winged Angel"] = 2671305 + location_ids["Fire"] = 2670112 + location_ids["Blizzard"] = 2670103 + location_ids["Thunder"] = 2670605 + location_ids["Cure"] = 2670105 + location_ids["Gravity"] = 2670501 + location_ids["Stop"] = 2670201 + location_ids["Aero"] = 2670707 + location_ids["Simba"] = 2670114 + location_ids["Genie"] = 2670509 + location_ids["Bambi"] = 2671001 + location_ids["Dumbo"] = 2670411 + location_ids["Tinker Bell"] = 2670808 + location_ids["Mushu"] = 2670908 + location_ids["Cloud"] = 2670310 + location_ids["Potion"] = 2670107 + location_ids["Hi-Potion"] = 2670308 + location_ids["Mega-Potion"] = 2671102 + location_ids["Ether"] = 2670508 + location_ids["Mega-Ether"] = 2671003 + location_ids["Elixir"] = 2671004 + location_ids["Megalixir"] = 2671208 + location_ids["Guard Armor"] = 2670117 + location_ids["Parasite Cage"] = 2670410 + location_ids["Trickmaster"] = 2670211 + location_ids["Darkside"] = 2671207 + location_ids["Card Soldier (Red)"] = 2670209 + location_ids["Hades"] = 2670311 + location_ids["Jafar"] = 2670510 + location_ids["Oogie Boogie"] = 2670608 + location_ids["Ursula"] = 2670710 + location_ids["Hook"] = 2670807 + location_ids["Dragon Maleficent"] = 2670909 + location_ids["Riku"] = 2671205 + location_ids["Axel"] = 2671306 + location_ids["Larxene"] = 2671202 + location_ids["Vexen"] = 2671103 + location_ids["Marluxia"] = 2671303 + location_ids["Shadow"] = 2670109 + location_ids["Soldier"] = 2670110 + location_ids["Large Body"] = 2670206 + location_ids["Red Nocturne"] = 2670108 + location_ids["Blue Rhapsody"] = 2670104 + location_ids["Yellow Opera"] = 2670407 + location_ids["Green Requiem"] = 2670403 + location_ids["Powerwild"] = 2670305 + location_ids["Bouncywild"] = 2670303 + location_ids["Air Soldier"] = 2670402 + location_ids["Bandit"] = 2670503 + location_ids["Fat Bandit"] = 2670504 + location_ids["Barrel Spider"] = 2670302 + location_ids["Search Ghost"] = 2670404 + location_ids["Sea Neon"] = 2670706 + location_ids["Screwdriver"] = 2670705 + location_ids["Aquatank"] = 2670702 + location_ids["Wight Knight"] = 2670604 + location_ids["Gargoyle"] = 2670602 + location_ids["Pirate"] = 2670804 + location_ids["Air Pirate"] = 2670802 + location_ids["Darkball"] = 2670704 + location_ids["Defender"] = 2670902 + location_ids["Wyvern"] = 2670905 + location_ids["Neoshadow"] = 2671302 + location_ids["White Mushroom"] = 2670111 + location_ids["Black Fungus"] = 2670102 + location_ids["Creeper Plant"] = 2670204 + location_ids["Tornado Step"] = 2670405 + location_ids["Crescendo"] = 2670205 + location_ids["Wizard"] = 2670904 + location_ids["Card Soldier (Black)"] = 2670203 + location_ids["Key of Beginnings F01"] = 2670101 + location_ids["Key of Beginnings F02"] = 2670202 + location_ids["Key of Beginnings F03"] = 2670301 + location_ids["Key of Beginnings F04"] = 2670401 + location_ids["Key of Beginnings F05"] = 2670502 + location_ids["Key of Beginnings F06"] = 2670601 + location_ids["Key of Beginnings F07"] = 2670701 + location_ids["Key of Beginnings F08"] = 2670801 + location_ids["Key of Beginnings F09"] = 2670901 + location_ids["Key of Beginnings F11"] = 2671101 + location_ids["Key of Beginnings F12"] = 2671201 + location_ids["Key of Beginnings F13"] = 2671301 + location_ids["Key of Guidance F01"] = 2670113 + location_ids["Key of Guidance F02"] = 2670208 + location_ids["Key of Guidance F03"] = 2670306 + location_ids["Key of Guidance F04"] = 2670408 + location_ids["Key of Guidance F05"] = 2670506 + location_ids["Key of Guidance F06"] = 2670606 + location_ids["Key of Guidance F07"] = 2670708 + location_ids["Key of Guidance F08"] = 2670805 + location_ids["Key of Guidance F09"] = 2670906 + location_ids["Key of Guidance F12"] = 2671206 + location_ids["Key to Truth F01"] = 2670115 + location_ids["Key to Truth F02"] = 2670210 + location_ids["Key to Truth F03"] = 2670307 + location_ids["Key to Truth F04"] = 2670409 + location_ids["Key to Truth F05"] = 2670507 + location_ids["Key to Truth F06"] = 2670607 + location_ids["Key to Truth F07"] = 2670709 + location_ids["Key to Truth F08"] = 2670806 + location_ids["Key to Truth F09"] = 2670907 return location_ids end @@ -541,7 +541,7 @@ function set_deck_pointer(deck_number, offset, value) end function set_starting_deck() - memory.write_u16_le(deck_cp_cost_address, 0x007B) + memory.write_u16_le(deck_cp_cost_address, 0x009E) memory.write_u16_le(battle_cards_address, 0x1008) --Kingdom Key 8 set_deck_pointer(1, 0, 0x0000) @@ -555,7 +555,9 @@ function set_starting_deck() set_deck_pointer(1, 4, 0x0004) memory.write_u16_le(battle_cards_address + 10, 0x1181) --Potion 5 set_deck_pointer(1, 5, 0x0005) - local i = 7 + memory.write_u16_le(battle_cards_address + 10, 0x10CE) --Cure 6 + set_deck_pointer(1, 6, 0x0006) + local i = 8 while i <= 15 do memory.write_u16_le(battle_cards_address + 2*(i-1), 0x0FFF) set_deck_pointer(1, i-1, 0xFFFF) @@ -630,10 +632,8 @@ function can_complete_floor(floor_number) return get_stored_gold_cards("Key of Beginnings", floor_number) > 0 and get_stored_gold_cards("Key of Guidance", floor_number) > 0 and get_stored_gold_cards("Key to Truth", floor_number) > 0 elseif floor_number == 12 then return get_stored_gold_cards("Key of Beginnings", floor_number) > 0 and get_stored_gold_cards("Key of Guidance", floor_number) > 0 - elseif floor_number == 11 then + elseif floor_number == 11 or floor_number == 10 then return get_stored_gold_cards("Key of Beginnings", floor_number) > 0 - elseif floor_number == 10 then - return true else return false end @@ -839,31 +839,31 @@ function open_card_pack(card_pack) if card_pack == "Bronze Card Pack" then add_battle_card(bronze_pack_attack_cards[math.random(1, #bronze_pack_attack_cards)]) add_battle_card(bronze_pack_attack_cards[math.random(1, #bronze_pack_attack_cards)]) - choice = math.random(1,2) - if choice == 1 then + choice = math.random(1,100) + if choice < 30 then add_battle_card(bronze_pack_item_cards[math.random(1, #bronze_pack_item_cards)]) - elseif choice == 2 then + else add_battle_card(bronze_pack_magic_cards[math.random(1, #bronze_pack_magic_cards)]) end end if card_pack == "Silver Card Pack" then add_battle_card(silver_pack_attack_cards[math.random(1, #silver_pack_attack_cards)]) add_battle_card(silver_pack_attack_cards[math.random(1, #silver_pack_attack_cards)]) - choice = math.random(1,2) - if choice == 1 then + choice = math.random(1,100) + if choice < 30 then add_battle_card(silver_pack_item_cards[math.random(1, #silver_pack_item_cards)]) - elseif choice == 2 then + else add_battle_card(silver_pack_magic_cards[math.random(1, #silver_pack_magic_cards)]) end end if card_pack == "Gold Card Pack" then add_battle_card(gold_pack_attack_cards[math.random(1, #gold_pack_attack_cards)]) add_battle_card(gold_pack_attack_cards[math.random(1, #gold_pack_attack_cards)]) - choice = math.random(1,2) - if choice == 1 then - add_battle_card(gold_pack_attack_cards[math.random(1, #gold_pack_attack_cards)]) - elseif choice == 2 then + choice = math.random(1,100) + if choice < 30 then add_battle_card(gold_pack_item_cards[math.random(1, #gold_pack_item_cards)]) + else + add_battle_card(gold_pack_attack_cards[math.random(1, #gold_pack_attack_cards)]) end end end @@ -1022,7 +1022,7 @@ function update_floor_status() end function update_post_floor_cutscene_valid() - i = 1 + i = 2 while i < 13 do if can_complete_floor(i) then x = memory.readbyte(floor_progress_addresses[i]) @@ -1039,6 +1039,13 @@ function update_post_floor_cutscene_valid() end end +function remove_premium_cards() + local battle_cards = get_battle_cards() + for k,v in pairs(battle_cards) do + memory.write_u16_le(battle_cards_address + (2*(k-1)), v%0x8000) + end +end + function send_victory() file = io.open(client_communication_path .. "victory", "w") io.output(file) @@ -1050,7 +1057,7 @@ function main_loop(last_variables) local frame = emu.framecount() local current_playtime = get_playtime() if current_playtime == 1 then - set_starting_deck() + --set_starting_deck() last_variables["Last Battle Cards"] = get_battle_cards() last_variables["Last Moogle Points"] = get_moogle_points() set_stored_gold_cards("Key of Beginnings", 1, 1) @@ -1090,6 +1097,7 @@ function main_loop(last_variables) update_current_gold_card_qty(get_floor_number()) set_key_description_text() check_if_victorious() + remove_premium_cards() end last_variables["Last Floor"] = get_floor_number() last_variables["Last Key of Beginnings"] = get_current_gold_card_qty("Key of Beginnings") diff --git a/worlds/khcom/Locations.py b/worlds/khcom/Locations.py index e29ddfb3224e..58b2aafaa974 100644 --- a/worlds/khcom/Locations.py +++ b/worlds/khcom/Locations.py @@ -24,127 +24,135 @@ def get_locations_by_category(category: str) -> Dict[str, KHCOMLocationData]: location_table: Dict[str, KHCOMLocationData] = { - #Battle Cards Progression - "Kingdom Key": KHCOMLocationData("Progression", 267_1001), - "Three Wishes": KHCOMLocationData("Progression", 267_1002), - "Crabclaw": KHCOMLocationData("Progression", 267_1003), - "Pumpkinhead": KHCOMLocationData("Progression", 267_1004), - "Fairy Harp": KHCOMLocationData("Progression", 267_1005), - "Wishing Star": KHCOMLocationData("Progression", 267_1006), - "Spellbinder": KHCOMLocationData("Progression", 267_1007), - "Metal Chocobo": KHCOMLocationData("Progression", 267_1008), - "Olympia": KHCOMLocationData("Progression", 267_1009), - "Lionheart": KHCOMLocationData("Progression", 267_1010), - "Lady Luck": KHCOMLocationData("Progression", 267_1011), - "Divine Rose": KHCOMLocationData("Progression", 267_1012), - "Oathkeeper": KHCOMLocationData("Progression", 267_1013), - #"Oblivion": KHCOMLocationData("Progression", 267_1014), missable - "Diamond Dust": KHCOMLocationData("Progression", 267_1015), - "One Winged Angel": KHCOMLocationData("Progression", 267_1016), - "Fire": KHCOMLocationData("Boss", 267_1017), - "Blizzard": KHCOMLocationData("Progression", 267_1018), - "Thunder": KHCOMLocationData("Boss", 267_1019), - "Cure": KHCOMLocationData("Progression", 267_1020), - "Gravity": KHCOMLocationData("Progression", 267_1021), - "Stop": KHCOMLocationData("Progression", 267_1022), - "Aero": KHCOMLocationData("Progression", 267_1023), - "Simba": KHCOMLocationData("Boss", 267_1024), - "Genie": KHCOMLocationData("Boss", 267_1025), - "Bambi": KHCOMLocationData("Progression", 267_1026), - "Dumbo": KHCOMLocationData("Boss", 267_1027), - "Tinker Bell": KHCOMLocationData("Boss", 267_1028), - "Mushu": KHCOMLocationData("Progression", 267_1029), - "Cloud": KHCOMLocationData("Boss", 267_1030), - "Potion": KHCOMLocationData("Progression", 267_1031), - "Hi-Potion": KHCOMLocationData("Boss", 267_1032), - "Mega-Potion": KHCOMLocationData("Boss", 267_1033), - "Ether": KHCOMLocationData("Boss", 267_1034), - "Mega-Ether": KHCOMLocationData("Boss", 267_1035), - "Elixir": KHCOMLocationData("Boss", 267_1036), - "Megalixir": KHCOMLocationData("Progression", 267_1037), - "Guard Armor": KHCOMLocationData("Boss", 267_1038), - "Parasite Cage": KHCOMLocationData("Boss", 267_1039), - "Trickmaster": KHCOMLocationData("Boss", 267_1040), - "Darkside": KHCOMLocationData("Boss", 267_1041), - "Card Soldier (Red)": KHCOMLocationData("Boss", 267_1042), - "Hades": KHCOMLocationData("Boss", 267_1043), - "Jafar": KHCOMLocationData("Boss", 267_1044), - "Oogie Boogie": KHCOMLocationData("Boss", 267_1045), - "Ursula": KHCOMLocationData("Boss", 267_1046), - "Hook": KHCOMLocationData("Boss", 267_1047), - "Dragon Maleficent": KHCOMLocationData("Boss", 267_1048), - "Riku": KHCOMLocationData("Boss", 267_1049), - "Axel": KHCOMLocationData("Boss", 267_1050), - #"Larxene": KHCOMLocationData("Boss", 267_1051), missable - "Vexen": KHCOMLocationData("Boss", 267_1052), - "Marluxia": KHCOMLocationData("Boss", 267_1053), + + "F01 Traverse Town Entrance": KHCOMLocationData("Progression", 267_0101), + "F01 Traverse Town Field (Black Fungus)": KHCOMLocationData("Enemy Unlock", 267_0102), + "F01 Traverse Town Field (Blizzard)": KHCOMLocationData("Progression", 267_0103), + "F01 Traverse Town Field (Blue Rhapsody)": KHCOMLocationData("Enemy Unlock", 267_0104), + "F01 Traverse Town Field (Cure)": KHCOMLocationData("Progression", 267_0105), + "F01 Traverse Town Field (Kingdom Key)": KHCOMLocationData("Progression", 267_0106), + "F01 Traverse Town Field (Potion)": KHCOMLocationData("Progression", 267_0107), + "F01 Traverse Town Field (Red Nocturne)": KHCOMLocationData("Enemy Unlock", 267_0108), + "F01 Traverse Town Field (Shadow)": KHCOMLocationData("Enemy Unlock", 267_0109), + "F01 Traverse Town Field (Soldier)": KHCOMLocationData("Enemy Unlock", 267_0110), + "F01 Traverse Town Field (White Mushroom)": KHCOMLocationData("Enemy Unlock", 267_0111), + "F01 Traverse Town Post Floor (Fire)": KHCOMLocationData("Boss", 267_0112), + "F01 Traverse Town Room of Beginnings": KHCOMLocationData("Progression", 267_0113), + "F01 Traverse Town Room of Beginnings (Simba)": KHCOMLocationData("Boss", 267_0114), + "F01 Traverse Town Room of Guidance": KHCOMLocationData("Progression", 267_0115), + "F01 Traverse Town Room of Rewards (Lionheart)": KHCOMLocationData("Progression", 267_0116), + "F01 Traverse Town Room of Truth (Guard Armor)": KHCOMLocationData("Boss", 267_0117), + + "F02 Wonderland Bounty (Stop)": KHCOMLocationData("Progression", 267_0201), + "F02 Wonderland Entrance": KHCOMLocationData("Progression", 267_0202), + "F02 Wonderland Field (Card Soldier Black)": KHCOMLocationData("Enemy Unlock", 267_0203), + "F02 Wonderland Field (Creeper Plant)": KHCOMLocationData("Enemy Unlock", 267_0204), + "F02 Wonderland Field (Crescendo)": KHCOMLocationData("Enemy Unlock", 267_0205), + "F02 Wonderland Field (Large Body)": KHCOMLocationData("Enemy Unlock", 267_0206), + "F02 Wonderland Field (Lady Luck)": KHCOMLocationData("Progression", 267_0207), + "F02 Wonderland Room of Beginnings": KHCOMLocationData("Progression", 267_0208), + "F02 Wonderland Room of Beginnings (Card Soldier Red)": KHCOMLocationData("Boss", 267_0209), + "F02 Wonderland Room of Guidance": KHCOMLocationData("Progression", 267_0210), + "F02 Wonderland Room of Truth (Trickmaster)": KHCOMLocationData("Boss", 267_0211), + + "F03 Olympus Coliseum Entrance": KHCOMLocationData("Progression", 267_0301), + "F03 Olympus Coliseum Field (Barrel Spider)": KHCOMLocationData("Enemy Unlock", 267_0302), + "F03 Olympus Coliseum Field (Bouncywild)": KHCOMLocationData("Enemy Unlock", 267_0303), + "F03 Olympus Coliseum Field (Olympia)": KHCOMLocationData("Progression", 267_0304), + "F03 Olympus Coliseum Field (Powerwild)": KHCOMLocationData("Enemy Unlock", 267_0305), + "F03 Olympus Coliseum Room of Beginnings": KHCOMLocationData("Progression", 267_0306), + "F03 Olympus Coliseum Room of Guidance": KHCOMLocationData("Progression", 267_0307), + "F03 Olympus Coliseum Room of Guidance (Hi-Potion)": KHCOMLocationData("Boss", 267_0308), + "F03 Olympus Coliseum Room of Rewards (Metal Chocobo)": KHCOMLocationData("Progression", 267_0309), + "F03 Olympus Coliseum Room of Truth (Cloud)": KHCOMLocationData("Boss", 267_0310), + "F03 Olympus Coliseum Room of Truth (Hades)": KHCOMLocationData("Boss", 267_0311), + + "F04 Monstro Entrance": KHCOMLocationData("Progression", 267_0401), + "F04 Monstro Field (Air Soldier)": KHCOMLocationData("Enemy Unlock", 267_0402), + "F04 Monstro Field (Green Requiem)": KHCOMLocationData("Enemy Unlock", 267_0403), + "F04 Monstro Field (Search Ghost)": KHCOMLocationData("Enemy Unlock", 267_0404), + "F04 Monstro Field (Tornado Step)": KHCOMLocationData("Enemy Unlock", 267_0405), + "F04 Monstro Field (Wishing Star)": KHCOMLocationData("Progression", 267_0406), + "F04 Monstro Field (Yellow Opera)": KHCOMLocationData("Enemy Unlock", 267_0407), + "F04 Monstro Room of Beginnings": KHCOMLocationData("Progression", 267_0408), + "F04 Monstro Room of Guidance": KHCOMLocationData("Progression", 267_0409), + "F04 Monstro Room of Guidance (Parasite Cage)": KHCOMLocationData("Boss", 267_0410), + "F04 Monstro Room of Truth (Dumbo)": KHCOMLocationData("Boss", 267_0411), + + "F05 Agrabah Bounty (Gravity)": KHCOMLocationData("Progression", 267_0501), + "F05 Agrabah Entrance": KHCOMLocationData("Progression", 267_0502), + "F05 Agrabah Field (Bandit)": KHCOMLocationData("Enemy Unlock", 267_0503), + "F05 Agrabah Field (Fat Bandit)": KHCOMLocationData("Enemy Unlock", 267_0504), + "F05 Agrabah Field (Three Wishes)": KHCOMLocationData("Progression", 267_0505), + "F05 Agrabah Room of Beginnings": KHCOMLocationData("Progression", 267_0506), + "F05 Agrabah Room of Guidance": KHCOMLocationData("Progression", 267_0507), + "F05 Agrabah Room of Guidance (Ether)": KHCOMLocationData("Boss", 267_0508), + "F05 Agrabah Room of Truth (Genie)": KHCOMLocationData("Boss", 267_0509), + "F05 Agrabah Room of Truth (Jafar)": KHCOMLocationData("Boss", 267_0510), + + "F06 Halloween Town Entrance": KHCOMLocationData("Progression", 267_0601), + "F06 Halloween Town Field (Gargoyle)": KHCOMLocationData("Enemy Unlock", 267_0602), + "F06 Halloween Town Field (Pumpkinhead)": KHCOMLocationData("Progression", 267_0603), + "F06 Halloween Town Field (Wight Knight)": KHCOMLocationData("Enemy Unlock", 267_0604), + "F06 Halloween Town Post Floor (Thunder)": KHCOMLocationData("Boss", 267_0605), + "F06 Halloween Town Room of Beginnings": KHCOMLocationData("Progression", 267_0606), + "F06 Halloween Town Room of Guidance": KHCOMLocationData("Progression", 267_0607), + "F06 Halloween Town Room of Truth (Oogie Boogie)": KHCOMLocationData("Boss", 267_0608), + + "F07 Atlantica Entrance": KHCOMLocationData("Progression", 267_0701), + "F07 Atlantica Field (Aquatank)": KHCOMLocationData("Enemy Unlock", 267_0702), + "F07 Atlantica Field (Crabclaw)": KHCOMLocationData("Progression", 267_0703), + "F07 Atlantica Field (Darkball)": KHCOMLocationData("Enemy Unlock", 267_0704), + "F07 Atlantica Field (Screwdriver)": KHCOMLocationData("Enemy Unlock", 267_0705), + "F07 Atlantica Field (Sea Neon)": KHCOMLocationData("Enemy Unlock", 267_0706), + "F07 Atlantica Post Floor (Aero)": KHCOMLocationData("Progression", 267_0707), + "F07 Atlantica Room of Beginnings": KHCOMLocationData("Progression", 267_0708), + "F07 Atlantica Room of Guidance": KHCOMLocationData("Progression", 267_0709), + "F07 Atlantica Room of Truth (Ursula)": KHCOMLocationData("Boss", 267_0710), + + "F08 Neverland Entrance": KHCOMLocationData("Progression", 267_0801), + "F08 Neverland Field (Air Pirate)": KHCOMLocationData("Enemy Unlock", 267_0802), + "F08 Neverland Field (Fairy Harp)": KHCOMLocationData("Progression", 267_0803), + "F08 Neverland Field (Pirate)": KHCOMLocationData("Enemy Unlock", 267_0804), + "F08 Neverland Room of Beginnings": KHCOMLocationData("Progression", 267_0805), + "F08 Neverland Room of Guidance": KHCOMLocationData("Progression", 267_0806), + "F08 Neverland Room of Truth (Hook)": KHCOMLocationData("Boss", 267_0807), + "F08 Neverland Room of Truth (Tinker Bell)": KHCOMLocationData("Boss", 267_0808), + + "F09 Hollow Bastion Entrance": KHCOMLocationData("Progression", 267_0901), + "F09 Hollow Bastion Field (Defender)": KHCOMLocationData("Enemy Unlock", 267_0902), + "F09 Hollow Bastion Field (Divine Rose)": KHCOMLocationData("Progression", 267_0903), + "F09 Hollow Bastion Field (Wizard)": KHCOMLocationData("Enemy Unlock", 267_0904), + "F09 Hollow Bastion Field (Wyvern)": KHCOMLocationData("Enemy Unlock", 267_0905), + "F09 Hollow Bastion Room of Beginnings": KHCOMLocationData("Progression", 267_0906), + "F09 Hollow Bastion Room of Guidance": KHCOMLocationData("Progression", 267_0907), + "F09 Hollow Bastion Room of Rewards (Mushu)": KHCOMLocationData("Progression", 267_0908), + "F09 Hollow Bastion Room of Truth (Dragon Maleficent)": KHCOMLocationData("Boss", 267_0909), + + "F10 100 Acre Wood Complete (Bambi)": KHCOMLocationData("Progression", 267_1001), + "F10 100 Acre Wood Owl (Spellbinder)": KHCOMLocationData("Progression", 267_1002), + "F10 100 Acre Wood Post Floor (Mega-Ether)": KHCOMLocationData("Boss", 267_1003), + "F10 100 Acre Wood Roo (Elixir)": KHCOMLocationData("Boss", 267_1004), + + "F11 Twilight Town Entrance": KHCOMLocationData("Progression", 267_1101), + "F11 Twilight Town Post Floor (Mega-Potion)": KHCOMLocationData("Boss", 267_1102), + "F11 Twilight Town Room of Beginnings (Vexen)": KHCOMLocationData("Boss", 267_1103), - #Enemy Unlock - "Shadow": KHCOMLocationData("Enemy Unlock", 267_2001), - "Soldier": KHCOMLocationData("Enemy Unlock", 267_2002), - "Large Body": KHCOMLocationData("Enemy Unlock", 267_2003), - "Red Nocturne": KHCOMLocationData("Enemy Unlock", 267_2004), - "Blue Rhapsody": KHCOMLocationData("Enemy Unlock", 267_2005), - "Yellow Opera": KHCOMLocationData("Enemy Unlock", 267_2006), - "Green Requiem": KHCOMLocationData("Enemy Unlock", 267_2007), - "Powerwild": KHCOMLocationData("Enemy Unlock", 267_2008), - "Bouncywild": KHCOMLocationData("Enemy Unlock", 267_2009), - "Air Soldier": KHCOMLocationData("Enemy Unlock", 267_2010), - "Bandit": KHCOMLocationData("Enemy Unlock", 267_2011), - "Fat Bandit": KHCOMLocationData("Enemy Unlock", 267_2012), - "Barrel Spider": KHCOMLocationData("Enemy Unlock", 267_2013), - "Search Ghost": KHCOMLocationData("Enemy Unlock", 267_2014), - "Sea Neon": KHCOMLocationData("Enemy Unlock", 267_2015), - "Screwdriver": KHCOMLocationData("Enemy Unlock", 267_2016), - "Aquatank": KHCOMLocationData("Enemy Unlock", 267_2017), - "Wight Knight": KHCOMLocationData("Enemy Unlock", 267_2018), - "Gargoyle": KHCOMLocationData("Enemy Unlock", 267_2019), - "Pirate": KHCOMLocationData("Enemy Unlock", 267_2020), - "Air Pirate": KHCOMLocationData("Enemy Unlock", 267_2021), - "Darkball": KHCOMLocationData("Enemy Unlock", 267_2022), - "Defender": KHCOMLocationData("Enemy Unlock", 267_2023), - "Wyvern": KHCOMLocationData("Enemy Unlock", 267_2024), - "Neoshadow": KHCOMLocationData("Enemy Unlock", 267_2025), - "White Mushroom": KHCOMLocationData("Enemy Unlock", 267_2026), - "Black Fungus": KHCOMLocationData("Enemy Unlock", 267_2027), - "Creeper Plant": KHCOMLocationData("Enemy Unlock", 267_2028), - "Tornado Step": KHCOMLocationData("Enemy Unlock", 267_2029), - "Crescendo": KHCOMLocationData("Enemy Unlock", 267_2030), - "Wizard": KHCOMLocationData("Enemy Unlock", 267_2031), - "Card Soldier (Black)": KHCOMLocationData("Enemy Unlock", 267_2036), + "F12 Destiny Islands Entrance": KHCOMLocationData("Progression", 267_1201), + #"F12 Destiny Islands Post Floor (Larxene)": KHCOMLocationData("Boss", 267_1202), + "F12 Destiny Islands Post Floor (Oathkeeper)": KHCOMLocationData("Progression", 267_1203), + #"F12 Destiny Islands Post Floor (Oblivion)": KHCOMLocationData("Progression", 267_1204), + "F12 Destiny Islands Post Floor (Riku)": KHCOMLocationData("Boss", 267_1205), + "F12 Destiny Islands Room of Beginnings": KHCOMLocationData("Progression", 267_1206), + "F12 Destiny Islands Room of Guidance (Darkside)": KHCOMLocationData("Boss", 267_1207), + "F12 Destiny Islands Room of Rewards (Megalixir)": KHCOMLocationData("Progression", 267_1208), - #Gold Map Cards Progression - "Key of Beginnings F01": KHCOMLocationData("Progression", 267_4001), - "Key of Beginnings F02": KHCOMLocationData("Progression", 267_4002), - "Key of Beginnings F03": KHCOMLocationData("Progression", 267_4003), - "Key of Beginnings F04": KHCOMLocationData("Progression", 267_4004), - "Key of Beginnings F05": KHCOMLocationData("Progression", 267_4005), - "Key of Beginnings F06": KHCOMLocationData("Progression", 267_4006), - "Key of Beginnings F07": KHCOMLocationData("Progression", 267_4007), - "Key of Beginnings F08": KHCOMLocationData("Progression", 267_4008), - "Key of Beginnings F09": KHCOMLocationData("Progression", 267_4009), - "Key of Beginnings F11": KHCOMLocationData("Progression", 267_4011), - "Key of Beginnings F12": KHCOMLocationData("Progression", 267_4012), - "Key of Beginnings F13": KHCOMLocationData("Progression", 267_4013), - "Key of Guidance F01": KHCOMLocationData("Progression", 267_4101), - "Key of Guidance F02": KHCOMLocationData("Progression", 267_4102), - "Key of Guidance F03": KHCOMLocationData("Progression", 267_4103), - "Key of Guidance F04": KHCOMLocationData("Progression", 267_4104), - "Key of Guidance F05": KHCOMLocationData("Progression", 267_4105), - "Key of Guidance F06": KHCOMLocationData("Progression", 267_4106), - "Key of Guidance F07": KHCOMLocationData("Progression", 267_4107), - "Key of Guidance F08": KHCOMLocationData("Progression", 267_4108), - "Key of Guidance F09": KHCOMLocationData("Progression", 267_4109), - "Key of Guidance F12": KHCOMLocationData("Progression", 267_4112), - "Key to Truth F01": KHCOMLocationData("Progression", 267_4201), - "Key to Truth F02": KHCOMLocationData("Progression", 267_4202), - "Key to Truth F03": KHCOMLocationData("Progression", 267_4203), - "Key to Truth F04": KHCOMLocationData("Progression", 267_4204), - "Key to Truth F05": KHCOMLocationData("Progression", 267_4205), - "Key to Truth F06": KHCOMLocationData("Progression", 267_4206), - "Key to Truth F07": KHCOMLocationData("Progression", 267_4207), - "Key to Truth F08": KHCOMLocationData("Progression", 267_4208), - "Key to Truth F09": KHCOMLocationData("Progression", 267_4209), + "F13 Castle Oblivion Entrance": KHCOMLocationData("Progression", 267_1301), + "F13 Castle Oblivion Field (Neoshadow)": KHCOMLocationData("Enemy Unlock", 267_1302), + "F13 Castle Oblivion Post Floor (Marluxia)": KHCOMLocationData("Boss", 267_1303), + "F13 Castle Oblivion Post Marluxia (Diamond Dust)": KHCOMLocationData("Progression", 267_1304), + "F13 Castle Oblivion Post Marluxia (One-Winged Angel)": KHCOMLocationData("Progression", 267_1305), + "F13 Castle Oblivion Room of Beginnings (Axel)": KHCOMLocationData("Boss", 267_1306), } event_location_table: Dict[str, KHCOMLocationData] = { diff --git a/worlds/khcom/Regions.py b/worlds/khcom/Regions.py index 0f48120915be..7fdf05785e30 100644 --- a/worlds/khcom/Regions.py +++ b/worlds/khcom/Regions.py @@ -35,186 +35,188 @@ def create_regions(multiworld: MultiWorld, player: int): # Floor 1 Traverse Town # Standard Cards - regions["Floor 1"].locations.append("Kingdom Key") - regions["Floor 1"].locations.append("Blizzard") - regions["Floor 1"].locations.append("Cure") - regions["Floor 1"].locations.append("Potion") + regions["Floor 1"].locations.append("F01 Traverse Town Field (Kingdom Key)") + regions["Floor 1"].locations.append("F01 Traverse Town Field (Blizzard)") + regions["Floor 1"].locations.append("F01 Traverse Town Field (Cure)") + regions["Floor 1"].locations.append("F01 Traverse Town Field (Potion)") # KOB, KOG, KTT Rewards - regions["Floor 1"].locations.append("Simba") - regions["Floor 1"].locations.append("Guard Armor") - regions["Floor 1"].locations.append("Key of Beginnings F01") - regions["Floor 1"].locations.append("Key of Guidance F01") - regions["Floor 1"].locations.append("Key to Truth F01") + regions["Floor 1"].locations.append("F01 Traverse Town Room of Beginnings (Simba)") + regions["Floor 1"].locations.append("F01 Traverse Town Room of Truth (Guard Armor)") + regions["Floor 1"].locations.append("F01 Traverse Town Entrance") + regions["Floor 1"].locations.append("F01 Traverse Town Room of Beginnings") + regions["Floor 1"].locations.append("F01 Traverse Town Room of Guidance") #Room of Rewards - regions["Floor 1"].locations.append("Lionheart") + regions["Floor 1"].locations.append("F01 Traverse Town Room of Rewards (Lionheart)") #Post Floor Boss - regions["Floor 1"].locations.append("Fire") + regions["Floor 1"].locations.append("F01 Traverse Town Post Floor (Fire)") #Enemy Cards - regions["Floor 1"].locations.append("Shadow") - regions["Floor 1"].locations.append("Soldier") - regions["Floor 1"].locations.append("Blue Rhapsody") - regions["Floor 1"].locations.append("Red Nocturne") - regions["Floor 1"].locations.append("White Mushroom") - regions["Floor 1"].locations.append("Black Fungus") + regions["Floor 1"].locations.append("F01 Traverse Town Field (Shadow)") + regions["Floor 1"].locations.append("F01 Traverse Town Field (Soldier)") + regions["Floor 1"].locations.append("F01 Traverse Town Field (Blue Rhapsody)") + regions["Floor 1"].locations.append("F01 Traverse Town Field (Red Nocturne)") + regions["Floor 1"].locations.append("F01 Traverse Town Field (White Mushroom)") + regions["Floor 1"].locations.append("F01 Traverse Town Field (Black Fungus)") # Floor 2 Wonderland # Standard Cards - regions["Floor 2"].locations.append("Lady Luck") - regions["Floor 2"].locations.append("Stop") + regions["Floor 2"].locations.append("F02 Wonderland Field (Lady Luck)") + regions["Floor 2"].locations.append("F02 Wonderland Bounty (Stop)") # KOB, KOG, KTT Rewards - regions["Floor 2"].locations.append("Card Soldier (Red)") - regions["Floor 2"].locations.append("Trickmaster") - regions["Floor 2"].locations.append("Key of Beginnings F02") - regions["Floor 2"].locations.append("Key of Guidance F02") - regions["Floor 2"].locations.append("Key to Truth F02") + regions["Floor 2"].locations.append("F02 Wonderland Room of Beginnings (Card Soldier Red)") + regions["Floor 2"].locations.append("F02 Wonderland Room of Truth (Trickmaster)") + regions["Floor 2"].locations.append("F02 Wonderland Entrance") + regions["Floor 2"].locations.append("F02 Wonderland Room of Beginnings") + regions["Floor 2"].locations.append("F02 Wonderland Room of Guidance") #Enemy Cards - regions["Floor 2"].locations.append("Card Soldier (Black)") - regions["Floor 2"].locations.append("Creeper Plant") - regions["Floor 2"].locations.append("Crescendo") - regions["Floor 2"].locations.append("Large Body") + regions["Floor 2"].locations.append("F02 Wonderland Field (Card Soldier Black)") + regions["Floor 2"].locations.append("F02 Wonderland Field (Creeper Plant)") + regions["Floor 2"].locations.append("F02 Wonderland Field (Crescendo)") + regions["Floor 2"].locations.append("F02 Wonderland Field (Large Body)") # Floor 3 Olympus Coliseum # Standard Cards - regions["Floor 3"].locations.append("Olympia") + regions["Floor 3"].locations.append("F03 Olympus Coliseum Field (Olympia)") # KOB, KOG, KTT Rewards - regions["Floor 3"].locations.append("Cloud") - regions["Floor 3"].locations.append("Hades") - regions["Floor 3"].locations.append("Hi-Potion") - regions["Floor 3"].locations.append("Key of Beginnings F03") - regions["Floor 3"].locations.append("Key of Guidance F03") - regions["Floor 3"].locations.append("Key to Truth F03") + regions["Floor 3"].locations.append("F03 Olympus Coliseum Room of Truth (Cloud)") + regions["Floor 3"].locations.append("F03 Olympus Coliseum Room of Truth (Hades)") + regions["Floor 3"].locations.append("F03 Olympus Coliseum Room of Guidance (Hi-Potion)") + regions["Floor 3"].locations.append("F03 Olympus Coliseum Entrance") + regions["Floor 3"].locations.append("F03 Olympus Coliseum Room of Beginnings") + regions["Floor 3"].locations.append("F03 Olympus Coliseum Room of Guidance") #Room of Rewards - regions["Floor 3"].locations.append("Metal Chocobo") + regions["Floor 3"].locations.append("F03 Olympus Coliseum Room of Rewards (Metal Chocobo)") #Enemy Cards - regions["Floor 3"].locations.append("Barrel Spider") - regions["Floor 3"].locations.append("Bouncywild") - regions["Floor 3"].locations.append("Powerwild") + regions["Floor 3"].locations.append("F03 Olympus Coliseum Field (Barrel Spider)") + regions["Floor 3"].locations.append("F03 Olympus Coliseum Field (Bouncywild)") + regions["Floor 3"].locations.append("F03 Olympus Coliseum Field (Powerwild)") # Floor 4 Monstro # Standard Cards - regions["Floor 4"].locations.append("Wishing Star") + regions["Floor 4"].locations.append("F04 Monstro Field (Wishing Star)") # KOB, KOG, KTT Rewards - regions["Floor 4"].locations.append("Parasite Cage") - regions["Floor 4"].locations.append("Dumbo") - regions["Floor 4"].locations.append("Key of Beginnings F04") - regions["Floor 4"].locations.append("Key of Guidance F04") - regions["Floor 4"].locations.append("Key to Truth F04") + regions["Floor 4"].locations.append("F04 Monstro Room of Guidance (Parasite Cage)") + regions["Floor 4"].locations.append("F04 Monstro Room of Truth (Dumbo)") + regions["Floor 4"].locations.append("F04 Monstro Entrance") + regions["Floor 4"].locations.append("F04 Monstro Room of Beginnings") + regions["Floor 4"].locations.append("F04 Monstro Room of Guidance") #Enemy Cards - regions["Floor 4"].locations.append("Green Requiem") - regions["Floor 4"].locations.append("Search Ghost") - regions["Floor 4"].locations.append("Tornado Step") - regions["Floor 4"].locations.append("Yellow Opera") - regions["Floor 4"].locations.append("Air Soldier") + regions["Floor 4"].locations.append("F04 Monstro Field (Green Requiem)") + regions["Floor 4"].locations.append("F04 Monstro Field (Search Ghost)") + regions["Floor 4"].locations.append("F04 Monstro Field (Tornado Step)") + regions["Floor 4"].locations.append("F04 Monstro Field (Yellow Opera)") + regions["Floor 4"].locations.append("F04 Monstro Field (Air Soldier)") # Floor 5 Agrabah # Standard Cards - regions["Floor 5"].locations.append("Three Wishes") - regions["Floor 5"].locations.append("Gravity") + regions["Floor 5"].locations.append("F05 Agrabah Field (Three Wishes)") + regions["Floor 5"].locations.append("F05 Agrabah Bounty (Gravity)") # KOB, KOG, KTT Rewards - regions["Floor 5"].locations.append("Genie") - regions["Floor 5"].locations.append("Jafar") - regions["Floor 5"].locations.append("Ether") - regions["Floor 5"].locations.append("Key of Beginnings F05") - regions["Floor 5"].locations.append("Key of Guidance F05") - regions["Floor 5"].locations.append("Key to Truth F05") + regions["Floor 5"].locations.append("F05 Agrabah Room of Truth (Genie)") + regions["Floor 5"].locations.append("F05 Agrabah Room of Truth (Jafar)") + regions["Floor 5"].locations.append("F05 Agrabah Room of Guidance (Ether)") + regions["Floor 5"].locations.append("F05 Agrabah Entrance") + regions["Floor 5"].locations.append("F05 Agrabah Room of Beginnings") + regions["Floor 5"].locations.append("F05 Agrabah Room of Guidance") #Enemy Cards - regions["Floor 5"].locations.append("Bandit") - regions["Floor 5"].locations.append("Fat Bandit") + regions["Floor 5"].locations.append("F05 Agrabah Field (Bandit)") + regions["Floor 5"].locations.append("F05 Agrabah Field (Fat Bandit)") # Floor 6 Halloween Town # Standard Cards - regions["Floor 6"].locations.append("Pumpkinhead") + regions["Floor 6"].locations.append("F06 Halloween Town Field (Pumpkinhead)") # KOB, KOG, KTT Rewards - regions["Floor 6"].locations.append("Oogie Boogie") - regions["Floor 6"].locations.append("Key of Beginnings F06") - regions["Floor 6"].locations.append("Key of Guidance F06") - regions["Floor 6"].locations.append("Key to Truth F06") + regions["Floor 6"].locations.append("F06 Halloween Town Room of Truth (Oogie Boogie)") + regions["Floor 6"].locations.append("F06 Halloween Town Entrance") + regions["Floor 6"].locations.append("F06 Halloween Town Room of Beginnings") + regions["Floor 6"].locations.append("F06 Halloween Town Room of Guidance") #Post Floor Boss - regions["Floor 6"].locations.append("Thunder") + regions["Floor 6"].locations.append("F06 Halloween Town Post Floor (Thunder)") #Enemy Cards - regions["Floor 6"].locations.append("Gargoyle") - regions["Floor 6"].locations.append("Wight Knight") + regions["Floor 6"].locations.append("F06 Halloween Town Field (Gargoyle)") + regions["Floor 6"].locations.append("F06 Halloween Town Field (Wight Knight)") # Floor 7 Atlantica # Standard Cards - regions["Floor 7"].locations.append("Crabclaw") + regions["Floor 7"].locations.append("F07 Atlantica Field (Crabclaw)") # KOB, KOG, KTT Rewards - regions["Floor 7"].locations.append("Ursula") - regions["Floor 7"].locations.append("Key of Beginnings F07") - regions["Floor 7"].locations.append("Key of Guidance F07") - regions["Floor 7"].locations.append("Key to Truth F07") + regions["Floor 7"].locations.append("F07 Atlantica Room of Truth (Ursula)") + regions["Floor 7"].locations.append("F07 Atlantica Entrance") + regions["Floor 7"].locations.append("F07 Atlantica Room of Beginnings") + regions["Floor 7"].locations.append("F07 Atlantica Room of Guidance") #Post Floor Boss - regions["Floor 7"].locations.append("Aero") + regions["Floor 7"].locations.append("F07 Atlantica Post Floor (Aero)") #Enemy Cards - regions["Floor 7"].locations.append("Aquatank") - regions["Floor 7"].locations.append("Darkball") - regions["Floor 7"].locations.append("Sea Neon") + regions["Floor 7"].locations.append("F07 Atlantica Field (Aquatank)") + regions["Floor 7"].locations.append("F07 Atlantica Field (Darkball)") + regions["Floor 7"].locations.append("F07 Atlantica Field (Sea Neon)") + regions["Floor 7"].locations.append("F07 Atlantica Field (Screwdriver)") # Floor 8 Never Land # Standard Cards - regions["Floor 8"].locations.append("Fairy Harp") + regions["Floor 8"].locations.append("F08 Neverland Field (Fairy Harp)") # KOB, KOG, KTT Rewards - regions["Floor 8"].locations.append("Hook") - regions["Floor 8"].locations.append("Tinker Bell") - regions["Floor 8"].locations.append("Key of Beginnings F08") - regions["Floor 8"].locations.append("Key of Guidance F08") - regions["Floor 8"].locations.append("Key to Truth F08") + regions["Floor 8"].locations.append("F08 Neverland Room of Truth (Hook)") + regions["Floor 8"].locations.append("F08 Neverland Room of Truth (Tinker Bell)") + regions["Floor 8"].locations.append("F08 Neverland Entrance") + regions["Floor 8"].locations.append("F08 Neverland Room of Beginnings") + regions["Floor 8"].locations.append("F08 Neverland Room of Guidance") #Enemy Cards - regions["Floor 8"].locations.append("Air Pirate") - regions["Floor 8"].locations.append("Pirate") + regions["Floor 8"].locations.append("F08 Neverland Field (Air Pirate)") + regions["Floor 8"].locations.append("F08 Neverland Field (Pirate)") # Floor 9 Holloow Bastion # Standard Cards - regions["Floor 9"].locations.append("Divine Rose") + regions["Floor 9"].locations.append("F09 Hollow Bastion Field (Divine Rose)") # KOB, KOG, KTT Rewards - regions["Floor 9"].locations.append("Dragon Maleficent") - regions["Floor 9"].locations.append("Key of Beginnings F09") - regions["Floor 9"].locations.append("Key of Guidance F09") - regions["Floor 9"].locations.append("Key to Truth F09") + regions["Floor 9"].locations.append("F09 Hollow Bastion Room of Truth (Dragon Maleficent)") + regions["Floor 9"].locations.append("F09 Hollow Bastion Entrance") + regions["Floor 9"].locations.append("F09 Hollow Bastion Room of Beginnings") + regions["Floor 9"].locations.append("F09 Hollow Bastion Room of Guidance") #Room of Rewards - regions["Floor 9"].locations.append("Mushu") + regions["Floor 9"].locations.append("F09 Hollow Bastion Room of Rewards (Mushu)") #Enemy Cards - regions["Floor 9"].locations.append("Defender") - regions["Floor 9"].locations.append("Wizard") - regions["Floor 9"].locations.append("Wyvern") + regions["Floor 9"].locations.append("F09 Hollow Bastion Field (Defender)") + regions["Floor 9"].locations.append("F09 Hollow Bastion Field (Wizard)") + regions["Floor 9"].locations.append("F09 Hollow Bastion Field (Wyvern)") # Floor 10 100 Acre Wood # Rewards - regions["Floor 10"].locations.append("Bambi") - regions["Floor 10"].locations.append("Elixir") - regions["Floor 10"].locations.append("Spellbinder") + regions["Floor 10"].locations.append("F10 100 Acre Wood Complete (Bambi)") + regions["Floor 10"].locations.append("F10 100 Acre Wood Roo (Elixir)") + regions["Floor 10"].locations.append("F10 100 Acre Wood Owl (Spellbinder)") #Post Floor Boss - regions["Floor 10"].locations.append("Mega-Ether") + regions["Floor 10"].locations.append("F10 100 Acre Wood Post Floor (Mega-Ether)") # Floor 11 Twilight Town # KOB, KOG, KTT Rewards - regions["Floor 11"].locations.append("Vexen") - regions["Floor 11"].locations.append("Key of Beginnings F11") + regions["Floor 11"].locations.append("F11 Twilight Town Room of Beginnings (Vexen)") + regions["Floor 11"].locations.append("F11 Twilight Town Entrance") #Post Floor Boss - regions["Floor 11"].locations.append("Mega-Potion") + regions["Floor 11"].locations.append("F11 Twilight Town Post Floor (Mega-Potion)") # Floor 12 Destiny Islands # KOB, KOG, KTT Rewards - regions["Floor 12"].locations.append("Darkside") - regions["Floor 12"].locations.append("Key of Beginnings F12") - regions["Floor 12"].locations.append("Key of Guidance F12") + regions["Floor 12"].locations.append("F12 Destiny Islands Room of Guidance (Darkside)") + regions["Floor 12"].locations.append("F12 Destiny Islands Entrance") + regions["Floor 12"].locations.append("F12 Destiny Islands Room of Beginnings") #Post Floor Boss - regions["Floor 12"].locations.append("Riku") - #regions["Floor 12"].locations.append("Larxene") missable? + regions["Floor 12"].locations.append("F12 Destiny Islands Post Floor (Riku)") + #regions["Floor 12"].locations.append("F12 Destiny Islands Post Floor (Larxene)") + regions["Floor 12"].locations.append("F12 Destiny Islands Post Floor (Oathkeeper)") + #regions["Floor 12"].locations.append("F12 Destiny Islands Post Floor (Oblivion)") #Room of Rewards - regions["Floor 12"].locations.append("Megalixir") + regions["Floor 12"].locations.append("F12 Destiny Islands Room of Rewards (Megalixir)") # Floor 13 Castle Oblivion - # Standard Cards - regions["Floor 13"].locations.append("Oathkeeper") - #regions["Floor 13"].locations.append("Oblivion") missable? # KOB, KOG, KTT Rewards - regions["Floor 13"].locations.append("Axel") - regions["Floor 13"].locations.append("Marluxia") - regions["Floor 13"].locations.append("Key of Beginnings F13") + regions["Floor 13"].locations.append("F13 Castle Oblivion Room of Beginnings (Axel)") + regions["Floor 13"].locations.append("F13 Castle Oblivion Post Floor (Marluxia)") + regions["Floor 13"].locations.append("F13 Castle Oblivion Post Marluxia (Diamond Dust)") + regions["Floor 13"].locations.append("F13 Castle Oblivion Post Marluxia (One-Winged Angel)") + regions["Floor 13"].locations.append("F13 Castle Oblivion Entrance") #Enemy Cards - regions["Floor 13"].locations.append("Neoshadow") + regions["Floor 13"].locations.append("F13 Castle Oblivion Field (Neoshadow)") # Set up the regions correctly. for name, data in regions.items(): diff --git a/worlds/khcom/Rules.py b/worlds/khcom/Rules.py index 535f31f70b6b..34b72a89ae8b 100644 --- a/worlds/khcom/Rules.py +++ b/worlds/khcom/Rules.py @@ -17,67 +17,60 @@ def has_room_of_rewards(state: CollectionState, player: int, floor_num) -> bool: def set_rules(multiworld: MultiWorld, player: int): #Location rules. #Keys - multiworld.get_location("Key of Guidance F02", player).access_rule = lambda state: has_room_of_beginnings(state, player, "02") - multiworld.get_location("Key of Guidance F03", player).access_rule = lambda state: has_room_of_beginnings(state, player, "03") - multiworld.get_location("Key of Guidance F04", player).access_rule = lambda state: has_room_of_beginnings(state, player, "04") - multiworld.get_location("Key of Guidance F05", player).access_rule = lambda state: has_room_of_beginnings(state, player, "05") - multiworld.get_location("Key of Guidance F06", player).access_rule = lambda state: has_room_of_beginnings(state, player, "06") - multiworld.get_location("Key of Guidance F07", player).access_rule = lambda state: has_room_of_beginnings(state, player, "07") - multiworld.get_location("Key of Guidance F08", player).access_rule = lambda state: has_room_of_beginnings(state, player, "08") - multiworld.get_location("Key of Guidance F09", player).access_rule = lambda state: has_room_of_beginnings(state, player, "09") - multiworld.get_location("Key of Guidance F12", player).access_rule = lambda state: has_room_of_beginnings(state, player, "12") - multiworld.get_location("Key to Truth F02" , player).access_rule = lambda state: has_room_of_guidance (state, player, "02") - multiworld.get_location("Key to Truth F03" , player).access_rule = lambda state: has_room_of_guidance (state, player, "03") - multiworld.get_location("Key to Truth F04" , player).access_rule = lambda state: has_room_of_guidance (state, player, "04") - multiworld.get_location("Key to Truth F05" , player).access_rule = lambda state: has_room_of_guidance (state, player, "05") - multiworld.get_location("Key to Truth F06" , player).access_rule = lambda state: has_room_of_guidance (state, player, "06") - multiworld.get_location("Key to Truth F07" , player).access_rule = lambda state: has_room_of_guidance (state, player, "07") - multiworld.get_location("Key to Truth F08" , player).access_rule = lambda state: has_room_of_guidance (state, player, "08") - multiworld.get_location("Key to Truth F09" , player).access_rule = lambda state: has_room_of_guidance (state, player, "09") + multiworld.get_location("F02 Wonderland Room of Guidance" , player).access_rule = lambda state: has_room_of_guidance (state, player, "02") + multiworld.get_location("F03 Olympus Coliseum Room of Guidance" , player).access_rule = lambda state: has_room_of_guidance (state, player, "03") + multiworld.get_location("F04 Monstro Room of Guidance" , player).access_rule = lambda state: has_room_of_guidance (state, player, "04") + multiworld.get_location("F05 Agrabah Room of Guidance" , player).access_rule = lambda state: has_room_of_guidance (state, player, "05") + multiworld.get_location("F06 Halloween Town Room of Guidance" , player).access_rule = lambda state: has_room_of_guidance (state, player, "06") + multiworld.get_location("F07 Atlantica Room of Guidance" , player).access_rule = lambda state: has_room_of_guidance (state, player, "07") + multiworld.get_location("F08 Neverland Room of Guidance" , player).access_rule = lambda state: has_room_of_guidance (state, player, "08") + multiworld.get_location("F09 Hollow Bastion Room of Guidance" , player).access_rule = lambda state: has_room_of_guidance (state, player, "09") #Progression - multiworld.get_location("Card Soldier (Red)" , player).access_rule = lambda state: has_room_of_beginnings(state, player, "02") - multiworld.get_location("Trickmaster" , player).access_rule = lambda state: has_room_of_truth (state, player, "02") - multiworld.get_location("Hi-Potion" , player).access_rule = lambda state: has_room_of_guidance (state, player, "03") - multiworld.get_location("Hades" , player).access_rule = lambda state: has_room_of_truth (state, player, "03") - multiworld.get_location("Cloud" , player).access_rule = lambda state: has_room_of_truth (state, player, "03") - multiworld.get_location("Parasite Cage" , player).access_rule = lambda state: has_room_of_guidance (state, player, "04") - multiworld.get_location("Dumbo" , player).access_rule = lambda state: has_room_of_truth (state, player, "04") - multiworld.get_location("Ether" , player).access_rule = lambda state: has_room_of_guidance (state, player, "05") - multiworld.get_location("Jafar" , player).access_rule = lambda state: has_room_of_truth (state, player, "05") - multiworld.get_location("Genie" , player).access_rule = lambda state: has_room_of_truth (state, player, "05") - multiworld.get_location("Oogie Boogie" , player).access_rule = lambda state: has_room_of_truth (state, player, "06") - multiworld.get_location("Thunder" , player).access_rule = lambda state: has_room_of_truth (state, player, "06") - multiworld.get_location("Ursula" , player).access_rule = lambda state: has_room_of_truth (state, player, "07") - multiworld.get_location("Aero" , player).access_rule = lambda state: has_room_of_truth (state, player, "07") - multiworld.get_location("Hook" , player).access_rule = lambda state: has_room_of_truth (state, player, "08") - multiworld.get_location("Tinker Bell" , player).access_rule = lambda state: has_room_of_truth (state, player, "08") - multiworld.get_location("Dragon Maleficent" , player).access_rule = lambda state: has_room_of_truth (state, player, "09") - multiworld.get_location("Vexen" , player).access_rule = lambda state: has_room_of_beginnings(state, player, "11") - multiworld.get_location("Mega-Potion" , player).access_rule = lambda state: has_room_of_beginnings(state, player, "11") - multiworld.get_location("Darkside" , player).access_rule = lambda state: has_room_of_guidance (state, player, "12") - multiworld.get_location("Riku" , player).access_rule = lambda state: has_room_of_guidance (state, player, "12") - #multiworld.get_location("Larxene" , player).access_rule = lambda state: has_room_of_guidance (state, player, "12") missable - multiworld.get_location("Axel" , player).access_rule = lambda state: has_room_of_beginnings(state, player, "13") - multiworld.get_location("Marluxia" , player).access_rule = lambda state: has_room_of_beginnings(state, player, "13") + multiworld.get_location("F02 Wonderland Room of Beginnings (Card Soldier Red)" , player).access_rule = lambda state: has_room_of_beginnings(state, player, "02") + multiworld.get_location("F02 Wonderland Room of Truth (Trickmaster)" , player).access_rule = lambda state: has_room_of_truth (state, player, "02") + multiworld.get_location("F03 Olympus Coliseum Room of Guidance (Hi-Potion)" , player).access_rule = lambda state: has_room_of_guidance (state, player, "03") + multiworld.get_location("F03 Olympus Coliseum Room of Truth (Hades)" , player).access_rule = lambda state: has_room_of_truth (state, player, "03") + multiworld.get_location("F03 Olympus Coliseum Room of Truth (Cloud)" , player).access_rule = lambda state: has_room_of_truth (state, player, "03") + multiworld.get_location("F04 Monstro Room of Guidance (Parasite Cage)" , player).access_rule = lambda state: has_room_of_guidance (state, player, "04") + multiworld.get_location("F04 Monstro Room of Truth (Dumbo)" , player).access_rule = lambda state: has_room_of_truth (state, player, "04") + multiworld.get_location("F05 Agrabah Room of Guidance (Ether)" , player).access_rule = lambda state: has_room_of_guidance (state, player, "05") + multiworld.get_location("F05 Agrabah Room of Truth (Jafar)" , player).access_rule = lambda state: has_room_of_truth (state, player, "05") + multiworld.get_location("F05 Agrabah Room of Truth (Genie)" , player).access_rule = lambda state: has_room_of_truth (state, player, "05") + multiworld.get_location("F06 Halloween Town Room of Truth (Oogie Boogie)" , player).access_rule = lambda state: has_room_of_truth (state, player, "06") + multiworld.get_location("F06 Halloween Town Post Floor (Thunder)" , player).access_rule = lambda state: has_room_of_truth (state, player, "06") + multiworld.get_location("F07 Atlantica Room of Truth (Ursula)" , player).access_rule = lambda state: has_room_of_truth (state, player, "07") + multiworld.get_location("F07 Atlantica Post Floor (Aero)" , player).access_rule = lambda state: has_room_of_truth (state, player, "07") + multiworld.get_location("F08 Neverland Room of Truth (Hook)" , player).access_rule = lambda state: has_room_of_truth (state, player, "08") + multiworld.get_location("F08 Neverland Room of Truth (Tinker Bell)" , player).access_rule = lambda state: has_room_of_truth (state, player, "08") + multiworld.get_location("F09 Hollow Bastion Room of Truth (Dragon Maleficent)" , player).access_rule = lambda state: has_room_of_truth (state, player, "09") + multiworld.get_location("F11 Twilight Town Room of Beginnings (Vexen)" , player).access_rule = lambda state: has_room_of_beginnings(state, player, "11") + multiworld.get_location("F11 Twilight Town Post Floor (Mega-Potion)" , player).access_rule = lambda state: has_room_of_beginnings(state, player, "11") + multiworld.get_location("F12 Destiny Islands Room of Guidance (Darkside)" , player).access_rule = lambda state: has_room_of_guidance (state, player, "12") + multiworld.get_location("F12 Destiny Islands Post Floor (Riku)" , player).access_rule = lambda state: has_room_of_guidance (state, player, "12") + #multiworld.get_location("F12 Destiny Islands Post Floor (Larxene)" , player).access_rule = lambda state: has_room_of_guidance (state, player, "12") + multiworld.get_location("F13 Castle Oblivion Room of Beginnings (Axel)" , player).access_rule = lambda state: has_room_of_beginnings(state, player, "13") + multiworld.get_location("F13 Castle Oblivion Post Floor (Marluxia)" , player).access_rule = lambda state: has_room_of_beginnings(state, player, "13") + multiworld.get_location("F13 Castle Oblivion Post Marluxia (One-Winged Angel)" , player).access_rule = lambda state: has_room_of_beginnings(state, player, "13") + multiworld.get_location("F13 Castle Oblivion Post Marluxia (Diamond Dust)" , player).access_rule = lambda state: has_room_of_beginnings(state, player, "13") #Room of Rewards - multiworld.get_location("Lionheart" , player).access_rule = lambda state: has_room_of_rewards (state, player, "01") - multiworld.get_location("Metal Chocobo" , player).access_rule = lambda state: has_room_of_rewards (state, player, "03") - multiworld.get_location("Mushu" , player).access_rule = lambda state: has_room_of_rewards (state, player, "09") - multiworld.get_location("Megalixir" , player).access_rule = lambda state: has_room_of_rewards (state, player, "12") + multiworld.get_location("F01 Traverse Town Room of Rewards (Lionheart)" , player).access_rule = lambda state: has_room_of_rewards (state, player, "01") + multiworld.get_location("F03 Olympus Coliseum Room of Rewards (Metal Chocobo)" , player).access_rule = lambda state: has_room_of_rewards (state, player, "03") + multiworld.get_location("F09 Hollow Bastion Room of Rewards (Mushu)" , player).access_rule = lambda state: has_room_of_rewards (state, player, "09") + multiworld.get_location("F12 Destiny Islands Room of Rewards (Megalixir)" , player).access_rule = lambda state: has_room_of_rewards (state, player, "12") # Region rules. - multiworld.get_entrance("Floor 2" , player).access_rule = lambda state: has_room_of_beginnings(state, player, "02") - multiworld.get_entrance("Floor 3" , player).access_rule = lambda state: has_room_of_beginnings(state, player, "03") - multiworld.get_entrance("Floor 4" , player).access_rule = lambda state: has_room_of_beginnings(state, player, "04") - multiworld.get_entrance("Floor 5" , player).access_rule = lambda state: has_room_of_beginnings(state, player, "05") - multiworld.get_entrance("Floor 6" , player).access_rule = lambda state: has_room_of_beginnings(state, player, "06") - multiworld.get_entrance("Floor 7" , player).access_rule = lambda state: has_room_of_beginnings(state, player, "07") - multiworld.get_entrance("Floor 8" , player).access_rule = lambda state: has_room_of_beginnings(state, player, "08") - multiworld.get_entrance("Floor 9" , player).access_rule = lambda state: has_room_of_beginnings(state, player, "09") - multiworld.get_entrance("Floor 10" , player).access_rule = lambda state: has_room_of_beginnings(state, player, "10") - multiworld.get_entrance("Floor 11" , player).access_rule = lambda state: has_room_of_beginnings(state, player, "11") - multiworld.get_entrance("Floor 12" , player).access_rule = lambda state: has_room_of_beginnings(state, player, "12") - multiworld.get_entrance("Floor 13", player).access_rule = lambda state: has_room_of_guidance(state, player, "12") + multiworld.get_entrance("Floor 2" , player).access_rule = lambda state: has_room_of_beginnings(state, player, "02") + multiworld.get_entrance("Floor 3" , player).access_rule = lambda state: has_room_of_beginnings(state, player, "03") + multiworld.get_entrance("Floor 4" , player).access_rule = lambda state: has_room_of_beginnings(state, player, "04") + multiworld.get_entrance("Floor 5" , player).access_rule = lambda state: has_room_of_beginnings(state, player, "05") + multiworld.get_entrance("Floor 6" , player).access_rule = lambda state: has_room_of_beginnings(state, player, "06") + multiworld.get_entrance("Floor 7" , player).access_rule = lambda state: has_room_of_beginnings(state, player, "07") + multiworld.get_entrance("Floor 8" , player).access_rule = lambda state: has_room_of_beginnings(state, player, "08") + multiworld.get_entrance("Floor 9" , player).access_rule = lambda state: has_room_of_beginnings(state, player, "09") + multiworld.get_entrance("Floor 10" , player).access_rule = lambda state: has_room_of_beginnings(state, player, "10") + multiworld.get_entrance("Floor 11" , player).access_rule = lambda state: has_room_of_beginnings(state, player, "11") + multiworld.get_entrance("Floor 12" , player).access_rule = lambda state: has_room_of_beginnings(state, player, "12") + multiworld.get_entrance("Floor 13" , player).access_rule = lambda state: has_room_of_guidance (state, player, "12") # Options if not multiworld.enemy_cards[player]: