52 lines
2.1 KiB
Python
52 lines
2.1 KiB
Python
import typing
|
|
from . import SoETestBase
|
|
|
|
|
|
class OoBTest(SoETestBase):
|
|
"""Tests that 'on' doesn't put out-of-bounds in logic. This is also the test base for OoB in logic."""
|
|
options: typing.Dict[str, typing.Any] = {"out_of_bounds": "on"}
|
|
|
|
def testOoBAccess(self):
|
|
in_logic = self.options["out_of_bounds"] == "logic"
|
|
|
|
# some locations that just need a weapon + OoB
|
|
oob_reachable = [
|
|
"Aquagoth", "Sons of Sth.", "Mad Monk", "Magmar", # OoB can use volcano shop to skip rock skip
|
|
"Levitate", "Fireball", "Drain", "Speed",
|
|
"E. Crustacia #107", "Energy Core #285", "Vanilla Gauge #57",
|
|
]
|
|
# some locations that should still be unreachable
|
|
oob_unreachable = [
|
|
"Tiny", "Rimsala",
|
|
"Barrier", "Call Up", "Reflect", "Force Field", "Stop", # Stop guy doesn't spawn for the other entrances
|
|
"Pyramid bottom #118", "Tiny's hideout #160", "Tiny's hideout #161", "Greenhouse #275",
|
|
]
|
|
# OoB + Diamond Eyes
|
|
de_reachable = [
|
|
"Tiny's hideout #160",
|
|
]
|
|
# still unreachable
|
|
de_unreachable = [
|
|
"Tiny",
|
|
"Tiny's hideout #161",
|
|
]
|
|
|
|
self.assertLocationReachability(reachable=oob_reachable, unreachable=oob_unreachable, satisfied=False)
|
|
self.collect_by_name("Gladiator Sword")
|
|
self.assertLocationReachability(reachable=oob_reachable, unreachable=oob_unreachable, satisfied=in_logic)
|
|
self.collect_by_name("Diamond Eye")
|
|
self.assertLocationReachability(reachable=de_reachable, unreachable=de_unreachable, satisfied=in_logic)
|
|
|
|
def testOoBGoal(self):
|
|
# still need Energy Core with OoB if sequence breaks are not in logic
|
|
for item in ["Gladiator Sword", "Diamond Eye", "Wheel", "Gauge"]:
|
|
self.collect_by_name(item)
|
|
self.assertBeatable(False)
|
|
self.collect_by_name("Energy Core")
|
|
self.assertBeatable(True)
|
|
|
|
|
|
class OoBInLogicTest(OoBTest):
|
|
"""Tests that stuff that should be reachable/unreachable with out-of-bounds actually is."""
|
|
options: typing.Dict[str, typing.Any] = {"out_of_bounds": "logic"}
|