TUNIC: Misc Logic Changes, Additions (#2856)

* Add nmg boss scav kill

* Add boss quick kills

* Fix name of orb

* Remove getting into zig with ice grapple

* Remove connection from quarry to zig

* Add a few missing dependent regions

* Separate the atoll statue and portal pad so that it doesn't assume you can get from one to the other without prayer
This commit is contained in:
Scipio Wright 2024-02-26 02:30:20 -05:00 committed by GitHub
parent 5c05ab1527
commit 738a9ebb7d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 33 additions and 13 deletions

View File

@ -211,7 +211,7 @@ portal_mapping: List[Portal] = [
destination="Shop_"),
Portal(name="Atoll to Far Shore", region="Ruined Atoll Portal",
destination="Transit_teleporter_atoll"),
Portal(name="Atoll Statue Teleporter", region="Ruined Atoll Portal",
Portal(name="Atoll Statue Teleporter", region="Ruined Atoll Statue",
destination="Library Exterior_"),
Portal(name="Frog Stairs Eye Entrance", region="Ruined Atoll",
destination="Frog Stairs_eye"),
@ -600,6 +600,7 @@ tunic_er_regions: Dict[str, RegionInfo] = {
"Ruined Atoll Lower Entry Area": RegionInfo("Atoll Redux"),
"Ruined Atoll Frog Mouth": RegionInfo("Atoll Redux"),
"Ruined Atoll Portal": RegionInfo("Atoll Redux"),
"Ruined Atoll Statue": RegionInfo("Atoll Redux"),
"Frog's Domain Entry": RegionInfo("Frog Stairs"),
"Frog's Domain": RegionInfo("frog cave main", hint=Hint.region),
"Frog's Domain Back": RegionInfo("frog cave main", hint=Hint.scene),
@ -749,6 +750,8 @@ dependent_regions_restricted: Dict[Tuple[str, ...], List[str]] = {
["Forest Belltower Main", "Forest Belltower Lower"],
("East Forest", "East Forest Dance Fox Spot", "East Forest Portal"):
["East Forest", "East Forest Dance Fox Spot", "East Forest Portal"],
("Guard House 1 East", "Guard House 1 West"):
["Guard House 1 East", "Guard House 1 West"],
("Forest Grave Path Main", "Forest Grave Path Upper"):
["Forest Grave Path Main", "Forest Grave Path Upper", "Forest Grave Path by Grave", "Forest Hero's Grave"],
("Forest Grave Path by Grave", "Forest Hero's Grave"):
@ -762,8 +765,10 @@ dependent_regions_restricted: Dict[Tuple[str, ...], List[str]] = {
("West Garden", "West Garden Laurels Exit", "West Garden after Boss", "West Garden Hero's Grave"):
["West Garden", "West Garden Laurels Exit", "West Garden after Boss", "West Garden Hero's Grave"],
("West Garden Portal", "West Garden Portal Item"): ["West Garden Portal", "West Garden Portal Item"],
("Ruined Atoll", "Ruined Atoll Lower Entry Area", "Ruined Atoll Frog Mouth", "Ruined Atoll Portal"):
["Ruined Atoll", "Ruined Atoll Lower Entry Area", "Ruined Atoll Frog Mouth", "Ruined Atoll Portal"],
("Ruined Atoll", "Ruined Atoll Lower Entry Area", "Ruined Atoll Frog Mouth", "Ruined Atoll Portal",
"Ruined Atoll Statue"):
["Ruined Atoll", "Ruined Atoll Lower Entry Area", "Ruined Atoll Frog Mouth", "Ruined Atoll Portal",
"Ruined Atoll Statue"],
("Frog's Domain",):
["Frog's Domain", "Frog's Domain Back"],
("Library Exterior Ladder", "Library Exterior Tree"):
@ -842,6 +847,8 @@ dependent_regions_nmg: Dict[Tuple[str, ...], List[str]] = {
["Forest Belltower Main", "Forest Belltower Lower"],
("East Forest", "East Forest Dance Fox Spot", "East Forest Portal"):
["East Forest", "East Forest Dance Fox Spot", "East Forest Portal"],
("Guard House 1 East", "Guard House 1 West"):
["Guard House 1 East", "Guard House 1 West"],
("Forest Grave Path Main", "Forest Grave Path Upper", "Forest Grave Path by Grave", "Forest Hero's Grave"):
["Forest Grave Path Main", "Forest Grave Path Upper", "Forest Grave Path by Grave", "Forest Hero's Grave"],
("Beneath the Well Front", "Beneath the Well Main", "Beneath the Well Back"):
@ -854,8 +861,10 @@ dependent_regions_nmg: Dict[Tuple[str, ...], List[str]] = {
"West Garden Portal", "West Garden Portal Item"):
["West Garden", "West Garden Laurels Exit", "West Garden after Boss", "West Garden Hero's Grave",
"West Garden Portal", "West Garden Portal Item"],
("Ruined Atoll", "Ruined Atoll Lower Entry Area", "Ruined Atoll Frog Mouth", "Ruined Atoll Portal"):
["Ruined Atoll", "Ruined Atoll Lower Entry Area", "Ruined Atoll Frog Mouth", "Ruined Atoll Portal"],
("Ruined Atoll", "Ruined Atoll Lower Entry Area", "Ruined Atoll Frog Mouth", "Ruined Atoll Portal",
"Ruined Atoll Statue"):
["Ruined Atoll", "Ruined Atoll Lower Entry Area", "Ruined Atoll Frog Mouth", "Ruined Atoll Portal",
"Ruined Atoll Statue"],
("Frog's Domain",):
["Frog's Domain", "Frog's Domain Back"],
("Library Exterior Ladder", "Library Exterior Tree"):
@ -934,6 +943,8 @@ dependent_regions_ur: Dict[Tuple[str, ...], List[str]] = {
["Forest Belltower Main", "Forest Belltower Lower"],
("East Forest", "East Forest Dance Fox Spot", "East Forest Portal"):
["East Forest", "East Forest Dance Fox Spot", "East Forest Portal"],
("Guard House 1 East", "Guard House 1 West"):
["Guard House 1 East", "Guard House 1 West"],
# can use laurels, ice grapple, or ladder storage to traverse
("Forest Grave Path Main", "Forest Grave Path Upper", "Forest Grave Path by Grave", "Forest Hero's Grave"):
["Forest Grave Path Main", "Forest Grave Path Upper", "Forest Grave Path by Grave", "Forest Hero's Grave"],
@ -948,8 +959,10 @@ dependent_regions_ur: Dict[Tuple[str, ...], List[str]] = {
"West Garden Portal", "West Garden Portal Item"):
["West Garden", "West Garden Laurels Exit", "West Garden after Boss", "West Garden Hero's Grave",
"West Garden Portal", "West Garden Portal Item"],
("Ruined Atoll", "Ruined Atoll Lower Entry Area", "Ruined Atoll Frog Mouth", "Ruined Atoll Portal"):
["Ruined Atoll", "Ruined Atoll Lower Entry Area", "Ruined Atoll Frog Mouth", "Ruined Atoll Portal"],
("Ruined Atoll", "Ruined Atoll Lower Entry Area", "Ruined Atoll Frog Mouth", "Ruined Atoll Portal",
"Ruined Atoll Statue"):
["Ruined Atoll", "Ruined Atoll Lower Entry Area", "Ruined Atoll Frog Mouth", "Ruined Atoll Portal",
"Ruined Atoll Statue"],
("Frog's Domain",):
["Frog's Domain", "Frog's Domain Back"],
("Library Exterior Ladder", "Library Exterior Tree"):

View File

@ -295,6 +295,12 @@ def set_er_region_rules(world: "TunicWorld", ability_unlocks: Dict[str, int], re
regions["Ruined Atoll Portal"].connect(
connecting_region=regions["Ruined Atoll"])
regions["Ruined Atoll"].connect(
connecting_region=regions["Ruined Atoll Statue"],
rule=lambda state: has_ability(state, player, prayer, options, ability_unlocks))
regions["Ruined Atoll Statue"].connect(
connecting_region=regions["Ruined Atoll"])
regions["Frog's Domain"].connect(
connecting_region=regions["Frog's Domain Back"],
rule=lambda state: state.has(grapple, player))
@ -944,10 +950,12 @@ def set_er_location_rules(world: "TunicWorld", ability_unlocks: Dict[str, int])
# Bosses
set_rule(multiworld.get_location("Fortress Arena - Siege Engine/Vault Key Pickup", player),
lambda state: has_sword(state, player))
# nmg - kill Librarian with a lure, or gun I guess
set_rule(multiworld.get_location("Librarian - Hexagon Green", player),
lambda state: has_sword(state, player))
lambda state: has_sword(state, player) or options.logic_rules)
# nmg - kill boss scav with orb + firecracker, or similar
set_rule(multiworld.get_location("Rooted Ziggurat Lower - Hexagon Blue", player),
lambda state: has_sword(state, player))
lambda state: has_sword(state, player) or (state.has(grapple, player) and options.logic_rules))
# Swamp
set_rule(multiworld.get_location("Cathedral Gauntlet - Gauntlet Reward", player),

View File

@ -16,7 +16,7 @@ tunic_regions: Dict[str, Set[str]] = {
"Eastern Vault Fortress": {"Beneath the Vault"},
"Beneath the Vault": {"Eastern Vault Fortress"},
"Quarry Back": {"Quarry"},
"Quarry": {"Lower Quarry", "Rooted Ziggurat"},
"Quarry": {"Lower Quarry"},
"Lower Quarry": {"Rooted Ziggurat"},
"Rooted Ziggurat": set(),
"Swamp": {"Cathedral"},

View File

@ -131,8 +131,6 @@ def set_region_rules(world: "TunicWorld", ability_unlocks: Dict[str, int]) -> No
lambda state: has_mask(state, player, options)
multiworld.get_entrance("Lower Quarry -> Rooted Ziggurat", player).access_rule = \
lambda state: state.has(grapple, player) and has_ability(state, player, prayer, options, ability_unlocks)
multiworld.get_entrance("Quarry -> Rooted Ziggurat", player).access_rule = \
lambda state: has_ice_grapple_logic(False, state, player, options, ability_unlocks)
multiworld.get_entrance("Swamp -> Cathedral", player).access_rule = \
lambda state: state.has(laurels, player) and has_ability(state, player, prayer, options, ability_unlocks) \
or has_ice_grapple_logic(False, state, player, options, ability_unlocks)
@ -312,8 +310,9 @@ def set_location_rules(world: "TunicWorld", ability_unlocks: Dict[str, int]) ->
lambda state: state.has(laurels, player))
set_rule(multiworld.get_location("Quarry - [West] Upper Area Bombable Wall", player),
lambda state: has_mask(state, player, options))
# nmg - kill boss scav with orb + firecracker, or similar
set_rule(multiworld.get_location("Rooted Ziggurat Lower - Hexagon Blue", player),
lambda state: has_sword(state, player))
lambda state: has_sword(state, player) or (state.has(grapple, player) and options.logic_rules))
# Swamp
set_rule(multiworld.get_location("Cathedral Gauntlet - Gauntlet Reward", player),