Difference between revisions of "Jay Fenlason's Hack"

From NetHackWiki
Jump to navigation Jump to search
(Background)
m (pothole)
 
(37 intermediate revisions by 7 users not shown)
Line 1: Line 1:
{{Wikipedia|Hack (computer game)}}
+
{{Wikipedia|Hack (Unix video game)}}
 
 
 
{{NetHack Versions}}
 
{{NetHack Versions}}
  
'''Hack''' is a roguelike role-playing game written by [[Jay Fenlason]], with contributions from Kenny Woodland, Mike Thome and Jon Payne, from which all subsequent versions of [[Hack]] and all versions of [[NetHack]] are descended.  '''Jay Fenlason's Hack''' is the term given to the original Hack, without the extensive modifications by [[Andries Brouwer]] which are present in the more widely distributed version.
+
'''HACK''' is a roguelike role-playing game written by [[Jay Fenlason]], with contributions from Kenny Woodland, Mike Thome, and Jon Payne, from which all subsequent versions of [[Hack]] and all versions of [[NetHack]] are descended.  '''Jay Fenlason's Hack''' is the term given to the original Hack, without the extensive modifications by [[Andries Brouwer]] which are present in the more widely distributed version.
  
At present, source code for the original is not available online.  A DOS port with user interface changes is available in binary form, all of Brouwer's versions are available as source code, and the source code for an early variant dubbed "PDP-11 Hack", which was based on a leaked early draft of Andries Brouwer's version, is also available.
+
At present, source code for the original is not available online.  A DOS port with user interface changes is available in binary form, all of Brouwer's versions are available as source code, and the source code for an early variant dubbed "Hack for PDP-11", which was based on a leaked early draft of Andries Brouwer's version, is also available.
  
== Background ==
+
==Background==
 +
Development began shortly after the 1982 USENIX conference in Boston, MA where Michael Toy and Ken Arnold (the authors of the then closed-source [[Rogue (game)|Rogue]]) spoke.  In Fenlason's own words:
  
Development began shortly after the 1982 USENIX conference in Boston, MA where the Michael Toy and Ken Arnold (the authors of the then closed-source [[Rogue (game)|Rogue]]) spoke. In Fenlason's own words:
+
:"I was curious about some of the game play issues involved in designing it, things like how the rooms and corridors were generated, so I started hacking up some random level generators and stuff to try things out. Someone looked over my shoulder and said, 'what's that?' So I sort of explained and they said, 'oh, that's cool; when do we get to play it?'"<ref name=linux>"[https://www.linux.com/news/train-life-nethacks-papa/ On The Train Of Life With Nethack’s Papa]" (2000), Julie Bresnick, Linux.com.</ref><ref name=newsforge>"[http://web.archive.org/web/20030512112023/http://newsforge.com/article.pl?sid=00/12/03/2052246&mode=thread&tid=9 On the train of life with Nethack's papa]" (2000) [2003], Julie Bresnick, Newsforge.com by Internet Archive.</ref>
  
