Ground slide
A short low dash along the ground, faster than walking, that fits through gaps a standing character can't.
On this page
A ground slide trades height for speed: the character drops low and dashes along the floor for a moment. Mega Man 2 has none1. Mega Man 3 starts it with Down and A, 2.5 px/frame for 21 frames, and a jump can cut it short only from its 9th frame2. Mega Man 4 stretches it to 26 frames and allows the jump from the second3, and Mega Man 5 keeps that4.
- NoneMega Man 2 (1988). No slide; A on the ground always jumps.1
- TimedMega Man 3 (1990). Down and A: a short, fast, low dash that A can turn into a jump partway.2Mega Man 4 (1991). A slide of under half a second that a press of A turns into a jump at once.3Mega Man 5 (1992). Mega Man 4's slide, as fast and as long, and A jumps out of it.4
Games
| Game | Year | How | Note |
|---|---|---|---|
| Mega Man 3 | 1990 | Timed | Down and A: a short, fast, low dash that A can turn into a jump partway |
| Mega Man 4 | 1991 | Timed | a slide of under half a second that a press of A turns into a jump at once |
| Mega Man 5 | 1992 | Timed | Mega Man 4's slide, as fast and as long, and A jumps out of it |
| Mega Man 6 | 1993 | Timed | Mega Man 5's slide, as fast and as long, but A ends it without a jump |
Every claim about this mechanic, by game (15)
References
- ^ abMega Man 2 has no slide. A fresh A press in a grounded state always starts a jump; that code tests no other button.Codelsmmega/mm2
How we know
94_run_megaman_landing_common_1: 95 LDA z:zjoy1_pressed_bits 96 AND #a_button 97 BEQ @not_pressed 98 LDA z:zjump_speed_fraction 99 STA aobject_ycoord_speed_fraction 100 LDA z:zjump_speed 101 STA aobject_ycoord_speed 102 LDA #$06 103 STA z:zmegaman_status
engine/run_megaman.asm lines 94–103 at 94f0bf3 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Checked by a second AI model, 2026-10-21.
- ^ abcDown and a fresh A press on the ground start a slide if no wall is ahead: 2 px lower, at 2.5 px/frame (
$02.$80), with a timer of 20 ($14). The set-up frame moves once, and each slide frame moves before it tests the timer, so an unbroken slide moves on 21 frames. A turn, a wall, the timer's end, or (from the 9th frame) a fresh A press all lead to the standing test, where a solid tile at standing height keeps the slide going; otherwise it ends, with a jump at walking speed if A was pressed.Verifiedplasticsmoke/megaman3-disassembly-ca65revisedHow we know
286slide_initiate_confirmed: lda #PSTATE_SLIDE ; state $02 = player_slide 287 sta player_state ; set player state to slide 288 lda #$14 ; slide timer = 20 frames 289 sta $33 ; store slide timer 290 lda #$10 ; OAM anim $10 = slide sprite 291 jsr reset_sprite_anim ; set slide sprite animation 292 lda ent_y_px ; player Y += 2 (crouch posture) 293 clc ; prepare for addition 294 adc #$02 ; lower Y by 2 for slide crouch 295 sta ent_y_px ; store adjusted Y position 296 lda #$80 ; X speed = $02.80 = 2.5 px/frame 297 sta ent_xvel_sub ; X velocity sub-pixel ⋮
src/fixed/player_states.asm lines 286–299 at 58ca1c3 · upstream ↗ 318 beq slide_move_check_facing ; always → skip to slide movementsrc/fixed/player_states.asm line 318 at 58ca1c3 · upstream ↗ 344slide_collision_wall_solid: lda $10 ; hit a wall? 345 and #$10 ; bit 4 = solid wall 346 bne slide_end_ground_check ; yes → end slide 347 lda $33 ; timer expired? 348 beq slide_end_ground_check ; yes → end slide 349 dec $33 ; decrement timer 350 lda $33 ; check slide timer phase 351 cmp #$0C ; >= $0C? (uncancellable phase) 352 bcs slide_continue_moving ; yes → uncancellable, keep sliding 353 lda joy1_press ; A button pressed? (cancellable phase) 354 and #BTN_A ; check A button 355 bne slide_end_ground_check ; yes → cancel into slide jump ⋮
src/fixed/player_states.asm lines 344–366 at 58ca1c3 · upstream ↗ 328 lda joy1_held ; read held D-pad 329 and #$03 ; mask left/right bits 330 beq slide_move_check_facing ; no direction → keep sliding 331 cmp player_facing ; same as current facing? 332 beq slide_move_check_facing ; yes → keep sliding 333 sta player_facing ; changed direction → end slide 334 bne slide_end_ground_check ; always taken → end slide
src/fixed/player_states.asm lines 328–334 at 58ca1c3 · upstream ↗ 367 sta player_state ; state = on_ground 368 lda joy1_press ; A button pressed? 369 and #BTN_A ; check A button 370 bne slide_jump_walk_speed_init ; yes → slide jump ⋮ 380 lda #$01 ; X velocity whole = 1 ⋮ 386slide_jump_walk_speed_init: lda #$4C ; walk speed X = $01.4C 387 sta ent_xvel_sub ; X velocity sub = $4C 388 lda #$01 ; X velocity whole = 1 389 sta ent_xvel ; X velocity = 1 390 jmp player_ground_normal_jump ; jump from slide (uses slide_jump velocity)
src/fixed/player_states.asm lines 367–390 at 58ca1c3 · upstream ↗ Measured by a script in MesenCE 2.2.1 (build 4b8a196), on . It fails if the result disagrees with the claim.
The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-26.
Revised after a check by a second AI model, 2026-10-21.
Checked by a second AI model, 2026-10-26.
- ^ abMega Man 4's slide keeps Mega Man 3's 2.5 px/frame but moves on 26 frames (a timer of
$1A, counted after each move from the set-up frame on) where Mega Man 3's moves on 21 (a timer of 20). Its A test runs on every slide frame, the set-up's included: a fresh A press without Down jumps out whenever he has headroom, where Mega Man 3 waits for its 9th frame, and A with Down held keeps sliding. The set-up's own press comes with Down, and A held from it into the second frame is no fresh press, so the earliest jump out comes on the slide's 3rd frame.Verifiedplasticsmoke/megaman4-disassembly-ca65 · “Mega Man 4 (USA) (Rev 1)” · plasticsmoke/megaman3-disassembly-ca65revisedHow we know
254 JMP L_8368 ; post-slide-start processingsrc/bank3C.asm line 254 at a63bb6e · upstream ↗ 510 LDY #$04 ; speed selector 4 = slide 511 JSR entity_horiz_dispatch ; move player horizontally 512 BCS L_83C3 ; hit wall: try to stand 513 LDA $34 ; slide timer 514 BEQ L_83C3 ; expired: try to stand 515 DEC $34 ; count down slide 516 BNE L_83EF ; still sliding: done
src/bank3C.asm lines 510–516 at a63bb6e · upstream ↗ 217 LDA #$1A ; slide duration 26 frames 218 STA $34 ; set slide timer 219 LDA #$02 ; state $02 = slide 220 STA player_state ; enter slide state 221 LDA #$80 ; slide speed 2.5 px/frame 222 STA ent_xvel_sub ; X velocity sub = $80 223 STA $37 ; mirror in $37 224 LDA #$02 ; 2 px 225 STA ent_xvel ; X velocity = 2 226 STA $38 ; mirror in $38
src/bank3C.asm lines 217–226 at a63bb6e · upstream ↗ 473L_8368: 474 LDA joy1_press ; newly pressed 475 AND #$80 ; A button? 476 BEQ L_839D ; no jump: steering 477 LDA joy1_held ; held buttons 478 AND #$04 ; Down held? 479 BNE L_839D ; Down+A: stay sliding 480 LDY #$03 ; probe 3 = standing headroom 481 JSR tile_collision_detect ; check tile above head 482 LDA $10 ; collision result 483 BNE L_839D ; blocked: no jump 484 JSR L_83F2 ; platform overhead check ⋮
src/bank3C.asm lines 473–496 at a63bb6e · upstream ↗ In the cartridge (“Mega Man 4 (USA) (Rev 1)”): bank $3C $8184, the slide's set-up in the Rev 1 ROM; bank $3C $8368, the jump out of the slide in the Rev 1 ROM. We don't reproduce the bytes.
288 lda #$14 ; slide timer = 20 frames 289 sta $33 ; store slide timer
src/fixed/player_states.asm lines 288–289 at 58ca1c3 · upstream ↗ 344slide_collision_wall_solid: lda $10 ; hit a wall? 345 and #$10 ; bit 4 = solid wall 346 bne slide_end_ground_check ; yes → end slide 347 lda $33 ; timer expired? 348 beq slide_end_ground_check ; yes → end slide
src/fixed/player_states.asm lines 344–348 at 58ca1c3 · upstream ↗ 349 dec $33 ; decrement timer 350 lda $33 ; check slide timer phase 351 cmp #$0C ; >= $0C? (uncancellable phase) 352 bcs slide_continue_moving ; yes → uncancellable, keep sliding 353 lda joy1_press ; A button pressed? (cancellable phase) 354 and #BTN_A ; check A button 355 bne slide_end_ground_check ; yes → cancel into slide jump
src/fixed/player_states.asm lines 349–355 at 58ca1c3 · upstream ↗ Measured by a script in MesenCE 2.2.1 (build 4b8a196), on Mega Man 4 (USA) (Rev 1) (SHA-1
05d238c2a315…). It fails if the result disagrees with the claim.The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-26.
Revised after a check by a second AI model, 2026-10-21.
Checked by a second AI model, 2026-10-26.
- ^ abMega Man 5 keeps Mega Man 4's slide, 2.5 px/frame for 26 frames (
$1A), with a jump out of it on any slide frame a fresh A press comes without Down and there is headroom. The earliest is the slide's 3rd frame, counting the set-up frame (Down and A) as the 1st: a fresh press needs A let go on the 2nd.Codeplasticsmoke/megaman5-disassembly-ca65 · plasticsmoke/megaman4-disassembly-ca65How we know
lda #$1A sta $35 lda #$02 sta $30 lda #$80 sta $03A8 lda #$02 sta $03C0
src/bank1B.asm#L161-L168 · upstream ↗ lda $14 and #$80 beq L82C8 lda $16 and #$04 bne L82C8 … jsr probe_horiz lda L0010 bne L82C8 lda #$4C sta $03A8 …
src/bank1B.asm#L377-L393 · upstream ↗ 217 LDA #$1A ; slide duration 26 frames 218 STA $34 ; set slide timer 219 LDA #$02 ; state $02 = slide 220 STA player_state ; enter slide state 221 LDA #$80 ; slide speed 2.5 px/frame
src/bank3C.asm lines 217–226 at a63bb6e · upstream ↗ 474 LDA joy1_press ; newly pressed 475 AND #$80 ; A button? 476 BEQ L_839D ; no jump: steering 477 LDA joy1_held ; held buttons 478 AND #$04 ; Down held? 479 BNE L_839D ; Down+A: stay sliding
src/bank3C.asm lines 474–479 at a63bb6e · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-21.
Checked by a second AI model, 2026-10-26.
Sources
Code
- lsmmega. 2026. “mm2: Mega Man 2 disassembly (lsmmega/mm2).” Commit 94f0bf3. lsmmega/mm2 @ 94f0bf3 · licence, all uses
- plasticsmoke. 2026. “Mega Man 3 (U), annotated ca65 disassembly (plasticsmoke).” Commit 58ca1c3. plasticsmoke/megaman3-disassembly-ca65 @ 58ca1c3 · licence, all uses
- plasticsmoke. 2026. “Mega Man 4 (U), annotated ca65 disassembly (plasticsmoke).” Commit a63bb6e. plasticsmoke/megaman4-disassembly-ca65 @ a63bb6e · licence, all uses
- 1992. “Mega Man 4 (USA) (Rev 1).” · licence, all uses
- plasticsmoke. 2026. “Mega Man 5 (U), annotated ca65 disassembly (plasticsmoke).” Commit 7fd6512. plasticsmoke/megaman5-disassembly-ca65 @ 7fd6512 · licence, all uses