From 2a3916c1c58e033b06042d5d5413ea85cd94babf Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Fri, 6 Feb 2026 13:43:45 -0500 Subject: Add shuffle_fast_travel and fast_travel_access to apworld --- apworld/player_logic.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'apworld/player_logic.py') diff --git a/apworld/player_logic.py b/apworld/player_logic.py index b946296..a02856e 100644 --- a/apworld/player_logic.py +++ b/apworld/player_logic.py @@ -5,7 +5,7 @@ from .generated import data_pb2 as data_pb2 from .items import SYMBOL_ITEMS from typing import TYPE_CHECKING, NamedTuple -from .options import ShuffleLetters, CyanDoorBehavior, VictoryCondition +from .options import ShuffleLetters, CyanDoorBehavior, VictoryCondition, FastTravelAccess if TYPE_CHECKING: from . import Lingo2World @@ -221,6 +221,7 @@ class Lingo2PlayerLogic: double_letter_amount: dict[str, int] goal_room_id: int + rte_mapping: list[int] def __init__(self, world: "Lingo2World"): self.world = world @@ -304,6 +305,19 @@ class Lingo2PlayerLogic: if "The Fuzzy" in world.options.enable_gift_maps.value: self.real_items.append("Numbers") + if world.options.shuffle_fast_travel: + travelable_maps = [map_id for map_id in self.shuffled_maps + if world.static_logic.objects.maps[map_id].HasField("rte_room")] + self.rte_mapping = world.random.sample(travelable_maps, 4) + else: + canonical_rtes = ["the_plaza", "the_gallery", "daedalus", "control_center"] + self.rte_mapping = [world.static_logic.map_id_by_name[map_name] for map_name in canonical_rtes + if world.static_logic.map_id_by_name[map_name] in self.shuffled_maps] + + if world.options.fast_travel_access == FastTravelAccess.option_items: + for rte_map in self.rte_mapping: + self.real_items.append(world.static_logic.get_map_rte_item_name(rte_map)) + if self.world.options.shuffle_doors: for progressive in world.static_logic.objects.progressives: for i in range(0, len(progressive.doors)): -- cgit 1.4.1