Files
dockipelago/worlds/khbbs/Rules.py
Jonathan Tinney 7971961166
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
add schedule I, sonic 1/frontiers/heroes, spirit island
2026-04-02 23:46:36 -07:00

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)