:"I was curious about some of the game play issues involved in designing it, things like how the rooms and corridors were generated, so I started hacking up some random level generators and stuff to try things out. Someone looked over my shoulder and said, 'what's that?' So I sort of explained and they said, 'oh, that's cool; when do we get to play it?' " -- [http://archive09.linux.com/articles/5501?theme=print]
+
The only publication of the original Hack was on a USENIX software distribution tape, apparently the first 1984 USENIX tape (of which no online copy is known to exist), where it accompanied Jon Payne's text editor JOVE.  It proved to be very popular:
  
The only publication of the original Hack was on a USENIX software distribution tape, apparently the first 1984 USENIX tape (of which no online copy is known to exist). It proved to be very popular:
+
:"Usenix had biannual<sup>[sic: semiannual]</sup> meetings, Unix users would get together and swap war stories. For each meeting they'd put together a tape of some of the contributed software. I put [Hack] on the tape and forgot about it until someone I know mentioned that the two most popular pieces of software on that particular tape were my silly game and my friend Jonathon's text editor. Since then there's been several different versions of Hack written, and I think I'm the only person who still uses that text editor."<ref name=linux/><ref name=newsforge/>
  
:"Usenix had biannual meetings, Unix users would get together and swap war stories. For each meeting they'd put together a tape of some of the contributed software. I put [Hack] on the tape and forgot about it until someone I know mentioned that the two most popular pieces of software on that particular tape were my silly game and my friend Jonathon's text editor <nowiki>[</nowiki>[https://groups.google.com/forum/#!msg/net.unix-wizards/9bPrVuHYlo8/s5Wm4N2-6KQJ JOVE]<nowiki>]</nowiki>. Since then there's been several different versions of Hack written, and I think I'm the only person who still uses that text editor." -- [http://archive09.linux.com/articles/5501?theme=print]
+
Based on Fenlason's home in Massachusetts and the next release of the Usenet port, he likely introduced Hack at the 1984 winter USENIX at Washington, DC<ref>[https://dblp.org/db/conf/usenix/index USENIX Annual Technical Conference], dblp: computer science bibliography:
 +
:''USENIX Summer 1984: Salt Lake City, Utah, USA''
 +
:''USENIX Winter 1984: Washington, D.C., USA''
 +
:''USENIX Summer 1983: Toronto, Canada''
 +
:''USENIX Winter 1983: San Diego, CA, USA''</ref><ref>"[ftp://ftp.math.utah.edu/pub/tex/bib/usenix1980.pdf A Bibliography of Publications of the USENIX Association: 1980–1989]", Nelson H. F. Beebe, University of Utah, 2012: ''[USE84c] USENIX Association, editor. USENIX UniForum Conference Proceedings, January 17–20, 1984. Washington DC, USA. USENIX, Berkeley, CA, USA, January 17–20, 1984. ISBN none. LCCN QA76.8.U65 U55 1984.''</ref>
  
== Variants ==
+
==Variants==
 +
The exact content of the original Hack is not known for sure (but see the comments section of [http://gonnagan.wordpress.com/2011/04/23/hack-update/#comments this post] for a possible lead).  Three derivatives are known to exist.  The rest of this article covers mainly Hack for PDP-11 and "hack121".
  
The exact content of the original Hack is not known for sure (but see the comments section of [http://gonnagan.wordpress.com/2011/04/23/hack-update/#comments this post] for a possible lead).  Three derivatives are known to exist.  The rest of this article covers mainly PDP-11 Hack and "hack121".
+
===Hack 1.21 (hack121)===
 
+
A 16-color CGA-mode DOS port of Jay Fenlason's Hack is available in binary form at [http://www.juiblex.co.uk/nethack/front.html Ali Harlow's website] as [http://www.juiblex.co.uk/nethack/source/hack121.zip hack121.zip] ([http://roguelikedevelopment.org/archive/files/executables/hack121.zip mirror]).  It is known as "hack121", after the filename of its distribution package.
=== "Hack121" (Hack 1.21 for DOS) ===
 
 
 
A DOS port of Jay Fenlason's Hack is available in binary form at [http://www.juiblex.co.uk/nethack/front.html Ali Harlow's website] as [http://www.juiblex.co.uk/nethack/source/hack121.zip hack121.zip] ([http://roguelikedevelopment.org/archive/files/executables/hack121.zip mirror]).  It is known as "hack121", after the filename of its distribution package.
 
  
 
It refers to itself as version "1.21 (Slak was here!)", "Slak" apparently being [https://groups.google.com/forum/#!msg/net.wanted.sources/eihTycnxH1w/wwNdkdvDSZkJ Jay Fenlason himself]; nonetheless, some changes have clearly been made by the porter ([[IBMgraphics]] and the fusion of mklev into hack).
 
It refers to itself as version "1.21 (Slak was here!)", "Slak" apparently being [https://groups.google.com/forum/#!msg/net.wanted.sources/eihTycnxH1w/wwNdkdvDSZkJ Jay Fenlason himself]; nonetheless, some changes have clearly been made by the porter ([[IBMgraphics]] and the fusion of mklev into hack).
  
See [http://groups.google.com/group/net.sources/browse_thread/thread/29f22ed9eb5331ec# this newsgroup posting] for a possible lead as to who ported it.   
+
See [http://groups.google.com/forum/#!topic/net.sources/KfIu2etTMew this newsgroup posting] for a possible lead as to who ported it.   
  
 
No source code for this program is known to exist, and it is not known for sure if the porter made any modifications which affect gameplay.  Nonetheless, it is probably the closest to the original that is known to be extant.
 
No source code for this program is known to exist, and it is not known for sure if the porter made any modifications which affect gameplay.  Nonetheless, it is probably the closest to the original that is known to be extant.
  
=== PDP-11 Hack and PC/IX Hack ===
+
<gallery>
 +
Image:Hack121 buy.png|This is the shop at the start of hack121. (Click thumbnail to view image.)
 +
Image:Dos hack bad scores.png|Hack121 can be a difficult game.
 +
</gallery>
 +
 
 +
===Hack for PDP-11 and PC/IX Hack===
 +
Hack for PDP-11 is a variant developed by Michiel Huisjes and Fred de Wilde at the Free University (VU) in Amsterdam† ([https://web.archive.org/web/20141029023253/virtuallyfun.superglobalmegacorp.com/?p=4693 apparently] based upon a early draft of Andries Brouwer's Hack, which was copied from his user area without his permission) and published on [[Usenet]] in February 1985. A port of this to a Unix clone called PC/IX (with a slightly different set of potions) was published in May by "peterb at pbear".
  
PDP-11 Hack (so-called, although it appears to require a nonstandard compiler, whereas it can be compiled on some later UNIX systems such as 4.2BSD without much work) is a variant developed by Michiel Huisjes and Fred de Wilde ([http://virtuallyfun.superglobalmegacorp.com/?p=4693 apparently] based upon a early draft of Andries Brouwer's Hack, which was copied from his user area without his permission) and published on [[Usenet]] in February 1985.  A port of this to a Unix clone called PC/IX (which replaces the "booze" potion with a potion of "confuse monster") was published in May by "peterb at pbear".
+
Despite its name, Hack for PDP-11 appears to require a nonstandard compiler, whereas it can be compiled on some later UNIX systems such as 4.2BSD without much work; it is possible that the compiler used was a contemporary version of the Amsterdam Compiler Kit, which dates from the early 1980s and which was developed at the VU.
  
The developers describe their changes, in the PDP-11 Hack readme, as:
+
The developers summarize their changes, in the Hack for PDP-11 readme, as:
  
* We removed the function fscanf(), and made the record file binary. To show the contents, use the program show (with flag -r). [...]
+
:"One of the main problems of Hack is its size. If you add about 1000 bytes of text more, your text segment will be to big. Therefore we saved text wherever this was possible. We removed the function fscanf(), and made the record file binary. To show the contents, use the program show (with flag -r).
* The Vault
+
:
* The Swamp
+
:"Some additions we (Fred de Wilde and Michiel Huisjes) made are
* The Zoo
+
::- The Vault
* The Graveyard
+
::- The Swamp
* Maxlevel = 40
+
::- The Zoo
* Proper Saving
+
::- The Graveyard
* Several bugs
+
::- Maxlevel = 40
* And many, many more...
+
::- Proper Saving
 +
::- Several bugs
 +
::- And many, many more..."
  
 
"Proper saving" references the fact that saving was apparently broken in the sources that they originally obtained (as they mention in comments in the corresponding code).
 
"Proper saving" references the fact that saving was apparently broken in the sources that they originally obtained (as they mention in comments in the corresponding code).
Line 51: Line 61:
 
PDP-11 Hack incorporates a time restriction preventing playing on working hours on weekdays, which grants exceptions for the developers' UIDs, and which is removed in the PC/IX version.   
 
PDP-11 Hack incorporates a time restriction preventing playing on working hours on weekdays, which grants exceptions for the developers' UIDs, and which is removed in the PC/IX version.   
  
The shar files of both versions are archived at Google Groups at:
+
The shar files of both versions are archived at Google Groups:
* PDP-11 Hack
+
*Hack for PDP-11 [https://groups.google.com/forum/message/raw?msg=net.sources/5uBrrldg_Q0/6x0XmngexDgJ Part 1], [https://groups.google.com/forum/message/raw?msg=net.sources/LieFm-Ll9_0/VnsKgJfljOwJ Part 2], [https://groups.google.com/forum/message/raw?msg=net.sources/r-dOSRjQpMU/Nlyr0PxMgBsJ Part 3], [https://groups.google.com/forum/message/raw?msg=net.sources/VAYLAAsSkLI/BqDjDPAWmrwJ Part 4], [https://groups.google.com/forum/message/raw?msg=net.sources/-IXg25AJoeY/LS8yFJ9WIA0J Part 5] ([https://altavista.superglobalmegacorp.com/usenet/news021f2/b37/net/sources/2493.txt Mirror 1], [https://altavista.superglobalmegacorp.com/usenet/news021f2/b37/net/sources/2484.txt 2], [https://altavista.superglobalmegacorp.com/usenet/news021f2/b37/net/sources/2485.txt 3], [https://altavista.superglobalmegacorp.com/usenet/news021f2/b37/net/sources/2483.txt 4], [https://altavista.superglobalmegacorp.com/usenet/news021f2/b37/net/sources/2486.txt 5]).
** [https://groups.google.com/forum/message/raw?msg=net.sources/5uBrrldg_Q0/6x0XmngexDgJ PDP-11 Part 1]
+
*PC/IX Hack [https://groups.google.com/forum/message/raw?msg=net.sources.games/DZojzOjXB58/D8oxg2kIGhMJ Part 1], [https://groups.google.com/forum/message/raw?msg=net.sources.games/wEiQQRKsmf8/kiKUF0OzCtYJ Part 2], [https://groups.google.com/forum/message/raw?msg=net.sources.games/DjFLmksGV0A/eQcVkX0r7c0J Part 3], [https://groups.google.com/forum/message/raw?msg=net.sources.games/igffaAj-Rx4/LKiMv3f52GEJ Part 4], [https://groups.google.com/forum/message/raw?msg=net.sources.games/HB4_-2PClaw/hGdwfbnukpsJ Part 5] ([https://altavista.superglobalmegacorp.com/usenet/news026f2/b46/net/sources/games/107.txt Mirror 1], [https://altavista.superglobalmegacorp.com/usenet/news026f2/b46/net/sources/games/110.txt 2], [https://altavista.superglobalmegacorp.com/usenet/news026f2/b46/net/sources/games/111.txt 3], [https://altavista.superglobalmegacorp.com/usenet/news026f2/b46/net/sources/games/108.txt 4], [https://altavista.superglobalmegacorp.com/usenet/news026f2/b46/net/sources/games/109.txt 5]).
** [https://groups.google.com/forum/message/raw?msg=net.sources/LieFm-Ll9_0/VnsKgJfljOwJ PDP-11 Part 2]
 
** [https://groups.google.com/forum/message/raw?msg=net.sources/r-dOSRjQpMU/Nlyr0PxMgBsJ PDP-11 Part 3]
 
** [https://groups.google.com/forum/message/raw?msg=net.sources/VAYLAAsSkLI/BqDjDPAWmrwJ PDP-11 Part 4]
 
** [https://groups.google.com/forum/message/raw?msg=net.sources/-IXg25AJoeY/LS8yFJ9WIA0J PDP-11 Part 5]
 
* PC/IX Hack
 
** [https://groups.google.com/forum/message/raw?msg=net.sources.games/DZojzOjXB58/D8oxg2kIGhMJ PC/IX Part 1]
 
** [https://groups.google.com/forum/message/raw?msg=net.sources.games/wEiQQRKsmf8/kiKUF0OzCtYJ PC/IX Part 2]
 
** [https://groups.google.com/forum/message/raw?msg=net.sources.games/DjFLmksGV0A/eQcVkX0r7c0J PC/IX Part 3]
 
** [https://groups.google.com/forum/message/raw?msg=net.sources.games/igffaAj-Rx4/LKiMv3f52GEJ PC/IX Part 4]
 
** [https://groups.google.com/forum/message/raw?msg=net.sources.games/HB4_-2PClaw/hGdwfbnukpsJ PC/IX Part 5]
 
 
 
=== Hack 1.0 ===
 
  
 +
===Hack 1.0===
 
[[Hack 1.0]] was developed by [[Andries Brouwer]] and posted to Usenet in December 1984.  All other versions of Hack and NetHack are descended from this version.
 
[[Hack 1.0]] was developed by [[Andries Brouwer]] and posted to Usenet in December 1984.  All other versions of Hack and NetHack are descended from this version.
  
== Primary differences from Andries Brouwer's Hack ==
+
==Main differences from Andries Brouwer's Hack==
 
+
*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 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.  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.
* The exact goal of the adventurer is uncertain.  The [[Amulet of Yendor]] is not mentioned.
+
*Hack121 does not have [[pet]]s.  PDP-11 Hack starts the player off with a little [[dog]], suggesting that pets were a relatively early addition by Brouwer.
* Hack121 does not have [[pet]]s.  PDP-11 Hack starts the player off with a little [[dog]], suggesting that pets were a relatively early addition by Brouwer.
 
 
 
== Special room types ==
 
  
 +
==Special room types==
 
It seems likely that [[shop]]s were the only special room type in Fenlason's original code.
 
It seems likely that [[shop]]s were the only special room type in Fenlason's original code.
  
Line 85: Line 82:
 
Hack 1.0 has vaults (not delegated), shops (mkshop) and zoos (mkzoo).
 
Hack 1.0 has vaults (not delegated), shops (mkshop) and zoos (mkzoo).
  
== Mazes ==
+
==Mazes==
 +
PDP-11 Hack appears to contain the original makemaz() implementation of Fenlason's team, given this source code comment which does not appear in the refactored version of the function in Hack 1.0, and appears to reference Kenny Woodland by his first name:
  
PDP-11 Hack appears to contain Fenlason's team's original makemaz() implementation, given this source code comment, which does not appear in Hack 1.0:
+
/* This is all Kenny's fault.  He seems to have his x and y reversed */
 
 
:/* This is all Kenny's fault.  He seems to have his x and y reversed */
 
 
 
Assuming, that is, that it is Kenny Woodland who is being referenced.
 
 
 
== Gallery ==
 
<gallery>
 
Image:Hack121 buy.png|This is the shop at the start of hack121. (Click thumbnail to view image.)
 
Image:Dos hack bad scores.png|Hack121 can be a difficult game.
 
</gallery>
 
 
 
== Bestiary ==
 
  
 +
==Bestiary==
 
The bestiaries of hack121 and PDP-11 Hack are listed below, along with the Hack 1.0 bestiary for comparison.  Other monster descriptions may be lurking in other parts of the hack121 binary; therefore, this list cannot be considered as necessarily the final word for that version.
 
The bestiaries of hack121 and PDP-11 Hack are listed below, along with the Hack 1.0 bestiary for comparison.  Other monster descriptions may be lurking in other parts of the hack121 binary; therefore, this list cannot be considered as necessarily the final word for that version.
  
=== Main monster list ===
+
===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.
 
These are given in the order of their appearance in the code; it will be seen that the lists are quite similar.
  
Line 156: Line 142:
 
|imp (i)
 
|imp (i)
 
|-
 
|-
|[[orc]] (o)
+
||[[Orc (monster)|orc]] (o)
 
|orc (O)
 
|orc (O)
 
|orc (O)
 
|orc (O)
Line 164: Line 150:
 
|yellow light (y)
 
|yellow light (y)
 
|-
 
|-
|[[zombie]] (z)
+
|[[Human zombie|zombie]] (z)
 
|zombie (Z)
 
|zombie (Z)
 
|zombie (Z)
 
|zombie (Z)
Line 200: Line 186:
 
|giant beetle (b)
 
|giant beetle (b)
 
|-
 
|-
|[[centaur]] (c)
+
|[[Centaur (monster)|centaur]] (c)
 
|centaur (C)
 
|centaur (C)
 
|centaur (C)
 
|centaur (C)
Line 332: Line 318:
 
|purple worm (P)
 
|purple worm (P)
 
|-
 
|-
|[[demon]] (d)
+
|[[Demon (monster)|demon]] (d)
 
|demon (&amp;)
 
|demon (&amp;)
 
|demon (&amp;)
 
|demon (&amp;)
Line 345: Line 331:
 
|}
 
|}
  
 
+
===Other monsters kept in separate structures===
=== Other monsters kept in separate structures ===
 
 
 
 
All versions of Hack and [[NetHack]] prior to [[NetHack 3.0.0]] have various monster description structures floating around in their source code, for monsters with special functions.  These are listed here, with monsters having the same function 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.
 
All versions of Hack and [[NetHack]] prior to [[NetHack 3.0.0]] have various monster description structures floating around in their source code, for monsters with special functions.  These are listed here, with monsters having the same function 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.
  
Line 392: Line 376:
 
The giant eel appears in essentially its modern form.  The current version of AEB Hack at the release of the PDP-11 Hack was [[Hack 1.0.1|1.0.1]], and this version did not have giant eels.  Giant eels do appear in [[Hack 1.0.2]], and the source code credits the publishers of PDP-11 Hack,  Michiel Huisjes and Fred de Wilde, for the inspiration.  That credit is still present in [[NetHack 3.4.3]]{{refsrc|mkroom.c|447}}.
 
The giant eel appears in essentially its modern form.  The current version of AEB Hack at the release of the PDP-11 Hack was [[Hack 1.0.1|1.0.1]], and this version did not have giant eels.  Giant eels do appear in [[Hack 1.0.2]], and the source code credits the publishers of PDP-11 Hack,  Michiel Huisjes and Fred de Wilde, for the inspiration.  That credit is still present in [[NetHack 3.4.3]]{{refsrc|mkroom.c|447}}.
  
== Available Objects ==
+
==Available Objects==
 
+
Hack121, PDP-11 Hack, and Hack 1.0 show many similarities in their object lists.  Except as noted, the object lists are presented in the order in which they occur in the code. PC/IX Hack is the same as PDP-11 Hack except as otherwise noted.
Hack121, PDP-11 Hack, and Hack 1.0 show many similarities in their object lists.  Except as noted, the object lists are presented in the order in which they occur in the code.
 
 
 
=== Armor ===
 
  
 +
===Armor===
 
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.
 
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.
  
Line 447: Line 429:
 
|elven cloak
 
|elven cloak
 
|-
 
|-
|[[mithril-coat|elfin chain mail]]
+
|[[elfin chain mail]]
 
|
 
|
 
|
 
|
 
|-
 
|-
 +
|''(not armor)''
 
|
 
|
|
+
|[[small shield|shield]]
|shield
 
 
|-
 
|-
 
|
 
|
Line 460: Line 442:
 
|}
 
|}
  
 
+
===Food===
=== Food ===
 
 
 
 
The available food items are as follows:
 
The available food items are as follows:
 
 
{|class="wikitable"
 
{|class="wikitable"
 
!Hack121  
 
!Hack121  
Line 537: Line 516:
 
As Hack121 does not appear to have pets, it is unclear why the first five items are all meat.
 
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.
+
The dead lizard has no special properties in Hack PDP-11.  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.
 
 
=== Weapons ===
 
  
Hack121 and PDP-11 Hack offer the same set of weapons.  Hack 1.0 adds a few to these:
+
===Weapons===
 +
Hack121 and Hack for PDP-11 offer the same set of weapons.  Hack 1.0 adds a few to these:
  
 
{|class="wikitable"
 
{|class="wikitable"
Line 621: Line 599:
 
|}
 
|}
  
 
+
===Potions===
=== Potions ===
 
 
 
 
Several potions in Hack121 have disappeared in later versions.  Hack 1.0 adds one potion over PDP-11.
 
Several potions in Hack121 have disappeared in later versions.  Hack 1.0 adds one potion over PDP-11.
  
Line 629: Line 605:
 
!Hack121  
 
!Hack121  
 
!PDP-11  
 
!PDP-11  
 +
!PC/IX
 
!Hack 1.0
 
!Hack 1.0
 
|-
 
|-
 
|[[potion of restore ability|restore strength]]
 
|[[potion of restore ability|restore strength]]
 +
|restore strength
 
|restore strength
 
|restore strength
 
|restore strength
 
|restore strength
 
|-
 
|-
 
|alcohol
 
|alcohol
|[[potion of booze|booze]] (PDP-11 only)
+
|[[potion of booze|booze]]
 +
|'''confuse monster'''‡
 
|booze
 
|booze
 
|-
 
|-
 +
|second sight
 +
|
 
|
 
|
|[[scroll of confuse monster|confuse monster]] (PC/IX only)
 
 
|
 
|
 
|-
 
|-
|second sight
+
|[[potion of amnesia|forgetfulness]]
|
 
 
|
 
|
|-
 
|forgetfulness
 
 
|
 
|
 
|
 
|
 
|-
 
|-
 
|extra hit points
 
|extra hit points
 +
|
 
|
 
|
 
|
 
|
 
|-
 
|-
 
|[[potion of invisibility|invisibility]]
 
|[[potion of invisibility|invisibility]]
 +
|invisibility
 
|invisibility
 
|invisibility
 
|invisibility
 
|invisibility
 
|-
 
|-
 
|[[potion of fruit juice|fruit juice]]
 
|[[potion of fruit juice|fruit juice]]
 +
|fruit juice
 
|fruit juice
 
|fruit juice
 
|fruit juice
 
|fruit juice
 
|-
 
|-
 
|[[potion of healing|healing]]
 
|[[potion of healing|healing]]
 +
|healing
 
|healing
 
|healing
 
|healing
 
|healing
 
|-
 
|-
 
|[[potion of paralysis|paralysis]]
 
|[[potion of paralysis|paralysis]]
 +
|paralysis
 
|paralysis
 
|paralysis
 
|paralysis
 
|paralysis
Line 673: Line 655:
 
|
 
|
 
|[[potion of monster detection|monster detection]]
 
|[[potion of monster detection|monster detection]]
 +
|monster detection
 
|monster detection
 
|monster detection
 
|-
 
|-
 
|[[potion of object detection|object detection]]
 
|[[potion of object detection|object detection]]
 +
|object detection
 
|object detection
 
|object detection
 
|object detection
 
|object detection
Line 681: Line 665:
 
|poison
 
|poison
 
|[[potion of sickness|sickness]]
 
|[[potion of sickness|sickness]]
 +
|sickness
 
|sickness
 
|sickness
 
|-
 
|-
 
|[[potion of confusion|confusion]]
 
|[[potion of confusion|confusion]]
 +
|confusion
 
|confusion
 
|confusion
 
|confusion
 
|confusion
Line 689: Line 675:
 
|
 
|
 
|[[potion of gain ability|gain strength]]
 
|[[potion of gain ability|gain strength]]
 +
|gain strength
 
|gain strength
 
|gain strength
 
|-
 
|-
 
|[[potion of speed|speed]]
 
|[[potion of speed|speed]]
 +
|speed
 
|speed
 
|speed
 
|speed
 
|speed
 
|-
 
|-
 
|[[potion of blindness|blindness]]
 
|[[potion of blindness|blindness]]
 +
|blindness
 
|blindness
 
|blindness
 
|blindness
 
|blindness
 
|-
 
|-
 
|[[potion of gain level|gain level]]
 
|[[potion of gain level|gain level]]
 +
|gain level
 
|gain level
 
|gain level
 
|gain level
 
|gain level
 
|-
 
|-
 
|[[potion of extra healing|extra healing]]
 
|[[potion of extra healing|extra healing]]
 +
|extra healing
 
|extra healing
 
|extra healing
 
|extra healing
 
|extra healing
 
|-
 
|-
 +
|
 
|
 
|
 
|
 
|
Line 712: Line 704:
 
|}
 
|}
  
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.
+
‡ Hack for PDP-11 replaced the [[scroll of confuse monster]] with a scroll of losing.  The porters to PC/IX reinstated the former as a potion.
  
=== Scrolls ===
+
===Scrolls===
 
+
Available scrolls are as follows.  The Hack121 list is ordered in an attempt to match the other two.
Available scrolls are as follows:
 
  
 
{|class="wikitable"
 
{|class="wikitable"
Line 732: Line 723:
 
|-
 
|-
 
|[[scroll of confuse monster|confuse monster]]
 
|[[scroll of confuse monster|confuse monster]]
|losing
+
|'''losing'''
 
|confuse monster
 
|confuse monster
 
|-
 
|-
Line 740: Line 731:
 
|-
 
|-
 
|[[scroll of scare monster|scare monsters]]
 
|[[scroll of scare monster|scare monsters]]
|curse levels
+
|'''curse levels'''
 
|scare monster
 
|scare monster
 
|-
 
|-
Line 820: Line 811:
 
|}
 
|}
  
For PDP-11 Hack:
+
For PDP-11:
* The "scroll of losing" takes away the hero's entire inventory and scatters it about the level.
+
* 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.  It appears to have been added by Michiel Huisjes specifically.  The scroll of remove curse will rescind this effect, and in these versions it is not itself affected by curses.   
+
* 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 functions as an elevator.  The code carries the notice "Extended by Michiel and Fred: One can jump between levels".
+
* 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".
  
=== Wands ===
+
===Wands===
 
+
Available wands are as follows.  The Hack121 list is reordered in an attempt to match the other two:
Available wands are as follows:
 
  
 
{|class="wikitable"
 
{|class="wikitable"
Line 845: Line 835:
 
|create monster
 
|create monster
 
|create monster
 
|create monster
|-
 
|
 
|exhaustion
 
|
 
 
|-
 
|-
 
|
 
|
Line 857: Line 843:
 
|
 
|
 
|
 
|
|-
 
|[[wand of digging|digging]]
 
|''different location''
 
|''different location''
 
 
|-
 
|-
 
|[[wand of striking|striking]]
 
|[[wand of striking|striking]]
|
+
|'''exhaustion'''
 
|striking
 
|striking
 
|-
 
|-
Line 878: Line 860:
 
|undead turning
 
|undead turning
 
|-
 
|-
|''different location''
 
 
|[[wand of polymorph|polymorph]]
 
|[[wand of polymorph|polymorph]]
 +
|polymorph
 
|polymorph
 
|polymorph
 
|-
 
|-
Line 898: Line 880:
 
|[[wand of make invisible|make invisible]]
 
|[[wand of make invisible|make invisible]]
 
|-
 
|-
|''different location''
+
|[[wand of digging|digging]]
 
|digging
 
|digging
 
|digging
 
|digging
Line 905: Line 887:
 
|
 
|
 
|
 
|
|-
 
|polymorph
 
|''different location''
 
|''different location''
 
 
|-
 
|-
 
|[[wand of magic missile|magic missile]]
 
|[[wand of magic missile|magic missile]]
Line 939: Line 917:
 
|}
 
|}
  
In Hack121 the wand of wonder is a random wand of another type which changes each time you zap it.  In D&amp;D a wand of wonder works as a random wand of another type.  ''Note: In iLarn (and in [http://www.cordier.com/ularn/] 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.''
+
In Hack121, the wand of wonder is a random wand of another type which changes each time you zap it.  In D&amp;D, a wand of wonder works as a random wand of another type.   
  
=== Rings ===
+
''Note: In iLarn (and in [http://www.cordier.com/ularn/ 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.''
  
 +
===Rings===
 
Available rings are as follows.  For hack121, the order has been changed to match the other two versions.
 
Available rings are as follows.  For hack121, the order has been changed to match the other two versions.
  
Line 1,045: Line 1,024:
 
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.
 
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.
  
=== Gems ===
+
===Gems===
 
+
Hack121 appears to have gems, but their function is uncertain.  In Hack for PDP-11, they only add to the player's score; neither of these Hacks has unicorns.  Hack 1.0 has gems in their modern form.
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.
 
 
 
=== Other objects ===
 
  
 +
===Other objects===
 
The remaining objects in each game seem to have no connection to each other.  Hack121 has these objects:
 
The remaining objects in each game seem to have no connection to each other.  Hack121 has these objects:
 +
*the sphere of power
 +
*[[mirror]]
 +
*cross
 +
*tinder box
 +
*[[brass lantern|lantern]]
 +
*torch
 +
*[[potion of oil|flask of oil]]
 +
*shield (which is not a type of armor in this game)
  
* the sphere of power
+
Hack for PDP-11 only has the "amulet of Frobozz", which may be the forerunner of the [[Amulet of Yendor]].
* [[mirror]]
 
* cross
 
* tinder box
 
* [[brass lantern|lantern]]
 
* torch
 
* [[potion of oil|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:
 
Hack 1.0 has these objects:
 +
*[[tin whistle|whistle]]
 +
*[[magic whistle]]
 +
*[[expensive camera]]
 +
*[[ice box]]
 +
*[[heavy iron ball]]
 +
*[[iron chain]]
 +
*[[boulder|enormous rock]]
 +
*[[amulet of Yendor]]
  
* [[tin whistle|whistle]]
+
==References==
* [[magic whistle]]
 
* [[expensive camera]]
 
* [[ice box]]
 
* [[heavy iron ball]]
 
* [[iron chain]]
 
* [[boulder|enormous rock]]
 
* the [[Amulet of Yendor|amulet of Yendor]]
 
 
 
== References ==
 
 
 
 
<references/>
 
<references/>
 
 
{{noversion|offset=1}}
 
{{noversion|offset=1}}
 
{{featured}}
 
{{featured}}
 
[[Category:History]]
 
[[Category:History]]

Latest revision as of 10:47, 18 February 2024

HACK is a roguelike role-playing game written by Jay Fenlason, with contributions from Kenny Woodland, Mike Thome, and Jon Payne, from which all subsequent versions of Hack and all versions of NetHack are descended. Jay Fenlason's Hack is the term given to the original Hack, without the extensive modifications by Andries Brouwer which are present in the more widely distributed version.

At present, source code for the original is not available online. A DOS port with user interface changes is available in binary form, all of Brouwer's versions are available as source code, and the source code for an early variant dubbed "Hack for PDP-11", which was based on a leaked early draft of Andries Brouwer's version, is also available.

Background

Development began shortly after the 1982 USENIX conference in Boston, MA where Michael Toy and Ken Arnold (the authors of the then closed-source Rogue) spoke. In Fenlason's own words:

"I was curious about some of the game play issues involved in designing it, things like how the rooms and corridors were generated, so I started hacking up some random level generators and stuff to try things out. Someone looked over my shoulder and said, 'what's that?' So I sort of explained and they said, 'oh, that's cool; when do we get to play it?'"[1][2]

The only publication of the original Hack was on a USENIX software distribution tape, apparently the first 1984 USENIX tape (of which no online copy is known to exist), where it accompanied Jon Payne's text editor JOVE. It proved to be very popular:

"Usenix had biannual[sic: semiannual] meetings, Unix users would get together and swap war stories. For each meeting they'd put together a tape of some of the contributed software. I put [Hack] on the tape and forgot about it until someone I know mentioned that the two most popular pieces of software on that particular tape were my silly game and my friend Jonathon's text editor. Since then there's been several different versions of Hack written, and I think I'm the only person who still uses that text editor."[1][2]

Based on Fenlason's home in Massachusetts and the next release of the Usenet port, he likely introduced Hack at the 1984 winter USENIX at Washington, DC[3][4]

Variants

The exact content of the original Hack is not known for sure (but see the comments section of this post for a possible lead). Three derivatives are known to exist. The rest of this article covers mainly Hack for PDP-11 and "hack121".

Hack 1.21 (hack121)

A 16-color CGA-mode DOS port of Jay Fenlason's Hack is available in binary form at Ali Harlow's website as hack121.zip (mirror). It is known as "hack121", after the filename of its distribution package.

It refers to itself as version "1.21 (Slak was here!)", "Slak" apparently being Jay Fenlason himself; nonetheless, some changes have clearly been made by the porter (IBMgraphics and the fusion of mklev into hack).

See this newsgroup posting for a possible lead as to who ported it.

No source code for this program is known to exist, and it is not known for sure if the porter made any modifications which affect gameplay. Nonetheless, it is probably the closest to the original that is known to be extant.

Hack for PDP-11 and PC/IX Hack

Hack for PDP-11 is a variant developed by Michiel Huisjes and Fred de Wilde at the Free University (VU) in Amsterdam† (apparently based upon a early draft of Andries Brouwer's Hack, which was copied from his user area without his permission) and published on Usenet in February 1985. A port of this to a Unix clone called PC/IX (with a slightly different set of potions) was published in May by "peterb at pbear".

Despite its name, Hack for PDP-11 appears to require a nonstandard compiler, whereas it can be compiled on some later UNIX systems such as 4.2BSD without much work; it is possible that the compiler used was a contemporary version of the Amsterdam Compiler Kit, which dates from the early 1980s and which was developed at the VU.

The developers summarize their changes, in the Hack for PDP-11 readme, as:

"One of the main problems of Hack is its size. If you add about 1000 bytes of text more, your text segment will be to big. Therefore we saved text wherever this was possible. We removed the function fscanf(), and made the record file binary. To show the contents, use the program show (with flag -r).
"Some additions we (Fred de Wilde and Michiel Huisjes) made are
- The Vault
- The Swamp
- The Zoo
- The Graveyard
- Maxlevel = 40
- Proper Saving
- Several bugs
- And many, many more..."

"Proper saving" references the fact that saving was apparently broken in the sources that they originally obtained (as they mention in comments in the corresponding code).

PDP-11 Hack incorporates a time restriction preventing playing on working hours on weekdays, which grants exceptions for the developers' UIDs, and which is removed in the PC/IX version.

The shar files of both versions are archived at Google Groups:

Hack 1.0

Hack 1.0 was developed by Andries Brouwer and posted to Usenet in December 1984. All other versions of Hack and NetHack are descended from this version.

Main differences from Andries Brouwer's Hack

  • 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.

Special room types

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).

Mazes

PDP-11 Hack appears to contain the original makemaz() implementation of Fenlason's team, given this source code comment which does not appear in the refactored version of the function in Hack 1.0, and appears to reference Kenny Woodland by his first name:

/* This is all Kenny's fault.  He seems to have his x and y reversed */

Bestiary

The bestiaries of hack121 and PDP-11 Hack are listed below, along with the Hack 1.0 bestiary for comparison. Other monster descriptions may be lurking in other parts of the hack121 binary; therefore, this list cannot be considered as necessarily the final word for that version.

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) 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 (&)
minotaur (m)
shopkeeper (@)

Other monsters kept in separate structures

All versions of Hack and NetHack prior to NetHack 3.0.0 have various monster description structures floating around in their source code, for monsters with special functions. These are listed here, with monsters having the same function 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 (;)
ghost (tab)

The character for the ghost is coded as a tab character, or '\t'. This is likely to be a bug or an arcane hack.

The giant eel appears in essentially its modern form. The current version of AEB Hack at the release of the PDP-11 Hack was 1.0.1, and this version did not have giant eels. Giant eels do appear in Hack 1.0.2, and the source code credits the publishers of PDP-11 Hack, Michiel Huisjes and Fred de Wilde, for the inspiration. That credit is still present in NetHack 3.4.3[5].

Available Objects

Hack121, PDP-11 Hack, and Hack 1.0 show many similarities in their object lists. Except as noted, the object lists are presented in the order in which they occur in the code. PC/IX Hack is the same as PDP-11 Hack except as otherwise noted.

Armor

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.

Hack121 PDP-11 Hack 1.0
helmet
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
(not armor) shield
pair of gloves

Food

The available food items are as follows:

Hack121 PDP-11 Hack 1.0
food ration food ration food ration
tripe ration tripe ration tripe ration
beef jerky pancake pancake
dead lizard dead lizard dead lizard
steak cookie fortune cookie
carrot
tin
orange orange orange
apple apple apple
pear pear pear
melon melon
banana banana banana
spinach candy bar candy bar
egg egg egg
clove of garlic
corpse

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 Hack PDP-11. 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.

Weapons

Hack121 and Hack for PDP-11 offer the same set of weapons. Hack 1.0 adds a few to these:

hack121 PDP-11 Hack 1.0
arrow arrow arrow
sling bullet sling bullet sling bullet
crossbow bolt crossbow bolt crossbow bolt
dart dart dart
rock
boomerang
mace mace mace
axe axe axe
flail flail flail
long sword long sword long sword
two handed sword two handed sword two handed sword
dagger dagger dagger
worm tooth
crysknife
spear spear spear
bow bow bow
sling sling sling
crossbow crossbow crossbow

Potions

Several potions in Hack121 have disappeared in later versions. Hack 1.0 adds one potion over PDP-11.

Hack121 PDP-11 PC/IX Hack 1.0
restore strength restore strength restore strength restore strength
alcohol booze confuse monster booze
second sight
forgetfulness
extra hit points
invisibility invisibility invisibility invisibility
fruit juice fruit juice fruit juice fruit juice
healing healing healing healing
paralysis paralysis paralysis paralysis
monster detection monster detection monster detection
object detection object detection object detection object detection
poison sickness sickness sickness
confusion confusion confusion confusion
gain strength gain strength gain strength
speed speed speed speed
blindness blindness blindness blindness
gain level gain level gain level gain level
extra healing extra healing extra healing extra healing
levitation

‡ Hack for PDP-11 replaced the scroll of confuse monster with a scroll of losing. The porters to PC/IX reinstated the former as a potion.

Scrolls

Available scrolls are as follows. The Hack121 list is ordered in an attempt to match the other two.

hack121 PDP11 Hack 1.0
enchant armor enchant armor enchant armor
(different location) (different location) destroy armor
confuse monster losing confuse monster
destroy monsters
scare monsters curse levels scare monster
ressurection [sic]
blank paper
remove curse remove curse remove curse
enchant weapon enchant weapon enchant weapon
create monster create monster damage weapon
damage weapon damage weapon create monster
taming
genocide genocide genocide
rust armor destroy armor (different location)
light light light
teleportation transportation teleportation
gold detection gold detection gold detection
food detection
identify identify identify
magic mapping magic mapping magic mapping
amnesia
fire fire fire
punishment
charge wand

For PDP-11:

  • 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".

Wands

Available wands are as follows. The Hack121 list is reordered in an attempt to match the other two:

Hack121 PDP-11 Hack 1.0
light light light
trap detection secret door + trap detection secret door detection
create monster create monster create monster
wishing
wonder
striking exhaustion striking
slow monster slow monster slow monster
speed monster speed monster speed monster
undead turning undead turning
polymorph polymorph polymorph
frighten monster
cancellation cancellation cancellation
teleport monster teleport monster teleport monster
make invisible
digging digging digging
monster invisibility
magic missile magic missile magic missile
fire fire fire
sleep sleep sleep
cold cold cold
death death death
confusion
door closing

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.

Rings

Available rings are as follows. For hack121, the order has been changed to match the other two versions.

Hack121 PDP-11 Hack 1.0
adornment adornment adornment
teleportation teleportation teleportation
regeneration regeneration regeneration
searching searching searching
see invisible see invisible see invisible
stealth stealth stealth
floating levitation
poison resistance poison resistance poison resistance
aggravate monster aggravate monster aggravate monster
hunger hunger hunger
monster creation
berzerking
another chance
fire and cold resistance fire resistance fire resistance
cold resistance cold resistance
protection from magic protection from shape-changers protection from shape changers
conflict
gain strength gain strength gain strength
increase damage increase damage increase damage
protection protection protection
increase hit points
warning
teleport control

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.

Gems

Hack121 appears to have gems, but their function is uncertain. In Hack for PDP-11, they only add to the player's score; neither of these Hacks has unicorns. Hack 1.0 has gems in their modern form.

Other objects

The remaining objects in each game seem to have no connection to each other. Hack121 has these objects:

Hack for PDP-11 only has the "amulet of Frobozz", which may be the forerunner of the Amulet of Yendor.

Hack 1.0 has these objects:

References

  1. 1.0 1.1 "On The Train Of Life With Nethack’s Papa" (2000), Julie Bresnick, Linux.com.
  2. 2.0 2.1 "On the train of life with Nethack's papa" (2000) [2003], Julie Bresnick, Newsforge.com by Internet Archive.
  3. USENIX Annual Technical Conference, dblp: computer science bibliography:
    USENIX Summer 1984: Salt Lake City, Utah, USA
    USENIX Winter 1984: Washington, D.C., USA
    USENIX Summer 1983: Toronto, Canada
    USENIX Winter 1983: San Diego, CA, USA
  4. "A Bibliography of Publications of the USENIX Association: 1980–1989", Nelson H. F. Beebe, University of Utah, 2012: [USE84c] USENIX Association, editor. USENIX UniForum Conference Proceedings, January 17–20, 1984. Washington DC, USA. USENIX, Berkeley, CA, USA, January 17–20, 1984. ISBN none. LCCN QA76.8.U65 U55 1984.
  5. mkroom.c in NetHack 3.4.3, line 447