summary refs log tree commit diff stats
path: root/player_logic.py
diff options
context:
space:
mode:
Diffstat (limited to 'player_logic.py')
-rw-r--r--player_logic.py31
1 files changed, 28 insertions, 3 deletions
diff --git a/player_logic.py b/player_logic.py index b2e5f77..0ae3035 100644 --- a/player_logic.py +++ b/player_logic.py
@@ -1,3 +1,4 @@
1from enum import Enum
1from typing import Dict, List, NamedTuple, Optional, Set, Tuple, TYPE_CHECKING 2from typing import Dict, List, NamedTuple, Optional, Set, Tuple, TYPE_CHECKING
2 3
3from .items import ALL_ITEM_TABLE 4from .items import ALL_ITEM_TABLE
@@ -36,6 +37,27 @@ class PlayerLocation(NamedTuple):
36 access: AccessRequirements 37 access: AccessRequirements
37 38
38 39
40class ProgressiveItemBehavior(Enum):
41 DISABLE = 1
42 SPLIT = 2
43 PROGRESSIVE = 3
44
45
46def should_split_progression(progression_name: str, world: "LingoWorld") -> ProgressiveItemBehavior:
47 if progression_name == "Progressive Orange Tower":
48 if world.options.progressive_orange_tower:
49 return ProgressiveItemBehavior.PROGRESSIVE
50 else:
51 return ProgressiveItemBehavior.SPLIT
52 elif progression_name == "Progressive Colorful":
53 if world.options.progressive_colorful:
54 return ProgressiveItemBehavior.PROGRESSIVE
55 else:
56 return ProgressiveItemBehavior.SPLIT
57
58 return ProgressiveItemBehavior.PROGRESSIVE
59
60
39class LingoPlayerLogic: 61class LingoPlayerLogic:
40 """ 62 """
41 Defines logic after a player's options have been applied 63 Defines logic after a player's options have been applied
@@ -83,10 +105,13 @@ class LingoPlayerLogic:
83 105
84 def handle_non_grouped_door(self, room_name: str, door_data: Door, world: "LingoWorld"): 106 def handle_non_grouped_door(self, room_name: str, door_data: Door, world: "LingoWorld"):
85 if room_name in PROGRESSION_BY_ROOM and door_data.name in PROGRESSION_BY_ROOM[room_name]: 107 if room_name in PROGRESSION_BY_ROOM and door_data.name in PROGRESSION_BY_ROOM[room_name]:
86 if (room_name == "Orange Tower" and not world.options.progressive_orange_tower)\ 108 progression_name = PROGRESSION_BY_ROOM[room_name][door_data.name].item_name
87 or (room_name == "The Colorful" and not world.options.progressive_colorful): 109 progression_handling = should_split_progression(progression_name, world)
110
111 if progression_handling == ProgressiveItemBehavior.SPLIT:
88 self.set_door_item(room_name, door_data.name, door_data.item_name) 112 self.set_door_item(room_name, door_data.name, door_data.item_name)
89 else: 113 self.real_items.append(door_data.item_name)
114 elif progression_handling == ProgressiveItemBehavior.PROGRESSIVE:
90 progressive_item_name = PROGRESSION_BY_ROOM[room_name][door_data.name].item_name 115 progressive_item_name = PROGRESSION_BY_ROOM[room_name][door_data.name].item_name
91 self.set_door_item(room_name, door_data.name, progressive_item_name) 116 self.set_door_item(room_name, door_data.name, progressive_item_name)
92 self.real_items.append(progressive_item_name) 117 self.real_items.append(progressive_item_name)