diff --git a/region/maridia/inner-pink/The Precious Room.json b/region/maridia/inner-pink/The Precious Room.json index 2ed190736d..0971a9a28c 100644 --- a/region/maridia/inner-pink/The Precious Room.json +++ b/region/maridia/inner-pink/The Precious Room.json @@ -53,6 +53,18 @@ [1, 0], [1, 0] ] + }, + { + "id": 4, + "name": "Bottom Right Shinecharged", + "nodeType": "junction", + "nodeSubType": "junction", + "note": "Gaining a shinecharge at the bottom-right of the room.", + "mapTileMask": [ + [1, 1], + [1, 0], + [2, 0] + ] } ], "enemies": [], @@ -72,7 +84,8 @@ "from": 2, "to": [ {"id": 1}, - {"id": 2} + {"id": 2}, + {"id": 4} ] }, { @@ -80,6 +93,13 @@ "to": [ {"id": 1} ] + }, + { + "from": 4, + "to": [ + {"id": 1}, + {"id": 2} + ] } ], "strats": [ @@ -183,49 +203,48 @@ "canDelayedWalljump" ] }, - { - "id": 9, - "link": [2, 1], - "name": "Shinespark", - "entranceCondition": { - "comeInShinecharging": { - "length": 12, - "openEnd": 0 - } - }, - "requires": [ - "Gravity", - {"shinespark": {"frames": 40, "excessFrames": 8}} - ] - }, { "id": 10, "link": [2, 1], - "name": "Shinespark, Come in Shinecharged", + "name": "Come in Shinecharged, Shinespark (Gravity)", "entranceCondition": { "comeInShinecharged": {} }, "requires": [ - {"shineChargeFrames": 40}, "Gravity", - {"shinespark": {"frames": 40, "excessFrames": 8}} + {"or": [ + {"and": [ + {"shineChargeFrames": 20}, + {"shinespark": {"frames": 40, "excessFrames": 8}} + ]}, + {"and": [ + {"shineChargeFrames": 30}, + "canMidairShinespark", + {"shinespark": {"frames": 33, "excessFrames": 8}} + ]} + ]} ], "flashSuitChecked": true }, { "id": 11, "link": [2, 1], - "name": "Suitless Shinespark", + "name": "Come In Shinecharged, Shinespark (Suitless)", "entranceCondition": { "comeInShinecharged": {} }, "requires": [ - {"shineChargeFrames": 60}, + {"shineChargeFrames": 40}, "canSuitlessMaridia", - {"shinespark": {"frames": 40, "excessFrames": 8}} + {"or": [ + {"shinespark": {"frames": 40, "excessFrames": 8}}, + {"and": [ + "canMidairShinespark", + {"shinespark": {"frames": 37, "excessFrames": 8}} + ]} + ]} ], - "flashSuitChecked": true, - "note": "It takes a bit more time to set up the spark when suitless." + "flashSuitChecked": true }, { "id": 12, @@ -270,53 +289,6 @@ "canSpringBallJumpMidAir" ] }, - { - "id": 15, - "link": [2, 1], - "name": "Stutter Water Shinecharge", - "entranceCondition": { - "comeInRunning": { - "speedBooster": true, - "minTiles": 2.4375 - } - }, - "requires": [ - "canStutterWaterShineCharge", - "h_canShineChargeMaxRunway", - {"shinespark": {"frames": 40, "excessFrames": 8}} - ] - }, - { - "id": 16, - "link": [2, 1], - "name": "Stutter Water Shinecharge, Leave With Temporary Blue", - "entranceCondition": { - "comeInRunning": { - "speedBooster": true, - "minTiles": 2.4375 - } - }, - "requires": [ - "canStutterWaterShineCharge", - "h_canShineChargeMaxRunway", - "canXRayTurnaround", - "canLongChainTemporaryBlue", - {"or": [ - "canGravityJump", - {"and": [ - "HiJump", - "canTrickySpringBallJump" - ]} - ]} - ], - "exitCondition": { - "leaveWithTemporaryBlue": {} - }, - "unlocksDoors": [{"types": ["ammo"], "requires": []}], - "note": [ - "To get out of the water at the top, do another gravity jump or spring ball jump, preferably while the water is high." - ] - }, { "id": 17, "link": [2, 1], @@ -785,57 +757,199 @@ } }, { - "id": 30, + "id": 31, "link": [2, 2], - "name": "Stutter Water Shinecharge, Leave with Spark", + "name": "Crystal Flash", + "requires": [ + "h_canCrystalFlash" + ], + "flashSuitChecked": true + }, + { + "link": [2, 4], + "name": "Come In Shinecharging (Gravity)", "entranceCondition": { - "comeInRunning": { - "speedBooster": true, + "comeInShinecharging": { + "length": 12, + "openEnd": 0 + } + }, + "requires": [ + "Gravity", + {"shineChargeFrames": 0} + ], + "endsWithShineCharge": true + }, + { + "link": [2, 4], + "name": "Water Shinecharge", + "entranceCondition": { + "comeInShinecharging": { + "length": 4, + "openEnd": 0 + } + }, + "requires": [ + "canWaterShineCharge", + {"shineChargeFrames": 0} + ], + "endsWithShineCharge": true + }, + { + "id": 15, + "link": [2, 4], + "name": "Precise Stutter Water Shinecharge", + "entranceCondition": { + "comeInStutterShinecharging": { "minTiles": 2.4375 } }, "requires": [ - "canStutterWaterShineCharge", - "canShinechargeMovementComplex", + "canPreciseStutterWaterShineCharge", + {"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." + ], + "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, 4], + "name": "Very Precise Stutter Water Shinecharge", + "entranceCondition": { + "comeInStutterShinecharging": { + "minTiles": 2 + } + }, + "requires": [ + "canPreciseStutterWaterShineCharge", + "canInsaneJump", + {"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." + ], + "devNote": [ + "FIXME: canInsaneJump is for difficulty placement; replace with a more appropriate tech since no jump is involved." + ] + }, + { + "id": 32, + "link": [3, 1], + "name": "Base", + "requires": [ + {"or": [ + "h_canNavigateUnderwater", + "Grapple", + "SpaceJump" + ]} + ] + }, + { + "link": [4, 1], + "name": "Start Shinecharged, Shinespark", + "startsWithShineCharge": true, + "requires": [ + {"shineChargeFrames": 60}, + {"or": [ + {"shinespark": {"frames": 40, "excessFrames": 8}}, + {"and": [ + "canMidairShinespark", + {"shinespark": {"frames": 37, "excessFrames": 8}} + ]}, + {"and": [ + "Gravity", + "canMidairShinespark", + {"shinespark": {"frames": 33, "excessFrames": 8}} + ]} + ]} + ] + }, + { + "id": 16, + "link": [4, 1], + "name": "Start Shinecharged, Leave With Temporary Blue", + "startsWithShineCharge": true, + "requires": [ "h_canShineChargeMaxRunway", + {"shineChargeFrames": 0}, + "canXRayTurnaround", + "canLongChainTemporaryBlue", {"or": [ - {"shinespark": {"frames": 12}}, + "canGravityJump", {"and": [ - "canShinechargeMovementTricky", - {"shinespark": {"frames": 3}} + "HiJump", + "canTrickySpringBallJump" ]} ]} ], + "exitCondition": { + "leaveWithTemporaryBlue": {} + }, + "unlocksDoors": [{"types": ["ammo"], "requires": []}], + "note": [ + "To get out of the water at the top, do another gravity jump or spring ball jump, preferably while the water is high." + ] + }, + { + "id": 30, + "link": [4, 2], + "name": "Start Shinecharged, Leave with Spark", + "startsWithShineCharge": true, + "requires": [ + {"shineChargeFrames": 50}, + "canShinechargeMovementComplex", + {"shinespark": {"frames": 12}} + ], "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": 31, - "link": [2, 2], - "name": "Crystal Flash", + "link": [4, 2], + "name": "Start Shinecharged, Leave Shinecharged", + "startsWithShineCharge": true, "requires": [ - "h_canCrystalFlash" + {"shineChargeFrames": 155}, + "canShinechargeMovementTricky" ], - "flashSuitChecked": true + "exitCondition": { + "leaveShinecharged": {} + }, + "unlocksDoors": [ + {"types": ["missiles", "super"], "requires": []}, + {"types": ["powerbomb"], "requires": ["never"]} + ] }, { - "id": 32, - "link": [3, 1], - "name": "Base", + "link": [4, 2], + "name": "Start Shinecharged, Leave With Temporary Blue", + "startsWithShineCharge": true, "requires": [ - {"or": [ - "h_canNavigateUnderwater", - "Grapple", - "SpaceJump" - ]} - ] - } + "h_canShineChargeMaxRunway", + {"shineChargeFrames": 0}, + "canXRayTurnaround", + "canChainTemporaryBlue" + ], + "exitCondition": { + "leaveWithTemporaryBlue": {} + }, + "unlocksDoors": [{"types": ["ammo"], "requires": []}] + } ], "notables": [], "nextStratId": 39, diff --git a/schema/m3-tech.schema.json b/schema/m3-tech.schema.json index 36c5fd1623..55f19fe57e 100644 --- a/schema/m3-tech.schema.json +++ b/schema/m3-tech.schema.json @@ -78,6 +78,9 @@ "note": { "$ref" : "m3-note.schema.json#/definitions/note" }, + "detailNote": { + "$ref" : "m3-note.schema.json#/definitions/detailNote" + }, "devNote": { "$ref" : "m3-note.schema.json#/definitions/devNote" } diff --git a/tech.json b/tech.json index d468a49980..16063f3ffe 100644 --- a/tech.json +++ b/tech.json @@ -2243,11 +2243,29 @@ ], "otherRequires": [], "note": [ - "Performing a canWaterShineCharge in a shorter runway by using a stutter that is greatly extended by the water slowdown.", + "Performing a water shinecharge in a shorter runway by using a stutter that is greatly extended by the water slowdown.", "Perform a stutter shortly before entering water, typically through a door transition, by briefly releasing and then repressing forward before, but as close to, the transition as possible while continuing the dash.", "This carries the stutter into the water where Samus will run in place while building the shinecharge, Allowing Samus to enter the water with little momentum.", "After entering the water, dash should be held the entire time. With Gravity Suit it is possible to do this without leaving water, with or without a room transition, by removing the suit just after stuttering.", "The same technique is applicable with acid." + ], + "detailNote": [ + "To gain the shortcharge in the shortest distance and with the greatest amount of lenience,", + "it is best to use approximately 5 tiles of runway.", + "If fewer than 5 runway tiles are available, use the full runway length." + ], + "extensionTechs": [ + { + "name": "canPreciseStutterWaterShineCharge", + "techRequires": [ + "canStutterWaterShineCharge" + ], + "otherRequires": [], + "note": [ + "Performing a stutter water shinecharge in a situation requiring a precise stutter,", + "for example if not much runway is available in one or both of the rooms." + ] + } ] } ]