Mega Man 3
Capcom's 1990 action platformer for the NES, the third in the Mega Man series.
Mega Man 3 is Capcom’s action platformer for the NES, released in Japan as Rockman 3 in September 1990 and in North America that November1. It opens on a screen of eight Robot Masters’ faces, and the player picks which one to fight2. Each one beaten gives Mega Man a weapon, and the manual advises an order that brings the weapon each later fight needs3. Four bonus stages refight the bosses of Mega Man 2, and Dr. Wily has stages of his own4. Mega Man gains a slide5 and a robot dog, Rush, who becomes a springboard, a submarine, or a jet6. Proto Man, Mega Man’s brother, makes his debut7.
Akira Kitamura, who planned the first two games8, left Capcom before this one. He asked his successor to keep the game’s systems and to add Proto Man and Rush9. That successor, the programmer Masahiko Kurokawa, was credited as Patariro10. He left halfway through, and Keiji Inafune finished the game with two months for its second half11. Yasuaki Fujita wrote most of the music12. Harumi Fujita wrote the Needle Man and Gemini Man stages and the staff roll before leaving Capcom mid-project to give birth13.
American magazines praised it. Electronic Gaming Monthly (EGM) scored it 9 out of 1014 and named it the year’s best sequel, and GamePro called it “A Mega-Hit!“15. Nintendo Power rated it 4.5, 4.2, 4.2, 4.0 out of 516,16. Famitsu rated it below Mega Man 217. It sold 1.08 million18 copies by Capcom’s count18. Proto Man, Rush, and the slide returned in nearly every later Mega Man game, and GameSpot’s retrospective called Mega Man 3 perhaps the series’ best19. Salvatore Pane’s book on the game credits it with making Mega Man Capcom’s mascot20.
#How it plays
Mega Man walks at one speed, with no build-up. From a standstill he steps forward at once, halts while his turning animation starts, then walks on21. In the air a held direction moves him at the same speed on every frame21.
Every jump leaves the ground at the same speed22, under one gravity23. Its height depends on how long A is held. Let go on the way up and he starts to fall at once24.
Down and A start the slide, a low dash faster than his walk25. Under a low ceiling the slide keeps going until he can stand. Partway through, a press of A turns it into a jump25. Rush Coil throws him far higher than a jump, and letting go of A doesn’t cut that rise short26.
A hit pushes him slowly back until the hurt animation ends, except during a slide27. Only then does his spell of invincibility start28.
Each weapon spends its energy at its own rate. Needle Cannon takes one unit for every four shots, and Gemini Laser takes two a shot29. Every weapon does a set damage to each enemy, bosses included, and Spark Shock freezes some targets instead of damaging them30.
The released game kept a debug feature on the second controller. Holding right on it lets Mega Man leap across the screen. Held as he falls into a pit, it drains his health but leaves him impervious to damage31.
#Across the series
Mega Man 3 keeps Mega Man 2’s gravity but changes most of the other movement numbers:
- he takes off at 4.89 px/frame (
$04.$E5)22 instead of 4.87 px/frame ($04.$DF)32, and falls at a lower top speed23; - letting go of A drops him at once, where in Mega Man 2 he keeps rising slowly24;
- Mega Man 2’s slow first step is gone, though the halt after it remains21;
- the invincibility after a hit is shorter, and starts after the knockback instead of at the hit28;
- weapon energy costs come from one table for every weapon29;
- the damage tables cover regular enemies and bosses together30.
Cartridge
Code lineage
Mechanics
| Mechanic | Kind | How |
|---|---|---|
| Jump | One speed | every jump takes off at the same speed; Rush Coil throws him far higher |
| Gravity | One gravity | the same gravity as Mega Man 2, but a slower top falling speed |
| Variable jump height | Release cap | letting go of A on the way up starts the fall at once |
| Running | Stepped | one walking speed, with a brief halt after the first step |
| Air control | Direct | a held direction moves him at walking speed in the air |
| Ground slide | Timed | Down and A: a short, fast, low dash that A can turn into a jump partway |
| Invincibility frames | Frame timer | a spell of invincibility that starts once the knockback ends |
| Knockback | Fixed shove | a hit pushes him slowly back until the hurt animation ends |
| Weapon energy | Per weapon | each weapon spends energy at its own rate, some per shot and some per few shots |
| Boss weakness | Every enemy | every weapon does a set damage to each enemy and boss alike |
Every claim about this game, by concept (64)
References
- ^Mega Man 3 came out in Japan on 28 September 1990, as Rockman 3, and in North America in November 1990.PublisherMM25 · Nintendo, NES Games · Capcom, Platinum Titles
How we know
NES 09/28/1990
p. 40, release table · archived copy ↗ November 1990
PDF p. 8 · archived copy ↗ Release : Sep 1990
entry 125, Mega Man 3 · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-27.
- ^Mega Man 3 starts on a screen of eight Robot Masters' faces, where the player picks which one to fight.ManualMega Man 3 NES manual
How we know
you're surrounded by mug shots of the 8 Robot Masters. Use the control pad to choose your opponent.
p. 5 (PDF 4), Getting Started · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-27.
- ^The manual advises taking the Robot Masters in an order that gives the player each weapon before the battle it helps in.ManualMega Man 3 NES manual
How we know
go after the Robot Masters in the right order to get the weapons you need for the next battle.
p. 15 (PDF 8), Nuts and Bolts for Winning · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-27.
- ^Besides the eight Robot Masters' stages, the game has four bonus stages that refight the bosses of Mega Man 2, and Dr. Wily's own stages.WebGameSpot, History of Mega Man
How we know
you got to play through four bonus stages and fight the bosses from Mega Man II over again … Add on top of that the eight normal stages and a Wily stage or three
1990, Mega Man III, Gameplay · archived copy ↗ The quote matches our archived copy.
- ^Mega Man 3 adds a slide, which the manual gives as the control pad Down and Left or Right, then A, and which Keiji Inafune describes as both an attack and an escape.ManualMega Man 3 NES manual · MM25revised
How we know
Slide left or right … RIGHT, then press button A.
p. 7 (PDF 3), Controlling Mega Man · archived copy ↗ Starting in '3', we added the sliding action. … sliding was an action that had a good balance between being an offensive and defensive tactic.
p. 41, Inafune on sliding · archived copy ↗ The quote matches our archived copy.
Revised after a check by a second AI model, 2026-10-27.
- ^Mega Man 3 gives him a robot dog, Rush, who turns into a springboard, a submarine, or a jet. Inafune says Rush took Mega Man's helmet and the colors of Mega Man 2's Items 1, 2, and 3, which had no character of their own.ManualMega Man 3 NES manual · MM25
How we know
RC- Rush turns into a springboard for high jumps. … RM - Rush's submarine keeps you alive underwater. … RJ - In Rush's jet, the sky's the limit.
p. 11 (PDF 6), Rush to the Rescue! · archived copy ↗ Items 1, 2, and 3 had some interesting capabilities, but they really had no life to them. … we took Mega Man's helmet and mixed in the color scheme from Items 1, 2, and 3 to come up with Rush.
p. 41, Inafune on Rush · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-27.
- ^Mega Man 3 introduces Proto Man, Mega Man's brother, whom Inafune wanted players to read as either a rival or a comrade.WebGameSpot, History of Mega Man · MM25
How we know
This game marked the debut of the mysterious Proto Man - Mega Man's brother.
1990, Mega Man III, The Basics · archived copy ↗ We wanted people to be unsure whether Proto Man was a friend or foe.
p. 41, Inafune on Proto Man · archived copy ↗ The quote matches our archived copy.
- ^Mega Man's planner, credited as A.K., is Akira Kitamura.PublisherMM25 · Destructoid, Inafune interview (2013)
How we know
Planner A.K.
p. 6, contributors · archived copy ↗ confirmed to be Akira Kitamura, credited as A.K. in Mega Man 1 and 2
Inafune on the character design · archived copy ↗ The quote matches our archived copy.
- ^ abLeaving Capcom, Mega Man's planner Akira Kitamura asked his successor not to change the game's systems and to add Proto Man and Rush; he later said he created the two.BookPane, Mega Man 3
How we know
Kitamura asked Kurokawa not to change any of the fundamental gameplay systems. … When asked directly by Hitoshi Ariga if he was the creator of Proto Man and Rush, Akira Kitamura admitted yes.
excerpt, on Kitamura's talk with his successor · archived copy ↗ The quote matches our archived copy.
- ^After Kitamura left, Capcom put Masahiko Kurokawa, a programmer credited as Patariro, in charge of Mega Man 3.BookPane, Mega Man 3 · MM25
How we know
Capcom selected not series veteran Keiji Inafune to helm Mega Man 3, but Masahiko Kurokawa, a talented programmer … Capcom enforced its pseudonym policy on Kurokawa who chose the moniker Patariro.
excerpt, paragraph beginning "When Akira Kitamura left Capcom" · archived copy ↗ our eternal leader quit his job. We got a new leader for '3'
p. 40, Inafune on Mega Man 3 · archived copy ↗ The quote matches our archived copy.
- ^Kurokawa left halfway through development, and Keiji Inafune took over his work, with two months to finish the second half of the game.BookPane, Mega Man 3 · MM25
How we know
Halfway through development, Kurokawa abruptly left.
excerpt, paragraph beginning "The collaboration between Kurokawa and Inafune" · archived copy ↗ so I had to basically fill in that role to finish the game. … we had two months to finish the final 50 percent of the game.
excerpt, paragraph beginning "The reason I said that", Inafune quoted from Nintendo Power 220 (2007) · archived copy ↗ I did the enemy settings, the specifications, and even worked on the maps.
p. 40, Inafune on Mega Man 3 · archived copy ↗ The quote matches our archived copy.
- ^Yasuaki Fujita composed most of Mega Man 3's music.BookPane, Mega Man 3revised
How we know
Yasuaki Fujita composed most of the tracks for Mega Man 3 but was assisted by Harumi Fujita
excerpt, paragraph beginning "Unsurprisingly, Masahiko Kurokawa" · archived copy ↗ The quote matches our archived copy.
Revised after a check by a second AI model, 2026-10-27.
- ^Harumi Fujita wrote Mega Man 3's Needle Man and Gemini Man stages and its staff roll, then left Capcom mid-project to give birth, and Yasuaki Fujita took over from her.InterviewVGMO, Harumi Fujita interviewrevised
How we know
I composed the Gemini Man and Needle Man stages, as well as the Staff Roll. … I had to drop out during the middle of development and leave the company to give birth to my child, so I ended up having Yasuaki Fujita take over for me.
Fujita on Mega Man 3 · archived copy ↗ The quote matches our archived copy.
Revised after a check by a second AI model, 2026-10-27: Yasuaki Fujita writing most of it is Pane's book only, now music-most (T1).
- ^Electronic Gaming Monthly scored Mega Man 3 9 out of 10.BookPane, Mega Man 3
How we know
awarded the game 9 out of 10 points
excerpt, paragraph beginning "Like its predecessor" · archived copy ↗ The quote matches our archived copy.
- ^American magazines praised Mega Man 3. EGM named it the year's best sequel, and GamePro called it "A Mega-Hit!"MagazineEGM 15 · GamePro Greatest Hits, Mega Man 3
How we know
Mega Man 3 is better than the first two put … One of my favorite of the year!
PDF p. 64, Mega Man 3 review · archived copy ↗ BEST SEQUEL TO AN EXISTING GAME Capcom's MEGA MAN 3
PDF p. 18, 1990 awards · archived copy ↗ A Mega-Hit!
PDF p. 24, closing verdict · archived copy ↗ The quote matches our archived copy.
- ^ abNintendo Power rated Mega Man 3 4.5 for graphics and sound, 4.2 for play control, 4.2 for challenge, and 4.0 for theme and fun, out of 5.MagazineNintendo Power 20
How we know
1P/Pass| 4.5 | 4.2 4.2 4.0
PDF p. 91, ratings table of new NES releases, row for Mega Man III · archived copy ↗ The quote matches our archived copy.
- ^Famitsu rated Mega Man 3 lower than Mega Man 2.BookPane, Mega Man 3
How we know
didn’t rate it as highly as Mega Man 2
excerpt, paragraph beginning "Like its predecessor" · archived copy ↗ The quote matches our archived copy.
- ^ abMega Man 3 sold 1.08 million copies, by Capcom's count as of 30 June 2026.PublisherCapcom, Platinum Titles · Pane, Mega Man 3
How we know
Units : 1.08 million units
entry 125, Mega Man 3 · archived copy ↗ Platinum Titles (as of June 30, 2026)
page heading · archived copy ↗ The game sold well over a million units
excerpt, paragraph beginning "Like its predecessor" · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-27.
- ^Proto Man, Rush, and the slide recur in nearly every later Mega Man game, and GameSpot's retrospective calls Mega Man 3 perhaps the series' best.BookPane, Mega Man 3 · GameSpot, History of Mega Man
How we know
Proto Man, Rush, and the slide—have been adopted in nearly every Mega Man game that has followed.
excerpt, paragraph beginning "Like its predecessor" · archived copy ↗ Mega Man III was quite possibly the pinnacle of the series.
1990, Mega Man III, The Basics · archived copy ↗ The quote matches our archived copy.
- ^Pane credits Mega Man 3 with settling Mega Man as Capcom's mascot and Inafune as the series' guiding figure.BookPane, Mega Man 3
How we know
firmly cemented not only the Blue Bomber as Capcom’s company mascot, but Keiji Inafune as the series’s spiritual godfather.
excerpt, paragraph beginning "Like its predecessor" · archived copy ↗ The quote matches our archived copy.
- ^ abcMega Man 3 drops Mega Man 2's slow step speed but keeps a pause. Before each frame's state runs, the prelude sets the speed to
$01.$4C(1.30 px/frame) unless he is sliding. From standing, a held direction moves him by it at once and starts the turning animation ($0D); while that animation is on its first frame the ground state doesn't move him, and once it advances he walks at the same 1.30. In the air a held direction moves him at 1.30 on every frame.Codeplasticsmoke/megaman3-disassembly-ca65 · lsmmega/mm2revisedHow we know
636prelude_check_slide_speed: lda ent_xvel ; if X speed whole == $02 (slide speed): 637 cmp #$02 ; slide speed? 638 bne prelude_reset_walk_speed ; no → reset to walk speed 639 lda player_state ; load current player state 640 cmp #PSTATE_SLIDE ; check if sliding 641 beq prelude_setup_per_frame ; sliding, keep slide speed 642prelude_reset_walk_speed: lda #$4C ; reset walk speed to $01.4C 643 sta ent_xvel_sub ; store walk sub-pixel speed 644 lda #$01 ; walk speed whole = $01 645 sta ent_xvel ; store walk whole speed
src/fixed/game_loop.asm lines 636–645 at 58ca1c3 · upstream ↗ 115player_ground_turning_anim: lda #$0D ; OAM $0D = turning animation 116 jsr reset_sprite_anim ; set turning animation 117 lda shoot_anim_timer ; check if shooting 118 beq player_ground_move_facing ; not shooting, move facing 119 jsr shoot_oam_advance_variant ; update shoot animation variant 120player_ground_move_facing: lda player_facing ; move in facing direction 121 jmp player_ground_move_horizontal ; move in facing direction ⋮ 125player_ground_walk_handler: lda joy1_held ; D-pad L/R held? 126 and #$03 ; mask L/R bits 127 beq player_ground_idle ; no → idle 128 sta player_facing ; update facing direction
src/fixed/player_ground.asm lines 115–128 at 58ca1c3 · upstream ↗ 94 cmp #$0D ; $0D/$0E/$0F = turning/special anims 95 beq player_ground_special_anim ; OAM $0D → check if anim complete ⋮ 100player_ground_special_anim: lda ent_anim_state ; check animation state 101 bne player_ground_walk_handler ; → normal walk handler 102 beq player_ground_slide_weapon ; anim done → slide/crouch check
src/fixed/player_ground.asm lines 94–102 at 58ca1c3 · upstream ↗ 210 lda ent_anim_state,x ; ent_anim_state = current frame index 211 and #$7F ; (bit 7 preserved) 212 inc ent_anim_state,x ; advance to next frame ⋮ 216 lda #$00 ; reached end: loop back to frame 0 217 sta ent_anim_state,x ; reset to frame 0
src/fixed/sprites.asm lines 210–217 at 58ca1c3 · upstream ↗ 360player_airborne_walk_shoot: lda joy1_held ; D-pad L/R held? 361 and #$03 ; mask L/R bits 362 beq player_airborne_shoot_check ; no → skip walk 363 sta player_facing ; update facing direction 364 jsr player_ground_move_horizontal ; move L/R with collision
src/fixed/player_ground.asm lines 360–364 at 58ca1c3 · upstream ↗ 259move_sprite_right: lda ent_x_sub,x ; load X subpixel position 260 clc ; X subpixel += X subpixel speed 261 adc ent_xvel_sub,x ; add X subpixel velocity 262 sta ent_x_sub,x ; store new X subpixel 263 lda ent_x_px,x ; load X pixel position 264 adc ent_xvel,x ; add X pixel velocity + carry 265 sta ent_x_px,x ; store new X pixel
src/fixed/movement.asm lines 259–265 at 58ca1c3 · upstream ↗ 222megaman_status_xcoord_speed_table: 223 .BYTE $00 224 .BYTE $00 225 .BYTE $00 226 .BYTE $00 227 .BYTE $00 ⋮ 230 .BYTE $00 231 .BYTE $00 232 .BYTE $00 233 .BYTE $00 ⋮ 235megaman_status_xcoord_speed_fraction_table: 236 .BYTE $00 ⋮
engine/turn_megaman.asm lines 222–243 at 94f0bf3 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Revised after a check by a second AI model, 2026-10-21.
Checked by a second AI model, 2026-10-26.
- ^ abA fresh A press on the ground without Down sets Mega Man's upward speed to
$04.$E5, 4.89 px/frame, and runs the airborne state at once.Codeplasticsmoke/megaman3-disassembly-ca65How we know
59player_ground_jump_or_slide: lda joy1_press ; check new button presses 60 and #BTN_A ; A button pressed? 61 beq player_ground_anim_dispatch ; no → animate walk/idle 62 lda joy1_held ; check held buttons 63 and #BTN_DOWN ; holding down? 64 beq player_ground_normal_jump ; not holding down, jump 65 jmp slide_initiate ; initiate slide ⋮ 71player_ground_normal_jump: lda joy2_held ; P2 held buttons 72 and #$01 ; bit 0 = Right held? 73 bne player_ground_super_jump ; yes → debug super jump 74 lda #$E5 ; normal jump: Y vel = $04.E5 75 sta ent_yvel_sub,x ; store Y velocity sub-pixel ⋮
src/fixed/player_ground.asm lines 59–78 at 58ca1c3 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Checked by a second AI model, 2026-10-21.
- ^ abMega Man 3 raises the take-off speed from Mega Man 2's
$04.$DF(4.87 px/frame) to$04.$E5(4.89) and keeps gravity at$40, but caps a fall at 7 px/frame ($F9) where Mega Man 2 allows 12 ($F4).Codeplasticsmoke/megaman3-disassembly-ca65 · lsmmega/mm2How we know
74 lda #$E5 ; normal jump: Y vel = $04.E5 75 sta ent_yvel_sub,x ; store Y velocity sub-pixel 76 lda #$04 ; Y velocity whole = $04 77 sta ent_yvel,x ; store Y velocity whole
src/fixed/player_ground.asm lines 74–77 at 58ca1c3 · upstream ↗ 648prelude_setup_per_frame: lda #$40 ; gravity = $40 for player physics 649 sta gravity ; (process_sprites sets $55 for entities)
src/fixed/game_loop.asm lines 648–649 at 58ca1c3 · upstream ↗ 393apply_gravity_player_check: lda ent_yvel_sub,x ; Y sub velocity -= gravity 394 sec ; prepare for subtraction 395 sbc gravity ; subtract gravity value 396 sta ent_yvel_sub,x ; store new Y sub velocity 397 lda ent_yvel,x ; Y velocity -= borrow 398 sbc #$00 ; propagate borrow to whole byte 399 sta ent_yvel,x ; store new Y velocity 400 bpl apply_gravity_exit ; still positive (rising)? done 401 cmp #$F9 ; check against terminal velocity $F9 402 bcs apply_gravity_exit ; within limit (-7 to -1)? done
src/fixed/movement.asm lines 393–402 at 58ca1c3 · upstream ↗ 175tsa_ycoord_speed_accelerate_fraction_table: 176 .BYTE $40, $1E ⋮ 181tsa_regular_water_jump_speed_table: 182 .BYTE $04, $05 ⋮ 184tsa_regular_water_jump_speed_fraction_table: 185 .BYTE $DF, $80
engine/check_object_horizontal_move.asm lines 175–185 at 94f0bf3 · upstream ↗ 81 BPL @skip 82 CMP #$F4 83 BCS @skip 84 LDA #$00 85 STA aobject_ycoord_speed_fraction 86 LDA #$F4 87 STA aobject_ycoord_speed
engine/check_object_vertical_move.asm lines 81–87 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.
- ^ abOn every rising frame without A held, Mega Man 3 sets the vertical speed to
$FF.$C0, 0.25 px/frame downward, whatever the speed was, before the frame's move. Mega Man 2 only lowers a rise of 2 px/frame or more to 1, after the move.Codeplasticsmoke/megaman3-disassembly-ca65 · lsmmega/mm2How we know
260player_airborne: lda ent_yvel ; check Y velocity sign 261 bmi player_airborne_variable_jump ; negative (falling) → skip to clear flag 262 lda force_full_jump ; check force-full-jump flag 263 bne player_airborne_wall_check ; nonzero → skip variable jump 264 lda joy1_held ; check if A button held 265 and #BTN_A ; A button mask 266 bne player_airborne_variable_jump ; held → keep rising (variable jump) 267 jsr reset_gravity ; A released → clamp Y speed to 0 (variable jump)
src/fixed/player_ground.asm lines 260–267 at 58ca1c3 · upstream ↗ 424reset_gravity_player: lda #$C0 ; player rest vel sub = $C0 425 sta ent_yvel_sub,x ; store Y sub velocity 426 lda #$FF ; player rest vel = $FF ($FFC0 = -0.25) 427 sta ent_yvel,x ; store Y velocity whole byte 428 rts ; player rest vel = $FFC0
src/fixed/movement.asm lines 424–428 at 58ca1c3 · upstream ↗ 272player_airborne_wall_check: ldy #$06 ; Y=6: check at foot height 273 jsr check_tile_horiz ; (Y=6: check at foot height) 274 lda $10 ; A = tile collision result 275 sta $0F ; save in $0F 276 ldy #$00 ; Y=0 for vertical movement 277 jsr move_vertical_gravity ; apply gravity and move vertically
src/fixed/player_ground.asm lines 272–277 at 58ca1c3 · upstream ↗ 208 LDA z:zjoy1_pressed 209 AND #a_button 210 BNE @skip 211 LDA aobject_ycoord_speed 212 BMI @skip 213 CMP #$01 214 BCC @skip 215 BEQ @skip 216 LDA #$01 217 STA aobject_ycoord_speed 218 LDA #$00 219 STA aobject_ycoord_speed_fraction
engine/run_megaman.asm lines 208–219 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.
- ^ abDown 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.
- ^Landing on Rush Coil launches Mega Man at
$06.$EE, 6.93 px/frame, once per bounce, and setsforce_full_jump, so releasing A doesn't cut that rise.Codeplasticsmoke/megaman3-disassembly-ca65How we know
32 lda $05A1 ; if Rush already bounced: skip 33 bne player_ground_normal_walk ; already bounced, normal walk 34 inc force_full_jump ; force full jump (no variable-jump cutoff) 35 lda #$EE ; Y speed = $06.EE (Rush Coil bounce) 36 sta ent_yvel_sub ; strong upward bounce 37 lda #$06 ; Y velocity whole = $06 (upward) 38 sta ent_yvel ; store Y velocity whole
src/fixed/player_ground.asm lines 32–38 at 58ca1c3 · upstream ↗ 260player_airborne: lda ent_yvel ; check Y velocity sign 261 bmi player_airborne_variable_jump ; negative (falling) → skip to clear flag 262 lda force_full_jump ; check force-full-jump flag 263 bne player_airborne_wall_check ; nonzero → skip variable jump
src/fixed/player_ground.asm lines 260–263 at 58ca1c3 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Checked by a second AI model, 2026-10-21.
- ^A hit (state
$06) sets Mega Man's vertical speed to the resting$FF.$C0on its first frame, then each frame applies gravity and pushes him against his facing at 0.5 px/frame ($00.$80) until the hurt animation's state reaches 9; a hit during a slide doesn't push him.Codeplasticsmoke/megaman3-disassembly-ca65How we know
750player_damage_anim_set: jsr reset_sprite_anim ; set player damage animation 751 lda #$00 ; clear walk/shoot flag 752 sta shoot_anim_timer ; clear walk/shoot flag 753 jsr reset_gravity ; reset vertical velocity
src/fixed/player_states.asm lines 750–753 at 58ca1c3 · upstream ↗ 776player_knockback_physics: lda $3E ; check saved OAM for special cases: 777 cmp #$10 ; $10 = sliding (no knockback physics) 778 beq player_knockback_landing ; sliding → skip knockback 779 cmp #$79 ; >= $79 = special state (skip physics) 780 bcs player_knockback_landing ; special OAM → skip knockback physics 781 ldy #$00 ; Y = 0 (player slot) 782 jsr move_vertical_gravity ; apply gravity, carry = landed 783 lda #$80 ; knockback speed = $00.80 (half pixel/frame) 784 sta ent_xvel_sub ; set knockback X speed sub 785 lda #$00 ; knockback X speed whole = 0 786 sta ent_xvel ; x_speed whole = 0 787 lda ent_flags ; save facing before move ⋮
src/fixed/player_states.asm lines 776–790 at 58ca1c3 · upstream ↗ 806player_knockback_landing: lda ent_anim_state ; ent_anim_state = animation/collision state 807 cmp #$09 ; $09 = landed after knockback 808 bne player_knockback_done ; not landed → continue knockback
src/fixed/player_states.asm lines 806–808 at 58ca1c3 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Checked by a second AI model, 2026-10-21.
- ^ abMega Man 3 starts the invincibility after the knockback: when the hurt state ends it sets
invincibility_timerto 60 ($3C), which the prelude counts down every frame. Mega Man 2 sets 111 at the moment of the hit.Codeplasticsmoke/megaman3-disassembly-ca65 · lsmmega/mm2How we know
828player_knockback_set_invincible: sta player_state ; set return player state 829 lda #$3C ; $39 = $3C (60 frames invincibility) 830 sta invincibility_timer ; 60 frames of invincibility
src/fixed/player_states.asm lines 828–830 at 58ca1c3 · upstream ↗ 657prelude_invincibility_timer: lda invincibility_timer ; load invincibility timer 658 beq prelude_charge_shot_check ; zero → skip 659 dec invincibility_timer ; decrement timer
src/fixed/game_loop.asm lines 657–659 at 58ca1c3 · upstream ↗ 141 lda invincibility_timer ; skip if invincibility active 142 bne metatile_cleanup_return ; immune → skip hazard check
src/fixed/collision.asm lines 141–142 at 58ca1c3 · upstream ↗ 11 LDA #$6F 12 STA z:zmegaman_invincibility_time
home/megaman_hit.asm lines 11–12 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.
- ^ abMega Man 3 moves weapon costs into two tables indexed by weapon:
weapon_cost, the units taken, andweapon_framerate, how many uses (or frames, for Rush Marine and Rush Jet) each take costs, counted on one shared counter. Needle Cannon costs 1 unit per 4 shots and Gemini Laser 2 per shot. Mega Man 2 writes the costs into the weapons' own routines, as its Air Shooter, Crash Bomber, and Metal Blade code shows.Codeplasticsmoke/megaman3-disassembly-ca65 · lsmmega/mm2revisedHow we know
254decrease_ammo_tick: ldy current_weapon ; Y = current weapon index 255 inc $B5 ; increment usage frame counter 256 lda $B5 ; load current count 257 cmp weapon_framerate,y ; compare to drain rate for this weapon 258 bne decrease_ammo_return ; not at threshold → return 259 lda #$00 ; reset frame counter to 0 260 sta $B5 ; store reset counter 261 lda player_hp,y ; load weapon ammo 262 and #$1F ; mask to ammo value (low 5 bits) 263 sec ; subtract ammo cost 264 sbc weapon_cost,y ; subtract ammo cost 265 bcs ammo_store_clamped ; no underflow → store result ⋮
src/fixed/player_warp.asm lines 254–268 at 58ca1c3 · upstream ↗ 289weapon_cost: .byte $00,$02,$01,$02,$02,$00,$01,$03 290 .byte $01,$01,$01,$01 ⋮ 295weapon_framerate: .byte $00,$01,$04,$01,$01,$00,$02 296 .byte $01,$01,$1E,$02,$1E ; Spark $01, R.Marine $1E, Shadow $02, R.Jet $1E
src/fixed/player_warp.asm lines 289–296 at 58ca1c3 · upstream ↗ 64WPN_BUSTER = $00 ; Mega Buster (arm cannon) 65WPN_GEMINI = $01 ; Gemini Laser 66WPN_NEEDLE = $02 ; Needle Cannon ⋮ 75WPN_RUSH_JET = $0B ; Rush Jet
include/constants.inc lines 64–75 at 58ca1c3 · upstream ↗ 95 LDA z:zweapon_energy + $01 96 SBC #$02 97 STA z:zweapon_energy + $01
home/weapons.asm lines 95–97 at 94f0bf3 · upstream ↗ 212 LDA z:zweapon_energy + $07 213 SBC #$04 214 BCC @skip_8 215 STA z:zweapon_energy + $07
home/weapons.asm lines 212–215 at 94f0bf3 · upstream ↗ 244 INC z:zweapon_consume_fraction 245 LDA z:zweapon_consume_fraction 246 CMP #$04 247 BNE @not_max_3 248 LDA #$00 249 STA z:zweapon_consume_fraction 250 DEC z:zweapon_energy + $06
home/weapons.asm lines 244–250 at 94f0bf3 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Revised after a check by a second AI model, 2026-10-21.
- ^ abMega Man 3 indexes each weapon's 256-byte damage table by the target's main routine id, one table for regular enemies and bosses alike, where Mega Man 2 gives each weapon a separate 14-entry boss table. In the Spark Shock table the entry for routine id
$C1is 7, and$58marks targets the shock freezes instead of damaging. That$C1is Magnet Man is the disassembly's labeling, not checked here.Codeplasticsmoke/megaman3-disassembly-ca65 · lsmmega/mm2revisedHow we know
290 ldy current_weapon ; weapon ID as table index 291 lda weapon_damage_ptr_lo,y ; grab damage table pointer for 292 sta temp_00 ; currently equipped weapon 293 lda weapon_damage_ptr_hi,y ; high byte of damage ptr 294 sta $01 ; store to pointer at $00-$01 295 ldy ent_routine,x ; if damage for main routine index 296 lda (temp_00),y ; is nonzero, do stuff 297 bne check_weapon_hit_spark_check ; nonzero damage → check weapon type 298 jsr check_weapon_hit_tink_sound ; else tink shot 299 jmp check_weapon_hit_restore_bank ; zero damage → tink and exit
src/bank1C_1D_entity_ai.asm lines 290–299 at 58ca1c3 · upstream ↗ 562weapon_damage_ptr_lo: .byte $00,$00,$00,$00,$00 ; Buster, Gemini, Needle, Hard, Magnet 563weapon_damage_ptr_lo_special: .byte $00,$00,$00,$00,$00,$00,$00 ; TopSpin, Snake, RushCoil, Spark, RushMarine, Shadow, RushJet 564weapon_damage_ptr_hi: .byte $A1,$A4,$A2,$A5,$A3 ; Buster, Gemini, Needle, Hard, Magnet 565weapon_damage_ptr_hi_special: .byte $A6,$A7,$A1,$A8,$A1,$A9,$A1 ; TopSpin, Snake, RushCoil, Spark, RushMarine, Shadow, RushJet
src/bank1C_1D_entity_ai.asm lines 562–565 at 58ca1c3 · upstream ↗ 424spark_damage_table: 425 .byte $00,$00,$58,$58,$58,$58,$00,$58 ; $00-$07: $58=freeze
src/bank0A_damage_tables.asm lines 424–425 at 58ca1c3 · upstream ↗ 451 .byte $00,$07,$01,$01,$00,$00,$00,$00 ; $C0: Needle=0, Magnet=7 (weakness!), Top=1, Shadow=1src/bank0A_damage_tables.asm line 451 at 58ca1c3 · upstream ↗ 301check_weapon_hit_spark_check: lda current_weapon ; if weapon is 302 cmp #WPN_SPARK ; anything but spark 303 bne check_weapon_hit_ack_check ; apply normal damage 304 lda (temp_00),y ; if damage value is zero, 305 beq check_weapon_hit_spark_freeze_done ; don't do anything 306 cmp #$58 ; if damage isn't magic number $58, 307 bne check_weapon_hit_ack_check ; apply normal damage
src/bank1C_1D_entity_ai.asm lines 301–307 at 58ca1c3 · upstream ↗ 388 LDA aobject_flag + 1 389 AND #objects_can_recoiled 390 BNE @immune_8 391 LDY z:zcurrent_boss 392 LDA @metal_blade_damage_table, Y
engine/weapons_bosses_damage.asm lines 388–392 at 94f0bf3 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Revised after a check by a second AI model, 2026-10-21.
- ^The release kept a debug feature on the second controller. Holding right on it lets Mega Man jump across the screen, and holding it right as he falls into a pit drains his health but leaves him impervious to damage.BookPane, Mega Man 3 · GameSpot, History of Mega Man
How we know
debug mode was activated by using the second controller … hold right on the second controller to give Mega Man a mega jump
excerpt, paragraph beginning "Determined players" · archived copy ↗ If you held the second-player gamepad to the right, then jumped into a pit, Mega Man would lose all his health and become impervious to damage.
1990, Mega Man III, Gameplay · archived copy ↗ The quote matches our archived copy.
- ^Mega Man's jump speed is
$04.$DF, 4.87 px/frame upward, out of water ($05.$80in water).Codelsmmega/mm2How we know
181tsa_regular_water_jump_speed_table: 182 .BYTE $04, $05 ⋮ 184tsa_regular_water_jump_speed_fraction_table: 185 .BYTE $DF, $80
engine/check_object_horizontal_move.asm lines 181–185 at 94f0bf3 · upstream ↗ 82 LDA tsa_regular_water_jump_speed_table, X 83 STA z:zjump_speed 84 LDA tsa_regular_water_jump_speed_fraction_table, X 85 STA z:zjump_speed_fraction
engine/tsa.asm lines 82–85 at 94f0bf3 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-20.
Checked by a second AI model, 2026-10-21.
Sources
Code
- plasticsmoke. 2026. “Mega Man 3 (U), annotated ca65 disassembly (plasticsmoke).” Commit 58ca1c3. plasticsmoke/megaman3-disassembly-ca65 @ 58ca1c3 · licence, all uses
- lsmmega. 2026. “mm2: Mega Man 2 disassembly (lsmmega/mm2).” Commit 94f0bf3. lsmmega/mm2 @ 94f0bf3 · licence, all uses
Primary
- Capcom and UDON Entertainment. 2013. “MM25: Mega Man & Mega Man X Official Complete Works.” UDON Entertainment. original · archived · licence, all uses
- America, Nintendo of. n.d. “NES Games (Nintendo of America release list).” Nintendo of America. original · archived · licence, all uses
- Co., Capcom and Ltd. as o. “Platinum Titles (Capcom IR site, English).” Capcom Co., Ltd. original · archived · licence, all uses
- U.S.A., Capcom. 1990. “Mega Man 3 Instruction Manual (NES, North America).” original · archived · licence, all uses
- Tony, Ponce,. 2013. “Keiji Inafune dropped mad Mega Man secrets on me.” original · archived · licence, all uses
- Chris, Greening, and Fujita, Harumi. 2015. “Harumi Fujita Interview: Ghosts, Goblins, and Gargoyles.” original · archived · licence, all uses
Secondary
- Christian, Nutt, and Speer, Justin. 2003. “The History of Mega Man.” original · archived · licence, all uses
- Salvatore, Pane,. 2016. “Mega Man 3 (Boss Fight Books).” Boss Fight Books. original · archived · licence, all uses
- staff, Electronic Gaming Monthly. 1990. “Electronic Gaming Monthly, issue 15 (1990-10).” Electronic Gaming Monthly, no. 15, pp. 16 and 64. Sendai Publishing. original · archived · licence, all uses
- Man, Tobar the 8 and GamePro editors. 1991. “GamePro Video Game Greatest Hits (1991-08): Mega Man 3 ProView.” GamePro Video Game Greatest Hits, August 1991, pp. 20-23. Infotainment World, Inc. original · archived · licence, all uses
- Nintendo Power editors. 1991. “Nintendo Power, issue 20 (1991-01).” Nintendo Power, vol. 20, pp. 8-27 and 85. Nintendo of America. original · archived · licence, all uses