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

A hunger clock is a counter of food that drops each turn, so a hero who explores too slowly starves. Rogue 5.4 starts it at 1,300 and warns below 300 and 1501,2; NetHack 3.6.7 starts at 900 and warns at 150 and 503,4. Rogue caps a meal at 2,0005, while NetHack can choke a hero who eats past 2,000 when already Satiated6.

  • Capped stomachRogue (1980). 1,300 food at the start, less 1 a turn plus rings; Hungry below 300, Weak below 150, starved below −850; a meal fills to at most 2,000.1,7,2,5
  • Overeating chokesNetHack (1987). 900 nutrition at the start, less 1 a turn plus rings, amulets, and loads; Hungry at 150, Weak at 50, starved below −(100 + 10 × Constitution); a Satiated meal past 2,000 can choke.3,4,6

Games

GameYearHowNote
Rogue1980Capped stomach1,300 food at the start, less 1 a turn plus rings; Hungry below 300, Weak below 150, starved below −850; a meal fills to at most 2,000
NetHack1987Overeating chokes900 nutrition at the start, less 1 a turn plus rings, amulets, and loads; Hungry at 150, Weak at 50, starved below −(100 + 10 × Constitution); a Satiated meal past 2,000 can choke
Every claim about this mechanic, by game (7)
Rogue 1980Rogue 5.4 starts the hero with 1,300 food. The stomach daemon runs once per pass of the command loop, after the hero's move, or after both moves when the hero is hasted. While food is above 0 it takes 1, plus each worn ring's cost, and 1 less while the hero carries the Amulet of Yendor, so with the Amulet and no rings the count stops.Code
In Rogue 5.4 each worn ring adds to the turn's food cost by kind: 2 for regeneration; 1 for protection, add strength, sustain strength, stealth, or maintain armor; 1 at a chance of 1 in 3 for searching, dexterity, or increase damage, and 1 in 5 for see invisible; 0 for adornment, aggravate monster, or teleportation. A ring of slow digestion gives 1 back at a chance of 1 in 2.Code
Rogue 5.4 shows Hungry once food drops below 300 and Weak below 150. At 0 or below, rings stop counting and food drops by 1 a turn; on each turn the hero isn't already helpless, a 1-in-5 chance faints the hero for 4 to 11 turns, and the hero starves once the count is below −850.Code
Eating any food in Rogue 5.4 first raises a negative count to 0, then adds 1,100 to 1,499 (HUNGERTIME - 200 + rnd(400)), capped at 2,000.Code
NetHack 1987NetHack 3.6.7 starts the hero at 900 nutrition. Once per game turn, and again for each melee attack the hero makes, it takes 1, unless the hero has slow digestion, is polymorphed into a form that doesn't eat, or is praying under divine protection, and only at a chance of 1 in 10 while the hero is asleep or fainted. On odd turns, regeneration (not from an artifact) and a Stressed or heavier load each take 1 more; on even turns, the Hunger property and Conflict (not from an artifact) do, and once every 20 turns each worn ring that has a charge other than 0 or takes none, the worn amulet, and carrying the Amulet of Yendor take 1 each.Code
NetHack 3.6.7 counts the hero Satiated above 1,000 nutrition, Not Hungry above 150, Hungry above 50, Weak above 0, and Fainting at 0 or below. While Fainting, a hero not already fainted or helpless faints on entering the state, and later at a chance that grows as nutrition falls (1 in 20 at 0), for 10 turns plus a tenth of the deficit; on an update where neither happens, the hero starves once nutrition is below −(100 + 10 × Constitution).Code
In NetHack 3.6.7, food that brings nutrition to 2,000 or more chokes a hero who was Satiated (for a meal, at its start). A hero who doesn't breathe always vomits and loses 1,000 nutrition instead; a hero being strangled always dies; any other hero vomits 1 time in 20 and otherwise dies.Code

