home *** CD-ROM | disk | FTP | other *** search
- Path: uunet!zephyr.ens.tek.com!tekgen!tekred!saab!billr
- From: billr@saab.CNA.TEK.COM (Bill Randle)
- Newsgroups: comp.sources.games
- Subject: v08i041: NetHack3 - display oriented dungeons & dragons (Ver. 3.0), Patch4e
- Message-ID: <4631@tekred.CNA.TEK.COM>
- Date: 29 Sep 89 21:11:06 GMT
- Sender: nobody@tekred.CNA.TEK.COM
- Lines: 2288
- Approved: billr@saab.CNA.TEK.COM
-
- Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu>
- Posting-number: Volume 8, Issue 41
- Archive-name: NetHack3/Patch4e
- 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 5 (of 11)."
- # Contents: patches04e
- # Wrapped by billr@saab on Fri Sep 29 13:14:17 1989
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'patches04e' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'patches04e'\"
- else
- echo shar: Extracting \"'patches04e'\" \(56197 characters\)
- sed "s/^X//" >'patches04e' <<'END_OF_FILE'
- X*** src/Old/topl.c Wed Sep 27 12:21:06 1989
- X--- src/topl.c Mon Sep 25 23:07:03 1989
- X***************
- X*** 2,7 ****
- X--- 2,8 ----
- X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
- X /* NetHack may be freely redistributed. See license for details. */
- X
- X+ #define NEED_VARARGS
- X #include "hack.h"
- X
- X char toplines[BUFSIZ];
- X***************
- X*** 134,154 ****
- X }
- X
- X /*VARARGS1*/
- X! /* Because the modified mstatusline has 9 arguments KAA */
- X void
- X! pline(line,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9)
- X! #ifndef TOS
- X! register
- X #endif
- X! const char *line,*arg1,*arg2,*arg3,*arg4,*arg5,*arg6,*arg7,*arg8,*arg9;
- X! {
- X char pbuf[BUFSZ];
- X register char *bp = pbuf, *tl;
- X register int n,n0;
- X
- X if(!line || !*line) return;
- X if(!index(line, '%')) Strcpy(pbuf,line); else
- X! Sprintf(pbuf,line,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
- X if(no_repeat && flags.toplin == 1 && !strcmp(pbuf, toplines)) return;
- X nscr(); /* %% */
- X
- X--- 135,177 ----
- X }
- X
- X /*VARARGS1*/
- X! /* Note the modified mstatusline has 9 arguments KAA */
- X!
- X! /* Also note that these declarations rely on knowledge of the internals
- X! * of the variable argument handling stuff in "tradstdc.h"
- X! */
- X!
- X! #if defined(USE_STDARG) || defined(USE_VARARGS)
- X! void
- X! pline VA_DECL(const char *, line)
- X! VA_START(line);
- X! VA_INIT(line, char *);
- X! vpline(line, VA_ARGS);
- X! VA_END();
- X! }
- X!
- X! # ifdef USE_STDARG
- X! void
- X! vpline(const char *line, va_list the_args) {
- X! # else
- X! void
- X! vpline(line, the_args) const char *line; va_list the_args; {
- X! # endif
- X!
- X! #else /* USE_STDARG | USE_VARARG */
- X!
- X void
- X! pline VA_DECL(const char *, line)
- X #endif
- X!
- X char pbuf[BUFSZ];
- X register char *bp = pbuf, *tl;
- X register int n,n0;
- X+ /* Do NOT use VA_START and VA_END in here... see above */
- X
- X if(!line || !*line) return;
- X if(!index(line, '%')) Strcpy(pbuf,line); else
- X! Vsprintf(pbuf,line,VA_ARGS);
- X if(no_repeat && flags.toplin == 1 && !strcmp(pbuf, toplines)) return;
- X nscr(); /* %% */
- X
- X***************
- X*** 206,257 ****
- X
- X /*VARARGS1*/
- X void
- X! Norep(line,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9)
- X! #ifndef TOS
- X! register
- X! #endif
- X! const char *line,*arg1,*arg2,*arg3,*arg4,*arg5,*arg6,*arg7,*arg8,*arg9;
- X! {
- X no_repeat = TRUE;
- X! pline(line, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
- X no_repeat = FALSE;
- X return;
- X }
- X
- X /*VARARGS1*/
- X void
- X! You(line,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9)
- X! #ifndef TOS
- X! register
- X! #endif
- X! const char *line,*arg1,*arg2,*arg3,*arg4,*arg5,*arg6,*arg7,*arg8,*arg9;
- X! {
- X char *tmp;
- X tmp = (char *)alloc((unsigned int)(strlen(line) + 5));
- X Strcpy(tmp, "You ");
- X Strcat(tmp, line);
- X! pline(tmp, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
- X free(tmp);
- X return;
- X }
- X
- X /*VARARGS1*/
- X void
- X! Your(line,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9)
- X! #ifndef TOS
- X! register
- X! #endif
- X! const char *line,*arg1,*arg2,*arg3,*arg4,*arg5,*arg6,*arg7,*arg8,*arg9;
- X! {
- X char *tmp;
- X tmp = (char *)alloc((unsigned int)(strlen(line) + 6));
- X Strcpy(tmp, "Your ");
- X Strcat(tmp, line);
- X! pline(tmp, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
- X free(tmp);
- X return;
- X }
- X
- X void
- X putsym(c)
- X char c;
- X--- 229,299 ----
- X
- X /*VARARGS1*/
- X void
- X! Norep VA_DECL(const char *, line)
- X! VA_START(line);
- X! VA_INIT(line, const char *);
- X no_repeat = TRUE;
- X! vpline(line, VA_ARGS);
- X no_repeat = FALSE;
- X+ VA_END();
- X return;
- X }
- X
- X /*VARARGS1*/
- X void
- X! You VA_DECL(const char *, line)
- X char *tmp;
- X+ VA_START(line);
- X+ VA_INIT(line, const char *);
- X tmp = (char *)alloc((unsigned int)(strlen(line) + 5));
- X Strcpy(tmp, "You ");
- X Strcat(tmp, line);
- X! vpline(tmp, VA_ARGS);
- X free(tmp);
- X+ VA_END();
- X return;
- X }
- X
- X /*VARARGS1*/
- X void
- X! Your VA_DECL(const char *,line)
- X char *tmp;
- X+ VA_START(line);
- X+ VA_INIT(line, const char *);
- X tmp = (char *)alloc((unsigned int)(strlen(line) + 6));
- X Strcpy(tmp, "Your ");
- X Strcat(tmp, line);
- X! vpline(tmp, VA_ARGS);
- X free(tmp);
- X+ VA_END();
- X return;
- X }
- X
- X+ /*ARGSUSED*/
- X+ /*VARARGS2*/
- X+ void
- X+ kludge VA_DECL2(char *, str, char *, arg)
- X+ #ifdef VA_NEXT
- X+ char *other1, *other2, *other3;
- X+ #endif
- X+ VA_START(arg);
- X+ VA_INIT(str, char *);
- X+ VA_INIT(arg, char *);
- X+ #ifdef VA_NEXT
- X+ VA_NEXT(other1, char *);
- X+ VA_NEXT(other2, char *);
- X+ VA_NEXT(other3, char *);
- X+ # define OTHER_ARGS other1,other2,other3
- X+ #else
- X+ # define OTHER_ARGS arg1,arg2,arg3
- X+ #endif
- X+ if(Blind || !flags.verbose) {
- X+ if(*str == '%') pline(str,"It",OTHER_ARGS);
- X+ else pline(str,"it",OTHER_ARGS);
- X+ } else pline(str,arg,OTHER_ARGS);
- X+ VA_END();
- X+ }
- X+
- X void
- X putsym(c)
- X char c;
- X***************
- X*** 311,314 ****
- X--- 353,366 ----
- X flags.toplin = 2;
- X
- X return q;
- X+ }
- X+
- X+ /*VARARGS1*/
- X+ void
- X+ impossible VA_DECL(char *, s)
- X+ VA_START(s);
- X+ VA_INIT(s, char *);
- X+ vpline(s,VA_ARGS);
- X+ pline("Program in disorder - perhaps you'd better Quit.");
- X+ VA_END();
- X }
- X*** src/Old/topten.c Wed Sep 27 12:21:23 1989
- X--- src/topten.c Sun Sep 17 12:27:57 1989
- X***************
- X*** 42,55 ****
- X int rank, rank0 = -1, rank1 = 0;
- X int occ_cnt = PERSMAX;
- X register struct toptenentry *t0, *t1, *tprev;
- X- char *recfile = RECORD;
- X #ifdef UNIX
- X char *reclock = "record_lock";
- X # ifdef NO_FILE_LINKS
- X int lockfd ;
- X # endif
- X- int sleepct = 100;
- X #endif /* UNIX */
- X FILE *rfile;
- X register int flg = 0;
- X #ifdef LOGFILE
- X--- 42,62 ----
- X int rank, rank0 = -1, rank1 = 0;
- X int occ_cnt = PERSMAX;
- X register struct toptenentry *t0, *t1, *tprev;
- X #ifdef UNIX
- X char *reclock = "record_lock";
- X # ifdef NO_FILE_LINKS
- X int lockfd ;
- X # endif
- X #endif /* UNIX */
- X+ #ifdef VMS
- X+ char *reclock = "record_lock;1";
- X+ char recfile[] = RECORD;
- X+ #else
- X+ char *recfile = RECORD;
- X+ #endif
- X+ #if defined(UNIX) || defined(VMS)
- X+ int sleepct = 100;
- X+ #endif
- X FILE *rfile;
- X register int flg = 0;
- X #ifdef LOGFILE
- X***************
- X*** 57,64 ****
- X FILE *lfile;
- X # ifdef UNIX
- X char *loglock = "logfile_lock";
- X- int sleeplgct = 30;
- X # endif /* UNIX */
- X #endif /* LOGFILE */
- X
- X #ifdef MSDOS
- X--- 64,76 ----
- X FILE *lfile;
- X # ifdef UNIX
- X char *loglock = "logfile_lock";
- X # endif /* UNIX */
- X+ # ifdef VMS
- X+ char *loglock = "logfile_lock;1";
- X+ # endif /* VMS */
- X+ # if defined(UNIX) || defined(VMS)
- X+ int sleeplgct = 30;
- X+ # endif /* UNIX or VMS */
- X #endif /* LOGFILE */
- X
- X #ifdef MSDOS
- X***************
- X*** 84,90 ****
- X Strcpy(t0->date, getdate());
- X
- X #ifdef LOGFILE /* used for debugging (who dies of what, where) */
- X! # ifdef UNIX
- X # ifdef NO_FILE_LINKS
- X loglock = (char *)alloc(sizeof(LOCKDIR)+1+strlen(lgfile)+6);
- X Strcpy(loglock,LOCKDIR) ;
- X--- 96,102 ----
- X Strcpy(t0->date, getdate());
- X
- X #ifdef LOGFILE /* used for debugging (who dies of what, where) */
- X! # if defined(UNIX) || defined(VMS)
- X # ifdef NO_FILE_LINKS
- X loglock = (char *)alloc(sizeof(LOCKDIR)+1+strlen(lgfile)+6);
- X Strcpy(loglock,LOCKDIR) ;
- X***************
- X*** 108,119 ****
- X HUP Printf("Waiting for access to log file. (%d)\n",
- X sleeplgct);
- X HUP (void) fflush(stdout);
- X! # if defined(SYSV) || defined(ULTRIX)
- X (void)
- X # endif
- X sleep(1);
- X }
- X! # endif /* UNIX */
- X if(!(lfile = fopen(lgfile,"a"))){
- X HUP (void) puts("Cannot open log file!");
- X goto lgend;
- X--- 120,131 ----
- X HUP Printf("Waiting for access to log file. (%d)\n",
- X sleeplgct);
- X HUP (void) fflush(stdout);
- X! # if defined(SYSV) || defined(ULTRIX) || defined(VMS)
- X (void)
- X # endif
- X sleep(1);
- X }
- X! # endif /* UNIX or VMS */
- X if(!(lfile = fopen(lgfile,"a"))){
- X HUP (void) puts("Cannot open log file!");
- X goto lgend;
- X***************
- X*** 124,132 ****
- X t0->hp, t0->maxhp, t0->points,
- X t0->plchar, t0->sex, t0->name, t0->death);
- X (void) fclose(lfile);
- X! # ifdef UNIX
- X (void) unlink(loglock);
- X! # endif /* UNIX */
- X lgend:;
- X # ifdef NO_FILE_LINKS
- X (void) close(lockfd) ;
- X--- 136,144 ----
- X t0->hp, t0->maxhp, t0->points,
- X t0->plchar, t0->sex, t0->name, t0->death);
- X (void) fclose(lfile);
- X! # if defined(UNIX) || defined(VMS)
- X (void) unlink(loglock);
- X! # endif /* UNIX or VMS */
- X lgend:;
- X # ifdef NO_FILE_LINKS
- X (void) close(lockfd) ;
- X***************
- X*** 140,146 ****
- X # endif
- X #endif /* LOGFILE */
- X
- X! #ifdef UNIX
- X # ifdef NO_FILE_LINKS
- X reclock = (char *)alloc(sizeof(LOCKDIR)+1+strlen(recfile)+7);
- X Strcpy(reclock,LOCKDIR) ;
- X--- 152,158 ----
- X # endif
- X #endif /* LOGFILE */
- X
- X! #if defined(UNIX) || defined(VMS)
- X # ifdef NO_FILE_LINKS
- X reclock = (char *)alloc(sizeof(LOCKDIR)+1+strlen(recfile)+7);
- X Strcpy(reclock,LOCKDIR) ;
- X***************
- X*** 160,171 ****
- X HUP Printf("Waiting for access to record file. (%d)\n",
- X sleepct);
- X HUP (void) fflush(stdout);
- X! # if defined(SYSV) || defined(ULTRIX)
- X (void)
- X # endif
- X sleep(1);
- X }
- X! #endif /* UNIX */
- X if(!(rfile = fopen(recfile,"r"))){
- X HUP (void) puts("Cannot open record file!");
- X goto unlock;
- X--- 172,183 ----
- X HUP Printf("Waiting for access to record file. (%d)\n",
- X sleepct);
- X HUP (void) fflush(stdout);
- X! # if defined(SYSV) || defined(ULTRIX) || defined(VMS)
- X (void)
- X # endif
- X sleep(1);
- X }
- X! #endif /* UNIX or VMS */
- X if(!(rfile = fopen(recfile,"r"))){
- X HUP (void) puts("Cannot open record file!");
- X goto unlock;
- X***************
- X*** 244,249 ****
- X--- 256,269 ----
- X }
- X if(flg) { /* rewrite record file */
- X (void) fclose(rfile);
- X+ #ifdef VMS
- X+ {
- X+ char *sem = rindex(recfile, ';');
- X+
- X+ if (sem)
- X+ *sem = '\0';
- X+ }
- X+ #endif
- X if(!(rfile = fopen(recfile,"w"))){
- X HUP (void) puts("Cannot write record file\n");
- X goto unlock;
- X***************
- X*** 295,302 ****
- X if(rank0 >= rank) if(!done_stopprint)
- X (void) outentry(0, t0, 1);
- X (void) fclose(rfile);
- X unlock: ;
- X! #ifdef UNIX
- X # ifdef NO_FILE_LINKS
- X (void) close(lockfd) ;
- X # endif
- X--- 315,329 ----
- X if(rank0 >= rank) if(!done_stopprint)
- X (void) outentry(0, t0, 1);
- X (void) fclose(rfile);
- X+ #ifdef VMS
- X+ if (flg) {
- X+ delete(RECORD);
- X+ rename(recfile, RECORD);
- X+ }
- X+ # undef unlink
- X+ #endif
- X unlock: ;
- X! #if defined(UNIX) || defined(VMS)
- X # ifdef NO_FILE_LINKS
- X (void) close(lockfd) ;
- X # endif
- X***************
- X*** 693,701 ****
- X } else {
- X otmp->corpsenm = classmon(tt->plchar, (tt->sex == 'F'));
- X otmp->owt = weight(otmp);
- X! /* Note: oname() is safe since otmp is first in chain */
- X otmp = oname(otmp, tt->name, 0);
- X fobj = otmp;
- X free((genericptr_t) tt);
- X return otmp;
- X }
- X--- 720,729 ----
- X } else {
- X otmp->corpsenm = classmon(tt->plchar, (tt->sex == 'F'));
- X otmp->owt = weight(otmp);
- X! /* Note: oname() is safe since otmp is first in chains */
- X otmp = oname(otmp, tt->name, 0);
- X fobj = otmp;
- X+ level.objects[otmp->ox][otmp->oy] = otmp;
- X free((genericptr_t) tt);
- X return otmp;
- X }
- X*** src/Old/trap.c Wed Sep 27 12:22:04 1989
- X--- src/trap.c Mon Sep 25 21:30:24 1989
- X***************
- X*** 101,109 ****
- X boolean tmp1, tmp2, tmp3;
- X # ifdef POLYSELF
- X tmp1 = isok(x,y) && (!IS_ROCK(levl[x][y].typ) ||
- X! passes_walls(uasmon)) && !levl[x][y].mmask;
- X # else
- X! tmp1 = isok(x,y) && !IS_ROCK(levl[x][y].typ) && !levl[x][y].mmask;
- X # endif
- X tmp2 = !sobj_at(BOULDER,x,y) && !t_at(x,y);
- X tmp3 = !(is_pool(x,y) &&
- X--- 101,109 ----
- X boolean tmp1, tmp2, tmp3;
- X # ifdef POLYSELF
- X tmp1 = isok(x,y) && (!IS_ROCK(levl[x][y].typ) ||
- X! passes_walls(uasmon)) && !MON_AT(x, y);
- X # else
- X! tmp1 = isok(x,y) && !IS_ROCK(levl[x][y].typ) && !MON_AT(x, y);
- X # endif
- X tmp2 = !sobj_at(BOULDER,x,y) && !t_at(x,y);
- X tmp3 = !(is_pool(x,y) &&
- X***************
- X*** 122,128 ****
- X # else
- X !IS_ROCK(levl[x][y].typ) &&
- X # endif
- X! !levl[x][y].mmask &&
- X !sobj_at(BOULDER,x,y) && !t_at(x,y) &&
- X !(is_pool(x,y) &&
- X !(Levitation || Wwalking
- X--- 122,128 ----
- X # else
- X !IS_ROCK(levl[x][y].typ) &&
- X # endif
- X! !MON_AT(x, y) &&
- X !sobj_at(BOULDER,x,y) && !t_at(x,y) &&
- X !(is_pool(x,y) &&
- X !(Levitation || Wwalking
- X***************
- X*** 206,211 ****
- X--- 206,212 ----
- X #endif
- X break;
- X case STATUE_TRAP:
- X+ deltrap(trap);
- X for(otmp=fobj; otmp; otmp=otmp->nobj) {
- X if(otmp->otyp == STATUE && otmp->ox == u.ux &&
- X otmp->oy == u.uy && otmp->corpsenm == trap->pm)
- X***************
- X*** 215,221 ****
- X break;
- X }
- X }
- X- deltrap(trap);
- X break;
- X case MONST_TRAP:
- X if(mtmp=makemon(&mons[trap->pm],u.ux,u.uy)) {
- X--- 216,221 ----
- X***************
- X*** 226,232 ****
- X if(uarmh)
- X pline("Its blow glances off your helmet.");
- X else
- X! (void) thitu(3,d(4,6),"falling piercer");
- X break;
- X default: /* monster surprises you. */
- X pline("%s attacks you by surprise!",
- X--- 226,233 ----
- X if(uarmh)
- X pline("Its blow glances off your helmet.");
- X else
- X! (void) thitu(3,d(4,6),(struct obj *)0,
- X! "falling piercer");
- X break;
- X default: /* monster surprises you. */
- X pline("%s attacks you by surprise!",
- X***************
- X*** 238,244 ****
- X break;
- X case ARROW_TRAP:
- X pline("An arrow shoots out at you!");
- X! if(!thitu(8,rnd(6),"arrow")){
- X (void) mksobj_at(ARROW, u.ux, u.uy);
- X fobj->quan = 1;
- X fobj->owt = weight(fobj);
- X--- 239,245 ----
- X break;
- X case ARROW_TRAP:
- X pline("An arrow shoots out at you!");
- X! if(!thitu(8,rnd(6),(struct obj *)0,"arrow")){
- X (void) mksobj_at(ARROW, u.ux, u.uy);
- X fobj->quan = 1;
- X fobj->owt = weight(fobj);
- X***************
- X*** 294,300 ****
- X break;
- X case DART_TRAP:
- X pline("A little dart shoots out at you!");
- X! if(thitu(7,rnd(3),"little dart")) {
- X if(!rn2(6)) poisoned("dart",A_CON,"poison dart");
- X } else {
- X (void) mksobj_at(DART, u.ux, u.uy);
- X--- 295,301 ----
- X break;
- X case DART_TRAP:
- X pline("A little dart shoots out at you!");
- X! if(thitu(7,rnd(3),(struct obj *)0,"little dart")) {
- X if(!rn2(6)) poisoned("dart",A_CON,"poison dart");
- X } else {
- X (void) mksobj_at(DART, u.ux, u.uy);
- X***************
- X*** 1122,1132 ****
- X } while(!digit(buf[0]) && (buf[0] != '-' || !digit(buf[1])));
- X newlevel = atoi(buf);
- X } else {
- X- newlevel = rn2(5) | !Fire_resistance ? rnd(dlevel + 3) :
- X #ifdef STRONGHOLD
- X! stronghold_level + 1;
- X #else
- X! HELLLEVEL;
- X #endif
- X if(dlevel == newlevel)
- X if(is_maze_lev) newlevel--; else newlevel++;
- X--- 1123,1136 ----
- X } while(!digit(buf[0]) && (buf[0] != '-' || !digit(buf[1])));
- X newlevel = atoi(buf);
- X } else {
- X #ifdef STRONGHOLD
- X! /* We cannot send them to Hell if STRONGHOLD is defined, since
- X! * they may find themselves trapped on the other side of the
- X! * stronghold...
- X! */
- X! newlevel = rn2(5) ? rnd(dlevel + 3) : rnd(stronghold_level);
- X #else
- X! newlevel = rn2(5) || !Fire_resistance ? rnd(dlevel + 3) : HELLLEVEL;
- X #endif
- X if(dlevel == newlevel)
- X if(is_maze_lev) newlevel--; else newlevel++;
- X***************
- X*** 1259,1265 ****
- X /* below pline added by GAN 10/30/86 */
- X adjattrib(A_CHA,1,FALSE);
- X for(i = -1; i <= 1; i++) for(j = -1; j <= 1; j++)
- X! if(levl[u.ux+i][u.uy+j].mmask)
- X (void) tamedog(m_at(u.ux+i, u.uy+j), (struct obj *)0);
- X break;
- X }
- X--- 1263,1269 ----
- X /* below pline added by GAN 10/30/86 */
- X adjattrib(A_CHA,1,FALSE);
- X for(i = -1; i <= 1; i++) for(j = -1; j <= 1; j++)
- X! if(MON_AT(u.ux+i, u.uy+j))
- X (void) tamedog(m_at(u.ux+i, u.uy+j), (struct obj *)0);
- X break;
- X }
- X***************
- X*** 1289,1295 ****
- X
- X /* Scrolls and potions get affected by the water */
- X for(obj = invent; obj; obj = obj->nobj) {
- X! if(obj->olet == SCROLL_SYM && rn2(12) > u.uluck)
- X obj->otyp = SCR_BLANK_PAPER;
- X if(obj->olet == POTION_SYM && rn2(12) > u.uluck) {
- X if (obj->spe == -1) {
- X--- 1293,1303 ----
- X
- X /* Scrolls and potions get affected by the water */
- X for(obj = invent; obj; obj = obj->nobj) {
- X! if(obj->olet == SCROLL_SYM && rn2(12) > u.uluck
- X! #ifdef MAIL
- X! && obj->otyp != SCR_MAIL
- X! #endif
- X! )
- X obj->otyp = SCR_BLANK_PAPER;
- X if(obj->olet == POTION_SYM && rn2(12) > u.uluck) {
- X if (obj->spe == -1) {
- X***************
- X*** 1458,1465 ****
- X }
- X }
- X
- X! /* this is only called when the player is doing something to the chest
- X! * -- i.e., the player and the chest are in the same position */
- X void
- X chest_trap(obj, bodypart)
- X register struct obj *obj;
- X--- 1466,1472 ----
- X }
- X }
- X
- X! /* only called when the player is doing something to the chest directly */
- X void
- X chest_trap(obj, bodypart)
- X register struct obj *obj;
- X*** src/Old/u_init.c Wed Sep 27 12:22:58 1989
- X--- src/u_init.c Mon Sep 25 22:54:56 1989
- X***************
- X*** 93,98 ****
- X--- 93,103 ----
- X { POT_HEALING, 0, POTION_SYM, 4, 1, UNDEF_BLESS },
- X { POT_EXTRA_HEALING, 0, POTION_SYM, 4, 1, UNDEF_BLESS },
- X { WAN_SLEEP, UNDEF_SPE, WAND_SYM, 1, 1, UNDEF_BLESS },
- X+ #ifdef SPELLS
- X+ /* always blessed, so it's guaranteed readable */
- X+ { SPE_HEALING, 0, SPBOOK_SYM, 1, 1, 1 },
- X+ { SPE_EXTRA_HEALING, 0, SPBOOK_SYM, 1, 1, 1 },
- X+ #endif
- X { APPLE, 0, FOOD_SYM, 5, 1, 0 },
- X { 0, 0, 0, 0, 0, 0 }
- X };
- X***************
- X*** 542,553 ****
- X */
- X if (undefined) {
- X #ifdef POLYSELF
- X! int nocreate = STRANGE_OBJECT;
- X # ifdef SPELLS
- X! int nocreate2 = STRANGE_OBJECT;
- X # endif
- X #endif
- X! int nocreate3 = STRANGE_OBJECT;
- X
- X while(obj->otyp == WAN_WISHING
- X #ifdef POLYSELF
- X--- 547,558 ----
- X */
- X if (undefined) {
- X #ifdef POLYSELF
- X! static unsigned nocreate = STRANGE_OBJECT;
- X # ifdef SPELLS
- X! static unsigned nocreate2 = STRANGE_OBJECT;
- X # endif
- X #endif
- X! static unsigned nocreate3 = STRANGE_OBJECT;
- X
- X while(obj->otyp == WAN_WISHING
- X #ifdef POLYSELF
- X***************
- X*** 601,607 ****
- X }
- X
- X obj->bknown = trop->trknown;
- X! if(uses_known(obj)) obj->known = trop->trknown;
- X /* not obj->dknown = 1; - let him look at it at least once */
- X obj->cursed = 0;
- X if(obj->olet == TOOL_SYM){ /* problem with multiple tools */
- X--- 606,612 ----
- X }
- X
- X obj->bknown = trop->trknown;
- X! if(objects[obj->otyp].oc_uses_known) obj->known = trop->trknown;
- X /* not obj->dknown = 1; - let him look at it at least once */
- X obj->cursed = 0;
- X if(obj->olet == TOOL_SYM){ /* problem with multiple tools */
- X*** src/Old/uhitm.c Wed Sep 27 12:23:32 1989
- X--- src/uhitm.c Mon Sep 25 23:01:15 1989
- X***************
- X*** 26,32 ****
- X mm.x = mon->mx;
- X mm.y = mon->my;
- X enexto(&mm, mm.x, mm.y, mon->data);
- X! if (levl[mm.x][mm.y].mmask || mon->mhp <= 1) return (struct monst *)0;
- X m2 = newmonst(0);
- X *m2 = *mon; /* copy condition of old monster */
- X m2->nmon = fmon;
- X--- 26,32 ----
- X mm.x = mon->mx;
- X mm.y = mon->my;
- X enexto(&mm, mm.x, mm.y, mon->data);
- X! if (MON_AT(mm.x, mm.y) || mon->mhp <= 1) return (struct monst *)0;
- X m2 = newmonst(0);
- X *m2 = *mon; /* copy condition of old monster */
- X m2->nmon = fmon;
- X***************
- X*** 62,68 ****
- X m2->mnamelth = 0;
- X m2->mdispl = 0;
- X pmon(m2); /* display the new monster */
- X! levl[m2->mx][m2->my].mmask = 1;
- X if (mon->mtame) (void) tamedog(m2, (struct obj *)0);
- X return m2;
- X }
- X--- 62,68 ----
- X m2->mnamelth = 0;
- X m2->mdispl = 0;
- X pmon(m2); /* display the new monster */
- X! place_monster(m2, m2->mx, m2->my);
- X if (mon->mtame) (void) tamedog(m2, (struct obj *)0);
- X return m2;
- X }
- X***************
- X*** 98,104 ****
- X
- X if(Blind) pline("Wait! There's a hidden monster there!");
- X else if(OBJ_AT(mtmp->mx, mtmp->my)) {
- X! if(obj = o_at(mtmp->mx,mtmp->my))
- X pline("Wait! There's %s hiding under %s!",
- X defmonnam(mtmp), doname(obj));
- X } else if (levl[mtmp->mx][mtmp->my].gmask == 1)
- X--- 98,104 ----
- X
- X if(Blind) pline("Wait! There's a hidden monster there!");
- X else if(OBJ_AT(mtmp->mx, mtmp->my)) {
- X! if(obj = level.objects[mtmp->mx][mtmp->my])
- X pline("Wait! There's %s hiding under %s!",
- X defmonnam(mtmp), doname(obj));
- X } else if (levl[mtmp->mx][mtmp->my].gmask == 1)
- X***************
- X*** 317,326 ****
- X--- 317,331 ----
- X * 7) Possibly kill monster (must be done after 6a, 6b)
- X * 8) Instant-kill from poison (can happen anywhere between 5 and 9)
- X * 9) Hands not glowing (must be done after 7 and 8)
- X+ * The major problem is that since we don't want a "hit" message
- X+ * when the monster dies, we have to know how much damage it did
- X+ * _before_ outputting a hit message, but any messages associated with
- X+ * the damage don't come out until _after_ outputting a hit message.
- X */
- X boolean hittxt = FALSE, destroyed = FALSE;
- X boolean get_dmg_bonus = TRUE;
- X boolean ispoisoned = FALSE, needpoismsg = FALSE, poiskilled = FALSE;
- X+ boolean silvermsg = FALSE;
- X
- X wakeup(mon);
- X if(!obj) {
- X***************
- X*** 379,384 ****
- X--- 384,397 ----
- X obj->opoisoned)
- X ispoisoned = TRUE;
- X }
- X+ if(thrown && obj->otyp == SILVER_ARROW) {
- X+ if (is_were(mon->data) || mon->data->mlet==S_VAMPIRE
- X+ || (mon->data->mlet==S_IMP && mon->data != &mons[PM_TENGU])
- X+ || is_demon(mon->data)) {
- X+ silvermsg = TRUE;
- X+ tmp += rnd(20);
- X+ }
- X+ }
- X }
- X } else if(obj->olet == POTION_SYM) {
- X if (obj->quan > 1) setuwep(splitobj(obj, 1));
- X***************
- X*** 426,432 ****
- X kludge("You hit %s with the %s egg%s.",
- X mon_nam(mon),
- X mons[obj->corpsenm].mname,
- X! (obj->quan==1) ? "" : "s");
- X hittxt = TRUE;
- X pline("The egg%sn't live any more...",
- X (obj->quan==1) ? " is" : "s are");
- X--- 439,445 ----
- X kludge("You hit %s with the %s egg%s.",
- X mon_nam(mon),
- X mons[obj->corpsenm].mname,
- X! plur((long)obj->quan));
- X hittxt = TRUE;
- X pline("The egg%sn't live any more...",
- X (obj->quan==1) ? " is" : "s are");
- X***************
- X*** 557,565 ****
- X else You("hit %s%s", mon_nam(mon), exclam(tmp));
- X }
- X
- X if (needpoismsg)
- X kludge("The poison doesn't seem to affect %s.", mon_nam(mon));
- X-
- X if (poiskilled) {
- X pline("The poison was deadly...");
- X xkilled(mon, 0);
- X--- 570,585 ----
- X else You("hit %s%s", mon_nam(mon), exclam(tmp));
- X }
- X
- X+ if (silvermsg) {
- X+ if (cansee(mon->mx, mon->my))
- X+ pline("The silver arrow sears %s's flesh!",
- X+ mon_nam(mon));
- X+ else
- X+ pline("Its flesh is seared!");
- X+ }
- X+
- X if (needpoismsg)
- X kludge("The poison doesn't seem to affect %s.", mon_nam(mon));
- X if (poiskilled) {
- X pline("The poison was deadly...");
- X xkilled(mon, 0);
- X***************
- X*** 616,622 ****
- X ) {
- X struct monst *dtmp;
- X pline("Some hell-p has arrived!");
- X- /* if((dtmp = mkmon_at(uasmon, u.ux, u.uy)))*/
- X /* if((dtmp = makemon(uasmon, u.ux, u.uy)))*/
- X if((dtmp = makemon(&mons[ndemon()], u.ux, u.uy)))
- X (void)tamedog(dtmp, (struct obj *)0);
- X--- 636,641 ----
- X***************
- X*** 1088,1094 ****
- X sum[i] = damageum(mon,mattk);
- X break;
- X case AT_CLAW:
- X! if (i==0 && uwep && humanoid(uasmon)) goto use_weapon;
- X # ifdef SEDUCE
- X /* succubi/incubi are humanoid, but their _second_
- X * attack is AT_CLAW, not their first...
- X--- 1107,1113 ----
- X sum[i] = damageum(mon,mattk);
- X break;
- X case AT_CLAW:
- X! if (i==0 && uwep && !cantwield(uasmon)) goto use_weapon;
- X # ifdef SEDUCE
- X /* succubi/incubi are humanoid, but their _second_
- X * attack is AT_CLAW, not their first...
- X*** src/Old/unixmain.c Wed Sep 27 12:24:30 1989
- X--- src/unixmain.c Tue Sep 26 18:46:28 1989
- X***************
- X*** 1,7 ****
- X /* SCCS Id: @(#)unixmain.c 3.0 89/01/13
- X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
- X /* NetHack may be freely redistributed. See license for details. */
- X! /* main.c - (Unix) version */
- X
- X #include <signal.h>
- X #include <pwd.h>
- X--- 1,7 ----
- X /* SCCS Id: @(#)unixmain.c 3.0 89/01/13
- X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
- X /* NetHack may be freely redistributed. See license for details. */
- X! /* main.c - Unix NetHack */
- X
- X #include <signal.h>
- X #include <pwd.h>
- X***************
- X*** 8,35 ****
- X
- X #include "hack.h"
- X
- X int hackpid = 0; /* current pid */
- X int locknum = 0; /* max num of players */
- X #ifdef DEF_PAGER
- X char *catmore = 0; /* default pager */
- X #endif
- X- char SAVEF[PL_NSIZ + 11] = "save/"; /* save/99999player */
- X- char *hname = 0; /* name of the game (argv[0] of call) */
- X- char obuf[BUFSIZ]; /* BUFSIZ is defined in stdio.h */
- X
- X! int (*occupation)() = DUMMY;
- X! int (*afternmv)() = DUMMY;
- X #ifdef CHDIR
- X static void chdirx();
- X #endif /* CHDIR */
- X! static void whoami(), newgame();
- X
- X main(argc,argv)
- X int argc;
- X char *argv[];
- X {
- X struct passwd *pw;
- X- extern struct passwd *getpwuid();
- X extern int x_maze_max, y_maze_max;
- X register int fd;
- X #ifdef CHDIR
- X--- 8,35 ----
- X
- X #include "hack.h"
- X
- X+ char SAVEF[PL_NSIZ + 11] = "save/"; /* save/99999player */
- X+
- X+ char *hname = 0; /* name of the game (argv[0] of call) */
- X+ char obuf[BUFSIZ]; /* BUFSIZ is defined in stdio.h */
- X int hackpid = 0; /* current pid */
- X int locknum = 0; /* max num of players */
- X #ifdef DEF_PAGER
- X char *catmore = 0; /* default pager */
- X #endif
- X
- X! extern struct passwd *getpwuid();
- X #ifdef CHDIR
- X static void chdirx();
- X #endif /* CHDIR */
- X! static void whoami();
- X
- X+ int
- X main(argc,argv)
- X int argc;
- X char *argv[];
- X {
- X struct passwd *pw;
- X extern int x_maze_max, y_maze_max;
- X register int fd;
- X #ifdef CHDIR
- X***************
- X*** 38,47 ****
- X--- 38,62 ----
- X #ifdef COMPRESS
- X char cmd[80], old[80];
- X #endif
- X+
- X hname = argv[0];
- X hackpid = getpid();
- X (void) umask(0);
- X
- X+ /*
- X+ * Remember tty modes, to be restored on exit.
- X+ *
- X+ * gettty() must be called before startup()
- X+ * due to ordering of LI/CO settings
- X+ * startup() must be called before initoptions()
- X+ * due to ordering of graphics settings
- X+ */
- X+ gettty();
- X+ setbuf(stdout,obuf);
- X+ startup();
- X+ initoptions();
- X+ whoami();
- X+
- X #ifdef CHDIR /* otherwise no chdir() */
- X /*
- X * See if we must change directory to the playground.
- X***************
- X*** 50,58 ****
- X * The environment variable HACKDIR is overridden by a
- X * -d command line option (must be the first option given)
- X */
- X-
- X dir = getenv("HACKDIR");
- X! if(argc > 1 && !strncmp(argv[1], "-d", 2)) {
- X argc--;
- X argv++;
- X dir = argv[0]+2;
- X--- 65,75 ----
- X * The environment variable HACKDIR is overridden by a
- X * -d command line option (must be the first option given)
- X */
- X dir = getenv("HACKDIR");
- X! #endif
- X! if(argc > 1) {
- X! #ifdef CHDIR
- X! if (!strncmp(argv[1], "-d", 2)) {
- X argc--;
- X argv++;
- X dir = argv[0]+2;
- X***************
- X*** 64,101 ****
- X }
- X if(!*dir)
- X error("Flag -d must be followed by a directory name.");
- X! }
- X #endif /* CHDIR /**/
- X
- X /*
- X- * Remember tty modes, to be restored on exit.
- X- *
- X- * Note that getty() must be called before startup() due to ordering
- X- * of LI/CO settings, and startup() must be called before initoptions()
- X- * due to ordering of graphics settings.
- X- */
- X- gettty();
- X- startup();
- X- initoptions();
- X- whoami();
- X- /*
- X * Now we know the directory containing 'record' and
- X * may do a prscore().
- X */
- X! if(argc > 1 && !strncmp(argv[1], "-s", 2)) {
- X #ifdef CHDIR
- X chdirx(dir,0);
- X #endif
- X prscore(argc, argv);
- X! getret();
- X settty(NULL);
- X exit(0);
- X }
- X
- X /*
- X! * It seems he really wants to play.
- X */
- X- setbuf(stdout,obuf);
- X setrandom();
- X cls();
- X u.uhp = 1; /* prevent RIP on early quits */
- X--- 81,107 ----
- X }
- X if(!*dir)
- X error("Flag -d must be followed by a directory name.");
- X! } else
- X #endif /* CHDIR /**/
- X
- X /*
- X * Now we know the directory containing 'record' and
- X * may do a prscore().
- X */
- X! if (!strncmp(argv[1], "-s", 2)) {
- X #ifdef CHDIR
- X chdirx(dir,0);
- X #endif
- X prscore(argc, argv);
- X! if(isatty(1)) getret();
- X settty(NULL);
- X exit(0);
- X+ }
- X }
- X
- X /*
- X! * It seems you really want to play.
- X */
- X setrandom();
- X cls();
- X u.uhp = 1; /* prevent RIP on early quits */
- X***************
- X*** 123,140 ****
- X argc--;
- X switch(argv[0][1]){
- X #if defined(WIZARD) || defined(EXPLORE_MODE)
- X! case 'D':
- X case 'X':
- X! pw = getpwuid(getuid());
- X # ifdef WIZARD
- X! if(!strcmp(pw->pw_name, WIZARD))
- X wizard = TRUE;
- X! # endif
- X! # if defined(WIZARD) && defined(EXPLORE_MODE)
- X! else
- X # endif
- X # ifdef EXPLORE_MODE
- X! discover = TRUE;
- X # endif
- X break;
- X #endif
- X--- 129,149 ----
- X argc--;
- X switch(argv[0][1]){
- X #if defined(WIZARD) || defined(EXPLORE_MODE)
- X! # ifndef EXPLORE_MODE
- X case 'X':
- X! # endif
- X! case 'D':
- X # ifdef WIZARD
- X! pw = getpwuid(getuid());
- X! if(!strcmp(pw->pw_name, WIZARD)) {
- X wizard = TRUE;
- X! break;
- X! }
- X! /* otherwise fall thru to discover */
- X # endif
- X # ifdef EXPLORE_MODE
- X! case 'X':
- X! discover = TRUE;
- X # endif
- X break;
- X #endif
- X***************
- X*** 176,182 ****
- X getmailstatus();
- X #endif
- X #ifdef WIZARD
- X! if(wizard) Strcpy(plname, "wizard"); else
- X #endif
- X if(!*plname || !strncmp(plname, "player", 4)
- X || !strncmp(plname, "games", 4))
- X--- 185,193 ----
- X getmailstatus();
- X #endif
- X #ifdef WIZARD
- X! if (wizard)
- X! Strcpy(plname, "wizard");
- X! else
- X #endif
- X if(!*plname || !strncmp(plname, "player", 4)
- X || !strncmp(plname, "games", 4))
- X***************
- X*** 202,217 ****
- X #endif /* WIZARD /**/
- X setftty();
- X
- X! /*
- X * Initialisation of the boundaries of the mazes
- X * Both boundaries have to be even.
- X */
- X!
- X x_maze_max = COLNO-1;
- X! if (x_maze_max % 2)
- X x_maze_max--;
- X y_maze_max = ROWNO-1;
- X! if (y_maze_max % 2)
- X y_maze_max--;
- X
- X /* initialize static monster strength array */
- X--- 213,228 ----
- X #endif /* WIZARD /**/
- X setftty();
- X
- X! /*
- X * Initialisation of the boundaries of the mazes
- X * Both boundaries have to be even.
- X */
- X!
- X x_maze_max = COLNO-1;
- X! if (x_maze_max % 2)
- X x_maze_max--;
- X y_maze_max = ROWNO-1;
- X! if (y_maze_max % 2)
- X y_maze_max--;
- X
- X /* initialize static monster strength array */
- X***************
- X*** 237,247 ****
- X--- 248,267 ----
- X #endif
- X if((fd = open(SAVEF,0)) >= 0 &&
- X (uptodate(fd) || unlink(SAVEF) == 666)) {
- X+ #ifdef WIZARD
- X+ /* Since wizard is actually flags.debug, restoring might
- X+ * overwrite it.
- X+ */
- X+ boolean remember_wiz_mode = wizard;
- X+ #endif
- X (void) signal(SIGINT, (SIG_RET_TYPE) done1);
- X pline("Restoring old save file...");
- X (void) fflush(stdout);
- X if(!dorecover(fd))
- X goto not_recovered;
- X+ #ifdef WIZARD
- X+ if(!wizard && remember_wiz_mode) wizard = TRUE;
- X+ #endif
- X pline("Hello %s, welcome to NetHack!", plname);
- X /* get shopkeeper set properly if restore is in shop */
- X (void) inshop();
- X***************
- X*** 282,443 ****
- X
- X initrack();
- X
- X! for(;;) {
- X! if(flags.move) { /* actual time passed */
- X!
- X! #ifdef SOUNDS
- X! dosounds();
- X! #endif
- X! settrack();
- X!
- X! if(moves%2 == 0 ||
- X! (!(Fast & ~INTRINSIC) && (!Fast || rn2(3)))) {
- X! movemon();
- X! #ifdef HARD
- X! if(!rn2(u.udemigod?25:(dlevel>30)?50:70))
- X! #else
- X! if(!rn2(70))
- X! #endif
- X! (void) makemon((struct permonst *)0, 0, 0);
- X! }
- X! if(Glib) glibr();
- X! timeout();
- X! ++moves;
- X! #ifdef THEOLOGY
- X! if (u.ublesscnt) u.ublesscnt--;
- X! #endif
- X! if(flags.time) flags.botl = 1;
- X! #ifdef POLYSELF
- X! if(u.mtimedone)
- X! if(u.mh < 1) rehumanize();
- X! else
- X! #endif
- X! if(u.uhp < 1) {
- X! You("die...");
- X! done(DIED);
- X! }
- X! #ifdef POLYSELF
- X! if (u.mtimedone) {
- X! if (u.mh < u.mhmax) {
- X! if (Regeneration || !(moves%20)) {
- X! flags.botl = 1;
- X! u.mh++;
- X! }
- X! }
- X! }
- X! #endif
- X! if(u.uhp < u.uhpmax) {
- X! if(u.ulevel > 9) {
- X! int heal;
- X!
- X! if(HRegeneration || !(moves%3)) {
- X! flags.botl = 1;
- X! if (ACURR(A_CON) <= 12) heal = 1;
- X! else heal = rnd((int) ACURR(A_CON)-12);
- X! if (heal > u.ulevel-9) heal = u.ulevel-9;
- X! u.uhp += heal;
- X! if(u.uhp > u.uhpmax)
- X! u.uhp = u.uhpmax;
- X! }
- X! } else if(HRegeneration ||
- X! (!(moves%((MAXULEV+12)/(u.ulevel+2)+1)))) {
- X! flags.botl = 1;
- X! u.uhp++;
- X! }
- X! }
- X! #ifdef SPELLS
- X! if ((u.uen<u.uenmax) && (!(moves%(19-ACURR(A_INT)/2)))) {
- X! u.uen += rn2((int)ACURR(A_WIS)/5 + 1) + 1;
- X! if (u.uen > u.uenmax) u.uen = u.uenmax;
- X! flags.botl = 1;
- X! }
- X! #endif
- X! if(Teleportation && !rn2(85)) tele();
- X! #ifdef POLYSELF
- X! if(Polymorph && !rn2(100)) polyself();
- X! if(u.ulycn >= 0 && !rn2(80 - (20 * night())))
- X! you_were();
- X! #endif
- X! if(Searching && multi >= 0) (void) dosearch0(1);
- X! hatch_eggs();
- X! gethungry();
- X! invault();
- X! amulet();
- X! #ifdef HARD
- X! if (!rn2(40+(int)(ACURR(A_DEX)*3))) u_wipe_engr(rnd(3));
- X! if (u.udemigod) {
- X!
- X! if(u.udg_cnt) u.udg_cnt--;
- X! if(!u.udg_cnt) {
- X!
- X! intervene();
- X! u.udg_cnt = rn1(200, 50);
- X! }
- X! }
- X! #endif
- X! restore_attrib();
- X! }
- X! if(multi < 0) {
- X! if(!++multi){
- X! pline(nomovemsg ? nomovemsg :
- X! "You can move again.");
- X! nomovemsg = 0;
- X! if(afternmv) (*afternmv)();
- X! afternmv = 0;
- X! }
- X! }
- X!
- X! find_ac();
- X! if(!flags.mv || Blind)
- X! {
- X! seeobjs();
- X! seemons();
- X! seeglds();
- X! nscr();
- X! }
- X! if(flags.botl || flags.botlx) bot();
- X!
- X! flags.move = 1;
- X!
- X! if(multi >= 0 && occupation) {
- X!
- X! if(monster_nearby())
- X! stop_occupation();
- X! else if ((*occupation)() == 0)
- X! occupation = 0;
- X! continue;
- X! }
- X!
- X! if((u.uhave_amulet || Clairvoyant) &&
- X! #ifdef ENDGAME
- X! dlevel != ENDLEVEL &&
- X! #endif
- X! !(moves%15) && !rn2(2)) do_vicinity_map();
- X!
- X! u.umoved = FALSE;
- X! if(multi > 0) {
- X! lookaround();
- X! if(!multi) { /* lookaround may clear multi */
- X! flags.move = 0;
- X! continue;
- X! }
- X! if(flags.mv) {
- X! if(multi < COLNO && !--multi)
- X! flags.mv = flags.run = 0;
- X! domove();
- X! } else {
- X! --multi;
- X! rhack(save_cm);
- X! }
- X! } else if(multi == 0) {
- X! #ifdef MAIL
- X! ckmailstatus();
- X! #endif
- X! rhack(NULL);
- X! }
- X! if(multi && multi%7 == 0)
- X! (void) fflush(stdout);
- X! }
- X }
- X
- X void
- X--- 302,309 ----
- X
- X initrack();
- X
- X! moveloop();
- X! return(0);
- X }
- X
- X void
- X***************
- X*** 458,469 ****
- X * It may still contain a suffix denoting pl_character.
- X */
- X void
- X! askname(){
- X! register int c,ct;
- X Printf("\nWho are you? ");
- X (void) fflush(stdout);
- X ct = 0;
- X! while((c = Getchar()) != '\n'){
- X if(c == EOF) error("End of input\n");
- X /* some people get confused when their erase char is not ^H */
- X if(c == '\010') {
- X--- 324,336 ----
- X * It may still contain a suffix denoting pl_character.
- X */
- X void
- X! askname() {
- X! register int c, ct;
- X!
- X Printf("\nWho are you? ");
- X (void) fflush(stdout);
- X ct = 0;
- X! while((c = Getchar()) != '\n') {
- X if(c == EOF) error("End of input\n");
- X /* some people get confused when their erase char is not ^H */
- X if(c == '\010') {
- X***************
- X*** 472,492 ****
- X }
- X if(c != '-')
- X if(c < 'A' || (c > 'Z' && c < 'a') || c > 'z') c = '_';
- X! if(ct < sizeof(plname)-1) plname[ct++] = c;
- X }
- X plname[ct] = 0;
- X if(ct == 0) askname();
- X }
- X
- X- /*VARARGS1*/
- X- void
- X- impossible(s,x1,x2)
- X- register char *s, *x1, *x2;
- X- {
- X- pline(s,x1,x2);
- X- pline("Program in disorder - perhaps you'd better Quit.");
- X- }
- X-
- X #ifdef CHDIR
- X static void
- X chdirx(dir, wr)
- X--- 339,351 ----
- X }
- X if(c != '-')
- X if(c < 'A' || (c > 'Z' && c < 'a') || c > 'z') c = '_';
- X! if(ct < sizeof(plname)-1)
- X! plname[ct++] = c;
- X }
- X plname[ct] = 0;
- X if(ct == 0) askname();
- X }
- X
- X #ifdef CHDIR
- X static void
- X chdirx(dir, wr)
- X***************
- X*** 515,521 ****
- X error("Cannot chdir to %s.", dir);
- X }
- X
- X! /* warn the player if he cannot write the record file */
- X /* perhaps we should also test whether . is writable */
- X /* unfortunately the access systemcall is worthless */
- X if(wr) {
- X--- 374,380 ----
- X error("Cannot chdir to %s.", dir);
- X }
- X
- X! /* warn the player if we can't write the record file */
- X /* perhaps we should also test whether . is writable */
- X /* unfortunately the access systemcall is worthless */
- X if(wr) {
- X***************
- X*** 532,550 ****
- X }
- X #endif /* CHDIR /**/
- X
- X- void
- X- stop_occupation()
- X- {
- X- if(occupation) {
- X- You("stop %s.", occtxt);
- X- occupation = 0;
- X- #ifdef REDO
- X- multi = 0;
- X- pushch(0);
- X- #endif
- X- }
- X- }
- X-
- X static void
- X whoami() {
- X /*
- X--- 391,396 ----
- X***************
- X*** 555,561 ****
- X * If everything fails, or if the resulting name is some generic
- X * account like "games", "play", "player", "hack" then eventually
- X * we'll ask him.
- X! * Note that we trust him here; it is possible to play under
- X * somebody else's name.
- X */
- X register char *s;
- X--- 401,407 ----
- X * If everything fails, or if the resulting name is some generic
- X * account like "games", "play", "player", "hack" then eventually
- X * we'll ask him.
- X! * Note that we trust the user here; it is possible to play under
- X * somebody else's name.
- X */
- X register char *s;
- X***************
- X*** 566,607 ****
- X (void) strncpy(plname, s, sizeof(plname)-1);
- X if(!*plname && (s = getlogin()))
- X (void) strncpy(plname, s, sizeof(plname)-1);
- X- }
- X-
- X- static void
- X- newgame() {
- X- fobj = fcobj = invent = 0;
- X- fmon = fallen_down = 0;
- X- ftrap = 0;
- X- fgold = 0;
- X- flags.ident = 1;
- X-
- X- init_objects();
- X- u_init();
- X-
- X- (void) signal(SIGINT, (SIG_RET_TYPE) done1);
- X-
- X- mklev();
- X- u.ux = xupstair;
- X- u.uy = yupstair;
- X- (void) inshop();
- X-
- X- setsee();
- X- flags.botlx = 1;
- X-
- X- /* Move the monster from under you or else
- X- * makedog() will fail when it calls makemon().
- X- * - ucsfcgl!kneller
- X- */
- X- if(levl[u.ux][u.uy].mmask) mnexto(m_at(u.ux, u.uy));
- X-
- X- (void) makedog();
- X- seemons();
- X- #ifdef NEWS
- X- if(flags.nonews || !readnews())
- X- /* after reading news we did docrt() already */
- X- #endif
- X- docrt();
- X-
- X- return;
- X }
- X--- 412,415 ----
- X*** src/Old/unixtty.c Wed Sep 27 12:24:56 1989
- X--- src/unixtty.c Sun Sep 17 14:26:48 1989
- X***************
- X*** 10,15 ****
- X--- 10,16 ----
- X /* block some unused #defines to avoid overloading some cpp's */
- X #define MONATTK_H
- X #define ONAMES_H
- X+ #define NEED_VARARGS
- X #include "hack.h"
- X
- X /*
- X***************
- X*** 187,199 ****
- X
- X /* fatal error */
- X /*VARARGS1*/
- X void
- X! error(s, x, y)
- X! char *s, *x, *y;
- X! {
- X if(settty_needed)
- X settty(NULL);
- X! Printf(s,x,y);
- X (void) putchar('\n');
- X exit(1);
- X }
- X--- 188,202 ----
- X
- X /* fatal error */
- X /*VARARGS1*/
- X+
- X void
- X! error VA_DECL(char *,s)
- X! VA_START(s);
- X! VA_INIT(s, char *);
- X if(settty_needed)
- X settty(NULL);
- X! Vprintf(s,VA_ARGS);
- X (void) putchar('\n');
- X+ VA_END();
- X exit(1);
- X }
- X*** src/Old/unixunix.c Wed Sep 27 12:25:13 1989
- X--- src/unixunix.c Tue Sep 26 18:51:38 1989
- X***************
- X*** 27,33 ****
- X void
- X setrandom()
- X {
- X! #ifdef SYSV
- X (void) Srand((long) time ((time_t *) 0));
- X #else
- X #ifdef ULTRIX
- X--- 27,33 ----
- X void
- X setrandom()
- X {
- X! #if defined(SYSV) || defined(DGUX)
- X (void) Srand((long) time ((time_t *) 0));
- X #else
- X #ifdef ULTRIX
- X*** src/Old/vault.c Wed Sep 27 12:25:28 1989
- X--- src/vault.c Mon Sep 25 21:30:30 1989
- X***************
- X*** 237,246 ****
- X fcp->ftyp = typ;
- X newpos:
- X if(EGD->gddone) nx = ny = 0;
- X! levl[guard->mx][guard->my].mmask = 0;
- X! levl[nx][ny].mmask = 1;
- X! guard->mx = nx;
- X! guard->my = ny;
- X pmon(guard);
- X restfakecorr();
- X return(1);
- X--- 237,244 ----
- X fcp->ftyp = typ;
- X newpos:
- X if(EGD->gddone) nx = ny = 0;
- X! remove_monster(guard->mx, guard->my);
- X! place_monster(guard, nx, ny);
- X pmon(guard);
- X restfakecorr();
- X return(1);
- X***************
- X*** 270,277 ****
- X if (!u.ugold) return;
- X
- X if (u.uinvault) {
- X! Your("%ld Zorkmids goes into the Magic Memory Vault.",
- X! u.ugold);
- X mkgold(u.ugold, u.ux, u.uy);
- X u.ugold = 0L;
- X } else if (guard) {
- X--- 268,275 ----
- X if (!u.ugold) return;
- X
- X if (u.uinvault) {
- X! Your("%ld zorkmid%s goes into the Magic Memory Vault.",
- X! u.ugold, plur(u.ugold));
- X mkgold(u.ugold, u.ux, u.uy);
- X u.ugold = 0L;
- X } else if (guard) {
- X*** src/Old/version.c Wed Sep 27 12:25:42 1989
- X--- src/version.c Sat Sep 16 17:54:27 1989
- X***************
- X*** 38,43 ****
- X--- 38,46 ----
- X #ifdef UNIX
- X "Unix",
- X #endif
- X+ #ifdef VMS
- X+ "VMS",
- X+ #endif
- X VERSION,
- X #ifndef BETA
- X PATCHLEVEL,
- X*** src/Old/weapon.c Wed Sep 27 12:25:56 1989
- X--- src/weapon.c Fri Sep 15 00:51:04 1989
- X***************
- X*** 171,185 ****
- X #ifdef TOLKIEN
- X static const int rwep[] =
- X { DWARVISH_SPEAR, ELVEN_SPEAR, SPEAR, ORCISH_SPEAR, JAVELIN,
- X! SHURIKEN, ELVEN_ARROW, ARROW, ORCISH_ARROW, CROSSBOW_BOLT,
- X! ELVEN_DAGGER, DAGGER, ORCISH_DAGGER, KNIFE, ROCK, LOADSTONE,
- X! LUCKSTONE, DART, BOOMERANG, CREAM_PIE
- X /* note: CREAM_PIE should NOT be #ifdef KOPS */
- X };
- X #else
- X static const int rwep[] =
- X! { SPEAR, JAVELIN, SHURIKEN, ARROW, CROSSBOW_BOLT, DAGGER, KNIFE,
- X! ROCK, LOADSTONE, LUCKSTONE, DART, BOOMERANG, CREAM_PIE
- X /* note: CREAM_PIE should NOT be #ifdef KOPS */
- X };
- X #endif
- X--- 171,185 ----
- X #ifdef TOLKIEN
- X static const int rwep[] =
- X { DWARVISH_SPEAR, ELVEN_SPEAR, SPEAR, ORCISH_SPEAR, JAVELIN,
- X! SHURIKEN, SILVER_ARROW, ELVEN_ARROW, ARROW, ORCISH_ARROW,
- X! CROSSBOW_BOLT, ELVEN_DAGGER, DAGGER, ORCISH_DAGGER, KNIFE, ROCK,
- X! LOADSTONE, LUCKSTONE, DART, BOOMERANG, CREAM_PIE
- X /* note: CREAM_PIE should NOT be #ifdef KOPS */
- X };
- X #else
- X static const int rwep[] =
- X! { SPEAR, JAVELIN, SHURIKEN, SILVER_ARROW, ARROW, CROSSBOW_BOLT,
- X! DAGGER, KNIFE, ROCK, LOADSTONE, LUCKSTONE, DART, BOOMERANG, CREAM_PIE
- X /* note: CREAM_PIE should NOT be #ifdef KOPS */
- X };
- X #endif
- X*** src/Old/were.c Wed Sep 27 12:26:12 1989
- X--- src/were.c Thu Sep 14 14:34:44 1989
- X***************
- X*** 10,25 ****
- X {
- X register int pm = monsndx(mon->data);
- X
- X- if(Protection_from_shape_changers) return;
- X if(is_were(mon->data))
- X if(is_human(mon->data)) {
- X if(!rn2(50-(night()*20)) || flags.moonphase == FULL_MOON) {
- X new_were(mon);
- X! if(pm != PM_WERERAT && flags.soundok)
- X You("hear a %s howling at the moon.",
- X pm == PM_WEREJACKAL ? "jackal" : "wolf");
- X }
- X! } else if(!rn2(30)) new_were(mon);
- X }
- X
- X static int
- X--- 10,25 ----
- X {
- X register int pm = monsndx(mon->data);
- X
- X if(is_were(mon->data))
- X if(is_human(mon->data)) {
- X+ if(Protection_from_shape_changers) return;
- X if(!rn2(50-(night()*20)) || flags.moonphase == FULL_MOON) {
- X new_were(mon);
- X! if(mons[pm].msound == MS_BARK && flags.soundok)
- X You("hear a %s howling at the moon.",
- X pm == PM_WEREJACKAL ? "jackal" : "wolf");
- X }
- X! } else if(!rn2(30) || Protection_from_shape_changers) new_were(mon);
- X }
- X
- X static int
- X***************
- X*** 69,75 ****
- X register struct monst *mtmp;
- X boolean success = FALSE;
- X
- X! if(Protection_from_shape_changers)
- X return FALSE;
- X for(i = rnd(5); i > 0; i--) {
- X switch(pm) {
- X--- 69,75 ----
- X register struct monst *mtmp;
- X boolean success = FALSE;
- X
- X! if(Protection_from_shape_changers && !yours)
- X return FALSE;
- X for(i = rnd(5); i > 0; i--) {
- X switch(pm) {
- X*** src/Old/wield.c Wed Sep 27 12:26:26 1989
- X--- src/wield.c Mon Sep 25 23:01:52 1989
- X***************
- X*** 209,215 ****
- X } else
- X Sprintf(buf, "Your %s%s",
- X is_sword(obj) ? "sword" : "weapon",
- X! ((obj->quan > 1) ? "s" : ""));
- X Strcat(buf, (obj->quan==1) ? " is" : " are");
- X #ifdef POLYSELF
- X Sprintf(eos(buf), " welded to your %s!",
- X--- 209,215 ----
- X } else
- X Sprintf(buf, "Your %s%s",
- X is_sword(obj) ? "sword" : "weapon",
- X! plur((long)obj->quan));
- X Strcat(buf, (obj->quan==1) ? " is" : " are");
- X #ifdef POLYSELF
- X Sprintf(eos(buf), " welded to your %s!",
- X*** src/Old/wizard.c Wed Sep 27 12:26:39 1989
- X--- src/wizard.c Thu Sep 14 20:44:26 1989
- X***************
- X*** 80,93 ****
- X mnexto(mtmp);
- X return(0);
- X }
- X! if(!levl[otmp->ox][otmp->oy].mmask ||
- X (mtmp->mx == otmp->ox && mtmp->my == otmp->oy)) {
- X
- X /* teleport to it and pick it up */
- X! levl[mtmp->mx][mtmp->my].mmask = 0;
- X! levl[otmp->ox][otmp->oy].mmask = 1;
- X! mtmp->mx = otmp->ox;
- X! mtmp->my = otmp->oy;
- X freeobj(otmp);
- X mpickobj(mtmp, otmp);
- X pmon(mtmp);
- X--- 80,91 ----
- X mnexto(mtmp);
- X return(0);
- X }
- X! if(!MON_AT(otmp->ox, otmp->oy) ||
- X (mtmp->mx == otmp->ox && mtmp->my == otmp->oy)) {
- X
- X /* teleport to it and pick it up */
- X! remove_monster(mtmp->mx, mtmp->my);
- X! place_monster(mtmp, otmp->ox, otmp->oy);
- X freeobj(otmp);
- X mpickobj(mtmp, otmp);
- X pmon(mtmp);
- X*** src/Old/worm.c Wed Sep 27 12:26:55 1989
- X--- src/worm.c Sun Sep 17 12:28:48 1989
- X***************
- X*** 47,53 ****
- X register struct wseg *wtmp;
- X {
- X if (mtmp->mx != wtmp->wx || mtmp->my != wtmp->wy)
- X! levl[wtmp->wx][wtmp->wy].mmask = 0;
- X if(wtmp->wdispl) newsym(wtmp->wx, wtmp->wy);
- X free((genericptr_t) wtmp);
- X }
- X--- 47,53 ----
- X register struct wseg *wtmp;
- X {
- X if (mtmp->mx != wtmp->wx || mtmp->my != wtmp->wy)
- X! remove_monster(wtmp->wx, wtmp->wy);
- X if(wtmp->wdispl) newsym(wtmp->wx, wtmp->wy);
- X free((genericptr_t) wtmp);
- X }
- X***************
- X*** 181,187 ****
- X /* sometimes the tail end dies */
- X if(rn2(3) || !getwn(mtmp2)){
- X monfree(mtmp2);
- X! levl[mtmp2->mx][mtmp2->my].mmask = 1;
- X /* since mtmp is still on that spot */
- X tmp2 = 0;
- X } else {
- X--- 181,187 ----
- X /* sometimes the tail end dies */
- X if(rn2(3) || !getwn(mtmp2)){
- X monfree(mtmp2);
- X! place_worm_seg(mtmp, mtmp2->mx, mtmp2->my);
- X /* since mtmp is still on that spot */
- X tmp2 = 0;
- X } else {
- X***************
- X*** 196,216 ****
- X remseg(mtmp, wtmp->nseg);
- X wtmp->nseg = 0;
- X if(tmp2) {
- X! You("cut the worm in half.");
- X /* devalue the monster level of both halves of the worm */
- X mtmp->m_lev = (mtmp->m_lev <= 2) ? 2 : mtmp->m_lev - 2;
- X mtmp2->m_lev = mtmp->m_lev;
- X /* calculate the mhp on the new (lower) monster level */
- X mtmp2->mhpmax = mtmp2->mhp = d((int)mtmp2->m_lev, 8);
- X! mtmp2->mx = wtmp->wx;
- X! mtmp2->my = wtmp->wy;
- X! levl[mtmp2->mx][mtmp2->my].mmask = 1;
- X mtmp2->nmon = fmon;
- X fmon = mtmp2;
- X mtmp2->mdispl = 0;
- X pmon(mtmp2);
- X } else {
- X! You("cut off part of the worm's tail.");
- X remseg(mtmp, wtmp);
- X }
- X mtmp->mhp /= 2;
- X--- 196,215 ----
- X remseg(mtmp, wtmp->nseg);
- X wtmp->nseg = 0;
- X if(tmp2) {
- X! kludge("You cut %s in half.", mon_nam(mtmp));
- X /* devalue the monster level of both halves of the worm */
- X mtmp->m_lev = (mtmp->m_lev <= 2) ? 2 : mtmp->m_lev - 2;
- X mtmp2->m_lev = mtmp->m_lev;
- X /* calculate the mhp on the new (lower) monster level */
- X mtmp2->mhpmax = mtmp2->mhp = d((int)mtmp2->m_lev, 8);
- X! place_monster(mtmp2, wtmp->wx, wtmp->wy);
- X mtmp2->nmon = fmon;
- X fmon = mtmp2;
- X mtmp2->mdispl = 0;
- X pmon(mtmp2);
- X } else {
- X! if (Blind) You("cut off part of its tail.");
- X! else You("cut off part of %s's tail.", mon_nam(mtmp));
- X remseg(mtmp, wtmp);
- X }
- X mtmp->mhp /= 2;
- X*** src/Old/worn.c Wed Sep 27 12:27:10 1989
- X--- src/worn.c Mon Sep 25 21:35:28 1989
- X***************
- X*** 138,144 ****
- X
- X if (obj->otyp != DRAGON_SCALE_MAIL) return;
- X switch(obj->corpsenm) {
- X! case PM_GREY_DRAGON:
- X mask = &Antimagic;
- X break;
- X case PM_RED_DRAGON:
- X--- 138,144 ----
- X
- X if (obj->otyp != DRAGON_SCALE_MAIL) return;
- X switch(obj->corpsenm) {
- X! case PM_GRAY_DRAGON:
- X mask = &Antimagic;
- X break;
- X case PM_RED_DRAGON:
- X*** src/Old/write.c Wed Sep 27 12:27:23 1989
- X--- src/write.c Mon Sep 25 21:30:53 1989
- X***************
- X*** 96,102 ****
- X getlin(namebuf);
- X if(namebuf[0] == '\033' || !namebuf[0])
- X return;
- X! Strcpy(scrbuf,"scroll of ");
- X Strcat(scrbuf,namebuf);
- X newscroll = readobjnam(scrbuf);
- X
- X--- 96,104 ----
- X getlin(namebuf);
- X if(namebuf[0] == '\033' || !namebuf[0])
- X return;
- X! scrbuf[0] = '\0';
- X! if(strncmp(namebuf,"scroll of ",10) != 0)
- X! Strcpy(scrbuf,"scroll of ");
- X Strcat(scrbuf,namebuf);
- X newscroll = readobjnam(scrbuf);
- X
- X*** src/Old/zap.c Wed Sep 27 12:27:39 1989
- X--- src/zap.c Tue Sep 26 23:23:24 1989
- X***************
- X*** 145,150 ****
- X--- 145,156 ----
- X break;
- X #endif
- X case WAN_OPENING:
- X+ if(u.uswallow && mtmp == u.ustuck) {
- X+ if (Blind) pline("Its mouth opens!");
- X+ else pline("%s opens its mouth!", Monnam(mtmp));
- X+ regurgitates(mtmp);
- X+ break;
- X+ }
- X case WAN_LOCKING:
- X #ifdef SPELLS
- X case SPE_KNOCK:
- X***************
- X*** 189,195 ****
- X montype = PM_UNARMORED_SOLDIER;
- X #endif
- X mons[montype].pxlth += nl;
- X! mtmp = mkmon_at(mons[montype].mname, x, y);
- X mons[montype].pxlth -= nl;
- X if (mtmp) {
- X /* Monster retains its name */
- X--- 195,201 ----
- X montype = PM_UNARMORED_SOLDIER;
- X #endif
- X mons[montype].pxlth += nl;
- X! mtmp = makemon(&mons[montype], x, y);
- X mons[montype].pxlth -= nl;
- X if (mtmp) {
- X /* Monster retains its name */
- X***************
- X*** 220,225 ****
- X--- 226,234 ----
- X #ifdef MAIL
- X obj->otyp == SCR_MAIL ||
- X #endif
- X+ #ifdef TUTTI_FRUTTI
- X+ obj->otyp == SLIME_MOLD ||
- X+ #endif
- X obj->otyp == KEY || obj->otyp == SKELETON_KEY ||
- X obj->otyp == LARGE_BOX || obj->otyp == CHEST))
- X obj->spe = (obj->olet == WAND_SYM) ? -1 : 0;
- X***************
- X*** 286,292 ****
- X otmp2->opoisoned = 1;
- X
- X /* Turn dragon corpses into dragon armors */
- X! if (obj->otyp == CORPSE && obj->corpsenm >= PM_GREY_DRAGON
- X && obj->corpsenm <= PM_YELLOW_DRAGON) {
- X if (!rn2(10)) { /* Random failure */
- X otmp2->otyp = TIN;
- X--- 295,301 ----
- X otmp2->opoisoned = 1;
- X
- X /* Turn dragon corpses into dragon armors */
- X! if (obj->otyp == CORPSE && obj->corpsenm >= PM_GRAY_DRAGON
- X && obj->corpsenm <= PM_YELLOW_DRAGON) {
- X if (!rn2(10)) { /* Random failure */
- X otmp2->otyp = TIN;
- X***************
- X*** 781,787 ****
- X if(u.uswallow) {
- X register struct monst *mtmp = u.ustuck;
- X
- X! You("pierce %s's stomach wall!", mon_nam(mtmp));
- X mtmp->mhp = 1; /* almost dead */
- X regurgitates(mtmp);
- X break;
- X--- 790,798 ----
- X if(u.uswallow) {
- X register struct monst *mtmp = u.ustuck;
- X
- X! if (Blind) You("pierce its stomach wall!");
- X! else You("pierce %s's stomach wall!",
- X! mon_nam(mtmp));
- X mtmp->mhp = 1; /* almost dead */
- X regurgitates(mtmp);
- X break;
- X***************
- X*** 939,945 ****
- X--- 950,960 ----
- X
- X if(sym) {
- X tmp_at(-1, sym); /* open call */
- X+ #ifdef TEXTCOLOR
- X+ tmp_at(-3, (int)objects[obj->otyp].oc_color);
- X+ #else
- X tmp_at(-3, (int)AT_OBJ);
- X+ #endif
- X }
- X while(range-- > 0) {
- X #ifdef STRONGHOLD
- X***************
- X*** 949,955 ****
- X bhitpos.y += ddy;
- X #ifdef STRONGHOLD
- X x = bhitpos.x; y = bhitpos.y;
- X! if (find_drawbridge(&x,&y))
- X switch (obj->otyp) {
- X case WAN_OPENING:
- X # ifdef SPELLS
- X--- 964,970 ----
- X bhitpos.y += ddy;
- X #ifdef STRONGHOLD
- X x = bhitpos.x; y = bhitpos.y;
- X! if (find_drawbridge(&x,&y) && !sym)
- X switch (obj->otyp) {
- X case WAN_OPENING:
- X # ifdef SPELLS
- X***************
- X*** 970,976 ****
- X destroy_drawbridge(x,y);
- X }
- X #endif /* STRONGHOLD /**/
- X! if(levl[bhitpos.x][bhitpos.y].mmask){
- X mtmp = m_at(bhitpos.x,bhitpos.y);
- X if(sym) {
- X tmp_at(-1, -1); /* close call */
- X--- 985,991 ----
- X destroy_drawbridge(x,y);
- X }
- X #endif /* STRONGHOLD /**/
- X! if(MON_AT(bhitpos.x, bhitpos.y)){
- X mtmp = m_at(bhitpos.x,bhitpos.y);
- X if(sym) {
- X tmp_at(-1, -1); /* close call */
- X***************
- X*** 995,1001 ****
- X if(hitanything) range--;
- X }
- X typ = levl[bhitpos.x][bhitpos.y].typ;
- X! if(IS_DOOR(typ) || typ == SDOOR) {
- X switch (obj->otyp) {
- X case WAN_OPENING:
- X case WAN_LOCKING:
- X--- 1010,1016 ----
- X if(hitanything) range--;
- X }
- X typ = levl[bhitpos.x][bhitpos.y].typ;
- X! if((IS_DOOR(typ) || typ == SDOOR) && !sym) {
- X switch (obj->otyp) {
- X case WAN_OPENING:
- X case WAN_LOCKING:
- X***************
- X*** 1065,1071 ****
- X dy = ydir[i];
- X bhitpos.x += dx;
- X bhitpos.y += dy;
- X! if(levl[bhitpos.x][bhitpos.y].mmask){
- X tmp_at(-1,-1);
- X return(m_at(bhitpos.x,bhitpos.y));
- X }
- X--- 1080,1086 ----
- X dy = ydir[i];
- X bhitpos.x += dx;
- X bhitpos.y += dy;
- X! if(MON_AT(bhitpos.x, bhitpos.y)){
- X tmp_at(-1,-1);
- X return(m_at(bhitpos.x,bhitpos.y));
- X }
- X***************
- X*** 1075,1082 ****
- X break;
- X }
- X if(bhitpos.x == u.ux && bhitpos.y == u.uy) { /* ct == 9 */
- X! if(rn2(20) >= ACURR(A_DEX)){ /* we hit ourselves */
- X! (void) thitu(10, rnd(10), "boomerang");
- X break;
- X } else { /* we catch it */
- X tmp_at(-1,-1);
- X--- 1090,1099 ----
- X break;
- X }
- X if(bhitpos.x == u.ux && bhitpos.y == u.uy) { /* ct == 9 */
- X! if(Fumbling || rn2(20) >= ACURR(A_DEX)){
- X! /* we hit ourselves */
- X! (void) thitu(10, rnd(10), (struct obj *)0,
- X! "boomerang");
- X break;
- X } else { /* we catch it */
- X tmp_at(-1,-1);
- X***************
- X*** 1186,1196 ****
- X }
- X
- X /*
- X! * burn scrolls on floor at position x,y
- X! * return the number of scrolls burned
- X */
- X static int
- X! burn_floor_scrolls(x, y)
- X int x, y;
- X {
- X register struct obj *obj, *obj2;
- X--- 1203,1213 ----
- X }
- X
- X /*
- X! * burn scrolls and spell books on floor at position x,y
- X! * return the number of scrolls and spell books burned
- X */
- X static int
- X! burn_floor_paper(x, y)
- X int x, y;
- X {
- X register struct obj *obj, *obj2;
- X***************
- X*** 1200,1206 ****
- X for(obj = fobj; obj; obj = obj2) {
- X obj2 = obj->nobj;
- X /* Bug fix - KAA */
- X! if(obj->ox == x && obj->oy == y && obj->olet == SCROLL_SYM) {
- X scrquan = obj->quan;
- X for(i = 1; i <= scrquan ; i++)
- X if(!rn2(3)) {
- X--- 1217,1228 ----
- X for(obj = fobj; obj; obj = obj2) {
- X obj2 = obj->nobj;
- X /* Bug fix - KAA */
- X! if(obj->ox == x && obj->oy == y &&
- X! #ifdef SPELLS
- X! (obj->olet == SCROLL_SYM || obj->olet == SPBOOK_SYM)) {
- X! #else
- X! obj->olet == SCROLL_SYM) {
- X! #endif
- X scrquan = obj->quan;
- X for(i = 1; i <= scrquan ; i++)
- X if(!rn2(3)) {
- X***************
- X*** 1391,1402 ****
- X }
- X }
- X if(OBJ_AT(sx, sy) && abstype == 1)
- X! if(burn_floor_scrolls(sx,sy) && cansee(sx,sy)) {
- X mnewsym(sx,sy);
- X if(!Blind)
- X You("see a puff of smoke.");
- X }
- X! if(levl[sx][sy].mmask){
- X mon = m_at(sx,sy);
- X /* Cannot use wakeup() which also angers the monster */
- X mon->msleep = 0;
- X--- 1413,1424 ----
- X }
- X }
- X if(OBJ_AT(sx, sy) && abstype == 1)
- X! if(burn_floor_paper(sx,sy) && cansee(sx,sy)) {
- X mnewsym(sx,sy);
- X if(!Blind)
- X You("see a puff of smoke.");
- X }
- X! if(MON_AT(sx, sy)){
- X mon = m_at(sx,sy);
- X /* Cannot use wakeup() which also angers the monster */
- X mon->msleep = 0;
- X***************
- X*** 1863,1889 ****
- X {
- X register int resisted = 0;
- X #ifdef HARD
- X! register int level;
- X
- X switch(olet) {
- X
- X case WAND_SYM:
- X! level = 8;
- X break;
- X
- X case SCROLL_SYM:
- X! level = 6;
- X break;
- X
- X case POTION_SYM:
- X! level = 5;
- X break;
- X
- X! default: level = u.ulevel;
- X break;
- X }
- X
- X! resisted = (rn2(100) - mtmp->m_lev + level) < mtmp->data->mr;
- X if(resisted) {
- X
- X if(tell) {
- X--- 1885,1911 ----
- X {
- X register int resisted = 0;
- X #ifdef HARD
- X! register int lev;
- X
- X switch(olet) {
- X
- X case WAND_SYM:
- X! lev = 8;
- X break;
- X
- X case SCROLL_SYM:
- X! lev = 6;
- X break;
- X
- X case POTION_SYM:
- X! lev = 5;
- X break;
- X
- X! default: lev = u.ulevel;
- X break;
- X }
- X
- X! resisted = (rn2(100) - mtmp->m_lev + lev) < mtmp->data->mr;
- X if(resisted) {
- X
- X if(tell) {
- X***************
- X*** 1925,1933 ****
- X }
- X if (otmp != &zeroobj) {
- X if(dropit) {
- X! pline("Oops! The %s drop%s to the floor!", xname(otmp),
- X! otmp->quan > 1 ? "" : "s");
- X! dropy(otmp);
- X } else {
- X wishquan = otmp->quan;
- X otmp = addinv(otmp);
- X--- 1947,1954 ----
- X }
- X if (otmp != &zeroobj) {
- X if(dropit) {
- X! pline("Oops! The %s to the floor!", aobjnam(otmp, "drop"));
- X! dropy(otmp);
- X } else {
- X wishquan = otmp->quan;
- X otmp = addinv(otmp);
- X
- END_OF_FILE
- if test 56197 -ne `wc -c <'patches04e'`; then
- echo shar: \"'patches04e'\" unpacked with wrong size!
- fi
- # end of 'patches04e'
- fi
- echo shar: End of archive 5 \(of 11\).
- cp /dev/null ark5isdone
- MISSING=""
- for I in 1 2 3 4 5 6 7 8 9 10 11 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 11 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
-