WIKI · DAMAGE TABLE

How much each shot takes from each target.

The Mega Man X damage table, read straight from the original cartridge. Each target belongs to a damage class, and each of X's shots has a number. The game looks up the target's class and the shot's number in this table and finds how much health the target loses.

How to read it

  • A number: how much health the target loses. 127 kills anything.
  • D: the target deflects the shot, and a sound plays.
  • 0: nothing happens, and the target does not even blink.
  • Bosses change class during the fight. For example, while they are invulnerable they move to class 5, which is all zeros.
  • A * after a name means that class was seen in a recording, at the moment of a hit, but the target's own code does not set it.

The weaknesses of the eight bosses

BossClassWeaknessTaking a hitHighest uncharged damageTied with
Chill Penguin9Fire Wave33none
Storm Eagle7Chameleon Sting33none
Flame Mammoth8Storm Tornado33none
Spark Mandrill10Shotgun Ice33none
Armored Armadillo11Electric Spark33none
Launch Octopus12Rolling Shield33none
Boomer Kuwanger13Homing Torpedo33none
Sting Chameleon6Boomerang Cutter33none

The whole table

One row per class and one column per shot. Slide the table sideways to see every column.

Class00Buster01Charged buster02Super-charged buster03Charged buster04Hadouken05Spiral buster (unused)06Buster (variant)07Homing Torpedo08Chameleon Sting09Rolling Shield0AFire Wave0BStorm Tornado0CElectric Spark0DBoomerang Cutter0EShotgun Ice0FNinth weapon (unused)10Charged Homing Torpedo11Charged Chameleon Sting12Charged Rolling Shield13Charged Fire Wave14Charged Storm Tornado15Charged Electric Spark16Charged Boomerang Cutter17Charged Shotgun Ice18Charged ninth weapon (unused)19Ride Armor punch1AStrong Ride Armor punch (unused)1BMine-cart object1CZero's shot1DUnnamed
Class 0DDDDDDDDDDDDDDDDDDDDDDDDDDD12716D
Class 1246532842881166448061131084510127161
Class 2246532842881166448061131084510127161
Class 312443242324112224304146684510127161
Class 4246432842881146448061131084510127161
Class 500000000000000000000000000012700
Class 6112232221111113112022224211112711
Class 7112232221311111112022222211112711
Class 8112232221111311112022422211112711
Class 9123332221113111112024222211112711
Class 10123332221111111312022222411112711
Class 11111132221110031112222262211112711
Class 12123332221131111112242222211112711
Class 13123332223111111114222222211112711
Class 1412333242348114444446114684510127161
Class 1512333242348114444446114684510127161
Class 1612333242348114444446114684510127161
Class 17DDDD32DDDDD3DDDDDDDD4DDDDD510DDD
Class 181111321111111211111111311111111
Class 19DD1DDDDDD2DDDDDDDD2DDDDDDDDDD1
Ownerless row24653284288116444806113684510127161

Who uses each class

ClassTargets
Class 0Chill Penguin, Armored Armadillo, Launch Octopus, Bospider*, Sigma (final form)
Class 1Angler fish (Launch Octopus stage mid-boss), normal enemies
Class 2Normal enemies
Class 3Vile in the intro*, Vile in the fortress (two objects, one of them*), Thunder Slimer, highway giant bee*
Class 4No identified target
Class 5Chill Penguin, Storm Eagle, Flame Mammoth, Spark Mandrill, Launch Octopus, Boomer Kuwanger, Sting Chameleon, Vile in the fortress, Bospider, Rangda Bangda (two objects), D-Rex*, Velguarder, Sigma (humanoid form), Thunder Slimer, angler fish (Launch Octopus stage mid-boss)
Class 6Sting Chameleon, D-Rex*, Utuboros* (two objects)
Class 7Storm Eagle, Rangda Bangda (two objects), angler fish (Launch Octopus stage mid-boss)*
Class 8Flame Mammoth, submarine*
Class 9Chill Penguin
Class 10Spark Mandrill, Bospider*, Velguarder, Thunder Slimer*
Class 11Armored Armadillo
Class 12Launch Octopus
Class 13Boomer Kuwanger
Class 14No identified target
Class 15No identified target
Class 16No identified target
Class 17No identified target
Class 18Sigma (humanoid form)*
Class 19Sigma (final form)*
Ownerless rowNo class points to this row

What stands out

  • Each boss's weakness takes 3. Among the uncharged weapons, it is the only one that takes 3 from that boss; the others take 1, and on Armored Armadillo two of them take 0. But 3 is not the biggest number on the row: the Hadouken takes 32 from every boss, the mine-cart object takes 127, and the charged weakness takes 4 (6 on Armored Armadillo).
  • Sigma's final form (class 19) deflects almost everything: only the super-charged buster (1), Rolling Shield (2), the charged Rolling Shield (2) and the unnamed shot in the last column (1) take health.
  • Armored Armadillo (class 11): uncharged Fire Wave and Storm Tornado take 0, and the buster takes 1 at any charge level. When he closes up in his armour, he moves to class 0.
  • Class 0 deflects everything except the mine-cart object (127) and Zero's shot (16). Chill Penguin and Launch Octopus use it too.
  • Class 5 is all zeros except the mine-cart object (127). It is the invulnerability class almost every boss uses during the fight.
  • The charged Chameleon Sting takes 0 from normal enemies (it makes X invincible, with no contact damage), but takes 2 from the bosses in classes 11, 12 and 13, and 4 from classes 14 to 16.
  • Class 17, with no identified target, deflects everything except Fire Wave (3), charged Fire Wave (4), Hadouken (32) and the two Ride Armor punches (5 and 10).
  • The table starts with a short list that says which row each class uses. Right after that list comes a row that no class uses: the ownerless row. It is almost the same as the normal enemies' row, but with Boomerang Cutter 4 (instead of 6) and charged Boomerang Cutter 6 (instead of 10).
  • Columns of unused shots: the spiral buster (8 on normal enemies), the ninth weapon, normal and charged (4 on normal enemies), and the Ride Armor's strong punch (10) have real values in every row. See them in the curiosities →
  • Classes 1 and 2 use the same row of the table.
Technical details

The source is table 86:EF37 (20 index words and 30-byte rows), used by routine 84:9E15. It was generated by tools/rom/damage_table.py; the data is in knowledge_base/mmx1/rom/x1_damage_table_2026-10-04.json, and the cells are pinned by tools/tests/test_damage_table.py.

The row is the target's byte $28, the damage class (84:9E23); the column is the shot's OID, byte $0A of the slot (84:9E1A); the value read is the byte at 86:EF37 + word[row] + OID (84:9E2A). A normal value is taken from health (84:9E73). D = $80: the shot is deflected (84:9EEE, sound $10). The second handler, 84:9F10 (byte $82), exists, but no cell of the table uses it. With 0, nothing happens, no blinking (84:9E5A). 127 is $7F.

With his armour closed, Armored Armadillo uses class 0 (83:B305, 83:B2FD). Chill Penguin (81:B649) and Launch Octopus (81:C54F) also use class 0. Classes 1 and 2 have the word $0046 twice (86:EF39 and 86:EF3B). OID 1D is not consumed on a hit (84:9E90).

Copied from docs/wiki/damage-table.md, at commit 826225efde5fa19c5b43f20304c2afbbb965620e of the game repository, by tools/render_wiki.py --import.

Rows, with the address of each one:

  • classe 0: chill-penguin, armored-armadillo, launch-octopus, bospider 0x63*, sigma-final 0x65 (86:EFB9)
  • classe 1: lo-midboss-0x21 0x21, normal enemies (86:EF7D)
  • classe 2: normal enemies (86:EF7D)
  • classe 3: vile-intro 0x32*, vile-fortress 0x69, vile-fortress 0x67*, thunder-slimer 0x03, highway-giant-bee 0x22* (86:EFD7)
  • classe 4 (sem nome) (86:EFF5)
  • classe 5: chill-penguin, storm-eagle, flame-mammoth, spark-mandrill, launch-octopus, boomer-kuwanger, sting-chameleon, vile-fortress 0x69, bospider 0x63, rangda-bangda 0x5E, rangda-bangda 0x5F, d-rex 0x61*, velguarder 0x26, sigma-humanoid 0x65, thunder-slimer 0x03, lo-midboss-0x21 0x21 (86:EF9B)
  • classe 6: sting-chameleon, d-rex 0x61*, utuboros 0x23*, utuboros 0x25* (86:F013)
  • classe 7: storm-eagle, rangda-bangda 0x5E, rangda-bangda 0x5F, lo-midboss-0x21 0x21* (86:F031)
  • classe 8: flame-mammoth, submarine 0x28* (86:F04F)
  • classe 9: chill-penguin (86:F06D)
  • classe 10: spark-mandrill, bospider 0x63*, velguarder 0x26, thunder-slimer 0x03* (86:F08B)
  • classe 11: armored-armadillo (86:F0A9)
  • classe 12: launch-octopus (86:F0C7)
  • classe 13: boomer-kuwanger (86:F0E5)
  • classe 14 (sem nome) (86:F103)
  • classe 15 (sem nome) (86:F121)
  • classe 16 (sem nome) (86:F13F)
  • classe 17 (sem nome) (86:F15D)
  • classe 18: sigma-humanoid 0x65* (86:F17B)
  • classe 19: sigma-final 0x65* (86:F199)
  • linha órfã (86:EF5F)

