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 is Capcom’s action platformer for the NES, released in December 19871. The player picks which of six Robot Masters to fight from a menu, in any order2. Each one Mega Man beats gives him its weapon3, and Dr. Wily’s stage comes last4. Akira Kitamura planned the game and drew its first pixel characters5,6. Keiji Inafune turned them into illustrations6.

The game sold modestly, not well enough to earn an immediate sequel, and its team made Mega Man 2 in their own time7. Mega Man 2 kept the free choice of boss and the stolen weapons8, and retrospectives credit the two with the series’ long run9.

#How it plays

Mega Man never builds up speed. Each animation sets his speed outright: a short first step, then a full-speed run, and he slides briefly to a stop10. The d-pad works the same way in the air. Hold a direction and he moves at once; let go and he stops10.

Every jump leaves the ground at the same speed under one gravity11,12. Its height depends only on how long A is held. Let go on the way up and he stops rising almost at once13.

Mega Man 2 keeps every one of these numbers14 but not their timing. Mega Man’s first step lasts 9 frames and his slide to a stop 13, where Mega Man 2’s last 7 and 815,16.

Interactive: movement-lab (needs JavaScript)

Mega Man and Mega Man 2: the same speeds, timed differently

A hit knocks him up and back, and he can’t be hurt again for a short while17,18.

#Across the series

Mega Man 2 keeps the hit’s numbers too19. It moves the constants into tables, with a second column for water.

Cartridge

Interactive: rom-parts (needs JavaScript)

128 KB, a cell per 512 bytes, from 306 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.

Mechanics

