1959 lines
104 KiB
Python
1959 lines
104 KiB
Python
from BaseClasses import CollectionState
|
|
from worlds.generic.Rules import add_rule
|
|
from math import ceil
|
|
|
|
SINGLE_PUPPIES = ["Puppy " + str(i).rjust(2,"0") for i in range(1,100)]
|
|
TRIPLE_PUPPIES = ["Puppies " + str(3*(i-1)+1).rjust(2, "0") + "-" + str(3*(i-1)+3).rjust(2, "0") for i in range(1,34)]
|
|
TORN_PAGES = ["Torn Page " + str(i) for i in range(1,6)]
|
|
WORLDS = ["Wonderland", "Olympus Coliseum", "Deep Jungle", "Agrabah", "Monstro", "Atlantica", "Halloween Town", "Neverland", "Hollow Bastion", "End of the World"]
|
|
KEYBLADES = ["Lady Luck", "Olympia", "Jungle King", "Three Wishes", "Wishing Star", "Crabclaw", "Pumpkinhead", "Fairy Harp", "Divine Rose", "Oblivion"]
|
|
|
|
def has_x_worlds(state: CollectionState, player: int, num_of_worlds: int, keyblades_unlock_chests: bool) -> bool:
|
|
worlds_acquired = 0.0
|
|
for i in range(len(WORLDS)):
|
|
if state.has(WORLDS[i], player):
|
|
worlds_acquired = worlds_acquired + 0.5
|
|
if (state.has(WORLDS[i], player) and (not keyblades_unlock_chests or state.has(KEYBLADES[i], player))) or (state.has(WORLDS[i], player) and WORLDS[i] == "Atlantica"):
|
|
worlds_acquired = worlds_acquired + 0.5
|
|
return worlds_acquired >= num_of_worlds
|
|
|
|
def has_emblems(state: CollectionState, player: int, keyblades_unlock_chests: bool) -> bool:
|
|
return state.has_all({
|
|
"Emblem Piece (Flame)",
|
|
"Emblem Piece (Chest)",
|
|
"Emblem Piece (Statue)",
|
|
"Emblem Piece (Fountain)",
|
|
"Hollow Bastion"}, player) and has_x_worlds(state, player, 5, keyblades_unlock_chests)
|
|
|
|
def has_puppies_all(state: CollectionState, player: int, puppies_required: int) -> bool:
|
|
return state.has("All Puppies", player)
|
|
|
|
def has_puppies_triplets(state: CollectionState, player: int, puppies_required: int) -> bool:
|
|
return state.has_from_list_unique(TRIPLE_PUPPIES, player, ceil(puppies_required / 3))
|
|
|
|
def has_puppies_individual(state: CollectionState, player: int, puppies_required: int) -> bool:
|
|
return state.has_from_list_unique(SINGLE_PUPPIES, player, puppies_required)
|
|
|
|
def has_torn_pages(state: CollectionState, player: int, pages_required: int) -> bool:
|
|
return state.count_from_list_unique(TORN_PAGES, player) >= pages_required
|
|
|
|
def has_all_arts(state: CollectionState, player: int) -> bool:
|
|
return state.has_all({"Fire Arts", "Blizzard Arts", "Thunder Arts", "Cure Arts", "Gravity Arts", "Stop Arts", "Aero Arts"}, player)
|
|
|
|
def has_all_summons(state: CollectionState, player: int) -> bool:
|
|
return state.has_all({"Simba", "Bambi", "Genie", "Dumbo", "Mushu", "Tinker Bell"}, player)
|
|
|
|
def has_all_magic_lvx(state: CollectionState, player: int, level) -> bool:
|
|
return state.has_all_counts({
|
|
"Progressive Fire": level,
|
|
"Progressive Blizzard": level,
|
|
"Progressive Thunder": level,
|
|
"Progressive Cure": level,
|
|
"Progressive Gravity": level,
|
|
"Progressive Aero": level,
|
|
"Progressive Stop": level}, player)
|
|
|
|
def has_offensive_magic(state: CollectionState, player: int) -> bool:
|
|
return state.has_any({"Progressive Fire", "Progressive Blizzard", "Progressive Thunder", "Progressive Gravity", "Progressive Stop"}, player)
|
|
|
|
def has_reports(state: CollectionState, player: int, eotw_required_reports: int) -> bool:
|
|
return state.has_group_unique("Reports", player, eotw_required_reports)
|
|
|
|
def has_final_rest_door(state: CollectionState, player: int, final_rest_door_requirement: str, final_rest_door_required_reports: int, keyblades_unlock_chests: bool, puppies_choice: str):
|
|
if final_rest_door_requirement == "reports":
|
|
return state.has_group_unique("Reports", player, final_rest_door_required_reports)
|
|
if final_rest_door_requirement == "puppies":
|
|
if puppies_choice == "individual":
|
|
return has_puppies_individual(state, player, 99)
|
|
if puppies_choice == "triplets":
|
|
return has_puppies_triplets(state, player, 99)
|
|
return has_puppies_all(state, player, 99)
|
|
if final_rest_door_requirement == "postcards":
|
|
return state.has("Postcard", player, 10)
|
|
if final_rest_door_requirement == "superbosses":
|
|
return (
|
|
state.has_all({"Olympus Coliseum", "Neverland", "Agrabah", "Hollow Bastion", "Green Trinity", "Phil Cup", "Pegasus Cup", "Hercules Cup", "Entry Pass"}, player)
|
|
and has_emblems(state, player, keyblades_unlock_chests)
|
|
and has_all_magic_lvx(state, player, 2)
|
|
and has_defensive_tools(state, player)
|
|
and has_x_worlds(state, player, 7, keyblades_unlock_chests)
|
|
)
|
|
|
|
def has_defensive_tools(state: CollectionState, player: int) -> bool:
|
|
return (
|
|
state.has_all_counts({"Progressive Cure": 2, "Leaf Bracer": 1, "Dodge Roll": 1}, player)
|
|
and state.has_any_count({"Second Chance": 1, "MP Rage": 1, "Progressive Aero": 2}, player)
|
|
)
|
|
|
|
def can_dumbo_skip(state: CollectionState, player: int) -> bool:
|
|
return (
|
|
state.has("Dumbo", player)
|
|
and state.has_group("Magic", player)
|
|
)
|
|
|
|
def has_oogie_manor(state: CollectionState, player: int, advanced_logic: bool) -> bool:
|
|
return (
|
|
state.has("Progressive Fire", player)
|
|
or (advanced_logic and state.has("High Jump", player, 2))
|
|
or (advanced_logic and state.has("High Jump", player) and state.has("Progressive Glide", player))
|
|
)
|
|
|
|
def set_rules(kh1world):
|
|
multiworld = kh1world.multiworld
|
|
player = kh1world.player
|
|
options = kh1world.options
|
|
eotw_required_reports = kh1world.determine_reports_required_to_open_end_of_the_world()
|
|
final_rest_door_required_reports = kh1world.determine_reports_required_to_open_final_rest_door()
|
|
final_rest_door_requirement = kh1world.options.final_rest_door.current_key
|
|
|
|
has_puppies = has_puppies_individual
|
|
if kh1world.options.puppies == "triplets":
|
|
has_puppies = has_puppies_triplets
|
|
elif kh1world.options.puppies == "full":
|
|
has_puppies = has_puppies_all
|
|
|
|
add_rule(kh1world.get_location("Traverse Town 1st District Candle Puzzle Chest"),
|
|
lambda state: state.has("Progressive Blizzard", player))
|
|
add_rule(kh1world.get_location("Traverse Town Mystical House Yellow Trinity Chest"),
|
|
lambda state: (
|
|
state.has("Progressive Fire", player)
|
|
and
|
|
(
|
|
state.has("Yellow Trinity", player)
|
|
or (options.advanced_logic and state.has("High Jump", player))
|
|
or state.has("High Jump", player, 2)
|
|
)
|
|
))
|
|
add_rule(kh1world.get_location("Traverse Town Secret Waterway White Trinity Chest"),
|
|
lambda state: state.has("White Trinity", player))
|
|
add_rule(kh1world.get_location("Traverse Town Geppetto's House Chest"),
|
|
lambda state: (
|
|
state.has("Monstro", player)
|
|
and
|
|
(
|
|
state.has("High Jump", player)
|
|
or (options.advanced_logic and state.has("Progressive Glide", player))
|
|
)
|
|
and has_x_worlds(state, player, 2, options.keyblades_unlock_chests)
|
|
))
|
|
add_rule(kh1world.get_location("Traverse Town Item Workshop Right Chest"),
|
|
lambda state: (
|
|
state.has("Green Trinity", player)
|
|
or state.has("High Jump", player, 3)
|
|
))
|
|
add_rule(kh1world.get_location("Traverse Town 1st District Blue Trinity Balcony Chest"),
|
|
lambda state: (
|
|
(state.has("Blue Trinity", player) and state.has("Progressive Glide", player))
|
|
or (options.advanced_logic and state.has("Progressive Glide", player))
|
|
))
|
|
add_rule(kh1world.get_location("Traverse Town Mystical House Glide Chest"),
|
|
lambda state: (
|
|
(
|
|
state.has("Progressive Glide", player)
|
|
or
|
|
(
|
|
options.advanced_logic
|
|
and
|
|
(
|
|
(state.has("High Jump", player) and state.has("Yellow Trinity", player))
|
|
or state.has("High Jump", player, 2)
|
|
)
|
|
and state.has("Combo Master", player)
|
|
)
|
|
or
|
|
(
|
|
options.advanced_logic
|
|
and state.has("Mermaid Kick", player)
|
|
)
|
|
)
|
|
and state.has("Progressive Fire", player)
|
|
))
|
|
add_rule(kh1world.get_location("Traverse Town Alleyway Behind Crates Chest"),
|
|
lambda state: state.has("Red Trinity", player))
|
|
add_rule(kh1world.get_location("Traverse Town Item Workshop Left Chest"),
|
|
lambda state: (
|
|
state.has("Green Trinity", player)
|
|
or state.has("High Jump", player, 3)
|
|
))
|
|
add_rule(kh1world.get_location("Wonderland Rabbit Hole Green Trinity Chest"),
|
|
lambda state: state.has("Green Trinity", player))
|
|
add_rule(kh1world.get_location("Wonderland Rabbit Hole Defeat Heartless 3 Chest"),
|
|
lambda state: has_x_worlds(state, player, 5, options.keyblades_unlock_chests))
|
|
add_rule(kh1world.get_location("Wonderland Bizarre Room Green Trinity Chest"),
|
|
lambda state: state.has("Green Trinity", player))
|
|
add_rule(kh1world.get_location("Wonderland Queen's Castle Hedge Left Red Chest"),
|
|
lambda state: (
|
|
state.has("Footprints", player)
|
|
or state.has("High Jump", player)
|
|
or state.has("Progressive Glide", player)
|
|
))
|
|
add_rule(kh1world.get_location("Wonderland Queen's Castle Hedge Right Blue Chest"),
|
|
lambda state: (
|
|
state.has("Footprints", player)
|
|
or state.has("High Jump", player)
|
|
or state.has("Progressive Glide", player)
|
|
))
|
|
add_rule(kh1world.get_location("Wonderland Queen's Castle Hedge Right Red Chest"),
|
|
lambda state: (
|
|
state.has("Footprints", player)
|
|
or state.has("High Jump", player)
|
|
or state.has("Progressive Glide", player)
|
|
))
|
|
add_rule(kh1world.get_location("Wonderland Lotus Forest Thunder Plant Chest"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Progressive Thunder",
|
|
"Footprints"}, player)
|
|
))
|
|
add_rule(kh1world.get_location("Wonderland Lotus Forest Through the Painting Thunder Plant Chest"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Progressive Thunder",
|
|
"Footprints"}, player)
|
|
))
|
|
add_rule(kh1world.get_location("Wonderland Lotus Forest Glide Chest"),
|
|
lambda state: (
|
|
state.has("Progressive Glide", player)
|
|
or
|
|
(
|
|
options.advanced_logic
|
|
and (state.has("High Jump", player) or can_dumbo_skip(state, player))
|
|
and state.has("Footprints", player)
|
|
)
|
|
))
|
|
add_rule(kh1world.get_location("Wonderland Lotus Forest Corner Chest"),
|
|
lambda state: (
|
|
(
|
|
state.has("High Jump", player)
|
|
or state.has("Progressive Glide", player)
|
|
)
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(kh1world.get_location("Wonderland Bizarre Room Lamp Chest"),
|
|
lambda state: state.has("Footprints", player))
|
|
add_rule(kh1world.get_location("Wonderland Tea Party Garden Above Lotus Forest Entrance 2nd Chest"),
|
|
lambda state: (
|
|
state.has("Progressive Glide", player)
|
|
or
|
|
(
|
|
state.has("High Jump", player, 2)
|
|
and state.has("Footprints", player)
|
|
)
|
|
or
|
|
(
|
|
options.advanced_logic
|
|
and state.has_all({
|
|
"High Jump",
|
|
"Footprints"}, player)
|
|
)
|
|
))
|
|
add_rule(kh1world.get_location("Wonderland Tea Party Garden Above Lotus Forest Entrance 1st Chest"),
|
|
lambda state: (
|
|
state.has("Progressive Glide", player)
|
|
or
|
|
(
|
|
state.has("High Jump", player, 2)
|
|
and state.has("Footprints", player)
|
|
)
|
|
or
|
|
(
|
|
options.advanced_logic
|
|
and state.has_all({
|
|
"High Jump",
|
|
"Footprints"}, player)
|
|
)
|
|
))
|
|
add_rule(kh1world.get_location("Wonderland Tea Party Garden Bear and Clock Puzzle Chest"),
|
|
lambda state: (
|
|
|
|
state.has("Footprints", player)
|
|
or (options.advanced_logic and state.has("Progressive Glide", player))
|
|
))
|
|
add_rule(kh1world.get_location("Wonderland Tea Party Garden Across From Bizarre Room Entrance Chest"),
|
|
lambda state: (
|
|
state.has("Progressive Glide", player)
|
|
or
|
|
(
|
|
state.has("High Jump", player, 3)
|
|
and state.has("Footprints", player)
|
|
)
|
|
or
|
|
(
|
|
options.advanced_logic
|
|
and state.has_all({
|
|
"High Jump",
|
|
"Footprints",
|
|
"Combo Master"}, player)
|
|
)
|
|
))
|
|
add_rule(kh1world.get_location("Wonderland Lotus Forest Through the Painting White Trinity Chest"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"White Trinity",
|
|
"Footprints"}, player)
|
|
))
|
|
add_rule(kh1world.get_location("Deep Jungle Hippo's Lagoon Right Chest"),
|
|
lambda state: (
|
|
|
|
state.has("High Jump", player)
|
|
or state.has("Progressive Glide", player)
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(kh1world.get_location("Deep Jungle Climbing Trees Blue Trinity Chest"),
|
|
lambda state: state.has("Blue Trinity", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Cavern of Hearts White Trinity Chest"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"White Trinity",
|
|
"Slides"}, player)
|
|
))
|
|
add_rule(kh1world.get_location("Deep Jungle Camp Blue Trinity Chest"),
|
|
lambda state: state.has("Blue Trinity", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Waterfall Cavern Low Chest"),
|
|
lambda state: state.has("Slides", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Waterfall Cavern Middle Chest"),
|
|
lambda state: state.has("Slides", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Waterfall Cavern High Wall Chest"),
|
|
lambda state: state.has("Slides", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Waterfall Cavern High Middle Chest"),
|
|
lambda state: state.has("Slides", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Tree House Suspended Boat Chest"),
|
|
lambda state: (
|
|
state.has("Progressive Glide", player)
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(kh1world.get_location("Agrabah Main Street High Above Palace Gates Entrance Chest"),
|
|
lambda state: (
|
|
state.has("High Jump", player)
|
|
or state.has("Progressive Glide", player)
|
|
or (options.advanced_logic and can_dumbo_skip(state, player))
|
|
))
|
|
add_rule(kh1world.get_location("Agrabah Palace Gates High Opposite Palace Chest"),
|
|
lambda state: (
|
|
state.has("High Jump", player)
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(kh1world.get_location("Agrabah Palace Gates High Close to Palace Chest"),
|
|
lambda state: (
|
|
(
|
|
state.has_all({
|
|
"High Jump",
|
|
"Progressive Glide"}, player)
|
|
or
|
|
(
|
|
options.advanced_logic
|
|
and
|
|
(
|
|
state.has("Combo Master", player)
|
|
or can_dumbo_skip(state, player)
|
|
)
|
|
)
|
|
)
|
|
or state.has("High Jump", player, 3)
|
|
or (options.advanced_logic and state.has("Progressive Glide", player))
|
|
))
|
|
add_rule(kh1world.get_location("Agrabah Storage Green Trinity Chest"),
|
|
lambda state: state.has("Green Trinity", player))
|
|
add_rule(kh1world.get_location("Agrabah Cave of Wonders Entrance Tall Tower Chest"),
|
|
lambda state: (
|
|
state.has("Progressive Glide", player)
|
|
or (options.advanced_logic and state.has("Combo Master", player))
|
|
or (options.advanced_logic and can_dumbo_skip(state, player))
|
|
or state.has("High Jump", player, 2)
|
|
))
|
|
add_rule(kh1world.get_location("Agrabah Cave of Wonders Bottomless Hall Pillar Chest"),
|
|
lambda state: (
|
|
state.has("High Jump", player)
|
|
or state.has("Progressive Glide", player)
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(kh1world.get_location("Agrabah Cave of Wonders Silent Chamber Blue Trinity Chest"),
|
|
lambda state: state.has("Blue Trinity", player))
|
|
add_rule(kh1world.get_location("Agrabah Cave of Wonders Hidden Room Right Chest"),
|
|
lambda state: (
|
|
state.has("Yellow Trinity", player)
|
|
or state.has("High Jump", player)
|
|
or (options.advanced_logic and state.has("Progressive Glide", player))
|
|
))
|
|
add_rule(kh1world.get_location("Agrabah Cave of Wonders Hidden Room Left Chest"),
|
|
lambda state: (
|
|
state.has("Yellow Trinity", player)
|
|
or state.has("High Jump", player)
|
|
or (options.advanced_logic and state.has("Progressive Glide", player))
|
|
))
|
|
add_rule(kh1world.get_location("Agrabah Cave of Wonders Entrance White Trinity Chest"),
|
|
lambda state: state.has("White Trinity", player))
|
|
add_rule(kh1world.get_location("Monstro Chamber 6 Other Platform Chest"),
|
|
lambda state: (
|
|
state.has_all(("High Jump", "Progressive Glide"), player)
|
|
or (options.advanced_logic and state.has("Combo Master", player))
|
|
))
|
|
add_rule(kh1world.get_location("Monstro Chamber 6 Platform Near Chamber 5 Entrance Chest"),
|
|
lambda state: (
|
|
state.has("High Jump", player)
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(kh1world.get_location("Monstro Chamber 6 Raised Area Near Chamber 1 Entrance Chest"),
|
|
lambda state: (
|
|
state.has_all(("High Jump", "Progressive Glide"), player)
|
|
or (options.advanced_logic and state.has("Combo Master", player))
|
|
))
|
|
add_rule(kh1world.get_location("Halloween Town Moonlight Hill White Trinity Chest"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"White Trinity",
|
|
"Forget-Me-Not"}, player)
|
|
))
|
|
add_rule(kh1world.get_location("Halloween Town Bridge Under Bridge"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Jack-In-The-Box",
|
|
"Forget-Me-Not"}, player)
|
|
))
|
|
add_rule(kh1world.get_location("Halloween Town Boneyard Tombstone Puzzle Chest"),
|
|
lambda state: state.has("Forget-Me-Not", player))
|
|
add_rule(kh1world.get_location("Halloween Town Bridge Right of Gate Chest"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Jack-In-The-Box",
|
|
"Forget-Me-Not"}, player)
|
|
and
|
|
(
|
|
state.has("Progressive Glide", player)
|
|
or options.advanced_logic
|
|
)
|
|
))
|
|
add_rule(kh1world.get_location("Halloween Town Cemetery Behind Grave Chest"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Jack-In-The-Box",
|
|
"Forget-Me-Not"}, player)
|
|
and has_oogie_manor(state, player, options.advanced_logic)
|
|
))
|
|
add_rule(kh1world.get_location("Halloween Town Cemetery By Cat Shape Chest"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Jack-In-The-Box",
|
|
"Forget-Me-Not"}, player)
|
|
and has_oogie_manor(state, player, options.advanced_logic)
|
|
))
|
|
add_rule(kh1world.get_location("Halloween Town Cemetery Between Graves Chest"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Jack-In-The-Box",
|
|
"Forget-Me-Not"}, player)
|
|
and has_oogie_manor(state, player, options.advanced_logic)
|
|
))
|
|
add_rule(kh1world.get_location("Halloween Town Oogie's Manor Lower Iron Cage Chest"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Jack-In-The-Box",
|
|
"Forget-Me-Not"}, player)
|
|
and has_oogie_manor(state, player, options.advanced_logic)
|
|
))
|
|
add_rule(kh1world.get_location("Halloween Town Oogie's Manor Upper Iron Cage Chest"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Jack-In-The-Box",
|
|
"Forget-Me-Not"}, player)
|
|
and has_oogie_manor(state, player, options.advanced_logic)
|
|
))
|
|
add_rule(kh1world.get_location("Halloween Town Oogie's Manor Hollow Chest"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Jack-In-The-Box",
|
|
"Forget-Me-Not"}, player)
|
|
and has_oogie_manor(state, player, options.advanced_logic)
|
|
))
|
|
add_rule(kh1world.get_location("Halloween Town Oogie's Manor Grounds Red Trinity Chest"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Jack-In-The-Box",
|
|
"Forget-Me-Not",
|
|
"Red Trinity"}, player)
|
|
))
|
|
add_rule(kh1world.get_location("Halloween Town Guillotine Square High Tower Chest"),
|
|
lambda state: (
|
|
state.has("High Jump", player)
|
|
or (options.advanced_logic and can_dumbo_skip(state, player))
|
|
or (options.advanced_logic and state.has("Progressive Glide", player))
|
|
))
|
|
add_rule(kh1world.get_location("Halloween Town Guillotine Square Pumpkin Structure Left Chest"),
|
|
lambda state: (
|
|
(
|
|
state.has("High Jump", player)
|
|
or (options.advanced_logic and state.has("Progressive Glide", player))
|
|
)
|
|
and
|
|
(
|
|
state.has("Progressive Glide", player)
|
|
or (options.advanced_logic and state.has("Combo Master", player))
|
|
or state.has("High Jump", player, 2)
|
|
)
|
|
))
|
|
add_rule(kh1world.get_location("Halloween Town Oogie's Manor Entrance Steps Chest"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Jack-In-The-Box",
|
|
"Forget-Me-Not"}, player)
|
|
))
|
|
add_rule(kh1world.get_location("Halloween Town Oogie's Manor Inside Entrance Chest"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Jack-In-The-Box",
|
|
"Forget-Me-Not"}, player)
|
|
))
|
|
add_rule(kh1world.get_location("Halloween Town Bridge Left of Gate Chest"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Jack-In-The-Box",
|
|
"Forget-Me-Not"}, player)
|
|
and
|
|
(
|
|
state.has("Progressive Glide", player)
|
|
or state.has("High Jump", player)
|
|
or options.advanced_logic
|
|
)
|
|
))
|
|
add_rule(kh1world.get_location("Halloween Town Cemetery By Striped Grave Chest"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Jack-In-The-Box",
|
|
"Forget-Me-Not"}, player)
|
|
and has_oogie_manor(state, player, options.advanced_logic)
|
|
))
|
|
add_rule(kh1world.get_location("Halloween Town Guillotine Square Pumpkin Structure Right Chest"),
|
|
lambda state: (
|
|
(
|
|
state.has("High Jump", player)
|
|
or (options.advanced_logic and state.has("Progressive Glide", player))
|
|
)
|
|
and
|
|
(
|
|
state.has("Progressive Glide", player)
|
|
or (options.advanced_logic and state.has("Combo Master", player))
|
|
or state.has("High Jump", player, 2)
|
|
)
|
|
))
|
|
add_rule(kh1world.get_location("Olympus Coliseum Coliseum Gates Right Blue Trinity Chest"),
|
|
lambda state: state.has("Blue Trinity", player))
|
|
add_rule(kh1world.get_location("Olympus Coliseum Coliseum Gates Left Blue Trinity Chest"),
|
|
lambda state: state.has("Blue Trinity", player))
|
|
add_rule(kh1world.get_location("Olympus Coliseum Coliseum Gates White Trinity Chest"),
|
|
lambda state: state.has("White Trinity", player))
|
|
add_rule(kh1world.get_location("Olympus Coliseum Coliseum Gates Blizzara Chest"),
|
|
lambda state: state.has("Progressive Blizzard", player, 2))
|
|
add_rule(kh1world.get_location("Olympus Coliseum Coliseum Gates Blizzaga Chest"),
|
|
lambda state: state.has("Progressive Blizzard", player, 3))
|
|
add_rule(kh1world.get_location("Monstro Mouth High Platform Boat Side Chest"),
|
|
lambda state: (
|
|
state.has("High Jump", player)
|
|
or state.has("Progressive Glide", player)
|
|
))
|
|
add_rule(kh1world.get_location("Monstro Mouth High Platform Across from Boat Chest"),
|
|
lambda state: (
|
|
state.has("High Jump", player)
|
|
or state.has("Progressive Glide", player)
|
|
))
|
|
add_rule(kh1world.get_location("Monstro Mouth Green Trinity Top of Boat Chest"),
|
|
lambda state: (
|
|
(
|
|
state.has("High Jump", player)
|
|
or state.has("Progressive Glide", player)
|
|
)
|
|
and state.has("Green Trinity", player)
|
|
))
|
|
add_rule(kh1world.get_location("Monstro Chamber 5 Platform Chest"),
|
|
lambda state: state.has("High Jump", player))
|
|
add_rule(kh1world.get_location("Monstro Chamber 3 Platform Above Chamber 2 Entrance Chest"),
|
|
lambda state: (
|
|
state.has("High Jump", player)
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(kh1world.get_location("Monstro Chamber 3 Platform Near Chamber 6 Entrance Chest"),
|
|
lambda state: (
|
|
state.has("High Jump", player)
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(kh1world.get_location("Monstro Chamber 5 Atop Barrel Chest"),
|
|
lambda state: (
|
|
state.has("High Jump", player)
|
|
or options.advanced_logic
|
|
))
|
|
add_rule(kh1world.get_location("Neverland Pirate Ship Deck White Trinity Chest"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"White Trinity",
|
|
"Green Trinity"}, player)
|
|
))
|
|
add_rule(kh1world.get_location("Neverland Pirate Ship Crows Nest Chest"),
|
|
lambda state: state.has("Green Trinity", player))
|
|
add_rule(kh1world.get_location("Neverland Hold Yellow Trinity Right Blue Chest"),
|
|
lambda state: state.has("Yellow Trinity", player))
|
|
add_rule(kh1world.get_location("Neverland Hold Yellow Trinity Left Blue Chest"),
|
|
lambda state: state.has("Yellow Trinity", player))
|
|
add_rule(kh1world.get_location("Neverland Cabin Chest"),
|
|
lambda state: state.has("Green Trinity", player))
|
|
add_rule(kh1world.get_location("Neverland Hold Flight 1st Chest"),
|
|
lambda state: (
|
|
state.has("Green Trinity", player)
|
|
or state.has("Progressive Glide", player)
|
|
or state.has("High Jump", player, 3)
|
|
))
|
|
add_rule(kh1world.get_location("Neverland Clock Tower Chest"),
|
|
lambda state: (
|
|
state.has("Green Trinity", player)
|
|
and has_all_magic_lvx(state, player, 2)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(kh1world.get_location("Neverland Hold Flight 2nd Chest"),
|
|
lambda state: (
|
|
state.has("Green Trinity", player)
|
|
or state.has("Progressive Glide", player)
|
|
or state.has("High Jump", player, 3)
|
|
))
|
|
add_rule(kh1world.get_location("Neverland Hold Yellow Trinity Green Chest"),
|
|
lambda state: state.has("Yellow Trinity", player))
|
|
add_rule(kh1world.get_location("Neverland Captain's Cabin Chest"),
|
|
lambda state: state.has("Green Trinity", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion Rising Falls Under Water 2nd Chest"),
|
|
lambda state: has_emblems(state, player, options.keyblades_unlock_chests))
|
|
add_rule(kh1world.get_location("Hollow Bastion Rising Falls Floating Platform Near Save Chest"),
|
|
lambda state: (
|
|
state.has("High Jump", player)
|
|
or state.has("Progressive Glide", player)
|
|
or state.has("Progressive Blizzard", player)
|
|
))
|
|
add_rule(kh1world.get_location("Hollow Bastion Rising Falls Floating Platform Near Bubble Chest"),
|
|
lambda state: (
|
|
state.has("High Jump", player)
|
|
or state.has("Progressive Glide", player)
|
|
or state.has("Progressive Blizzard", player)
|
|
))
|
|
add_rule(kh1world.get_location("Hollow Bastion Rising Falls High Platform Chest"),
|
|
lambda state: (
|
|
state.has("Progressive Glide", player)
|
|
or (state.has("Progressive Blizzard", player) and has_emblems(state, player, options.keyblades_unlock_chests))
|
|
or (options.advanced_logic and state.has("Combo Master", player))
|
|
))
|
|
add_rule(kh1world.get_location("Hollow Bastion Castle Gates Gravity Chest"),
|
|
lambda state: (
|
|
state.has("Progressive Gravity", player)
|
|
and
|
|
(
|
|
has_emblems(state, player, options.keyblades_unlock_chests)
|
|
or (options.advanced_logic and state.has("High Jump", player, 2) and state.has("Progressive Glide", player))
|
|
or (options.advanced_logic and can_dumbo_skip(state, player) and state.has("Progressive Glide", player))
|
|
)
|
|
))
|
|
add_rule(kh1world.get_location("Hollow Bastion Castle Gates Freestanding Pillar Chest"),
|
|
lambda state: (
|
|
has_emblems(state, player, options.keyblades_unlock_chests)
|
|
or state.has("High Jump", player, 2)
|
|
or (options.advanced_logic and can_dumbo_skip(state, player))
|
|
))
|
|
add_rule(kh1world.get_location("Hollow Bastion Castle Gates High Pillar Chest"),
|
|
lambda state: (
|
|
has_emblems(state, player, options.keyblades_unlock_chests)
|
|
or state.has("High Jump", player, 2)
|
|
or (options.advanced_logic and can_dumbo_skip(state, player))
|
|
))
|
|
add_rule(kh1world.get_location("Hollow Bastion Great Crest Lower Chest"),
|
|
lambda state: has_emblems(state, player, options.keyblades_unlock_chests))
|
|
add_rule(kh1world.get_location("Hollow Bastion Great Crest After Battle Platform Chest"),
|
|
lambda state: has_emblems(state, player, options.keyblades_unlock_chests))
|
|
add_rule(kh1world.get_location("Hollow Bastion High Tower 2nd Gravity Chest"),
|
|
lambda state: (
|
|
state.has("Progressive Gravity", player)
|
|
and has_emblems(state, player, options.keyblades_unlock_chests)
|
|
))
|
|
add_rule(kh1world.get_location("Hollow Bastion High Tower 1st Gravity Chest"),
|
|
lambda state: (
|
|
state.has("Progressive Gravity", player)
|
|
and has_emblems(state, player, options.keyblades_unlock_chests)
|
|
))
|
|
add_rule(kh1world.get_location("Hollow Bastion High Tower Above Sliding Blocks Chest"),
|
|
lambda state: has_emblems(state, player, options.keyblades_unlock_chests))
|
|
add_rule(kh1world.get_location("Hollow Bastion Lift Stop Library Node After High Tower Switch Gravity Chest"),
|
|
lambda state: (
|
|
state.has("Progressive Gravity", player)
|
|
and has_emblems(state, player, options.keyblades_unlock_chests)
|
|
))
|
|
add_rule(kh1world.get_location("Hollow Bastion Lift Stop Library Node Gravity Chest"),
|
|
lambda state: state.has("Progressive Gravity", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion Lift Stop Under High Tower Sliding Blocks Chest"),
|
|
lambda state: (
|
|
has_emblems(state, player, options.keyblades_unlock_chests)
|
|
and state.has_all({
|
|
"Progressive Glide",
|
|
"Progressive Gravity"}, player)
|
|
))
|
|
add_rule(kh1world.get_location("Hollow Bastion Lift Stop Outside Library Gravity Chest"),
|
|
lambda state: state.has("Progressive Gravity", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion Lift Stop Heartless Sigil Door Gravity Chest"),
|
|
lambda state: (
|
|
state.has("Progressive Gravity", player)
|
|
and has_emblems(state, player, options.keyblades_unlock_chests)
|
|
))
|
|
add_rule(kh1world.get_location("Hollow Bastion Waterway Blizzard on Bubble Chest"),
|
|
lambda state: (
|
|
(state.has("Progressive Blizzard", player) and state.has("High Jump", player))
|
|
or state.has("High Jump", player, 3)
|
|
))
|
|
add_rule(kh1world.get_location("Hollow Bastion Grand Hall Steps Right Side Chest"),
|
|
lambda state: has_emblems(state, player, options.keyblades_unlock_chests))
|
|
add_rule(kh1world.get_location("Hollow Bastion Grand Hall Oblivion Chest"),
|
|
lambda state: has_emblems(state, player, options.keyblades_unlock_chests))
|
|
add_rule(kh1world.get_location("Hollow Bastion Grand Hall Left of Gate Chest"),
|
|
lambda state: has_emblems(state, player, options.keyblades_unlock_chests))
|
|
add_rule(kh1world.get_location("Hollow Bastion Entrance Hall Left of Emblem Door Chest"),
|
|
lambda state: (
|
|
state.has("High Jump", player)
|
|
or
|
|
(
|
|
options.advanced_logic
|
|
and can_dumbo_skip(state, player)
|
|
and has_emblems(state, player, options.keyblades_unlock_chests)
|
|
)
|
|
))
|
|
add_rule(kh1world.get_location("Hollow Bastion Rising Falls White Trinity Chest"),
|
|
lambda state: state.has("White Trinity", player))
|
|
add_rule(kh1world.get_location("End of the World Giant Crevasse 5th Chest"),
|
|
lambda state: (
|
|
state.has("Progressive Glide", player)
|
|
))
|
|
add_rule(kh1world.get_location("End of the World Giant Crevasse 1st Chest"),
|
|
lambda state: (
|
|
state.has("High Jump", player)
|
|
or state.has("Progressive Glide", player)
|
|
))
|
|
add_rule(kh1world.get_location("End of the World Giant Crevasse 4th Chest"),
|
|
lambda state: (
|
|
(
|
|
options.advanced_logic
|
|
and state.has("High Jump", player)
|
|
and state.has("Combo Master", player)
|
|
)
|
|
or state.has("Progressive Glide", player)
|
|
))
|
|
add_rule(kh1world.get_location("End of the World World Terminus Agrabah Chest"),
|
|
lambda state: (
|
|
state.has("High Jump", player)
|
|
or
|
|
(
|
|
options.advanced_logic
|
|
and can_dumbo_skip(state, player)
|
|
and state.has("Progressive Glide", player)
|
|
)
|
|
))
|
|
add_rule(kh1world.get_location("Monstro Chamber 6 White Trinity Chest"),
|
|
lambda state: state.has("White Trinity", player))
|
|
add_rule(kh1world.get_location("Traverse Town Kairi Secret Waterway Oathkeeper Event"),
|
|
lambda state: (
|
|
has_emblems(state, player, options.keyblades_unlock_chests)
|
|
and state.has("Hollow Bastion", player)
|
|
and has_x_worlds(state, player, 5, options.keyblades_unlock_chests)
|
|
))
|
|
add_rule(kh1world.get_location("Deep Jungle Defeat Sabor White Fang Event"),
|
|
lambda state: state.has("Slides", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Defeat Clayton Cure Event"),
|
|
lambda state: state.has("Slides", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Seal Keyhole Jungle King Event"),
|
|
lambda state: state.has("Slides", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Seal Keyhole Red Trinity Event"),
|
|
lambda state: state.has("Slides", player))
|
|
add_rule(kh1world.get_location("Olympus Coliseum Defeat Cerberus Inferno Band Event"),
|
|
lambda state: state.has("Entry Pass", player))
|
|
add_rule(kh1world.get_location("Olympus Coliseum Cloud Sonic Blade Event"),
|
|
lambda state: state.has("Entry Pass", player))
|
|
add_rule(kh1world.get_location("Wonderland Defeat Trickmaster Blizzard Event"),
|
|
lambda state: state.has("Footprints", player))
|
|
add_rule(kh1world.get_location("Wonderland Defeat Trickmaster Ifrit's Horn Event"),
|
|
lambda state: state.has("Footprints", player))
|
|
add_rule(kh1world.get_location("Monstro Defeat Parasite Cage II Stop Event"),
|
|
lambda state: (
|
|
state.has("High Jump", player)
|
|
or
|
|
(
|
|
options.advanced_logic
|
|
and state.has("Progressive Glide", player)
|
|
)
|
|
))
|
|
add_rule(kh1world.get_location("Halloween Town Defeat Oogie Boogie Holy Circlet Event"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Jack-In-The-Box",
|
|
"Forget-Me-Not"}, player)
|
|
and has_oogie_manor(state, player, options.advanced_logic)
|
|
))
|
|
add_rule(kh1world.get_location("Halloween Town Defeat Oogie's Manor Gravity Event"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Jack-In-The-Box",
|
|
"Forget-Me-Not"}, player)
|
|
and has_oogie_manor(state, player, options.advanced_logic)
|
|
))
|
|
add_rule(kh1world.get_location("Halloween Town Seal Keyhole Pumpkinhead Event"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Jack-In-The-Box",
|
|
"Forget-Me-Not"}, player)
|
|
and has_oogie_manor(state, player, options.advanced_logic)
|
|
))
|
|
add_rule(kh1world.get_location("Neverland Defeat Anti Sora Raven's Claw Event"),
|
|
lambda state: state.has("Green Trinity", player))
|
|
add_rule(kh1world.get_location("Neverland Encounter Hook Cure Event"),
|
|
lambda state: state.has("Green Trinity", player))
|
|
add_rule(kh1world.get_location("Neverland Seal Keyhole Fairy Harp Event"),
|
|
lambda state: state.has("Green Trinity", player))
|
|
add_rule(kh1world.get_location("Neverland Seal Keyhole Tinker Bell Event"),
|
|
lambda state: state.has("Green Trinity", player))
|
|
add_rule(kh1world.get_location("Neverland Seal Keyhole Glide Event"),
|
|
lambda state: state.has("Green Trinity", player))
|
|
add_rule(kh1world.get_location("Neverland Defeat Captain Hook Ars Arcanum Event"),
|
|
lambda state: state.has("Green Trinity", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion Defeat Maleficent Donald Cheer Event"),
|
|
lambda state: has_emblems(state, player, options.keyblades_unlock_chests))
|
|
add_rule(kh1world.get_location("Hollow Bastion Defeat Dragon Maleficent Fireglow Event"),
|
|
lambda state: has_emblems(state, player, options.keyblades_unlock_chests))
|
|
add_rule(kh1world.get_location("Hollow Bastion Defeat Riku II Ragnarok Event"),
|
|
lambda state: has_emblems(state, player, options.keyblades_unlock_chests))
|
|
add_rule(kh1world.get_location("Hollow Bastion Defeat Behemoth Omega Arts Event"),
|
|
lambda state: has_emblems(state, player, options.keyblades_unlock_chests))
|
|
add_rule(kh1world.get_location("Hollow Bastion Speak to Princesses Fire Event"),
|
|
lambda state: has_emblems(state, player, options.keyblades_unlock_chests))
|
|
add_rule(kh1world.get_location("Traverse Town Mail Postcard 01 Event"),
|
|
lambda state: state.has("Postcard", player))
|
|
add_rule(kh1world.get_location("Traverse Town Mail Postcard 02 Event"),
|
|
lambda state: state.has("Postcard", player, 2))
|
|
add_rule(kh1world.get_location("Traverse Town Mail Postcard 03 Event"),
|
|
lambda state: state.has("Postcard", player, 3))
|
|
add_rule(kh1world.get_location("Traverse Town Mail Postcard 04 Event"),
|
|
lambda state: state.has("Postcard", player, 4))
|
|
add_rule(kh1world.get_location("Traverse Town Mail Postcard 05 Event"),
|
|
lambda state: state.has("Postcard", player, 5))
|
|
add_rule(kh1world.get_location("Traverse Town Mail Postcard 06 Event"),
|
|
lambda state: state.has("Postcard", player, 6))
|
|
add_rule(kh1world.get_location("Traverse Town Mail Postcard 07 Event"),
|
|
lambda state: state.has("Postcard", player, 7))
|
|
add_rule(kh1world.get_location("Traverse Town Mail Postcard 08 Event"),
|
|
lambda state: state.has("Postcard", player, 8))
|
|
add_rule(kh1world.get_location("Traverse Town Mail Postcard 09 Event"),
|
|
lambda state: state.has("Postcard", player, 9))
|
|
add_rule(kh1world.get_location("Traverse Town Mail Postcard 10 Event"),
|
|
lambda state: state.has("Postcard", player, 10))
|
|
add_rule(kh1world.get_location("Traverse Town Defeat Opposite Armor Aero Event"),
|
|
lambda state: state.has("Red Trinity", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion Speak with Aerith Ansem's Report 2"),
|
|
lambda state: has_emblems(state, player, options.keyblades_unlock_chests))
|
|
add_rule(kh1world.get_location("Hollow Bastion Speak with Aerith Ansem's Report 4"),
|
|
lambda state: has_emblems(state, player, options.keyblades_unlock_chests))
|
|
add_rule(kh1world.get_location("Hollow Bastion Defeat Maleficent Ansem's Report 5"),
|
|
lambda state: has_emblems(state, player, options.keyblades_unlock_chests))
|
|
add_rule(kh1world.get_location("Hollow Bastion Speak with Aerith Ansem's Report 6"),
|
|
lambda state: has_emblems(state, player, options.keyblades_unlock_chests))
|
|
add_rule(kh1world.get_location("Halloween Town Defeat Oogie Boogie Ansem's Report 7"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Jack-In-The-Box",
|
|
"Forget-Me-Not",
|
|
"Progressive Fire"}, player)
|
|
))
|
|
add_rule(kh1world.get_location("Neverland Defeat Hook Ansem's Report 9"),
|
|
lambda state: state.has("Green Trinity", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion Speak with Aerith Ansem's Report 10"),
|
|
lambda state: has_emblems(state, player, options.keyblades_unlock_chests))
|
|
add_rule(kh1world.get_location("Traverse Town Geppetto's House Geppetto Reward 1"),
|
|
lambda state: (
|
|
state.has("Monstro", player)
|
|
and
|
|
(
|
|
state.has("High Jump", player)
|
|
or (options.advanced_logic and state.has("Progressive Glide", player))
|
|
)
|
|
and has_x_worlds(state, player, 2, options.keyblades_unlock_chests)
|
|
))
|
|
add_rule(kh1world.get_location("Traverse Town Geppetto's House Geppetto Reward 2"),
|
|
lambda state: (
|
|
state.has("Monstro", player)
|
|
and
|
|
(
|
|
state.has("High Jump", player)
|
|
or (options.advanced_logic and state.has("Progressive Glide", player))
|
|
)
|
|
and has_x_worlds(state, player, 2, options.keyblades_unlock_chests)
|
|
))
|
|
add_rule(kh1world.get_location("Traverse Town Geppetto's House Geppetto Reward 3"),
|
|
lambda state: (
|
|
state.has("Monstro", player)
|
|
and
|
|
(
|
|
state.has("High Jump", player)
|
|
or (options.advanced_logic and state.has("Progressive Glide", player))
|
|
)
|
|
and has_x_worlds(state, player, 2, options.keyblades_unlock_chests)
|
|
))
|
|
add_rule(kh1world.get_location("Traverse Town Geppetto's House Geppetto Reward 4"),
|
|
lambda state: (
|
|
state.has("Monstro", player)
|
|
and
|
|
(
|
|
state.has("High Jump", player)
|
|
or (options.advanced_logic and state.has("Progressive Glide", player))
|
|
)
|
|
and has_x_worlds(state, player, 2, options.keyblades_unlock_chests)
|
|
))
|
|
add_rule(kh1world.get_location("Traverse Town Geppetto's House Geppetto Reward 5"),
|
|
lambda state: (
|
|
state.has("Monstro", player)
|
|
and
|
|
(
|
|
state.has("High Jump", player)
|
|
or (options.advanced_logic and state.has("Progressive Glide", player))
|
|
)
|
|
and has_x_worlds(state, player, 2, options.keyblades_unlock_chests)
|
|
))
|
|
add_rule(kh1world.get_location("Traverse Town Geppetto's House Geppetto All Summons Reward"),
|
|
lambda state: (
|
|
state.has("Monstro", player)
|
|
and
|
|
(
|
|
state.has("High Jump", player)
|
|
or (options.advanced_logic and state.has("Progressive Glide", player))
|
|
)
|
|
and has_all_summons(state, player)
|
|
and has_x_worlds(state, player, 2, options.keyblades_unlock_chests)
|
|
))
|
|
add_rule(kh1world.get_location("Traverse Town Geppetto's House Talk to Pinocchio"),
|
|
lambda state: (
|
|
state.has("Monstro", player)
|
|
and
|
|
(
|
|
state.has("High Jump", player)
|
|
or (options.advanced_logic and state.has("Progressive Glide", player))
|
|
)
|
|
and has_x_worlds(state, player, 2, options.keyblades_unlock_chests)
|
|
))
|
|
add_rule(kh1world.get_location("Traverse Town Magician's Study Obtained All Arts Items"),
|
|
lambda state: (
|
|
has_all_magic_lvx(state, player, 1)
|
|
and has_all_arts(state, player)
|
|
and has_x_worlds(state, player, 7, options.keyblades_unlock_chests)
|
|
))
|
|
add_rule(kh1world.get_location("Traverse Town Magician's Study Obtained All LV1 Magic"),
|
|
lambda state: has_all_magic_lvx(state, player, 1))
|
|
add_rule(kh1world.get_location("Traverse Town Magician's Study Obtained All LV3 Magic"),
|
|
lambda state: has_all_magic_lvx(state, player, 3))
|
|
add_rule(kh1world.get_location("Traverse Town Piano Room Return 10 Puppies"),
|
|
lambda state: has_puppies(state, player, 10))
|
|
add_rule(kh1world.get_location("Traverse Town Piano Room Return 20 Puppies"),
|
|
lambda state: has_puppies(state, player, 20))
|
|
add_rule(kh1world.get_location("Traverse Town Piano Room Return 30 Puppies"),
|
|
lambda state: has_puppies(state, player, 30))
|
|
add_rule(kh1world.get_location("Traverse Town Piano Room Return 40 Puppies"),
|
|
lambda state: has_puppies(state, player, 40))
|
|
add_rule(kh1world.get_location("Traverse Town Piano Room Return 50 Puppies Reward 1"),
|
|
lambda state: has_puppies(state, player, 50))
|
|
add_rule(kh1world.get_location("Traverse Town Piano Room Return 50 Puppies Reward 2"),
|
|
lambda state: has_puppies(state, player, 50))
|
|
add_rule(kh1world.get_location("Traverse Town Piano Room Return 60 Puppies"),
|
|
lambda state: has_puppies(state, player, 60))
|
|
add_rule(kh1world.get_location("Traverse Town Piano Room Return 70 Puppies"),
|
|
lambda state: has_puppies(state, player, 70))
|
|
add_rule(kh1world.get_location("Traverse Town Piano Room Return 80 Puppies"),
|
|
lambda state: has_puppies(state, player, 80))
|
|
add_rule(kh1world.get_location("Traverse Town Piano Room Return 90 Puppies"),
|
|
lambda state: has_puppies(state, player, 90))
|
|
add_rule(kh1world.get_location("Traverse Town Piano Room Return 99 Puppies Reward 1"),
|
|
lambda state: has_puppies(state, player, 99))
|
|
add_rule(kh1world.get_location("Traverse Town Piano Room Return 99 Puppies Reward 2"),
|
|
lambda state: has_puppies(state, player, 99))
|
|
add_rule(kh1world.get_location("Neverland Hold Aero Chest"),
|
|
lambda state: state.has("Yellow Trinity", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Camp Hi-Potion Experiment"),
|
|
lambda state: state.has("Progressive Fire", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Camp Ether Experiment"),
|
|
lambda state: state.has("Progressive Blizzard", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Camp Replication Experiment"),
|
|
lambda state: state.has("Progressive Blizzard", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Cliff Save Gorillas"),
|
|
lambda state: state.has("Slides", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Tree House Save Gorillas"),
|
|
lambda state: state.has("Slides", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Camp Save Gorillas"),
|
|
lambda state: state.has("Slides", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Bamboo Thicket Save Gorillas"),
|
|
lambda state: state.has("Slides", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Climbing Trees Save Gorillas"),
|
|
lambda state: state.has("Slides", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Jungle Slider 10 Fruits"),
|
|
lambda state: state.has("Slides", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Jungle Slider 20 Fruits"),
|
|
lambda state: state.has("Slides", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Jungle Slider 30 Fruits"),
|
|
lambda state: state.has("Slides", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Jungle Slider 40 Fruits"),
|
|
lambda state: state.has("Slides", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Jungle Slider 50 Fruits"),
|
|
lambda state: state.has("Slides", player))
|
|
add_rule(kh1world.get_location("Wonderland Bizarre Room Read Book"),
|
|
lambda state: state.has("Footprints", player))
|
|
add_rule(kh1world.get_location("Olympus Coliseum Coliseum Gates Green Trinity"),
|
|
lambda state: state.has("Green Trinity", player))
|
|
add_rule(kh1world.get_location("Olympus Coliseum Coliseum Gates Hero's License Event"),
|
|
lambda state: state.has("Entry Pass", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Cavern of Hearts Navi-G Piece Event"),
|
|
lambda state: state.has("Slides", player))
|
|
add_rule(kh1world.get_location("Wonderland Bizarre Room Navi-G Piece Event"),
|
|
lambda state: state.has("Footprints", player))
|
|
add_rule(kh1world.get_location("Traverse Town Synth Log"),
|
|
lambda state: (
|
|
state.has("Empty Bottle", player, 6)
|
|
and
|
|
(
|
|
state.has("Green Trinity", player)
|
|
or state.has("High Jump", player, 3)
|
|
)
|
|
))
|
|
add_rule(kh1world.get_location("Traverse Town Synth Cloth"),
|
|
lambda state: (
|
|
state.has("Empty Bottle", player, 6)
|
|
and
|
|
(
|
|
state.has("Green Trinity", player)
|
|
or state.has("High Jump", player, 3)
|
|
)
|
|
))
|
|
add_rule(kh1world.get_location("Traverse Town Synth Rope"),
|
|
lambda state: (
|
|
state.has("Empty Bottle", player, 6)
|
|
and
|
|
(
|
|
state.has("Green Trinity", player)
|
|
or state.has("High Jump", player, 3)
|
|
)
|
|
))
|
|
add_rule(kh1world.get_location("Traverse Town Synth Seagull Egg"),
|
|
lambda state: (
|
|
state.has("Empty Bottle", player, 6)
|
|
and
|
|
(
|
|
state.has("Green Trinity", player)
|
|
or state.has("High Jump", player, 3)
|
|
)
|
|
))
|
|
add_rule(kh1world.get_location("Traverse Town Synth Fish"),
|
|
lambda state: (
|
|
state.has("Empty Bottle", player, 6)
|
|
and
|
|
(
|
|
state.has("Green Trinity", player)
|
|
or state.has("High Jump", player, 3)
|
|
)
|
|
))
|
|
add_rule(kh1world.get_location("Traverse Town Synth Mushroom"),
|
|
lambda state: (
|
|
state.has("Empty Bottle", player, 6)
|
|
and
|
|
(
|
|
state.has("Green Trinity", player)
|
|
or state.has("High Jump", player, 3)
|
|
)
|
|
))
|
|
add_rule(kh1world.get_location("Traverse Town Gizmo Shop Postcard 1"),
|
|
lambda state: state.has("Progressive Thunder", player))
|
|
add_rule(kh1world.get_location("Traverse Town Gizmo Shop Postcard 2"),
|
|
lambda state: state.has("Progressive Thunder", player))
|
|
add_rule(kh1world.get_location("Traverse Town Item Workshop Postcard"),
|
|
lambda state: (
|
|
state.has("Green Trinity", player)
|
|
or state.has("High Jump", player, 3)
|
|
))
|
|
add_rule(kh1world.get_location("Traverse Town Geppetto's House Postcard"),
|
|
lambda state: (
|
|
state.has("Monstro", player)
|
|
and
|
|
(
|
|
state.has("High Jump", player)
|
|
or (options.advanced_logic and state.has("Progressive Glide", player))
|
|
)
|
|
and has_x_worlds(state, player, 2, options.keyblades_unlock_chests)
|
|
))
|
|
add_rule(kh1world.get_location("Hollow Bastion Entrance Hall Emblem Piece (Flame)"),
|
|
lambda state: (
|
|
(
|
|
state.has("Theon Vol. 6", player)
|
|
or state.has("High Jump", player, 3)
|
|
or has_emblems(state, player, options.keyblades_unlock_chests)
|
|
)
|
|
and state.has("Progressive Fire", player)
|
|
and
|
|
(
|
|
state.has("High Jump", player)
|
|
or state.has("Progressive Glide", player)
|
|
or state.has("Progressive Thunder", player)
|
|
or options.advanced_logic
|
|
)
|
|
))
|
|
add_rule(kh1world.get_location("Hollow Bastion Entrance Hall Emblem Piece (Chest)"),
|
|
lambda state: (
|
|
state.has("Theon Vol. 6", player)
|
|
or state.has("High Jump", player, 3)
|
|
or has_emblems(state, player, options.keyblades_unlock_chests)
|
|
))
|
|
add_rule(kh1world.get_location("Hollow Bastion Entrance Hall Emblem Piece (Statue)"),
|
|
lambda state: (
|
|
(
|
|
state.has("Theon Vol. 6", player)
|
|
or state.has("High Jump", player, 3)
|
|
or has_emblems(state, player, options.keyblades_unlock_chests)
|
|
)
|
|
and state.has("Red Trinity", player)
|
|
))
|
|
add_rule(kh1world.get_location("Hollow Bastion Entrance Hall Emblem Piece (Fountain)"),
|
|
lambda state: (
|
|
state.has("Theon Vol. 6", player)
|
|
or state.has("High Jump", player, 3)
|
|
or has_emblems(state, player, options.keyblades_unlock_chests)
|
|
))
|
|
add_rule(kh1world.get_location("Hollow Bastion Library Speak to Belle Divine Rose"),
|
|
lambda state: has_emblems(state, player, options.keyblades_unlock_chests))
|
|
add_rule(kh1world.get_location("Hollow Bastion Library Speak to Aerith Cure"),
|
|
lambda state: has_emblems(state, player, options.keyblades_unlock_chests))
|
|
if options.hundred_acre_wood:
|
|
add_rule(kh1world.get_location("100 Acre Wood Bouncing Spot Left Cliff Chest"),
|
|
lambda state: (
|
|
has_torn_pages(state, player, 4)
|
|
and
|
|
(
|
|
state.has("High Jump", player)
|
|
or state.has("Progressive Glide", player)
|
|
)
|
|
))
|
|
add_rule(kh1world.get_location("100 Acre Wood Bouncing Spot Right Tree Alcove Chest"),
|
|
lambda state: (
|
|
has_torn_pages(state, player, 4)
|
|
and
|
|
(
|
|
state.has("High Jump", player)
|
|
or state.has("Progressive Glide", player)
|
|
)
|
|
))
|
|
add_rule(kh1world.get_location("100 Acre Wood Bouncing Spot Under Giant Pot Chest"),
|
|
lambda state: has_torn_pages(state, player, 4))
|
|
add_rule(kh1world.get_location("100 Acre Wood Bouncing Spot Turn in Rare Nut 1"),
|
|
lambda state: has_torn_pages(state, player, 4))
|
|
add_rule(kh1world.get_location("100 Acre Wood Bouncing Spot Turn in Rare Nut 2"),
|
|
lambda state: (
|
|
has_torn_pages(state, player, 4)
|
|
and
|
|
(
|
|
state.has("High Jump", player)
|
|
or state.has("Progressive Glide", player)
|
|
)
|
|
))
|
|
add_rule(kh1world.get_location("100 Acre Wood Bouncing Spot Turn in Rare Nut 3"),
|
|
lambda state: (
|
|
has_torn_pages(state, player, 4)
|
|
and
|
|
(
|
|
state.has("High Jump", player)
|
|
or state.has("Progressive Glide", player)
|
|
)
|
|
))
|
|
add_rule(kh1world.get_location("100 Acre Wood Bouncing Spot Turn in Rare Nut 4"),
|
|
lambda state: (
|
|
has_torn_pages(state, player, 4)
|
|
and
|
|
(
|
|
state.has("High Jump", player)
|
|
or state.has("Progressive Glide", player)
|
|
)
|
|
))
|
|
add_rule(kh1world.get_location("100 Acre Wood Bouncing Spot Turn in Rare Nut 5"),
|
|
lambda state: (
|
|
has_torn_pages(state, player, 4)
|
|
and
|
|
(
|
|
state.has("High Jump", player)
|
|
or state.has("Progressive Glide", player)
|
|
)
|
|
))
|
|
add_rule(kh1world.get_location("100 Acre Wood Pooh's House Owl Cheer"),
|
|
lambda state: has_torn_pages(state, player, 5))
|
|
add_rule(kh1world.get_location("100 Acre Wood Convert Torn Page 1"),
|
|
lambda state: has_torn_pages(state, player, 1))
|
|
add_rule(kh1world.get_location("100 Acre Wood Convert Torn Page 2"),
|
|
lambda state: has_torn_pages(state, player, 2))
|
|
add_rule(kh1world.get_location("100 Acre Wood Convert Torn Page 3"),
|
|
lambda state: has_torn_pages(state, player, 3))
|
|
add_rule(kh1world.get_location("100 Acre Wood Convert Torn Page 4"),
|
|
lambda state: has_torn_pages(state, player, 4))
|
|
add_rule(kh1world.get_location("100 Acre Wood Convert Torn Page 5"),
|
|
lambda state: has_torn_pages(state, player, 5))
|
|
add_rule(kh1world.get_location("100 Acre Wood Pooh's House Start Fire"),
|
|
lambda state: has_torn_pages(state, player, 3))
|
|
add_rule(kh1world.get_location("100 Acre Wood Bouncing Spot Break Log"),
|
|
lambda state: has_torn_pages(state, player, 4))
|
|
add_rule(kh1world.get_location("100 Acre Wood Bouncing Spot Fall Through Top of Tree Next to Pooh"),
|
|
lambda state: (
|
|
has_torn_pages(state, player, 4)
|
|
and
|
|
(
|
|
state.has("High Jump", player)
|
|
or state.has("Progressive Glide", player)
|
|
)
|
|
))
|
|
if options.atlantica:
|
|
add_rule(kh1world.get_location("Atlantica Ursula's Lair Use Fire on Urchin Chest"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Progressive Fire",
|
|
"Crystal Trident"}, player)
|
|
))
|
|
add_rule(kh1world.get_location("Atlantica Triton's Palace White Trinity Chest"),
|
|
lambda state: state.has("White Trinity", player))
|
|
add_rule(kh1world.get_location("Atlantica Defeat Ursula I Mermaid Kick Event"),
|
|
lambda state: (
|
|
has_offensive_magic(state, player)
|
|
and state.has("Crystal Trident", player)
|
|
))
|
|
add_rule(kh1world.get_location("Atlantica Defeat Ursula II Thunder Event"),
|
|
lambda state: (
|
|
state.has("Mermaid Kick", player)
|
|
and has_offensive_magic(state, player)
|
|
and state.has("Crystal Trident", player)
|
|
))
|
|
add_rule(kh1world.get_location("Atlantica Seal Keyhole Crabclaw Event"),
|
|
lambda state: (
|
|
state.has("Mermaid Kick", player)
|
|
and has_offensive_magic(state, player)
|
|
and state.has("Crystal Trident", player)
|
|
))
|
|
add_rule(kh1world.get_location("Atlantica Undersea Gorge Blizzard Clam"),
|
|
lambda state: state.has("Progressive Blizzard", player))
|
|
add_rule(kh1world.get_location("Atlantica Undersea Valley Fire Clam"),
|
|
lambda state: state.has("Progressive Fire", player))
|
|
add_rule(kh1world.get_location("Atlantica Triton's Palace Thunder Clam"),
|
|
lambda state: state.has("Progressive Thunder", player))
|
|
add_rule(kh1world.get_location("Atlantica Cavern Nook Clam"),
|
|
lambda state: state.has("Crystal Trident", player))
|
|
add_rule(kh1world.get_location("Atlantica Defeat Ursula II Ansem's Report 3"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Mermaid Kick",
|
|
"Crystal Trident"}, player)
|
|
and has_offensive_magic(state, player)
|
|
))
|
|
if options.cups:
|
|
add_rule(kh1world.get_location("Olympus Coliseum Defeat Hades Ansem's Report 8"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Phil Cup",
|
|
"Pegasus Cup",
|
|
"Hercules Cup",
|
|
"Entry Pass"}, player)
|
|
and has_x_worlds(state, player, 7, options.keyblades_unlock_chests)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(kh1world.get_location("Complete Phil Cup"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Phil Cup",
|
|
"Entry Pass"}, player)
|
|
))
|
|
add_rule(kh1world.get_location("Complete Phil Cup Solo"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Phil Cup",
|
|
"Entry Pass"}, player)
|
|
))
|
|
add_rule(kh1world.get_location("Complete Phil Cup Time Trial"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Phil Cup",
|
|
"Entry Pass"}, player)
|
|
))
|
|
add_rule(kh1world.get_location("Complete Pegasus Cup"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Pegasus Cup",
|
|
"Entry Pass"}, player)
|
|
))
|
|
add_rule(kh1world.get_location("Complete Pegasus Cup Solo"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Pegasus Cup",
|
|
"Entry Pass"}, player)
|
|
))
|
|
add_rule(kh1world.get_location("Complete Pegasus Cup Time Trial"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Pegasus Cup",
|
|
"Entry Pass"}, player)
|
|
))
|
|
add_rule(kh1world.get_location("Complete Hercules Cup"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Hercules Cup",
|
|
"Entry Pass"}, player)
|
|
and has_x_worlds(state, player, 4, options.keyblades_unlock_chests)
|
|
))
|
|
add_rule(kh1world.get_location("Complete Hercules Cup Solo"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Hercules Cup",
|
|
"Entry Pass"}, player)
|
|
and has_x_worlds(state, player, 4, options.keyblades_unlock_chests)
|
|
))
|
|
add_rule(kh1world.get_location("Complete Hercules Cup Time Trial"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Hercules Cup",
|
|
"Entry Pass"}, player)
|
|
and has_x_worlds(state, player, 4, options.keyblades_unlock_chests)
|
|
))
|
|
add_rule(kh1world.get_location("Complete Hades Cup"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Phil Cup",
|
|
"Pegasus Cup",
|
|
"Hercules Cup",
|
|
"Entry Pass"}, player)
|
|
and has_x_worlds(state, player, 7, options.keyblades_unlock_chests)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(kh1world.get_location("Complete Hades Cup Solo"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Phil Cup",
|
|
"Pegasus Cup",
|
|
"Hercules Cup",
|
|
"Entry Pass"}, player)
|
|
and has_x_worlds(state, player, 7, options.keyblades_unlock_chests)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(kh1world.get_location("Complete Hades Cup Time Trial"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Phil Cup",
|
|
"Pegasus Cup",
|
|
"Hercules Cup",
|
|
"Entry Pass"}, player)
|
|
and has_x_worlds(state, player, 7, options.keyblades_unlock_chests)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(kh1world.get_location("Hades Cup Defeat Cloud and Leon Event"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Phil Cup",
|
|
"Pegasus Cup",
|
|
"Hercules Cup",
|
|
"Entry Pass"}, player)
|
|
and has_x_worlds(state, player, 7, options.keyblades_unlock_chests)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(kh1world.get_location("Hades Cup Defeat Yuffie Event"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Phil Cup",
|
|
"Pegasus Cup",
|
|
"Hercules Cup",
|
|
"Entry Pass"}, player)
|
|
and has_x_worlds(state, player, 7, options.keyblades_unlock_chests)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(kh1world.get_location("Hades Cup Defeat Cerberus Event"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Phil Cup",
|
|
"Pegasus Cup",
|
|
"Hercules Cup",
|
|
"Entry Pass"}, player)
|
|
and has_x_worlds(state, player, 7, options.keyblades_unlock_chests)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(kh1world.get_location("Hades Cup Defeat Behemoth Event"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Phil Cup",
|
|
"Pegasus Cup",
|
|
"Hercules Cup",
|
|
"Entry Pass"}, player)
|
|
and has_x_worlds(state, player, 7, options.keyblades_unlock_chests)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(kh1world.get_location("Hades Cup Defeat Hades Event"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Phil Cup",
|
|
"Pegasus Cup",
|
|
"Hercules Cup",
|
|
"Entry Pass"}, player)
|
|
and has_x_worlds(state, player, 7, options.keyblades_unlock_chests)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(kh1world.get_location("Hercules Cup Defeat Cloud Event"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Hercules Cup",
|
|
"Entry Pass"}, player)
|
|
and has_x_worlds(state, player, 4, options.keyblades_unlock_chests)
|
|
))
|
|
add_rule(kh1world.get_location("Hercules Cup Yellow Trinity Event"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Hercules Cup",
|
|
"Entry Pass"}, player)
|
|
and has_x_worlds(state, player, 4, options.keyblades_unlock_chests)
|
|
))
|
|
add_rule(kh1world.get_location("Olympus Coliseum Defeat Ice Titan Diamond Dust Event"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Phil Cup",
|
|
"Pegasus Cup",
|
|
"Hercules Cup",
|
|
"Entry Pass",
|
|
"Guard"}, player)
|
|
and has_x_worlds(state, player, 7, options.keyblades_unlock_chests)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(kh1world.get_location("Olympus Coliseum Gates Purple Jar After Defeating Hades"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Phil Cup",
|
|
"Pegasus Cup",
|
|
"Hercules Cup",
|
|
"Entry Pass"}, player)
|
|
and has_x_worlds(state, player, 7, options.keyblades_unlock_chests)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(kh1world.get_location("Olympus Coliseum Olympia Chest"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Phil Cup",
|
|
"Pegasus Cup",
|
|
"Hercules Cup",
|
|
"Entry Pass"}, player)
|
|
and has_x_worlds(state, player, 4, options.keyblades_unlock_chests)
|
|
))
|
|
if options.super_bosses:
|
|
add_rule(kh1world.get_location("Neverland Defeat Phantom Stop Event"),
|
|
lambda state: (
|
|
state.has("Green Trinity", player)
|
|
and has_all_magic_lvx(state, player, 2)
|
|
and has_defensive_tools(state, player)
|
|
and has_emblems(state, player, options.keyblades_unlock_chests)
|
|
))
|
|
add_rule(kh1world.get_location("Agrabah Defeat Kurt Zisa Ansem's Report 11"),
|
|
lambda state: (
|
|
has_emblems(state, player, options.keyblades_unlock_chests)
|
|
and has_x_worlds(state, player, 7, options.keyblades_unlock_chests)
|
|
and has_defensive_tools(state, player)
|
|
and state.has("Progressive Blizzard", player, 3)
|
|
))
|
|
add_rule(kh1world.get_location("Agrabah Defeat Kurt Zisa Zantetsuken Event"),
|
|
lambda state: (
|
|
has_emblems(state, player, options.keyblades_unlock_chests) and has_x_worlds(state, player, 7, options.keyblades_unlock_chests) and has_defensive_tools(state, player) and state.has("Progressive Blizzard", player, 3)
|
|
))
|
|
if options.super_bosses or options.goal.current_key == "sephiroth":
|
|
add_rule(kh1world.get_location("Olympus Coliseum Defeat Sephiroth Ansem's Report 12"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Phil Cup",
|
|
"Pegasus Cup",
|
|
"Hercules Cup",
|
|
"Entry Pass"}, player)
|
|
and has_x_worlds(state, player, 7, options.keyblades_unlock_chests)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(kh1world.get_location("Olympus Coliseum Defeat Sephiroth One-Winged Angel Event"),
|
|
lambda state: (
|
|
state.has_all({
|
|
"Phil Cup",
|
|
"Pegasus Cup",
|
|
"Hercules Cup",
|
|
"Entry Pass"}, player)
|
|
and has_x_worlds(state, player, 7, options.keyblades_unlock_chests)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
if options.super_bosses or options.goal.current_key == "unknown":
|
|
add_rule(kh1world.get_location("Hollow Bastion Defeat Unknown Ansem's Report 13"),
|
|
lambda state: (
|
|
has_emblems(state, player, options.keyblades_unlock_chests)
|
|
and has_x_worlds(state, player, 7, options.keyblades_unlock_chests)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
add_rule(kh1world.get_location("Hollow Bastion Defeat Unknown EXP Necklace Event"),
|
|
lambda state: (
|
|
has_emblems(state, player, options.keyblades_unlock_chests) and has_x_worlds(state, player, 7, options.keyblades_unlock_chests)
|
|
and has_defensive_tools(state, player)
|
|
))
|
|
for i in range(options.level_checks):
|
|
add_rule(kh1world.get_location("Level " + str(i+1).rjust(3,'0')),
|
|
lambda state, level_num=i: (
|
|
has_x_worlds(state, player, min(((level_num//10)*2), 8), options.keyblades_unlock_chests)
|
|
))
|
|
if options.goal.current_key == "final_ansem":
|
|
add_rule(kh1world.get_location("Final Ansem"),
|
|
lambda state: (
|
|
has_final_rest_door(state, player, final_rest_door_requirement, final_rest_door_required_reports, options.keyblades_unlock_chests, options.puppies)
|
|
))
|
|
if options.keyblades_unlock_chests:
|
|
add_rule(kh1world.get_location("Traverse Town 1st District Candle Puzzle Chest"),
|
|
lambda state: state.has("Lionheart", player))
|
|
add_rule(kh1world.get_location("Traverse Town 1st District Accessory Shop Roof Chest"),
|
|
lambda state: state.has("Lionheart", player))
|
|
add_rule(kh1world.get_location("Traverse Town 2nd District Boots and Shoes Awning Chest"),
|
|
lambda state: state.has("Lionheart", player))
|
|
add_rule(kh1world.get_location("Traverse Town 2nd District Rooftop Chest"),
|
|
lambda state: state.has("Lionheart", player))
|
|
add_rule(kh1world.get_location("Traverse Town 2nd District Gizmo Shop Facade Chest"),
|
|
lambda state: state.has("Lionheart", player))
|
|
add_rule(kh1world.get_location("Traverse Town Alleyway Balcony Chest"),
|
|
lambda state: state.has("Lionheart", player))
|
|
add_rule(kh1world.get_location("Traverse Town Alleyway Blue Room Awning Chest"),
|
|
lambda state: state.has("Lionheart", player))
|
|
add_rule(kh1world.get_location("Traverse Town Alleyway Corner Chest"),
|
|
lambda state: state.has("Lionheart", player))
|
|
add_rule(kh1world.get_location("Traverse Town Green Room Clock Puzzle Chest"),
|
|
lambda state: state.has("Lionheart", player))
|
|
add_rule(kh1world.get_location("Traverse Town Green Room Table Chest"),
|
|
lambda state: state.has("Lionheart", player))
|
|
add_rule(kh1world.get_location("Traverse Town Red Room Chest"),
|
|
lambda state: state.has("Lionheart", player))
|
|
add_rule(kh1world.get_location("Traverse Town Mystical House Yellow Trinity Chest"),
|
|
lambda state: state.has("Lionheart", player))
|
|
add_rule(kh1world.get_location("Traverse Town Accessory Shop Chest"),
|
|
lambda state: state.has("Lionheart", player))
|
|
add_rule(kh1world.get_location("Traverse Town Secret Waterway White Trinity Chest"),
|
|
lambda state: state.has("Lionheart", player))
|
|
add_rule(kh1world.get_location("Traverse Town Geppetto's House Chest"),
|
|
lambda state: state.has("Lionheart", player))
|
|
add_rule(kh1world.get_location("Traverse Town Item Workshop Right Chest"),
|
|
lambda state: state.has("Lionheart", player))
|
|
add_rule(kh1world.get_location("Traverse Town 1st District Blue Trinity Balcony Chest"),
|
|
lambda state: state.has("Lionheart", player))
|
|
add_rule(kh1world.get_location("Traverse Town Mystical House Glide Chest"),
|
|
lambda state: state.has("Lionheart", player))
|
|
add_rule(kh1world.get_location("Traverse Town Alleyway Behind Crates Chest"),
|
|
lambda state: state.has("Lionheart", player))
|
|
add_rule(kh1world.get_location("Traverse Town Item Workshop Left Chest"),
|
|
lambda state: state.has("Lionheart", player))
|
|
add_rule(kh1world.get_location("Traverse Town Secret Waterway Near Stairs Chest"),
|
|
lambda state: state.has("Lionheart", player))
|
|
add_rule(kh1world.get_location("Wonderland Rabbit Hole Green Trinity Chest"),
|
|
lambda state: state.has("Lady Luck", player))
|
|
add_rule(kh1world.get_location("Wonderland Rabbit Hole Defeat Heartless 1 Chest"),
|
|
lambda state: state.has("Lady Luck", player))
|
|
add_rule(kh1world.get_location("Wonderland Rabbit Hole Defeat Heartless 2 Chest"),
|
|
lambda state: state.has("Lady Luck", player))
|
|
add_rule(kh1world.get_location("Wonderland Rabbit Hole Defeat Heartless 3 Chest"),
|
|
lambda state: state.has("Lady Luck", player))
|
|
add_rule(kh1world.get_location("Wonderland Bizarre Room Green Trinity Chest"),
|
|
lambda state: state.has("Lady Luck", player))
|
|
add_rule(kh1world.get_location("Wonderland Queen's Castle Hedge Left Red Chest"),
|
|
lambda state: state.has("Lady Luck", player))
|
|
add_rule(kh1world.get_location("Wonderland Queen's Castle Hedge Right Blue Chest"),
|
|
lambda state: state.has("Lady Luck", player))
|
|
add_rule(kh1world.get_location("Wonderland Queen's Castle Hedge Right Red Chest"),
|
|
lambda state: state.has("Lady Luck", player))
|
|
add_rule(kh1world.get_location("Wonderland Lotus Forest Thunder Plant Chest"),
|
|
lambda state: state.has("Lady Luck", player))
|
|
add_rule(kh1world.get_location("Wonderland Lotus Forest Through the Painting Thunder Plant Chest"),
|
|
lambda state: state.has("Lady Luck", player))
|
|
add_rule(kh1world.get_location("Wonderland Lotus Forest Glide Chest"),
|
|
lambda state: state.has("Lady Luck", player))
|
|
add_rule(kh1world.get_location("Wonderland Lotus Forest Nut Chest"),
|
|
lambda state: state.has("Lady Luck", player))
|
|
add_rule(kh1world.get_location("Wonderland Lotus Forest Corner Chest"),
|
|
lambda state: state.has("Lady Luck", player))
|
|
add_rule(kh1world.get_location("Wonderland Bizarre Room Lamp Chest"),
|
|
lambda state: state.has("Lady Luck", player))
|
|
add_rule(kh1world.get_location("Wonderland Tea Party Garden Above Lotus Forest Entrance 2nd Chest"),
|
|
lambda state: state.has("Lady Luck", player))
|
|
add_rule(kh1world.get_location("Wonderland Tea Party Garden Above Lotus Forest Entrance 1st Chest"),
|
|
lambda state: state.has("Lady Luck", player))
|
|
add_rule(kh1world.get_location("Wonderland Tea Party Garden Bear and Clock Puzzle Chest"),
|
|
lambda state: state.has("Lady Luck", player))
|
|
add_rule(kh1world.get_location("Wonderland Tea Party Garden Across From Bizarre Room Entrance Chest"),
|
|
lambda state: state.has("Lady Luck", player))
|
|
add_rule(kh1world.get_location("Wonderland Lotus Forest Through the Painting White Trinity Chest"),
|
|
lambda state: state.has("Lady Luck", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Tree House Beneath Tree House Chest"),
|
|
lambda state: state.has("Jungle King", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Tree House Rooftop Chest"),
|
|
lambda state: state.has("Jungle King", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Hippo's Lagoon Center Chest"),
|
|
lambda state: state.has("Jungle King", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Hippo's Lagoon Left Chest"),
|
|
lambda state: state.has("Jungle King", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Hippo's Lagoon Right Chest"),
|
|
lambda state: state.has("Jungle King", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Vines Chest"),
|
|
lambda state: state.has("Jungle King", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Vines 2 Chest"),
|
|
lambda state: state.has("Jungle King", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Climbing Trees Blue Trinity Chest"),
|
|
lambda state: state.has("Jungle King", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Tunnel Chest"),
|
|
lambda state: state.has("Jungle King", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Cavern of Hearts White Trinity Chest"),
|
|
lambda state: state.has("Jungle King", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Camp Blue Trinity Chest"),
|
|
lambda state: state.has("Jungle King", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Tent Chest"),
|
|
lambda state: state.has("Jungle King", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Waterfall Cavern Low Chest"),
|
|
lambda state: state.has("Jungle King", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Waterfall Cavern Middle Chest"),
|
|
lambda state: state.has("Jungle King", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Waterfall Cavern High Wall Chest"),
|
|
lambda state: state.has("Jungle King", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Waterfall Cavern High Middle Chest"),
|
|
lambda state: state.has("Jungle King", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Cliff Right Cliff Left Chest"),
|
|
lambda state: state.has("Jungle King", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Cliff Right Cliff Right Chest"),
|
|
lambda state: state.has("Jungle King", player))
|
|
add_rule(kh1world.get_location("Deep Jungle Tree House Suspended Boat Chest"),
|
|
lambda state: state.has("Jungle King", player))
|
|
add_rule(kh1world.get_location("Agrabah Plaza By Storage Chest"),
|
|
lambda state: state.has("Three Wishes", player))
|
|
add_rule(kh1world.get_location("Agrabah Plaza Raised Terrace Chest"),
|
|
lambda state: state.has("Three Wishes", player))
|
|
add_rule(kh1world.get_location("Agrabah Plaza Top Corner Chest"),
|
|
lambda state: state.has("Three Wishes", player))
|
|
add_rule(kh1world.get_location("Agrabah Alley Chest"),
|
|
lambda state: state.has("Three Wishes", player))
|
|
add_rule(kh1world.get_location("Agrabah Bazaar Across Windows Chest"),
|
|
lambda state: state.has("Three Wishes", player))
|
|
add_rule(kh1world.get_location("Agrabah Bazaar High Corner Chest"),
|
|
lambda state: state.has("Three Wishes", player))
|
|
add_rule(kh1world.get_location("Agrabah Main Street Right Palace Entrance Chest"),
|
|
lambda state: state.has("Three Wishes", player))
|
|
add_rule(kh1world.get_location("Agrabah Main Street High Above Alley Entrance Chest"),
|
|
lambda state: state.has("Three Wishes", player))
|
|
add_rule(kh1world.get_location("Agrabah Main Street High Above Palace Gates Entrance Chest"),
|
|
lambda state: state.has("Three Wishes", player))
|
|
add_rule(kh1world.get_location("Agrabah Palace Gates Low Chest"),
|
|
lambda state: state.has("Three Wishes", player))
|
|
add_rule(kh1world.get_location("Agrabah Palace Gates High Opposite Palace Chest"),
|
|
lambda state: state.has("Three Wishes", player))
|
|
add_rule(kh1world.get_location("Agrabah Palace Gates High Close to Palace Chest"),
|
|
lambda state: state.has("Three Wishes", player))
|
|
add_rule(kh1world.get_location("Agrabah Storage Green Trinity Chest"),
|
|
lambda state: state.has("Three Wishes", player))
|
|
add_rule(kh1world.get_location("Agrabah Storage Behind Barrel Chest"),
|
|
lambda state: state.has("Three Wishes", player))
|
|
add_rule(kh1world.get_location("Agrabah Cave of Wonders Entrance Left Chest"),
|
|
lambda state: state.has("Three Wishes", player))
|
|
add_rule(kh1world.get_location("Agrabah Cave of Wonders Entrance Tall Tower Chest"),
|
|
lambda state: state.has("Three Wishes", player))
|
|
add_rule(kh1world.get_location("Agrabah Cave of Wonders Hall High Left Chest"),
|
|
lambda state: state.has("Three Wishes", player))
|
|
add_rule(kh1world.get_location("Agrabah Cave of Wonders Hall Near Bottomless Hall Chest"),
|
|
lambda state: state.has("Three Wishes", player))
|
|
add_rule(kh1world.get_location("Agrabah Cave of Wonders Bottomless Hall Raised Platform Chest"),
|
|
lambda state: state.has("Three Wishes", player))
|
|
add_rule(kh1world.get_location("Agrabah Cave of Wonders Bottomless Hall Pillar Chest"),
|
|
lambda state: state.has("Three Wishes", player))
|
|
add_rule(kh1world.get_location("Agrabah Cave of Wonders Bottomless Hall Across Chasm Chest"),
|
|
lambda state: state.has("Three Wishes", player))
|
|
add_rule(kh1world.get_location("Agrabah Cave of Wonders Treasure Room Across Platforms Chest"),
|
|
lambda state: state.has("Three Wishes", player))
|
|
add_rule(kh1world.get_location("Agrabah Cave of Wonders Treasure Room Small Treasure Pile Chest"),
|
|
lambda state: state.has("Three Wishes", player))
|
|
add_rule(kh1world.get_location("Agrabah Cave of Wonders Treasure Room Large Treasure Pile Chest"),
|
|
lambda state: state.has("Three Wishes", player))
|
|
add_rule(kh1world.get_location("Agrabah Cave of Wonders Treasure Room Above Fire Chest"),
|
|
lambda state: state.has("Three Wishes", player))
|
|
add_rule(kh1world.get_location("Agrabah Cave of Wonders Relic Chamber Jump from Stairs Chest"),
|
|
lambda state: state.has("Three Wishes", player))
|
|
add_rule(kh1world.get_location("Agrabah Cave of Wonders Relic Chamber Stairs Chest"),
|
|
lambda state: state.has("Three Wishes", player))
|
|
add_rule(kh1world.get_location("Agrabah Cave of Wonders Dark Chamber Abu Gem Chest"),
|
|
lambda state: state.has("Three Wishes", player))
|
|
add_rule(kh1world.get_location("Agrabah Cave of Wonders Dark Chamber Across from Relic Chamber Entrance Chest"),
|
|
lambda state: state.has("Three Wishes", player))
|
|
add_rule(kh1world.get_location("Agrabah Cave of Wonders Dark Chamber Bridge Chest"),
|
|
lambda state: state.has("Three Wishes", player))
|
|
add_rule(kh1world.get_location("Agrabah Cave of Wonders Dark Chamber Near Save Chest"),
|
|
lambda state: state.has("Three Wishes", player))
|
|
add_rule(kh1world.get_location("Agrabah Cave of Wonders Silent Chamber Blue Trinity Chest"),
|
|
lambda state: state.has("Three Wishes", player))
|
|
add_rule(kh1world.get_location("Agrabah Cave of Wonders Hidden Room Right Chest"),
|
|
lambda state: state.has("Three Wishes", player))
|
|
add_rule(kh1world.get_location("Agrabah Cave of Wonders Hidden Room Left Chest"),
|
|
lambda state: state.has("Three Wishes", player))
|
|
add_rule(kh1world.get_location("Agrabah Aladdin's House Main Street Entrance Chest"),
|
|
lambda state: state.has("Three Wishes", player))
|
|
add_rule(kh1world.get_location("Agrabah Aladdin's House Plaza Entrance Chest"),
|
|
lambda state: state.has("Three Wishes", player))
|
|
add_rule(kh1world.get_location("Agrabah Cave of Wonders Entrance White Trinity Chest"),
|
|
lambda state: state.has("Three Wishes", player))
|
|
add_rule(kh1world.get_location("Monstro Chamber 6 Other Platform Chest"),
|
|
lambda state: state.has("Wishing Star", player))
|
|
add_rule(kh1world.get_location("Monstro Chamber 6 Platform Near Chamber 5 Entrance Chest"),
|
|
lambda state: state.has("Wishing Star", player))
|
|
add_rule(kh1world.get_location("Monstro Chamber 6 Raised Area Near Chamber 1 Entrance Chest"),
|
|
lambda state: state.has("Wishing Star", player))
|
|
add_rule(kh1world.get_location("Monstro Chamber 6 Low Chest"),
|
|
lambda state: state.has("Wishing Star", player))
|
|
add_rule(kh1world.get_location("Halloween Town Moonlight Hill White Trinity Chest"),
|
|
lambda state: state.has("Pumpkinhead", player))
|
|
add_rule(kh1world.get_location("Halloween Town Bridge Under Bridge"),
|
|
lambda state: state.has("Pumpkinhead", player))
|
|
add_rule(kh1world.get_location("Halloween Town Boneyard Tombstone Puzzle Chest"),
|
|
lambda state: state.has("Pumpkinhead", player))
|
|
add_rule(kh1world.get_location("Halloween Town Bridge Right of Gate Chest"),
|
|
lambda state: state.has("Pumpkinhead", player))
|
|
add_rule(kh1world.get_location("Halloween Town Cemetery Behind Grave Chest"),
|
|
lambda state: state.has("Pumpkinhead", player))
|
|
add_rule(kh1world.get_location("Halloween Town Cemetery By Cat Shape Chest"),
|
|
lambda state: state.has("Pumpkinhead", player))
|
|
add_rule(kh1world.get_location("Halloween Town Cemetery Between Graves Chest"),
|
|
lambda state: state.has("Pumpkinhead", player))
|
|
add_rule(kh1world.get_location("Halloween Town Oogie's Manor Lower Iron Cage Chest"),
|
|
lambda state: state.has("Pumpkinhead", player))
|
|
add_rule(kh1world.get_location("Halloween Town Oogie's Manor Upper Iron Cage Chest"),
|
|
lambda state: state.has("Pumpkinhead", player))
|
|
add_rule(kh1world.get_location("Halloween Town Oogie's Manor Hollow Chest"),
|
|
lambda state: state.has("Pumpkinhead", player))
|
|
add_rule(kh1world.get_location("Halloween Town Oogie's Manor Grounds Red Trinity Chest"),
|
|
lambda state: state.has("Pumpkinhead", player))
|
|
add_rule(kh1world.get_location("Halloween Town Guillotine Square High Tower Chest"),
|
|
lambda state: state.has("Pumpkinhead", player))
|
|
add_rule(kh1world.get_location("Halloween Town Guillotine Square Pumpkin Structure Left Chest"),
|
|
lambda state: state.has("Pumpkinhead", player))
|
|
add_rule(kh1world.get_location("Halloween Town Oogie's Manor Entrance Steps Chest"),
|
|
lambda state: state.has("Pumpkinhead", player))
|
|
add_rule(kh1world.get_location("Halloween Town Oogie's Manor Inside Entrance Chest"),
|
|
lambda state: state.has("Pumpkinhead", player))
|
|
add_rule(kh1world.get_location("Halloween Town Bridge Left of Gate Chest"),
|
|
lambda state: state.has("Pumpkinhead", player))
|
|
add_rule(kh1world.get_location("Halloween Town Cemetery By Striped Grave Chest"),
|
|
lambda state: state.has("Pumpkinhead", player))
|
|
add_rule(kh1world.get_location("Halloween Town Guillotine Square Under Jack's House Stairs Chest"),
|
|
lambda state: state.has("Pumpkinhead", player))
|
|
add_rule(kh1world.get_location("Halloween Town Guillotine Square Pumpkin Structure Right Chest"),
|
|
lambda state: state.has("Pumpkinhead", player))
|
|
add_rule(kh1world.get_location("Olympus Coliseum Coliseum Gates Left Behind Columns Chest"),
|
|
lambda state: state.has("Olympia", player))
|
|
add_rule(kh1world.get_location("Olympus Coliseum Coliseum Gates Right Blue Trinity Chest"),
|
|
lambda state: state.has("Olympia", player))
|
|
add_rule(kh1world.get_location("Olympus Coliseum Coliseum Gates Left Blue Trinity Chest"),
|
|
lambda state: state.has("Olympia", player))
|
|
add_rule(kh1world.get_location("Olympus Coliseum Coliseum Gates White Trinity Chest"),
|
|
lambda state: state.has("Olympia", player))
|
|
add_rule(kh1world.get_location("Olympus Coliseum Coliseum Gates Blizzara Chest"),
|
|
lambda state: state.has("Olympia", player))
|
|
add_rule(kh1world.get_location("Olympus Coliseum Coliseum Gates Blizzaga Chest"),
|
|
lambda state: state.has("Olympia", player))
|
|
add_rule(kh1world.get_location("Monstro Mouth Boat Deck Chest"),
|
|
lambda state: state.has("Wishing Star", player))
|
|
add_rule(kh1world.get_location("Monstro Mouth High Platform Boat Side Chest"),
|
|
lambda state: state.has("Wishing Star", player))
|
|
add_rule(kh1world.get_location("Monstro Mouth High Platform Across from Boat Chest"),
|
|
lambda state: state.has("Wishing Star", player))
|
|
add_rule(kh1world.get_location("Monstro Mouth Near Ship Chest"),
|
|
lambda state: state.has("Wishing Star", player))
|
|
add_rule(kh1world.get_location("Monstro Mouth Green Trinity Top of Boat Chest"),
|
|
lambda state: state.has("Wishing Star", player))
|
|
add_rule(kh1world.get_location("Monstro Chamber 2 Ground Chest"),
|
|
lambda state: state.has("Wishing Star", player))
|
|
add_rule(kh1world.get_location("Monstro Chamber 2 Platform Chest"),
|
|
lambda state: state.has("Wishing Star", player))
|
|
add_rule(kh1world.get_location("Monstro Chamber 5 Platform Chest"),
|
|
lambda state: state.has("Wishing Star", player))
|
|
add_rule(kh1world.get_location("Monstro Chamber 3 Ground Chest"),
|
|
lambda state: state.has("Wishing Star", player))
|
|
add_rule(kh1world.get_location("Monstro Chamber 3 Platform Above Chamber 2 Entrance Chest"),
|
|
lambda state: state.has("Wishing Star", player))
|
|
add_rule(kh1world.get_location("Monstro Chamber 3 Near Chamber 6 Entrance Chest"),
|
|
lambda state: state.has("Wishing Star", player))
|
|
add_rule(kh1world.get_location("Monstro Chamber 3 Platform Near Chamber 6 Entrance Chest"),
|
|
lambda state: state.has("Wishing Star", player))
|
|
add_rule(kh1world.get_location("Monstro Mouth High Platform Near Teeth Chest"),
|
|
lambda state: state.has("Wishing Star", player))
|
|
add_rule(kh1world.get_location("Monstro Chamber 5 Atop Barrel Chest"),
|
|
lambda state: state.has("Wishing Star", player))
|
|
add_rule(kh1world.get_location("Monstro Chamber 5 Low 2nd Chest"),
|
|
lambda state: state.has("Wishing Star", player))
|
|
add_rule(kh1world.get_location("Monstro Chamber 5 Low 1st Chest"),
|
|
lambda state: state.has("Wishing Star", player))
|
|
add_rule(kh1world.get_location("Neverland Pirate Ship Deck White Trinity Chest"),
|
|
lambda state: state.has("Fairy Harp", player))
|
|
add_rule(kh1world.get_location("Neverland Pirate Ship Crows Nest Chest"),
|
|
lambda state: state.has("Fairy Harp", player))
|
|
add_rule(kh1world.get_location("Neverland Hold Yellow Trinity Right Blue Chest"),
|
|
lambda state: state.has("Fairy Harp", player))
|
|
add_rule(kh1world.get_location("Neverland Hold Yellow Trinity Left Blue Chest"),
|
|
lambda state: state.has("Fairy Harp", player))
|
|
add_rule(kh1world.get_location("Neverland Galley Chest"),
|
|
lambda state: state.has("Fairy Harp", player))
|
|
add_rule(kh1world.get_location("Neverland Cabin Chest"),
|
|
lambda state: state.has("Fairy Harp", player))
|
|
add_rule(kh1world.get_location("Neverland Hold Flight 1st Chest"),
|
|
lambda state: state.has("Fairy Harp", player))
|
|
add_rule(kh1world.get_location("Neverland Clock Tower Chest"),
|
|
lambda state: state.has("Fairy Harp", player))
|
|
add_rule(kh1world.get_location("Neverland Hold Flight 2nd Chest"),
|
|
lambda state: state.has("Fairy Harp", player))
|
|
add_rule(kh1world.get_location("Neverland Hold Yellow Trinity Green Chest"),
|
|
lambda state: state.has("Fairy Harp", player))
|
|
add_rule(kh1world.get_location("Neverland Captain's Cabin Chest"),
|
|
lambda state: state.has("Fairy Harp", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion Rising Falls Water's Surface Chest"),
|
|
lambda state: state.has("Divine Rose", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion Rising Falls Under Water 1st Chest"),
|
|
lambda state: state.has("Divine Rose", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion Rising Falls Under Water 2nd Chest"),
|
|
lambda state: state.has("Divine Rose", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion Rising Falls Floating Platform Near Save Chest"),
|
|
lambda state: state.has("Divine Rose", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion Rising Falls Floating Platform Near Bubble Chest"),
|
|
lambda state: state.has("Divine Rose", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion Rising Falls High Platform Chest"),
|
|
lambda state: state.has("Divine Rose", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion Castle Gates Gravity Chest"),
|
|
lambda state: state.has("Divine Rose", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion Castle Gates Freestanding Pillar Chest"),
|
|
lambda state: state.has("Divine Rose", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion Castle Gates High Pillar Chest"),
|
|
lambda state: state.has("Divine Rose", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion Great Crest Lower Chest"),
|
|
lambda state: state.has("Divine Rose", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion Great Crest After Battle Platform Chest"),
|
|
lambda state: state.has("Divine Rose", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion High Tower 2nd Gravity Chest"),
|
|
lambda state: state.has("Divine Rose", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion High Tower 1st Gravity Chest"),
|
|
lambda state: state.has("Divine Rose", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion High Tower Above Sliding Blocks Chest"),
|
|
lambda state: state.has("Divine Rose", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion Library Top of Bookshelf Chest"),
|
|
lambda state: state.has("Divine Rose", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion Lift Stop Library Node After High Tower Switch Gravity Chest"),
|
|
lambda state: state.has("Divine Rose", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion Lift Stop Library Node Gravity Chest"),
|
|
lambda state: state.has("Divine Rose", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion Lift Stop Under High Tower Sliding Blocks Chest"),
|
|
lambda state: state.has("Divine Rose", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion Lift Stop Outside Library Gravity Chest"),
|
|
lambda state: state.has("Divine Rose", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion Lift Stop Heartless Sigil Door Gravity Chest"),
|
|
lambda state: state.has("Divine Rose", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion Base Level Bubble Under the Wall Platform Chest"),
|
|
lambda state: state.has("Divine Rose", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion Base Level Platform Near Entrance Chest"),
|
|
lambda state: state.has("Divine Rose", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion Base Level Near Crystal Switch Chest"),
|
|
lambda state: state.has("Divine Rose", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion Waterway Near Save Chest"),
|
|
lambda state: state.has("Divine Rose", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion Waterway Blizzard on Bubble Chest"),
|
|
lambda state: state.has("Divine Rose", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion Waterway Unlock Passage from Base Level Chest"),
|
|
lambda state: state.has("Divine Rose", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion Dungeon By Candles Chest"),
|
|
lambda state: state.has("Divine Rose", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion Dungeon Corner Chest"),
|
|
lambda state: state.has("Divine Rose", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion Grand Hall Steps Right Side Chest"),
|
|
lambda state: state.has("Divine Rose", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion Grand Hall Oblivion Chest"),
|
|
lambda state: state.has("Divine Rose", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion Grand Hall Left of Gate Chest"),
|
|
lambda state: state.has("Divine Rose", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion Entrance Hall Left of Emblem Door Chest"),
|
|
lambda state: state.has("Divine Rose", player))
|
|
add_rule(kh1world.get_location("Hollow Bastion Rising Falls White Trinity Chest"),
|
|
lambda state: state.has("Divine Rose", player))
|
|
add_rule(kh1world.get_location("End of the World Final Dimension 1st Chest"),
|
|
lambda state: state.has("Oblivion", player))
|
|
add_rule(kh1world.get_location("End of the World Final Dimension 2nd Chest"),
|
|
lambda state: state.has("Oblivion", player))
|
|
add_rule(kh1world.get_location("End of the World Final Dimension 3rd Chest"),
|
|
lambda state: state.has("Oblivion", player))
|
|
add_rule(kh1world.get_location("End of the World Final Dimension 4th Chest"),
|
|
lambda state: state.has("Oblivion", player))
|
|
add_rule(kh1world.get_location("End of the World Final Dimension 5th Chest"),
|
|
lambda state: state.has("Oblivion", player))
|
|
add_rule(kh1world.get_location("End of the World Final Dimension 6th Chest"),
|
|
lambda state: state.has("Oblivion", player))
|
|
add_rule(kh1world.get_location("End of the World Final Dimension 10th Chest"),
|
|
lambda state: state.has("Oblivion", player))
|
|
add_rule(kh1world.get_location("End of the World Final Dimension 9th Chest"),
|
|
lambda state: state.has("Oblivion", player))
|
|
add_rule(kh1world.get_location("End of the World Final Dimension 8th Chest"),
|
|
lambda state: state.has("Oblivion", player))
|
|
add_rule(kh1world.get_location("End of the World Final Dimension 7th Chest"),
|
|
lambda state: state.has("Oblivion", player))
|
|
add_rule(kh1world.get_location("End of the World Giant Crevasse 3rd Chest"),
|
|
lambda state: state.has("Oblivion", player))
|
|
add_rule(kh1world.get_location("End of the World Giant Crevasse 5th Chest"),
|
|
lambda state: state.has("Oblivion", player))
|
|
add_rule(kh1world.get_location("End of the World Giant Crevasse 1st Chest"),
|
|
lambda state: state.has("Oblivion", player))
|
|
add_rule(kh1world.get_location("End of the World Giant Crevasse 4th Chest"),
|
|
lambda state: state.has("Oblivion", player))
|
|
add_rule(kh1world.get_location("End of the World Giant Crevasse 2nd Chest"),
|
|
lambda state: state.has("Oblivion", player))
|
|
add_rule(kh1world.get_location("End of the World World Terminus Traverse Town Chest"),
|
|
lambda state: state.has("Oblivion", player))
|
|
add_rule(kh1world.get_location("End of the World World Terminus Wonderland Chest"),
|
|
lambda state: state.has("Oblivion", player))
|
|
add_rule(kh1world.get_location("End of the World World Terminus Olympus Coliseum Chest"),
|
|
lambda state: state.has("Oblivion", player))
|
|
add_rule(kh1world.get_location("End of the World World Terminus Deep Jungle Chest"),
|
|
lambda state: state.has("Oblivion", player))
|
|
add_rule(kh1world.get_location("End of the World World Terminus Agrabah Chest"),
|
|
lambda state: state.has("Oblivion", player))
|
|
add_rule(kh1world.get_location("End of the World World Terminus Halloween Town Chest"),
|
|
lambda state: state.has("Oblivion", player))
|
|
add_rule(kh1world.get_location("End of the World World Terminus Neverland Chest"),
|
|
lambda state: state.has("Oblivion", player))
|
|
add_rule(kh1world.get_location("End of the World World Terminus 100 Acre Wood Chest"),
|
|
lambda state: state.has("Oblivion", player))
|
|
add_rule(kh1world.get_location("End of the World Final Rest Chest"),
|
|
lambda state: state.has("Oblivion", player))
|
|
add_rule(kh1world.get_location("Monstro Chamber 6 White Trinity Chest"),
|
|
lambda state: state.has("Oblivion", player))
|
|
if options.hundred_acre_wood:
|
|
add_rule(kh1world.get_location("100 Acre Wood Meadow Inside Log Chest"),
|
|
lambda state: state.has("Oathkeeper", player))
|
|
add_rule(kh1world.get_location("100 Acre Wood Bouncing Spot Left Cliff Chest"),
|
|
lambda state: state.has("Oathkeeper", player))
|
|
add_rule(kh1world.get_location("100 Acre Wood Bouncing Spot Right Tree Alcove Chest"),
|
|
lambda state: state.has("Oathkeeper", player))
|
|
add_rule(kh1world.get_location("100 Acre Wood Bouncing Spot Under Giant Pot Chest"),
|
|
lambda state: state.has("Oathkeeper", player))
|
|
|
|
|
|
add_rule(kh1world.get_entrance("Wonderland"),
|
|
lambda state: state.has("Wonderland", player) and has_x_worlds(state, player, 2, options.keyblades_unlock_chests))
|
|
add_rule(kh1world.get_entrance("Olympus Coliseum"),
|
|
lambda state: state.has("Olympus Coliseum", player) and has_x_worlds(state, player, 2, options.keyblades_unlock_chests))
|
|
add_rule(kh1world.get_entrance("Deep Jungle"),
|
|
lambda state: state.has("Deep Jungle", player) and has_x_worlds(state, player, 2, options.keyblades_unlock_chests))
|
|
add_rule(kh1world.get_entrance("Agrabah"),
|
|
lambda state: state.has("Agrabah", player) and has_x_worlds(state, player, 2, options.keyblades_unlock_chests))
|
|
add_rule(kh1world.get_entrance("Monstro"),
|
|
lambda state: state.has("Monstro", player) and has_x_worlds(state, player, 2, options.keyblades_unlock_chests))
|
|
if options.atlantica:
|
|
add_rule(kh1world.get_entrance("Atlantica"),
|
|
lambda state: state.has("Atlantica", player) and has_x_worlds(state, player, 2, options.keyblades_unlock_chests))
|
|
add_rule(kh1world.get_entrance("Halloween Town"),
|
|
lambda state: state.has("Halloween Town", player) and has_x_worlds(state, player, 2, options.keyblades_unlock_chests))
|
|
add_rule(kh1world.get_entrance("Neverland"),
|
|
lambda state: state.has("Neverland", player) and has_x_worlds(state, player, 3, options.keyblades_unlock_chests))
|
|
add_rule(kh1world.get_entrance("Hollow Bastion"),
|
|
lambda state: state.has("Hollow Bastion", player) and has_x_worlds(state, player, 5, options.keyblades_unlock_chests))
|
|
add_rule(kh1world.get_entrance("End of the World"),
|
|
lambda state: has_x_worlds(state, player, 7, options.keyblades_unlock_chests) and (has_reports(state, player, eotw_required_reports) or state.has("End of the World", player)))
|
|
add_rule(kh1world.get_entrance("100 Acre Wood"),
|
|
lambda state: state.has("Progressive Fire", player))
|
|
|
|
multiworld.completion_condition[player] = lambda state: state.has("Victory", player)
|