Columns, with each shot's internal name and the source of the name:

  • 00 weaponBullet_lemon_00 (boss_evidence_2026-09-26.json)
  • 01 weaponBullet_lemonCharged_01 (boss_evidence_2026-09-26.json)
  • 02 weaponShot_lemonSuperCharge_02 (boss_evidence_2026-09-26.json)
  • 03 weaponShot_lemonCharged_03 (boss_evidence_2026-09-26.json)
  • 04 weaponShot_haduken_04 (boss_evidence_2026-09-26.json)
  • 05 unused buster shot (table 86:BA76 index 7) (x1_shot_oids_unported_2026-10-03.json)
  • 06 buster: the chooser writes 6 when 86:BA76 gives 0, $55 != 0 and $63 == 0 (x1_shot_oids_unported_2026-10-03.json)
  • 07 mainWeaponShot_homing_07 (boss_evidence_2026-09-26.json)
  • 08 weaponShot_stinger3Way_08 (boss_evidence_2026-09-26.json)
  • 09 mainWeaponShot_shild_09 (boss_evidence_2026-09-26.json)
  • 0A mainWeaponShot_fire_0a (boss_evidence_2026-09-26.json)
  • 0B mainWeaponShot_storm_0b (boss_evidence_2026-09-26.json)
  • 0C mainWeaponShot_spark_0c (boss_evidence_2026-09-26.json)
  • 0D mainWeaponShot_cutter_0d; Boomerang Cutter (uncharged) (boss_evidence_2026-09-26.json)
  • 0E mainWeaponShot_ice_0e (boss_evidence_2026-09-26.json)
  • 0F uncharged shot of weapon slot 18 (a ninth weapon; handler is Storm Tornado's) (x1_shot_oids_unported_2026-10-03.json)
  • 10 chargeShot_homingMissle_10 (boss_evidence_2026-09-26.json)
  • 11 chargeShot_camaFlash_11 (boss_evidence_2026-09-26.json)
  • 12 mainChargeShot_shild_12 (boss_evidence_2026-09-26.json)
  • 13 mainChargeShot_fire_13 (boss_evidence_2026-09-26.json)
  • 14 mainChargeShot_storm_14 (boss_evidence_2026-09-26.json)
  • 15 mainChargeShot_spark_15 (boss_evidence_2026-09-26.json)
  • 16 mainChargeShot_cutter_16 (boss_evidence_2026-09-26.json)
  • 17 mainChargeShot_Ice_17; charged Shotgun Ice (ice sled) (boss_evidence_2026-09-26.json)
  • 18 mainChargeShot_storm_18; charged shot of weapon slot 18 (handler is Storm Tornado's) (boss_evidence_2026-09-26.json)
  • 19 ride armor punch hitbox (spawned at 83:8247) (x1_ghost_shots_2026-10-03.json)
  • 1A charged shot of weapon slot 22 (handler 81:A70A, same as OID 25) (x1_shot_oids_unported_2026-10-03.json)
  • 1B mine-cart object's shot-slot child (Armored Armadillo stage) (x1_shot_oids_unported_2026-10-03.json)
  • 1C Zero's shot (intro highway, Zero object $33) (x1_shot_oids_unported_2026-10-03.json)
  • 1D (sem nome; não é consumido ao acertar, 84:9E90) (unnamed: no label and no proof; labelled by index)