| Metroid's cartridge ROM, counted by part of the game: each stretch of code or data goes to the part the disassembly's labels and comments say it serves, and the value sums the bytes of each part. | Source_Files/ | Code notes |
Every jump takes off with the whole part of Samus's vertical speed at $FC, 4 px/frame up. The High Jump Boots change the gravity, not the speed: SetSamusJump sets SamusGravity to $18, or $12 with the boots. | Source_Files/Bank07.asm L2672–2698 | Code |
Each frame VertAccelerate adds SamusGravity to the fraction byte of Samus's vertical speed and carries into its whole part, so gravity is SamusGravity/256 px/frame²: $18 (0.09375) in a jump, $12 with the High Jump Boots, $1A after walking off a ledge, and $38 after a hit (computed: 0.0703125, 0.1015625, 0.21875). A fall is capped at 5 px/frame and a rise at 6. | Source_Files/Bank07.asm L5582–5587Source_Files/Bank07.asm L2693–2698Source_Files/Bank07.asm L2440–2443Source_Files/Bank07.asm L5606–5616Source_Files/Bank07.asm L5620–5633 | Code |
Once a jump has carried Samus 32 px up (SamusJmpDsplcmnt at $20), letting go of jump while she still rises calls StopVertMovement, which sets her vertical speed to 0. The running-jump handler does the same past 32 px. | Source_Files/Bank07.asm L2701–2709Source_Files/Bank07.asm L2271–2280Source_Files/Bank07.asm L2867–2870 | Code |
On the ground Samus accelerates at $30/256 (0.1875) px/frame² toward SamusHorzSpdMax/16 px/frame, which VertAccelerate sets to $18 (1.5 px/frame) while she is grounded. With no direction held, StopHorzMovement clears her horizontal speed at once. | Source_Files/Bank07.asm L2245–2247Source_Files/Bank07.asm L5590–5593Source_Files/Bank07.asm L5648–5690Source_Files/Bank07.asm L2316–2319Source_Files/Bank07.asm L2600–2666 | Code |
A running jump sets the top speed to $12 (1.125 px/frame). In the air a held direction sets the acceleration toward it; with neither held, a jump still in the plain jump animation loses its horizontal speed, and a somersault keeps its speed and acceleration. | Source_Files/Bank07.asm L2305–2309Source_Files/Bank07.asm L2286–2290Source_Files/Bank07.asm L2642–2667 | Code |
In a jump from a standstill, LD055 sets the whole part of Samus's horizontal speed outright every frame, 1 px/frame toward a held direction and 0 with neither held. | Source_Files/Bank07.asm L2738–2767Source_Files/Bank07.asm L2710–2711 | Code |
Once Samus is airborne, the run and jump handlers start a jump only while she is in lava. Walking off a ledge makes her airborne at once: VertAccelerate sets the falling gravity on the first frame with nothing below her. | Source_Files/Bank07.asm L2252–2255Source_Files/Bank07.asm L2286–2289Source_Files/Bank07.asm L2719–2724Source_Files/Bank07.asm L5590–5607 | Code |
Samus is a box around her center: each animation frame's data sets ObjRadY and ObjRadX, the distances from her center to her top or bottom and to her sides. The level checks add these radii to her position, and so does the distance check between her and an enemy. | Source_Files/Metroid_Defines.asm L287–288Source_Files/Bank07.asm L4810–4816Source_Files/Bank07.asm L5594–5597Source_Files/Bank07.asm L5981–5987Source_Files/Bank07.asm L7802–7806 | Code |
Samus rolls into the ball only with the Maru Mari (gr_MARUMARI) and only on the ground. In the ball, Up or a jump press unrolls her unless Down is held, and only if she has room to stand. | Source_Files/Bank07.asm L2794–2799Source_Files/Bank07.asm L2820–2834 | Code |
IsScrewAttackActive counts the Screw Attack as on only in the running state with the item: in a somersault, or in the plain jump animation while Samus still rises. The Samus-enemy crash code at LF282 calls it. | Source_Files/Bank07.asm L2362–2379Source_Files/Bank07.asm L7935–7937Source_Files/Metroid_Defines.asm L865–866 | Code |
Samus's gear byte, SamusGear, has one bit each for the bombs, High Jump, Long Beam, Screw Attack, Maru Mari, Varia, Wave Beam, and Ice Beam: all eight bits, none for a Space Jump. | Source_Files/Metroid_Defines.asm L853–861Source_Files/Metroid_Defines.asm L584 | Code |
Each frame, the handler for Samus's state (standing, running, jumping) reads the pad first and then calls SetSamusData, which reaches LavaAndMoveCheck. That routine accelerates and moves her vertically (VertAccelerate, then one pixel at a time), and then horizontally (HorzAccelerate, then one pixel at a time). | Source_Files/Bank07.asm L2142–2151Source_Files/Bank07.asm L2333–2343Source_Files/Bank07.asm L5452–5456Source_Files/Bank07.asm L5471–5472Source_Files/Bank07.asm L5518–5521 | Code |
Samus's speeds are 8.8 fixed point: a whole byte, ObjVertSpeed or ObjHorzSpeed, and a fraction, VertCntrLinear or HorzCntrLinear. Her position's fraction is one more byte per axis, VertCntrNonLinr or HorzCntrNonLinr. Each frame the speed's fraction is added to it, and she moves the speed's whole part plus the carry, in pixels. The comments call that byte a counter that grows exponentially; in the code it is the fraction of her position. | Source_Files/Bank07.asm L5637–5643Source_Files/Bank07.asm L5691–5697Source_Files/Bank07.asm L5471–5472 | Code |
From a standstill, the first frame with Left or Right held doesn't move Samus. SamusStand picks the running state, calls SetSamusData, which moves her at her speed of 0, and only then calls SetSamusRun, which sets her acceleration. Her speed rises from the next frame. | Source_Files/Bank07.asm L2162–2199Source_Files/Bank07.asm L2236–2238 | Code |
Running on the ground, Left or Right against Samus's facing turns her and sets the acceleration toward the new side on that frame, through SetSamusRun, but leaves her speed as it is. She slows by 0.1875 px/frame each frame, passes 0, and speeds up the other way: from 1.5 px/frame, 16 frames to 1.5 px/frame the other way (computed). | Source_Files/Bank07.asm L2316–2326Source_Files/Bank07.asm L2236–2247Source_Files/Bank07.asm L5658–5661 | Code |
On the ground, the running handler checks Samus's animation before it reads A or the d-pad (LCDBF). Unless it is the running animation (or, with Up held, running and aiming up), it sets that animation and skips the rest of the handler for the frame. A jump press or a released d-pad on that frame is ignored, and she accelerates toward her facing. That happens on her first frame on the ground after a running jump or a fall, and on the frame after a turn: SetSamusRun gives Samus the running animation only if her animation was standing (an_SamusStand), and otherwise the running-and-aiming-up animation (an_SamusRunPntUp). | Source_Files/Bank07.asm L2295–2298Source_Files/Bank07.asm L2383–2395Source_Files/Bank07.asm L2225–2243 | Code |
A jump from a standstill starts after the press frame's move: SamusStand calls SetSamusData, which moves her, and then SetSamusJump, so she first rises on the next frame. A running jump's handler calls SetSamusJump (LCD40) before SetSamusData, so she rises on the press frame, and there it sets her top speed for the jump, SamusHorzSpdMax, to $12. | Source_Files/Bank07.asm L2185–2200Source_Files/Bank07.asm L2304–2310 | Code |
In a running jump, the air branch of the running handler poses Samus by SamusJmpDsplcmnt, which a jump sets to 0 and each pixel up adds 1 to and each pixel down takes 1 from. Rising at 24 or more (cpy #$18), she somersaults (an_SamusSalto) unless she is firing; falling at less than 24, she takes the plain jump pose (an_SamusJump), as she does from the running pose. The pose decides whether letting go of the d-pad stops her (metroid-samus/air-run). | Source_Files/Bank07.asm L2253–2270Source_Files/Bank07.asm L2281–2285Source_Files/Bank07.asm L5744–5745Source_Files/Bank07.asm L5783–5784 | Code |
Moving down, and not in the ball, Samus stops when MoveSamusDown finds a solid tile under her: StopVertMovement clears her vertical speed, SamusGravity is set to 0, and the frame goes on to her horizontal move. A jump from a standstill ends on the next frame: SamusJump finds SamusGravity at 0 and calls StopHorzMovement, which stops her and makes her stand, so she doesn't move that frame, and a jump press then does nothing, since the jumping handler starts a jump only in lava. In the ball (sa_Roll), a landing halves her downward speed and turns it upward, a bounce, until the halved whole speed is 0 and she stops. | Source_Files/Bank07.asm L5491–5493Source_Files/Bank07.asm L5511–5515Source_Files/Bank07.asm L5496–5500Source_Files/Bank07.asm L2719–2736 | Code |
In Brinstar's bank, the frames of Samus's running, standing, jumping, and somersault animations all give the radii $0F and $04: 15 px from her center to her top or bottom and 4 px to either side, so her box is 30 px tall and 8 wide (computed). | Source_Files/Bank01.asm L679–701Source_Files/Bank01.asm L789–793Source_Files/Bank01.asm L1157–1161Source_Files/Bank01.asm L1176–1177Source_Files/Bank01.asm L1192–1210 | Code |
Samus moves one pixel at a time, and a step tests the room's 8 px tiles only when the edge she moves toward lies on a tile boundary: MoveSamusUp, MoveSamusDown, MoveSamusLeft, and MoveSamusRight call the crash check only when her center less or plus her radius is a multiple of 8. The check tests the row of tiles above her top or below her bottom, or the column beside her side, across every tile her box spans. On the ground, VertAccelerate makes the same test under her each frame. | Source_Files/Bank07.asm L5713–5720Source_Files/Bank07.asm L5751–5757Source_Files/Bank07.asm L6215–6229Source_Files/Bank07.asm L6234–6245Source_Files/Bank07.asm L6280–6283Source_Files/Bank07.asm L6341–6352Source_Files/Bank07.asm L5594–5600 | Code |
On the ground, VertAccelerate sets SamusHorzSpdMax to $18 and tests the tiles under Samus before she moves. With none solid, and no elevator or frozen enemy under her, it sets the falling gravity, $1A, and adds it at once, so she is airborne from that frame. The running handler's air branch then turns her running pose into the plain jump pose, so letting go of the d-pad stops her (metroid-samus/air-run), and her top speed stays 1.5 px/frame. | Source_Files/Bank07.asm L5589–5609Source_Files/Bank07.asm L2281–2285 | Code |
A solid tile beside Samus stops her sideways move for the rest of the frame (CheckStopHorzMvmt). On the ground (SamusGravity 0), and not in the ball, it also calls StopHorzMovement, which clears her speed and acceleration and makes her stand. In the air her speed is kept. | Source_Files/Bank07.asm L5536–5540Source_Files/Bank07.asm L5568–5577 | Code |
Blocked moving up, Samus's vertical speed, whole byte and fraction, is shifted right one bit with the sign bit set (sec, ror ObjVertSpeed, ror VertCntrLinear). An upward speed is halved and stays upward, though the comment says the shift reverses her direction. The rest of that frame's rise is dropped. Each later frame that would still move her up is blocked and halved again, until gravity turns her speed downward. | Source_Files/Bank07.asm L5471–5478 | Code |
| Measured in the game, Samus's jump from a standstill peaks at 32 px on frame 10 when A is tapped or held up to 10 frames, and at 84 px on frame 41 when A is held to the top, landing on frames 36 and 86. A running jump, which rises on its press frame, peaks and lands a frame sooner at the same heights. | Source_Files/Bank07.asm L2701–2709Source_Files/Bank07.asm L5589–5643 | Verified |
| Metroid's password holds 18 bytes; bytes 0-7 carry one bit for each of 59 items, doors, and Tourian objects collected, byte 8 the starting area (bits 0-5) and whether Samus wears her suit (bit 7), byte 9 her equipment, byte 10 her missile count, bytes 11-13 her age, byte 15 the Kraid and Ridley statue and defeat bits, byte 14 a copy of the RAM byte after the age, which nmikstas labels unused, byte 16 a scramble count, and byte 17 a check byte. | Source_Files/Metroid_Defines.asm L615–632Source_Files/Bank00.asm L1655–1697Source_Files/Metroid_Defines.asm L589–592Source_Files/Bank00.asm L1549–1560 | Code |
| Metroid writes the 18 bytes as 24 characters of 6 bits each, three bytes to every four characters, from a 64-symbol set of 0-9, A-Z, a-z, ?, and -; the entry grid's 65th symbol, a space, enters as $FF, all 8 bits set. | Source_Files/Bank00.asm L1884–1885Source_Files/Bank00.asm L1962–1995Source_Files/Bank00.asm L3016–3034 | Code |
| To make a password, Metroid sums bytes 0-16 into byte 17, then rotates bytes 0-15 right as one 128-bit number, one bit at a time, as many times as byte 16 says; byte 16 is the low 4 bits of a random byte, redrawn until it is not 0. | Source_Files/Bank00.asm L1698–1704Source_Files/Bank00.asm L1835–1866 | Code |
| When the player presses Start, Metroid rebuilds the 18 bytes from the 24 characters, rotates bytes 0-15 back left by byte 16's count, and compares their sum with byte 17; on a mismatch it plays the wrong-password sound and shows ERROR TRY AGAIN for 120 frames, and on a match it starts the game; nothing else in the password is checked. | Source_Files/Bank00.asm L1625–1637Source_Files/Bank00.asm L1818–1825Source_Files/Bank00.asm L1868–1882Source_Files/Bank00.asm L2274–2276Source_Files/Bank00.asm L809–811 | Code |
| Metroid compares the first 16 characters entered with NARPASSWORD00000 before anything else and, on a match, sets a flag and ignores the rest; while that flag is set, the game engine writes $03 to Samus's health high byte, $FF to her equipment byte, and 5 to her missile count, every frame. | Source_Files/Bank00.asm L1806–1833Source_Files/Bank07.asm L1592–1599 | Code |
| If Mother Brain has been destroyed when Metroid makes a password, it clears her bit and every Tourian bit in bytes 6 and 7, so the password brings back Mother Brain, the zebetites, and Tourian's missile doors. | Source_Files/Bank00.asm L1647–1654 | Code |
| Computed from the decoder's lines, the password JUSTIN BAILEY ------ ------ passes; after 255 rotations, its bytes 0-16 sum to $FF mod 256, which equals its check byte, byte 17, and byte 8's bit 7 is set, which the game loads as Samus without her suit. | Source_Files/Bank00.asm L2000–2020Source_Files/Bank00.asm L2057–2086Source_Files/Bank00.asm L1868–1882Source_Files/Bank00.asm L1712–1716 | Code |
| nmikstas's disassembly of Metroid, assembled with Ophis, equals the PRG ROM of Metroid (USA) byte for byte. | build_script L32–33 | Code |
Samus's health is binary-coded decimal in tenths of a unit; HealthHi holds the full energy tanks in its high nibble and the tens digit in its low nibble, and HealthLo holds the ones digit in its high nibble. | Source_Files/Metroid_Defines.asm L270–272Source_Files/Bank07.asm L8211–8212 | Code |
| Samus starts with 30 units of energy and no energy tanks. | Source_Files/Bank07.asm L1580–1583 | Code |
When an enemy touches Samus, the game charges her the base damage of the current area, two bytes in that area's bank at $95CE, whatever the enemy; Brinstar's is 8 units, Norfair's 10, Kraid's hideout's 20, Ridley's hideout's 24, and Tourian's 30. | Source_Files/Bank07.asm L7997–8000Source_Files/Bank01.asm L1829–1830Source_Files/Bank02.asm L1844–1845Source_Files/Bank04.asm L1845–1846Source_Files/Bank05.asm L1849–1850Source_Files/Bank03.asm L1852–1853README.md L18–22 | Code |
With the Varia suit, SubtractHealth halves every amount it takes from Samus. | Source_Files/Bank07.asm L2523–2531 | Code |
A hit sets SamusBlink to $32, which is 50, gives Samus an upward speed of $FD with the hit gravity $38, and takes the push direction from the hit; the comment says "Set blink for 32 frames". | Source_Files/Bank07.asm L2421–2443 | Code |
Each frame, the crash detection skips the contact check between Samus and the enemies while SamusBlink is above 0. | Source_Files/Bank07.asm L7696–7702 | Code |
CheckHealthStatus, which Samus's routines call once per frame, lowers SamusBlink by 1 each time, so the blink lasts 50 frames of game logic. | Source_Files/Bank07.asm L2448–2450Source_Files/Bank07.asm L2342 | Code |
On each frame of the blink, CheckHealthStatus sets Samus's horizontal speed in the push direction to the blink counter divided by 16, so the push ends when the counter falls below 16; below 48, it skips the push on any frame Samus has horizontal acceleration. | Source_Files/Bank07.asm L2451–2463Source_Files/Metroid_Defines.asm L165 | Code |
| Measured in the ROM, a crawler held against Samus in Brinstar's first room takes 8 units with each hit, and the next hit lands 50 game frames later; one of the two gaps also held 2 lag frames, for 52 frames of video. | Source_Files/Bank07.asm L2421–2504 | Verified |
| Measured the same way, with the crawler moved off Samus during each blink, the three pushes carried her 37, 45, and 44 px away from it; two lifted her 19 px and one 2 px. | Source_Files/Bank07.asm L2421–2463 | Verified |
In lava, Samus's blink is set to 50 on every frame, so enemies can't touch her, while the lava takes 0.7 units twice every 8 frames without a push; the Varia suit cuts that to once, and SubtractHealth halves it to 0.3 units. | Source_Files/Bank07.asm L5432–5450Source_Files/Bank07.asm L2523–2527 | Code |
The main loop calls RandomNumbers once per frame, after the frame's work; it adds 5 to RandomNumber1 five times, 25 in all, so the byte steps through all 256 values every 256 frames. | Source_Files/Bank07.asm L34–47Source_Files/Bank07.asm L170–177 | Code |
When an enemy dies, a RandomNumber1 below 16 drops nothing; otherwise its low 3 bits pick from ItemDropTbl, which holds a missile at 0 and 3, energy at 1, 4, and 6, and $89 at 2, 5, and 7. | Source_Files/Bank07.asm L4575–4581Source_Files/Bank07.asm L4722–4732 | Code |
Item $89 drops only for an enemy whose byte in the area's table at $968B has bit 0 set, and Samus collects it as 20 units of energy; the table's comment calls it "No item". | Source_Files/Bank07.asm L4592–4599Source_Files/Bank07.asm L8534–8535Source_Files/Bank07.asm L8203–8216Source_Files/Bank01.asm L1878 | Code |
Each door re-rolls the room's caps from RandomNumber1, 0 to 15 missile drops and 64 to 94 energy drops, and zeroes the counts. A drop that would pass its cap is lost; one that passes the test adds to its count, even a $89 roll that the enemy then can't drop. | Source_Files/Bank01.asm L1381–1388Source_Files/Bank07.asm L4584–4599 | Code |
Until the first door, the caps on missile and energy drops are 39 when the game starts in Brinstar, because SamusInit stores the mirroring value $27 into them, or 47 ($2F) elsewhere. | Source_Files/Bank07.asm L1564–1572 | Code |
A small energy ball gives Samus 5 units and a $89 ball 20; a missile gives 2 missiles; an enemy whose data index carries the 30-unit flag gives 30 units or 30 missiles instead. | Source_Files/Bank07.asm L8203–8224Source_Files/Bank07.asm L4566–4570Source_Files/Bank01.asm L89–91 | Code |
In Tourian, enemies with data index 2 or 4 drop nothing, and any other kill that would drop nothing resets both caps to 1 and both counts to 0 and rolls the same RandomNumber1 again, skipping the test for 16. | Source_Files/Bank07.asm L4555–4562Source_Files/Bank07.asm L4601–4614 | Code |
Called in the ROM for all 256 values of RandomNumber1, the drop code gives a Brinstar enemy of data index 0 60 missiles, 90 small energy balls, 90 $89 balls, and 16 nothing; index 3, whose byte in the table LF74B reads ($968B + data index, kept in $00) has bit 0 clear, gives 106 nothing and no $89. | Source_Files/Bank07.asm L4555–4614Source_Files/Bank07.asm L8534–8536 | Verified |
| An energy tank adds a tank, up to 6, and fills Samus's health to her new maximum. | Source_Files/Bank07.asm L4354–4363 | Code |
| Samus's health can't exceed 99.9 units above her tanks, units for tanks, which is 699.9 with all six. | Source_Files/Bank07.asm L2576–2584 | Code |
| A missile tank raises Samus's missile capacity by 5. | Source_Files/Bank07.asm L4349–4351 | Code |
When a game starts rather than loads a file (gIsLoadingFile clear), SamusInit fills gEquipment with zeros and then sets Samus's maximum and current energy to 99, so she starts with 99 energy, no tanks, and no missiles, super missiles, or power bombs. Metroid starts her with 30 units. | Source_Files/Bank07.asm L1580–1583 | Code |
| On Easy and Normal an energy tank adds 100 to Samus's maximum energy, and on Hard 50, and sets her energy to the new maximum. A tank adds nothing if the maximum plus one more tank would pass 12 tanks plus the starting 99, so the maximum is 1299, or 699 on Hard (computed). In Metroid each tank holds 100 units, up to 6 tanks and 699.9 units, with the same refill. | Source_Files/Bank07.asm L4354–4363 | Code |
| Missiles, super missiles, and power bombs each have their own maximum and count, and each tank adds to both: 5 missiles, 2 super missiles, or 2 power bombs on Easy and Normal, and 2, 1, or 1 on Hard, from a start of 0 (mzm/start-energy). Missile tanks stop adding past 50 tanks' worth, 250 missiles, or 100 on Hard (computed). Metroid has missiles only, and its tank adds 5 to both the count and the capacity. | Source_Files/Bank07.asm L4349–4351Source_Files/Bank07.asm L4635–4650 | Code |
A jump sets Samus's upward yVelocity to 192 (SAMUS_LOW_JUMP_VELOCITY), 232 with the High Jump active, or 212 without the suit, which is checked first. The velocity counts eighths of a subpixel and a pixel is 4 subpixels, so these are 6, 7.25, and 6.625 px/frame (computed). Movement caps the velocity at 192 (24 subpixels, 6 px), so the High Jump's first five frames each rise 6 px (computed). Metroid's jump always takes off at 4 px/frame, and its High Jump Boots lower the gravity instead of raising the speed. | Source_Files/Bank07.asm L2672–2698 | Code |
Out of liquid (or in it with the Gravity Suit) and not held by a Metroid, SamusUpdatePhysics sets the vertical acceleration to 10 each frame, and SamusUpdateVelocityPosition takes it from yVelocity on every frame of the airborne poses while the velocity is at least -231, whether A is held or not: 0.3125 px/frame² (computed). A fall moves at most 128, 4 px/frame. In water, lava, or acid without the Gravity Suit, or out of liquid in a Metroid's grip, the acceleration halves to 5 and both caps drop to 40, 1.25 px/frame. Metroid's jump gravity is 0.09375 px/frame² (0.0703 with the High Jump Boots), and its falls reach 5 px/frame. | Source_Files/Bank07.asm L2693–2698Source_Files/Bank07.asm L5582–5587Source_Files/Bank07.asm L5628–5629 | Code |
On any frame Samus rises (yVelocity above 0) without A held, the mid-air handlers set yVelocity to 0, at any height: SamusMidAir, SamusTurningAroundMidAir, and SamusSpinning, which runs the spin jump, the Space Jump, and the Screw Attack. The check is each handler's last step, so a frame whose earlier branch returns, such as a Space Jump or wall jump press, skips it. Metroid lets a release stop the rise only after 32 px. | Source_Files/Bank07.asm L2701–2709 | Code |
The three games build the high jump three ways. Metroid's High Jump Boots lower the jump's gravity from $18 to $12 and keep the take-off speed. Metroid II's Hi-Jump starts the held rise at a lower counter and adds 1 px/frame to it, 3 px/frame for up to 31 frames against 2 for up to 15. Super Metroid's Hi-Jump Boots raise the take-off speed from 4.875 to 6 px/frame, with gravity unchanged. | Source_Files/Bank07.asm L2672–2698 | Code |
The timer a hit sets starts at 50 in Metroid (SamusBlink, $32), 51 in Metroid II (samusInvulnerableTimer, $33), and 96 in Super Metroid (SamusInvincibilityTimer, $60). | Source_Files/Bank07.asm L2421–2426 | Code |
Super Metroid's running acceleration is Metroid's, $30/256 (0.1875) px/frame² in both, but its top speed rises from Metroid's 1.5 px/frame to 2.75. Metroid II, between them, has no acceleration and walks at 1.5 px/frame. | Source_Files/Bank07.asm L2245–2246Source_Files/Bank07.asm L5592–5593Source_Files/Bank07.asm L5648–5660 | Code |
| Super Metroid keeps Metroid's release cut, a release during the rise setting the vertical speed to 0, but drops Metroid's 32 px minimum rise. Metroid II, between them, holds a fixed rise for as long as A is held, up to a frame limit. | Source_Files/Bank07.asm L2705–2709 | Code |