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 4 is Capcom’s action platformer for the NES, the fourth in the series, released in Japan in December 1991 and in North America the next month1. The player picks which of eight Robot Masters to fight from a screen of their portraits, in any order2. Capcom chose them from about 70,000 boss designs that players sent in3. One was Dust Man, by the manga artist Yusuke Murata4.

The new Mega Buster charges its shot while B is held. The charge shot stayed in the series from then on5. A cleared stage can be played again, without its boss, to find items missed the first time6. Rush returns as a springboard, a submarine, and a jet sled, and new adaptors add floating platforms and a wire that pulls Mega Man up to a ledge7. Keiji Inafune designed its two new characters8: Dr. Cossack, the apparent villain, and his daughter Kalinka, whom Dr. Wily holds hostage to make Cossack fight9.

Electronic Gaming Monthly’s reviewers called it a safe bet for old and new fans, and noted that some of its weapons and bosses were recycled from earlier games10. Famitsu’s four reviewers split over its difficulty. One found it beyond his level and another called it a game for advanced players, while a third found it the same Mega Man its fans expected, with a charge shot that takes some getting used to11. GameSpot’s history of the series ranks it below Mega Man 2 and 3 and calls it the game where the series began to show its age12.

#How it plays

Every jump leaves the ground at the same speed. Let go of A on the way up and Mega Man stops rising at once13. Down and A start the slide, a low dash that lasts under half a second. A press of A without Down jumps out of it on the next frame14.

Tap B and the Mega Buster fires at once. Hold it and the next shot charges: let go after about half a second for a half-charged shot, or hold three times as long for a full one. Only the Mega Buster charges, not the weapons taken from bosses15.

A hit pushes him slowly back as he falls, until the hurt animation ends. A hit in the middle of a slide doesn’t push him at all16.

#Across the series

Against Mega Man 3, the jump leaves the ground a touch faster, and letting go of A stops the rise dead where Mega Man 3 turns it into a slow fall13. The slide runs five frames longer, and it can turn into a jump from its second frame, where Mega Man 3’s can’t until its ninth14. The knockback is unchanged16. The charge shot is new to the series here15,5, and GameSpot notes that going back into stages for hidden items, as here, later dominates the Mega Man X games6.

Cartridge

Interactive: rom-parts (needs JavaScript)

512 KB, a cell per 512 bytes, from 475 mapped regions

Code lineage

