From 3d03fcd82991d201f32a8313d4b44a4b17de4526 Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Sat, 7 Feb 2026 13:24:58 -0500 Subject: Add restrict_letter_placements option --- apworld/player_logic.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'apworld/player_logic.py') diff --git a/apworld/player_logic.py b/apworld/player_logic.py index a02856e..7bfd49f 100644 --- a/apworld/player_logic.py +++ b/apworld/player_logic.py @@ -192,6 +192,7 @@ class AccessRequirements: class PlayerLocation(NamedTuple): code: int | None reqs: AccessRequirements + is_letter: bool = False class LetterBehavior(IntEnum): @@ -295,6 +296,12 @@ class Lingo2PlayerLogic: self.shuffled_doors.update(set(door.id for door in world.static_logic.objects.doors if door.map_id == game_map.id and door.daedalus_only_allow)) + if (world.options.restrict_letter_placements + and world.options.shuffle_letters == ShuffleLetters.option_progressive + and (world.options.shuffle_doors or world.options.shuffle_symbols)): + raise OptionError(f"When Restrict Letter Placements is enabled and Shuffle Letters is set to Progressive, " + f"both Shuffle Doors and Shuffle Symbols must be disabled (Player {world.player}).") + maximum_masteries = 13 + len(world.options.enable_gift_maps.value) if world.options.enable_icarus: maximum_masteries += 1 @@ -406,9 +413,11 @@ class Lingo2PlayerLogic: if not self.should_shuffle_room(letter.room_id): continue - self.locations_by_room.setdefault(letter.room_id, []).append(PlayerLocation(letter.ap_id, - AccessRequirements())) behavior = self.get_letter_behavior(letter.key, letter.level2) + + self.locations_by_room.setdefault(letter.room_id, []).append( + PlayerLocation(letter.ap_id, AccessRequirements(), behavior == LetterBehavior.ITEM)) + if behavior == LetterBehavior.VANILLA: if not world.for_tracker: letter_name = f"{letter.key.upper()}{'2' if letter.level2 else '1'}" -- cgit 1.4.1