billr@saab.CNA.TEK.COM (Bill Randle) (02/24/90)
Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu> Posting-number: Volume 9, Issue 6 Archive-name: NetHack3/Patch7f 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 6 (of 30)." # Contents: do_patch7.sh patch7.05 # Wrapped by billr@saab on Wed Feb 21 10:04:27 1990 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'do_patch7.sh' -a "${1}" != "-c" ; then echo shar: Renaming existing file \"'do_patch7.sh'\" to \"'do_patch7.sh.orig'\" mv -f 'do_patch7.sh' 'do_patch7.sh.orig' fi echo shar: Extracting \"'do_patch7.sh'\" \(763 characters\) sed "s/^X//" >'do_patch7.sh' <<'END_OF_FILE' X#! /bin/sh X# script to call patch to apply diff files X# make sure all of the patch files (and this file) are in your top level X# NetHack directory X# Xecho "removing unused files" Xrm -f amiga/Install.ami Xrm -f amiga/fcntl.h Xrm -f amiga/signal.h Xrm -f amiga/stdio.h Xrm -f include/trapname.h Xrm -f mac/Install.mac Xrm -f mac/Makedefs.rma Xrm -f mac/Nethack.rma Xrm -f mac/hackfont.hqx Xrm -f mac/makedefs.r Xrm -f mac/nethack.r Xrm -f others/Make.ini Xrm -f others/Maketcc.ini Xrm -f others/oldtos.c Xrm -f vms/Install.vms Xecho "creating monst.c from monst.c1 and monst.c2" Xmv -f src/monst.c src/monst.c.orig Xcat src/monst.c1 src/monst.c2 > src/monst.c Xrm src/monst.c1 src/monst.c2 Xecho "applying patch7" Xcat patch7.?? | patch -p Xecho "all patches applied, check for rejects" END_OF_FILE if test 763 -ne `wc -c <'do_patch7.sh'`; then echo shar: \"'do_patch7.sh'\" unpacked with wrong size! fi chmod +x 'do_patch7.sh' # end of 'do_patch7.sh' if test -f 'patch7.05' -a "${1}" != "-c" ; then echo shar: Renaming existing file \"'patch7.05'\" to \"'patch7.05.orig'\" mv -f 'patch7.05' 'patch7.05.orig' fi echo shar: Extracting \"'patch7.05'\" \(56505 characters\) sed "s/^X//" >'patch7.05' <<'END_OF_FILE' X*** src/Old/pager.c Mon Feb 19 18:49:43 1990 X--- src/pager.c Fri Feb 16 19:15:27 1990 X*************** X*** 1,4 **** X! /* SCCS Id: @(#)pager.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: @(#)pager.c 3.0 89/11/19 X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X /* NetHack may be freely redistributed. See license for details. */ X X*************** X*** 6,15 **** X /* Also readmail() and doshell(), and generally the things that X contact the outside world. */ X X /* block some unused #defines to avoid overloading some cpp's */ X- #define MONATTK_H X #include "hack.h" X X #ifndef NO_SIGNAL X #include <signal.h> X #endif X--- 6,16 ---- X /* Also readmail() and doshell(), and generally the things that X contact the outside world. */ 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+ #include <ctype.h> X #ifndef NO_SIGNAL X #include <signal.h> X #endif X*************** X*** 21,32 **** X extern short macflags; X #endif X X! static char hc = 0; X X static void FDECL(page_more, (FILE *,int)); X! static boolean FDECL(clear_help, (CHAR_P)); X! static boolean FDECL(valid_help, (CHAR_P)); X X /* X * print out another possibility for dowhatis. "new" is the possible new X * string; "out_flag" indicates whether we really want output, and if X--- 22,78 ---- X extern short macflags; X #endif X X! #ifndef SEEK_SET X! #define SEEK_SET 0 X! #endif X! X! #ifndef OVLB X! OSTATIC char hc; X! #else /* OVLB */ X! XSTATIC char hc = 0; X! #endif /* OVLB */ X X static void FDECL(page_more, (FILE *,int)); X! OSTATIC boolean FDECL(clear_help, (CHAR_P)); X! OSTATIC boolean FDECL(valid_help, (CHAR_P)); X! static boolean FDECL(pmatch,(const char *,const char *)); X! static boolean FDECL(outspec,(const char *,int)); X! static const char *FDECL(lookat,(int,int,UCHAR_P)); X! #ifdef WIZARD X! static void NDECL(wiz_help); X! #endif X! static void NDECL(help_menu); X! X! #ifdef OVLB X! X! /* X! * simple pattern matcher: '*' matches 0 or more characters X! * returns TRUE if strng matches patrn X! */ X! X! static boolean X! pmatch(patrn, strng) X! const char *patrn, *strng; X! { X! char s, p; X X+ s = *strng; X+ p = *patrn; X+ X+ if (!p) { X+ return (s == 0); X+ } X+ X+ if (p == '*') { X+ if (!patrn[1] || pmatch(patrn+1, strng)) { X+ return TRUE; X+ } X+ return (s ? pmatch(patrn, strng+1) : FALSE); X+ } X+ X+ return (p == s) ? pmatch(patrn+1, strng+1) : FALSE; X+ } X+ X /* X * print out another possibility for dowhatis. "new" is the possible new X * string; "out_flag" indicates whether we really want output, and if X*************** X*** 36,42 **** X X static boolean X outspec(new, out_flag) X! char *new; X int out_flag; X { X static char old[50]; X--- 82,88 ---- X X static boolean X outspec(new, out_flag) X! const char *new; X int out_flag; X { X static char old[50]; X*************** X*** 45,69 **** X return FALSE; /* don't print the same thing twice */ X X if (out_flag) X! pline("(or %s)", new); X X Strcpy(old, new); X return 1; X } X X int X dowhatis() X { X FILE *fp; X! char bufr[BUFSZ+6]; X! register char *buf = &bufr[6], *ep; X! uchar q, typ; X register int i; X coord cc; X boolean oldverb = flags.verbose; X! boolean found_in_file = FALSE; X int found = 0; X- register struct monst *mtmp; X X #ifdef OS2_CODEVIEW X char tmp[PATHLEN]; X--- 91,268 ---- X return FALSE; /* don't print the same thing twice */ X X if (out_flag) X! pline("(or %s)", an(new)); X X Strcpy(old, new); X return 1; X } X X+ /* X+ * return the name of the character ch found at (x,y) X+ */ X+ X+ static X+ const char * X+ lookat(x, y, ch) X+ int x,y; X+ uchar ch; X+ { X+ register struct monst *mtmp; X+ register struct obj *otmp; X+ struct trap *trap; X+ static char answer[50]; X+ register char *s, *t; X+ uchar typ; X+ X+ answer[0] = 0; X+ X+ if(MON_AT(x,y)) { X+ mtmp = m_at(x,y); X+ if (!showmon(mtmp) || Hallucination) X+ mtmp = (struct monst *)0; X+ } else X+ mtmp = (struct monst *) 0; X+ typ = levl[x][y].typ; X+ if (!Invisible X+ #ifdef POLYSELF X+ && !u.uundetected X+ #endif X+ && u.ux==x && u.uy==y) { X+ Sprintf(answer, "%s named %s", X+ #ifdef POLYSELF X+ u.mtimedone ? mons[u.umonnum].mname : X+ #endif X+ pl_character, plname); X+ } else if (mtmp && !mtmp->mimic) X+ Sprintf(answer, "%s%s", X+ mtmp->mtame ? "tame " : X+ mtmp->mpeaceful ? "peaceful " : "", X+ strncmp(lmonnam(mtmp), "the ", 4) X+ ? lmonnam(mtmp) : lmonnam(mtmp)+4); X+ else if (!levl[x][y].seen) X+ Strcpy(answer,"dark part of a room"); X+ else if (mtmp && mtmp->mimic) { X+ if (mtmp->m_ap_type == M_AP_FURNITURE) { X+ if (mtmp->mappearance == S_altar) X+ Strcpy(answer, "neutral altar"); X+ else X+ Strcpy(answer, explainsyms[mtmp->mappearance]); X+ } X+ else if (mtmp->m_ap_type == M_AP_OBJECT) { X+ if (mtmp->mappearance == STRANGE_OBJECT) X+ Strcpy(answer, "strange object"); X+ else { X+ otmp = mksobj((int) mtmp->mappearance,FALSE ); X+ Strcpy(answer, distant_name(otmp, xname)); X+ free((genericptr_t) otmp); X+ } X+ } X+ else if (mtmp->m_ap_type == M_AP_GOLD) X+ Strcpy(answer, "pile of gold"); X+ } X+ else if (OBJ_AT(x, y)) { X+ otmp = level.objects[x][y]; X+ Strcpy(answer, distant_name(otmp, xname)); X+ } X+ else if (ch == GOLD_SYM) { X+ Strcpy(answer, "pile of gold"); X+ } X+ #ifdef ALTARS X+ else if (ch == ALTAR_SYM && IS_ALTAR(typ)) { X+ int kind = levl[x][y].altarmask & ~A_SHRINE; X+ Sprintf( answer, "%s altar", X+ (kind == A_CHAOS) ? "chaotic" : X+ (kind == A_NEUTRAL) ? "neutral" : X+ "lawful" ); X+ } X+ #endif X+ #ifdef STRONGHOLD X+ else if ((ch == DB_VWALL_SYM || ch == DB_HWALL_SYM) && is_db_wall(x,y)) X+ Strcpy(answer,"raised drawbridge"); X+ #endif X+ #ifdef THRONES X+ else if ((ch == THRONE_SYM) && IS_THRONE(typ)) X+ Strcpy(answer, "throne"); X+ #endif X+ else if ( (ch==H_OPEN_DOOR_SYM || X+ ch==V_OPEN_DOOR_SYM || X+ ch==CLOSED_DOOR_SYM || X+ ch==NO_DOOR_SYM) && X+ IS_DOOR(typ) ) { X+ switch(levl[x][y].doormask & ~D_TRAPPED) { X+ case D_NODOOR: Strcpy(answer,"doorway"); break; X+ case D_BROKEN: Strcpy(answer,"broken door"); break; X+ case D_ISOPEN: Strcpy(answer,"open door"); break; X+ default: Strcpy(answer,"closed door"); break; X+ /* locked or not */ X+ } X+ } X+ #ifdef SINKS X+ else if (ch == SINK_SYM && IS_SINK(levl[x][y].typ)) X+ Strcpy(answer,"sink"); X+ #endif X+ else if ((ch == TRAP_SYM || ch == WEB_SYM) && (trap = t_at(x, y))) { X+ if (trap->ttyp == WEB && ch == WEB_SYM) X+ Strcpy(answer, "web"); X+ else if (trap->ttyp != MONST_TRAP && ch == TRAP_SYM) { X+ Strcpy(answer, traps[ Hallucination ? X+ rn2(TRAPNUM-3)+3 : trap->ttyp]); X+ /* strip leading garbage */ X+ for (s = answer; *s && *s != ' '; s++) ; X+ if (*s) ++s; X+ for (t = answer; *t++ = *s++; ) ; X+ } X+ } X+ else if (ch == UP_SYM && x == xupstair && y == yupstair) X+ Strcpy(answer, "staircase up"); X+ else if (ch == DN_SYM && x == xdnstair && y == ydnstair) X+ Strcpy(answer, "staircase down"); X+ #ifdef STRONGHOLD X+ else if (ch == UPLADDER_SYM && x && x == xupladder && y == ydnladder) X+ Strcpy(answer, "ladder up"); X+ else if (ch == DNLADDER_SYM && x && x == xdnladder && y == ydnladder) X+ Strcpy(answer, "ladder down"); X+ #endif X+ else if (IS_ROOM(typ)) { X+ if (ch == ROOM_SYM) { X+ if (levl[x][y].icedpool) X+ Strcpy(answer,"iced pool"); X+ else X+ Strcpy(answer,"floor of a room"); X+ } X+ else if (ch == STONE_SYM || ch == ' ') X+ Strcpy(answer,"dark part of a room"); X+ } X+ else if (ch == CORR_SYM && SPACE_POS(typ)) X+ Strcpy(answer,"corridor"); X+ else if (!ACCESSIBLE(typ)) { X+ if (ch == STONE_SYM || ch == ' ') X+ Strcpy(answer,"dark part of a room"); X+ else X+ Strcpy(answer,"wall"); X+ } X+ return answer; X+ } X+ X+ X int X dowhatis() X { X FILE *fp; X! char buf[BUFSZ], inpbuf[BUFSZ]; X! register char *ep, *inp = inpbuf; X! char *alt = 0; /* alternate description */ X! #ifdef __GNULINT__ X! const char *firstmatch = 0; X! #else X! const char *firstmatch; X! #endif X! uchar q; X register int i; X coord cc; X boolean oldverb = flags.verbose; X! boolean found_in_file = FALSE, need_to_print = FALSE; X int found = 0; X X #ifdef OS2_CODEVIEW X char tmp[PATHLEN]; X*************** X*** 92,105 **** X return 0; X } else if (q == 'n') { X cc.x = cc.y = -1; X! pline("Specify what? "); X! q = readchar(); X } else { X cc.x = u.ux; X cc.y = u.uy; X selobj: X! found_in_file = FALSE; X found = 0; X (void) outspec("", 0); /* reset output */ X if(flags.verbose) X pline("Please move the cursor to an unknown object."); X--- 291,314 ---- X return 0; X } else if (q == 'n') { X cc.x = cc.y = -1; X! pline("Specify what? (type the word) "); X! getlin(inp); X! if (inp[0] == '\033' || !inp[0]) { X! (void)fclose(fp); X! return 0; X! } X! if (!inp[1]) X! q = inp[0]; X! else X! q = 0; X } else { X cc.x = u.ux; X cc.y = u.uy; X selobj: X! need_to_print = found_in_file = FALSE; X found = 0; X+ inp = inpbuf; X+ alt = 0; X (void) outspec("", 0); /* reset output */ X if(flags.verbose) X pline("Please move the cursor to an unknown object."); X*************** X*** 117,258 **** X q = ' '; X } X X! if (index(quitchars, (char)q)) { X (void) fclose(fp); /* sweet@scubed */ X flags.verbose = oldverb; X return 0; X } X X! /* now check for symbols defined in the data file */ X! if(q != '\t') X! while(fgets(buf,BUFSZ,fp)) { X! if(*buf == q) { X! ep = index(buf, '\n'); X! if(ep) *ep = 0; X! /* else: bad data file */ X! /* Expand tab 'by hand' */ X! if (buf[1] == '\t') { X! buf = bufr; X! buf[0] = q; X! (void) strncpy(buf+1, " ", 7); X! } X! pline("%s", buf); /* watch out for % in output */ X! (void) outspec("", 0); X found++; X- found_in_file = TRUE; X break; X } X } X X /* Now check for graphics symbols */ X for (i = 0; i < MAXPCHARS; i++) { X if ( q == showsyms[i] && (*explainsyms[i])) { X if (!found) { X! pline("%c %s",q,explainsyms[i]); X! (void) outspec(explainsyms[i], 0); X found++; X } X else if (outspec(explainsyms[i], 1)) X found++; X } X } X X if (!found) X pline("I've never heard of such things."); X! X! /* now check for specific things at a given location */ X! if(cc.x != -1 && found) { X! if(MON_AT(cc.x,cc.y)) { X! mtmp = m_at(cc.x,cc.y); X! if (!showmon(mtmp) || Hallucination) X! mtmp = (struct monst *)0; X! } else X! mtmp = (struct monst *) 0; X! typ = levl[cc.x][cc.y].typ; X! if (!Invisible X! #ifdef POLYSELF X! && !u.uundetected X! #endif X! && u.ux==cc.x && u.uy==cc.y) { X! pline("(%s named %s)", X! #ifdef POLYSELF X! u.mtimedone ? mons[u.umonnum].mname : X! #endif X! pl_character, plname); X! } else if (mtmp && !mtmp->mimic) X! pline("(%s%s)", X! mtmp->mtame ? "tame " : X! mtmp->mpeaceful ? "peaceful " : "", X! strncmp(lmonnam(mtmp), "the ", 4) X! ? lmonnam(mtmp) : lmonnam(mtmp)+4); X! /* Only worry about the rest of the cases if the symbol could represent X! more than one thing */ X! else if (found <= 1) X! /* do nothing */ ; X! else if (!levl[cc.x][cc.y].seen) X! pline("(a dark part of a room)"); X! #ifdef ALTARS X! else if (q == showsyms[S_altar] && X! (IS_ALTAR(typ) || (mtmp && mtmp->mimic))) { X! int kind = levl[cc.x][cc.y].altarmask & ~A_SHRINE; X! pline( "(%s altar)", X! (kind == A_CHAOS) ? "chaotic" : X! (kind == A_NEUTRAL) ? "neutral" : X! "lawful" ); X! } X! #endif X! else if ((q==showsyms[S_ndoor] || X! q==showsyms[S_vodoor] || X! q==showsyms[S_hodoor] || X! q==showsyms[S_cdoor]) && X! (IS_DOOR(typ) || X! (IS_WALL(typ) && mtmp && mtmp->mimic))) { X! /* Note: this will say mimics in walls are X! * closed doors, which we want. X! */ X! switch(levl[cc.x][cc.y].doormask & ~D_TRAPPED) { X! case D_NODOOR: pline("(doorway)"); break; X! case D_BROKEN: pline("(broken door)"); break; X! case D_ISOPEN: pline("(open door)"); break; X! default: pline("(closed door)"); break; X! /* locked or not */ X! } X } X! #ifdef STRONGHOLD X! else if ((q == showsyms[S_dbvwall] || X! q == showsyms[S_dbhwall]) && X! is_db_wall(cc.x,cc.y)) X! pline("(raised drawbridge)"); X! #endif X! #ifdef SINKS X! else if (q == showsyms[S_sink] && IS_SINK(levl[cc.x][cc.y].typ)) X! pline("(sink)"); X! #endif X! else if (IS_ROOM(typ) && q == showsyms[S_room]) X! pline("(floor of a room)"); X! else if (q == showsyms[S_corr] && SPACE_POS(typ)) X! pline("(corridor)"); X! else if (!ACCESSIBLE(typ)) { X! if (q == showsyms[S_stone] || q == ' ') X! pline("(dark part of a room)"); X else X! pline("(wall)"); X } X } X X! /* now check for "more info" */ X! if(found_in_file && ep[-1] == ';') { X! pline("More info? "); X! if(yn() == 'y') { X! page_more(fp,1); /* does fclose() */ X flags.verbose = oldverb; X return 0; X } X } X X /* if specified by cursor, keep going */ X if(cc.x != -1) { X- buf = &bufr[6]; X more(); X rewind(fp); X goto selobj; X--- 326,486 ---- X q = ' '; X } X X! if (!q) X! goto checkfile; /* user typed in a complete string */ X! X! if (q != ' ' && index(quitchars, (char)q)) { X (void) fclose(fp); /* sweet@scubed */ X flags.verbose = oldverb; X return 0; X } X+ /* X+ * if the user just typed one letter, or we're identifying from the X+ * screen, then we have to check all the possibilities and print them X+ * out for him/her X+ */ X X! /* Check for monsters */ X! for (i = 0; monsyms[i]; i++) { X! if (q == monsyms[i]) { X! need_to_print = TRUE; X! pline("%c %s",q,an(monexplain[i])); X! (void) outspec(firstmatch = monexplain[i], 0); X found++; X break; X } X } X X+ /* Now check for objects */ X+ for (i = 0; objsyms[i]; i++) { X+ if (q == objsyms[i]) { X+ need_to_print = TRUE; X+ if (!found) { X+ pline("%c %s",q,an(objexplain[i])); X+ (void)outspec(firstmatch = objexplain[i], 0); X+ found++; X+ } X+ else if (outspec(objexplain[i], 1)) X+ found++; X+ } X+ } X+ X /* Now check for graphics symbols */ X for (i = 0; i < MAXPCHARS; i++) { X if ( q == showsyms[i] && (*explainsyms[i])) { X if (!found) { X! pline("%c %s",q,an(explainsyms[i])); X! (void)outspec(firstmatch = explainsyms[i], 0); X found++; X } X else if (outspec(explainsyms[i], 1)) X found++; X+ if (i == S_altar || i == S_trap || i == S_web) X+ need_to_print = TRUE; X } X } X X if (!found) X pline("I've never heard of such things."); X! else if (cc.x != -1) { /* a specific object on screen */ X! if (found > 1 || need_to_print) { X! Strcpy(inp, lookat(cc.x, cc.y, q)); X! if (*inp) X! pline("(%s)", inp); X } X! else { X! Strcpy(inp, firstmatch); X! } X! } X! else if (found == 1) { X! Strcpy(inp, firstmatch); X! } X! else X! found = FALSE; /* abort the 'More info?' stuff */ X! X! /* check the data file for information about this thing */ X! X! checkfile: X! X! if (!strncmp(inp, "a ", 2)) X! inp += 2; X! else if (!strncmp(inp, "an ", 3)) X! inp += 3; X! else if (!strncmp(inp, "the ", 4)) X! inp += 4; X! if (!strncmp(inp, "tame ", 5)) X! inp += 5; X! else if (!strncmp(inp, "peaceful ", 9)) X! inp += 9; X! if (!strncmp(inp, "invisible ", 10)) X! inp += 10; X! X! if ((!q || found) && *inp) { X! /* adjust the input to remove "named " and convert to lower case */ X! for (ep = inp; *ep; ) { X! if ((!strncmp(ep, " named ", 7) && (alt = ep + 7)) || X! !strncmp(ep, " called ", 8)) X! *ep = 0; X else X! (*ep = tolower(*ep)), ep++; X! } X! X! /* X! * If the object is named, then the name is the alternate search string; X! * otherwise, the result of makesingular() applied to the name is. This X! * isn't strictly optimal, but named objects of interest to the user should X! * will usually be found under their name, rather than under their X! * object type, so looking for a singular form is pointless. X! */ X! X! if (!alt) X! alt = makesingular(inp); X! else X! for (ep = alt; *ep; ep++) *ep = tolower(*ep); X! X! while(fgets(buf,BUFSZ,fp)) { X! if(*buf != '\t') { X! ep = index(buf, '\n'); X! if(ep) *ep = 0; X! else impossible("bad data file"); X! if (pmatch(buf, inp)||(alt && pmatch(buf, alt))) { X! found_in_file = TRUE; X! break; X! } X! } X } X } X X! if(found_in_file) { X! /* skip over other possible matches for the info */ X! for(;;) { X! if ( (i = getc(fp)) == '\t' ) { X! (void) ungetc(i, fp); X! break; X! } X! if (!fgets(buf, BUFSZ, fp)) { X! break; X! } X! } X! if (q) { X! pline("More info? "); X! if(yn() == 'y') { X! page_more(fp,1); /* does fclose() */ X! flags.verbose = oldverb; X! return 0; X! } X! } X! else { X! page_more(fp, 1); X flags.verbose = oldverb; X return 0; X } X } X+ else if (!q) X+ pline("I don't have any information on those things."); X X /* if specified by cursor, keep going */ X if(cc.x != -1) { X more(); X rewind(fp); X goto selobj; X*************** X*** 351,356 **** X--- 579,595 ---- X #if !defined(MSDOS) && !defined(TOS) && !defined(MACOS) X int (*prevsig)() = (int (*)())signal(SIGINT, (SIG_RET_TYPE) intruph); X #endif X+ #ifdef MACOS X+ short tmpflags; X+ X+ tmpflags = macflags; X+ macflags &= ~fDoUpdate; X+ if(!mac_more(fp, strip)) { X+ macflags |= (tmpflags & fDoUpdate); X+ return; X+ } X+ macflags |= (tmpflags & fDoUpdate); X+ #else X #if defined(MSDOS) || defined(MINIMAL_TERM) X /* There seems to be a bug in ANSI.SYS The first tab character X * after a clear screen sequence is not expanded correctly. Thus X*************** X*** 396,406 **** X (void) signal(SIGINT, (SIG_RET_TYPE) prevsig); X got_intrup = 0; X #endif X } X X! static boolean whole_screen = TRUE; X #define PAGMIN 12 /* minimum # of lines for page below level map */ X X void X set_whole_screen() { /* called in termcap as soon as LI is known */ X whole_screen = (LI-ROWNO-2 <= PAGMIN || !CD); X--- 635,655 ---- X (void) signal(SIGINT, (SIG_RET_TYPE) prevsig); X got_intrup = 0; X #endif X+ #endif X } X X! #endif /* OVLB */ X! X #define PAGMIN 12 /* minimum # of lines for page below level map */ X X+ #ifndef OVLB X+ X+ OSTATIC boolean whole_screen; X+ X+ #else /* OVLB */ X+ X+ XSTATIC boolean whole_screen = TRUE; X+ X void X set_whole_screen() { /* called in termcap as soon as LI is known */ X whole_screen = (LI-ROWNO-2 <= PAGMIN || !CD); X*************** X*** 439,445 **** X--- 688,700 ---- X so = flags.standout; X flags.standout = 1; X } else { X+ #ifdef MACOS X+ macflags |= fFullScrKluge; X+ #endif X if(mode == 1) { X+ #ifdef MACOS X+ macflags |= fCornScrKluge; X+ #endif X curs(1, LI); X more(); X } X*************** X*** 450,461 **** X curs(1, ROWNO+4); X cl_eos(); X } X } X } X X int X page_line(s) /* returns 1 if we should quit */ X! register char *s; X { X if(cury == LI-1) { X if(!*s) X--- 705,722 ---- X curs(1, ROWNO+4); X cl_eos(); X } X+ #ifdef MACOS X+ macflags &= ~fScreenKluges; X+ #endif X } X } X X+ #endif /* OVLB */ X+ #ifdef OVL0 X+ X int X page_line(s) /* returns 1 if we should quit */ X! register const char *s; X { X if(cury == LI-1) { X if(!*s) X*************** X*** 501,507 **** X void X cornline(mode, text) X int mode; X! char *text; X { X static struct line { X struct line *next_line; X--- 762,768 ---- X void X cornline(mode, text) X int mode; X! const char *text; X { X static struct line { X struct line *next_line; X*************** X*** 556,561 **** X--- 817,833 ---- X else X if(mode == 2) { X register int curline, lth; X+ #ifdef MACOS X+ short tmpflags; X+ extern struct line *mactexthead; X+ extern int macmaxlen, maclinect; X+ X+ tmpflags = macflags; X+ macflags |= fDoUpdate | fDisplayKluge; X+ mactexthead = texthead; X+ macmaxlen = maxlen; X+ maclinect = linect; X+ #endif X X if(flags.toplin == 1) more(); /* ab@unido */ X remember_topl(); X*************** X*** 589,600 **** X curs (lth, curline); X #endif X cl_end (); X! if (!hmenu) cmore (text); X if (!hmenu || clear_help(hc)) { X home (); X cl_end (); X docorner (lth, curline-1); X } X } else { /* feed to pager */ X set_pager(0); X for (tl = texthead; tl; tl = tl->next_line) { X--- 861,881 ---- X curs (lth, curline); X #endif X cl_end (); X! if (!hmenu) { X! #ifdef MACOS X! macflags |= fCornScrKluge; X! #endif X! cmore (text); X! } X if (!hmenu || clear_help(hc)) { X home (); X cl_end (); X docorner (lth, curline-1); X } X+ #ifdef MACOS X+ mactexthead = NULL; X+ macflags |= (tmpflags & (fDoUpdate | fDisplayKluge)); X+ #endif X } else { /* feed to pager */ X set_pager(0); X for (tl = texthead; tl; tl = tl->next_line) { X*************** X*** 621,626 **** X--- 902,910 ---- X } X } X X+ #endif /* OVL0 */ X+ #ifdef OVLB X+ X #ifdef WIZARD X static X void X*************** X*** 653,673 **** X cornline(1, "g. Longer explanation of game options."); X cornline(1, "h. List of extended commands."); X cornline(1, "i. The NetHack license."); X #ifdef WIZARD X if (wizard) X cornline(1, "j. List of wizard-mode commands."); X #endif X cornline(1, ""); X #ifdef WIZARD X if (wizard) X cornline(1, "Select one of a,b,c,d,e,f,g,h,i,j or ESC: "); X else X #endif X cornline(1, "Select one of a,b,c,d,e,f,g,h,i or ESC: "); X cornline(-1,""); X } X X! static boolean X clear_help(c) X char c; X { X--- 937,972 ---- X cornline(1, "g. Longer explanation of game options."); X cornline(1, "h. List of extended commands."); X cornline(1, "i. The NetHack license."); X+ #ifdef MACOS X+ cornline(1, "j. Macintosh primer."); X+ #endif X #ifdef WIZARD X if (wizard) X+ # ifdef MACOS X+ cornline(1, "k. List of wizard-mode commands."); X+ # else X cornline(1, "j. List of wizard-mode commands."); X+ # endif X #endif X cornline(1, ""); X #ifdef WIZARD X if (wizard) X+ # ifdef MACOS X+ cornline(1, "Select one of a,b,c,d,e,f,g,h,i,j,k or ESC: "); X+ # else X cornline(1, "Select one of a,b,c,d,e,f,g,h,i,j or ESC: "); X+ # endif X else X #endif X+ #ifdef MACOS X+ cornline(1, "Select one of a,b,c,d,e,f,g,h,i,j or ESC: "); X+ #else X cornline(1, "Select one of a,b,c,d,e,f,g,h,i or ESC: "); X+ #endif X cornline(-1,""); X } X X! XSTATIC boolean X clear_help(c) X char c; X { X*************** X*** 696,714 **** X || !whole_screen X #endif X #ifdef WIZARD X || c == 'j' X #endif X ); X } X X! static boolean X valid_help(c) X char c; X { X #ifdef WIZARD X return ((c >= 'a' && c <= (wizard ? 'j' : 'i')) || index(quitchars,c)); X #else X return ((c >= 'a' && c <= 'i') || index(quitchars,c)); X #endif X } X X--- 995,1025 ---- X || !whole_screen X #endif X #ifdef WIZARD X+ # ifdef MACOS X+ || c == 'k' X+ # else X || c == 'j' X+ # endif X #endif X ); X } X X! XSTATIC boolean X valid_help(c) X char c; X { X #ifdef WIZARD X+ # ifdef MACOS X+ return ((c >= 'a' && c <= (wizard ? 'k' : 'j')) || index(quitchars,c)); X+ # else X return ((c >= 'a' && c <= (wizard ? 'j' : 'i')) || index(quitchars,c)); X+ # endif X #else X+ # ifdef MACOS X+ return ((c >= 'a' && c <= 'j') || index(quitchars,c)); X+ # else X return ((c >= 'a' && c <= 'i') || index(quitchars,c)); X+ # endif X #endif X } X X*************** X*** 717,724 **** X { X #ifdef MACOS X term_info *t; X! X! macflags &= ~(fDoUpdate | fDoNonKeyEvt); X t = (term_info *)GetWRefCon(HackWindow); X SetVol((StringPtr)NULL, X (t->auxFileVRefNum) ? t->auxFileVRefNum : t->recordVRefNum); X--- 1028,1035 ---- X { X #ifdef MACOS X term_info *t; X! X! macflags &= ~fDoNonKeyEvt; X t = (term_info *)GetWRefCon(HackWindow); X SetVol((StringPtr)NULL, X (t->auxFileVRefNum) ? t->auxFileVRefNum : t->recordVRefNum); X*************** X*** 736,748 **** X case 'h': (void) doextlist(); break; X case 'i': (void) page_file(LICENSE, FALSE); break; X #ifdef WIZARD X case 'j': wiz_help(); break; X #endif X } X } X #ifdef MACOS X- macflags |= (fDoUpdate | fDoNonKeyEvt); X SetVol((StringPtr)NULL, t->recordVRefNum); X #endif X return 0; X } X--- 1047,1064 ---- X case 'h': (void) doextlist(); break; X case 'i': (void) page_file(LICENSE, FALSE); break; X #ifdef WIZARD X+ # ifdef MACOS X+ case 'j': (void) page_file(MACHELP, FALSE); break; X+ case 'k': wiz_help(); break; X+ # else X case 'j': wiz_help(); break; X+ # endif X #endif X } X } X #ifdef MACOS X SetVol((StringPtr)NULL, t->recordVRefNum); X+ macflags |= fDoNonKeyEvt; X #endif X return 0; X } X*************** X*** 756,762 **** X X int X page_file(fnam, silent) /* return: 0 - cannot open fnam; 1 - otherwise */ X! register char *fnam; X boolean silent; X { X #ifdef DEF_PAGER /* this implies that UNIX is defined */ X--- 1072,1078 ---- X X int X page_file(fnam, silent) /* return: 0 - cannot open fnam; 1 - otherwise */ X! register const char *fnam; X boolean silent; X { X #ifdef DEF_PAGER /* this implies that UNIX is defined */ X*************** X*** 798,809 **** X # ifdef MACOS X if ((f = fopen (fnam, "r")) == (FILE *) 0) X f = openFile(fnam, "r"); X- /* refresh screen kluge */ X if (!f) { X- cls(); X- docrt(); X- clrlin(); X- ValidRect(&(**(*HackWindow).visRgn).rgnBBox); X # else X if ((f = fopen (fnam, "r")) == (FILE *) 0) { X # endif X--- 1114,1120 ---- X*************** X*** 887,889 **** X--- 1198,1202 ---- X } X #endif X #endif /* UNIX /**/ X+ X+ #endif /* OVLB */ X*** src/Old/panic.c Mon Feb 19 18:50:31 1990 X--- src/panic.c Wed Jan 17 23:02:40 1990 X*************** X*** 6,12 **** X */ X /* NetHack may be freely redistributed. See license for details. */ X X- /* #define MAKEDEFS_C 1 /* define for Macs */ X #define NEED_VARARGS X #include "config.h" X X--- 6,11 ---- X*** src/Old/pickup.c Mon Feb 19 18:50:45 1990 X--- src/pickup.c Mon Feb 19 10:17:32 1990 X*************** X*** 7,14 **** X */ X X #include "hack.h" X X! void explode_bag(); X X void X pickup(all) X--- 7,28 ---- X */ X X #include "hack.h" X+ #ifndef OVERLAY X+ static int FDECL(in_container,(struct obj *)); X+ static int FDECL(ck_container,(struct obj *)); X+ static int FDECL(ck_bag,(struct obj *)); X+ static int FDECL(out_container,(struct obj *)); X+ #else X+ int FDECL(in_container,(struct obj *)); X+ int FDECL(ck_container,(struct obj *)); X+ int FDECL(ck_bag,(struct obj *)); X+ int FDECL(out_container,(struct obj *)); X+ #endif X+ void FDECL(explode_bag,(struct obj *)); X+ X+ #ifdef OVLB X X! static const char nearloadmsg[] = "have a little trouble lifting"; X X void X pickup(all) X*************** X*** 33,42 **** X dummygold.cobj = 0; X X if(Levitation) { X! if (multi || (all && !flags.pickup)) read_engr_at(u.ux,u.uy); X return; X } X! if (multi || (all && !flags.pickup)) { X int ct = 0; X X for (obj = level.objects[u.ux][u.uy]; obj; obj = obj->nexthere) X--- 47,61 ---- X dummygold.cobj = 0; X X if(Levitation) { X! if ((multi && !flags.run) || (all && !flags.pickup)) X! read_engr_at(u.ux,u.uy); X return; X } X! /* multi && !flags.run means they are in the middle of some other X! * action, or possibly paralyzed, sleeping, etc.... and they just X! * teleported onto the object. They shouldn't pick it up. X! */ X! if ((multi && !flags.run) || (all && !flags.pickup)) { X int ct = 0; X X for (obj = level.objects[u.ux][u.uy]; obj; obj = obj->nexthere) X*************** X*** 172,185 **** X continue; X } X if (gold_capacity >= gold->amount) { X pline("%ld gold piece%s.", X gold->amount, plur(gold->amount)); X- u.ugold += gold->amount; X freegold(gold); X if(Invisible) newsym(u.ux,u.uy); X } else { X! pline("You can only carry %s of the %ld gold pieces lying here.", X gold_capacity == 1L ? "one" : "some", gold->amount); X pline("%ld gold piece%s.", X gold_capacity, plur(gold_capacity)); X u.ugold += gold_capacity; X--- 191,207 ---- X continue; X } X if (gold_capacity >= gold->amount) { X+ u.ugold += gold->amount; X+ if (inv_weight() > -5) X+ You(nearloadmsg); X pline("%ld gold piece%s.", X gold->amount, plur(gold->amount)); X freegold(gold); X if(Invisible) newsym(u.ux,u.uy); X } else { X! You("can only carry %s of the %ld gold pieces lying here.", X gold_capacity == 1L ? "one" : "some", gold->amount); X+ You(nearloadmsg); X pline("%ld gold piece%s.", X gold_capacity, plur(gold_capacity)); X u.ugold += gold_capacity; X*************** X*** 199,204 **** X--- 221,227 ---- X pline("Touching the dead cockatrice is a fatal mistake."); X You("turn to stone."); X You("die..."); X+ killer_format = KILLED_BY_AN; X killer = "cockatrice corpse"; X done(STONING); X } X*************** X*** 213,219 **** X if(!(objects[SCR_SCARE_MONSTER].oc_name_known) && X !(objects[SCR_SCARE_MONSTER].oc_uname)) X docall(obj); X! delobj(obj); X continue; X } X } X--- 236,242 ---- X if(!(objects[SCR_SCARE_MONSTER].oc_name_known) && X !(objects[SCR_SCARE_MONSTER].oc_uname)) X docall(obj); X! useupf(obj); X continue; X } X } X*************** X*** 222,228 **** X if(obj == uchain) X continue; X X! wt = inv_weight() + obj->owt; X if (obj->otyp == LOADSTONE) X goto lift_some; /* pick it up even if too heavy */ X #ifdef POLYSELF X--- 245,251 ---- X if(obj == uchain) X continue; X X! wt = inv_weight() + (int)obj->owt; X if (obj->otyp == LOADSTONE) X goto lift_some; /* pick it up even if too heavy */ X #ifdef POLYSELF X*************** X*** 277,283 **** X int mergquan; X X obj = pick_obj(obj); X! if(wt > -5) You("have a little trouble lifting"); X if(!Blind) obj->dknown = 1; X mergquan = obj->quan; X obj->quan = pickquan; /* to fool prinv() */ X--- 300,306 ---- X int mergquan; X X obj = pick_obj(obj); X! if(wt > -5) You(nearloadmsg); X if(!Blind) obj->dknown = 1; X mergquan = obj->quan; X obj->quan = pickquan; /* to fool prinv() */ X*************** X*** 294,300 **** X pick_obj(otmp) X register struct obj *otmp; X { X! addtobill(otmp, TRUE); /* sets obj->unpaid if necessary */ X freeobj(otmp); X if(Invisible) newsym(u.ux,u.uy); X return(addinv(otmp)); /* might merge it with other objects */ X--- 317,324 ---- X pick_obj(otmp) X register struct obj *otmp; X { X! if (otmp != uball) /* don't charge for this - kd, 1/17/90 */ X! addtobill(otmp, TRUE); /* sets obj->unpaid if necessary */ X freeobj(otmp); X if(Invisible) newsym(u.ux,u.uy); X return(addinv(otmp)); /* might merge it with other objects */ X*************** X*** 307,313 **** X register int c; X X if (Levitation) { X! pline("You cannot reach the floor."); X return(0); X } X for(cobj = level.objects[u.ux][u.uy]; cobj; cobj = cobj->nexthere) { X--- 331,337 ---- X register int c; X X if (Levitation) { X! You("cannot reach the floor."); X return(0); X } X for(cobj = level.objects[u.ux][u.uy]; cobj; cobj = cobj->nexthere) { X*************** X*** 327,333 **** X X You("carefully open the bag..."); X pline("It develops a huge set of teeth and bites you!"); X! losehp(rnd(10), "carnivorous bag"); X makeknown(BAG_OF_TRICKS); X continue; X } X--- 351,357 ---- X X You("carefully open the bag..."); X pline("It develops a huge set of teeth and bites you!"); X! losehp(rnd(10), "carnivorous bag", KILLED_BY_AN); X makeknown(BAG_OF_TRICKS); X continue; X } X*************** X*** 334,339 **** X--- 358,364 ---- X X You("carefully open the %s...", xname(cobj)); X if(cobj->otrapped) chest_trap(cobj, FINGER); X+ if(multi < 0) return 0; /* a paralysis trap */ X X use_container(cobj, 0); X } X*************** X*** 347,361 **** X #define Icebox (current_container->otyp == ICE_BOX) X int baggone; /* used in askchain so bag isn't used after explosion */ X X void X inc_cwt(cobj, obj) X register struct obj *cobj, *obj; X { X if (cobj->otyp == BAG_OF_HOLDING) X! cobj->owt += (obj->cursed?(obj->owt*2):(obj->owt/(obj->blessed?4:2)) + 1); X else cobj->owt += obj->owt; X } X X #ifndef OVERLAY X static X #endif X--- 372,392 ---- X #define Icebox (current_container->otyp == ICE_BOX) X int baggone; /* used in askchain so bag isn't used after explosion */ X X+ #endif /* OVLB */ X+ #ifdef OVL0 X+ X void X inc_cwt(cobj, obj) X register struct obj *cobj, *obj; X { X if (cobj->otyp == BAG_OF_HOLDING) X! cobj->owt += (cobj->cursed?(obj->owt*2):(obj->owt/(cobj->blessed?4:2)) + 1); X else cobj->owt += obj->owt; X } X X+ #endif /* OVL0 */ X+ #ifdef OVLB X+ X #ifndef OVERLAY X static X #endif X*************** X*** 363,368 **** X--- 394,401 ---- X in_container(obj) X register struct obj *obj; X { X+ char buf[BUFSZ]; X+ X if(obj == uball || obj == uchain) { X You("must be kidding."); X return(0); X*************** X*** 394,400 **** X /* magic bag -> magic bag will self destruct later on. */ X if(Is_container(obj) && Is_container(current_container) && X (!Is_mbag(obj) || !Is_mbag(current_container))) { X! pline("It won't go in."); X return(1); /* be careful! */ X } X if(obj == uwep) { X--- 427,433 ---- X /* magic bag -> magic bag will self destruct later on. */ X if(Is_container(obj) && Is_container(current_container) && X (!Is_mbag(obj) || !Is_mbag(current_container))) { X! pline("The %s won't go in.", xname(obj)); X return(1); /* be careful! */ X } X if(obj == uwep) { X*************** X*** 407,413 **** X } X #ifdef WALKIES X if(obj->otyp == LEASH && obj->leashmon != 0) { X! pline("It is attached to your pet."); X return(0); X } X #endif X--- 440,446 ---- X } X #ifdef WALKIES X if(obj->otyp == LEASH && obj->leashmon != 0) { X! pline("The %s is attached to your pet.", xname(obj)); X return(0); X } X #endif X*************** X*** 417,422 **** X--- 450,457 ---- X obj->cobj = current_container; X obj->nobj = fcobj; X fcobj = obj; X+ Strcpy(buf, xname(obj->cobj)); X+ You("put %s into the %s.", doname(obj), buf); X X if(Icebox) obj->age = monstermoves - obj->age; /* actual age */ X X*************** X*** 425,431 **** X (obj->otyp == WAN_CANCELLATION && (obj->spe > 0)) )) { X explode_bag(obj); X You("are blasted by a magical explosion!"); X! losehp(d(6,6),"magical explosion"); X baggone = 1; X } X return(1); X--- 460,466 ---- X (obj->otyp == WAN_CANCELLATION && (obj->spe > 0)) )) { X explode_bag(obj); X You("are blasted by a magical explosion!"); X! losehp(d(6,6),"magical explosion", KILLED_BY_AN); X baggone = 1; X } X return(1); X*************** X*** 441,451 **** X return(obj->cobj == current_container); X } X X #ifndef OVERLAY X static X #endif X int X! ck_bag() X { X return(!baggone); X } X--- 476,490 ---- X return(obj->cobj == current_container); X } X X+ /* ck_bag() needs a formal argument to make the overlay/prototype mechanism X+ * work right */ X+ /*ARGSUSED*/ X #ifndef OVERLAY X static X #endif X int X! ck_bag(obj) X! struct obj *obj; X { X return(!baggone); X } X*************** X*** 458,468 **** X--- 497,521 ---- X register struct obj *obj; X { X register struct obj *otmp; X+ register boolean near_capacity = (inv_weight() > -5); X X if(inv_cnt() >= 52) { X pline("You have no room to hold anything else."); X return(0); X } X+ if(obj->otyp != LOADSTONE && inv_weight() + (int)obj->owt > 0) { X+ char buf[BUFSZ]; X+ X+ Strcpy(buf, doname(obj)); X+ pline("There %s %s in the %s, but %s.", X+ obj->quan==1 ? "is" : "are", X+ buf, xname(current_container), X+ invent ? "you cannot carry any more" X+ : "it is too heavy for you to carry"); X+ /* "too heavy for you to lift" is not right if you're carrying X+ the container... */ X+ return(0); X+ } X if(obj == fcobj) fcobj = fcobj->nobj; X else { X for(otmp = fcobj; otmp->nobj != obj; otmp = otmp->nobj) X*************** X*** 476,481 **** X--- 529,536 ---- X /* simulated point of time */ X X (void) addinv(obj); X+ if (near_capacity) You("have a little trouble removing"); X+ prinv(obj); X return 0; X } X X*************** X*** 608,616 **** X register struct obj *cobj, *obj; X { X if (Is_mbag(cobj)) X! cobj->owt -= (obj->owt/2 + 1); X else cobj->owt -= obj->owt; X X if(cobj->owt < objects[cobj->otyp].oc_weight) X cobj->owt = objects[cobj->otyp].oc_weight; X } X--- 663,673 ---- X register struct obj *cobj, *obj; X { X if (Is_mbag(cobj)) X! cobj->owt -= (cobj->cursed?(obj->owt*2):(obj->owt/(cobj->blessed?4:2)) + 1); X else cobj->owt -= obj->owt; X X if(cobj->owt < objects[cobj->otyp].oc_weight) X cobj->owt = objects[cobj->otyp].oc_weight; X } X+ X+ #endif /* OVLB */ X*** src/Old/polyself.c Mon Feb 19 18:51:14 1990 X--- src/polyself.c Wed Feb 14 17:54:16 1990 X*************** X*** 1,4 **** X! /* SCCS Id: @(#)polyself.c 3.0 89/11/19 X /* Polymorph self routine. Copyright (C) 1987, 1988, 1989 by Ken Arromdee */ X /* NetHack may be freely redistributed. See license for details. */ X X--- 1,4 ---- X! /* SCCS Id: @(#)polyself.c 3.0 89/11/21 X /* Polymorph self routine. Copyright (C) 1987, 1988, 1989 by Ken Arromdee */ X /* NetHack may be freely redistributed. See license for details. */ X X*************** X*** 5,16 **** X #include "hack.h" X X #ifdef POLYSELF X! static void break_armor(), drop_weapon(); X! static void skinback(); X! static void uunstick(); X static boolean sticky; X #endif X X void X newman() X { X--- 5,21 ---- X #include "hack.h" X X #ifdef POLYSELF X! static void NDECL(break_armor); X! static void FDECL(drop_weapon,(int)); X! static void NDECL(skinback); X! static void NDECL(uunstick); X! #ifdef OVLB X static boolean sticky; X+ #endif /* OVLB */ X #endif X X+ #ifdef OVLB X+ X void X newman() X { X*************** X*** 20,28 **** X if (!rn2(10)) { X flags.female = !flags.female; X max_rank_sz(); X! if (pl_character[0]=='P') X! Strcpy(pl_character+6, flags.female?"ess":""); X! if (pl_character[0]=='C') X Strcpy(pl_character+5, flags.female ? "woman" : "man"); X } X #ifdef POLYSELF X--- 25,33 ---- X if (!rn2(10)) { X flags.female = !flags.female; X max_rank_sz(); X! if (pl_character[0] == 'P') X! Strcpy(pl_character+6, flags.female ? "ess" : ""); X! if (pl_character[0] == 'C') X Strcpy(pl_character+5, flags.female ? "woman" : "man"); X } X #ifdef POLYSELF X*************** X*** 42,49 **** X if (u.ulevel > 127 || u.ulevel == 0) u.ulevel = 1; X if (u.ulevel > MAXULEV) u.ulevel = MAXULEV; X X! for(tmp = u.ulevel; tmp != tmp2; tmp += (tmp2 < u.ulevel) ? -1 : 1) X! adjabil((tmp2 > u.ulevel) ? -1 : 1); X tmp = u.uhpmax; X X /* random experience points for the new experience level */ X--- 47,53 ---- X if (u.ulevel > 127 || u.ulevel == 0) u.ulevel = 1; X if (u.ulevel > MAXULEV) u.ulevel = MAXULEV; X X! adjabil(tmp2, (int)u.ulevel); X tmp = u.uhpmax; X X /* random experience points for the new experience level */ X*************** X*** 54,60 **** X /* If it was u.uhpmax*u.ulevel/tmp+9-rn2(19), then a 1st level character X with 16 hp who polymorphed into a 3rd level one would have an average X of 48 hp. */ X! #ifndef LINT X u.uhp = u.uhp * (long)u.uhpmax/tmp; X #endif X #ifdef SPELLS X--- 58,66 ---- X /* If it was u.uhpmax*u.ulevel/tmp+9-rn2(19), then a 1st level character X with 16 hp who polymorphed into a 3rd level one would have an average X of 48 hp. */ X! #ifdef LINT X! u.uhp = u.uhp + tmp; X! #else X u.uhp = u.uhp * (long)u.uhpmax/tmp; X #endif X #ifdef SPELLS X*************** X*** 79,84 **** X--- 85,91 ---- X } else { X #endif X Your("new form doesn't seem healthy enough to survive."); X+ killer_format = KILLED_BY_AN; X killer="unsuccessful polymorph"; X done(DIED); X #ifdef POLYSELF X*************** X*** 107,114 **** X--- 114,131 ---- 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*** 141,147 **** X if(!Polymorph_control && !draconian && !iswere && !isvamp) { X if (rn2(20) > ACURR(A_CON)) { X You("shudder for a moment."); X! losehp(rn2(30),"system shock"); X return; X } X } X--- 158,164 ---- X if(!Polymorph_control && !draconian && !iswere && !isvamp) { X if (rn2(20) > ACURR(A_CON)) { X You("shudder for a moment."); X! losehp(rn2(30),"system shock", KILLED_BY_AN); X return; X } X } X*************** X*** 200,207 **** X if (!uarmg) selftouch("No longer petrify-resistant, you"); X if (Inhell && !Fire_resistance) { X You("burn to a crisp."); X! killer = "unwise polymorph"; X! done(BURNING); X } X } X X--- 217,228 ---- X if (!uarmg) selftouch("No longer petrify-resistant, you"); X if (Inhell && !Fire_resistance) { X You("burn to a crisp."); X! killer_format = KILLED_BY; X! killer = "losing fire resistance after polymorphing"; X! while(1) { X! done(BURNING); X! You("continue burning."); X! } X } X } X X*************** X*** 284,307 **** X /* Low level characters can't become high level monsters for long */ X u.mtimedone = u.mtimedone * u.ulevel / mons[mntmp].mlevel; X flags.botl = 1; X! if (can_breathe(uasmon)) X! pline("Use the command #monster for breath weapon."); X! if (attacktype(uasmon, AT_SPIT)) X pline("Use the command #monster to spit venom."); X! if (u.usym == S_NYMPH) X! pline("Use the command #monster if you have to remove an iron ball."); X! if (u.usym == S_UMBER) X pline("Use the command #monster to confuse monsters."); X! if (is_hider(uasmon)) X pline("Use the command #monster to hide."); X! if (is_were(uasmon)) X pline("Use the command #monster to summon help."); X! if (webmaker(uasmon)) X pline("Use the command #monster to spin a web."); X! if (u.usym == S_UNICORN) X pline("Use the command #monster to use your horn."); X! if (lays_eggs(uasmon) || u.umonnum == PM_QUEEN_BEE) X pline("Use the command #sit to lay an egg."); X find_ac(); X return(1); X } X--- 305,330 ---- X /* Low level characters can't become high level monsters for long */ X u.mtimedone = u.mtimedone * u.ulevel / mons[mntmp].mlevel; X flags.botl = 1; X! if (flags.verbose) { X! if (can_breathe(uasmon)) X! pline("Use the command #monster to use your breath weapon."); X! if (attacktype(uasmon, AT_SPIT)) X pline("Use the command #monster to spit venom."); X! if (u.usym == S_NYMPH) X! pline("Use the command #monster to remove an iron ball."); X! if (u.usym == S_UMBER) X pline("Use the command #monster to confuse monsters."); X! if (is_hider(uasmon)) X pline("Use the command #monster to hide."); X! if (is_were(uasmon)) X pline("Use the command #monster to summon help."); X! if (webmaker(uasmon)) X pline("Use the command #monster to spin a web."); X! if (u.usym == S_UNICORN) X pline("Use the command #monster to use your horn."); X! if (lays_eggs(uasmon) || u.umonnum == PM_QUEEN_BEE) X pline("Use the command #sit to lay an egg."); X+ } X find_ac(); X return(1); X } X*************** X*** 312,317 **** X--- 335,341 ---- X X if (breakarm(uasmon)) { X if (otmp = uarm) { X+ if (donning(otmp)) cancel_don(); X You("break out of your armor!"); X (void) Armor_gone(); X useup(otmp); X*************** X*** 329,334 **** X--- 353,359 ---- X #endif X } else if (sliparm(uasmon)) { X if (otmp = uarm) { X+ if (donning(otmp)) cancel_don(); X Your("armor falls around you!"); X (void) Armor_gone(); X dropx(otmp); X*************** X*** 348,358 **** X } X if (nohands(uasmon) || verysmall(uasmon)) { X if (otmp = uarmg) { X /* Drop weapon along with gloves */ X You("drop your gloves%s!", uwep ? " and weapon" : ""); X (void) Gloves_off(); X dropx(otmp); X- drop_weapon(0); X } X if (otmp = uarms) { X You("can no longer hold your shield!"); X--- 373,384 ---- X } X if (nohands(uasmon) || verysmall(uasmon)) { X if (otmp = uarmg) { X+ if (donning(otmp)) cancel_don(); X /* Drop weapon along with gloves */ X You("drop your gloves%s!", uwep ? " and weapon" : ""); X+ drop_weapon(0); X (void) Gloves_off(); X dropx(otmp); X } X if (otmp = uarms) { X You("can no longer hold your shield!"); X*************** X*** 360,370 **** X--- 386,398 ---- X dropx(otmp); X } X if (otmp = uarmh) { X+ if (donning(otmp)) cancel_don(); X Your("helmet falls to the floor!"); X (void) Helmet_off(); X dropx(otmp); X } X if (otmp = uarmf) { X+ if (donning(otmp)) cancel_don(); X Your("boots %s off your feet!", X verysmall(uasmon) ? "slide" : "are pushed"); X (void) Boots_off(); X*************** X*** 403,415 **** X u.umonnum = -1; X skinback(); X set_uasmon(); X! You("return to %sn form!",(pl_character[0]=='E')?"elve":"huma"); X X if (u.uhp < 1) done(DIED); X if (!Fire_resistance && Inhell) { X You("burn to a crisp."); X! killer = "dissipating polymorph spell"; X! done(BURNING); X } X if (!uarmg) selftouch("No longer petrify-resistant, you"); X if (sticky) uunstick(); X--- 431,447 ---- X u.umonnum = -1; X skinback(); X set_uasmon(); X! You("return to %sn form!", (pl_character[0] == 'E')? "elve" : "huma"); X X if (u.uhp < 1) done(DIED); X if (!Fire_resistance && Inhell) { X You("burn to a crisp."); X! killer_format = KILLED_BY; X! killer = "losing fire resistance after rehumanization"; X! while(1) { X! done(BURNING); X! You("continue burning."); X! } X } X if (!uarmg) selftouch("No longer petrify-resistant, you"); X if (sticky) uunstick(); X*************** X*** 470,478 **** X } X if (u.uswallow) { X You("release web fluid inside %s.", mon_nam(u.ustuck)); X! pline("%s regurgitates you!", Monnam(u.ustuck)); X! regurgitates(u.ustuck); X! return(1); X } X if (u.utrap) { X You("cannot spin webs while stuck in a trap."); X--- 502,541 ---- X } X if (u.uswallow) { X You("release web fluid inside %s.", mon_nam(u.ustuck)); X! if (is_animal(u.ustuck->data)) { X! expels(u.ustuck, u.ustuck->data, TRUE); X! return(0); X! } X! if (is_whirly(u.ustuck->data)) { X! int i; X! X! for (i = 0; i < NATTK; i++) X! if (u.ustuck->data->mattk[i].aatyp == AT_ENGL) X! break; X! if (i == NATTK) X! impossible("Swallower has no engulfing attack?"); X! else { X! char sweep[30]; X! X! sweep[0] = '\0'; X! switch(u.ustuck->data->mattk[i].adtyp) { X! case AD_FIRE: X! Strcpy(sweep, "ignites and "); X! break; X! case AD_ELEC: X! Strcpy(sweep, "fries and "); X! break; X! case AD_COLD: X! Strcpy(sweep, X! "freezes, shatters and "); X! break; X! } X! pline("The web %sis swept away!", sweep); X! } X! return(0); X! } /* default: a nasty jelly-like creature */ X! pline("The web dissolves into %s.", mon_nam(u.ustuck)); X! return(0); X } X if (u.utrap) { X You("cannot spin webs while stuck in a trap."); X*************** X*** 495,501 **** X Your("webbing vanishes!"); X return(0); X case TRAPDOOR: if (!is_maze_lev) { X! You("web over the trapdoor."); X deltrap(ttmp); X if (Invisible) newsym(u.ux, u.uy); X return 1; X--- 558,564 ---- X Your("webbing vanishes!"); X return(0); X case TRAPDOOR: if (!is_maze_lev) { X! You("web over the trap door."); X deltrap(ttmp); X if (Invisible) newsym(u.ux, u.uy); X return 1; X*************** X*** 516,522 **** X dotrap(ttmp); X return(1); X default: X! impossible("Webbing over trap type %d?",ttmp->ttyp); X return(0); X } X ttmp = maketrap(u.ux, u.uy, WEB); X--- 579,585 ---- X dotrap(ttmp); X return(1); X default: X! impossible("Webbing over trap type %d?", ttmp->ttyp); X return(0); X } X ttmp = maketrap(u.ux, u.uy, WEB); X*************** X*** 554,560 **** X else if (mtmp->mimic) X continue; X else if (flags.safe_dog && !Confusion && !Hallucination X- && (mtmp->data->mlet == S_DOG || mtmp->data->mlet == S_FELINE) X && mtmp->mtame) { X if (mtmp->mnamelth) X You("avoid gazing at %s.", NAME(mtmp)); X--- 617,622 ---- X*************** X*** 564,576 **** X } else { X if (flags.confirm && mtmp->mpeaceful && !Confusion X && !Hallucination) { X pline("Really confuse %s? ", mon_nam(mtmp)); X (void) fflush(stdout); X if (yn() != 'y') continue; X setmangry(mtmp); X } X! if (mtmp->mfroz || mtmp->mstun || mtmp->msleep || X! mtmp->mblinded) X continue; X if (!mtmp->mconf) X Your("gaze confuses %s!", mon_nam(mtmp)); X--- 626,645 ---- X } else { X if (flags.confirm && mtmp->mpeaceful && !Confusion X && !Hallucination) { X+ #ifdef MACOS X+ char mac_tbuf[80]; X+ if(!flags.silent) SysBeep(1); X+ sprintf(mac_tbuf, "Really confuse %s?", mon_nam(mtmp)); X+ if(UseMacAlertText(128, mac_tbuf) != 1) continue; X+ #else X pline("Really confuse %s? ", mon_nam(mtmp)); X (void) fflush(stdout); X if (yn() != 'y') continue; X+ #endif X setmangry(mtmp); X } X! if (!mtmp->mcanmove || mtmp->mstun || mtmp->msleep || X! !mtmp->mcansee) X continue; X if (!mtmp->mconf) X Your("gaze confuses %s!", mon_nam(mtmp)); X*************** X*** 588,594 **** X } X #ifdef MEDUSA X if ((mtmp->data==&mons[PM_MEDUSA]) && !mtmp->mcan) { X! pline("Gazing at an awake medusa is not a very good idea..."); X /* as if gazing at a sleeping anything is fruitful... */ X You("turn to stone..."); X done(STONING); X--- 657,663 ---- X } X #ifdef MEDUSA X if ((mtmp->data==&mons[PM_MEDUSA]) && !mtmp->mcan) { X! pline("Gazing at the awake Medusa is not a very good idea."); X /* as if gazing at a sleeping anything is fruitful... */ X You("turn to stone..."); X done(STONING); X*************** X*** 605,611 **** X dohide() X { X if (u.uundetected || u.usym == S_MIMIC_DEF) { X! pline("You are already hiding."); X return(0); X } X if (u.usym == S_MIMIC) { X--- 674,680 ---- X dohide() X { X if (u.uundetected || u.usym == S_MIMIC_DEF) { X! You("are already hiding."); X return(0); X } X if (u.usym == S_MIMIC) { X*************** X*** 621,627 **** X static void X uunstick() X { X! kludge("%s is no longer in your clutches...", Monnam(u.ustuck)); X u.ustuck = 0; X } X X--- 690,696 ---- X static void X uunstick() X { X! kludge("%s is no longer in your clutches.", Monnam(u.ustuck)); X u.ustuck = 0; X } X X*************** X*** 636,642 **** X } X #endif X X! char * X body_part(part) X int part; X { X--- 705,711 ---- X } X #endif X X! const char * X body_part(part) X int part; X { X*************** X*** 646,678 **** X */ X static const char *humanoid_parts[] = { "arm", "eye", "face", "finger", X "fingertip", "foot", "hand", "handed", "head", "leg", X! "light headed", "neck", "toe" }; X #ifdef POLYSELF X static const char *jelly_parts[] = { "pseudopod", "dark spot", "front", X "pseudopod extension", "pseudopod extremity", X "pseudopod root", "grasp", "grasped", "cerebral area", X! "lower pseudopod", "viscous", "middle", X "pseudopod extremity" }, X *animal_parts[] = { "forelimb", "eye", "face", "foreclaw", "claw tip", X "rear claw", "foreclaw", "clawed", "head", "rear limb", X! "light headed", "neck", "rear claw tip" }, X *horse_parts[] = { "forelimb", "eye", "face", "forehoof", "hoof tip", X "rear hoof", "foreclaw", "hooved", "head", "rear limb", X! "light headed", "neck", "rear hoof tip" }, X *sphere_parts[] = { "appendage", "optic nerve", "body", "tentacle", X "tentacle tip", "lower appendage", "tentacle", "tentacled", X! "body", "lower tentacle", "rotational", "equator", X "lower tentacle tip" }, X *fungus_parts[] = { "mycelium", "visual area", "front", "hypha", X "hypha", "root", "strand", "stranded", "cap area", X! "rhizome", "sporulated", "stalk", "rhizome tip" }, X *vortex_parts[] = { "region", "eye", "front", "minor current", X "minor current", "lower current", "swirl", "swirled", X "central core", "lower current", "addled", "center", X! "edge" }, X *snake_parts[] = { "vestigial limb", "eye", "face", "large scale", X "large scale tip", "rear region", "scale gap", "scale gapped", X! "head", "rear region", "light headed", "neck", "rear scale" }; X X if (humanoid(uasmon) || (u.usym==S_CENTAUR && X (part==ARM || part==FINGER || part==FINGERTIP X--- 715,748 ---- X */ X static const char *humanoid_parts[] = { "arm", "eye", "face", "finger", X "fingertip", "foot", "hand", "handed", "head", "leg", X! "light headed", "neck", "spine", "toe" }; X #ifdef POLYSELF X static const char *jelly_parts[] = { "pseudopod", "dark spot", "front", X "pseudopod extension", "pseudopod extremity", X "pseudopod root", "grasp", "grasped", "cerebral area", X! "lower pseudopod", "viscous", "middle", "surface", X "pseudopod extremity" }, X *animal_parts[] = { "forelimb", "eye", "face", "foreclaw", "claw tip", X "rear claw", "foreclaw", "clawed", "head", "rear limb", X! "light headed", "neck", "spine", "rear claw tip" }, X *horse_parts[] = { "forelimb", "eye", "face", "forehoof", "hoof tip", X "rear hoof", "foreclaw", "hooved", "head", "rear limb", X! "light headed", "neck", "backbone", "rear hoof tip" }, X *sphere_parts[] = { "appendage", "optic nerve", "body", "tentacle", X "tentacle tip", "lower appendage", "tentacle", "tentacled", X! "body", "lower tentacle", "rotational", "equator", "body", X "lower tentacle tip" }, X *fungus_parts[] = { "mycelium", "visual area", "front", "hypha", X "hypha", "root", "strand", "stranded", "cap area", X! "rhizome", "sporulated", "stalk", "root", "rhizome tip" }, X *vortex_parts[] = { "region", "eye", "front", "minor current", X "minor current", "lower current", "swirl", "swirled", X "central core", "lower current", "addled", "center", X! "currents", "edge" }, X *snake_parts[] = { "vestigial limb", "eye", "face", "large scale", X "large scale tip", "rear region", "scale gap", "scale gapped", X! "head", "rear region", "light headed", "neck", "length", X! "rear scale" }; X X if (humanoid(uasmon) || (u.usym==S_CENTAUR && X (part==ARM || part==FINGER || part==FINGERTIP X*************** X*** 681,687 **** X if (u.usym==S_SNAKE || u.usym==S_NAGA || u.usym==S_WORM) X return snake_parts[part]; X if (u.usym==S_EYE) return sphere_parts[part]; X! if (u.usym==S_JELLY || u.usym==S_PUDDING) return jelly_parts[part]; X if (u.usym==S_VORTEX || u.usym==S_ELEMENTAL) return vortex_parts[part]; X if (u.usym==S_FUNGUS) return fungus_parts[part]; X return animal_parts[part]; X--- 751,758 ---- X if (u.usym==S_SNAKE || u.usym==S_NAGA || u.usym==S_WORM) X return snake_parts[part]; X if (u.usym==S_EYE) return sphere_parts[part]; X! if (u.usym==S_JELLY || u.usym==S_PUDDING || u.usym==S_BLOB) X! return jelly_parts[part]; X if (u.usym==S_VORTEX || u.usym==S_ELEMENTAL) return vortex_parts[part]; X if (u.usym==S_FUNGUS) return fungus_parts[part]; X return animal_parts[part]; X*************** X*** 690,695 **** X--- 761,769 ---- X #endif X } X X+ #endif /* OVLB */ X+ #ifdef OVL0 X+ X int X poly_gender() X { X*************** X*** 709,725 **** X * or "lady" when polymorphed) X */ X #ifdef POLYSELF X! if (uasmon->mflags1 & M1_FEM) return 1; X! #ifdef INFERNO X! if (u.umonnum==PM_INCUBUS) return 0; X! #endif X if (!humanoid(uasmon)) return 2; X #endif X return flags.female; X } X X! #ifdef POLYSELF X! #ifdef GOLEMS X void X ugolemeffects(damtype, dam) X int damtype, dam; X--- 783,801 ---- X * or "lady" when polymorphed) X */ X #ifdef POLYSELF X! if (uasmon->mflags2 & M2_FEM) return 1; X! # ifdef INFERNO X! if (u.umonnum == PM_INCUBUS) return 0; X! # endif X if (!humanoid(uasmon)) return 2; X #endif X return flags.female; X } X X! #endif /* OVL0 */ X! #ifdef OVLB X! X! #if defined(POLYSELF) && defined(GOLEMS) X void X ugolemeffects(damtype, dam) X int damtype, dam; X*************** X*** 746,750 **** X pline("Strangely, you feel better than before."); X } X } X! #endif /* GOLEMS */ X! #endif X--- 822,827 ---- X pline("Strangely, you feel better than before."); X } X } X! #endif /* POLYSELF && GOLEMS */ X! X! #endif /* OVLB */ X END_OF_FILE if test 56505 -ne `wc -c <'patch7.05'`; then echo shar: \"'patch7.05'\" unpacked with wrong size! fi # end of 'patch7.05' echo shar: End of archive 6 \(of 30\). cp /dev/null ark6isdone 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