Skip to content

Commit d2bf42e

Browse files
authored
Merge pull request #2026 from blkerby/side-platforms-13
Ridley Room side platform jumps
2 parents acf87d3 + bf4c003 commit d2bf42e

3 files changed

Lines changed: 237 additions & 0 deletions

File tree

region/lowernorfair/east/Ridley's Room.json

Lines changed: 179 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,185 @@
167167
"flashSuitChecked": true,
168168
"devNote": "FIXME: Ridley could also be used to set up G-mode, but the chaos of the fight makes this difficult."
169169
},
170+
{
171+
"link": [1, 2],
172+
"name": "Side Platform Cross Room Speedy Jump",
173+
"entranceCondition": {
174+
"comeInWithSidePlatform": {
175+
"platforms": [
176+
{
177+
"minHeight": 1,
178+
"maxHeight": 1,
179+
"minTiles": 17,
180+
"obstructions": [[1, 0]],
181+
"speedBooster": true,
182+
"requires": [
183+
{"or": [
184+
{"and": [
185+
"HiJump",
186+
{"heatFrames": 90}
187+
]},
188+
{"and": [
189+
"canTrickyDashJump",
190+
"canTrickySpringBallJump",
191+
{"heatFrames": 115}
192+
]}
193+
]}
194+
],
195+
"note": ["This applies to Warehouse Entrance."],
196+
"detailNote": [
197+
"For the spring ball jump, retain forward momentum until the pause hits,",
198+
"in order for the mid-air jump to also get the 'tricky dash' boost in height."
199+
]
200+
},
201+
{
202+
"minHeight": 2,
203+
"maxHeight": 2,
204+
"minTiles": 11.4375,
205+
"obstructions": [[1, 0]],
206+
"speedBooster": true,
207+
"requires": [
208+
"canTrickyDashJump",
209+
"canTrickySpringBallJump",
210+
{"heatFrames": 100}
211+
],
212+
"note": ["This applies to Ridley Tank Room, Halfie Climb Room, and Dust Torizo Room."],
213+
"detailNote": [
214+
"Retain forward momentum until the pause hits,",
215+
"in order for the mid-air jump to also get the 'tricky dash' boost in height."
216+
]
217+
},
218+
{
219+
"minHeight": 2,
220+
"maxHeight": 2,
221+
"minTiles": 12.4375,
222+
"obstructions": [[1, 0]],
223+
"speedBooster": true,
224+
"requires": [
225+
"HiJump",
226+
{"heatFrames": 95}
227+
],
228+
"note": ["This applies to Halfie Climb Room and Dust Torizo Room."]
229+
},
230+
{
231+
"minHeight": 3,
232+
"maxHeight": 3,
233+
"minTiles": 10.4375,
234+
"obstructions": [[1, 0]],
235+
"speedBooster": true,
236+
"requires": [
237+
"canTrickyDashJump",
238+
"canTrickySpringBallJump",
239+
{"heatFrames": 120}
240+
],
241+
"note": ["This applies to Big Boy Room and Mickey Mouse Room."],
242+
"detailNote": [
243+
"For the spring ball jump, retain forward momentum until the pause hits,",
244+
"in order for the mid-air jump to also get the 'tricky dash' boost in height."
245+
]
246+
},
247+
{
248+
"minHeight": 2,
249+
"maxHeight": 2,
250+
"minTiles": 45,
251+
"obstructions": [[2, 0]],
252+
"speedBooster": true,
253+
"requires": [
254+
"canInsaneJump",
255+
{"heatFrames": 85}
256+
],
257+
"note": ["This applies to Waterway Energy Tank Room."]
258+
},
259+
{
260+
"minHeight": 2,
261+
"maxHeight": 2,
262+
"minTiles": 45,
263+
"obstructions": [[3, 0]],
264+
"speedBooster": true,
265+
"requires": [
266+
"canInsaneJump",
267+
"canMomentumConservingMorph",
268+
{"or": [
269+
{"and": [
270+
"HiJump",
271+
"canInsaneMidAirMorph",
272+
{"heatFrames": 80}
273+
]},
274+
{"and": [
275+
"canTrickySpringBallJump",
276+
{"heatFrames": 100}
277+
]}
278+
]}
279+
],
280+
"note": ["This applies to Statues Hallway."]
281+
},
282+
{
283+
"minHeight": 3,
284+
"maxHeight": 3,
285+
"minTiles": 37.4375,
286+
"obstructions": [[3, 0]],
287+
"speedBooster": true,
288+
"requires": [
289+
"canInsaneJump",
290+
"canMomentumConservingMorph",
291+
{"or": [
292+
{"and": [
293+
"HiJump",
294+
{"heatFrames": 85}
295+
]},
296+
{"and": [
297+
"canTrickySpringBallJump",
298+
{"heatFrames": 100}
299+
]}
300+
]}
301+
],
302+
"note": ["This applies to Flyway."]
303+
},
304+
{
305+
"minHeight": 2,
306+
"maxHeight": 2,
307+
"minTiles": 45,
308+
"obstructions": [[4, 0]],
309+
"speedBooster": true,
310+
"requires": [
311+
"canInsaneJump",
312+
"canMomentumConservingMorph",
313+
"canInsaneMidAirMorph",
314+
"canTrickySpringBallJump",
315+
{"heatFrames": 100}
316+
],
317+
"note": ["This applies to Baby Kraid Room."]
318+
},
319+
{
320+
"minHeight": 3,
321+
"maxHeight": 3,
322+
"minTiles": 39.4375,
323+
"obstructions": [[3, 2]],
324+
"speedBooster": true,
325+
"requires": [
326+
"canTrickyJump",
327+
{"or": [
328+
{"and": [
329+
"HiJump",
330+
{"heatFrames": 75}
331+
]},
332+
{"and": [
333+
"canTrickySpringBallJump",
334+
{"heatFrames": 115}
335+
]}
336+
]}
337+
],
338+
"note": ["This applies to Metal Pirates Room."]
339+
}
340+
]
341+
}
342+
},
343+
"requires": [],
344+
"devNote": [
345+
"FIXME: Many of the spring ball jump variants can be done more easily with a spring ball bounce,",
346+
"which should be added as a separate strat."
347+
]
348+
},
170349
{
171350
"id": 23,
172351
"link": [1, 2],

region/maridia/inner-pink/Halfie Climb Room.json

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1009,6 +1009,17 @@
10091009
"The jump could also be done with a shorter runway, with a tricky dash jump using run speed $4.0 or $4.1."
10101010
]
10111011
},
1012+
{
1013+
"minHeight": 2,
1014+
"maxHeight": 2,
1015+
"minTiles": 45,
1016+
"obstructions": [[2, 0]],
1017+
"speedBooster": true,
1018+
"requires": [
1019+
"canInsaneJump"
1020+
],
1021+
"note": ["This applies to Waterway Energy Tank Room."]
1022+
},
10121023
{
10131024
"minHeight": 3,
10141025
"maxHeight": 3,
@@ -2455,6 +2466,22 @@
24552466
"requires": [],
24562467
"note": ["This applies to Dust Torizo Room."]
24572468
},
2469+
{
2470+
"minHeight": 2,
2471+
"maxHeight": 2,
2472+
"minTiles": 45,
2473+
"obstructions": [[2, 0]],
2474+
"speedBooster": true,
2475+
"requires": [
2476+
"canInsaneJump",
2477+
"canMomentumConservingMorph"
2478+
],
2479+
"note": ["This applies to Waterway Energy Tank Room."],
2480+
"detailNote": [
2481+
"Gain run speed, and time a pause to unequip Gravity after Samus jumps and aims down;",
2482+
"when the unpause black screen hits, press and hold down (and jump) to buffer a morph."
2483+
]
2484+
},
24582485
{
24592486
"minHeight": 3,
24602487
"maxHeight": 3,

tests/asserts/keywords.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1070,6 +1070,37 @@ def check_speed_states(strat, err_fn):
10701070
def strat_err_fn(msg):
10711071
messages["reds"].append(f"🔴ERROR: {stratRef}:{msg}")
10721072
messages["counts"]["reds"] += 1
1073+
1074+
def make_and(reqs):
1075+
if len(reqs) == 0:
1076+
return "free"
1077+
elif len(reqs) == 1:
1078+
return reqs[0]
1079+
else:
1080+
return {"and": reqs}
1081+
1082+
def make_or(reqs):
1083+
if len(reqs) == 0:
1084+
return "never"
1085+
elif len(reqs) == 1:
1086+
return reqs[0]
1087+
else:
1088+
out = []
1089+
for r in reqs:
1090+
if isinstance(r, dict) and "or" in r:
1091+
out.extend(r["or"])
1092+
else:
1093+
out.append(r)
1094+
return {"or": out}
1095+
1096+
1097+
requires = strat["requires"]
1098+
if "entranceCondition" in strat and "comeInWithSidePlatform" in strat["entranceCondition"]:
1099+
reqs = []
1100+
for platform in strat["entranceCondition"]["comeInWithSidePlatform"]["platforms"]:
1101+
reqs.append(make_and(platform.get("requires", [])))
1102+
requires.append(make_or(reqs))
1103+
10731104
for req in strat["requires"]:
10741105
check_and_or(req, strat_err_fn)
10751106
if heated and not check_heat_req({"and": strat["requires"]}):

0 commit comments

Comments
 (0)