about summary refs log tree commit diff stats
path: root/apworld/player_logic.py
diff options
context:
space:
mode:
authorStar Rauchenberger <fefferburbia@gmail.com>2025-09-08 12:42:31 -0400
committerStar Rauchenberger <fefferburbia@gmail.com>2025-09-08 12:42:31 -0400
commit6af543ba049e3ba880b113907cd5222b205b8c05 (patch)
tree58a17c86870db0e67e30e20b7349aee69fba4e82 /apworld/player_logic.py
parent215b576cc816f6f378d057b330ef01f02539602a (diff)
downloadlingo2-archipelago-6af543ba049e3ba880b113907cd5222b205b8c05.tar.gz
lingo2-archipelago-6af543ba049e3ba880b113907cd5222b205b8c05.tar.bz2
lingo2-archipelago-6af543ba049e3ba880b113907cd5222b205b8c05.zip
Add cyan door behavior option
Diffstat (limited to 'apworld/player_logic.py')
-rw-r--r--apworld/player_logic.py36
1 files changed, 26 insertions, 10 deletions
diff --git a/apworld/player_logic.py b/apworld/player_logic.py index ce9a4e5..317d13b 100644 --- a/apworld/player_logic.py +++ b/apworld/player_logic.py
@@ -3,7 +3,7 @@ from enum import IntEnum, auto
3from .generated import data_pb2 as data_pb2 3from .generated import data_pb2 as data_pb2
4from typing import TYPE_CHECKING, NamedTuple 4from typing import TYPE_CHECKING, NamedTuple
5 5
6from .options import VictoryCondition, ShuffleLetters 6from .options import VictoryCondition, ShuffleLetters, CyanDoorBehavior
7 7
8if TYPE_CHECKING: 8if TYPE_CHECKING:
9 from . import Lingo2World 9 from . import Lingo2World
@@ -124,11 +124,13 @@ class Lingo2PlayerLogic:
124 self.real_items.append(progressive.name) 124 self.real_items.append(progressive.name)
125 125
126 for door_group in world.static_logic.objects.door_groups: 126 for door_group in world.static_logic.objects.door_groups:
127 if door_group.type == data_pb2.DoorGroupType.CONNECTOR and not self.world.options.shuffle_doors: 127 if door_group.type == data_pb2.DoorGroupType.CONNECTOR:
128 continue 128 if not self.world.options.shuffle_doors:
129 129 continue
130 if (door_group.type == data_pb2.DoorGroupType.COLOR_CONNECTOR and 130 elif door_group.type == data_pb2.DoorGroupType.COLOR_CONNECTOR:
131 not self.world.options.shuffle_control_center_colors): 131 if not self.world.options.shuffle_control_center_colors:
132 continue
133 else:
132 continue 134 continue
133 135
134 for door in door_group.doors: 136 for door in door_group.doors:
@@ -157,6 +159,19 @@ class Lingo2PlayerLogic:
157 self.item_by_door[door.id] = (door_item_name, 1) 159 self.item_by_door[door.id] = (door_item_name, 1)
158 self.real_items.append(door_item_name) 160 self.real_items.append(door_item_name)
159 161
162 # We handle cyan_door_behavior = Item after door shuffle, because cyan doors that are impacted by door shuffle
163 # should be exempt from cyan_door_behavior.
164 if world.options.cyan_door_behavior == CyanDoorBehavior.option_item:
165 for door_group in world.static_logic.objects.door_groups:
166 if door_group.type != data_pb2.DoorGroupType.CYAN_DOORS:
167 continue
168
169 for door in door_group.doors:
170 if not door in self.item_by_door:
171 self.item_by_door[door] = (door_group.name, 1)
172
173 self.real_items.append(door_group.name)
174
160 for door in world.static_logic.objects.doors: 175 for door in world.static_logic.objects.doors:
161 if door.type in [data_pb2.DoorType.STANDARD, data_pb2.DoorType.LOCATION_ONLY, data_pb2.DoorType.GRAVESTONE]: 176 if door.type in [data_pb2.DoorType.STANDARD, data_pb2.DoorType.LOCATION_ONLY, data_pb2.DoorType.GRAVESTONE]:
162 self.locations_by_room.setdefault(door.room_id, []).append(PlayerLocation(door.ap_id, 177 self.locations_by_room.setdefault(door.room_id, []).append(PlayerLocation(door.ap_id,
@@ -295,12 +310,13 @@ class Lingo2PlayerLogic:
295 self.add_solution_reqs(reqs, door.control_center_color) 310 self.add_solution_reqs(reqs, door.control_center_color)
296 311
297 if door.double_letters: 312 if door.double_letters:
298 if self.world.options.shuffle_letters in [ShuffleLetters.option_vanilla, 313 if self.world.options.cyan_door_behavior == CyanDoorBehavior.option_collect_h2:
299 ShuffleLetters.option_vanilla_cyan]:
300 reqs.rooms.add("The Repetitive - Main Room") 314 reqs.rooms.add("The Repetitive - Main Room")
301 elif self.world.options.shuffle_letters in [ShuffleLetters.option_progressive, 315 elif self.world.options.cyan_door_behavior == CyanDoorBehavior.option_any_double_letter:
302 ShuffleLetters.option_item_cyan]:
303 reqs.cyans = True 316 reqs.cyans = True
317 elif self.world.options.cyan_door_behavior == CyanDoorBehavior.option_item:
318 # There shouldn't be any locations that are cyan doors.
319 pass
304 320
305 for keyholder_uses in door.keyholders: 321 for keyholder_uses in door.keyholders:
306 key_name = keyholder_uses.key.upper() 322 key_name = keyholder_uses.key.upper()