812 lines
		
	
	
		
			37 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			812 lines
		
	
	
		
			37 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								from . import CVCotMTestBase
							 | 
						||
| 
								 | 
							
								from ..data import iname, lname
							 | 
						||
| 
								 | 
							
								from ..options import IronMaidenBehavior
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class CatacombSphere1Test(CVCotMTestBase):
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_always_accessible(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.cc4))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.cc8))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.cc9))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.cc10))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.cc13))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.cc14))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.cc16))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.cc20))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.cc22))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.cc24))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class DoubleTest(CVCotMTestBase):
							 | 
						||
| 
								 | 
							
								    options = {
							 | 
						||
| 
								 | 
							
								        "iron_maiden_behavior": IronMaidenBehavior.option_start_broken,
							 | 
						||
| 
								 | 
							
								        "nerf_roc_wing": True,
							 | 
						||
| 
								 | 
							
								        "ignore_cleansing": True
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_double_only(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.cc3))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.cc3b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.cc14b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.cc25))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Catacomb to Stairway"))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Stairway to Audience"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.double])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.cc3))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.cc14b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.cc25))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Catacomb to Stairway"))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Stairway to Audience"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        # Jump-locked things that Double still shouldn't be able to reach.
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.sr3))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.cc3b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.cc8b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.as4))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar14b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar17b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar19))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar26))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar30))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar30b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ow0))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ow1))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.th3))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Audience to Machine Top"))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Audience to Chapel"))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Audience to Observation"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.heavy_ring, iname.tackle])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Escape the Gallery Pit"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_double_with_freeze(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.mercury, iname.serpent])
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.cc3b))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.double])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.cc3b))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_nerfed_roc_double_path(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.roc_wing, iname.tackle, iname.heavy_ring])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Audience to Chapel"))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Arena Passage"))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Dip Into Waterway End"))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Climb to Chapel Top"))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.cc8b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.cc3b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.as4))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar14b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar30))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar30b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ow0))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ct26))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ct26b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ug3b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.uw10))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.uw16b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.uy5))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.uy13))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.uy18))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.double])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Audience to Chapel"))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Arena Passage"))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Dip Into Waterway End"))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Climb to Chapel Top"))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.cc8b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.cc3b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.as4))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar14b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar30))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar30b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ow0))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ct26))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ct26b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ug3b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.uw10))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.uw16b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.uy5))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.uy13))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.uy18))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Audience to Observation"))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.sr3))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar26))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ow1))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.kick_boots])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Arena Passage"))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.cc3b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.as4))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ar14b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ar30))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ar30b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ow0))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ct26))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ct26b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ug3b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.uw10))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Audience to Observation"))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.sr3))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ar26))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ow1))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class TackleTest(CVCotMTestBase):
							 | 
						||
| 
								 | 
							
								    options = {
							 | 
						||
| 
								 | 
							
								        "iron_maiden_behavior": IronMaidenBehavior.option_start_broken,
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_tackle_only_in_catacomb(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.cc5))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.tackle])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.cc5))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_tackle_only_in_audience_room(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.double])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar11))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Audience to Machine Bottom"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.tackle])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ar11))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Audience to Machine Bottom"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_tackle_with_kick_boots(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.double, iname.kick_boots])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.mt14))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Gallery Upper to Lower"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.tackle])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.mt14))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Gallery Upper to Lower"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_tackle_with_heavy_ring(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.double, iname.heavy_ring])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar27))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ug8))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Into Warehouse Main"))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Gallery Lower to Upper"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.tackle])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ar27))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ug8))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Into Warehouse Main"))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Gallery Lower to Upper"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_tackle_with_roc_wing(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.roc_wing])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar26))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.tackle])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ar26))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class KickBootsTest(CVCotMTestBase):
							 | 
						||
| 
								 | 
							
								    options = {
							 | 
						||
| 
								 | 
							
								        "iron_maiden_behavior": IronMaidenBehavior.option_start_broken,
							 | 
						||
| 
								 | 
							
								        "nerf_roc_wing": True,
							 | 
						||
| 
								 | 
							
								        "ignore_cleansing": True,
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_kick_boots_only_in_catacomb(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.cc8b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.cc14b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Catacomb to Stairway"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.kick_boots])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.cc8b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.cc14b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Catacomb to Stairway"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_kick_boots_only_in_audience_room(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.double])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar17b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar19))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Audience to Machine Top"))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Audience to Chapel"))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Climb to Chapel Top"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.kick_boots])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ar17b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ar19))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Audience to Machine Top"))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Audience to Chapel"))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Climb to Chapel Top"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_kick_boots_with_tackle(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.double, iname.tackle])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.mt3))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.mt6))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.kick_boots])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.mt3))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.mt6))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_kick_boots_with_freeze(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.double, iname.mars, iname.cockatrice])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_region("Underground Gallery Upper"))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.th3))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ug3))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ug3b))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.kick_boots])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_region("Underground Gallery Upper"))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.th3))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ug3))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ug3b))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_kick_boots_with_last_key(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.double, iname.last_key])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.cr1))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.kick_boots])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.cr1))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_nerfed_roc_kick_boots_path(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.roc_wing, iname.tackle, iname.heavy_ring])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Audience to Chapel"))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Arena Passage"))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Dip Into Waterway End"))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Climb to Chapel Top"))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.cc8b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.cc3b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.as4))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar14b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar30))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar30b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ow0))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ct26))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ct26b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ug3b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.uw10))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.uw16b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.uy5))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.uy13))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.uy18))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.kick_boots])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Audience to Chapel"))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Arena Passage"))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Dip Into Waterway End"))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Climb to Chapel Top"))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.cc8b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.cc3b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.as4))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ar14b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ar30))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ar30b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ow0))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ct26))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ct26b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ug3b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.uw10))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.uw16b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.uy5))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.uy13))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.uy18))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Audience to Observation"))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.sr3))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar26))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ow1))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.double])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.uw10))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Audience to Observation"))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.sr3))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ar26))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ow1))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class HeavyRingTest(CVCotMTestBase):
							 | 
						||
| 
								 | 
							
								    options = {
							 | 
						||
| 
								 | 
							
								        "iron_maiden_behavior": IronMaidenBehavior.option_start_broken
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_heavy_ring_only_in_catacomb(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.cc1))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.heavy_ring])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.cc1))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_heavy_ring_only_in_audience_room(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.double])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar9))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Audience to Gallery"))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Audience to Warehouse"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.heavy_ring])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ar9))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Audience to Gallery"))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Audience to Warehouse"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_heavy_ring_with_tackle(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.double, iname.tackle])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar27))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Into Warehouse Main"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.heavy_ring])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ar27))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Into Warehouse Main"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_heavy_ring_with_kick_boots(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.double, iname.kick_boots])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ct4))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ct10))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ug1))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ug2))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.heavy_ring])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ct4))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ct10))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ug1))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ug2))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_heavy_ring_with_roc_wing(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.roc_wing])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Arena Passage"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.heavy_ring])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Arena Passage"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class CleansingTest(CVCotMTestBase):
							 | 
						||
| 
								 | 
							
								    options = {
							 | 
						||
| 
								 | 
							
								        "iron_maiden_behavior": IronMaidenBehavior.option_start_broken
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_cleansing_only(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.double])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Into Waterway Main"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.cleansing])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Into Waterway Main"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_cleansing_with_roc(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.roc_wing])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.uy12b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.uy17))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Dip Into Waterway End"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.cleansing])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.uy12b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.uy17))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class IgnoredCleansingTest(CVCotMTestBase):
							 | 
						||
| 
								 | 
							
								    options = {
							 | 
						||
| 
								 | 
							
								        "iron_maiden_behavior": IronMaidenBehavior.option_start_broken,
							 | 
						||
| 
								 | 
							
								        "ignore_cleansing": True
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_ignored_cleansing(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Into Waterway Main"))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.uy12b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.uy17))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.double])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Into Waterway Main"))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.uy12b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.uy17))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class UnNerfedRocTest(CVCotMTestBase):
							 | 
						||
