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 2 is Capcom’s action platformer for the NES, released in Japan as Rockman 2 in December 1988 and in North America in June 19891. The player picks which of eight Robot Masters to fight from a stage-select screen2. That is two more than in Mega Man, and eight became the series’ number3. Each Robot Master beaten gives up his weapon, and each weapon works better on some bosses than on others4,5. Three of them also give an item for getting around6, and a password lets the player stop and come back later7.

The first game hadn’t sold well enough to earn an immediate sequel; the team made this one on their own initiative, largely in their own time8,9. Akira Kitamura directed it10. Keiji Inafune was one of its character designers11,12, and Takashi Tateishi wrote the music13. The Robot Masters were chosen from thousands of designs sent in by players14.

Famicom Tsūshin’s feature at its release noted stages a little easier than the first game’s and a password to make it friendlier15. In North America it topped Nintendo Power’s readers’ poll at the end of 198916. It was far more popular than Mega Man and made the series a hit17, and Capcom counts 1.51 million18 copies sold to date. Retrospectives remember its music19, and in 2007 Nintendo Power called it better than the first game in almost every way20.

#How it plays

Mega Man runs, jumps, and shoots. He can’t slide or charge a shot21,22, and he can’t crouch; Inafune says the team kept the controls to jumping because on the NES a player couldn’t tell a shot to jump over from one to duck under23.

He never builds up speed. He takes a short shuffle, then runs at full speed, with nothing in between24. Every jump leaves the ground at the same speed25,26, under one gravity27,28, and he falls no faster than a set top speed29.

Variable jump height comes from letting go: release A on the way up and he stops rising almost at once30,31,32. Past the first fifth of a second the rise has slowed enough that letting go changes nothing33. A tap is a hop of a third of his height, and a full jump clears about twice his height34.

He has full air control. The d-pad moves him at full speed in the air at once35, and he turns around or stops on the frame it changes, so a jump keeps nothing of the run36. A jump starts only from the ground, so walking off a ledge leaves no late press to save him; he has no coyote time37. Against walls and floors he is a single box38.

Interactive: movement-lab (needs JavaScript)

Mega Man 2: a tap, a held jump, and a late release

A hit pops him up and pushes him back39, and he flickers for a short spell in which nothing can hurt him40.

Each weapon has its own energy, refilled before each Robot Master’s stage, and each shot costs its own amount41. Each weapon also does its own damage to each boss: some do nothing to a boss, and Heat Man’s own Atomic Fire heals him42. Mega Man can also carry a full refill of energy, the Energy Tank, to use when he likes43. Inafune says the three items were added to get players past the sequel’s many more traps44.

The password is nine dots on a five-by-five grid45. It records only which Robot Masters are beaten and how many Energy Tanks Mega Man holds46, and the items follow from the bosses beaten47. The same progress gives a different grid for each Energy Tank count48. A grid that doesn’t account for all eight bosses is refused49.

The energy meters are sprites, not a separate strip of screen50. When too many sprites share a line, the game reverses their drawing order every other frame, so they flicker instead of vanishing51. A stage can animate its background by stepping through a list of palettes; Heat Man’s cycles one of its colors through three shades52.

lsmmega’s disassembly makes this code readable; it rebuilds the US cartridge exactly53.

#Across the series

Mega Man 2 keeps the first game’s run, jump, and hit54,55. Mega Man 3 adds a slide on Down and A56 and drops the hit’s upward pop57, and Mega Man 4 adds a charged shot58.

Cartridge

Interactive: rom-parts (needs JavaScript)

256 KB, a cell per 512 bytes, from 374 mapped regions

Code lineage

FromToMatchBytesWhat
Mega Man audio-controlMega Man 2 audio-controlchanged565Mega Man 2's sound engine entry and channel setup are Mega Man's, with two changes: `_music_fade_in_out` no longer ignores a new fade while one is running, and where Mega Man steps X with INX, four operands use an address plus 1 instead and one writes `SQ1_SWEEP` plus X. The engine starts at $8000 instead of $9000, so its jump and call addresses differ too.
Mega Man audio-music-readerMega Man 2 audio-music-readerrelocated705Mega Man 2's song data reader is Mega Man's, instruction for instruction and with the same RAM, so the two games read the same note and command format. It sits $100C lower: only its jump and call addresses, its command table, and the address of the note table differ.
Mega Man audio-processingMega Man 2 audio-processingchanged824Mega Man 2's per-frame channel update is Mega Man's, except that `_break_frame` and the end of `_pitch_envelope_common` address the next APU register as `SQ1_SWEEP` plus X, where Mega Man steps X with INX and writes `SQ1_VOL` plus X. The code sits $100A lower, so its jump and call addresses differ too.
Mega Man audio-sfx-readerMega Man 2 audio-sfx-readerrelocated327Mega Man 2's sound effect reader is Mega Man's, instruction for instruction and with the same RAM, moved $100C lower: only its jump and call addresses and the addresses in its command table differ.
Mega Man audio-tablesMega Man 2 audio-tableschanged219Mega Man 2's note length and pitch tables are Mega Man's but for one pitch: the period of the note the disassembly names `nEb1` drops from $059E to $0594, about 12 cents higher (computed). The region also ends with 3 bytes of $FF filler instead of 7.
Mega Man b0-menu-font-tilesMega Man 2 stage-common-tilesidentical96Mega Man 2's six menu border tiles, the end of its common stage tiles, are Mega Man's six menu tiles, byte for byte.
Mega Man b0-menu-font-tilesMega Man 2 ready-font-tileschanged80Mega Man 2's five READY letter tiles have Mega Man's letter shapes, row for row, but in each tile's second bit plane instead of its first, so the letters draw in color 2 of their palette where Mega Man's draw in color 1.
Mega Man bankswitchMega Man 2 bankswitchrewritten81Both games' bank switch routines map a PRG bank at $8000, but Mega Man 2's is new code for a different board: Mega Man writes the bank number once, to its own byte of a bank table (the disassembly's `uxrom_prg_bank`), and Mega Man 2 writes it to MMC1 one bit at a time, then runs any sound an NMI put off during the switch.
Mega Man create-explosionMega Man 2 create-explosionidentical60Mega Man 2's death explosion takes its twelve pieces' x and y speeds and facing flags from five 12-byte tables identical to Mega Man's explosion tables. The code around them is new: Mega Man's `_create_explosion_object` sets up one piece per call, and Mega Man 2's `_create_explosion` loops over all twelve.
Mega Man cutman-wily1-mapMega Man 2 metalman-mapidentical1,024The last 16 screens of Metal Man's map, $1C to $2B (1,024 bytes), are byte for byte the last 16 of Mega Man's Cut Man and Wily stage 1 map: Cut Man's screens $0C to $0F and Wily stage 1's $10 to $1B. Metal Man's screens $18 to $1B repeat four of them, Wily stage 1's $18 to $1B.
Mega Man joyMega Man 2 joyrelocated30Mega Man 2's `_joy` is Mega Man's, line for line; only the two button bytes it writes moved in zero page, from $14 and $18 to $23 and $27.
Mega Man nmi-waitMega Man 2 nmi-waitchanged129Mega Man 2's `_nmi_wait_0e` and `_nmi_wait_0d` keep the steps of Mega Man's `_nmi_wait`: save the last buttons, wait for the NMI, call `_joy`, and mark the newly pressed buttons. The two differ only in the bank they map at the end, and each first calls `_background_palette`. Mega Man 2 drops the path for buttons the game forces and moves the water frame into `_nmi_wait_water`.
Mega Man object-tilesMega Man 2 object-tiles-updatechanged26Mega Man 2's `_object_tiles_update` is the loop Mega Man enters at `_init_object_tiles`, which copies the tile buffer to CHR RAM, with its RAM at new addresses. Mega Man 2 drops the test in front of it and the `_object_tiles_update_yellow_devil` path, which writes two bytes at each of several PPU addresses, a row ($20) apart.
Mega Man scrollingMega Man 2 scrollingchanged246Mega Man 2's `_scrolling_vertical` follows Mega Man's `_scrolling_up_down`: the same name table and attribute address math and the same loop writing four 8x8 tiles per 16x16 quarter. Mega Man 2 computes the 32x32 block's address from the screen number, where Mega Man looks the screen up in a pointer table and checks `_special_blockset_collision` for a block the disassembly labels removed; some of its RAM moved too. The rest of each region is different code.
Mega Man stage-loopMega Man 2 stage-start-main-looprewritten273Both games' stage loops run a frame of play and wait for the NMI, but Mega Man 2's is new code: it calls its own routines in its own order, opens the menu on Start with no Select pause, and waits an extra frame now and then in water. Its region also starts the stage before the loop.
Mega Man title-tilesMega Man 2 opening-title-tilesidentical1,344Tiles 1 to 84 of Mega Man 2's title screen patterns (1,344 bytes) are byte for byte tiles 1 to 84 of Mega Man's.
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).

Mechanics

