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:
		| @@ -3,12 +3,17 @@ from ..Constants import NOTES, PHOBEKINS | ||||
|  | ||||
|  | ||||
| class AccessTest(MessengerTestBase): | ||||
|     options = { | ||||
|         "shuffle_shards": "true", | ||||
|     } | ||||
|  | ||||
|     def testTabi(self) -> None: | ||||
|         """locations that hard require the Ninja Tabi""" | ||||
|         locations = ["Pyro", "Key of Chaos", "Underworld Seal - Sharp and Windy Climb", "Underworld Seal - Spike Wall", | ||||
|                      "Underworld Seal - Fireball Wave", "Underworld Seal - Rising Fanta", "Sun Crest", "Moon Crest", | ||||
|                      "Sunken Shrine Seal - Waterfall Paradise", "Sunken Shrine Seal - Tabi Gauntlet"] | ||||
|                      "Sunken Shrine Seal - Waterfall Paradise", "Sunken Shrine Seal - Tabi Gauntlet", | ||||
|                      "Mega Shard of the Moon", "Mega Shard of the Sun", "Under Entrance Mega Shard", | ||||
|                      "Hot Tub Mega Shard", "Projectile Pit Mega Shard"] | ||||
|         items = [["Ninja Tabi"]] | ||||
|         self.assertAccessDependency(locations, items) | ||||
|  | ||||
| @@ -17,7 +22,8 @@ class AccessTest(MessengerTestBase): | ||||
|         locations = ["Ninja Village Seal - Tree House", "Key of Hope", "Howling Grotto Seal - Crushing Pits", | ||||
|                      "Glacial Peak Seal - Ice Climbers", "Tower of Time Seal - Time Waster Seal", | ||||
|                      "Tower of Time Seal - Arcane Orbs", "Underworld Seal - Rising Fanta", "Key of Symbiosis", | ||||
|                      "Elemental Skylands Seal - Water", "Elemental Skylands Seal - Fire"] | ||||
|                      "Elemental Skylands Seal - Water", "Elemental Skylands Seal - Fire", "Earth Mega Shard", | ||||
|                      "Water Mega Shard"] | ||||
|         items = [["Rope Dart"]] | ||||
|         self.assertAccessDependency(locations, items) | ||||
|  | ||||
| @@ -35,7 +41,11 @@ class AccessTest(MessengerTestBase): | ||||
|                      "Tower of Time Seal - Lantern Climb", "Tower of Time Seal - Arcane Orbs", | ||||
|                      "Underworld Seal - Sharp and Windy Climb", "Underworld Seal - Fireball Wave", | ||||
|                      "Elemental Skylands Seal - Air", "Forlorn Temple Seal - Rocket Maze", | ||||
|                      "Forlorn Temple Seal - Rocket Sunset", "Astral Seed", "Astral Tea Leaves"] | ||||
|                      "Forlorn Temple Seal - Rocket Sunset", "Astral Seed", "Astral Tea Leaves", | ||||
|                      "Autumn Hills Mega Shard", "Hidden Entrance Mega Shard", "Sunny Day Mega Shard", | ||||
|                      "Down Under Mega Shard", "Catacombs Mega Shard", "Above Entrance Mega Shard", | ||||
|                      "Abandoned Mega Shard", "Time Loop Mega Shard", "Money Farm Room Mega Shard 1", | ||||
|                      "Money Farm Room Mega Shard 2", "Leaf Golem", "Ruxxtin", "Emerald Golem"] | ||||
|         items = [["Wingsuit"]] | ||||
|         self.assertAccessDependency(locations, items) | ||||
|  | ||||
| @@ -56,18 +66,26 @@ class AccessTest(MessengerTestBase): | ||||
|                      "Cloud Ruins Seal - Saw Pit", "Cloud Ruins Seal - Money Farm Room", | ||||
|                      "Tower of Time Seal - Lantern Climb", "Tower of Time Seal - Arcane Orbs", | ||||
|                      "Underworld Seal - Sharp and Windy Climb", "Underworld Seal - Fireball Wave", | ||||
|                      "Elemental Skylands Seal - Air", "Forlorn Temple Seal - Rocket Maze", "Forlorn Temple Seal - Rocket Sunset", | ||||
|                      "Power Thistle", "Key of Strength", "Glacial Peak Seal - Projectile Spike Pit", | ||||
|                      "Glacial Peak Seal - Glacial Air Swag", "Fairy Bottle", "Riviere Turquoise Seal - Flower Power", | ||||
|                      "Searing Crags Seal - Triple Ball Spinner", "Searing Crags Seal - Raining Rocks", | ||||
|                      "Searing Crags Seal - Rhythm Rocks", "Astral Seed", "Astral Tea Leaves", "Rescue Phantom"] | ||||
|                      "Elemental Skylands Seal - Air", "Forlorn Temple Seal - Rocket Maze", | ||||
|                      "Forlorn Temple Seal - Rocket Sunset", "Power Thistle", "Key of Strength", | ||||
|                      "Glacial Peak Seal - Projectile Spike Pit", "Glacial Peak Seal - Glacial Air Swag", | ||||
|                      "Fairy Bottle", "Riviere Turquoise Seal - Flower Power", "Searing Crags Seal - Triple Ball Spinner", | ||||
|                      "Searing Crags Seal - Raining Rocks", "Searing Crags Seal - Rhythm Rocks", "Astral Seed", | ||||
|                      "Astral Tea Leaves", "Rescue Phantom", "Autumn Hills Mega Shard", "Hidden Entrance Mega Shard", | ||||
|                      "Sunny Day Mega Shard", "Down Under Mega Shard", "Catacombs Mega Shard", | ||||
|                      "Above Entrance Mega Shard", "Abandoned Mega Shard", "Time Loop Mega Shard", | ||||
|                      "Searing Crags Mega Shard", "Glacial Peak Mega Shard", "Cloud Entrance Mega Shard", | ||||
|                      "Time Warp Mega Shard", "Money Farm Room Mega Shard 1", "Money Farm Room Mega Shard 2", | ||||
|                      "Quick Restock Mega Shard 1", "Quick Restock Mega Shard 2", "Earth Mega Shard", "Water Mega Shard", | ||||
|                      "Leaf Golem", "Ruxxtin", "Emerald Golem"] | ||||
|         items = [["Wingsuit", "Rope Dart"]] | ||||
|         self.assertAccessDependency(locations, items) | ||||
|  | ||||
|     def testAmulet(self) -> None: | ||||
|         """Locations that require Ruxxtin's Amulet""" | ||||
|         locations = ["Acro", "Cloud Ruins Seal - Ghost Pit", "Cloud Ruins Seal - Toothbrush Alley", | ||||
|                      "Cloud Ruins Seal - Saw Pit", "Cloud Ruins Seal - Money Farm Room"] | ||||
|                      "Cloud Ruins Seal - Saw Pit", "Cloud Ruins Seal - Money Farm Room", "Cloud Entrance Mega Shard", | ||||
|                      "Time Warp Mega Shard", "Money Farm Room Mega Shard 1", "Money Farm Room Mega Shard 2"] | ||||
|         # Cloud Ruins requires Ruxxtin's Amulet | ||||
|         items = [["Ruxxtin's Amulet"]] | ||||
|         self.assertAccessDependency(locations, items) | ||||
| @@ -75,7 +93,7 @@ class AccessTest(MessengerTestBase): | ||||
|     def testBottle(self) -> None: | ||||
|         """Elemental Skylands and Corrupted Future require the Fairy Bottle""" | ||||
|         locations = ["Key of Symbiosis", "Elemental Skylands Seal - Air", "Elemental Skylands Seal - Fire", | ||||
|                      "Elemental Skylands Seal - Water", "Key of Courage"] | ||||
|                      "Elemental Skylands Seal - Water", "Key of Courage", "Earth Mega Shard", "Water Mega Shard"] | ||||
|         items = [["Fairy Bottle"]] | ||||
|         self.assertAccessDependency(locations, items) | ||||
|  | ||||
|   | ||||
| @@ -16,21 +16,21 @@ class HardLogicTest(MessengerTestBase): | ||||
|             # ninja village | ||||
|             "Candle", "Astral Seed", "Ninja Village Seal - Tree House", "Astral Tea Leaves", | ||||
|             # autumn hills | ||||
|             "Climbing Claws", "Key of Hope", | ||||
|             "Climbing Claws", "Key of Hope", "Leaf Golem", | ||||
|             "Autumn Hills Seal - Trip Saws", "Autumn Hills Seal - Double Swing Saws", | ||||
|             "Autumn Hills Seal - Spike Ball Swing", "Autumn Hills Seal - Spike Ball Darts", | ||||
|             # forlorn temple | ||||
|             "Demon King Crown", | ||||
|             "Forlorn Temple Seal - Rocket Maze", "Forlorn Temple Seal - Rocket Sunset", | ||||
|             # catacombs | ||||
|             "Necro", "Ruxxtin's Amulet", | ||||
|             "Necro", "Ruxxtin's Amulet", "Ruxxtin", | ||||
|             "Catacombs Seal - Triple Spike Crushers", "Catacombs Seal - Crusher Gauntlet", "Catacombs Seal - Dirty Pond", | ||||
|             # bamboo creek | ||||
|             "Claustro", | ||||
|             "Bamboo Creek Seal - Spike Crushers and Doors", "Bamboo Creek Seal - Spike Ball Pits", | ||||
|             "Bamboo Creek Seal - Spike Crushers and Doors v2", | ||||
|             # howling grotto | ||||
|             "Howling Grotto Seal - Crushing Pits", "Howling Grotto Seal - Crushing Pits", | ||||
|             "Emerald Golem", "Howling Grotto Seal - Crushing Pits", "Howling Grotto Seal - Crushing Pits", | ||||
|             # glacial peak | ||||
|             "Glacial Peak Seal - Ice Climbers", | ||||
|             # cloud ruins | ||||
| @@ -41,7 +41,7 @@ class HardLogicTest(MessengerTestBase): | ||||
|             # riviere turquoise | ||||
|             "Fairy Bottle", "Riviere Turquoise Seal - Flower Power", | ||||
|             # elemental skylands | ||||
|             "Elemental Skylands Seal - Air", "Elemental Skylands Seal - Water", "Elemental Skylands Seal - Fire", | ||||
|             "Elemental Skylands Seal - Air", | ||||
|             # phantom | ||||
|             "Rescue Phantom", | ||||
|         ] | ||||
|   | ||||
| @@ -77,3 +77,33 @@ class ThirtyThirtySeals(MessengerTestBase): | ||||
|         required_seals = [seal for seal in total_seals if seal.classification == ItemClassification.progression_skip_balancing] | ||||
|         self.assertEqual(len(total_seals), 30) | ||||
|         self.assertEqual(len(required_seals), 10) | ||||
|  | ||||
|  | ||||
| class MaxSealsNoShards(MessengerTestBase): | ||||
|     options = { | ||||
|         "goal": "power_seal_hunt", | ||||
|         "total_seals": 85, | ||||
|     } | ||||
|  | ||||
|     def testSealsAmount(self) -> None: | ||||
|         """Should set total seals to 57 since shards aren't shuffled.""" | ||||
|         self.assertEqual(self.multiworld.total_seals[self.player], 85) | ||||
|         self.assertEqual(self.multiworld.worlds[self.player].total_seals, 57) | ||||
|  | ||||
|  | ||||
| class MaxSealsWithShards(MessengerTestBase): | ||||
|     options = { | ||||
|         "goal": "power_seal_hunt", | ||||
|         "total_seals": 85, | ||||
|         "shuffle_shards": "true", | ||||
|     } | ||||
|  | ||||
|     def testSealsAmount(self) -> None: | ||||
|         """Should have 85 seals in the pool with all required and be a valid seed.""" | ||||
|         self.assertEqual(self.multiworld.total_seals[self.player], 85) | ||||
|         self.assertEqual(self.multiworld.worlds[self.player].total_seals, 85) | ||||
|         self.assertEqual(self.multiworld.worlds[self.player].required_seals, 85) | ||||
|         total_seals = [seal for seal in self.multiworld.itempool if seal.name == "Power Seal"] | ||||
|         required_seals = [seal for seal in total_seals if seal.classification == ItemClassification.progression_skip_balancing] | ||||
|         self.assertEqual(len(total_seals), 85) | ||||
|         self.assertEqual(len(required_seals), 85) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 alwaysintreble
					alwaysintreble