billr@saab.CNA.TEK.COM (Bill Randle) (02/24/90)
Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu> Posting-number: Volume 9, Issue 8 Archive-name: NetHack3/Patch7h Patch-To: NetHack3: Volume 7, Issue 56-93 #! /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 8 (of 30)." # Contents: patch7.04 # Wrapped by billr@saab on Wed Feb 21 10:04:29 1990 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'patch7.04' -a "${1}" != "-c" ; then echo shar: Renaming existing file \"'patch7.04'\" to \"'patch7.04.orig'\" mv -f 'patch7.04' 'patch7.04.orig' fi echo shar: Extracting \"'patch7.04'\" \(56054 characters\) sed "s/^X//" >'patch7.04' <<'END_OF_FILE' X*** src/Old/end.c Mon Feb 19 18:02:33 1990 X--- src/end.c Mon Feb 19 13:40:25 1990 X*************** X*** 2,10 **** X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X /* NetHack may be freely redistributed. See license for details. */ X X /* block some unused #defines to avoid overloading some cpp's */ X- #define MONATTK_H X- #define NEED_VARARGS X X #include "hack.h" X #ifndef NO_SIGNAL X--- 2,10 ---- X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X /* NetHack may be freely redistributed. See license for details. */ X X+ #define MONATTK_H /* comment line for pre-compiled headers */ X+ #define NEED_VARARGS /* comment line for pre-compiled headers */ X /* block some unused #defines to avoid overloading some cpp's */ X X #include "hack.h" X #ifndef NO_SIGNAL X*************** X*** 13,19 **** X X #include "eshk.h" X X! void end_box_display(); X X static const char *deaths[] = { /* the array of death */ X "died", "choked", "poisoned", "starvation", "drowning", X--- 13,20 ---- X X #include "eshk.h" X X! void NDECL(end_box_display); X! static int NDECL(done_intr); X X static const char *deaths[] = { /* the array of death */ X "died", "choked", "poisoned", "starvation", "drowning", X*************** X*** 49,56 **** X--- 50,62 ---- X int X done2() X { X+ #ifdef MACOS X+ if(!flags.silent) SysBeep(1); X+ if(UseMacAlert(128) != 1) { X+ #else X pline("Really quit? "); X if(yn() == 'n') { X+ #endif X #ifndef NO_SIGNAL X (void) signal(SIGINT, (SIG_RET_TYPE) done1); X #endif X*************** X*** 61,80 **** X multi = 0; X return 0; X } X! #if defined(WIZARD) && (defined(UNIX) || defined(VMS)) X if(wizard) { X! #ifdef VMS X pline("Enter debugger? "); X! #else X pline("Dump core? "); X! #endif X if(yn() == 'y') { X (void) signal(SIGINT, (SIG_RET_TYPE) done1); X settty(NULL); X! #ifdef SYSV X (void) X! #endif X abort(); X } X } X #endif X--- 67,95 ---- X multi = 0; X return 0; X } X! #if defined(WIZARD) && (defined(UNIX) || defined(VMS) || defined(LATTICE)) X if(wizard) { X! # ifdef VMS X pline("Enter debugger? "); X! # else X! # ifdef LATTICE X! pline("Create SnapShot? "); X! # else X pline("Dump core? "); X! # endif X! # endif X! /* KL - do I need to change the next 3 lines? */ X if(yn() == 'y') { X (void) signal(SIGINT, (SIG_RET_TYPE) done1); X settty(NULL); X! #ifdef AMIGA X! Abort(0); X! #else X! # ifdef SYSV X (void) X! # endif X abort(); X+ #endif X } X } X #endif X*************** X*** 90,99 **** X done_stopprint++; X #ifndef NO_SIGNAL X (void) signal(SIGINT, SIG_IGN); X! #if defined(UNIX) || defined(VMS) X (void) signal(SIGQUIT, SIG_IGN); X! #endif X! #endif /* TOS /* */ X return 0; X } X X--- 105,114 ---- X done_stopprint++; X #ifndef NO_SIGNAL X (void) signal(SIGINT, SIG_IGN); X! # if defined(UNIX) || defined(VMS) X (void) signal(SIGQUIT, SIG_IGN); X! # endif X! #endif /* NO_SIGNAL /* */ X return 0; X } X X*************** X*** 116,123 **** X X You("die..."); X buf[0] = '\0'; X! if (mtmp->iswiz) X Strcat(buf, "the "); X if (mtmp->minvis) X Strcat(buf, "invisible "); X if (Hallucination) X--- 131,140 ---- X X You("die..."); X buf[0] = '\0'; X! if (mtmp->iswiz) { X Strcat(buf, "the "); X+ killer_format = KILLED_BY; X+ } X if (mtmp->minvis) X Strcat(buf, "invisible "); X if (Hallucination) X*************** X*** 125,136 **** X X if(mtmp->data->mlet == S_GHOST) { X register char *gn = (char *) mtmp->mextra; X! if (!Hallucination && !mtmp->minvis && *gn) X Strcat(buf, "the "); X Sprintf(eos(buf), (*gn ? "ghost of %s" : "ghost%s"), gn); X } else if(mtmp->isshk) { X Sprintf(eos(buf), "%s %s, the shopkeeper", X (ESHK(mtmp)->ismale ? "Mr." : "Ms."), shkname(mtmp)); X } else Strcat(buf, mtmp->data->mname); X if (mtmp->mnamelth) Sprintf(eos(buf), " called %s", NAME(mtmp)); X killer = buf; X--- 142,156 ---- X X if(mtmp->data->mlet == S_GHOST) { X register char *gn = (char *) mtmp->mextra; X! if (!Hallucination && !mtmp->minvis && *gn) { X Strcat(buf, "the "); X+ killer_format = KILLED_BY; X+ } X Sprintf(eos(buf), (*gn ? "ghost of %s" : "ghost%s"), gn); X } else if(mtmp->isshk) { X Sprintf(eos(buf), "%s %s, the shopkeeper", X (ESHK(mtmp)->ismale ? "Mr." : "Ms."), shkname(mtmp)); X+ killer_format = KILLED_BY; X } else Strcat(buf, mtmp->data->mname); X if (mtmp->mnamelth) Sprintf(eos(buf), " called %s", NAME(mtmp)); X killer = buf; X*************** X*** 155,174 **** X extern boolean hu; /* from save.c */ X X void X! panic VA_DECL(char *, str) X VA_START(str); X VA_INIT(str, char *); X- #ifdef MACOS X- puts(str); X- more(); X- #endif X X if(panicking++) X! #ifdef SYSV X (void) X! #endif X abort(); /* avoid loops - this should never happen*/ X /* was exit(1) */ X home(); cls(); X (void) puts(" Suddenly, the dungeon collapses."); X #if defined(WIZARD) && !defined(MSDOS) X--- 175,194 ---- X extern boolean hu; /* from save.c */ X X void X! panic VA_DECL(const char *, str) X VA_START(str); X VA_INIT(str, char *); X X if(panicking++) X! #ifdef AMIGA X! Abort(0); X! #else X! # ifdef SYSV X (void) X! # endif X abort(); /* avoid loops - this should never happen*/ X /* was exit(1) */ X+ #endif X home(); cls(); X (void) puts(" Suddenly, the dungeon collapses."); X #if defined(WIZARD) && !defined(MSDOS) X*************** X*** 195,208 **** X #else X (void) fputs(" ERROR: ", stdout); X #endif X Vprintf(str,VA_ARGS); X more(); /* contains a fflush() */ X! #if defined(WIZARD) && (defined(UNIX) || defined(VMS)) X if (wizard) X! # ifdef SYSV X (void) X! # endif X abort(); /* generate core dump */ X #endif X VA_END(); X done(PANICKED); X--- 215,240 ---- X #else X (void) fputs(" ERROR: ", stdout); X #endif X+ #ifdef LATTICE X+ { X+ char pbuf[100]; X+ vsprintf(pbuf,str,VA_ARGS); X+ (void)puts(pbuf); X+ } X+ #else X Vprintf(str,VA_ARGS); X+ #endif X more(); /* contains a fflush() */ X! #if defined(WIZARD) && (defined(UNIX) || defined(VMS) || defined(LATTICE)) X if (wizard) X! # ifdef AMIGA X! Abort(0); X! # else X! # ifdef SYSV X (void) X! # endif X abort(); /* generate core dump */ X+ # endif X #endif X VA_END(); X done(PANICKED); X*************** X*** 213,231 **** X done(how) X int how; X { X struct permonst *upmon; X! char buf[BUFSZ], buf2[BUFSZ], buf3[BUFSZ]; X! /* buf: used if killer gets changed X * buf2: same as player name, except it is capitalized X- * buf3: used to copy killer in case it comes from something like X- xname(), which would otherwise get overwritten when we call X- xname() when listing possessions X */ X char c; X boolean taken; X! X! Strcpy(buf3, (!killer || how >= PANICKED ? deaths[how] : killer)); X! killer = buf3; X #ifdef WIZARD X if (wizard && how == TRICKED) { X You("are a very tricky wizard, it seems."); X--- 245,272 ---- X done(how) X int how; X { X+ #ifdef MACOS X+ int see_c; X+ char mac_buf[80]; X+ #endif X struct permonst *upmon; X! char kilbuf[BUFSZ], buf2[BUFSZ]; X! /* kilbuf: used to copy killer in case it comes from something like X! * xname(), which would otherwise get overwritten when we call X! * xname() when listing possessions X * buf2: same as player name, except it is capitalized X */ X char c; X boolean taken; X! #ifdef ENDGAME X! if (how == ASCENDED) X! killer_format = NO_KILLER_PREFIX; X! #endif X! /* Avoid killed by "a" burning or "a" starvation */ X! if (!killer && (how == STARVING || how == BURNING)) X! killer_format = KILLED_BY; X! Strcpy(kilbuf, (!killer || how >= PANICKED ? deaths[how] : killer)); X! killer = kilbuf; X #ifdef WIZARD X if (wizard && how == TRICKED) { X You("are a very tricky wizard, it seems."); X*************** X*** 280,289 **** X die: X #ifndef NO_SIGNAL X (void) signal(SIGINT, (SIG_RET_TYPE) done_intr); X! #if defined(UNIX) || defined(VMS) X (void) signal(SIGQUIT, (SIG_RET_TYPE) done_intr); X (void) signal(SIGHUP, (SIG_RET_TYPE) done_hangup); X! #endif X #endif /* NO_SIGNAL /* */ X upmon = player_mon(); X if(u.ugrave_arise > -1) /* create no corpse */ ; X--- 321,330 ---- X die: X #ifndef NO_SIGNAL X (void) signal(SIGINT, (SIG_RET_TYPE) done_intr); X! # if defined(UNIX) || defined(VMS) X (void) signal(SIGQUIT, (SIG_RET_TYPE) done_intr); X (void) signal(SIGHUP, (SIG_RET_TYPE) done_hangup); X! # endif X #endif /* NO_SIGNAL /* */ X upmon = player_mon(); X if(u.ugrave_arise > -1) /* create no corpse */ ; X*************** X*** 297,307 **** X (void) mk_named_object(CORPSE, upmon, u.ux, u.uy, plname, X strlen(plname)); X X! if(how == QUIT && u.uhp < 1) { X! how = DIED; X! Strcpy(buf, "quit while already on Charon's boat"); X! killer = buf; X } X taken = paybill(); X paygd(); X clearlocks(); X--- 338,352 ---- X (void) mk_named_object(CORPSE, upmon, u.ux, u.uy, plname, X strlen(plname)); X X! if (how == QUIT) { X! killer_format = NO_KILLER_PREFIX; X! if (u.uhp < 1) { X! how = DIED; X! /* note that killer is pointing at kilbuf */ X! Strcpy(kilbuf, "quit while already on Charon's boat"); X! } X } X+ if (how == ESCAPED) killer_format = NO_KILLER_PREFIX; X taken = paybill(); X paygd(); X clearlocks(); X*************** X*** 308,320 **** X if(flags.toplin == 1) more(); X X if(invent) { X if(taken) X pline("Do you want to see what you had when you %s? ", X (how == QUIT) ? "quit" : "died"); X else X pline("Do you want your possessions identified? "); X- /* New dump format by maartenj@cs.vu.nl */ X if ((c = yn_function(ynqchars,'y')) == 'y') { X struct obj *obj; X X for(obj = invent; obj && !done_stopprint; obj = obj->nobj) { X--- 353,381 ---- X if(flags.toplin == 1) more(); X X if(invent) { X+ #ifndef MACOS X if(taken) X pline("Do you want to see what you had when you %s? ", X (how == QUIT) ? "quit" : "died"); X else X pline("Do you want your possessions identified? "); X if ((c = yn_function(ynqchars,'y')) == 'y') { X+ #else X+ { X+ extern short macflags; X+ X+ /* stop user from using menus, etc. */ X+ macflags &= ~(fDoNonKeyEvt | fDoUpdate); X+ } X+ if(taken) X+ sprintf(mac_buf, "Do you want to see what you had when you %s? ", X+ (how == QUIT) ? "quit" : "died"); X+ else X+ sprintf(mac_buf, "Do you want your possessions identified? "); X+ if(!flags.silent) SysBeep(1); X+ if ((c = "qqynq"[UseMacAlertText(129,mac_buf)+1]) == 'y') { X+ #endif X+ /* New dump format by maartenj@cs.vu.nl */ X struct obj *obj; X X for(obj = invent; obj && !done_stopprint; obj = obj->nobj) { X*************** X*** 339,361 **** X } X } X X if(how < GENOCIDED) { X #ifdef WIZARD X if(wizard) { X pline("Save bones? "); X if(yn() == 'y') savebones(); X } else X #endif X! savebones(); X if(!flags.notombstone) outrip(); X } X! if(how == STONING) { X! Strcpy(buf, "turned to stone by "); X! Strcat(buf, killer); X! /* No a or an; topten.c will do that. */ X! killer = buf; X! } X! if(u.uhave_amulet) Strcat(killer, " (with the Amulet)"); X settty(NULL); /* does a clear_screen() */ X Strcpy(buf2, plname); X if('a' <= buf2[0] && buf2[0] <= 'z') buf2[0] += 'A'-'a'; X--- 400,437 ---- X } X } X X+ if (!done_stopprint) { X+ #ifdef MACOS X+ c = "qqynq"[UseMacAlertText(129, "Do you want to see your instrinsics ?")+1]; X+ #else X+ pline("Do you want to see your intrinsics? "); X+ c = yn_function(ynqchars, 'y'); X+ #endif X+ if (c == 'y') enlightenment(); X+ if (c == 'q') done_stopprint++; X+ } X+ X if(how < GENOCIDED) { X #ifdef WIZARD X if(wizard) { X+ #ifdef MACOS X+ if(!flags.silent) SysBeep(20); X+ if(UseMacAlertText(128, "Save bones ?") == 1) savebones(); X+ #else X pline("Save bones? "); X if(yn() == 'y') savebones(); X+ #endif X } else X #endif X! if (how != PANICKED && how !=TRICKED) X! savebones(); X if(!flags.notombstone) outrip(); X } X! X! /* changing kilbuf really changes killer. we do it this way because X! killer is declared a (const char *) X! */ X! if(u.uhave_amulet) Strcat(kilbuf, " (with the Amulet)"); X settty(NULL); /* does a clear_screen() */ X Strcpy(buf2, plname); X if('a' <= buf2[0] && buf2[0] <= 'z') buf2[0] += 'A'-'a'; X*************** X*** 362,369 **** X if(!done_stopprint) X Printf("Goodbye %s the %s...\n\n", buf2, X #ifdef ENDGAME X! how != ASCENDED ? pl_character : X! flags.female ? "Demigoddess" : "Demigod"); X #else X pl_character); X #endif X--- 438,446 ---- X if(!done_stopprint) X Printf("Goodbye %s the %s...\n\n", buf2, X #ifdef ENDGAME X! how != ASCENDED ? (const char *)pl_character : X! flags.female ? (const char *)"Demigoddess" : X! (const char *)"Demigod"); X #else X pl_character); X #endif X*************** X*** 467,484 **** X if(!done_stopprint) X Printf("You were level %u with a maximum of %d hit points when you %s.\n", X u.ulevel, u.uhpmax, ends[how]); X! if(how == ESCAPED && !done_stopprint){ X! getret(); /* all those pieces of colored glass ... */ X! cls(); X! } X! #if (defined(WIZARD) || defined(EXPLORE_MODE)) && !defined(LOGFILE) X if(wizard || discover) X Printf("\nSince you were in %s mode, the score list \ X will not be checked.\n", wizard ? "wizard" : "discover"); X else X #endif X! topten(); X /* "So when I die, the first thing I will see in Heaven is a score list?" */ X if(done_stopprint) Printf("\n\n"); X #if defined(APOLLO) || defined(MACOS) X getret(); X--- 544,565 ---- X if(!done_stopprint) X Printf("You were level %u with a maximum of %d hit points when you %s.\n", X u.ulevel, u.uhpmax, ends[how]); X! #if (defined(WIZARD) || defined(EXPLORE_MODE)) X! # ifndef LOGFILE X if(wizard || discover) X Printf("\nSince you were in %s mode, the score list \ X will not be checked.\n", wizard ? "wizard" : "discover"); X else X+ # endif X #endif X! { X! if (!done_stopprint) { X! getret(); X! cls(); X! } X /* "So when I die, the first thing I will see in Heaven is a score list?" */ X+ topten(how); X+ } X if(done_stopprint) Printf("\n\n"); X #if defined(APOLLO) || defined(MACOS) X getret(); X*************** X*** 488,499 **** X X void X clearlocks(){ X! #if defined(DGK) && !defined(OLD_TOS) X eraseall(levels, alllevels); X if (ramdisk) X eraseall(permbones, alllevels); X #else X! # if defined(UNIX) || (defined(MSDOS) && !defined(OLD_TOS)) || defined(VMS) || defined(MACOS) X register int x; X # if defined(UNIX) || defined(VMS) X (void) signal(SIGHUP,SIG_IGN); X--- 569,580 ---- X X void X clearlocks(){ X! #if defined(DGK) X eraseall(levels, alllevels); X if (ramdisk) X eraseall(permbones, alllevels); X #else X! # if defined(UNIX) || defined(MSDOS) || defined(VMS) || defined(MACOS) X register int x; X # if defined(UNIX) || defined(VMS) X (void) signal(SIGHUP,SIG_IGN); X*** src/Old/engrave.c Mon Feb 19 18:03:09 1990 X--- src/engrave.c Wed Feb 14 18:38:01 1990 X*************** X*** 4,10 **** X X #include "hack.h" X X! struct engr { X struct engr *nxt_engr; X char *engr_txt; X xchar engr_x, engr_y; X--- 4,10 ---- X X #include "hack.h" X X! VSTATIC struct engr { X struct engr *nxt_engr; X char *engr_txt; X xchar engr_x, engr_y; X*************** X*** 18,25 **** X #define POLY 5 /* temporary type - for polymorphing engraving */ X } *head_engr; X X! static void FDECL(del_engr, (struct engr *)); X X /* random engravings */ X const char *random_engr[] = X {"Elbereth", "ad ae?ar um", X--- 18,27 ---- X #define POLY 5 /* temporary type - for polymorphing engraving */ X } *head_engr; X X! OSTATIC void FDECL(del_engr, (struct engr *)); X! OSTATIC struct engr * FDECL(engr_at,(XCHAR_P,XCHAR_P)); X X+ #ifdef OVLB X /* random engravings */ X const char *random_engr[] = X {"Elbereth", "ad ae?ar um", X*************** X*** 32,38 **** X "Y?u won?t get i? up ?he ste?s", X "A.S. ->"}; X X! static struct engr * X engr_at(x,y) register xchar x,y; { X register struct engr *ep = head_engr; X while(ep) { X--- 34,43 ---- X "Y?u won?t get i? up ?he ste?s", X "A.S. ->"}; X X! #endif /* OVLB */ X! #ifdef OVL0 X! X! XSTATIC struct engr * X engr_at(x,y) register xchar x,y; { X register struct engr *ep = head_engr; X while(ep) { X*************** X*** 46,52 **** X #ifdef ELBERETH X int X sengr_at(s,x,y) X! register char *s; X register xchar x,y; X { X register struct engr *ep = engr_at(x,y); X--- 51,57 ---- X #ifdef ELBERETH X int X sengr_at(s,x,y) X! register const char *s; X register xchar x,y; X { X register struct engr *ep = engr_at(x,y); X*************** X*** 68,73 **** X--- 73,81 ---- X } X #endif X X+ #endif /* OVL0 */ X+ #ifdef OVL2 X+ X void X u_wipe_engr(cnt) X register int cnt; X*************** X*** 76,81 **** X--- 84,92 ---- X wipe_engr_at(u.ux, u.uy, cnt); X } X X+ #endif /* OVL2 */ X+ #ifdef OVL1 X+ X void X wipe_engr_at(x,y,cnt) register xchar x,y,cnt; { X register struct engr *ep = engr_at(x,y); X*************** X*** 104,109 **** X--- 115,123 ---- X } X } X X+ #endif /* OVL1 */ X+ #ifdef OVL2 X+ X void X read_engr_at(x,y) register int x,y; { X register struct engr *ep = engr_at(x,y); X*************** X*** 136,145 **** X } X } X X void X make_engr_at(x,y,s) X register int x,y; X! register char *s; X { X register struct engr *ep; X X--- 150,162 ---- X } X } X X+ #endif /* OVL2 */ X+ #ifdef OVLB X+ X void X make_engr_at(x,y,s) X register int x,y; X! register const char *s; X { X register struct engr *ep; X X*************** X*** 163,169 **** X */ X int X freehand(){ X- X return(!uwep || X !uwep->cursed || X (!bimanual(uwep) && (!uarms || !uarms->cursed))); X--- 180,185 ---- X*************** X*** 188,193 **** X--- 204,210 ---- X register char *sp, *sptmp; X register struct engr *ep, *oep = engr_at(u.ux,u.uy); X char buf[BUFSZ]; X+ boolean jello = FALSE; X xchar type, polytype = 0; X int spct; /* number of leading spaces */ X register struct obj *otmp; X*************** X*** 194,201 **** X multi = 0; X X if(u.uswallow) { X! pline("What would you write? \"Jonah was here\"?"); X! return(0); X } X X /* one may write with finger, weapon or wand */ X--- 211,225 ---- X multi = 0; X X if(u.uswallow) { X! if (is_animal(u.ustuck->data)) { X! pline("What would you write? \"Jonah was here\"?"); X! return(0); X! } else X! if (is_whirly(u.ustuck->data)) { X! You("can't reach the ground."); X! return(0); X! } else X! jello = TRUE; X } X X /* one may write with finger, weapon or wand */ X*************** X*** 225,230 **** X--- 249,262 ---- X if(otmp != &zeroobj && index(too_large,otmp->olet)) { X You("can't engrave with such a large object!"); X return(1); X+ } X+ X+ if (jello) { X+ You("tickle %s with your %s.", mon_nam(u.ustuck), X+ (otmp == &zeroobj) ? makeplural(body_part(FINGER)) : X+ xname(otmp)); X+ Your("message dissolves..."); X+ return(0); X } X X if(otmp != &zeroobj && index(paper,otmp->olet)) { X*************** X*** 452,458 **** X nomovemsg = "You finish writing."; X if(type != MARK) X nomovemsg = "You finish engraving."; X! if(otmp->olet != WAND_SYM && otmp->otyp != ATHAME) { X if(otmp->olet == WEAPON_SYM) X Your("%s dull.", X aobjnam(otmp, "get")); X--- 484,491 ---- X nomovemsg = "You finish writing."; X if(type != MARK) X nomovemsg = "You finish engraving."; X! if(otmp->olet != WAND_SYM && (otmp->otyp != ATHAME X! || otmp->cursed)) { X if(otmp->olet == WEAPON_SYM) X Your("%s dull.", X aobjnam(otmp, "get")); X*************** X*** 535,540 **** X--- 568,576 ---- X save_engravings(fd) int fd; { X register struct engr *ep = head_engr; X register struct engr *ep2; X+ #ifdef __GNULINT__ X+ static long nulls[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; X+ #endif X while(ep) { X ep2 = ep->nxt_engr; X if(ep->engr_lth && ep->engr_txt[0]){ X*************** X*** 541,554 **** X bwrite(fd, (genericptr_t)&(ep->engr_lth), sizeof(ep->engr_lth)); X bwrite(fd, (genericptr_t)ep, sizeof(struct engr) + ep->engr_lth); X } X! #if defined(DGK) && !defined(OLD_TOS) X if (!count_only) X #endif X free((genericptr_t) ep); X ep = ep2; X } X bwrite(fd, (genericptr_t)nul, sizeof(unsigned)); X! #if defined(DGK) && !defined(OLD_TOS) X if (!count_only) X #endif X head_engr = 0; X--- 577,596 ---- X bwrite(fd, (genericptr_t)&(ep->engr_lth), sizeof(ep->engr_lth)); X bwrite(fd, (genericptr_t)ep, sizeof(struct engr) + ep->engr_lth); X } X! #if defined(DGK) X if (!count_only) X #endif X free((genericptr_t) ep); X ep = ep2; X } X+ X+ #ifdef __GNULINT__ X+ bwrite(fd, (genericptr_t)nulls, sizeof(unsigned)); X+ #else X bwrite(fd, (genericptr_t)nul, sizeof(unsigned)); X! #endif X! X! #if defined(DGK) X if (!count_only) X #endif X head_engr = 0; X*************** X*** 570,576 **** X } X } X X! static void X del_engr(ep) register struct engr *ep; { X register struct engr *ept; X if(ep == head_engr) X--- 612,618 ---- X } X } X X! XSTATIC void X del_engr(ep) register struct engr *ep; { X register struct engr *ept; X if(ep == head_engr) X*************** X*** 588,590 **** X--- 630,634 ---- X } X free((genericptr_t) ep); X } X+ X+ #endif /* OVLB */ X*** src/Old/exper.c Mon Feb 19 18:03:38 1990 X--- src/exper.c Wed Nov 29 19:29:16 1989 X*************** X*** 117,123 **** X X if(u.ulevel > 1) { X pline("Goodbye level %u.", u.ulevel--); X! adjabil(-1); /* remove intrinsic abilities */ X } else X u.uhp = -1; X num = newhp(); X--- 117,124 ---- X X if(u.ulevel > 1) { X pline("Goodbye level %u.", u.ulevel--); X! /* remove intrinsic abilities */ X! adjabil((int)u.ulevel+1, (int)u.ulevel); X } else X u.uhp = -1; X num = newhp(); X*************** X*** 151,157 **** X if (u.uexp >= newuexp(u.ulevel)) u.uexp = newuexp(u.ulevel) - 1; X pline("Welcome to experience level %u.", u.ulevel); X set_uasmon(); /* set up for the new level. */ X! adjabil(1); /* give new intrinsic abilities */ X tmp = newhp(); X u.uhpmax += tmp; X u.uhp += tmp; X--- 152,159 ---- X if (u.uexp >= newuexp(u.ulevel)) u.uexp = newuexp(u.ulevel) - 1; X pline("Welcome to experience level %u.", u.ulevel); X set_uasmon(); /* set up for the new level. */ X! /* give new intrinsics */ X! adjabil((int)u.ulevel-1, (int)u.ulevel); X tmp = newhp(); X u.uhpmax += tmp; X u.uhp += tmp; X*************** X*** 180,186 **** X if(u.ulevel < MAXULEV) { X u.uexp = newuexp(u.ulevel); X pline("Welcome to experience level %u.", ++u.ulevel); X! adjabil(1); X } X flags.botl = 1; X } X--- 182,188 ---- X if(u.ulevel < MAXULEV) { X u.uexp = newuexp(u.ulevel); X pline("Welcome to experience level %u.", ++u.ulevel); X! adjabil((int)u.ulevel-1, (int)u.ulevel); X } X flags.botl = 1; X } X*** src/Old/extralev.c Mon Feb 19 18:03:58 1990 X--- src/extralev.c Thu Jan 25 22:04:06 1990 X*************** X*** 2,9 **** X /* Copyright 1988, 1989 by Ken Arromdee */ X /* NetHack may be freely redistributed. See license for details. */ X X /* block some unused #defines to avoid overloading some cpp's */ X- #define MONATTK_H X #include "hack.h" X X #ifdef REINCARNATION X--- 2,9 ---- X /* Copyright 1988, 1989 by Ken Arromdee */ X /* NetHack may be freely redistributed. See license for details. */ X X+ #define MONATTK_H /* comment line for pre-compiled headers */ X /* block some unused #defines to avoid overloading some cpp's */ X #include "hack.h" X X #ifdef REINCARNATION X*************** X*** 21,26 **** X--- 21,29 ---- X #define RIGHT 8 X X static struct rogueroom r[3][3]; X+ static void FDECL(roguejoin,(int,int,int,int,int)); X+ static void FDECL(roguecorr,(int,int,int)); X+ static void FDECL(miniwalk,(int,int)); X X static X void X*** src/Old/fountain.c Mon Feb 19 18:04:25 1990 X--- src/fountain.c Wed Feb 7 18:37:42 1990 X*************** X*** 6,11 **** X--- 6,16 ---- X #include "hack.h" X X #ifdef FOUNTAINS X+ static void NDECL(dowatersnakes); X+ static void NDECL(dowaterdemon); X+ static void NDECL(dowaternymph); X+ static void FDECL(dogushforth,(int)); X+ static void NDECL(dofindgem); X X static X void X*************** X*** 12,18 **** X dowatersnakes() /* Fountain of snakes! */ { X register int num = rnd(6); X if (!(mons[PM_WATER_MOCCASIN].geno & G_GENOD)) { X! pline("An endless stream of snakes pours forth!"); X while(num-- > 0) (void) makemon(&mons[PM_WATER_MOCCASIN],u.ux,u.uy); X } else X pline("The fountain bubbles furiously for a moment, then calms."); X--- 17,26 ---- X dowatersnakes() /* Fountain of snakes! */ { X register int num = rnd(6); X if (!(mons[PM_WATER_MOCCASIN].geno & G_GENOD)) { X! if (!Blind) X! pline("An endless stream of snakes pours forth!"); X! else X! You("hear something hissing!"); X while(num-- > 0) (void) makemon(&mons[PM_WATER_MOCCASIN],u.ux,u.uy); X } else X pline("The fountain bubbles furiously for a moment, then calms."); X*************** X*** 24,34 **** X register struct monst *mtmp; X X if((mtmp = makemon(&mons[PM_WATER_DEMON],u.ux,u.uy))) { X! You("have unleashed %s!", defmonnam(mtmp)); X X /* Give those on low levels a (slightly) better chance of survival */ X if ( rnd(100) > (80 + dlevel)) { X! pline("Grateful for his release, he grants you a wish!"); X makewish(); X mongone(mtmp); X } X--- 32,46 ---- X register struct monst *mtmp; X X if((mtmp = makemon(&mons[PM_WATER_DEMON],u.ux,u.uy))) { X! if (!Blind) X! You("have unleashed %s!", defmonnam(mtmp)); X! else X! You("feel the presence of evil."); X X /* Give those on low levels a (slightly) better chance of survival */ X if ( rnd(100) > (80 + dlevel)) { X! pline("Grateful for %s release, %s grants you a wish!", X! Blind ? "its" : "his", Blind ? "it" : "he" ); X makewish(); X mongone(mtmp); X } X*************** X*** 40,50 **** X dowaternymph() /* Water Nymph */ { X register struct monst *mtmp; X if((mtmp = makemon(&mons[PM_WATER_NYMPH],u.ux,u.uy))) { X! X! You("have attracted %s!", defmonnam(mtmp)); X mtmp->msleep = 0; X } else X! pline("A large bubble rises to the surface and pops."); X } X X X--- 52,67 ---- X dowaternymph() /* Water Nymph */ { X register struct monst *mtmp; X if((mtmp = makemon(&mons[PM_WATER_NYMPH],u.ux,u.uy))) { X! if (!Blind) X! You("have attracted %s!", defmonnam(mtmp)); X! else X! You("hear a seductive voice."); X mtmp->msleep = 0; X } else X! if (!Blind) X! pline("A large bubble rises to the surface and pops."); X! else X! You("hear a loud pop."); X } X X X*************** X*** 106,112 **** X void X dryup(){ X if (!rn2(3) && IS_FOUNTAIN(levl[u.ux][u.uy].typ)) { X! pline("The fountain dries up!"); X levl[u.ux][u.uy].typ = ROOM; X levl[u.ux][u.uy].looted = 0; X if(Invisible) newsym(u.ux, u.uy); X--- 123,129 ---- X void X dryup(){ X if (!rn2(3) && IS_FOUNTAIN(levl[u.ux][u.uy].typ)) { X! if (!Blind) pline("The fountain dries up!"); X levl[u.ux][u.uy].typ = ROOM; X levl[u.ux][u.uy].looted = 0; X if(Invisible) newsym(u.ux, u.uy); X*************** X*** 154,164 **** X #else X pline("Perhaps it is runoff from the nearby orange farm."); X #endif X! losehp(rnd(4),"unrefrigerated sip of juice"); X break; X } X losestr(rn1(4,3)); X! losehp(rnd(10),"contaminated water"); X break; X X case 22: /* Fountain of snakes! */ X--- 171,182 ---- X #else X pline("Perhaps it is runoff from the nearby orange farm."); X #endif X! losehp(rnd(4),"unrefrigerated sip of juice", X! KILLED_BY_AN); X break; X } X losestr(rn1(4,3)); X! losehp(rnd(10),"contaminated water", KILLED_BY); X break; X X case 22: /* Fountain of snakes! */ X*************** X*** 237,243 **** X } X X if (obj->otyp == LONG_SWORD && u.ulevel >= 5 && !rn2(6) X! #ifndef NAMED_ITEMS X && !strcmp(ONAME(obj), "Excalibur") X #endif X ) { X--- 255,263 ---- X } X X if (obj->otyp == LONG_SWORD && u.ulevel >= 5 && !rn2(6) X! #ifdef NAMED_ITEMS X! && !is_artifact(obj) && !exist_artifact(obj, "Excalibur") X! #else X && !strcmp(ONAME(obj), "Excalibur") X #endif X ) { X*************** X*** 314,319 **** X--- 334,340 ---- X * by. Just like a shopping mall! Chris Woodbury */ X X mkgold((long)(rnd((MAXLEVEL-dlevel)*2)+5), u.ux, u.uy); X+ if (!Blind) X pline("Far below you, you see coins glistening in the water."); X break; X } X*************** X*** 339,345 **** X case 2: You("take a sip of scalding hot water."); X if (Fire_resistance) X pline("It seems quite tasty."); X! else losehp(rnd(6), "sip of boiling water"); X break; X case 3: if (mons[PM_SEWER_RAT].geno & G_GENOD) X pline("The sink seems quite dirty."); X--- 360,366 ---- X case 2: You("take a sip of scalding hot water."); X if (Fire_resistance) X pline("It seems quite tasty."); X! else losehp(rnd(6), "sipping boiling water", KILLED_BY); X break; X case 3: if (mons[PM_SEWER_RAT].geno & G_GENOD) X pline("The sink seems quite dirty."); X*** src/Old/hack.c Mon Feb 19 18:05:17 1990 X--- src/hack.c Fri Feb 16 22:10:43 1990 X*************** X*** 4,12 **** X #include "hack.h" X X #if defined(UNIX) && !defined(LINT) X! static const char SCCS_Id[] = "@(#)hack.c 3.0\t89/11/03"; X #endif X X /* called on movement: X 1. when throwing ball+chain far away X 2. when teleporting X--- 4,21 ---- X #include "hack.h" X X #if defined(UNIX) && !defined(LINT) X! static const char SCCS_Id[] = "@(#)hack.c 3.0\t89/11/20"; X #endif X X+ OSTATIC int NDECL(moverock); X+ #ifdef SINKS X+ OSTATIC void NDECL(dosinkfall); X+ #endif X+ static boolean FDECL(is_edge,(XCHAR_P,XCHAR_P)); X+ static boolean FDECL(bad_rock,(XCHAR_P,XCHAR_P)); X+ X+ #ifdef OVLB X+ X /* called on movement: X 1. when throwing ball+chain far away X 2. when teleporting X*************** X*** 24,30 **** X for(y = u.uy-1; y < u.uy+2; y++) { X if(!isok(x, y)) continue; X lev = &levl[x][y]; X! if(!lev->lit && IS_FLOOR(lev->typ)){ X lev->scrsym = STONE_SYM; X lev->new = 1; X on_scr(x,y); X--- 33,39 ---- X for(y = u.uy-1; y < u.uy+2; y++) { X if(!isok(x, y)) continue; X lev = &levl[x][y]; X! if(!lev->lit && lev->scrsym == ROOM_SYM) { X lev->scrsym = STONE_SYM; X lev->new = 1; X on_scr(x,y); X*************** X*** 42,49 **** X in mhitu.c: seeoff(1) - swallowed X in mthrow.c: seeoff(0) - hit by a cream pie. X in potion.c: seeoff(0) - quaffing or sniffing a potion of blindness X! in spell.c: seeoff(0) - due to a cursed spellbook X! in trap.c: seeoff(1) - fall through trapdoor X */ X void X seeoff(mode) X--- 51,58 ---- X in mhitu.c: seeoff(1) - swallowed X in mthrow.c: seeoff(0) - hit by a cream pie. X in potion.c: seeoff(0) - quaffing or sniffing a potion of blindness X! in spell.c: seeoff(0) - due to a cursed spell book X! in trap.c: seeoff(1) - fall through trap door X */ X void X seeoff(mode) X*************** X*** 67,73 **** X lev = &levl[x][y]; X if(MON_AT(x, y)) X unpmon(m_at(x,y)); X! if(!lev->lit && IS_FLOOR(lev->typ)) { X lev->seen = 0; X atl(x, y, (char)STONE_SYM); X } X--- 76,82 ---- X lev = &levl[x][y]; X if(MON_AT(x, y)) X unpmon(m_at(x,y)); X! if(!lev->lit && lev->scrsym == ROOM_SYM) { X lev->seen = 0; X atl(x, y, (char)STONE_SYM); X } X*************** X*** 75,81 **** X } X } X X! static int X moverock() { X register xchar rx, ry; X register struct obj *otmp; X--- 84,93 ---- X } X } X X! #endif /* OVLB */ X! #ifdef OVL2 X! X! XSTATIC int X moverock() { X register xchar rx, ry; X register struct obj *otmp; X*************** X*** 143,150 **** X rloco(otmp); X continue; X } X! if(levl[rx][ry].typ == DOOR && X! (levl[rx][ry].doormask & (D_LOCKED | D_CLOSED))) X goto nopushmsg; X if(is_pool(rx,ry)) { X #ifdef STRONGHOLD X--- 155,161 ---- X rloco(otmp); X continue; X } X! if(closed_door(rx, ry)) X goto nopushmsg; X if(is_pool(rx,ry)) { X #ifdef STRONGHOLD X*************** X*** 209,229 **** X return (0); X } X X void X movobj(obj, ox, oy) X register struct obj *obj; X register xchar ox, oy; X { X! /* Some dirty programming to get display right */ X! freeobj(obj); X! unpobj(obj); X! obj->nobj = fobj; X! fobj = obj; X! move_object(obj, ox, oy); X } X X #ifdef SINKS X! static X void X dosinkfall() { X register struct obj *obj; X--- 220,241 ---- X return (0); X } X X+ #endif /* OVL2 */ X+ #ifdef OVLB X+ X void X movobj(obj, ox, oy) X register struct obj *obj; X register xchar ox, oy; X { X! remove_object(obj); X! newsym(obj->ox, obj->oy); X! place_object(obj, ox, oy); X! newsym(ox, oy); X } X X #ifdef SINKS X! XSTATIC X void X dosinkfall() { X register struct obj *obj; X*************** X*** 234,244 **** X } else { X # endif X You("crash to the floor!"); X! losehp((rn1(10, 20 - (int)ACURR(A_CON))),"fall onto a sink"); X for(obj = level.objects[u.ux][u.uy]; obj; obj = obj->nexthere) X if(obj->olet == WEAPON_SYM) { X You("fell on %s.",doname(obj)); X! losehp(rn2(3),"fall onto a sink"); X } X # ifdef POLYSELF X } X--- 246,257 ---- X } else { X # endif X You("crash to the floor!"); X! losehp((rn1(10, 20 - (int)ACURR(A_CON))), X! "fell onto a sink", NO_KILLER_PREFIX); X for(obj = level.objects[u.ux][u.uy]; obj; obj = obj->nexthere) X if(obj->olet == WEAPON_SYM) { X You("fell on %s.",doname(obj)); X! losehp(rn2(3),"fell onto a sink", NO_KILLER_PREFIX); X } X # ifdef POLYSELF X } X*************** X*** 264,269 **** X--- 277,285 ---- X } X #endif X X+ #endif /* OVLB */ X+ #ifdef OVL1 X+ X static boolean X is_edge(x,y) X register xchar x,y; X*************** X*** 279,284 **** X--- 295,303 ---- X (y == rooms[roomno].ly - 1) || (y == rooms[roomno].hy + 1)); X } X X+ #endif /* OVL1 */ X+ #ifdef OVLB X+ X boolean X may_dig(x,y) X register xchar x,y; X*************** X*** 287,292 **** X--- 306,314 ---- X return (!(IS_STWALL(levl[x][y].typ) && (levl[x][y].diggable & W_NONDIGGABLE))); X } X X+ #endif /* OVLB */ X+ #ifdef OVL1 X+ X static boolean X bad_rock(x,y) X register xchar x,y; X*************** X*** 348,354 **** X if(u.ustuck && (x != u.ustuck->mx || X y != u.ustuck->my)) { X if(dist(u.ustuck->mx, u.ustuck->my) > 2) { X! /* perhaps it fled (or was teleported or ... ) */ X u.ustuck = 0; X } else { X #ifdef POLYSELF X--- 370,376 ---- X if(u.ustuck && (x != u.ustuck->mx || X y != u.ustuck->my)) { X if(dist(u.ustuck->mx, u.ustuck->my) > 2) { X! /* perhaps it fled (or was teleported or ... ) */ X u.ustuck = 0; X } else { X #ifdef POLYSELF X*************** X*** 376,382 **** X /* Don't attack if you're running */ X if (flags.run && !mtmp->mimic && X (Blind ? Telepat : X! (!mtmp->minvis || See_invisible))) { X nomul(0); X flags.move = 0; X return; X--- 398,404 ---- X /* Don't attack if you're running */ X if (flags.run && !mtmp->mimic && X (Blind ? Telepat : X! (!mtmp->minvis || See_invisible))) { X nomul(0); X flags.move = 0; X return; X*************** X*** 434,471 **** X return; X } X #endif X! if(IS_DOOR(tmpr->typ) && (tmpr->doormask & (D_LOCKED | D_CLOSED)) X #ifdef POLYSELF X! && !amorphous(uasmon) X #endif X- ){ X flags.move = 0; X if(x == u.ux || y == u.uy) { X if (Blind || Stunned || ACURR(A_DEX) < 10 || Fumbling) X pline("Ouch! You bump into a door."); X! else pline("That door is closed."); X } X nomul(0); X return; X } X #ifdef POLYSELF X } X #endif X ust = &levl[u.ux][u.uy]; X if(bad_rock(x,y) || X (u.dx && u.dy X #ifdef POLYSELF X! && !passes_walls(uasmon) X #endif X #ifdef REINCARNATION X! && (((IS_DOOR(tmpr->typ) && ((tmpr->doormask & ~D_BROKEN) X! || dlevel == rogue_level)) || X! ((IS_DOOR(ust->typ) && ((ust->doormask & ~D_BROKEN) X! || dlevel == rogue_level))))))) { X #else X! && (((IS_DOOR(tmpr->typ) && (tmpr->doormask & ~D_BROKEN)) || X! ((IS_DOOR(ust->typ) && (ust->doormask & ~D_BROKEN))))))){ X #endif X flags.move = 0; X nomul(0); X return; X--- 456,505 ---- X return; X } X #endif X! if(closed_door(x, y)) { X #ifdef POLYSELF X! if(amorphous(uasmon)) X! You("ooze under the door."); X! else { X #endif X flags.move = 0; X if(x == u.ux || y == u.uy) { X if (Blind || Stunned || ACURR(A_DEX) < 10 || Fumbling) X pline("Ouch! You bump into a door."); X! else pline("That door is closed."); X } X nomul(0); X return; X+ #ifdef POLYSELF X+ } X+ #endif X } X #ifdef POLYSELF X } X #endif X ust = &levl[u.ux][u.uy]; X+ X if(bad_rock(x,y) || X (u.dx && u.dy X #ifdef POLYSELF X! && !passes_walls(uasmon) X #endif X+ && ( (IS_DOOR(ust->typ) && block_entry(x, y)) || X #ifdef REINCARNATION X! (IS_DOOR(tmpr->typ) && X! ((tmpr->doormask & ~D_BROKEN) X! || dlevel == rogue_level || block_door(x, y)) X! ) X! || (IS_DOOR(ust->typ) && X! ((ust->doormask & ~D_BROKEN) || dlevel == rogue_level) X! ) X #else X! (IS_DOOR(tmpr->typ) && X! ((tmpr->doormask & ~D_BROKEN) || block_door(x, y))) || X! (IS_DOOR(ust->typ) && (ust->doormask & ~D_BROKEN)) X #endif X+ ) X+ )) { X flags.move = 0; X nomul(0); X return; X*************** X*** 507,514 **** X } X X movobj(uball, uchain->ox, uchain->oy); X! unpobj(uball); /* BAH %% */ X! move_object(uchain, u.ux, u.uy); X nomul(-2); X nomovemsg = ""; X nodrag: ; X--- 541,547 ---- X } X X movobj(uball, uchain->ox, uchain->oy); X! movobj(uchain, u.ux, u.uy); X nomul(-2); X nomovemsg = ""; X nodrag: ; X*************** X*** 515,521 **** X } X #ifdef POLYSELF X if (tunnels(uasmon) && !needspick(uasmon) && IS_ROCK(tmpr->typ)) { X! static char *digtxt; X X if(dig_pos.x != x || dig_pos.y != y X || dig_level != dlevel || dig_down) { X--- 548,554 ---- X } X #ifdef POLYSELF X if (tunnels(uasmon) && !needspick(uasmon) && IS_ROCK(tmpr->typ)) { X! static const char *digtxt; X X if(dig_pos.x != x || dig_pos.y != y X || dig_level != dlevel || dig_down) { X*************** X*** 649,654 **** X--- 682,690 ---- X spoteffects(); X } X X+ #endif /* OVL1 */ X+ #ifdef OVL2 X+ X void X spoteffects() X { X*************** X*** 676,681 **** X--- 712,720 ---- X X } X X+ #endif /* OVL2 */ X+ #ifdef OVLB X+ X int X dopickup() { X /* uswallow case added by GAN 01/29/87 */ X*************** X*** 684,690 **** X You("pick up %s's tongue.", mon_nam(u.ustuck)); X pline("But it's kind of slimy, so you drop it."); X } else X! pline("You don't %s anything in here to pick up.", X Blind ? "feel" : "see"); X return(1); X } X--- 723,729 ---- X You("pick up %s's tongue.", mon_nam(u.ustuck)); X pline("But it's kind of slimy, so you drop it."); X } else X! You("don't %s anything in here to pick up.", X Blind ? "feel" : "see"); X return(1); X } X*************** X*** 700,705 **** X--- 739,747 ---- X return(1); X } X X+ #endif /* OVLB */ X+ #ifdef OVL2 X+ X /* stop running if we see something interesting */ X /* turn around a corner if that is the only way we can proceed */ X /* do not turn left or right twice */ X*************** X*** 707,715 **** X lookaround() { X register int x, y, i, x0, y0, m0, i0 = 9, corrct = 0, noturn = 0; X register struct monst *mtmp; X! #ifdef LINT X /* suppress "used before set" message */ X! x0 = y0 = 0; X #endif X if(Blind || flags.run == 0) return; X for(x = u.ux-1; x <= u.ux+1; x++) for(y = u.uy-1; y <= u.uy+1; y++) { X--- 749,757 ---- X lookaround() { X register int x, y, i, x0, y0, m0, i0 = 9, corrct = 0, noturn = 0; X register struct monst *mtmp; X! #if defined(LINT) || defined(__GNULINT__) X /* suppress "used before set" message */ X! x0 = y0 = m0 = 0; X #endif X if(Blind || flags.run == 0) return; X for(x = u.ux-1; x <= u.ux+1; x++) for(y = u.uy-1; y <= u.uy+1; y++) { X*************** X*** 823,829 **** X if(MON_AT(x, y) && (mtmp = m_at(x,y)) && !mtmp->mimic && X !mtmp->mtame && !mtmp->mpeaceful && X !noattacks(mtmp->data) && X! !mtmp->mfroz && !mtmp->msleep && /* aplvax!jcn */ X (!mtmp->minvis || See_invisible) && X !onscary(u.ux, u.uy, mtmp)) X return(1); X--- 865,871 ---- X if(MON_AT(x, y) && (mtmp = m_at(x,y)) && !mtmp->mimic && X !mtmp->mtame && !mtmp->mpeaceful && X !noattacks(mtmp->data) && X! mtmp->mcanmove && !mtmp->msleep && /* aplvax!jcn */ X (!mtmp->minvis || See_invisible) && X !onscary(u.ux, u.uy, mtmp)) X return(1); X*************** X*** 831,836 **** X--- 873,881 ---- X return(0); X } X X+ #endif /* OVL2 */ X+ #ifdef OVL0 X+ X int X cansee(x,y) X xchar x,y; X*************** X*** 847,852 **** X--- 892,900 ---- X return(0); X } X X+ #endif /* OVL0 */ X+ #ifdef OVL1 X+ X int X sgn(a) X register int a; X*************** X*** 854,859 **** X--- 902,910 ---- X return((a > 0) ? 1 : (a == 0) ? 0 : -1); X } X X+ #endif /* OVL1 */ X+ #ifdef OVL2 X+ X void X getcorners(lx1,hx1,ly1,hy1,lx2,hx2,ly2,hy2) X xchar *lx1,*hx1,*ly1,*hy1,*lx2,*hx2,*ly2,*hy2; X*************** X*** 901,906 **** X--- 952,960 ---- X } X } X X+ #endif /* OVL2 */ X+ #ifdef OVL1 X+ X void X setsee() { X register int x, y; X*************** X*** 937,942 **** X--- 991,999 ---- X } X } X X+ #endif /* OVL1 */ X+ #ifdef OVL2 X+ X void X nomul(nval) X register int nval; X*************** X*** 946,955 **** X flags.mv = flags.run = 0; X } X X void X! losehp(n, knam) X! register int n; X! register const char *knam; X { X #ifdef POLYSELF X if (u.mtimedone) { X--- 1003,1016 ---- X flags.mv = flags.run = 0; X } X X+ #endif /* OVL2 */ X+ #ifdef OVL1 X+ X void X! losehp(n, knam, k_format) X! register int n; X! register const char *knam; X! boolean k_format; X { X #ifdef POLYSELF X if (u.mtimedone) { X*************** X*** 965,971 **** X u.uhpmax = u.uhp; /* perhaps n was negative */ X flags.botl = 1; X if(u.uhp < 1) { X! killer = (char *)knam; /* the thing that killed you */ X You("die..."); X done(DIED); X } else if(u.uhp*10 < u.uhpmax && moves-wailmsg > 50 && n > 0){ X--- 1026,1033 ---- X u.uhpmax = u.uhp; /* perhaps n was negative */ X flags.botl = 1; X if(u.uhp < 1) { X! killer_format = k_format; X! killer = knam; /* the thing that killed you */ X You("die..."); X done(DIED); X } else if(u.uhp*10 < u.uhpmax && moves-wailmsg > 50 && n > 0){ X*************** X*** 1052,1057 **** X--- 1114,1122 ---- X return(wt - weight_cap()); X } X X+ #endif /* OVL1 */ X+ #ifdef OVLB X+ X int X inv_cnt() { X register struct obj *otmp = invent; X*************** X*** 1115,1117 **** X--- 1180,1184 ---- X objects[x].oc_name_known = 1; X } X #endif /* STUPID_CPP */ X+ X+ #endif /* OVLB */ X*** src/Old/invent.c Mon Feb 19 18:06:12 1990 X--- src/invent.c Mon Feb 19 10:18:41 1990 X*************** X*** 11,20 **** X X #define NOINVSYM '#' X X! static boolean mergable(); X X int lastinvnr = 51; /* 0 ... 51 */ X- static char *xprname(); X X char inv_order[] = { X AMULET_SYM, WEAPON_SYM, ARMOR_SYM, FOOD_SYM, SCROLL_SYM, X--- 11,34 ---- X X #define NOINVSYM '#' X X! static boolean FDECL(mergable,(struct obj *,struct obj *)); X! OSTATIC void FDECL(assigninvlet,(struct obj *)); X! static int FDECL(merged,(struct obj *,struct obj *,int)); X! OSTATIC struct obj *FDECL(mkgoldobj,(long)); X! #ifndef OVERLAY X! static int FDECL(ckunpaid,(struct obj *)); X! #else X! int FDECL(ckunpaid,(struct obj *)); X! #endif X! static boolean NDECL(wearing_armor); X! static boolean FDECL(is_worn,(struct obj *)); X! static char FDECL(obj_to_let,(struct obj *)); X! X! OSTATIC char *FDECL(xprname,(struct obj *,CHAR_P,BOOLEAN_P)); X X+ #ifdef OVLB X+ X int lastinvnr = 51; /* 0 ... 51 */ X X char inv_order[] = { X AMULET_SYM, WEAPON_SYM, ARMOR_SYM, FOOD_SYM, SCROLL_SYM, X*************** X*** 24,30 **** X POTION_SYM, RING_SYM, WAND_SYM, TOOL_SYM, GEM_SYM, X ROCK_SYM, BALL_SYM, CHAIN_SYM, 0 }; X X! static void X assigninvlet(otmp) X register struct obj *otmp; X { X--- 38,44 ---- X POTION_SYM, RING_SYM, WAND_SYM, TOOL_SYM, GEM_SYM, X ROCK_SYM, BALL_SYM, CHAIN_SYM, 0 }; X X! XSTATIC void X assigninvlet(otmp) X register struct obj *otmp; X { X*************** X*** 51,56 **** X--- 65,73 ---- X lastinvnr = i; X } X X+ #endif /* OVLB */ X+ #ifdef OVL1 X+ X /* merge obj with otmp and delete obj if types agree */ X static int X merged(otmp, obj, lose) X*************** X*** 67,72 **** X--- 84,91 ---- X / (otmp->quan + obj->quan); X otmp->quan += obj->quan; X otmp->owt += obj->owt; X+ if(!otmp->onamelth && obj->onamelth) X+ (void)oname(otmp, ONAME(obj), 1); X if(lose) freeobj(obj); X obfree(obj,otmp); /* free(obj), bill->otmp */ X return(1); X*************** X*** 130,140 **** X * for correct calculation */ X if (stone_luck(TRUE) >= 0) u.moreluck = LUCKADD; X else u.moreluck = -LUCKADD; X- flags.botl = 1; X } X return(obj); X } X X void X useup(obj) X register struct obj *obj; X--- 149,161 ---- X * for correct calculation */ X if (stone_luck(TRUE) >= 0) u.moreluck = LUCKADD; X else u.moreluck = -LUCKADD; X } X return(obj); X } X X+ #endif /* OVL1 */ X+ #ifdef OVLB X+ X void X useup(obj) X register struct obj *obj; X*************** X*** 146,151 **** X--- 167,173 ---- X obj->quan--; X obj->owt = weight(obj); X } else { X+ if(obj->otyp == CORPSE) food_disappears(obj); X setnotworn(obj); X freeinv(obj); X delete_contents(obj); X*************** X*** 188,193 **** X--- 210,217 ---- X #ifdef WALKIES X if(obj->otyp == LEASH && obj->leashmon != 0) o_unleash(obj); X #endif X+ if(obj->otyp == CORPSE) food_disappears(obj); X+ X freeobj(obj); X unpobj(obj); X X*************** X*** 248,253 **** X--- 272,280 ---- X #endif X } X X+ #endif /* OVLB */ X+ #ifdef OVL0 X+ X struct obj * X sobj_at(n,x,y) X register int n, x, y; X*************** X*** 260,265 **** X--- 287,295 ---- X return((struct obj *)0); X } X X+ #endif /* OVL0 */ X+ #ifdef OVLB X+ X int X carried(obj) X register struct obj *obj; X*************** X*** 331,337 **** X } X X /* make dummy object structure containing gold - for temporary use only */ X! static X struct obj * X mkgoldobj(q) X register long q; X--- 361,367 ---- X } X X /* make dummy object structure containing gold - for temporary use only */ X! XSTATIC X struct obj * X mkgoldobj(q) X register long q; X*************** X*** 341,346 **** X--- 371,379 ---- X otmp = newobj(0); X /* should set o_id etc. but otmp will be freed soon */ X otmp->olet = GOLD_SYM; X+ #ifdef POLYSELF X+ otmp->ox = 0; /* necessary for eating gold */ X+ #endif X u.ugold -= q; X OGOLD(otmp) = q; X flags.botl = 1; X*************** X*** 347,352 **** X--- 380,388 ---- X return(otmp); X } X X+ #endif /* OVLB */ X+ #ifdef OVL1 X+ X /* X * getobj returns: X * struct obj *xxx: object to do something with. X*************** X*** 378,383 **** X--- 414,424 ---- X if(*let == '0') let++, allowcnt = 1; X if(*let == GOLD_SYM) let++, X usegold = TRUE, allowgold = (u.ugold ? TRUE : FALSE); X+ #ifdef POLYSELF X+ /* Equivalent of an "ugly check" for gold */ X+ if (usegold && !strcmp(word, "eat") && !metallivorous(uasmon)) X+ usegold = allowgold = FALSE; X+ #endif X if(*let == '#') let++, allowall = TRUE; X if(*let == '-') let++, allownone = TRUE; X if(allownone) *bp++ = '-'; X*************** X*** 410,417 **** X /* Second ugly check; unlike the first it won't trigger an X * "else" in "you don't have anything else to ___". X */ X! if ((!strcmp(word, "wear") && X (otmp->olet == TOOL_SYM && otmp->otyp != BLINDFOLD)) X || (!strcmp(word, "can") && X (otmp->otyp != CORPSE)) X || (!strcmp(word, "write with") && X--- 451,461 ---- X /* Second ugly check; unlike the first it won't trigger an X * "else" in "you don't have anything else to ___". X */ X! else if ((!strcmp(word, "wear") && X (otmp->olet == TOOL_SYM && otmp->otyp != BLINDFOLD)) X+ #ifdef POLYSELF X+ || (!strcmp(word, "eat") && !is_edible(otmp)) X+ #endif X || (!strcmp(word, "can") && X (otmp->otyp != CORPSE)) X || (!strcmp(word, "write with") && X*************** X*** 508,514 **** X allowcnt = 1; X if(cnt == 0 && prezero) return((struct obj *)0); X if(cnt > 1) { X! pline("You can only throw one item at a time."); X continue; X } X } X--- 552,558 ---- X allowcnt = 1; X if(cnt == 0 && prezero) return((struct obj *)0); X if(cnt > 1) { X! You("can only throw one item at a time."); X continue; X } X } X*************** X*** 552,557 **** X--- 596,602 ---- X if(cnt == 0) return (struct obj *)0; X if(cnt != otmp->quan) { X register struct obj *obj; X+ X #ifdef LINT /*splitobj for (long )cnt > 30000 && sizeof(int) == 2*/ X obj = (struct obj *)0; X #else X*************** X*** 561,566 **** X--- 606,620 ---- X else X obj = splitobj(otmp, (int) cnt); X #endif X+ /* Very ugly kludge necessary to prevent someone from trying X+ * to drop one of several loadstones and having the loadstone X+ * now be separate. If putting items in containers is ever X+ * changed to allow putting in counts of individual items, a X+ * similar kludge will be needed. X+ */ X+ if (!strcmp(word, "drop") && obj->otyp == LOADSTONE X+ && obj->cursed) X+ otmp->corpsenm = obj->invlet; X if(otmp == uwep) setuwep(obj); X } X } X*************** X*** 567,572 **** X--- 621,629 ---- X return(otmp); X } X X+ #endif /* OVL1 */ X+ #ifdef OVLB X+ X #ifndef OVERLAY X static X #endif X*************** X*** 600,607 **** X /* Takeoff (A). Return the number of times fn was called successfully */ X int X ggetobj(word, fn, mx) X! register char *word; X! register int (*fn)(), mx; X { X char buf[BUFSZ]; X register char *ip; X--- 657,664 ---- X /* Takeoff (A). Return the number of times fn was called successfully */ X int X ggetobj(word, fn, mx) X! register const char *word; X! register int FDECL((*fn),(struct obj *)), mx; X { X char buf[BUFSZ]; X register char *ip; X*************** X*** 609,615 **** X register int oletct = 0, iletct = 0; X register boolean allflag = FALSE; X char olets[20], ilets[20]; X! int (*ckfn)() = (int (*)()) 0; X xchar allowgold = (u.ugold && !strcmp(word, "drop")) ? 1 : 0; /* BAH */ X register boolean takeoff = !strcmp(word, "take off"); X X--- 666,672 ---- X register int oletct = 0, iletct = 0; X register boolean allflag = FALSE; X char olets[20], ilets[20]; X! int FDECL((*ckfn),(struct obj *)) = (int (*)()) 0; X xchar allowgold = (u.ugold && !strcmp(word, "drop")) ? 1 : 0; /* BAH */ X register boolean takeoff = !strcmp(word, "take off"); X X*************** X*** 708,715 **** X askchain(objchn, ininv, olets, allflag, fn, ckfn, mx, word) X register struct obj *objchn; X register int ininv, allflag, mx; X! register char *olets, *word; X! register int (*fn)(), (*ckfn)(); X { X register struct obj *otmp, *otmp2; X register char sym, ilet; X--- 765,772 ---- X askchain(objchn, ininv, olets, allflag, fn, ckfn, mx, word) X register struct obj *objchn; X register int ininv, allflag, mx; X! register const char *olets, *word; X! register int FDECL((*fn),(struct obj *)), FDECL((*ckfn),(struct obj *)); X { X register struct obj *otmp, *otmp2; X register char sym, ilet; X*************** X*** 732,742 **** X if(takeoff && !is_worn(otmp)) continue; X if(ckfn && !(*ckfn)(otmp)) continue; X if(!allflag) { X! if(ininv) { X! if (nodot) X! pline(xprname(otmp, ilet, FALSE)); X! else pline(xprname(otmp, ilet, TRUE)); X! } X else X pline(doname(otmp)); X addtopl("? "); X--- 789,797 ---- X if(takeoff && !is_worn(otmp)) continue; X if(ckfn && !(*ckfn)(otmp)) continue; X if(!allflag) { X! if(ininv) X! pline("%s", xprname(otmp, ilet, X! nodot ? FALSE : TRUE)); X else X pline(doname(otmp)); X addtopl("? "); X*************** X*** 788,794 **** X pline(xprname(obj, obj_to_let(obj), TRUE)); X } X X! static char * X xprname(obj,let,dot) X register struct obj *obj; X register char let; X--- 843,852 ---- X pline(xprname(obj, obj_to_let(obj), TRUE)); X } X X! #endif /* OVLB */ X! #ifdef OVL1 X! X! XSTATIC char * X xprname(obj,let,dot) X register struct obj *obj; X register char let; X*************** X*** 807,812 **** X--- 865,873 ---- X return(li); X } X X+ #endif /* OVL1 */ X+ #ifdef OVLB X+ X int X ddoinv() X { X*************** X*** 814,824 **** X return 0; X } X X /* called with 0 or "": all objects in inventory */ X /* otherwise: all objects with (serial) letter in lets */ X void X doinv(lets) X! register char *lets; X { X register struct obj *otmp; X register char ilet; X--- 875,888 ---- X return 0; X } X X+ #endif /* OVLB */ X+ #ifdef OVL1 X+ X /* called with 0 or "": all objects in inventory */ X /* otherwise: all objects with (serial) letter in lets */ X void X doinv(lets) X! register const char *lets; X { X register struct obj *otmp; X register char ilet; X*************** X*** 879,884 **** X--- 943,951 ---- X cornline(2, any); X } X X+ #endif /* OVL1 */ X+ #ifdef OVLB X+ X int X dotypeinv() /* free after Robert Viduya */ X /* Changed to one type only, so he doesn't have to type cr */ X*************** X*** 965,971 **** X dolook() { X register struct obj *otmp, *otmp0; X register struct gold *gold; X! char *verb = Blind ? "feel" : "see"; X int ct = 0; X int fd = 0; X X--- 1032,1038 ---- X dolook() { X register struct obj *otmp, *otmp0; X register struct gold *gold; X! const char *verb = Blind ? "feel" : "see"; X int ct = 0; X int fd = 0; X X*************** X*** 1012,1018 **** X #endif X #ifdef ALTARS X if(IS_ALTAR(levl[u.ux][u.uy].typ)) { X! char *al; X X fd++; X switch (levl[u.ux][u.uy].altarmask & ~A_SHRINE) { X--- 1079,1085 ---- X #endif X #ifdef ALTARS X if(IS_ALTAR(levl[u.ux][u.uy].typ)) { X! const char *al; X X fd++; X switch (levl[u.ux][u.uy].altarmask & ~A_SHRINE) { X*************** X*** 1073,1078 **** X--- 1140,1146 ---- X (otmp->otyp == CORPSE && otmp->corpsenm == PM_COCKATRICE)) { X pline("Touching the dead cockatrice is a fatal mistake..."); X You("turn to stone..."); X+ killer_format = KILLED_BY_AN; X killer = "cockatrice corpse"; X done(STONING); X } X*************** X*** 1098,1103 **** X--- 1166,1174 ---- X return(!!Blind); X } X X+ #endif /* OVLB */ X+ #ifdef OVL1 X+ X void X stackobj(obj) X register struct obj *obj; X*************** X*** 1122,1144 **** X obj->otrapped != otmp->otrapped) X return(FALSE); X X! else if((obj->olet==WEAPON_SYM || obj->olet==ARMOR_SYM) && X obj->rustfree != otmp->rustfree) return FALSE; X X! else if(obj->olet == FOOD_SYM && (obj->oeaten != otmp->oeaten || X obj->orotten != otmp->orotten)) X return(FALSE); X X! else if(obj->otyp == CORPSE || obj->otyp == EGG || obj->otyp == TIN) X! return( (obj->corpsenm == otmp->corpsenm) && X! (!ONAME(obj) || !strcmp(ONAME(obj), ONAME(otmp))) ); X X! else if(obj->known == otmp->known || X !objects[otmp->otyp].oc_uses_known) { X return(objects[obj->otyp].oc_merge); X } else return(FALSE); X } X X int X doprgold(){ X if(!u.ugold) X--- 1193,1232 ---- X obj->otrapped != otmp->otrapped) X return(FALSE); X X! if((obj->olet==WEAPON_SYM || obj->olet==ARMOR_SYM) && X obj->rustfree != otmp->rustfree) return FALSE; X X! if(obj->olet == FOOD_SYM && (obj->oeaten != otmp->oeaten || X obj->orotten != otmp->orotten)) X return(FALSE); X X! if(obj->otyp == CORPSE || obj->otyp == EGG || obj->otyp == TIN) { X! if((obj->corpsenm != otmp->corpsenm) || X! (ONAME(obj) && strcmp(ONAME(obj), ONAME(otmp)))) X! return FALSE; X! } X! X! /* if they have names, make sure they're the same */ X! if ( (obj->onamelth != otmp->onamelth && X! ((obj->onamelth && otmp->onamelth) || obj->otyp == CORPSE) X! ) || X! (obj->onamelth && X! strncmp(ONAME(obj), ONAME(otmp), (int)obj->onamelth))) X! return FALSE; X! X! #ifdef NAMED_ITEMS X! if(is_artifact(obj) != is_artifact(otmp)) return FALSE; X! #endif X X! if(obj->known == otmp->known || X !objects[otmp->otyp].oc_uses_known) { X return(objects[obj->otyp].oc_merge); X } else return(FALSE); X } X X+ #endif /* OVL1 */ X+ #ifdef OVLB X+ X int X doprgold(){ X if(!u.ugold) X*************** X*** 1305,1307 **** X--- 1393,1397 ---- X obj->invlet = (i < 26) ? ('a'+i) : ('A'+i-26); X lastinvnr = i; X } X+ X+ #endif /* OVLB */ X END_OF_FILE if test 56054 -ne `wc -c <'patch7.04'`; then echo shar: \"'patch7.04'\" unpacked with wrong size! fi # end of 'patch7.04' echo shar: End of archive 8 \(of 30\). cp /dev/null ark8isdone 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