forked from mirror/Archipelago
Some checks failed
Analyze modified files / flake8 (push) Failing after 2m28s
Build / build-win (push) Has been cancelled
Build / build-ubuntu2204 (push) Has been cancelled
ctest / Test C++ ubuntu-latest (push) Has been cancelled
ctest / Test C++ windows-latest (push) Has been cancelled
Analyze modified files / mypy (push) Has been cancelled
Build and Publish Docker Images / Push Docker image to Docker Hub (push) Successful in 5m4s
Native Code Static Analysis / scan-build (push) Failing after 5m2s
type check / pyright (push) Successful in 1m7s
unittests / Test Python 3.11.2 ubuntu-latest (push) Failing after 16m23s
unittests / Test Python 3.12 ubuntu-latest (push) Failing after 28m19s
unittests / Test Python 3.13 ubuntu-latest (push) Failing after 14m49s
unittests / Test hosting with 3.13 on ubuntu-latest (push) Successful in 5m0s
unittests / Test Python 3.13 macos-latest (push) Has been cancelled
unittests / Test Python 3.11 windows-latest (push) Has been cancelled
unittests / Test Python 3.13 windows-latest (push) Has been cancelled
178 lines
6.9 KiB
Python
178 lines
6.9 KiB
Python
from BaseClasses import Region
|
|
|
|
from ..base_classes import D3DLevel
|
|
|
|
|
|
class E2L3(D3DLevel):
|
|
name = "Warp Factor"
|
|
levelnum = 2
|
|
volumenum = 1
|
|
keys = ["Blue", "Yellow"]
|
|
location_defs = [
|
|
{"name": "Engine Room Atomic Health", "id": 9, "type": "sprite", "density": 4},
|
|
{"name": "Engine Room Shotgun", "id": 10, "type": "sprite", "density": 4},
|
|
{"name": "MP Drone Room Holo Duke", "id": 13, "type": "sprite", "density": 5},
|
|
{"name": "Blue Key Card", "id": 14, "type": "sprite", "density": 0},
|
|
{"name": "Main Room Shrinker", "id": 47, "type": "sprite", "density": 0},
|
|
{"name": "Engine Room Armor", "id": 61, "type": "sprite", "density": 0},
|
|
{"name": "MP Control Room Jetpack", "id": 91, "type": "sprite", "density": 5},
|
|
{"name": "Ready Room Medkit", "id": 96, "type": "sprite", "density": 3},
|
|
{"name": "Control Room Devastator", "id": 135, "type": "sprite", "density": 0},
|
|
{"name": "Engine Room Tripmine", "id": 162, "type": "sprite", "density": 3},
|
|
{"name": "Start Chaingun", "id": 177, "type": "sprite", "density": 0},
|
|
{"name": "Wall Panel Freezethrower", "id": 182, "type": "sprite", "density": 0},
|
|
{"name": "Wall Panel Pipebombs", "id": 226, "type": "sprite", "density": 0},
|
|
{"name": "Reactor Atomic Health 1", "id": 274, "type": "sprite", "density": 0},
|
|
{"name": "Reactor Atomic Health 2", "id": 275, "type": "sprite", "density": 3},
|
|
{"name": "Control Room Medkit", "id": 284, "type": "sprite", "density": 0},
|
|
{"name": "Yellow Key Card", "id": 316, "type": "sprite", "density": 0},
|
|
{"name": "Control Room Holo Duke", "id": 496, "type": "sprite", "density": 0},
|
|
{
|
|
"name": "Conveyor Night Vision Goggles",
|
|
"id": 694,
|
|
"type": "sprite",
|
|
"density": 0,
|
|
},
|
|
{"name": "Control Room Steroids", "id": 695, "type": "sprite", "density": 0},
|
|
{
|
|
"name": "Engine Room Burrowed Atomic Health 1",
|
|
"id": 699,
|
|
"type": "sprite",
|
|
"density": 0,
|
|
},
|
|
{"name": "Drone Room Medkit", "id": 725, "type": "sprite", "density": 0},
|
|
{
|
|
"name": "Engine Room Burrowed Atomic Health 2",
|
|
"id": 766,
|
|
"type": "sprite",
|
|
"density": 3,
|
|
},
|
|
{
|
|
"name": "Engine Room Burrowed Atomic Health 3",
|
|
"id": 767,
|
|
"type": "sprite",
|
|
"density": 4,
|
|
},
|
|
{"name": "Main Room Shotgun", "id": 768, "type": "sprite", "density": 0},
|
|
{"name": "Control Room RPG", "id": 772, "type": "sprite", "density": 4},
|
|
{"name": "Left Wing RPG", "id": 782, "type": "sprite", "density": 0},
|
|
{"name": "MP Control Room Armor", "id": 799, "type": "sprite", "density": 5},
|
|
{"name": "MP Main Room Chaingun", "id": 801, "type": "sprite", "density": 5},
|
|
{
|
|
"name": "Really Ready Room Devastator",
|
|
"id": 817,
|
|
"type": "sprite",
|
|
"density": 2,
|
|
},
|
|
{
|
|
"name": "Really Ready Room Freezethrower",
|
|
"id": 818,
|
|
"type": "sprite",
|
|
"density": 4,
|
|
},
|
|
{"name": "Bridge Chaingun", "id": 819, "type": "sprite", "density": 3},
|
|
{"name": "Bridge Pipebombs", "id": 820, "type": "sprite", "density": 4},
|
|
{"name": "Bridge RPG", "id": 821, "type": "sprite", "density": 4},
|
|
{"name": "Bridge Atomic Health", "id": 822, "type": "sprite", "density": 2},
|
|
{"name": "Secret Enterprise Bridge", "id": 42, "type": "sector"},
|
|
{"name": "Secret Really Ready Room", "id": 297, "type": "sector"},
|
|
{"name": "Exit", "id": 0, "type": "exit"},
|
|
]
|
|
events = ["Disable Forcefield"]
|
|
|
|
def main_region(self) -> Region:
|
|
r = self.rules
|
|
ret = self.region(
|
|
self.name,
|
|
[
|
|
"Start Chaingun",
|
|
],
|
|
)
|
|
|
|
past_door = self.region(
|
|
"Past Door",
|
|
[
|
|
"Wall Panel Freezethrower",
|
|
"Wall Panel Pipebombs",
|
|
"Drone Room Medkit",
|
|
"MP Drone Room Holo Duke",
|
|
"Engine Room Atomic Health",
|
|
"Engine Room Shotgun",
|
|
"Engine Room Tripmine",
|
|
"Blue Key Card",
|
|
"Engine Room Armor",
|
|
"Main Room Shrinker",
|
|
"MP Main Room Chaingun",
|
|
"Main Room Shotgun",
|
|
],
|
|
)
|
|
self.connect(
|
|
ret,
|
|
past_door,
|
|
r.can_open
|
|
# Door seems to be too thick to tripclip past without getting squished :(
|
|
# | (r.glitched & r.tripmine & r.fast_sprint & r.can_jump & r.difficulty("extreme")),
|
|
)
|
|
|
|
self.restrict("Blue Key Card", r.can_crouch)
|
|
# Can walk on top of a flying trooper. Not fun, but possible
|
|
self.restrict("Engine Room Armor", r.jump)
|
|
|
|
wings = self.region(
|
|
"Outer Wings",
|
|
[
|
|
"Yellow Key Card", # Auto closing wings clip you up trivially
|
|
"Engine Room Burrowed Atomic Health 1",
|
|
"Engine Room Burrowed Atomic Health 2",
|
|
"Engine Room Burrowed Atomic Health 3",
|
|
"Left Wing RPG",
|
|
],
|
|
)
|
|
self.connect(past_door, wings, self.blue_key)
|
|
|
|
# At this point both can_use and can_open are already required
|
|
control_room = self.region(
|
|
"Control Room",
|
|
[
|
|
"Conveyor Night Vision Goggles",
|
|
"Control Room Devastator",
|
|
"Disable Forcefield",
|
|
"MP Control Room Armor",
|
|
"MP Control Room Jetpack",
|
|
"Control Room Holo Duke",
|
|
"Control Room RPG",
|
|
"Control Room Medkit",
|
|
"Control Room Steroids",
|
|
"Bridge Chaingun",
|
|
"Secret Enterprise Bridge",
|
|
"Bridge RPG",
|
|
"Bridge Pipebombs",
|
|
"Bridge Atomic Health",
|
|
"Ready Room Medkit",
|
|
"Secret Really Ready Room", # can_use
|
|
"Really Ready Room Devastator", # can_use
|
|
"Really Ready Room Freezethrower", # can_use
|
|
],
|
|
)
|
|
self.restrict("Control Room Steroids", r.jump)
|
|
self.connect(past_door, control_room, self.yellow_key)
|
|
|
|
reactor = self.region("Reactor", ["Exit"])
|
|
self.connect(
|
|
past_door,
|
|
reactor,
|
|
self.event("Disable Forcefield")
|
|
| (r.difficulty("hard") & (r.can_crouch & r.sprint)),
|
|
)
|
|
self.restrict("Exit", r.can_use)
|
|
|
|
reactor_top = self.region(
|
|
"Reactor Top", ["Reactor Atomic Health 1", "Reactor Atomic Health 2"]
|
|
)
|
|
self.connect(
|
|
reactor,
|
|
reactor_top,
|
|
r.jetpack(50) | (r.sr50 & r.glitched),
|
|
)
|
|
return ret
|