Disclaimer: I’m rambling, and this is all just opinion and speculation, not legal fact (except where it happens to actually be true).
What is the future of Nethack? Way back in 1997 I had wanted to make a C++ version of Nethack. As time went by though, my game became further and further away from what Nethack was. At the same time, Nethack itself changed. Version 3.6 brought many structural changes to the game which in my opinion changed the UX (user experience) of the game away, slightly, from the “old ways” of Rogue, Hack, and Nethack 3.x. 3.3 and 3.4.x were some of the finest games of Nethack I had ever played, and to a very large degree gave me hope and inspiration that one day, I could make my own similar game.
Those dreams are mostly gone, in that Nethack itself has changed, and time has changed me, and my game. Netwhack is written in Java, and will ultimately divorce itself from the trends Nethack has followed and attach itself more to the old playstyle of the earlier games.
So here’s the basic gameplan going forward. Rogue was released in the public domain. Therefore, everything in Rogue will be added to Netwhack, subject to revision of course.
Hack is the next step in development. Hack was originally a Rogue clone, then later improved. Hack was released under the BSD three clause license in the early 80s. Since I am not using the source code at all, I do not need to include the BSD license as there is no modified code at all in my release. In return, I am barred from using the name Hack to endorse my program. I.E. I can call it a roguelike, but I can’t call it a Hacklike or say it’s based on hack in promo material.
“Mike Stephenson merged these various versions back together, incorporating many of the added features, and produced NetHack version 1.4. He then coordinated a cast of thousands in enhancing and debugging NetHack 1.4 and released NetHack versions 2.2 and 2.3.
Later, Mike coordinated a major rewrite of the game, heading a team which included Ken Arromdee, Jean-Christophe Collet, Steve Creps, Eric Hendrickson, Izchak Miller, Eric S. Raymond, John Rupley, Mike Threepoint, and Janet Walz, to produce NetHack 3.0c. The same group subsequently released ten patch-level revisions and updates of 3.0. “
By “various versions” the Nethack Guidebook is referring to various versions of Hack. Including then the original rogue, the roadmap to Nethack 2.2 and 2.3 is apparently to merge various public domain and BSD-licensed software into a single game. This would necessitate ideas being taken moreso than code, since most of the code was de facto the hack 1.0.3. codebase.
It would then seem that the Nethack GPL does not really protect code prior to Nethack 3.0, since prior to Nethack 3.0 — assuming the rewrite was sufficient to remove the BSD license — all of Nethack was simply BSD and public domain code squished together.
If you took two Beethoven symphonies and squished them together, could you copyright it? No.
This lets us use very early versions of Nethack, and other PD and BSD-licensed sources to create a sort of ‘roadmap’ for Netwhack. This will essentially be represented by Michael Toy’s paper on rogue, followed by the changelog for Hack and Nethack up to Nethack 2.3 — minus any truly original content, such as exactly reproducing a special level.
Let’s take a wild stab here and include all of that information right now. We can revise this later, but this will be the general idea.
1. Michael Toy’s paper on Rogue
From Jay Fenlason’s PD Hack to Andries Brouwer’s BSD-licensed Hack 1.0:
- The concept of a role was introduced in Hack 1.0, and is not present in the other versions. Hack121 begins with a screen from which the player may buy equipment, this is mentioned by Robert Grover as a feature of Fenlason’s original version. Brouwer presumably removed this screen fairly early on: PDP-11 Hack, being derived from an early draft of Andries Brouwer’s Hack, starts the player off as a generic fighter character.
- The exact goal of the adventurer is uncertain. The Amulet of Yendor is not mentioned.
- Hack121 does not have pets. PDP-11 Hack starts the player off with a little dog, suggesting that pets were a relatively early addition by Brouwer.
- It seems likely that shops were the only special room type in Fenlason’s original code.
- Hack121 has shops. No other special room types are presently known to exist in hack121.
- PDP-11 Hack has shops (mkshop), zoos (mkzoo), graveyards (mkyard), swamps (mkswamp) and vaults (mk_knox). The developers of PDP-11 Hack, per their readme, implemented vaults, swamps, zoos and graveyards themselves, leaving shops as the only roomtype which was present in the sources they originally obtained. Vaults, in particular, are implemented very differently to Hack 1.0.
- Hack 1.0 has vaults (not delegated), shops (mkshop) and zoos (mkzoo).
Hack Main monster list
These are given in the order of their appearance in the code; it will be seen that the lists are quite similar.
|Hack121||PDP-11 Hack||Hack 1.0|
|bat (b)||bat (B)||bat (B)|
|lizard (l)||gnome (G)||gnome (G)|
|goblin (g)||hobgoblin (H)||hobgoblin (H)|
|jackal (j)||jackal (J)||jackal (J)|
|kobold (k)||kobold (K)||kobold (K)|
|pickpocket (p)||leprechaun (L)||leprechaun (L)|
|giant rat (r)||giant rat (r)||giant rat (r)|
|acid blob (a)||acid blob (a)||acid blob (a)|
|evil eye (e)||floating eye (E)||floating eye (E)|
|hurkle (h)||homunculus (h)||homunculus (h)|
|neevil (n)||imp (i)||imp (i)|
|orc (o)||orc (O)||orc (O)|
|yellow light (y)||yellow light (y)||yellow light (y)|
|zombie (z)||zombie (Z)||zombie (Z)|
|giant ant (A)||giant ant (A)||giant ant (A)|
|fog cloud (f)||fog cloud (f)||fog cloud (f)|
|robber (R)||nymph (N)||nymph (N)|
|stalactoid (s)||piercer (p)||piercer (p)|
|queevolt (q)||quasit (Q)||quasit (Q)|
|quivering blob (Q)||quivering blob (q)||quivering blob (q)|
|grabber (G)||violet fungi (v)||violet fungi (v)|
|nepto (N)||giant beetle (b)||giant beetle (b)|
|centaur (c)||centaur (C)||centaur (C)|
|cockatrice (C)||cockatrice (c)||cockatrice (c)|
|ghost (‘)||gelatinous cube (g)||gelatinous cube (g)|
|jaguar (J)||jaguar (j)||jaguar (j)|
|killer bee (K)||killer bee (k)||killer bee (k)|
|viper (v)||snake (S)||snake (S)|
|ice ball (i)||freezing sphere (F)||freezing sphere (F)|
|giant bear (B)||owlbear (o)||owlbear (o)|
|oxidizer (O)||rust monster (R)||rust monster (R)|
|unox (u)||giant scorpion (s)||scorpion (s)|
|teleporter (t)||teleporter (t)||tengu (t)|
|wraith (w)||wraith (W)||wraith (W)|
|snowman (S)||long worm (w)||long worm or wumpus (w)|
|octopus (0)||large dog (d)||large dog (d)|
|xyloman (x)||leocrotta (l)||leocrotta (l)|
|faker (F)||mimic (M)||mimic (M)|
|minotaur (m)||minotaur (m)||found at end of table|
|troll (T)||troll (T)||troll (T)|
|ugod (U)||ugod (u)||unicorn (u)|
|xerp (X)||yeti (Y)||yeti (Y)|
|phase shifter (P)||invisible stalker (I)||stalker (I)|
|hydra (H)||umber hulk (U)||umber hulk (U)|
|vampire (V)||vampire (V)||vampire (V)|
|wumpus (W)||xorn (X)||xorn (X)|
|rock lobster (L)||xerp (x)||xan (x)|
|zelomp (Z)||zruty (z)|
|chameleon (:)||chameleon (:)||chameleon (:)|
|dragon (D)||dragon (D)||dragon (D)|
|energar (E)||ettin (e)||ettin (e)|
|floor fiend (;)||lurker above (‘)||lurker above (~)|
|landshark (&)||neo-otyugh (n)||nurse (n)|
|argus (})||trapper (,)||trapper (,)|
|mega-worm (M)||purple worm (P)||purple worm (P)|
|demon (d)||demon (&)||demon (&)|
in the same row. The large dog appears both here and in the above table because the structure in the above table is used for wild dogs, and the one shown below is used for pets. In Hack 1.0, the shopkeeper is moved to the main monster list.
|Hack121||PDP-11 Hack||Hack 1.0|
|vampire bat (b)|
|shopkeep (☺)||shopkeeper (@)||in main monster table|
|guard (☺)||treasurer (@)||guard (@)|
|little dog (d)||little dog (d)|
|dog (d)||dog (d)|
|large dog (d)||large dog (d)|
|giant eel (;)|
Hack121 takes a different approach to armor than the other two Hacks. The only actual armors are suits. A shield is implemented but is a distinct type of object, in a class by itself. However, note that a shield is put on using the same command used to put on armor and affects your armor class rating in the same way that other armor does. PDP-11 Hack implements only suits and an elven cloak. Hack 1.0 adds a helmet, a shield, and a pair of gloves, allowing five pieces of armor to be worn at the same time.
The list of hack121 suits is reordered here to match the PDP-11 and Hack 1.0 orders.
|plate mail||plate mail||plate mail|
|splint mail||splint mail||splint mail|
|banded mail||banded mail|
|chain mail||chain mail||chain mail|
|scale mail||scale mail||scale mail|
|ring mail||ring mail||ring mail|
|studded leather armor||studded leather armor|
|leather armor||leather armor||leather armor|
|elven cloak||elven cloak|
|elfin chain mail|
|pair of gloves|
The available food items are as follows:
|food ration||food ration||food ration|
|tripe ration||tripe ration||tripe ration|
|dead lizard||dead lizard||dead lizard|
|spinach||candy bar||candy bar|
|clove of garlic|
As Hack121 does not appear to have pets, it is unclear why the first five items are all meat.
The dead lizard has no special properties in PDP-11 Hack. Its function in hack121 is just as an item of food. It has no other special functions. In Hack 1.0, it can relieve confusion, but has no effect on cockatrices: stoning by cockatrice hissing is an instadeath in all three of these versions of Hack. Both spinach and steak may randomly increase strength in hack121.
Hack121 and PDP-11 Hack offer the same set of weapons. Hack 1.0 adds a few to these:
|sling bullet||sling bullet||sling bullet|
|crossbow bolt||crossbow bolt||crossbow bolt|
|long sword||long sword||long sword|
|two handed sword||two handed sword||two handed sword|
Several potions in Hack121 have disappeared in later versions. Hack 1.0 adds one potion over PDP-11.
|restore strength||restore strength||restore strength||restore strength|
|extra hit points|
|fruit juice||fruit juice||fruit juice||fruit juice|
|monster detection||monster detection||monster detection|
|object detection||object detection||object detection||object detection|
|gain strength||gain strength||gain strength|
|gain level||gain level||gain level||gain level|
|extra healing||extra healing||extra healing||extra healing|
‡ PDP-11 Hack replaced the scroll of confuse monster with a scroll of losing. The porters to PC/IX reinstated the former as a potion.
Available scrolls are as follows. The Hack121 list is ordered in an attempt to match the other two.
|enchant armor||enchant armor||enchant armor|
|(different location)||(different location)||destroy armor|
|confuse monster||losing||confuse monster|
|scare monsters||curse levels||scare monster|
|remove curse||remove curse||remove curse|
|enchant weapon||enchant weapon||enchant weapon|
|create monster||create monster||damage weapon|
|damage weapon||damage weapon||create monster|
|rust armor||destroy armor||(different location)|
|gold detection||gold detection||gold detection|
|magic mapping||magic mapping||magic mapping|
For PDP-11 Hack:
- The “scroll of losing” takes away the hero’s entire inventory and scatters it about the level. It is noted in source code comments as replacing the scroll of confuse monster.
- The “scroll of curse levels” appears to curse the hero himself, causing shopkeepers to be angry and all picked-up items to become cursed. The scroll of remove curse will rescind this effect, and in these versions it is not itself affected by curses.
- The scroll of transportation, as well as teleporting, functions as an elevator. The code carries the notice “Extended by Michiel and Fred: One can jump between levels”.
Available wands are as follows. The Hack121 list is reordered in an attempt to match the other two:
|trap detection||secret door + trap detection||secret door detection|
|create monster||create monster||create monster|
|slow monster||slow monster||slow monster|
|speed monster||speed monster||speed monster|
|undead turning||undead turning|
|teleport monster||teleport monster||teleport monster|
|magic missile||magic missile||magic missile|
In Hack121, the wand of wonder is a random wand of another type which changes each time you zap it. In D&D, a wand of wonder works as a random wand of another type.
Note: In iLarn (and in ULarn), a wand of wonder prevents the player from falling down holes when in the main inventory. It could serve the same purpose here, as this would not be very apparent to most players.
Available rings are as follows. For hack121, the order has been changed to match the other two versions.
|see invisible||see invisible||see invisible|
|poison resistance||poison resistance||poison resistance|
|aggravate monster||aggravate monster||aggravate monster|
|fire and cold resistance||fire resistance||fire resistance|
|cold resistance||cold resistance|
|protection from magic||protection from shape-changers||protection from shape changers|
|gain strength||gain strength||gain strength|
|increase damage||increase damage||increase damage|
|increase hit points|
It is uncertain if the hack121 ring of protection from magic has any connection to the ring of protection from shape changers in the other versions.
Hack121 appears to have gems, but their function is uncertain. In PDP-11 Hack, they only add to the player’s score; neither of these Hacks has unicorns. Hack 1.0 has gems in their modern form.
The remaining objects in each game seem to have no connection to each other. Hack121 has these objects:
- the sphere of power
- tinder box
- flask of oil
- shield (which is not a type of armor in this game)
PDP-11 Hack has only the “amulet of Frobozz”, which may be the forerunner of the Amulet of Yendor.
Hack 1.0 has these objects:
- magic whistle
- expensive camera
- ice box
- heavy iron ball
- iron chain
- enormous rock
- the amulet of Yendor
Hack 1.0 Inventory
The following monsters may be encountered:
|cockatrice||c||Stoning by hissing is an instadeath|
|dragon||D||As the modern red dragon|
|long worm||w||if NOWORM not defined at compile time|
|rust monster||R||Reduces enchantment rather than truly rusting|
|wumpus||w||if NOWORM defined at compile time|
Only the Amulet of Yendor and the cheap plastic imitation exist in Hack 1.0.
Food items in Hack 1.0 are:
- food ration
- tripe ration
- dead lizard
- fortune cookie
- candy bar
- clove of garlic
- corpse (called dead foo rather than foo corpse)
The tin did not contain the remains of monsters, but rather a randomly-chosen food such as peaches or, if the adventurer is lucky, spinach.
Weapons in Hack 1.0 are:
- sling bullet
- crossbow bolt
- long sword
- two handed sword
- worm tooth
Tools in Hack 1.0 are:
The ice box is the only container. Then as now, it preserved corpses, and was generally too heavy (and too rare) to be useful for inventory management.
Armor items in Hack 1.0 are:
- plate mail
- splint mail
- banded mail
- chain mail
- scale mail
- ring mail
- studded leather armor
- leather armor
- elven cloak
- pair of gloves
Potions in Hack 1.0 are:
- potion of restore strength
- potion of booze
- potion of invisibility
- potion of fruit juice
- potion of healing
- potion of paralysis
- potion of monster detection
- potion of object detection
- potion of sickness
- potion of confusion
- potion of gain strength
- potion of speed
- potion of blindness
- potion of gain level
- potion of extra healing
- potion of levitation
Scrolls in Hack 1.0 are:
- scroll of enchant armor
- scroll of destroy armor
- scroll of confuse monster
- scroll of scare monster
- scroll of blank paper
- scroll of remove curse
- scroll of enchant weapon
- scroll of damage weapon
- scroll of create monster
- scroll of taming
- scroll of genocide
- scroll of light
- scroll of teleportation
- scroll of gold detection
- scroll of food detection
- scroll of identify
- scroll of magic mapping
- scroll of amnesia
- scroll of fire
- scroll of punishment
The scroll of damage weapon acts as the modern scroll of enchant weapon does when cursed. The scroll of genocide acts, in all cases, as the modern blessed scroll; but most symbols refer to only one monster anyway.
Wands in Hack 1.0 are:
- wand of light
- wand of secret door detection
- wand of create monster
- wand of wishing
- wand of striking
- wand of slow monster
- wand of speed monster
- wand of undead turning
- wand of polymorph
- wand of cancellation
- wand of teleport monster
- wand of make invisible
- wand of digging
- wand of magic missile
- wand of fire
- wand of sleep
- wand of cold
- wand of death
Rings in Hack 1.0 are:
- ring of adornment
- ring of teleportation
- ring of regeneration
- ring of searching
- ring of see invisible
- ring of stealth
- ring of levitation
- ring of poison resistance
- ring of aggravate monster
- ring of hunger
- ring of fire resistance
- ring of cold resistance
- ring of protection from shape changers
- ring of conflict
- ring of gain strength
- ring of increase damage
- ring of protection
- ring of warning
- ring of teleport control
Because charisma does not exist in Hack 1.0, the ring of adornment is a useless item.
Gems in Hack 1.0 are:
- turquoise stone
- aquamarine stone
- tourmaline stone
- topaz stone
- opal stone
- garnet stone
- amethyst stone
- agate stone
- onyx stone
- jasper stone
- jade stone
and worthless pieces of blue, red, yellow, and green glass.
Other items not appearing in the above categories are:
It is not possible to pick up an iron chain, nor can they be generated from iron golems, because these do not exist in Hack 1.0.