billr@saab.CNA.TEK.COM (Bill Randle) (02/24/90)
Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu> Posting-number: Volume 9, Issue 30 Archive-name: NetHack3/Patch7dd Patch-To: NetHack3: Volume 7, Issue 56-93 [This is the last part of patch #7. You should have 30 files, Patch7a-Patch7z, Patch7aa-Patch7dd. -br] #! /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 30 (of 30)." # Contents: patch7.02 # Wrapped by billr@saab on Wed Feb 21 10:04:22 1990 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'patch7.02' -a "${1}" != "-c" ; then echo shar: Renaming existing file \"'patch7.02'\" to \"'patch7.02.orig'\" mv -f 'patch7.02' 'patch7.02.orig' fi echo shar: Extracting \"'patch7.02'\" \(55250 characters\) sed "s/^X//" >'patch7.02' <<'END_OF_FILE' X*** src/Old/cmd.c Mon Feb 19 17:55:04 1990 X--- src/cmd.c Fri Feb 2 18:21:18 1990 X*************** X*** 6,92 **** X #include "func_tab.h" X X #ifdef DUMB /* stuff commented out in extern.h, but needed here */ X! extern int doapply(); /**/ X! extern int dorub(); /**/ X! extern int dojump(); /**/ X! extern int doextlist(); /**/ X! extern int dodrop(); /**/ X! extern int doddrop(); /**/ X! extern int dodown(); /**/ X! extern int doup(); /**/ X! extern int donull(); /**/ X! extern int dowipe(); /**/ X! extern int do_mname(); /**/ X! extern int ddocall(); /**/ X! extern int dotakeoff(); /**/ X! extern int doremring(); /**/ X! extern int dowear(); /**/ X! extern int doputon(); /**/ X! extern int doddoremarm(); /**/ X! extern int dokick(); /**/ X! extern int dothrow(); /**/ X! extern int doeat(); /**/ X! extern int done2(); /**/ X! extern int doengrave(); /**/ X! extern int dopickup(); /**/ X! extern int ddoinv(); /**/ X! extern int dotypeinv(); /**/ X! extern int dolook(); /**/ X! extern int doprgold(); /**/ X! extern int doprwep(); /**/ X! extern int doprarm(); /**/ X! extern int doprring(); /**/ X! extern int dopramulet(); /**/ X! extern int doprtool(); /**/ X! extern int dosuspend(); /**/ X! extern int doforce(); /**/ X! extern int doopen(); /**/ X! extern int doclose(); /**/ X! extern int dosh(); /**/ X! extern int dodiscovered(); /**/ X! extern int doset(); /**/ X! extern int dotogglepickup(); /**/ X! extern int dowhatis(); /**/ X! extern int dowhatdoes(); /**/ X! extern int dohelp(); /**/ X! extern int dohistory(); /**/ X! extern int doloot(); /**/ X! extern int dodrink(); /**/ X! extern int dodip(); /**/ X! extern int dosacrifice(); /**/ X! extern int dopray(); /**/ X! extern int doturn(); /**/ X! extern int doredraw(); /**/ X! extern int doread(); /**/ X! extern int dosave(); /**/ X! extern int dosave0(); /**/ X! extern int dosearch(); /**/ X extern int FDECL(dosearch0, (int)); /**/ X! extern int doidtrap(); /**/ X! extern int dopay(); /**/ X! extern int dosit(); /**/ X! extern int dotalk(); /**/ X! extern int docast(); /**/ X! extern int dovspell(); /**/ X! extern int doredotopl(); /**/ X! extern int dotele(); /**/ X! extern int dountrap(); /**/ X! extern int doversion(); /**/ X! extern int dowield(); /**/ X! extern int dozap(); /**/ X #endif /* DUMB */ X X! #ifndef OVERLAY X! static X! #endif X! int (*timed_occ_fn)(); X! #ifdef POLYSELF X! #ifndef OVERLAY X! static X #endif X! int domonability(); X #endif X X /* Count down by decrementing multi */ X #ifndef OVERLAY X static X--- 6,122 ---- X #include "func_tab.h" X X #ifdef DUMB /* stuff commented out in extern.h, but needed here */ X! extern int NDECL(doapply); /**/ X! extern int NDECL(dorub); /**/ X! extern int NDECL(dojump); /**/ X! extern int NDECL(doextlist); /**/ X! extern int NDECL(dodrop); /**/ X! extern int NDECL(doddrop); /**/ X! extern int NDECL(dodown); /**/ X! extern int NDECL(doup); /**/ X! extern int NDECL(donull); /**/ X! extern int NDECL(dowipe); /**/ X! extern int NDECL(do_mname); /**/ X! extern int NDECL(ddocall); /**/ X! extern int NDECL(dotakeoff); /**/ X! extern int NDECL(doremring); /**/ X! extern int NDECL(dowear); /**/ X! extern int NDECL(doputon); /**/ X! extern int NDECL(doddoremarm); /**/ X! extern int NDECL(dokick); /**/ X! extern int NDECL(dothrow); /**/ X! extern int NDECL(doeat); /**/ X! extern int NDECL(done2); /**/ X! extern int NDECL(doengrave); /**/ X! extern int NDECL(dopickup); /**/ X! extern int NDECL(ddoinv); /**/ X! extern int NDECL(dotypeinv); /**/ X! extern int NDECL(dolook); /**/ X! extern int NDECL(doprgold); /**/ X! extern int NDECL(doprwep); /**/ X! extern int NDECL(doprarm); /**/ X! extern int NDECL(doprring); /**/ X! extern int NDECL(dopramulet); /**/ X! extern int NDECL(doprtool); /**/ X! extern int NDECL(dosuspend); /**/ X! extern int NDECL(doforce); /**/ X! extern int NDECL(doopen); /**/ X! extern int NDECL(doclose); /**/ X! extern int NDECL(dosh); /**/ X! extern int NDECL(dodiscovered); /**/ X! extern int NDECL(doset); /**/ X! extern int NDECL(dotogglepickup); /**/ X! extern int NDECL(dowhatis); /**/ X! extern int NDECL(dowhatdoes); /**/ X! extern int NDECL(dohelp); /**/ X! extern int NDECL(dohistory); /**/ X! extern int NDECL(doloot); /**/ X! extern int NDECL(dodrink); /**/ X! extern int NDECL(dodip); /**/ X! extern int NDECL(dosacrifice); /**/ X! extern int NDECL(dopray); /**/ X! extern int NDECL(doturn); /**/ X! extern int NDECL(doredraw); /**/ X! extern int NDECL(doread); /**/ X! extern int NDECL(dosave); /**/ X! extern int NDECL(dosave0); /**/ X! extern int NDECL(dosearch); /**/ X extern int FDECL(dosearch0, (int)); /**/ X! extern int NDECL(doidtrap); /**/ X! extern int NDECL(dopay); /**/ X! extern int NDECL(dosit); /**/ X! extern int NDECL(dotalk); /**/ X! extern int NDECL(docast); /**/ X! extern int NDECL(dovspell); /**/ X! extern int NDECL(doredotopl); /**/ X! extern int NDECL(dotele); /**/ X! extern int NDECL(dountrap); /**/ X! extern int NDECL(doversion); /**/ X! extern int NDECL(doextversion); /**/ X! extern int NDECL(dowield); /**/ X! extern int NDECL(dozap); /**/ X #endif /* DUMB */ X X! #ifdef OVL1 X! X! static int NDECL((*timed_occ_fn)); X! X! #endif /* OVL1 */ X! X! #ifndef OVERLAY X! static int NDECL(timed_occupation); X! static int NDECL(doextcmd); X! # ifdef POLYSELF X! static int NDECL(domonability); X! # endif X! # ifdef WIZARD X! static int NDECL(wiz_wish); X! static int NDECL(wiz_identify); X! static int NDECL(wiz_map); X! static int NDECL(wiz_genesis); X! static int NDECL(wiz_where); X! static int NDECL(wiz_detect); X! static int NDECL(wiz_level_tele); X! # endif X! # ifdef EXPLORE_MODE X! static int NDECL(enter_explore_mode); X! # endif X! # if defined(WIZARD) || defined(EXPLORE_MODE) X! static int NDECL(wiz_attributes); X! # endif X! #endif /* OVERLAY */ X! X! #ifdef REDO X! static char NDECL(popch); X #endif X! X! #ifdef STUPID_CPP X! static char FDECL(unctrl, (CHAR_P)); X! static char FDECL(unmeta, (CHAR_P)); X #endif X X+ #ifdef OVL1 X+ X /* Count down by decrementing multi */ X #ifndef OVERLAY X static X*************** X*** 124,131 **** X */ X void X set_occupation(fn, txt, xtime) X! int (*fn)(); X! char *txt; X int xtime; X { X if (xtime) { X--- 154,161 ---- X */ X void X set_occupation(fn, txt, xtime) X! int NDECL((*fn)); X! const char *txt; X int xtime; X { X if (xtime) { X*************** X*** 199,204 **** X--- 229,237 ---- X } X #endif /* REDO */ X X+ #endif /* OVL1 */ X+ #ifdef OVLB X+ X #ifndef OVERLAY X static X #endif X*************** X*** 278,283 **** X--- 311,346 ---- X } X #endif X X+ #ifdef EXPLORE_MODE X+ #ifndef OVERLAY X+ static X+ #endif X+ int X+ enter_explore_mode() X+ { X+ if(!discover && !wizard) { X+ pline("Beware! From discovery mode there will be no return to normal game."); X+ more(); X+ #ifndef MACOS X+ pline("Do you want to enter discovery mode? "); X+ if(yn() == 'y') { X+ #else X+ if(!flags.silent) SysBeep(1); X+ if(UseMacAlertText(128, "Enter discovery mode ?") == 1) { X+ #endif X+ clrlin(); X+ pline("You are now in non-scoring discovery mode."); X+ discover = TRUE; X+ } X+ else { X+ clrlin(); X+ pline("Resuming normal game."); X+ } X+ } X+ return 0; X+ } X+ #endif X+ X #ifdef WIZARD X #ifndef OVERLAY X static X*************** X*** 462,468 **** X } X #ifdef WIZARD X if (wizard) { X! Sprintf(buf, "Your luck is %d.", u.uluck); X cornline(1, buf); X } X #endif X--- 525,531 ---- X } X #ifdef WIZARD X if (wizard) { X! Sprintf(buf, "Your luck is %d.", Luck); X cornline(1, buf); X } X #endif X*************** X*** 486,491 **** X--- 549,557 ---- X } X #endif /* WIZARD || EXPLORE_MODE */ X X+ #endif /* OVLB */ X+ #ifdef OVL1 X+ X #ifndef M X #define M(c) (0x80 | (c)) X #endif X*************** X*** 573,578 **** X--- 639,645 ---- X {M('u'), dountrap}, X {'v', doversion}, X {'V', dohistory}, X+ {M('v'), doextversion}, X {'w', dowield}, X {'W', dowear}, X {M('w'), dowipe}, X*************** X*** 579,584 **** X--- 646,654 ---- X #ifdef SPELLS X {'x', dovspell}, /* Mike Stephenson */ X #endif X+ #ifdef EXPLORE_MODE X+ {'X', enter_explore_mode}, X+ #endif X /* 'y', 'Y' : go nw */ X {'z', dozap}, X #ifdef SPELLS X*************** X*** 631,636 **** X--- 701,708 ---- X "sit", "sit down", dosit, X "turn", "turn undead", doturn, X "untrap", "untrap something", dountrap, X+ "version", "print compile time options for this version of NetHack", X+ doextversion, X "wipe", "wipe off your face", dowipe, X "?", "get this list of extended commands", doextlist, X NULL, NULL, donull X*************** X*** 716,722 **** X flags.run = 3; X goto rush; X } X! if(*cmd == 'm' && movecmd(cmd[1])) { X flags.run = 0; X flags.nopick = 1; X goto walk; X--- 788,795 ---- X flags.run = 3; X goto rush; X } X! if((*cmd == 'm' || (flags.num_pad & *cmd == '-')) && X! movecmd(cmd[1])) { X flags.run = 0; X flags.nopick = 1; X goto walk; X*************** X*** 726,731 **** X--- 799,810 ---- X flags.nopick = 1; X goto rush; X } X+ if(flags.num_pad && *cmd == '0') { X+ (void)ddoinv(); /* A convenience borrowed from the PC */ X+ flags.move = 0; X+ multi = 0; X+ return; X+ } X while(tlist->f_char) { X if((*cmd & 0xff) == (tlist->f_char & 0xff)){ X /* Special case of *cmd == ' ' handled here */ X*************** X*** 735,742 **** X /* Now control-A can stop lengthy commands */ X /* in the PC version only -- use ^C-N otherwise */ X if (tlist->f_text && !occupation && multi) X! set_occupation(tlist->f_funct, tlist->f_text, X! multi); X res = (*(tlist->f_funct))(); X if(!res) { X flags.move = 0; X--- 814,826 ---- X /* Now control-A can stop lengthy commands */ X /* in the PC version only -- use ^C-N otherwise */ X if (tlist->f_text && !occupation && multi) X! #ifdef __GNULINT__ X! set_occupation(tlist->f_funct, X! tlist->f_text, multi); X! #else X! set_occupation(((struct func_tab *)tlist)->f_funct, X! tlist->f_text, multi); X! #endif X res = (*(tlist->f_funct))(); X if(!res) { X flags.move = 0; X*************** X*** 810,816 **** X movecmd(sym) /* also sets u.dz, but returns false for <> */ X char sym; X { X! register char *dp; X register const char *sdp = flags.num_pad ? ndir : sdir; X X u.dz = 0; X--- 894,900 ---- X movecmd(sym) /* also sets u.dz, but returns false for <> */ X char sym; X { X! register const char *dp; X register const char *sdp = flags.num_pad ? ndir : sdir; X X u.dz = 0; X*************** X*** 827,832 **** X--- 911,919 ---- X return !u.dz; X } X X+ #endif /* OVL1 */ X+ #ifdef OVLB X+ X int X getdir(s) X boolean s; X*************** X*** 865,870 **** X--- 952,960 ---- X return; X } X X+ #endif /* OVLB */ X+ #ifdef OVL0 X+ X int X isok(x,y) X register int x, y; X*************** X*** 872,874 **** X--- 962,966 ---- X /* x corresponds to curx, so x==1 is the first column. Ach. %% */ X return x >= 1 && x <= COLNO-1 && y >= 0 && y <= ROWNO-1; X } X+ X+ #endif /* OVL0 */ X*** src/Old/dbridge.c Mon Feb 19 17:55:39 1990 X--- src/dbridge.c Fri Feb 2 18:22:08 1990 X*************** X*** 12,17 **** X--- 12,37 ---- X X #include "hack.h" X X+ #ifdef STRONGHOLD X+ static void FDECL(redosym, (int, int)); X+ static void FDECL(get_wall_for_db, (int *, int *)); X+ static struct entity *FDECL(e_at, (int, int)); X+ static void FDECL(m_to_e, (struct monst *, struct entity *)); X+ static void FDECL(u_to_e, (struct entity *)); X+ static void FDECL(set_entity, (int, int, struct entity *)); X+ static char *FDECL(e_nam, (struct entity *)); X+ /* static char *FDECL(Enam, (struct entity *)); */ /* unused */ X+ static char *FDECL(E_phrase, (struct entity *, const char *)); X+ static boolean FDECL(e_survives_at, (struct entity *, int, int)); X+ static void FDECL(e_died, (struct entity *, int, int)); X+ static boolean FDECL(automiss, (struct entity *)); X+ static boolean FDECL(e_missed, (struct entity *, BOOLEAN_P)); X+ static boolean FDECL(e_jumps, (struct entity *)); X+ static void FDECL(do_entity, (struct entity *)); X+ #endif X+ X+ #ifdef OVL0 X+ X boolean X is_pool(x,y) X int x,y; X*************** X*** 24,30 **** X--- 44,55 ---- X return FALSE; X } X X+ #endif /* OVL0 */ X+ X #ifdef STRONGHOLD X+ X+ #ifdef OVL1 X+ X void X initsym(x,y) X int x,y; X*************** X*** 88,93 **** X--- 113,121 ---- X return (-1); X } X X+ #endif /* OVL1 */ X+ #ifdef OVL1 X+ X /* X * Use is_db_wall where you want to verify that a X * drawbridge "wall" is UP in the location x, y X*************** X*** 101,106 **** X--- 129,137 ---- X levl[x][y].diggable & W_GATEWAY); X } X X+ #endif /* OVL1 */ X+ #ifdef OVLB X+ X /* X * Return true with x,y pointing to the drawbridge if x,y initially indicate X * a drawbridge or drawbridge wall. X*************** X*** 169,174 **** X--- 200,208 ---- X wall = VWALL; X x2++; X break; X+ default: X+ impossible("bad direction in create_drawbridge"); X+ /* fall through */ X case DB_WEST: X wall = VWALL; X x2--; X*************** X*** 308,314 **** X static char * X E_phrase(etmp, verb) X struct entity *etmp; X! char *verb; X { X char wholebuf[80], verbbuf[30]; X X--- 342,348 ---- X static char * X E_phrase(etmp, verb) X struct entity *etmp; X! const char *verb; X { X char wholebuf[80], verbbuf[30]; X X*************** X*** 427,433 **** X X if (is_flyer(etmp->edata) && X (is_u(etmp)? !Sleeping : X! (!etmp->emon->mfroz && !etmp->emon->msleep))) X /* flying requires mobility */ X misses = 5; /* out of 8 */ X else X--- 461,467 ---- X X if (is_flyer(etmp->edata) && X (is_u(etmp)? !Sleeping : X! (etmp->emon->mcanmove && !etmp->emon->msleep))) X /* flying requires mobility */ X misses = 5; /* out of 8 */ X else X*************** X*** 461,467 **** X int tmp = 4; /* out of 10 */ X X if (is_u(etmp)? (Sleeping || Fumbling) : X! (etmp->emon->mfroz || etmp->emon->msleep || X !etmp->edata->mmove)) X return(FALSE); X X--- 495,501 ---- X int tmp = 4; /* out of 10 */ X X if (is_u(etmp)? (Sleeping || Fumbling) : X! (!etmp->emon->mcanmove || etmp->emon->msleep || X !etmp->edata->mmove)) X return(FALSE); X X*************** X*** 664,669 **** X--- 698,704 ---- X pline("%s behind the drawbridge.", X E_phrase(etmp, "disappear")); X if (!e_survives_at(etmp, etmp->ex, etmp->ey)) { X+ killer_format = KILLED_BY_AN; X killer = "closing drawbridge"; X e_died(etmp, 0, CRUSHING); /* no message */ X return; X*************** X*** 697,703 **** X else X pline("%s into the moat.", X E_phrase(etmp, "fall")); X! killer = "fall from a drawbridge"; X e_died(etmp, e_inview? 1 : 0, /* CRUSHING is arbitrary */ X (is_pool(etmp->ex, etmp->ey))? DROWNING : CRUSHING); X /* corpse */ X--- 732,739 ---- X else X pline("%s into the moat.", X E_phrase(etmp, "fall")); X! killer_format = NO_KILLER_PREFIX; X! killer = "fell from a drawbridge"; X e_died(etmp, e_inview? 1 : 0, /* CRUSHING is arbitrary */ X (is_pool(etmp->ex, etmp->ey))? DROWNING : CRUSHING); X /* corpse */ X*************** X*** 832,837 **** X--- 868,874 ---- X if (e_inview) X pline("%s blown apart by flying debris", X E_phrase(etmp2, "are")); X+ killer_format = KILLED_BY_AN; X killer = "exploding drawbridge"; X e_died(etmp2, e_inview? 2 : 3, CRUSHING);/* no corpse */ X } /* nothing which is vulnerable can survive this */ X*************** X*** 862,867 **** X--- 899,905 ---- X pline("%s from shrapnel", X E_phrase(etmp1, "die")); X #endif X+ killer_format = KILLED_BY_AN; X killer = "collapsing drawbridge"; X e_died(etmp1, e_inview? 0 : 1, CRUSHING); /* corpse */ X } X*************** X*** 869,873 **** X--- 907,914 ---- X redosym(x,y); X redosym(x2,y2); X } X+ X+ X+ #endif /* OVLB */ X X #endif /* STRONGHOLD /**/ X*** src/Old/decl.c Mon Feb 19 17:56:16 1990 X--- src/decl.c Sun Feb 18 16:37:36 1990 X*************** X*** 41,48 **** X int doorindex = 0; X X char *save_cm = 0; X! char *killer = 0; X! char *nomovemsg = 0; X const char nul[40] = DUMMY; /* contains zeros */ X char plname[PL_NSIZ] = DUMMY; /* player name */ X char pl_character[PL_CSIZ] = DUMMY; X--- 41,49 ---- X int doorindex = 0; X X char *save_cm = 0; X! int killer_format = 0; X! const char *killer = 0; X! const char *nomovemsg = 0; X const char nul[40] = DUMMY; /* contains zeros */ X char plname[PL_NSIZ] = DUMMY; /* player name */ X char pl_character[PL_CSIZ] = DUMMY; X*************** X*** 61,69 **** X #endif X X #ifdef SMALLDATA X! char *occtxt = 0; X #else X! char *occtxt = DUMMY; X #endif X const char quitchars[] = " \r\n\033"; X const char vowels[] = "aeiouAEIOU"; X--- 62,70 ---- X #endif X X #ifdef SMALLDATA X! const char *occtxt = 0; X #else X! const char *occtxt = DUMMY; X #endif X const char quitchars[] = " \r\n\033"; X const char vowels[] = "aeiouAEIOU"; X*************** X*** 87,93 **** X--- 88,98 ---- X #endif X X #ifdef TEXTCOLOR X+ # ifdef TOS X+ const char *hilites[MAXCOLORS]; /* terminal escapes for the various colors */ X+ # else X char *hilites[MAXCOLORS]; /* terminal escapes for the various colors */ X+ # endif X #endif X #ifdef MSDOS X char hackdir[PATHLEN]; /* where rumors, help, record are */ X*************** X*** 202,239 **** X symbol_array savesyms = DUMMY; X #endif X X! char *explainsyms[MAXPCHARS] = { X! "a dark part of a room", "a wall", "a wall", X! "a wall", "a wall", "a wall", X! "a wall", "a wall", "a wall", X! "a wall", "a wall", "a wall", X! "a wall", "a wall", "a wall", X! "a wall", "a doorway", "an open door", X! "an open door", "a closed door", "the floor of a room", X! "a corridor", "a staircase up", "a staircase down", X! "a trap", "a web", "a water filled area", X #ifdef FOUNTAINS X! "a fountain", X #else X "", X #endif X #ifdef SINKS X! "a sink", X #else X "", X #endif X #ifdef THRONES X! "an opulent throne", X #else X "", X #endif X #ifdef ALTARS X! "an altar", X #else X "", X #endif X #ifdef STRONGHOLD X! "a ladder up", "a ladder down", "a drawbridge", "a drawbridge" X #else X "", "", "", "" X #endif X--- 207,244 ---- X symbol_array savesyms = DUMMY; X #endif X X! const char *explainsyms[MAXPCHARS] = { X! "dark part of a room", "wall", "wall", X! "wall", "wall", "wall", X! "wall", "wall", "wall", X! "wall", "wall", "wall", X! "wall", "wall", "wall", X! "wall", "doorway", "open door", X! "open door", "closed door", "floor of a room", X! "corridor", "staircase up", "staircase down", X! "trap", "web", "water filled area", X #ifdef FOUNTAINS X! "fountain", X #else X "", X #endif X #ifdef SINKS X! "sink", X #else X "", X #endif X #ifdef THRONES X! "opulent throne", X #else X "", X #endif X #ifdef ALTARS X! "altar", X #else X "", X #endif X #ifdef STRONGHOLD X! "ladder up", "ladder down", "drawbridge", "drawbridge" X #else X "", "", "", "" X #endif X*************** X*** 273,275 **** X--- 278,341 ---- X X const char nothing_happens[] = "Nothing happens."; X const char thats_enough_tries[] = "That's enough tries!"; X+ X+ const char monsyms[] = { S_HUMAN, S_GHOST, S_ANT, S_BLOB, S_COCKATRICE, S_DOG, X+ S_EYE, S_FELINE, S_GREMLIN, S_HUMANOID, S_IMP, S_JELLY, S_KOBOLD, X+ S_LEPRECHAUN, S_MIMIC, S_NYMPH, S_ORC, S_PIERCER, S_QUADRUPED, S_RODENT, X+ S_SPIDER, S_TRAPPER, S_UNICORN, S_VORTEX, S_WORM, S_XAN, S_YLIGHT, S_ZRUTY, X+ S_APE, S_BAT, S_CENTAUR, S_DRAGON, S_ELEMENTAL, S_FUNGUS, S_GNOME, S_GIANT, X+ S_STALKER, S_JABBERWOCK, X+ #ifdef KOPS X+ S_KOP, X+ #endif X+ S_LICH, S_MUMMY, S_NAGA, S_OGRE, S_PUDDING, S_QUANTMECH, S_RUSTMONST, S_SNAKE, X+ S_TROLL, S_UMBER, S_VAMPIRE, S_WRAITH, S_XORN, S_YETI, S_ZOMBIE, X+ #ifdef GOLEMS X+ S_GOLEM, X+ #endif X+ S_DEMON, S_EEL, S_LIZARD, X+ #ifdef WORM X+ S_WORM_TAIL, X+ #endif X+ 0 }; X+ X+ const char objsyms[] = { WEAPON_SYM, ARMOR_SYM, POTION_SYM, SCROLL_SYM, X+ WAND_SYM, X+ #ifdef SPELLS X+ SPBOOK_SYM, X+ #endif X+ RING_SYM, AMULET_SYM, FOOD_SYM, TOOL_SYM, GEM_SYM, GOLD_SYM, X+ ROCK_SYM, BALL_SYM, CHAIN_SYM, 0 }; X+ X+ const char *monexplain[] = { X+ "human", "ghost", "ant or other insect", "blob", "cockatrice", X+ "dog or other canine", "eye or sphere", "feline", "gremlin", "humanoid", X+ "imp or minor demon", "jelly", "kobold", "leprechaun", "mimic", X+ "nymph", "orc", "piercer", "quadruped", "rodent", X+ "spider", "trapper or lurker above", "unicorn", "vortex", "worm", X+ "xan or other mythical/fantastic insect", "yellow light", "zruty", X+ "ape", "bat", "centaur", "dragon", "elemental", X+ "fungus or mold", "gnome", "giant humanoid", "invisible stalker", "jabberwock", X+ #ifdef KOPS X+ "Keystone Kop", X+ #endif X+ "lich", "mummy", "naga", "ogre", "pudding or ooze", X+ "quantum mechanic", "rust monster", "snake", "troll", "umber hulk", X+ "vampire", "wraith", "xorn", "yeti", "zombie", X+ #ifdef GOLEMS X+ "golem", X+ #endif X+ "demon", "sea monster", "lizard", X+ #ifdef WORM X+ "long worm tail", X+ #endif X+ }; X+ X+ const char *objexplain[] = { X+ "weapon", "suit or piece of armor", "potion", "scroll", "wand", X+ #ifdef SPELLS X+ "spell book", X+ #endif X+ "ring", "amulet", "piece of food", "useful item (pick-axe, key, lamp...)", X+ "gem or rock", "pile of gold", "boulder or statue", "iron ball", "iron chain" X+ }; X*** src/Old/demon.c Mon Feb 19 17:56:35 1990 X--- src/demon.c Wed Jan 31 19:34:15 1990 X*************** X*** 9,15 **** X register struct permonst *ptr; X { X #ifdef INFERNO X! register int dtype, cnt = 0; X X if(is_dprince(ptr) || (ptr == &mons[PM_WIZARD_OF_YENDOR])) { X X--- 9,15 ---- X register struct permonst *ptr; X { X #ifdef INFERNO X! register int dtype = 0, cnt = 0; X X if(is_dprince(ptr) || (ptr == &mons[PM_WIZARD_OF_YENDOR])) { X X*************** X*** 44,53 **** X #define Athome (Inhell && !mtmp->cham) X X int X! demon_talk(mtmp) /* returns 1 if he won't attack. */ X register struct monst *mtmp; X { X- char *x_monnam(), *Xmonnam(); X long demand, offer; X X #ifdef NAMED_ITEMS X--- 44,52 ---- X #define Athome (Inhell && !mtmp->cham) X X int X! demon_talk(mtmp) /* returns 1 if it won't attack. */ X register struct monst *mtmp; X { X long demand, offer; X X #ifdef NAMED_ITEMS X*************** X*** 58,70 **** X } X #endif /* NAMED_ITEMS */ X X- if(is_ndemon(mtmp->data)) { /* not for regular '&'s */ X- X- pline("%s mutters something about awful working conditions.", X- Xmonnam(mtmp)); X- return(0); X- } X- X /* Slight advantage given. */ X if(is_dprince(mtmp->data) && mtmp->minvis) { X mtmp->minvis = 0; X--- 57,62 ---- X*************** X*** 73,79 **** X } X if(u.usym == S_DEMON) { /* Won't blackmail their own. */ X X! pline("%s says, \"Good hunting %s.\" and vanishes.", X Xmonnam(mtmp), flags.female ? "Sister" : "Brother"); X rloc(mtmp); X return(1); X--- 65,71 ---- X } X if(u.usym == S_DEMON) { /* Won't blackmail their own. */ X X! pline("%s says, \"Good hunting, %s.\" and vanishes.", X Xmonnam(mtmp), flags.female ? "Sister" : "Brother"); X rloc(mtmp); X return(1); X*************** X*** 87,93 **** X Xmonnam(mtmp), demand, plur(demand)); X X if((offer = bribe(mtmp)) >= demand) { X! pline("%s vanishes laughing about cowardly mortals.", X Xmonnam(mtmp)); X } else { X if((long)rnd(40) > (demand - offer)) { X--- 79,85 ---- X Xmonnam(mtmp), demand, plur(demand)); X X if((offer = bribe(mtmp)) >= demand) { X! pline("%s vanishes, laughing about cowardly mortals.", X Xmonnam(mtmp)); X } else { X if((long)rnd(40) > (demand - offer)) { X*** src/Old/do.c Mon Feb 19 17:56:55 1990 X--- src/do.c Mon Feb 19 10:18:11 1990 X*************** X*** 1,4 **** X! /* SCCS Id: @(#)do.c 3.0 89/11/15 X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X /* NetHack may be freely redistributed. See license for details. */ X X--- 1,4 ---- X! /* SCCS Id: @(#)do.c 3.0 89/11/20 X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X /* NetHack may be freely redistributed. See license for details. */ X X*************** X*** 6,21 **** X X #include "hack.h" X X! #if defined(DGK) && !defined(OLD_TOS) X extern struct finfo fileinfo[]; X #else X extern boolean level_exists[]; X #endif X X #ifndef OVERLAY X static int FDECL(drop, (struct obj *)); X #endif X X static const char drop_types[] = { '0', GOLD_SYM, '#', 0 }; X X int X--- 6,32 ---- X X #include "hack.h" X X! #if defined(DGK) X extern struct finfo fileinfo[]; X #else X extern boolean level_exists[]; X #endif X X+ #ifdef SINKS X+ static void FDECL(trycall, (struct obj *)); X+ static void FDECL(dosinkring, (struct obj *)); X+ #endif X #ifndef OVERLAY X static int FDECL(drop, (struct obj *)); X #endif X+ static void NDECL(litter); X+ #ifndef OVERLAY X+ static int NDECL(wipeoff); X+ #endif X+ boolean NDECL(drag_down); X X+ #ifdef OVLB X+ X static const char drop_types[] = { '0', GOLD_SYM, '#', 0 }; X X int X*************** X*** 23,28 **** X--- 34,42 ---- X return(drop(getobj(drop_types, "drop"))); X } X X+ #endif /* OVLB */ X+ #ifdef OVL0 X+ X /* Used for objects which sometimes do special things when dropped; must be X * called with the object not in any chain. Returns 1 if the object is X * gone. X*************** X*** 58,64 **** X if (Blind) You("hear the boulder roll."); X else pline("The boulder %sfills a %s.", X t->tseen ? "" : "triggers and ", X! t->ttyp == TRAPDOOR ? "trapdoor" : "pit"); X deltrap(t); X if (u.utrap && x==u.ux && y==u.uy) { X u.utrap = 0; X--- 72,78 ---- X if (Blind) You("hear the boulder roll."); X else pline("The boulder %sfills a %s.", X t->tseen ? "" : "triggers and ", X! t->ttyp == TRAPDOOR ? "trap door" : "pit"); X deltrap(t); X if (u.utrap && x==u.ux && y==u.uy) { X u.utrap = 0; X*************** X*** 66,72 **** X if (!passes_walls(uasmon)) { X #endif X pline("Unfortunately, you were still in it."); X! losehp(rnd(15), "burial beneath a boulder"); X #ifdef POLYSELF X } X #endif X--- 80,88 ---- X if (!passes_walls(uasmon)) { X #endif X pline("Unfortunately, you were still in it."); X! losehp(rnd(15), X! self_pronoun("dropped a boulder onto %sself","him"), X! NO_KILLER_PREFIX); X #ifdef POLYSELF X } X #endif X*************** X*** 81,86 **** X--- 97,105 ---- X return FALSE; X } X X+ #endif /* OVL0 */ X+ #ifdef OVLB X+ X #ifdef ALTARS X void X doaltarobj(obj) /* obj is an object dropped on an altar */ X*************** X*** 241,247 **** X boolean X canletgo(obj,word) X register struct obj *obj; X! register char *word; X { X if(obj->owornmask & (W_ARMOR | W_RING | W_AMUL | W_TOOL)){ X if (*word) X--- 260,266 ---- X boolean X canletgo(obj,word) X register struct obj *obj; X! register const char *word; X { X if(obj->owornmask & (W_ARMOR | W_RING | W_AMUL | W_TOOL)){ X if (*word) X*************** X*** 249,259 **** X return(FALSE); X } X if (obj->otyp == LOADSTONE && obj->cursed) { X- obj->bknown = 1; X if (*word) X pline("For some reason, you cannot %s the stone%s!", X word, X plur((long)obj->quan)); X return(FALSE); X } X #ifdef WALKIES X--- 268,289 ---- X return(FALSE); X } X if (obj->otyp == LOADSTONE && obj->cursed) { X if (*word) X pline("For some reason, you cannot %s the stone%s!", X word, X plur((long)obj->quan)); X+ /* Kludge -- see invent.c */ X+ if (obj->corpsenm) { X+ struct obj *otmp; X+ X+ otmp = obj; X+ obj = obj->nobj; X+ obj->quan += otmp->quan; X+ obj->owt = weight(obj); X+ freeinv(otmp); X+ obfree(otmp, obj); X+ } X+ obj->bknown = 1; X return(FALSE); X } X #ifdef WALKIES X*************** X*** 400,406 **** X #ifdef STRONGHOLD X levl[u.ux][u.uy].typ == LADDER ? "ladder" : X #endif X! "trapdoor"); X return(0); X } X X--- 430,436 ---- X #ifdef STRONGHOLD X levl[u.ux][u.uy].typ == LADDER ? "ladder" : X #endif X! "trap door"); X return(0); X } X X*************** X*** 415,421 **** X if (levl[u.ux][u.uy].typ == LADDER) at_ladder = TRUE; X #endif X if (trap) X! pline("You jump into the trapdoor..."); X goto_level(dlevel+1, !trap, TRUE); X #ifdef STRONGHOLD X at_ladder = FALSE; X--- 445,456 ---- X if (levl[u.ux][u.uy].typ == LADDER) at_ladder = TRUE; X #endif X if (trap) X! #ifdef POLYSELF X! You("%s into the trap door.", X! locomotion(uasmon, "jump")); X! #else X! You("jump into the trap door."); X! #endif X goto_level(dlevel+1, !trap, TRUE); X #ifdef STRONGHOLD X at_ladder = FALSE; X*************** X*** 461,469 **** X--- 496,512 ---- X X #ifdef ENDGAME X if (dlevel == 1) { X+ #ifdef MACOS X+ if(!flags.silent) SysBeep(20); X+ if(UseMacAlertText(128, X+ "Beware, there will be no return! Still climb?") != 1) { X+ return 0; X+ } X+ #else X pline("Beware, there will be no return! Still climb? "); X if (yn() != 'y') return(0); X else more(); X+ #endif /* MACOS */ X } X #endif X #ifdef WALKIES X*************** X*** 537,554 **** X if(forward) { X if(rn2(6)) { X You("get dragged downstairs by the iron ball."); X! losehp(rnd(6), "iron ball accident"); X return(TRUE); X } X } else { X if(rn2(2)) { X pline("The iron ball smacks into you!"); X! losehp(rnd(20), "iron ball collision"); X dragchance -= 2; X } X if(dragchance >= rnd(6)) { X You("get dragged downstairs by the iron ball."); X! losehp(rnd(3), "iron ball accident"); X return(TRUE); X } X } X--- 580,599 ---- X if(forward) { X if(rn2(6)) { X You("get dragged downstairs by the iron ball."); X! losehp(rnd(6), "dragged downstairs by an iron ball", X! NO_KILLER_PREFIX); X return(TRUE); X } X } else { X if(rn2(2)) { X pline("The iron ball smacks into you!"); X! losehp(rnd(20), "iron ball collision", KILLED_BY_AN); X dragchance -= 2; X } X if(dragchance >= rnd(6)) { X You("get dragged downstairs by the iron ball."); X! losehp(rnd(3), "dragged downstairs by an iron ball", X! NO_KILLER_PREFIX); X return(TRUE); X } X } X*************** X*** 555,560 **** X--- 600,607 ---- X return(FALSE); X } X X+ int save_dlevel = 0; X+ X void X goto_level(newlevel, at_stairs, falling) X register int newlevel; X*************** X*** 613,626 **** X if(Fire_resistance) { X pline("But the fire doesn't seem to harm you."); X } else { X! int save_dlevel = dlevel; X! X You("burn to a crisp."); X You("die..."); X dlevel = maxdlevel = newlevel; X killer = "visit to hell"; X done(BURNING); X dlevel = newlevel = save_dlevel; /* in case they survive */ X } X } X X--- 660,674 ---- X if(Fire_resistance) { X pline("But the fire doesn't seem to harm you."); X } else { X! save_dlevel = dlevel; X You("burn to a crisp."); X You("die..."); X dlevel = maxdlevel = newlevel; X+ killer_format = KILLED_BY_AN; X killer = "visit to hell"; X done(BURNING); X dlevel = newlevel = save_dlevel; /* in case they survive */ X+ save_dlevel = 0; X } X } X X*************** X*** 645,651 **** X if (FSOpen(fileName, t->system.sysVRefNum, &refNum)) { X if (er = Create(&fileName,t->system.sysVRefNum, X CREATOR,LEVEL_TYPE)) X! SysBeep(1); X } else { X (void)SetEOF(refNum,0L); X (void)FSClose(refNum); X--- 693,699 ---- X if (FSOpen(fileName, t->system.sysVRefNum, &refNum)) { X if (er = Create(&fileName,t->system.sysVRefNum, X CREATOR,LEVEL_TYPE)) X! SysBeep(20); X } else { X (void)SetEOF(refNum,0L); X (void)FSClose(refNum); X*************** X*** 694,701 **** X if(u.uswallow) /* idem */ X u.uswldtim = u.uswallow = 0; X flags.nscrinh = 1; X! u.ux = FAR; /* hack */ X! (void) inshop(); /* probably was a trapdoor */ X X #ifdef DGK X # ifdef ZEROCOMP X--- 742,749 ---- X if(u.uswallow) /* idem */ X u.uswldtim = u.uswallow = 0; X flags.nscrinh = 1; X! u.ux = u.ux0 = FAR; /* hack */ X! (void) inshop(); /* probably was a trap door */ X X #ifdef DGK X # ifdef ZEROCOMP X*************** X*** 733,739 **** X # ifdef ENDGAME X dlevel == ENDLEVEL || X # endif X! #if defined(DGK) && !defined(OLD_TOS) X /* If the level has no .where yet, it hasn't been made */ X !fileinfo[dlevel].where) X #else X--- 781,787 ---- X # ifdef ENDGAME X dlevel == ENDLEVEL || X # endif X! #if defined(DGK) X /* If the level has no .where yet, it hasn't been made */ X !fileinfo[dlevel].where) X #else X*************** X*** 741,747 **** X #endif X mklev(); X else { X! #if defined(DGK) && !defined(OLD_TOS) X /* If not currently accessible, swap it in. */ X if (fileinfo[dlevel].where != ACTIVE) X swapin_file(dlevel); X--- 789,795 ---- X #endif X mklev(); X else { X! #if defined(DGK) X /* If not currently accessible, swap it in. */ X if (fileinfo[dlevel].where != ACTIVE) X swapin_file(dlevel); X*************** X*** 762,767 **** X--- 810,825 ---- X (void) close(fd); X } X X+ #ifdef MACOS X+ { X+ OSErr er; X+ struct term_info *t; X+ extern WindowPtr HackWindow; X+ X+ t = (term_info *)GetWRefCon(HackWindow); X+ SetVol(0L,t->system.sysVRefNum); X+ } X+ #endif X #ifdef ENDGAME X if(dlevel != ENDLEVEL) X #endif X*************** X*** 820,830 **** X } X placebc(1); X } X! losehp(rnd(3), "fall"); X selftouch("Falling, you"); X } X } X! } else { /* trapdoor or level_tele */ X register int tryct = 0; X do { X #ifdef STRONGHOLD X--- 878,888 ---- X } X placebc(1); X } X! losehp(rnd(3), "falling downstairs", KILLED_BY); X selftouch("Falling, you"); X } X } X! } else { /* trap door or level_tele */ X register int tryct = 0; X do { X #ifdef STRONGHOLD X*************** X*** 865,871 **** X body_part(HEAD)); X if (uarmh) X Your("helmet doesn't help too much..."); X! losehp(rnd(25), "iron ball"); X } X } X placebc(1); X--- 923,931 ---- X body_part(HEAD)); X if (uarmh) X Your("helmet doesn't help too much..."); X! losehp(rnd(25), X! "Crunched in the head by an iron ball", X! NO_KILLER_PREFIX); X } X } X placebc(1); X*************** X*** 878,883 **** X--- 938,947 ---- X X losedogs(); X if(MON_AT(u.ux, u.uy)) mnexto(m_at(u.ux, u.uy)); X+ if(MON_AT(u.ux, u.uy)) { X+ impossible("mnexto failed (do.c)?"); X+ rloc(m_at(u.ux, u.uy)); X+ } X flags.nscrinh = 0; X setsee(); X seeobjs(); /* make old cadavers disappear - riv05!a3 */ X*************** X*** 949,963 **** X struct obj * X splitobj(obj, num) register struct obj *obj; register int num; { X register struct obj *otmp; X! otmp = newobj(0); X *otmp = *obj; /* copies whole structure */ X otmp->o_id = flags.ident++; X- otmp->onamelth = 0; X obj->quan = num; X obj->owt = weight(obj); X otmp->quan -= num; X otmp->owt = weight(otmp); /* -= obj->owt ? */ X obj->nobj = obj->nexthere = otmp; X if(obj->unpaid) splitbill(obj,otmp); X return(otmp); X } X--- 1013,1028 ---- X struct obj * X splitobj(obj, num) register struct obj *obj; register int num; { X register struct obj *otmp; X! otmp = newobj(obj->onamelth); X *otmp = *obj; /* copies whole structure */ X otmp->o_id = flags.ident++; X obj->quan = num; X obj->owt = weight(obj); X otmp->quan -= num; X otmp->owt = weight(otmp); /* -= obj->owt ? */ X obj->nobj = obj->nexthere = otmp; X+ if (obj->onamelth) X+ (void)strncpy(ONAME(otmp), ONAME(obj), (int)obj->onamelth); X if(obj->unpaid) splitbill(obj,otmp); X return(otmp); X } X*************** X*** 994,996 **** X--- 1059,1063 ---- X Wounded_legs = 0; X } X } X+ X+ #endif /* OVLB */ X*** src/Old/do_name.c Mon Feb 19 17:57:44 1990 X--- src/do_name.c Mon Feb 19 14:45:58 1990 X*************** X*** 4,9 **** X--- 4,18 ---- X X #include "hack.h" X X+ #ifdef NAMED_ITEMS X+ # include <ctype.h> X+ #endif X+ X+ static char *FDECL(visctrl, (CHAR_P)); X+ static void FDECL(do_oname, (struct obj *)); X+ X+ #ifdef OVLB X+ X static X char * X visctrl(c) X*************** X*** 29,39 **** X void X getpos(cc,force,goal) X coord *cc; X! int force; char *goal; X { X register int cx, cy, i, c; X const char *sdp = flags.num_pad ? ndir : sdir; X if(flags.verbose) pline("(For instructions type a ?)"); X cx = cc->x; X cy = cc->y; X #ifdef CLIPPING X--- 38,64 ---- X void X getpos(cc,force,goal) X coord *cc; X! int force; X! const char *goal; X { X register int cx, cy, i, c; X const char *sdp = flags.num_pad ? ndir : sdir; X+ #ifdef MACOS X+ extern short macflags; X+ Boolean fUpdateFlagOn; X+ long ticks; X+ #endif X+ X if(flags.verbose) pline("(For instructions type a ?)"); X+ #ifdef MACOS X+ if ((macflags & fDoUpdate) && (macflags & fDoNonKeyEvt)) { X+ fUpdateFlagOn = true; X+ } else { X+ fUpdateFlagOn = false; X+ macflags |= (fDoUpdate | fDoNonKeyEvt); X+ } X+ macflags |= fMoveWRTMouse; X+ #endif X cx = cc->x; X cy = cc->y; X #ifdef CLIPPING X*************** X*** 63,68 **** X--- 88,98 ---- X "use hjkl or ." : X "aborted"); X if(force) goto nxtc; X+ #ifdef MACOS X+ macflags &= ~fMoveWRTMouse; X+ if (!fUpdateFlagOn) X+ macflags &= ~(fDoUpdate | fDoNonKeyEvt); X+ #endif X cc->x = -1; X cc->y = 0; X return; X*************** X*** 75,91 **** X curs(cx,cy+2); X #endif X } X cc->x = cx; X cc->y = cy; X return; X } X X int X do_mname(){ X char buf[BUFSZ]; X coord cc; X! register int cx,cy,lth,i; X! register struct monst *mtmp, *mtmp2; X register char *curr; X boolean blank; X X--- 105,151 ---- X curs(cx,cy+2); X #endif X } X+ #ifdef MACOS X+ macflags &= ~fMoveWRTMouse; X+ if (!fUpdateFlagOn) X+ macflags &= ~(fDoUpdate | fDoNonKeyEvt); X+ #endif X cc->x = cx; X cc->y = cy; X return; X } X X+ struct monst * X+ christen_monst(mtmp, name) X+ struct monst *mtmp; X+ const char *name; X+ { X+ register int lth,i; X+ register struct monst *mtmp2; X+ X+ /* dogname and catname are 63-character arrays; the generic naming X+ * function do_mname() below also cut names off at 63 characters */ X+ lth = strlen(name)+1; X+ if(lth > 63){ X+ lth = 63; X+ } X+ mtmp2 = newmonst(mtmp->mxlth + lth); X+ *mtmp2 = *mtmp; X+ for(i=0; i<mtmp->mxlth; i++) X+ ((char *) mtmp2->mextra)[i] = ((char *) mtmp->mextra)[i]; X+ mtmp2->mnamelth = lth; X+ (void)strncpy(NAME(mtmp2), name, lth); X+ NAME(mtmp2)[lth-1] = 0; X+ replmon(mtmp,mtmp2); X+ return(mtmp2); X+ } X+ X int X do_mname(){ X char buf[BUFSZ]; X coord cc; X! register int cx,cy; X! register struct monst *mtmp; X register char *curr; X boolean blank; X X*************** X*** 127,144 **** X } X return(0); X } X! lth = strlen(buf)+1; X! if(lth > 63){ X! buf[62] = 0; X! lth = 63; X! } X! mtmp2 = newmonst(mtmp->mxlth + lth); X! *mtmp2 = *mtmp; X! for(i=0; i<mtmp->mxlth; i++) X! ((char *) mtmp2->mextra)[i] = ((char *) mtmp->mextra)[i]; X! mtmp2->mnamelth = lth; X! Strcpy(NAME(mtmp2), buf); X! replmon(mtmp,mtmp2); X return(0); X } X X--- 187,193 ---- X } X return(0); X } X! (void) christen_monst(mtmp, buf); X return(0); X } X X*************** X*** 166,173 **** X if(blank) *buf = '\0'; X X #ifdef NAMED_ITEMS X! if(is_artifact(obj) || restr_name(obj, buf)) X! pline("Somehow you can't seem to engrave that word."); X else X #endif X (void)oname(obj, buf, 1); X--- 215,234 ---- X if(blank) *buf = '\0'; X X #ifdef NAMED_ITEMS X! if(is_artifact(obj)) X! pline("The artifact seems to resist the attempt."); X! else if (restr_name(obj, buf) || exist_artifact(obj, buf)) { X! int n = rn2(strlen(buf)); X! char c; X! X! while (tolower(buf[n]) == (c = 'a' + rn2('z'-'a'))); X! if (isupper(buf[n])) buf[n] = toupper(c); X! else buf[n] = c; X! pline("While engraving your hand slips."); X! more(); X! You("engrave: \"%s\".",buf); X! (void)oname(obj, buf, 1); X! } X else X #endif X (void)oname(obj, buf, 1); X*************** X*** 176,182 **** X struct obj * X oname(obj, buf, ininv) X register struct obj *obj; X! char *buf; X register int ininv; X { X register struct obj *otmp, *otmp2, *contents; X--- 237,243 ---- X struct obj * X oname(obj, buf, ininv) X register struct obj *obj; X! const char *buf; X register int ininv; X { X register struct obj *otmp, *otmp2, *contents; X*************** X*** 183,190 **** X register int lth; X X lth = *buf ? strlen(buf)+1 : 0; X if(lth > 63){ X- buf[62] = 0; X lth = 63; X } X otmp2 = newobj(lth); X--- 244,257 ---- X register int lth; X X lth = *buf ? strlen(buf)+1 : 0; X+ #ifdef NAMED_ITEMS X+ /* if named artifact exists in the game, do not create another */ X+ if (exist_artifact(obj, buf)) X+ lth = 0; X+ else X+ artifact_exists(obj, buf, TRUE); X+ #endif X if(lth > 63){ X lth = 63; X } X otmp2 = newobj(lth); X*************** X*** 198,205 **** X */ X if (buf) (void)donull(); X #endif X! if(lth) Strcpy(ONAME(otmp2), buf); X! X if (obj->owornmask) { X /* Note: dying by burning in Hell causes problems if you X * try doing this when owornmask isn't set. X--- 265,274 ---- X */ X if (buf) (void)donull(); X #endif X! if(lth) { X! (void)strncpy(ONAME(otmp2), buf, lth); X! ONAME(otmp2)[lth-1] = 0; X! } X if (obj->owornmask) { X /* Note: dying by burning in Hell causes problems if you X * try doing this when owornmask isn't set. X*************** X*** 235,241 **** X #ifdef SPELLS X SPBOOK_SYM, X #endif X! ARMOR_SYM, 0 }; X X int X ddocall() X--- 304,310 ---- X #ifdef SPELLS X SPBOOK_SYM, X #endif X! ARMOR_SYM, TOOL_SYM, 0 }; X X int X ddocall() X*************** X*** 296,302 **** X X /* clear old name */ X str1 = &(objects[obj->otyp].oc_uname); X! if(*str1) free(*str1); X X /* uncalls item if all spaces */ X for (str = buf, blank = 1; *str; blank = (*str++ == ' ')); X--- 365,371 ---- X X /* clear old name */ X str1 = &(objects[obj->otyp].oc_uname); X! if(*str1) free((genericptr_t)*str1); X X /* uncalls item if all spaces */ X for (str = buf, blank = 1; *str; blank = (*str++ == ' ')); X*************** X*** 311,323 **** X *str1 = str; X } X X! const char *ghostnames[] = { X /* these names should have length < PL_NSIZ */ X /* Capitalize the names for aesthetics -dgk */ X "Adri", "Andries", "Andreas", "Bert", "David", "Dirk", "Emile", X "Frans", "Fred", "Greg", "Hether", "Jay", "John", "Jon", "Karnov", X "Kay", "Kenny", "Kevin", "Maud", "Michiel", "Mike", "Peter", "Robert", X! "Ron", "Tom", "Wilmar", "Nick Danger", "Phoenix", "Miracleman", X "Stephan", "Lance Braccus", "Shadowhawk" X }; X X--- 380,395 ---- X *str1 = str; X } X X! #endif /*OVLB*/ X! #ifdef OVL0 X! X! static const char *ghostnames[] = { X /* these names should have length < PL_NSIZ */ X /* Capitalize the names for aesthetics -dgk */ X "Adri", "Andries", "Andreas", "Bert", "David", "Dirk", "Emile", X "Frans", "Fred", "Greg", "Hether", "Jay", "John", "Jon", "Karnov", X "Kay", "Kenny", "Kevin", "Maud", "Michiel", "Mike", "Peter", "Robert", X! "Ron", "Tom", "Wilmar", "Nick Danger", "Phoenix", "Havok", X "Stephan", "Lance Braccus", "Shadowhawk" X }; X X*************** X*** 361,367 **** X { register const char *gn = (const char *) mtmp->mextra; X if(!*gn) { /* might also look in scorefile */ X gn = ghostnames[rn2(SIZE(ghostnames))]; X! Strcpy((char *) mtmp->mextra, !rn2(5) ? plname : gn); X } X Sprintf(buf, "%s's ghost", (char *) mtmp->mextra); X } X--- 433,439 ---- X { register const char *gn = (const char *) mtmp->mextra; X if(!*gn) { /* might also look in scorefile */ X gn = ghostnames[rn2(SIZE(ghostnames))]; X! Strcpy((char *) mtmp->mextra, !rn2(5) ? (const char *)plname : gn); X } X Sprintf(buf, "%s's ghost", (char *) mtmp->mextra); X } X*************** X*** 381,386 **** X--- 453,461 ---- X return(buf); X } X X+ #endif /* OVL0 */ X+ #ifdef OVLB X+ X char * X lmonnam(mtmp) X register struct monst *mtmp; X*************** X*** 388,393 **** X--- 463,471 ---- X return(x_monnam(mtmp, 1)); X } X X+ #endif /* OVLB */ X+ #ifdef OVL0 X+ X char * X mon_nam(mtmp) X register struct monst *mtmp; X*************** X*** 405,414 **** X return(bp); X } X X char * X a_monnam(mtmp,adj) X register struct monst *mtmp; X! register char *adj; X { X register char *bp = mon_nam(mtmp); X #ifdef LINT /* static char buf[BUFSZ]; */ X--- 483,495 ---- X return(bp); X } X X+ #endif /* OVL0 */ X+ #ifdef OVLB X+ X char * X a_monnam(mtmp,adj) X register struct monst *mtmp; X! register const char *adj; X { X register char *bp = mon_nam(mtmp); X #ifdef LINT /* static char buf[BUFSZ]; */ X*************** X*** 427,433 **** X char * X a2_monnam(mtmp,adj) X register struct monst *mtmp; X! register char *adj; X { X register char *bp = mon_nam(mtmp); X #ifdef LINT /* static char buf[BUFSZ]; */ X--- 508,514 ---- X char * X a2_monnam(mtmp,adj) X register struct monst *mtmp; X! register const char *adj; X { X register char *bp = mon_nam(mtmp); X #ifdef LINT /* static char buf[BUFSZ]; */ X*************** X*** 446,452 **** X char * X Amonnam(mtmp, adj) X register struct monst *mtmp; X! register char *adj; X { X register char *bp = a_monnam(mtmp,adj); X X--- 527,533 ---- X char * X Amonnam(mtmp, adj) X register struct monst *mtmp; X! register const char *adj; X { X register char *bp = a_monnam(mtmp,adj); X X*************** X*** 480,486 **** X return(bp); X } X X! char * X rndmonnam() { /* Random name of monster type, if hallucinating */ X int name; X X--- 561,567 ---- X return(bp); X } X X! const char * X rndmonnam() { /* Random name of monster type, if hallucinating */ X int name; X X*************** X*** 491,498 **** X return(mons[name].mname); X } X X! #ifdef REINCARNATION X char * X roguename() /* Name of a Rogue player */ X { X char *i, *opts; X--- 572,604 ---- X return(mons[name].mname); X } X X! const char *pronoun_pairs[][2] = { X! {"him", "her"}, {"Him", "Her"}, {"his", "her"}, {"His", "Her"}, X! {"he", "she"}, {"He", "She"}, X! {0, 0} X! }; X! X char * X+ self_pronoun(str, pronoun) X+ const char *str; X+ const char *pronoun; X+ { X+ static char buf[BUFSZ]; X+ register int i; X+ X+ for(i=0; pronoun_pairs[i][0]; i++) { X+ if(!strncmp(pronoun, pronoun_pairs[i][0], 3)) { X+ Sprintf(buf, str, pronoun_pairs[i][flags.female]); X+ return buf; X+ } X+ } X+ impossible("never heard of pronoun %s?", pronoun); X+ Sprintf(buf, str, pronoun_pairs[i][0]); X+ return buf; X+ } X+ X+ #ifdef REINCARNATION X+ const char * X roguename() /* Name of a Rogue player */ X { X char *i, *opts; X*************** X*** 511,513 **** X--- 617,620 ---- X } X #endif X X+ #endif /* OVLB */ X*** src/Old/do_wear.c Mon Feb 19 17:58:13 1990 X--- src/do_wear.c Wed Feb 14 17:54:32 1990 X*************** X*** 4,12 **** X X #include "hack.h" X X static int todelay; X X! static long takeoff_mask = 0L, taking_off = 0L; X static const long takeoff_order[] = { WORN_BLINDF, 1L, /* weapon */ X WORN_SHIELD, WORN_GLOVES, LEFT_RING, RIGHT_RING, WORN_CLOAK, X WORN_HELMET, WORN_AMUL, WORN_ARMOR, X--- 4,23 ---- X X #include "hack.h" X X+ #ifdef OVLB X+ X static int todelay; X X! #endif /*OVLB */ X! X! #ifndef OVLB X! X! OSTATIC long takeoff_mask, taking_off; X! X! #else /* OVLB */ X! X! XSTATIC long takeoff_mask = 0L, taking_off = 0L; X! X static const long takeoff_order[] = { WORN_BLINDF, 1L, /* weapon */ X WORN_SHIELD, WORN_GLOVES, LEFT_RING, RIGHT_RING, WORN_CLOAK, X WORN_HELMET, WORN_AMUL, WORN_ARMOR, X*************** X*** 15,20 **** X--- 26,51 ---- X #endif X WORN_BOOTS, 0L }; X X+ static void FDECL(on_msg, (struct obj *)); X+ #ifndef OVERLAY X+ static int NDECL(Armor_on); X+ static int NDECL(Boots_on); X+ #endif X+ static int NDECL(Cloak_on); X+ #ifndef OVERLAY X+ static int NDECL(Helmet_on); X+ static int NDECL(Gloves_on); X+ #endif X+ static void NDECL(Amulet_on); X+ static void FDECL(Ring_off_or_gone, (struct obj *, BOOLEAN_P)); X+ #ifndef OVERLAY X+ static int FDECL(select_off, (struct obj *)); X+ #endif X+ static struct obj *NDECL(do_takeoff); X+ #ifndef OVERLAY X+ static int NDECL(take_off); X+ #endif X+ X void X off_msg(otmp) register struct obj *otmp; { X if(flags.verbose) X*************** X*** 348,353 **** X--- 379,385 ---- X You("wield the cockatrice corpse in your bare %s.", X makeplural(body_part(HAND))); X You("turn to stone..."); X+ killer_format = KILLED_BY_AN; X killer = "cockatrice corpse"; X done(STONING); X } X*************** X*** 398,403 **** X--- 430,436 ---- X /* This must be done in worn.c, because one of the possible intrinsics conferred X * is fire resistance, and we have to immediately set HFire_resistance in worn.c X * since worn.c will check it before returning. X+ */ X #ifndef OVERLAY X static X #endif X*************** X*** 406,412 **** X { X return 0; X } X- */ X X int X Armor_off() X--- 439,444 ---- X*************** X*** 467,474 **** X--- 499,516 ---- X regularize(SAVEF+7); X Strcat(SAVEF, ";1"); X #else X+ # ifdef MSDOS X+ (void)strcpy(SAVEF, SAVEP); X+ { X+ int i = strlen(SAVEF); X+ (void)strncat(SAVEF, plname, 8); X+ regularize(SAVEF+i); X+ } X+ (void)strcat(SAVEF, ".sav"); X+ # else X Sprintf(SAVEF, "save/%d%s", getuid(), plname); X regularize(SAVEF+5); /* avoid . or / in name */ X+ # endif X #endif X #ifdef WIZARD X } X*************** X*** 558,563 **** X--- 600,606 ---- X Your("body takes on a %s transparency...", X Hallucination ? "normal" : "strange"); X } X+ break; X case RIN_ADORNMENT: X ABON(A_CHA) += obj->spe; X flags.botl = 1; X*************** X*** 699,705 **** X /* called in main to set intrinsics of worn start-up items */ X void X set_wear() { X! /* if (uarm) (void) Armor_on(); */ X if (uarmc) (void) Cloak_on(); X if (uarmf) (void) Boots_on(); X if (uarmg) (void) Gloves_on(); X--- 742,748 ---- X /* called in main to set intrinsics of worn start-up items */ X void X set_wear() { X! if (uarm) (void) Armor_on(); X if (uarmc) (void) Cloak_on(); X if (uarmf) (void) Boots_on(); X if (uarmg) (void) Gloves_on(); X*************** X*** 711,728 **** X donning(otmp) X register struct obj *otmp; X { X! return (otmp == uarmf && afternmv == Boots_on) X! || (otmp == uarmh && afternmv == Helmet_on) X! || (otmp == uarmg && afternmv == Gloves_on) X! /* || (otmp == uarm && afternmv == Armor_on)*/; X } X X static const char clothes[] = {ARMOR_SYM, 0}; X static const char accessories[] = {RING_SYM, AMULET_SYM, TOOL_SYM, 0}; X X int X dotakeoff() { X register struct obj *otmp; X int armorpieces = 0; X X #define MOREARM(x) if (x) { armorpieces++; otmp = x; } X--- 754,788 ---- X donning(otmp) X register struct obj *otmp; X { X! return (otmp == uarmf && (afternmv == Boots_on || afternmv == Boots_off)) X! || (otmp == uarmh && (afternmv == Helmet_on || afternmv == Helmet_off)) X! || (otmp == uarmg && (afternmv == Gloves_on || afternmv == Gloves_off)) X! || (otmp == uarm && (afternmv == Armor_on || afternmv == Armor_off)); X } X X+ void X+ cancel_don() X+ { X+ /* the piece of armor we were donning/doffing has vanished, so stop X+ * wasting time on it (and don't dereference it when donning would X+ * otherwise finish) X+ */ X+ afternmv = 0; X+ nomovemsg = NULL; X+ multi = 0; X+ } X+ X static const char clothes[] = {ARMOR_SYM, 0}; X static const char accessories[] = {RING_SYM, AMULET_SYM, TOOL_SYM, 0}; X X int X dotakeoff() { X+ #ifdef __GNULINT__ X+ register struct obj *otmp = 0; X+ /* suppress "may be used uninitialized" warning */ X+ #else X register struct obj *otmp; X+ #endif X int armorpieces = 0; X X #define MOREARM(x) if (x) { armorpieces++; otmp = x; } X*************** X*** 782,788 **** X--- 842,853 ---- X X int X doremring() { X+ #ifdef __GNULINT__ X+ register struct obj *otmp = 0; X+ /* suppress "may be used uninitialized" warning */ X+ #else X register struct obj *otmp; X+ #endif X int Accessories = 0; X X #define MOREACC(x) if (x) { Accessories++; otmp = x; } X*************** X*** 1017,1023 **** X if(is_boots(otmp)) afternmv = Boots_on; X if(is_helmet(otmp)) afternmv = Helmet_on; X if(is_gloves(otmp)) afternmv = Gloves_on; X! /* if(otmp == uarm) afternmv = Armor_on; */ X nomovemsg = "You finish your dressing maneuver."; X } else { X if(is_cloak(otmp)) (void) Cloak_on(); X--- 1082,1088 ---- X if(is_boots(otmp)) afternmv = Boots_on; X if(is_helmet(otmp)) afternmv = Helmet_on; X if(is_gloves(otmp)) afternmv = Gloves_on; X! if(otmp == uarm) afternmv = Armor_on; X nomovemsg = "You finish your dressing maneuver."; X } else { X if(is_cloak(otmp)) (void) Cloak_on(); X*************** X*** 1144,1151 **** X--- 1209,1220 ---- X return(1); X } X X+ #endif /* OVLB */ X+ X #define ARM_BONUS(obj) ((10 - objects[obj->otyp].a_ac) + obj->spe) X X+ #ifdef OVL0 X+ X void X find_ac() { X register int uac = 10; X*************** X*** 1172,1177 **** X--- 1241,1249 ---- X } X } X X+ #endif /* OVL0 */ X+ #ifdef OVLB X+ X void X glibr() X { X*************** X*** 1431,1439 **** X--- 1503,1517 ---- X return(1); /* get busy */ X } X X+ #endif /* OVLB */ X+ #ifdef OVL1 X+ X void X reset_remarm() { taking_off = takeoff_mask =0L; } X X+ #endif /* OVL1 */ X+ #ifdef OVLB X+ X int X doddoremarm() { X X*************** X*** 1460,1465 **** X--- 1538,1545 ---- X (void) Cloak_off(); X useup(otmp); X } else if((otmp = uarm) && (!atmp || atmp == uarm)) { X+ /* may be disintegrated by spell or dragon breath... */ X+ if (donning(otmp)) cancel_don(); X Your("armor turns to dust and falls to the floor!"); X (void) Armor_gone(); X useup(otmp); X*************** X*** 1469,1483 **** X--- 1549,1566 ---- X useup(otmp); X #endif X } else if((otmp = uarmh) && (!atmp || atmp == uarmh)) { X+ if (donning(otmp)) cancel_don(); X Your("helmet turns to dust and is blown away!"); X (void) Helmet_off(); X useup(otmp); X } else if((otmp = uarmg) && (!atmp || atmp == uarmg)) { X+ if (donning(otmp)) cancel_don(); X Your("gloves vanish!"); X (void) Gloves_off(); X useup(otmp); X selftouch("You"); X } else if((otmp = uarmf) && (!atmp || atmp == uarmf)) { X+ if (donning(otmp)) cancel_don(); X Your("boots disintegrate!"); X (void) Boots_off(); X useup(otmp); X*************** X*** 1505,1507 **** X--- 1588,1592 ---- X flags.botl = 1; X } X } X+ X+ #endif /* OVLB */ X*** src/Old/ioctl.c Mon Feb 19 18:07:10 1990 X--- src/ioctl.c Wed Jan 31 19:54:07 1990 X*************** X*** 11,31 **** X #define MONFLAG_H X #include "hack.h" X X! #if defined(BSD) || defined(ULTRIX) X #include <sgtty.h> X struct ltchars ltchars; X struct ltchars ltchars0 = { -1, -1, -1, -1, -1, -1 }; /* turn all off */ X #else X #include <termio.h> /* also includes part of <sgtty.h> */ X struct termio termio; X! #ifdef AMIX X #include <sys/ioctl.h> X! #endif /* AMIX */ X #endif X X void X getioctls() { X! #if defined(BSD) || defined(ULTRIX) X (void) ioctl(fileno(stdin), (int) TIOCGLTC, (char *) <chars); X (void) ioctl(fileno(stdin), (int) TIOCSLTC, (char *) <chars0); X #else X--- 11,35 ---- X #define MONFLAG_H X #include "hack.h" X X! #if defined(BSD) || defined(ULTRIX) || defined(HPUX) X! # ifdef HPUX X! #include <bsdtty.h> X! # else X #include <sgtty.h> X+ # endif X struct ltchars ltchars; X struct ltchars ltchars0 = { -1, -1, -1, -1, -1, -1 }; /* turn all off */ X #else X #include <termio.h> /* also includes part of <sgtty.h> */ X struct termio termio; X! # ifdef AMIX X #include <sys/ioctl.h> X! # endif /* AMIX */ X #endif X X void X getioctls() { X! #if defined(BSD) || defined(ULTRIX) || defined(HPUX) X (void) ioctl(fileno(stdin), (int) TIOCGLTC, (char *) <chars); X (void) ioctl(fileno(stdin), (int) TIOCSLTC, (char *) <chars0); X #else X*************** X*** 56,62 **** X X void X setioctls() { X! #if defined(BSD) || defined(ULTRIX) X (void) ioctl(fileno(stdin), (int) TIOCSLTC, (char *) <chars); X #else X /* Now modified to run under Sys V R3. - may have to be #ifdef'ed */ X--- 60,66 ---- X X void X setioctls() { X! #if defined(BSD) || defined(ULTRIX) || defined(HPUX) X (void) ioctl(fileno(stdin), (int) TIOCSLTC, (char *) <chars); X #else X /* Now modified to run under Sys V R3. - may have to be #ifdef'ed */ X END_OF_FILE if test 55250 -ne `wc -c <'patch7.02'`; then echo shar: \"'patch7.02'\" unpacked with wrong size! fi # end of 'patch7.02' echo shar: End of archive 30 \(of 30\). cp /dev/null ark1isdone 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 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 30 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