diff --git a/helpers.json b/helpers.json index ac3f4d7127..c6873e826d 100644 --- a/helpers.json +++ b/helpers.json @@ -1267,6 +1267,22 @@ ]} ], "note": "There is a delay after using X-Ray before shooting, but the shot cannot be buffered, as it instantly despawns. Grapple can bypass this cooldown." + }, + { + "name": "h_heatedGrappleTeleportWallEscape", + "requires": [ + {"tech": "canGrappleTeleportWallEscape"}, + {"or": [ + {"and": [ + "Morph", + {"heatFrames": 90} + ]}, + {"and": [ + "canXRayClimb", + {"heatFrames": 120} + ]} + ]} + ] } ] }, diff --git a/region/brinstar/blue/Blue Brinstar Boulder Room.json b/region/brinstar/blue/Blue Brinstar Boulder Room.json index e064690b1b..a9eec9f795 100644 --- a/region/brinstar/blue/Blue Brinstar Boulder Room.json +++ b/region/brinstar/blue/Blue Brinstar Boulder Room.json @@ -659,6 +659,23 @@ "since you could just do a running jump through the door and airball." ] }, + { + "link": [2, 1], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[3, 12], [3, 13]] + } + }, + "requires": [ + {"or": [ + "canGrappleTeleportWallEscape", + {"doorUnlockedAtNode": 1} + ]} + ], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 27, "link": [2, 1], diff --git a/region/brinstar/blue/Construction Zone.json b/region/brinstar/blue/Construction Zone.json index a21b70d23b..0bd905c09e 100644 --- a/region/brinstar/blue/Construction Zone.json +++ b/region/brinstar/blue/Construction Zone.json @@ -866,6 +866,23 @@ "unlocksDoors": [{"types": ["ammo"], "requires": []}], "flashSuitChecked": true }, + { + "link": [3, 2], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[12, 12], [12, 13]] + } + }, + "requires": [ + {"or": [ + "canGrappleTeleportWallEscape", + {"doorUnlockedAtNode": 2} + ]} + ], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 34, "link": [3, 2], diff --git a/region/brinstar/green/Brinstar Pre-Map Room.json b/region/brinstar/green/Brinstar Pre-Map Room.json index 4ad1919f50..6e01a5c752 100644 --- a/region/brinstar/green/Brinstar Pre-Map Room.json +++ b/region/brinstar/green/Brinstar Pre-Map Room.json @@ -314,6 +314,23 @@ "requires": [], "flashSuitChecked": true }, + { + "link": [2, 1], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[3, 12], [3, 13]] + } + }, + "requires": [ + {"or": [ + "canGrappleTeleportWallEscape", + {"doorUnlockedAtNode": 1} + ]} + ], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 15, "link": [2, 1], diff --git a/region/brinstar/green/Etecoon Energy Tank Room.json b/region/brinstar/green/Etecoon Energy Tank Room.json index d031760543..bf5f81b16a 100644 --- a/region/brinstar/green/Etecoon Energy Tank Room.json +++ b/region/brinstar/green/Etecoon Energy Tank Room.json @@ -443,6 +443,23 @@ "Make small jumps to reset the camera then quickly kill the Beetom as it jumps at Samus, or precisely jump underneath it." ] }, + { + "link": [2, 1], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[3, 12], [3, 13]] + } + }, + "requires": [ + {"or": [ + "canGrappleTeleportWallEscape", + {"doorUnlockedAtNode": 1} + ]} + ], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 10, "link": [2, 1], @@ -1245,6 +1262,23 @@ "requires": [], "flashSuitChecked": true }, + { + "link": [4, 1], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[3, 12], [3, 13]] + } + }, + "requires": [ + {"or": [ + "canGrappleTeleportWallEscape", + {"doorUnlockedAtNode": 1} + ]} + ], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 39, "link": [4, 1], diff --git a/region/brinstar/green/Green Hill Zone.json b/region/brinstar/green/Green Hill Zone.json index ef16138573..55ed6fc89d 100644 --- a/region/brinstar/green/Green Hill Zone.json +++ b/region/brinstar/green/Green Hill Zone.json @@ -1262,6 +1262,23 @@ "requires": [], "flashSuitChecked": true }, + { + "link": [3, 1], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[3, 12], [3, 13]] + } + }, + "requires": [ + {"or": [ + "canGrappleTeleportWallEscape", + {"doorUnlockedAtNode": 1} + ]} + ], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 51, "link": [3, 1], diff --git a/region/brinstar/kraid/Warehouse Entrance.json b/region/brinstar/kraid/Warehouse Entrance.json index 474973a1dd..89297c7d4a 100644 --- a/region/brinstar/kraid/Warehouse Entrance.json +++ b/region/brinstar/kraid/Warehouse Entrance.json @@ -472,6 +472,23 @@ }, "requires": [] }, + { + "link": [3, 1], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[3, 12], [3, 13]] + } + }, + "requires": [ + {"or": [ + "canGrappleTeleportWallEscape", + {"doorUnlockedAtNode": 1} + ]} + ], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 22, "link": [3, 1], diff --git a/region/brinstar/pink/Dachora Room.json b/region/brinstar/pink/Dachora Room.json index 7a13b11a02..27b759ec66 100644 --- a/region/brinstar/pink/Dachora Room.json +++ b/region/brinstar/pink/Dachora Room.json @@ -474,6 +474,23 @@ "flashSuitChecked": true, "note": "Use a Power Bomb to destroy the bomb block wall." }, + { + "link": [1, 3], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[108, 12], [108, 13]] + } + }, + "requires": [ + {"or": [ + "canGrappleTeleportWallEscape", + {"doorUnlockedAtNode": 3} + ]} + ], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 18, "link": [1, 3], @@ -745,6 +762,23 @@ "A single IBJ is slow enough at the top to overload them before Samus can hit the blocks." ] }, + { + "link": [2, 3], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[108, 12], [108, 13]] + } + }, + "requires": [ + {"or": [ + "canGrappleTeleportWallEscape", + {"doorUnlockedAtNode": 3} + ]} + ], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 35, "link": [2, 3], @@ -919,6 +953,23 @@ }, "requires": [] }, + { + "link": [3, 1], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[3, 12], [3, 13]] + } + }, + "requires": [ + {"or": [ + "canGrappleTeleportWallEscape", + {"doorUnlockedAtNode": 1} + ]} + ], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 45, "link": [3, 1], diff --git a/region/brinstar/pink/Mission Impossible Room.json b/region/brinstar/pink/Mission Impossible Room.json index 27ed186b63..d9b0c6f5c1 100644 --- a/region/brinstar/pink/Mission Impossible Room.json +++ b/region/brinstar/pink/Mission Impossible Room.json @@ -671,6 +671,9 @@ "Then hold right to release Grapple while standing.", "Samus should get pushed up onto the floor.", "Run to the right and reach the door, taking just one hit from a Hopper." + ], + "devNote": [ + "This doesn't require `canGrappleTeleportWallEscape` tech, because the lower floor height makes it easier." ] }, { diff --git a/region/brinstar/pink/Pink Brinstar Wave Gate Room.json b/region/brinstar/pink/Pink Brinstar Wave Gate Room.json index 3eb832e6f4..fe74545129 100644 --- a/region/brinstar/pink/Pink Brinstar Wave Gate Room.json +++ b/region/brinstar/pink/Pink Brinstar Wave Gate Room.json @@ -1961,7 +1961,7 @@ "after just one pixel of Samus' feet are visible while crouching facing left, perform exactly 7 more X-Ray stand-ups.", "Use X-ray to face left, then run and jump to barely make it onto the ledge." ], - "devNote": ["3 pixels stuck in the door is X position 478 (0x1DE)."] + "devNote": ["3 pixels stuck in the door is X position $1DE."] }, { "id": 65, @@ -1987,9 +1987,9 @@ "Use X-ray to face left, then run and jump to barely make it onto the ledge." ], "devNote": [ - "9 pixels stuck in the door is X position 484 (0x1E4).", - "The correct Y positions for the jump are 193 (0xC1), 188 (0xBC), and 187 (0xBB)", - "FIXME: Some of the X position to the left (482, 483) could also work; maybe investigate which vertical positions work for them?" + "9 pixels stuck in the door is X position $1E4.", + "The correct Y positions for the jump are $C1, $BC, and $BB", + "FIXME: Some of the X position to the left ($1E2, $1E3) could also work; maybe investigate which vertical positions work for them?" ] }, { diff --git a/region/brinstar/pink/Waterway Energy Tank Room.json b/region/brinstar/pink/Waterway Energy Tank Room.json index ddfc0159e4..1105707291 100644 --- a/region/brinstar/pink/Waterway Energy Tank Room.json +++ b/region/brinstar/pink/Waterway Energy Tank Room.json @@ -470,6 +470,7 @@ "Samus should get pushed up onto the floor." ], "devNote": [ + "This doesn't require `canGrappleTeleportWallEscape` tech, because the lower floor height makes it easier.", "This strat has limited usefulness since you will be stuck behind the speed blocks.", "Potentially it could be useful if you could use a flash suit to get out (though this is not yet logic);", "for example, the item could be an Energy Tank and you could need its refill in order to spark out (rather than sparking in).", diff --git a/region/brinstar/red/Red Brinstar Fireflea Room.json b/region/brinstar/red/Red Brinstar Fireflea Room.json index f217bbe763..a967ede617 100644 --- a/region/brinstar/red/Red Brinstar Fireflea Room.json +++ b/region/brinstar/red/Red Brinstar Fireflea Room.json @@ -599,6 +599,23 @@ }, "requires": [] }, + { + "link": [2, 1], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[3, 12]] + } + }, + "requires": [ + {"or": [ + "canGrappleTeleportWallEscape", + {"doorUnlockedAtNode": 1} + ]} + ], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 28, "link": [2, 1], diff --git a/region/brinstar/red/Red Tower.json b/region/brinstar/red/Red Tower.json index e17158f0ef..3787cb7b70 100644 --- a/region/brinstar/red/Red Tower.json +++ b/region/brinstar/red/Red Tower.json @@ -1115,6 +1115,23 @@ "flashSuitChecked": true, "note": "Climb up 4 screens." }, + { + "link": [1, 5], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[3, 12], [3, 13]] + } + }, + "requires": [ + {"or": [ + "canGrappleTeleportWallEscape", + {"doorUnlockedAtNode": 5} + ]} + ], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 31, "link": [1, 5], @@ -1368,6 +1385,23 @@ "flashSuitChecked": true, "note": "Climb up 6 screens." }, + { + "link": [2, 5], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[3, 12], [3, 13]] + } + }, + "requires": [ + {"or": [ + "canGrappleTeleportWallEscape", + {"doorUnlockedAtNode": 5} + ]} + ], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 45, "link": [2, 5], @@ -1656,6 +1690,23 @@ }, "unlocksDoors": [{"types": ["ammo"], "requires": []}] }, + { + "link": [3, 5], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[3, 12], [3, 13]] + } + }, + "requires": [ + {"or": [ + "canGrappleTeleportWallEscape", + {"doorUnlockedAtNode": 5} + ]} + ], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 57, "link": [3, 5], @@ -2142,15 +2193,7 @@ } }, "requires": [ - {"notable": "Grapple Teleport Inside Wall"}, - "Morph" - ], - "note": [ - "After teleporting, Samus should be standing inside the wall.", - "Retract Grapple by pressing up, which will pull Samus down and right.", - "Hold right, and release Grapple while still holding right.", - "Perform a turn-around spin jump (to the left).", - "Then morph and roll out to the right." + "canGrappleTeleportWallEscape" ] }, { @@ -2953,17 +2996,6 @@ "and then it can be refrozen without needing to take damage to reposition it." ] }, - { - "id": 6, - "name": "Grapple Teleport Inside Wall", - "note": [ - "After teleporting, Samus should be standing inside the wall.", - "Retract Grapple by pressing up, which will pull Samus down and right.", - "Hold right, and release Grapple while still holding right.", - "Perform a turn-around spin jump (to the left).", - "Then morph and roll out to the right." - ] - }, { "id": 7, "name": "Midair HBJ", diff --git a/region/brinstar/roomDiagrams/pink_PinkBrinstarPowerBombRoom_60.png b/region/brinstar/roomDiagrams/pink_MissionImpossibleRoom_60.png similarity index 100% rename from region/brinstar/roomDiagrams/pink_PinkBrinstarPowerBombRoom_60.png rename to region/brinstar/roomDiagrams/pink_MissionImpossibleRoom_60.png diff --git a/region/crateria/central/Crateria Tube.json b/region/crateria/central/Crateria Tube.json index 5fba8661fe..f971fb0b19 100644 --- a/region/crateria/central/Crateria Tube.json +++ b/region/crateria/central/Crateria Tube.json @@ -269,7 +269,8 @@ "bypassesDoorShell": true, "flashSuitChecked": true, "devNote": [ - "Though there is no door shell here, this strat is included for completeness in case a randomizer adds a door shell where bypassing it could be useful." + "Though there is no door shell here, this strat is included for completeness in case a randomizer adds a door shell where bypassing it could be useful.", + "FIXME: add strat(s) entering with a grapple teleport and leaving with a grapple swing." ] }, { @@ -464,7 +465,8 @@ "bypassesDoorShell": true, "flashSuitChecked": true, "devNote": [ - "Though there is no door shell here, this strat is included for completeness in case a randomizer adds a door shell where bypassing it could be useful." + "Though there is no door shell here, this strat is included for completeness in case a randomizer adds a door shell where bypassing it could be useful.", + "FIXME: add strat(s) entering with a grapple teleport and leaving with a grapple swing." ] }, { diff --git a/region/crateria/central/Final Missile Bombway.json b/region/crateria/central/Final Missile Bombway.json index d428f0e958..81631cfdd0 100644 --- a/region/crateria/central/Final Missile Bombway.json +++ b/region/crateria/central/Final Missile Bombway.json @@ -325,6 +325,23 @@ "requires": [], "flashSuitChecked": true }, + { + "link": [2, 1], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[3, 12], [3, 13]] + } + }, + "requires": [ + {"or": [ + "canGrappleTeleportWallEscape", + {"doorUnlockedAtNode": 1} + ]} + ], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 12, "link": [2, 1], diff --git a/region/crateria/central/Parlor and Alcatraz.json b/region/crateria/central/Parlor and Alcatraz.json index 3fe807109a..895bd82471 100644 --- a/region/crateria/central/Parlor and Alcatraz.json +++ b/region/crateria/central/Parlor and Alcatraz.json @@ -1206,6 +1206,23 @@ "requires": [], "flashSuitChecked": true }, + { + "link": [4, 1], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[3, 12], [3, 13]] + } + }, + "requires": [ + {"or": [ + "canGrappleTeleportWallEscape", + {"doorUnlockedAtNode": 1} + ]} + ], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 39, "link": [4, 1], @@ -1437,6 +1454,23 @@ "requires": [], "flashSuitChecked": true }, + { + "link": [5, 1], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[3, 12], [3, 13]] + } + }, + "requires": [ + {"or": [ + "canGrappleTeleportWallEscape", + {"doorUnlockedAtNode": 1} + ]} + ], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 51, "link": [5, 1], @@ -1918,6 +1952,23 @@ "requires": [], "flashSuitChecked": true }, + { + "link": [6, 1], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[3, 12], [3, 13]] + } + }, + "requires": [ + {"or": [ + "canGrappleTeleportWallEscape", + {"doorUnlockedAtNode": 1} + ]} + ], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 73, "link": [6, 1], diff --git a/region/crateria/central/Pit Room.json b/region/crateria/central/Pit Room.json index a96efd7176..c2d8aa9bc8 100644 --- a/region/crateria/central/Pit Room.json +++ b/region/crateria/central/Pit Room.json @@ -637,7 +637,7 @@ { "id": 27, "link": [2, 3], - "name": "Grapple Teleport Door Lock Skip", + "name": "Grapple Teleport", "entranceCondition": { "comeInWithGrappleTeleport": { "blockPositions": [[2, 18], [2, 19], [2, 28], [2, 29]] diff --git a/region/crateria/west/Gauntlet Energy Tank Room.json b/region/crateria/west/Gauntlet Energy Tank Room.json index d0af9d3531..6c198f1a57 100644 --- a/region/crateria/west/Gauntlet Energy Tank Room.json +++ b/region/crateria/west/Gauntlet Energy Tank Room.json @@ -753,6 +753,23 @@ "requires": [], "flashSuitChecked": true }, + { + "link": [2, 1], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[3, 12], [3, 13]] + } + }, + "requires": [ + {"or": [ + "canGrappleTeleportWallEscape", + {"doorUnlockedAtNode": 1} + ]} + ], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 25, "link": [2, 1], diff --git a/region/crateria/west/Gauntlet Entrance.json b/region/crateria/west/Gauntlet Entrance.json index f071dd419e..c424ca8981 100644 --- a/region/crateria/west/Gauntlet Entrance.json +++ b/region/crateria/west/Gauntlet Entrance.json @@ -832,6 +832,23 @@ "requires": [], "flashSuitChecked": true }, + { + "link": [2, 1], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[3, 12], [3, 13]] + } + }, + "requires": [ + {"or": [ + "canGrappleTeleportWallEscape", + {"doorUnlockedAtNode": 1} + ]} + ], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 34, "link": [2, 1], diff --git a/region/crateria/west/Green Pirates Shaft.json b/region/crateria/west/Green Pirates Shaft.json index 0535e654f6..f812e5ba41 100644 --- a/region/crateria/west/Green Pirates Shaft.json +++ b/region/crateria/west/Green Pirates Shaft.json @@ -369,14 +369,18 @@ } }, "requires": [ - "Morph", + {"or": [ + "Morph", + "canTurnaroundAimCancel" + ]}, "canOffScreenMovement" ], "flashSuitChecked": true, "note": [ "After teleporting, press down while still grappling, to move Samus up and right by retracting the grapple.", "Release Grapple, angle-down, and shoot the blocks to the left and right of Samus.", - "Morph and roll to the right; then Samus will be able to unmorph and stand." + "Morph and roll to the right, and Samus will fall and be able to stand;", + "if Morph is unavailable, instead wiggle to the right using turnaround aim cancels." ] }, { diff --git a/region/lowernorfair/east/Lower Norfair Farming Room.json b/region/lowernorfair/east/Lower Norfair Farming Room.json index 963d1de3d6..6c1233f5ac 100644 --- a/region/lowernorfair/east/Lower Norfair Farming Room.json +++ b/region/lowernorfair/east/Lower Norfair Farming Room.json @@ -455,7 +455,7 @@ { "id": 12, "link": [2, 1], - "name": "Grapple Teleport Door Lock", + "name": "Grapple Teleport Door Lock Skip", "entranceCondition": { "comeInWithGrappleTeleport": { "blockPositions": [[3, 12], [3, 13]] diff --git a/region/lowernorfair/east/Lower Norfair Spring Ball Maze.json b/region/lowernorfair/east/Lower Norfair Spring Ball Maze.json index 5d14800844..eb83cfaf69 100644 --- a/region/lowernorfair/east/Lower Norfair Spring Ball Maze.json +++ b/region/lowernorfair/east/Lower Norfair Spring Ball Maze.json @@ -556,6 +556,30 @@ {"heatFrames": 50} ] }, + { + "link": [3, 1], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[3, 12], [3, 13]] + } + }, + "requires": [ + {"or": [ + "h_heatedGrappleTeleportWallEscape", + {"and": [ + {"doorUnlockedAtNode": 1}, + {"heatFrames": 20} + ]} + ]}, + {"or": [ + "canOffScreenMovement", + {"heatFrames": 100} + ]} + ], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 12, "link": [3, 1], diff --git a/region/lowernorfair/east/Red Kihunter Shaft.json b/region/lowernorfair/east/Red Kihunter Shaft.json index 8d4fa8e320..c4d2bb848e 100644 --- a/region/lowernorfair/east/Red Kihunter Shaft.json +++ b/region/lowernorfair/east/Red Kihunter Shaft.json @@ -654,6 +654,30 @@ {"heatFrames": 45} ] }, + { + "link": [3, 1], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[3, 12], [3, 13]] + } + }, + "requires": [ + {"or": [ + "h_heatedGrappleTeleportWallEscape", + {"and": [ + {"doorUnlockedAtNode": 1}, + {"heatFrames": 20} + ]} + ]}, + {"or": [ + "canOffScreenMovement", + {"heatFrames": 100} + ]} + ], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 20, "link": [3, 1], diff --git a/region/lowernorfair/east/The Jail.json b/region/lowernorfair/east/The Jail.json index 8d4fefc9f1..36f3f28b45 100644 --- a/region/lowernorfair/east/The Jail.json +++ b/region/lowernorfair/east/The Jail.json @@ -190,17 +190,21 @@ } }, "requires": [ - {"notable": "Grapple Teleport Inside Wall"}, + {"tech": "canGrappleTeleportWallEscape"}, "Morph", {"heatFrames": 180} ], "note": [ - "In the previous room, avoid triggering the transition too deeply (position 238), otherwise Samus ends up stuck too far right in the wall.", + "In the previous room, avoid triggering the transition too deeply (position $EE), otherwise Samus ends up stuck too far right in the wall.", "After teleporting, Samus should be standing inside the wall.", "Wait a moment for the acid to lower, then retract Grapple by pressing up, which will pull Samus left and down.", "Hold left, and release Grapple while still holding left.", "Perform a turn-around spin jump (to the right).", "Then morph and roll out to the left." + ], + "devNote": [ + "The X-Ray climb variant of `canGrappleTeleportWallEscape` doesn't work,", + "because Samus can't get through the space above the crumbles without Morph." ] }, { @@ -497,18 +501,6 @@ "Hold down exiting the Crystal Flash to shrink Samus' hitbox and on the next frame press forward to move above the Crumble blocks.", "Holding down and mashing forward sometimes works, or X-Ray can be used at the end of the Crystal Flash to more easily time the inputs." ] - }, - { - "id": 2, - "name": "Grapple Teleport Inside Wall", - "note": [ - "In the previous room, avoid triggering the transition too deeply (position 238), otherwise Samus ends up stuck too far right in the wall.", - "After teleporting, Samus should be standing inside the wall.", - "Wait a moment for the acid to lower, then retract Grapple by pressing up, which will pull Samus left and down.", - "Hold left, and release Grapple while still holding left.", - "Perform a turn-around spin jump (to the right).", - "Then morph and roll out to the left." - ] } ], "nextStratId": 23, diff --git a/region/lowernorfair/west/Golden Torizo's Room.json b/region/lowernorfair/west/Golden Torizo's Room.json index fb47cb461c..605efa71aa 100644 --- a/region/lowernorfair/west/Golden Torizo's Room.json +++ b/region/lowernorfair/west/Golden Torizo's Room.json @@ -520,6 +520,27 @@ {"heatFrames": 50} ] }, + { + "link": [2, 1], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[3, 12]] + } + }, + "requires": [ + {"or": [ + "h_heatedGrappleTeleportWallEscape", + {"and": [ + {"doorUnlockedAtNode": 1}, + {"heatFrames": 20} + ]} + ]}, + "canOffScreenMovement" + ], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 13, "link": [2, 1], diff --git a/region/lowernorfair/west/Screw Attack Room.json b/region/lowernorfair/west/Screw Attack Room.json index bbf6370e58..230a02a76e 100644 --- a/region/lowernorfair/west/Screw Attack Room.json +++ b/region/lowernorfair/west/Screw Attack Room.json @@ -459,6 +459,26 @@ "FIXME: The heatFrames for this and almost all other heated X-ray climbs are much too loose." ] }, + { + "link": [1, 3], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[12, 12], [12, 13]] + } + }, + "requires": [ + {"or": [ + "h_heatedGrappleTeleportWallEscape", + {"and": [ + {"doorUnlockedAtNode": 3}, + {"heatFrames": 20} + ]} + ]} + ], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 6, "link": [1, 3], diff --git a/region/maridia/inner-pink/Botwoon Energy Tank Room.json b/region/maridia/inner-pink/Botwoon Energy Tank Room.json index eeb39b7ff3..106792be48 100644 --- a/region/maridia/inner-pink/Botwoon Energy Tank Room.json +++ b/region/maridia/inner-pink/Botwoon Energy Tank Room.json @@ -884,6 +884,23 @@ "flashSuitChecked": true, "note": "Overload PLMs by touching the sand, then move through the speed blocks. Avoiding the sand pits is easier without Gravity or HiJump." }, + { + "link": [1, 4], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[108, 12], [108, 13]] + } + }, + "requires": [ + {"or": [ + "canGrappleTeleportWallEscape", + {"doorUnlockedAtNode": 4} + ]} + ], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 31, "link": [1, 4], @@ -1533,6 +1550,23 @@ }, "requires": [] }, + { + "link": [4, 1], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[3, 12], [3, 13]] + } + }, + "requires": [ + {"or": [ + "canGrappleTeleportWallEscape", + {"doorUnlockedAtNode": 1} + ]} + ], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 62, "link": [4, 1], diff --git a/region/maridia/inner-pink/Botwoon's Room.json b/region/maridia/inner-pink/Botwoon's Room.json index 68b62bec4b..2243f4eba3 100644 --- a/region/maridia/inner-pink/Botwoon's Room.json +++ b/region/maridia/inner-pink/Botwoon's Room.json @@ -356,6 +356,21 @@ }, "requires": [] }, + { + "link": [2, 1], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[3, 13]] + } + }, + "requires": [], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true, + "devNote": [ + "This doesn't require `canGrappleTeleportWallEscape` tech, because the lower floor makes it easier." + ] + }, { "id": 12, "link": [2, 1], diff --git a/region/maridia/inner-pink/Colosseum.json b/region/maridia/inner-pink/Colosseum.json index 50265a5e8d..0c063fbfbd 100644 --- a/region/maridia/inner-pink/Colosseum.json +++ b/region/maridia/inner-pink/Colosseum.json @@ -271,13 +271,13 @@ "Press jump to get a good bounce off the wall at the bottom of the swing, making it possible to swing up to the door.", "To avoid heavy lag, hold left while near the top of the swing, and hold angle down for the middle of the swing.", "Press up while approaching the door to retract Grapple to avoid bonking the ceiling.", - "Samus will typically come to rest at horizontal position 41.", + "Samus will typically come to rest at horizontal position $29.", "From here it is possible to roll from pressing left to pressing diagonally down-left to enter the transition, though this will create heavy lag and Samus will not be able to stand in the next room.", - "Alternatively, only briefly press diagonally down-left and then press up, bringing Samus to a stop further left, typically at one of three positions 25, 28, or 38.", - "If Samus stops at position 38, then the process can be repeated to move closer to the door again, with a possibility of reaching position 25.", - "If Samus then stops at positions 25 or 28, then rolling from left to down-left will bring Samus into the transition in a pose that will be able to stand, and at horizontal position 21 (as far right as possible).", - "If Samus stops at position 23 or closer, the setup will have to be started over.", - "If needed to transition further to the left, it can be done from position 28 by rolling from left to down (with a brief down-left input), to result in a transition at a position of 20 or less." + "Alternatively, only briefly press diagonally down-left and then press up, bringing Samus to a stop further left, typically at one of three positions $19, $1C, or $26.", + "If Samus stops at position $26, then the process can be repeated to move closer to the door again, with a possibility of reaching position $19.", + "If Samus then stops at positions $19 or $1C, then rolling from left to down-left will bring Samus into the transition in a pose that will be able to stand, and at horizontal position $15 (as far right as possible).", + "If Samus stops at position $17 or closer, the setup will have to be started over.", + "If needed to transition further to the left, it can be done from position $1C by rolling from left to down (with a brief down-left input), to result in a transition at a position of $14 or less." ] }, { @@ -326,13 +326,13 @@ "Press jump to get a good bounce off the wall at the bottom of the swing, making it possible to swing up to the door.", "To avoid heavy lag, hold down during the bottom part of the swing, and hold angle up during the top part.", "Press up while approaching the door to retract Grapple to avoid bonking the ceiling.", - "Samus will typically come to rest at horizontal position 41.", + "Samus will typically come to rest at horizontal position $29.", "From here it is possible to roll from pressing left to pressing diagonally down-left to enter the transition, though this will create heavy lag and Samus will not be able to stand in the next room.", - "Alternatively, only briefly press diagonally down-left and then press up, bringing Samus to a stop further left, typically at one of three positions 25, 28, or 38.", - "If Samus stops at position 38, then the process can be repeated to move closer to the door again, with a possibility of reaching position 25.", - "If Samus then stops at positions 25 or 28, then rolling from left to down-left will bring Samus into the transition in a pose that will be able to stand, and at horizontal position 21 (as far right as possible).", - "If Samus stops at position 23 or closer, the setup will have to be started over.", - "If needed to transition further to the left, it can be done from position 28 by rolling from left to down (with a brief down-left input), to result in a transition at a position of 20 or less." + "Alternatively, only briefly press diagonally down-left and then press up, bringing Samus to a stop further left, typically at one of three positions $19, $1C, or $26.", + "If Samus stops at position $26, then the process can be repeated to move closer to the door again, with a possibility of reaching position $19.", + "If Samus then stops at positions $19 or $1C, then rolling from left to down-left will bring Samus into the transition in a pose that will be able to stand, and at horizontal position $15 (as far right as possible).", + "If Samus stops at position $17 or closer, the setup will have to be started over.", + "If needed to transition further to the left, it can be done from position $1C by rolling from left to down (with a brief down-left input), to result in a transition at a position of $14 or less." ] }, { @@ -355,13 +355,10 @@ "Crouch, and fire Grapple while angling up.", "Samus will enter a 'glitched grapple hanging' state where Samus' graphics will appear corrupted while swinging with Grapple.", "Press jump to get a good bounce off the wall at the bottom of the swing, making it possible to swing up to the door.", - "To minimize lag, when grapple is extended horizontally release all inputs other than shot/grapple; there will still be a bit of unavoidable lag while Grapple is initially extending.", - "Try to get a good first bounce; otherwise heavy lag may be difficult to avoid, and it may be better to retry from the beginning.", - "Pressing right while inside the transition tiles will trigger the transition.", - "Continue holding Grapple through the transition to initiate a teleport in the next room.", - "If it is needed to trigger the transition further to the right (at position 238), then wait to come to a stop before pressing right.", - "If it is needed to trigger the transition further to the left (positions 235 or 237), then hold right while approaching the door.", - "Either way, Samus should automatically be able to stand in the next room (e.g. for an X-Ray climb)." + "To avoid heavy lag, hold down during the bottom part of the swing, and hold angle up during the top part.", + "Samus should usually enter the transition with the ability to stand in the next room.", + "If needing to make sure that Samus can stand, or to ensure the transition happens further to the right, retract Grapple by pressing up while approaching door;", + "then after coming to a stop, roll from holding left to holding diagonal down-left to approach the door at a controlled low speed." ] }, { @@ -386,13 +383,13 @@ "Press jump to get a good bounce off the wall at the bottom of the swing, making it possible to swing up to the door.", "To avoid heavy lag, hold down during the bottom part of the swing, and hold angle up during the top part.", "Press up while approaching the door to retract Grapple to avoid bonking the ceiling.", - "Samus will typically come to rest at horizontal position 41.", + "Samus will typically come to rest at horizontal position $29.", "From here it is possible to roll from pressing left to pressing diagonally down-left to enter the transition, though this will create heavy lag and Samus will not be able to stand in the next room.", - "Alternatively, only briefly press diagonally down-left and then press up, bringing Samus to a stop further left, typically at one of three positions 25, 28, or 38.", - "If Samus stops at position 38, then the process can be repeated to move closer to the door again, with a possibility of reaching position 25.", - "If Samus then stops at positions 25 or 28, then rolling from left to down-left will bring Samus into the transition in a pose that will be able to stand, and at horizontal position 21 (as far right as possible).", - "If Samus stops at position 23 or closer, the setup will have to be started over.", - "If needed to transition further to the left, it can be done from position 28 by rolling from left to down (with a brief down-left input), to result in a transition at a position of 20 or less." + "Alternatively, only briefly press diagonally down-left and then press up, bringing Samus to a stop further left, typically at one of three positions $19, $1C, or $26.", + "If Samus stops at position $26, then the process can be repeated to move closer to the door again, with a possibility of reaching position $19.", + "If Samus then stops at positions $19 or $1C, then rolling from left to down-left will bring Samus into the transition in a pose that will be able to stand, and at horizontal position $15 (as far right as possible).", + "If Samus stops at position $17 or closer, the setup will have to be started over.", + "If needed to transition further to the left, it can be done from position $1C by rolling from left to down (with a brief down-left input), to result in a transition at a position of $14 or less." ] }, { @@ -944,7 +941,7 @@ "Press jump to get a good bounce off the wall at the bottom of the swing, making it possible to swing up to close the door.", "Heavy lag can typically be avoided by holding right during the bottom half of the swing.", "Retract Grapple while approaching the door.", - "Samus should come to a stop about a tile in front of the door (at horizontal position 1753).", + "Samus should come to a stop about a tile in front of the door (at horizontal position $6D9).", "Press right and then left, and Samus will fall through the floor.", "Back to the right within the air pocket, then jump and use Grapple diagonally up against the second Grapple block from the bottom, near its top.", "Samus should be pushed most of the way inside the wall; if not, morph and roll out to try again.", @@ -970,7 +967,7 @@ "To minimize lag, when grapple is extended horizontally release all inputs other than shot/grapple; there will still be a bit of unavoidable lag while Grapple is initially extending.", "Try to get a good first bounce; otherwise heavy lag may be difficult to avoid, and it may be better to retry from the beginning.", "Retract Grapple while approaching the door.", - "Samus should come to a stop about a tile in front of the door (at horizontal position 1753).", + "Samus should come to a stop about a tile in front of the door (at horizontal position $6D9).", "Press right and then left, and Samus will fall through the floor.", "Back to the right within the air pocket, then jump and use Grapple diagonally up against the second Grapple block from the bottom, near its top.", "Samus should be pushed most of the way inside the wall; if not, morph and roll out to try again.", @@ -2518,8 +2515,8 @@ "Heavy lag can typically be avoided by holding right during the bottom half of the swing.", "Pressing right while inside the transition tiles will trigger the transition.", "Continue holding Grapple through the transition to initiate a teleport in the next room.", - "If it is needed to trigger the transition further to the right (at position 1774), then wait to come to a stop before pressing right.", - "If it is needed to trigger the transition further to the left (positions 1771 or 1773), then hold right while approaching the door.", + "If it is needed to trigger the transition further to the right (at position $6EE), then wait to come to a stop before pressing right.", + "If it is needed to trigger the transition further to the left (positions $6EB or $6ED), then hold right while approaching the door.", "Either way, Samus should automatically be able to stand in the next room (e.g. for an X-Ray climb)." ] }, @@ -2543,10 +2540,10 @@ "Press jump to get a good bounce off the wall at the bottom of the swing, making it possible to swing up to the door.", "Heavy lag can typically be avoided by holding right during the bottom half of the swing.", "While swinging up, tap up to retract Grapple to avoid the ceiling (or tap up after after coming to rest against the ceiling if this happens).", - "Samus should usually come to a stop one tile in front of the door (at horizontal position 1751).", + "Samus should usually come to a stop one tile in front of the door (at horizontal position $6D7).", "Roll from pressing right to pressing diagonally down-right to enter the transition.", - "If it is needed for Samus to be able to stand in the next room, then only briefly press diagonally down-right and then press up, bringing Samus to a stop at position 1761 or 1763;", - "then roll from right to down-right to enter the transition (at horizontal positon 1771)." + "If it is needed for Samus to be able to stand in the next room, then only briefly press diagonally down-right and then press up, bringing Samus to a stop at position $6E1 or $6E3;", + "then roll from right to down-right to enter the transition (at horizontal positon $6EB)." ] }, { @@ -2572,8 +2569,8 @@ "Try to get a good first bounce; otherwise heavy lag may be difficult to avoid, and it may be better to retry from the beginning.", "Pressing right while inside the transition tiles will trigger the transition.", "Continue holding Grapple through the transition to initiate a teleport in the next room.", - "If it is needed to trigger the transition further to the right (at position 1774), then wait to come to a stop before pressing right.", - "If it is needed to trigger the transition further to the left (positions 1771 or 1773), then hold right while approaching the door.", + "If it is needed to trigger the transition further to the right (at position $6EE), then wait to come to a stop before pressing right.", + "If it is needed to trigger the transition further to the left (positions $6EB or $6ED), then hold right while approaching the door.", "Either way, Samus should automatically be able to stand in the next room (e.g. for an X-Ray climb)." ] }, @@ -2599,10 +2596,10 @@ "To minimize lag, when grapple is extended horizontally release all inputs other than shot/grapple; there will still be a bit of unavoidable lag while Grapple is initially extending.", "Try to get a good first bounce; otherwise heavy lag may be difficult to avoid, and it may be better to retry from the beginning.", "While swinging up, tap up to retract Grapple to avoid the ceiling (or tap up after after coming to rest against the ceiling if this happens).", - "Samus should usually come to a stop one tile in front of the door (at horizontal position 1751).", + "Samus should usually come to a stop one tile in front of the door (at horizontal position $6D7).", "Roll from pressing right to pressing diagonally down-right to enter the transition.", - "If it is needed for Samus to be able to stand in the next room, then only briefly press diagonally down-right and then press up, bringing Samus to a stop at position 1761 or 1763;", - "then roll from right to down-right to enter the transition (at horizontal positon 1771)." + "If it is needed for Samus to be able to stand in the next room, then only briefly press diagonally down-right and then press up, bringing Samus to a stop at position $6E1 or $6E3;", + "then roll from right to down-right to enter the transition (at horizontal positon $6EB)." ] }, { @@ -2629,8 +2626,8 @@ "Try to get a good first bounce; otherwise heavy lag may be difficult to avoid, and it may be better to retry from the beginning.", "Pressing right while inside the transition tiles will trigger the transition.", "Continue holding Grapple through the transition to initiate a teleport in the next room.", - "If it is needed to trigger the transition further to the right (at position 1774), then wait to come to a stop before pressing right.", - "If it is needed to trigger the transition further to the left (positions 1771 or 1773), then hold right while approaching the door.", + "If it is needed to trigger the transition further to the right (at position $6EE), then wait to come to a stop before pressing right.", + "If it is needed to trigger the transition further to the left (positions $6EB or $6ED), then hold right while approaching the door.", "Either way, Samus should automatically be able to stand in the next room (e.g. for an X-Ray climb)." ] }, @@ -2657,10 +2654,10 @@ "To minimize lag, when grapple is extended horizontally release all inputs other than shot/grapple; there will still be a bit of unavoidable lag while Grapple is initially extending.", "Try to get a good first bounce; otherwise heavy lag may be difficult to avoid, and it may be better to retry from the beginning.", "While swinging up, tap up to retract Grapple to avoid the ceiling (or tap up after after coming to rest against the ceiling if this happens).", - "Samus should usually come to a stop one tile in front of the door (at horizontal position 1751).", + "Samus should usually come to a stop one tile in front of the door (at horizontal position $6D7).", "Roll from pressing right to pressing diagonally down-right to enter the transition.", - "If it is needed for Samus to be able to stand in the next room, then only briefly press diagonally down-right and then press up, bringing Samus to a stop at position 1761 or 1763;", - "then roll from right to down-right to enter the transition (at horizontal positon 1771)." + "If it is needed for Samus to be able to stand in the next room, then only briefly press diagonally down-right and then press up, bringing Samus to a stop at position $6E1 or $6E3;", + "then roll from right to down-right to enter the transition (at horizontal positon $6EB)." ] }, { @@ -2830,7 +2827,7 @@ "Press jump to get a good bounce off the wall at the bottom of the swing, making it possible to swing up to close the door.", "Heavy lag can typically be avoided by holding right during the bottom half of the swing.", "Retract Grapple while approaching the door.", - "Samus should come to a stop about a tile in front of the door (at horizontal position 1753).", + "Samus should come to a stop about a tile in front of the door (at horizontal position $6D9).", "Press right and then left, and Samus will fall through the floor.", "Back to the right within the air pocket, then jump and use Grapple diagonally up against the second Grapple block from the bottom, near its top.", "Samus should be pushed most of the way inside the wall; if not, morph and roll out to try again.", @@ -2848,7 +2845,7 @@ "To minimize lag, when grapple is extended horizontally release all inputs other than shot/grapple; there will still be a bit of unavoidable lag while Grapple is initially extending.", "Try to get a good first bounce; otherwise heavy lag may be difficult to avoid, and it may be better to retry from the beginning.", "Retract Grapple while approaching the door.", - "Samus should come to a stop about a tile in front of the door (at horizontal position 1753).", + "Samus should come to a stop about a tile in front of the door (at horizontal position $6D9).", "Press right and then left, and Samus will fall through the floor.", "Back to the right within the air pocket, then jump and use Grapple diagonally up against the second Grapple block from the bottom, near its top.", "Samus should be pushed most of the way inside the wall; if not, morph and roll out to try again.", diff --git a/region/maridia/inner-pink/Draygon's Room.json b/region/maridia/inner-pink/Draygon's Room.json index 509bddb9be..f60010a8dc 100644 --- a/region/maridia/inner-pink/Draygon's Room.json +++ b/region/maridia/inner-pink/Draygon's Room.json @@ -450,8 +450,8 @@ "If Samus needs to be standing in the next room (e.g. for an X-Ray climb), then be sure to touch the ground before reaching the transition;", "this can be done by timing the Grapple extension early enough,", "or, if enough energy is available, by doing a small bounce before going through the transition.", - "Samus can reach the transition at either horizontal position 20 or 21, depending on the specific timing and positioning of the swing.", - "Pressing diagonal up-left just before the transition (to retracting Grapple slightly) can help more consistently reach it at position 21." + "Samus can reach the transition at either horizontal position $14 or $15, depending on the specific timing and positioning of the swing.", + "Pressing diagonal up-left just before the transition (to retracting Grapple slightly) can help more consistently reach it at position $15." ], "devNote": [ "FIXME: We could model the turret as an obstacle in case it was already broken for the Draygon fight.", @@ -486,7 +486,7 @@ "If Samus needs to be standing in the next room (e.g. for an X-Ray climb), then be sure to touch the ground before reaching the transition;", "this can be done by timing the Grapple extension early enough,", "or, if enough energy is available, by doing a small bounce before going through the transition.", - "If it is needed to enter far to the right (at horizontal position 21), this can be done by pressing up to retract Grapple just before the transition." + "If it is needed to enter far to the right (at horizontal position $15), this can be done by pressing up to retract Grapple just before the transition." ] }, { @@ -516,8 +516,8 @@ "After the Grapple attachment, hold diagonally down-left to swing directly into the door and through the transition.", "Continue holding Grapple through the door transition to initiate a teleport in the next room.", "Samus should be able to stand in the next room (e.g. in case this is needed for an X-Ray climb).", - "Samus may trigger the transition at either horizontal position 20 or 21, depending on the specific timing and positioning of the swing.", - "To reliably trigger it at position 21, press diagonally up-left just before the transition to retract Grapple slightly." + "Samus may trigger the transition at either horizontal position $14 or $15, depending on the specific timing and positioning of the swing.", + "To reliably trigger it at position $15, press diagonally up-left just before the transition to retract Grapple slightly." ] }, { @@ -548,7 +548,7 @@ "Swing down, and hold left while approaching the door to trigger the transition.", "Continue holding Grapple through the door transition to initiate a teleport in the next room.", "Samus should be able to stand in the next room (e.g. in case this is needed for an X-Ray climb).", - "Samus can reach the transition at either horizontal position 20 or 21, depending on the specific timing and positioning of the swing." + "Samus can reach the transition at either horizontal position $14 or $15, depending on the specific timing and positioning of the swing." ] }, { @@ -583,7 +583,7 @@ "Swing down, and hold left while approaching the door to trigger the transition.", "Continue holding Grapple through the door transition to initiate a teleport in the next room.", "Samus should be able to stand in the next room (e.g. in case this is needed for an X-Ray climb).", - "Samus can reach the transition at horizontal position 20, or at positions 19 or 21 by pressing up at a specific time just before reaching the transition." + "Samus can reach the transition at horizontal position $14, or at positions $13 or $15 by pressing up at a specific time just before reaching the transition." ], "devNote": [ "This is technically possible to do without a stationary lateral morph, but with much greater difficulty." diff --git a/region/maridia/inner-pink/Halfie Climb Room.json b/region/maridia/inner-pink/Halfie Climb Room.json index ffb0d3bc2a..cbb207a689 100644 --- a/region/maridia/inner-pink/Halfie Climb Room.json +++ b/region/maridia/inner-pink/Halfie Climb Room.json @@ -321,7 +321,7 @@ "Swing down, and hold left while approaching the door to trigger the transition.", "Continue holding Grapple through the door transition to initiate a teleport in the next room.", "If needing to stand up in the next room (e.g. for an X-Ray climb), then enter the transition while swinging slowly, e.g. after coming to a stop directly below the block.", - "If needing to transition at horiziontal position 21 (as far right as possible), then additionally roll from pressing left to pressing diagonally up-left just before the transition.", + "If needing to transition at horiziontal position $15 (as far right as possible), then additionally roll from pressing left to pressing diagonally up-left just before the transition.", "The game may lag heavily if Samus enters a retracted position; if this happens, hold down to extend Grapple again." ] }, @@ -346,8 +346,8 @@ "To avoid heavy lag, hold left while near the top of the swing, and hold angle down for the middle of the swing.", "Continue holding Grapple through the transition to initiate a teleport in the next room.", "If needing to stand up in the next room (e.g. for an X-Ray climb), then press up while approaching the door to retract Grapple and come to a stop; then roll from pressing left to diagonally down-left to trigger the transition.", - "This method will also transition at horizontal position 21 (as far right as possible).", - "If it is needed to transition further left (e.g. position 19 or 20), it can be done by instead rolling from pressing left to pressing down (with a brief diagonal input in between) and then left again if necessary." + "This method will also transition at horizontal position $15 (as far right as possible).", + "If it is needed to transition further left (e.g. position $13 or $14), it can be done by instead rolling from pressing left to pressing down (with a brief diagonal input in between) and then left again if necessary." ] }, { @@ -370,9 +370,9 @@ "Press jump to get a good bounce off the wall at the bottom of the swing, making it possible to swing up to the door.", "To avoid heavy lag, hold left while near the top of the swing, and hold angle down for the middle of the swing.", "Press up while approaching the door to retract Grapple to avoid bonking the ceiling.", - "After Samus comes to a stop (at horiziontal position 25), roll from pressing left to diagonally down-left to trigger the transition.", - "This method will allow Samus to stand up in the next room (e.g. for an X-Ray climb) and will also transition at horizontal position 21 (as far right as possible).", - "If it is needed to transition further left (at position 20) while still being able to stand, it can be done with by rolling from pressing left to briefly pressing down (with a brief diagonal input in between), which should bring Samus to a stop at position 20; then press left to trigger the transition." + "After Samus comes to a stop (at horiziontal position $19), roll from pressing left to diagonally down-left to trigger the transition.", + "This method will allow Samus to stand up in the next room (e.g. for an X-Ray climb) and will also transition at horizontal position $15 (as far right as possible).", + "If it is needed to transition further left (at position $14) while still being able to stand, it can be done with by rolling from pressing left to briefly pressing down (with a brief diagonal input in between), which should bring Samus to a stop at position $14; then press left to trigger the transition." ] }, { @@ -395,7 +395,7 @@ "Swing down, and hold left while approaching the door to trigger the transition.", "Continue holding Grapple through the door transition to initiate a teleport in the next room.", "If needing to stand up in the next room (e.g. for an X-Ray climb), then enter the transition while swinging slowly, e.g. after coming to a stop directly below the block (or without Gravity equipped).", - "If needing to transition at horiziontal position 21 (as far right as possible), then additionally roll from pressing left to pressing diagonally up-left just before the transition.", + "If needing to transition at horiziontal position $15 (as far right as possible), then additionally roll from pressing left to pressing diagonally up-left just before the transition.", "The game may lag heavily if Samus enters a retracted position; if this happens, hold down to extend Grapple again." ] }, @@ -422,8 +422,8 @@ "To avoid heavy lag, hold down during the bottom part of the swing, and hold angle up during the top part.", "Continue holding Grapple through the transition to initiate a teleport in the next room.", "If needing to stand up in the next room (e.g. for an X-Ray climb), then press up while approaching the door to retract Grapple and come to a stop; then roll from pressing left to diagonally down-left to trigger the transition.", - "This method will also transition at horizontal position 21 (as far right as possible).", - "If it is needed to transition further left (e.g. position 19 or 20), it can be done by instead rolling from pressing left to pressing down (with a brief diagonal input in between) and then left again if necessary." + "This method will also transition at horizontal position $15 (as far right as possible).", + "If it is needed to transition further left (e.g. position $13 or $14), it can be done by instead rolling from pressing left to pressing down (with a brief diagonal input in between) and then left again if necessary." ] }, { @@ -448,9 +448,9 @@ "Press jump to get a good bounce off the wall at the bottom of the swing, making it possible to swing up to the door.", "To avoid heavy lag, hold down during the bottom part of the swing, and hold angle up during the top part.", "Press up while approaching the door to retract Grapple to avoid bonking the ceiling.", - "After Samus comes to a stop (at horiziontal position 25), roll from pressing left to diagonally down-left to trigger the transition.", - "This method will allow Samus to stand up in the next room (e.g. for an X-Ray climb) and will also transition at horizontal position 21 (as far right as possible).", - "If it is needed to transition further left (at position 20) while still being able to stand, it can be done with by rolling from pressing left to briefly pressing down (with a brief diagonal input in between), which should bring Samus to a stop at position 20; then press left to trigger the transition." + "After Samus comes to a stop (at horiziontal position $19), roll from pressing left to diagonally down-left to trigger the transition.", + "This method will allow Samus to stand up in the next room (e.g. for an X-Ray climb) and will also transition at horizontal position $15 (as far right as possible).", + "If it is needed to transition further left (at position $14) while still being able to stand, it can be done with by rolling from pressing left to briefly pressing down (with a brief diagonal input in between), which should bring Samus to a stop at position $14; then press left to trigger the transition." ] }, { @@ -476,7 +476,7 @@ "To avoid heavy lag, hold down through the entire swing.", "Continue holding Grapple through the door transition to initiate a teleport in the next room.", "If needing to stand up in the next room (e.g. for an X-Ray climb), then enter the transition while swinging slowly, e.g. after coming to a stop directly below the block.", - "If needing to transition at horiziontal position 21 (as far right as possible), then additionally roll from pressing left to pressing diagonally up-left just before the transition.", + "If needing to transition at horiziontal position $15 (as far right as possible), then additionally roll from pressing left to pressing diagonally up-left just before the transition.", "The game may lag heavily if Samus enters a retracted position; if this happens, hold down to extend Grapple again." ], "devNote": "The canCrouchJump is not a h_underwaterCrouchJump, because Gravity is required." @@ -503,8 +503,8 @@ "To avoid heavy lag, hold down during the bottom part of the swing, and hold angle up during the top part.", "Continue holding Grapple through the transition to initiate a teleport in the next room.", "If needing to stand up in the next room (e.g. for an X-Ray climb), then press up while approaching the door to retract Grapple and come to a stop; then roll from pressing left to diagonally down-left to trigger the transition.", - "This method will also transition at horizontal position 21 (as far right as possible).", - "If it is needed to transition further left (e.g. position 19 or 20), it can be done by instead rolling from pressing left to pressing down (with a brief diagonal input in between) and then left again if necessary." + "This method will also transition at horizontal position $15 (as far right as possible).", + "If it is needed to transition further left (e.g. position $13 or $14), it can be done by instead rolling from pressing left to pressing down (with a brief diagonal input in between) and then left again if necessary." ] }, { @@ -528,9 +528,9 @@ "Press jump to get a good bounce off the wall at the bottom of the swing, making it possible to swing up to the door.", "To avoid heavy lag, hold down during the bottom part of the swing, and hold angle up during the top part.", "Press up while approaching the door to retract Grapple to avoid bonking the ceiling.", - "After Samus comes to a stop (at horiziontal position 25), roll from pressing left to diagonally down-left to trigger the transition.", - "This method will allow Samus to stand up in the next room (e.g. for an X-Ray climb) and will also transition at horizontal position 21 (as far right as possible).", - "If it is needed to transition further left (at position 20) while still being able to stand, it can be done with by rolling from pressing left to briefly pressing down (with a brief diagonal input in between), which should bring Samus to a stop at position 20; then press left to trigger the transition." + "After Samus comes to a stop (at horiziontal position $19), roll from pressing left to diagonally down-left to trigger the transition.", + "This method will allow Samus to stand up in the next room (e.g. for an X-Ray climb) and will also transition at horizontal position $15 (as far right as possible).", + "If it is needed to transition further left (at position $14) while still being able to stand, it can be done with by rolling from pressing left to briefly pressing down (with a brief diagonal input in between), which should bring Samus to a stop at position $14; then press left to trigger the transition." ] }, { @@ -557,7 +557,7 @@ "To avoid heavy lag, hold down through the entire swing.", "Continue holding Grapple through the door transition to initiate a teleport in the next room.", "If needing to stand up in the next room (e.g. for an X-Ray climb), then enter the transition while swinging slowly, e.g. after coming to a stop directly below the block.", - "If needing to transition at horiziontal position 21 (as far right as possible), then additionally roll from pressing left to pressing diagonally up-left just before the transition.", + "If needing to transition at horiziontal position $15 (as far right as possible), then additionally roll from pressing left to pressing diagonally up-left just before the transition.", "The game may lag heavily if Samus enters a retracted position; if this happens, hold down to extend Grapple again." ] }, @@ -2094,7 +2094,7 @@ "Swing down, and hold left while approaching the door to trigger the transition.", "Continue holding Grapple through the door transition to initiate a teleport in the next room.", "If needing to stand up in the next room (e.g. for an X-Ray climb), then enter the transition while swinging slowly, e.g. after coming to a stop directly below the block (or without Gravity equipped).", - "If needing to transition at horiziontal position 21 (as far right as possible), then additionally roll from pressing left to pressing diagonally up-left just before the transition.", + "If needing to transition at horiziontal position $15 (as far right as possible), then additionally roll from pressing left to pressing diagonally up-left just before the transition.", "The game may lag heavily if Samus enters a retracted position; if this happens, hold down to extend Grapple again." ] }, @@ -2121,7 +2121,7 @@ "To avoid heavy lag, hold down through the entire swing.", "Continue holding Grapple through the door transition to initiate a teleport in the next room.", "If needing to stand up in the next room (e.g. for an X-Ray climb), then enter the transition while swinging slowly, e.g. after coming to a stop directly below the block.", - "If needing to transition at horiziontal position 21 (as far right as possible), then additionally roll from pressing left to pressing diagonally up-left just before the transition.", + "If needing to transition at horiziontal position $15 (as far right as possible), then additionally roll from pressing left to pressing diagonally up-left just before the transition.", "The game may lag heavily if Samus enters a retracted position; if this happens, hold down to extend Grapple again." ], "devNote": "The canCrouchJump is not a h_underwaterCrouchJump, because Gravity is required." @@ -2147,7 +2147,7 @@ "Swing down, and hold left while approaching the door to trigger the transition.", "Continue holding Grapple through the door transition to initiate a teleport in the next room.", "If needing to stand up in the next room (e.g. for an X-Ray climb), then enter the transition while swinging slowly, e.g. after coming to a stop directly below the block (or without Gravity equipped).", - "If needing to transition at horiziontal position 21 (as far right as possible), then additionally roll from pressing left to pressing diagonally up-left just before the transition.", + "If needing to transition at horiziontal position $15 (as far right as possible), then additionally roll from pressing left to pressing diagonally up-left just before the transition.", "The game may lag heavily if Samus enters a retracted position; if this happens, hold down to extend Grapple again." ] }, @@ -2173,7 +2173,7 @@ "To avoid heavy lag, hold down through the entire swing.", "Continue holding Grapple through the door transition to initiate a teleport in the next room.", "If needing to stand up in the next room (e.g. for an X-Ray climb), then enter the transition while swinging slowly, e.g. after coming to a stop directly below the block.", - "If needing to transition at horiziontal position 21 (as far right as possible), then additionally roll from pressing left to pressing diagonally up-left just before the transition.", + "If needing to transition at horiziontal position $15 (as far right as possible), then additionally roll from pressing left to pressing diagonally up-left just before the transition.", "The game may lag heavily if Samus enters a retracted position; if this happens, hold down to extend Grapple again." ] }, @@ -4151,8 +4151,8 @@ "Heavy lag can typically be avoided by holding right during the bottom half of the swing.", "Pressing right while inside the transition tiles will trigger the transition.", "Continue holding Grapple through the transition to initiate a teleport in the next room.", - "If it is needed to trigger the transition further to the right (at position 238), then wait to come to a stop before pressing right.", - "If it is needed to trigger the transition further to the left (positions 235 or 237), then hold right while approaching the door.", + "If it is needed to trigger the transition further to the right (at position $EE), then wait to come to a stop before pressing right.", + "If it is needed to trigger the transition further to the left (positions $EB or $ED), then hold right while approaching the door.", "Either way, Samus should automatically be able to stand in the next room (e.g. for an X-Ray climb)." ] }, @@ -4172,15 +4172,15 @@ }, "note": [ "Get a boost from a Bomb or Power Bomb while grappled to the top Grapple block below the door;", - "alternatively, do a grapple wall jump instant morph from the third Grapple block, frame-perfect unmorph and grapple to clip a pixel inside the second Grapple block (at vertical position $CF = 207), then crouch and grapple to the second block.", + "alternatively, do a grapple wall jump instant morph from the third Grapple block, frame-perfect unmorph and grapple to clip a pixel inside the second Grapple block (at vertical position $CF), then crouch and grapple to the second block.", "Samus will enter a 'glitched grapple hanging' state where Samus' graphics will appear corrupted while swinging with Grapple.", "Press jump to get a good bounce off the wall at the bottom of the swing, making it possible to swing up to the door.", "Heavy lag can typically be avoided by holding right during the bottom half of the swing.", "While swinging up, tap up to retract Grapple to avoid the ceiling (or tap up after after coming to rest against the ceiling if this happens).", - "Samus should usually come to a stop one tile in front of the door (at horizontal position 215).", + "Samus should usually come to a stop one tile in front of the door (at horizontal position $D7).", "Roll from pressing right to pressing diagonally down-right to enter the transition.", - "If it is needed for Samus to be able to stand in the next room, then only briefly press diagonally down-right and then press up, bringing Samus to a stop at position 225 or 227;", - "then roll from right to down-right to enter the transition (at horizontal positon 235)." + "If it is needed for Samus to be able to stand in the next room, then only briefly press diagonally down-right and then press up, bringing Samus to a stop at position $E1 or $E3;", + "then roll from right to down-right to enter the transition (at horizontal positon $EB)." ] }, { @@ -4206,8 +4206,8 @@ "Try to get a good first bounce; otherwise heavy lag may be difficult to avoid, and it may be better to retry from the beginning.", "Pressing right while inside the transition tiles will trigger the transition.", "Continue holding Grapple through the transition to initiate a teleport in the next room.", - "If it is needed to trigger the transition further to the right (at position 238), then wait to come to a stop before pressing right.", - "If it is needed to trigger the transition further to the left (positions 235 or 237), then hold right while approaching the door.", + "If it is needed to trigger the transition further to the right (at position $EE), then wait to come to a stop before pressing right.", + "If it is needed to trigger the transition further to the left (positions $EB or $ED), then hold right while approaching the door.", "Either way, Samus should automatically be able to stand in the next room (e.g. for an X-Ray climb)." ] }, @@ -4233,10 +4233,10 @@ "To minimize lag, when grapple is extended horizontally release all inputs other than shot/grapple; there will still be a bit of unavoidable lag while Grapple is initially extending.", "Try to get a good first bounce; otherwise heavy lag may be difficult to avoid, and it may be better to retry from the beginning.", "While swinging up, tap up to retract Grapple to avoid the ceiling (or tap up after after coming to rest against the ceiling if this happens).", - "Samus should usually come to a stop one tile in front of the door (at horizontal position 215).", + "Samus should usually come to a stop one tile in front of the door (at horizontal position $D7).", "Roll from pressing right to pressing diagonally down-right to enter the transition.", - "If it is needed for Samus to be able to stand in the next room, then only briefly press diagonally down-right and then press up, bringing Samus to a stop at position 225 or 227;", - "then roll from right to down-right to enter the transition (at horizontal positon 235)." + "If it is needed for Samus to be able to stand in the next room, then only briefly press diagonally down-right and then press up, bringing Samus to a stop at position $E1 or $E3;", + "then roll from right to down-right to enter the transition (at horizontal positon $EB)." ] }, { @@ -4263,8 +4263,8 @@ "Try to get a good first bounce; otherwise heavy lag may be difficult to avoid, and it may be better to retry from the beginning.", "Pressing right while inside the transition tiles will trigger the transition.", "Continue holding Grapple through the transition to initiate a teleport in the next room.", - "If it is needed to trigger the transition further to the right (at position 238), then wait to come to a stop before pressing right.", - "If it is needed to trigger the transition further to the left (positions 235 or 237), then hold right while approaching the door.", + "If it is needed to trigger the transition further to the right (at position $EE), then wait to come to a stop before pressing right.", + "If it is needed to trigger the transition further to the left (positions $EB or $ED), then hold right while approaching the door.", "Either way, Samus should automatically be able to stand in the next room (e.g. for an X-Ray climb)." ] }, @@ -4291,10 +4291,10 @@ "To minimize lag, when grapple is extended horizontally release all inputs other than shot/grapple; there will still be a bit of unavoidable lag while Grapple is initially extending.", "Try to get a good first bounce; otherwise heavy lag may be difficult to avoid, and it may be better to retry from the beginning.", "While swinging up, tap up to retract Grapple to avoid the ceiling (or tap up after after coming to rest against the ceiling if this happens).", - "Samus should usually come to a stop one tile in front of the door (at horizontal position 215).", + "Samus should usually come to a stop one tile in front of the door (at horizontal position $D7).", "Roll from pressing right to pressing diagonally down-right to enter the transition.", - "If it is needed for Samus to be able to stand in the next room, then only briefly press diagonally down-right and then press up, bringing Samus to a stop at position 225 or 227;", - "then roll from right to down-right to enter the transition (at horizontal positon 235)." + "If it is needed for Samus to be able to stand in the next room, then only briefly press diagonally down-right and then press up, bringing Samus to a stop at position $E1 or $E3;", + "then roll from right to down-right to enter the transition (at horizontal positon $EB)." ] }, { @@ -4544,7 +4544,7 @@ "To avoid heavy lag, hold down through the entire swing.", "Continue holding Grapple through the door transition to initiate a teleport in the next room.", "If needing to stand up in the next room (e.g. for an X-Ray climb), then enter the transition while swinging slowly, e.g. after coming to a stop directly below the block.", - "If needing to transition at horiziontal position 21 (as far right as possible), then additionally roll from pressing left to pressing diagonally up-left just before the transition.", + "If needing to transition at horiziontal position $15 (as far right as possible), then additionally roll from pressing left to pressing diagonally up-left just before the transition.", "The game may lag heavily if Samus enters a retracted position; if this happens, hold down to extend Grapple again." ] }, diff --git a/region/maridia/inner-pink/West Cactus Alley.json b/region/maridia/inner-pink/West Cactus Alley.json index 6968d47813..df544f9610 100644 --- a/region/maridia/inner-pink/West Cactus Alley.json +++ b/region/maridia/inner-pink/West Cactus Alley.json @@ -755,6 +755,23 @@ "canTrickyGrappleJump" ] }, + { + "link": [1, 2], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[12, 12], [12, 13]] + } + }, + "requires": [ + {"or": [ + "canGrappleTeleportWallEscape", + {"doorUnlockedAtNode": 2} + ]} + ], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 22, "link": [1, 2], diff --git a/region/maridia/inner-yellow/Maridia Swiss Cheese Room.json b/region/maridia/inner-yellow/Maridia Swiss Cheese Room.json index b8aebcf490..d5aee958bf 100644 --- a/region/maridia/inner-yellow/Maridia Swiss Cheese Room.json +++ b/region/maridia/inner-yellow/Maridia Swiss Cheese Room.json @@ -313,6 +313,23 @@ }, "requires": [] }, + { + "link": [2, 1], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[3, 12]] + } + }, + "requires": [ + {"or": [ + "canGrappleTeleportWallEscape", + {"doorUnlockedAtNode": 1} + ]} + ], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 9, "link": [2, 1], diff --git a/region/maridia/inner-yellow/Yoink Room.json b/region/maridia/inner-yellow/Yoink Room.json index 17ba2fc374..22f04da6ec 100644 --- a/region/maridia/inner-yellow/Yoink Room.json +++ b/region/maridia/inner-yellow/Yoink Room.json @@ -667,27 +667,10 @@ "name": "Grapple Teleport Door Lock Skip", "entranceCondition": { "comeInWithGrappleTeleport": { - "blockPositions": [[12, 12], [12, 13]] - } - }, - "requires": [], - "bypassesDoorShell": true - }, - { - "id": 18, - "link": [1, 3], - "name": "Carry Grapple Teleport (Top Position)", - "entranceCondition": { - "comeInWithGrappleTeleport": { - "blockPositions": [[12, 12]] + "blockPositions": [[12, 13]] } }, "requires": [], - "exitCondition": { - "leaveWithGrappleTeleport": { - "blockPositions": [[12, 12]] - } - }, "bypassesDoorShell": true }, { diff --git a/region/maridia/outer/Crab Gate Room.json b/region/maridia/outer/Crab Gate Room.json index 7da30daa9d..3ed46b8757 100644 --- a/region/maridia/outer/Crab Gate Room.json +++ b/region/maridia/outer/Crab Gate Room.json @@ -619,6 +619,23 @@ }, "requires": [] }, + { + "link": [2, 1], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[3, 12], [3, 13]] + } + }, + "requires": [ + {"or": [ + "canGrappleTeleportWallEscape", + {"doorUnlockedAtNode": 1} + ]} + ], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 17, "link": [2, 1], diff --git a/region/maridia/outer/Crab Hole.json b/region/maridia/outer/Crab Hole.json index 1abdbe095c..b5df12df40 100644 --- a/region/maridia/outer/Crab Hole.json +++ b/region/maridia/outer/Crab Hole.json @@ -2160,6 +2160,23 @@ "This can be done at higher run speeds, with greater precision or an earlier jump through the door." ] }, + { + "link": [2, 4], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[12, 12], [12, 13]] + } + }, + "requires": [ + {"or": [ + "canGrappleTeleportWallEscape", + {"doorUnlockedAtNode": 4} + ]} + ], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 57, "link": [2, 4], @@ -2394,6 +2411,23 @@ }, "requires": [] }, + { + "link": [3, 1], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[3, 12], [3, 13]] + } + }, + "requires": [ + {"or": [ + "canGrappleTeleportWallEscape", + {"doorUnlockedAtNode": 1} + ]} + ], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 64, "link": [3, 1], diff --git a/region/norfair/crocomire/Grapple Tutorial Room 3.json b/region/norfair/crocomire/Grapple Tutorial Room 3.json index 77a718a0e0..e812eaee4c 100644 --- a/region/norfair/crocomire/Grapple Tutorial Room 3.json +++ b/region/norfair/crocomire/Grapple Tutorial Room 3.json @@ -761,6 +761,23 @@ "requires": [], "flashSuitChecked": true }, + { + "link": [2, 1], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[3, 12], [3, 13]] + } + }, + "requires": [ + {"or": [ + "canGrappleTeleportWallEscape", + {"doorUnlockedAtNode": 1} + ]} + ], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 26, "link": [2, 1], diff --git a/region/norfair/crocomire/Post Crocomire Shaft.json b/region/norfair/crocomire/Post Crocomire Shaft.json index 1b602bd27b..789e54621a 100644 --- a/region/norfair/crocomire/Post Crocomire Shaft.json +++ b/region/norfair/crocomire/Post Crocomire Shaft.json @@ -409,6 +409,23 @@ "To avoid a wall jump, it is possible to use the Viola as a frozen platform." ] }, + { + "link": [3, 1], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[3, 12], [3, 13]] + } + }, + "requires": [ + {"or": [ + "canGrappleTeleportWallEscape", + {"doorUnlockedAtNode": 1} + ]} + ], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 12, "link": [3, 1], diff --git a/region/norfair/east/Bat Cave.json b/region/norfair/east/Bat Cave.json index 527cba5e2a..29823f81ed 100644 --- a/region/norfair/east/Bat Cave.json +++ b/region/norfair/east/Bat Cave.json @@ -307,6 +307,28 @@ } ] }, + { + "link": [1, 2], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[3, 12], [3, 13]] + } + }, + "requires": [ + {"or": [ + "h_heatedGrappleTeleportWallEscape", + {"and": [ + {"doorUnlockedAtNode": 2}, + {"heatFrames": 20} + ]} + ]}, + "canOffScreenMovement" + ], + "clearsObstacles": ["A"], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 24, "link": [1, 2], diff --git a/region/norfair/east/Frog Speedway.json b/region/norfair/east/Frog Speedway.json index 2972fa3b0b..f317bd91a3 100644 --- a/region/norfair/east/Frog Speedway.json +++ b/region/norfair/east/Frog Speedway.json @@ -577,6 +577,23 @@ }, "requires": [] }, + { + "link": [2, 1], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[3, 12], [3, 13]] + } + }, + "requires": [ + {"or": [ + "canGrappleTeleportWallEscape", + {"doorUnlockedAtNode": 1} + ]} + ], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 24, "link": [2, 1], diff --git a/region/norfair/east/Single Chamber.json b/region/norfair/east/Single Chamber.json index 0bffb2f588..d3f9fa0157 100644 --- a/region/norfair/east/Single Chamber.json +++ b/region/norfair/east/Single Chamber.json @@ -648,6 +648,28 @@ {"heatFrames": 45} ] }, + { + "link": [2, 1], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[3, 12]] + } + }, + "requires": [ + {"or": [ + "h_heatedGrappleTeleportWallEscape", + {"and": [ + {"doorUnlockedAtNode": 1}, + {"heatFrames": 20} + ]} + ]}, + "canOffScreenMovement", + {"enemyDamage": {"enemy": "Multiviola", "type": "contact", "hits": 1}} + ], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 7, "link": [2, 1], @@ -1197,6 +1219,28 @@ {"heatFrames": 45} ] }, + { + "link": [3, 1], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[3, 12]] + } + }, + "requires": [ + {"or": [ + "h_heatedGrappleTeleportWallEscape", + {"and": [ + {"doorUnlockedAtNode": 1}, + {"heatFrames": 20} + ]} + ]}, + "canOffScreenMovement", + {"enemyDamage": {"enemy": "Multiviola", "type": "contact", "hits": 1}} + ], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 20, "link": [3, 1], @@ -1209,6 +1253,22 @@ "requires": [], "bypassesDoorShell": true }, + { + "link": [3, 1], + "name": "Carry Grapple Teleport", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[3, 12]] + } + }, + "requires": [], + "exitCondition": { + "leaveWithGrappleTeleport": { + "blockPositions": [[3, 12]] + } + }, + "bypassesDoorShell": true + }, { "id": 21, "link": [3, 1], @@ -1853,6 +1913,22 @@ "requires": [], "bypassesDoorShell": true }, + { + "link": [4, 1], + "name": "Carry Grapple Teleport", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[3, 12]] + } + }, + "requires": [], + "exitCondition": { + "leaveWithGrappleTeleport": { + "blockPositions": [[3, 12]] + } + }, + "bypassesDoorShell": true + }, { "id": 38, "link": [4, 1], @@ -2275,6 +2351,28 @@ {"heatFrames": 45} ] }, + { + "link": [5, 1], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[3, 12]] + } + }, + "requires": [ + {"or": [ + "h_heatedGrappleTeleportWallEscape", + {"and": [ + {"doorUnlockedAtNode": 1}, + {"heatFrames": 20} + ]} + ]}, + "canOffScreenMovement", + {"enemyDamage": {"enemy": "Multiviola", "type": "contact", "hits": 1}} + ], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 48, "link": [5, 1], @@ -2287,6 +2385,22 @@ "requires": [], "bypassesDoorShell": true }, + { + "link": [5, 1], + "name": "Carry Grapple Teleport", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[3, 12]] + } + }, + "requires": [], + "exitCondition": { + "leaveWithGrappleTeleport": { + "blockPositions": [[3, 12]] + } + }, + "bypassesDoorShell": true + }, { "id": 49, "link": [5, 1], diff --git a/region/wreckedship/main/Attic.json b/region/wreckedship/main/Attic.json index ef4ef76c42..34e60f5c5a 100644 --- a/region/wreckedship/main/Attic.json +++ b/region/wreckedship/main/Attic.json @@ -1156,6 +1156,24 @@ "clearsObstacles": ["A"], "flashSuitChecked": true }, + { + "link": [3, 1], + "name": "Grapple Teleport Door Escape", + "entranceCondition": { + "comeInWithGrappleTeleport": { + "blockPositions": [[3, 12], [3, 13]] + } + }, + "requires": [ + {"or": [ + "canGrappleTeleportWallEscape", + {"doorUnlockedAtNode": 1} + ]}, + "canOffScreenMovement" + ], + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true + }, { "id": 44, "link": [3, 1], diff --git a/tech.json b/tech.json index 074e15327b..386721c379 100644 --- a/tech.json +++ b/tech.json @@ -837,6 +837,42 @@ "The position to which Samus teleports corresponds to the position of the grapple block in the first room.", "The corresponding position in the destination room (counting tiles from the top-left corner of the room) must have a block to which Samus can remain grappled (e.g. a solid block would work but air would not);", "otherwise the teleport will not occur." + ], + "extensionTechs": [ + { + "name": "canGrappleTeleportWallEscape", + "techRequires": [ + "canGrappleTeleport" + ], + "otherRequires": [ + {"or": [ + "Morph", + "canXRayClimb" + ]} + ], + "note": [ + "Using specific movements to escape horizontally after grapple teleporting inside a door shell or wall:", + "1) press up to retract Grapple, pulling Samus as far out of the wall or door as far as possible,", + "2) hold a directional input away from the door or wall,", + "3) release Grapple while continuing to hold away from the door or wall,", + "4) if X-Ray is available, crouch and X-Ray climb until high enough to walk out of the door or wall,", + "5) or if Morph is available, turnaround spin-jump (in either direction), then morph and roll out." + ], + "detailNote": [ + "This technique assumes that Samus performed the Grapple teleport using glitched grapple hanging,", + "swinging into the transition with low momentum, in order to place Samus as far from the transition as possible in the next room,", + "and in a state that Samus will be able to stand or use X-Ray.", + "The method is not entirely reliable, as Samus has a chance of being crouched (instead of standing) and too low to roll out.", + "Samus' pose after the Grapple release is determined by the exact frame of the release:", + "there is a 10-frame cycle during which the grapple angular velocity alternates between clockwise and counterclockwise", + "(though Samus appears stationary the entire time),", + "with 6-frame good windows (leaving Samus standing) alternating with 4-frame bad windows (leaving Samus crouched).", + "This can be thought of as RNG, though the cycle is in sync with the animation of the Grapple beam", + "(the beam itself, not the flare at the attachment point),", + "so it could be possible to time the Grapple release based on the animation (if it is on-camera);", + "or it may be possible to time it by performing the whole sequence quickly soon after entering." + ] + } ] }, { diff --git a/tests/asserts/keywords.py b/tests/asserts/keywords.py index 854523bb32..d78e90589d 100644 --- a/tests/asserts/keywords.py +++ b/tests/asserts/keywords.py @@ -336,7 +336,8 @@ def check_heat_req(req): "h_LowerNorfairElevatorDownwardFrames", "h_LowerNorfairElevatorUpwardFrames", "h_MainHallElevatorFrames", "h_heatedGreenGateGlitch", "h_heatedDirectGModeLeaveSameDoor", "h_heatedIndirectGModeOpenSameDoor", - "h_heatedGModeOpenDifferentDoor", "h_heatedGModeOffCameraDoor", "h_heatedGModePauseAbuse"]: + "h_heatedGModeOpenDifferentDoor", "h_heatedGModeOffCameraDoor", "h_heatedGModePauseAbuse", + "h_heatedGrappleTeleportWallEscape"]: return True if isinstance(req, dict): if "heatFrames" in req or "heatFramesWithEnergyDrops" in req: