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)