On this page
  1. Whole pickups
  2. Piece sets
  3. Related
  4. Games
  5. References
  6. Sources

A health upgrade raises the maximum health a character can hold. These games either add capacity with one pickup or build it from a set of pieces, and they differ in how much health the pickup restores.

#Whole pickups

The Legend of Zelda starts with 3 hearts6 and adds one container and one full heart per pickup, up to 165 containers6,5. Zelda II: The Adventure of Link starts with four heart containers and four separate magic containers; each heart container holds 32 meter units, with one unit below the full amount7.

In Metroid, Samus starts with 30 units1, and an energy tank adds a tank and fills her health to its new maximum1,2. Her health is stored in tenths of a unit, and the tank limit is 62; at that limit the maximum is 699.9 units4,3. Metroid II: Return of Samus starts Samus at 99 units8; each energy tank refills her to the tank count plus 99, up to 5 tanks at most9,8,9.

Super Metroid starts Samus at 99 energy10, and each tank adds 100 energy11 to her maximum and fills her energy to that maximum10,11. Metroid Fusion also starts at 99 energy12; its tanks add 100 and refill her, up to 100 per tank, up to 209913,12,13. Metroid: Zero Mission starts at 99 energy14 too, but tank capacity depends on difficulty: each adds 10015 on Easy or Normal and 5015 on Hard, then refills Samus to the new maximum14,15.

#Piece sets

A Link to the Past converts every 416 Piece of Heart into a container16. A container adds one heart up to 20 hearts17; one from a complete set restores Link to the new maximum, while a boss’s container restores one heart17. Link’s Awakening also takes 418 pieces per container18. Its fourth piece adds one heart to the maximum and queues 6418 eighth-heart units of health, while a boss container queues a full refill18,19.

In both Oracle games, 420 pieces make a container, and health counts in quarter hearts by the disassembly annotators’ reading of a code comment20. A container adds one heart and queues a refill of 6421 quarter-heart units, capped at the maximum21. The Minish Cap converts 422 pieces into a container, up to 20 hearts22. Each piece restores Link’s current health to its maximum, and the fourth also adds a heart to his capacity22.

Games

