Skip to content

Commit e2956eb

Browse files
authored
Merge pull request #2363 from nn357/xmodebluesuitstuff
add xmode bluesuit stuff
2 parents 041fceb + 12017b1 commit e2956eb

6 files changed

Lines changed: 146 additions & 12 deletions

File tree

helpers.json

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1691,6 +1691,40 @@
16911691
"h_shinechargeMaxRunway",
16921692
"canShinechargeMovement"
16931693
]
1694+
},
1695+
{
1696+
"name": "h_spikeXModeBlueSuit",
1697+
"requires": [
1698+
"canXModeBlueSuit",
1699+
"h_XModeSpikeHit",
1700+
{"shinespark": {"frames": 4, "excessFrames": 4}}
1701+
]
1702+
},
1703+
{
1704+
"name": "h_thornXModeBlueSuit",
1705+
"requires": [
1706+
"canXModeBlueSuit",
1707+
"h_XModeThornHit",
1708+
{"shinespark": {"frames": 4, "excessFrames": 4}}
1709+
]
1710+
},
1711+
{
1712+
"name": "h_spikeDoubleXModeBlueSuit",
1713+
"requires":[
1714+
"canDoubleXModeBlueSuit",
1715+
"h_spikeXModeShinecharge",
1716+
"h_spikeXModeBlueSuit",
1717+
{"shinespark": {"frames": 4, "excessFrames": 4}}
1718+
]
1719+
},
1720+
{
1721+
"name": "h_thornDoubleXModeBlueSuit",
1722+
"requires":[
1723+
"canDoubleXModeBlueSuit",
1724+
"h_thornXModeShinecharge",
1725+
"h_thornXModeBlueSuit",
1726+
{"shinespark": {"frames": 4, "excessFrames": 4}}
1727+
]
16941728
}
16951729
]
16961730
}

