Bug Hall of Fame

From NetHackWiki
Revision as of 08:56, 6 February 2018 by Netzhack (talk | contribs) (SLASH'EM Extended: "chance of" = probability; "chance to" = opportunity)
Jump to navigation Jump to search

Sometimes, bugs appear in NetHack or a variant that break the game in a completely ludicrous way. Such bugs are preserved here for posterity.

Commonly accepted characteristics of Hall of Fame bugs include:

  • The gameplay implications of the bug are hilarious in the context of normal play.
  • If a "silliness mode" were added to the game, the bug would be re-implemented for the sake of having it in that mode.

Vanilla NetHack

  • The Vorpal Exploit: The game did not correctly re-roll the d20 it uses when calculating whether a thrown weapon will hit, meaning that the to-hit roll of a thrown weapon would always be the same until the player took some other action to reroll the die (such as making a melee attack). Vorpal Blade also uses the to-hit roll to decide whether it makes a decapitation attack. Together, this allowed the player to melee with Vorpal Blade until getting a decapitation, after which all attacks made by throwing Vorpal Blade would have a guaranteed decapitation, until the next melee attack. Once discovered, this bug was also found to exist in all NetHack variants, including SLASH'EM. In GruntHack, the bug works the same way with weapons that have the vorpal object property.
  • NetHack 3.1.0 had a bug where Yeenoghu's confusion attack would fall through due to a missing break statement, causing it to run the code that handles Death's melee attack. This allowed Yeenoghu to instakill players without magic resistance and drain maximum HP with his melee attacks.

NetHack 4

  • The game failed to check for an artifact being un-nameable and give the "finger slips" message. So when the player had the correct base item of an artifact, the player could then name it with that artifact's name to create the artifact.
  • AC was changed to Defence, a quantity starting at 0 and increasing. However, the game continues to use the AC scale internally, so the player's base AC would always actually be 10 Defence (equal to 0 AC in vanilla).
  • Tame demons gated in hostile ones when they attacked, causing a lot of grief for players with demon pets.
  • Unquitting: if you managed to hang the game while in its post-game state (which is not hard to do), the game would get confused and revert the quit, allowing you to continue to play as if you had saved instead of quitting. With the DYWYPI information, this allowed the player to get free identification, enlightenment, conducts, et cetera, on demand with no impact to the game.

dNetHack

  • The originally-deployed version of dNetHack did not correctly handle to-hit bonuses during melee combat. This caused the player's to-hit modifier to increase or decrease by a few points every time they attacked in melee, eventually rolling over from -128 to +127. As a result, during dNetHack's first Junethack outing players experienced runs of 'bad luck' during which their characters were unable to hit targets in melee, followed by runs of 'good luck' during which they couldn't miss.
  • Also during dNethack's original Junethack outing, ranged monster spellcasting was implemented in the middle of the tournament due to the author's mistaken belief that it was present in vanilla NetHack, and therefore its absence in dNetHack was due to a bug.

FIQHack

  • For almost 2 years, monsters in FIQHack regenerated HP twice as fast as the player, rather than being equally fast. Given how fast players regenerate HP lategame (before FIQHack addressed HP regeneration rate later on), this could get a bit out of hand.
  • It used to be possible for samurai player monsters on the samurai quest to read scrolls of genocide and instantly kill the player.
  • At one time, reading a non-blessed scroll of earth would cause an infinite number of boulders to fall on you.

NetHack Fourk

  • Bones levels from dungeon level 20 or later in the main dungeon could erroneously be saved as being from dungeon level 2. Then, new adventurers could load these bones when they entered dungeon level 2.
  • Player speed was completely broken for a while: on each turn, you would get faster and faster with each turn, until you would have around 9 turns of free movement on the 10th turn. But every 11th turn, you would become paralyzed for 11 turns.
  • Natural HP regeneration was somehow removed for all characters.
  • Artifacts in inventory blasted you twice whenever something checked your inventory.
  • The blessed scroll of wishing allowed you to wish for wands with 127 charges in the normal game (this was intended to be possible only in wizard mode).

UnNetHack

  • The Bell of Opening could fail to generate, making the game unwinnable.

SLASH'EM Extended

  • The version deployed during Junethack 2016 had a bug where most sources of healing, when used on the player, would have a 50% chance of unconditionally healing the player back to full HP. This included the very common scroll of healing, making the game much easier when the player had a high max HP.
  • In some old version it used to be possible to get two Amulets of Yendor due to two different boss monsters on Moloch's sanctum both being generated with one. If the player picked up both, then dropped one, level teleportation became possible again, allowing the player to skip the entire ascension run if they wanted. And to top it off, Rodney would not harass the player anymore either.

SLASHTHEM

  • Artifacts with the "protection" effect, e.g. the Burned Moth Relay, would give 2 extra points of AC every time the player saved and reloaded. This allowed the player to reach a naked AC of -128, and on the next save it would roll over to +126 (-128, +127, +126).

Other

  • In objects.c, the base AC of armor is unintuitively expressed as the value your AC would be if you wore it with no other armor (e.g. plate mail's AC is coded as 3 because it gives -7 to AC, and 10 - 7 = 3). When the devnull tournament added the Waldo Challenge, it added bobble hats which were intended to be useless armor which was only there for flavor. However, it was given an AC of 0 in objects.c, likely because whoever implemented it didn't know that base AC counts down from 10. The effect was that a +0 bobble hat granted 10 AC when worn.