TUNIC: Error catching for logic bugs in ER (#3082)
This commit is contained in:
parent
11073dfdac
commit
fbeba1e470
|
@ -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
|
||||||
|
@ -123,7 +123,7 @@ class TunicWorld(World):
|
||||||
# Filler items in the item pool
|
# Filler items in the item pool
|
||||||
available_filler: List[str] = [filler for filler in items_to_create if items_to_create[filler] > 0 and
|
available_filler: List[str] = [filler for filler in items_to_create if items_to_create[filler] > 0 and
|
||||||
item_table[filler].classification == ItemClassification.filler]
|
item_table[filler].classification == ItemClassification.filler]
|
||||||
|
|
||||||
# Remove filler to make room for other items
|
# Remove filler to make room for other items
|
||||||
def remove_filler(amount: int):
|
def remove_filler(amount: int):
|
||||||
for _ in range(0, amount):
|
for _ in range(0, amount):
|
||||||
|
@ -150,7 +150,7 @@ class TunicWorld(World):
|
||||||
hexagon_goal = self.options.hexagon_goal
|
hexagon_goal = self.options.hexagon_goal
|
||||||
extra_hexagons = self.options.extra_hexagon_percentage
|
extra_hexagons = self.options.extra_hexagon_percentage
|
||||||
items_to_create[gold_hexagon] += int((Decimal(100 + extra_hexagons) / 100 * hexagon_goal).to_integral_value(rounding=ROUND_HALF_UP))
|
items_to_create[gold_hexagon] += int((Decimal(100 + extra_hexagons) / 100 * hexagon_goal).to_integral_value(rounding=ROUND_HALF_UP))
|
||||||
|
|
||||||
# Replace pages and normal hexagons with filler
|
# Replace pages and normal hexagons with filler
|
||||||
for replaced_item in list(filter(lambda item: "Pages" in item or item in hexagon_locations, items_to_create)):
|
for replaced_item in list(filter(lambda item: "Pages" in item or item in hexagon_locations, items_to_create)):
|
||||||
filler_name = self.get_filler_item_name()
|
filler_name = self.get_filler_item_name()
|
||||||
|
@ -184,7 +184,7 @@ class TunicWorld(World):
|
||||||
self.tunic_portal_pairs = {}
|
self.tunic_portal_pairs = {}
|
||||||
self.er_portal_hints = {}
|
self.er_portal_hints = {}
|
||||||
self.ability_unlocks = randomize_ability_unlocks(self.random, self.options)
|
self.ability_unlocks = randomize_ability_unlocks(self.random, self.options)
|
||||||
|
|
||||||
# stuff for universal tracker support, can be ignored for standard gen
|
# stuff for universal tracker support, can be ignored for standard gen
|
||||||
if hasattr(self.multiworld, "re_gen_passthrough"):
|
if hasattr(self.multiworld, "re_gen_passthrough"):
|
||||||
if "TUNIC" in self.multiworld.re_gen_passthrough:
|
if "TUNIC" in self.multiworld.re_gen_passthrough:
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue