data/claims/mega-man-6.yamlMega Man 6 (Raidenthequick's disassembly)
Game: Mega Man 6.
On a fresh A press with no slide, on ordinary floor, Mega Man 6's standing loop sets his vertical speed to $FA.$CC, 5.20 px/frame up, where Mega Man 5 writes 5 px/frame ($05.$00); in tile type $09 it writes the slower $FB.$CC instead (slow-surface). The air loop adds gravity before each move, so the first frame lifts him 0.25 less, 4.95 px. Measured in Mesen from power-on, standing where he lands at the start of Tomahawk Man's stage, the first frame of a jump moves him up at that 4.95 px/frame. mega-man-6/jump-speed
About: Mega Man 6 Jump
Value
{
"takeoff": 1332
}bank38_3F.asm#L105-L118loc_700D7:
LDA $064B
CMP #$09
BNE loc_700E5
LDA #$FB
STA $05C8
BNE loc_700EA
loc_700E5:
LDA #$FA
STA $05C8
loc_700EA:
code_3880EA:
…Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L919-L937 — gravity, added to the speed before the move that follows it (code_3886FB)LDA #$40
LDY $064B
CPY #$08
BNE loc_706E0
LDA #$18
loc_706E0:
CLC
ADC $05B1
STA $05B1
STA $EC
LDA #$00
ADC $05C8Mega Man 5 (U), annotated ca65 disassembly (plasticsmoke) · src/bank1B.asm#L122-L128L80A4: lda $AF
bne L80B5
lda #$00
sta $03D8
lda #$05
sta $03F0Checked by claude, 2026-10-25 — read the standing loop's jump (from `$3880C3`) and the air loop's call through code_388BA0 to code_3886CE, which adds gravity (code_3886D5) and then moves him (code_3886FB, the object mover at `$3FE4D1` adding `$EC`/`$EE` to his Y); Mega Man 5's jump as in mega-man-5/jump-kept. The probe reads `$05C8`.`$05B1` after the jump's first frameProbe: probes/mega-man-6/movement.mjsThe fraction $CC also marks him as airborne: the air loop runs while $05B1 isn't 0, and adding $40 (or $18) to $CC never reaches 0.
Cited by: Mega Man 6
Computed from the ordinary take-off and gravity, outside tile types $08 and $09 (fall-limits, slow-surface), a jump with A held peaks 51.6 px above the floor on its 20th frame. Measured in Mesen from power-on, at the start of Tomahawk Man's stage, the held jump rose 51.56 px and turned to fall after frame 20. mega-man-6/jump-peak
About: Mega Man 6 Jump
Value
{
"height": 51.5625,
"frame": 20
}bank38_3F.asm#L113-L118LDA #$FA
STA $05C8
…
LDA #$CC
STA $05B1Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L919-L921LDA #$40Checked by claude, 2026-10-25 — 20 frames from 4.953 px/frame, slowing 0.25 a frame, sum to 51.5625 px; the probe traces his Y frame by frame through a jump held for 50 framesProbe: probes/mega-man-6/movement.mjsCited by: Mega Man 6
On a rising frame without A, Mega Man 6 sets the whole-pixel byte of his vertical speed to 0 and keeps its fraction, so he starts down at once at under 1 px/frame; Mega Man 5 sets both bytes to 0. Outside tile type $08 the cut waits until the rise is no faster than 5 px/frame ($05C8 at $FB or above), and it needs bits $0C of the fraction set, which they always are under the normal gravity, since the jump's $CC gains $40 a frame. Measured in Mesen from power-on at the start of Tomahawk Man's stage, with A let go after 3 frames, the 4th frame left him falling at 0.80 px/frame ($00.$CC). mega-man-6/release-cut
About: Mega Man 6 Variable jump height
Value
{
"afterRelease": 0
}bank38_3F.asm#L146-L162LDA $40
AND #$80
BNE loc_70143
LDA $05C8
BPL loc_70143
LDY $064B
CPY #$08
BEQ loc_70135
CMP #$FB
BCC loc_70143
loc_70135:
LDA $05B1
…Mega Man 5 (U), annotated ca65 disassembly (plasticsmoke) · src/bank1B.asm#L335-L343L8259: lda $03F0
bmi L8283
L825E: lda $16
and #$80
bne L8283
lda #$00
sta $03D8
sta $03F0Checked by claude, 2026-10-25 — read the air loop's release test (`$38811F`-`$388140`) after its move and frame end, and Mega Man 5's (mega-man-5/jump-kept); `$40` is the held buttons (controller-read). In the probe the speed went from 4.45 px/frame up to 0.80 down on the first frame without AProbe: probes/mega-man-6/movement.mjsUnder the normal gravity the speed is already $FB.$0C after the first frame, so the 5 px/frame test never blocks a cut from a jump; in tile type $08 the fraction steps by $18 and the bits test passes on every other frame (computed).
Cited by: Mega Man 6
Outside tile type $08, gravity adds $40 (0.25 px/frame) to Mega Man's vertical speed every frame before he moves. Measured in Mesen from power-on, at the start of Tomahawk Man's stage, his speed grew by 0.25 px/frame on each frame of a held jump. mega-man-6/gravity
About: Mega Man 6 Gravity
Value: 64 1/256 px/frame per frame
VerifiedMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) ·bank38_3F.asm#L919-L937LDA #$40
LDY $064B
CPY #$08
BNE loc_706E0
LDA #$18
loc_706E0:
CLC
ADC $05B1
STA $05B1
STA $EC
LDA #$00
ADC $05C8Checked by claude, 2026-10-25 — read code_3886D5 at the pinned commit; the probe's trace of `$05C8`.`$05B1` through a held jump steps by 0.25 from frame to frameProbe: probes/mega-man-6/movement.mjsCited by: Mega Man 6
In tile type $08 gravity is $18 a frame (0.09 px/frame) instead of $40. Falling, the whole-pixel byte of his speed stops at 7 while the fraction keeps growing, so under the normal gravity his top falling speed steps between 7.05 and 7.80 px/frame (computed). mega-man-6/fall-limits
About: Mega Man 6 Gravity
Value
{
"typeEight": 24,
"maxFallWhole": 7
}bank38_3F.asm#L919-L937LDA #$40
LDY $064B
CPY #$08
BNE loc_706E0
LDA #$18
…
ADC $05C8
BMI loc_706F6
CMP #$08
BCC loc_706F6
LDA #$07
loc_706F6:
…Checked by claude, 2026-10-25 — read code_3886D5 at the pinned commit; only `$05C8` is clamped, so with the fraction stepping `$0C`, `$4C`, `$8C`, `$CC` from a jump the fall runs 7.05, 7.30, 7.55, 7.80 px/frame and repeatsThe atlas hasn't found which stages' tiles are type $08; the lighter gravity suggests water.
Cited by: Mega Man 6
From standing, a held direction moves Mega Man one frame at the walking speed, $01.$4C (1.30 px/frame) from the table at $8BEA, then holds him in the step pose while a counter of 6 ($95) runs out, and walks at 1.30 px/frame from the 7th frame. That is on ordinary floor: on surface type $05 he walks at once, on $15 he carries momentum at up to 2 px/frame (momentum-surfaces), and in tile type $09 he walks at 0.5 px/frame (slow-surface). Measured in Mesen from power-on, at the start of Tomahawk Man's stage, Right moved him 1.30 px on frame 1, not at all on frames 2 to 6, and 1.30 px on each frame after. mega-man-6/walk-start
About: Mega Man 6 Running
Value
{
"speed": 332,
"stillFrames": 5
}bank38_3F.asm#L46-L78LDA $99
BEQ loc_7004F
LDA $A7
CMP #$05
BEQ loc_70096
JSR code_388531
LDA #$01
JSR code_3FE0FD
JSR code_388B0F
LDA #$06
STA $95
BNE loc_70087
…Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L1475-L1485LDY $99
LDA $8BEA,y
STA $A1
STA $ED
LDA $8BED,y
STA $A0
STA $EBMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L1550 — whole pixels for none, Right, Left (`$00`, `$01`, `$FE`), then the fractions (`$00`, `$4C`, `$B4`)db $00, $01, $FE, $00, $4C, $B4, $00, $02Checked by claude, 2026-10-25 — read the standing loop from `$388062`: code_388B0F moves him once, then the loop at loc_70084 only runs the weapon routine (code_38856A) and ends the frame (code_388E95) until `$95` reaches 0; `$99` is the held direction (1 Right, 2 Left, from code_3FE41C). The probe logs his X each frame with Right held for 16 frames, and Left for 16Probe: probes/mega-man-6/movement.mjsThe surface type $A7 is the last non-zero tile type the move's first probe found ($38875A-$388761).
Cited by: Mega Man 6
In the air the d-pad sets his horizontal speed from the same table at $8BEA each frame, 1.30 px/frame or 0, and clears any carried momentum, except when his surface ($A7) is $15: then the air loop runs the momentum routine code_388B0F instead, and the carried speed stays (momentum-surfaces). On a ladder, Up or Down moves him along it at the same 1.30 px/frame. mega-man-6/air-and-ladder
About: Mega Man 6 Air control
Value: 332 1/256 px/frame
CodeMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) ·bank38_3F.asm#L1540-L1548LDA #$00
STA $A1
STA $A0
LDY $99
LDA $8BEA,y
STA $ED
LDA $8BED,y
STA $EB
JMP code_3886CEMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L498-L510LDA $40
AND #$0C
BEQ loc_703E5
LSR
LSR
TAY
LDA $8BEA,y
STA $EE
LDA $8BED,y
STA $ECMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L1550db $00, $01, $FE, $00, $4C, $B4, $00, $02Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L124-L129loc_700F9:
LDA $A7
CMP #$15
BNE loc_70105
JSR code_388B0F
JMP code_388108Checked by claude, 2026-10-25 — read code_388BD5, which the air loop reaches through code_388BA0 (by a jump or by falling through) unless his surface `$A7` is `$15`, when it calls code_388B0F instead (L124-L129), and the ladder loop at `$3883C0`, where Down (`$04`) shifts to index 1 (1.30 down) and Up (`$08`) to 2 (1.30 up)Cited by: Mega Man 6
Mega Man 6 keeps Mega Man 5's slide speed and length, 2.5 px/frame for 26 frames ($1A), set from the table at $8003, outside tile type $09, where the table at $8009 gives 1.5 px/frame (slow-surface). Measured in Mesen from power-on, at the start of Tomahawk Man's stage, a slide from Down and A moved him 2.5 px on each of 26 frames, 65 px in all. mega-man-6/slide-line
About: Mega Man 6 Ground slide
Value
{
"speed": 640,
"frames": 26
}bank38_3F.asm#L334-L340LDA #$00
STA $98
LDA #$1A
STA $95Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L359-L372LDY $03CE
LDA $064B
CMP #$09
BEQ loc_702C8
LDA $8003,y
STA $ED
LDA $8006,y
STA $EB
…
loc_702C8:
LDA $8009,yMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L6-L7 — by facing (1 Right, 2 Left), whole pixels `$02` and `$FD` at `$8004`, fractions `$80` at `$8007`db $00, $40, $00, $00, $02, $FD, $00, $80
db $80, $00, $01, $FE, $00, $80, $80, $00Mega Man 5 (U), annotated ca65 disassembly (plasticsmoke) · src/bank1B.asm#L161-L168lda #$1A
sta $35
lda #$02
sta $30
lda #$80
sta $03A8
lda #$02
sta $03C0Checked by claude, 2026-10-25 — read the slide set-up (code_38828A) and loop (code_3882B2), and Mega Man 5's slide set-up as in mega-man-5/slide-kept; the probe logs his X each frame of a slide to the leftProbe: probes/mega-man-6/movement.mjsCited by: Mega Man 6
A press of A without Down ends Mega Man 6's slide but doesn't jump: the slide hands over to the standing loop, which looks for a jump only in a later frame's fresh press ($9A). In Mega Man 5 the same press jumps out of the slide when there is headroom. Measured in Mesen from power-on, at the start of Tomahawk Man's stage, an A press on a slide's 8th frame with Down let go ended the slide that frame, and A held for the next 6 frames left him on the floor. mega-man-6/slide-exit
About: Mega Man 6 Ground slide
VerifiedMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) ·bank38_3F.asm#L382-L395loc_702E3:
LDA $9A
BEQ loc_702ED
LDA $40
AND #$04
BEQ loc_702FAMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L423-L436loc_70332:
LDY $03CE
LDA $8BEA,y
STA $A1
…
LDA $05B1
BEQ loc_7034B
JMP code_3880EA
loc_7034B:
JMP code_388047Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L27-L33LDA #$00
STA $059A
JSR code_3FE0FD
loc_7004F:
JSR code_388B0F
JSR code_388E95Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L20043-L20051code_3FE41C:
LDA $40
AND #$03
TAY
LDA $E418,y
STA $99
LDA $42
AND #$80
STA $9AMega Man 5 (U), annotated ca65 disassembly (plasticsmoke) · src/bank1B.asm#L377-L393lda $14
and #$80
beq L82C8
lda $16
and #$04
bne L82C8
…
jmp L80A4Checked by claude, 2026-10-25 — read the slide loop's A test and its end (loc_70332, after the headroom probes) at the pinned commit: code_388047 moves him and ends the frame (code_388E95 ends in a jump to code_3FE468, the yield) before the loop reads `$9A`, which code_3FE41C sets afresh each frame from the new presses (`$42`). Mega Man 5's slide state jumps on the press (L80A4, mega-man-5/slide-kept). The probe let go of Down and pressed A on the slide's 8th frame, then held A for 6 more frames; the slide ended that frame with no riseProbe: probes/mega-man-6/movement.mjsCited by: Mega Man (classic series), Mega Man 6
Down and A start the slide only with no Rush adaptor on ($9B 0); with one, the press jumps. A turn (a held direction against his facing) ends the slide early, and at its end two tile probes above him keep it going 4 frames at a time while the ceiling is low. mega-man-6/slide-rules
About: Mega Man 6 Ground slide
Value
{
"extend": 4
}bank38_3F.asm#L95-L103LDA $9B
BNE loc_700D7
…
LDA $40
AND #$04
BEQ loc_700D7
JMP code_38828AMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L388-L416loc_702ED:
LDA $99
BEQ loc_702F6
CMP $03CE
BNE loc_702FA
loc_702F6:
DEC $95
BNE loc_702AF
loc_702FA:
code_3882FA:
LDX #$00
JSR code_388531
…Checked by claude, 2026-10-25 — read the standing loop's A branch (code_3880C3) and the slide loop at the pinned commit; the two probes use the offsets at `$9127`/`$9133` and `$9128`/`$9134`, and a solid result (bit 0 of `$11`) sends him back into the slide loop with `$95` at 4Cited by: Mega Man 6
On the ground Mega Man 6 runs one of three loops, each ending its frame with a yield and reading the next frame's input after it. Standing, a held direction turns him and starts the step: one move at the walking speed, then 5 frames still (walk-start); after it a held direction walks on, turning to it, and none stands him. Walking, letting go stands him on the same frame, and a held direction against his facing turns him at once and walks on with no new step. A fresh A press jumps from any of the three, before that frame's move, or slides with Down held, except on the frame a walk's direction is let go: that frame goes straight to the standing loop's move, and the press is lost. Down alone does nothing. mega-man-6/ground-loops
About: Mega Man 6 Running
CodeMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) ·bank38_3F.asm#L30-L91loc_7004F:
JSR code_388B0F
JSR code_388E95
LDA $05C8
…
loc_70062:
LDA $9A
BEQ loc_70069
JMP code_3880C3
loc_70069:
LDA $99
BEQ loc_7004F
…Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L689-L697code_388531:
LDA $99
BEQ locret_70549
CMP $03CE
BEQ locret_70549
STA $03CEChecked by claude, 2026-10-26 — read the standing loop (loc_7004F), the step (loc_70084, `$95` from 6), and the walking loop (code_3880A5) at the pinned commit; each calls code_388E95, which ends the frame (coroutine-scheduler), and code_388531 turns him to the held direction `$99`. The movement lab's ROM check (probes/lab/conformance.mjs) runs the model built on these rules against the cartridge in Mesen from Tomahawk Man's stage start, frame for frameOn surface type $05 the standing loop skips the step and walks at once (momentum-surfaces). The step's 5 still frames run only the animation: no move and no gravity.
Each frame, after a loop's checks, Mega Man 6 makes one move through code_3886CE: on ordinary floor and in the air alike, the horizontal speed comes from the d-pad's table at $8BEA, 1.30 px/frame or 0; gravity is added to the vertical speed; he moves by both speeds in 8.8 fixed point; and the tile checks run after the move (collision-order). mega-man-6/frame-order
About: Mega Man 6 Running
CodeMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) ·bank38_3F.asm#L1538-L1550code_388BD5:
LDA #$00
STA $A1
STA $A0
LDY $99
LDA $8BEA,y
STA $ED
LDA $8BED,y
STA $EB
JMP code_3886CE
db $00, $01, $FE, $00, $4C, $B4, $00, $02Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L1498-L1509LDA $064B
CMP #$09
BNE loc_70BA0
…
loc_70BA0:
code_388BA0:Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L913-L968code_3886CE:
LDA $9E
BMI loc_706D5
JSR code_38856A
loc_706D5:
code_3886D5:
LDA #$40
…
code_3886FB:
…
JSR code_3FE4D1Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L20142-L20171code_3FE4D1:
LDX $8F
code_3FE4D3:
LDA $EB
CLC
ADC $049D,x
STA $049D,x
LDA $ED
…
LDA $EC
CLC
ADC $04E2,x
…Checked by claude, 2026-10-26 — read code_388B0F's fall-through for ordinary floor (not surface `$05`, `$15`, or tile type `$09`) into code_388BA0 and code_388BD5, which the air loop also calls, then code_3886CE: the animation, gravity (code_3886D5), and code_3886FB, which moves him with the object mover at `$3FE4D1` (`$EB`/`$ED` into X, `$EC`/`$EE` into Y) and then probes the tilesThe table's rows are indexed by $99: 0 for no direction, 1 for right ($01.$4C), 2 for left ($FE.$B4). Surface types $0A and $0C add a water drag first (code_388BA0).
A Mega Man 6 falling onto a floor has his vertical speed set to 0, fraction included, by the floor push (floor-snap). The air loop reads the landing on the next frame, from the fraction being 0, and goes into the walking loop at once: that frame he turns to a held direction and walks at 1.30 px/frame with no step, or a fresh A press jumps again. A press on the touchdown frame itself is never read, since only the air loop runs then, and it reads A only as held. mega-man-6/landing
About: Mega Man 6 Jump
CodeMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) ·bank38_3F.asm#L163-L172loc_70143:
JSR code_388531
LDA $05B1
BNE loc_700F9
LDA #$00
STA $9D
LDA #$24
STA $DC
LDY $9B
BEQ loc_7017DMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L194-L195loc_7017D:
JMP code_388096Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L1365-L1372code_388A72:
LDA #$00
LDY $05C8
BMI loc_70A7C
STA $05B1
loc_70A7C:
STA $05C8Checked by claude, 2026-10-26 — read the air loop's end (loc_70143) and code_388096, the walking loop's entry (ground-loops), at the pinned commit, and the floor push code_388A72; the movement lab's ROM check runs touchdowns with A pressed on the touchdown frame and the one after, and a direction pressed after it, in Mesen from Tomahawk Man's stage startWith an adaptor on ($9B not 0), the landing waits up to 8 frames for input instead.
Walking or standing off a ledge, Mega Man 6 stays in his ground loop while the whole byte of his vertical speed is 0: gravity's 0.25 px/frame a frame moves him down 0.25, 0.5, 0.75, and 1 px on the first four frames over the gap, and through the 2nd to 4th a fresh A press still jumps. After the 4th the loop finds the whole byte at 1 and enters the air loop with the fraction set to $CC, so he falls at 2.05 px/frame the next frame. Measured in Mesen from power-on, walking right off the ledge at X 160 near the start of Tomahawk Man's stage, he fell 0.25, 0.5, 0.75, and 1 px in the walking state, then 2.05 px/frame in the air; a press of A on the 4th frame over the gap jumped at the full take-off speed, and one on the 5th didn't. mega-man-6/walk-off
About: Mega Man 6 Coyote time
Value
{
"groundFrames": 4,
"fraction": 204
}bank38_3F.asm#L80-L84JSR code_388B0F
JSR code_388E95
LDA $05C8
BEQ loc_700B7
JMP code_3880EAMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L31-L44JSR code_388B0F
JSR code_388E95
LDA $05C8
BEQ loc_70062
BPL loc_7005F
…
loc_7005F:
JMP code_3880EA
loc_70062:
LDA $9A
BEQ loc_70069
JMP code_3880C3Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L116-L118code_3880EA:
LDA #$CC
STA $05B1Checked by claude, 2026-10-26 — read the standing and walking loops' fall test (`$05C8` not 0) at the pinned commit, which comes before the A test in the standing loop and after the move in the walking loop; the probe walks off the ledge right of the stage's start and reads `$05C8`.`$05B1`, the Y, and the state `$94` each frame, and the lab's model reproduces each case on a stage with the same ledgeProbe: probes/lab/mega-man-6-stage.mjsOver a gap the floor push never runs, so the fraction grows $40 a frame from the 0 it left on the floor, and the whole byte reaches 1 on the 4th frame. A slide ends sooner, on its 2nd frame over a gap (slide-handover). Mega Man 2 has no such frames (mega-man-2/no-coyote-time).
Mega Man 6 tests the tiles at points around his center, from the table at $9119 (X) and $912D (Y): falling or standing, his floor at 12 px below the center, at the center and 7 px to each side; rising, his head at 9 px above it, at the same three; and walls 7 px to the side he moves toward, at 7 px below the center (level with it when rising), 9 px above, and 10 px below. In a slide the high wall point and the head's two side points drop to 3 px above the center (the head's center point stays 9 above), and the low wall point to 12 below. Each point reads the 16 px tile holding it. mega-man-6/terrain-points
About: Mega Man 6 Hitbox
Value
{
"tile": 16,
"side": 7,
"floor": 12,
"head": -9,
"wall": {
"down": 7,
"up": 0,
"high": -9,
"low": 10
},
"slide": {
"high": -3,
"low": 12
}
}bank38_3F.asm#L2202-L2207db $0E, $02, $07, $07, $F9, $F9, $07, $F9
db $F9, $07, $07, $07, $F9, $F9, $07, $F9
db $F9, $07, $00, $00, $00, $00, $F7, $0A
db $F7, $0A, $0C, $0C, $F7, $F7, $FD, $0C
db $FD, $0C, $0C, $0C, $FD, $FD, $0D, $F9
db $0C, $F7, $07, $00, $08, $00Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L952-L967LDY $ED
BPL loc_7071E
LDA #$02
loc_7071E:
ORA $A3
STA $05
LDA #$12
STA $07
LDA #$04
LDY $EE
BPL loc_70730
LDA #$06
…Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L347-L348LDA #$08
STA $A3Checked by claude, 2026-10-26 — read the table at the pinned commit (it starts at `$9117`, so `$9119` is its 3rd byte) and code_3886FB, which picks the rows: `$05` the side (0 right, 2 left), `$06` the corners (4 down, 6 up), `$07` the center (`$12` down, `$13` up), with 8 added to `$05` and `$06` in a slide (`$A3`), so the slide's rising corners are rows `$0E`-`$0F` (`$FD`, 3 up) and its center stays row `$13`; the wall row at mid height is read from `$912F`,`$07`, so it is 7 px down or 0; the tile lookup is code_3ED9CDCounted in the rows and columns his body covers, both ends included: 15 columns, from x − 7 to x + 7, and 21 rows, from the head point's row (9 above the center) down to his feet, the row above the floor point (11 below), since the floor point lies in the floor's top row once he stands (floor-snap); in a slide, 15 rows, from the high wall point's row (3 above) to the feet. Counted to the floor point instead, the spans are 22 and 16 rows.
After each move Mega Man 6 tests his points in a fixed order: the center floor or head point, then the wall point at mid height, then, if he moves sideways, the high wall point, then the two floor or head corners, and last one more wall point, the low one if he moves sideways or the high one if not. A floor or ceiling found pushes him out at once, so the points after it test from where it left him; a wall found ends the frame's tests. mega-man-6/collision-order
About: Mega Man 6 Hitbox
CodeMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) ·bank38_3F.asm#L975-L1058LDY $07
LDA $9119,y
STA $00
LDA $912D,y
STA $01
JSR code_3ED9CD
…
JSR code_38887E
LDA #$00
STA $11
LDY $05
LDA $9119,y
…Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L1129-L1137code_38887E:
TAY
LDA $888C,y
STA $0C
LDA $88AC,y
STA $0D
JMP ($000C)
db $79, $72, $DF, $90, $95, $72, $CC, $6AMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L1389-L1401code_388A96:
TAY
LDA $8AA4,y
STA $0C
LDA $8AC4,y
STA $0D
JMP ($000C)
db $E4, $ED, $E4, $E4, $E4, $ED, $06, $E5
…
db $8A, $8A, $8A, $8A, $8A, $8A, $8B, $8AChecked by claude, 2026-10-26 — read code_3886FB at the pinned commit: the floor and head points go through code_38887E and the wall points through code_388A96, each dispatching on the tile type; for a solid tile (type 1) the first goes to `$8A72` (code_388A72, floor-snap) and the second to `$8AED` (wall-stop); `$96` is the horizontal speed's two bytes ORedStanding still, the side tested is the right one, since a speed of 0 counts as moving right.
When a floor or head point finds a solid tile, Mega Man 6 is pushed out of it by the point's depth in its 16 px tile: from the tile's top half up to the row above it, from its bottom half down to the row below it; his Y fraction stays. Falling or standing, his vertical speed is set to 0; rising, only its whole byte (ceiling-hit). After the frame's tests a push moves him 1 px back down, so a standing Mega Man's floor point lies in the floor's top row. Standing, gravity adds $40 to his speed and his Y every frame and the floor pushes him back, so his Y fraction drifts by $40 a frame while his whole Y stays. Measured in Mesen from power-on near the start of Tomahawk Man's stage, a walk, a slide, and a jump off the ledge at X 160 each landed with his floor point on the top row of the lower floor (row 160, 32 px below the start floor's top row, 128), the speed 0. mega-man-6/floor-snap
About: Mega Man 6 Hitbox
VerifiedMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) ·bank38_3F.asm#L1365-L1377code_388A72:
LDA #$00
LDY $05C8
BMI loc_70A7C
STA $05B1
loc_70A7C:
STA $05C8
code_388A7F:
JSR code_3EDB6D
LDX $8F
INC $AD
JMP code_3FE4CBMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L18923-L18934code_3EDB6D:
LDA #$00
STA $ED
LDA $4E
AND #$0F
TAY
LDA $DB7C,y
STA $EE
RTS
db $FF, $FE, $FD, $FC, $FB, $FA, $F9, $F8
db $08, $07, $06, $05, $04, $03, $02, $01Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L1059-L1062loc_707FE:
LDA $AD
BEQ loc_70805
INC $04CBChecked by claude, 2026-10-26 — read code_388A72 and code_3EDB6D at the pinned commit (`$4E` is the point's Y, from code_3ED9CD), the mover code_3FE4CB, which clears both fractions of the move before moving him by `$EE`, and the `INC $04CB` at the end of the tests; in Mesen at the start of Tomahawk Man's stage his Y stays 116, 12 px over the floor's top row at 128, while `$04E2` steps by `$40` a frameProbe: probes/lab/mega-man-6-stage.mjsThe drift shows in whole pixels only when he leaves the floor: a jump starts from wherever the fraction has got to.
Rising into a solid tile, Mega Man 6 is pushed down below it and 1 px further, and the whole byte of his vertical speed is set to 0 while its fraction stays, so on the next frame, gravity added, he moves down 0.30 to 1.05 px (under the normal gravity). He stays in the air loop, and the jump's release cut, which needs the whole byte negative, no longer applies. mega-man-6/ceiling-hit
About: Mega Man 6 Jump
CodeMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) ·bank38_3F.asm#L1365-L1372code_388A72:
LDA #$00
LDY $05C8
BMI loc_70A7C
STA $05B1
loc_70A7C:
STA $05C8Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L18923-L18934code_3EDB6D:
…
LDA $DB7C,y
STA $EE
RTS
db $FF, $FE, $FD, $FC, $FB, $FA, $F9, $F8
db $08, $07, $06, $05, $04, $03, $02, $01Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L146-L150 — the release cut (release-cut) skips itself unless `$05C8` is negativeLDA $40
AND #$80
BNE loc_70143
LDA $05C8
BPL loc_70143Checked by claude, 2026-10-26 — read code_388A72 at the pinned commit: with `$05C8` negative (rising) it skips the store to the fraction `$05B1`; a head point enters a tile from below, in its bottom half, so code_3EDB6D's push is down, to the row below the tile, and the `INC $04CB` after the tests adds 1 pxUnder the normal gravity the fraction left is one of $0C, $4C, $8C, $CC, since the jump's $CC gains $40 a frame; the next frame's gravity makes it $4C to $10C, a move of 0.30 to 1.05 px. The air loop keeps running because the fraction isn't 0 (landing).
When a wall point finds a solid tile, Mega Man 6 is pushed back out across by the point's depth in its 16 px tile, from its left half to the column left of it, from its right half to the column right of it; his X fraction stays, and the frame's other tile tests are skipped. The push also ends a slide. Measured in Mesen from power-on near the start of Tomahawk Man's stage, walking left on the lower floor into the face of the ledge at X 160 held his X at 167, his left wall points on column 160, right of the face, while he kept walking. mega-man-6/wall-stop
About: Mega Man 6 Hitbox
VerifiedMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) ·bank38_3F.asm#L1411-L1419loc_70AED:
LDA #$00
STA $A0
STA $A1
LDA $11
STA $12
JSR code_3EDB4F
LDX $8F
JMP code_3FE4CBMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L18903-L18911code_3EDB4F:
LDA #$00
STA $EE
LDA $4D
AND #$0F
TAY
LDA $DB7C,y
STA $EDMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L374-L376JSR code_3886CE
LDA $12
BNE loc_702FAChecked by claude, 2026-10-26 — read loc_70AED (code_388A96's entry for tile type 1) and code_3EDB4F at the pinned commit (`$4D` is the point's X); `$12` is the flag the slide loop tests after its moveProbe: probes/lab/mega-man-6-stage.mjsPushing toward a wall, the point is in the tile's near half, so a push to the right lands him with the point one column inside the free space and a push to the left with it on the column just left of the tile.
Nothing in Mega Man 6's ground loops tests the ceiling before a jump or a slide: a fresh A press sets the take-off speed or starts the slide outright, and a jump under a low ceiling meets it on its first move (ceiling-hit). Mega Man 5 tests a point over his head before a slide starts. mega-man-6/jump-under-ceiling
About: Mega Man 6 Jump
CodeMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) ·bank38_3F.asm#L94-L118code_3880C3:
LDA $9B
BNE loc_700D7
LDA $03CE
EOR #$03
BEQ loc_700D7
LDA $40
AND #$04
BEQ loc_700D7
JMP code_38828A
loc_700D7:
LDA $064B
…Mega Man 5 (U), annotated ca65 disassembly (plasticsmoke) · src/bank1B.asm#L149-L157L80D9: lda $08
lsr a
clc
adc #$08
tay
jsr probe_vert
lda L0010
and #$10
bne L814AChecked by claude, 2026-10-26 — read code_3880C3 and the slide's start (code_38828A) at the pinned commit: neither calls the tile lookup code_3ED9CD; Mega Man 5's ground state calls probe_vert and skips the slide when the probe finds bit `$10`A slide's end does test for a low ceiling (slide-rules).
Mega Man 6's slide ends on a turn, a wall (wall-stop), a fresh A without Down (slide-exit), its 26th frame, or the 2nd frame over a gap, when gravity has taken his speed's fraction to $41 or more. Unless a low ceiling keeps the slide going (slide-rules), it hands over in the same frame: over a gap to the air loop, with the fraction set to $CC, and otherwise to the standing loop, which moves him a second time that frame, at the walking speed toward a held direction or not at all. So a turn out of a slide moves him 2.5 px forward and 1.30 px back in one frame, and the next frame starts a step. Measured in Mesen from power-on near the start of Tomahawk Man's stage, a slide off the ledge at X 160 slid on its first frame over the gap and fell from the second, and Left on a rightward slide's 7th frame moved him 1.20 px right that frame ($01.$34, the slide's $02.$80 less the walk's $01.$4C), then 1.30 px left as a step began. mega-man-6/slide-handover
About: Mega Man 6 Ground slide
Value
{
"fallFraction": 65
}bank38_3F.asm#L333-L337 — the slide's start sets its timer `$95` to 26code_38828A:
LDA #$00
STA $98
LDA #$1A
STA $95Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L382-L395 — a fresh A without Down, or a held direction other than his facing, ends the slide; otherwise the timer counts downloc_702E3:
LDA $9A
BEQ loc_702ED
LDA $40
AND #$04
BEQ loc_702FA
loc_702ED:
LDA $99
BEQ loc_702F6
CMP $03CE
BNE loc_702FA
loc_702F6:
…Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L374-L380JSR code_3886CE
LDA $12
BNE loc_702FA
LDA $05B1
CMP #$41
BCC loc_702E3
JMP code_3882FAMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L423-L436loc_70332:
LDY $03CE
…
LDA #$00
STA $A3
LDA $05B1
BEQ loc_7034B
JMP code_3880EA
loc_7034B:
JMP code_388047Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L25-L32loc_70047:
code_388047:
LDA #$00
STA $059A
JSR code_3FE0FD
loc_7004F:
JSR code_388B0F
JSR code_388E95Checked by claude, 2026-10-26 — read the slide loop's tests after its move and its end (code_3882FA, loc_70332) at the pinned commit, and code_388047, which moves him (code_388B0F) before its first yield. The probe reads the state `$94` and the speed through a slide off the ledge, and X and the state through a slide from X 45 turned out by Left on its 7th frame, checking each frame's move against slide-line and walk-startProbe: probes/lab/mega-man-6-stage.mjsThe standing loop's move also adds gravity, so the frame a slide hands over adds it twice.
Mega Man 6's ordinary-floor movement isn't Mega Man 5's: the first difference is a jump's take-off. Mega Man 6 sets his vertical speed to $FA.$CC, 5.20 px/frame up; Mega Man 5 sets its whole byte $03F0 to $05 and its fraction $03D8 to $00, 5 px/frame (jump-speed). Letting go of A sets only the whole byte to 0 in Mega Man 6 and both bytes in Mega Man 5 (release-cut), and Mega Man 5 tests for headroom before a slide where Mega Man 6 doesn't (jump-under-ceiling). The two run different code: Mega Man 5's player is a state machine dispatched each frame from $30, Mega Man 6's a coroutine of loops (coroutine-scheduler). mega-man-6/movement-differs-from-mega-man-5
About: Mega Man 6 Jump
CodeMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) ·bank38_3F.asm#L105-L118loc_700D7:
LDA $064B
CMP #$09
BNE loc_700E5
LDA #$FB
STA $05C8
BNE loc_700EA
loc_700E5:
LDA #$FA
STA $05C8
loc_700EA:
code_3880EA:
…Mega Man 5 (U), annotated ca65 disassembly (plasticsmoke) · src/bank1B.asm#L122-L128L80A4: lda $AF
bne L80B5
lda #$00
sta $03D8
lda #$05
sta $03F0Mega Man 5 (U), annotated ca65 disassembly (plasticsmoke) · src/bank0A.asm#L612-L618 — an object's vertical speed as one 16-bit value, `$03D8` the fraction and `$03F0` the whole byte (the player is object 0)lda $03D8,x
clc
adc #$10
sta $03D8,x
lda $03F0,x
adc #$00
sta $03F0,xMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L146-L162LDA $40
AND #$80
BNE loc_70143
LDA $05C8
BPL loc_70143
…
LDA #$00
STA $05C8Mega Man 5 (U), annotated ca65 disassembly (plasticsmoke) · src/bank1B.asm#L335-L343L8259: lda $03F0
bmi L8283
L825E: lda $16
and #$80
bne L8283
lda #$00
sta $03D8
sta $03F0Mega Man 5 (U), annotated ca65 disassembly (plasticsmoke) · src/bank1B.asm#L149-L157L80D9: lda $08
lsr a
clc
adc #$08
tay
jsr probe_vert
lda L0010
and #$10
bne L814AMega Man 5 (U), annotated ca65 disassembly (plasticsmoke) · src/bank1B.asm#L77-L84L8025: ldx #$00
stx $37
ldy $30
lda player_state_lo,y
sta L0000
lda player_state_hi,y
sta $01
jmp (L0000)Checked by claude, 2026-10-26 — read Mega Man 6's jump (code_3880C3 on) and release cut (`$38811F`-`$388140`), and Mega Man 5's ground state's jump (L80A4), release (L8259), slide headroom test (L80D9), and state dispatch (L8025) at the pinned commits; Mega Man 5's speed bytes pair as one value in its object routines' 16-bit adds (bank 0A, `$A459`)Mega Man 5's movement is Mega Man 4's (mega-man-5/jump-kept, mega-man-5/slide-kept), so the same differences stand between Mega Man 6 and Mega Man 4.
Cited by: Mega Man (classic series)
At the end of every frame Mega Man 6 holds Mega Man on the screen: his X is kept from 16 px ($A8, which his routine's start sets to $10) to 244 px right of the camera's left edge, with its fraction left as it is, and a Y of 240 or more on the screen's own rows kills him. Measured in Mesen from power-on near the start of Tomahawk Man's stage, where the camera can't scroll left, walking left stopped at X 16 while his X fraction kept changing. mega-man-6/screen-edges
About: Mega Man 6 Hitbox
VerifiedMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) ·bank38_3F.asm#L17-L18LDA #$10
STA $A8Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L1934-L1976loc_70EF4:
JSR code_388C09
LDA $04B4
BNE loc_70F1A
LDA $04CB
CMP #$F0
BCC loc_70F2A
LDA #$01
STA $03B7
LDA #$26
STA $DC
…
…Checked by claude, 2026-10-26 — read the end of code_388E95 at the pinned commit, which runs before every yield of Mega Man's loops (`$56` is the camera's X); the probe walks left from X 45 for 60 frames and reads X, its fraction, and the camera's X each frameProbe: probes/lab/mega-man-6-stage.mjsThe movement lab's model leaves the screen out; its ROM check keeps every script inside the open floor between X 16 and the ledge at X 160.
On tile type $09 ($064B) Mega Man moves slower: a jump starts at $FB.$CC (4.20 px/frame up), the slide at 1.5 px/frame, and walking at 0.5 px/frame, from the tables at $8009 and $8BF6. mega-man-6/slow-surface
About: Mega Man 6 Running
Value
{
"jump": 1076,
"slide": 384,
"walk": 128
}bank38_3F.asm#L106-L111LDA $064B
CMP #$09
BNE loc_700E5
LDA #$FB
STA $05C8Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L367-L372LDA $8009,y
STA $ED
LDA $800C,y
STA $EBMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L7-L8 — `$800A`/`$800B` hold the slide's whole pixels (`$01`, `$FE`), `$800D`/`$800E` its fractions (`$80`)db $80, $00, $01, $FE, $00, $80, $80, $00
db $01, $FF, $00, $00, $00, $00, $00, $FFMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L1498-L1506LDA $064B
CMP #$09
BNE loc_70BA0
LDY $99
LDA $8BF6,y
STA $ED
LDA $8BF9,y
STA $EBMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L1551-L1552 — `$8BF7`/`$8BF8` hold `$00` and `$FF`, `$8BFA`/`$8BFB` the fractions `$80`: 0.5 px/frame either waydb $FE, $00, $00, $00, $00, $00, $FF, $00
db $80, $80, $00, $06, $FA, $00, $00, $FFChecked by claude, 2026-10-25 — read the jump, slide, and walking branches on `$064B` = `$09` at the pinned commit, with the tables indexed by facing or held direction (1 Right, 2 Left); `$FB`.`$CC` is 1,076/256 px/frame upWhich stages' tiles are type $09 hasn't been traced.
Cited by: Mega Man 6
On surface types $05 and $15 his walking speed is a carried momentum ($A1.$A0). A held direction sets it to full speed at once, 1.30 px/frame on $05 and 2 px/frame on $15; with nothing held it slows by 6/256 px/frame each frame, and holding the other way slows it by 12/256 (computed), until its sign flips and it stops. mega-man-6/momentum-surfaces
About: Mega Man 6 Running
Value
{
"decay": 6,
"reverse": 12
}bank38_3F.asm#L1431-L1472LDA $A7
CMP #$15
BEQ loc_70B19
CMP #$05
BNE loc_70B8A
loc_70B19:
LDA $A1
ORA $A0
BEQ loc_70B5E
…
TYA
EOR $99
…Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L1486-L1494loc_70B77:
LDY $99
LDA $8BF0,y
STA $A1Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L1550-L1553db $00, $01, $FE, $00, $4C, $B4, $00, $02
db $FE, $00, $00, $00, $00, $00, $FF, $00
db $80, $80, $00, $06, $FA, $00, $00, $FF
db $00, $FA, $06, $00, $FF, $00, $00Checked by claude, 2026-10-25 — read code_388B0F at the pinned commit: with momentum against the held direction (or none held) it adds the decay at `$8C02`/`$8C05` for the momentum's sign (`$FF`.`$FA` or `$00`.`$06`) and the push at `$8BFC`/`$8BFF` for the held direction (0, or 6/256 toward it), and zeroes the momentum when its sign changes; a held direction matching the momentum, or none carried, goes to loc_70B5E, which sets the full speed (`$8BF0`: `$02`.`$00` on `$15`)The slide's end (loc_70332) also sets the momentum to the walking speed, so he keeps sliding forward after it on these surfaces. Which stages use them hasn't been traced.
Cited by: Mega Man 6
Mega Man 6 keeps Mega Man 5's knockback: 0.5 px/frame against his facing, or 0.25 px/frame ($40) with the direction he faces held, here for 30 frames ($1E), with Up, Down, Start, and Select masked out of the held buttons. mega-man-6/knockback-kept
About: Mega Man 6 Knockback
Value
{
"back": 128,
"resisted": 64,
"frames": 30
}bank38_3F.asm#L640-L674LDA #$1E
STA $95
…
LDY $03CE
TYA
AND $99
BEQ loc_704FA
ORA #$04
TAY
loc_704FA:
LDA $801B,y
STA $EB
…Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L9-L11 — fractions from `$801B` (`$80`, `$80`, then `$C0`, `$40` at index 5 and 6), whole pixels from `$8022` (`$FF`, `$00`, `$FF`, `$00`)db $00, $60, $A0, $00, $80, $80, $00, $00
db $C0, $40, $00, $FF, $00, $00, $00, $FF
db $00, $00, $FF, $24, $31Mega Man 5 (U), annotated ca65 disassembly (plasticsmoke) · src/bank1B.asm#L615-L637player_st_hurt:
ldy $04B0
jsr entity_gravity_collide
lda #$80
sta $03A8
lda #$00
sta $03C0
…
lda #$40
sta $03A8Checked by claude, 2026-10-25 — read the hurt routine (code_3884B0) at the pinned commit: facing 1 (Right) indexes `$FF`.`$80`, 0.5 px/frame left, and 2 the reverse; with the held direction (`$99`) equal to the facing the index gains 4, giving `$FF`.`$C0` or `$00`.`$40`. Mega Man 5's hurt state as in mega-man-5/knockback. Mega Man 5's knockback length isn't in the atlas, so only the speeds are comparedCited by: Mega Man 6
A hit sets Mega Man 6's invincibility timer $A2 to 60 frames ($3C), but the 30-frame knockback runs through the frame routine's entry past the countdown (code_388EB9), so the timer starts to count, and he starts to blink, only once the knockback ends: he can't be hurt for 90 frames in all (computed). The damage routine skips a hit while $A2 isn't 0. mega-man-6/i-frames
About: Mega Man 6 Invincibility frames
Value
{
"timer": 60,
"total": 90
}bank38_3F.asm#L640-L643LDA #$1E
STA $95
LDA #$3C
STA $A2Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L671-L672JSR code_3886D5
JSR code_388EB9Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L1883-L1900JSR code_38924D
…
LDA $A2
BEQ loc_70EB9
DEC $A2
…
loc_70EB9:
code_388EB9:Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L1991-L2001LDA $A2
BNE locret_70F95
…
LDA $03E5
SEC
SBC $04
STA $03E5Checked by claude, 2026-10-25 — read the hurt routine's set-up and loop, the frame routine code_388E95 (the countdown and blink before code_388EB9), and the damage handler code_388F72, which subtracts the contact code's low nibble from his life (`$03E5`) only while `$A2` is 0, at the pinned commitCited by: Mega Man 6
Mega Man 6's buster fires a normal shot on the press of B, which sets the charge counter $9E to 0; each later frame with B held adds 1, and on release the counter fires a half-charged shot from 36 ($24) and a full one from 90 ($5A, kept in $06AB), and nothing under 36. Between games these are counts, not frames: Mega Man 5's counter, whose start isn't traced, fires its half charge from 40 and its full one from 80, and Mega Man 4's, which starts at 1 on the press, from 32 and 92. mega-man-6/charge-line
About: Mega Man 6 Charge shot
Value
{
"half": 36,
"full": 90
}bank38_3F.asm#L818-L852LDA $42
AND #$40
BNE loc_70648
LDA $40
AND #$40
BNE loc_7068C
LDA #$FF
STA $A5
LDA $9E
CMP #$24
BCC loc_706A9
…
…Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L876-L889INC $9E
…
loc_7069B:
INC $9E
LDA $9E
CMP $06AB
BCC loc_706A9
LDY $06AB
STY $9EMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L805-L814code_388615:
LDY $96
LDA $03CE
STA $03CE,x
LDA #$10
STA $97
LDA #$18
STA $98
LDA #$00
STA $9EMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L703 — the shots by tier, buster first (`$09`, `$0A`, `$0B`), then the Jet adaptor'sdb $09, $0A, $0B, $09, $09, $09, $09, $09Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L17084-L17085LDA #$5A
STA $06ABMega Man 5 (U), annotated ca65 disassembly (plasticsmoke) · src/bank1B.asm#L2891buster_tier_threshold:.byte $28,$50,$FFMega Man 4 (U), annotated ca65 disassembly (plasticsmoke) · src/bank3C.asm#L1710-L1716CMP #$20 ; level 1 threshold ($20)
BCC L_8D59 ; tap shot: normal spawn
INC $36 ; flash phase 8
CMP #$40 ; level 2 threshold ($40)
BCC L_8D0C ; small charge
INC $36 ; flash phase 9
CMP #$5C ; full charge threshold ($5C)Checked by claude, 2026-10-25 — read the buster's routine (`$38862C`, entry 0 of the weapon table at `$8556`/`$8560`) at the pinned commit: on a press it fires the tier `$9E` reaches and code_388615 zeroes `$9E`; with no adaptor, held B takes loc_7069B, one INC a frame, capped at `$06AB`; the stage start writes `$5A` there and the pause menu `$5A` again with no adaptor (`$9614`). Mega Man 5 and 4 as in mega-man-5/charge-lineThe weapon routine runs once a frame in the standing, walking, air, slide, and ladder loops, so the counter counts frames there; the hurt routine zeroes it. If the press finds no free shot slot, the counter isn't zeroed.
Cited by: Mega Man 6
With the Power adaptor ($9B 2) the charge counter gains 2 a frame and caps at 60 ($3C), so a half-strength punch comes from 18 frames held and a full one from 30 (computed). Each punch (shot types $0C, $0E, $0F by tier) holds him in a 12-frame pose that keeps the charge off ($9E = $FF). mega-man-6/power-adaptor
About: Mega Man 6 Charge shot
Value
{
"perFrame": 2,
"half": 36,
"full": 60,
"poseFrames": 12
}bank38_3F.asm#L870-L887loc_7068C:
LDY $9B
BEQ loc_7069B
DEY
BEQ loc_706A9
INC $9E
…
loc_7069B:
INC $9EMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L2842 — `$06AB` by adaptor: none, Jet, Powerdb $5A, $3C, $3CMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L703-L704db $09, $0A, $0B, $09, $09, $09, $09, $09
db $0C, $0E, $0F, $09, $2C, $82, $82, $D9Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L852-L858JSR code_388615
LDA $9B
CMP #$02
BNE loc_70678
JSR code_3FE522
JMP code_388417Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L546-L559code_388417:
LDA #$2B
…
LDA #$FF
STA $9E
…
LDA #$0C
STA $95Checked by claude, 2026-10-25 — read the buster routine's held-B branch, the tier table at `$854A` (index `$9B` × 4 plus tier), the pause menu's write of `$06AB` from `$9614` (`$3895CC`-`$3895D1`), and the punch pose code_388417 at the pinned commit; the Jet adaptor (`$9B` 1) skips the charge and its tiers are all `$09`The punch pose ends by zeroing $9E and returning him to the fall, the stand, or the ladder.
Cited by: Mega Man 6
With the Jet adaptor ($9B 1), holding A in the air while not rising and with jet energy left starts the jet. It slows his fall by 1/8 px/frame each frame until he would rise, holds him still for 10 frames, then lifts him from 2 px/frame, faster each frame, and holds him at 84 px ($54) above where he stopped; the d-pad steers him at 1 px/frame. Letting go of A, or running out of energy, drops him back into the fall. mega-man-6/jet-flight
About: Mega Man 6 Flight
Value
{
"ceiling": 84,
"hover": 10,
"steer": 256
}bank38_3F.asm#L138-L144LDA $05C8
BMI loc_7011F
LDA $9C
BMI loc_7011F
LDA $40
AND #$80
BNE loc_70180Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L208-L215LDA $05B1
CLC
ADC #$E0
STA $05B1
STA $EC
LDA $05C8
ADC #$FF
BMI loc_701C7Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L234-L293LDA $04CB
SEC
SBC #$54
BCS loc_701D1
LDA #$00
loc_701D1:
STA $064D
LDA #$0A
STA $95
…
DEC $05C8
loc_701F7:
…Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L324-L329JSR code_388531
LDY $99
LDA $800F,y
STA $ED
LDA $8012,y
STA $EBMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L7-L8 — `$8010`/`$8011` hold `$01` and `$FF`, `$8013`/`$8014` the fractions `$00`: 1 px/frame either waydb $80, $00, $01, $FE, $00, $80, $80, $00
db $01, $FF, $00, $00, $00, $00, $00, $FFChecked by claude, 2026-10-25 — read the air loop's jet test and the jet loops (loc_70180 to code_388254) at the pinned commit. The rise starts from `$FF`.`$00` with `$F8` added a frame; the first add gives `$FE`.`$F8`, which the `$FE` test cuts to `$FE`.`$00`, 2 px/frame up, and from there the speed passes `$FE` and keeps growing by 1/32 px/frame (computed). Above the mark in `$064D` the loop sets his speed to 0 each frame. A released (`$38824D`) and an empty meter (`$388269`) both set sound `$3F` and go to the air loop's entryIn tile type $08 the rise is held at 1 px/frame ($388221-$38822F), and in tile type $0E it keeps its speed. A jump with A held all the way turns into the jet at its peak.
Cited by: Mega Man 6
The jet's energy $9C drains by 1 every 4 frames the jet runs, and the jet stops when it goes below 0, so a full meter of 20 steps (0 to 19) lasts 80 frames (computed). It refills by 1 every other frame up to 19, from empty in 40 frames (computed), while the jet's frame counter $9D is 0, which landing sets, and the buster is the weapon in hand. mega-man-6/jet-meter
About: Mega Man 6 Flight
Value
{
"steps": 20,
"framesPerStep": 4,
"refillFrames": 2
}bank38_3F.asm#L310-L321loc_7025D:
DEC $9D
BNE loc_70275
LDA #$04
STA $9D
DEC $9C
BPL loc_70275
LDA #$00
STA $05C8
LDA #$3F
STA $DCMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L164-L168JSR code_388531
LDA $05B1
BNE loc_700F9
LDA #$00
STA $9DMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L17263-L17282loc_7CF92:
…
LDX $9B
BEQ loc_7CFC6
DEX
BNE loc_7CFB9
LDA $9D
BNE loc_7CFB3
LDA $F3
AND #$01
BNE loc_7CFB3
INC $9C
…Checked by claude, 2026-10-25 — read code_388254 (run each jet frame), the air loop's landing, and the meter-drawing routine code_3ECF4A, which the frame's sprite routine (code_3ED1D4) calls on every even frame, at the pinned commit; the refill branch loc_7CF92 is reached only when the weapon in hand (`$0699`) is 0The ladder entry ($38835E) and the end of the knockback ($38851C) also zero $9D.
Cited by: Mega Man 6
Mega Man 6 runs its objects, Mega Man included, as coroutines. Each frame code_3FE41C counts the slots from 22 down to 0 and calls each live one at its resume address ($0413/$042A); a script yields by calling code_3FE468, which pops its own return address into that pointer and moves to the next slot, so the script resumes after the call the next frame. Mega Man's movement (slot 0) is written as loops around that call, each loop ending the frame through code_388E95. mega-man-6/coroutine-scheduler
About: Mega Man 6 Cooperative multitasking
CodeMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) ·bank38_3F.asm#L20056-L20070LDA #$16
STA $8F
loc_7E438:
LDX $8F
LDA $03A0,x
BEQ loc_7E47A
…
LDA $042A,x
STA $08
LDA $0413,x
STA $09
JSR code_3FE482Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L20081-L20095code_3FE468:
LDX $8F
PLA
CLC
ADC #$01
STA $042A,x
PLA
ADC #$00
STA $0413,x
code_3FE477:
LDX $90
TXS
…Mega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · bank38_3F.asm#L1976 — the end of code_388E95, the frame routine every loop of Mega Man's callsJMP code_3FE468Checked by claude, 2026-10-25 — read code_3FE41C to code_3FE482 at the pinned commit: the stack pointer saved in `$90` before the loop is restored on each yield, `$03A0,x` marks a live slot, and code_3FE482 is JMP ($0008); the PLA pair takes the JSR's return address, plus 1 for the 6502's return offsetCited by: Mega Man 6