about summary refs log tree commit diff stats
path: root/apworld/player_logic.py
diff options
context:
space:
mode:
Diffstat (limited to 'apworld/player_logic.py')
-rw-r--r--apworld/player_logic.py21
1 files changed, 19 insertions, 2 deletions
diff --git a/apworld/player_logic.py b/apworld/player_logic.py index a02856e..ea74266 100644 --- a/apworld/player_logic.py +++ b/apworld/player_logic.py
@@ -192,6 +192,7 @@ class AccessRequirements:
192class PlayerLocation(NamedTuple): 192class PlayerLocation(NamedTuple):
193 code: int | None 193 code: int | None
194 reqs: AccessRequirements 194 reqs: AccessRequirements
195 is_letter: bool = False
195 196
196 197
197class LetterBehavior(IntEnum): 198class LetterBehavior(IntEnum):
@@ -222,6 +223,7 @@ class Lingo2PlayerLogic:
222 double_letter_amount: dict[str, int] 223 double_letter_amount: dict[str, int]
223 goal_room_id: int 224 goal_room_id: int
224 rte_mapping: list[int] 225 rte_mapping: list[int]
226 custom_mint_ending: str | None
225 227
226 def __init__(self, world: "Lingo2World"): 228 def __init__(self, world: "Lingo2World"):
227 self.world = world 229 self.world = world
@@ -236,6 +238,7 @@ class Lingo2PlayerLogic:
236 self.real_items = list() 238 self.real_items = list()
237 self.starting_items = list() 239 self.starting_items = list()
238 self.double_letter_amount = dict() 240 self.double_letter_amount = dict()
241 self.custom_mint_ending = None
239 242
240 def should_shuffle_map(game_map) -> bool | set[int]: 243 def should_shuffle_map(game_map) -> bool | set[int]:
241 if world.options.daedalus_only: 244 if world.options.daedalus_only:
@@ -295,6 +298,18 @@ class Lingo2PlayerLogic:
295 self.shuffled_doors.update(set(door.id for door in world.static_logic.objects.doors 298 self.shuffled_doors.update(set(door.id for door in world.static_logic.objects.doors
296 if door.map_id == game_map.id and door.daedalus_only_allow)) 299 if door.map_id == game_map.id and door.daedalus_only_allow))
297 300
301 if (world.options.restrict_letter_placements
302 and world.options.shuffle_letters == ShuffleLetters.option_progressive
303 and (world.options.shuffle_doors or world.options.shuffle_symbols)):
304 raise OptionError(f"When Restrict Letter Placements is enabled and Shuffle Letters is set to Progressive, "
305 f"both Shuffle Doors and Shuffle Symbols must be disabled (Player {world.player}).")
306
307 if world.options.custom_mint_ending.value != "":
308 self.custom_mint_ending = ''.join(filter(str.isalpha, world.options.custom_mint_ending.value)).lower()
309
310 if len(self.custom_mint_ending) > 52:
311 raise OptionError(f"Custom Mint Ending should not be greater than 52 letters (Player {world.player}).")
312
298 maximum_masteries = 13 + len(world.options.enable_gift_maps.value) 313 maximum_masteries = 13 + len(world.options.enable_gift_maps.value)
299 if world.options.enable_icarus: 314 if world.options.enable_icarus:
300 maximum_masteries += 1 315 maximum_masteries += 1
@@ -406,9 +421,11 @@ class Lingo2PlayerLogic:
406 if not self.should_shuffle_room(letter.room_id): 421 if not self.should_shuffle_room(letter.room_id):
407 continue 422 continue
408 423
409 self.locations_by_room.setdefault(letter.room_id, []).append(PlayerLocation(letter.ap_id,
410 AccessRequirements()))
411 behavior = self.get_letter_behavior(letter.key, letter.level2) 424 behavior = self.get_letter_behavior(letter.key, letter.level2)
425
426 self.locations_by_room.setdefault(letter.room_id, []).append(
427 PlayerLocation(letter.ap_id, AccessRequirements(), behavior == LetterBehavior.ITEM))
428
412 if behavior == LetterBehavior.VANILLA: 429 if behavior == LetterBehavior.VANILLA:
413 if not world.for_tracker: 430 if not world.for_tracker:
414 letter_name = f"{letter.key.upper()}{'2' if letter.level2 else '1'}" 431 letter_name = f"{letter.key.upper()}{'2' if letter.level2 else '1'}"