MechanicKindHow
Status bar splitSprite overlayno split screen; the energy meters are drawn as sprites
Sprite flickerAlternating ordercrowded sprites take turns, so they flicker instead of vanishing
Palette cyclingPalette setsa stage can animate by stepping through a list of palettes
Variable jump heightRelease capletting go of A stops the rise almost at once
JumpOne speedevery jump takes off at the same speed
GravityOne gravityone gravity, whatever the button does
Air controlDirectthe d-pad moves him at full speed in the air, and he turns and stops at once
RunningSteppeda short first step, then full speed, with no acceleration
HitboxBoxone box against walls and floors
Invincibility framesFrame timera fixed spell of invincibility after each hit, as in Mega Man
KnockbackFixed shovea hit pops him up and pushes him back until its animation ends
Weapon energyPer weaponeach weapon has its own energy, and each shot costs its own amount
Boss weaknessBoss tableeach weapon does its own damage to each boss, nothing to some, and heals one
Password and battery savePasswordnine dots on a grid record the bosses beaten and the Energy Tanks
Coyote timeNonewalk off a ledge and A does nothing; jumps start only from the ground
Ground slideNoneno slide; A on the ground always jumps
Charge shotNoneno charge; the buster fires when B goes down
Every claim about this game, by concept (87)
generalMega Man 2'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 2 came out in Japan, as Rockman 2, on 24 December 1988, and in North America in June 1989.Publisher
Mega Man 2 opens on a stage-select screen with eight Robot Masters around a space for Dr. Wily, and the player picks which to fight.Manual
Mega Man 2 has eight Robot Masters where Mega Man had six, and eight became the series' number.Web
Each Robot Master Mega Man beats gives him its weapon, and each weapon works better on some bosses than on others.Manual
Beating Heat Man, Air Man, and Flash Man also gives Mega Man three items for getting around, a hovering platform, a jet sled, and a platform that climbs a wall.Manual
Keiji Inafune says the three items were added to help players past Mega Man 2's many more traps, after players and Capcom's marketing department found parts of the first game too hard.Publisher
Mega Man can carry a full refill of energy to use when he chooses, which the manual calls an energy crystal and the developers an Energy Tank; the team's leader doubted it was needed.Manual
After each Robot Master the player can take a password and use it later to return to the same point in the game.Manual
Keiji Inafune says the first two games let Mega Man jump but not crouch because the team's leader wanted simple controls, and on the NES a player couldn't tell a shot meant to be jumped from one meant to be ducked.Publisher
Mega Man 2 was its team's own idea, not a company decision, and its leader asked for about three months, testing included.Publisher
Mega Man 2's eight Robot Masters were picked from designs sent in by players, 8,370 in all, which the team then reworked.Publisher
Akira Kitamura directed Mega Man 2.Interview
Destructoid identifies the planner Keiji Inafune mentions as Akira Kitamura, credited as A.K. in Mega Man and Mega Man 2.Interview
Mega Man 2's staff roll lists six character designers, YASUKICHI, INAFKING, TOM PON, NAGINEKO, 2M03CM MAN, and A.K, and names A.K again as its planner.Code
Asked where the name INAFKING came from, Keiji Inafune answers with Snufkin, the cool character of Moomin; on Mega Man 2 he aimed to make the art look more like anime.Interview
Takashi Tateishi composed Mega Man 2's music, writing a song in a morning for Kitamura to approve that afternoon when things went well.Interview
Famicom Tsūshin's feature on the game at its release reported eight robots, stages a little easier than the first game's, and a password feature that made it a kinder design.Magazine
Capcom counts 1.51 million copies of Mega Man 2 sold, as of 30 June 2026.Publisher
Mega Man 2 was the series' breakthrough, far more popular than the first game, and its success made the series a hit.Web
Nintendo Power's 2007 retrospective called Mega Man 2 perhaps the best game in the series, better than the first in almost every way.Magazine
Retrospectives single out Mega Man 2's music.Magazine
lsmmega's disassembly builds this exact ROM; with the iNES header its header.asm writes in place of the NES 2.0 one, the ROM's SHA-1 is the build's.Verified
Mega Man 2's sound engine entry and channel setup are Mega Man's, with two changes: _music_fade_in_out no longer ignores a new fade while one is running, and where Mega Man steps X with INX, four operands use an address plus 1 instead and one writes SQ1_SWEEP plus X. The engine starts at $8000 instead of $9000, so its jump and call addresses differ too.Code
Mega Man 2's per-frame channel update is Mega Man's, except that _break_frame and the end of _pitch_envelope_common address the next APU register as SQ1_SWEEP plus X, where Mega Man steps X with INX and writes SQ1_VOL plus X. The code sits $100A lower, so its jump and call addresses differ too.Code
Mega Man 2's _scrolling_vertical follows Mega Man's _scrolling_up_down: the same name table and attribute address math and the same loop writing four 8x8 tiles per 16x16 quarter. Mega Man 2 computes the 32x32 block's address from the screen number, where Mega Man looks the screen up in a pointer table and checks _special_blockset_collision for a block the disassembly labels removed; some of its RAM moved too. The rest of each region is different code.Code
Mega Man 2's _nmi_wait_0e and _nmi_wait_0d keep the steps of Mega Man's _nmi_wait: save the last buttons, wait for the NMI, call _joy, and mark the newly pressed buttons. The two differ only in the bank they map at the end, and each first calls _background_palette. Mega Man 2 drops the path for buttons the game forces and moves the water frame into _nmi_wait_water.Code
Tiles 1 to 84 of Mega Man 2's title screen patterns (1,344 bytes) are byte for byte tiles 1 to 84 of Mega Man's.Code
Mega Man 2's six menu border tiles, the end of its common stage tiles, are Mega Man's six menu tiles, byte for byte.Code
Mega Man 2's five READY letter tiles have Mega Man's letter shapes, row for row, but in each tile's second bit plane instead of its first, so the letters draw in color 2 of their palette where Mega Man's draw in color 1.Code
Mega Man 2 kept the free choice of boss and the weapon taken from each one, used against another boss's weakness.Magazine
Air controlEach airborne frame, _run_megaman_jumping zeroes Mega Man's horizontal speed, then sets it to the jumping state's 1.3125 px/frame ($01.$50) toward a held Left or Right.Code
Measured in the game, Mega Man moves 1.3125 px/frame in the air, turns around on the frame the other direction is pressed, and stops on the frame the d-pad is let go.Verified
Boss weaknessEach weapon has a 14-byte table with one damage value per boss, in the order of zcurrent_boss: 0 makes the boss immune, a negative value refills its health, and other values are subtracted, doubled when zdifficulty is 0. Metal Blade's byte for Metal Man is 14 ($0E), so 14 damage, or 28 when doubled, and 0 for Air Man and Quick Man; the Mega Buster's bytes for the Robot Masters are 1 or 2; Atomic Fire refills Heat Man.Code
Charge shotMega Man 2's Mega Buster has no charge. It fires only on the frame B goes down, with a free shot slot.Code
CHR RAMMega Man 2's _object_tiles_update is the loop Mega Man enters at _init_object_tiles, which copies the tile buffer to CHR RAM, with its RAM at new addresses. Mega Man 2 drops the test in front of it and the _object_tiles_update_yellow_devil path, which writes two bytes at each of several PPU addresses, a row ($20) apart.Code
Controller readingMega Man 2's _joy is Mega Man's, line for line; only the two button bytes it writes moved in zero page, from $14 and $18 to $23 and $27.Code
Coyote timeMega Man gets no grace window after leaving a ledge; a grounded state that finds no floor switches to the jumping state, which looks for a press only on the frame it lands.Verified
On the ground Mega Man keeps a vertical speed of −0.25 px/frame, the gravity applied after each landing's reset, so every grounded frame's vertical move takes him 0.25 px down and tests x − 7 and x + 7 on the row under his feet; ground there puts him back on it with the Y fraction zeroed, and none sends him to the jumping state.Verified
Mega Man first counts as airborne on the frame whose move takes both floor points off the ledge; that frame still moves him at the ground state's speed, drops him 0.25 px, and leaves him in the jumping state falling at 0.5 px/frame, so his feet are 0, 0, 1, 2, 3, 5, and 7 px below the ledge on the walk-off frame and the six after.Verified
Enemy explosionMega Man 2's death explosion takes its twelve pieces' x and y speeds and facing flags from five 12-byte tables identical to Mega Man's explosion tables. The code around them is new: Mega Man's _create_explosion_object sets up one piece per call, and Mega Man 2's _create_explosion loops over all twelve.Code
Game loopBoth games' stage loops run a frame of play and wait for the NMI, but Mega Man 2's is new code: it calls its own routines in its own order, opens the menu on Start with no Select pause, and waits an extra frame now and then in water. Its region also starts the stage before the loop.Code
GravityGravity takes $40/256 = 0.25 px/frame from Mega Man's upward speed each frame out of water ($1E/256 in water).Code
_check_object_vertical_move first moves Mega Man by his 8.8 fixed-point speed, positive up, and then subtracts gravity.Code
Falling speed is capped at 12 px/frame ($F4).Code
Ground slideMega Man 2 has no slide. A fresh A press in a grounded state always starts a jump; that code tests no other button.Code
HitboxMega Man's position is his center; the floor and ceiling are tested at x−7 and x+7, 12 px below or above it, and walls at x+8 or x−8 at 12 px and 4 px above and 11 px below it.Code
_tsa_collision turns a test point into a tile: X / 32 and Y / 32 pick a 32 px block of the stage map, bit 4 of X and of Y pick one of its four 16 px tiles, and the tile's top two bits give its kind, background, block, or one of a per-stage pair such as ladder and spike.Code
Each of Mega Man's grounded and jumping states moves him horizontally first, testing for a wall, then vertically, testing the floor under a fall or the ceiling over a rise, and only then changes state or checks for a jump, so a frame's floor test uses that frame's new X.Code
When the horizontal move puts the wall point ahead in a solid tile, _check_object_horizontal_move zeroes Mega Man's X fraction and pushes him 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; his speed and state are untouched, so he runs in place.Verified
A pit has no floor of its own; once Mega Man's Y passes $E8 on the screen, _check_object_vertical_move asks for a downward scroll, and _check_scroll kills him where the stage doesn't scroll down.Code
When a rising Mega Man's move puts a ceiling point, x − 7 or x + 7 at 12 px above his center, in a block, _check_object_vertical_move zeroes his Y fraction and adds 16 − ((Y − 12) mod 16) to Y, which puts that point on the first row under the block's 16 px tile, then zeroes his speed and takes one step of gravity from it; he stays in the jumping state and falls from the next frame, starting at 0.25 px/frame.Verified
Invincibility framesA hit sets zmegaman_invincibility_time to 111 ($6F); contact damage is skipped while it is nonzero, and it counts down by 1 each time Mega Man's sprite is processed, hiding him on alternate pairs of frames.Code
JumpIn the standing, walking, running, and landing states, a fresh A press (zjoy1_pressed_bits) copies zjump_speed into Mega Man's vertical speed after the frame's move, so the press frame doesn't lift him.Code
Mega Man's jump speed is $04.$DF, 4.87 px/frame upward, out of water ($05.$80 in water).Code
The jump check runs after the frame's move, so the press frame moves at the ground state's speed, and from the next frame the jumping state's 1.3125 px/frame (or nothing, with no direction held) replaces any run.Verified
Mega Man lands into the running state if Left or Right was held on the frame before landing, at 1.375 px/frame from the next frame with no first step, and into the landing-stop state otherwise.Verified
When a falling Mega Man's floor points find a block, _check_object_vertical_move subtracts (Y + 12) mod 16 from his Y, which puts his feet on that 16 px tile's top, zeroes the Y fraction and the vertical speed, then takes one step of gravity from the speed; so a fall of up to 12 px a frame always ends on the top of the tile it meets.Verified
No grounded state tests the ceiling, since each grounded frame leaves Mega Man's vertical speed at −0.25 px/frame (ground-check) and the vertical move tests only the floor at a negative speed; the jump press then sets the jump speed and the jumping state without a test, so a jump always starts under a ceiling, and the rise first meets it on a later frame.Verified
Under a block 32 px above the floor, 8 px over his head, a standing jump meets the block on its second rising frame and lands on frame 11, with his feet 0, 5, 8, 8, 8, 7, 6, 5, 3, 1, and 0 px up on frames 1-11.Verified
Knockback_megaman_hit sets Mega Man's upward speed to 1.25 px/frame ($01.$40) and his horizontal speed to 0.5625 ($90) once; the hit state then moves him against his facing under the usual gravity until his animation's upper timer returns to 0, and leaves to the jumping or standing state.Code
Level loadingThe last 16 screens of Metal Man's map, $1C to $2B (1,024 bytes), are byte for byte the last 16 of Mega Man's Cut Man and Wily stage 1 map: Cut Man's screens $0C to $0F and Wily stage 1's $10 to $1B. Metal Man's screens $18 to $1B repeat four of them, Wily stage 1's $18 to $1B.Code
Music driverMega Man 2's song data reader is Mega Man's, instruction for instruction and with the same RAM, so the two games read the same note and command format. It sits $100C lower: only its jump and call addresses, its command table, and the address of the note table differ.Code
Mega Man 2's note length and pitch tables are Mega Man's but for one pitch: the period of the note the disassembly names nEb1 drops from $059E to $0594, about 12 cents higher (computed). The region also ends with 3 bytes of $FF filler instead of 7.Code
Palette cyclingOnce a frame _background_palette counts up to a stage's frame byte and then copies the next 16-byte background palette set into the working palette, wrapping after the stage's set count; Heat Man's stage has 3 sets and a frame byte of 6, so its palette 3 rotates $36, $26, $16 one step every 7 frames.Code
Password and battery saveMega Man 2's password is 9 dots on a 5 by 5 grid; the entry screen counts down from 9 as the player places dots with A and takes them back with B, and reads the password when the ninth is placed.Code
Mega Man 2's password holds the E-tank count and, for each of the 8 Robot Masters, whether he is beaten; a dot in the top row's first five cells gives 0-4 E-tanks, and each Robot Master has one "beaten" cell and one "not beaten" cell among the other 20, which also include 4 cells that mean nothing.Code
Mega Man 2 shifts the 20 boss cells by the E-tank count; table entry i goes to cell 5 + (E-tanks + i) mod 20, wrapping from the last cell back to the first cell of the second row, so the same bosses beaten give a different grid for each E-tank count.Code
Mega Man 2 reads the E-tank count as the first dot in the top row's first four cells, or 4 if none of them holds one, without looking at the fifth; it then ORs each dotted cell's boss into a beaten byte or a not-beaten byte and accepts the password only if the two together cover all 8 bosses, else it writes PASSWORD ERROR ! and, after two waits of 125 frames, returns to the menu of START and PASSWORD.Code
A correct Mega Man 2 password gives Mega Man the weapon of every boss in its beaten byte, Item 1 if Heat Man is beaten, Item 2 if Air Man is, and Item 3 if Flash Man is, plus its E-tank count; the password holds nothing else.Code
PRG bank switchingBoth games' bank switch routines map a PRG bank at $8000, but Mega Man 2's is new code for a different board: Mega Man writes the bank number once, to its own byte of a bank table (the disassembly's uxrom_prg_bank), and Mega Man 2 writes it to MMC1 one bit at a time, then runs any sound an NMI put off during the switch.Code
RunningMeasured in the game, Mega Man first steps 0.125 px/frame for 7 frames, then runs at 1.375 px/frame.Verified
Mega Man's X is 8.8 fixed point, and his horizontal speed is an 8.8 magnitude that _check_object_horizontal_move adds or subtracts according to the right bit of ztoward.Code
Mega Man never accelerates; each frame his state's row of megaman_status_xcoord_speed_table sets the speed outright, 0 standing, 0.125 px/frame on the first step, 1.375 running, 1.3125 jumping, and 0.5 sliding to a stop.Code
A held direction moves standing Mega Man into the first-step state on the same frame; the step becomes a run when its animation reaches frame 1, a released run becomes a slide, and the slide stops at its animation's frame 2 or restarts the first step if a direction is pressed.Code
_turn_megaman faces Mega Man toward a held Left or Right at the start of every moving state's frame, and the move direction follows the facing that same frame, so he reverses at full speed with no skid.Verified
Measured from a standstill in Heat Man's stage, Mega Man's first step lasts 7 frames, and a released run slides 8 frames at 0.5 px/frame, 4 px in all, before he stands.Verified
Down changes nothing on open ground; of the walking states only _check_shoot_on_ladder reads Up and Down, and only when a ladder is at hand.Verified
Sound effectsMega Man 2's sound effect reader is Mega Man's, instruction for instruction and with the same RAM, moved $100C lower: only its jump and call addresses and the addresses in its command table differ.Code
Sprite flickerOn even frames _sprites writes Mega Man's object slots (0 to $0F), then the enemies' ($10 to $1F), then the energy meters; on odd frames it writes the meters first and the slots in reverse, $1F down to $10, then $0F down to 0, so objects that lose the 8-per-scanline race lose it only every other frame.Code
Status bar splitMega Man 2 draws its energy meters as sprites, not a split screen; each meter is a column of 7 sprites from Y $18 down to $48, each showing 0-4 units, at X $10 for the weapon, $18 for life, and $28 for a boss.Code
Variable jump heightIn the jumping state, with A not held, _run_megaman_jumping drops an upward speed of 2 px/frame or more to exactly 1 px/frame.Code
The release cut tests only the speed's whole byte, so it applies at 2 px/frame or more and leaves a slower rise alone.Code
_run_megaman_jumping checks the release after the frame's move and gravity, so the capped speed first moves Mega Man on the next frame.Code
Gravity brings the 4.87 px/frame take-off under 2 px/frame on frame 13, so letting go of A after 12 frames changes nothing.Verified
Measured in the game, Mega Man's jump peaks at 8 px on frame 5 when A is tapped and at 50 px on frame 19 when it is held 12 frames or more, landing on frames 15 and 41.Verified
Weapon energyEach weapon has its own energy byte, filled to 28 ($1C) before a Robot Master stage or the first Wily stage but not before the later Wily stages; each weapon's routine takes its own cost, such as 2 per Air Shooter shot, 4 per Crash Bomber, and 1 per 4 Metal Blades counted on a shared counter.Code

References

  1. ^Mega Man 2 came out in Japan, as Rockman 2, on 24 December 1988, and in North America in June 1989.PublisherMM25 · Famitsu 65-66 · Nintendo, NES Games · Nintendo Power 219
    How we know
    Mega Man 2 NES 12/24/1988
    p. 34, release table · archived copy ↗
    88 年 12 月 24 日 発売 5800 円
    Rockman 2 feature, the game's data line (OCR text) · archived copy ↗
    Mega Man 2 Capcom June 1989
    PDF p. 8 · archived copy ↗
    RELEASE DATE: JUNE 1989
    p. 82, Playback: Mega Man 2, data box · archived copy ↗

    The quote matches our archived copy.

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

    In the claim ledger

  2. ^Mega Man 2 opens on a stage-select screen with eight Robot Masters around a space for Dr. Wily, and the player picks which to fight.ManualMega Man 2 NES manual
    How we know
    The STAGE SELECT screen will appear. This screen has pictures of … all eight enemy robots plus a spot in the middle for Dr. Wiley
    printed p. 2 (PDF 2), Getting Started · archived copy ↗

    The quote matches our archived copy.

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

    In the claim ledger

  3. ^Mega Man 2 has eight Robot Masters where Mega Man had six, and eight became the series' number.WebGameSpot, History of Mega Man
    How we know
    Instead of facing a mere six robot bosses, Mega Man faced eight - which became the series standard.
    Mega Man II, The Basics · archived copy ↗

    The quote matches our archived copy.

    In the claim ledger

  4. ^Each Robot Master Mega Man beats gives him its weapon, and each weapon works better on some bosses than on others.ManualMega Man 2 NES manual
    How we know
    As Mega Man defeats each enemy, he aquires their powers … These weapons work with varying degrees of effectiveness on different opponents.
    printed pp. 14-15 (PDF 8), Weapons · archived copy ↗

    The quote matches our archived copy.

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

    In the claim ledger

  5. ^Mega Man 2 kept the free choice of boss and the weapon taken from each one, used against another boss's weakness.MagazineNintendo Power 219
    How we know
    Like its predecessor, Mega Man 2 … to exploit another boss's weakness
    p. 82, Playback: Mega Man 2 · archived copy ↗

    The quote matches our archived copy.

    In the claim ledger

  6. ^Beating Heat Man, Air Man, and Flash Man also gives Mega Man three items for getting around, a hovering platform, a jet sled, and a platform that climbs a wall.ManualMega Man 2 NES manual
    How we know
    In addition to the weapons, there are three special transportation items. … Acquired when HeatMan is defeated. This is a levitation platform. … Acquired when AirMan is defeated. This is a jet sled. … Acquired when FlashMan is defeated. This is an elevator and may only be used against a wall
    printed p. 8 (PDF 5), Special Items · archived copy ↗

    The quote matches our archived copy.

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

    In the claim ledger

  7. ^After each Robot Master the player can take a password and use it later to return to the same point in the game.ManualMega Man 2 NES manual · GameSpot, History of Mega Manrevised
    How we know
    you will have a choice between either Stage Select or Password. … You may write this down and use it later to get to this exact same
    printed p. 9 (PDF 5), Passwords · archived copy ↗
    The next important innovation was the addition of passwords, which let you re-enter the game at a later date without starting from scratch.
    Mega Man II, The Basics · archived copy ↗

    The quote matches our archived copy.

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

    In the claim ledger

  8. ^Mega Man sold modestly, not well enough to earn an immediate sequel, and its team made Mega Man 2 in their own time.MagazineNintendo Power 219 · GameSpot, History of Mega Man
    How we know
    wasn't a big enough hit to warrant an … free time to work on the project
    p. 82, Playback: Mega Man 2 · archived copy ↗
    the game was a sort of low-key success. The true breakthrough would come with Mega Man 2.
    1987, Mega Man (Rockman in Japan) · archived copy ↗

    The quote matches our archived copy.

    In the claim ledger

  9. ^Mega Man 2 was its team's own idea, not a company decision, and its leader asked for about three months, testing included.PublisherMM25revised
    How we know
    Making a sequel wasn't a corporate decision, it was more like the team just kind of saying 'Let's do it!' … 'Including the checks? Three months.'
    pp. 35-36, Inafune · archived copy ↗

    The quote matches our archived copy.

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

    In the claim ledger

  10. ^Akira Kitamura directed Mega Man 2.InterviewBrave Wave, Tateishi interviewrevised
    How we know
    Director Akira Kitamura wanted people to know this was a direct sequel to Mega Man 1.
    Tateishi on the intro music · archived copy ↗

    The quote matches our archived copy.

    Revised after a check by a second AI model, 2026-10-27: Split: the direction (T2, Tateishi), A.K. as Kitamura (kitamura-ak, T1, Destructoid's note), the staff roll itself (staff-roll, T3, the disassembly's strings).

    In the claim ledger

  11. ^Mega Man 2's staff roll lists six character designers, YASUKICHI, INAFKING, TOM PON, NAGINEKO, 2M03CM MAN, and A.K, and names A.K again as its planner.Codelsmmega/mm2revised
    How we know
    188credit_string_1:
    189	.BYTE "CHARACTER DESIGNER"
    ⋮
    191credit_string_2:
    192	.BYTE "YASUKICHI"
    ⋮
    194credit_string_3:
    195	.BYTE "INAFKING"
    ⋮
    197credit_string_4:
    198	.BYTE "TOM PON"
    ⋮
    200credit_string_5:
    201	.BYTE "NAGINEKO"
    ⋮
    203credit_string_6:
    204	.BYTE "2M03CM MAN"
    ⋮
    
    screen/credit.asm lines 188–210 at 94f0bf3 · upstream ↗
    227credit_string_14:
    228	.BYTE "PLANNER"
    ⋮
    230credit_string_15:
    231	.BYTE "A.K"
    
    screen/credit.asm lines 227–231 at 94f0bf3 · upstream ↗

    Checked against the evidence by its author, an AI model, 2026-10-27.

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

    In the claim ledger

  12. ^Asked where the name INAFKING came from, Keiji Inafune answers with Snufkin, the cool character of Moomin; on Mega Man 2 he aimed to make the art look more like anime.InterviewDestructoid, Inafune interview (2013) · MM25revised
    How we know
    Inafune in particular was known as … Where did that name come from
    Ponce's question on the credits' nicknames · archived copy ↗
    There was a series called Moomin. … So 'Snufkin' and 'Inafking,' they're kind of like, oh, we're both these cool characters
    Inafune's answer on the credits' nicknames · archived copy ↗
    I was trying to make the art of 'Mega Man 2' a little more 'anime-ish'.
    pp. 35-36, Inafune · archived copy ↗

    The quote matches our archived copy.

    Revised after a check by a second AI model, 2026-10-27: Inafune answers the question of where INAFKING came from with Snufkin; based on was more than he says.

    In the claim ledger

  13. ^Takashi Tateishi composed Mega Man 2's music, writing a song in a morning for Kitamura to approve that afternoon when things went well.InterviewBrave Wave, Tateishi interview
    How we know
    Mega Man 2 composer Takashi Tateishi
    photo caption · archived copy ↗
    I did a few other titles—one of which was Mega Man 2.
    Tateishi on his first projects at Capcom · archived copy ↗
    make a song in the morning and Kitamura-san would approve it in the afternoon
    Tateishi on the schedule · archived copy ↗

    The quote matches our archived copy.

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

    In the claim ledger

  14. ^Mega Man 2's eight Robot Masters were picked from designs sent in by players, 8,370 in all, which the team then reworked.PublisherMM25 · Famitsu 65-66
    How we know
    Total number of boss character submissions: 8,370
    p. 34, beside the release table · archived copy ↗
    It was so fun to take the boss characters that kids came up with and tweak their designs.
    p. 37, Inafune · archived copy ↗
    の ロボ ッ ト は 、 一 般 か ら 公 募 さ れ た も の
    Rockman 2 feature, introduction (OCR text) · archived copy ↗

    The quote matches our archived copy.

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

    In the claim ledger

  15. ^Famicom Tsūshin's feature on the game at its release reported eight robots, stages a little easier than the first game's, and a password feature that made it a kinder design.MagazineFamitsu 65-66
    How we know
    ロボ ッ ト た ち は 、 8 体 に 増え て いる … の ステ ー ジ の 穫 易 度 は 少 し 下がっ て いる し 、 パ スワ ー ド 機 能 も 付い た 親切 設計
    Rockman 2 feature, introduction (OCR text) · archived copy ↗

    The quote matches our archived copy.

    In the claim ledger

  16. ^Nintendo Power's Top 30 for November-December 1989 put Mega Man II first, then Super Mario Bros. 2, Zelda II, Ninja Gaiden, and Teenage Mutant Ninja Turtles.MagazineNintendo Power 9
    How we know
    Over the last year we've seen a lot of great games in the Top 30
    pp. 80-81 (PDF 82-83), Top 30 · archived copy ↗

    The quote matches our archived copy.

    In the claim ledger

  17. ^Mega Man 2 was the series' breakthrough, far more popular than the first game, and its success made the series a hit.WebGameSpot, History of Mega Man · Nintendo Power 219
    How we know
    Unlike the first title, Mega Man II was wildly popular and earned the accolades of the mass consumer.
    Mega Man II, The Basics · archived copy ↗
    The true breakthrough would come with Mega Man 2.
    1987, Mega Man (Rockman in Japan) · archived copy ↗
    Mega Man 2's success cemented the … series as a bona fide hit and set the
    p. 82, Playback: Mega Man 2 · archived copy ↗

    The quote matches our archived copy.

    In the claim ledger

  18. ^Capcom counts 1.51 million copies of Mega Man 2 sold, as of 30 June 2026.PublisherCapcom, Platinum Titles
    How we know
    87 Dec 1988 Mega Man 2 NES 1.51
    table, row 87 · archived copy ↗
    Platinum Titles (as of June 30, 2026)
    heading · archived copy ↗

    The quote matches our archived copy.

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

    In the claim ledger

  19. ^Retrospectives single out Mega Man 2's music.MagazineNintendo Power 219 · GameSpot, History of Mega Man
    How we know
    soundtracks of the 8-bit era.
    p. 82, Playback: Mega Man 2 · archived copy ↗
    Add in the excellent music
    Mega Man II, The Basics · archived copy ↗

    The quote matches our archived copy.

    In the claim ledger

  20. ^Nintendo Power's 2007 retrospective called Mega Man 2 perhaps the best game in the series, better than the first in almost every way.MagazineNintendo Power 219
    How we know
    to 1989's Mega Man 2-arguably the … greatest Mega Man game of all. … original in almost every way: more
    p. 82, Playback: Mega Man 2 · archived copy ↗

    The quote matches our archived copy.

    In the claim ledger

  21. ^Mega Man 2 has no slide. A fresh A press in a grounded state always starts a jump; that code tests no other button.Codelsmmega/mm2
    How we know
    94_run_megaman_landing_common_1:
    95	LDA z:zjoy1_pressed_bits
    96	AND #a_button
    97	BEQ @not_pressed
    98	LDA z:zjump_speed_fraction
    99	STA aobject_ycoord_speed_fraction
    100	LDA z:zjump_speed
    101	STA aobject_ycoord_speed
    102	LDA #$06
    103	STA z:zmegaman_status
    
    engine/run_megaman.asm lines 94–103 at 94f0bf3 · upstream ↗

    Checked against the evidence by its author, an AI model, 2026-10-21.

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

    In the claim ledger

  22. ^Mega Man 2's Mega Buster has no charge. It fires only on the frame B goes down, with a free shot slot.Codelsmmega/mm2
    How we know
    20@mega_buster:
    21	LDA z:zjoy1_pressed_bits
    22	AND #b_button
    23	BEQ @skip_2
    24	LDX #$04
    ⋮
    26@loop_1:
    27	LDA aobject_flag, X
    28	BPL @not_exist_1
    29	DEX
    30	CPX #$01
    
    home/weapons.asm lines 20–30 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

  23. ^Keiji Inafune says the first two games let Mega Man jump but not crouch because the team's leader wanted simple controls, and on the NES a player couldn't tell a shot meant to be jumped from one meant to be ducked.PublisherMM25
    How we know
    Our wise leader, however, wanted a system that 'utilizes simple control yet offers deep gameplay'. … the player wouldn't really be able to differentiate between a projectile that could only be dodged by jumping and one that could only be dodged by crouching. … we decided to go with a jumping- only system for 'Mega Man 1' and '2'
    p. 33, Inafune on crouching · archived copy ↗

    The quote matches our archived copy.

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

    In the claim ledger

  24. ^Measured in the game, Mega Man first steps 0.125 px/frame for 7 frames, then runs at 1.375 px/frame.Verifiedlsmmega/mm2
    How we know
    222megaman_status_xcoord_speed_table:
    223	.BYTE $00
    224	.BYTE $00
    225	.BYTE $00
    226	.BYTE $00
    227	.BYTE $00
    228	.BYTE $01
    229	.BYTE $01
    230	.BYTE $00
    231	.BYTE $00
    232	.BYTE $00
    233	.BYTE $00
    ⋮
    
    engine/turn_megaman.asm lines 222–246 at 94f0bf3 · 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-25.

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

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

    In the claim ledger

  25. ^In the standing, walking, running, and landing states, a fresh A press (zjoy1_pressed_bits) copies zjump_speed into Mega Man's vertical speed after the frame's move, so the press frame doesn't lift him.Codelsmmega/mm2
    How we know
    94_run_megaman_landing_common_1:
    95	LDA z:zjoy1_pressed_bits
    96	AND #a_button
    97	BEQ @not_pressed
    98	LDA z:zjump_speed_fraction
    99	STA aobject_ycoord_speed_fraction
    100	LDA z:zjump_speed
    101	STA aobject_ycoord_speed
    102	LDA #$06
    103	STA z:zmegaman_status
    
    engine/run_megaman.asm lines 94–103 at 94f0bf3 · upstream ↗
    84	JSR _megaman_status_parameter
    85	JSR _check_object_horizontal_move
    86	JSR _check_object_vertical_move
    87	LDA z:z00
    88	BNE _run_megaman_landing_common_1
    
    engine/run_megaman.asm lines 84–88 at 94f0bf3 · upstream ↗
    13	JSR _joy
    14	LDA z:zjoy1_pressed
    15	EOR z:zjoy1_pressed_frame
    16	AND z:zjoy1_pressed
    17	STA z:zjoy1_pressed_bits
    
    home/nmi_wait.asm lines 13–17 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

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

  27. ^Gravity takes $40/256 = 0.25 px/frame from Mega Man's upward speed each frame out of water ($1E/256 in water).Codelsmmega/mm2
    How we know
    175tsa_ycoord_speed_accelerate_fraction_table:
    176	.BYTE $40, $1E
    
    engine/check_object_horizontal_move.asm lines 175–176 at 94f0bf3 · upstream ↗
    73@air:
    74	SEC
    75	LDA aobject_ycoord_speed_fraction
    76	SBC z:zobject_ycoord_speed_accelerate_fraction
    77	STA aobject_ycoord_speed_fraction
    78	LDA aobject_ycoord_speed
    79	SBC z:zobject_ycoord_speed_accelerate
    80	STA aobject_ycoord_speed
    
    engine/check_object_vertical_move.asm lines 73–80 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

  28. ^_check_object_vertical_move first moves Mega Man by his 8.8 fixed-point speed, positive up, and then subtracts gravity.Codelsmmega/mm2
    How we know
    13	SEC
    14	LDA aobject_ycoord_fraction
    15	SBC aobject_ycoord_speed_fraction
    16	STA aobject_ycoord_fraction
    17	LDA aobject_ycoord
    18	SBC aobject_ycoord_speed
    19	STA aobject_ycoord
    
    engine/check_object_vertical_move.asm lines 12–19 at 94f0bf3 · upstream ↗
    engine/check_object_vertical_move.asm#L73-L80 · 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

  29. ^Falling speed is capped at 12 px/frame ($F4).Codelsmmega/mm2
    How we know
    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-20.

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

    In the claim ledger

  30. ^In the jumping state, with A not held, _run_megaman_jumping drops an upward speed of 2 px/frame or more to exactly 1 px/frame.Codelsmmega/mm2
    How we know
    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-20.

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

    In the claim ledger

  31. ^The release cut tests only the speed's whole byte, so it applies at 2 px/frame or more and leaves a slower rise alone.Codelsmmega/mm2
    How we know
    211	LDA aobject_ycoord_speed
    212	BMI @skip
    213	CMP #$01
    214	BCC @skip
    215	BEQ @skip
    
    engine/run_megaman.asm lines 211–215 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

  32. ^_run_megaman_jumping checks the release after the frame's move and gravity, so the capped speed first moves Mega Man on the next frame.Codelsmmega/mm2
    How we know
    203	LDA aobject_ycoord_speed
    204	BMI @jump_down
    205	JSR _check_object_vertical_move
    206	LDA z:z00
    207	BNE @landing
    208	LDA z:zjoy1_pressed
    209	AND #a_button
    210	BNE @skip
    
    engine/run_megaman.asm lines 203–210 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

  33. ^Gravity brings the 4.87 px/frame take-off under 2 px/frame on frame 13, so letting go of A after 12 frames changes nothing.Verifiedlsmmega/mm2
    How we know
    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
    
    engine/run_megaman.asm lines 208–219 at 94f0bf3 · 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-25.

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

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

    In the claim ledger

  34. ^Measured in the game, Mega Man's jump peaks at 8 px on frame 5 when A is tapped and at 50 px on frame 19 when it is held 12 frames or more, landing on frames 15 and 41.Verifiedlsmmega/mm2
    How we know
    165	LDA z:zjoy1_pressed
    ⋮
    203	LDA aobject_ycoord_speed
    ⋮
    205	JSR _check_object_vertical_move
    ⋮
    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
    ⋮
    
    engine/run_megaman.asm lines 160–223 at 94f0bf3 · upstream ↗
    2	LDA aobject_ycoord
    ⋮
    8	LDA aobject_ycoord_speed
    ⋮
    13	SEC
    ⋮
    17	LDA aobject_ycoord
    ⋮
    19	STA aobject_ycoord
    ⋮
    47	LDA aobject_ycoord_speed
    ⋮
    49	SEC
    50	LDA aobject_ycoord
    ⋮
    64	SEC
    ⋮
    66	STA aobject_ycoord
    ⋮
    70	STA aobject_ycoord_speed_fraction
    71	STA aobject_ycoord_speed
    ⋮
    
    engine/check_object_vertical_move.asm lines 1–90 at 94f0bf3 · 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-25.

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

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

    In the claim ledger

  35. ^Each airborne frame, _run_megaman_jumping zeroes Mega Man's horizontal speed, then sets it to the jumping state's 1.3125 px/frame ($01.$50) toward a held Left or Right.Codelsmmega/mm2
    How we know
    160_run_megaman_jumping:
    161	JSR _check_shoot_on_ladder
    162	LDA #$00
    163	STA aobject_xcoord_speed_fraction
    164	STA aobject_xcoord_speed
    165	LDA z:zjoy1_pressed
    166	AND #left_button | right_button
    167	BNE @horizontal_jumping
    
    engine/run_megaman.asm lines 160–167 at 94f0bf3 · upstream ↗
    197@horizontal_jumping:
    198	JSR _turn_megaman
    199	JSR _megaman_status_parameter
    
    engine/run_megaman.asm lines 197–199 at 94f0bf3 · upstream ↗
    222megaman_status_xcoord_speed_table:
    ⋮
    228	.BYTE $01
    229	.BYTE $01
    ⋮
    235megaman_status_xcoord_speed_fraction_table:
    ⋮
    241	.BYTE $60
    242	.BYTE $50
    
    engine/turn_megaman.asm lines 222–246 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

  36. ^Measured in the game, Mega Man moves 1.3125 px/frame in the air, turns around on the frame the other direction is pressed, and stops on the frame the d-pad is let go.Verifiedlsmmega/mm2revised
    How we know
    162	LDA #$00
    163	STA aobject_xcoord_speed_fraction
    164	STA aobject_xcoord_speed
    165	LDA z:zjoy1_pressed
    166	AND #left_button | right_button
    167	BNE @horizontal_jumping
    ⋮
    192	LDA #$00
    ⋮
    197@horizontal_jumping:
    198	JSR _turn_megaman
    199	JSR _megaman_status_parameter
    
    engine/run_megaman.asm lines 160–202 at 94f0bf3 · upstream ↗
    72_megaman_status_parameter:
    73	LDX z:zmegaman_status
    74	LDA megaman_status_xcoord_speed_table, X
    75	STA aobject_xcoord_speed
    76	LDA megaman_status_xcoord_speed_fraction_table, X
    77	STA aobject_xcoord_speed_fraction
    
    engine/turn_megaman.asm lines 72–77 at 94f0bf3 · upstream ↗
    222megaman_status_xcoord_speed_table:
    ⋮
    228	.BYTE $01
    229	.BYTE $01
    ⋮
    235megaman_status_xcoord_speed_fraction_table:
    ⋮
    241	.BYTE $60
    242	.BYTE $50
    
    engine/turn_megaman.asm lines 222–246 at 94f0bf3 · 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-25.

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

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

    In the claim ledger

  37. ^Mega Man gets no grace window after leaving a ledge; a grounded state that finds no floor switches to the jumping state, which looks for a press only on the frame it lands.Verifiedlsmmega/mm2
    How we know
    86	JSR _check_object_vertical_move
    87	LDA z:z00
    88	BNE _run_megaman_landing_common_1
    89	LDA #$06
    90	STA z:zmegaman_status
    
    engine/run_megaman.asm lines 86–92 at 94f0bf3 · upstream ↗
    engine/run_megaman.asm#L160-L242 · 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-22.

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

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

    In the claim ledger

  38. ^Mega Man's position is his center; the floor and ceiling are tested at x−7 and x+7, 12 px below or above it, and walls at x+8 or x−8 at 12 px and 4 px above and 11 px below it.Codelsmmega/mm2
    How we know
    47	LDA aobject_ycoord_speed
    48	BMI @down
    49	SEC
    50	LDA aobject_ycoord
    51	SBC #$0C
    52	STA z:z0A
    53	LDA z:zout_of_screen
    54	SBC #$00
    55	STA z:z0B
    56	JSR _check_vertical_collision
    
    engine/check_object_vertical_move.asm lines 47–56 at 94f0bf3 · upstream ↗
    92@down:
    93	CLC
    94	LDA aobject_ycoord
    95	ADC #$0C
    
    engine/check_object_vertical_move.asm lines 92–100 at 94f0bf3 · upstream ↗
    212check_vertical_collision_xcoord_offset:
    213	.BYTE +7, -7
    
    engine/check_object_vertical_move.asm lines 212–213 at 94f0bf3 · upstream ↗
    32	CLC
    33	LDA aobject_xcoord
    34	ADC #$08
    35	STA z:z08
    
    engine/check_object_horizontal_move.asm lines 32–35 at 94f0bf3 · upstream ↗
    198check_horizontal_collision_ycoord_offset:
    199	.BYTE -12, -4, +11
    
    engine/check_object_horizontal_move.asm lines 198–199 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

  39. ^_megaman_hit sets Mega Man's upward speed to 1.25 px/frame ($01.$40) and his horizontal speed to 0.5625 ($90) once; the hit state then moves him against his facing under the usual gravity until his animation's upper timer returns to 0, and leaves to the jumping or standing state.Codelsmmega/mm2
    How we know
    6	LDA #$02
    7	STA z:zmegaman_status
    8	JSR _check_megaman_hit_status
    9	LDA #$01
    10	STA aobject_frameset_upper_timer
    11	LDA #$6F
    12	STA z:zmegaman_invincibility_time
    13	LDA #$01
    14	STA aobject_ycoord_speed
    15	LDA #$40
    16	STA aobject_ycoord_speed_fraction
    17	LDA #$00
    ⋮
    
    home/megaman_hit.asm lines 5–20 at 94f0bf3 · upstream ↗
    52_run_megaman_megaman_hit:
    53	LDA aobject_flag
    54	AND #objects_right
    55	EOR #objects_right
    56	STA z:ztoward
    57	JSR _check_object_horizontal_move
    58	JSR _check_object_vertical_move
    59	LDA aobject_frameset_upper_timer
    60	BEQ @knock_back_done
    61	JSR _check_megaman_hit_status
    62	RTS
    ⋮
    64@knock_back_done:
    ⋮
    
    engine/run_megaman.asm lines 52–72 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

  40. ^A hit sets zmegaman_invincibility_time to 111 ($6F); contact damage is skipped while it is nonzero, and it counts down by 1 each time Mega Man's sprite is processed, hiding him on alternate pairs of frames.Codelsmmega/mm2
    How we know
    11	LDA #$6F
    12	STA z:zmegaman_invincibility_time
    
    home/megaman_hit.asm lines 11–12 at 94f0bf3 · upstream ↗
    34	LDA z:zmegaman_invincibility_time
    35	BNE @skip_1
    
    home/object_hit.asm lines 34–35 at 94f0bf3 · upstream ↗
    277_is_megaman_object:
    278	TAY
    279	CPX #1
    280	BCS @not_megaman_object
    281	LDA z:zmegaman_invincibility_time
    282	BEQ @skip
    283	DEC z:zmegaman_invincibility_time
    284	LDA z:znmi_frame
    285	AND #%00000010
    286	BEQ @skip
    ⋮
    288@is_out_of_screen:
    289	JMP _skip_draw
    
    home/sprites.asm lines 277–289 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

  41. ^Each weapon has its own energy byte, filled to 28 ($1C) before a Robot Master stage or the first Wily stage but not before the later Wily stages; each weapon's routine takes its own cost, such as 2 per Air Shooter shot, 4 per Crash Bomber, and 1 per 4 Metal Blades counted on a shared counter.Codelsmmega/mm2
    How we know
    73_bosses_defeated_to_continue_stage:
    74	LDA z:zcurrent_stage
    75	CMP #stage_wily1
    76	BCC _game_over_to_continue_stage
    77	JSR _home_wily_castle
    78	LDA z:zcurrent_stage
    79	CMP #stage_wily2
    80	BCS _dont_refill_energy_on_wily_stage
    ⋮
    82_game_over_to_continue_stage:
    83	LDX #$0A
    84	LDA #$1C
    ⋮
    86@loop:
    ⋮
    
    engine/main.asm lines 73–89 at 94f0bf3 · upstream ↗
    94	SEC
    95	LDA z:zweapon_energy + $01
    96	SBC #$02
    97	STA z:zweapon_energy + $01
    
    home/weapons.asm lines 94–97 at 94f0bf3 · upstream ↗
    205@crash_bomber:
    ⋮
    212	LDA z:zweapon_energy + $07
    213	SBC #$04
    214	BCC @skip_8
    215	STA z:zweapon_energy + $07
    
    home/weapons.asm lines 205–215 at 94f0bf3 · upstream ↗
    240@not_exist_4:
    241	LDY #$07
    242	JSR _create_weapon
    243	track_queue track_metal_blade
    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 240–250 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

  42. ^Each weapon has a 14-byte table with one damage value per boss, in the order of zcurrent_boss: 0 makes the boss immune, a negative value refills its health, and other values are subtracted, doubled when zdifficulty is 0. Metal Blade's byte for Metal Man is 14 ($0E), so 14 damage, or 28 when doubled, and 0 for Air Man and Quick Man; the Mega Buster's bytes for the Robot Masters are 1 or 2; Atomic Fire refills Heat Man.Codelsmmega/mm2revised
    How we know
    1@mega_buster_damage_table:
    2	.BYTE $02 ;heatman
    3	.BYTE $02 ;airman
    4	.BYTE $01 ;woodman
    5	.BYTE $01 ;bubbleman
    6	.BYTE $02 ;quickman
    7	.BYTE $02 ;flashman
    8	.BYTE $01 ;metalman
    9	.BYTE $01 ;crashman
    
    data/weapons_bosses_damage_table.asm lines 1–9 at 94f0bf3 · upstream ↗
    113@metal_blade_damage_table:
    114	.BYTE $01 ;heatman
    115	.BYTE $00 ;airman
    116	.BYTE $02 ;woodman
    117	.BYTE $04 ;bubbleman
    118	.BYTE $00 ;quickman
    119	.BYTE $04 ;flashman
    120	.BYTE $0E ;metalman
    121	.BYTE $00 ;crashman
    
    data/weapons_bosses_damage_table.asm lines 113–121 at 94f0bf3 · 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
    393	STA z:z00
    394	BEQ @immune_8
    395	BPL @not_refilled_8
    396	JMP @refill_boss
    ⋮
    398@not_refilled_8:
    399	JSR @calc_difficulty
    
    engine/weapons_bosses_damage.asm lines 388–399 at 94f0bf3 · upstream ↗
    452@calc_difficulty:
    453	LDA z:zdifficulty
    454	BNE @difficult
    455	ASL z:z00
    ⋮
    457@difficult:
    458	RTS
    
    engine/weapons_bosses_damage.asm lines 452–458 at 94f0bf3 · upstream ↗
    60@atomic_fire:
    61	LDA z:zcurrent_boss
    62	CMP #$00
    63	BNE @not_heatman
    64	JMP @refill_boss
    
    engine/weapons_bosses_damage.asm lines 60–64 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

  43. ^Mega Man can carry a full refill of energy to use when he chooses, which the manual calls an energy crystal and the developers an Energy Tank; the team's leader doubted it was needed.ManualMega Man 2 NES manual · MM25
    How we know
    There is also an energy crystal. This is a full load of energy that Mega Man can carry around with his weapons and use whenever he is running low on juice.
    printed p. 6 (PDF 4), Energy · archived copy ↗
    Our leader was especially unsure about the use of Energy Tanks. He wasn't sure that they were really necessary
    pp. 35-36, Inafune · archived copy ↗

    The quote matches our archived copy.

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

    In the claim ledger

  44. ^Keiji Inafune says the three items were added to help players past Mega Man 2's many more traps, after players and Capcom's marketing department found parts of the first game too hard.PublisherMM25
    How we know
    In 'Mega Man 2', we kept all of the above, but added many more traps. We implemented Items 1, 2, and 3 to assist the players in this respect. … there were some areas that were 'too difficult'. We even had the marketing department asking us to make things a little more playable.
    pp. 35-36, Inafune · archived copy ↗

    The quote matches our archived copy.

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

    In the claim ledger

  45. ^Mega Man 2's password is 9 dots on a 5 by 5 grid; the entry screen counts down from 9 as the player places dots with A and takes them back with B, and reads the password when the ninth is placed.Codelsmmega/mm2
    How we know
    107	LDA #$09
    108	STA aobject_frameset_lower_timer
    
    engine/password.asm lines 105–108 at 94f0bf3 · upstream ↗
    165	BEQ @skip
    ⋮
    168	AND #a_button
    169	BEQ @b_pressed
    170	LDA aobject_flag, X
    171	BNE @skip
    172	track_queue track_1up
    173	INC aobject_flag, X
    174	DEC aobject_frameset_lower_timer
    175	BEQ @all_ball_set
    176	BNE @skip
    ⋮
    178@b_pressed:
    179	LDA aobject_flag, X
    ⋮
    
    engine/password.asm lines 162–189 at 94f0bf3 · upstream ↗
    18password_oamycoord:
    19	.BYTE $40, $40, $40, $40, $40
    ⋮
    25password_oamxcoord:
    26	.BYTE $41, $51, $61, $71, $81
    27	.BYTE $41, $51, $61, $71, $81
    28	.BYTE $41, $51, $61, $71, $81
    29	.BYTE $41, $51, $61, $71, $81
    30	.BYTE $41, $51, $61, $71, $81
    
    data/password/password_oam.asm lines 18–30 at 94f0bf3 · upstream ↗

    Checked against the evidence by its author, an AI model, 2026-10-22.

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

    In the claim ledger

  46. ^Mega Man 2's password holds the E-tank count and, for each of the 8 Robot Masters, whether he is beaten; a dot in the top row's first five cells gives 0-4 E-tanks, and each Robot Master has one "beaten" cell and one "not beaten" cell among the other 20, which also include 4 cells that mean nothing.Codelsmmega/mm2
    How we know
    1password_boss_clear_set:
    2	.BYTE no_boss_clear,        boss_heatman_clear,  no_boss_clear,        boss_quickman_clear, boss_woodman_clear
    ⋮
    7password_boolean:
    8	.BYTE boss_clear_yes, boss_clear_yes, boss_clear_yes, boss_clear_yes, boss_clear_no
    
    data/password/password.asm lines 1–11 at 94f0bf3 · upstream ↗
    31;boss clear flags
    32	no_boss_clear        = 0
    33	boss_heatman_clear   = 1 << 0
    ⋮
    42;boss clear in password
    43.ENUM
    44	boss_clear_yes
    45	boss_clear_no
    
    constants/flags.asm lines 30–46 at 94f0bf3 · upstream ↗
    29	LDA z:zgot_weapon_flag
    30	STA z:z00
    31	EOR #%11111111
    32	STA z:z01
    33	CLC
    34	LDA z:ze_tank
    35	TAX
    36	ADC #$05
    37	STA z:z03
    38	INC aobject_flag, X
    ⋮
    42	LDY password_boolean, X
    43	LDA a:z00, Y
    ⋮
    
    engine/show_password.asm lines 29–60 at 94f0bf3 · upstream ↗

    Checked against the evidence by its author, an AI model, 2026-10-22.

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

    In the claim ledger

  47. ^A correct Mega Man 2 password gives Mega Man the weapon of every boss in its beaten byte, Item 1 if Heat Man is beaten, Item 2 if Air Man is, and Item 3 if Flash Man is, plus its E-tank count; the password holds nothing else.Codelsmmega/mm2
    How we know
    275@correct:
    276	LDA z:z02
    277	STA z:zgot_weapon_flag
    278	AND #%00000011
    279	STA z:zgot_item_flag
    280	LDA z:zgot_weapon_flag
    281	AND #%00100000
    282	LSR
    283	LSR
    284	LSR
    285	ORA z:zgot_item_flag
    286	STA z:zgot_item_flag
    ⋮
    
    engine/password.asm lines 275–288 at 94f0bf3 · upstream ↗
    33	boss_heatman_clear   = 1 << 0
    34	boss_airman_clear    = 1 << 1
    ⋮
    38	boss_flashman_clear  = 1 << 5
    
    constants/flags.asm lines 30–39 at 94f0bf3 · upstream ↗

    Checked against the evidence by its author, an AI model, 2026-10-22.

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

    In the claim ledger

  48. ^Mega Man 2 shifts the 20 boss cells by the E-tank count; table entry i goes to cell 5 + (E-tanks + i) mod 20, wrapping from the last cell back to the first cell of the second row, so the same bosses beaten give a different grid for each E-tank count.Codelsmmega/mm2
    How we know
    34	LDA z:ze_tank
    35	TAX
    36	ADC #$05
    37	STA z:z03
    ⋮
    51	INY
    52	CPY #$19
    53	BNE @next_1
    54	LDY #$05
    
    engine/show_password.asm lines 33–57 at 94f0bf3 · upstream ↗
    202@get_e_tank:
    203	STX z:z04
    204	TXA
    205	CLC
    206	ADC #$05
    207	TAX
    ⋮
    226	INX
    227	CPX #$19
    228	BNE @check_continue
    229	LDX #$05
    
    engine/password.asm lines 202–235 at 94f0bf3 · upstream ↗

    Checked against the evidence by its author, an AI model, 2026-10-22.

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

    In the claim ledger

  49. ^Mega Man 2 reads the E-tank count as the first dot in the top row's first four cells, or 4 if none of them holds one, without looking at the fifth; it then ORs each dotted cell's boss into a beaten byte or a not-beaten byte and accepts the password only if the two together cover all 8 bosses, else it writes PASSWORD ERROR ! and, after two waits of 125 frames, returns to the menu of START and PASSWORD.Codelsmmega/mm2revised
    How we know
    195@loop_6:
    196	LDA aobject_flag, X
    197	BNE @get_e_tank
    198	INX
    199	CPX #$04
    200	BNE @loop_6
    ⋮
    213@loop_7:
    214	LDA aobject_flag, X
    215	BEQ @ball_not_set
    216	LDY z:z01
    217	LDA password_boss_clear_set, Y
    218	PHA
    ⋮
    
    engine/password.asm lines 189–273 at 94f0bf3 · upstream ↗
    10	.BYTE "@START@@@"
    ⋮
    19	.BYTE "@PASSWORD@"
    ⋮
    28	.BYTE "PASSWORD@"
    ⋮
    37	.BYTE "ERROR@!@@@"
    
    data/password/strings.asm lines 1–37 at 94f0bf3 · upstream ↗

    Checked against the evidence by its author, an AI model, 2026-10-22.

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

    In the claim ledger

  50. ^Mega Man 2 draws its energy meters as sprites, not a split screen; each meter is a column of 7 sprites from Y $18 down to $48, each showing 0-4 units, at X $10 for the weapon, $18 for life, and $28 for a boss.Codelsmmega/mm2
    How we know
    473	vertical_bar_base_ycoord = $18
    474	hp_bar_xcoord            = $18
    475	weapon_bar_xcoord        = $10
    476	boss_bar_xcoord          = $28
    
    home/sprites.asm lines 473–476 at 94f0bf3 · upstream ↗
    530_draw_bar_tile:
    531	LDY #6
    ⋮
    533@loop:
    534	LDA @vertical_bar_ycoord_table, Y
    535	STA aoam_y, X
    536	SEC
    537	LDA z:z00
    538	SBC #4
    
    home/sprites.asm lines 530–545 at 94f0bf3 · upstream ↗
    572@vertical_bar_ycoord_table:
    573	.BYTE vertical_bar_base_ycoord + 0
    ⋮
    579	.BYTE vertical_bar_base_ycoord + 48
    
    home/sprites.asm lines 572–579 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

  51. ^On even frames _sprites writes Mega Man's object slots (0 to $0F), then the enemies' ($10 to $1F), then the energy meters; on odd frames it writes the meters first and the slots in reverse, $1F down to $10, then $0F down to 0, so objects that lose the 8-per-scanline race lose it only every other frame.Codelsmmega/mm2revised
    How we know
    12@time_stopper_flag_not_set:
    13	LDA z:znmi_frame
    14	AND #%00000001
    15	BNE @invert
    ⋮
    21@loop_1:
    22	JSR _draw_megaman_with_animation
    ⋮
    26	CMP #$10
    27	BNE @loop_1
    ⋮
    29@loop_2:
    30	JSR _draw_enemies_with_animation
    ⋮
    34	CMP #$20
    35	BNE @loop_2
    ⋮
    
    home/sprites.asm lines 12–38 at 94f0bf3 · upstream ↗
    43@invert:
    44	JSR _draw_bar
    ⋮
    47	LDA #$1F
    48	STA z:zsprites_pointer
    ⋮
    50@loop_3:
    51	JSR _draw_enemies_with_animation
    52	BCS @max_2
    53	DEC z:zsprites_pointer
    ⋮
    58@loop_4:
    59	JSR _draw_megaman_with_animation
    60	BCS @max_2
    61	DEC z:zsprites_pointer
    ⋮
    
    home/sprites.asm lines 43–62 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

  52. ^Once a frame _background_palette counts up to a stage's frame byte and then copies the next 16-byte background palette set into the working palette, wrapping after the stage's set count; Heat Man's stage has 3 sets and a frame byte of 6, so its palette 3 rotates $36, $26, $16 one step every 7 frames.Codelsmmega/mm2
    How we know
    1_background_palette:
    ⋮
    4	LDA apalette_animation_frame
    5	BEQ @skip
    6	INC z:zpalette_animation_timer
    7	CMP z:zpalette_animation_timer
    8	BCS @skip
    9	LDA #$00
    10	STA z:zpalette_animation_timer
    11	INC z:zcurrent_palette_no
    12	LDA z:zcurrent_palette_no
    13	CMP ano_of_palette
    ⋮
    15	LDA #$00
    ⋮
    
    home/background_palette.asm lines 1–32 at 94f0bf3 · upstream ↗
    1_nmi_wait_0e:
    ⋮
    6	JSR _background_palette
    7	LDA #$00
    8	STA z:znmi_wait
    ⋮
    10@loop:
    11	LDA z:znmi_wait
    12	BEQ @loop
    
    home/nmi_wait.asm lines 1–12 at 94f0bf3 · upstream ↗
    1;heatman palette init
    2	;     number of background animation palette(s), frame(s)
    3	.BYTE 3, 6
    ⋮
    9	.BYTE black, pale_red,  white_red,  light_red
    ⋮
    22	.BYTE black, pale_red,  white_red,  light_red
    ⋮
    28	.BYTE black, white_red, light_red,  pale_red
    ⋮
    34	.BYTE black, light_red, pale_red,   white_red
    
    stages/heatman_wily1/heatman_wily1_palette_init.asm lines 1–34 at 94f0bf3 · upstream ↗
    2	dark_gray
    ⋮
    16	light_gray
    ⋮
    22	light_red
    ⋮
    29	white_gray = $20
    ⋮
    42	pale_gray = $30
    ⋮
    48	pale_red
    
    constants/palettes.asm lines 1–55 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

  53. ^lsmmega's disassembly builds this exact ROM; with the iNES header its header.asm writes in place of the NES 2.0 one, the ROM's SHA-1 is the build's.Verifiedlsmmega/mm2
    How we know
    8	prg_rom   = 256
    9	chr_rom   = 0
    10	mapper    = 1
    11	mirroring = vertical
    
    header.asm lines 8–19 at 94f0bf3 · upstream ↗
    5It builds on `Megaman II (U) [!].nes` `SHA1: 6B5B9235C3F630486ED8F07A133B044EAA2E22B2`
    
    README.md line 5 at 94f0bf3 · 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-20.

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

    In the claim ledger

  54. ^Mega Man 2 keeps Mega Man's jump and running numbers. Both take off at $04.$DF, subtract $40 of gravity a frame, cap a fall at $F4, cut a rise of 2 px/frame or more to 1 when A is up, and move at 0.125, 1.375, and 1.3125 px/frame stepping, running, and in the air.Codelsmmega/mm1 · lsmmega/mm2
    How we know
    216@start_jump_up:
    217	LDA #$04
    218	STA aobject_ycoord_speed
    219	LDA #$DF
    
    engine/run_megaman.asm lines 216–221 at b606a84 · upstream ↗
    97	LDA aobject_ycoord_speed_fraction, X
    98	SBC #$40
    ⋮
    103	CMP #$F4
    
    engine/objects_vertical.asm lines 97–103 at b606a84 · upstream ↗
    100@start_jump_down:
    101	LDA aobject_ycoord_speed
    102	BMI @jumping_down
    103	CMP #$01
    104	BCC @jumping_down
    105	BEQ @jumping_down
    106	LDA #$01
    107	STA aobject_ycoord_speed
    
    engine/run_megaman.asm lines 100–107 at b606a84 · upstream ↗
    4	.BYTE $00 | $20
    ⋮
    10	.BYTE $01 | $50
    11	.BYTE $01 | $60
    
    data/special_xcoord_speed_table.asm lines 4–11 at b606a84 · 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
    
    engine/check_object_vertical_move.asm lines 81–82 at 94f0bf3 · 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
    
    engine/run_megaman.asm lines 208–217 at 94f0bf3 · 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.

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

    In the claim ledger

  55. ^Mega Man 2 keeps Mega Man's hit numbers too, 111 frames of invincibility ($6F) and a knockback of 1.25 px/frame up and 0.5625 back.Codelsmmega/mm1 · lsmmega/mm2
    How we know
    129	LDA #$6F
    130	STA z:zmegaman_invincibility_time
    
    engine/check_megaman_damaged.asm lines 129–130 at b606a84 · upstream ↗
    64	.BYTE $12, $01 | $40
    
    engine/handle_special_megaman_objects.asm line 64 at b606a84 · upstream ↗
    12	.BYTE $00 | $90
    
    data/special_xcoord_speed_table.asm line 12 at b606a84 · upstream ↗
    11	LDA #$6F
    12	STA z:zmegaman_invincibility_time
    13	LDA #$01
    14	STA aobject_ycoord_speed
    15	LDA #$40
    16	STA aobject_ycoord_speed_fraction
    17	LDA #$00
    18	STA aobject_xcoord_speed
    19	LDA #$90
    20	STA aobject_xcoord_speed_fraction
    
    home/megaman_hit.asm lines 11–20 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

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

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

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

Sources

Code

Primary

Secondary

  • staff, Famicom Tsūshin editorial. 1989. “Biweekly Famicom Tsūshin, issues 65-66 (1989-01-06).” Biweekly Famicom Tsūshin (ファミコン通信), no. 65-66. ASCII Corporation. original · archived · licence, all uses
  • Chris, Hoffman, and Nintendo Power editors. 2007. “Nintendo Power, issue 219 (2007-09).” Nintendo Power, vol. 219. Nintendo of America. original · archived · licence, all uses
  • Christian, Nutt, and Speer, Justin. 2003. “The History of Mega Man.” original · archived · licence, all uses
  • Nintendo Power editors. 1989. “Nintendo Power, issue 9 (1989-11).” Nintendo Power, vol. 9. Nintendo of America. original · archived · licence, all uses