forked from mirror/Archipelago
Some checks failed
Analyze modified files / flake8 (push) Failing after 2m28s
Build / build-win (push) Has been cancelled
Build / build-ubuntu2204 (push) Has been cancelled
ctest / Test C++ ubuntu-latest (push) Has been cancelled
ctest / Test C++ windows-latest (push) Has been cancelled
Analyze modified files / mypy (push) Has been cancelled
Build and Publish Docker Images / Push Docker image to Docker Hub (push) Successful in 5m4s
Native Code Static Analysis / scan-build (push) Failing after 5m2s
type check / pyright (push) Successful in 1m7s
unittests / Test Python 3.11.2 ubuntu-latest (push) Failing after 16m23s
unittests / Test Python 3.12 ubuntu-latest (push) Failing after 28m19s
unittests / Test Python 3.13 ubuntu-latest (push) Failing after 14m49s
unittests / Test hosting with 3.13 on ubuntu-latest (push) Successful in 5m0s
unittests / Test Python 3.13 macos-latest (push) Has been cancelled
unittests / Test Python 3.11 windows-latest (push) Has been cancelled
unittests / Test Python 3.13 windows-latest (push) Has been cancelled
1082 lines
55 KiB
Python
1082 lines
55 KiB
Python
from BaseClasses import CollectionState
|
|
from worlds.generic.Rules import add_rule
|
|
|
|
WORLDS = [
|
|
"Dwarf Woodlands",
|
|
"Castle of Dreams",
|
|
"Enchanted Dominion",
|
|
"The Mysterious Tower",
|
|
"Radiant Garden",
|
|
"Mirage Arena",
|
|
"Olympus Coliseum",
|
|
"Deep Space",
|
|
"Realm of Darkness",
|
|
"Never Land",
|
|
"Disney Town"]
|
|
|
|
#Worlds that count as cleared for shop unlocks
|
|
CLEARABLE_WORLDS = [
|
|
"Dwarf Woodlands",
|
|
"Castle of Dreams",
|
|
"Enchanted Dominion",
|
|
"Radiant Garden",
|
|
"Olympus Coliseum",
|
|
"Deep Space",
|
|
"Never Land",
|
|
"Disney Town"]
|
|
|
|
#Beating Disney Town requires playing minigames so don't consider it clearable if they're disabled
|
|
CLEARABLE_WORLDS_NO_DT = [
|
|
"Dwarf Woodlands",
|
|
"Castle of Dreams",
|
|
"Enchanted Dominion",
|
|
"Radiant Garden",
|
|
"Olympus Coliseum",
|
|
"Deep Space",
|
|
"Never Land"]
|
|
|
|
def can_glide(state: CollectionState, player: int) -> bool:
|
|
return state.has_any({
|
|
"Glide",
|
|
"Superglide",
|
|
"Fire Glide"}, player)
|
|
|
|
def can_airslide(state: CollectionState, player: int) -> bool:
|
|
return state.has_any({
|
|
"Air Slide",
|
|
"Ice Slide"}, player)
|
|
|
|
def has_thunder(state: CollectionState, player: int, minigames: bool) -> bool:
|
|
return state.has("Thunder", player) or has_x_clearable_worlds(state, player, 2, minigames)
|
|
|
|
def has_fire(state: CollectionState, player: int, minigames: bool) -> bool:
|
|
return state.has("Fire", player) or has_x_clearable_worlds(state, player, 2, minigames)
|
|
|
|
def has_x_worlds(state: CollectionState, player: int, num_of_worlds: int) -> bool:
|
|
return state.has_from_list_unique(WORLDS, player, num_of_worlds)
|
|
|
|
def has_x_clearable_worlds(state: CollectionState, player: int, num_of_worlds: int, minigames: bool) -> bool:
|
|
if minigames:
|
|
return state.has_from_list_unique(CLEARABLE_WORLDS, player, num_of_worlds)
|
|
else:
|
|
return state.has_from_list_unique(CLEARABLE_WORLDS_NO_DT, player, num_of_worlds)
|
|
|
|
def has_defensive_tools(state: CollectionState, player: int) -> bool:
|
|
return state.has_all({
|
|
"Second Chance",
|
|
"Once More",
|
|
"Leaf Bracer"}, player)
|
|
|
|
def set_rules(khbbsworld):
|
|
multiworld = khbbsworld.multiworld
|
|
player = khbbsworld.player
|
|
options = khbbsworld.options
|
|
minigames = khbbsworld.options.minigames
|
|
# Location Rules
|
|
if options.character == 2:
|
|
add_rule(khbbsworld.get_location("(T) The Land of Departure Defeat Eraqus Max HP Increase"),
|
|
lambda state: has_x_worlds(state, player, 6))
|
|
add_rule(khbbsworld.get_location("(T) The Land of Departure Defeat Eraqus Chaos Ripper"),
|
|
lambda state: has_x_worlds(state, player, 6))
|
|
add_rule(khbbsworld.get_location("(T) The Land of Departure Defeat Eraqus Xehanort's Report 8"),
|
|
lambda state: has_x_worlds(state, player, 6))
|
|
add_rule(khbbsworld.get_location("(T) Dwarf Woodlands Vault Flame Salvo Chest"),
|
|
lambda state: (
|
|
has_fire(state, player, minigames)
|
|
or (state.has("High Jump", player) and can_airslide(state, player))
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(T) Dwarf Woodlands Courtyard Fission Firaga Chest"),
|
|
lambda state: (
|
|
(state.has("High Jump", player) and can_airslide(state, player))
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(T) Dwarf Woodlands Underground Waterway Louie Sticker"),
|
|
lambda state: (
|
|
(state.has("High Jump", player) and can_airslide(state,player))
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(T) Castle of Dreams Passage Flying Balloon Sticker"),
|
|
lambda state: state.has("High Jump", player)) #tricky without leveling
|
|
add_rule(khbbsworld.get_location("(T) Enchanted Dominion Audience Chamber Huey Sticker"),
|
|
lambda state: (
|
|
(state.has_all({"High Jump", "Sonic Impact"}, player) and can_airslide(state, player)) #high level, maybe don't need Sonic Impact
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(T) Radiant Garden Fountain Court Dale Sticker"),
|
|
lambda state: (
|
|
(state.has_all({"High Jump", "Sonic Impact"}, player) and can_airslide(state, player)) #high level, maybe don't need Sonic Impact
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(T) The Mysterious Tower Sorcerer's Chamber Balloon Sticker"),
|
|
lambda state: (
|
|
state.has("High Jump", player) #maybe not needed, but a tight jump
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(T) Radiant Garden Outer Gardens Airplane Sticker"),
|
|
lambda state: state.has("High Jump", player))
|
|
add_rule(khbbsworld.get_location("(T) Olympus Coliseum Coliseum Gates Balloon Sticker"),
|
|
lambda state: (
|
|
state.has("High Jump", player) #maybe not needed
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(T) Deep Space Turo Prison Block Mega-Ether Chest"),
|
|
lambda state: (
|
|
can_airslide(state, player)
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(T) Deep Space Turo Prison Block Brutal Blast Chest"),
|
|
lambda state: (
|
|
can_airslide(state, player)
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(T) Deep Space Turo Prison Block Flying Balloon Sticker"),
|
|
lambda state: (
|
|
can_airslide(state, player)
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(T) Deep Space Turo Prison Block Mega-Potion Chest"),
|
|
lambda state: (
|
|
(state.has("High Jump", player) and can_airslide(state, player)) #also doable with leveled high jump but this is simpler
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(T) Never Land Rainbow Falls: Base Rainbow Sticker"),
|
|
lambda state: (
|
|
state.has("High Jump", player)
|
|
and
|
|
(
|
|
(can_airslide(state, player) and state.has("Sonic Impact", player))
|
|
or options.advanced_logic
|
|
)
|
|
))
|
|
add_rule(khbbsworld.get_location("(T) Never Land Cliff Path Mega-Potion Chest"),
|
|
lambda state: (
|
|
can_airslide(state, player) #high level
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(T) Never Land Mermaid Lagoon Geo Impact Chest"),
|
|
lambda state: (
|
|
can_airslide(state, player) #high level
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(T) Never Land Skull Rock: Cavern Megalixir Chest"),
|
|
lambda state: state.has("High Jump", player))
|
|
add_rule(khbbsworld.get_location("(T) Never Land Skull Rock: Entrance Chip Sticker"),
|
|
lambda state: (
|
|
state.has("High Jump", player)
|
|
and (can_airslide(state, player) or options.advanced_logic)
|
|
))
|
|
add_rule(khbbsworld.get_location("(T) Never Land Skull Rock: Cavern Ars Solum Chest"),
|
|
lambda state: (
|
|
state.has("High Jump", player)
|
|
and (can_airslide(state, player) or options.advanced_logic)
|
|
))
|
|
add_rule(khbbsworld.get_location("(T) Never Land Skull Rock: Cavern Chaos Crystal Chest"),
|
|
lambda state: (
|
|
state.has("High Jump", player)
|
|
and (can_airslide(state, player) or options.advanced_logic)
|
|
))
|
|
add_rule(khbbsworld.get_location("(T) Disney Town Gizmo Gallery Mega-Potion Chest"),
|
|
lambda state: has_thunder(state, player, minigames))
|
|
add_rule(khbbsworld.get_location("(T) Disney Town Gizmo Gallery Absolute Zero Chest"),
|
|
lambda state: has_thunder(state, player, minigames))
|
|
add_rule(khbbsworld.get_location("(T) Disney Town Gizmo Gallery Action Recipe Chest"),
|
|
lambda state: (
|
|
has_thunder(state, player, minigames)
|
|
and (can_airslide(state, player) or options.advanced_logic)
|
|
))
|
|
add_rule(khbbsworld.get_location("(T) Disney Town Gizmo Gallery Chaos Crystal Chest"),
|
|
lambda state: (
|
|
has_thunder(state, player, minigames)
|
|
and (can_airslide(state, player) or options.advanced_logic)
|
|
))
|
|
add_rule(khbbsworld.get_location("(T) Disney Town Gizmo Gallery Pete Sticker"),
|
|
lambda state: has_thunder(state, player, minigames))
|
|
add_rule(khbbsworld.get_location("(T) Disney Town Gizmo Gallery Panacea Chest"),
|
|
lambda state: has_thunder(state, player, minigames)) #tight jump
|
|
add_rule(khbbsworld.get_location("(T) Disney Town Pete's Rec Room Zero Gravira Chest"),
|
|
lambda state: (
|
|
has_thunder(state, player, minigames)
|
|
and (can_airslide(state, player) or options.advanced_logic)
|
|
))
|
|
add_rule(khbbsworld.get_location("(T) Disney Town Pete's Rec Room Chaos Crystal Chest"),
|
|
lambda state: has_thunder(state, player, minigames))
|
|
add_rule(khbbsworld.get_location("(T) Disney Town Pete's Rec Room Aerial Slam Chest"),
|
|
lambda state: (
|
|
has_thunder(state, player, minigames)
|
|
and (can_airslide(state, player) or options.advanced_logic)
|
|
))
|
|
add_rule(khbbsworld.get_location("(T) Disney Town Pete's Rec Room Break Time Chest"),
|
|
lambda state: (
|
|
has_thunder(state, player, minigames)
|
|
and (can_airslide(state, player) or options.advanced_logic)
|
|
))
|
|
add_rule(khbbsworld.get_location("(T) Disney Town Raceway Slot Edge Chest"),
|
|
lambda state: has_thunder(state, player, minigames))
|
|
add_rule(khbbsworld.get_location("(T) Disney Town Raceway Traffic Cone Sticker"),
|
|
lambda state: (
|
|
has_thunder(state, player, minigames)
|
|
and
|
|
(
|
|
(state.has_all({"High Jump", "Sonic Impact"}, player) and can_airslide(state, player))
|
|
or options.advanced_logic
|
|
)
|
|
))
|
|
add_rule(khbbsworld.get_location("(T) The Keyblade Graveyard Twister Trench Traffic Cone Sticker"),
|
|
lambda state: state.has("High Jump", player))
|
|
add_rule(khbbsworld.get_location("(T) The Keyblade Graveyard Defeat Xehanort Max HP Increase"),
|
|
lambda state: has_defensive_tools(state, player))
|
|
add_rule(khbbsworld.get_location("(T) The Keyblade Graveyard Defeat Terra-Xehanort"),
|
|
lambda state: has_defensive_tools(state, player))
|
|
if options.command_board:
|
|
add_rule(khbbsworld.get_location("(T) Mirage Arena Win a Command Board game"),
|
|
lambda state: state.has_group_unique("Command Board", player, 1))
|
|
add_rule(khbbsworld.get_location("(T) Mirage Arena Win 3 Command Board games"),
|
|
lambda state: state.has_group_unique("Command Board", player, 1))
|
|
add_rule(khbbsworld.get_location("(T) Mirage Arena Win 5 Command Board games"),
|
|
lambda state: state.has_group_unique("Command Board", player, 1))
|
|
add_rule(khbbsworld.get_location("(T) Mirage Arena Win 7 Command Board games"),
|
|
lambda state: state.has_group_unique("Command Board", player, 1))
|
|
if options.minigames:
|
|
add_rule(khbbsworld.get_location("(T) Mirage Arena Country Chase: Finish 5 laps in 2:30"),
|
|
lambda state: state.has("Disney Town", player))
|
|
add_rule(khbbsworld.get_location("(T) Mirage Arena Disney Drive: Finish 5 laps in 5 minutes"),
|
|
lambda state: state.has("Disney Town", player))
|
|
add_rule(khbbsworld.get_location("(T) Mirage Arena Grand Spree: Finish 5 laps in 5 minutes"),
|
|
lambda state: state.has("Disney Town", player))
|
|
add_rule(khbbsworld.get_location("(T) Mirage Arena Castle Circuit: Finish 5 laps in 5:30"),
|
|
lambda state: state.has("Disney Town", player))
|
|
if options.mirage_arena:
|
|
if options.super_bosses:
|
|
add_rule(khbbsworld.get_location("(T) Mirage Arena Villains' Vendetta Ultima Weapon"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 9)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(T) Mirage Arena Complete Villains' Vendetta"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 9)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(T) Mirage Arena Light's Lessons Max HP Increase"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 9)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(T) Mirage Arena Complete Light's Lessons"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 9)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(T) Mirage Arena Peering into Darkness Royal Radiance"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 9)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(T) Mirage Arena Complete Peering into Darkness"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 9)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
if options.arena_global_locations:
|
|
add_rule(khbbsworld.get_location("(T) Mirage Arena Complete Wheels of Misfortune"),
|
|
lambda state: has_x_worlds(state, player, 2))
|
|
add_rule(khbbsworld.get_location("(T) Mirage Arena Complete A Time to Chill"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 8)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(T) Mirage Arena Complete Combined Threat"),
|
|
lambda state: has_x_worlds(state, player, 6))
|
|
add_rule(khbbsworld.get_location("(T) Mirage Arena Monster of the Sea Mini"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 8)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(T) Mirage Arena Complete Monster of the Sea"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 8)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
else:
|
|
add_rule(khbbsworld.get_location("(T) Mirage Arena Complete Combined Threat"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 6)
|
|
and state.has("Radiant Garden", player)
|
|
))
|
|
if options.minigames:
|
|
add_rule(khbbsworld.get_location("(T) Mirage Arena Monster of the Sea Mini"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 8)
|
|
and state.has("Disney Town", player)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(T) Mirage Arena Complete Monster of the Sea"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 8)
|
|
and state.has("Disney Town", player)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(T) Mirage Arena Complete Day of Reckoning"),
|
|
lambda state: has_x_worlds(state, player, 2))
|
|
add_rule(khbbsworld.get_location("(T) Mirage Arena Complete Risky Riches"),
|
|
lambda state: has_x_worlds(state, player, 2))
|
|
add_rule(khbbsworld.get_location("(T) Mirage Arena Weaver Fever Max HP Increase"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 4)
|
|
and state.has("Enchanted Dominion", player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(T) Mirage Arena Complete Weaver Fever"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 4)
|
|
and state.has("Enchanted Dominion", player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(T) Mirage Arena Sinister Sentinel Xehanort's Report 5"),
|
|
lambda state: has_x_worlds(state, player, 4))
|
|
add_rule(khbbsworld.get_location("(T) Mirage Arena Complete Sinister Sentinel"),
|
|
lambda state: has_x_worlds(state, player, 4))
|
|
add_rule(khbbsworld.get_location("(T) Mirage Arena Dead Ringer Darkgnaw"),
|
|
lambda state: has_x_worlds(state, player, 4))
|
|
add_rule(khbbsworld.get_location("(T) Mirage Arena Complete Dead Ringer"),
|
|
lambda state: has_x_worlds(state, player, 4))
|
|
add_rule(khbbsworld.get_location("(T) Mirage Arena Complete Treasure Tussle"),
|
|
lambda state: has_x_worlds(state, player, 6))
|
|
add_rule(khbbsworld.get_location("(T) Mirage Arena Complete Harsh Punishment"),
|
|
lambda state: has_x_worlds(state, player, 6))
|
|
add_rule(khbbsworld.get_location("(T) Mirage Arena Copycat Crisis Max HP Increase"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 8)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(T) Mirage Arena Complete Copycat Crisis"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 8)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(T) Mirage Arena Keepers of the Arena Ultima Cannon"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 8)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(T) Mirage Arena Complete Keepers of the Arena"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 8)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
if options.super_bosses:
|
|
add_rule(khbbsworld.get_location("(T) The Land of Departure Defeat Unknown No Name"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 9)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(T) The Keyblade Graveyard Defeat Vanitas Remnant Void Gear"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 9)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
if options.character == 1:
|
|
add_rule(khbbsworld.get_location("(A) The Land of Departure World Sealed Brightcrest"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Wayfinder Ventus",
|
|
"Wayfinder Aqua",
|
|
"Wayfinder Terra"}, player)
|
|
and has_defensive_tools(state, player)
|
|
and has_x_worlds(state, player, 8)
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) Dwarf Woodlands Vault Magnet Chest"),
|
|
lambda state: (
|
|
has_fire(state, player, minigames)
|
|
or
|
|
state.has_all({"High Jump", "Doubleflight"}, player)
|
|
or
|
|
(state.has_any({"High Jump", "Doubleflight"}, player) and can_airslide(state, player))
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) Dwarf Woodlands Vault Bubble Sticker"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"High Jump",
|
|
"Doubleflight"}, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) Dwarf Woodlands Courtyard Fission Firaga Chest"),
|
|
lambda state: (
|
|
state.has("Doubleflight", player)
|
|
or (state.has("High Jump", player) and can_airslide(state, player))
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) Castle of Dreams Palace Courtyard Bubble Sticker"),
|
|
lambda state: (
|
|
state.has_any({
|
|
"High Jump",
|
|
"Doubleflight"}, player)
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) Enchanted Dominion Dungeon Horace Sticker"),
|
|
lambda state: (
|
|
state.has_any({
|
|
"High Jump",
|
|
"Doubleflight"}, player)
|
|
and (can_airslide(state, player) or options.advanced_logic)
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) Enchanted Dominion Dungeon Ice Barrage Chest"),
|
|
lambda state: (
|
|
state.has_any({"High Jump", "Doubleflight"}, player)
|
|
or can_airslide(state, player)
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) The Mysterious Tower Tower Entrance Donald Sticker"),
|
|
lambda state: (
|
|
state.has("Doubleflight", player)
|
|
or (state.has("High Jump", player) and can_airslide(state, player))
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) Radiant Garden Front Doors Juice Sticker"),
|
|
lambda state: (
|
|
state.has_any({
|
|
"High Jump",
|
|
"Doubleflight"}, player)
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) Radiant Garden Aqueduct Donut Sticker"),
|
|
lambda state: (
|
|
state.has_any({
|
|
"High Jump",
|
|
"Doubleflight"}, player)
|
|
))
|
|
if options.final_terra_xehanort_ii:
|
|
add_rule(khbbsworld.get_location("(A) Radiant Garden Defeat Final Terra-Xehanort II"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Wayfinder Ventus",
|
|
"Wayfinder Aqua",
|
|
"Wayfinder Terra"}, player)
|
|
and has_defensive_tools(state, player)
|
|
and has_x_worlds(state, player, 8)
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) Olympus Coliseum Coliseum Gates Fireworks Sticker"),
|
|
lambda state: (
|
|
state.has_any({
|
|
"High Jump",
|
|
"Doubleflight"}, player)
|
|
or can_airslide(state, player) #high level
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) Deep Space Turo Prison Block Teleport Chest"),
|
|
lambda state: (
|
|
state.has("Doubleflight", player)
|
|
or can_airslide(state, player)
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) Deep Space Turo Prison Block Mega-Potion Chest"),
|
|
lambda state: (
|
|
state.has("Doubleflight", player)
|
|
or can_airslide(state, player)
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) Deep Space Turo Prison Block Dale Sticker"),
|
|
lambda state: (
|
|
state.has("Doubleflight", player)
|
|
or can_airslide(state, player)
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) Never Land Mermaid Lagoon Rainbow Sticker"),
|
|
lambda state: (
|
|
(
|
|
state.has_any({
|
|
"High Jump",
|
|
"Doubleflight"}, player)
|
|
and can_airslide(state, player)
|
|
)
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) Never Land Jungle Clearing Fireworks Sticker"),
|
|
lambda state: state.has("Doubleflight", player))
|
|
add_rule(khbbsworld.get_location("(A) Disney Town Gizmo Gallery Mega-Potion Chest 1"),
|
|
lambda state: (
|
|
state.has("Doubleflight", player)
|
|
or can_airslide(state, player)
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) Disney Town Gizmo Gallery Chaos Crystal Chest"),
|
|
lambda state: (
|
|
state.has("Doubleflight", player)
|
|
or can_airslide(state, player)
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) Disney Town Pete's Rec Room Panacea Chest"),
|
|
lambda state: (
|
|
can_airslide(state, player)
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) Disney Town Pete's Rec Room Aerial Slam Chest"),
|
|
lambda state: (
|
|
can_airslide(state, player)
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) Disney Town Pete's Rec Room Break Time Chest"),
|
|
lambda state: (
|
|
can_airslide(state, player)
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) Disney Town Pete's Rec Room Action Recipe Chest"),
|
|
lambda state: (
|
|
can_airslide(state, player)
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) Disney Town Raceway Daisy Sticker"),
|
|
lambda state: (
|
|
(
|
|
state.has_all({
|
|
"High Jump",
|
|
"Doubleflight"}, player)
|
|
and can_airslide(state, player)
|
|
)
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) Disney Town Main Plaza Minnie Sticker"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"High Jump",
|
|
"Doubleflight"}, player)
|
|
or (state.has("Doubleflight", player) and options.advanced_logic)
|
|
))
|
|
if options.realm_of_darkness:
|
|
add_rule(khbbsworld.get_location("(A) Realm of Darkness: Upper Zone Megalixir Chest"),
|
|
lambda state: (
|
|
state.has_any({"High Jump", "Doubleflight"}, player)
|
|
or can_airslide(state, player)
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) Realm of Darkness: Upper Zone Triple Firaga Chest"),
|
|
lambda state: (
|
|
state.has_any({"High Jump", "Doubleflight"}, player)
|
|
or can_airslide(state, player)
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) Realm of Darkness Defeat Dark Hide"),
|
|
lambda state: (
|
|
state.has_any({"High Jump", "Doubleflight"}, player)
|
|
or can_airslide(state, player)
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) The Keyblade Graveyard Seat of War Flower Sticker"),
|
|
lambda state: state.has("Doubleflight", player))
|
|
add_rule(khbbsworld.get_location("(A) The Keyblade Graveyard Fissure Bubble Sticker"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"High Jump",
|
|
"Doubleflight"}, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) The Keyblade Graveyard Defeat Braig Max HP Increase"),
|
|
lambda state: has_defensive_tools(state, player))
|
|
add_rule(khbbsworld.get_location("(A) The Keyblade Graveyard Defeat Ventus-Vanitas"),
|
|
lambda state: has_defensive_tools(state, player))
|
|
if options.command_board:
|
|
add_rule(khbbsworld.get_location("(A) Mirage Arena Win a Command Board game"),
|
|
lambda state: state.has_group_unique("Command Board", player, 1))
|
|
add_rule(khbbsworld.get_location("(A) Mirage Arena Win 3 Command Board games"),
|
|
lambda state: state.has_group_unique("Command Board", player, 1))
|
|
add_rule(khbbsworld.get_location("(A) Mirage Arena Win 5 Command Board games"),
|
|
lambda state: state.has_group_unique("Command Board", player, 1))
|
|
add_rule(khbbsworld.get_location("(A) Mirage Arena Win 7 Command Board games"),
|
|
lambda state: state.has_group_unique("Command Board", player, 1))
|
|
if options.minigames:
|
|
add_rule(khbbsworld.get_location("(A) Mirage Arena Country Chase: Finish 5 laps in 2:30"),
|
|
lambda state: state.has("Disney Town", player))
|
|
add_rule(khbbsworld.get_location("(A) Mirage Arena Disney Drive: Finish 5 laps in 5 minutes"),
|
|
lambda state: state.has("Disney Town", player))
|
|
add_rule(khbbsworld.get_location("(A) Mirage Arena Grand Spree: Finish 5 laps in 5 minutes"),
|
|
lambda state: state.has("Disney Town", player))
|
|
add_rule(khbbsworld.get_location("(A) Mirage Arena Castle Circuit: Finish 5 laps in 5:30"),
|
|
lambda state: state.has("Disney Town", player))
|
|
if options.mirage_arena:
|
|
if options.super_bosses:
|
|
add_rule(khbbsworld.get_location("(A) Mirage Arena Villains' Vendetta Ultima Weapon"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 9)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) Mirage Arena Complete Villains' Vendetta"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 9)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) Mirage Arena Light's Lessons Max HP Increase"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 9)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) Mirage Arena Complete Light's Lessons"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 9)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) Mirage Arena Peering into Darkness Royal Radiance"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 9)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) Mirage Arena Complete Peering into Darkness"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 9)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
if options.arena_global_locations:
|
|
add_rule(khbbsworld.get_location("(A) Mirage Arena Complete Weaver Fever"),
|
|
lambda state: has_x_worlds(state, player, 4))
|
|
add_rule(khbbsworld.get_location("(A) Mirage Arena Combined Threat Sky Climber"),
|
|
lambda state: has_x_worlds(state, player, 6))
|
|
add_rule(khbbsworld.get_location("(A) Mirage Arena Complete Combined Threat"),
|
|
lambda state: has_x_worlds(state, player, 6))
|
|
add_rule(khbbsworld.get_location("(A) Mirage Arena Monster of the Sea Mini"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 8)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) Mirage Arena Complete Monster of the Sea"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 8)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
else:
|
|
add_rule(khbbsworld.get_location("(A) Mirage Arena Combined Threat Sky Climber"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 6)
|
|
and state.has("Radiant Garden", player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) Mirage Arena Complete Combined Threat"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 6)
|
|
and state.has("Radiant Garden", player)
|
|
))
|
|
if options.minigames:
|
|
add_rule(khbbsworld.get_location("(A) Mirage Arena Monster of the Sea Mini"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 8)
|
|
and state.has("Disney Town", player)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) Mirage Arena Complete Monster of the Sea"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 8)
|
|
and state.has("Disney Town", player)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) Mirage Arena Complete Day of Reckoning"),
|
|
lambda state: has_x_worlds(state, player, 2))
|
|
add_rule(khbbsworld.get_location("(A) Mirage Arena Wheels of Misfortune Max HP Increase"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 2)
|
|
and state.has("Castle of Dreams", player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) Mirage Arena Complete Wheels of Misfortune"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 2)
|
|
and state.has("Castle of Dreams", player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) Mirage Arena Complete Risky Riches"),
|
|
lambda state: has_x_worlds(state, player, 2))
|
|
add_rule(khbbsworld.get_location("(A) Mirage Arena Complete Sinister Sentinel"),
|
|
lambda state: has_x_worlds(state, player, 4))
|
|
add_rule(khbbsworld.get_location("(A) Mirage Arena Complete Dead Ringer"),
|
|
lambda state: has_x_worlds(state, player, 4))
|
|
add_rule(khbbsworld.get_location("(A) Mirage Arena Complete Treasure Tussle"),
|
|
lambda state: has_x_worlds(state, player, 6))
|
|
add_rule(khbbsworld.get_location("(A) Mirage Arena Complete Harsh Punishment"),
|
|
lambda state: has_x_worlds(state, player, 6))
|
|
add_rule(khbbsworld.get_location("(A) Mirage Arena A Time to Chill Max HP Increase"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 8)
|
|
and state.has("Olympus Coliseum", player)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) Mirage Arena Complete A Time to Chill"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 8)
|
|
and state.has("Olympus Coliseum", player)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) Mirage Arena Complete Copycat Crisis"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 8)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) Mirage Arena Keepers of the Arena Lightbloom"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 8)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) Mirage Arena Complete Keepers of the Arena"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 8)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
if options.super_bosses:
|
|
add_rule(khbbsworld.get_location("(A) The Land of Departure Defeat Unknown No Name"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 9)
|
|
and has_defensive_tools(state,player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(A) The Keyblade Graveyard Defeat Vanitas Remnant Void Gear"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 9)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
if options.character == 0:
|
|
add_rule(khbbsworld.get_location("(V) Dwarf Woodlands Cottage Clearing Ice Cream Sticker"),
|
|
lambda state: (
|
|
state.has("High Jump", player)
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(V) Castle of Dreams Mousehole Louie Sticker"),
|
|
lambda state: (
|
|
can_glide(state, player)
|
|
or can_airslide(state, player)
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(V) Castle of Dreams Mousehole Thunderstorm Chest"),
|
|
lambda state: (
|
|
can_glide(state, player)
|
|
or can_airslide(state, player)
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(V) Enchanted Dominion Dungeon Tornado Strike Chest"),
|
|
lambda state: (
|
|
can_glide(state, player)
|
|
or can_airslide(state, player) #high level
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(V) Enchanted Dominion Audience Chamber Dewey Sticker"),
|
|
lambda state: (
|
|
state.has("High Jump", player) #high level
|
|
and (can_glide(state, player) or options.advanced_logic)
|
|
))
|
|
add_rule(khbbsworld.get_location("(V) Radiant Garden Gardens Ice Cream Sticker"),
|
|
lambda state: (
|
|
state.has("High Jump", player)
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(V) Radiant Garden Fountain Court Huey Sticker"),
|
|
lambda state: (
|
|
can_glide(state, player)
|
|
or can_airslide(state, player)
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(V) Radiant Garden Front Doors Fireworks Sticker"),
|
|
lambda state: state.has("High Jump", player)) #high level
|
|
add_rule(khbbsworld.get_location("(V) Olympus Coliseum Coliseum Gates Confetti Sticker"),
|
|
lambda state: (
|
|
state.has("High Jump", player)
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(V) Never Land Mermaid Lagoon Blitz Chest"),
|
|
lambda state: (
|
|
can_glide(state, player)
|
|
or can_airslide(state, player) #high level
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(V) Never Land Mermaid Lagoon Dale Sticker"),
|
|
lambda state: (
|
|
can_glide(state, player)
|
|
or can_airslide(state, player)
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(V) Never Land Cliff Path Firaga Chest"),
|
|
lambda state: (
|
|
can_glide(state, player)
|
|
or can_airslide(state, player) #high level
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(khbbsworld.get_location("(V) Never Land Rainbow Falls: Base Rainbow Sticker"),
|
|
lambda state: (
|
|
state.has("High Jump", player) #high level
|
|
and
|
|
(
|
|
can_glide(state, player)
|
|
or options.advanced_logic
|
|
)
|
|
))
|
|
add_rule(khbbsworld.get_location("(V) Disney Town Gizmo Gallery Mega-Ether Chest"),
|
|
lambda state: has_thunder(state, player, minigames))
|
|
add_rule(khbbsworld.get_location("(V) Disney Town Gizmo Gallery Mega-Potion Chest 2"),
|
|
lambda state: has_thunder(state, player, minigames))
|
|
add_rule(khbbsworld.get_location("(V) Disney Town Gizmo Gallery Chaos Crystal Chest"),
|
|
lambda state: (
|
|
has_thunder(state, player, minigames)
|
|
and
|
|
(
|
|
can_glide(state, player)
|
|
or can_airslide(state, player)
|
|
or options.advanced_logic
|
|
)
|
|
))
|
|
add_rule(khbbsworld.get_location("(V) Disney Town Gizmo Gallery Mega-Potion Chest 1"),
|
|
lambda state: (
|
|
has_thunder(state, player, minigames)
|
|
and
|
|
(
|
|
can_glide(state, player)
|
|
or can_airslide(state, player)
|
|
or options.advanced_logic
|
|
)
|
|
))
|
|
add_rule(khbbsworld.get_location("(V) Disney Town Gizmo Gallery Mickey Sticker"),
|
|
lambda state: (
|
|
has_thunder(state, player, minigames)
|
|
and
|
|
(
|
|
can_glide(state, player)
|
|
or can_airslide(state, player)
|
|
or options.advanced_logic
|
|
)
|
|
))
|
|
add_rule(khbbsworld.get_location("(V) Disney Town Pete's Rec Room Panacea Chest"),
|
|
lambda state: (
|
|
has_thunder(state, player, minigames)
|
|
and
|
|
(
|
|
can_glide(state, player)
|
|
or can_airslide(state, player)
|
|
or options.advanced_logic
|
|
)
|
|
))
|
|
add_rule(khbbsworld.get_location("(V) Disney Town Pete's Rec Room Aerial Slam Chest"),
|
|
lambda state: (
|
|
has_thunder(state, player, minigames)
|
|
and
|
|
(
|
|
can_glide(state, player)
|
|
or can_airslide(state, player)
|
|
or options.advanced_logic
|
|
)
|
|
))
|
|
add_rule(khbbsworld.get_location("(V) Disney Town Pete's Rec Room Break Time Chest"),
|
|
lambda state: (
|
|
has_thunder(state, player, minigames)
|
|
and
|
|
(
|
|
can_glide(state, player)
|
|
or can_airslide(state, player)
|
|
or options.advanced_logic
|
|
)
|
|
))
|
|
add_rule(khbbsworld.get_location("(V) Disney Town Pete's Rec Room Wellspring Crystal Chest"),
|
|
lambda state: has_thunder(state, player, minigames))
|
|
add_rule(khbbsworld.get_location("(V) Disney Town Pete's Rec Room Action Recipe Chest"),
|
|
lambda state: (
|
|
has_thunder(state, player, minigames)
|
|
and
|
|
(
|
|
can_glide(state, player)
|
|
or can_airslide(state, player)
|
|
or options.advanced_logic
|
|
)
|
|
))
|
|
add_rule(khbbsworld.get_location("(V) Disney Town Pete's Rec Room Minnie Sticker"),
|
|
lambda state: (
|
|
has_thunder(state, player, minigames)
|
|
and
|
|
(
|
|
can_glide(state, player)
|
|
or can_airslide(state, player)
|
|
or options.advanced_logic
|
|
)
|
|
))
|
|
add_rule(khbbsworld.get_location("(V) Disney Town Raceway Slot Edge Chest"),
|
|
lambda state: has_thunder(state, player, minigames))
|
|
add_rule(khbbsworld.get_location("(V) Disney Town Raceway Superglide Chest"),
|
|
lambda state: (
|
|
has_thunder(state, player, minigames)
|
|
and (can_glide(state, player) or options.advanced_logic)
|
|
))
|
|
add_rule(khbbsworld.get_location("(V) Disney Town Raceway Chip Sticker"),
|
|
lambda state: (
|
|
has_thunder(state, player, minigames)
|
|
and (can_glide(state, player) or options.advanced_logic)
|
|
))
|
|
add_rule(khbbsworld.get_location("(V) The Keyblade Graveyard Seat of War Ice Cream Sticker"),
|
|
lambda state: state.has("High Jump", player))
|
|
add_rule(khbbsworld.get_location("(V) The Keyblade Graveyard Defeat Vanitas 2 Max HP Increase"),
|
|
lambda state: has_defensive_tools(state, player))
|
|
add_rule(khbbsworld.get_location("(V) The Keyblade Graveyard Defeat Final Vanitas"),
|
|
lambda state: has_defensive_tools(state, player))
|
|
if options.command_board:
|
|
add_rule(khbbsworld.get_location("(V) Mirage Arena Win a Command Board game"),
|
|
lambda state: state.has_group_unique("Command Board", player, 1))
|
|
add_rule(khbbsworld.get_location("(V) Mirage Arena Win 3 Command Board games"),
|
|
lambda state: state.has_group_unique("Command Board", player, 1))
|
|
add_rule(khbbsworld.get_location("(V) Mirage Arena Win 5 Command Board games"),
|
|
lambda state: state.has_group_unique("Command Board", player, 1))
|
|
add_rule(khbbsworld.get_location("(V) Mirage Arena Win 7 Command Board games"),
|
|
lambda state: state.has_group_unique("Command Board", player, 1))
|
|
if options.minigames:
|
|
add_rule(khbbsworld.get_location("(V) Mirage Arena Country Chase: Finish 5 laps in 2:30"),
|
|
lambda state: state.has("Disney Town", player))
|
|
add_rule(khbbsworld.get_location("(V) Mirage Arena Disney Drive: Finish 5 laps in 5 minutes"),
|
|
lambda state: state.has("Disney Town", player))
|
|
add_rule(khbbsworld.get_location("(V) Mirage Arena Grand Spree: Finish 5 laps in 5 minutes"),
|
|
lambda state: state.has("Disney Town", player))
|
|
add_rule(khbbsworld.get_location("(V) Mirage Arena Castle Circuit: Finish 5 laps in 5:30"),
|
|
lambda state: state.has("Disney Town", player))
|
|
if options.mirage_arena:
|
|
if options.super_bosses:
|
|
add_rule(khbbsworld.get_location("(V) Mirage Arena Villains' Vendetta Ultima Weapon"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 9)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(V) Mirage Arena Complete Villains' Vendetta"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 9)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(V) Mirage Arena Light's Lessons Max HP Increase"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 9)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(V) Mirage Arena Complete Light's Lessons"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 9)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(V) Mirage Arena Peering into Darkness Royal Radiance"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 9)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(V) Mirage Arena Complete Peering into Darkness"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 9)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
if options.arena_global_locations:
|
|
add_rule(khbbsworld.get_location("(V) Mirage Arena Complete Wheels of Misfortune"),
|
|
lambda state: has_x_worlds(state, player, 2))
|
|
add_rule(khbbsworld.get_location("(V) Mirage Arena Complete Weaver Fever"),
|
|
lambda state: has_x_worlds(state, player, 4))
|
|
add_rule(khbbsworld.get_location("(V) Mirage Arena A Time to Chill Max HP Increase"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 8)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(V) Mirage Arena Complete A Time to Chill"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 8)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(V) Mirage Arena Complete Combined Threat"),
|
|
lambda state: has_x_worlds(state, player, 6))
|
|
add_rule(khbbsworld.get_location("(V) Mirage Arena Monster of the Sea Mini"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 8)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(V) Mirage Arena Complete Monster of the Sea"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 8)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
else:
|
|
add_rule(khbbsworld.get_location("(V) Mirage Arena Complete Combined Threat"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 6)
|
|
and state.has("Radiant Garden", player)
|
|
))
|
|
if options.minigames:
|
|
add_rule(khbbsworld.get_location("(V) Mirage Arena Monster of the Sea Mini"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 8)
|
|
and state.has("Disney Town", player)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(V) Mirage Arena Complete Monster of the Sea"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 8)
|
|
and state.has("Disney Town", player)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(V) Mirage Arena Complete Day of Reckoning"),
|
|
lambda state: has_x_worlds(state, player, 2))
|
|
add_rule(khbbsworld.get_location("(V) Mirage Arena Complete Risky Riches"),
|
|
lambda state: has_x_worlds(state, player, 2))
|
|
add_rule(khbbsworld.get_location("(V) Mirage Arena Sinister Sentinel Sky Climber"),
|
|
lambda state: has_x_worlds(state, player, 4))
|
|
add_rule(khbbsworld.get_location("(V) Mirage Arena Complete Sinister Sentinel"),
|
|
lambda state: has_x_worlds(state, player, 4))
|
|
add_rule(khbbsworld.get_location("(V) Mirage Arena Dead Ringer Max HP Increase"),
|
|
lambda state: has_x_worlds(state, player, 4))
|
|
add_rule(khbbsworld.get_location("(V) Mirage Arena Complete Dead Ringer"),
|
|
lambda state: has_x_worlds(state, player, 4))
|
|
add_rule(khbbsworld.get_location("(V) Mirage Arena Complete Treasure Tussle"),
|
|
lambda state: has_x_worlds(state, player, 6))
|
|
add_rule(khbbsworld.get_location("(V) Mirage Arena Complete Harsh Punishment"),
|
|
lambda state: has_x_worlds(state, player, 6))
|
|
add_rule(khbbsworld.get_location("(V) Mirage Arena Complete Copycat Crisis"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 8)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(V) Mirage Arena Keepers of the Arena Multivortex"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 8)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(V) Mirage Arena Complete Keepers of the Arena"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 8)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
if options.super_bosses:
|
|
add_rule(khbbsworld.get_location("(V) The Land of Departure Defeat Unknown No Name"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 9)
|
|
and has_defensive_tools(state,player)
|
|
))
|
|
add_rule(khbbsworld.get_location("(V) The Keyblade Graveyard Defeat Vanitas Remnant Void Gear"),
|
|
lambda state: (
|
|
has_x_worlds(state, player, 9)
|
|
and has_defensive_tools(state,player)
|
|
))
|
|
|
|
|
|
# Region rules.
|
|
add_rule(khbbsworld.get_entrance("Dwarf Woodlands"),
|
|
lambda state: state.has("Dwarf Woodlands", player))
|
|
add_rule(khbbsworld.get_entrance("Castle of Dreams"),
|
|
lambda state: state.has("Castle of Dreams", player))
|
|
add_rule(khbbsworld.get_entrance("Enchanted Dominion"),
|
|
lambda state: state.has("Enchanted Dominion", player))
|
|
add_rule(khbbsworld.get_entrance("The Mysterious Tower"),
|
|
lambda state: state.has("The Mysterious Tower", player))
|
|
add_rule(khbbsworld.get_entrance("Radiant Garden"),
|
|
lambda state: state.has("Radiant Garden", player))
|
|
add_rule(khbbsworld.get_entrance("Olympus Coliseum"),
|
|
lambda state: state.has("Olympus Coliseum", player))
|
|
add_rule(khbbsworld.get_entrance("Deep Space"),
|
|
lambda state: state.has("Deep Space", player))
|
|
#add_rule(khbbsworld.get_entrance("Destiny Islands"),
|
|
# lambda state: state.has("Destiny Islands", player))
|
|
add_rule(khbbsworld.get_entrance("Never Land"),
|
|
lambda state: state.has("Never Land", player))
|
|
add_rule(khbbsworld.get_entrance("Disney Town"),
|
|
lambda state: state.has("Disney Town", player))
|
|
add_rule(khbbsworld.get_entrance("Mirage Arena"),
|
|
lambda state: state.has("Mirage Arena", player))
|
|
add_rule(khbbsworld.get_entrance("The Keyblade Graveyard"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Wayfinder Ventus",
|
|
"Wayfinder Aqua",
|
|
"Wayfinder Terra"}, player)
|
|
and has_x_worlds(state, player, 8)
|
|
))
|
|
if options.realm_of_darkness:
|
|
add_rule(khbbsworld.get_entrance("Realm of Darkness"),
|
|
lambda state: state.has("Realm of Darkness", player))
|
|
|
|
# Win condition.
|
|
multiworld.completion_condition[player] = lambda state: state.has("Victory", player)
|
|
|