FromToMatchBytesWhat
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.
Mega Man 4 bank-switch-applyMega Man 5 bank-switchingidentical37Mega Man 5's routine that maps the two switchable PRG banks from their shadows, and then runs a sound request that arrived while it was busy, is Mega Man 4's, byte for byte (37 bytes). Mega Man 5 enters it through 6 new bytes that set both shadows from one bank number, the bank and the one after it.
Mega Man 4 bank24-tailMega Man 5 chr-bank-18identical83252 tiles of Mega Man 4's font in bank 36 ($BB00-$BE3F), which look like Japanese kana when drawn out, are byte for byte tiles in Mega Man 5's CHR at $30300-$3063F (832 bytes).
Mega Man 4 chr-menu-and-cossack-map-backgroundMega Man 5 chr-bank-18identical2,048Mega Man 5's CHR at $31800-$31FFF holds the 128 background tiles of Mega Man 4's bank 20 at $8800-$8FFF, byte for byte (2,048 bytes): the block Mega Man 4 took from Mega Man 3's title screen tiles, with Mega Man 4's two changed tiles.
Mega Man 4 chr-wily1-backgroundMega Man 5 chr-bank-19identical416Mega Man 5 has the 26 letter tiles, A to Z, that Mega Man 4 took from Mega Man 3, byte for byte (416 bytes), in its CHR at $32410.
Mega Man 4 distance-and-directionMega Man 5 distance-and-directionchanged181Mega Man 5's routines for an object's distance to the player on each axis, and the direction to him in 16 steps, are Mega Man 4's, with two changes. It adds two routines that measure the same two distances to another slot's object. And its direction routine starts by setting Y to 0, the player's slot, and falls into the copy of slot Y's position, where Mega Man 4 has a separate entry that copies the player's position and jumps on. The rest is byte for byte, except the address of the 48-byte direction table, which is the same in both and follows the code directly in Mega Man 5.
Mega Man 4 entity-aimMega Man 5 aim-and-divideidentical103Mega Man 5's 8-bit and 16-bit division routines are Mega Man 4's, which are Mega Man 3's, byte for byte (103 bytes), at $F207 in its fixed bank.
Mega Man 4 entity-moversMega Man 5 entity-moverschanged240Mega Man 5's routines that move an object right, left, down, or up and then check tiles, and for the player the platforms it stands on, follow Mega Man 4's with three changes besides addresses. The facing flag they set or clear is bit 5 of the object's flags, where Mega Man 4 uses bit 6. A right-wall hit no longer copies the player's ground tile type from $45 to $3F. And before a vertical move, Mega Man 5 saves the player's vertical screen in $03, where Mega Man 4 saves its horizontal screen.
Mega Man 4 fill-nametableMega Man 5 fill-and-clearidentical76Mega Man 5's routine that fills a name table and its attributes with one value is Mega Man 4's, byte for byte; Mega Man 5 follows it with routines that clear the sprite buffer and the object slots.
Mega Man 4 frequency-outputMega Man 5 frequency-outputidentical224Mega Man 5's code that writes each channel's pitch to the APU, with vibrato, detune, and slides, is Mega Man 4's, byte for byte at the same address.
Mega Man 4 music-track-readerMega Man 5 music-track-readeridentical587Mega Man 5's music track reader is Mega Man 4's, byte for byte at the same address.
Mega Man 4 nametable-flush-ppu-controlMega Man 5 nametable-flush-ppu-controlrelocated77Mega Man 5's name table buffer flush and the four PPU routines after it are Mega Man 4's instruction for instruction; only the zero-page counter the rendering switches step differs ($EA in Mega Man 4, $F0 in Mega Man 5).
Mega Man 4 note-frequencyMega Man 5 note-frequencyidentical220Mega Man 5's note-to-pitch routines is Mega Man 4's, byte for byte at the same address.
Mega Man 4 plain-moversMega Man 5 entity-collide-moverschanged345Mega Man 5's routines that move an object by its speed without checking tiles, and apply gravity, follow Mega Man 4's, with the gravity amount at $A1 instead of $99 and these changes. Eight bytes before the left mover clear the facing bit and fall into it. The player's gravity is skipped whenever a flag at $52 is set, where Mega Man 4 skips it only while a timer at $43 counts down. And Mega Man 5 adds four routines after them, one of which adds gravity to the vertical speed instead of subtracting it, capped at 7 pixels a frame.
Mega Man 4 platform-collisionMega Man 5 platform-collisionchanged288Mega Man 5's two checks for a platform object that the player meets moving vertically or horizontally, and their two distance helpers, follow Mega Man 4's test for test. Both walk the slots down from $17 and skip empty, off-screen, and non-solid ones. A one-way platform only catches a falling player, and the push is capped at 8 pixels. The changes: both checks also give up unless the moving object's own Y screen is 0. The horizontal check skips objects of type $02. The helper reads both of the shape's sizes from two tables through X, which it then sets to 0, the player's slot, where Mega Man 4 looks up the second size in the vertical check itself. The smaller box for a sliding player is chosen by `player_state` $02, where Mega Man 4 tests the player's sub-type for $10. And the horizontal distance helper no longer masks the screen difference to one bit. The four routines that push the player off a platform, which close Mega Man 4's region, sit after the position nudges in Mega Man 5.
Mega Man 4 play-soundMega Man 5 play-soundidentical340Mega Man 5's routine that starts a song or an effect, and takes the stop, pause, fade, and transpose commands, is Mega Man 4's, byte for byte at the same address.
Mega Man 4 queue-soundMega Man 5 queue-soundidentical27Mega Man 5's fixed-bank routine that adds a sound to the queue is Mega Man 4's, byte for byte (27 bytes), at $EC5B where Mega Man 4 has it at $F6BC.
Mega Man 4 read-controllersMega Man 5 read-controllerschanged94Mega Man 5's controller read is Mega Man 4's, byte for byte, with one addition: before it returns, it zeroes controller 2's new presses and held buttons ($15 and $17).
Mega Man 4 resetMega Man 5 resetidentical98Mega Man 5's reset begins with Mega Man 4's first 98 bytes, byte for byte at the same address ($FE00-$FE61): the interrupt, sound, and rendering shutdown, the wait through four vblanks, the PPU address precharge, the RAM clear, the sound queue's empty markers, and the PPU mask shadow. From the mapper setup on, the two differ.
Mega Man 4 sfx-streamMega Man 5 sfx-streamidentical321Mega Man 5's sound effect reader is Mega Man 4's, byte for byte at the same address.
Mega Man 4 sound-driver-entryMega Man 5 sound-driver-entrychanged108Mega Man 5's sound bank, bank $18, opens with Mega Man 4'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, $1D in Mega Man 4 and $1A in Mega Man 5, and the data bank it restores, $1F and $19.
Mega Man 4 sound-driver-tablesMega Man 5 sound-driver-tableschanged299Mega Man 5's sound driver tables, through the note period table, are Mega Man 4's at the same addresses. The 37 bytes after it ($8A1B-$8A3F), which hold data in Mega Man 4, are all zero in Mega Man 5, as in Mega Man 3.
Mega Man 4 sound-driver-updateMega Man 5 sound-driver-updateidentical146Mega Man 5's per-frame sound tick is Mega Man 4's, byte for byte at the same address.
Mega Man 4 spawn-engineMega Man 5 spawn-enginerelocated128Mega Man 5's spawn engine walks its stage's spawn list ahead of and behind the camera with Mega Man 4's code, instruction for instruction; only the addresses differ: the stage's placement tables, the two list cursors ($9E and $9F in Mega Man 4, $AD and $AE in Mega Man 5), the scroll direction flag ($2F, $AC), and the four window temporaries, two bytes higher.
Mega Man 4 spawn-entryMega Man 5 spawn-enemychanged173Mega Man 5's routine that spawns an enemy from a spawn list entry follows Mega Man 4's step for step: the same checks for a live copy and the no-respawn bitmap, and the same slot fill from the entry's position and the parameter tables for its code, with the tables and temporaries at other addresses. It changes two things: it keeps the spawn code in the object's $0510 byte, which Mega Man 4 clears, and it masks bit 7 off the flags parameter and, when that bit is clear, ends by calling `entity_facing_to_flags`.
Mega Man 4 task-schedulerMega Man 5 task-schedulerrelocated146Mega Man 5's cooperative task scheduler is Mega Man 4's instruction for instruction; it sits 6 bytes higher, and only its jump and call addresses differ.
Mega Man 4 tile-alignmentMega Man 5 position-nudgeschanged216Mega Man 5's four routines that push an object out of a wall, ceiling, or floor after a tile hit are Mega Man 4's, byte for byte but for one instruction: after a ceiling hit, Mega Man 5 clears the carry before adding where Mega Man 4 sets it, so the object ends one pixel higher than in Mega Man 4. Mega Man 5 follows them with four new routines that move an object along X or Y by the amount in $10 or $11 and compare its position with one saved in $02-$03.
Mega Man 4 volume-envelopeMega Man 5 volume-envelopeidentical379Mega Man 5's volume envelope and fade code is Mega Man 4's, byte for byte at the same address.

