NitroHack's engine, UnNetHack's dungeon · less tedium, more variety
> Enter the dungeonlibnitrohack/src/*.c/include/*.h filesDynaHack sits on NitroHack, Daniel Thaler's 2011 rewrite of NetHack 3.4.3 into a game library (libnitrohack) plus a separate curses client, with a new save format, key remapping and in-game options. Tung Nguyen started in March 2012 by porting UnNetHack (Patric Müller's NetHack 3.4.3 variant) onto NitroHack 4.0.4; the working name was “UnNitroHack”, never released under that name. By 0.5.0 it had its own name and had picked up changes from NetHack4, GruntHack (magical equipment), UnNetHackPlus (monster descriptions) and K-Mod, plus its own.
NetHack4 is a sibling, not a parent: it also grew out of NitroHack, and DynaHack ported selected changes from it. Sources: doc/changelog.txt (0.5.0 entry), doc/unnitrohack.txt, doc/nitrohack.txt and the git history. See the family tree, under NitroHack.
| Tung Nguyen (tungtn) | Created and maintained DynaHack, 2012–2016 (1,268 commits) |
| Daniel Thaler | NitroHack: library/client split, log-based saves, the curses interface (748 commits in the shared history) |
| Patric Müller and the UnNetHack contributors | UnNetHack 4.1.1, the source of most new levels, branches, items and monsters |
| Alex Smith, Sean Hunt | NetHack4, source of ported interface and reliability changes ([NH4] in the changelog) |
| GruntHack, UnNetHackPlus, K-Mod authors | Random magical equipment, monster spoiler info and other ported changes ([Gr], [UnP], [KMd]) |
| The NetHack DevTeam | NetHack 3.4.3, the code underneath |
| This port | Browser client and build, tiles from the NetHack 3.4.3 set (memmaker/dynahack) |
cmd.c.mines.des), so no stash trips.ITEM_* in obj.h). The starting kit itself follows NetHack's role lists.libnitrohack/src and libnitrohack/include at upstream commit 25aaf2a; built with CMake.doc/build-*.md); a dgamelaunch guide for servers.include/nitrohack.h): the client passes in a struct nh_window_procs (display callbacks) and drives the game with nh_command(). Commands and item actions come from the library (nh_get_commands(), nh_get_object_commands()), so a client needs no command table of its own..nhgame file holds the random seed and every command, written as you play, plus a binary snapshot. A crashed game is restored by replaying the log (logreplay.c); finished games stay viewable as replays.monst.c, objects in objects.c, artifacts in artilist.h, roles and races in role.c; levels in dat/*.des (lev_comp) and the layout in dat/dungeon.def (dgn_comp).web/webwin.c (~1,300 lines) replaces the curses client; the library is almost untouched (auto-explore stops on new messages and avoids boulders, </> walk to stairs). The data tools run as wasm under node because wasm32's 4-byte long changes the file headers. The log save lives in IndexedDB, so a closed tab is replayed to the same turn.Counted in the source at 25aaf2a (objects: named entries per class from the object table, 538 slots in all).
| Thing | Count | Notable ones |
|---|---|---|
| Roles | 14 | NetHack's 13 plus the Convict, who starts in a striped shirt with a rock, nearly hungry and hated by their own race; the quest leader is Robert the Lifer, against Warden Arianna. |
| Races | 6 | Human, elf, dwarf, gnome, orc and vampire. |
| Monsters | 403 | Eleven dragon kinds with shuffled names (tatzelworm, draken, guivre…), the gold dragon, the vorpal jabberwock, the rodent of unusual size, the disintegrator, the wax golem, the black marketeer, Cthulhu, and Death, Pestilence and Famine. |
| Artifacts | 36 | Thiefbane and the Luck Blade (from UnNetHack), Stormbringer, Vorpal Blade, the Iron Ball of Liberation (the Convict's quest artifact). |
| Spells | 40 | Create familiar, stone to flesh, jumping. |
| Weapons / Armour | 71 / 85 | Chromatic and magic dragon scale mail, crystal and bronze plate mail, the striped shirt, the tinfoil hat. |
| Rings / Amulets | 31 / 11 | Rings of gain intelligence, wisdom and dexterity. |
| Tools | 51 | Iron safe, ice box, oilskin sack; land mine and beartrap as items. (The magic chest is a map feature, not an item.) |
| Potions / Scrolls / Wands | 28 / 22 / 24 | Potions of blood and vampire blood; the scroll of flood replaces amnesia. |
| Food / Gems | 29 / 36 | |
| Traps | 24 | Shuriken trap; the vibrating square counts as one. |
| Dungeon | 12 dungeons | Dungeons of Doom and Gehennom 25–29 levels each, Gnomish Mines 8–9 (8 Minetown variants), the Quest 5–6, Sokoban 3, Town 3 (with the nymph level), the Dragon Caves 4 (75% chance), Vlad's Tower 4, Elemental Planes 6, Fort Ludios, One-eyed Sam's Market and the Advent Calendar 1 each; 184 level maps in dat/*.des. |
DynaHack ships NetHack's own Guidebook (NetHack 3.4.3 edition, text, converted from doc/Guidebook.tex), never updated for DynaHack. What DynaHack changes is in its changelog (0.5.0 to 0.6.0). Both under the NetHack General Public License. The in-game ?? command reference and the port's help page cover the keys.
There is no walkthrough for DynaHack. NetHackWiki's DynaHack page lists its differences, and the vanilla Standard strategy mostly applies. Rules of thumb from the README:
nh_start_game(…, MODE_WIZARD)), picked in the curses client. Our browser client always starts MODE_NORMAL, so none of them is reachable here, and there is no in-game #explore.