From 86a46d42e65c3c0f7895953558b455a0499c0228 Mon Sep 17 00:00:00 2001 From: Brent Kerby Date: Sat, 4 Oct 2025 19:29:46 -0600 Subject: [PATCH 1/3] Norfair East check flash suits pt. 5 (Purple Shaft) --- .../Lower Norfair Elevator Save Room.json | 9 +- .../norfair/east/Lower Norfair Elevator.json | 192 +++++++++++++++--- region/norfair/east/Magdollite Tunnel.json | 4 +- .../east/Norfair Reserve Tank Room.json | 96 ++++++--- region/norfair/east/Nutella Refill.json | 39 ++-- region/norfair/east/Purple Farming Room.json | 12 +- region/norfair/east/Purple Shaft.json | 185 +++++++++++------ 7 files changed, 403 insertions(+), 134 deletions(-) diff --git a/region/norfair/east/Lower Norfair Elevator Save Room.json b/region/norfair/east/Lower Norfair Elevator Save Room.json index 35ae28aafd..109457c391 100644 --- a/region/norfair/east/Lower Norfair Elevator Save Room.json +++ b/region/norfair/east/Lower Norfair Elevator Save Room.json @@ -61,7 +61,8 @@ "length": 4, "openEnd": 1 } - } + }, + "flashSuitChecked": true }, { "id": 2, @@ -76,13 +77,15 @@ "id": 3, "link": [1, 2], "name": "Base", - "requires": [] + "requires": [], + "flashSuitChecked": true }, { "id": 4, "link": [2, 1], "name": "Base", - "requires": [] + "requires": [], + "flashSuitChecked": true } ], "notables": [], diff --git a/region/norfair/east/Lower Norfair Elevator.json b/region/norfair/east/Lower Norfair Elevator.json index 9ade2a3674..5f650c615f 100644 --- a/region/norfair/east/Lower Norfair Elevator.json +++ b/region/norfair/east/Lower Norfair Elevator.json @@ -89,7 +89,8 @@ "length": 13, "openEnd": 0 } - } + }, + "flashSuitChecked": true }, { "id": 2, @@ -136,6 +137,67 @@ ], "flashSuitChecked": true }, + { + "link": [1, 2], + "name": "Leave with Runway", + "requires": [ + {"heatFrames": 10} + ], + "exitCondition": { + "leaveWithRunway": { + "length": 13, + "openEnd": 0 + } + }, + "unlocksDoors": [ + { + "types": ["missiles"], + "requires": [{"heatFrames": 50}] + }, + {"types": ["super"], "requires": []}, + { + "types": ["powerbomb"], + "requires": [{"heatFrames": 110}] + } + ], + "flashSuitChecked": true, + "devNote": [ + "The 10 heat frames are for moonwalking back against the door on entry.", + "FIXME: heat frames to unlock the door could be reduced." + ] + }, + { + "link": [1, 2], + "name": "Leave with Runway (Open Door)", + "requires": [ + {"doorUnlockedAtNode": 1}, + {"heatFrames": 65} + ], + "exitCondition": { + "leaveWithRunway": { + "length": 14, + "openEnd": 0 + } + }, + "unlocksDoors": [ + { + "nodeId": 2, + "types": ["missiles"], + "requires": [{"heatFrames": 50}] + }, + {"nodeId": 2, "types": ["super"], "requires": []}, + { + "nodeId": 2, + "types": ["powerbomb"], + "requires": [{"heatFrames": 110}] + } + ], + "flashSuitChecked": true, + "devNote": [ + "The 65 heat frames are for shooting open the door and moonwalking back into the doorway.", + "FIXME: heat frames to unlock the door could be reduced." + ] + }, { "id": 4, "link": [1, 2], @@ -167,7 +229,7 @@ } }, "requires": [ - {"heatFrames": 55}, + {"heatFrames": 20}, {"shineChargeFrames": 20} ], "exitCondition": { @@ -226,7 +288,8 @@ "types": ["missiles"], "requires": [{"heatFrames": 50}] } - ] + ], + "flashSuitChecked": true }, { "id": 48, @@ -253,7 +316,8 @@ } }, "requires": [], - "bypassesDoorShell": true + "bypassesDoorShell": true, + "flashSuitChecked": true }, { "id": 8, @@ -270,7 +334,8 @@ "blockPositions": [[12, 12]] } }, - "bypassesDoorShell": true + "bypassesDoorShell": true, + "flashSuitChecked": true }, { "id": 9, @@ -287,7 +352,8 @@ "blockPositions": [[12, 13]] } }, - "bypassesDoorShell": true + "bypassesDoorShell": true, + "flashSuitChecked": true }, { "id": 10, @@ -342,7 +408,7 @@ "requires": [ {"heatFrames": 30} ], - "devNote": "60 frames to cross the room, but 40 to and from the elevator, so the other 10 frames are listed in 3->4." + "flashSuitChecked": true }, { "id": 13, @@ -374,8 +440,8 @@ }, "requires": [ "h_LowerNorfairElevatorDownwardFrames", - {"heatFrames": 90}, - {"shineChargeFrames": 50} + {"heatFrames": 45}, + {"shineChargeFrames": 45} ], "exitCondition": { "leaveShinecharged": {} @@ -394,7 +460,7 @@ }, "requires": [ "h_LowerNorfairElevatorDownwardFrames", - {"heatFrames": 40}, + {"heatFrames": 15}, {"shineChargeFrames": 15} ], "exitCondition": { @@ -431,6 +497,67 @@ ], "flashSuitChecked": true }, + { + "link": [2, 1], + "name": "Leave with Runway", + "requires": [ + {"heatFrames": 10} + ], + "exitCondition": { + "leaveWithRunway": { + "length": 13, + "openEnd": 0 + } + }, + "unlocksDoors": [ + { + "types": ["missiles"], + "requires": [{"heatFrames": 50}] + }, + {"types": ["super"], "requires": []}, + { + "types": ["powerbomb"], + "requires": [{"heatFrames": 110}] + } + ], + "flashSuitChecked": true, + "devNote": [ + "The 10 heat frames are for moonwalking back against the door on entry.", + "FIXME: heat frames to unlock the door could be reduced." + ] + }, + { + "link": [2, 1], + "name": "Leave with Runway (Open Door)", + "requires": [ + {"doorUnlockedAtNode": 2}, + {"heatFrames": 65} + ], + "exitCondition": { + "leaveWithRunway": { + "length": 14, + "openEnd": 0 + } + }, + "unlocksDoors": [ + { + "nodeId": 1, + "types": ["missiles"], + "requires": [{"heatFrames": 50}] + }, + {"nodeId": 1, "types": ["super"], "requires": []}, + { + "nodeId": 1, + "types": ["powerbomb"], + "requires": [{"heatFrames": 110}] + } + ], + "flashSuitChecked": true, + "devNote": [ + "The 65 heat frames are for shooting open the door and moonwalking back into the doorway.", + "FIXME: heat frames to unlock the door could be reduced." + ] + }, { "id": 16, "link": [2, 1], @@ -462,8 +589,8 @@ } }, "requires": [ - {"heatFrames": 55}, - {"shineChargeFrames": 25} + {"heatFrames": 20}, + {"shineChargeFrames": 20} ], "exitCondition": { "leaveShinecharged": {} @@ -521,7 +648,8 @@ "types": ["missiles"], "requires": [{"heatFrames": 50}] } - ] + ], + "flashSuitChecked": true }, { "id": 19, @@ -594,7 +722,8 @@ } }, "requires": [], - "bypassesDoorShell": true + "bypassesDoorShell": true, + "flashSuitChecked": true }, { "id": 22, @@ -611,7 +740,8 @@ "blockPositions": [[3, 12]] } }, - "bypassesDoorShell": true + "bypassesDoorShell": true, + "flashSuitChecked": true }, { "id": 23, @@ -628,7 +758,8 @@ "blockPositions": [[3, 13]] } }, - "bypassesDoorShell": true + "bypassesDoorShell": true, + "flashSuitChecked": true }, { "id": 24, @@ -640,7 +771,8 @@ "length": 13, "openEnd": 0 } - } + }, + "flashSuitChecked": true }, { "id": 25, @@ -667,7 +799,8 @@ "types": ["powerbomb"], "requires": [{"heatFrames": 110}] } - ] + ], + "flashSuitChecked": true }, { "id": 26, @@ -685,7 +818,7 @@ "requires": [ {"heatFrames": 30} ], - "devNote": "60 frames to cross the room, but 40 to and from the elevator, so the other 10 frames are listed in 3->4." + "flashSuitChecked": true }, { "id": 28, @@ -717,8 +850,8 @@ }, "requires": [ "h_LowerNorfairElevatorDownwardFrames", - {"heatFrames": 90}, - {"shineChargeFrames": 50} + {"heatFrames": 45}, + {"shineChargeFrames": 45} ], "exitCondition": { "leaveShinecharged": {} @@ -737,7 +870,7 @@ }, "requires": [ "h_LowerNorfairElevatorDownwardFrames", - {"heatFrames": 40}, + {"heatFrames": 15}, {"shineChargeFrames": 15} ], "exitCondition": { @@ -770,14 +903,15 @@ "link": [4, 1], "name": "Base", "requires": [ - {"heatFrames": 50} + {"heatFrames": 45} ], "unlocksDoors": [ { "types": ["missiles"], "requires": [{"heatFrames": 30}] } - ] + ], + "flashSuitChecked": true }, { "id": 37, @@ -787,10 +921,10 @@ "comeInShinecharged": {} }, "requires": [ - {"shineChargeFrames": 50}, + {"shineChargeFrames": 45}, "canShinechargeMovementComplex", "h_LowerNorfairElevatorUpwardFrames", - {"heatFrames": 50} + {"heatFrames": 45} ], "exitCondition": { "leaveShinecharged": {} @@ -850,7 +984,8 @@ "types": ["missiles"], "requires": [{"heatFrames": 30}] } - ] + ], + "flashSuitChecked": true }, { "id": 39, @@ -920,7 +1055,8 @@ ], "exitCondition": { "leaveNormally": {} - } + }, + "flashSuitChecked": true }, { "id": 42, diff --git a/region/norfair/east/Magdollite Tunnel.json b/region/norfair/east/Magdollite Tunnel.json index ca82258eff..30c476b141 100644 --- a/region/norfair/east/Magdollite Tunnel.json +++ b/region/norfair/east/Magdollite Tunnel.json @@ -296,7 +296,8 @@ "types": ["missiles"], "requires": [{"heatFrames": 50}] } - ] + ], + "flashSuitChecked": true }, { "id": 28, @@ -531,6 +532,7 @@ "requires": [{"heatFrames": 50}] } ], + "flashSuitChecked": true, "devNote": [ "A run speed of $0.7 would be enough to make the first jump (and even less could work with an additional jump).", "The slightly higher speed of $0.A saves a few heat frames, making it reasonable enough to get through on 1 tank.", diff --git a/region/norfair/east/Norfair Reserve Tank Room.json b/region/norfair/east/Norfair Reserve Tank Room.json index 5db004ab22..387aef27b5 100644 --- a/region/norfair/east/Norfair Reserve Tank Room.json +++ b/region/norfair/east/Norfair Reserve Tank Room.json @@ -131,7 +131,8 @@ "length": 4, "openEnd": 1 } - } + }, + "flashSuitChecked": true }, { "id": 2, @@ -239,9 +240,11 @@ {"tech": "canUsePowerBombLag"}, "canInsaneJump" ]}, - {"heatFrames": 400} + {"heatFrames": 400}, + "h_trickyToCarryFlashSuit" ], - "collectsItems": [3] + "collectsItems": [3], + "flashSuitChecked": true }, { "id": 36, @@ -278,6 +281,7 @@ {"resourceAtMost": [{"type": "RegularEnergy", "count": 1}]} ], "collectsItems": [2, 3], + "flashSuitChecked": true, "note": [ "Very quickly cross the room, collecting both items without falling into the lava.", "A Power Bomb in the middle of the room sets up the Sova drops and adds lag which makes the block item easier to collect with a Flatley jump.", @@ -330,7 +334,8 @@ "requires": [ "SpaceJump", {"heatFrames": 199} - ] + ], + "flashSuitChecked": true }, { "id": 6, @@ -345,7 +350,8 @@ "requires": [ "SpaceJump", {"heatFrames": 140} - ] + ], + "flashSuitChecked": true }, { "id": 7, @@ -358,6 +364,7 @@ {"heatFrames": 199} ], "clearsObstacles": ["A"], + "flashSuitChecked": true, "note": "Clear the Dragons while moving towards the items with Space Jump and Screw Attack to make for a faster exit later." }, { @@ -373,7 +380,8 @@ "canDownGrab", {"shinespark": {"frames": 39}}, {"heatFrames": 142} - ] + ], + "flashSuitChecked": true }, { "id": 37, @@ -387,7 +395,8 @@ "canMidairShinespark", {"shinespark": {"frames": 38, "excessFrames": 1}}, {"heatFrames": 160} - ] + ], + "flashSuitChecked": true }, { "id": 38, @@ -403,7 +412,8 @@ "canMidairShinespark", {"shinespark": {"frames": 37, "excessFrames": 1}}, {"heatFrames": 160} - ] + ], + "flashSuitChecked": true }, { "id": 9, @@ -417,6 +427,7 @@ "requires": [ {"heatFrames": 120} ], + "flashSuitChecked": true, "note": [ "After teleporting, press down to retract Grapple and swing to the right.", "Then swing to the left to the platform with the Chozo ball item.", @@ -437,9 +448,11 @@ "enemies": [["Dragon"], ["Dragon", "Dragon"]], "explicitWeapons": ["PowerBomb"] }}, - {"heatFrames": 270} + {"heatFrames": 270}, + "h_trickyToCarryFlashSuit" ], "clearsObstacles": ["A"], + "flashSuitChecked": true, "note": [ "Place a Power Bomb while waiting for the middle Dragon to shoot a fireball, to clear the Sovas for later.", "Place a second Power Bomb while jumping up from the lower item block to clear the remaining enemies for the return trip." @@ -460,10 +473,12 @@ "enemies": [["Dragon"], ["Dragon", "Dragon"]], "explicitWeapons": ["PowerBomb"] }}, - {"heatFrames": 260} + {"heatFrames": 260}, + "h_trickyToCarryFlashSuit" ], "clearsObstacles": ["A"], "collectsItems": [3], + "flashSuitChecked": true, "note": [ "Place a Power Bomb while waiting for the middle Dragon to shoot a fireball, to clear the Sovas for later.", "While the item block is breaking, turn around to perform a Flatley jump to collect the item and jump to the ledge item in one motion.", @@ -499,7 +514,8 @@ {"heatFrames": 100} ]} ]} - ] + ], + "flashSuitChecked": true }, { "id": 11, @@ -524,7 +540,8 @@ ]} ]} ], - "clearsObstacles": ["A"] + "clearsObstacles": ["A"], + "flashSuitChecked": true }, { "id": 45, @@ -562,7 +579,8 @@ ]} ]}, {"heatFrames": 195} - ] + ], + "flashSuitChecked": true }, { "id": 39, @@ -578,7 +596,8 @@ "ScrewAttack" ]}, {"heatFrames": 210} - ] + ], + "flashSuitChecked": true }, { "id": 13, @@ -587,7 +606,8 @@ "requires": [ "SpaceJump", {"heatFrames": 180} - ] + ], + "flashSuitChecked": true }, { "id": 14, @@ -602,6 +622,7 @@ {"heatFrames": 570} ], "clearsObstacles": ["A"], + "flashSuitChecked": true, "devNote": "Ice can move through the room more quickly but must spend time refreezing the dragons." }, { @@ -613,6 +634,7 @@ "canDodgeWhileShooting", {"heatFrames": 840} ], + "flashSuitChecked": true, "note": [ "Clear the Sovas while standing in a safe spot from the Dragon Fireballs.", "Bring each Dragon on screen one at a time so that there are fewer projectiles to avoid." @@ -631,6 +653,7 @@ {"heatFrames": 840} ], "clearsObstacles": ["A"], + "flashSuitChecked": true, "note": [ "Bring each Dragon on screen one at a time so that there are fewer projectiles to avoid.", "Place one Power Bomb on the right side to clear the right Dragon and Sovas.", @@ -651,8 +674,10 @@ "enemies": [["Dragon"]], "explicitWeapons": ["PowerBomb"] }}, - {"heatFrames": 180} + {"heatFrames": 180}, + "h_trickyToCarryFlashSuit" ], + "flashSuitChecked": true, "note": [ "Place a Power Bomb while waiting for the middle Dragon to shoot a fireball, to clear the Sovas for later.", "A second Power Bomb will be needed to clear the remaining Dragons for the return trip." @@ -666,7 +691,8 @@ "requires": [ "SpaceJump", {"heatFrames": 210} - ] + ], + "flashSuitChecked": true }, { "id": 40, @@ -690,6 +716,7 @@ }}, {"heatFrames": 80} ], + "flashSuitChecked": true, "note": ["Return while collecting Sova drops."] }, { @@ -707,7 +734,8 @@ "name": "Base", "requires": [ {"heatFrames": 90} - ] + ], + "flashSuitChecked": true }, { "id": 20, @@ -722,7 +750,8 @@ {"heatFrames": 130} ]} ]} - ] + ], + "flashSuitChecked": true }, { "id": 21, @@ -747,7 +776,8 @@ ]} ]} ], - "clearsObstacles": ["A"] + "clearsObstacles": ["A"], + "flashSuitChecked": true }, { "id": 22, @@ -771,7 +801,8 @@ {"lavaFrames": 20} ]} ]} - ] + ], + "flashSuitChecked": true }, { "id": 23, @@ -781,7 +812,8 @@ "canSpringBallJumpMidAir", {"heatFrames": 80}, {"lavaFrames": 25} - ] + ], + "flashSuitChecked": true }, { "id": 24, @@ -812,7 +844,8 @@ {"lavaFrames": 65} ]} ]} - ] + ], + "flashSuitChecked": true }, { "id": 25, @@ -823,6 +856,7 @@ "canFlatleyJump", {"heatFrames": 30} ], + "flashSuitChecked": true, "note": [ "Time the breaking of the hidden item block with a spinjump to avoid falling into the lava.", "Turnaround just before the item fanfare begins and then hold jump to buffer a spinjump." @@ -836,7 +870,8 @@ "canSpringBallJumpMidAir", {"heatFrames": 80}, {"lavaFrames": 25} - ] + ], + "flashSuitChecked": true }, { "id": 27, @@ -846,6 +881,7 @@ "canTrickyUseFrozenEnemies", {"heatFrames": 30} ], + "flashSuitChecked": true, "note": "Use Ice to freeze the Sova in a position where Samus can collect the item without falling into the lava.", "devNote": "The cost comes from setting up the freeze. Collecting the item and returning to 4 will be instantaneous." }, @@ -866,7 +902,8 @@ ]} ]}, {"heatFrames": 210} - ] + ], + "flashSuitChecked": true }, { "id": 29, @@ -882,6 +919,7 @@ {"heatFrames": 570} ], "clearsObstacles": ["A"], + "flashSuitChecked": true, "devNote": "Ice can move through the room more quickly but must spend time refreezing the dragons." }, { @@ -892,6 +930,7 @@ "canCarefulJump", {"heatFrames": 480} ], + "flashSuitChecked": true, "note": "Return with careful jumps, avoiding Dragons." }, { @@ -915,6 +954,7 @@ }}, {"heatFrames": 40} ], + "flashSuitChecked": true, "note": ["Return while collecting Sova drops."] }, { @@ -923,7 +963,8 @@ "name": "Base", "requires": [ {"heatFrames": 60} - ] + ], + "flashSuitChecked": true }, { "id": 31, @@ -931,7 +972,8 @@ "name": "Base", "requires": [ {"heatFrames": 0} - ] + ], + "flashSuitChecked": true } ], "notables": [ diff --git a/region/norfair/east/Nutella Refill.json b/region/norfair/east/Nutella Refill.json index 66578cff2e..2b3a6d8a8d 100644 --- a/region/norfair/east/Nutella Refill.json +++ b/region/norfair/east/Nutella Refill.json @@ -84,7 +84,8 @@ "length": 3, "openEnd": 1 } - } + }, + "flashSuitChecked": true }, { "id": 2, @@ -214,7 +215,8 @@ } }, "requires": [], - "bypassesDoorShell": true + "bypassesDoorShell": true, + "flashSuitChecked": true }, { "id": 8, @@ -231,7 +233,8 @@ "blockPositions": [[12, 12]] } }, - "bypassesDoorShell": true + "bypassesDoorShell": true, + "flashSuitChecked": true }, { "id": 9, @@ -248,13 +251,15 @@ "blockPositions": [[12, 13]] } }, - "bypassesDoorShell": true + "bypassesDoorShell": true, + "flashSuitChecked": true }, { "id": 10, "link": [1, 3], "name": "Base", - "requires": [] + "requires": [], + "flashSuitChecked": true }, { "id": 11, @@ -375,7 +380,8 @@ } }, "requires": [], - "bypassesDoorShell": true + "bypassesDoorShell": true, + "flashSuitChecked": true }, { "id": 16, @@ -392,7 +398,8 @@ "blockPositions": [[3, 12]] } }, - "bypassesDoorShell": true + "bypassesDoorShell": true, + "flashSuitChecked": true }, { "id": 17, @@ -409,7 +416,8 @@ "blockPositions": [[3, 13]] } }, - "bypassesDoorShell": true + "bypassesDoorShell": true, + "flashSuitChecked": true }, { "id": 18, @@ -421,25 +429,29 @@ "length": 3, "openEnd": 1 } - } + }, + "flashSuitChecked": true }, { "id": 19, "link": [2, 3], "name": "Base", - "requires": [] + "requires": [], + "flashSuitChecked": true }, { "id": 20, "link": [3, 1], "name": "Base", - "requires": [] + "requires": [], + "flashSuitChecked": true }, { "id": 21, "link": [3, 2], "name": "Base", - "requires": [] + "requires": [], + "flashSuitChecked": true }, { "id": 22, @@ -447,7 +459,8 @@ "name": "Refill", "requires": [ "h_useEnergyRefillStation" - ] + ], + "flashSuitChecked": true } ], "notables": [], diff --git a/region/norfair/east/Purple Farming Room.json b/region/norfair/east/Purple Farming Room.json index a37b28df9f..4dd13aa5d0 100644 --- a/region/norfair/east/Purple Farming Room.json +++ b/region/norfair/east/Purple Farming Room.json @@ -69,7 +69,8 @@ "length": 4, "openEnd": 0 } - } + }, + "flashSuitChecked": true }, { "id": 1, @@ -77,15 +78,17 @@ "name": "Base", "requires": [ {"heatFrames": 10} - ] + ], + "flashSuitChecked": true }, { "id": 2, "link": [2, 1], "name": "Base", "requires": [ - {"heatFrames": 50} - ] + {"heatFrames": 30} + ], + "flashSuitChecked": true }, { "id": 3, @@ -104,6 +107,7 @@ } }, "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "flashSuitChecked": true, "note": "Involves leaving some drops hanging after killing the Gamets so they don't respawn.", "devNote": "Health drops are collected while using this runway, offsetting any heat frames used to get into position." }, diff --git a/region/norfair/east/Purple Shaft.json b/region/norfair/east/Purple Shaft.json index 6f0b0032d0..1931884b26 100644 --- a/region/norfair/east/Purple Shaft.json +++ b/region/norfair/east/Purple Shaft.json @@ -107,7 +107,8 @@ "leaveWithDoorFrameBelow": { "height": 3 } - } + }, + "flashSuitChecked": true }, { "id": 3, @@ -122,7 +123,8 @@ "leftPosition": -3.5, "rightPosition": 3.5 } - } + }, + "flashSuitChecked": true }, { "id": 4, @@ -178,14 +180,15 @@ "link": [1, 2], "name": "Base", "requires": [ - {"heatFrames": 120} + {"heatFrames": 115} ], "unlocksDoors": [ { "types": ["powerbomb"], "requires": [{"heatFrames": 60}] } - ] + ], + "flashSuitChecked": true }, { "id": 7, @@ -210,7 +213,8 @@ "types": ["powerbomb"], "requires": [{"heatFrames": 60}] } - ] + ], + "flashSuitChecked": true }, { "id": 8, @@ -273,6 +277,36 @@ ], "flashSuitChecked": true }, + { + "link": [1, 3], + "name": "Base", + "requires": [ + {"heatFrames": 180} + ], + "flashSuitChecked": true + }, + { + "link": [1, 3], + "name": "Come in Shinecharged, Leave With Spark", + "entranceCondition": { + "comeInShinecharged": {}, + "comesThroughToilet": "any" + }, + "requires": [ + "canShinechargeMovementTricky", + {"shineChargeFrames": 150}, + {"heatFrames": 185}, + {"shinespark": {"frames": 9, "excessFrames": 0}} + ], + "exitCondition": { + "leaveWithSpark": {} + }, + "unlocksDoors": [ + {"types": ["super"], "requires": []}, + {"types": ["missiles", "powerbomb"], "requires": ["never"]} + ], + "flashSuitChecked": true + }, { "id": 53, "link": [1, 3], @@ -294,24 +328,26 @@ "link": [2, 1], "name": "Base", "requires": [ - {"heatFrames": 180} - ] + {"heatFrames": 170} + ], + "flashSuitChecked": true }, { "id": 11, "link": [2, 1], "name": "HiJump", "requires": [ - {"heatFrames": 150}, + {"heatFrames": 140}, "HiJump" - ] + ], + "flashSuitChecked": true }, { "id": 12, "link": [2, 1], "name": "Leave With Door Frame Below", "requires": [ - {"heatFrames": 180} + {"heatFrames": 170} ], "exitCondition": { "leaveWithDoorFrameBelow": { @@ -328,14 +364,15 @@ "types": ["powerbomb"], "requires": [{"heatFrames": 110}] } - ] + ], + "flashSuitChecked": true }, { "id": 13, "link": [2, 1], "name": "Leave With Platform Below", "requires": [ - {"heatFrames": 180} + {"heatFrames": 170} ], "exitCondition": { "leaveWithPlatformBelow": { @@ -361,7 +398,7 @@ "link": [2, 1], "name": "Leave With Platform Below (HiJump)", "requires": [ - {"heatFrames": 150}, + {"heatFrames": 140}, "HiJump" ], "exitCondition": { @@ -418,8 +455,8 @@ "requires": [ "canShinechargeMovementComplex", "HiJump", - {"heatFrames": 150}, - {"shineChargeFrames": 145} + {"heatFrames": 140}, + {"shineChargeFrames": 140} ], "exitCondition": { "leaveShinecharged": {} @@ -451,7 +488,8 @@ "unlocksDoors": [ {"types": ["super"], "requires": []}, {"types": ["missiles", "powerbomb"], "requires": ["never"]} - ] + ], + "flashSuitChecked": true }, { "id": 46, @@ -483,7 +521,8 @@ "types": ["missiles"], "requires": [{"heatFrames": 50}] } - ] + ], + "flashSuitChecked": true }, { "id": 54, @@ -517,6 +556,7 @@ {"heatFrames": 80} ]} ], + "flashSuitChecked": true, "note": [ "After teleporting, briefly press down to extend Grapple, then press up to retract it again.", "Release Grapple to fall onto the platform below the door." @@ -533,7 +573,8 @@ }, "requires": [ {"heatFrames": 75} - ] + ], + "flashSuitChecked": true }, { "id": 20, @@ -545,7 +586,8 @@ "length": 4, "openEnd": 1 } - } + }, + "flashSuitChecked": true }, { "id": 21, @@ -561,14 +603,15 @@ "link": [2, 3], "name": "Base", "requires": [ - {"heatFrames": 120} + {"heatFrames": 115} ], "unlocksDoors": [ { "types": ["powerbomb"], "requires": [{"heatFrames": 60}] } - ] + ], + "flashSuitChecked": true }, { "id": 23, @@ -593,7 +636,8 @@ "types": ["powerbomb"], "requires": [{"heatFrames": 60}] } - ] + ], + "flashSuitChecked": true }, { "id": 24, @@ -603,8 +647,8 @@ "comeInShinecharged": {} }, "requires": [ - {"shineChargeFrames": 125}, - {"heatFrames": 125} + {"shineChargeFrames": 115}, + {"heatFrames": 115} ], "exitCondition": { "leaveShinecharged": {} @@ -626,7 +670,7 @@ } }, "requires": [ - {"heatFrames": 115}, + {"heatFrames": 105}, {"shineChargeFrames": 105} ], "exitCondition": { @@ -646,8 +690,8 @@ "comeInShinecharged": {} }, "requires": [ - {"shineChargeFrames": 110}, - {"shinespark": {"frames": 5}}, + {"shineChargeFrames": 85}, + {"shinespark": {"frames": 8}}, {"heatFrames": 120} ], "exitCondition": { @@ -687,7 +731,8 @@ "types": ["missiles"], "requires": [{"heatFrames": 50}] } - ] + ], + "flashSuitChecked": true }, { "id": 55, @@ -704,6 +749,20 @@ ], "flashSuitChecked": true }, + { + "link": [3, 1], + "name": "Base", + "requires": [ + {"or": [ + {"heatFrames": 280}, + {"and": [ + "HiJump", + {"heatFrames": 220} + ]} + ]} + ], + "flashSuitChecked": true + }, { "id": 48, "link": [3, 1], @@ -734,7 +793,8 @@ "types": ["missiles"], "requires": [{"heatFrames": 50}] } - ] + ], + "flashSuitChecked": true }, { "id": 49, @@ -766,7 +826,8 @@ "types": ["missiles"], "requires": [{"heatFrames": 50}] } - ] + ], + "flashSuitChecked": true }, { "id": 56, @@ -800,7 +861,8 @@ "note": [ "After teleporting, briefly press down to extend Grapple, then press up to retract it again.", "Release Grapple to fall onto the platform below the door." - ] + ], + "flashSuitChecked": true }, { "id": 28, @@ -813,21 +875,23 @@ }, "requires": [ {"heatFrames": 75} - ] + ], + "flashSuitChecked": true }, { "id": 29, "link": [3, 2], "name": "Base", "requires": [ - {"heatFrames": 145} + {"heatFrames": 135} ], "unlocksDoors": [ { "types": ["powerbomb"], "requires": [{"heatFrames": 60}] } - ] + ], + "flashSuitChecked": true }, { "id": 30, @@ -835,14 +899,15 @@ "name": "HiJump", "requires": [ "HiJump", - {"heatFrames": 120} + {"heatFrames": 115} ], "unlocksDoors": [ { "types": ["powerbomb"], "requires": [{"heatFrames": 60}] } - ] + ], + "flashSuitChecked": true }, { "id": 31, @@ -889,7 +954,8 @@ "types": ["powerbomb"], "requires": [{"heatFrames": 60}] } - ] + ], + "flashSuitChecked": true }, { "id": 33, @@ -921,9 +987,9 @@ "comeInShinecharged": {} }, "requires": [ - {"shineChargeFrames": 140}, + {"shineChargeFrames": 135}, "canShinechargeMovementComplex", - {"heatFrames": 140} + {"heatFrames": 135} ], "exitCondition": { "leaveShinecharged": {} @@ -945,8 +1011,8 @@ {"shineChargeFrames": 90}, "HiJump", "canShinechargeMovementComplex", - {"heatFrames": 125}, - {"shinespark": {"frames": 4, "excessFrames": 0}} + {"heatFrames": 120}, + {"shinespark": {"frames": 7, "excessFrames": 0}} ], "exitCondition": { "leaveWithSpark": {} @@ -965,10 +1031,9 @@ "comeInShinecharged": {} }, "requires": [ - {"shineChargeFrames": 125}, - "HiJump", + {"shineChargeFrames": 115}, "canShinechargeMovementComplex", - {"heatFrames": 155}, + {"heatFrames": 145}, {"shinespark": {"frames": 6, "excessFrames": 0}} ], "exitCondition": { @@ -992,8 +1057,8 @@ }, "requires": [ "canShinechargeMovementComplex", - {"heatFrames": 175}, - {"shineChargeFrames": 140} + {"heatFrames": 135}, + {"shineChargeFrames": 135} ], "exitCondition": { "leaveShinecharged": {} @@ -1016,8 +1081,8 @@ }, "requires": [ "canShinechargeMovementComplex", - {"heatFrames": 140}, - {"shineChargeFrames": 120} + {"heatFrames": 115}, + {"shineChargeFrames": 115} ], "exitCondition": { "leaveShinecharged": {} @@ -1040,8 +1105,8 @@ }, "requires": [ "canShinechargeMovementComplex", - {"heatFrames": 115}, - {"shineChargeFrames": 110} + {"heatFrames": 105}, + {"shineChargeFrames": 105} ], "exitCondition": { "leaveShinecharged": {} @@ -1064,8 +1129,8 @@ }, "requires": [ "canShinechargeMovementTricky", - {"heatFrames": 205}, - {"shineChargeFrames": 170} + {"heatFrames": 165}, + {"shineChargeFrames": 165} ], "exitCondition": { "leaveShinecharged": {} @@ -1088,7 +1153,7 @@ }, "requires": [ "canShinechargeMovementComplex", - {"heatFrames": 165}, + {"heatFrames": 145}, {"shineChargeFrames": 145} ], "exitCondition": { @@ -1112,7 +1177,7 @@ }, "requires": [ "canShinechargeMovementComplex", - {"heatFrames": 140}, + {"heatFrames": 135}, {"shineChargeFrames": 135} ], "exitCondition": { @@ -1136,7 +1201,7 @@ }, "requires": [ "canShinechargeMovementComplex", - {"heatFrames": 195}, + {"heatFrames": 170}, {"shinespark": {"frames": 9, "excessFrames": 0}} ], "exitCondition": { @@ -1146,6 +1211,7 @@ {"types": ["super"], "requires": []}, {"types": ["missiles", "powerbomb"], "requires": ["never"]} ], + "flashSuitChecked": true, "devNote": [ "This Leave With Spark variation is included since leaving with frames remaining is tight.", "For shorter runway uses (or with HiJump), a spark variation is not needed as you can leave with plenty of frames." @@ -1179,7 +1245,8 @@ "types": ["missiles"], "requires": [{"heatFrames": 50}] } - ] + ], + "flashSuitChecked": true }, { "id": 51, @@ -1209,7 +1276,8 @@ "types": ["missiles"], "requires": [{"heatFrames": 50}] } - ] + ], + "flashSuitChecked": true }, { "id": 57, @@ -1236,7 +1304,8 @@ "length": 13, "openEnd": 0 } - } + }, + "flashSuitChecked": true }, { "id": 45, From 99966947f73cbdeb5640052edbba83334fd0eabb Mon Sep 17 00:00:00 2001 From: Brent Kerby Date: Wed, 8 Oct 2025 16:15:27 -0600 Subject: [PATCH 2/3] add doorUnlockedAtNode reqs in Purple Shaft grapple teleports --- region/norfair/east/Purple Shaft.json | 28 +++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/region/norfair/east/Purple Shaft.json b/region/norfair/east/Purple Shaft.json index 1931884b26..ba7561b191 100644 --- a/region/norfair/east/Purple Shaft.json +++ b/region/norfair/east/Purple Shaft.json @@ -554,7 +554,12 @@ {"or": [ "canOffScreenMovement", {"heatFrames": 80} - ]} + ]}, + {"doorUnlockedAtNode": 1} + ], + "unlocksDoors": [ + {"types": ["powerbomb"], "requires": [{"heatFrames": 110}]}, + {"types": ["missiles", "super"], "requires": ["never"]} ], "flashSuitChecked": true, "note": [ @@ -572,7 +577,12 @@ } }, "requires": [ - {"heatFrames": 75} + {"heatFrames": 75}, + {"doorUnlockedAtNode": 1} + ], + "unlocksDoors": [ + {"types": ["powerbomb"], "requires": [{"heatFrames": 110}]}, + {"types": ["missiles", "super"], "requires": ["never"]} ], "flashSuitChecked": true }, @@ -856,7 +866,12 @@ }, "requires": [ {"heatFrames": 100}, - "canOffScreenMovement" + "canOffScreenMovement", + {"doorUnlockedAtNode": 1} + ], + "unlocksDoors": [ + {"types": ["powerbomb"], "requires": [{"heatFrames": 110}]}, + {"types": ["missiles", "super"], "requires": ["never"]} ], "note": [ "After teleporting, briefly press down to extend Grapple, then press up to retract it again.", @@ -874,7 +889,12 @@ } }, "requires": [ - {"heatFrames": 75} + {"heatFrames": 75}, + {"doorUnlockedAtNode": 1} + ], + "unlocksDoors": [ + {"types": ["powerbomb"], "requires": [{"heatFrames": 110}]}, + {"types": ["missiles", "super"], "requires": ["never"]} ], "flashSuitChecked": true }, From b13cc4557edc90db4279eba5422a065fae20ddfa Mon Sep 17 00:00:00 2001 From: Brent Kerby Date: Wed, 8 Oct 2025 16:16:44 -0600 Subject: [PATCH 3/3] add flashSuitChecked to strats 13, 14 --- region/norfair/east/Purple Shaft.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/region/norfair/east/Purple Shaft.json b/region/norfair/east/Purple Shaft.json index ba7561b191..e6621db744 100644 --- a/region/norfair/east/Purple Shaft.json +++ b/region/norfair/east/Purple Shaft.json @@ -391,7 +391,8 @@ "types": ["powerbomb"], "requires": [{"heatFrames": 110}] } - ] + ], + "flashSuitChecked": true }, { "id": 14, @@ -418,7 +419,8 @@ "types": ["powerbomb"], "requires": [{"heatFrames": 110}] } - ] + ], + "flashSuitChecked": true }, { "id": 15,