| 
								 | 
							
								    options = {
							 | 
						||
| 
								 | 
							
								        "iron_maiden_behavior": IronMaidenBehavior.option_start_broken
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_roc_wing_only(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.sr3))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.cc3))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.cc3b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.cc8b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.cc14b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.cc25))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.as4))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar14b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar17b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar19))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar30))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar30b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ow0))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ow1))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.th3))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ct1))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ct13))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ug3))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ug3b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Catacomb to Stairway"))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Stairway to Audience"))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Audience to Machine Top"))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Audience to Chapel"))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Audience to Observation"))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Dip Into Waterway End"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.roc_wing])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.sr3))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.cc3))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.cc3b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.cc8b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.cc14b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.cc25))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.as4))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ar14b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ar17b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ar19))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ar30))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ar30b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ow0))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ow1))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.th3))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ct1))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ct13))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ug3))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ug3b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Catacomb to Stairway"))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Stairway to Audience"))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Audience to Machine Top"))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Audience to Chapel"))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Audience to Observation"))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Dip Into Waterway End"))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Arena Passage"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_roc_wing_exclusive_accessibility(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.double, iname.tackle, iname.kick_boots, iname.heavy_ring, iname.cleansing,
							 | 
						||
| 
								 | 
							
								                              iname.last_key, iname.mercury, iname.cockatrice])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.sr3))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.as4))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar14b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar26))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar30))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar30b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ow0))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.uw10))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.uw16b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.uy8))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.uy13))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.uy18))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.dracula))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Audience to Observation"))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Arena Passage"))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Dip Into Waterway End"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.roc_wing])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.sr3))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.as4))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ar14b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ar26))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ar30))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ar30b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ow0))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.uw10))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.uw16b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.uy8))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.uy13))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.uy18))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.dracula))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Audience to Observation"))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Arena Passage"))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Dip Into Waterway End"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class NerfedRocTest(CVCotMTestBase):
							 | 
						||
| 
								 | 
							
								    options = {
							 | 
						||
| 
								 | 
							
								        "iron_maiden_behavior": IronMaidenBehavior.option_start_broken,
							 | 
						||
| 
								 | 
							
								        "nerf_roc_wing": True,
							 | 
						||
| 
								 | 
							
								        "ignore_cleansing": True
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_nerfed_roc_without_double_or_kick(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.tackle, iname.heavy_ring, iname.last_key])
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.cc3))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.cc3b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.cc14b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.cc25))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Catacomb to Stairway"))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Stairway to Audience"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.roc_wing])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        # Jump-locked things inside Catacomb that just Roc Wing should be able to reach while nerfed.
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.cc3))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.cc14b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.cc25))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Catacomb to Stairway"))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Stairway to Audience"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        # Jump-locked things outside Catacomb that just Roc Wing should be able to reach while nerfed.
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ar17b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ar19))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.th3))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.mt3))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.mt6))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ct1))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ct13))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ug3))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.uw14))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.uy8))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.cr1))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.dracula))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Audience to Machine Top"))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Escape the Gallery Pit"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        # Jump-locked things outside Catacomb that just Roc Wing shouldn't be able to reach while nerfed.
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.sr3))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.cc3b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.cc8b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.as4))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar14b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar30))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar30b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ow0))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ow1))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ct26))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ct26b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ug3b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.uw10))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.uw16b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.uy5))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.uy13))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.uy18))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Audience to Chapel"))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Audience to Observation"))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Climb to Chapel Top"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.double, iname.kick_boots])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.sr3))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.cc3b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.cc8b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.as4))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ar14b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ar30))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ar30b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ow0))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ow1))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ct26))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ct26b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ug3b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.uw10))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.uw16b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.uy5))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.uy13))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.uy18))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Audience to Chapel"))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Audience to Observation"))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Climb to Chapel Top"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class LastKeyTest(CVCotMTestBase):
							 | 
						||
