On this page
  1. Related
  2. Games
  3. References
  4. Sources

A weakness table turns each boss into a lock with a weapon for its key. In Mega Man 2 each weapon has 14 bytes, one per boss: Metal Blade’s byte for Metal Man is 14 (doubled on one difficulty setting) and 0 for Air Man, and Atomic Fire refills Heat Man1. Mega Man 3 folds bosses into one 256-entry table per weapon, indexed by the target’s routine id2.

  • Boss tableMega Man 2 (1988). Each weapon does its own damage to each boss, nothing to some, and heals one.1
  • Every enemyMega Man 3 (1990). Every weapon does a set damage to each enemy and boss alike.2

Games

GameYearHowNote
Mega Man 21988Boss tableeach weapon does its own damage to each boss, nothing to some, and heals one
Mega Man 31990Every enemyevery weapon does a set damage to each enemy and boss alike
Every claim about this mechanic, by game (2)

References

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

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

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

    In the claim ledger

  2. ^ abMega Man 3 indexes each weapon's 256-byte damage table by the target's main routine id, one table for regular enemies and bosses alike, where Mega Man 2 gives each weapon a separate 14-entry boss table. In the Spark Shock table the entry for routine id $C1 is 7, and $58 marks targets the shock freezes instead of damaging. That $C1 is Magnet Man is the disassembly's labeling, not checked here.Codeplasticsmoke/megaman3-disassembly-ca65 · lsmmega/mm2revised
    How we know
    290        ldy     current_weapon          ; weapon ID as table index
    291        lda     weapon_damage_ptr_lo,y  ; grab damage table pointer for
    292        sta     temp_00                 ; currently equipped weapon
    293        lda     weapon_damage_ptr_hi,y  ; high byte of damage ptr
    294        sta     $01                     ; store to pointer at $00-$01
    295        ldy     ent_routine,x           ; if damage for main routine index
    296        lda     (temp_00),y             ; is nonzero, do stuff
    297        bne     check_weapon_hit_spark_check ; nonzero damage → check weapon type
    298        jsr     check_weapon_hit_tink_sound ; else tink shot
    299        jmp     check_weapon_hit_restore_bank ; zero damage → tink and exit
    
    src/bank1C_1D_entity_ai.asm lines 290–299 at 58ca1c3 · upstream ↗
    562weapon_damage_ptr_lo:  .byte   $00,$00,$00,$00,$00 ; Buster, Gemini, Needle, Hard, Magnet
    563weapon_damage_ptr_lo_special:  .byte   $00,$00,$00,$00,$00,$00,$00 ; TopSpin, Snake, RushCoil, Spark, RushMarine, Shadow, RushJet
    564weapon_damage_ptr_hi:  .byte   $A1,$A4,$A2,$A5,$A3 ; Buster, Gemini, Needle, Hard, Magnet
    565weapon_damage_ptr_hi_special:  .byte   $A6,$A7,$A1,$A8,$A1,$A9,$A1 ; TopSpin, Snake, RushCoil, Spark, RushMarine, Shadow, RushJet
    
    src/bank1C_1D_entity_ai.asm lines 562–565 at 58ca1c3 · upstream ↗
    424spark_damage_table:
    425        .byte   $00,$00,$58,$58,$58,$58,$00,$58 ; $00-$07: $58=freeze
    
    src/bank0A_damage_tables.asm lines 424–425 at 58ca1c3 · upstream ↗
    451        .byte   $00,$07,$01,$01,$00,$00,$00,$00 ; $C0: Needle=0, Magnet=7 (weakness!), Top=1, Shadow=1
    
    src/bank0A_damage_tables.asm line 451 at 58ca1c3 · upstream ↗
    301check_weapon_hit_spark_check:  lda     current_weapon ; if weapon is
    302        cmp     #WPN_SPARK              ; anything but spark
    303        bne     check_weapon_hit_ack_check ; apply normal damage
    304        lda     (temp_00),y             ; if damage value is zero,
    305        beq     check_weapon_hit_spark_freeze_done ; don't do anything
    306        cmp     #$58                    ; if damage isn't magic number $58,
    307        bne     check_weapon_hit_ack_check ; apply normal damage
    
    src/bank1C_1D_entity_ai.asm lines 301–307 at 58ca1c3 · upstream ↗
    388	LDA aobject_flag + 1
    389	AND #objects_can_recoiled
    390	BNE @immune_8
    391	LDY z:zcurrent_boss
    392	LDA @metal_blade_damage_table, Y
    
    engine/weapons_bosses_damage.asm lines 388–392 at 94f0bf3 · upstream ↗

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

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

    In the claim ledger

Sources

Code