Ammunition
A limited count of shots for a weapon, spent with each use and raised or refilled by pickups.
On this page
Ammunition caps how often a weapon fires. A missile tank in Metroid adds 5 to Samus’s missile capacity1. Metroid II starts her with 30 missiles2, and each tank adds 10, up to 9993. Super Metroid splits missiles, super missiles, and power bombs into three pools, each with tanks of 54.
Metroid: Zero Mission keeps the three pools, with tanks of 5 missiles per tank (2 on Hard)5. Metroid Fusion has one missile count and one power bomb count, and the super, ice, and diffusion missiles all draw on the missile count6.
- One poolMetroid (1986). Missiles only, 5 more capacity per missile tank.1Metroid II: Return of Samus (1991). 30 missiles at the start, 10 more per missile tank, up to 999.2,3
- Separate countsSilent Hill (1999). Separate counts for handgun bullets, shotgun shells, and rifle shells; pickups give 15, 6, and 6, doubled at least on Easy.7
- Several poolsSuper Metroid (1994). Missiles, super missiles, and power bombs, 5 per tank.4
Games
| Game | Year | How | Note |
|---|---|---|---|
| Factorio | 2016 | gun turrets fire magazines of three grades | |
| Metroid | 1986 | One pool | missiles only, 5 more capacity per missile tank |
| Metroid II: Return of Samus | 1991 | One pool | 30 missiles at the start, 10 more per missile tank, up to 999 |
| Silent Hill | 1999 | Separate counts | separate counts for handgun bullets, shotgun shells, and rifle shells; pickups give 15, 6, and 6, doubled at least on Easy |
| Super Metroid | 1994 | Several pools | missiles, super missiles, and power bombs, 5 per tank |
| Metroid Fusion | 2002 | Several pools | one missile count that every missile type shares, and power bombs; 5 and 2 per tank |
| Metroid: Zero Mission | 2004 | Several pools | missiles, super missiles, and power bombs, 5, 2, and 2 per tank, or 2, 1, and 1 on Hard |
Every claim about this mechanic, by game (7)
References
- ^ abA missile tank raises Samus's missile capacity by 5.Codenmikstas/metroid-disassembly · “Metroid (USA)”
How we know
4349LDBF7:* BEQ + ;Branch if item is an energy tank. 4350LDBF9: LDA #$05 ; 4351LDBFB: JSR AddToMaxMissiles ;($DD97)Increase missile capacity by 5.
Source_Files/Bank07.asm lines 4349–4351 at 4270d57 · upstream ↗ In the cartridge (“Metroid (USA)”): bank 7 $DBF7. We don't reproduce the bytes.
Checked against the evidence by its author, an AI model, 2026-10-20.
Checked by a second AI model, 2026-10-21.
- ^ abA new game starts with 99 units of energy, no energy tanks, and 30 of 30 missiles.Codealex-west/M2RoS
How we know
20 db $00 ; Samus' equipment ⋮ 23 dw $0099 ; Samus' health 24 dw $0030 ; Samus' max missiles 25 dw $0030 ; Samus' missiles
SRC/data/initialSave.asm lines 20–25 at 031aea3 · upstream ↗ 9942pickup_missileTank: ;{ 9943 ; Add 10 to max missiles 9944 ld a, [samusMaxMissilesLow] 9945 add $10 9946 daa
SRC/bank_000.asm lines 9942–9946 at 031aea3 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Checked by a second AI model, 2026-10-21.
- ^ abA missile tank adds 10 to Samus's missile capacity and 10 to her missiles, each capped at 999.Codealex-west/M2RoS
How we know
9942pickup_missileTank: ;{ 9943 ; Add 10 to max missiles 9944 ld a, [samusMaxMissilesLow] 9945 add $10 9946 daa ⋮ 9950 daa ⋮ 9952 ; Clamp max missiles at 999 ⋮ 9961 ; Add 10 to current missiles ⋮ 9963 add $10 9964 daa ⋮ 9968 daa ⋮ 9970 ; Clamp current missiles to 999
SRC/bank_000.asm lines 9942–9976 at 031aea3 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Checked by a second AI model, 2026-10-21.
- ^ abMissiles, super missiles, and power bombs are three separate pools, each with its own tank; each tank instruction adds its argument, 5, to that pool's maximum and its count.CodeInsaneFirebat/sm_disassembly
How we know
1496Instruction_PLM_CollectAmmo_MissileTank:src/bank_84.asm lines 1496–1508 at 7af131e · upstream ↗ 1520Instruction_PLM_CollectAmmo_SuperMissileTank:src/bank_84.asm lines 1520–1528 at 7af131e · upstream ↗ 1544Instruction_PLM_CollectAmmo_PowerBombTank:src/bank_84.asm lines 1544–1552 at 7af131e · upstream ↗ dw Instruction_PLM_CollectAmmo_MissileTank,$0005
src/bank_84.asm#L15474 · upstream ↗ dw Instruction_PLM_CollectAmmo_SuperMissileTank,$0005
src/bank_84.asm#L15499 · upstream ↗ dw Instruction_PLM_CollectAmmo_PowerBombTank,$0005
src/bank_84.asm#L15524 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Checked by a second AI model, 2026-10-21.
- ^Missiles, super missiles, and power bombs each have their own maximum and count, and each tank adds to both: 5 missiles, 2 super missiles, or 2 power bombs on Easy and Normal, and 2, 1, or 1 on Hard, from a start of 0 (mzm/start-energy). Missile tanks stop adding past 50 tanks' worth, 250 missiles, or 100 on Hard (computed). Metroid has missiles only, and its tank adds 5 to both the count and the capacity.Codemetroidret/mzm · nmikstas/metroid-disassembly
How we know
520 if (i == ITEM_TYPE_MISSILE) ⋮ 522 if (sNumberOfTanksPerArea[MAX_AMOUNT_OF_AREAS - 1].missile * sTankIncreaseAmount[gDifficulty].missile + sStartingHealthAmmo.missile >= gEquipment.maxMissiles + sTankIncreaseAmount[gDifficulty].missile) ⋮ 524 if (gEquipment.maxMissiles == 0) 525 isFirstTank = TRUE; ⋮ 527 gEquipment.maxMissiles += sTankIncreaseAmount[gDifficulty].missile; 528 gEquipment.currentMissiles += sTankIncreaseAmount[gDifficulty].missile;
src/bg_clip.c lines 520–528 at 2aae289 · upstream ↗ 539 else if (i == ITEM_TYPE_SUPER_MISSILE) ⋮ 546 gEquipment.maxSuperMissiles += sTankIncreaseAmount[gDifficulty].superMissile; 547 gEquipment.currentSuperMissiles += sTankIncreaseAmount[gDifficulty].superMissile; ⋮ 550 else if (i == ITEM_TYPE_POWER_BOMB) ⋮ 557 gEquipment.maxPowerBombs += sTankIncreaseAmount[gDifficulty].powerBomb; 558 gEquipment.currentPowerBombs += sTankIncreaseAmount[gDifficulty].powerBomb;
src/bg_clip.c lines 539–558 at 2aae289 · upstream ↗ 52 [MAX_AMOUNT_OF_AREAS - 1] = { 53 .energy = 12, 54 .missile = 50,
src/data/block_data.c lines 52–54 at 2aae289 · upstream ↗ 67const struct TankList sTankIncreaseAmount[DIFF_COUNT] = { 68 [DIFF_EASY] = { 69 .energy = 100, 70 .missile = 5, 71 .superMissile = 2, 72 .powerBomb = 2 ⋮ 74 [DIFF_NORMAL] = { 75 .energy = 100, 76 .missile = 5, 77 .superMissile = 2, 78 .powerBomb = 2 ⋮ 80 [DIFF_HARD] = { ⋮
src/data/block_data.c lines 67–84 at 2aae289 · upstream ↗ 4349LDBF7:* BEQ + ;Branch if item is an energy tank. 4350LDBF9: LDA #$05 ; 4351LDBFB: JSR AddToMaxMissiles ;($DD97)Increase missile capacity by 5.
Source_Files/Bank07.asm lines 4349–4351 at 4270d57 · upstream ↗ 4635; Adds A to both MissileCount & MaxMissiles, storing the new count ⋮ 4641 ADC MissileCount ⋮ 4644* STA MissileCount ⋮ 4647 ADC MaxMissiles ⋮ 4650* STA MaxMissiles
Source_Files/Bank07.asm lines 4635–4650 at 4270d57 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-22.
Checked by a second AI model, 2026-10-22.
- ^Samus has one missile count and one power bomb count, each with a maximum. A missile tank adds 5 to both the missile count and its maximum, unless the maximum would pass 255; a power bomb tank adds 2 to both, up to 254. The missile types the downloads add (super, ice, and diffusion missiles, flags in
weaponsStatus) draw on that one count. Zero Mission keeps separate counts for missiles, super missiles, and power bombs, and its missile tank also adds 5, or 2 on Hard.Codemetroidret/mf · metroidret/mzmHow we know
258 // Apply tank 259 if (i == TANK_TYPE_MISSILE) ⋮ 261 if (gEquipment.maxMissiles + MISSILE_INCREASE_AMOUNT <= MAX_MISSILE_AMOUNT) ⋮ 263 gEquipment.maxMissiles += MISSILE_INCREASE_AMOUNT; 264 gEquipment.currentMissiles += MISSILE_INCREASE_AMOUNT; ⋮ 275 else if (i == TANK_TYPE_POWER_BOMB) ⋮ 277 if (gEquipment.maxPowerBombs + POWER_BOMB_INCREASE_AMOUNT <= MAX_POWER_BOMB_AMOUNT) ⋮ 279 gEquipment.maxPowerBombs += POWER_BOMB_INCREASE_AMOUNT; 280 gEquipment.currentPowerBombs += POWER_BOMB_INCREASE_AMOUNT;
src/bg_clip.c lines 258–282 at a6d6187 · upstream ↗ 241#ifndef REGION_JP 242#define ENERGY_INCREASE_AMOUNT 100 243#define MISSILE_INCREASE_AMOUNT 5 244#define POWER_BOMB_INCREASE_AMOUNT 2 ⋮ 248// Default 255 249#define MAX_MISSILE_AMOUNT (51 * MISSILE_INCREASE_AMOUNT) 250// Default 254 251#define MAX_POWER_BOMB_AMOUNT (127 * POWER_BOMB_INCREASE_AMOUNT)
include/constants/samus.h lines 241–251 at a6d6187 · upstream ↗ 42struct Equipment { 43 u16 currentEnergy; 44 u16 maxEnergy; 45 u16 currentMissiles; 46 u16 maxMissiles; 47 u8 currentPowerBombs; 48 u8 maxPowerBombs; 49 u8 beamStatus; 50 u8 weaponsStatus;
include/structs/samus.h lines 42–50 at a6d6187 · upstream ↗ 273#define MBF_NONE 0 274#define MBF_MISSILES (1 << 0) 275#define MBF_SUPER_MISSILES (1 << 1) 276#define MBF_ICE_MISSILES (1 << 2) 277#define MBF_DIFFUSION_MISSILES (1 << 3) ⋮ 280#define MBF_ANY_MISSILE (MBF_MISSILES | MBF_SUPER_MISSILES | MBF_ICE_MISSILES | MBF_DIFFUSION_MISSILES)
include/constants/samus.h lines 273–280 at a6d6187 · upstream ↗ 16struct Equipment { 17 u16 maxEnergy; 18 u16 maxMissiles; 19 u8 maxSuperMissiles; 20 u8 maxPowerBombs; 21 u16 currentEnergy; 22 u16 currentMissiles; 23 u8 currentSuperMissiles; 24 u8 currentPowerBombs;
include/structs/samus.h lines 16–24 at 2aae289 · upstream ↗ 67const struct TankList sTankIncreaseAmount[DIFF_COUNT] = { 68 [DIFF_EASY] = { 69 .energy = 100, 70 .missile = 5, ⋮ 74 [DIFF_NORMAL] = { 75 .energy = 100, 76 .missile = 5, ⋮ 80 [DIFF_HARD] = { 81 .energy = 50, 82 .missile = 2,
src/data/block_data.c lines 67–84 at 2aae289 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-22.
Checked by a second AI model, 2026-10-22.
- ^In the US build,
Event_CommonItemTakegives 15 handgun bullets, 6 shotgun shells, or 6 rifle shells per ammunition pickup, times a multiplier ofextraBulletAdjust+ 1, which is at least 2 on Easy; healing pickups always give one item. Normal and Hard don't change the count.extraBulletAdjustis an Extra Options setting: the options screen allows 1 plus one step for each of the five low bits set inextraOptionsEnabled, so ×1 to ×6.Codeshdecompilations/silent-hill-decompHow we know
7#define DEFAULT_PICKUP_ITEM_COUNT 1 8#define HANDGUN_AMMO_PICKUP_ITEM_COUNT 15 9#define SHOTGUN_AMMO_PICKUP_ITEM_COUNT 6 10#define RIFLE_AMMO_PICKUP_ITEM_COUNT 6
include/bodyprog/items.h lines 7–10 at 405a621 · upstream ↗ 1104void Event_CommonItemTake(u32 pickupType, e_EventFlag eventFlagIdx) // 0x800879FC ⋮ 1106 #define EASY_DIFFICULTY_AMMO_COUNT_MULT_MIN 2 ⋮ 1111 ammoCountMult = g_GameWork.config.extraBulletAdjust + 1; 1112 if (g_SavegamePtr->gameDifficulty == GameDifficulty_Easy) ⋮ 1114 ammoCountMult = CLAMP(ammoCountMult, EASY_DIFFICULTY_AMMO_COUNT_MULT_MIN, ammoCountMult); ⋮ 1121 Event_ItemTake(InvItemId_FirstAidKit, DEFAULT_PICKUP_ITEM_COUNT, eventFlagIdx, MapMsgIdx_FirstAidSelect); ⋮ 1133 Event_ItemTake(InvItemId_HandgunBullets, ammoCountMult * HANDGUN_AMMO_PICKUP_ITEM_COUNT, eventFlagIdx, MapMsgIdx_HandgunAmmoSelect); ⋮ 1137 Event_ItemTake(InvItemId_ShotgunShells, ammoCountMult * SHOTGUN_AMMO_PICKUP_ITEM_COUNT, eventFlagIdx, MapMsgIdx_ShotgunAmmoSelect); ⋮ 1141 Event_ItemTake(InvItemId_RifleShells, ammoCountMult * RIFLE_AMMO_PICKUP_ITEM_COUNT, eventFlagIdx, MapMsgIdx_RifleAmmoSelect);
src/bodyprog/events/events_util.c lines 1104–1142 at 405a621 · upstream ↗ 136 g_ExtraOptionsMenu_BulletMultMax = 1; 137 unlockedOptFlags = g_GameWork.config.extraOptionsEnabled; ⋮ 139 // Set available bullet multiplier. 140 for (i = 0; i < 5; i++) ⋮ 142 if (unlockedOptFlags & (1 << i)) ⋮ 144 g_ExtraOptionsMenu_BulletMultMax++;
src/screens/options/options.c lines 136–146 at 405a621 · upstream ↗ 460 g_GameWork.config.extraBulletAdjust = g_GameWork.config.extraBulletAdjust + (g_ExtraOptionsMenu_BulletMultMax - 1); ⋮ 462 g_GameWork.config.extraBulletAdjust = g_GameWork.config.extraBulletAdjust % g_ExtraOptionsMenu_BulletMultMax;
src/screens/options/options.c lines 460–462 at 405a621 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-22.
Checked by a second AI model, 2026-10-22.
- ^Touching an absorbable X parasite runs
SamusAbsorbX, which refills by its color: a red X (SSC_RED_X_PARASITE) 500 energy, 100 missiles, and 10 power bombs; a green X 2 missiles; any other (yellow) X 10 energy.SpriteUtilRefillSamusadds missiles only once a missile flag is set and power bombs only once the power bomb flag is, and stops each at its maximum.Codemetroidret/mfHow we know
482void XParasiteGettingAbsorbedInit(void) ⋮ 497 SamusAbsorbX();
src/x_parasite_util.c lines 482–497 at a6d6187 · upstream ↗ 433void SamusAbsorbX(void) ⋮ 444 case SSP_X_ABSORBABLE_BY_SAMUS: 445 if (gCurrentSprite.samusCollision == SSC_RED_X_PARASITE) ⋮ 447 energy = 500; 448 missiles = 100; 449 powerBombs = 10; ⋮ 453 else if (gCurrentSprite.samusCollision == SSC_GREEN_X_PARASITE) ⋮ 455 energy = 0; 456 missiles = 2; 457 powerBombs = 0; ⋮ 461 else ⋮ 463 energy = 10; ⋮
src/x_parasite_util.c lines 433–470 at a6d6187 · upstream ↗ 2686void SpriteUtilRefillSamus(u16 energy, u16 missiles, u16 powerBombs) ⋮ 2688 gEquipment.currentEnergy += energy; ⋮ 2690 if (gEquipment.currentEnergy > gEquipment.maxEnergy) 2691 gEquipment.currentEnergy = gEquipment.maxEnergy; ⋮ 2693 if (gEquipment.weaponsStatus & MBF_ANY_MISSILE) ⋮ 2695 gEquipment.currentMissiles += missiles; ⋮ 2697 if (gEquipment.currentMissiles > gEquipment.maxMissiles) 2698 gEquipment.currentMissiles = gEquipment.maxMissiles; ⋮ 2701 if (gEquipment.weaponsStatus & MBF_POWER_BOMBS) ⋮ 2703 gEquipment.currentPowerBombs += powerBombs;
src/sprite_util.c lines 2686–2707 at a6d6187 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-22.
Checked by a second AI model, 2026-10-22.
Sources
Code
- nmikstas and Kent Hansen. 2025. “metroid-disassembly: Metroid software disassembly.” Commit 4270d57. nmikstas/metroid-disassembly @ 4270d57 · licence, all uses
- n.d. “Metroid (USA).” · licence, all uses
- alex-west. 2026. “M2RoS: Return of Samus Disassembly.” Commit 031aea3. alex-west/M2RoS @ 031aea3 · licence, all uses
- InsaneFirebat and P.JBoy. 2026. “sm_disassembly: a relocatable disassembly of Super Metroid.” Commit 7af131e. InsaneFirebat/sm_disassembly @ 7af131e · licence, all uses
- metroidret contributors. 2026. “mzm: a decompilation of Metroid: Zero Mission (metroidret/mzm).” Commit 2aae289. metroidret/mzm @ 2aae289 · licence, all uses
- metroidret contributors. 2026. “mf: a decompilation of Metroid Fusion (metroidret/mf).” Commit a6d6187. metroidret/mf @ a6d6187 · licence, all uses