Undertale: Logic fixes (#2436)

This commit is contained in:
Mewlif 2023-11-08 12:50:29 -05:00 committed by GitHub
parent 03e1c45d71
commit 504d09daf6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 8 deletions

View File

@ -24,6 +24,7 @@ undertale_regions = [
("True Lab", []), ("True Lab", []),
("Core", ["Core Exit"]), ("Core", ["Core Exit"]),
("New Home", ["New Home Exit"]), ("New Home", ["New Home Exit"]),
("Last Corridor", ["Last Corridor Exit"]),
("Barrier", []), ("Barrier", []),
] ]
@ -40,7 +41,8 @@ mandatory_connections = [
("News Show Entrance", "News Show"), ("News Show Entrance", "News Show"),
("Lab Elevator", "True Lab"), ("Lab Elevator", "True Lab"),
("Core Exit", "New Home"), ("Core Exit", "New Home"),
("New Home Exit", "Barrier"), ("New Home Exit", "Last Corridor"),
("Last Corridor Exit", "Barrier"),
("Snowdin Hub", "Snowdin Forest"), ("Snowdin Hub", "Snowdin Forest"),
("Waterfall Hub", "Waterfall"), ("Waterfall Hub", "Waterfall"),
("Hotland Hub", "Hotland"), ("Hotland Hub", "Hotland"),

View File

@ -81,23 +81,27 @@ def set_rules(multiworld: MultiWorld, player: int):
set_rule(multiworld.get_entrance("New Home Exit", player), set_rule(multiworld.get_entrance("New Home Exit", player),
lambda state: (state.has("Left Home Key", player) and lambda state: (state.has("Left Home Key", player) and
state.has("Right Home Key", player)) or state.has("Right Home Key", player)) or
state.has("Key Piece", player, state.multiworld.key_pieces[player])) state.has("Key Piece", player, state.multiworld.key_pieces[player].value))
if _undertale_is_route(multiworld.state, player, 1): if _undertale_is_route(multiworld.state, player, 1):
set_rule(multiworld.get_entrance("Papyrus\" Home Entrance", player), set_rule(multiworld.get_entrance("Papyrus\" Home Entrance", player),
lambda state: _undertale_has_plot(state, player, "Complete Skeleton")) lambda state: _undertale_has_plot(state, player, "Complete Skeleton"))
set_rule(multiworld.get_entrance("Undyne\"s Home Entrance", player), set_rule(multiworld.get_entrance("Undyne\"s Home Entrance", player),
lambda state: _undertale_has_plot(state, player, "Fish") and state.has("Papyrus Date", player)) lambda state: _undertale_has_plot(state, player, "Fish") and state.has("Papyrus Date", player))
set_rule(multiworld.get_entrance("Lab Elevator", player), set_rule(multiworld.get_entrance("Lab Elevator", player),
lambda state: state.has("Alphys Date", player) and _undertale_has_plot(state, player, "DT Extractor")) lambda state: state.has("Alphys Date", player) and state.has("DT Extractor", player) and
((state.has("Left Home Key", player) and state.has("Right Home Key", player)) or
state.has("Key Piece", player, state.multiworld.key_pieces[player].value)))
set_rule(multiworld.get_location("Alphys Date", player), set_rule(multiworld.get_location("Alphys Date", player),
lambda state: state.has("Undyne Letter EX", player) and state.has("Undyne Date", player)) lambda state: state.can_reach("New Home", "Region", player) and state.has("Undyne Letter EX", player)
and state.has("Undyne Date", player))
set_rule(multiworld.get_location("Papyrus Plot", player), set_rule(multiworld.get_location("Papyrus Plot", player),
lambda state: state.can_reach("Snowdin Town", "Region", player)) lambda state: state.can_reach("Snowdin Town", "Region", player))
set_rule(multiworld.get_location("Undyne Plot", player), set_rule(multiworld.get_location("Undyne Plot", player),
lambda state: state.can_reach("Waterfall", "Region", player)) lambda state: state.can_reach("Waterfall", "Region", player))
set_rule(multiworld.get_location("True Lab Plot", player), set_rule(multiworld.get_location("True Lab Plot", player),
lambda state: state.can_reach("New Home", "Region", player) lambda state: state.can_reach("New Home", "Region", player)
and state.can_reach("Letter Quest", "Location", player)) and state.can_reach("Letter Quest", "Location", player)
and state.can_reach("Alphys Date", "Location", player))
set_rule(multiworld.get_location("Chisps Machine", player), set_rule(multiworld.get_location("Chisps Machine", player),
lambda state: state.can_reach("True Lab", "Region", player)) lambda state: state.can_reach("True Lab", "Region", player))
set_rule(multiworld.get_location("Dog Sale 1", player), set_rule(multiworld.get_location("Dog Sale 1", player),
@ -113,7 +117,7 @@ def set_rules(multiworld: MultiWorld, player: int):
set_rule(multiworld.get_location("Hush Trade", player), set_rule(multiworld.get_location("Hush Trade", player),
lambda state: state.can_reach("News Show", "Region", player) and state.has("Hot Dog...?", player, 1)) lambda state: state.can_reach("News Show", "Region", player) and state.has("Hot Dog...?", player, 1))
set_rule(multiworld.get_location("Letter Quest", player), set_rule(multiworld.get_location("Letter Quest", player),
lambda state: state.can_reach("New Home Exit", "Entrance", player) and state.has("Undyne Date", player)) lambda state: state.can_reach("Last Corridor", "Region", player) and state.has("Undyne Date", player))
if (not _undertale_is_route(multiworld.state, player, 2)) or _undertale_is_route(multiworld.state, player, 3): if (not _undertale_is_route(multiworld.state, player, 2)) or _undertale_is_route(multiworld.state, player, 3):
set_rule(multiworld.get_location("Nicecream Punch Card", player), set_rule(multiworld.get_location("Nicecream Punch Card", player),
lambda state: state.has("Punch Card", player, 3) and state.can_reach("Waterfall", "Region", player)) lambda state: state.has("Punch Card", player, 3) and state.can_reach("Waterfall", "Region", player))
@ -126,7 +130,7 @@ def set_rules(multiworld: MultiWorld, player: int):
set_rule(multiworld.get_location("Apron Hidden", player), set_rule(multiworld.get_location("Apron Hidden", player),
lambda state: state.can_reach("Cooking Show", "Region", player)) lambda state: state.can_reach("Cooking Show", "Region", player))
if _undertale_is_route(multiworld.state, player, 2) and \ if _undertale_is_route(multiworld.state, player, 2) and \
(multiworld.rando_love[player] or multiworld.rando_stats[player]): (bool(multiworld.rando_love[player].value) or bool(multiworld.rando_stats[player].value)):
maxlv = 1 maxlv = 1
exp = 190 exp = 190
curarea = "Old Home" curarea = "Old Home"
@ -304,7 +308,7 @@ def set_rules(multiworld: MultiWorld, player: int):
# Sets rules on completion condition # Sets rules on completion condition
def set_completion_rules(multiworld: MultiWorld, player: int): def set_completion_rules(multiworld: MultiWorld, player: int):
completion_requirements = lambda state: state.can_reach("New Home Exit", "Entrance", player) completion_requirements = lambda state: state.can_reach("Barrier", "Region", player)
if _undertale_is_route(multiworld.state, player, 1): if _undertale_is_route(multiworld.state, player, 1):
completion_requirements = lambda state: state.can_reach("True Lab", "Region", player) completion_requirements = lambda state: state.can_reach("True Lab", "Region", player)