Skip to content

Commit babaa08

Browse files
authored
add canXModeSpikeSuit to logic. (#2324)
1 parent 47d3353 commit babaa08

4 files changed

Lines changed: 131 additions & 5 deletions

File tree

helpers.json

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1550,7 +1550,33 @@
15501550
"canRModeKnockbackSpark",
15511551
{"shinespark": {"frames": 4, "excessFrames": 4}}
15521552
]
1553-
}
1553+
},
1554+
{
1555+
"name": "h_SpikeXModeSpikeSuit",
1556+
"requires": [
1557+
"h_XModeSpikeHit",
1558+
"h_XModeSpikeHit",
1559+
"h_spikeSuitSpikeHitLeniency",
1560+
"h_spikeSuitSpikeHitLeniency",
1561+
"h_spikeSuitSpikeHitLeniency",
1562+
"h_shinechargeMaxRunway",
1563+
"canXModeSpikeSuit",
1564+
{"spikeHits": 1}
1565+
]
1566+
},
1567+
{
1568+
"name": "h_ThornXModeSpikeSuit",
1569+
"requires": [
1570+
"h_XModeThornHit",
1571+
"h_XModeThornHit",
1572+
"h_XModeThornHitLeniency",
1573+
"h_XModeThornHitLeniency",
1574+
"h_XModeThornHitLeniency",
1575+
"h_shinechargeMaxRunway",
1576+
"canXModeSpikeSuit",
1577+
{"thornHits": 1}
1578+
]
1579+
}
15541580
]
15551581
}
15561582
]

region/brinstar/pink/Pink Brinstar Wave Gate Room.json

