Skip to content

Commit 28bc090

Browse files
committed
Samus Eater teleport WIP
1 parent 83068bc commit 28bc090

7 files changed

Lines changed: 228 additions & 1 deletion

File tree

region/brinstar/green/Green Brinstar Main Shaft.json

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2910,6 +2910,22 @@
29102910
},
29112911
"requires": []
29122912
},
2913+
{
2914+
"link": [5, 13],
2915+
"name": "Samus Eater Teleport",
2916+
"entranceCondition": {
2917+
"comeInWithSamusEaterTeleport": {
2918+
"floorPositions": [[12, 13], [14, 13], [15, 13]],
2919+
"ceilingPositions": []
2920+
}
2921+
},
2922+
"requires": [
2923+
"Morph"
2924+
],
2925+
"note": [
2926+
"Land in the last Samus Eater of Alpha Power Bomb Room, or the second Samus Eater from the right of Hellway."
2927+
]
2928+
},
29132929
{
29142930
"id": 121,
29152931
"link": [6, 2],
@@ -3477,6 +3493,25 @@
34773493
},
34783494
"requires": []
34793495
},
3496+
{
3497+
"link": [6, 13],
3498+
"name": "Samus Eater Teleport",
3499+
"entranceCondition": {
3500+
"comeInWithSamusEaterTeleport": {
3501+
"floorPositions": [[15, 13], [1, 13]],
3502+
"ceilingPositions": []
3503+
}
3504+
},
3505+
"requires": [
3506+
"Morph"
3507+
],
3508+
"note": [
3509+
"Land in the right side of the third Samus Eater on the floor of Hellway."
3510+
],
3511+
"devNote": [
3512+
"The last Samus Eater on the right can also work."
3513+
]
3514+
},
34803515
{
34813516
"id": 152,
34823517
"link": [7, 2],

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,23 @@
295295
],
296296
"flashSuitChecked": true
297297
},
298+
{
299+
"link": [1, 1],
300+
"name": "Leave with Samus Eater Teleport",
301+
"entranceCondition": {
302+
"comeInWithGMode": {
303+
"mode": "direct",
304+
"morphed": false
305+
}
306+
},
307+
"requires": [],
308+
"exitCondition": {
309+
"leaveWithSamusEaterTeleport": {
310+
"floorPositions": [[12, 13], [2, 13], [8, 13]],
311+
"ceilingPositions": []
312+
}
313+
}
314+
},
298315
{
299316
"id": 10,
300317
"link": [1, 2],

region/brinstar/red/Hellway.json

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,23 @@
285285
"flashSuitChecked": true,
286286
"note": "Shoot a Super towards the door while the Zeela is on the side of its platform to knock it off."
287287
},
288+
{
289+
"link": [1, 1],
290+
"name": "Leave with Samus Eater Teleport",
291+
"entranceCondition": {
292+
"comeInWithGMode": {
293+
"mode": "direct",
294+
"morphed": false
295+
}
296+
},
297+
"requires": [],
298+
"exitCondition": {
299+
"leaveWithSamusEaterTeleport": {
300+
"floorPositions": [[7, 13], [11, 13], [15, 13], [10, 13], [14, 13], [1, 13]],
301+
"ceilingPositions": [[6, 3], [10, 3]]
302+
}
303+
}
304+
},
288305
{
289306
"id": 12,
290307
"link": [1, 2],
@@ -463,6 +480,23 @@
463480
"leaveWithGModeSetup": {}
464481
},
465482
"flashSuitChecked": true
483+
},
484+
{
485+
"link": [2, 2],
486+
"name": "Leave with Samus Eater Teleport",
487+
"entranceCondition": {
488+
"comeInWithGMode": {
489+
"mode": "direct",
490+
"morphed": false
491+
}
492+
},
493+
"requires": [],
494+
"exitCondition": {
495+
"leaveWithSamusEaterTeleport": {
496+
"floorPositions": [[7, 13], [11, 13], [15, 13], [10, 13], [14, 13], [1, 13]],
497+
"ceilingPositions": [[6, 3], [10, 3]]
498+
}
499+
}
466500
}
467501
],
468502
"notables": [

region/maridia/inner-pink/Colosseum.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1946,6 +1946,20 @@
19461946
"Grapple diagonally again to be pushed into the transition."
19471947
]
19481948
},
1949+
{
1950+
"link": [3, 2],
1951+
"name": "Samus Eater Teleport, Grapple Door Lock Skip",
1952+
"entranceCondition": {
1953+
"comeInWithSamusEaterTeleport": {
1954+
}
1955+
},
1956+
"requires": [
1957+
"canGrappleClip"
1958+
],
1959+
"bypassesDoorShell": true,
1960+
"note": [
1961+
]
1962+
},
19491963
{
19501964
"id": 77,
19511965
"link": [3, 3],

schema/m3-room.schema.json

Lines changed: 72 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -690,6 +690,40 @@
690690
}
691691
}
692692
},
693+
"comeInWithSamusEaterTeleport": {
694+
"type": "object",
695+
"description": "Represents that Samus must come into the room after teleporting to the location of a Samus Eater.",
696+
"required": ["floorPositions", "ceilingPositions"],
697+
"additionalProperties": false,
698+
"properties": {
699+
"floorPositions": {
700+
"type": "array",
701+
"description": "A list of screen-local tile coordinates of suitable floor Samus Eaters positions which will work for this strat, matching a position in a corresponding 'leaveWithSamusEaterTeleport' strat.",
702+
"items": {
703+
"type": "array",
704+
"minItems": 2,
705+
"maxItems": 2,
706+
"items": {
707+
"type": "integer",
708+
"description": "X or Y coordinate measured as a tile count, with 0 representing the top or left-most tile of the screen."
709+
}
710+
}
711+
},
712+
"ceilingPositions": {
713+
"type": "array",
714+
"description": "A list of screen-local tile coordinates of suitable ceiling Samus Eaters positions which will work for this strat, matching a position in a corresponding 'leaveWithSamusEaterTeleport' strat.",
715+
"items": {
716+
"type": "array",
717+
"minItems": 2,
718+
"maxItems": 2,
719+
"items": {
720+
"type": "integer",
721+
"description": "X or Y coordinate measured as a tile count, with 0 representing the top or left-most tile of the screen."
722+
}
723+
}
724+
}
725+
}
726+
},
693727
"comesThroughToilet": {
694728
"type": "string",
695729
"description": "For a strat having an entranceCondition through a vertical transition, indicates whether the strat is applicable if the Toilet comes between this room and the room with the exitCondition.",
@@ -730,7 +764,8 @@
730764
{"required": ["comeInWithWallJumpBelow"]},
731765
{"required": ["comeInWithSpaceJumpBelow"]},
732766
{"required": ["comeInWithPlatformBelow"]},
733-
{"required": ["comeInWithGrappleTeleport"]}
767+
{"required": ["comeInWithGrappleTeleport"]},
768+
{"required": ["comeInWithSamusEaterTeleport"]}
734769
]
735770
},
736771
"startsWithShineCharge": {
@@ -1072,6 +1107,42 @@
10721107
}
10731108
}
10741109
}
1110+
},
1111+
"leaveWithSamusEaterTeleport": {
1112+
"type": "object",
1113+
"description": "Represents that Samus can leave through this door immediately after exiting G-mode, in such a way that Samus is teleported to the position of a Samus Eater at the start of the transition.",
1114+
"required": ["floorPositions", "ceilingPositions"],
1115+
"additionalProperties": false,
1116+
"properties": {
1117+
"floorPositions": {
1118+
"type": "array",
1119+
"description": "A list of screen-local tile coordinates of floor Samus Eaters, indicating the left-most tile of the Samus Eater that Samus can interact with.",
1120+
"items": {
1121+
"type": "array",
1122+
"minItems": 2,
1123+
"maxItems": 2,
1124+
"items": {
1125+
"type": "integer",
1126+
"description": "X or Y coordinate measured as a tile count, with 0 representing the top or left-most tile of the screen.",
1127+
"minimum": 0,
1128+
"maximum": 15
1129+
}
1130+
}
1131+
},
1132+
"ceilingPositions": {
1133+
"type": "array",
1134+
"description": "A list of screen-local tile coordinates of ceiling Samus Eaters, indicating the left-most tile of the Samus Eater that Samus can interact with.",
1135+
"items": {
1136+
"type": "array",
1137+
"minItems": 2,
1138+
"maxItems": 2,
1139+
"items": {
1140+
"type": "integer",
1141+
"description": "X or Y coordinate measured as a tile count, with 0 representing the top or left-most tile of the screen."
1142+
}
1143+
}
1144+
}
1145+
}
10751146
}
10761147
}
10771148
},