References

  1. ^ abRogue 5.4 starts the hero with 1,300 food. The stomach daemon runs once per pass of the command loop, after the hero's move, or after both moves when the hero is hasted. While food is above 0 it takes 1, plus each worn ring's cost, and 1 less while the hero carries the Amulet of Yendor, so with the Amulet and no rings the count stops.CodeRogue 5.4.4 source
    How we know
    29    food_left = HUNGERTIME;
    
    init.c line 29 at cf9bd26 · upstream ↗
    117#define HUNGERTIME	1300
    
    rogue.h line 117 at cf9bd26 · upstream ↗
    150    start_daemon(stomach, 0, AFTER);
    
    main.c line 150 at cf9bd26 · upstream ↗
    32    if (on(player, ISHASTE))
    
    command.c lines 32–39 at cf9bd26 · upstream ↗
    444    do_daemons(AFTER);
    
    command.c line 444 at cf9bd26 · upstream ↗
    163	food_left -= ring_eat(LEFT) + ring_eat(RIGHT) + 1 - amulet;
    
    daemons.c lines 160–163 at cf9bd26 · upstream ↗
    148	amulet = TRUE;
    
    pack.c lines 147–148 at cf9bd26 · 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

  2. ^ abRogue 5.4 shows Hungry once food drops below 300 and Weak below 150. At 0 or below, rings stop counting and food drops by 1 a turn; on each turn the hero isn't already helpless, a 1-in-5 chance faints the hero for 4 to 11 turns, and the hero starves once the count is below −850.CodeRogue 5.4.4 source
    How we know
    118#define MORETIME	150
    
    rogue.h lines 118–120 at cf9bd26 · upstream ↗
    146	if (food_left-- < -STARVETIME)
    
    daemons.c lines 144–159 at cf9bd26 · upstream ↗
    171	else if (food_left < 2 * MORETIME && oldfood >= 2 * MORETIME)
    ⋮
    176	    else
    
    daemons.c lines 165–179 at cf9bd26 · upstream ↗
    184	"", "Hungry", "Weak", "Faint"
    
    io.c lines 182–185 at cf9bd26 · upstream ↗
    188    return range == 0 ? 0 : abs((int) RN) % range;
    
    main.c lines 186–189 at cf9bd26 · 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

  3. ^ abNetHack 3.6.7 starts the hero at 900 nutrition. Once per game turn, and again for each melee attack the hero makes, it takes 1, unless the hero has slow digestion, is polymorphed into a form that doesn't eat, or is praying under divine protection, and only at a chance of 1 in 10 while the hero is asleep or fainted. On odd turns, regeneration (not from an artifact) and a Stressed or heavier load each take 1 more; on even turns, the Hunger property and Conflict (not from an artifact) do, and once every 20 turns each worn ring that has a charge other than 0 or takes none, the worn amulet, and carrying the Amulet of Yendor take 1 each.CodeNetHack 3.6.7 sourcerevised
    How we know
    119    u.uhunger = 900;
    
    src/eat.c lines 116–120 at ed600d9 · upstream ↗
    176                    /* once-per-turn things go here */
    
    src/allmain.c lines 172–176 at ed600d9 · upstream ↗
    281                    gethungry();
    
    src/allmain.c line 281 at ed600d9 · upstream ↗
    2799    if ((!Unaware || !rn2(10)) /* slow metabolic rate while asleep */
    
    src/eat.c lines 2790–2804 at ed600d9 · upstream ↗
    2821        switch ((int) (moves % 20)) { /* note: use even cases only */
    
    src/eat.c lines 2806–2841 at ed600d9 · upstream ↗
    373#define Unaware (multi < 0 && (unconscious() || is_fainted()))
    
    include/youprop.h line 373 at ed600d9 · upstream ↗
    25    SLT_ENCUMBER = 1, /* Burdened */
    
    include/hack.h line 25 at ed600d9 · upstream ↗
    1873    if (p_type == 3 && !Inhell) {
    ⋮
    1877        u.uinvulnerable = TRUE;
    
    src/pray.c lines 1873–1877 at ed600d9 · upstream ↗
    1978overexertion()
    ⋮
    1983    gethungry();
    
    src/hack.c lines 1975–1983 at ed600d9 · upstream ↗
    408        || overexertion())
    409        goto atk_done;
    
    src/uhitm.c lines 406–409 at ed600d9 · upstream ↗

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

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

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

    In the claim ledger

  4. ^ abNetHack 3.6.7 counts the hero Satiated above 1,000 nutrition, Not Hungry above 150, Hungry above 50, Weak above 0, and Fainting at 0 or below. While Fainting, a hero not already fainted or helpless faints on entering the state, and later at a chance that grows as nutrition falls (1 in 20 at 0), for 10 turns plus a tenth of the deficit; on an update where neither happens, the hero starves once nutrition is below −(100 + 10 × Constitution).CodeNetHack 3.6.7 source
    How we know
    2939                            : (h > 50) ? HUNGRY : (h > 0) ? WEAK : FAINTING;
    
    src/eat.c lines 2936–2939 at ed600d9 · upstream ↗
    2983        if (u.uhs <= WEAK || rn2(20 - uhunger_div_by_10) >= 19) {
    
    src/eat.c lines 2977–2999 at ed600d9 · upstream ↗
    3004        } else if (u.uhunger < -(100 + 10 * (int) ACURR(A_CON))) {
    
    src/eat.c lines 3001–3008 at ed600d9 · upstream ↗
    2842    newuhs(TRUE);
    
    src/eat.c line 2842 at ed600d9 · 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

  5. ^ abEating any food in Rogue 5.4 first raises a negative count to 0, then adds 1,100 to 1,499 (HUNGERTIME - 200 + rnd(400)), capped at 2,000.CodeRogue 5.4.4 source
    How we know
    298    if ((food_left += HUNGERTIME - 200 + rnd(400)) > STOMACHSIZE)
    
    misc.c lines 296–300 at cf9bd26 · upstream ↗
    119#define STOMACHSIZE	2000
    
    rogue.h line 119 at cf9bd26 · 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

  6. ^ abIn NetHack 3.6.7, food that brings nutrition to 2,000 or more chokes a hero who was Satiated (for a meal, at its start). A hero who doesn't breathe always vomits and loses 1,000 nutrition instead; a hero being strangled always dies; any other hero vomits 1 time in 20 and otherwise dies.CodeNetHack 3.6.7 sourcerevised
    How we know
    2864    if (u.uhunger >= 2000) {
    
    src/eat.c lines 2863–2865 at ed600d9 · upstream ↗
    2543        context.victual.canchoke = (u.uhs == SATIATED);
    
    src/eat.c line 2543 at ed600d9 · upstream ↗
    252    if (Breathless || (!Strangled && !rn2(20))) {
    
    src/eat.c lines 238–260 at ed600d9 · 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

  7. ^In Rogue 5.4 each worn ring adds to the turn's food cost by kind: 2 for regeneration; 1 for protection, add strength, sustain strength, stealth, or maintain armor; 1 at a chance of 1 in 3 for searching, dexterity, or increase damage, and 1 in 5 for see invisible; 0 for adornment, aggravate monster, or teleportation. A ring of slow digestion gives 1 back at a chance of 1 in 2.CodeRogue 5.4.4 source
    How we know
    -2, /* R_DIGEST */
    rings.c#L163-L179 · 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