From 74ee1cc60ed69d16a65c0b9d83628b4fc8b71d31 Mon Sep 17 00:00:00 2001 From: Brent Kerby Date: Tue, 20 May 2025 10:51:52 -0600 Subject: [PATCH 1/3] Refine Halfie Climb water shinecharges --- .../maridia/inner-pink/Halfie Climb Room.json | 607 ++++++++++++------ 1 file changed, 398 insertions(+), 209 deletions(-) diff --git a/region/maridia/inner-pink/Halfie Climb Room.json b/region/maridia/inner-pink/Halfie Climb Room.json index bb75231ae6..e5155297ee 100644 --- a/region/maridia/inner-pink/Halfie Climb Room.json +++ b/region/maridia/inner-pink/Halfie Climb Room.json @@ -95,6 +95,20 @@ [1, 2, 1, 1, 1] ], "note": "Represents being in the Morph tunnel with Artificial Morph, likely moving off camera towards the opposite side of the room." + }, + { + "id": 6, + "name": "Bottom Shinecharged", + "nodeType": "junction", + "nodeSubType": "junction", + "mapTileMask": [ + [1, 0, 0, 0, 0], + [1, 0, 0, 0, 0], + [2, 1, 1, 1, 1] + ], + "devNote": [ + "This represents being shinecharged at the end of the runway opposite the bottom-left door." + ] } ], "enemies": [ @@ -134,7 +148,8 @@ "id": 4, "devNote": "This link is only for the shinespark, mochtroid climbing or cross room jump. Other strats should go 2 -> 1 -> 4." }, - {"id": 5} + {"id": 5}, + {"id": 6} ] }, { @@ -171,6 +186,14 @@ {"id": 3}, {"id": 4} ] + }, + { + "from": 6, + "to": [ + {"id": 1}, + {"id": 2}, + {"id": 4} + ] } ], "strats": [ @@ -1376,7 +1399,7 @@ { "id": 39, "link": [2, 1], - "name": "Shinespark", + "name": "Come in Shinecharged, Shinespark", "entranceCondition": { "comeInShinecharged": {} }, @@ -1445,108 +1468,6 @@ "note": "Only requires a runway of 1 tile in the adjacent room.", "devNote": "This can be done with a shorter runway (closed end) and canMomentumConservingTurnaround, but that type of connection doesn't exist." }, - { - "id": 44, - "link": [2, 1], - "name": "Suitless Water Shinecharge", - "entranceCondition": { - "comeInShinecharging": { - "length": 3, - "openEnd": 0 - } - }, - "requires": [ - "canWaterShineCharge", - {"shinespark": {"frames": 20, "excessFrames": 3}} - ], - "devNote": "This runway length is just an estimate of the worst case scenario for difficulties that can't use canStutterWaterShineCharge." - }, - { - "id": 45, - "link": [2, 1], - "name": "Suitless Water Shinecharge, Leave With Temporary Blue", - "entranceCondition": { - "comeInShinecharging": { - "length": 3, - "openEnd": 0 - } - }, - "requires": [ - "canWaterShineCharge", - "canXRayTurnaround", - "canChainTemporaryBlue", - "canGravityJump" - ], - "exitCondition": { - "leaveWithTemporaryBlue": {} - }, - "unlocksDoors": [{"types": ["ammo"], "requires": []}] - }, - { - "id": 46, - "link": [2, 1], - "name": "Stutter Water Shinecharge", - "entranceCondition": { - "comeInRunning": { - "speedBooster": true, - "minTiles": 2.4375 - } - }, - "requires": [ - "canStutterWaterShineCharge", - "h_shinechargeMaxRunway", - {"or": [ - {"enemyDamage": {"enemy": "Mochtroid", "type": "contact", "hits": 2}}, - {"and": [ - "canDodgeWhileShooting", - {"or": [ - "Wave", - "Spazer", - "Plasma", - {"ammo": {"type": "Missile", "count": 1}}, - {"ammo": {"type": "Super", "count": 1}} - ]} - ]} - ]}, - {"shinespark": {"frames": 20, "excessFrames": 3}} - ], - "note": "Enter the room with a careful amount of momentum where Samus must spend extra time slowing down during the stutter, but must not have much run speed." - }, - { - "id": 47, - "link": [2, 1], - "name": "Stutter Water Shinecharge, Leave With Temporary Blue", - "entranceCondition": { - "comeInRunning": { - "speedBooster": true, - "minTiles": 2.4375 - } - }, - "requires": [ - "canStutterWaterShineCharge", - "h_shinechargeMaxRunway", - {"or": [ - {"enemyDamage": {"enemy": "Mochtroid", "type": "contact", "hits": 2}}, - {"and": [ - "canDodgeWhileShooting", - {"or": [ - "Wave", - "Spazer", - "Plasma", - {"ammo": {"type": "Missile", "count": 1}}, - {"ammo": {"type": "Super", "count": 1}} - ]} - ]} - ]}, - "canXRayTurnaround", - "canChainTemporaryBlue", - "canGravityJump" - ], - "exitCondition": { - "leaveWithTemporaryBlue": {} - }, - "unlocksDoors": [{"types": ["ammo"], "requires": []}] - }, { "id": 135, "link": [2, 1], @@ -1897,6 +1818,160 @@ ], "flashSuitChecked": true }, + { + "link": [2, 2], + "name": "Precise Stutter Shinecharge, Leave Shinecharged (5-tile runway)", + "entranceCondition": { + "comeInStutterShinecharging": { + "minTiles": 5 + } + }, + "requires": [ + "canPreciseStutterWaterShineCharge", + "canShinechargeMovementTricky", + "canInsaneJump", + "canTrickyDodgeEnemies", + {"shineChargeFrames": 130}, + {"or": [ + "canBeVeryPatient", + {"shineChargeFrames": 15} + ]} + ], + "exitCondition": { + "leaveShinecharged": {} + }, + "unlocksDoors": [ + {"types": ["super"], "requires": []}, + {"types": ["missiles", "powerbomb"], "requires": ["never"]} + ], + "note": [ + "With a runway of 5 tiles (open end) in the other room,", + "the ideal timing for the stutter is to release forward for 5 frames, and repress forward on the last possible frame before the transition.", + "Other timings can work, but will gain the shinecharge further from the door, leaving fewer shinecharge frames remaining.", + "After gaining the shinecharge, continue holding forward in order to make Samus stand.", + "Then turnaround spin jump back toward the door, and continue spin jumping to reach the transition with a shinecharge." + ] + }, + { + "link": [2, 2], + "name": "Precise Stutter Shinecharge, Leave Shinecharged (4-tile runway)", + "entranceCondition": { + "comeInStutterShinecharging": { + "minTiles": 4 + } + }, + "requires": [ + "canPreciseStutterWaterShineCharge", + "canShinechargeMovementTricky", + "canInsaneJump", + "canTrickyDodgeEnemies", + {"shineChargeFrames": 140}, + {"or": [ + "canBeVeryPatient", + {"shineChargeFrames": 10} + ]} + ], + "exitCondition": { + "leaveShinecharged": {} + }, + "unlocksDoors": [ + {"types": ["super"], "requires": []}, + {"types": ["missiles", "powerbomb"], "requires": ["never"]} + ], + "note": [ + "With only a runway of 4 tiles (open end) in the other room,", + "the ideal timing for the stutter is to release forward for 4 frames, and repress forward on the last possible frame before the transition.", + "It also works well to release forward for 3 frames and repress on the last possible frame.", + "Other timings can also work, but may gain the shinecharge further from the door, leaving fewer shinecharge frames remaining.", + "After gaining the shinecharge, continue holding forward in order to make Samus stand.", + "Then turnaround spin jump back toward the door, and continue spin jumping to reach the transition with a shinecharge." + ] + }, + { + "link": [2, 2], + "name": "Precise Stutter Shinecharge, Leave Shinecharged (3-tile runway)", + "entranceCondition": { + "comeInStutterShinecharging": { + "minTiles": 3 + } + }, + "requires": [ + "canPreciseStutterWaterShineCharge", + "canShinechargeMovementTricky", + "canInsaneJump", + "canTrickyDodgeEnemies", + {"shineChargeFrames": 145}, + {"or": [ + "canBeVeryPatient", + {"shineChargeFrames": 10} + ]} + ], + "exitCondition": { + "leaveShinecharged": {} + }, + "unlocksDoors": [ + {"types": ["super"], "requires": []}, + {"types": ["missiles", "powerbomb"], "requires": ["never"]} + ], + "note": [ + "With only a runway of 3 tiles (open end) in the other room,", + "the ideal timing for the stutter is to release forward for 3 or 4 frames, and repress forward on the last possible frame before the transition.", + "Other timings can work, but will gain the shinecharge further from the door, leaving fewer shinecharge frames remaining.", + "After gaining the shinecharge, continue holding forward in order to make Samus stand.", + "Then turnaround spin jump back toward the door, and continue spin jumping to reach the transition with a shinecharge.", + "Alternatively, with greater difficulty but saving some shinecharge frames,", + "after performing the turnaround spin jump, briefly moonwalk back, then retain momentum by boomeranging forward", + "(switching from pressing backward to pressing forward on the next frame),", + "and arm pump to reach the door quickly." + ], + "devNote": [ + "The same shinecharge frames could be achieved with a closed end runway (effective length of 2.4375),", + "with a 3-frame stutter, but there doesn't appear to be any application." + ] + }, + { + "link": [2, 2], + "name": "Precise Stutter Shinecharge, Leave Shinecharged (2-tile runway)", + "entranceCondition": { + "comeInStutterShinecharging": { + "minTiles": 2 + } + }, + "requires": [ + "canPreciseStutterWaterShineCharge", + "canShinechargeMovementTricky", + "canInsaneJump", + "canTrickyDodgeEnemies", + {"shineChargeFrames": 150}, + {"or": [ + "canBeVeryPatient", + {"shineChargeFrames": 15} + ]} + ], + "exitCondition": { + "leaveShinecharged": {} + }, + "unlocksDoors": [ + {"types": ["super"], "requires": []}, + {"types": ["missiles", "powerbomb"], "requires": ["never"]} + ], + "note": [ + "With only a runway of 2 tiles (open end) in the other room,", + "the ideal timing for the stutter is to release forward for 3 frames, and repress forward on the last possible frame before the transition.", + "Other timings can work, but will gain the shinecharge further from the door, leaving fewer shinecharge frames remaining.", + "After gaining the shinecharge, continue holding forward in order to make Samus stand.", + "Then turnaround spin jump back toward the door, and continue spin jumping to reach the transition with a shinecharge.", + "Alternatively, with greater difficulty but saving some shinecharge frames,", + "after performing the turnaround spin jump, briefly moonwalk back, then retain momentum by boomeranging forward", + "(switching from pressing backward to pressing forward on the next frame),", + "and arm pump to reach the door quickly." + ], + "devNote": [ + "FIXME: The canBeVeryPatient requirement is for difficulty placement of the boomerang method;", + "but the boomerang (or maybe specifically the moonwalk boomerang) should possibly be its own tech,", + "and the same with rapid arm pumping." + ] + }, { "id": 55, "link": [2, 2], @@ -2039,7 +2114,7 @@ { "id": 62, "link": [2, 4], - "name": "Shinespark", + "name": "Come in Shinecharged, Shinespark", "entranceCondition": { "comeInShinecharged": {} }, @@ -2548,110 +2623,6 @@ "canCrossRoomJumpIntoWater" ] }, - { - "id": 80, - "link": [2, 4], - "name": "Suitless Water Shinecharge", - "entranceCondition": { - "comeInShinecharging": { - "length": 3, - "openEnd": 0 - } - }, - "requires": [ - "canWaterShineCharge", - {"shinespark": {"frames": 39, "excessFrames": 4}} - ], - "devNote": "This runway length is just an estimate of the worst case scenario for difficulties that can't use canStutterWaterShineCharge." - }, - { - "id": 81, - "link": [2, 4], - "name": "Suitless Water Shinecharge, Leave With Temporary Blue", - "entranceCondition": { - "comeInShinecharging": { - "length": 2, - "openEnd": 0 - } - }, - "requires": [ - "canWaterShineCharge", - "HiJump", - "canGravityJump", - "canTrickySpringBallJump", - "canChainTemporaryBlue" - ], - "exitCondition": { - "leaveWithTemporaryBlue": {} - }, - "unlocksDoors": [{"types": ["ammo"], "requires": []}] - }, - { - "id": 82, - "link": [2, 4], - "name": "Stutter Water Shinecharge", - "entranceCondition": { - "comeInRunning": { - "speedBooster": true, - "minTiles": 2.4375 - } - }, - "requires": [ - "canStutterWaterShineCharge", - "h_shinechargeMaxRunway", - {"or": [ - {"enemyDamage": {"enemy": "Mochtroid", "type": "contact", "hits": 2}}, - {"and": [ - "canDodgeWhileShooting", - {"or": [ - "Wave", - "Spazer", - "Plasma", - {"ammo": {"type": "Missile", "count": 1}}, - {"ammo": {"type": "Super", "count": 1}} - ]} - ]} - ]}, - {"shinespark": {"frames": 39, "excessFrames": 4}} - ], - "note": "Enter the room with a careful amount of momentum where Samus must spend extra time slowing down during the stutter, but must not have much run speed." - }, - { - "id": 83, - "link": [2, 4], - "name": "Stutter Water Shinecharge, Leave With Temporary Blue", - "entranceCondition": { - "comeInRunning": { - "speedBooster": true, - "minTiles": 2.4375 - } - }, - "requires": [ - "canStutterWaterShineCharge", - {"or": [ - {"enemyDamage": {"enemy": "Mochtroid", "type": "contact", "hits": 2}}, - {"and": [ - "canDodgeWhileShooting", - {"or": [ - "Wave", - "Spazer", - "Plasma", - {"ammo": {"type": "Missile", "count": 1}}, - {"ammo": {"type": "Super", "count": 1}} - ]} - ]} - ]}, - "canXRayTurnaround", - "HiJump", - "canGravityJump", - "canTrickySpringBallJump", - "canChainTemporaryBlue" - ], - "exitCondition": { - "leaveWithTemporaryBlue": {} - }, - "unlocksDoors": [{"types": ["ammo"], "requires": []}] - }, { "id": 136, "link": [2, 4], @@ -2799,6 +2770,117 @@ "requires": [], "flashSuitChecked": true }, + { + "link": [2, 6], + "name": "Come In Shinecharging (Gravity)", + "entranceCondition": { + "comeInShinecharging": { + "length": 12, + "openEnd": 0 + } + }, + "requires": [ + "Gravity", + {"shineChargeFrames": 0} + ], + "endsWithShineCharge": true + }, + { + "id": 44, + "link": [2, 6], + "name": "Suitless Water Shinecharge", + "entranceCondition": { + "comeInShinecharging": { + "length": 4, + "openEnd": 0 + } + }, + "requires": [ + "canWaterShineCharge", + {"shineChargeFrames": 0} + ], + "endsWithShineCharge": true + }, + { + "id": 46, + "link": [2, 6], + "name": "Precise Stutter Water Shinecharge", + "entranceCondition": { + "comeInStutterShinecharging": { + "minTiles": 2.4375 + } + }, + "requires": [ + "canPreciseStutterWaterShineCharge", + {"or": [ + {"enemyDamage": {"enemy": "Mochtroid", "type": "contact", "hits": 2}}, + {"and": [ + "canDodgeWhileShooting", + {"or": [ + "Wave", + "Spazer", + "Plasma", + {"ammo": {"type": "Missile", "count": 1}}, + {"ammo": {"type": "Super", "count": 1}}, + "canTrickyDodgeEnemies" + ]} + ]} + ]}, + {"shineChargeFrames": 0} + ], + "endsWithShineCharge": true, + "note": [ + "With only a runway length of 3 tiles (closed end) in the other room, this requires a precise setup:", + "release forward for 3 or 4 frames, then repress forward on the last possible frame before the transition;", + "alternatively, release forward for 2 frames and repress forward on the second-to-last possible frame before the transition.", + "It is possible to clear the Mochtroid with Power Beam without taking damage,", + "by first firing angle up shots and then switching to angle down shots once the Mochtroid is on top of Samus." + ], + "detailNote": [ + "If a longer runway is available (4 tiles), the timing windows are a bit more lenient:", + "1. Release forward for 3, 4, or 5 frames, repress forward on the last possible frame;", + "2. Release forward for 2 or 3 frames, repress forward on the 2nd-to-last possible frame;", + "3. Release forward for 1 or 2 frames, repress forward on the 3rd-to-last possible frame." + ] + }, + { + "link": [2, 6], + "name": "Very Precise Stutter Water Shinecharge", + "entranceCondition": { + "comeInStutterShinecharging": { + "minTiles": 2 + } + }, + "requires": [ + "canPreciseStutterWaterShineCharge", + "canInsaneJump", + {"or": [ + {"enemyDamage": {"enemy": "Mochtroid", "type": "contact", "hits": 2}}, + {"and": [ + "canDodgeWhileShooting", + {"or": [ + "Wave", + "Spazer", + "Plasma", + {"ammo": {"type": "Missile", "count": 1}}, + {"ammo": {"type": "Super", "count": 1}}, + "canTrickyDodgeEnemies" + ]} + ]} + ]}, + {"shineChargeFrames": 0} + ], + "endsWithShineCharge": true, + "note": [ + "With only a runway of 2 tiles (open end) in the other room, this requires a double-frame-perfect setup:", + "release forward for exactly 3 frames, and repress forward on the last possible frame before the transition.", + "It is possible to clear the Mochtroid with Power Beam without taking damage,", + "by first firing angle up shots and then switching to angle down shots once the Mochtroid is on top of Samus." + ], + "devNote": [ + "FIXME: canInsaneJump is for difficulty placement; replace with a more appropriate tech since no jump is involved." + ] + }, { "id": 88, "link": [3, 1], @@ -4125,6 +4207,113 @@ "Climb the room with a Gravity jump + Spring Ball jump. Turn off Spring Ball and Gravity at the same time, then repause and turn Spring back on.", "If coming from the right, Samus will be off camera." ] + }, + { + "link": [6, 1], + "name": "Shinespark", + "startsWithShineCharge": true, + "requires": [ + {"shineChargeFrames": 70}, + {"or": [ + {"shinespark": {"frames": 20, "excessFrames": 3}}, + {"and": [ + "canMidairShinespark", + {"shinespark": {"frames": 17, "excessFrames": 3}} + ]}, + {"and": [ + "HiJump", + "canMidairShinespark", + {"shinespark": {"frames": 13, "excessFrames": 3}} + ]} + ]} + ] + }, + { + "link": [6, 1], + "name": "Leave With Temporary Blue", + "startsWithShineCharge": true, + "requires": [ + "h_shinechargeMaxRunway", + {"shineChargeFrames": 0}, + "canXRayTurnaround", + "canChainTemporaryBlue", + "canGravityJump" + ], + "exitCondition": { + "leaveWithTemporaryBlue": {} + }, + "unlocksDoors": [{"types": ["ammo"], "requires": []}] + }, + { + "link": [6, 2], + "name": "Leave With Spark", + "startsWithShineCharge": true, + "requires": [ + {"shineChargeFrames": 50}, + "canShinechargeMovementComplex", + {"shinespark": {"frames": 12}} + ], + "exitCondition": { + "leaveWithSpark": {} + }, + "unlocksDoors": [ + {"types": ["super"], "requires": []}, + {"types": ["missiles", "powerbomb"], "requires": ["never"]} + ] + }, + { + "link": [6, 2], + "name": "Leave With Temporary Blue", + "startsWithShineCharge": true, + "requires": [ + "h_shinechargeMaxRunway", + {"shineChargeFrames": 0}, + "canXRayTurnaround", + "canChainTemporaryBlue" + ], + "exitCondition": { + "leaveWithTemporaryBlue": {} + }, + "unlocksDoors": [{"types": ["ammo"], "requires": []}] + }, + { + "id": 80, + "link": [6, 4], + "name": "Shinespark", + "startsWithShineCharge": true, + "requires": [ + {"shineChargeFrames": 60}, + {"or": [ + {"shinespark": {"frames": 38, "excessFrames": 3}}, + {"and": [ + "canMidairShinespark", + {"shinespark": {"frames": 35, "excessFrames": 3}} + ]}, + {"and": [ + "HiJump", + "canMidairShinespark", + {"shinespark": {"frames": 31, "excessFrames": 3}} + ]} + ]} + ] + }, + { + "id": 81, + "link": [6, 4], + "name": "Leave With Temporary Blue (Hi-Jump, Gravity Jump, Spring Ball Jump)", + "startsWithShineCharge": true, + "requires": [ + "h_shinechargeMaxRunway", + {"shineChargeFrames": 0}, + "HiJump", + "canGravityJump", + "canTrickySpringBallJump", + "canChainTemporaryBlue" + ], + "exitCondition": { + "leaveWithTemporaryBlue": {} + }, + "unlocksDoors": [{"types": ["ammo"], "requires": []}] } ], "notables": [ From 1734ef664065b8b048878d71866242c66f59c84a Mon Sep 17 00:00:00 2001 From: Brent Kerby Date: Tue, 20 May 2025 18:01:36 -0600 Subject: [PATCH 2/3] remove redundant 2->2 leaveWithSpark, combine into 6->2 --- .../maridia/inner-pink/Halfie Climb Room.json | 52 +++---------------- 1 file changed, 7 insertions(+), 45 deletions(-) diff --git a/region/maridia/inner-pink/Halfie Climb Room.json b/region/maridia/inner-pink/Halfie Climb Room.json index e5155297ee..213736621f 100644 --- a/region/maridia/inner-pink/Halfie Climb Room.json +++ b/region/maridia/inner-pink/Halfie Climb Room.json @@ -1738,50 +1738,6 @@ } } }, - { - "id": 52, - "link": [2, 2], - "name": "Stutter Water Shinecharge, Leave with Spark", - "entranceCondition": { - "comeInRunning": { - "speedBooster": true, - "minTiles": 2.4375 - } - }, - "requires": [ - "canStutterWaterShineCharge", - "canShinechargeMovementComplex", - "h_shinechargeMaxRunway", - {"or": [ - {"enemyDamage": {"enemy": "Mochtroid", "type": "contact", "hits": 2}}, - {"and": [ - "canDodgeWhileShooting", - {"or": [ - "Wave", - "Spazer", - "Plasma", - {"ammo": {"type": "Missile", "count": 1}}, - {"ammo": {"type": "Super", "count": 1}} - ]} - ]} - ]}, - {"or": [ - {"shinespark": {"frames": 12}}, - {"and": [ - "canShinechargeMovementTricky", - {"shinespark": {"frames": 3}} - ]} - ]} - ], - "exitCondition": { - "leaveWithSpark": {} - }, - "unlocksDoors": [ - {"types": ["missiles", "super"], "requires": []}, - {"types": ["powerbomb"], "requires": ["never"]} - ], - "note": "Enter the room with a careful amount of momentum where Samus must spend extra time slowing down during the stutter, but must not have much run speed." - }, { "id": 53, "link": [2, 2], @@ -4251,7 +4207,13 @@ "requires": [ {"shineChargeFrames": 50}, "canShinechargeMovementComplex", - {"shinespark": {"frames": 12}} + {"or": [ + {"shinespark": {"frames": 12}}, + {"and": [ + "canShinechargeMovementTricky", + {"shinespark": {"frames": 3}} + ]} + ]} ], "exitCondition": { "leaveWithSpark": {} From 15064cc16e083d65d1d49716352442298599e0a8 Mon Sep 17 00:00:00 2001 From: Brent Kerby Date: Sun, 25 May 2025 09:37:12 -0600 Subject: [PATCH 3/3] feedback updates --- region/maridia/inner-pink/Halfie Climb Room.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/region/maridia/inner-pink/Halfie Climb Room.json b/region/maridia/inner-pink/Halfie Climb Room.json index 213736621f..1126012217 100644 --- a/region/maridia/inner-pink/Halfie Climb Room.json +++ b/region/maridia/inner-pink/Halfie Climb Room.json @@ -4267,6 +4267,7 @@ "requires": [ "h_shinechargeMaxRunway", {"shineChargeFrames": 0}, + "canXRayTurnaround", "HiJump", "canGravityJump", "canTrickySpringBallJump", @@ -4275,7 +4276,10 @@ "exitCondition": { "leaveWithTemporaryBlue": {} }, - "unlocksDoors": [{"types": ["ammo"], "requires": []}] + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "devNote": [ + "FIXME: a 2->4 variant of this strat could be added that would use less runway but not require X-Ray." + ] } ], "notables": [