mirror of
https://github.com/MarioSpore/Grinch-AP.git
synced 2025-10-21 20:21:32 -06:00
The Messenger: Add Mega Time Shards and Quest 1 boss locations (#1661)
* implement mega shards * create the option and locations, add to slot data and tests * add boss refights as locations * remove barma'thazel. it's apparently impossible to get to him * remove barma'thazel again * up max shard count to 85 * increment version * dynamically alter the power seal pool * revert host.yaml change * two mega shards were missing from the maps * add new checks to the info page * add some more rules to skylands * forgot to update my tests * explicit imports, remove unnecessary typing, lower required client ver * use generators for shard and seal creation
This commit is contained in:
@@ -27,7 +27,8 @@ class MessengerRules:
|
||||
"Catacombs": self.has_wingsuit,
|
||||
"Bamboo Creek": self.has_wingsuit,
|
||||
"Searing Crags Upper": self.has_vertical,
|
||||
"Cloud Ruins": lambda state: self.has_wingsuit(state) and state.has("Ruxxtin's Amulet", self.player),
|
||||
"Cloud Ruins": lambda state: self.has_vertical(state) and state.has("Ruxxtin's Amulet", self.player),
|
||||
"Cloud Ruins Right": self.has_wingsuit,
|
||||
"Underworld": self.has_tabi,
|
||||
"Forlorn Temple": lambda state: state.has_all({"Wingsuit", *PHOBEKINS}, self.player),
|
||||
"Glacial Peak": self.has_vertical,
|
||||
@@ -43,6 +44,7 @@ class MessengerRules:
|
||||
# howling grotto
|
||||
"Howling Grotto Seal - Windy Saws and Balls": self.has_wingsuit,
|
||||
"Howling Grotto Seal - Crushing Pits": lambda state: self.has_wingsuit(state) and self.has_dart(state),
|
||||
"Emerald Golem": self.has_wingsuit,
|
||||
# searing crags
|
||||
"Astral Tea Leaves": lambda state: state.can_reach("Astral Seed", "Location", self.player),
|
||||
"Key of Strength": lambda state: state.has("Power Thistle", self.player),
|
||||
@@ -64,14 +66,20 @@ class MessengerRules:
|
||||
"Key of Love": lambda state: state.has_all({"Sun Crest", "Moon Crest"}, self.player),
|
||||
"Sunken Shrine Seal - Waterfall Paradise": self.has_tabi,
|
||||
"Sunken Shrine Seal - Tabi Gauntlet": self.has_tabi,
|
||||
"Mega Shard of the Moon": self.has_tabi,
|
||||
"Mega Shard of the Sun": self.has_tabi,
|
||||
# riviere turquoise
|
||||
"Fairy Bottle": self.has_vertical,
|
||||
"Riviere Turquoise Seal - Flower Power": self.has_vertical,
|
||||
"Quick Restock Mega Shard 1": self.has_vertical,
|
||||
"Quick Restock Mega Shard 2": self.has_vertical,
|
||||
# elemental skylands
|
||||
"Key of Symbiosis": self.has_dart,
|
||||
"Elemental Skylands Seal - Air": self.has_wingsuit,
|
||||
"Elemental Skylands Seal - Water": self.has_dart,
|
||||
"Elemental Skylands Seal - Fire": self.has_dart,
|
||||
"Earth Mega Shard": self.has_dart,
|
||||
"Water Mega Shard": self.has_dart,
|
||||
# corrupted future
|
||||
"Key of Courage": lambda state: state.has_all({"Demon King Crown", "Fairy Bottle"}, self.player),
|
||||
# the shop
|
||||
@@ -130,12 +138,17 @@ class MessengerHardRules(MessengerRules):
|
||||
"Forlorn Temple": lambda state: self.has_vertical(state) and state.has_all(set(PHOBEKINS), self.player),
|
||||
"Searing Crags Upper": self.true,
|
||||
"Glacial Peak": self.true,
|
||||
"Elemental Skylands": lambda state: state.has("Fairy Bottle", self.player) or self.has_windmill(state),
|
||||
})
|
||||
|
||||
self.location_rules.update({
|
||||
"Howling Grotto Seal - Windy Saws and Balls": self.true,
|
||||
"Glacial Peak Seal - Projectile Spike Pit": self.true,
|
||||
"Claustro": self.has_wingsuit,
|
||||
"Elemental Skylands Seal - Water": self.true,
|
||||
"Elemental Skylands Seal - Fire": self.true,
|
||||
"Earth Mega Shard": self.true,
|
||||
"Water Mega Shard": self.true,
|
||||
})
|
||||
|
||||
self.extra_rules = {
|
||||
@@ -156,6 +169,8 @@ class MessengerHardRules(MessengerRules):
|
||||
for loc, rule in self.extra_rules.items():
|
||||
if not self.world.multiworld.shuffle_seals[self.player] and "Seal" in loc:
|
||||
continue
|
||||
if not self.world.multiworld.shuffle_shards[self.player] and "Shard" in loc:
|
||||
continue
|
||||
add_rule(self.world.multiworld.get_location(loc, self.player), rule, "or")
|
||||
|
||||
|
||||
@@ -166,7 +181,8 @@ class MessengerChallengeRules(MessengerHardRules):
|
||||
self.region_rules.update({
|
||||
"Forlorn Temple": lambda state: (self.has_vertical(state) and state.has_all(set(PHOBEKINS), self.player))
|
||||
or state.has_all({"Wingsuit", "Windmill Shuriken"}, self.player),
|
||||
"Elemental Skylands": lambda state: self.has_wingsuit(state) or state.has("Fairy Bottle", self.player),
|
||||
"Elemental Skylands": lambda state: self.has_wingsuit(state) or state.has("Fairy Bottle", self.player)
|
||||
or self.has_windmill(state),
|
||||
})
|
||||
|
||||
self.location_rules.update({
|
||||
@@ -220,6 +236,6 @@ def set_self_locking_items(multiworld: MultiWorld, player: int) -> None:
|
||||
allow_self_locking_items(multiworld.get_location("Key of Courage", player), "Demon King Crown")
|
||||
|
||||
# add these locations when seals aren't shuffled
|
||||
if not multiworld.shuffle_seals[player]:
|
||||
allow_self_locking_items(multiworld.get_region("Cloud Ruins", player), "Ruxxtin's Amulet")
|
||||
if not multiworld.shuffle_seals[player] and not multiworld.shuffle_shards[player]:
|
||||
allow_self_locking_items(multiworld.get_region("Cloud Ruins Right", player), "Ruxxtin's Amulet")
|
||||
allow_self_locking_items(multiworld.get_region("Forlorn Temple", player), *PHOBEKINS)
|
||||
|
||||
Reference in New Issue
Block a user