| 
									
										
										
										
											2024-07-06 13:40:55 +02: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", | 
					
						
							|  |  |  |         }, | 
					
						
							| 
									
										
										
										
											2024-09-05 17:10:09 +02:00
										 |  |  |         { | 
					
						
							|  |  |  |             "puzzle_randomization": "umbra_variety", | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2024-07-06 13:40:55 +02:00
										 |  |  |     ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     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)) | 
					
						
							| 
									
										
										
										
											2024-09-05 17:10:09 +02:00
										 |  |  |             self.assertTrue(self.get_items_by_name("Arrows", 4)) | 
					
						
							| 
									
										
										
										
											2024-07-06 13:40:55 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         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"})}) | 
					
						
							| 
									
										
										
										
											2024-09-05 17:10:09 +02:00
										 |  |  |             both = frozenset({frozenset({"Triangles", "Arrows"})}) | 
					
						
							| 
									
										
										
										
											2024-07-06 13:40:55 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |             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) | 
					
						
							| 
									
										
										
										
											2024-09-05 17:10:09 +02:00
										 |  |  |             self.assertEqual(self.multiworld.worlds[4].player_logic.REQUIREMENTS_BY_HEX[desert_discard], both) |