|  | 
| 2 | 2 | 
 | 
| 3 | 3 | from . import MM2TestBase | 
| 4 | 4 | from ..options import bosses | 
|  | 5 | +from ..rules import minimum_weakness_requirement | 
| 5 | 6 | 
 | 
| 6 | 7 | 
 | 
| 7 |  | -# Need to figure out how this test should work | 
| 8 | 8 | def validate_wily_5(base: MM2TestBase) -> None: | 
| 9 | 9 |     world = base.multiworld.worlds[base.player] | 
| 10 | 10 |     weapon_damage = world.weapon_damage | 
| @@ -67,38 +67,54 @@ def validate_wily_5(base: MM2TestBase) -> None: | 
| 67 | 67 |                 weapon_weight.pop(wp) | 
| 68 | 68 | 
 | 
| 69 | 69 | 
 | 
| 70 |  | -class StrictWeaknessTests(MM2TestBase): | 
|  | 70 | +class WeaknessTests(MM2TestBase): | 
| 71 | 71 |     options = { | 
| 72 |  | -        "strict_weakness": True, | 
| 73 | 72 |         "yoku_jumps": True, | 
| 74 |  | -        "enable_lasers": True | 
|  | 73 | +        "enable_lasers": True, | 
| 75 | 74 |     } | 
| 76 |  | - | 
| 77 | 75 |     def test_that_every_boss_has_a_weakness(self) -> None: | 
| 78 | 76 |         world = self.multiworld.worlds[self.player] | 
| 79 | 77 |         weapon_damage = world.weapon_damage | 
| 80 | 78 |         for boss in range(14): | 
| 81 |  | -            if not any(weapon_damage[weapon][boss] for weapon in range(9)): | 
|  | 79 | +            if not any(weapon_damage[weapon][boss] >= minimum_weakness_requirement[weapon] for weapon in range(9)): | 
| 82 | 80 |                 self.fail(f"Boss {boss} generated without weakness! Seed: {self.multiworld.seed}") | 
| 83 | 81 | 
 | 
| 84 | 82 |     def test_wily_5(self) -> None: | 
| 85 | 83 |         validate_wily_5(self) | 
| 86 | 84 | 
 | 
| 87 | 85 | 
 | 
| 88 |  | -class RandomStrictWeaknessTests(MM2TestBase): | 
|  | 86 | +class StrictWeaknessTests(WeaknessTests): | 
| 89 | 87 |     options = { | 
| 90 | 88 |         "strict_weakness": True, | 
|  | 89 | +        **WeaknessTests.options | 
|  | 90 | +    } | 
|  | 91 | + | 
|  | 92 | + | 
|  | 93 | +class RandomWeaknessTests(WeaknessTests): | 
|  | 94 | +    options = { | 
| 91 | 95 |         "random_weakness": "randomized", | 
| 92 |  | -        "yoku_jumps": True, | 
| 93 |  | -        "enable_lasers": True | 
|  | 96 | +        **WeaknessTests.options | 
| 94 | 97 |     } | 
| 95 | 98 | 
 | 
| 96 |  | -    def test_that_every_boss_has_a_weakness(self) -> None: | 
| 97 |  | -        world = self.multiworld.worlds[self.player] | 
| 98 |  | -        weapon_damage = world.weapon_damage | 
| 99 |  | -        for boss in range(14): | 
| 100 |  | -            if not any(weapon_damage[weapon][boss] for weapon in range(9)): | 
| 101 |  | -                self.fail(f"Boss {boss} generated without weakness! Seed: {self.multiworld.seed}") | 
| 102 | 99 | 
 | 
| 103 |  | -    def test_wily_5(self) -> None: | 
| 104 |  | -        validate_wily_5(self) | 
|  | 100 | +class ShuffledWeaknessTests(WeaknessTests): | 
|  | 101 | +    options = { | 
|  | 102 | +        "random_weakness": "shuffled", | 
|  | 103 | +        **WeaknessTests.options | 
|  | 104 | +    } | 
|  | 105 | + | 
|  | 106 | + | 
|  | 107 | +class RandomStrictWeaknessTests(WeaknessTests): | 
|  | 108 | +    options = { | 
|  | 109 | +        "strict_weakness": True, | 
|  | 110 | +        "random_weakness": "randomized", | 
|  | 111 | +        **WeaknessTests.options | 
|  | 112 | +    } | 
|  | 113 | + | 
|  | 114 | + | 
|  | 115 | +class ShuffledStrictWeaknessTests(WeaknessTests): | 
|  | 116 | +    options = { | 
|  | 117 | +        "strict_weakness": True, | 
|  | 118 | +        "random_weakness": "shuffled", | 
|  | 119 | +        **WeaknessTests.options | 
|  | 120 | +    } | 
0 commit comments