| 
								 | 
							
								    options = {
							 | 
						||
| 
								 | 
							
								        "required_last_keys": 9,
							 | 
						||
| 
								 | 
							
								        "available_last_keys": 9
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_last_keys(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.double])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Ceremonial Door"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect([self.get_item_by_name(iname.last_key)] * 1)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Ceremonial Door"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect([self.get_item_by_name(iname.last_key)] * 7)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Ceremonial Door"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect([self.get_item_by_name(iname.last_key)] * 1)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Ceremonial Door"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class FreezeTest(CVCotMTestBase):
							 | 
						||
| 
								 | 
							
								    options = {
							 | 
						||
| 
								 | 
							
								        "iron_maiden_behavior": IronMaidenBehavior.option_start_broken,
							 | 
						||
| 
								 | 
							
								        "nerf_roc_wing": True
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_freeze_only_in_audience_room(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.double])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.cc3b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ow1))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.mars, iname.serpent])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.cc3b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ow1))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_freeze_with_kick_boots(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.double, iname.kick_boots])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.th3))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ct1))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ct13))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ug3))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ug3b))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.mercury, iname.serpent])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.th3))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ct1))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ct13))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ug3))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ug3b))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_freeze_with_heavy_ring_and_tackle(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.double, iname.heavy_ring, iname.tackle])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.uw14))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.mercury, iname.cockatrice])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.uw14))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_freeze_with_cleansing(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.double, iname.cleansing])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.uy5))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.mercury, iname.serpent])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.uy5))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_freeze_with_nerfed_roc(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.roc_wing, iname.heavy_ring, iname.tackle])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Audience to Chapel"))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.uw16b))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.mercury, iname.cockatrice])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Audience to Chapel"))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.uw16b))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        # Freeze spots requiring Double
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar30))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar30b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ct26))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ct26b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.uw10))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.double])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ar30))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ar30b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ct26))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ct26b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.uw10))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.remove_by_name([iname.double])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        # Freeze spots requiring Kick Boots
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar30))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar30b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ct26))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ct26b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.uw10))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.kick_boots])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ar30))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ar30b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ct26))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ct26b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.uw10))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_freeze_with_nerfed_roc_and_double(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.roc_wing, iname.heavy_ring, iname.tackle, iname.double])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar30))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ar30b))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ct26))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.ct26b))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.mars, iname.cockatrice])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ar30))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ar30b))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ct26))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.ct26b))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_freeze_with_nerfed_roc_and_kick_boots(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.roc_wing, iname.heavy_ring, iname.tackle, iname.kick_boots])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_location(lname.uw10))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.mars, iname.serpent])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_location(lname.uw10))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class VanillaMaidensTest(CVCotMTestBase):
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_waterway_and_right_gallery_maidens(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.double])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Audience to Waterway"))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Corridor to Gallery"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        # Gives access to Chapel Tower wherein we collect the locked Maiden Detonator item.
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.kick_boots])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Audience to Waterway"))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Corridor to Gallery"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_left_gallery_maiden(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.double, iname.heavy_ring])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Audience to Gallery"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.roc_wing])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Audience to Gallery"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class MaidenDetonatorInPoolTest(CVCotMTestBase):
							 | 
						||
| 
								 | 
							
								    options = {
							 | 
						||
| 
								 | 
							
								        "iron_maiden_behavior": IronMaidenBehavior.option_detonator_in_pool
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_maiden_detonator(self) -> None:
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.double, iname.heavy_ring, iname.kick_boots])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Audience to Waterway"))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Corridor to Gallery"))
							 | 
						||
| 
								 | 
							
								        self.assertFalse(self.can_reach_entrance("Audience to Gallery"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.collect_by_name([iname.ironmaidens])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Audience to Waterway"))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Corridor to Gallery"))
							 | 
						||
| 
								 | 
							
								        self.assertTrue(self.can_reach_entrance("Audience to Gallery"))
							 |