diff options
| -rw-r--r-- | items.py | 15 | ||||
| -rw-r--r-- | player_logic.py | 31 |
2 files changed, 29 insertions, 17 deletions
| diff --git a/items.py b/items.py index 7b1a650..9f8bf56 100644 --- a/items.py +++ b/items.py | |||
| @@ -24,14 +24,6 @@ class ItemData(NamedTuple): | |||
| 24 | return world.options.shuffle_colors > 0 | 24 | return world.options.shuffle_colors > 0 |
| 25 | elif self.mode == "doors": | 25 | elif self.mode == "doors": |
| 26 | return world.options.shuffle_doors != ShuffleDoors.option_none | 26 | return world.options.shuffle_doors != ShuffleDoors.option_none |
| 27 | elif self.mode == "orange tower": | ||
| 28 | # door shuffle is on and tower isn't progressive | ||
| 29 | return world.options.shuffle_doors != ShuffleDoors.option_none \ | ||
| 30 | and not world.options.progressive_orange_tower | ||
| 31 | elif self.mode == "the colorful": | ||
| 32 | # complex door shuffle is on and colorful isn't progressive | ||
| 33 | return world.options.shuffle_doors == ShuffleDoors.option_complex \ | ||
| 34 | and not world.options.progressive_colorful | ||
| 35 | elif self.mode == "complex door": | 27 | elif self.mode == "complex door": |
| 36 | return world.options.shuffle_doors == ShuffleDoors.option_complex | 28 | return world.options.shuffle_doors == ShuffleDoors.option_complex |
| 37 | elif self.mode == "door group": | 29 | elif self.mode == "door group": |
| @@ -72,12 +64,7 @@ def load_item_data(): | |||
| 72 | door_groups.setdefault(door.group, []).extend(door.door_ids) | 64 | door_groups.setdefault(door.group, []).extend(door.door_ids) |
| 73 | 65 | ||
| 74 | if room_name in PROGRESSION_BY_ROOM and door_name in PROGRESSION_BY_ROOM[room_name]: | 66 | if room_name in PROGRESSION_BY_ROOM and door_name in PROGRESSION_BY_ROOM[room_name]: |
| 75 | if room_name == "Orange Tower": | 67 | door_mode = "special" |
| 76 | door_mode = "orange tower" | ||
| 77 | elif room_name == "The Colorful": | ||
| 78 | door_mode = "the colorful" | ||
| 79 | else: | ||
| 80 | door_mode = "special" | ||
| 81 | 68 | ||
| 82 | ALL_ITEM_TABLE[door.item_name] = \ | 69 | ALL_ITEM_TABLE[door.item_name] = \ |
| 83 | ItemData(get_door_item_id(room_name, door_name), | 70 | ItemData(get_door_item_id(room_name, door_name), |
| 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 @@ | |||
| 1 | from enum import Enum | ||
| 1 | from typing import Dict, List, NamedTuple, Optional, Set, Tuple, TYPE_CHECKING | 2 | from typing import Dict, List, NamedTuple, Optional, Set, Tuple, TYPE_CHECKING |
| 2 | 3 | ||
| 3 | from .items import ALL_ITEM_TABLE | 4 | from .items import ALL_ITEM_TABLE |
| @@ -36,6 +37,27 @@ class PlayerLocation(NamedTuple): | |||
| 36 | access: AccessRequirements | 37 | access: AccessRequirements |
| 37 | 38 | ||
| 38 | 39 | ||
| 40 | class ProgressiveItemBehavior(Enum): | ||
| 41 | DISABLE = 1 | ||
| 42 | SPLIT = 2 | ||
| 43 | PROGRESSIVE = 3 | ||
| 44 | |||
| 45 | |||
| 46 | def 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 | |||
| 39 | class LingoPlayerLogic: | 61 | class 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) |