MechanicKindHow
JumpOne speedevery jump takes off at the same speed
GravityOne gravityone gravity, whatever the button does
Variable jump heightRelease capletting go of A stops the rise almost at once
RunningSteppeda short first step, then full speed, with no acceleration
Air controlDirecthold a direction and he moves at full speed; let go and he stops
Invincibility framesFrame timera fixed spell of invincibility after each hit
KnockbackFixed shovea hit pushes him up and back until its animation ends
Every claim about this game, by concept (41)
generalMega Man'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 came out in December 1987.Publisher
Mega Man chooses which of six Robot Masters to fight from a menu, in any order; they are Cut Man, Guts Man, Ice Man, Bomb Man, Fire Man, and Elec Man.Manual
Each Robot Master Mega Man beats gives him a new weapon.Manual
Once all six Robot Masters are beaten, Dr. Wily's stage follows, the seventh and last.Manual
The game's planner drew the original Mega Man, Roll, and Dr. Light as pixel graphics, and Keiji Inafune turned them into illustrations.Publisher
Mega Man's planner, credited as A.K., is Akira Kitamura.Publisher
Mega Man sold modestly, not well enough to earn an immediate sequel, and its team made Mega Man 2 in their own time.Magazine
Retrospectives credit the free stage order and the stolen weapons with the series' long run.Web
Rockman was renamed Mega Man for the US in the belief that children wouldn't take to a hero named Rockman.Web
Rockman's design and motives resemble those of Osamu Tezuka's Mighty Atom (Astro Boy).Web
Air controlIn the air the jumping animation isn't in the speed lookup's table, so each frame sets Mega Man's speed to 1.3125 px/frame ($01.$50) toward a held Left or Right and to 0 with neither; a direction pressed fresh in the air first sets the first step's animation, so that one frame moves 0.125 px/frame.Verified
Coyote timeEvery frame that finds a floor under him sets Mega Man's vertical speed to $FF.$40, −0.75 px/frame, with no gravity after it, so each grounded frame's vertical move takes him 0.75 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 starts a fall.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 animation's speed, drops him 0.75 px, and leaves him falling at 1 px/frame in the jumping animation, so his feet are 0, 1, 3, 4, 6, 8, and 10 px below the ledge on the walk-off frame and the six after.Verified
Mega Man gets no grace window after leaving a ledge; _run_megaman_on_stage reads a fresh A press only on the branch where the frame's fall test found ground, either the map's floor or an object he stands on (_no_damage_collision).Verified
GravityEach airborne frame takes $40/256 = 0.25 px/frame off Mega Man's upward speed, and a fall is capped at 12 px/frame ($F4).Code
_objects_vertical_moving first moves Mega Man by his 8.8 fixed-point vertical speed, positive up (his Y, which runs down the screen, subtracts it), and then, on a frame that meets no floor or ceiling, takes gravity off the speed.Code
Mega Man's fall is capped at 12 px/frame ($F4).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, toward his facing, at 12 px and 4 px above and 11 px below it. Every animation he has on foot or in the air uses these offsets.Code
_check_special_blockset_or_tsa_collision turns a test point into a tile: X / 32 and Y / 32 pick a 32 px block of the screen's map, bit 4 of Y and of X pick one of its four 16 px tiles, and the tile's top two bits give its kind through a per-stage table: background, block, and two of ladder, spike, ice, and water.Code
Each frame on foot or in the air, _run_megaman_on_stage moves Mega Man horizontally first, testing for a wall, then vertically, testing the floor under a fall or the ceiling over a rise, and only then checks for a jump or lands, runs, slides, or stands, so a frame's floor test uses that frame's new X. The one change made before the move is a Left or Right pressed fresh, which sets the first step's animation (ground-states).Code
When the horizontal move puts the wall point ahead in a solid tile, _objects_rightward or _objects_leftward puts x + 8 on that tile's first column moving right, or x − 8 on the first column past it moving left, and keeps the X fraction of the move; his speed and animation are untouched, so he runs in place.Verified
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, _objects_vertical_moving puts that point on the first row under the block's 16 px tile, zeroes the Y fraction, and sets his speed to −0.75 px/frame, the speed a landing gets; _run_megaman_on_stage then returns before the release test and before setting the jumping animation, and he falls from the next frame. Measured in Mesen at the start of Bomb Man's stage, under 16 px blocks that the probe adds to the stage's collision.Verified
Invincibility framesA hit sets zmegaman_invincibility_time to 111 ($6F); while it is nonzero no contact damages Mega Man, and the stage loop counts it down by 1 on each pass that runs the enemies.Code
JumpA fresh A press on the ground sets Mega Man's upward speed to $04.$DF, 4.87 px/frame.Code
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.Code
When a falling Mega Man's floor points find a block, _objects_vertical_moving sets his Y to the top of that 16 px tile less 12, which puts his feet on it, zeroes the Y fraction, and sets the speed to −0.75 px/frame (ground-check); so a fall of up to 12 px a frame always ends on the top of the tile it meets.Verified
No grounded frame tests the ceiling, since Mega Man's vertical speed on the ground is −0.75 px/frame (ground-check) and the vertical move tests only the floor at a negative speed; the jump press then sets the jump speed without testing the ceiling, so a press under a block still starts the jump, and the rise meets the block on a later frame. Measured in Mesen at the start of Bomb Man's stage, under a 16 px block the probe adds to the stage's collision.Verified
A jump press returns before the animation changes, and the jumping animation is set only after the next frame's move, so the press frame and the one after both move at the ground animation's speed (two frames of 1.375 px/frame from a run, of 0.125 from a first step, and none from standing still); from the third frame the air speed applies.Verified
Mega Man lands running, at 1.375 px/frame from the next frame with no first step, only if Left or Right is held on the landing frame itself; with the direction let go on that frame he lands standing, and with nothing held then or the frame before he lands into the landing animation, which moves no faster than standing. A direction pressed fresh on the landing frame starts the first step.Verified
KnockbackA hit faces Mega Man against the enemy's facing and puts him in the hit animation ($12), which sets his upward speed to 1.25 px/frame ($01.$40) once and pushes him backward, against his own facing, at 0.5625 px/frame ($90) under the usual gravity until the animation ends.Code
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.Code
RunningOff ice, Mega Man never accelerates. Each frame his animation picks a speed from special_object_xcoord_speed_table, 0 standing, 0.125 px/frame on the first step, 1.375 running, 0.5 sliding to a stop, 0 landing, and 0.5625 when hit; any other animation, such as the jump, moves at 1.3125 with a direction held and 0 without.Code
Mega Man's animation is his state. A Left or Right pressed fresh, with neither held the frame before, starts the first step ($03) with its timer at 0, on the ground or in the air; each frame on the ground after the move, a held direction turns the step into the run ($06) once its timer reads $22, and lands a jump running; a direction let go turns a run into the slide to a stop ($0C, timer 1) and anything else into standing; with no direction this frame or the last, a jump lands into the landing animation ($0F, timer 1), and the slide and the landing end in standing when their timer wraps to 0.Code
After Mega Man's frame, _object_frameset_timer advances his animation's timer from the frameset's first byte: the low nibble counts up to the byte's low nibble, then the high nibble moves to the next animation frame or wraps to 0 after the last. The first step shows 3 frames for 3 frames each; the press frame sets its timer to 0 and the ground check reads it before that frame's advance, so the check first finds $22 on the step's 9th frame; the slide shows 2 frames for 7 each (8 in the shooting pose), and the landing 2 frames for 2 each.Code
Measured from a standstill at the start of Bomb Man's stage, Mega Man's first step lasts 9 frames at 0.125 px/frame, and a released run slides 13 frames at 0.5 px/frame, 6.5 px in all, before he stands; a jump landed with nothing held shows the landing animation for 3 frames.Verified
A buster shot sets aobject_timer to $1F, which shows Mega Man's shooting animations for 15 frames, counting the press frame; their framesets time the slide to a stop at 8 frames per animation frame instead of 7, so a shot fired shortly before or during the slide lengthens it. A Left or Right pressed fresh clears the pose.Code
Each frame _change_direction faces Mega Man toward a held Left or Right before his speed is looked up and he moves, so he reverses at full speed with no skid; a reversal from one held direction to the other isn't a fresh press, so a run stays a run.Verified
Down changes nothing on open ground; _megaman_on_stage reads Up and Down only when a ladder tile is at hand.Verified
Mega Man's ordinary-floor movement differs from Mega Man 2's, measured in Mesen at the start of Bomb Man's stage and of Heat Man's. The first difference: holding Right from a standstill, Mega Man is still in his first step on the 8th frame, moving 0.125 px, where Mega Man 2 runs at 1.375. After it: a slide of 13 frames, not 8; two frames at the ground speed after a jump press, not one; a landing that runs only with a direction held on the landing frame, not the frame before; 0.125 px/frame on a fresh press in mid-air; −0.75 px/frame on the ground, not −0.25, so a walk-off and a ceiling hit fall faster; and a wall push that keeps the X fraction.Verified
Variable jump heightOn every rising frame with A not held, Mega Man's upward speed, if its whole part is 2 or more, drops to exactly 1 px/frame; the test follows the frame's vertical move.Code

