Claim set · data/claims/mega-man-6.yaml

Mega 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
}
VerifiedMega 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 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.mjs

The 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
}
VerifiedMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · 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.mjs

Cited 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
}
VerifiedMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · 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.mjs

Under 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.mjs

Cited 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
}
CodeMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · 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 repeats

The 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
}
VerifiedMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · 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.mjs

The 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
}
VerifiedMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · 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.mjs

Cited 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.mjs

Cited 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
}
CodeMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · 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 4

Cited 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 frame

On 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 tiles

The 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 start

With 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
}
VerifiedMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · 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.mjs

Over 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
 }
}
CodeMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · 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_3ED9CD

Counted 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 ORed

Standing 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.mjs

The 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 px

Under 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.mjs

Pushing 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
}
VerifiedMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · 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.mjs

The 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.mjs

The 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
}
CodeMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · 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 up

Which 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
}
CodeMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · 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
}
CodeMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · 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 compared

Cited 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
}
CodeMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · 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 commit

Cited 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
}
CodeMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · 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-line

The 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
}
CodeMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · 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
}
CodeMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · 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 entry

In 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
}
CodeMega Man 6 (NES) disassembly (refreshing-lemonade/megaman6-disassembly) · 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 0

The 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 offset

Cited by: Mega Man 6