Bug Hall of Fame

From NetHackWiki
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 "ludicrous 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. This bug went unreported for three major versions of the game because of a misplaced source code comment that made it look like intended behavior. It was removed in 3.4.0.
  • Branchport skip: In NetHack 3.4.3, the player could skip most of the ascension run with the Eye of the Aethiopica, because the branchporting code did not care if their mount was carrying the amulet. The character could drop the amulet, then wait until their pet would pick it up, then quickly mount it and invoke branchporting to sokoban or the mines. The pet would drop the amulet again after a few turns.
  • Time distortion bug: In NetHack 3.4.3, the code handling sinking into lava would treat any command (even something simple such as checking the inventory) as though it cost time. This was bug C343-231.
  • Amulet delivery service: In Nethack 3.4.3, covetous monsters (for example, Asmodeus) would teleport to the High Priest of Moloch in Moloch's Sanctum, fight and kill them, pick up the Amulet of Yendor, and then teleport back to you. Players would bring a strong covetous monster to the sanctum on purpose and let it fetch the amulet for them. This reduced the time spent in Moloch's Sanctum to about 40 turns, without the character ever having to move away from the upstairs and only having to fight a single monster. This was spoiler bug SC343-19.
  • From at least 3.1.0 until 3.6.6, a monster using Stormbringer's drain life attack on another monster would result in healing the player instead of the attacker. Many variants inherited this bug.
  • NetHack 3.7.0 editlevel 67 through 69 (developmental versions), the vibrating square did not generate, but Moloch's Sanctum could be reached via the stairs without meeting any of the normal requirements, allowing an alternative method of completing the game.

NetHack 4

  • Generalized Sting: A mistake in the new string-handling code caused all attempts to name an item with an artifact name to be accidentally sent down the Sting/Orcrist codepath, meaning that if the player had an item with the same base type as an artifact and gave it the same name, they'd create the artifact.
  • AC was changed to Defence, a quantity starting at 0 and increasing. However, when the player's stats were zeroed, the Defence stat was never changed from the default zero. Unfortunately, Defence is stored on the AC scale internally, so the "0" in the player's stat array would actually be interpreted as 0 AC, i.e. 10 Def.
  • 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.
  • A bug resulting from a reworking of code handling branch connections made it possible to end up in Home:0 by digging down from the Quest goal level. The game ended up reading Mines level data as Quest filler, and unless the player had already generated the Mines, would generate Quest filler in place of it. Continuing upwards to Home:-1 and beyond would, if the player hadn't visited the Mines' top level, eventually overwrite Gehennom data, including the Sanctum, replacing it with Quest filler. If it was possible to skip generating the Sanctum this way and generate what the game considered to be the VS level, as Quest filler, you could then enter Gehennom properly (by branchporting for example) and skip the invocation by going to the VS (replaced with Quest filler) and taking the downstairs there.
  • It used to be possible to access the Sanctum before doing the invocation by falling past the Vibrating Square dungeon level.

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

  • It's possible to enchant a weapon to +127 by polymorphing it into a dwarvish mattock, upgrading it to a pick-axe, further polymorphing it into a tinning kit or an expensive camera, charging that tool until it has 127 charges, and then waiting for it to revert. A +127 long sword can then be turned into Excalibur, while a +127 bow or other launcher can fire 40 or more projectiles at once.
  • Burying a medical kit and then waiting for it to rot leaves behind the pills it contained, which can then be consumed for a chance of a wish. An average medical kit contains about 10 pills, while the wish chance is 17, so it's possible to farm wishes by repeatedly wishing for medical kits.

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).

AceHack MP

  • AceHack's multiplayer mode would teleport a character to an otherwise inaccessible "waiting room" area above the top Sokoban level on save. When a player restored the game again, the character would be teleported to their old location. Note that this was a literal teleport - if the character was in a shop carrying unpaid items, the shopkeeper would consider it a theft and would be angry when the game was restored.

Splicehack

  • There was a time when using < on the starting upstair would count as ascending the game, making it trivial to get turn 1 ascensions even outside of wizard mode. Several players on the hardfought public server snatched "ascensions" that way.
  • When infernals were first added to SpliceHack, all humans treated them as hostile. This caused quest leaders to immediately expel an infernal player when talked to, making it impossible to win as an infernal.

EvilHack

  • In one version, the vibrating square did not generate, but Moloch's Sanctum could be reached via a simple level teleport without meeting any of the normal requirements, allowing an alternative method of completing the game.
  • Pets who knew "cancellation" would cast it repeatedly at the player, making it impossible for the player to maintain intrinsic protection, and eventually ruining their inventory.

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.