From 864c17be94db11fe9388b936d1e8fff920cf3bd3 Mon Sep 17 00:00:00 2001 From: Brent Kerby Date: Fri, 15 Aug 2025 20:40:28 -0600 Subject: [PATCH] Climb Supers speed keep lenience --- helpers.json | 17 +++++ .../crateria/central/Climb Supers Room.json | 74 +++++++++++++------ 2 files changed, 70 insertions(+), 21 deletions(-) diff --git a/helpers.json b/helpers.json index 24504dc6b7..1ecff00f10 100644 --- a/helpers.json +++ b/helpers.json @@ -407,6 +407,16 @@ {"samusEaterFrames": 320} ] }, + { + "name": "h_speedKeepSpikeHitLeniency", + "requires": [ + "h_XModeSpikeHitLeniency" + ], + "devNote": [ + "Since a (spike) speed keep requires a frame-perfect unmorph with the same timing as spike X-mode,", + "it is a reasonable default to have them share the same lenience." + ] + }, { "name": "h_extendedMoondanceBeetomLeniency", "requires": [ @@ -959,6 +969,13 @@ "In this case, the total leniency is the base leniency h_XModeThornHitLeniency multiplied by the number of hits." ] }, + { + "name": "h_speedKeepSpikeHit", + "requires": [ + {"spikeHits": 1}, + "h_speedKeepSpikeHitLeniency" + ] + }, { "name": "h_XRayMorphIceClip", "requires": [ diff --git a/region/crateria/central/Climb Supers Room.json b/region/crateria/central/Climb Supers Room.json index 671259e010..febcc471f0 100644 --- a/region/crateria/central/Climb Supers Room.json +++ b/region/crateria/central/Climb Supers Room.json @@ -821,16 +821,22 @@ "requires": [ "canSuperJump", {"shinespark": {"frames": 7, "excessFrames": 0}}, - {"spikeHits": 3}, + "h_XModeSpikeHit", {"or": [ - {"spikeHits": 3}, - "Grapple", - "SpaceJump" + {"and": [ + "h_XModeSpikeHit", + "h_XModeSpikeHit" + ]}, + {"and": [ + "h_XModeSpikeHit", + "SpaceJump" + ]}, + "Grapple" ]} ], "flashSuitChecked": true, "note": "Enter with a shinespark ready, activate XMode by bouncing into the spikes, then activate the shinespark but release XMode during the shinespark windup animation.", - "devNote": ["One leniency spikehit given.", "There is 1 unusable tile in this runway."] + "devNote": ["There is 1 unusable tile in this runway."] }, { "id": 23, @@ -839,19 +845,30 @@ "requires": [ {"notable": "In-Room X-Mode BlueSuit"}, "canSuperJump", - {"spikeHits": 3}, + "h_XModeSpikeHit", + "h_XModeSpikeHit", + "h_XModeSpikeHit", "h_shinechargeMaxRunway", {"shinespark": {"frames": 5}}, - {"spikeHits": 2}, + "h_XModeSpikeHit", {"or": [ - {"spikeHits": 1}, - "Grapple", - "SpaceJump" + {"and": [ + "h_XModeSpikeHit", + "h_XModeSpikeHit" + ]}, + {"and": [ + "SpaceJump", + "h_XModeSpikeHit" + ]}, + "Grapple" ]} ], "flashSuitChecked": true, - "note": "Use X-Mode to store a spikesuit, and then convert that to a blue suit with more X-Mode.", - "devNote": "One leniency spikehit given." + "note": [ + "Use X-Mode to store a spikesuit, and then convert that to a blue suit with more X-Mode.", + "By bouncing on the ledge and arm pumping a few tiles in the first X-Mode,", + "it is possible to reach the right with a horizontal damage boost and only a single additional spike hit after the superjump." + ] }, { "id": 24, @@ -864,13 +881,18 @@ "canChainTemporaryBlue", "can4HighMidAirMorph", "canSpeedKeep", - {"spikeHits": 1}, + "h_speedKeepSpikeHit", + "h_speedKeepSpikeHitLeniency", "canSpeedball" ], "flashSuitChecked": true, "note": [ "Bounce into the spikes and use a SpeedKeep to run on spikes to setup for a speedball towards the item.", "Bouncing on the platform near the door saves a spike hit." + ], + "devNote": [ + "The extra lenience is because of the need to either to perform a very precise jump off the spikes", + "or to start with a bounce on the spikes, taking an extra hit." ] }, { @@ -888,7 +910,7 @@ "canCarefulJump", "canSlowShortCharge", "can4HighMidAirMorph", - {"spikeHits": 1}, + "h_speedKeepSpikeHit", "canSpeedball" ], "note": [ @@ -911,16 +933,23 @@ "canSpeedKeep", "canCarefulJump", {"canShineCharge": {"usedTiles": 21, "openEnd": 2}}, - {"spikeHits": 1}, + "h_speedKeepSpikeHit", {"or": [ - {"spikeHits": 1}, - "canChainTemporaryBlue" + "h_speedKeepSpikeHit", + {"and": [ + "canChainTemporaryBlue", + "h_speedKeepSpikeHitLeniency" + ]} ]}, "canSpeedball" ], "note": [ "Bounce into the spikes and use a SpeedKeep to run on spikes to setup for a speedball towards the item.", "A DamageBoost SpeedKeep could be used instead of a Spike SpeedKeep with enough runspeed." + ], + "devNote": [ + "The extra lenience is because of the need to either to perform a very precise jump off the spikes,", + "or to start with a bounce on the spikes, taking an extra hit." ] }, { @@ -936,21 +965,24 @@ {"and": [ "canChainTemporaryBlue", {"canShineCharge": {"usedTiles": 13, "openEnd": 1}}, - {"spikeHits": 1} + "h_speedKeepSpikeHit" ]}, {"and": [ {"canShineCharge": {"usedTiles": 14, "openEnd": 1}}, - {"spikeHits": 2} + "h_speedKeepSpikeHit", + "h_speedKeepSpikeHit" ]}, {"and": [ "canChainTemporaryBlue", - {"spikeHits": 3} + "h_speedKeepSpikeHit", + "h_speedKeepSpikeHit", + "h_speedKeepSpikeHit" ]} ]}, "canSpeedball" ], "note": [ - "Using only the short runway and spike pit, use one or more SpeedKeeps to Speedball towards the item location.", + "Using only the short runway and spike pit, use one or two SpeedKeeps to Speedball towards the item location.", "This requires either a very short shortcharge, or a second SpeedKeep in the spikes which also resets Samus' run speed with a crouch jump before spike i-frames expire." ] },