billr@saab.CNA.TEK.COM (Bill Randle) (07/25/89)
Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu> Posting-number: Volume 7, Issue 91 Archive-name: NetHack3/Part36 #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 36 (of 38)." # Contents: Files amiga/amifont8.uu amiga/amiunix.c auxil/cmdhelp # auxil/endgame.des auxil/opthelp auxil/tower.des include/monattk.h # include/monst.h include/obj.h include/unixconf.h # others/Maketcc.ini others/NetHack.cnf others/pcunix.c # src/lev_comp.l # Wrapped by billr@saab on Sun Jul 23 21:33:22 1989 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'Files' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'Files'\" else echo shar: Extracting \"'Files'\" \(3557 characters\) sed "s/^X//" >'Files' <<'END_OF_FILE' XThis is a listing of all files in a full NetHack 3.0 distribution, organized in Xtheir standard manner on a UNIX system. It indicates which files are necessary Xfor which versions, so that you can tell which files may be deleted from or not Xtransferred to your system if you wish. X X X(files in top directory) XFiles Install.dos Install.unix Makefile.top Porting XREADME X X Xamiga: X(files for Amiga version) XInstall.ami Makefile.ami NetHack.cnf ami.lnk amidos.c Xamifont.uu amifont8.uu amimenu.c amitcap.c amitty.c Xamiunix.c amiwind.c fcntl.h signal.h stdio.h X X Xauxil: X(files for all versions) XGuidebook.mn castle.des cmdhelp data.base endgame.des Xhelp hh history license opthelp Xoracles rumors.fal rumors.tru tower.des X(files for UNIX versions) XMakefile.auxil lev_comp.6 nethack.6 nethack.sh X X Xothers: X(files for MSDOS version) XMake.ini Makefile.pc Makefile.tcc Maketcc.ini NetHack.cnf Xmsdos.c termcap X(files for MSDOS, Amiga, and Atari versions) Xpcmain.c pctty.c pcunix.c X(file for Atari version) Xtos.c X(file with random number routines, which may be included in any version) Xrandom.c X X Xinclude: X(files for all versions) Xamiconf.h artifact.h attrib.h config.h coord.h Xdecl.h edog.h epri.h eshk.h extern.h Xflag.h func_tab.h global.h gold.h hack.h Xlev.h mfndpos.h mkroom.h monattk.h mondata.h Xmonflag.h monst.h monsym.h msdos.h obj.h Xobjclass.h osbind.h patchlevel.h pcconf.h permonst.h Xprop.h rm.h sp_lev.h spell.h system.h Xtosconf.h tradstdc.h trap.h trapname.h unixconf.h Xvault.h wseg.h you.h youprop.h X(file for special level compiler (STRONGHOLD option)) Xlev_comp.h X Xsrc: X(files for all versions) Xalloc.c apply.c artifact.c attrib.c bones.c Xcmd.c dbridge.c decl.c demon.c do.c Xdo_name.c do_wear.c dog.c dogmove.c dokick.c Xdothrow.c eat.c end.c engrave.c exper.c Xextralev.c fountain.c getline.c hack.c invent.c Xioctl.c lock.c mail.c makedefs.c makemon.c Xmcastu.c mhitm.c mhitu.c mklev.c mkmaze.c Xmkobj.c mkroom.c mon.c mondata.c monmove.c Xmonst.c mthrowu.c music.c o_init.c objects.c Xobjnam.c options.c pager.c panic.c pickup.c Xpolyself.c potion.c pray.c pri.c priest.c Xprisym.c read.c restore.c rip.c rnd.c Xrumors.c save.c search.c shk.c shknam.c Xsit.c sounds.c sp_lev.c spell.c steal.c Xtermcap.c timeout.c topl.c topten.c track.c Xtrap.c u_init.c uhitm.c vault.c version.c Xweapon.c were.c wield.c wizard.c worm.c Xworn.c write.c zap.c X(files for special level compiler (STRONGHOLD option)) Xlev_comp.c lev_comp.l lev_comp.y lev_lex.c lev_main.c X(files for UNIX versions) XMakefile.src unixmain.c unixtty.c unixunix.c END_OF_FILE if test 3557 -ne `wc -c <'Files'`; then echo shar: \"'Files'\" unpacked with wrong size! fi # end of 'Files' fi if test -f 'amiga/amifont8.uu' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'amiga/amifont8.uu'\" else echo shar: Extracting \"'amiga/amifont8.uu'\" \(2955 characters\) sed "s/^X//" >'amiga/amifont8.uu' <<'END_OF_FILE' X Xbegin 644 8 XM```#\P`````````!``````````````'Y```#Z0```?EP_TYU```````````,5 XM`````!H/@``!``````````````````````````````````````````!&140`Y XM```````````,`````!H`````!W0`"`!```@`!@`!```@_P```&X`?@``!%X`E XM```````````8;&P8`#@8##````````,\&#P\''X<?CP\```,`#`\?!C\//C^) XM_CQF?@[F\(+&./PX_#Q^9L/&P\/^/,`\$``8`.``#@`<`.`8!N`X````````? XM``@````````.&'!RS,%F````9F9F&!@````8&!@``!@88L!F`&9F&``8&``\U XM;&P^QFP8&!AF&`````9F.&9F/&`P9F9F&!@8`!AFQCQF9FQF9F9F&`9F8,;FD XM;&9L9F9:9L/&9L/&,&`,.``8`&``!@`V`&```&`8`````````!@````````82 XM&!B<,V-F````9F9F/!@````8&!@``!@\96-F`&9F&``8&``\`/Y@S&@P,`P\B XM&`````QN&`8&;'Q@!F9F&!@P?@P&WCQFP&9@8,!F&`9L8.[VQF;&9G`89F;&, XM/&:,,#`,;``,/&P\-CPP.VPX!F889GP\W#WL/CYF9F-C9GX8&!@`S#9F_W_^\ XM9^;G/!@````8&!@``!AF8#9G_^;G&``8&``8`&P\&'8`,`S_?@!^`!A^&!P<* XMS`9\##P^``!@``8,WF9\P&9X>,Y^&`9X8/[>QGS&?#@89F;6&#P8,!@,Q@``V XM!G9F;F9X9G88!FP8=V9F9F9V8!AF9FLV9DQP&`X`,QQF`&`&8`8`9AC_'_@?2 XM^/\``-O#?AM@``8`'__X_P`8`/X&,-P`,`P\&````#!V&#`&_@9F&&8&```PS XM``P8WGYFP&9@8,9F&&9L8M;.QF#&;`X89CS^/!@R,`P,````'F9@9GXP9F88P XM!G@8:V9F9F9F/!AF9FL<9A@8&!@`S!QF`&`&8`8`9A@`&!@``!@``,/;9NQ@< XM``8`&!@8`````&Q\9LP`&!AF&!@`&&!F&&9F#&9F&&8,&!@8?A@`P,-F9FQF1 XM8&9F&&9F9L;&;&!L9F889CSN9AAF,`8,````9F9F9F`P/&88!FP88V9F?#Y@) XM!AIF/#8V/#(8&!@`,S9F_V?F?_[GPQ@`&!@``!AS`&889C9GY^;_&!@8```8F XM`&P8QG8`##```!@`&,`\?GX\'CP\&#PX&!@,`#`8>,/\//C^\#YF?CSF_L;&M XM./`\XSP\/AC&PSS^/`,\````.SP\.SQXQN8\9N8\8V8\8`;P?`P[	C&'X.8 XM&'``S&-F`&9F``!FPQ@`&!@``!B<&#P89F-F9F8`&!@8````````````````] XM`#```````````````````#`````````````````````````````&````````F XM`````````/X`````````?```/```````\`<`````````<```````,\%F`&9F# XM``!F`!@`&!@``!@``!@8`,!F9F8`&!@8``````@`"``(`!``"``8``@`(``(H XM`"@`"``P``@`.``(`$``"`!(``@`4``(`%@`"`!@``@`:``(`'``"`!X``@`( XM@``(`(@`"`"0``@`F``(`*``"`"H``@`L``(`+@`"`#```@`R``(`-``"`#8H XM``@`X``(`.@`"`#P``@`^``(`0``"`$(``@!$``(`1@`"`$@``@!*``(`3``W XM"`$X``@!0``(`4@`"`%0``@!6``(`6``"`%H``@!<``(`7@`"`&```@!B``(+ XM`9``"`&8``@!H``(`:@`"`&P``@!N``(`<``"`'(``@!T``(`=@`"`'@``@!, XMZ``(`?``"`'X``@"```(`@@`"`(0``@"&``(`B``"`(H``@",``(`C@`"`)`< XM``@"2``(`E``"`)8``@"8``(`F@`"`)P``@">``(`H``"`*(``@"D``(`I@`^ XM"`*@``@"J``(`K``"`*X``@"P``(`L@`"`+0``@"V``(`N``"`+H``@"\``(. XM`O@`"`,```@#```(`P``"`,```@#```(`P``"`,```@#```(`P``"`,```@#S XM```(`P``"`,```@#```(`P``"`,```@#```(`P``"`,```@#```(`P``"`,`Y XM``@#```(`P``"`,```@#```(`P``"`,```@#```(`P``"`,```@#```(`P``Y XM"``(``@`$``(`!@`"``@``@`*``(`#``"``X``@`0``(`$@`"`!0``@`6``(P XM`&``"`!H``@`<``(`'@`"`"```@`B``(`)``"`"8``@`H``(`*@`"`"P``@`P XMN``(`,``"`#(``@`T``(`-@`"`#@``@`Z``(`/``"`#X``@#"``(`Q``"`,8I XM``@#(``(`R@`"`,P``@#.``(`T``"`-(``@#4``(`U@`"`-@``@#:``(`W``1 XM"`-X``@#@``(`X@`"`.0``@#F``(`Z``"`.H``@#L``(`[@`"`/```@#R``(A XM`P``"`,```@!V``(`>``"`'H``@!\``(`?@`"`(```@#T``(`]@`"`/@``@#! XMZ``(`P``"`,```@#```(`P``"`,```@#```(`P``"`,```@#```(`P``"`,`A XM``@#```(`P``"`,```@#```(`P``"`,```@#```(`P``"`,```@#```(`P``Y XM"`+8``@"X``(`N@`"`+P``@"^``(````"``````#[`````0`````````#@``+ X2`$0```!<````8@````````/RW X`` Xend Xsize 2088 END_OF_FILE if test 2955 -ne `wc -c <'amiga/amifont8.uu'`; then echo shar: \"'amiga/amifont8.uu'\" unpacked with wrong size! fi # end of 'amiga/amifont8.uu' fi if test -f 'amiga/amiunix.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'amiga/amiunix.c'\" else echo shar: Extracting \"'amiga/amiunix.c'\" \(3467 characters\) sed "s/^X//" >'amiga/amiunix.c' <<'END_OF_FILE' X/* SCCS Id: @(#)amiunix.c 3.0 89/05/02 X/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X/* NetHack may be freely redistributed. See license for details. */ X X/* This file collects some Unix dependencies; pager.c contains some more */ X X/* X * The time is used for: X * - seed for rand() X * - year on tombstone and yymmdd in record file X * - phase of the moon (various monsters react to NEW_MOON or FULL_MOON) X * - night and midnight (the undead are dangerous at midnight) X * - determination of what files are "very old" X */ X X/* block some unused #defines to avoid overloading some cpp's */ X#define MONDATA_H X#include "hack.h" /* mainly for index() which depends on BSD */ X X#define NOSTAT X X#ifndef NOSTAT X#include <stat.h> Xstatic struct stat buf, hbuf; X#endif X Xextern time_t time(); X Xvoid Xsetrandom() X{ X (void) Srand((unsigned int) time ((time_t *) 0)); X} X Xstatic struct tm * Xgetlt() X{ X time_t date; X struct tm *localtime(); X X (void) time((long *)(&date)); X return(localtime(&date)); X} X Xint Xgetyear() X{ X return(1900 + getlt()->tm_year); X} X Xchar * Xgetdate() X{ X#ifdef LINT /* static char datestr[7]; */ X char datestr[7]; X#else X static char datestr[7]; X#endif X register struct tm *lt = getlt(); X X Sprintf(datestr, "%2d%2d%2d", X lt->tm_year, lt->tm_mon + 1, lt->tm_mday); X if(datestr[2] == ' ') datestr[2] = '0'; X if(datestr[4] == ' ') datestr[4] = '0'; X return(datestr); X} X Xint Xphase_of_the_moon() /* 0-7, with 0: new, 4: full */ X{ /* moon period: 29.5306 days */ X /* year: 365.2422 days */ X register struct tm *lt = getlt(); X register int epact, diy, golden; X X diy = lt->tm_yday; X golden = (lt->tm_year % 19) + 1; X epact = (11 * golden + 18) % 30; X if ((epact == 25 && golden > 11) || epact == 24) X epact++; X X return( (((((diy + epact) * 6) + 11) % 177) / 22) & 7 ); X} X Xint Xnight() X{ X register int hour = getlt()->tm_hour; X X return(hour < 6 || hour > 21); X} X Xint Xmidnight() X{ X return(getlt()->tm_hour == 0); X} X Xvoid Xgethdate(name) Xchar *name; X{ X#ifndef NOSTAT X/* old version - for people short of space */ X/* X/* register char *np; X/* if(stat(name, &hbuf)) X/* error("Cannot get status of %s.", X/* (np = rindex(name, '/')) ? np+1 : name); X/* X/* version using PATH from: seismo!gregc@ucsf-cgl.ARPA (Greg Couch) */ X X/* X * The problem with #include <sys/param.h> is that this include file X * does not exist on all systems, and moreover, that it sometimes includes X * <sys/types.h> again, so that the compiler sees these typedefs twice. X */ X#define MAXPATHLEN 80 X Xextern char PATH[]; /* In amigaDOS.c */ X Xregister char *np, *path; Xchar filename[MAXPATHLEN+1]; X X if (index(name, '/') != NULL || (path = PATH) == NULL) X path = ""; X X for (;;) { X if ((np = index(path, ':')) == NULL) X np = path + strlen(path); /* point to end str */ X if (np - path <= 1) /* %% */ X (void) strcpy(filename, name); X else { X (void) strncpy(filename, path, np - path); X filename[np - path] = '/'; X (void) strcpy(filename + (np - path) + 1, name); X } X if (stat(filename, &hbuf) == 0) X return; X if (*np == '\0') X path = ""; X path = np + 1; X } X error("Cannot get status of %s.", (np = rindex(name, '/')) ? np+1 : name); X#endif X} X Xint Xuptodate(fd) X{ X return(1); X} X Xvoid Xregularize(s) /* normalize file name - we don't like :'s or /'s */ Xregister char *s; X{ X register char *lp; X X while((lp = index(s, ':')) || (lp = index(s, '/'))) X *lp = '_'; X} END_OF_FILE if test 3467 -ne `wc -c <'amiga/amiunix.c'`; then echo shar: \"'amiga/amiunix.c'\" unpacked with wrong size! fi # end of 'amiga/amiunix.c' fi if test -f 'auxil/cmdhelp' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'auxil/cmdhelp'\" else echo shar: Extracting \"'auxil/cmdhelp'\" \(3325 characters\) sed "s/^X//" >'auxil/cmdhelp' <<'END_OF_FILE' X^ Show the type of a trap X^[ Cancel command X^A Redo the previous command X^C Quit the game X^D Kick something (usually a door) X^E Search a room (available in debug mode only) X^F Map the level (available in debug mode only) X^G Create a monster (available in debug mode only) X^I Identify all items (available in debug mode only) X^O Show location of special levels (available in debug mode only) X^P Show previous message printed out X^R Redraw screen X^T Teleport around level X^V Teleport between levels (available in debug mode only) X^W Wish (available in debug mode only) X^X Show your intrinsic attributes (in debug or explore mode only) X^Z Suspend game (only if defined) Xa Apply (use) a tool XA Remove all Armor Xb Go southwest 1 space XB Go southwest until you are on top of something X^B Go southwest until you are near something Xc Close a door XC Call (name) a particular monster Xd Drop an item XD Drop specific item types Xe Eat something XE Engrave writing on the floor Xg Followed by direction, move until you are near something XG Followed by direction, same as control-direction Xh Go west 1 space XH Go west until you are on top of something X^H Go west until you are near something Xi Show your inventory XI Inventory specific item types Xj Go south 1 space (or if number_pad is on, jump to another location) XJ Go south until you are on top of something X^J Go south until you are near something Xk Go north 1 space (or if number_pad is on, kick something) XK Go north until you are on top of something X^K Go north until you are near something Xl Go east 1 space (or if number_pad is on, loot a box on the floor) XL Go east until you are on top of something X^L Go east until you are near something Xm Followed by direction, move without picking anything up XM Followed by direction, move a distance without picking anything up Xn Go southeast 1 space XN Go southeast until you are on something (if number_pad, name an object) X^N Go southeast until you are near something Xo Open a door XO Set options (O? explains options) Xp Pay your shopping bill XP Put on a ring Xq Quaff (drink) something XQ Quit the game Xr Read a scroll (or spell book, if defined) XR Remove a Ring Xs Search for traps and secret doors XS Save the game Xt Throw something XT Take off one piece of armor Xu Go northeast 1 space (or if number_pad is on, untrap something) XU Go northeast until you are on top of something X^U Go northeast until you are near something Xv Show version XV Show long version and game history Xw Wield (put in use) a weapon XW Wear a piece of armor Xy Go northwest 1 space XY Go northwest until you are on top of something X^Y Go northwest until you are near something Xz Zap a wand XZ Zap (cast) a spell (only if defined) X< Go up a staircase X> Go down a staircase X/ Show what type of thing a symbol corresponds to X? Give a help message X& Tell what a command does X! Do a shell escape (only if defined) X\ Show what object types have been discovered X. Rest one move while doing nothing X Rest one move while doing nothing (if option restonspace set) X: Look at what is on the floor X@ Toggle the pickup option on/off X) Show the weapon currently wielded X[ Show the armor currently worn X= Show the ring(s) currently worn X" Show the amulet currently worn X( Show the tools currently in use X$ Count your gold X+ List known spells (only if defined) X# Perform an extended command END_OF_FILE if test 3325 -ne `wc -c <'auxil/cmdhelp'`; then echo shar: \"'auxil/cmdhelp'\" unpacked with wrong size! fi # end of 'auxil/cmdhelp' fi if test -f 'auxil/endgame.des' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'auxil/endgame.des'\" else echo shar: Extracting \"'auxil/endgame.des'\" \(3509 characters\) sed "s/^X//" >'auxil/endgame.des' <<'END_OF_FILE' X# SCCS Id: @(#)endgame.des 3.0 89/07/02 X# Copyright (c) 1989 by Jean-Christophe Collet X# NetHack may be freely redistributed. See license for details. X# X# This is the ENDGAME level X# It's made of 3 shrines and a fighting area X# Players are supposed to sacrifice the Amulet of Yendor on the appropriate X# shrine. But to get to the shrines, they must cross the fighting area... X X# First shrine XMAZE:"endgame" XGEOMETRY:left,top XMAP X}}}}}} X}}..}} X}}.... X}}..}} X}}}}}} XENDMAP XALTAR:(02,02),align[0],shrine XMAZEWALK:(05,02),east X X# Second Shrine XGEOMETRY:left,center XMAP X}}}}}} X}}..}} X}}.... X}}..}} X}}}}}} XENDMAP XALTAR:(02,02),align[1],shrine XMAZEWALK:(05,02),east X X# Third Shrine XGEOMETRY:left,bottom XMAP X}}}}}} X}}..}} X}}.... X}}..}} X}}}}}} XENDMAP XALTAR:(02,02),align[2],shrine XMAZEWALK:(05,02),east X X# Note that the shrine alignments are random... X X# The fighting area : 7 rooms. X# Each room contains a specific class of monsters. X# Maybe this a little bit too hard (We have to test it in real game) X XGEOMETRY:center,center XMAP X.-----------------------------. X.|........S.........|........S. X.|........|.........|........|. X.|........|.........|........|. X.|........|.........|........|. X.-S--------.........-S--------. X.|........|.........|........|. X.|........|.........|........|. X.|........|}}}}.}}}}|........|. X.|........|.........|........|. X.|........|.........|........|. X.--------S-.........--------S-. X.|........|.........|........|. X.|........|.........|........|. X.|........|.........|........|. X.S........|.........S........|. X.-----------------------------. XENDMAP XMAZEWALK:(30,08),east XMAZEWALK:(00,08),west X# Non diggable walls XNON_DIGGABLE:(00,00,30,16) X# Doors XDOOR:closed,(10,01) XDOOR:closed,(29,01) XDOOR:locked,(02,05) XDOOR:locked,(21,05) XDOOR:locked,(09,11) XDOOR:closed,(28,11) XDOOR:locked,(01,15) XDOOR:locked,(20,15) X# Rooms XREGION:(02,01,09,04),lit,"ordinary" XREGION:(21,01,28,04),lit,"ordinary" XREGION:(02,06,09,10),lit,"ordinary" XREGION:(21,06,28,10),lit,"ordinary" XREGION:(02,12,09,15),lit,"ordinary" XREGION:(21,12,28,15),lit,"ordinary" XREGION:(11,01,19,15),unlit,"ordinary" X# Rust monsters in the first room XMONSTER:'R',random,(22,01) XMONSTER:'R',random,(27,01) XMONSTER:'R',random,(24,03) XMONSTER:'R',random,(22,04) XMONSTER:'R',random,(27,04) X# Liches in the second one XMONSTER:'l',random,(22,06) XMONSTER:'l',random,(27,06) XMONSTER:'l',random,(22,08) XMONSTER:'l',random,(27,08) XMONSTER:'l',random,(22,10) XMONSTER:'l',random,(27,10) X# Nagas in the 3rd one XMONSTER:'n',random,(22,12) XMONSTER:'n',random,(27,12) XMONSTER:'n',random,(24,14) XMONSTER:'n',random,(22,15) XMONSTER:'n',random,(27,15) X# Dragons in the central one XMONSTER:'D',random,(12,02) XMONSTER:'D',random,(18,02) XMONSTER:'D',random,(13,03) XMONSTER:'D',random,(17,04) XMONSTER:'D',random,(13,06) XMONSTER:'D',random,(17,06) XMONSTER:'D',random,(12,07) XMONSTER:'D',random,(18,07) X# with krakens in the trenches XMONSTER:';',"kraken",(12,08) XMONSTER:';',"kraken",(14,08) XMONSTER:';',"kraken",(16,08) XMONSTER:';',"kraken",(18,08) X# Giants in the 5th one XMONSTER:'H',random,(03,01) XMONSTER:'H',random,(07,01) XMONSTER:'H',random,(05,03) XMONSTER:'H',random,(03,04) XMONSTER:'H',random,(07,04) X# Ogres in the 6th one XMONSTER:'O',random,(03,06) XMONSTER:'O',random,(07,06) XMONSTER:'O',random,(03,08) XMONSTER:'O',random,(07,08) XMONSTER:'O',random,(03,10) XMONSTER:'O',random,(07,10) X# Trolls in the last one XMONSTER:'T',random,(03,12) XMONSTER:'T',random,(07,12) XMONSTER:'T',random,(05,14) XMONSTER:'T',random,(03,15) XMONSTER:'T',random,(07,15) END_OF_FILE if test 3509 -ne `wc -c <'auxil/endgame.des'`; then echo shar: \"'auxil/endgame.des'\" unpacked with wrong size! fi # end of 'auxil/endgame.des' fi if test -f 'auxil/opthelp' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'auxil/opthelp'\" else echo shar: Extracting \"'auxil/opthelp'\" \(3657 characters\) sed "s/^X//" >'auxil/opthelp' <<'END_OF_FILE' X XBoolean options available in all versions (with default values in []): X Xconfirm ask before hitting tame or peaceful monsters [TRUE] X(fe)male sex of the player (may only be set on startup) [MALE] Xfixinv try to retain the same letter for the same object [TRUE] Xignintr ignore interrupt signal, including breaks [FALSE] Xnumber_pad use the number keys to move instead of yuhjklbn [FALSE] Xpickup automatically pick up objects you move over [TRUE] Xrest_on_space count the space bar as a rest character [FALSE] Xsafe_pet prevent you from (knowingly) attacking your pet(s) [TRUE] Xsilent don't use your terminal's bell sound [TRUE] Xsortpack group similar kinds of objects in inventory [TRUE] Xtime display elapsed game time, in moves [FALSE] Xtombstone print tombstone when you die [TRUE] Xverbose print more commentary during the game [TRUE] X XThere are further Boolean options that exist in some versions of NetHack 3.0. X(You can tell which options exist in your version by checking the short Xoption help, which is reached by 'O?'.) X X X XBoolean option if NEWS was set at compile time: Xnews print any news from game administrator on startup [TRUE] X XBoolean options if you are using MS-DOS and DGK was set at compile time: XIBM_BIOS allow the use of IBM ROM BIOS calls [FALSE] Xrawio allow the use of raw I/O (may only be set on startup) [FALSE] XDEC_Rainbow you are on a DEC Rainbow and want to use its graphics [FALSE] X (if DECRAINBOW was also set at compile time) X XBoolean options if DGK was not set at compile time: Xnull allow nulls to be sent to your terminal [TRUE] Xstandout use standout mode for --More-- on messages [FALSE] X XAny Boolean option can be negated by prefixing it with a '!' or 'no'. X X X X X X X X XCompound options are written as option_name:option_value. XCompound options which can be set during the game are: X Xpackorder a list of default symbols for kinds of objects that gives the X order in which your pack will be displayed X If you specify only some kinds of items, the others from the X default order will be appended to the end. [")[%?+!=/(*`0_] Xendgame the parts of the score list you wish to see when the game ends X You choose a combination of top scores, scores around that of X the ending game, and all of your own scores. X [!own/5 top/4 around] Xfruit the name of a fruit you enjoy eating X (basically a whimsy which NetHack uses from time to time) X [slime mold] X XCompound options which may be set only on startup are: X Xname the name of your character X [obtained by asking the system or the player] Xdogname the name of your first dog [NONE] Xcatname the name of your first cat [NONE] X Xgraphics a list of symbols to be used in place of the default ones for X drawing the dungeon X The symbols are subjected to a fair amount of processing, so X that you can use C-style escapes such as \n or \081 as well as X indicate control characters by ^x or meta characters by \Mx. X As usual, \ can force the next character to be taken literally. X Since many of the default symbols are overloaded, they are X given here by name instead of symbol, with some added notes. X [stone (solid rock, normally ' ') X vwall hwall tlcorn trcorn blcorn brcorn (room boundaries) X crwall tuwall tdwall tlwall trwall (wallified maze characters) X vbeam hbeam lslant rslant (zap beams) X door room corr upstair dnstair trap web pool X fountain sink throne altar X upladder dnladder vdbridge hdbridge] X XSome sample options lists are X!pickup,!tombstone,name:Gandalf,endgame:own/3 top/2 around Xfemale,nonews,dogname:Rover,graphics: |--------|||-\\/+.#<>\^\"}{#\\_<>## Xrest_on_space,!verbose END_OF_FILE if test 3657 -ne `wc -c <'auxil/opthelp'`; then echo shar: \"'auxil/opthelp'\" unpacked with wrong size! fi # end of 'auxil/opthelp' fi if test -f 'auxil/tower.des' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'auxil/tower.des'\" else echo shar: Extracting \"'auxil/tower.des'\" \(3636 characters\) sed "s/^X//" >'auxil/tower.des' <<'END_OF_FILE' X# SCCS Id: @(#)tower.des 3.0 89/07/02 X# Copyright (c) 1989 by Jean-Christophe Collet X# NetHack may be freely redistributed. See license for details. X# X# Upper stage of Vlad's tower XMAZE:"tower1" XGEOMETRY:center,center XMAP X................. X...---.---.---... X...|.|.|.|.|.|... X.---S---S---S---. X.|.......+.+...|. X.---+-----.-----. X...|...\.|.+.|... X.---+-----.-----. X.|.......+.+...|. X.---S---S---S---. X...|.|.|.|.|.|... X...---.---.---... X................. XENDMAP XMAZEWALK:(16,06),east XLADDER:(12,06),down XREGION:(02,04,08,04),unlit,"ordinary" XREGION:(04,06,08,06),unlit,"ordinary" XREGION:(02,08,08,08),unlit,"ordinary" XREGION:(12,04,14,04),unlit,"ordinary" XREGION:(12,08,14,08),unlit,"ordinary" XREGION:(10,04,10,08),unlit,"ordinary" X# The lord and his court XMONSTER:'V',"Vlad the Impaler",(07,06) XMONSTER:'V',random,(04,10) XMONSTER:'V',random,(08,10) XMONSTER:'V',random,(12,10) XMONSTER:'V',random,(04,02) XMONSTER:'V',random,(08,02) XMONSTER:'V',random,(12,02) X# The doors XDOOR:closed,(04,03) XDOOR:closed,(08,03) XDOOR:closed,(12,03) XDOOR:closed,(04,09) XDOOR:closed,(08,09) XDOOR:closed,(12,09) XDOOR:locked,(04,05) XDOOR:locked,(04,07) X# treasures XOBJECT:'(',"chest",(08,06) XOBJECT:'(',"chest",(04,10) XOBJECT:'(',"chest",(08,10) XOBJECT:'(',"chest",(12,10) XOBJECT:'(',"chest",(04,02) XOBJECT:'(',"chest",(08,02) XOBJECT:'(',"chest",(12,02) X# We have to protect the tower against outside attacks XNON_DIGGABLE:(00,00,16,12) X X X# Intermediate stage of Vlad's tower XMAZE:"tower2" XGEOMETRY:center,center XMAP X................. X...---.---.---... X...|.|.|.|.|.|... X.---S---S---S---. X.|.S.........S.|. X.---.------+----. X...|......|..|... X.--------.------. X.|.S......+..S.|. X.---S---S---S---. X...|.|.|.|.|.|... X...---.---.---... X................. XENDMAP X# Random places are the 10 niches XRANDOM_PLACES:(04,02),(08,02),(12,02),(02,04),(14,04), X (02,08),(14,08),(04,10),(08,10),(12,10) XMAZEWALK:(16,06),east XLADDER:(12,06),up XLADDER:(04,08),down XREGION:(11,07,12,07),unlit,"ordinary" XREGION:(11,09,12,09),unlit,"ordinary" XMONSTER:'&',random,place[0] XMONSTER:'&',random,place[1] XMONSTER:'d',"hell hound pup",place[2] XMONSTER:'d',"hell hound pup",place[3] XMONSTER:'d',"winter wolf",place[4] XOBJECT:'"',"amulet of life saving",place[5] XOBJECT:'"',"amulet of strangulation",place[6] XOBJECT:'[',"water walking boots",place[7] XOBJECT:'[',"crystal plate mail",place[8] XOBJECT:'+',"invisibility",place[9] X# Walls in the tower are non diggable XNON_DIGGABLE:(00,00,16,12) X X X# Bottom most stage of Vlad's tower XMAZE:"tower3" XGEOMETRY:center,center XMAP X................. X...---.---.---... X...|.|.|.|.|.|... X.---S---S---S---. X.|.S.........S.|. X.---.........---. X...|.........+... X.---.........---. X.|.S.........S.|. X.---S---S---S---. X...|.|.|.|.|.|... X...---.---.---... X................. XENDMAP X# Random places are the 10 niches XRANDOM_PLACES:(04,02),(08,02),(12,02),(02,04),(14,04), X (02,08),(14,08),(04,10),(08,10),(12,10) XMAZEWALK:(16,06),east XREGION:(04,04,12,08),unlit,"ordinary" XLADDER:(04,08),up X# Entry door is, of course, locked XDOOR:locked,(13,06) X# Let's put a dragon behind the door, just for the fun... XMONSTER:'D',random,(12,06) XMONSTER:random,random,(11,05) XMONSTER:random,random,(11,07) XMONSTER:random,random,random XMONSTER:random,random,random XMONSTER:random,random,random XMONSTER:random,random,random XMONSTER:random,random,random XMONSTER:random,random,random XOBJECT:')',"long sword",place[0] XTRAP:random,place[0] XOBJECT:'(',"lock pick",place[1] XTRAP:random,place[1] XOBJECT:'[',"elven cloak",place[2] XTRAP:random,place[2] XOBJECT:'(',"blindfold",place[3] XTRAP:random,place[3] X# Walls in the tower are non diggable XNON_DIGGABLE:(00,00,16,12) END_OF_FILE if test 3636 -ne `wc -c <'auxil/tower.des'`; then echo shar: \"'auxil/tower.des'\" unpacked with wrong size! fi # end of 'auxil/tower.des' fi if test -f 'include/monattk.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'include/monattk.h'\" else echo shar: Extracting \"'include/monattk.h'\" \(3161 characters\) sed "s/^X//" >'include/monattk.h' <<'END_OF_FILE' X/* SCCS Id: @(#)monattk.h 3.0 89/06/15 X/* NetHack may be freely redistributed. See license for details. */ X/* Copyright 1988, M. Stephenson */ X X#ifndef MONATTK_H X#define MONATTK_H X X/* Add new attack types below - ordering affects experience (exper.c). X * Attacks > AT_BUTT are worth extra experience. X */ X#define AT_NONE 0 /* passive monster (ex. acid blob) */ X#define AT_CLAW 1 /* claw (punch, hit, etc.) */ X#define AT_BITE 2 /* bite */ X#define AT_KICK 3 /* kick */ X#define AT_BUTT 4 /* head butt (ex. a unicorn) */ X#define AT_TUCH 5 /* touches */ X#define AT_STNG 6 /* sting */ X#define AT_HUGS 7 /* crushing bearhug */ X#define AT_SPIT 10 /* spits substance - ranged */ X#define AT_ENGL 11 /* engulf (swallow or by a cloud) */ X#define AT_BREA 12 /* breath - ranged */ X#define AT_EXPL 13 /* explodes - proximity */ X#define AT_GAZE 14 /* gaze - ranged */ X X#define AT_WEAP 254 /* uses weapon */ X#define AT_MAGC 255 /* uses magic spell(s) */ X X/* Add new damage types below. X * X * Note that 1-10 correspond to the types of attack used in buzz(). X * Please don't disturb the order unless you rewrite the buzz() code. X */ X#define AD_PHYS 0 /* ordinary physical */ X#define AD_MAGM 1 /* magic missiles */ X#define AD_FIRE 2 /* fire damage */ X#define AD_SLEE 3 /* sleep ray */ X#define AD_COLD 4 /* frost damage */ X#define AD_DISN 5 /* disintegration (death ray) */ X#define AD_ELEC 6 /* shock damage */ X#define AD_DRST 7 /* drains str (poison) */ X#define AD_ACID 8 /* acid damage */ X#define AD_SPC1 9 /* for extension of buzz() */ X#define AD_SPC2 10 /* for extension of buzz() */ X#define AD_BLND 11 /* blinds (glowing eye) */ X#define AD_STUN 12 /* stuns */ X#define AD_SLOW 13 /* slows */ X#define AD_PLYS 14 /* paralyses */ X#define AD_DRLI 15 /* drains life levels (Vampire) */ X#define AD_DREN 16 /* drains magic energy */ X#define AD_LEGS 17 /* damages legs (xan) */ X#define AD_STON 18 /* petrifies (Medusa, Cockatrice) */ X#define AD_STCK 19 /* sticks to you (Mimic) */ X#define AD_SGLD 20 /* steals gold (Leppie) */ X#define AD_SITM 21 /* steals item (Nymphs) */ X#define AD_SEDU 22 /* seduces & steals multiple items */ X#define AD_TLPT 23 /* teleports you (Quantum Mech.) */ X#define AD_RUST 24 /* rusts armour (Rust Monster)*/ X#define AD_CONF 25 /* confuses (Umber Hulk) */ X#define AD_DGST 26 /* digests opponent (trapper, etc.) */ X#define AD_HEAL 27 /* heals opponent's wounds (nurse) */ X#define AD_WRAP 28 /* special "stick" for eels */ X#define AD_WERE 29 /* confers lycanthropy */ X#define AD_DRDX 30 /* drains dexterity (Quasit) */ X#define AD_DRCO 31 /* drains constitution */ X#define AD_DISE 32 /* confers diseases */ X#define AD_DCAY 33 /* decays organics (Brown pudding) */ X#define AD_SSEX 34 /* Succubus seduction (extended) */ X /* If no SEDUCE then same as AD_SEDU */ X X#define AD_CLRC 240 /* random clerical spell */ X#define AD_SPEL 241 /* random magic spell */ X X#define AD_SAMU 252 /* hits, may steal Amulet (Wizard) */ X#define AD_CURS 253 /* random curse (ex. gremlin) */ X#define AD_CUSS 255 /* says nasty things about you */ X X#endif /* MONATTK_H /**/ END_OF_FILE if test 3161 -ne `wc -c <'include/monattk.h'`; then echo shar: \"'include/monattk.h'\" unpacked with wrong size! fi # end of 'include/monattk.h' fi if test -f 'include/monst.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'include/monst.h'\" else echo shar: Extracting \"'include/monst.h'\" \(2778 characters\) sed "s/^X//" >'include/monst.h' <<'END_OF_FILE' X/* SCCS Id: @(#)monst.h 3.0 88/04/15 X/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X/* NetHack may be freely redistributed. See license for details. */ X X#ifndef MONST_H X#define MONST_H X Xstruct monst { X struct monst *nmon; X struct permonst *data; X unsigned m_id; X uchar m_lev; /* adjusted difficulty level of monster */ X schar malign; /* alignment of this monster, relative to the X player (positive = good to kill) */ X xchar mx, my; X xchar mux, muy; /* where the monster thinks you are */ X xchar mdx, mdy; /* if mdispl then pos where last displayed */ X#define MTSZ 4 X coord mtrack[MTSZ]; /* monster track */ X int mhp, mhpmax; X char mappearance; /* nonzero for undetected 'M's and the Wizard */ X int mspec_used; /* monster's special ability attack timeout */ X schar mtame; /* level of tameness, implies peaceful */ X X Bitfield(mimic,1); /* undetected mimic */ X Bitfield(mdispl,1); /* mdx,mdy valid */ X Bitfield(minvis,1); /* invisible */ X Bitfield(cham,1); /* shape-changer */ X Bitfield(mhide,1); /* hides beneath objects */ X Bitfield(mundetected,1); /* not seen in present hiding place */ X Bitfield(mspeed,2); X X Bitfield(mflee,1); /* fleeing */ X Bitfield(mfleetim,7); /* timeout for mflee */ X X Bitfield(msleep,1); /* sleeping */ X Bitfield(mfroz,1); /* frozen */ X Bitfield(mstun,1); /* stunned (off balance) */ X Bitfield(mconf,1); /* confused */ X Bitfield(mcan,1); /* has been cancelled */ X Bitfield(mpeaceful,1); /* does not attack unprovoked */ X Bitfield(mcansee,1); /* cansee 1, temp.blinded 0, blind 0 */ X X Bitfield(mblinded,7); /* cansee 0, temp.blinded n, blind 0 */ X Bitfield(mtrapped,1); /* trapped in a pit or bear trap */ X X Bitfield(isshk,1); /* is shopkeeper */ X Bitfield(isgd,1); /* is guard */ X#if defined(ALTARS) && defined(THEOLOGY) X Bitfield(ispriest,1); /* is a priest */ X#endif X Bitfield(iswiz,1); /* is the Wizard of Yendor */ X Bitfield(mleashed,1); /* monster is on a leash */ X#ifdef WORM X Bitfield(wormno,5); /* at most 31 worms on any level */ X#endif X long mtrapseen; /* bitmap of traps we've been trapped in */ X long mlstmv; /* prevent two moves at once */ X struct obj *minvent; X long mgold; X uchar mnamelth; /* length of name (following mxlth) */ X short mxlth; /* length of following data */ X /* in order to prevent alignment problems mextra should X be (or follow) a long int */ X int meating; /* monster is eating timeout */ X long mextra[1]; /* monster dependent info */ X}; X X#define newmonst(xl) (struct monst *) alloc((unsigned)(xl) + sizeof(struct monst)) X Xextern struct monst *fmon; Xextern struct monst *mydogs, *fallen_down; X X/* these are in mspeed */ X#define MSLOW 1 /* slow monster */ X#define MFAST 2 /* speeded monster */ X X#define NAME(mtmp) (((char *) mtmp->mextra) + mtmp->mxlth) X X#endif /* MONST_H /**/ END_OF_FILE if test 2778 -ne `wc -c <'include/monst.h'`; then echo shar: \"'include/monst.h'\" unpacked with wrong size! fi # end of 'include/monst.h' fi if test -f 'include/obj.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'include/obj.h'\" else echo shar: Extracting \"'include/obj.h'\" \(3109 characters\) sed "s/^X//" >'include/obj.h' <<'END_OF_FILE' X/* SCCS Id: @(#)obj.h 3.0 88/04/12 X/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X/* NetHack may be freely redistributed. See license for details. */ X X#ifndef OBJ_H X#define OBJ_H X Xstruct obj { X struct obj *nobj; X struct obj *cobj; /* id of container object is in */ X/* unsigned o_cwt; /* container weight capacity */ X unsigned o_id; X xchar ox,oy; X xchar odx,ody; X unsigned otyp; X unsigned owt; X unsigned quan; /* use oextra for tmp gold objects */ X X schar spe; /* quality of weapon, armor or ring (+ or -) X number of charges for wand ( >= -1 ) X marks your eggs, spinach tins, key shapes X indicates statues have spellbooks inside X tells which fruit a fruit is X special for uball and amulet %% BAH */ X#define N_LOX 10 /* # of key/lock shapes */ X char olet; X char invlet; X int corpsenm; /* type of corpse is mons[corpsenm] */ X#define leashmon corpsenm /* gets m_id of attached pet */ X Bitfield(oinvis,1); /* not yet implemented */ X Bitfield(olocked,1); /* object is locked */ X#define recharged olocked /* recharged once */ X Bitfield(otrapped,1); /* container is trapped */ X#define opoisoned otrapped /* weapon has been coated with poison */ X Bitfield(odispl,1); X Bitfield(known,1); /* exact nature known */ X Bitfield(dknown,1); /* color or text known */ X Bitfield(bknown,1); /* blessing or curse known */ X Bitfield(cursed,1); X Bitfield(blessed,1); X Bitfield(unpaid,1); /* on some bill */ X Bitfield(rustfree,1); X#define flameproof rustfree/* for non-metal armor items */ X Bitfield(no_charge,1); /* if shk shouldn't charge for this */ X Bitfield(onamelth,6); X long age; /* creation date */ X long owornmask; X#define W_ARM 040000L X#define W_ARMC 0100000L X#define W_ARMH 0200000L X#define W_ARMS 0400000L X#define W_ARMG 01000000L X#define W_ARMF 02000000L X#define W_AMUL 04000000L X#define W_TOOL 010000000L /* wearing another tool (see uprop) */ X#ifdef SHIRT X#define W_ARMU 020000000L X#define W_ARMOR (W_ARM | W_ARMC | W_ARMH | W_ARMS | W_ARMG | W_ARMF | W_ARMU) X#else X#define W_ARMOR (W_ARM | W_ARMC | W_ARMH | W_ARMS | W_ARMG | W_ARMF) X#endif X#define W_RINGL 010000L /* make W_RINGL = RING_LEFT (see uprop) */ X#define W_RINGR 020000L X#define W_RING (W_RINGL | W_RINGR) X#define W_WEP 01000L X#define W_BALL 02000L X#define W_CHAIN 04000L X long oextra[1]; /* used for name of ordinary objects - length X is flexible; amount for tmp gold objects */ X}; X Xextern struct obj *fobj; X X#define newobj(xl) (struct obj *) alloc((unsigned)(xl) + sizeof(struct obj)) X#define ONAME(otmp) ((char *) otmp->oextra) X#define OGOLD(otmp) (otmp->oextra[0]) X X# ifndef STUPID_CPP /* otherwise these macros are functions in lock.c */ X#define Is_container(otmp) (otmp->otyp >= ICE_BOX && otmp->otyp <= BAG_OF_TRICKS) X#define Is_box(otmp) (otmp->otyp == LARGE_BOX || otmp->otyp == CHEST) X#define Is_mbag(otmp) (otmp->otyp == BAG_OF_HOLDING || otmp->otyp == BAG_OF_TRICKS) X X#define is_sword(otmp) (otmp->otyp >= SHORT_SWORD && otmp->otyp <= KATANA) X#define bimanual(otmp) (otmp->olet == WEAPON_SYM && objects[otmp->otyp].oc_bimanual) X# endif /* STUPID_CPP */ X X#endif /* OBJ_H /**/ END_OF_FILE if test 3109 -ne `wc -c <'include/obj.h'`; then echo shar: \"'include/obj.h'\" unpacked with wrong size! fi # end of 'include/obj.h' fi if test -f 'include/unixconf.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'include/unixconf.h'\" else echo shar: Extracting \"'include/unixconf.h'\" \(3456 characters\) sed "s/^X//" >'include/unixconf.h' <<'END_OF_FILE' X/* SCCS Id: @(#)unixconf.h 3.0 88/07/21 X/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X/* NetHack may be freely redistributed. See license for details. */ X X#ifdef UNIX X#ifndef UNIXCONF_H X#define UNIXCONF_H X X/* X * Some include files are in a different place under SYSV X * BSD SYSV X * <sys/time.h> <time.h> X * <sgtty.h> <termio.h> X * X * Some routines are called differently X * index strchr X * rindex strrchr X * X * Also, the code for suspend is only given for BSD X */ X X/* #define BSD /* define for 4.n BSD */ X /* also for relatives like SunOS */ X#define ULTRIX /* define for Ultrix v3.0 or higher (but not lower) */ X /* Use BSD for < v3.0 */ X /* "ULTRIX" not to be confused with "ultrix" */ X/* #define SYSV /* define for System V */ X/* #define NETWORK /* if running on a networked system */ X /* e.g. Suns sharing a playground through NFS */ X X/* #define GENIX /* Yet Another Unix Clone */ X/* #define HISX /* Bull Unix for XPS Machines */ X/* #define UNIXPC /* use in addition to SYSV for AT&T 7300/3B1 */ X /* also note that the stock cpp qualifies as a X STUPID_CPP for config.h */ X X/* #define PYRAMID_BUG /* avoid a bug on the Pyramid */ X/* #define APOLLO /* same for the Apollo */ X/* #define RANDOM /* if neither random/srandom nor lrand48/srand48 X is available from your system */ X X/* X * Define DEF_PAGER as your default pager, e.g. "/bin/cat" or "/usr/ucb/more" X * If defined, it can be overridden by the environment variable PAGER. X * Hack will use its internal pager if DEF_PAGER is not defined. X * (This might be preferable for security reasons.) X * #define DEF_PAGER ".../mydir/mypager" X */ X X/* X * If you define MAIL, then the player will be notified of new mail X * when it arrives. If you also define DEF_MAILREADER then this will X * be the default mail reader, and can be overridden by the environment X * variable MAILREADER; otherwise an internal pager will be used. X * A stat system call is done on the mailbox every MAILCKFREQ moves. X */ X X#define MAIL X#define DEF_MAILREADER "/usr/ucb/Mail" /* or e.g. /bin/mail */ X#define MAILCKFREQ 50 X X#ifdef COMPRESS X/* Some implementations of compress need a 'quiet' option. X * If you've got one of these versions, put -q here. X * You can also include any other strange options your compress needs. X * If you have a normal compress, just leave it commented out. X */ X/* #define COMPRESS_OPTIONS "-q" /* */ X#endif X X#define FCMASK 0660 /* file creation mask */ X X X/* X * The remainder of the file should not need to be changed. X */ X X#if (defined(BSD) || defined(ULTRIX)) && !defined(MSDOS) X#include <sys/time.h> X#else X#include <time.h> X#endif X X#define HLOCK "perm" /* an empty file used for locking purposes */ X#define LLOCK "safelock" /* link to previous */ X X#ifndef REDO X#define Getchar getchar X#else X#define tgetch getchar X#endif X X#define SHELL /* do not delete the '!' command */ X X#include "system.h" X X#if defined(BSD) || defined(ULTRIX) X#define SUSPEND /* let ^Z suspend the game */ X#define memcpy(d, s, n) bcopy(s, d, n) X#define memcmp(s1, s2, n) bcmp(s2, s1, n) X#else /* therefore SYSV */ X#define index strchr X#define rindex strrchr X#endif X X/* Use the high quality random number routines. */ X#if defined(BSD) || defined(ULTRIX) || defined(RANDOM) X#define Rand() random() X#define Srand(seed) srandom(seed) X#else X#define Rand() lrand48() X#define Srand(seed) srand48(seed) X#endif X X#include "extern.h" X X#endif /* UNIXCONF_H /* */ X#endif /* UNIX /* */ END_OF_FILE if test 3456 -ne `wc -c <'include/unixconf.h'`; then echo shar: \"'include/unixconf.h'\" unpacked with wrong size! fi # end of 'include/unixconf.h' fi if test -f 'others/Maketcc.ini' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'others/Maketcc.ini'\" else echo shar: Extracting \"'others/Maketcc.ini'\" \(3094 characters\) sed "s/^X//" >'others/Maketcc.ini' <<'END_OF_FILE' X# SCCS Id: @(#)Maketcc.ini 3.0 89/07/07 X# Sample Turbo C 2.0 `make.ini' for NDMAKE 4.5. Customize it for your setup. X X# If .NOIG is used, it *must* be the first directive in this file. X#.NOIG X X# The order to search for rules and files is specified by .SUFFIXES X.SUFFIXES : .com .exe .obj .c .tpu .pas .asm .y .l X X# The directory NDMAKE uses for temporary file XMAKE_TMP = $(TMP) X X# Where NDMAKE looks for file without directory specifications XVPATH = .;.. X X# Macros for compilers and assemblers. XAS = tasm XCC = tcc XCFLAGS = -m$(MODEL) X#LEX = lex X#LFLAGS = X#YACC = yacc X#YFLAGS = X X# Other useful macros XBIN = XECHO = >stdout XC = c:\turbo\c XLIB = c:\turbo\c\lib XLIBS = $(LIB)\emu $(LIB)\math$(MODEL) $(LIB)\c$(MODEL) XC0 = $(LIB)\c0$(MODEL).obj XMODEL = s X# SETARGV = $(LIB)\$(MODEL)SETARGV XLFLAGS = XTLFLAGS = /c /x X X# A universally useful target so "make clean" always works. Xclean: X -(erase *.bak; erase *.map) X X#large: X# (if exist \bin\c3s.exe do goto end; \ X# rename \bin\c3.exe c3s.exe; \ X# rename \bin\c3l.exe c3.exe; \ X# :end) X#small: X# (if exist \bin\c3s.exe do goto end; \ X# rename \bin\c3.exe c3l.exe; \ X# rename \bin\c3s.exe c3.exe; \ X# :end) X X#chkdsk: X# chkdsk d: X X# .BEFORE and .AFTER can be used to turn DPATH off and on. X#.BEFORE:; @+echo For help with ndmake, use the command `make -h' X#.AFTER:; @+echo All done. X.BEFORE:; @\norton\tm start/C2/N X.AFTER:; @\norton\tm stop/C2/L/N X X.RESPONSE_LINK: tlink link4 X.RESPONSE_LIB: tlib X X# DEFAULT RULES X# X# ASM -> OBJ using MASM. X.asm.obj: X ${AS} $<; X X# C -> OBJ using Turbo C. X.c.obj: X ${CC} ${CFLAGS} -c $< X X# FOR -> OBJ using Microsoft Fortran. X#.for.obj: X# for1 $<; X# pas2 X X# Y -> C, for YACC X#.y.c: X# $(YACC) $(YFLAGS) $< X# rename ytab.c $@ X X# L -> C, for LEX X#.l.c: X# $(LEX) $(LFLAGS) $< X# mv lex.yy.c $@ X X# To produce a `.exe' file from an `.obj' file. Note that there is a X# problem because LIBS may be different for linking `.obj' files X# produced by different compilers (C, FORTRAN, PASCAL, etc). To avoid X# this problem you may want to have the C compiler produce `.cbj' files, X# the FORTRAN compiler produce `.fbj' files, etc. Then you could write X# specific rules for `.cbj.exe' and `.fbj.exe' which would use the correct X# libraries. X X# To produce a `.com' file from a `.c' file with Turbo C. X.c.com: X ${CC} $(CFLAGS) -mt -lt $< X erase $*.obj X X# To produce a `.exe' file from a `.c' file. X.c.exe: X ${CC} $(CFLAGS) $< X# ${CC} $(CFLAGS) -c $< X# link $*.obj $(SETARGV), $@,, $(LIBS) $(LFLAGS); X erase $*.obj X X# To produce a `.exe' file from a `.asm' file. X.asm.exe: X ${AS} $<; X link $*.obj, $@,, $(LIBS) X erase $*.obj X X# To produce a `.exe' file from a `.for' file. X#.for.exe: X# for1 $<; X# pas2 X# link $*.obj, $@,, $(LIB)\FORTRAN X# erase $*.obj X X# To produce a `.exe' file from a `.pas' file. X.pas.exe: X tpc $(PFLAGS) $* X X# To produce a `.tpu' file from a `.pas' file. X.pas.tpu: X tpc $(PFLAGS) $* X X# C obj -> exe X.obj.exe: X# link $< $(SETARGV), $@,, $(LIBS) $(LFLAGS); X tlink $(TLFLAGS) $(C0) $< $(SETARGV), $@,, $(LIBS); X X# To produce a `.com' file from a `.exe' file. X.exe.com: X exe2bin $*.exe $*.com X erase $*.exe END_OF_FILE if test 3094 -ne `wc -c <'others/Maketcc.ini'`; then echo shar: \"'others/Maketcc.ini'\" unpacked with wrong size! fi # end of 'others/Maketcc.ini' fi if test -f 'others/NetHack.cnf' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'others/NetHack.cnf'\" else echo shar: Extracting \"'others/NetHack.cnf'\" \(3035 characters\) sed "s/^X//" >'others/NetHack.cnf' <<'END_OF_FILE' X# A '#' at the beginning of a line means the rest of the line is a comment. X# X# This configuration file is set up for two cases, for a hard disk X# (as drive C:), and for two floppy disks. X# X# To change the configuration, comment out the unwanted lines, and X# uncomment the configuration you want. X X X# *** OPTIONS *** X# X# These two options should be used for most setups. If you're machine isn't X# very IBM-compatible, and NetHack doesn't work, try commenting out this line. X# XOPTIONS=rawio,IBM_BIOS X# DEC Rainbows will hang if rawio is set, so they should instead use: X#OPTIONS=IBM_BIOS,DEC_Rainbow X# X# X# Some options to set personal preferences. Uncomment and change these to X# suit your personal preference. If several people are to use the same X# configuration, options like these should not be set. X# X#OPTIONS=name:Janet-V,female,dogname:Fido,catname:Morris,fruit:apricot X#OPTIONS=packorder:")[%?+/=!(*0_`,endgame:10 top/2 around/own X# X# X# Other general options. You might also set "silent" so as not to attract X# the boss's attention. X# XOPTIONS=time,rest_on_space,nopickup,number_pad X X X# *** HARD DISK CONFIGURATION *** X# XHACKDIR=c:\games\nethack X# X# LEVELS and SAVE default to HACKDIR X# X#LEVELS=c:\games\nethack\bones X#SAVE=c:\games\nethack\bones;n X# X# appending a ";n" to SAVE means don't prompt to insert a disk. XSAVE=;n X# X#RAMDISK=d: X X X# *** 2-FLOPPY CONFIGURATION *** X# X# HACKDIR=a:\ X# LEVELS=b:\ X# SAVE=b:\ X# RAMDISK=c: X X X# *** CHARACTER GRAPHICS *** X# X# The 32 GRAPHICS characters (0-31) are: X# stone, vertical wall, horizontal wall, top left corner, top right corner, X# bottom left corner, bottom right corner, crosswall, up T wall, down T wall, X# left T wall, right T wall, vertical beam, horizontal beam, left slant, right X# slant, door, floor, corridor, up stairs, down stairs, trap, web, pool, X# fountain, sink, throne, altar, up ladder, down ladder, vertical drawbridge X# wall, horizontal drawbridge wall X# X# If you specify less that 32 ASCII values, the remaining characters will be X# set to their respective defaults. X# X# X# An example using the IBM graphics character set: X# ' ' | - . . ` ' - - - - - | - \ / + . # < > ^ " } { # \ _ < > # # XGRAPHICS = 032 179 196 218 191 192 217 197 193 194 180 195 179 196 092 047 239 249 177 060 062 094 157 247 244 035 190 220 060 062 186 205 X# An alternative: X#GRAPHICS= 032 186 205 201 187 200 188 206 202 203 185 204 179 196 092 047 239 249 177 060 062 094 034 247 244 035 092 095 060 062 179 196 X# X# X# Using the DEC Rainbow/ANSI line-drawing character set: X# X# You must also set the DECRainbow option, above. NetHack will then switch X# into the line drawing character set for any values over 128 below. Just X# add 128 to the value of any line-drawing character you want to use. You X# can use characters from both sets this way. These are also the characters X# to use for the ANSI ruling character set '0'. X# X#GRAPHICS= 032 248 241 236 235 237 234 238 246 247 245 244 248 241 092 047 043 254 225 END_OF_FILE if test 3035 -ne `wc -c <'others/NetHack.cnf'`; then echo shar: \"'others/NetHack.cnf'\" unpacked with wrong size! fi # end of 'others/NetHack.cnf' fi if test -f 'others/pcunix.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'others/pcunix.c'\" else echo shar: Extracting \"'others/pcunix.c'\" \(3478 characters\) sed "s/^X//" >'others/pcunix.c' <<'END_OF_FILE' X/* SCCS Id: @(#)pcunix.c 3.0 88/07/21 X/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X/* NetHack may be freely redistributed. See license for details. */ X X/* This file collects some Unix dependencies; pager.c contains some more */ X X/* X * The time is used for: X * - seed for rand() X * - year on tombstone and yymmdd in record file X * - phase of the moon (various monsters react to NEW_MOON or FULL_MOON) X * - night and midnight (the undead are dangerous at midnight) X * - determination of what files are "very old" X */ X X#include "hack.h" /* mainly for index() which depends on BSD */ X#ifdef TOS X#ifdef UNIXDEBUG X#include <errno.h> X#else X#include <error.h> X#endif /* UNIXDEBUG */ X#endif X X#include <sys/types.h> X#include <sys/stat.h> X X#ifndef TOS Xstatic struct stat buf, hbuf; Xvoid Xsetrandom() X{ X (void) Srand((int) time ((time_t *) 0)); X} X Xstatic struct tm * Xgetlt() X{ X time_t date; X X (void) time(&date); X return(localtime(&date)); X} X Xint Xgetyear() X{ X return(1900 + getlt()->tm_year); X} X Xchar * Xgetdate() X{ X static char datestr[7]; X register struct tm *lt = getlt(); X X Sprintf(datestr, "%2d%2d%2d", X lt->tm_year, lt->tm_mon + 1, lt->tm_mday); X if(datestr[2] == ' ') datestr[2] = '0'; X if(datestr[4] == ' ') datestr[4] = '0'; X return(datestr); X} X Xint Xphase_of_the_moon() /* 0-7, with 0: new, 4: full */ X{ /* moon period: 29.5306 days */ X /* year: 365.2422 days */ X register struct tm *lt = getlt(); X register int epact, diy, golden; X X diy = lt->tm_yday; X golden = (lt->tm_year % 19) + 1; X epact = (11 * golden + 18) % 30; X if ((epact == 25 && golden > 11) || epact == 24) X epact++; X X return( (((((diy + epact) * 6) + 11) % 177) / 22) & 7 ); X} X Xint Xnight() X{ X register int hour = getlt()->tm_hour; X X return(hour < 6 || hour > 21); X} X Xint Xmidnight() X{ X return(getlt()->tm_hour == 0); X} X Xvoid Xgethdate(name) Xchar *name; X{ X/* old version - for people short of space */ X/* X/* register char *np; X/* if(stat(name, &hbuf)) X/* error("Cannot get status of %s.", X/* (np = rindex(name, '/')) ? np+1 : name); X/* X/* version using PATH from: seismo!gregc@ucsf-cgl.ARPA (Greg Couch) */ X X/* X * The problem with #include <sys/param.h> is that this include file X * does not exist on all systems, and moreover, that it sometimes includes X * <sys/types.h> again, so that the compiler sees these typedefs twice. X */ X#define MAXPATHLEN 1024 X X register char *np, *path; X char filename[MAXPATHLEN+1], *getenv(); X X if (index(name, '/') != NULL || (path = getenv("PATH")) == NULL) X path = ""; X X for (;;) { X if ((np = index(path, ':')) == NULL) X np = path + strlen(path); /* point to end str */ X if (np - path <= 1) /* %% */ X Strcpy(filename, name); X else { X (void) strncpy(filename, path, np - path); X filename[np - path] = '/'; X Strcpy(filename + (np - path) + 1, name); X } X if (stat(filename, &hbuf) == 0) X return; X if (*np == '\0') X path = ""; X path = np + 1; X } X error("Cannot get status of %s.", (np = rindex(name, '/')) ? np+1 : name); X} X Xint Xuptodate(fd) { X if(fstat(fd, &buf)) { X pline("Cannot get status of saved level? "); X return(0); X } X if(buf.st_mtime < hbuf.st_mtime) { X pline("Saved level is out of date. "); X return(0); X } X return(1); X} X#endif /* TOS /* */ X Xvoid Xregularize(s) /* normalize file name - we don't like .'s, /'s, spaces */ Xregister char *s; X{ X register char *lp; X X while((lp=index(s, '.')) || (lp=index(s, '/')) || (lp=index(s,' '))) X *lp = '_'; X} END_OF_FILE if test 3478 -ne `wc -c <'others/pcunix.c'`; then echo shar: \"'others/pcunix.c'\" unpacked with wrong size! fi # end of 'others/pcunix.c' fi if test -f 'src/lev_comp.l' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'src/lev_comp.l'\" else echo shar: Extracting \"'src/lev_comp.l'\" \(2732 characters\) sed "s/^X//" >'src/lev_comp.l' <<'END_OF_FILE' X%{ X/* SCCS Id: @(#)lev_lex.c 3.0 89/07/02 X/* Copyright (c) 1989 by Jean-Christophe Collet */ X/* NetHack may be freely redistributed. See license for details. */ X X#include "hack.h" X#include "lev_comp.h" X#include "sp_lev.h" X Xint line_number = 1; X X/* This is *** UGLY *** but I can't think a better way to do it X * I really need a huge buffer to scan maps... X */ X X#undef YYLMAX X#define YYLMAX 2048 X X%} X%s MAPC X%% X^#.*\n { line_number++; } XMAZE return MAZE_ID; XLEVEL return LEVEL_ID; XGEOMETRY return GEOMETRY_ID; X^MAP$ { BEGIN MAPC; } X<MAPC>[-|}{+SK\\#. ]*\n { line_number++; yymore(); } X<MAPC>ENDMAP$ { BEGIN 0; X yytext[yyleng-7] = 0; /* Discard \nENDMAP */ X yylval.map = (char *) alloc(strlen(yytext)+1); X strcpy(yylval.map, yytext+1); X return MAP_ID; X } XOBJECT return OBJECT_ID; XMONSTER return MONSTER_ID; XTRAP return TRAP_ID; XDOOR return DOOR_ID; XDRAWBRIDGE return DRAWBRIDGE_ID; XMAZEWALK return MAZEWALK_ID; XREGION return REGION_ID; XRANDOM_OBJECTS return RANDOM_OBJECTS_ID; XRANDOM_MONSTERS return RANDOM_MONSTERS_ID; XRANDOM_PLACES return RANDOM_PLACES_ID; XALTAR return ALTAR_ID; XLADDER return LADDER_ID; XNON_DIGGABLE return NON_DIGGABLE_ID; XROOM return ROOM_ID; Xopen { yylval.i=D_ISOPEN; return DOOR_STATE; } Xclosed { yylval.i=D_CLOSED; return DOOR_STATE; } Xlocked { yylval.i=D_LOCKED; return DOOR_STATE; } Xnodoor { yylval.i=D_NODOOR; return DOOR_STATE; } Xbroken { yylval.i=D_BROKEN; return DOOR_STATE; } Xnorth { yylval.i=W_NORTH; return DIRECTION; } Xeast { yylval.i=W_EAST; return DIRECTION; } Xsouth { yylval.i=W_SOUTH; return DIRECTION; } Xwest { yylval.i=W_WEST; return DIRECTION; } Xrandom { yylval.i = -1; return RANDOM_TYPE; } Xobject return O_REGISTER; Xmonster return M_REGISTER; Xplace return P_REGISTER; Xalign return A_REGISTER; Xleft { yylval.i=1; return LEFT_OR_RIGHT; } Xright { yylval.i=3; return LEFT_OR_RIGHT; } Xcenter { yylval.i=2; return CENTER; } Xtop { yylval.i=1; return TOP_OR_BOT; } Xbottom { yylval.i=3; return TOP_OR_BOT; } Xlit { yylval.i=1; return LIGHT_STATE; } Xunlit { yylval.i=0; return LIGHT_STATE; } Xlaw { yylval.i=A_LAW; return ALIGNMENT; } Xneutral { yylval.i=A_NEUTRAL; return ALIGNMENT; } Xchaos { yylval.i=A_CHAOS; return ALIGNMENT; } Xshrine { yylval.i=1; return ALTAR_TYPE; } Xaltar { yylval.i=0; return ALTAR_TYPE; } Xup { yylval.i=1; return UP_OR_DOWN; } Xdown { yylval.i=0; return UP_OR_DOWN; } X[0-9]+ { yylval.i=atoi(yytext); return INTEGER; } X\"[^"]*\" { yytext[yyleng-1] = 0; /* Discard the trailing \" */ X yylval.map = (char *) alloc(strlen(yytext+1)+1); X strcpy(yylval.map, yytext+1); /* Discard the first \" */ X return STRING; } X\n { line_number++; } X[ \t]+ ; X'.' { yylval.i = yytext[1]; return CHAR; } X. { return yytext[0]; } X%% END_OF_FILE if test 2732 -ne `wc -c <'src/lev_comp.l'`; then echo shar: \"'src/lev_comp.l'\" unpacked with wrong size! fi # end of 'src/lev_comp.l' fi echo shar: End of archive 36 \(of 38\). cp /dev/null ark36isdone MISSING="" for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 38 archives. rm -f ark[1-9]isdone ark[1-9][0-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0