Yeenoghu

From NetHackWiki
Revision as of 07:08, 9 October 2024 by Umbire the Phantom (talk | contribs) ("A ludicrous bug": word choice)
Jump to navigation Jump to search

Yeenoghu, &, is a unique monster that appears in NetHack. He is a demon lord that is covetous and capable of warping, and desires the Amulet of Yendor. Yeenoghu has infravision and can be seen via infravision, and can also fly, see invisible, and pick up items that he comes across.

Yeenoghu has a weapon attack, a second weapon attack that inflicts confusion, a claw attack that can paralyze the target, and the ability to fire magic missiles. Yeenoghu possesses poison resistance and fire resistance, magic resistance from his magic missile attack, and drain resistance and death resistance like all demons.

Yeenoghu is poisonous to eat, which primarily comes up if he is digested by another monster.

Generation

Yeenoghu is not a valid form for polymorph.

Yeenoghu is one of two demon lords alongside Juiblex that can be summoned by performing same-race sacrifice, and will be peaceful for a chaotic hero and hostile otherwise. Yeenoghu also has a chance of being summoned by demon gating, or via the summon nasties monster spell being cast either in Gehennom or by the Wizard of Yendor.

Yeenoghu is always generated with a flail.

Strategy

Yeenoghu can deal out tremendous physical damage if you lack free action and MC3; his melee attacks can also gate in other major demons, and he can zap you with magic missiles as well, meaning he is himself immune to them on top of his high monster magic resistance. However, Yeenoghu is not generally a problem if you are prepared for him.

Like other demon princes, Yeenoghu is covetous and will teleport next to you to deliver melee attacks and fire magic missiles. When at low health, he will teleport to the upstair tile to regenerate, and will escape up them if approached too closely; the usual strategies for covetous monsters apply, including obstructing the upstair or else luring him to a floor with a blocked upstair. As he is able to summon Demogorgon directly, dispatching him quickly is advised.

Yeenoghu respects Elbereth; however, Elbereth does not work in Gehennom, where Yeenoghu is most likely to be encountered. Even if you encounter him outside Gehennom (e.g. via water demon or a non-Gehennom bones), you may be better off escaping and avoiding the floor entirely if somehow possible unless your character is sufficiently prepared. If you can take the fight to him, then remember that you cannot attack him while on an Elbereth, either; on top of this, Yeenoghu's confusing gaze will complicate your attempts to engrave, and his tendency to teleport after you at the first opportunity usually means you will have to lure him to a pre-engraved Elbereth elsewhere.

History

Yeenoghu is introduced along with the other named demons in NetHack 3.0.0.

"A ludicrous bug"

Yeenoghu is the subject of one of the longer-running software bugs in the history of NetHack.

The Riders are introduced in NetHack 3.1.0, with the code that handles their special attacks placed right after the code for Yeenoghu's confusion-inducing weapon attack - this code was inserted carelessly without a break in the code to separate its damage type case from Death's deadly touch, resulting in Yeenoghu using his weapon attack and then:[1]

Yeenoghu reaches out with its deadly touch.--More--
Do you want your possessions identified? [yn]

The text below is an excerpt of lines 999-1012 from src/mhit.u in NetHack 3.0.0, before the Riders were added:[2]

#ifdef HARD /* a non-gaze AD_CONF exists only for one of the demons */
            case AD_CONF:
                hitmsg(mtmp,mattk->aatyp);
                if(!mtmp->mcan && !rn2(4) && !mtmp->mspec_used) {
                    mtmp->mspec_used += (dmg + rn2(6));
                    if(Confusion)
                         You("are getting even more confused.");
                    else You("are getting confused.");
                    make_confused(HConfusion + dmg, FALSE);
                }
#endif
                /* fall through to next case */
            default:    dmg = 0;
                        break;

For comparison, here is a partial excerpt of lines 1214-1258 from NetHack 3.1.0:[1]

            case AD_CONF:
                hitmsg(mtmp, mattk);
                if(!mtmp->mcan && !rn2(4) && !mtmp->mspec_used) {
                    mtmp->mspec_used = mtmp->mspec_used + (dmg + rn2(6));
                    if(Confusion)
                         You("are getting even more confused.");
                    else You("are getting confused.");
                    make_confused(HConfusion + dmg, FALSE);
                }
                /* fall through to next case */
            case AD_DETH:
                pline("%s reaches out with its deadly touch.", Monnam(mtmp));
                [... the rest of the Rider code ...]
            default:    dmg = 0;
                        break;

Contemporary source-divers thought this to be deliberate, due to the comment about the fall through on line 1223 at the end of Yeenoghu's section, and thus the bug was never reported until after the release of NetHack 3.3.1.[3] Pat Rankin of the DevTeam was made aware of this property in a rec.games.roguelike.nethack discussion, and called it "a ludicrous bug"[4] - said bug was written up as bug C331-96 and finally fixed in time for the release of NetHack 3.4.0. [5] The fix itself is conceptually simple, by adding a dmg = 0; followed with a break; to properly close the damage type case, as illustrated by lines 1474-1486 of src/mhitu.c in NetHack 3.4.3:[6]

            case AD_CONF:
                hitmsg(mtmp, mattk);
                if(!mtmp->mcan && !rn2(4) && !mtmp->mspec_used) {
                    mtmp->mspec_used = mtmp->mspec_used + (dmg + rn2(6));
                    if(Confusion)
                         You("are getting even more confused.");
                    else You("are getting confused.");
                    make_confused(HConfusion + dmg, FALSE);
                }
                dmg = 0;
                break;
            case AD_DETH:
                pline("%s reaches out with its deadly touch.", Monnam(mtmp));
                [... the rest of the Rider code ...]

Origin

Yeenoghu is a character from the setting of Dungeons & Dragons, where he is the demon lord of gnolls, which resemble anthropomorphic hyenas. He wields a triple-headed flail.

Variants

UnNetHack

In UnNetHack, Yeenoghu no longer respects Elbereth.

EvilHack

In EvilHack, Yeenoghu now generates with an artifact triple-headed flail called Butcher, and his magic missile attack is buffed from 2d6 to 6d6.

Encyclopedia entry

Yeenoghu, the demon lord of gnolls, still exists although all his followers have been wiped off the face of the earth. He casts magic projectiles at those close to him, and a mere gaze into his piercing eyes may hopelessly confuse the battle-weary adventurer.

References