strats.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -491,6 +491,38 @@ A `leaveWithGrappleTeleport` comes with an implicit tech requirement `canGrapple
491491
}
492492
```
493493

494+
## Leave With Samus Eater Teleport
495+
496+
A `leaveWithSamusEaterTeleport` exit condition represents that Samus can leave through this door immediately after initiating a teleport to the position of a Samus Eater in the room, by exiting G-mode. The position where Samus touched the Samus Eater determines where Samus will be placed in the next room. Most positions will result in Samus being placed behind the door after the transition, which will likely put Samus out of bounds. In some rooms, however, the space behind the door may be in-bounds; and there is a possibility of using specific Samus Eater locations to spawn Samus slightly in front of the door but lower than normal.
497+
498+
A `leaveWithSamusEaterTeleport` object has the following properties:
499+
500+
- _floorPositions_: A list of screen-local tile coordinates of floor Samus Eaters, indicating the left-most tile of the Samus Eater that Samus can interact with.
501+
- _ceilingPositions_: A list of screen-local tile coordinates of ceiling Samus Eaters, indicating the left-most tile of the Samus Eater that Samus can interact with.
502+
503+
A `leaveWithSamusEaterTeleport` comes with an implicit tech requirement `canSamusEaterTeleport`.
504+
505+
#### Example
506+
```json
507+
{
508+
"link": [1, 1],
509+
"name": "Leave with Samus Eater Teleport",
510+
"entranceCondition": {
511+
"comeInWithGMode": {
512+
"mode": "direct",
513+
"morphed": false
514+
}
515+
},
516+
"requires": [],
517+
"exitCondition": {
518+
"leaveWithSamusEaterTeleport": {
519+
"floorPositions": [[12, 13], [2, 13], [8, 13]],
520+
"ceilingPositions": []
521+
}
522+
}
523+
},
524+
```
525+
494526
## Entrance conditions
495527