region/brinstar/green/Green Brinstar Fireflea Room.json

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -82,13 +82,10 @@
8282
"link": [1, 1],
8383
"name": "Leave Shinecharged (X-Mode)",
8484
"requires": [
85-
"canXMode",
8685
"h_XModeThornHit",
8786
"h_XModeThornHit",
88-
"h_XModeThornHit",
89-
"h_shinechargeMaxRunway",
90-
"canShinechargeMovement",
91-
{"shineChargeFrames": 130}
87+
"h_thornXModeShinecharge",
88+
{"shineChargeFrames": 120}
9289
],
9390
"exitCondition": {
9491
"leaveShinecharged": {}
@@ -359,6 +356,24 @@
359356
"Assuming the room can be reset, leniency is not included because a farm is available."
360357
]
361358
},
359+
{
360+
"link": [2, 2],
361+
"name": "Gain Blue Suit (X-Mode)",
362+
"requires": [
363+
{"or": [
364+
{"canShineCharge": {"usedTiles": 16, "openEnd": 0}},
365+
{"and": [
366+
{"doorUnlockedAtNode": 2},
367+
{"canShineCharge": {"usedTiles": 17, "openEnd": 0}}
368+
]}
369+
]},
370+
"h_thornXModeBlueSuit"
371+
],
372+
"flashSuitChecked": true,
373+
"note": [
374+
"Bouncing into the spikes is not required due to wall. Roll off the edge holding forwards from at least 1 tile before the drop to hit the wall on the way down."
375+
]
376+
},
362377
{
363378
"id": 12,
364379
"link": [2, 2],

region/brinstar/red/Alpha Power Bomb Room.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,18 @@
309309
},
310310
"flashSuitChecked": true
311311
},
312+
{
313+
"link": [1, 1],
314+
"name": "Gain Blue Suit (X-Mode)",
315+
"requires": [
316+
"canSamusEaterStandUp",
317+
{"samusEaterFrames": 160},
318+
"h_shinechargeMaxRunway",
319+
"h_spikeSuitSamusEaterLeniency",
320+
"h_thornXModeBlueSuit"
321+
],
322+
"flashSuitChecked": true
323+
},
312324
{
313325
"id": 28,
314326
"link": [1, 1],

region/crateria/central/Climb Supers Room.json

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -261,12 +261,7 @@
261261
"link": [1, 1],
262262
"name": "X-Mode, Leave Shinecharged",
263263
"requires": [
264-
"canXMode",
265-
"h_XModeSpikeHit",
266-
"h_XModeSpikeHit",
267-
"canShinechargeMovement",
268-
"canUseIFrames",
269-
"h_shinechargeMaxRunway",
264+
"h_spikeXModeShinecharge",
270265
{"shineChargeFrames": 110}
271266
],
272267
"exitCondition": {
@@ -275,6 +270,26 @@
275270
"flashSuitChecked": true,
276271
"devNote": "Two spike hits are expected per attempt (with any additional leniency hits being multiplied by this amount)."
277272
},
273+
{
274+
"link": [1, 1],
275+
"name": "Gain Blue Suit (X-Mode)",
276+
"entranceCondition": {
277+
"comeInShinecharged": {}
278+
},
279+
"requires": [
280+
{"shineChargeFrames": 145},
281+
"h_spikeXModeBlueSuit"
282+
],
283+
"flashSuitChecked": true
284+
},
285+
{
286+
"link": [1, 1],
287+
"name": "Gain Blue Suit (Double X-Mode)",
288+
"requires": [
289+
"h_spikeDoubleXModeBlueSuit"
290+
],
291+
"flashSuitChecked": true
292+
},
278293
{
279294
"id": 3,
280295
"link": [1, 1],

tech.json

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2572,6 +2572,44 @@
25722572
"This tech should not be used directly; instead use a helper,",
25732573
"in order to correctly account for the amount of Crystal Flash refill, which depends on the environment."
25742574
]
2575+
},
2576+
{
2577+
"name": "canXModeBlueSuit",
2578+
"techRequires": [
2579+
"canXMode",
2580+
"canCarryBlueSuit"
2581+
],
2582+
"otherRequires": [
2583+
{"gainBlueSuit": {}},
2584+
{"noFlashSuit": {}}
2585+
],
2586+
"note": [
2587+
"The ability to gain a blue suit by shinesparking while in X-Mode and exiting X-Mode before the shinespark has crashed.",
2588+
"Release dash during the shinespark wind-up animation to exit X-Mode, interrupting the shinespark and gaining a blue suit.",
2589+
"A blue suit will not be gained if dash is released after a shinespark has crashed against a wall or object.",
2590+
"Releasing dash mid shinespark will cause Samus to SuperJump and potentially go out of bounds but this can also be used to jump away from spikes or thorns.",
2591+
"Care must be taken around spikes or thorns after a blue suit is gained if there are active enemies as I-frames will expire quickly and escaping can be difficult."
2592+
]
2593+
},
2594+
{
2595+
"name": "canDoubleXModeBlueSuit",
2596+
"techRequires": [
2597+
"canXModeBlueSuit",
2598+
"canCarryBlueSuit"
2599+
],
2600+
"otherRequires": [
2601+
{"gainBlueSuit": {}},
2602+
{"noFlashSuit": {}}
2603+
],
2604+
"note": [
2605+
"The ability to gain a blue suit by shinesparking in X-Mode and exiting X-Mode before the shinespark has crashed.",
2606+
"Build the intial shinecharge by entering X-Mode with dash speed, once shinecharged release dash to exit X-Mode.",
2607+
"Before the shinecharged window expires, quickly re-enter X-Mode and peform a shinespark. Due to the short window, this second X-Mode has to be done first try.",
2608+
"Release dash during the shinespark wind-up animation to exit X-Mode, interrupting the shinespark and gaining a blue suit.",
2609+
"A blue suit will not be gained if dash is released after a shinespark has crashed against a wall or object.",
2610+
"Releasing dash mid shinespark will cause Samus to SuperJump and potentially go out of bounds but this can also be used to jump away from spikes or thorns.",
2611+
"Care must be taken around spikes or thorns after a blue suit is gained if there are active enemies as I-frames will expire quickly and escaping can be difficult."
2612+
]
25752613
}
25762614
]
25772615
},
@@ -2941,6 +2979,26 @@
29412979
}
29422980
]
29432981
},
2982+
{
2983+
"name": "canSlopeXMode",
2984+
"techRequires": [],
2985+
"otherRequires": [
2986+
"XRayScope",
2987+
{"noFlashSuit": {}}
2988+
],
2989+
"note": [
2990+
"The ability to enter X-Mode by using a frame perfect direction switch damage boost to land samus onto a slope and enter X-Mode",
2991+
"This method of X-Mode doesn't require Morph but cannot be used to charge a shinespark, only for room traversal or gaining a bluesuit if shinecharged when entering X-Mode.",
2992+
"Walking into a solid tile while in X-Mode will crash the game."
2993+
],
2994+
"detailNote": [
2995+
"Have X-Ray selected and buffer a jump input. Stand next to a slope tile and walk into an enemy, frame perfectly switch directions and hold dash on contact with an enemy, landing on the slope and entering X-Mode. Jump can be released anytime after X-Mode is entered."
2996+
],
2997+
"devNote": [
2998+
"A flash suit can be used while in X-Mode, but any unused flash suit will be lost when X-Ray is released.",
2999+
"Using a flash suit during X-Mode should be represented by a `useFlashSuit` immediately before `canSlopeXMode`."
3000+
]
3001+
},
29443002
{
29453003
"id": 161,
29463004
"name": "canRMode",

tests/asserts/keywords.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -501,7 +501,7 @@ def process_req_speed_state(req, states, err_fn):
501501
if not states.issubset(["shinecharging", "shinecharged", "preshinespark"]):
502502
err_fn(f"{req} while not shinecharging/shinecharged/preshinespark")
503503
states = {"preshinespark"}
504-
elif req in ["h_CrystalSpark", "h_CrystalSparkWithoutLenience", "h_heatedCrystalSpark", "canRModeSparkInterrupt", "canRModePauseAbuseSparkInterrupt", "h_RModeKnockbackSpark"]:
504+
elif req in ["h_CrystalSpark", "h_CrystalSparkWithoutLenience", "h_heatedCrystalSpark", "canRModeSparkInterrupt", "canRModePauseAbuseSparkInterrupt", "h_RModeKnockbackSpark", "h_spikeXModeBlueSuit", "h_thornXModeBlueSuit"]:
505505
if not states.issubset(["shinecharging", "shinecharged", "preshinespark"]):
506506
err_fn(f"{req} while not shinecharging/shinecharged/preshinespark")
507507
states = {"normal"}

0 commit comments

Comments
 (0)