data/claims/super-metroid.yamlSuper Metroid (InsaneFirebat's sm_disassembly, from P.JBoy's bank logs)
Game: Super Metroid.
InsaneFirebat's sm_disassembly, assembled with asar for NTSC, equals Super Metroid (Japan, USA) (En,Ja) byte for byte. super-metroid/build
0x81E8B-0x81F54 — bank $90 $9E8B, SamusPhysicsConstants, the table most claims below readsm_disassembly: a relocatable disassembly of Super Metroid · test_build.bat#L19echo Success! This ROM matches vanilla Super Metroidsm_disassembly: a relocatable disassembly of Super Metroid · src/main.asm#L34-L36print "NTSC VERSION"
!FPS = 1
!SPF = 1Checked by claude, 2026-10-21 — ran create_data.sh and build_rom.sh with the bundled asar on Linux; cmp finds SM.sfc identical to the ROM (SHA-1 da957f0d63d14cb441d215462904c4fa8519c613). The default build is NTSC (!PAL = 0)Cited by: Super Metroid
Make_Samus_Jump picks the take-off speed from a table by medium and the Hi-Jump Boots: 4.875 px/frame up in air, 1.75 in water, 2.75 in lava or acid, and 6, 2.5, and 3.5 with the boots. With the Speed Booster equipped, it adds Samus's extra run speed, the whole part halved. super-metroid/jump-speed
About: Super Metroid Jump
Value
[ 4.875, 6 ]
src/bank_90.asm#L4198-L4227.merge:
LDA.W EquippedItems
BIT.W #$0100
BNE .hiJumpEquipped
LDA.W SamusPhysicsConstants_InitialYSubSpeeds_Jumping,X
…
.hiJumpEquipped:
…
BIT.W #$2000
BEQ +
LDA.W SamusXExtraRunSpeed
LSR
…sm_disassembly: a relocatable disassembly of Super Metroid · src/bank_90.asm#L4184-L4196.normalGravity:
LDX.W #$0000
…
.submergedInWater:
…
LDX.W #$0002
…
.submergedInAcidLava:
LDX.W #$0004sm_disassembly: a relocatable disassembly of Super Metroid · src/bank_90.asm#L3995-L3998.running:
LDA.W EquippedItems
BIT.W #$2000
BEQ .noSpeedBoostersm_disassembly: a relocatable disassembly of Super Metroid · src/bank_90.asm#L5124-L5134.InitialYSpeeds_Jumping:
dw $04E0*!SPF/$100,$01C0*!SPF/$100,$02C0*!SPF/$100
…
.InitialYSubSpeeds_Jumping:
dw $04E0*!SPF*$100,$01C0*!SPF*$100,$02C0*!SPF*$100
…
.InitialYSpeeds_HiJumpJumping:
dw $0600*!SPF/$100,$0280*!SPF/$100,$0380*!SPF/$100Checked by claude, 2026-10-21 — read Make_Samus_Jump; each pair stores a whole word (value/$100) and a subpixel word (value*$100, truncated to 16 bits), so $04E0 is 4 + $E000/$10000 = 4.875 px/frame. Bit $0100 guards the branch labeled for the Hi-Jump Boots; bit $2000 is the Speed Booster bit that Handle_Samus_XExtraRunSpeed testsCited by: Super Metroid
Gravity is one constant in air, $1C00 subpixels (0.109375 px/frame²) every frame of a jump or fall, held button or not; water uses $0800 and lava or acid $0900. A fall stops gaining speed at 5 px/frame. super-metroid/gravity
About: Super Metroid Gravity
Value: 0.109375 px/frame²
Codesm_disassembly: a relocatable disassembly of Super Metroid ·src/bank_90.asm#L5076-L5082.YSubAccelerationInAir:
; Samus Y subacceleration in air
dw regional($1C00, $2800)
…
; Samus Y subacceleration in water
dw $0800*!SPFsm_disassembly: a relocatable disassembly of Super Metroid · src/bank_90.asm#L4719-L4720.notSubmerged:
LDA.W SamusPhysicsConstants_YSubAccelerationInAirsm_disassembly: a relocatable disassembly of Super Metroid · src/bank_90.asm#L2972-L2994LDA.W SamusYDirection
CMP.W #$0002
BEQ .down
LDA.W SamusYSubSpeed
SEC
SBC.W SamusYSubAcceleration
…
.down:
LDA.W SamusYSpeed
CMP.W #$0005*!SPF
BEQ +
LDA.W SamusYSubSpeed
…Checked by claude, 2026-10-21 — read Determine_Samus_YAcceleration and Samus_Y_Movement_WithSpeedCalculations, which subtracts the acceleration while rising and adds it while falling with no input test; the YAcceleration words are 0, so the subpixel word is the whole gravity. Acid/lava's $0900 is at L5084-L5086Cited by: Super Metroid
In a normal or spin jump, letting go of jump while Samus rises sets her vertical speed to 0 and starts the fall at once; held, the rise lasts until gravity brings the speed to 0. super-metroid/release-cap
About: Super Metroid Variable jump height
Value: 0 px/frame after release
Codesm_disassembly: a relocatable disassembly of Super Metroid ·src/bank_90.asm#L2785-L2798.jumping:
LDA.W SamusYDirection
CMP.W #$0001
BNE .setFallingEnd
LDA.B DP_Controller1Input
AND.W JumpBinding
BEQ +
LDA.W SamusYSpeed
BPL .setFallingEnd
+ STZ.W SamusYSubSpeed
STZ.W SamusYSpeed
LDA.W #$0002
…sm_disassembly: a relocatable disassembly of Super Metroid · src/bank_90.asm#L2846-L2857LDA.B DP_Controller1Input
AND.W JumpBinding
BEQ +
…
+ STZ.W SamusYSubSpeed
STZ.W SamusYSpeedChecked by claude, 2026-10-21 — read Samus_Jumping_Movement and Samus_SpinJumping_Movement; Y direction 1 is up and 2 down, as Samus_Y_Movement_WithSpeedCalculations's .down branch showsCited by: Super Metroid
Running accelerates Samus at 0.1875 px/frame² to 2.75 px/frame and slows her at 0.5 px/frame² once she lets go. Holding dash while running builds a separate extra run speed at 0.0625 px/frame², up to 2 px/frame, or 7 with the Speed Booster. super-metroid/run-speeds
About: Super Metroid Running
Value
[ 2.75, 2, 7 ]
src/bank_90.asm#L5192-L5200SamusXSpeedTable_Normal:
; Used for Samus X base speed (due to general movement)
…
dd wordSwap($0030*!SPF*$100),wordSwap($02C0*!SPF*$100), wordSwap($0080*!SPF*$100) ; 1: Runningsm_disassembly: a relocatable disassembly of Super Metroid · src/bank_90.asm#L3982-L3998.gravityContinued:
LDA.W MovementType
AND.W #$00FF
CMP.W #$0001
BEQ .checkDash
…
.checkDash:
LDA.B DP_Controller1Input
AND.W DashBinding
…
BIT.W #$2000
BEQ .noSpeedBoostersm_disassembly: a relocatable disassembly of Super Metroid · src/bank_90.asm#L4040-L4047.accelerating:
LDA.W SamusXExtraRunSubSpeed
CLC
ADC.W SamusPhysicsConstants_XSubAccelerations_DashHeld,Xsm_disassembly: a relocatable disassembly of Super Metroid · src/bank_90.asm#L5163-L5173.XSubAccelerations_DashHeld:
dw regional($1000, $1400),$0400*!SPF,$0400*!SPF
.MaxXExtraRunSpeeds_SpeedBooster:
dw $0007*!SPF,$0004*!SPF,$0004*!SPF
…
.MaxXExtraRunSpeeds_NoSpeedBooster:
dw $0200*!SPF/$100,$0100*!SPF/$100,$0000*!SPF/$100Checked by claude, 2026-10-21 — read the speed table (a 32-bit whole.subpixel per column, $0030*$100 = 0.1875 px), and Handle_Samus_XExtraRunSpeed, which runs only for movement type 1 (running) with dash held and caps the extra speed at the booster or no-booster maximumMovement type 1 is the table's "Running" row.
Cited by: Super Metroid
In a normal jump with no acceleration mode set, holding neither left nor right sets Samus's base horizontal speed to 0 that frame; held, the speed table's jumping row accelerates her at 0.75 px/frame² to 1.25 px/frame. super-metroid/air-control
About: Super Metroid Air control
Value: 1.25 px/frame
Codesm_disassembly: a relocatable disassembly of Super Metroid ·src/bank_90.asm#L2807-L2819LDA.W SamusXAccelerationMode
BNE .XMovement
LDA.B DP_Controller1Input
BIT.W #$0100
BNE .XMovement
BIT.W #$0200
BNE .XMovement
STZ.B DP_Temp12
STZ.B DP_Temp14
STZ.W SamusXBaseSpeed
STZ.W SamusXBaseSubSpeedsm_disassembly: a relocatable disassembly of Super Metroid · src/bank_90.asm#L5195-L5201; ________________________________________________________________ X acceleration
…
dd wordSwap($00C0*!SPF*$100),wordSwap($0140*!SPF*$100), wordSwap($0080*!SPF*$100) ; 2: Normal jumpingChecked by claude, 2026-10-21 — read Samus_Jumping_Movement; $0100 and $0200 are the d-pad's right and left bits in the SNES joypad word. The spin-jump version zeroes the speed unless the direction she faces is held (L2859-L2886)An enemy's touch sets SamusInvincibilityTimer to $60 (96), and Samus's contact check returns early while it is above 0. DecrementSamusHurtTimers_ClearActiveEnemyIndicesLists takes 1 from it, which the gameplay routine calls once per frame. super-metroid/i-frames
About: Super Metroid Invincibility frames
Value: 96 frames
Codesm_disassembly: a relocatable disassembly of Super Metroid ·src/bank_A0.asm#L4915-L4919LDA.L EnemyHeaders_damage,X
JSL.L Suit_Damage_Division
JSL.L Deal_A_Damage_to_Samus
LDA.W #$0060
STA.W SamusInvincibilityTimersm_disassembly: a relocatable disassembly of Super Metroid · src/bank_A0.asm#L3392-L3394.normalContact:
LDA.W SamusInvincibilityTimer
BNE .returnUppersm_disassembly: a relocatable disassembly of Super Metroid · src/bank_A0.asm#L2093-L2096DecrementSamusHurtTimers_ClearActiveEnemyIndicesLists:
LDA.W SamusInvincibilityTimer
BEQ +
DEC.W SamusInvincibilityTimersm_disassembly: a relocatable disassembly of Super Metroid · src/bank_82.asm#L1566JSL.L DecrementSamusHurtTimers_ClearActiveEnemyIndicesListsChecked by claude, 2026-10-21 — read the normal enemy touch routine, the Samus/enemy contact check, and the end of the main gameplay routine in bank $82An enemy projectile sets the same $60 (bank_A0.asm L3072-L3073).
Cited by: Super Metroid
An enemy's touch sets a 5-frame SamusKnockbackTimer and a knockback direction from Samus's position against the enemy's. The knockback launches her at 5 px/frame up, or 2 in water, lava, or acid, and the upward knockback then moves her with the usual Y-speed code, gravity included. super-metroid/knockback
About: Super Metroid Knockback
Value: 5 px/frame up
Codesm_disassembly: a relocatable disassembly of Super Metroid ·src/bank_A0.asm#L4920-L4931LDA.W #$0005
STA.W SamusKnockbackTimer
LDY.W #$0000
LDX.W EnemyIndex
LDA.W SamusXPosition
SEC
SBC.W Enemy.XPosition,X
…
STY.W KnockbackXDirectionsm_disassembly: a relocatable disassembly of Super Metroid · src/bank_90.asm#L4352-L4356.merge:
LDA.W SamusPhysicsConstants_InitialYSubSpeeds_Knockback,X
STA.W SamusYSubSpeed
LDA.W SamusPhysicsConstants_InitialYSpeeds_Knockback,X
STA.W SamusYSpeedsm_disassembly: a relocatable disassembly of Super Metroid · src/bank_90.asm#L5148-L5149.InitialYSpeeds_Knockback:
dw $0500*!SPF/$100,$0200*!SPF/$100,$0200*!SPF/$100sm_disassembly: a relocatable disassembly of Super Metroid · src/bank_90.asm#L14262-L14264KnockbackMoement_Up:
JSR.W MoveSamus_Horizontally_KnockbackBombJump
JSR.W Samus_Y_Movement_WithSpeedCalculationsChecked by claude, 2026-10-21 — read the touch routine's end, SetSamusYSpeedForKnockback (index 0 unless submerged), and the knockback movement handlerCited by: Super Metroid
A new save file starts Samus with 99 energy and no missiles. super-metroid/start-energy
About: Super Metroid Health upgrade
Value: 99 energy
Codesm_disassembly: a relocatable disassembly of Super Metroid ·src/bank_81.asm#L6230-L6236NewSaveFile:
REP #$30
LDA.W #$0063
STA.W MaxEnergy
STA.W Energy
LDA.W #$0000
STA.W MaxMissilesChecked by claude, 2026-10-21 — read NewSaveFileCited by: Health upgrade
An energy tank adds its argument, 100, to Samus's maximum energy and sets her energy to the new maximum. super-metroid/energy-tank
About: Super Metroid Health upgrade
Value: 100 energy
Codesm_disassembly: a relocatable disassembly of Super Metroid ·src/bank_84.asm#L1452-L1461Instruction_PLM_CollectHealth_EnergyTank:
…
LDA.W MaxEnergy
CLC
ADC.W $0000,Y
STA.W MaxEnergy
STA.W Energysm_disassembly: a relocatable disassembly of Super Metroid · src/bank_84.asm#L15449dw Instruction_PLM_CollectHealth_EnergyTank,$0064Checked by claude, 2026-10-21 — read the collect instruction and the energy tank's instruction listCited by: Health upgrade
Missiles, super missiles, and power bombs are three separate pools, each with its own tank; each tank instruction adds its argument, 5, to that pool's maximum and its count. super-metroid/ammo-tanks
About: Super Metroid Ammunition
Value: 5 per tank
Codesm_disassembly: a relocatable disassembly of Super Metroid ·src/bank_84.asm#L1496-L1508Instruction_PLM_CollectAmmo_MissileTank:
…
LDA.W MaxMissiles
CLC
ADC.W $0000,Y
STA.W MaxMissiles
LDA.W Missiles
CLC
ADC.W $0000,Y
STA.W Missilessm_disassembly: a relocatable disassembly of Super Metroid · src/bank_84.asm#L1520-L1528Instruction_PLM_CollectAmmo_SuperMissileTank:
…
LDA.W MaxSuperMissilessm_disassembly: a relocatable disassembly of Super Metroid · src/bank_84.asm#L1544-L1552Instruction_PLM_CollectAmmo_PowerBombTank:
…
LDA.W MaxPowerBombssm_disassembly: a relocatable disassembly of Super Metroid · src/bank_84.asm#L15474dw Instruction_PLM_CollectAmmo_MissileTank,$0005sm_disassembly: a relocatable disassembly of Super Metroid · src/bank_84.asm#L15499dw Instruction_PLM_CollectAmmo_SuperMissileTank,$0005sm_disassembly: a relocatable disassembly of Super Metroid · src/bank_84.asm#L15524dw Instruction_PLM_CollectAmmo_PowerBombTank,$0005Checked by claude, 2026-10-21 — read the three collect instructions, which add to separate maximum and current counts, and the visible tanks' instruction listsCited by: Ammunition
The morphing transition reverts Samus's pose unless the Morph Ball is equipped. On the ground the ball's row of the speed table tops out at 3.25 px/frame, above running's 2.75. super-metroid/morph-ball
About: Super Metroid Morph ball
Value: 3.25 px/frame
Codesm_disassembly: a relocatable disassembly of Super Metroid ·src/bank_91.asm#L15801-L15822InitializeSamusPose_MorphingTransition:
…
LDA.W EquippedItems
BIT.W #$0004
BEQ .noMorphBall
…
.noMorphBall:
LDA.W PreviousPose
STA.W Posesm_disassembly: a relocatable disassembly of Super Metroid · src/bank_90.asm#L5200-L5203dd wordSwap($0030*!SPF*$100),wordSwap($02C0*!SPF*$100), wordSwap($0080*!SPF*$100) ; 1: Running
…
dd wordSwap($00C0*!SPF*$100),wordSwap($0340*!SPF*$100), wordSwap($0080*!SPF*$100) ; 4: Morph ball - on groundChecked by claude, 2026-10-21 — read the morphing transition's pose initializer and the normal speed tableCited by: Morph ball
In a spin jump in air with the Space Jump, a new jump press makes a fresh jump only while Samus falls at 2.5 px/frame or faster and below 5. super-metroid/space-jump
About: Super Metroid Space Jump
Value
[ 2.5, 5 ]
src/bank_90.asm#L5467-L5540SamusMovement_SpinJumping:
; Handles space jump
…
LDA.W EquippedItems
BIT.W #$0200
BNE .spaceJumpEligible
…
.spaceJumpEligible:
LDA.W SamusYDirection
CMP.W #$0002
…
.airPhysics:
…sm_disassembly: a relocatable disassembly of Super Metroid · src/bank_90.asm#L5056-L5062.SpaceJumpMinimumYVelocityInAir:
; Space jump minimum Y velocity in air * 100h
dw $0280*!SPF
…
; Space jump maximum Y velocity in air * 100h
dw $0500*!SPFChecked by claude, 2026-10-21 — read SamusMovement_SpinJumping; the comment's "* 100h" makes $0280 2.5 px/frame. In water the window is $0080 to $0500Cited by: Space Jump, Spin jump, Super Metroid
A normal enemy's touch routine takes another path when ContactDamageIndex is nonzero: it damages the enemy and returns without hurting Samus. Its comment places the Screw Attack's damage at $A4C2, 2000 ($07D0) for index 3, before the enemy's vulnerability scales it. super-metroid/screw-attack
About: Super Metroid Screw Attack
Value: 2000 damage (base)
Codesm_disassembly: a relocatable disassembly of Super Metroid ·src/bank_A0.asm#L4812-L4835NormalEnemyTouchAI_NoDeathCheck:
; Damage values:
; Speed boosting: $A4AF
; Shinesparking: $A4BA
; Screw attack: $A4C2
; Pseudo screw attack: $A4CC
LDA.W ContactDamageIndex
BNE .notNormal
JMP.W .normalSamus
…
LDY.W #$07D0
CMP.W #$0003
…sm_disassembly: a relocatable disassembly of Super Metroid · src/bank_A0.asm#L4860-L4901LDA.L EnemyVulnerabilities_power,X
…
LDA.W Enemy.health,X
SEC
SBC.B DP_Temp12Checked by claude, 2026-10-21 — read NormalEnemyTouchAI_NoDeathCheck; the .notNormal path ends in RTS before .normalSamus, the only branch that calls Deal_A_Damage_to_SamusCited by: Screw Attack
A wall jump starts only from a spin jump or another wall jump. Once the spin animation reaches its wall-jump frames, with a direction held away from a wall or solid enemy within 8 px, a new jump press jumps off at 4.625 px/frame up, or 5.5 with the Hi-Jump Boots. super-metroid/wall-jump
About: Super Metroid Wall jump
Value
[ 4.625, 5.5 ]
src/bank_90.asm#L4838-L4861WallJump_Check:
…
LDA.W LastDifferentPoseMovementType
AND.W #$00FF
CMP.W #$0003
BEQ .spinJumping
CMP.W #$0014
BNE .carryClearReturn
…
LDA.W SamusAnimationFrame
CMP.W #$000B
BMI .spinningAnimation
…sm_disassembly: a relocatable disassembly of Super Metroid · src/bank_90.asm#L4941-L4951.wallJumpEligiblePressingLeft:
LDA.W #$0001
STA.W CollisionMovementDirection
JSL.L Samus_vs_SolidEnemy_CollisionDetection
…
JSL.L WallJumpBlockCollisionDetection
BCC .gotoReturnCarryClear
LDA.B DP_Controller1New
BIT.W JumpBindingsm_disassembly: a relocatable disassembly of Super Metroid · src/bank_90.asm#L4960-L4986.wallJumpEligiblePressingRight:
STZ.W CollisionMovementDirection
JSL.L Samus_vs_SolidEnemy_CollisionDetection
TAX
BNE .leftCollisionDetectedsm_disassembly: a relocatable disassembly of Super Metroid · src/bank_90.asm#L2897-L2900LDA.W SamusPhysicsConstants_MaximumDistanceFromWallForWallJump
STA.B DP_Temp12
STZ.B DP_Temp14
JSR.W WallJump_Checksm_disassembly: a relocatable disassembly of Super Metroid · src/bank_90.asm#L5072-L5074.MaximumDistanceFromWallForWallJump:
; Maximum distance from wall for wall-jump
dw $0008sm_disassembly: a relocatable disassembly of Super Metroid · src/bank_90.asm#L5136-L5143.InitialYSpeeds_WallJumping:
dw $04A0*!SPF/$100,$0040*!SPF/$100,$02A0*!SPF/$100
…
.InitialYSpeeds_HiJumpWallJumping:
dw $0580*!SPF/$100,$0080*!SPF/$100,$0380*!SPF/$100Checked by claude, 2026-10-21 — read WallJump_Check (movement type 3 is spin jumping and $14 wall jumping, per the speed table's rows), Samus_SpinJumping_Movement's call with the 8 px distance, and Make_Samus_WallJump, which reads the wall-jump speeds as Make_Samus_Jump reads its own. Pressing right tests the left side, per the .leftCollisionDetected labelCited by: Spin jump, Super Metroid, Wall jump
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. super-metroid/high-jump-line
About: Super Metroid Jump
Codemetroid-disassembly: Metroid software disassembly ·Source_Files/Bank07.asm#L2672-L2698SetSamusJump:
…
LDA #$FC
STA ObjVertSpeed
…
LCFF3: LDY #$18 ; gravity (high value -> low jump)
LDA SamusGear
AND #gr_HIGHJUMP
BEQ + ; branch if Samus doesn't have High Jump
LDY #$12 ; lower gravity value -> high jump!
* STY SamusGravityM2RoS: Return of Samus Disassembly · SRC/bank_000.asm#L3328-L3339; High jump parameters
ld a, samus_jumpArrayBaseOffset - $1F ;$21
…
; Normal jump parameters
ld a, samus_jumpArrayBaseOffset - $0F ;$31M2RoS: Return of Samus Disassembly · SRC/constants.asm#L26def samus_jumpArrayBaseOffset = $40M2RoS: Return of Samus Disassembly · SRC/bank_000.asm#L3884-L3887; Check if in linear portion of ascent
ld a, [samus_jumpArcCounter]
cp samus_jumpArrayBaseOffset
jr nc, .endIf_AM2RoS: Return of Samus Disassembly · SRC/bank_000.asm#L3937-L3940; Increment jump counter
ld a, [samus_jumpArcCounter]
inc a
ld [samus_jumpArcCounter], aM2RoS: Return of Samus Disassembly · SRC/bank_000.asm#L3892-L3898; Set speed, subtracting an extra 1 from it if we have high jump
ld a, [samusItems]
and itemMask_hiJump
srl a
ld b, a
ld a, -2 ; $FE
sub bsm_disassembly: a relocatable disassembly of Super Metroid · src/bank_90.asm#L5124-L5131.InitialYSpeeds_Jumping:
dw $04E0*!SPF/$100,$01C0*!SPF/$100,$02C0*!SPF/$100
…
.InitialYSpeeds_HiJumpJumping:
dw $0600*!SPF/$100,$0280*!SPF/$100,$0380*!SPF/$100sm_disassembly: a relocatable disassembly of Super Metroid · src/bank_90.asm#L4702-L4720Determine_Samus_YAcceleration:
LDA.W EquippedItems
BIT.W #$0020
BNE .notSubmerged
…
.notSubmerged:
LDA.W SamusPhysicsConstants_YSubAccelerationInAirChecked by claude, 2026-10-21 — read each game's jump start: Metroid's SetSamusJump, Metroid II's ground jump and poseFunc_jump (itemMask_hiJump is bit 1, so srl gives 1), and Super Metroid's Make_Samus_Jump and Determine_Samus_YAcceleration, which tests only bit $0020 (not the Hi-Jump's $0100) and the mediumCited by: Super Metroid
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). super-metroid/i-frames-line
About: Super Metroid Invincibility frames
Value
[ 50, 51, 96 ]
Source_Files/Bank07.asm#L2421-L2426lda #$32 ;
sta SamusBlink ;Samus has been hit. Set blink for 32 frames.The atlas reads this differently: #$32 is hex: the blink is set to 50, and CheckHealthStatus counts it down by 1 a frame, so Samus blinks for 50 frames. (metroid/blink-set)M2RoS: Return of Samus Disassembly · SRC/bank_000.asm#L7810-L7812; Give Samus i-frames
ld a, $33
ld [samusInvulnerableTimer], asm_disassembly: a relocatable disassembly of Super Metroid · src/bank_A0.asm#L4918-L4919LDA.W #$0060
STA.W SamusInvincibilityTimerChecked by claude, 2026-10-21 — read the hit code in each; Metroid's comment reads the hex $32 as 32, but the counter starts at 50 (metroid/blink-set)Cited by: Super Metroid
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. super-metroid/run-accel-kept
About: Super Metroid Running
Codemetroid-disassembly: Metroid software disassembly ·Source_Files/Bank07.asm#L2245-L2246RunAccelerationTbl:
LCCC0: .byte $30 ;Accelerate right.metroid-disassembly: Metroid software disassembly · Source_Files/Bank07.asm#L5592-L5593LE37F: lda #$18 ;
LE381: sta SamusHorzSpdMax ;Set Samus maximum running speed.metroid-disassembly: Metroid software disassembly · Source_Files/Bank07.asm#L5648-L5660HorzAccelerate:
LE3E5: lda SamusHorzSpdMax
jsr Amul16 ; * 16
…
jsr Adiv16 ; / 16
…
lda HorzCntrLinear
clc
adc SamusHorzAccelM2RoS: Return of Samus Disassembly · SRC/bank_000.asm#L4609-L4618; Normal walking speed (1.5 px/f)
ldh a, [frameCounter]
and $01
add $01
ld b, a
…
ldh a, [hSamusXPixel]
add bsm_disassembly: a relocatable disassembly of Super Metroid · src/bank_90.asm#L5200dd wordSwap($0030*!SPF*$100),wordSwap($02C0*!SPF*$100), wordSwap($0080*!SPF*$100) ; 1: RunningChecked by claude, 2026-10-21 — Metroid adds SamusHorzAccel ($30) to an 8-bit fraction (HorzAccelerate), and Super Metroid's $0030*$100 is $3000 in a 16-bit subpixel word: both 0.1875. Metroid's maximum $18 is $01.$80 after HorzAccelerate's *16 and /16 (metroid-samus/run)Cited by: Super Metroid
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. super-metroid/release-cap-line
About: Super Metroid Variable jump height
Codemetroid-disassembly: Metroid software disassembly ·Source_Files/Bank07.asm#L2705-L2709CMP #$20
BCC + ; branch if jumped less than 32 pixels upwards
BIT Joy1Status
BMI + ; branch if JUMP button still pressed
JSR StopVertMovement ;($D147)Stop jump (start falling).M2RoS: Return of Samus Disassembly · SRC/bank_000.asm#L3884-L3903; Check if in linear portion of ascent
ld a, [samus_jumpArcCounter]
cp samus_jumpArrayBaseOffset
jr nc, .endIf_A
; If so, check if A is pressed
ldh a, [hInputPressed]
bit PADB_A, a
jr z, .endIf_B
…
.endIf_B:
; If A is not pressed, start falling portion of arc
ld a, samus_jumpArrayBaseOffset + $16 ;56
…sm_disassembly: a relocatable disassembly of Super Metroid · src/bank_90.asm#L2786-L2796LDA.W SamusYDirection
CMP.W #$0001
BNE .setFallingEnd
LDA.B DP_Controller1Input
AND.W JumpBinding
BEQ +
LDA.W SamusYSpeed
BPL .setFallingEnd
+ STZ.W SamusYSubSpeed
STZ.W SamusYSpeedChecked by claude, 2026-10-25 — read the release test in each; Super Metroid's tests only the Y direction and the button, with no distance (metroid-samus/release-cap, metroid-ii/jump-ascent, super-metroid/release-cap); Metroid II's poseFunc_jump (L3883-L3903) keeps the linear rise while A is held and starts the fall when it isn'tCited by: Super Metroid