This page is turned black in memory of the victims of terrorism at the World Trade Center and the Pentagon, 11 Sep 2001.

Nethack Hell Patch: Technical Notes

The Hell Patch, version 3 introduces six new named demons and five new lairs.

Lilith attacks as a succubus, and Sammael as an incubus -- but with a -10 penalty to charisma. The AD_SSEX tag is modified so that the damd field specifies the charisma penalty. This field is 0 for incubi and succubi, and so these demons behave as in unmodified Nethack.

Cthulhu emits mind blasts as a mind flayer, requiring change to the code that triggers mind blasts.

Pazuzu and Lolth require no special changes to the code, other than the entry in monst.c.

Mammon demands a bribe -- but does not disappear permanently when a bribe is accepted. Furthermore, he will even bribe other demons. Changes to the bribe code are required to support Mammon.

The patch modifies fourteen files:

File

Object

Modification

dat/data.base none New entries for Pazuzu, Lilith, Sammael, Cthulhu, Mammon, and Lolth.
dat/dungeon.def none Extend Gehennom by one level, to ensure a place for Cthulhu's lair.
Place Mammon's lair in the upper parts of Gehennom.
Place Lolth's lair in the upper parts of Gehennom.
Place Lilith's lair in Gehennom, deeper than that of Orcus.
Place Sammael's lair in Gehennom, with the same range of depths as Lilith's lair.
Place Cthulhu's lair in Gehennom, one level above the vibrating square.
Adjust fakewiz1 and fakewiz2 for the increased depth of Gehennom, so that their ranges do not include the lair of Cthulhu.
dat/gehennom.des none Define the lairs of Lilith, Sammael, Cthulhu, Mammon, and Lolth.
include/decl.h dungeon_topology Add the lairs of Lilith, Sammael, Cthulhu, Mammon, and Lolth to the dungeon_topology structure, and provide shorthand macros to access these lairs.
include/extern.h doseduce() doseduce() now takes a second parameter, which is the charisma penalty.
src/dungeon.c level_map[] Add the lairs of Lolth, Lilith, Sammael, Cthulhu, and Mammon to the level_map structure.
src/mhitu.c hitmu() The AD_SSEX case passes the charisma penalty to doseduce().
could_seduce() Treat Lilith as a succubus, and Sammael as an incubus.
doseduce()
  • Add a second parameter, cha_penalty.
  • The monster is female if mon->female is set, rather than if it is a succubus.
  • Subtract cha_penalty from charisma wherever it appears, and pass it to mayberem().
mayberem() Add a third parameter, cha_penalty, which is subtracted from charisma.
src/minion.c demon_talk()
  • Mammon will demand a bribe, even from another demon.
  • Mammon will demand an amount equal to at least 60% of the gold he's carrying -- which may be more than the adventurer has.
  • When bribed, Mammon proceeds to the next lower level, or to the next higher level if the Sanctum gate has been opened. There he will demand another bribe.
src/monmove.c dochug() Allow Cthulhu to emit mind-blasts as a mind flayer.
src/monst.c mons[] Add entries for Pazuzu, Lilith, Sammael, Cthulhu, Mammon, and Lolth.
src/sounds.c domonnoise() In the MS_SEDUCE case, search for an AD_SSEX attack. If one is found, and could_seduce() returns 1, call doseduce() and pass the charisma penalty. If no AD_SSEX attack is found, or if could_seduce() does not return 1, behave as a nymph.
sys/unix/Makefile.top none Add cthulhu.lev, lilith.lev, lolth.lev, mammon.lev, and sammael.lev to the list of level files to install.
util/makedefs.c version_id_string() Modify the version string to indicate that the Hell Patch has been applied.
win/share/monsters.txt none New tiles for Pazuzu, Lilith, Sammael, Cthulhu, Mammon, and Lolth. Renumber subsequent tiles.

Ray Chason
rchason at smart.net (All spammers must die!)