Archipelago/worlds/witness/test/test_symbol_shuffle.py

75 lines
2.9 KiB
Python
Raw Normal View History

2024-07-06 11:40:55 +00:00
from ..test import WitnessMultiworldTestBase, WitnessTestBase
class TestSymbols(WitnessTestBase):
options = {
"early_symbol_item": False,
}
def test_progressive_symbols(self) -> None:
"""
Test that Dots & Full Dots are correctly replaced by 2x Progressive Dots,
and test that Dots puzzles and Full Dots puzzles require 1 and 2 copies of this item respectively.
"""
progressive_dots = self.get_items_by_name("Progressive Dots")
self.assertEqual(len(progressive_dots), 2)
self.assertFalse(self.multiworld.state.can_reach("Outside Tutorial Shed Row 5", "Location", self.player))
self.assertFalse(
self.multiworld.state.can_reach("Outside Tutorial Outpost Entry Panel", "Location", self.player)
)
self.collect(progressive_dots.pop())
self.assertTrue(self.multiworld.state.can_reach("Outside Tutorial Shed Row 5", "Location", self.player))
self.assertFalse(
self.multiworld.state.can_reach("Outside Tutorial Outpost Entry Panel", "Location", self.player)
)
self.collect(progressive_dots.pop())
self.assertTrue(self.multiworld.state.can_reach("Outside Tutorial Shed Row 5", "Location", self.player))
self.assertTrue(
self.multiworld.state.can_reach("Outside Tutorial Outpost Entry Panel", "Location", self.player)
)
class TestSymbolRequirementsMultiworld(WitnessMultiworldTestBase):
options_per_world = [
{
"puzzle_randomization": "sigma_normal",
},
{
"puzzle_randomization": "sigma_expert",
},
{
"puzzle_randomization": "none",
},
]
common_options = {
"shuffle_discarded_panels": True,
"early_symbol_item": False,
}
def test_arrows_exist_and_are_required_in_expert_seeds_only(self) -> None:
"""
In sigma_expert, Discarded Panels require Arrows.
In sigma_normal, Discarded Panels require Triangles, and Arrows shouldn't exist at all as an item.
"""
with self.subTest("Test that Arrows exist only in the expert seed."):
self.assertFalse(self.get_items_by_name("Arrows", 1))
self.assertTrue(self.get_items_by_name("Arrows", 2))
self.assertFalse(self.get_items_by_name("Arrows", 3))
with self.subTest("Test that Discards ask for Triangles in normal, but Arrows in expert."):
desert_discard = "0x17CE7"
triangles = frozenset({frozenset({"Triangles"})})
arrows = frozenset({frozenset({"Arrows"})})
self.assertEqual(self.multiworld.worlds[1].player_logic.REQUIREMENTS_BY_HEX[desert_discard], triangles)
self.assertEqual(self.multiworld.worlds[2].player_logic.REQUIREMENTS_BY_HEX[desert_discard], arrows)
self.assertEqual(self.multiworld.worlds[3].player_logic.REQUIREMENTS_BY_HEX[desert_discard], triangles)