GameYearHowNote
Metroid1986Whole containersenergy tanks, each filling Samus's health to the new maximum
The Legend of Zelda1986Whole containersheart containers only, three to sixteen
Zelda II: The Adventure of Link1987Whole containersheart and magic containers, four of each to start, 32 meter units apiece
Super Mario Bros. 21988Whole containersup to two mushrooms a level, each adding a mark until the level ends
Metroid II: Return of Samus1991Whole containersup to 5 energy tanks, each one refilling her energy
Super Metroid1994Whole containersenergy tanks of 100 each, from 99 at the start, each refilling her energy
Metroid Fusion2002Whole containersenergy tanks of 100 from 99 at the start, each refilling her energy, up to 2099
Metroid: Zero Mission2004Whole containersenergy tanks of 100, or 50 on Hard, from 99 at the start, each refilling her energy
The Legend of Zelda: A Link to the Past1991Piecesfour Pieces of Heart make a container; up to 20 hearts
The Legend of Zelda: Link's Awakening1993Piecesfour Pieces of Heart make a container, as in A Link to the Past
The Legend of Zelda: Oracle of Seasons and Oracle of Ages2001Piecesfour Pieces of Heart make a Heart Container, which adds a heart and a 16-heart refill
The Legend of Zelda: The Minish Cap2004Piecesfour Pieces of Heart make a container, and every piece refills Link's health; up to 20 hearts
Every claim about this mechanic, by game (24)
Metroid 1986Samus's health is binary-coded decimal in tenths of a unit; HealthHi holds the full energy tanks in its high nibble and the tens digit in its low nibble, and HealthLo holds the ones digit in its high nibble.Code
Samus starts with 30 units of energy and no energy tanks.Code
An energy tank adds a tank, up to 6, and fills Samus's health to her new maximum.Code
Samus's health can't exceed 99.9 units above her tanks, 100t+99.9 units for t tanks, which is 699.9 with all six.Code
The Legend of Zelda 1986Link's health is HeartValues, whose high nibble is the heart containers less one and whose low nibble is the full hearts, plus a partial heart in HeartPartial from $00 to $FF; a new file starts at $22 and $FF, three containers and three hearts.Code
A heart container adds one container and one full heart, up to 16 containers; a new file starts with three.Code
Zelda II: The Adventure of Link 1987A new game starts with four heart containers and four magic containers. Picking up a container adds one, and a full meter holds 32 units per container less one, so four containers fill to 127.Code
Super Mario Bros. 2 1988A level has up to two Subspace mushrooms, each adding a mark to the life meter and refilling it. One taken stays taken, and the extra marks stay, through deaths until the level ends, a game over, or a warp, which set PlayerHealth to PlayerHealth_2_HP and PlayerMaxHealth to 0: a meter of two marks, both full.Code
Super Mario Bros. 2's code puts a mushroom in Subspace that adds a mark to the life meter and refills it, where Doki Doki Panic's manual describes a heart. SMB2's manual names the mushroom in its item list, but its Subspace paragraph still calls it a heart that increases the life meter.Manual
The Legend of Zelda: A Link to the Past 1991Each Piece of Heart adds 1 to a count kept modulo 4; the piece that brings it back to 0 grants item $26, a heart container.Code
A heart container adds 8 to Link's life capacity, one heart, up to $A0, 20 hearts. The one from four pieces refills his life to the new capacity; the one a boss leaves adds a single heart of life.Code
Metroid II: Return of Samus 1991A new game starts with 99 units of energy, no energy tanks, and 30 of 30 missiles.Code
An energy tank adds a tank, up to 5, and fills Samus's energy, setting its high byte to the tank count and its low byte to 99.Code
The Legend of Zelda: Link's Awakening 1993Link's Awakening keeps A Link to the Past's four Pieces of Heart per container. The fourth piece clears the count, adds a heart to Link's maximum, and queues $40 of health, eight hearts' worth.Code
A heart container left by a boss adds a heart to Link's maximum and queues $FF of health, a full refill.Code
Super Metroid 1994A new save file starts Samus with 99 energy and no missiles.Code
An energy tank adds its argument, 100, to Samus's maximum energy and sets her energy to the new maximum.Code
The Legend of Zelda: Oracle of Seasons and Oracle of Ages 2001In both US releases Link's health counts in quarter hearts, the annotators' reading in a comment that calls the starting $0c "3 hearts". The fourth Piece of Heart resets the count to 0 and gives Link a Heart Container with a parameter of 4, one heart. Link's Awakening DX also takes four pieces, but there the fourth adds a heart to a maximum kept in whole hearts and queues $40 of health in eighths, eight hearts' worth.Code
In both US releases a Heart Container adds its parameter to Link's maximum health, 4 quarters (one heart) for every Heart Container treasure object the data defines and for the one the fourth Piece of Heart gives. It always brings a heart refill of $40, which is sixteen hearts (computed, in the quarter hearts a comment gives), capped at the maximum. Link's Awakening DX's boss container adds a heart and queues $FF of health instead.Code
Metroid Fusion 2002When SamusInit runs with no file loading (gIsLoadingFile clear) and an unnamed flag, gUnk_3000be3, clear, it copies sEquipment_Empty into gEquipment: 99 energy of 99, 10 missiles of 10, 10 power bombs of 10, and no weapon flags (MBF_NONE). The atlas reads this as a new game's start. Zero Mission starts with the same 99 energy, but with every ammunition count at 0.Code
An energy tank adds 100 to Samus's maximum energy and sets her energy to the new maximum, unless the new maximum would pass MAX_ENERGY_AMOUNT, 20 tanks plus the starting 99, or 2099. The tank code reads no difficulty. Zero Mission's tank also adds 100 and refills, or 50 on Hard, and stops at 12 tanks: 1299 on Easy and Normal and 699 on Hard (computed).Code
Metroid: Zero Mission 2004When a game starts rather than loads a file (gIsLoadingFile clear), SamusInit fills gEquipment with zeros and then sets Samus's maximum and current energy to 99, so she starts with 99 energy, no tanks, and no missiles, super missiles, or power bombs. Metroid starts her with 30 units.Code
On Easy and Normal an energy tank adds 100 to Samus's maximum energy, and on Hard 50, and sets her energy to the new maximum. A tank adds nothing if the maximum plus one more tank would pass 12 tanks plus the starting 99, so the maximum is 1299, or 699 on Hard (computed). In Metroid each tank holds 100 units, up to 6 tanks and 699.9 units, with the same refill.Code
The Legend of Zelda: The Minish Cap 2004The Minish Cap counts Link's health in eighths of a heart, as A Link to the Past does and as the zladx annotators' comment on Link's Awakening's health byte says ("$08 = 1 heart"); a new file starts him at 24, three hearts. When Link holds up a Piece of Heart, the code refills his health to its maximum and adds 1 to the piece count. The fourth piece resets the count to 0 and then does what a Heart Container does: it adds 8 to the maximum, capped at 160 (20 hearts, A Link to the Past's cap), and refills his health again. Both earlier games also make a container from every fourth piece.Code

References

  1. ^ abcSamus starts with 30 units of energy and no energy tanks.Codenmikstas/metroid-disassembly · “Metroid (USA)”
    How we know
    1580        LDA #$00                ;
    1581        STA HealthLo            ;Starting health is
    1582        LDA #$03                ;set to 30 units.
    1583        STA HealthHi            ;
    
    Source_Files/Bank07.asm lines 1580–1583 at 4270d57 · upstream ↗

    In the cartridge (“Metroid (USA)”): bank 7 SamusInit, $C8D1. 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.

    In the claim ledger

  2. ^ abcAn energy tank adds a tank, up to 6, and fills Samus's health to her new maximum.Codenmikstas/metroid-disassembly · “Metroid (USA)”
    How we know
    4354LDC00:* LDA TankCount           ;
    4355LDC03:  CMP #$06            ;Has Samus got 6 energy tanks?
    4356LDC05:  BEQ +               ;If so, she can't have any more.
    4357LDC07:  INC TankCount           ;Otherwise give her a new tank.
    4358LDC0A:* LDA TankCount           ;
    4359LDC0D:  JSR Amul16          ;Get tank count and shift into upper nibble.
    4360LDC10:  ORA #$09            ;
    4361LDC12:  STA HealthHi            ;Set new tank count. Upper health digit set to 9.
    4362LDC15:  LDA #$99            ;Max out low health digit.
    4363LDC17:  STA HealthLo            ;Health is now FULL!
    
    Source_Files/Bank07.asm lines 4354–4363 at 4270d57 · upstream ↗

    In the cartridge (“Metroid (USA)”): bank 7 $DBF7, the missile and energy tank pickup. 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.

    In the claim ledger

  3. ^ abSamus's health can't exceed 99.9 units above her tanks, 100t+99.9 units for t tanks, which is 699.9 with all six.Codenmikstas/metroid-disassembly · “Metroid (USA)”
    How we know
    2576LCF14:  LDA TankCount           ;
    2577LCF17:  JSR Amul16          ;($C2C5)*16. Move tank count to upper 4 bits.
    2578LCF1A:  ORA #$0F            ;Set lower 4 bits.
    2579LCF1C:  CMP HealthHi            ;
    2580LCF1F:  BCS +               ;Is life less than max? if so, branch.
    2581LCF21:  AND #$F9            ;Life is more than max amount. 
    2582LCF23:  STA HealthHi            ;
    2583LCF26:  LDA #$99            ;Set life to max amount.
    2584LCF28:  STA HealthLo            ;
    
    Source_Files/Bank07.asm lines 2576–2584 at 4270d57 · upstream ↗

    In the cartridge (“Metroid (USA)”): bank 7 AddHealth, $CEF9. 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.

    In the claim ledger

  4. ^ abSamus's health is binary-coded decimal in tenths of a unit; HealthHi holds the full energy tanks in its high nibble and the tens digit in its low nibble, and HealthLo holds the ones digit in its high nibble.Codenmikstas/metroid-disassembly · “Metroid (USA)”
    How we know
    270.alias HealthLo         $0106   ;Lower health digit in upper 4 bits.
    271.alias HealthHi         $0107   ;Upper health digit in lower 4 bits
    272                                ;# of full tanks in upper 4 bits.
    
    Source_Files/Metroid_Defines.asm lines 270–272 at 4270d57 · upstream ↗
    8211    ldx #$00            ;Increase HealthHi by 0.
    8212    ldy #$50            ;Increase HealthLo by 5.
    
    Source_Files/Bank07.asm lines 8211–8212 at 4270d57 · upstream ↗

    In the cartridge (“Metroid (USA)”): bank 7 $CE92, SubtractHealth, which subtracts in base 10. 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.

    In the claim ledger

  5. ^ abcA heart container adds one container and one full heart, up to 16 containers; a new file starts with three.Codealdonunez/zelda1-disassembly · “Legend of Zelda, The (USA) (Rev 1)”
    How we know
    4585@TakeHeartContainer:
    4586    ; For heart containers, cap at $10.
    4587    ; Add a heart container and a heart.
    4588    LDA Items, Y
    4589    CMP #$F0
    4590    BCS L6C28_Exit              ; If we already have max hearts, return.
    4591    ADC #$11
    4592    JMP SetItemValue            ; Go set the item value and return.
    
    src/Z_01.asm lines 4585–4592 at 50a1c86 · upstream ↗

    In the cartridge (“Legend of Zelda, The (USA) (Rev 1)”): bank 1, as in item-ids. 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.

    In the claim ledger

  6. ^ abcLink's health is HeartValues, whose high nibble is the heart containers less one and whose low nibble is the full hearts, plus a partial heart in HeartPartial from $00 to $FF; a new file starts at $22 and $FF, three containers and three hearts.Codealdonunez/zelda1-disassembly · “Legend of Zelda, The (USA) (Rev 1)”
    How we know
    1667    ; Initialize file B hearts value to 3 heart containers and 2 hearts.
    1668    LDY #$18
    1669    LDA #$22
    1670    STA ($C0), Y
    1671    INY                         ; Initialize file B heart partial to full.
    1672    LDA #$FF
    
    src/Z_02.asm lines 1667–1672 at 50a1c86 · upstream ↗
    4681CompareHeartsToContainers:
    4682    LDA HeartValues
    ⋮
    4684    AND #$0F
    ⋮
    4687    LSR
    4688    LSR
    4689    LSR
    4690    LSR
    4691    CMP $00
    
    src/Z_01.asm lines 4681–4691 at 50a1c86 · upstream ↗

    In the cartridge (“Legend of Zelda, The (USA) (Rev 1)”): bank 2 $9EF0, UpdateModeERegister, which writes the new file. 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.

    In the claim ledger

  7. ^ abA new game starts with four heart containers and four magic containers. Picking up a container adds one, and a full meter holds 32 units per container less one, so four containers fill to 127.CodeFiendsOfTheElements/z2disassembly
    How we know
    17AFF - Number of Magic Containers to begin game … 17B00 - Number of Heart Containers to begin game
    src/prg5.asm#L7062-L7064 · upstream ↗
    6165    INC      $0775,x                   ; 0x1e7dd $E7CD FE 75 07                ; 0E = Magic Containers, 0F = Heart Containers
    
    src/prg7.asm lines 6158–6165 at c4c3a4c · upstream ↗
    1823    LDA      $0783,x                   ; 0x1cb28 $CB18 BD 83 07                ; Current number of Magic/Heart Containers
    
    src/prg7.asm lines 1815–1831 at c4c3a4c · 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

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

    In the claim ledger

  9. ^ abcAn energy tank adds a tank, up to 5, and fills Samus's energy, setting its high byte to the tank count and its low byte to 99.Codealex-west/M2RoS
    How we know
    9895pickup_energyTank: ;{
    9896    ; Check if energy tanks are at max
    9897    ld a, [samusEnergyTanks]
    9898    cp $05 ; Max Energy tanks
    ⋮
    9904    ; Set current health to max
    9905    ld [samusCurHealthHigh], a
    9906    ld a, $99
    9907    ld [samusCurHealthLow], a
    
    SRC/bank_000.asm lines 9895–9907 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.

    In the claim ledger

  10. ^ abcA new save file starts Samus with 99 energy and no missiles.CodeInsaneFirebat/sm_disassembly
    How we know
    6230NewSaveFile:
    
    src/bank_81.asm lines 6230–6236 at 7af131e · 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

  11. ^ abcAn energy tank adds its argument, 100, to Samus's maximum energy and sets her energy to the new maximum.CodeInsaneFirebat/sm_disassembly
    How we know
    1452Instruction_PLM_CollectHealth_EnergyTank:
    
    src/bank_84.asm lines 1452–1461 at 7af131e · upstream ↗
    dw Instruction_PLM_CollectHealth_EnergyTank,$0064
    src/bank_84.asm#L15449 · 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. ^ abcWhen SamusInit runs with no file loading (gIsLoadingFile clear) and an unnamed flag, gUnk_3000be3, clear, it copies sEquipment_Empty into gEquipment: 99 energy of 99, 10 missiles of 10, 10 power bombs of 10, and no weapon flags (MBF_NONE). The atlas reads this as a new game's start. Zero Mission starts with the same 99 energy, but with every ammunition count at 0.Codemetroidret/mf · metroidret/mzm
    How we know
    7523    if (gUnk_3000be3 || gIsLoadingFile)
    7524        return;
    ⋮
    7526    gEquipment = sEquipment_Empty;
    
    src/samus.c lines 7523–7526 at a6d6187 · upstream ↗
    47const struct Equipment sEquipment_Empty = {
    48    .currentEnergy = 99,
    49    .maxEnergy = 99,
    50    .currentMissiles = 10,
    51    .maxMissiles = 10,
    52    .currentPowerBombs = 10,
    53    .maxPowerBombs = 10,
    54    .beamStatus = BF_NONE,
    55    .weaponsStatus = MBF_NONE,
    
    src/data/samus/samus_animation_pointers.c lines 47–55 at a6d6187 · upstream ↗
    236// --- Energy and ammo ---
    237#define STARTING_ENERGY 99
    238#define STARTING_MISSILES 10
    239#define STARTING_POWER_BOMBS 10
    
    include/constants/samus.h lines 236–239 at a6d6187 · upstream ↗
    8071        if (!gIsLoadingFile)
    ⋮
    8073            // Zero out most of samus's data
    8074            DMA3_FILL_32(0, &gSamusData, sizeof(gSamusData));
    8075            DMA3_FILL_32(0, &gEquipment, sizeof(gEquipment));
    ⋮
    8087            gEquipment.maxEnergy = 99;
    8088            gEquipment.currentEnergy = 99;
    
    src/samus.c lines 8071–8088 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 claim ledger

  13. ^ abcAn energy tank adds 100 to Samus's maximum energy and sets her energy to the new maximum, unless the new maximum would pass MAX_ENERGY_AMOUNT, 20 tanks plus the starting 99, or 2099. The tank code reads no difficulty. Zero Mission's tank also adds 100 and refills, or 50 on Hard, and stops at 12 tanks: 1299 on Easy and Normal and 699 on Hard (computed).Codemetroidret/mf · metroidret/mzmrevised
    How we know
    267                else if (i == TANK_TYPE_ENERGY)
    ⋮
    269                    if (gEquipment.maxEnergy + ENERGY_INCREASE_AMOUNT <= MAX_ENERGY_AMOUNT)
    ⋮
    271                        gEquipment.maxEnergy += ENERGY_INCREASE_AMOUNT;
    272                        gEquipment.currentEnergy = gEquipment.maxEnergy;
    
    src/bg_clip.c lines 267–274 at a6d6187 · upstream ↗
    241#ifndef REGION_JP
    242#define ENERGY_INCREASE_AMOUNT 100
    ⋮
    246// Default 2099
    247#define MAX_ENERGY_AMOUNT (20 * ENERGY_INCREASE_AMOUNT + STARTING_ENERGY)
    
    include/constants/samus.h lines 241–247 at a6d6187 · upstream ↗
    531                else if (i == ITEM_TYPE_ENERGY)
    ⋮
    533                    if (sNumberOfTanksPerArea[MAX_AMOUNT_OF_AREAS - 1].energy * sTankIncreaseAmount[gDifficulty].energy + sStartingHealthAmmo.energy >= gEquipment.maxEnergy + sTankIncreaseAmount[gDifficulty].energy)
    ⋮
    535                        gEquipment.maxEnergy += sTankIncreaseAmount[gDifficulty].energy;
    536                        gEquipment.currentEnergy = gEquipment.maxEnergy;
    
    src/bg_clip.c lines 531–537 at 2aae289 · upstream ↗
    52    [MAX_AMOUNT_OF_AREAS - 1] = {
    53        .energy = 12,
    
    src/data/block_data.c lines 52–53 at 2aae289 · upstream ↗
    60const struct TankList sStartingHealthAmmo = {
    61    .energy = 99,
    ⋮
    67const struct TankList sTankIncreaseAmount[DIFF_COUNT] = {
    68    [DIFF_EASY] = {
    69        .energy = 100,
    ⋮
    74    [DIFF_NORMAL] = {
    75        .energy = 100,
    ⋮
    80    [DIFF_HARD] = {
    81        .energy = 50,
    
    src/data/block_data.c lines 60–81 at 2aae289 · 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.

    In the claim ledger

  14. ^ abcWhen a game starts rather than loads a file (gIsLoadingFile clear), SamusInit fills gEquipment with zeros and then sets Samus's maximum and current energy to 99, so she starts with 99 energy, no tanks, and no missiles, super missiles, or power bombs. Metroid starts her with 30 units.Codemetroidret/mzm · nmikstas/metroid-disassembly
    How we know
    8071        if (!gIsLoadingFile)
    ⋮
    8073            // Zero out most of samus's data
    8074            DMA3_FILL_32(0, &gSamusData, sizeof(gSamusData));
    8075            DMA3_FILL_32(0, &gEquipment, sizeof(gEquipment));
    ⋮
    8083            // Set starting info
    8084            gSamusData.pose = SPOSE_FACING_THE_FOREGROUND;
    8085            gSamusData.direction = KEY_LEFT;
    ⋮
    8087            gEquipment.maxEnergy = 99;
    8088            gEquipment.currentEnergy = 99;
    
    src/samus.c lines 8071–8088 at 2aae289 · 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 ↗
    1580        LDA #$00                ;
    1581        STA HealthLo            ;Starting health is
    1582        LDA #$03                ;set to 30 units.
    1583        STA HealthHi            ;
    
    Source_Files/Bank07.asm lines 1580–1583 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.

    In the claim ledger

  15. ^ abcdOn Easy and Normal an energy tank adds 100 to Samus's maximum energy, and on Hard 50, and sets her energy to the new maximum. A tank adds nothing if the maximum plus one more tank would pass 12 tanks plus the starting 99, so the maximum is 1299, or 699 on Hard (computed). In Metroid each tank holds 100 units, up to 6 tanks and 699.9 units, with the same refill.Codemetroidret/mzm · nmikstas/metroid-disassembly
    How we know
    531                else if (i == ITEM_TYPE_ENERGY)
    ⋮
    533                    if (sNumberOfTanksPerArea[MAX_AMOUNT_OF_AREAS - 1].energy * sTankIncreaseAmount[gDifficulty].energy + sStartingHealthAmmo.energy >= gEquipment.maxEnergy + sTankIncreaseAmount[gDifficulty].energy)
    ⋮
    535                        gEquipment.maxEnergy += sTankIncreaseAmount[gDifficulty].energy;
    536                        gEquipment.currentEnergy = gEquipment.maxEnergy;
    
    src/bg_clip.c lines 531–537 at 2aae289 · upstream ↗
    52    [MAX_AMOUNT_OF_AREAS - 1] = {
    53        .energy = 12,
    
    src/data/block_data.c lines 52–53 at 2aae289 · upstream ↗
    60const struct TankList sStartingHealthAmmo = {
    61    .energy = 99,
    ⋮
    67const struct TankList sTankIncreaseAmount[DIFF_COUNT] = {
    68    [DIFF_EASY] = {
    69        .energy = 100,
    ⋮
    74    [DIFF_NORMAL] = {
    75        .energy = 100,
    ⋮
    80    [DIFF_HARD] = {
    81        .energy = 50,
    
    src/data/block_data.c lines 60–81 at 2aae289 · upstream ↗
    4354LDC00:* LDA TankCount           ;
    4355LDC03:  CMP #$06            ;Has Samus got 6 energy tanks?
    4356LDC05:  BEQ +               ;If so, she can't have any more.
    4357LDC07:  INC TankCount           ;Otherwise give her a new tank.
    4358LDC0A:* LDA TankCount           ;
    4359LDC0D:  JSR Amul16          ;Get tank count and shift into upper nibble.
    4360LDC10:  ORA #$09            ;
    4361LDC12:  STA HealthHi            ;Set new tank count. Upper health digit set to 9.
    4362LDC15:  LDA #$99            ;Max out low health digit.
    4363LDC17:  STA HealthLo            ;Health is now FULL!
    
    Source_Files/Bank07.asm lines 4354–4363 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.

    In the claim ledger

  16. ^ abcEach Piece of Heart adds 1 to a count kept modulo 4; the piece that brings it back to 0 grants item $26, a heart container.Codespannerisms/usdasm
    How we know
    20390|05F08A| LDA.l $7EF36B
    20391|05F08E| INC A
    20392|05F08F| AND.b #$03
    20393|05F091| STA.l $7EF36B
    20394|05F095| BNE .not_full_set
    ⋮
    20400|05F09C| LDY.b #$26 ; ITEMGET 26
    
    bank_05.asm lines 20390–20402 at bcdd96e · 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

  17. ^ abcA heart container adds 8 to Link's life capacity, one heart, up to $A0, 20 hearts. The one from four pieces refills his life to the new capacity; the one a boss leaves adds a single heart of life.Codespannerisms/usdasm
    How we know
    13497|08C45A| CMP.b #$26 ; ITEMGET 26
    13498|08C45C| BEQ .refill_hp
    ⋮
    13503|08C462| CMP.b #$3E ; ITEMGET 3E
    ⋮
    13509|08C46D| CMP.b #$A0
    ⋮
    13513|08C472| ADC.b #$08
    13514|08C474| STA.l $7EF36C
    ⋮
    13518|08C47D| ADC.b #$08
    13519|08C47F| STA.l $7EF372
    ⋮
    13525.refill_hp
    ⋮
    13538|08C49B| SBC.b $00
    13539|08C49D| STA.b $00
    ⋮
    13543|08C4A4| ADC.b $00
    ⋮
    
    bank_08.asm lines 13496–13544 at bcdd96e · upstream ↗
    13234|08C2DD| dw $FFFF ; FIGHTER SWORD
    ⋮
    13272|08C329| dw $0158 ; HEART CONTAINER FROM 4/4  - MESSAGE 0158
    ⋮
    13296|08C359| dw $FFFF ; BOSS HC
    
    bank_08.asm lines 13233–13297 at bcdd96e · 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. ^ abcdeLink's Awakening keeps A Link to the Past's four Pieces of Heart per container. The fourth piece clears the count, adds a heart to Link's maximum, and queues $40 of health, eight hearts' worth.Codezladx/LADX-Disassembly · spannerisms/usdasm · “Legend of Zelda, The - Link's Awakening (USA, Europe) (Rev 2)”revised
    How we know
    2922    ; If found 4 heart pieces…
    ⋮
    2929    ; Clear heart pieces count
    ⋮
    2935    ; Increase the maximum number of hearts
    
    src/code/entities/bank3.asm lines 2922–2937 at 2a5c2c0 · upstream ↗
    20390|05F08A| LDA.l $7EF36B
    20391|05F08E| INC A
    20392|05F08F| AND.b #$03
    20393|05F091| STA.l $7EF36B
    20394|05F095| BNE .not_full_set
    ⋮
    20400|05F09C| LDY.b #$26 ; ITEMGET 26
    
    bank_05.asm lines 20390–20402 at bcdd96e · upstream ↗

    In the cartridge (“Legend of Zelda, The - Link's Awakening (USA, Europe) (Rev 2)”): the same count test, reset, `$40` of health, and `inc` of the maximum in the 1993 Game Boy release, bank 3. We don't reproduce the bytes.

    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

  19. ^ abA heart container left by a boss adds a heart to Link's maximum and queues $FF of health, a full refill.Codezladx/LADX-Disassembly · “Legend of Zelda, The - Link's Awakening (USA, Europe) (Rev 2)”revised
    How we know
    2768    ; Increase max health, and fully restore health
    
    src/code/entities/bank3.asm lines 2766–2772 at 2a5c2c0 · upstream ↗

    In the cartridge (“Legend of Zelda, The - Link's Awakening (USA, Europe) (Rev 2)”): the same `inc` of the maximum and `$FF` of health in the 1993 release, bank 3. We don't reproduce the bytes.

    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

  20. ^ abcIn both US releases Link's health counts in quarter hearts, the annotators' reading in a comment that calls the starting $0c "3 hearts". The fourth Piece of Heart resets the count to 0 and gives Link a Heart Container with a parameter of 4, one heart. Link's Awakening DX also takes four pieces, but there the fourth adds a heart to a maximum kept in whole hearts and queues $40 of health in eighths, eight hearts' worth.CodeStewmath/oracles-disasm · zladx/LADX-Disassemblyrevised
    How we know
    389initialFileVariables_standardGame:
    
    code/fileManagement.s lines 389–391 at 21c924a · upstream ↗
    251	; TREASURE_HEART_PIECE (0x2b)
    252	.db <wNumHeartPieces
    253	.db $02
    
    data/ages/treasureCollectionBehaviours.s lines 251–254 at 21c924a · upstream ↗
    219	; TREASURE_HEART_PIECE (0x2b)
    220	.db <wNumHeartPieces
    221	.db $02
    
    data/seasons/treasureCollectionBehaviours.s lines 219–222 at 21c924a · upstream ↗
    2018@func:
    2019	ld a,(wNumHeartPieces)
    2020	add b
    2021	add a
    2022	push af
    2023	sub $08
    2024	jr nz,+
    ⋮
    2026	ld (wNumHeartPieces),a
    2027	dec a
    ⋮
    2029	ld (w7d0ef),a
    
    code/textbox.s lines 2018–2029 at 21c924a · upstream ↗
    308	; You got 4 pieces of heart. That's 1 heart container
    309.ifdef ROM_AGES
    ⋮
    322	ld a,SND_FILLED_HEART_CONTAINER
    323	call playSound
    324	ld a,TREASURE_HEART_CONTAINER
    325	ld c,$04
    326	jp giveTreasure
    
    code/textbox.s lines 308–326 at 21c924a · upstream ↗
    2922    ; If found 4 heart pieces…
    ⋮
    2929    ; Clear heart pieces count
    ⋮
    2935    ; Increase the maximum number of hearts
    
    src/code/entities/bank3.asm lines 2922–2937 at 2a5c2c0 · 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.

    In the claim ledger

  21. ^ abcIn both US releases a Heart Container adds its parameter to Link's maximum health, 4 quarters (one heart) for every Heart Container treasure object the data defines and for the one the fourth Piece of Heart gives. It always brings a heart refill of $40, which is sixteen hearts (computed, in the quarter hearts a comment gives), capped at the maximum. Link's Awakening DX's boss container adds a heart and queues $FF of health instead.CodeStewmath/oracles-disasm · zladx/LADX-Disassemblyrevised
    How we know
    246	; TREASURE_HEART_CONTAINER (0x2a)
    247	.db <wLinkMaxHealth
    248	.db $8a
    
    data/ages/treasureCollectionBehaviours.s lines 246–249 at 21c924a · upstream ↗
    214	; TREASURE_HEART_CONTAINER (0x2a)
    215	.db <wLinkMaxHealth
    216	.db $8a
    
    data/seasons/treasureCollectionBehaviours.s lines 214–217 at 21c924a · upstream ↗
    21;               a: Add [param] to [b0]. (Heart container)
    ⋮
    23;               c: Add [param] to [b0], using [b0+1] as a cap. (Health refill)
    
    data/ages/treasureCollectionBehaviours.s lines 1–23 at 21c924a · upstream ↗
    265	m_BeginTreasureSubids TREASURE_HEART_CONTAINER
    266	m_TreasureSubid $1a, $04, $16, $3b, TREASURE_OBJECT_HEART_CONTAINER_00
    
    data/ages/treasureObjectData.s lines 265–268 at 21c924a · upstream ↗
    230	m_BeginTreasureSubids TREASURE_HEART_CONTAINER
    231	m_TreasureSubid $1a, $04, $16, $3b, TREASURE_OBJECT_HEART_CONTAINER_00
    
    data/seasons/treasureObjectData.s lines 230–233 at 21c924a · upstream ↗
    13;   b1: Parameter (value of 'c' to pass to "giveTreasure")
    
    data/ages/treasureObjectData.s lines 8–13 at 21c924a · upstream ↗
    117	call @giveTreasure
    ⋮
    119	; Check if adding this item requires adding another item.
    120	push af
    121	ld hl,@extraItemsToAddTable
    122	call @findItemInTable
    123	call nz,@giveTreasure
    
    code/treasureAndDrops.s lines 115–123 at 21c924a · upstream ↗
    199; When Link obtains any item in the first column, he will obtain the item in the second
    200; column with the parameter in the third column.
    ⋮
    204	.db TREASURE_HEART_CONTAINER	TREASURE_HEART_REFILL		$40
    
    code/treasureAndDrops.s lines 199–204 at 21c924a · upstream ↗
    319; [de] += c.
    320@modea:
    321	ld a,(de)
    322	add c
    323	ld (de),a
    324	ret
    ⋮
    326; [de] += c, and [de+1] is the cap for this value.
    ⋮
    328@modec:
    ⋮
    339	cp (hl)
    ⋮
    347	add c
    348	ld (de),a
    349	jr ++
    ⋮
    
    code/treasureAndDrops.s lines 319–362 at 21c924a · upstream ↗
    2768    ; Increase max health, and fully restore health
    
    src/code/entities/bank3.asm lines 2768–2772 at 2a5c2c0 · 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.

    In the claim ledger

  22. ^ abcdThe Minish Cap counts Link's health in eighths of a heart, as A Link to the Past does and as the zladx annotators' comment on Link's Awakening's health byte says ("$08 = 1 heart"); a new file starts him at 24, three hearts. When Link holds up a Piece of Heart, the code refills his health to its maximum and adds 1 to the piece count. The fourth piece resets the count to 0 and then does what a Heart Container does: it adds 8 to the maximum, capped at 160 (20 hearts, A Link to the Past's cap), and refills his health again. Both earlier games also make a container from every fourth piece.Codezeldaret/tmc · spannerisms/usdasm · zladx/LADX-Disassemblyrevised
    How we know
    134        case 2:
    135            if (super->type != ITEM_HEART_CONTAINER) {
    136                if (super->type != ITEM_HEART_PIECE) {
    137                    break;
    ⋮
    139                ModHealth(160);
    140                gSave.stats.heartPieces++;
    141                if (gSave.stats.heartPieces < 4) {
    142                    break;
    ⋮
    144                gSave.stats.heartPieces = 0;
    ⋮
    146            gSave.stats.maxHealth += 8;
    147            if (gSave.stats.maxHealth > 160) {
    148                gSave.stats.maxHealth = 160;
    ⋮
    
    src/object/linkHoldingItem.c lines 131–150 at 6fb6dfb · upstream ↗
    204s32 ModHealth(s32 delta) {
    ⋮
    208    newHealth = stats->health + delta;
    ⋮
    212    if (stats->maxHealth < newHealth) {
    213        newHealth = stats->maxHealth;
    ⋮
    215    stats->health = newHealth;
    
    src/gameUtils.c lines 204–216 at 6fb6dfb · upstream ↗
    1688    save->stats.health = 24;
    1689    save->stats.maxHealth = 24;
    
    src/fileselect.c lines 1688–1689 at 6fb6dfb · upstream ↗
    776    maxQuarterHearts = gSave.stats.maxHealth / 2;
    ⋮
    797    maxHearts = maxQuarterHearts / 4;
    
    src/fileselect.c lines 776–797 at 6fb6dfb · upstream ↗
    20390|05F08A| LDA.l $7EF36B
    20391|05F08E| INC A
    20392|05F08F| AND.b #$03
    20393|05F091| STA.l $7EF36B
    20394|05F095| BNE .not_full_set
    ⋮
    20400|05F09C| LDY.b #$26 ; ITEMGET 26
    
    bank_05.asm lines 20390–20402 at bcdd96e · upstream ↗
    13529|08C48B| LDA.l $7EF36C
    13530|08C48F| CMP.b #$A0
    13531|08C491| BEQ .not_heart
    ⋮
    13533|08C493| CLC
    13534|08C494| ADC.b #$08
    13535|08C496| STA.l $7EF36C
    
    bank_08.asm lines 13527–13535 at bcdd96e · upstream ↗
    2922    ; If found 4 heart pieces…
    ⋮
    2929    ; Clear heart pieces count
    ⋮
    2935    ; Increase the maximum number of hearts
    
    src/code/entities/bank3.asm lines 2922–2937 at 2a5c2c0 · upstream ↗
    3382; Amount of health ($08 = 1 heart)
    3383wHealth::
    
    src/constants/memory/wram.asm lines 3382–3384 at 2a5c2c0 · 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.

    In the claim ledger

Sources

Code