TUNIC: Error catching for logic bugs in ER (#3082)

This commit is contained in:
Scipio Wright 2024-04-13 18:20:52 -04:00 committed by GitHub
parent 11073dfdac
commit fbeba1e470
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 25 additions and 15 deletions

View File

@ -1,5 +1,5 @@
from typing import Dict, List, Any from typing import Dict, List, Any
from logging import warning
from BaseClasses import Region, Location, Item, Tutorial, ItemClassification from BaseClasses import Region, Location, Item, Tutorial, ItemClassification
from .items import item_name_to_id, item_table, item_name_groups, fool_tiers, filler_items, slot_data_item_names from .items import item_name_to_id, item_table, item_name_groups, fool_tiers, filler_items, slot_data_item_names
from .locations import location_table, location_name_groups, location_name_to_id, hexagon_locations from .locations import location_table, location_name_groups, location_name_to_id, hexagon_locations
@ -245,17 +245,27 @@ class TunicWorld(World):
continue continue
path_to_loc = [] path_to_loc = []
previous_name = "placeholder" previous_name = "placeholder"
name, connection = paths[location.parent_region] try:
while connection != ("Menu", None): name, connection = paths[location.parent_region]
name, connection = connection except KeyError:
# for LS entrances, we just want to give the portal name # logic bug, proceed with warning since it takes a long time to update AP
if "(LS)" in name: warning(f"{location.name} is not logically accessible for "
name, _ = name.split(" (LS) ") f"{self.multiworld.get_file_safe_player_name(self.player)}. "
# was getting some cases like Library Grave -> Library Grave -> other place "Creating entrance hint Inaccessible. "
if name in portal_names and name != previous_name: "Please report this to the TUNIC rando devs.")
previous_name = name hint_text = "Inaccessible"
path_to_loc.append(name) else:
hint_text = " -> ".join(reversed(path_to_loc)) while connection != ("Menu", None):
name, connection = connection
# for LS entrances, we just want to give the portal name
if "(LS)" in name:
name, _ = name.split(" (LS) ")
# was getting some cases like Library Grave -> Library Grave -> other place
if name in portal_names and name != previous_name:
previous_name = name
path_to_loc.append(name)
hint_text = " -> ".join(reversed(path_to_loc))
if hint_text: if hint_text:
hint_data[self.player][location.address] = hint_text hint_data[self.player][location.address] = hint_text