496528
In all strats with an `entranceCondition`, the `from` node of the strat must be a door node or entrance node. An `entranceCondition` object must contain exactly one of the following properties:

tech.json

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2410,6 +2410,30 @@
24102410
"For high-energy (immobile) setups, instead turn around while taking knockback from the enemy that returns control to Samus (a 5-frame window)",
24112411
"This results in Samus entering a morph ball state without needing to have collected or equipped Morph."
24122412
]
2413+
},
2414+
{
2415+
"name": "canSamusEaterTeleport",
2416+
"techRequires": [
2417+
"canEnterGMode"
2418+
],
2419+
"otherRequires": [],
2420+
"note": [
2421+
"Ability to use a Samus Eater to teleport when exiting G-mode, just before touching a door transition,",
2422+
"modifying where Samus is placed in the next room.",
2423+
"Exiting G-mode will teleport Samus to position where she touched the Samus Eater.",
2424+
"At the start of the door transition, Samus' X and Y pixel positions are reduced modulo 256 (the size of a screen),",
2425+
"so the relative position within the screen is all the matters (not the absolute position in the room).",
2426+
"The transition must be touched 2 frames after control is regained control by releasing X-Ray.",
2427+
"A normalized method to do this is to position Samus slightly more than 1 pixel from the door (but less than $1.3 pixels away),",
2428+
"then hold forward toward the door while X-Ray is released.",
2429+
"Correct subpixels for this method can be obtained in the following way: 1) jump and press against a wall above,",
2430+
"2) jump and do a mid-air turnaround (making sure not to be in front of a wall when turning), which moves Samus back by half a pixel,",
2431+
"3) moonwalking back toward the door until 2 pixels away;",
2432+
"4) jump and do a turnaround mid-air toward the door.",
2433+
"Moonwalking moves back Samus in half-pixel increments, so in the absence of frame-perfect timing there is a 50% chance of ending in the correct position.",
2434+
"If Samus is 2 pixels away from the door after the final jump turnaround, then the position is correct;",
2435+
"if Samus is 1 pixel away from the door, then the position is incorrect, and the setup should be repeated."
2436+
]
24132437
}
24142438
]
24152439
},

0 commit comments

Comments
 (0)