References

  1. ^Mega Man came out in December 1987.PublisherMM25 · Nintendo, NES Games
    How we know
    12/17/1987
    p. 30, release table · archived copy ↗
    December 1987
    PDF p. 8 · archived copy ↗

    The quote matches our archived copy.

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

    In the claim ledger

  2. ^Mega Man chooses which of six Robot Masters to fight from a menu, in any order; they are Cut Man, Guts Man, Ice Man, Bomb Man, Fire Man, and Elec Man.ManualMega Man NES manual · GameSpot, History of Mega Man
    How we know
    Player selects the character he chooses to challenge
    p. 9 (PDF 5), How to Play · archived copy ↗
    any one of six stages of your choice - Bomb Man, Fire Man, Ice Man, Guts Man, Elec Man, or Cut Man.
    1987, Mega Man (Rockman in Japan), Gameplay · archived copy ↗

    The quote matches our archived copy.

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

    In the claim ledger

  3. ^Each Robot Master Mega Man beats gives him a new weapon.ManualMega Man NES manual
    How we know
    acquires new firepower he will need
    p. 5 (PDF 3), Helpful Game-Playing Hints · archived copy ↗

    The quote matches our archived copy.

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

    In the claim ledger

  4. ^Once all six Robot Masters are beaten, Dr. Wily's stage follows, the seventh and last.ManualMega Man NES manual
    How we know
    conquer Dr, Wily in this seventh and final stage.
    p. 9 (PDF 5), Special Feature · archived copy ↗

    The quote matches our archived copy.

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

    In the claim ledger

  5. ^Mega Man's planner, credited as A.K., is Akira Kitamura.PublisherMM25 · Destructoid, Inafune interview (2013)
    How we know
    Planner A.K.
    p. 6, contributors · archived copy ↗
    confirmed to be Akira Kitamura, credited as A.K. in Mega Man 1 and 2
    Inafune on the character design · archived copy ↗

    The quote matches our archived copy.

    In the claim ledger

  6. ^ abThe game's planner drew the original Mega Man, Roll, and Dr. Light as pixel graphics, and Keiji Inafune turned them into illustrations.PublisherMM25 · Destructoid, Inafune interview (2013)
    How we know
    he was the one who created the original forms of Mega Man, Roll, and … Dr. Light as dot graphics. I then took those images and turned them into illustrations,
    p. 30 · archived copy ↗
    This planner put together a pixel character that really had good read against the Famicom backgrounds
    Inafune on the character design · archived copy ↗

    The quote matches our archived copy.

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

    In the claim ledger

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

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

  9. ^Retrospectives credit the free stage order and the stolen weapons with the series' long run.WebGameSpot, History of Mega Man · 1UP, Mega Man retrospective
    How we know
    the innovative idea of stealing the weapons of defeated bosses were what earmarked this series for longevity
    1987, Mega Man (Rockman in Japan), Gameplay · archived copy ↗
    Rockman allowed players to conquer levels in any order they wished.
    p. 1 · archived copy ↗

    The quote matches our archived copy.

    In the claim ledger

  10. ^ abOff ice, Mega Man never accelerates. Each frame his animation picks a speed from special_object_xcoord_speed_table, 0 standing, 0.125 px/frame on the first step, 1.375 running, 0.5 sliding to a stop, 0 landing, and 0.5625 when hit; any other animation, such as the jump, moves at 1.3125 with a direction held and 0 without.Codelsmmega/mm1revised
    How we know
    1_ice_tsa_move:
    2	LDY #$00
    3	LDA aobject_pointer
    4	LDX #$08
    ⋮
    6@loop:
    7	CMP @special_object_id_table, X
    8	BEQ @yes
    9	DEX
    10	BPL @loop
    11	LDA z:zjoy1_pressed
    12	AND #left_button | right_button
    13	BEQ @regular
    ⋮
    
    engine/ice_tsa.asm lines 1–22 at b606a84 · upstream ↗
    146@special_object_id_table:
    147	.BYTE $00
    148	.BYTE $03
    149	.BYTE $06
    150	.BYTE $0C
    151	.BYTE $0F
    152	.BYTE $12
    153	.BYTE $13
    154	.BYTE $14
    155	.BYTE $6E
    ⋮
    157@special_object_id_index_xcoord_speed_table:
    158	.BYTE $00
    ⋮
    
    engine/ice_tsa.asm lines 146–166 at b606a84 · upstream ↗
    1special_object_xcoord_speed_table:
    2;fraction, integer
    3	.BYTE $00 | $00
    4	.BYTE $00 | $20
    5	.BYTE $01 | $20
    6	.BYTE $00 | $80
    7	.BYTE $01 | $00
    8	.BYTE $04 | $00
    9	.BYTE $05 | $10
    10	.BYTE $01 | $50
    11	.BYTE $01 | $60
    12	.BYTE $00 | $90
    
    data/special_xcoord_speed_table.asm lines 1–12 at b606a84 · upstream ↗
    22_write_special_object_xcoord_speed_continue:
    23	LDA special_object_xcoord_speed_table, Y
    24	PHA
    25	AND #%11110000
    26	STA aobject_xcoord_speed_fraction, X
    27	PLA
    28	AND #%00001111
    29	STA aobject_xcoord_speed, X
    
    home/write_special_object_xcoord_speed.asm lines 22–29 at b606a84 · upstream ↗

    Checked against the evidence by its author, an AI model, 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

  11. ^A fresh A press on the ground sets Mega Man's upward speed to $04.$DF, 4.87 px/frame.Codelsmmega/mm1
    How we know
    157@bottom:
    158	LDA aobject_ycoord
    159	STA z:zlast_ycoord
    160	LDA z:zjoy1_pressed_bits
    161	AND #a_button
    162	BNE @start_jump_up
    
    engine/run_megaman.asm lines 157–162 at b606a84 · upstream ↗
    216@start_jump_up:
    217	LDA #$04
    218	STA aobject_ycoord_speed
    219	LDA #$DF
    220	STA aobject_ycoord_speed_fraction
    221	RTS
    
    engine/run_megaman.asm lines 216–221 at b606a84 · 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

  12. ^Each airborne frame takes $40/256 = 0.25 px/frame off Mega Man's upward speed, and a fall is capped at 12 px/frame ($F4).Codelsmmega/mm1
    How we know
    96@is_megaman_2:
    97	LDA aobject_ycoord_speed_fraction, X
    98	SBC #$40
    99	STA aobject_ycoord_speed_fraction, X
    100	LDA aobject_ycoord_speed, X
    101	SBC #$00
    102	BPL @normal_ycoord_speed
    103	CMP #$F4
    104	BCS @normal_ycoord_speed
    105	LDA #$00
    106	STA aobject_ycoord_speed_fraction, X
    107	LDA #$F4
    ⋮
    
    engine/objects_vertical.asm lines 96–110 at b606a84 · 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

  13. ^On every rising frame with A not held, Mega Man's upward speed, if its whole part is 2 or more, drops to exactly 1 px/frame; the test follows the frame's vertical move.Codelsmmega/mm1
    How we know
    88	LDA aobject_ycoord_speed
    89	BMI @start_landing
    90	JSR _objects_vertical_moving
    91	BCS @hit_wall_up
    92	LDA z:zjoy1_pressed
    93	AND #a_button
    94	BEQ @start_jump_down
    ⋮
    100@start_jump_down:
    101	LDA aobject_ycoord_speed
    102	BMI @jumping_down
    103	CMP #$01
    104	BCC @jumping_down
    ⋮
    
    engine/run_megaman.asm lines 88–109 at b606a84 · upstream ↗

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

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

    In the claim ledger

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

  15. ^Measured from a standstill at the start of Bomb Man's stage, Mega Man's first step lasts 9 frames at 0.125 px/frame, and a released run slides 13 frames at 0.5 px/frame, 6.5 px in all, before he stands; a jump landed with nothing held shows the landing animation for 3 frames.Verifiedlsmmega/mm1
    How we know
    199@running:
    200	LDA aobject_pointer
    201	CMP #$09
    202	BEQ @run_with_jump
    203	CMP #$03
    204	BNE @skip
    205	LDA aobject_frameset_timer
    206	CMP #$22
    207	BNE @skip
    
    engine/run_megaman.asm lines 199–214 at b606a84 · upstream ↗
    292_object_frameset_timer:
    ⋮
    296	AND #%00001111
    ⋮
    301	LDA aobject_frameset_timer, X
    302	AND #%00001111
    303	CMP z:z0F
    304	BCS @next
    305	INC aobject_frameset_timer, X
    ⋮
    309	LDA aobject_frameset_timer, X
    
    home/sprites.asm lines 292–324 at b606a84 · 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.

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

    In the claim ledger

  16. ^Mega Man's ordinary-floor movement differs from Mega Man 2's, measured in Mesen at the start of Bomb Man's stage and of Heat Man's. The first difference: holding Right from a standstill, Mega Man is still in his first step on the 8th frame, moving 0.125 px, where Mega Man 2 runs at 1.375. After it: a slide of 13 frames, not 8; two frames at the ground speed after a jump press, not one; a landing that runs only with a direction held on the landing frame, not the frame before; 0.125 px/frame on a fresh press in mid-air; −0.75 px/frame on the ground, not −0.25, so a walk-off and a ceiling hit fall faster; and a wall push that keeps the X fraction.Verifiedlsmmega/mm1 · lsmmega/mm2revised
    How we know
    203	CMP #$03
    204	BNE @skip
    205	LDA aobject_frameset_timer
    206	CMP #$22
    207	BNE @skip
    
    engine/run_megaman.asm lines 203–207 at b606a84 · upstream ↗
    125	LDA aobject_frameset_upper_timer
    126	CMP #$01
    
    engine/run_megaman.asm lines 125–129 at 94f0bf3 · upstream ↗
    89oam_frameset_0c:
    90	.BYTE 6 | (@end - @start - 1) << 4
    
    sprites/oam_frameset.asm lines 89–90 at b606a84 · upstream ↗
    258	LDA aobject_frameset_upper_timer
    259	CMP #$02
    260	BNE @nz
    261	LDA #$03
    262	STA z:zmegaman_status
    
    engine/run_megaman.asm lines 258–262 at 94f0bf3 · upstream ↗
    216@start_jump_up:
    217	LDA #$04
    218	STA aobject_ycoord_speed
    219	LDA #$DF
    220	STA aobject_ycoord_speed_fraction
    221	RTS
    ⋮
    223@jump_up:
    224	LDA #$09
    225	STA aobject_pointer
    
    engine/run_megaman.asm lines 216–227 at b606a84 · upstream ↗
    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 ↗
    163	LDA aobject_flag
    164	AND #%10000000
    165	BNE @running
    
    engine/run_megaman.asm lines 163–165 at b606a84 · upstream ↗
    230	LDX #$05
    231	LDA z:zjoy1_pressed_frame
    232	AND #left_button | right_button
    233	BNE @horizontal_jump_down
    234	LDX #$08
    ⋮
    236@horizontal_jump_down:
    237	STX z:zmegaman_status
    
    engine/run_megaman.asm lines 230–237 at 94f0bf3 · upstream ↗
    53	LDA z:zjoy1_pressed_frame
    54	AND #left_button | right_button
    55	BNE @change_first
    56	LDA #$03
    57	STA aobject_pointer
    58	LDA #$00
    59	STA aobject_frameset_timer
    
    engine/run_megaman.asm lines 53–59 at b606a84 · upstream ↗
    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 ↗
    80@done:
    81	LDA #$FF
    82	STA aobject_ycoord_speed, X
    83	LDA #$40
    84	STA aobject_ycoord_speed_fraction, X
    
    engine/objects_vertical.asm lines 80–84 at b606a84 · upstream ↗
    68@mainloop:
    69	LDA #$00
    70	STA aobject_ycoord_speed_fraction
    71	STA aobject_ycoord_speed
    ⋮
    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 68–80 at 94f0bf3 · upstream ↗
    54	LDA z:zobject_in_process_xcoord_speed
    55	STA aobject_xcoord_fraction, X
    
    engine/objects_screen.asm lines 54–55 at b606a84 · upstream ↗
    39	JSR _check_horizontal_collision
    40	LDA z:z00
    41	BEQ @air_1
    42	LDA #$00
    43	STA aobject_xcoord_fraction
    
    engine/check_object_horizontal_move.asm lines 39–43 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-26.

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

    In the claim ledger

  17. ^A hit faces Mega Man against the enemy's facing and puts him in the hit animation ($12), which sets his upward speed to 1.25 px/frame ($01.$40) once and pushes him backward, against his own facing, at 0.5625 px/frame ($90) under the usual gravity until the animation ends.Codelsmmega/mm1
    How we know
    124	LDA z:z0D
    125	AND #objects_right
    126	EOR #objects_right
    127	ORA #$03
    128	STA aobject_flag
    
    engine/check_megaman_damaged.asm lines 124–128 at b606a84 · upstream ↗
    1_handle_megaman_heavily_objects:
    2	ASL
    3	TAX
    4	LDY megaman_heavily_objects_and_ycoord_speed_table - 2, X
    5	LDA megaman_heavily_objects_and_ycoord_speed_table - 1, X
    ⋮
    12	JSR _handle_special_megaman_objects
    13	LDA aobject_frameset_timer
    14	BEQ _handle_megaman_heavily_objects_unforced
    15	JSR _ice_tsa_move
    16	LDA z:zentire_toward
    ⋮
    30	AND #objects_right
    31	BNE @right
    ⋮
    
    engine/handle_special_megaman_objects.asm lines 1–64 at b606a84 · upstream ↗
    152	.BYTE $12
    ⋮
    163	.BYTE $09
    
    engine/ice_tsa.asm lines 151–163 at b606a84 · upstream ↗
    12	.BYTE $00 | $90
    
    data/special_xcoord_speed_table.asm line 12 at b606a84 · 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

  18. ^A hit sets zmegaman_invincibility_time to 111 ($6F); while it is nonzero no contact damages Mega Man, and the stage loop counts it down by 1 on each pass that runs the enemies.Codelsmmega/mm1
    How we know
    123@not_death:
    124	LDA z:z0D
    125	AND #objects_right
    126	EOR #objects_right
    127	ORA #$03
    128	STA aobject_flag
    129	LDA #$6F
    130	STA z:zmegaman_invincibility_time
    131	RTS
    
    engine/check_megaman_damaged.asm lines 123–131 at b606a84 · upstream ↗
    18	LDA z:zmegaman_invincibility_time
    19	BNE @cant_damage
    
    engine/check_megaman_damaged.asm lines 18–19 at b606a84 · upstream ↗
    41	LDA aobject_flag
    42	AND #%00001111
    43	CMP #can_collide_map
    44	BEQ @can_collide_map
    45	JSR _run_weapons_trajectory
    46	JSR _run_bosses_ai
    47	LDA z:zmegaman_invincibility_time
    48	BEQ @no_invincibility
    49	DEC z:zmegaman_invincibility_time
    ⋮
    51@no_invincibility:
    52	JSR _check_megaman_damaged
    
    engine/stage_loop.asm lines 41–52 at b606a84 · 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

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

Sources

Code

Primary

Secondary