Mechanics

MechanicKindHow
JumpOne speedevery jump takes off at the same speed
Variable jump heightRelease capletting go of A stops the rise at once
Ground slideTimeda slide of under half a second that a press of A turns into a jump at once
Charge shotTiers on releasehold B to charge; let go for a half-charged shot or, held three times as long, a full one
KnockbackFixed shovea hit pushes him slowly back until the hurt animation ends
Every claim about this game, by concept (62)
generalMega Man 4'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 4, the fourth game in the series on the NES, came out in Japan on 6 December 1991 and in North America in January 1992.Publisher
Mega Man 4 has the player pick which of eight Robot Masters to fight from a screen of their portraits, in any order; they are Pharaoh Man, Toad Man, Bright Man, Dive Man, Ring Man, Drill Man, Dust Man, and Skull Man.Manual
Mega Man 4 adds the New Mega Buster, whose shot charges while B is held, and Capcom's developers say the charge shot became a staple of the series from this game on.Manual
Mega Man 4's helpers are Rush, who turns into a springboard (Rush Coil), a submarine (Rush Marine), and a flying sled (Rush Jet), and Flip-Top, a suitcase robot in some stages who hands out a power-up; two new adaptors launch small floating platforms (Balloon) and pull Mega Man up to a ledge or ceiling on a wire (Wire).Manual
In Mega Man 4 a cleared stage can be played again, without its Robot Master, to look for items missed the first time, and each Robot Master beaten gives a password to continue from.Manual
Mega Man 4's Robot Masters were picked from about 70,000 boss designs that players sent in to Capcom's contest, and the team scrapped a stage in progress to rebuild it for the winning Skull Man.Publisher
The manga artist Yusuke Murata sent in Dust Man to the Mega Man 4 contest.Publisher
Keiji Inafune designed Mega Man 4's two new story characters, Dr. Cossack and his daughter Kalinka; Hayato Kaji worked on the charge shot; and Yasuaki Fujita and Minae Fujii are among the game's composers.Publisher
Electronic Gaming Monthly's Review Crew called Mega Man 4 a safe bet for old and new fans of the series, and one remark noted that some weapons and bosses were recycled from earlier games.Magazine
Famicom Tsūshin's four Cross Review reviewers split over Mega Man 4's difficulty. The first found it beyond his own level, though a game learned by repetition that a good action player would want to take on; the second called it a puzzle of how to get through without dying, and noted the series' popularity in the US; the third, Mariko, called it a game for advanced action players and was quickly sent to game over in every stage; the fourth found it faithful to the series' tradition, the same Mega Man its fans expected, with a new charge shot that takes some getting used to (the atlas's translations).Magazine
Mega Man 4's apparent villain is Dr. Cossack, but Dr. Wily turns out to be behind him, having taken Cossack's daughter Kalinka hostage to force him into the fight.Web
GameSpot's history of the series ranks Mega Man 4 below Mega Man 2 and 3 and calls it the game where the series' invention began to run out and it began to show its age.Web
Mega Man 4's per-frame sound tick is Mega Man 3's sound_driver_update, byte for byte at the same address.Code
Mega 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.Code
304 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.Code
The 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.Code
Mega 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.Code
Mega 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.Code
Air controlEvery frame in the air the d-pad alone sets where Mega Man moves: the air routine copies the held Left or Right into his direction and moves him by his X speed that way, 1.30 px/frame, and with neither held he doesn't move. He turns at once, and nothing carries over from the ground.Code
Area transitionMega 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.Code
Mega 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.Code
Charge shotA B press fires a normal shot and sets the charge counter to 1; each frame B stays held in a state below 4 the counter rises by 1, looping from 100 back to 92. On release, a counter under 32 ($20) fires nothing more, 32 or more fires a half-charged shot, and 92 ($5C) or more a full one.Code
Controller readingMega 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.Code
Coyote timeBecause the ground state tests the floor before it moves him, Mega Man walks one frame past the edge before he falls: the frame whose move takes all three floor points off a ledge still counts as grounded, and on the next the floor test finds nothing after a 1 px drop, so he leaves the ground falling 1.25 px/frame and that frame moves him by the air's rules. His feet are then 1, 2, 3, 5, 7, and 9 px below the ledge on that frame and the five after (computed).Code
Mega Man 4 gives no grace jump off a ledge. The ground state reads A only after the air routine reports him standing, and the air state never reads it, so a press on the frame the floor test first fails, or on any later frame of the fall, doesn't jump.Code
Enemy spawningMega 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.Code
Enemy targetingMega 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.Code
Forced blankingMega 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.Code
Mega 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).Code
Game loopMega 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.Code
GravityMega 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.Code
Ground slideMega Man 4's slide keeps Mega Man 3's 2.5 px/frame but moves on 26 frames (a timer of $1A, counted after each move from the set-up frame on) where Mega Man 3's moves on 21 (a timer of 20). Its A test runs on every slide frame, the set-up's included: a fresh A press without Down jumps out whenever he has headroom, where Mega Man 3 waits for its 9th frame, and A with Down held keeps sliding. The set-up's own press comes with Down, and A held from it into the second frame is no fresh press, so the earliest jump out comes on the slide's 3rd frame.Verified
Down and a fresh A press start a slide only if the slide's start point, 15 px ahead of his center and 4 px below it, isn't in a wall; with a wall there the press does nothing, neither slide nor jump. The slide moves his Y pixel 2 px down and tests a lower, wider box: floor points 10 px below the new center at x-14, x, and x+14, and wall points 15 px ahead, level with it and 9 px below. With no floor under those points, ground 16 px below the center keeps the slide going, and none stands him up.Code
A slide ends in two ways. When the slide box finds no floor and no ground 16 px below his center either (slide-box), he stands up at once, with no headroom test, before that frame's A test and move. Otherwise it ends at the standing test, which a wall, the timer's end, or a turn sends it to. A turn (a held direction against the slide's) zeroes the timer and still moves him 2.5 px the new way on that frame. The test checks his standing headroom, three points 14 px above the slide's center (12 px above his standing one) at x-14, x, and x+14: a solid tile there keeps him sliding at 2.5 px/frame, testing again each frame, and otherwise he stands up in the walking pose, at walking speed, after that frame's move. A fresh A press without Down jumps out of it instead, at 5 px/frame and walking speed, if the same headroom is clear, from the 2 px lower slide center; the earliest such press comes on the slide's 3rd frame (slide-line).Verified
Jump physicsOne routine, entity_player_collide, moves Mega Man vertically in every state: by the sign of his speed's whole byte it moves him down or up by the speed (8.8 fixed point, positive up), takes gravity off the speed, and only then tests the floor points under a fall or the ceiling points over a rise. The ground, air, and slide states all run it before their horizontal move, so a frame's floor and ceiling tests use the X the frame started with and its wall test the new Y.Code
Gravity takes $40/256 = 0.25 px/frame from Mega Man's upward speed every frame; the stage start writes $40 to gravity ($99).Verified
When gravity takes Mega Man's speed below -7 px/frame (its whole byte under $F9), the gravity routine sets it to exactly $F9.$00, so he falls at most 7 px a frame.Code
On the ground Mega Man's vertical speed rests at -1 px/frame ($FF.$00), which every landing and every floor contact sets through entity_stop_y. So each grounded frame moves him 1 px down, takes gravity, and tests his floor points one row lower; ground there puts him back on it at the same speed, and none leaves him in the air, falling at 1.25 px/frame from the next frame.Verified
When a falling Mega Man's floor points find a solid tile, align_down subtracts the tested row's depth into its 16 px tile from his Y pixel, which puts the points on the tile's top row and his feet on its top, and keeps the Y fraction; the speed goes back to -1 px/frame. A fall of up to 7 px a frame always ends on the top of the tile it reaches.Code
Mega Man's position is his center. Standing, walking, and in the air his floor points are 12 px below it at x-7, x, and x+7; his ceiling points 9 px above it at x-7 and x+7; and his wall points 8 px to the side he moves toward, at 8 px above, level with, and 11 px below his center.Code
When the horizontal move puts a wall point in a solid tile, the move routine pushes Mega Man back by the point's depth into that 16 px 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, his speed, and his pose stay, so he walks in place against it.Code
When a rising Mega Man's move puts a ceiling point, x-7 or x+7 at 9 px above his center, in a solid tile, entity_align_to_tile adds 16 minus the point's depth into the tile to his Y pixel, which puts the point on the row under the tile, and entity_stop_y sets his speed to -1 px/frame; he stays in the air and falls from the next frame.Code
Nothing tests the ceiling before a jump starts: a fresh A press on the ground sets the jump speed and runs the air routine, whose rise is the first test. On tile floor the lowest ceiling he can walk under is 32 px up, 11 px over his ceiling points, so a jump there rises 5 px and then 4.75 px on its first two frames and meets the block on the 3rd, which turns it into a fall.Code
The frame a falling Mega Man's floor test finds ground puts him in the ground state with the walking pose ($04), and still moves him by the air's rules. On the next frame he walks on at once if he holds the direction he held on landing; none starts the pause pose, and the other direction starts it with one move that way, as a turn does. The air state reads no A press, so a press on the landing frame is lost, and the next frame's press jumps.Verified
Mega Man 4's movement on ordinary floor differs from Mega Man 3's in five numbers. The first is the jump's take-off speed: 5 px/frame ($05.$00) against Mega Man 3's 4.89 ($04.$E5). The second is the speed on the ground and after a landing: -1 px/frame ($FF.$00) against -0.25 ($FF.$C0). Third, a release cuts a rise to 0, where Mega Man 3 sets the same -0.25. Fourth, the slide timer starts at 26 ($1A) against 20 ($14), so the slide moves on 26 frames against 21 (slide-line, mega-man-3/slide). Fifth, Mega Man 4 tests for the jump out of a slide on every slide frame, where Mega Man 3 skips the test while the timer is 12 ($0C) or more, so the earliest jump out comes on the 3rd frame against the 9th.Code
KnockbackMega Man 4 keeps Mega Man 3's knockback, 0.5 px/frame ($00.$80) against his facing under gravity until the hurt animation reaches 9, with no push when the hit lands during a slide.Code
Music driverMega 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.Code
Mega 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.Code
Mega Man 4's note-to-pitch routines are Mega Man 3's, byte for byte at the same address.Code
Mega Man 4's volume envelope and fade code is Mega Man 3's, byte for byte at the same address.Code
Mega 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.Code
Mega 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.Code
RunningMega Man walks and moves through the air at the speed held in his X speed (ent_xvel), 1.30 px/frame ($01.$4C) on ordinary floor; no walking or air code sets it. The slide writes 2.5 px/frame there, and its end and the jump out of it write $01.$4C back. Measured in Mesen from power-on, at the start of Skull Man's stage, the X speed read $01.$4C and each walking frame moved him 332/256 px.Verified
On the ground Mega Man's sprite sub-type decides whether he moves. Standing ($01), a held direction sets the pause pose ($0D) and moves him one frame; in the pause pose he doesn't move until its animation advances, and then walks ($04) toward a held direction, or stands with none. Walking, the same direction keeps him moving; letting go puts him in the pause pose without a move, and the other direction does too, with one frame's move the new way.Code
The pause pose lasts 6 frames: its animation (sub-type $0D in bank $0D) holds its first frame for 6 animation ticks, one a frame. So from standing, or on a turn, a held direction moves Mega Man on the first frame, holds him still on the next 5, and walks from the 7th; letting go of a walk holds him for 6 frames, whatever the d-pad does, before he stands or walks on. Measured in Mesen from power-on, at the start of Skull Man's stage, Right moved him on frame 1, not on frames 2 to 6, and on every frame from 7 to 40; letting go on frame 41 kept him still in the pause pose on frames 41 to 46, and he stood from frame 47.Verified
Sound effectsMega Man 4's sound effect reader is Mega Man 3's (labeled parse_music_data there), byte for byte at the same address.Code
Tile collisionMega 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.Code
Mega 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.Code
Variable jump heightMega Man 4 takes off at exactly 5 px/frame ($05.$00), up from Mega Man 3's $04.$E5, and a release cuts any rise to a speed of 0 where Mega Man 3 sets 0.25 px/frame downward. Both cut on every rising frame without A.Code
A jump moves Mega Man on its press frame. The ground state has already run the air routine and found the floor; the A press sets 5 px/frame and runs the air routine again, which lifts him 5 px and moves him by the air's rules, so the ground's own walk doesn't run that frame. Measured in Mesen from power-on, standing where he lands at the start of Skull Man's stage, a jump's first frame raised his Y by exactly 5 px.Verified
VRAM bufferMega 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.Code

References

  1. ^Mega Man 4, the fourth game in the series on the NES, came out in Japan on 6 December 1991 and in North America in January 1992.PublisherMM25 · Nintendo, NES Games · Nintendo Power 32revised
    How we know
    NES 12/06/1991
    p. 46, release table · archived copy ↗
    Mega Man 4 Capcom January 1992
    PDF p. 8 · archived copy ↗
    continue in the fourth NES
    p. 8, feature · archived copy ↗

    The quote matches our archived copy.

    Revised after a check by a second AI model, 2026-10-22.

    In the claim ledger

  2. ^Mega Man 4 has the player pick which of eight Robot Masters to fight from a screen of their portraits, in any order; they are Pharaoh Man, Toad Man, Bright Man, Dive Man, Ring Man, Drill Man, Dust Man, and Skull Man.ManualMega Man 4 NES manual · Nintendo Power 32
    How we know
    you will see various mug shots of … master you wish to battle, press the A button and get ready for action!
    p. 5 (PDF 3), Getting Started · archived copy ↗
    PHARAOH MAN TOAD MAN BRIGHT MAN DIVE MAN
    p. 14 (PDF 8), Robot Masters · archived copy ↗
    Take on the robot leaders in any order.
    p. 8, feature · archived copy ↗

    The quote matches our archived copy.

    Checked by a second AI model, 2026-10-22.

    In the claim ledger

  3. ^Mega Man 4's Robot Masters were picked from about 70,000 boss designs that players sent in to Capcom's contest, and the team scrapped a stage in progress to rebuild it for the winning Skull Man.PublisherMM25
    How we know
    Total number of boss character submissions: 70,000
    p. 46, release table · archived copy ↗
    once we had selected the winning entries. I remember Skull Man in particular, as we scrapped a whole level that was in progress to recreate it specifically for Skull Man.
    p. 49 · archived copy ↗

    The quote matches our archived copy.

    Checked by a second AI model, 2026-10-22.

    In the claim ledger

  4. ^The manga artist Yusuke Murata sent in Dust Man to the Mega Man 4 contest.PublisherMM25
    How we know
    Murata is a manga artist who sent in submissions for the "Mega Man 4" and "Mega Man 5" boss character design contests. His submissions were Dust Man and Crystal Man.
    Capcom Heroes calendar, Yusuke Murata's profile (between pp. 298 and 310; the copy's OCR has no page numbers there) · archived copy ↗

    The quote matches our archived copy.

    Checked by a second AI model, 2026-10-22.

    In the claim ledger

  5. ^ abMega Man 4 adds the New Mega Buster, whose shot charges while B is held, and Capcom's developers say the charge shot became a staple of the series from this game on.ManualMega Man 4 NES manual · MM25 · GameSpot, History of Mega Man
    How we know
    energize the Mega Buster.
    p. 7 (PDF 4), Controlling Mega Man · archived copy ↗
    The Charge Shot became a staple attack starting with '4'
    p. 47, New Mega Buster · archived copy ↗
    The innovations in this title included a chargeable Mega Buster
    1991, Mega Man IV, The Basics · archived copy ↗

    The quote matches our archived copy.

    Checked by a second AI model, 2026-10-22.

    In the claim ledger

  6. ^ abIn Mega Man 4 a cleared stage can be played again, without its Robot Master, to look for items missed the first time, and each Robot Master beaten gives a password to continue from.ManualMega Man 4 NES manual · GameSpot, History of Mega Man
    How we know
    you are allowed to play that level again in … NOT be waiting for you the second time
    p. 15 (PDF 8), The Winner's Edge · archived copy ↗
    Each time you obliterate one of Dr. Cossack's robot masters you will be
    p. 13 (PDF 7), Using Your Password · archived copy ↗
    the requirement that you go back into levels to find random, hidden stuff (a play mechanic that would later dominate the X series)
    1991, Mega Man IV, The Basics · archived copy ↗

    The quote matches our archived copy.

    Checked by a second AI model, 2026-10-22.

    In the claim ledger

  7. ^Mega Man 4's helpers are Rush, who turns into a springboard (Rush Coil), a submarine (Rush Marine), and a flying sled (Rush Jet), and Flip-Top, a suitcase robot in some stages who hands out a power-up; two new adaptors launch small floating platforms (Balloon) and pull Mega Man up to a ledge or ceiling on a wire (Wire).ManualMega Man 4 NES manual
    How we know
    Rush turns into a springboard to catapult you over … Rush transforms into a submarine for undersea travel. … Rush becomes a jet sled for sky high travel. … Waiting for you in certain stages is Flip-Top, Dr. Light's cybernetic suitcase
    p. 11 (PDF 6), A Little Help From Your Friends · archived copy ↗
    Man to launch out small floating platforms. … fire a wire up to a ledge or ceiling.
    p. 10 (PDF 6), Mega Power! cont. · archived copy ↗

    The quote matches our archived copy.

    Checked by a second AI model, 2026-10-22.

    In the claim ledger

  8. ^Keiji Inafune designed Mega Man 4's two new story characters, Dr. Cossack and his daughter Kalinka; Hayato Kaji worked on the charge shot; and Yasuaki Fujita and Minae Fujii are among the game's composers.PublisherMM25 · Capcom Unity, 2010 soundtrack post
    How we know
    Since both Light and Wily were elderly, we made Cossack more of a 'young scientific genius'.
    p. 46 · archived copy ↗
    This is how Kalinka came about. … I had a lot of fun working on '4', and I'm very happy with the two new character designs.
    p. 47, Kalinka · archived copy ↗
    I think I was the one working on the Charge Shot. I had a lot of trouble perfecting it.
    p. 47, New Mega Buster · archived copy ↗
    Yasuaki Fujita (Mega Man 3 and 4), Minae Fujii (Mega Man 4)
    list of the Mega Man 10 music team · archived copy ↗

    The quote matches our archived copy.

    Checked by a second AI model, 2026-10-22.

    In the claim ledger

  9. ^Mega Man 4's apparent villain is Dr. Cossack, but Dr. Wily turns out to be behind him, having taken Cossack's daughter Kalinka hostage to force him into the fight.WebGameSpot, History of Mega Man · MM25revised
    How we know
    the hollow storyline charade involving Dr. Cossack- as it unsurprisingly turned out, Dr. Wily is pulling the strings.
    1991, Mega Man IV, The Basics · archived copy ↗
    Kalinka is Dr. Cossack's daughter. Dr. Wily took her hostage … used her to manipulate Dr. Cossack.
    p. 148, character profiles · archived copy ↗

    The quote matches our archived copy.

    Revised after a check by a second AI model, 2026-10-22.

    In the claim ledger

  10. ^Electronic Gaming Monthly's Review Crew called Mega Man 4 a safe bet for old and new fans of the series, and one remark noted that some weapons and bosses were recycled from earlier games.MagazineEGM 31revised
    How we know
    safe bet that … and new Mega Man fans. … Capcom definitely has a winner in the … recycled from the previous games. … Our favorite 8-Bit hero is back for another
    p. 22 (PDF 25), Review Crew · archived copy ↗

    The quote matches our archived copy.

    Revised after a check by a second AI model, 2026-10-22.

    In the claim ledger

  11. ^Famicom Tsūshin's four Cross Review reviewers split over Mega Man 4's difficulty. The first found it beyond his own level, though a game learned by repetition that a good action player would want to take on; the second called it a puzzle of how to get through without dying, and noted the series' popularity in the US; the third, Mariko, called it a game for advanced action players and was quickly sent to game over in every stage; the fourth found it faithful to the series' tradition, the same Mega Man its fans expected, with a new charge shot that takes some getting used to (the atlas's translations).MagazineFamitsu 156revised
    How we know
    僕レベルではとても追いつかない難易度だ … 純然たる学習型だし
    p. 38, New Games Cross Review, Rockman 4 column, first comment · archived copy ↗
    米国でも極めて人気が高いのだ … 死なずにクリアーできるか、それを考えていくパズル
    p. 38, New Games Cross Review, Rockman 4 column, second comment · archived copy ↗
    完全にアクションゲーム上級者向けですね … あっという間にゲームオーバーに
    p. 38, New Games Cross Review, Rockman 4 column, third comment · archived copy ↗
    相変わらずな『ロックマン』ぶりだ … タメ撃ちは慣れるまでちょっと
    p. 38, New Games Cross Review, Rockman 4 column, fourth comment · archived copy ↗

    The quote matches our archived copy.

    Revised after a check by a second AI model, 2026-10-22.

    In the claim ledger

  12. ^GameSpot's history of the series ranks Mega Man 4 below Mega Man 2 and 3 and calls it the game where the series' invention began to run out and it began to show its age.WebGameSpot, History of Mega Man
    How we know
    While it never really got to the level of II or III, it was certainly not a complete slouch - although this was where innovation began to run sour.
    1991, Mega Man IV, The Basics · archived copy ↗
    the series began to show its age with this title.
    1991, Mega Man IV, Final Thoughts · archived copy ↗

    The quote matches our archived copy.

    Checked by a second AI model, 2026-10-22.

    In the claim ledger

  13. ^ abMega Man 4 takes off at exactly 5 px/frame ($05.$00), up from Mega Man 3's $04.$E5, and a release cuts any rise to a speed of 0 where Mega Man 3 sets 0.25 px/frame downward. Both cut on every rising frame without A.Codeplasticsmoke/megaman4-disassembly-ca65 · “Mega Man 4 (USA) (Rev 1)” · plasticsmoke/megaman3-disassembly-ca65
    How we know
    179L_813E:
    180    LDA ent_angle                    ; player $04B0 flag
    181    BNE L_8149                          ; nonzero: normal jump
    182    LDA joy1_held                       ; held buttons
    183    AND #$04                            ; Down held?
    184    BNE L_8156                          ; Down+A = slide
    185L_8149:
    186    LDA #$00                            ; zero sub-velocity
    187    STA ent_yvel_sub                    ; Y velocity sub = 0
    188    LDA #$05                            ; jump speed 5 px/frame
    189    STA ent_yvel                        ; Y velocity = +5 (up)
    190    JMP L_82C8                          ; enter airborne physics
    
    src/bank3C.asm lines 179–190 at a63bb6e · upstream ↗
    420L_8306:
    421    LDA ent_yvel                        ; player Y velocity
    422    BMI L_8338                          ; moving down: keep falling
    423    LDA ent_var6                        ; knockback/no-jump-cut flag
    424    BNE L_833D                          ; set: no jump cut
    425    LDA joy1_held                       ; held buttons
    426    AND #$80                            ; A still held?
    427    BNE L_8338                          ; held: full jump
    428    LDA #$00                            ; zero
    429    STA ent_yvel_sub                    ; cut jump: Y vel sub = 0
    430    STA ent_yvel                        ; cut jump: Y vel = 0
    431    BEQ L_8338                          ; (always taken)
    
    src/bank3C.asm lines 420–431 at a63bb6e · upstream ↗

    In the cartridge (“Mega Man 4 (USA) (Rev 1)”): bank $3C $8149, the take-off in the Rev 1 ROM; bank $3C $8312, the cut in the Rev 1 ROM. We don't reproduce the bytes.

    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 ↗
    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
    
    src/fixed/movement.asm lines 424–427 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

  14. ^ abMega Man 4's slide keeps Mega Man 3's 2.5 px/frame but moves on 26 frames (a timer of $1A, counted after each move from the set-up frame on) where Mega Man 3's moves on 21 (a timer of 20). Its A test runs on every slide frame, the set-up's included: a fresh A press without Down jumps out whenever he has headroom, where Mega Man 3 waits for its 9th frame, and A with Down held keeps sliding. The set-up's own press comes with Down, and A held from it into the second frame is no fresh press, so the earliest jump out comes on the slide's 3rd frame.Verifiedplasticsmoke/megaman4-disassembly-ca65 · “Mega Man 4 (USA) (Rev 1)” · plasticsmoke/megaman3-disassembly-ca65revised
    How we know
    254    JMP L_8368                          ; post-slide-start processing
    
    src/bank3C.asm line 254 at a63bb6e · upstream ↗
    510    LDY #$04                            ; speed selector 4 = slide
    511    JSR entity_horiz_dispatch           ; move player horizontally
    512    BCS L_83C3                          ; hit wall: try to stand
    513    LDA $34                             ; slide timer
    514    BEQ L_83C3                          ; expired: try to stand
    515    DEC $34                             ; count down slide
    516    BNE L_83EF                          ; still sliding: done
    
    src/bank3C.asm lines 510–516 at a63bb6e · upstream ↗
    217    LDA #$1A                            ; slide duration 26 frames
    218    STA $34                             ; set slide timer
    219    LDA #$02                            ; state $02 = slide
    220    STA player_state                    ; enter slide state
    221    LDA #$80                            ; slide speed 2.5 px/frame
    222    STA ent_xvel_sub                    ; X velocity sub = $80
    223    STA $37                             ; mirror in $37
    224    LDA #$02                            ; 2 px
    225    STA ent_xvel                        ; X velocity = 2
    226    STA $38                             ; mirror in $38
    
    src/bank3C.asm lines 217–226 at a63bb6e · upstream ↗
    473L_8368:
    474    LDA joy1_press                      ; newly pressed
    475    AND #$80                            ; A button?
    476    BEQ L_839D                          ; no jump: steering
    477    LDA joy1_held                       ; held buttons
    478    AND #$04                            ; Down held?
    479    BNE L_839D                          ; Down+A: stay sliding
    480    LDY #$03                            ; probe 3 = standing headroom
    481    JSR tile_collision_detect           ; check tile above head
    482    LDA $10                             ; collision result
    483    BNE L_839D                          ; blocked: no jump
    484    JSR L_83F2                          ; platform overhead check
    ⋮
    
    src/bank3C.asm lines 473–496 at a63bb6e · upstream ↗

    In the cartridge (“Mega Man 4 (USA) (Rev 1)”): bank $3C $8184, the slide's set-up in the Rev 1 ROM; bank $3C $8368, the jump out of the slide in the Rev 1 ROM. We don't reproduce the bytes.

    288        lda     #$14                    ; slide timer = 20 frames
    289        sta     $33                     ; store slide timer
    
    src/fixed/player_states.asm lines 288–289 at 58ca1c3 · upstream ↗
    344slide_collision_wall_solid:  lda     $10 ; hit a wall?
    345        and     #$10                    ; bit 4 = solid wall
    346        bne     slide_end_ground_check  ; yes → end slide
    347        lda     $33                     ; timer expired?
    348        beq     slide_end_ground_check  ; yes → end slide
    
    src/fixed/player_states.asm lines 344–348 at 58ca1c3 · upstream ↗
    349        dec     $33                     ; decrement timer
    350        lda     $33                     ; check slide timer phase
    351        cmp     #$0C                    ; >= $0C? (uncancellable phase)
    352        bcs     slide_continue_moving   ; yes → uncancellable, keep sliding
    353        lda     joy1_press              ; A button pressed? (cancellable phase)
    354        and     #BTN_A                  ; check A button
    355        bne     slide_end_ground_check  ; yes → cancel into slide jump
    
    src/fixed/player_states.asm lines 349–355 at 58ca1c3 · upstream ↗

    Measured by a script in MesenCE 2.2.1 (build 4b8a196), on Mega Man 4 (USA) (Rev 1) (SHA-1 05d238c2a315…). It fails if the result disagrees with the claim.

    The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-26.

    Revised after a check by a second AI model, 2026-10-21.

    Checked by a second AI model, 2026-10-26.

    In the claim ledger

  15. ^ abA B press fires a normal shot and sets the charge counter to 1; each frame B stays held in a state below 4 the counter rises by 1, looping from 100 back to 92. On release, a counter under 32 ($20) fires nothing more, 32 or more fires a half-charged shot, and 92 ($5C) or more a full one.Codeplasticsmoke/megaman4-disassembly-ca65 · “Mega Man 4 (USA) (Rev 1)”
    How we know
    73L_8073:
    74    LDA $35                             ; charge counter
    75    BEQ L_80CF                          ; not charging: done
    76    LDA player_state                    ; player state
    77    CMP #$04                            ; states >= 4 (Rush riding etc.)
    78    BCS L_80CF                          ; cannot charge: done
    79    LDA joy1_held                       ; held buttons
    80    AND #$40                            ; B button still held?
    81    BEQ L_80CF                          ; released: fire handled at L_8CCC
    82    INC $35                             ; advance charge
    83    LDA $35                             ; reload charge
    ⋮
    89    LDA $35                             ; reload charge
    ⋮
    
    src/bank3C.asm lines 73–95 at a63bb6e · upstream ↗
    1694    LDA $35                             ; charge counter
    1695    BEQ L_8D2F                          ; no charge: check B press
    1696    LDA current_weapon                  ; current weapon
    1697    BNE L_8D2F                          ; not buster: check B press
    1698    LDA joy1_held                       ; held buttons
    1699    AND #$40                            ; B still held?
    1700    BNE L_8D59                          ; still charging: no fire
    1701    LDA #$21                            ; charged spawn offset $21
    1702    STA $11                             ; set spawn-offset index
    ⋮
    1705    LDA $35                             ; charge counter
    ⋮
    1707    LDA #$00                            ; zero
    ⋮
    1710    CMP #$20                            ; level 1 threshold ($20)
    ⋮
    
    src/bank3C.asm lines 1694–1722 at a63bb6e · upstream ↗
    1743L_8D2F:
    1744    LDA joy1_press                      ; newly pressed
    1745    AND #$40                            ; B button?
    1746    BEQ L_8D5B                          ; no fire: done
    1747L_8D35:
    1748    LDY #$00                            ; slot 0 marker
    1749    STY temp_00                         ; clear chosen-slot temp
    1750    INY                                 ; Y = 1
    1751    STY $35                             ; minimum charge (tap)
    
    src/bank3C.asm lines 1743–1751 at a63bb6e · upstream ↗
    1769L_8D59:
    1770    LDA #$00                            ; A = 0 (no shot fired)
    1771L_8D5B:
    1772    RTS                                 ; done
    
    src/bank3C.asm lines 1769–1772 at a63bb6e · upstream ↗

    In the cartridge (“Mega Man 4 (USA) (Rev 1)”): bank $3C $8073, the counter in the Rev 1 ROM; bank $3C $8CF2, the thresholds in the Rev 1 ROM. We don't reproduce the bytes.

    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

  16. ^ abMega Man 4 keeps Mega Man 3's knockback, 0.5 px/frame ($00.$80) against his facing under gravity until the hurt animation reaches 9, with no push when the hit lands during a slide.Codeplasticsmoke/megaman4-disassembly-ca65 · plasticsmoke/megaman3-disassembly-ca65
    How we know
    801    LDY ent_var5                        ; knockback probe selector
    802    JSR entity_player_collide           ; ride/collide with platforms
    803    LDA #$80                            ; knockback speed 0.5 px/frame
    804    STA ent_xvel_sub                    ; X velocity sub
    805    LDA #$00                            ; zero
    806    STA ent_xvel                        ; X velocity px
    807    LDA ent_flags                       ; player flags
    808    PHA                                 ; save (facing)
    809    LDA ent_hp                          ; hurt sub-state
    810    CMP #$02                            ; $02 = was sliding
    811    BEQ L_8616                          ; sliding: skip pushback
    
    src/bank3C.asm lines 801–811 at a63bb6e · upstream ↗
    830    LDA ent_anim_phase                  ; player anim counter
    831    CMP #$09                            ; knockback anim done (frame 9)?
    832    BNE L_865B                          ; not yet: keep flying back
    
    src/bank3C.asm lines 830–832 at a63bb6e · 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
    ⋮
    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
    
    src/fixed/player_states.asm lines 776–786 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

Sources

Code

Primary

Secondary

  • Nintendo Power editors. 1992. “Nintendo Power, issue 32 (1992-01): Mega Man 4 feature and Now Playing.” Nintendo Power, vol. 32, pp. 8-9 and 103. Nintendo of America. original · archived · licence, all uses
  • Christian, Nutt, and Speer, Justin. 2003. “The History of Mega Man.” original · archived · licence, all uses
  • staff, Electronic Gaming Monthly. 1992. “Electronic Gaming Monthly, issue 31 (1992-02): Review Crew.” Electronic Gaming Monthly, no. 31, p. 22. Sendai Publishing. original · archived · licence, all uses
  • Famicom Tsushin editors. 1991. “Famicom Tsushin (Famitsu) no. 156, 13 December 1991: New Games Cross Review.” Famicom Tsushin, no. 156, p. 38. ASCII. original · archived · licence, all uses