Lines changed: 86 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -700,6 +700,41 @@
700700
"gModeRegainMobility": {},
701701
"flashSuitChecked": true
702702
},
703+
{
704+
"link": [1, 1],
705+
"name": "Gain Flash Suit (X-Mode Spikesuit)",
706+
"requires": [
707+
{"obstaclesCleared": ["A"]},
708+
"h_destroyBombWalls",
709+
"canBeVeryPatient",
710+
"h_SpikeXModeSpikeSuit",
711+
{"shinespark": {"frames": 3, "excessFrames": 3}}
712+
],
713+
"resetsObstacles": ["C"],
714+
"note": [
715+
"A one frame dash jump will give Samus 4 pixels of leniency for the bounce position, two frames is pixel perfect and more than two frames it doesn't work.",
716+
"Samus will jump approximately two tiles higher with a one frame jump compared to a two frame jump."
717+
]
718+
},
719+
{
720+
"link": [1, 1],
721+
"name": "Gain Flash Suit (X-Mode Spikesuit) - Leave With Shinespark",
722+
"requires": [
723+
{"obstaclesCleared": ["A"]},
724+
"canFlashSuitDoubleSpark",
725+
"h_destroyBombWalls",
726+
"canBeVeryPatient",
727+
"h_SpikeXModeSpikeSuit",
728+
{"shinespark": {"frames": 26}}
729+
],
730+
"exitCondition": {
731+
"leaveWithSpark": {"position": "top"}
732+
},
733+
"note": [
734+
"A one frame dash jump will give Samus 4 pixels of leniency for the bounce position, two frames is pixel perfect and more than two frames it doesn't work.",
735+
"Samus will jump approximately two tiles higher with a one frame jump compared to a two frame jump."
736+
]
737+
},
703738
{
704739
"id": 21,
705740
"link": [1, 2],
@@ -1192,6 +1227,55 @@
11921227
"Two hits from the big Sidehopper appears to be a worst-case scenario."
11931228
]
11941229
},
1230+
{
1231+
"link": [1, 3],
1232+
"name": "Gain Flash Suit (X-Mode Spikesuit) - Shinespark Up",
1233+
"requires": [
1234+
{"or": [
1235+
"Wave",
1236+
{"obstaclesCleared": ["B"]}
1237+
]},
1238+
{"obstaclesCleared": ["A"]},
1239+
{"obstaclesNotCleared": ["C"]},
1240+
"canFlashSuitDoubleSpark",
1241+
"h_destroyBombWalls",
1242+
"canBeVeryPatient",
1243+
"h_SpikeXModeSpikeSuit",
1244+
{"shinespark": {"frames": 26}}
1245+
],
1246+
"resetsObstacles": ["C"],
1247+
"clearsObstacles": ["B"],
1248+
"wallJumpAvoid": true,
1249+
"note": [
1250+
"A one frame dash jump will give Samus 4 pixels of leniency for the bounce position, two frames is pixel perfect and more than two frames it doesn't work.",
1251+
"Samus will jump approximately two tiles higher with a one frame jump compared to a two frame jump."
1252+
]
1253+
},
1254+
{
1255+
"link": [1, 3],
1256+
"name": "X-Mode, Shinespark Up",
1257+
"requires": [
1258+
{"or": [
1259+
"Wave",
1260+
{"obstaclesCleared": ["B"]}
1261+
]},
1262+
{"obstaclesCleared": ["A"]},
1263+
{"obstaclesNotCleared": ["C"]},
1264+
"canXMode",
1265+
"h_XModeSpikeHit",
1266+
"h_XModeSpikeHit",
1267+
"h_shinechargeMaxRunway",
1268+
"canBeVeryPatient",
1269+
{"shinespark": {"frames": 16}}
1270+
],
1271+
"resetsObstacles": ["C"],
1272+
"clearsObstacles": ["B"],
1273+
"wallJumpAvoid": true,
1274+
"note": [
1275+
"A one frame dash jump will give Samus 4 pixels of leniency for the bounce position, two frames is pixel perfect and more than two frames it doesn't work.",
1276+
"Samus will jump approximately two tiles higher with a one frame jump compared to a two frame jump."
1277+
]
1278+
},
11951279
{
11961280
"id": 39,
11971281
"link": [1, 4],
@@ -1285,8 +1369,8 @@
12851369
]}
12861370
]}
12871371
],
1288-
"clearsObstacles": ["A", "B"],
1289-
"resetsObstacles": ["C"],
1372+
"clearsObstacles": ["A"],
1373+
"resetsObstacles": ["C", "B"],
12901374
"farmCycleDrops": [
12911375
{"enemy": "Sidehopper", "count": 1},
12921376
{"enemy": "Sm. Sidehopper", "count": 2}

tech.json

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2402,6 +2402,17 @@
24022402
"Damage from a slow moving enemy will usually kill Samus after i-frames expire; for this type of enemy shinespark away as soon as Samus starts to turn blue."
24032403
]
24042404
},
2405+
{
2406+
"name": "canXModeSpikeSuit",
2407+
"techRequires": [
2408+
"canXMode",
2409+
"canSpikeSuit"
2410+
],
2411+
"otherRequires": [],
2412+
"note": [
2413+
"The ability to gain a flash suit by using spike X-Mode to gain the initial shinecharge instead of a runway."
2414+
]
2415+
},
24052416
{
24062417
"id": 208,
24072418
"name": "canComplexCarryFlashSuit",
@@ -2826,10 +2837,15 @@
28262837
{"noFlashSuit": {}}
28272838
],
28282839
"note": [
2829-
"Ability to enter X-Mode using spikes by unmorphing frame perfectly before knockback ends with X-Ray ready to activate.",
2840+
"Ability to enter X-Mode using spikes by unmorphing within a 2-frame window after contact with spikes while holding forwards with X-Ray ready to activate.",
28302841
"This can be used to charge a shinespark or to slowly move forward by armpumping.",
28312842
"Walking into a solid tile while in X-Mode will crash the game."
28322843
],
2844+
"detailNote": [
2845+
"Samus must bounce once while morphed before unmorphing, or have collided horizontally with a solid object like a platform. If bouncing, this can be a platform above the spikes, or if there is room even the spikes themselves.",
2846+
"To build a shinecharge with X-Mode, Samus must enter X-Mode with dash speed, such as a stationary spinjump and selecting X-Ray before landing on the spikes.",
2847+
"After selecting X-ray the dash button can be held to automatically activate X-Ray after unmorphing. "
2848+
],
28332849
"devNote": [
28342850
"A flash suit can be used while in X-Mode, but any unused flash suit will be lost when X-Ray is released.",
28352851
"Using a flash suit during X-Mode should be represented by a `useFlashSuit` immediately before `canXMode`."

tests/asserts/keywords.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -494,7 +494,7 @@ def process_req_speed_state(req, states, err_fn):
494494
# Note: "canSpeedKeep" can be used for other purposes than obtaining blue, but its presence should be
495495
# enough to satisfy the test as a way that blue may be obtained.
496496
states = {"blue"}
497-
elif req in ["h_flashSuitIceClip"]:
497+
elif req in ["h_flashSuitIceClip", "h_SpikeXModeSpikeSuit", "h_ThornXModeSpikeSuit"]:
498498
states = {"preshinespark"}
499499
elif req in ["h_CrystalSpark", "h_heatedCrystalSpark", "canRModeSparkInterrupt", "h_RModeKnockbackSpark"]:
500500
if not states.issubset(["shinecharging", "shinecharged"]):

0 commit comments

Comments
 (0)