On this page
  1. How it plays
  2. Across the series
  3. Cartridge
  4. Code lineage
  5. Related
  6. Mechanics
  7. References
  8. Sources

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

Interactive: rom-parts (needs JavaScript)

384 KB, a cell per 512 bytes, from 426 mapped regions

Code lineage

FromToMatchBytesWhat
Mega Man 2 airman-aiMega Man 3 doc-airidentical155Doc Robot's Air Man fight in Mega Man 3 uses Air Man's tornado tables from Mega Man 2 byte for byte (155 bytes): the five delays between rounds, then five patterns of six tornadoes each, with their Y and X speeds (whole and fraction) and how long each flies.
Mega Man 2 audio-controlMega Man 3 sound-driver-entryrewritten108Both games run their sound driver from the NMI, but Mega Man 3's is new code with a new layout. Mega Man 2 keeps the driver and its songs together in bank 12, queues up to 16 tracks, and works out a note's length as a table value times its channel's tempo byte. Mega Man 3 keeps the code in bank 22 and the data in bank 23, reading bank 24 for data addresses from $C000; it takes sound IDs from an eight-entry ring buffer in the fixed bank, and refuses a sound whose priority byte is lower than the one playing.
Mega Man 2 bankswitchMega Man 3 select-prg-banksrewritten37Both games flag a bank switch in progress and catch up on the frame's sound afterward if the NMI arrived during it, but Mega Man 3's switch is new code for a different board: Mega Man 2 maps one 16 KB bank at $8000 by writing its number to MMC1 one bit at a time, and Mega Man 3 writes two 8 KB banks, at $8000 and $A000, to the MMC3 as whole bytes.
Mega Man 2 divideMega Man 3 dividechanged103Mega Man 3's `divide_8bit` is Mega Man 2's `_divide_mod` with its zero-page operands one byte lower ($00-$03 for $01-$04). Its 16-bit division is Mega Man 2's `_divide_fraction` with its RAM moved and two changes: Mega Man 3 saves and restores X around the loop, and stores the low byte of each successful subtraction back in the remainder ($01), where Mega Man 2 writes it to $09, outside its shift chain.
Mega Man 2 enemy-collide-and-moveMega Man 3 gravity-moverrewritten132Both games move an object each frame by a speed with a fraction and change its Y speed by gravity, but Mega Man 3's movers are new code that Mega Man and the enemies share. Mega Man 2's enemy routine, left undecoded by its disassembly, checks the object's hits, moves it by its Y speed, subtracts gravity from that speed when a flag bit asks for it, moves it by its X speed in the way it faces, and removes it once it leaves the screen; walls and floors are a separate routine, and Mega Man moves with his own code. Mega Man 3's `move_vertical_gravity` and `move_right_collide` serve slot 0, the player, and every enemy alike, and run the tile check inside each move, snapping the object to the floor, ceiling, or wall it reaches.
Mega Man 2 find-objectsMega Man 3 enemy-spawn-checkchanged128Mega Man 3's `check_new_enemies` is the enemy half of Mega Man 2's `_find_objects`, instruction for instruction, with new RAM and table addresses: both take the screen's left and right edges, then on the side the screen moves toward spawn each placement that comes into range and on the other side move a second cursor past placements left behind. Mega Man 3 drops Mega Man 2's matching walk over a separate item list and the switch to the stage bank around it. The spawn routine each calls starts the same way, skipping a placement already in a slot and taking a free one, and then differs: Mega Man 2 fills the slot from per-type tables in its fixed bank, and Mega Man 3 skips a placement marked defeated and copies the type's properties from bank 0.
Mega Man 2 font-3Mega Man 3 chr-wily-background-bidentical160Mega Man 3's background CHR bank $66, mapped for Wily stage 6, holds 27 of the 31 non-blank tiles of Mega Man 2's third font set (the disassembly's `font_3.chr`), the longest aligned run 10 tiles (160 bytes).
Mega Man 2 heatman-wily1-sprite-tiles-l11Mega Man 3 chr-player-and-weapon-spritesidentical384Mega Man 3's sprite CHR banks $00-$01, mapped at sprite tiles $00-$7F throughout play, start from Mega Man 2's first 128 sprite tiles (the disassembly's `megaman_capsule_e_tank_bullet_mega_buster.chr`): 84 of the 127 non-blank tiles are the same at the same numbers, the longest run tiles $20-$37 (384 bytes).
Mega Man 2 heatman-wily1-sprite-tiles-l11Mega Man 3 chr-stage-spritesidentical336The first 32 tiles of 17 of Mega Man 3's sprite CHR banks ($08, $0A, $0C, $0F, $11, $13, $15, $1D, $20, $24, $26, $27, $2A, $2C, $2E, $32, and $3C) are Mega Man 2's sprite tiles $60-$7F, from the same set as Mega Man's own: 29 of the 32 are the same at the same numbers, the longest run tiles $0B-$1F (336 bytes).
Mega Man 2 joyMega Man 3 read-controllersrewritten88Both games strobe the controllers and merge each port's two data bits, but Mega Man 3's routine is new code. Mega Man 2's `_joy` reads one pad after the other and leaves the newly pressed buttons to the frame wait that calls it; Mega Man 3's `read_controllers` reads both pads in one loop, works out the new presses itself, and clears the d-pad when opposite directions are held together.
Mega Man 2 metalman-sprite-tiles-l199Mega Man 3 chr-doc-robot-spritesidentical144Mega Man 3's sprite CHR bank $22 holds 17 tiles of Mega Man 2's boss sets, 9 from Wood Man's and 8 from Heat Man's, and bank $21 holds 4 of Crash Man's; the longest run is 9 of Wood Man's tiles (144 bytes).
Mega Man 2 nmiMega Man 3 nmirewritten231Both games' NMI handlers copy the sprites by DMA, write the queued screen and palette updates, set the scroll, and run the sound driver, but Mega Man 3's handler is new code. Mega Man 2's offsets the scroll for the Mecha Dragon and puts the sound off when the NMI interrupts a bank switch; Mega Man 3's also loads the MMC3's scanline counter for the frame's split-screen interrupt and picks the interrupt handler for the screen mode.
Mega Man 2 nmi-waitMega Man 3 task-schedulerrewritten146Both games run a stage a frame at a time in step with the NMI, but Mega Man 3's frame loop is new code built on a task scheduler. Mega Man 2's stage loop calls its routines in turn and then spins in `_nmi_wait_0e` until the NMI sets a flag, reading the pads after it. Mega Man 3 runs up to four tasks, each resumed from its own saved stack pointer; `gameplay_frame_loop` gives up the CPU for a frame through the scheduler, which reads the controllers only when it resumes task 0.
Mega Man 2 opening-title-tilesMega Man 3 chr-title-backgroundidentical256Mega Man 3's title screen background tiles (CHR banks $76-$77) are largely Mega Man 2's title set (`title.chr`, loaded at `_load_title_chr`), moved a few tile numbers: 102 of their 128 non-blank tiles appear in it, 96 different ones, in runs of up to 16 tiles (256 bytes).
Mega Man 2 stage-selectMega Man 3 stage-select-inputrewritten298Both games' stage selects move a cursor over the bosses' portraits and start the chosen stage, but Mega Man 3's is new code. Mega Man 2's `_stage_select` blanks a beaten boss's portrait by writing empty tiles to the name table, and on a d-pad press calls `_stage_select_set` to move the cursor; Mega Man 3 keeps the cursor's column and row apart, moves each by a table offset and ignores a move off its 3 by 3 grid, redraws the six sprites of Mega Man's eyes in the center portrait for the cursor's position, and confirms on A as well as Start.
Mega Man 2 tsa-collisionMega Man 3 tile-check-verticalrewritten333Both games find the 32-pixel block at a point in the screen's layout and then its 16-pixel quarter, but Mega Man 3's tile check is new code with a new type format. Mega Man 2's `_tsa_collision` tests one point a call and takes its type from the quarter byte's top two bits, which a per-stage table remaps; Mega Man 3's `check_tile_collision` tests a list of points from a hitbox table in one call, clamps them to the screen, takes each type from the upper four bits of the tile's entry in a table at $BF00 in the stage bank, and ORs the types together.
Mega Man 2 wily-sprite-tiles-b8Mega Man 3 chr-screen-spritesidentical96Mega Man 3's sprite CHR bank $3C holds 13 of the 23 non-blank tiles of Mega Man 2's set of Dr. Wily bowing down (the disassembly's `dogeza.chr`), six of them in a run (96 bytes).
Mega Man 3 boss-door-closeMega Man 4 boss-door-animationchanged207Mega Man 4's first boss door routine follows Mega Man 3's `close_boss_door` step for step: the door sound, then four 16x16 blocks of tiles and attributes through the same buffer, one every 4 frames. Mega Man 4 runs it from the fixed bank, with the stage's bank mapped at $A000, and reads the door's addresses and tiles from fixed places in that bank ($B570-$B57B), where Mega Man 3 indexes tables in its door bank by the door's number.
Mega Man 3 boss-door-openMega Man 4 boss-door-animationchanged195Mega Man 4's second boss door routine follows Mega Man 3's `open_boss_door` the same way, with the same changes: it runs from the fixed bank and reads its door's data from $B57C-$B587 in the stage's bank.
Mega Man 3 chr-password-backgroundMega Man 4 chr-wily1-backgroundidentical416Mega Man 4 has Mega Man 3's 26 letter tiles, A to Z, byte for byte (416 bytes), in its bank 19 at $9800. Mega Man 3 has two copies, in its password screen tiles (after its digits 0 to 9) and in its stage start sprite tiles; Mega Man 4's digits before them differ.
Mega Man 3 chr-player-and-weapon-spritesMega Man 4 chr-common-spritesidentical912The first 57 sprite tiles ($00-$38) of the set Mega Man 4 shares across its stages (912 bytes) are byte for byte the first 57 tiles of Mega Man 3's sprite CHR banks $00-$01, the set it maps throughout play. Of the first 128 tiles, 96 are the same at the same numbers.
Mega Man 3 chr-title-backgroundMega Man 4 chr-menu-and-cossack-map-backgroundchanged2,048Mega Man 4's bank 20 holds, at $8800-$8FFF, Mega Man 3's 128 title screen background tiles (CHR banks $76-$77), the same in all but two: tiles $20 and $2F, which in Mega Man 4 are plain outlined squares.
Mega Man 3 collide-moversMega Man 4 entity-moverschanged248Mega Man 4's four routines that move an entity by its speed and stop it at a wall, floor, or ceiling follow Mega Man 3's `move_right_collide`, `move_left_collide`, `move_down_collide`, and `move_up_collide` step for step. Each saves the player's position before the move, checks for a platform, pushes the player off it, and on a push that crosses a screen retries with the opposite side's tile check. Two things changed. Each tile check is one call, where Mega Man 3 calls its tile check and then `update_collision_flags`. And when the right mover hits a solid tile, Mega Man 4 first copies $45 to $3F for the player, which its disassembly reads as the ground tile type. Two of the screen-crossing tests also test their two flags in the other order, to the same effect.
Mega Man 3 divideMega Man 4 entity-aimidentical103Mega Man 4's 8-bit and 16-bit division routines, used to aim enemies, are Mega Man 3's `divide_8bit` and its 16-bit version, byte for byte (103 bytes), at $FC14 in its fixed bank where Mega Man 3 has them at $FCEB.
Mega Man 3 drain-ppu-bufferMega Man 4 nametable-flush-ppu-controlidentical37Mega Man 4's name table buffer flush is Mega Man 3's `drain_ppu_buffer`, byte for byte (37 bytes). Mega Man 4 follows it with four short routines: two that change PPUCTRL and two that turn rendering off and on.
Mega Man 3 enemy-spawn-checkMega Man 4 spawn-enginerelocated128Mega Man 4's enemy spawn engine is Mega Man 3's `check_new_enemies` instruction for instruction, moved from bank 26 at $9C00 to bank 56 at $8000; only the addresses of the stage's placement tables and one zero-page variable ($2E in Mega Man 3, $2F in Mega Man 4) differ.
Mega Man 3 fill-nametableMega Man 4 fill-nametableidentical76Mega Man 4's routine that fills a name table and its attributes with one value is Mega Man 3's `fill_nametable`, byte for byte.
Mega Man 3 frequency-outputMega Man 4 frequency-outputidentical224Mega Man 4's code that writes each channel's pitch to the APU, with vibrato, detune, and slides, is Mega Man 3's, byte for byte at the same address.
Mega Man 3 music-parserMega Man 4 sfx-streamidentical321Mega Man 4's sound effect reader is Mega Man 3's (labeled `parse_music_data` there), byte for byte at the same address.
Mega Man 3 note-frequencyMega Man 4 note-frequencyidentical220Mega Man 4's note-to-pitch routines are Mega Man 3's, byte for byte at the same address.
Mega Man 3 plain-moversMega Man 4 plain-moverschanged258Mega Man 4's routines that move an entity by its speed without checking tiles, and apply gravity, follow Mega Man 3's with the entity arrays moved, and with four changes. Mega Man 4 drops Mega Man 3's routine that sets a behind-the-background flag from the tile hit. Its gravity tests one flag at $43 first, where Mega Man 3 tests for the player and then a flag at $B9. It drops Mega Man 3's exemption, for one animation ($13), from the cap on falling speed. And when gravity resets, it sets one speed ($FF00) for every entity, where Mega Man 3 sets $FFC0 for the player and $FFAB for the rest.
Mega Man 3 play-soundMega Man 4 play-soundidentical340Mega Man 4's routine that starts a song or an effect, and takes the stop, pause, fade, and transpose commands, is Mega Man 3's, byte for byte at the same address.
Mega Man 3 read-controllersMega Man 4 read-controllersidentical88Mega Man 4's controller read, which works out the new presses and cancels opposite directions, is Mega Man 3's `read_controllers`, byte for byte.
Mega Man 3 rendering-on-offMega Man 4 nametable-flush-ppu-controlrelocated40Mega Man 4's four routines after its name table buffer flush, two that reset or set bits of PPUCTRL and two that turn rendering off and on, are Mega Man 3's `disable_nmi`, `dead_code_enable_nmi`, `rendering_off`, and `rendering_on` instruction for instruction; only the zero-page counter the last two step differs ($EE in Mega Man 3, $EA in Mega Man 4).
Mega Man 3 sfx-channelMega Man 4 music-track-readeridentical587Mega Man 4's music track reader is Mega Man 3's (labeled `process_sfx_channel` there), byte for byte at the same address, so the two games read the same track format.
Mega Man 3 sound-driver-entryMega Man 4 sound-driver-entrychanged108Mega Man 4's sound bank opens with Mega Man 3's entry jumps, multiply, and sound-data read, at the same addresses; only the two bank numbers the read maps differ: the overflow data bank, $18 in Mega Man 3 and $1D in Mega Man 4, and the data bank it restores, $17 and $1F.
Mega Man 3 sound-driver-tablesMega Man 4 sound-driver-tableschanged299Mega Man 4's sound driver tables, through the note period table, are Mega Man 3's at the same addresses; the 37 bytes after it ($8A1B-$8A3F), all zero in Mega Man 3, hold data in Mega Man 4.
Mega Man 3 sound-driver-updateMega Man 4 sound-driver-updateidentical146Mega Man 4's per-frame sound tick is Mega Man 3's `sound_driver_update`, byte for byte at the same address.
Mega Man 3 sprite-offsets-defaultMega Man 4 anim-0c-player-sprite-dataidentical304304 bytes of Mega Man 3's default sprite position offsets, $A078-$A1A7 of its bank $19, are byte for byte in Mega Man 4's player animation bank $0C at $97BE-$98ED. They are position sets $08-$17 in both games' pointer tables: sixteen lists of signed Y and X offsets, one pair per tile, 4 to 12 tiles each.
Mega Man 3 task-schedulerMega Man 4 task-schedulerrelocated146Mega Man 4's cooperative task scheduler, with its routines to start, kill, and yield tasks, is Mega Man 3's `task_scheduler` instruction for instruction; it sits 5 bytes lower, and only its jump and call addresses differ.
Mega Man 3 volume-envelopeMega Man 4 volume-envelopeidentical379Mega Man 4's volume envelope and fade code is Mega Man 3's, byte for byte at the same address.
Mega Man 3 wall-snapMega Man 4 tile-alignmentrelocated102Mega Man 4's four routines that push an entity out of a wall, ceiling, or floor after a tile hit are Mega Man 3's `snap_x_to_wall_right`, `snap_x_to_wall_left`, `snap_y_to_ceil`, and `snap_y_to_floor` instruction for instruction; only the addresses of the entity position arrays differ. Mega Man 3 follows them with two calls into its boss door bank, which Mega Man 4 doesn't have there.

Mechanics

MechanicKindHow
JumpOne speedevery jump takes off at the same speed; Rush Coil throws him far higher
GravityOne gravitythe same gravity as Mega Man 2, but a slower top falling speed
Variable jump heightRelease capletting go of A on the way up starts the fall at once
RunningSteppedone walking speed, with a brief halt after the first step
Air controlDirecta held direction moves him at walking speed in the air
Ground slideTimedDown and A: a short, fast, low dash that A can turn into a jump partway
Invincibility framesFrame timera spell of invincibility that starts once the knockback ends
KnockbackFixed shovea hit pushes him slowly back until the hurt animation ends
Weapon energyPer weaponeach weapon spends energy at its own rate, some per shot and some per few shots
Boss weaknessEvery enemyevery weapon does a set damage to each enemy and boss alike
Every claim about this game, by concept (64)
generalMega Man 3's cartridge ROM, counted by part of the game: each stretch of code or data goes to the part the disassembly's labels and comments say it serves, and the value sums the bytes of each part.Code notes
Mega Man 3 came out in Japan on 28 September 1990, as Rockman 3, and in North America in November 1990.Publisher
Mega Man 3 starts on a screen of eight Robot Masters' faces, where the player picks which one to fight.Manual
The manual advises taking the Robot Masters in an order that gives the player each weapon before the battle it helps in.Manual
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.Web
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.Manual
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.Manual
Mega Man 3 introduces Proto Man, Mega Man's brother, whom Inafune wanted players to read as either a rival or a comrade.Web
Leaving 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.Book
After Kitamura left, Capcom put Masahiko Kurokawa, a programmer credited as Patariro, in charge of Mega Man 3.Book
Kurokawa left halfway through development, and Keiji Inafune took over his work, with two months to finish the second half of the game.Book
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.Interview
Yasuaki Fujita composed most of Mega Man 3's music.Book
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.Book
Electronic Gaming Monthly scored Mega Man 3 9 out of 10.Book
American magazines praised Mega Man 3. EGM named it the year's best sequel, and GamePro called it "A Mega-Hit!"Magazine
Nintendo 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.Magazine
Famitsu rated Mega Man 3 lower than Mega Man 2.Book
Mega Man 3 sold 1.08 million copies, by Capcom's count as of 30 June 2026.Publisher
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.Book
Pane credits Mega Man 3 with settling Mega Man as Capcom's mascot and Inafune as the series' guiding figure.Book
Doc Robot's Air Man fight in Mega Man 3 uses Air Man's tornado tables from Mega Man 2 byte for byte (155 bytes): the five delays between rounds, then five patterns of six tornadoes each, with their Y and X speeds (whole and fraction) and how long each flies.Code
Mega Man 3's sprite CHR banks $00-$01, mapped at sprite tiles $00-$7F throughout play, start from Mega Man 2's first 128 sprite tiles (the disassembly's megaman_capsule_e_tank_bullet_mega_buster.chr): 84 of the 127 non-blank tiles are the same at the same numbers, the longest run tiles $20-$37 (384 bytes).Code
The first 32 tiles of 17 of Mega Man 3's sprite CHR banks ($08, $0A, $0C, $0F, $11, $13, $15, $1D, $20, $24, $26, $27, $2A, $2C, $2E, $32, and $3C) are Mega Man 2's sprite tiles $60-$7F, from the same set as Mega Man's own: 29 of the 32 are the same at the same numbers, the longest run tiles $0B-$1F (336 bytes).Code
Mega Man 3's title screen background tiles (CHR banks $76-$77) are largely Mega Man 2's title set (title.chr, loaded at _load_title_chr), moved a few tile numbers: 102 of their 128 non-blank tiles appear in it, 96 different ones, in runs of up to 16 tiles (256 bytes).Code
Mega Man 3's background CHR bank $66, mapped for Wily stage 6, holds 27 of the 31 non-blank tiles of Mega Man 2's third font set (the disassembly's font_3.chr), the longest aligned run 10 tiles (160 bytes).Code
Mega Man 3's sprite CHR bank $3C holds 13 of the 23 non-blank tiles of Mega Man 2's set of Dr. Wily bowing down (the disassembly's dogeza.chr), six of them in a run (96 bytes).Code
Mega Man 3's sprite CHR bank $22 holds 17 tiles of Mega Man 2's boss sets, 9 from Wood Man's and 8 from Heat Man's, and bank $21 holds 4 of Crash Man's; the longest run is 9 of Wood Man's tiles (144 bytes).Code
Both games run their sound driver from the NMI, but Mega Man 3's is new code with a new layout. Mega Man 2 keeps the driver and its songs together in bank 12, queues up to 16 tracks, and works out a note's length as a table value times its channel's tempo byte. Mega Man 3 keeps the code in bank 22 and the data in bank 23, reading bank 24 for data addresses from $C000; it takes sound IDs from an eight-entry ring buffer in the fixed bank, and refuses a sound whose priority byte is lower than the one playing.Code
Both games run a stage a frame at a time in step with the NMI, but Mega Man 3's frame loop is new code built on a task scheduler. Mega Man 2's stage loop calls its routines in turn and then spins in _nmi_wait_0e until the NMI sets a flag, reading the pads after it. Mega Man 3 runs up to four tasks, each resumed from its own saved stack pointer; gameplay_frame_loop gives up the CPU for a frame through the scheduler, which reads the controllers only when it resumes task 0.Code
Both games' stage selects move a cursor over the bosses' portraits and start the chosen stage, but Mega Man 3's is new code. Mega Man 2's _stage_select blanks a beaten boss's portrait by writing empty tiles to the name table, and on a d-pad press calls _stage_select_set to move the cursor; Mega Man 3 keeps the cursor's column and row apart, moves each by a table offset and ignores a move off its 3 by 3 grid, redraws the six sprites of Mega Man's eyes in the center portrait for the cursor's position, and confirms on A as well as Start.Code
Boss weaknessMega 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 $C1 is 7, and $58 marks targets the shock freezes instead of damaging. That $C1 is Magnet Man is the disassembly's labeling, not checked here.Code
Controller readingBoth games strobe the controllers and merge each port's two data bits, but Mega Man 3's routine is new code. Mega Man 2's _joy reads one pad after the other and leaves the newly pressed buttons to the frame wait that calls it; Mega Man 3's read_controllers reads both pads in one loop, works out the new presses itself, and clears the d-pad when opposite directions are held together.Code
Coyote timeA grounded frame tests the floor before it moves Mega Man: if no floor point under his last position is solid, he falls 0.25 px, takes the jumping animation and the airborne state, and that frame's horizontal move is the air move, 1.30 px/frame toward a held direction or none. No grace period follows: only the ground state reads a jump press, and it runs only on frames that found a floor.Code
Enemy spawningMega Man 3's check_new_enemies is the enemy half of Mega Man 2's _find_objects, instruction for instruction, with new RAM and table addresses: both take the screen's left and right edges, then on the side the screen moves toward spawn each placement that comes into range and on the other side move a second cursor past placements left behind. Mega Man 3 drops Mega Man 2's matching walk over a separate item list and the switch to the stage bank around it. The spawn routine each calls starts the same way, skipping a placement already in a slot and taking a free one, and then differs: Mega Man 2 fills the slot from per-type tables in its fixed bank, and Mega Man 3 skips a placement marked defeated and copies the type's properties from bank 0.Code
Enemy targetingMega Man 3's divide_8bit is Mega Man 2's _divide_mod with its zero-page operands one byte lower ($00-$03 for $01-$04). Its 16-bit division is Mega Man 2's _divide_fraction with its RAM moved and two changes: Mega Man 3 saves and restores X around the loop, and stores the low byte of each successful subtraction back in the remainder ($01), where Mega Man 2 writes it to $09, outside its shift chain.Code
Game loopBoth games' NMI handlers copy the sprites by DMA, write the queued screen and palette updates, set the scroll, and run the sound driver, but Mega Man 3's handler is new code. Mega Man 2's offsets the scroll for the Mecha Dragon and puts the sound off when the NMI interrupts a bank switch; Mega Man 3's also loads the MMC3's scanline counter for the frame's split-screen interrupt and picks the interrupt handler for the screen mode.Code
GravityMega 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).Code
Mega Man 3 moves Mega Man vertically before horizontally. Every frame on the ground or in the air first runs the airborne routine: a rise without A held is cut (release-cut), then move_vertical_gravity moves him by his vertical speed, takes gravity from it, and tests the floor under a fall or the ceiling over a rise. Only then does the frame's horizontal move run: the air move if he is still airborne, the ground state's move if he stood on a floor.Code
Gravity takes $40/256 = 0.25 px/frame from Mega Man's upward speed every frame out of water, after the frame's vertical move.Code
A fall is capped at 7 px/frame: when gravity takes the speed's whole byte below $F9, apply_gravity sets it to $F9.$00.Code
Both games move an object each frame by a speed with a fraction and change its Y speed by gravity, but Mega Man 3's movers are new code that Mega Man and the enemies share. Mega Man 2's enemy routine, left undecoded by its disassembly, checks the object's hits, moves it by its Y speed, subtracts gravity from that speed when a flag bit asks for it, moves it by its X speed in the way it faces, and removes it once it leaves the screen; walls and floors are a separate routine, and Mega Man moves with his own code. Mega Man 3's move_vertical_gravity and move_right_collide serve slot 0, the player, and every enemy alike, and run the tile check inside each move, snapping the object to the floor, ceiling, or wall it reaches.Code
Ground slideDown 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.Verified
Starting a slide, Mega Man 3 first tests for a wall 8 and 22 px ahead of his center at its height, and a wall there cancels the press. A slide lowers him 2 px, tests the floor at x − 15, x, and x + 15, 10 px below his lowered center, and moves with a wall point 16 px ahead, at 5 px above and 7 px below that center. A turn, a wall, the timer's end, or a jump press leads to the standing test, the ceiling points 12 px over his lowered center.Code
A slide that ends on open ground leaves Mega Man in the ground state with the walking animation, still 2 px low; the next frame's floor test pushes him back up. That walking animation moves him on the next frame toward his facing, so with no direction held he steps once more at 1.30 px/frame and then pauses, and with one held he walks on at once. A slide whose floor test finds nothing ends without moving that frame, and he falls from the next.Verified
HitboxMega Man's position is his center. A fall tests the floor at x − 7, x, and x + 7, 12 px below it, and a rise tests the ceiling at x − 7 and x + 7, 12 px above it; a horizontal move tests x + 8 or x − 8 at 11 px above, level with, and 11 px below the center. Each point reads the 16 px tile holding it.Code
When a horizontal move puts a wall point in a solid tile, the move routine pushes Mega Man back by the point's depth into the tile, so x + 8 ends on the wall's first column moving right and x − 8 on the first column past it moving left. The X fraction stays as it was, and his speed and state are untouched, so he walks in place against the wall.Code
When a rise puts a ceiling point, x − 7 or x + 7 at 12 px above his center, in a solid tile, snap_y_to_ceil adds 16 − ((Y − 12) mod 16) to Mega Man's Y pixel, which puts that point on the row under the tile, keeps the Y fraction, and sets the resting speed, 0.25 px/frame down; he stays airborne. Since a jump runs the airborne routine on its press frame, a ceiling within the first frame's 4.89 px is met on that frame.Code
Invincibility framesMega Man 3 starts the invincibility after the knockback: when the hurt state ends it sets invincibility_timer to 60 ($3C), which the prelude counts down every frame. Mega Man 2 sets 111 at the moment of the hit.Code
JumpA 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.Code
Landing on Rush Coil launches Mega Man at $06.$EE, 6.93 px/frame, once per bounce, and sets force_full_jump, so releasing A doesn't cut that rise.Code
When a fall's floor points find a solid tile, snap_y_to_floor subtracts (Y + 12) mod 16 from Mega Man's Y pixel, which puts his feet on the tile's top, and leaves the Y fraction as it was; his vertical speed becomes the resting $FF.$C0, 0.25 px/frame down. Every grounded frame repeats the fall, so standing still his Y pixel holds while the fraction steps by $40 each frame: in Top Man's stage start in Mesen it cycles through $00, $40, $80, and $C0.Verified
A jump lifts Mega Man on its press frame: the ground state sets the jump speed and runs the airborne routine at once, which moves him 4.89 px up from where that frame's floor test left him (the test takes him 0.25 px down, or, when that crosses into the next pixel and the snap puts his feet back on the floor, 0.75 px up), takes gravity, and gives the frame the air move, 1.30 px/frame toward a held direction or none, in place of the ground move. A press in a walking pause still jumps, since the press is read before the walk.Verified
A landing frame moves Mega Man only vertically: the airborne routine snaps him onto the floor, sets the ground state and the turning animation already on its second frame, and returns before the air move. From the next frame he walks at once if a direction is held, with no pause. An A press on the landing frame is lost, since the airborne state reads no presses.Verified
KnockbackA hit (state $06) sets Mega Man's vertical speed to the resting $FF.$C0 on 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.Code
PRG bank switchingBoth games flag a bank switch in progress and catch up on the frame's sound afterward if the NMI arrived during it, but Mega Man 3's switch is new code for a different board: Mega Man 2 maps one 16 KB bank at $8000 by writing its number to MMC1 one bit at a time, and Mega Man 3 writes two 8 KB banks, at $8000 and $A000, to the MMC3 as whole bytes.Code
RunningMega 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.Code
The turning animation, $0D, has 2 frames of 6 ticks each: its sequence's count byte is 1 and its tick byte 5, and the sprite engine advances a frame when the tick that started equal to the tick byte ends. While it shows its first frame the ground state doesn't move Mega Man.Code
On the ground Mega Man 3 picks the move from his animation. Standing, a held direction faces him that way, starts the turning animation, and moves him 1.30 px; on the turning animation's first frame he doesn't move; once it reaches its second, a held direction starts the walking animation and moves him, and nothing held stands him. Walking, a direction matching his facing moves him; anything else, letting go or the other direction, starts the turning animation and moves him once more toward his facing. Down alone does nothing on open ground.Code
Measured in Mesen from a standstill in Top Man's stage start, Right held moves Mega Man 1.30 px on its first frame, not at all on the next 5, and 1.30 px on every frame after; let go after a walk, he moves 1.30 px on one more frame and then stands.Verified
Mega Man 3's ordinary-floor movement differs from Mega Man 2's from the first frame of a walk: Right held from a standstill moves him 1.30 px, then nothing for 5 frames, then 1.30 px a frame, where Mega Man 2 moves 0.125 px a frame for 7 frames, then 1.375. A jump differs from its press frame, which lifts him 4.89 px where Mega Man 2 lifts him 0. Letting go of A mid-rise starts the fall at once, where Mega Man 2 cuts a rise of 2 px/frame or more to 1, and falls cap at 7 px/frame instead of 12. He keeps Mega Man 2's gravity, floor and ceiling corners, and 16 px tiles, and adds the slide.Code
Tile collisionBoth games find the 32-pixel block at a point in the screen's layout and then its 16-pixel quarter, but Mega Man 3's tile check is new code with a new type format. Mega Man 2's _tsa_collision tests one point a call and takes its type from the quarter byte's top two bits, which a per-stage table remaps; Mega Man 3's check_tile_collision tests a list of points from a hitbox table in one call, clamps them to the screen, takes each type from the upper four bits of the tile's entry in a table at $BF00 in the stage bank, and ORs the types together.Code
Variable jump heightOn 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.Code
Weapon energyMega Man 3 moves weapon costs into two tables indexed by weapon: weapon_cost, the units taken, and weapon_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.Code

References

  1. ^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.

    In the claim ledger

  2. ^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.

    In the claim ledger

  3. ^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.

    In the claim ledger

  4. ^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.

    In the claim ledger

  5. ^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.

    In the claim ledger

  6. ^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.

    In the claim ledger

  7. ^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.

    In the claim ledger

  8. ^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.

    In the claim ledger

  9. ^ 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.

    In the claim ledger

  10. ^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.

    In the claim ledger

  11. ^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.

    In the claim ledger

  12. ^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.

    In the claim ledger

  13. ^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).

    In the claim ledger

  14. ^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.

    In the claim ledger

  15. ^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.

    In the claim ledger

  16. ^ 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.

    In the claim ledger

  17. ^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.

    In the claim ledger

  18. ^ 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.

    In the claim ledger

  19. ^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.

    In the claim ledger

  20. ^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.

    In the claim ledger

  21. ^ 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/mm2revised
    How 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.

    In the claim ledger

  22. ^ 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-ca65
    How 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.

    In the claim ledger

  23. ^ 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/mm2
    How 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.

    In the claim ledger

  24. ^ 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/mm2
    How 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.

    In the claim ledger

  25. ^ 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-ca65revised
    How 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 movement
    
    src/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.

    In the claim ledger

  26. ^Landing on Rush Coil launches Mega Man at $06.$EE, 6.93 px/frame, once per bounce, and sets force_full_jump, so releasing A doesn't cut that rise.Codeplasticsmoke/megaman3-disassembly-ca65
    How 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.

    In the claim ledger

  27. ^A hit (state $06) sets Mega Man's vertical speed to the resting $FF.$C0 on 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-ca65
    How 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.

    In the claim ledger

  28. ^ abMega Man 3 starts the invincibility after the knockback: when the hurt state ends it sets invincibility_timer to 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/mm2
    How 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.

    In the claim ledger

  29. ^ abMega Man 3 moves weapon costs into two tables indexed by weapon: weapon_cost, the units taken, and weapon_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/mm2revised
    How 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.

    In the claim ledger

  30. ^ 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 $C1 is 7, and $58 marks targets the shock freezes instead of damaging. That $C1 is Magnet Man is the disassembly's labeling, not checked here.Codeplasticsmoke/megaman3-disassembly-ca65 · lsmmega/mm2revised
    How 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=1
    
    src/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.

    In the claim ledger

  31. ^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.

    In the claim ledger

  32. ^Mega Man's jump speed is $04.$DF, 4.87 px/frame upward, out of water ($05.$80 in water).Codelsmmega/mm2
    How 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.

    In the claim ledger

Sources

Code

Primary

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