Mega Man 2
Capcom's 1988 action platformer for the NES, the second in the series.
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.
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
Code lineage
Mechanics
| Mechanic | Kind | How |
|---|---|---|
| Status bar split | Sprite overlay | no split screen; the energy meters are drawn as sprites |
| Sprite flicker | Alternating order | crowded sprites take turns, so they flicker instead of vanishing |
| Palette cycling | Palette sets | a stage can animate by stepping through a list of palettes |
| Variable jump height | Release cap | letting go of A stops the rise almost at once |
| Jump | One speed | every jump takes off at the same speed |
| Gravity | One gravity | one gravity, whatever the button does |
| Air control | Direct | the d-pad moves him at full speed in the air, and he turns and stops at once |
| Running | Stepped | a short first step, then full speed, with no acceleration |
| Hitbox | Box | one box against walls and floors |
| Invincibility frames | Frame timer | a fixed spell of invincibility after each hit, as in Mega Man |
| Knockback | Fixed shove | a hit pops him up and pushes him back until its animation ends |
| Weapon energy | Per weapon | each weapon has its own energy, and each shot costs its own amount |
| Boss weakness | Boss table | each weapon does its own damage to each boss, nothing to some, and heals one |
| Password and battery save | Password | nine dots on a grid record the bosses beaten and the Energy Tanks |
| Coyote time | None | walk off a ledge and A does nothing; jumps start only from the ground |
| Ground slide | None | no slide; A on the ground always jumps |
| Charge shot | None | no charge; the buster fires when B goes down |
Every claim about this game, by concept (87)
References
- ^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.
- ^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.
- ^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.
- ^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.
- ^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.
- ^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.
- ^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.
- ^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.
- ^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.
- ^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).
- ^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.
- ^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.
- ^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.
- ^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.
- ^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.
- ^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.
- ^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.
- ^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.
- ^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.
- ^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.
- ^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.
- ^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.
- ^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.
- ^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 standing, walking, running, and landing states, a fresh A press (
zjoy1_pressed_bits) copieszjump_speedinto Mega Man's vertical speed after the frame's move, so the press frame doesn't lift him.Codelsmmega/mm2How 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.
- ^Mega Man's jump speed is
$04.$DF, 4.87 px/frame upward, out of water ($05.$80in water).Codelsmmega/mm2How we know
181tsa_regular_water_jump_speed_table: 182 .BYTE $04, $05 ⋮ 184tsa_regular_water_jump_speed_fraction_table: 185 .BYTE $DF, $80
engine/check_object_horizontal_move.asm lines 181–185 at 94f0bf3 · upstream ↗ 82 LDA tsa_regular_water_jump_speed_table, X 83 STA z:zjump_speed 84 LDA tsa_regular_water_jump_speed_fraction_table, X 85 STA z:zjump_speed_fraction
engine/tsa.asm lines 82–85 at 94f0bf3 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-20.
Checked by a second AI model, 2026-10-21.
- ^Gravity takes
$40/256 = 0.25 px/frame from Mega Man's upward speed each frame out of water ($1E/256 in water).Codelsmmega/mm2How 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.
- ^
_check_object_vertical_movefirst moves Mega Man by his 8.8 fixed-point speed, positive up, and then subtracts gravity.Codelsmmega/mm2How 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.
- ^Falling speed is capped at 12 px/frame (
$F4).Codelsmmega/mm2How 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 jumping state, with A not held,
_run_megaman_jumpingdrops an upward speed of 2 px/frame or more to exactly 1 px/frame.Codelsmmega/mm2How 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.
- ^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.
- ^
_run_megaman_jumpingchecks the release after the frame's move and gravity, so the capped speed first moves Mega Man on the next frame.Codelsmmega/mm2How 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.
- ^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.
- ^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.
- ^Each airborne frame,
_run_megaman_jumpingzeroes 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/mm2How 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.
- ^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.
- ^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.
- ^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.
- ^
_megaman_hitsets 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/mm2How 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.
- ^A hit sets
zmegaman_invincibility_timeto 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/mm2How 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.
- ^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/mm2How 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.
- ^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 whenzdifficultyis 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/mm2revisedHow 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.
- ^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.
- ^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.
- ^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.
- ^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.
- ^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.
- ^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.
- ^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.
- ^Mega Man 2 draws its energy meters as sprites, not a split screen; each meter is a column of 7 sprites from Y
$18down to$48, each showing 0-4 units, at X$10for the weapon,$18for life, and$28for a boss.Codelsmmega/mm2How 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.
- ^On even frames
_spriteswrites Mega Man's object slots (0 to$0F), then the enemies' ($10to$1F), then the energy meters; on odd frames it writes the meters first and the slots in reverse,$1Fdown to$10, then$0Fdown to 0, so objects that lose the 8-per-scanline race lose it only every other frame.Codelsmmega/mm2revisedHow 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.
- ^Once a frame
_background_palettecounts 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,$16one step every 7 frames.Codelsmmega/mm2How 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.
- ^lsmmega's disassembly builds this exact ROM; with the iNES header its
header.asmwrites in place of the NES 2.0 one, the ROM's SHA-1 is the build's.Verifiedlsmmega/mm2How 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.
- ^Mega Man 2 keeps Mega Man's jump and running numbers. Both take off at
$04.$DF, subtract$40of 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/mm2How 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.
- ^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/mm2How 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 | $40engine/handle_special_megaman_objects.asm line 64 at b606a84 · upstream ↗ 12 .BYTE $00 | $90data/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.
- ^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-ca65revisedHow we know
286slide_initiate_confirmed: lda #PSTATE_SLIDE ; state $02 = player_slide 287 sta player_state ; set player state to slide 288 lda #$14 ; slide timer = 20 frames 289 sta $33 ; store slide timer 290 lda #$10 ; OAM anim $10 = slide sprite 291 jsr reset_sprite_anim ; set slide sprite animation 292 lda ent_y_px ; player Y += 2 (crouch posture) 293 clc ; prepare for addition 294 adc #$02 ; lower Y by 2 for slide crouch 295 sta ent_y_px ; store adjusted Y position 296 lda #$80 ; X speed = $02.80 = 2.5 px/frame 297 sta ent_xvel_sub ; X velocity sub-pixel ⋮
src/fixed/player_states.asm lines 286–299 at 58ca1c3 · upstream ↗ 318 beq slide_move_check_facing ; always → skip to slide movementsrc/fixed/player_states.asm line 318 at 58ca1c3 · upstream ↗ 344slide_collision_wall_solid: lda $10 ; hit a wall? 345 and #$10 ; bit 4 = solid wall 346 bne slide_end_ground_check ; yes → end slide 347 lda $33 ; timer expired? 348 beq slide_end_ground_check ; yes → end slide 349 dec $33 ; decrement timer 350 lda $33 ; check slide timer phase 351 cmp #$0C ; >= $0C? (uncancellable phase) 352 bcs slide_continue_moving ; yes → uncancellable, keep sliding 353 lda joy1_press ; A button pressed? (cancellable phase) 354 and #BTN_A ; check A button 355 bne slide_end_ground_check ; yes → cancel into slide jump ⋮
src/fixed/player_states.asm lines 344–366 at 58ca1c3 · upstream ↗ 328 lda joy1_held ; read held D-pad 329 and #$03 ; mask left/right bits 330 beq slide_move_check_facing ; no direction → keep sliding 331 cmp player_facing ; same as current facing? 332 beq slide_move_check_facing ; yes → keep sliding 333 sta player_facing ; changed direction → end slide 334 bne slide_end_ground_check ; always taken → end slide
src/fixed/player_states.asm lines 328–334 at 58ca1c3 · upstream ↗ 367 sta player_state ; state = on_ground 368 lda joy1_press ; A button pressed? 369 and #BTN_A ; check A button 370 bne slide_jump_walk_speed_init ; yes → slide jump ⋮ 380 lda #$01 ; X velocity whole = 1 ⋮ 386slide_jump_walk_speed_init: lda #$4C ; walk speed X = $01.4C 387 sta ent_xvel_sub ; X velocity sub = $4C 388 lda #$01 ; X velocity whole = 1 389 sta ent_xvel ; X velocity = 1 390 jmp player_ground_normal_jump ; jump from slide (uses slide_jump velocity)
src/fixed/player_states.asm lines 367–390 at 58ca1c3 · upstream ↗ Measured by a script in MesenCE 2.2.1 (build 4b8a196), on . It fails if the result disagrees with the claim.
The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-26.
Revised after a check by a second AI model, 2026-10-21.
Checked by a second AI model, 2026-10-26.
- ^A hit (state
$06) sets Mega Man's vertical speed to the resting$FF.$C0on its first frame, then each frame applies gravity and pushes him against his facing at 0.5 px/frame ($00.$80) until the hurt animation's state reaches 9; a hit during a slide doesn't push him.Codeplasticsmoke/megaman3-disassembly-ca65How we know
750player_damage_anim_set: jsr reset_sprite_anim ; set player damage animation 751 lda #$00 ; clear walk/shoot flag 752 sta shoot_anim_timer ; clear walk/shoot flag 753 jsr reset_gravity ; reset vertical velocity
src/fixed/player_states.asm lines 750–753 at 58ca1c3 · upstream ↗ 776player_knockback_physics: lda $3E ; check saved OAM for special cases: 777 cmp #$10 ; $10 = sliding (no knockback physics) 778 beq player_knockback_landing ; sliding → skip knockback 779 cmp #$79 ; >= $79 = special state (skip physics) 780 bcs player_knockback_landing ; special OAM → skip knockback physics 781 ldy #$00 ; Y = 0 (player slot) 782 jsr move_vertical_gravity ; apply gravity, carry = landed 783 lda #$80 ; knockback speed = $00.80 (half pixel/frame) 784 sta ent_xvel_sub ; set knockback X speed sub 785 lda #$00 ; knockback X speed whole = 0 786 sta ent_xvel ; x_speed whole = 0 787 lda ent_flags ; save facing before move ⋮
src/fixed/player_states.asm lines 776–790 at 58ca1c3 · upstream ↗ 806player_knockback_landing: lda ent_anim_state ; ent_anim_state = animation/collision state 807 cmp #$09 ; $09 = landed after knockback 808 bne player_knockback_done ; not landed → continue knockback
src/fixed/player_states.asm lines 806–808 at 58ca1c3 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Checked by a second AI model, 2026-10-21.
- ^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.
Sources
Code
- lsmmega. 2026. “mm2: Mega Man 2 disassembly (lsmmega/mm2).” Commit 94f0bf3. lsmmega/mm2 @ 94f0bf3 · licence, all uses
- lsmmega. 2026. “mm1: Mega Man disassembly (lsmmega/mm1).” Commit b606a84. lsmmega/mm1 @ b606a84 · licence, all uses
- plasticsmoke. 2026. “Mega Man 3 (U), annotated ca65 disassembly (plasticsmoke).” Commit 58ca1c3. plasticsmoke/megaman3-disassembly-ca65 @ 58ca1c3 · licence, all uses
- plasticsmoke. 2026. “Mega Man 4 (U), annotated ca65 disassembly (plasticsmoke).” Commit a63bb6e. plasticsmoke/megaman4-disassembly-ca65 @ a63bb6e · licence, all uses
- 1992. “Mega Man 4 (USA) (Rev 1).” · licence, all uses
Primary
- Capcom and UDON Entertainment. 2013. “MM25: Mega Man & Mega Man X Official Complete Works.” UDON Entertainment. original · archived · licence, all uses
- America, Nintendo of. n.d. “NES Games (Nintendo of America release list).” Nintendo of America. original · archived · licence, all uses
- U.S.A., Capcom. 1989. “Mega Man 2 Instruction Booklet (NES, North America).” Capcom U.S.A. original · archived · licence, all uses
- Mohammed, Taher, and Tateishi, Takashi. 2015. “A Conversation with Takashi Tateishi.” original · archived · licence, all uses
- Tony, Ponce,. 2013. “Keiji Inafune dropped mad Mega Man secrets on me.” original · archived · licence, all uses
- Co., Capcom and Ltd. as o. “Platinum Titles (Capcom IR site, English).” Capcom Co., Ltd. original · archived · licence, all uses
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