A Guide to Debug Mode for Non-Sourcedivers Last edited 2004-10-25 for NetHack 3.4.3 Compiled by Dylan O'Donnell Invoking debug mode ~~~~~~~~~~~~~~~~~~~ In contrast to explore mode, debug mode (also known as "wizard mode"; no relation to the Wizard role) can only be entered when starting a new session, not partway through an existing session. To invoke debug mode, NetHack must be started from the command line with the -D option, and in addition the user starting the game must have the username authorised to do so (by default, and in the official binaries, 'wizard'; this can be changed at compile time by altering the WIZARD definition in include/config.h). On single-user platforms, this is simply a matter of specifying the name with the -u option: nethack -u wizard -D whereas on multi-user platforms, you need to be logged in as the user 'wizard' (or other specified name), and can just use: nethack -D If you are not using the authorised name, the -D option will instead start an explore mode game. Regardless of whether the authorised name has been changed, the player name of any debug mode character will be 'wizard'. It is possible to restore a saved normal-mode game (belonging to any player) in debug mode, by renaming the savefile (changing any userid reference in the filename to that of the authorised wizard user, and the character name to 'wizard'); as with any debug-mode restore, you'll be prompted whether to keep the savefile or not. Gameplay changes ~~~~~~~~~~~~~~~~ As in explore mode, dying can be refused; your life will be saved as if you were wearing an amulet of lifesaving (but it'll even defeat self-genocide). You are also immune to death by some forms of trickery (provided it doesn't involve entire levelfiles going missing). Also as in explore mode, when you do choose to end a game, nothing will be written to the high-score file. The Big Room will always be generated, rather than the usual 40% chance; the portal to Fort Ludios will be created in the first eligible vault, rather than the usual 1/3 chance. You are offered the option to leave bones whenever you die on any level capable of leaving bones (regardless of depth, so even DL 1-3), possibly replacing another bones file already stored for that level; similarly, whenever you enter a level for which a saved bones file is present on the system, you are given the opportunity of loading those bones, and are asked whether you wish to delete ("unlink") the file or leave it in place. It is generally considered unsporting to leave debug-mode bones (whether enriched or booby-trapped) for regular characters to find. You can force the gods to be pleased when you pray; answering "y" to the question will zero your prayer timeout, clear any negative luck, set your alignment to 1 if non-positive, remove any god's anger, and finally persuade your god to overlook any remaining prayer disability. When asking permission to Quest, you will be informed of any alignment problems; if too low an alignment is the only one, you're given the option to boost it to the minimum requirement there and then. (It'll revert to be within the usual alignment limit for the age of the game the next time you take any action that changes your alignment, so don't mess about before going down into the Quest.) When reading a blessed scroll of genocide, selecting '*' as the class will result in nothing being genocided, but all monsters on the current level being removed (including pets and NPCs, so be careful). It won't prevent new ones being randomly created as usual, but it's handy to clear them out of your way if you're testing something else. You get to control whether any fountain you quaff from or dip into dries up. You can force a #mount command to succeed if possible, regardless of most usual impediments (healing wounded legs if necessary.) A stethoscope or wand of probing will reveal more information about a pet: its tameness, hunger level, and apport (willingness to fetch). Wishes received from any source have additional options; see the description of the ^W command in the section below. Similarly, teleport and level teleport are always controlled and have some restrictions removed; see ^T and ^V below. Monster creation with wand, spell, or scroll of create monster allows you to specify what you get; see ^G below. (You can abdicate the responsibility of specifying, and get random monsters as usual, by hitting escape; useful if you get a horde result and don't care.) Enlightenment shows a little extra information; see ^X below. Special and augmented commands ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Debug mode gives access to several additional commands, and extends the function of a few ordinary ones. ^E detect secret doors and traps Equivalent to zapping a wand of secret door detection or casting a spell of detect unseen: secret doors and corridors, non-statue traps, mimics, and hidden and invisible monsters in an area of radius 8 are revealed. ^F do magic mapping Equivalent to an uncursed scroll or spell of magic mapping, and also maps all traps on the level; unlike a blessed scroll, doesn't reveal secret doors. ^G create monster You can specify to create any of a class of monster by symbol, or a particular monster. You can ask for a particular monster to be "tame", "peaceful", or "hostile" (feel free to have a tame Wizard of Yendor). "]" asks for a level-appropriate random monster. ^I identify items in pack Equivalent to a full-identify from a scroll or spell of identify. ^O tell locations of special levels List where each special level and branch level is (with the Castle pass-tune thrown in for free); Fort Ludios will be listed as a "floating branch" if its portal has not yet been generated. If you are on the Vibrating Square level or one of the first four Elemental Planes, you'll also be told the co-ordinates of the Square or portal. ^T do intra-level teleport Removes some restrictions on teleport; always controlled, and you can teleport on no-teleport levels. The Amulet or the Wizard's Tower still have a residual 1/3 chance of preventing teleport, and any restrictions on teleporting between individual regions of a level will still be in effect. ^V do trans-level teleport Removes the usual restrictions on level teleport; always controlled, and you can teleport while carrying the Amulet, in the Endgame, or in Sokoban, and to the Sanctum before performing the invocation ritual. You still can't teleport below the Valley of the Dead from the Dungeons of Doom, however. You can specify any special level or branch level by its name, whether you've visited there yet or not. ? will bring up a menu similar to the ^O command, which allows you access to any part of the game, regardless of whether that branch would usually be accessible (except returning from the Endgame to the earlier game, or to Fort Ludios before its portal has been created); if you use it to reach the Endgame, you will be issued with an Amulet and taken to the Plane of Earth. ^W make wish You can wish for any object in the game and get it, including the invocation items and the Amulet of Yendor; your Quest Artifact (and other artifacts, with no chance of failure); magic lamps; usable wands of wishing; and venom. You can specify any valid attribute on an object, and get it (regardless of Luck or other factors), even ones you can't usually wish for (charges, enchantments and quantities in excess of their usual limits, and "trapped" chests). You can also wish for traps by name, and some dungeon features: fountains ("magic" can be specified), thrones, sinks, pools, lava, altars (of a particular alignment, or random if you don't specify), graves, trees, and iron bars. ^X show attributes including intrinsic attributes In addition to the usual ^X character and god description, you will be enlightened. As well as the usual enlightenment information, you will be shown the exact values of your alignment, luck, god anger, and prayer timeout; whether your steed has wounded legs; and how much longer you are due to remain polymorphed or engulfed. #conduct list which challenges you have adhered to In addition to the usual information provided, lists the exact number of times some conducts have been broken: weaponless, illiterate, polypileless, polyselfless. #enhance advance or check weapons and spell skills You can choose to #enhance skills whether you've practised sufficiently or have free slots or not (though you're still limited to the usual role maxima). You'll also be told how many free skill slots you have available, how far you've practised each, and how many practices are required to advance normally. #levelchange change experience level Equivalent to quaffing the appropriate number of uncursed gain level potions; though you can also reduce your experience level if you need to. #monpoly_control control monster polymorphs Toggles control of monster polymorph on and off; when on, you will be prompted to specify what form a monster should assume whenever one shapeshifts or is polymorphed. #poly polymorph self Equivalent to quaffing a potion of polymorph (but ignores unchanging); always controlled, but has the same chance as normal controlled polymorph of resulting in "You feel like a new !". #lightsources show mobile light sources #seenv show seen vectors #stats show memory statistics #timeout look at timeout queue #vision show vision array #wmode show wall modes These show fairly technical information that you're unlikely to need unless you're doing deep-level debugging; of them, #timeout is the most likely to be useful to the average experimenter (handy to monitor when a corpse is due to rot or revive, for example). Additional options ~~~~~~~~~~~~~~~~~~ menu_tab_sep Use tabstops rather than assuming monospacing in some menus. (This will likely only work under some interfaces, and may be rather broken in those; it's not a generally-available option for a reason.) sanity_check Run checks on the object chains and timers after each turn to verify all is as it should be; if something's misplaced or untimed, a complaint will be generated. Environment variables ~~~~~~~~~~~~~~~~~~~~~ NetHack pays attention to a few special environment variables when in debug mode (these will need to be set from the command line before the game session, with 'set VARIABLE=value', 'export VARIABLE=value', or whatever syntax your platform uses to set environment variables). SHOPTYPE: This should be a single character from the list below. Each normal room-and-corridor Dungeons level created will contain a special room of the indicated type (even if one couldn't normally be created there). g or G general store [ armour shop ? scroll shop ! potion shop ) weapon shop % food shop = jewellery shop / wand shop ( tool shop + book shop z or Z zoo m or M graveyard (m)orgue) b or B beehives t, T or \ thronerooms (\ may need to be escaped as \\) s or S barracks (s)oldiers) a or A anthole c or C cockatrice nest l or L leprechaun hall _ temple } swamp Any other character will give a random shop (only) type, in the usual proportions. SPLEVTYPE: This can be set to a level designation (or a comma-separated list of level designations) to force that particular version of a special level with multiple variants to be generated. The levels that this applies to are: bigrm-1 to bigrm-5 medusa-1 or medusa-2 minetn-1 to minetn-7 minend-1 to minend-3 soko1-1 or soko1-2 to soko4-1 or soko4-2 For example, setting SPLEVTYPE to "minetn-4,bigrm-5" guarantees your getting College Town and the oval Big Room. WIZKIT: This variable specifies a filename to be read at game start. The file this points to should contain a list of objects specified according to the usual wishing syntax, one per line; you will start the game with these objects in your inventory (essentially, you're preloading ^W commands). Acknowledgements ~~~~~~~~~~~~~~~~ Corrections and clarifications provided by Pat Rankin.