The Messenger: Add more difficult logic options (#1550)

This commit is contained in:
alwaysintreble
2023-03-21 15:21:27 -05:00
committed by GitHub
parent 91502505a1
commit 1c69fb3c3c
9 changed files with 277 additions and 50 deletions

View File

@@ -3,10 +3,10 @@ from typing import Dict, Any, List, Optional
from BaseClasses import Tutorial, ItemClassification
from worlds.AutoWorld import World, WebWorld
from .Constants import NOTES, PROG_ITEMS, PHOBEKINS, USEFUL_ITEMS, ALWAYS_LOCATIONS, SEALS, ALL_ITEMS
from .Options import messenger_options, NotesNeeded, Goal, PowerSeals
from .Options import messenger_options, NotesNeeded, Goal, PowerSeals, Logic
from .Regions import REGIONS, REGION_CONNECTIONS
from .Rules import MessengerRules
from .SubClasses import MessengerRegion, MessengerItem
from . import Rules
class MessengerWeb(WebWorld):
@@ -100,7 +100,15 @@ class MessengerWorld(World):
self.multiworld.itempool += itempool
def set_rules(self) -> None:
MessengerRules(self).set_messenger_rules()
logic = self.multiworld.logic_level[self.player]
if logic == Logic.option_normal:
Rules.MessengerRules(self).set_messenger_rules()
elif logic == Logic.option_hard:
Rules.MessengerHardRules(self).set_messenger_rules()
elif logic == Logic.option_challenging:
Rules.MessengerChallengeRules(self).set_messenger_rules()
else:
Rules.MessengerOOBRules(self).set_messenger_rules()
def fill_slot_data(self) -> Dict[str, Any]:
locations: Dict[int, List[str]] = {}
@@ -114,7 +122,8 @@ class MessengerWorld(World):
"music_box": self.multiworld.music_box[self.player].value,
"required_seals": self.required_seals,
"locations": locations,
"settings": {"Difficulty": "Basic" if not self.multiworld.shuffle_seals[self.player] else "Advanced"}
"settings": {"Difficulty": "Basic" if not self.multiworld.shuffle_seals[self.player] else "Advanced"},
"logic": self.multiworld.logic_level[self.player].current_key,
}
def get_filler_item_name(self) -> str:
@@ -122,4 +131,6 @@ class MessengerWorld(World):
def create_item(self, name: str) -> MessengerItem:
item_id: Optional[int] = self.item_name_to_id.get(name, None)
return MessengerItem(name, self.player, item_id)
override_prog = name in {"Windmill Shuriken"} and getattr(self, "multiworld") is not None \
and self.multiworld.logic_level[self.player] > Logic.option_normal
return MessengerItem(name, self.player, item_id, override_prog)