billr@saab.CNA.TEK.COM (Bill Randle) (08/04/89)
Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu> Posting-number: Volume 7, Issue 99 Archive-name: NetHack3/Patch1f 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 6)." # Contents: src4.diff # Wrapped by billr@saab on Thu Aug 3 09:57:48 1989 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'src4.diff' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'src4.diff'\" else echo shar: Extracting \"'src4.diff'\" \(48599 characters\) sed "s/^X//" >'src4.diff' <<'END_OF_FILE' XSource patches, part 4 and final X X-----------------------------------Cut--------------------------------- X*** src/Old/shk.c Mon Jul 31 14:40:35 1989 X--- src/shk.c Thu Jul 27 11:37:49 1989 X*************** X*** 386,392 **** X register struct monst *shkp; X { X long robbed = ESHK(shkp)->robbed; X! long balance = ((tmp <= 0) ? tmp : check_credit(tmp, shkp)); X X u.ugold -= balance; X shkp->mgold += balance; X--- 386,392 ---- X register struct monst *shkp; X { X long robbed = ESHK(shkp)->robbed; X! long balance = ((tmp <= 0L) ? tmp : check_credit(tmp, shkp)); X X u.ugold -= balance; X shkp->mgold += balance; X*************** X*** 393,399 **** X flags.botl = 1; X if(robbed) { X robbed -= tmp; X! if(robbed < 0) robbed = 0; X ESHK(shkp)->robbed = robbed; X } X } X--- 393,399 ---- X flags.botl = 1; X if(robbed) { X robbed -= tmp; X! if(robbed < 0) robbed = 0L; X ESHK(shkp)->robbed = robbed; X } X } X*************** X*** 421,427 **** X X NOTANGRY(shkp) = 1; X ESHK(shkp)->following = 0; X! ESHK(shkp)->robbed = 0; X if (pl_character[0] != 'R') X adjalign(sgn(u.ualigntyp)); X if(!inhishop(shkp)) { X--- 421,427 ---- X X NOTANGRY(shkp) = 1; X ESHK(shkp)->following = 0; X! ESHK(shkp)->robbed = 0L; X if (pl_character[0] != 'R') X adjalign(sgn(u.ualigntyp)); X if(!inhishop(shkp)) { X*************** X*** 477,483 **** X You("give %s all your gold.", mon_nam(shkp)); X pay(u.ugold, shkp); X } X! if(ugold < ltmp/2) X pline("Unfortunately, %s doesn't look satisfied.", X ESHK(shkp)->ismale ? "he" : "she"); X else X--- 477,483 ---- X You("give %s all your gold.", mon_nam(shkp)); X pay(u.ugold, shkp); X } X! if(ugold < ltmp/2L) X pline("Unfortunately, %s doesn't look satisfied.", X ESHK(shkp)->ismale ? "he" : "she"); X else X*************** X*** 487,499 **** X } X X /* ltmp is still ESHK(shkp)->robbed here */ X! if(!ESHK(shkp)->billct) { X if(!ltmp && NOTANGRY(shkp)) { X You("do not owe %s anything.", mon_nam(shkp)); X if(!u.ugold) pline(no_money); X } else if(ltmp) { X pline("%s is after blood, not money!", mon_nam(shkp)); X! if(u.ugold < ltmp/2) { X if(!u.ugold) pline(no_money); X else pline("Besides, you don't have enough to interest %s.", X ESHK(shkp)->ismale ? "him" : "her"); X--- 487,499 ---- X } X X /* ltmp is still ESHK(shkp)->robbed here */ X! if(!ESHK(shkp)->billct && !ESHK(shkp)->debit) { X if(!ltmp && NOTANGRY(shkp)) { X You("do not owe %s anything.", mon_nam(shkp)); X if(!u.ugold) pline(no_money); X } else if(ltmp) { X pline("%s is after blood, not money!", mon_nam(shkp)); X! if(u.ugold < ltmp/2L) { X if(!u.ugold) pline(no_money); X else pline("Besides, you don't have enough to interest %s.", X ESHK(shkp)->ismale ? "him" : "her"); X*************** X*** 512,518 **** X * door broken, attacked, etc. */ X pline("%s is after your hide, not your money!", X mon_nam(shkp)); X! if(u.ugold < 1000) { X if(!u.ugold) pline(no_money); X else X pline("Besides, you don't have enough to interest %s.", X--- 512,518 ---- X * door broken, attacked, etc. */ X pline("%s is after your hide, not your money!", X mon_nam(shkp)); X! if(u.ugold < 1000L) { X if(!u.ugold) pline(no_money); X else X pline("Besides, you don't have enough to interest %s.", X*************** X*** 618,624 **** X } X obj->unpaid = 0; X ltmp = bp->price * bp->bquan; X! if(ANGRY(shopkeeper)) ltmp += ltmp/3; X if(u.ugold + ESHK(shopkeeper)->credit < ltmp){ X You("don't have gold%s enough to pay for %s.", X (ESHK(shopkeeper)->credit > 0L) ? " or credit" : "", X--- 618,624 ---- X } X obj->unpaid = 0; X ltmp = bp->price * bp->bquan; X! if(ANGRY(shopkeeper)) ltmp += ltmp/3L; X if(u.ugold + ESHK(shopkeeper)->credit < ltmp){ X You("don't have gold%s enough to pay for %s.", X (ESHK(shopkeeper)->credit > 0L) ? " or credit" : "", X*************** X*** 647,653 **** X boolean X paybill(){ X register struct monst *mtmp; X! register int loss = 0; X register struct obj *otmp; X register xchar ox, oy; X register boolean take = FALSE; X--- 647,653 ---- X boolean X paybill(){ X register struct monst *mtmp; X! register long loss = 0L; X register struct obj *otmp; X register xchar ox, oy; X register boolean take = FALSE; X*************** X*** 666,680 **** X /* shopkeeper is peaceful, nothing stolen, nothing owed. */ X if(in_shop(u.ux,u.uy) && !IS_DOOR(levl[u.ux][u.uy].typ) && X !ESHK(shopkeeper)->billct && !ESHK(shopkeeper)->robbed && X! inhishop(shopkeeper) && NOTANGRY(shopkeeper) && X! !ESHK(shopkeeper)->following) { X pline("%s gratefully inherits all your possessions.", X Monnam(shopkeeper)); X goto clear; X } X X! if(ESHK(shopkeeper)->billct || ESHK(shopkeeper)->robbed) { X addupbill(); X loss = ((total >= ESHK(shopkeeper)->robbed) ? total : X ESHK(shopkeeper)->robbed); X take = TRUE; X--- 666,682 ---- X /* shopkeeper is peaceful, nothing stolen, nothing owed. */ X if(in_shop(u.ux,u.uy) && !IS_DOOR(levl[u.ux][u.uy].typ) && X !ESHK(shopkeeper)->billct && !ESHK(shopkeeper)->robbed && X! !ESHK(shopkeeper)->debit && inhishop(shopkeeper) && X! NOTANGRY(shopkeeper) && !ESHK(shopkeeper)->following) { X pline("%s gratefully inherits all your possessions.", X Monnam(shopkeeper)); X goto clear; X } X X! if(ESHK(shopkeeper)->billct || ESHK(shopkeeper)->debit || X! ESHK(shopkeeper)->robbed) { X addupbill(); X+ total += ESHK(shopkeeper)->debit; X loss = ((total >= ESHK(shopkeeper)->robbed) ? total : X ESHK(shopkeeper)->robbed); X take = TRUE; X*************** X*** 686,692 **** X Monnam(shopkeeper)); X taken = TRUE; X shopkeeper->mgold += u.ugold; X! u.ugold = 0; X /* in case bones: make it be for real... */ X if(!in_shop(u.ux, u.uy) || IS_DOOR(levl[u.ux][u.uy].typ)) { X /* shk.x,shk.y is the position immediately in X--- 688,694 ---- X Monnam(shopkeeper)); X taken = TRUE; X shopkeeper->mgold += u.ugold; X! u.ugold = 0L; X /* in case bones: make it be for real... */ X if(!in_shop(u.ux, u.uy) || IS_DOOR(levl[u.ux][u.uy].typ)) { X /* shk.x,shk.y is the position immediately in X*************** X*** 768,775 **** X { X register long tmp; X X! tmp = getprice(obj); X! if (!tmp) tmp = 5; X if (ANGRY(shopkeeper) || X (pl_character[0] == 'T' && u.ulevel < (MAXULEV/2)) X #ifdef SHIRT X--- 770,777 ---- X { X register long tmp; X X! tmp = (long) getprice(obj); X! if (!tmp) tmp = 5L; X if (ANGRY(shopkeeper) || X (pl_character[0] == 'T' && u.ulevel < (MAXULEV/2)) X #ifdef SHIRT X*************** X*** 776,788 **** X || (uarmu && !uarm) /* wearing just a Hawaiian shirt */ X #endif X ) X! tmp += tmp/3; X! if (ACURR(A_CHA) > 18) tmp /= 2; X! else if (ACURR(A_CHA) > 17) tmp = (tmp * 2)/3; X! else if (ACURR(A_CHA) > 15) tmp = (tmp * 3)/4; X! else if (ACURR(A_CHA) < 11) tmp = (tmp * 4)/3; X! else if (ACURR(A_CHA) < 8) tmp = (tmp * 3)/2; X! else if (ACURR(A_CHA) < 6) tmp *= 2; X return(tmp); X } X X--- 778,790 ---- X || (uarmu && !uarm) /* wearing just a Hawaiian shirt */ X #endif X ) X! tmp += tmp/3L; X! if (ACURR(A_CHA) > 18) tmp /= 2L; X! else if (ACURR(A_CHA) > 17) tmp = (tmp * 2L)/3L; X! else if (ACURR(A_CHA) > 15) tmp = (tmp * 3L)/4L; X! else if (ACURR(A_CHA) < 11) tmp = (tmp * 4L)/3L; X! else if (ACURR(A_CHA) < 8) tmp = (tmp * 3L)/2L; X! else if (ACURR(A_CHA) < 6) tmp *= 2L; X return(tmp); X } X X*************** X*** 891,902 **** X register struct obj *obj; X { X long ltmp; X- /* register int tmp; /* use of tmp commented out below */ X- register struct obj *otmp; X register struct bill_x *bp; X if(!costly_spot(u.ux,u.uy)) X return; X if((bp = onbill(obj)) != 0) { X obj->unpaid = 0; X if(bp->bquan > obj->quan){ X otmp = newobj(0); X--- 893,905 ---- X register struct obj *obj; X { X long ltmp; X register struct bill_x *bp; X+ X if(!costly_spot(u.ux,u.uy)) X return; X if((bp = onbill(obj)) != 0) { X+ register struct obj *otmp; X+ X obj->unpaid = 0; X if(bp->bquan > obj->quan){ X otmp = newobj(0); X*************** X*** 923,932 **** X /* he dropped something of his own - probably wants to sell it */ X if(shopkeeper->msleep || shopkeeper->mfroz || !inhishop(shopkeeper)) X return; X! ltmp = getprice(obj) * obj->quan; X if(ESHK(shopkeeper)->billct == BILLSZ X || !saleable(rooms[ESHK(shopkeeper)->shoproom].rtype-SHOPBASE, obj) X! || otmp->olet == BALL_SYM || ltmp == 0L) { X pline("%s seems not interested.", Monnam(shopkeeper)); X obj->no_charge = 1; X return; X--- 926,935 ---- X /* he dropped something of his own - probably wants to sell it */ X if(shopkeeper->msleep || shopkeeper->mfroz || !inhishop(shopkeeper)) X return; X! ltmp = (long) getprice(obj) * (long) obj->quan; X if(ESHK(shopkeeper)->billct == BILLSZ X || !saleable(rooms[ESHK(shopkeeper)->shoproom].rtype-SHOPBASE, obj) X! || obj->olet == BALL_SYM || ltmp == 0L) { X pline("%s seems not interested.", Monnam(shopkeeper)); X obj->no_charge = 1; X return; X*************** X*** 936,947 **** X || (uarmu && !uarm) /* wearing just a Hawaiian shirt */ X #endif X ) { X! ltmp /= 3; X NOTANGRY(shopkeeper) = 1; X! } else ltmp /= 2; X if(ESHK(shopkeeper)->robbed) { X! if((ESHK(shopkeeper)->robbed -= ltmp) < 0) X! ESHK(shopkeeper)->robbed = 0; X pline("\"Thank you for your contribution to restock this recently plundered shop.\""); X return; X } X--- 939,950 ---- X || (uarmu && !uarm) /* wearing just a Hawaiian shirt */ X #endif X ) { X! ltmp /= 3L; X NOTANGRY(shopkeeper) = 1; X! } else ltmp /= 2L; X if(ESHK(shopkeeper)->robbed) { X! if((ESHK(shopkeeper)->robbed -= ltmp) < 0L) X! ESHK(shopkeeper)->robbed = 0L; X pline("\"Thank you for your contribution to restock this recently plundered shop.\""); X return; X } X*************** X*** 986,992 **** X if(page_line("Unpaid articles already used up:") || page_line("")) X goto quit; X X! totused = 0; X for(bp = bill; bp - bill < ESHK(shopkeeper)->billct; bp++) { X obj = bp_to_obj(bp); X if(!obj) { X--- 989,995 ---- X if(page_line("Unpaid articles already used up:") || page_line("")) X goto quit; X X! totused = 0L; X for(bp = bill; bp - bill < ESHK(shopkeeper)->billct; bp++) { X obj = bp_to_obj(bp); X if(!obj) { X*************** X*** 1047,1053 **** X tmp = 0; X break; X case ARMOR_SYM: X- if (u.uac > 0) tmp += u.uac * 2; X case WEAPON_SYM: X if (obj->spe > 0) tmp += 10 * obj->spe; X break; X--- 1050,1055 ---- X*************** X*** 1156,1162 **** X uondoor = (u.ux == ESHK(shkp)->shd.x && X u.uy == ESHK(shkp)->shd.y); X if(uondoor) { X! if(ESHK(shkp)->billct && inhishop(shkp)) X pline(NOTANGRY(shkp) ? X "\"Hello, %s! Will you please pay before leaving?\"" : X "\"Hey, %s! Don't leave without paying!\"", X--- 1158,1165 ---- X uondoor = (u.ux == ESHK(shkp)->shd.x && X u.uy == ESHK(shkp)->shd.y); X if(uondoor) { X! if((ESHK(shkp)->billct || ESHK(shkp)->debit) X! && inhishop(shkp)) X pline(NOTANGRY(shkp) ? X "\"Hello, %s! Will you please pay before leaving?\"" : X "\"Hey, %s! Don't leave without paying!\"", X*************** X*** 1170,1176 **** X badinv = FALSE; X } X X! if(((!ESHK(shkp)->robbed && !ESHK(shkp)->billct) || avoid) X && GDIST(omx,omy) < 3) { X if(!badinv && !online(omx,omy)) X return(0); X--- 1173,1180 ---- X badinv = FALSE; X } X X! if(((!ESHK(shkp)->robbed && !ESHK(shkp)->billct && X! !ESHK(shkp)->debit) || avoid) X && GDIST(omx,omy) < 3) { X if(!badinv && !online(omx,omy)) X return(0); X*************** X*** 1263,1281 **** X register int kcnt = (cnt / 9); /* and maybe a kaptain */ X X while(cnt--) { X! enexto(mm, mm->x, mm->y); X (void) makemon(&mons[PM_KEYSTONE_KOP], mm->x, mm->y); X } X while(scnt--) { X! enexto(mm, mm->x, mm->y); X (void) makemon(&mons[PM_KOP_SERGEANT], mm->x, mm->y); X } X while(lcnt--) { X! enexto(mm, mm->x, mm->y); X (void) makemon(&mons[PM_KOP_LIEUTENANT], mm->x, mm->y); X } X while(kcnt--) { X! enexto(mm, mm->x, mm->y); X (void) makemon(&mons[PM_KOP_KAPTAIN], mm->x, mm->y); X } X return(cnt + scnt + lcnt + kcnt); X--- 1267,1285 ---- X register int kcnt = (cnt / 9); /* and maybe a kaptain */ X X while(cnt--) { X! enexto(mm, mm->x, mm->y, &mons[PM_KEYSTONE_KOP]); X (void) makemon(&mons[PM_KEYSTONE_KOP], mm->x, mm->y); X } X while(scnt--) { X! enexto(mm, mm->x, mm->y, &mons[PM_KOP_SERGEANT]); X (void) makemon(&mons[PM_KOP_SERGEANT], mm->x, mm->y); X } X while(lcnt--) { X! enexto(mm, mm->x, mm->y, &mons[PM_KOP_LIEUTENANT]); X (void) makemon(&mons[PM_KOP_LIEUTENANT], mm->x, mm->y); X } X while(kcnt--) { X! enexto(mm, mm->x, mm->y, &mons[PM_KOP_KAPTAIN]); X (void) makemon(&mons[PM_KOP_KAPTAIN], mm->x, mm->y); X } X return(cnt + scnt + lcnt + kcnt); X*************** X*** 1353,1359 **** X X if(um_dist(x, y, 1)) goto chase; X X! if(u.ugold < damage || !rn2(50)) { X chase: X if(um_dist(x, y, 1)) X pline("%s shouts: \"Who dared %s my door?\"", X--- 1357,1363 ---- X X if(um_dist(x, y, 1)) goto chase; X X! if(u.ugold < (long) damage || !rn2(50)) { X chase: X if(um_dist(x, y, 1)) X pline("%s shouts: \"Who dared %s my door?\"", X*************** X*** 1366,1373 **** X X pline("\"Cad! You did %d zorkmids worth of damage!\" Pay? ", damage); X if(yn() != 'n') { X! u.ugold -= damage; X! shopkeeper->mgold += damage; X flags.botl = 1; X pline("Mollified, %s accepts your restitution.", X shkname(shopkeeper)); X--- 1370,1377 ---- X X pline("\"Cad! You did %d zorkmids worth of damage!\" Pay? ", damage); X if(yn() != 'n') { X! u.ugold -= (long) damage; X! shopkeeper->mgold += (long) damage; X flags.botl = 1; X pline("Mollified, %s accepts your restitution.", X shkname(shopkeeper)); X*************** X*** 1433,1439 **** X register long tmp = get_cost(otmp); X X /* The idea is to make the exhaustive use of */ X! /* an unpaid item more expansive than buying */ X /* outright. */ X if(otmp->otyp == MAGIC_LAMP) { /* 1 */ X tmp += (tmp/3L); X--- 1437,1443 ---- X register long tmp = get_cost(otmp); X X /* The idea is to make the exhaustive use of */ X! /* an unpaid item more expensive than buying */ X /* outright. */ X if(otmp->otyp == MAGIC_LAMP) { /* 1 */ X tmp += (tmp/3L); X*** src/Old/shknam.c Mon Jul 31 14:41:46 1989 X--- src/shknam.c Sun Jul 30 18:57:44 1989 X*************** X*** 268,285 **** X ESHK(shk)->shd = doors[sh]; X ESHK(shk)->shk.x = sx; X ESHK(shk)->shk.y = sy; X! /* makemon() has already zeroed out all the extra space X! ESHK(shk)->robbed = 0; X! ESHK(shk)->credit = 0; X! ESHK(shk)->debit = 0; X ESHK(shk)->visitct = 0; X ESHK(shk)->following = 0; X ESHK(shk)->billct = 0; X! */ X! shk->mgold = 1000 + 30*rnd(100); /* initial capital */ X if (shp->shknms == shktools) { X static int who; X! who = rn2(sizeof(shktools)/sizeof(char *)); X if (who==21) ESHK(shk)->ismale = FALSE; X else ESHK(shk)->ismale = TRUE; X (void) strncpy(ESHK(shk)->shknam, shp->shknms[who], PL_NSIZ); X--- 268,283 ---- X ESHK(shk)->shd = doors[sh]; X ESHK(shk)->shk.x = sx; X ESHK(shk)->shk.y = sy; X! ESHK(shk)->robbed = 0L; X! ESHK(shk)->credit = 0L; X! ESHK(shk)->debit = 0L; X ESHK(shk)->visitct = 0; X ESHK(shk)->following = 0; X ESHK(shk)->billct = 0; X! shk->mgold = 1000L + 30L*(long)rnd(100); /* initial capital */ X if (shp->shknms == shktools) { X static int who; X! who = rn2(sizeof(shktools)/sizeof(char *) - 1); X if (who==21) ESHK(shk)->ismale = FALSE; X else ESHK(shk)->ismale = TRUE; X (void) strncpy(ESHK(shk)->shknam, shp->shknms[who], PL_NSIZ); X*** src/Old/sounds.c Mon Jul 31 14:42:44 1989 X--- src/sounds.c Sat Jul 29 12:04:51 1989 X*************** X*** 585,591 **** X } X X tx = u.ux+u.dx; ty = u.uy+u.dy; X! if (!cansee(tx,ty) || !levl[tx][ty].mmask || (mtmp = m_at(tx, ty))->mimic) { X pline("I see nobody there."); X return(0); X } X--- 585,592 ---- X } X X tx = u.ux+u.dx; ty = u.uy+u.dy; X! if ((Blind && !Telepat) || !levl[tx][ty].mmask || X! (mtmp = m_at(tx, ty))->mimic || mtmp->mundetected) { X pline("I see nobody there."); X return(0); X } X*** src/Old/spell.c Mon Jul 31 14:43:48 1989 X--- src/spell.c Mon Jul 24 14:47:30 1989 X*************** X*** 297,303 **** X energy *= rnd(6); X } X if(energy > u.uen) { X! You("are too weak to cast that spell."); X return(0); X } else if ((u.uhunger <= 100 && spell != SPE_DETECT_FOOD) || X (ACURR(A_STR) < 6)) { X--- 297,303 ---- X energy *= rnd(6); X } X if(energy > u.uen) { X! You("don't have enough energy to cast that spell."); X return(0); X } else if ((u.uhunger <= 100 && spell != SPE_DETECT_FOOD) || X (ACURR(A_STR) < 6)) { X*** src/Old/termcap.c Mon Jul 31 14:44:47 1989 X--- src/termcap.c Mon Jul 31 09:13:43 1989 X*************** X*** 17,22 **** X--- 17,28 ---- X short ospeed = 0; /* gets around "not defined" error message */ X #endif X X+ #ifdef MICROPORT_286_BUG X+ #define Tgetstr(key) (tgetstr(key,tbuf)) X+ #else X+ #define Tgetstr(key) (tgetstr(key,&tbufptr)) X+ #endif /* MICROPORT_286_BUG **/ X+ X static void nocmov(); X #ifdef MSDOSCOLOR X static void init_hilite(); X*************** X*** 44,50 **** X void X startup() X { X! #ifdef TOS X HO = "\033H"; X CL = "\033E"; /* the VT52 termcap */ X CE = "\033K"; X--- 50,56 ---- X void X startup() X { X! #if defined(TOS) && !defined(TERMLIB) X HO = "\033H"; X CL = "\033E"; /* the VT52 termcap */ X CE = "\033K"; X*************** X*** 63,71 **** X char *tbufptr, *pc; X register int i; X X- tptr = (char *) alloc(1024); X- X- tbufptr = tbuf; X if(!(term = getenv("TERM"))) X # ifdef ANSI_DEFAULT X { X--- 69,74 ---- X*************** X*** 80,86 **** X BC = "\033[D"; X HI = SO = "\033[1m"; X US = "\033[4m"; X! TI = HE = SE = UE = "\033[0m"; X /* strictly, SE should be 2, and UE should be 24, X but we can't trust all ANSI emulators to be X that complete. -3. */ X--- 83,90 ---- X BC = "\033[D"; X HI = SO = "\033[1m"; X US = "\033[4m"; X! MR = "\033[7m"; X! TI = HE = SE = UE = ME = "\033[0m"; X /* strictly, SE should be 2, and UE should be 24, X but we can't trust all ANSI emulators to be X that complete. -3. */ X*************** X*** 87,106 **** X AS = "\016"; X AE = "\017"; X VS = VE = ""; X! } else { X # else X error("Can't get TERM."); X # endif X if(!strncmp(term, "5620", 4)) X flags.nonull = 1; /* this should be a termcap flag */ X if(tgetent(tptr, term) < 1) X error("Unknown terminal type: %s.", term); X! if(pc = tgetstr("pc", &tbufptr)) X PC = *pc; X #ifdef TERMINFO X! if(!(BC = tgetstr("le", &tbufptr))) { X #else X! if(!(BC = tgetstr("bc", &tbufptr))) { X #endif X #if !defined(MINIMAL_TERM) && !defined(HISX) X if(!tgetflag("bs")) X--- 91,126 ---- X AS = "\016"; X AE = "\017"; X VS = VE = ""; X! # ifdef MSDOSCOLOR X! HI_WHITE = HI; X! HI_RED = "\033[1;31m"; X! HI_YELLOW = "\033[1;33m"; X! HI_GREEN = "\033[1;32m"; X! HI_BLUE = "\033[1;34m"; X! # endif X! return; X! } X # else X+ # if defined(TOS) && defined(__GNUC__) /* library has a default */ X+ term = "st52"; X+ # else X error("Can't get TERM."); X+ # endif X # endif X+ X+ tptr = (char *) alloc(1024); X+ X+ tbufptr = tbuf; X if(!strncmp(term, "5620", 4)) X flags.nonull = 1; /* this should be a termcap flag */ X if(tgetent(tptr, term) < 1) X error("Unknown terminal type: %s.", term); X! if(pc = Tgetstr("pc")) X PC = *pc; X #ifdef TERMINFO X! if(!(BC = Tgetstr("le"))) { X #else X! if(!(BC = Tgetstr("bc"))) { X #endif X #if !defined(MINIMAL_TERM) && !defined(HISX) X if(!tgetflag("bs")) X*************** X*** 113,159 **** X #ifdef MINIMAL_TERM X HO = NULL; X #else X! HO = tgetstr("ho", &tbufptr); X #endif X CO = tgetnum("co"); X LI = tgetnum("li"); X! if(CO < COLNO || LI < ROWNO+2) X setclipped(); X! if(!(CL = tgetstr("cl", &tbufptr))) X error("Hack needs CL."); X! ND = tgetstr("nd", &tbufptr); X if(tgetflag("os")) X error("Hack can't have OS."); X! CE = tgetstr("ce", &tbufptr); X! UP = tgetstr("up", &tbufptr); X /* It seems that xd is no longer supported, and we should use X a linefeed instead; unfortunately this requires resetting X CRMOD, and many output routines will have to be modified X slightly. Let's leave that till the next release. */ X! XD = tgetstr("xd", &tbufptr); X! /* not: XD = tgetstr("do", &tbufptr); */ X! if(!(CM = tgetstr("cm", &tbufptr))) { X if(!UP && !HO) X error("Hack needs CM or UP or HO."); X Printf("Playing hack on terminals without cm is suspect...\n"); X getret(); X } X! SO = tgetstr("so", &tbufptr); X! SE = tgetstr("se", &tbufptr); X! US = tgetstr("us", &tbufptr); X! UE = tgetstr("ue", &tbufptr); X SG = tgetnum("sg"); /* -1: not fnd; else # of spaces left by so */ X if(!SO || !SE || (SG > 0)) SO = SE = US = UE = ""; X! TI = tgetstr("ti", &tbufptr); X! TE = tgetstr("te", &tbufptr); X VS = VE = ""; X #if 0 X! MB = tgetstr("mb", &tbufptr); /* blink */ X! MD = tgetstr("md", &tbufptr); /* boldface */ X! MH = tgetstr("mh", &tbufptr); /* dim */ X #endif X! MR = tgetstr("mr", &tbufptr); /* reverse */ X! ME = tgetstr("me", &tbufptr); X X /* Get rid of padding numbers for HI and HE. Hope they X * aren't really needed!!! HI and HE are ouputted to the X--- 133,179 ---- X #ifdef MINIMAL_TERM X HO = NULL; X #else X! HO = Tgetstr("ho"); X #endif X CO = tgetnum("co"); X LI = tgetnum("li"); X! if(CO < COLNO || LI < ROWNO+3) X setclipped(); X! if(!(CL = Tgetstr("cl"))) X error("Hack needs CL."); X! ND = Tgetstr("nd"); X if(tgetflag("os")) X error("Hack can't have OS."); X! CE = Tgetstr("ce"); X! UP = Tgetstr("up"); X /* It seems that xd is no longer supported, and we should use X a linefeed instead; unfortunately this requires resetting X CRMOD, and many output routines will have to be modified X slightly. Let's leave that till the next release. */ X! XD = Tgetstr("xd"); X! /* not: XD = Tgetstr("do"); */ X! if(!(CM = Tgetstr("cm"))) { X if(!UP && !HO) X error("Hack needs CM or UP or HO."); X Printf("Playing hack on terminals without cm is suspect...\n"); X getret(); X } X! SO = Tgetstr("so"); X! SE = Tgetstr("se"); X! US = Tgetstr("us"); X! UE = Tgetstr("ue"); X SG = tgetnum("sg"); /* -1: not fnd; else # of spaces left by so */ X if(!SO || !SE || (SG > 0)) SO = SE = US = UE = ""; X! TI = Tgetstr("ti"); X! TE = Tgetstr("te"); X VS = VE = ""; X #if 0 X! MB = Tgetstr("mb"); /* blink */ X! MD = Tgetstr("md"); /* boldface */ X! MH = Tgetstr("mh"); /* dim */ X #endif X! MR = Tgetstr("mr"); /* reverse */ X! ME = Tgetstr("me"); X X /* Get rid of padding numbers for HI and HE. Hope they X * aren't really needed!!! HI and HE are ouputted to the X*************** X*** 168,185 **** X i = 0; X while(isdigit(SE[i])) i++; X Strcpy(HE, &SE[i]); X! AS = tgetstr("as", &tbufptr); X! AE = tgetstr("ae", &tbufptr); X! CD = tgetstr("cd", &tbufptr); X! # ifdef ANSI_DEFAULT X! } X! # endif X set_whole_screen(); /* uses LI and CD */ X if(tbufptr-tbuf > sizeof(tbuf)) error("TERMCAP entry too big...\n"); X free((genericptr_t)tptr); X! #ifdef MSDOSCOLOR X init_hilite(); X! #endif X #endif /* TOS /* */ X } X X--- 188,202 ---- X i = 0; X while(isdigit(SE[i])) i++; X Strcpy(HE, &SE[i]); X! AS = Tgetstr("as"); X! AE = Tgetstr("ae"); X! CD = Tgetstr("cd"); X set_whole_screen(); /* uses LI and CD */ X if(tbufptr-tbuf > sizeof(tbuf)) error("TERMCAP entry too big...\n"); X free((genericptr_t)tptr); X! # ifdef MSDOSCOLOR X init_hilite(); X! # endif X #endif /* TOS /* */ X } X X*** src/Old/topten.c Mon Jul 31 14:46:14 1989 X--- src/topten.c Sat Jul 29 21:26:29 1989 X*************** X*** 6,12 **** X #define MONATTK_H X #include "hack.h" X X! #include <errno.h> /* George Barbanis */ X X static char *itoa P((int)), *ordin P((int)); X static void outheader(); X--- 6,15 ---- X #define MONATTK_H X #include "hack.h" X X! #include <errno.h> /* George Barbanis */ X! #ifdef NO_FILE_LINKS X! #include <fcntl.h> /* Ralf Brown */ X! #endif X X static char *itoa P((int)), *ordin P((int)); X static void outheader(); X*************** X*** 42,48 **** X char *recfile = RECORD; X #ifdef UNIX X char *reclock = "record_lock"; X! #endif X int sleepct = 300; X FILE *rfile; X register int flg = 0; X--- 45,54 ---- X char *recfile = RECORD; X #ifdef UNIX X char *reclock = "record_lock"; X! # ifdef NO_FILE_LINKS X! int lockfd ; X! # endif X! #endif /* UNIX */ X int sleepct = 300; X FILE *rfile; X register int flg = 0; X*************** X*** 49,58 **** X #ifdef LOGFILE X char *lgfile = LOGFILE; 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--- 55,64 ---- X #ifdef LOGFILE X char *lgfile = LOGFILE; 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*************** X*** 62,68 **** X--- 68,83 ---- X #endif X X #ifdef UNIX X+ # ifdef NO_FILE_LINKS X+ reclock = (char *)alloc(sizeof(LOCKDIR)+1+strlen(recfile)+7); X+ Strcpy(reclock,LOCKDIR) ; X+ Strcat(reclock,"/") ; X+ Strcat(reclock,recfile) ; X+ Strcat(reclock,"_lock") ; X+ while ((lockfd = open(reclock,O_RDWR|O_CREAT|O_EXCL,0666)) == -1) { X+ # else X while(link(recfile, reclock) == -1) { X+ # endif /* NO_FILE_LINKS */ X HUP perror(reclock); X if(!sleepct--) { X HUP (void) puts("I give up. Sorry."); X*************** X*** 72,87 **** 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 X if(!(rfile = fopen(recfile,"r"))){ X HUP (void) puts("Cannot open record file!"); X goto unlock; X } X HUP (void) putchar('\n'); X X /* create a new 'topten' entry */ X--- 87,105 ---- 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 } X+ #ifdef NO_FILE_LINKS X+ (void) close(lockfd) ; X+ #endif X HUP (void) putchar('\n'); X X /* create a new 'topten' entry */ X*************** X*** 103,110 **** X /* assure minimum number of points */ X if(t0->points < POINTSMIN) t0->points = 0; X #ifdef LOGFILE /* used for debugging (who dies of what, where) */ X! #ifdef UNIX X while(link(lgfile, loglock) == -1) { X extern int errno; X X if (errno == ENOENT) /* If no such file, do not keep log */ X--- 121,137 ---- X /* assure minimum number of points */ X if(t0->points < POINTSMIN) t0->points = 0; 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! Strcat(loglock,"/") ; X! Strcat(loglock,lgfile) ; X! Strcat(loglock,"_lock") ; X! while ((lockfd = open(loglock,O_RDWR|O_CREAT|O_EXCL,0666)) == -1) { X! # else X while(link(lgfile, loglock) == -1) { X+ # endif /* NO_FILE_LINKS */ X extern int errno; X X if (errno == ENOENT) /* If no such file, do not keep log */ X*************** X*** 118,129 **** 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--- 145,156 ---- 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*************** X*** 134,143 **** 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 #endif /* LOGFILE */ X X t1 = tt_head = newttentry(); X--- 161,173 ---- 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+ # endif X #endif /* LOGFILE */ X X t1 = tt_head = newttentry(); X*************** X*** 144,150 **** X tprev = 0; X /* rank0: -1 undefined, 0 not_on_list, n n_th on list */ X for(rank = 1; ; ) { X! #ifdef TOS X char k1[2],k2[2]; X if(fscanf(rfile, "%6s %d %d %d %d %d %ld %1s%1s %s %s]", X #else X--- 174,180 ---- X tprev = 0; X /* rank0: -1 undefined, 0 not_on_list, n n_th on list */ X for(rank = 1; ; ) { X! #ifdef OLD_TOS X char k1[2],k2[2]; X if(fscanf(rfile, "%6s %d %d %d %d %d %ld %1s%1s %s %s]", X #else X*************** X*** 153,159 **** X t1->date, &t1->uid, X &t1->level, &t1->maxlvl, X &t1->hp, &t1->maxhp, &t1->points, X! #ifdef TOS X k1, k2, X #else X &t1->plchar, &t1->sex, X--- 183,189 ---- X t1->date, &t1->uid, X &t1->level, &t1->maxlvl, X &t1->hp, &t1->maxhp, &t1->points, X! #ifdef OLD_TOS X k1, k2, X #else X &t1->plchar, &t1->sex, X*************** X*** 161,167 **** X t1->name, t1->death) != 11 || t1->points < POINTSMIN) X t1->points = 0; X X! #ifdef TOS X t1->plchar=k1[0]; X t1->sex=k2[0]; X #endif X--- 191,197 ---- X t1->name, t1->death) != 11 || t1->points < POINTSMIN) X t1->points = 0; X X! #ifdef OLD_TOS X t1->plchar=k1[0]; X t1->sex=k2[0]; X #endif X*************** X*** 259,265 **** X (void) fclose(rfile); X unlock: ; X #ifdef UNIX X! (void) unlink(reclock); X #endif X } X X--- 289,299 ---- X (void) fclose(rfile); X unlock: ; X #ifdef UNIX X! # ifdef NO_FILE_LINKS X! (void) close(lockfd) ; X! # endif X! if (unlink(reclock) < 0) X! Printf("Can't unlink %s\n",reclock) ; X #endif X } X X*************** X*** 330,335 **** X--- 364,370 ---- X if(iskilled) Sprintf(eos(linebuf), " by %s%s", X (!strncmp(t1->death, "trick", 5) || !strncmp(t1->death, "the ", 4) X || !strncmp(t1->death, "Mr. ", 4) || !strncmp(t1->death, "Ms. ", 4) X+ || !strncmp(eos(t1->death)-4, "tion", 4) X ) ? "" : X index(vowels,*t1->death) ? "an " : "a ", X t1->death); X*************** X*** 463,469 **** X X t1 = tt_head = newttentry(); X for(rank = 1; ; rank++) { X! #ifdef TOS X char k1[2], k2[2]; X if(fscanf(rfile, "%6s %d %d %d %d %d %ld %1s%1s %s %s]", X #else X--- 498,504 ---- X X t1 = tt_head = newttentry(); X for(rank = 1; ; rank++) { X! #ifdef OLD_TOS X char k1[2], k2[2]; X if(fscanf(rfile, "%6s %d %d %d %d %d %ld %1s%1s %s %s]", X #else X*************** X*** 472,478 **** X t1->date, &t1->uid, X &t1->level, &t1->maxlvl, X &t1->hp, &t1->maxhp, &t1->points, X! #ifdef TOS X k1, k2, X #else X &t1->plchar, &t1->sex, X--- 507,513 ---- X t1->date, &t1->uid, X &t1->level, &t1->maxlvl, X &t1->hp, &t1->maxhp, &t1->points, X! #ifdef OLD_TOS X k1, k2, X #else X &t1->plchar, &t1->sex, X*************** X*** 480,486 **** X t1->name, t1->death) != 11) X t1->points = 0; X if(t1->points == 0) break; X! #ifdef TOS X t1->plchar=k1[0]; X t1->sex=k2[0]; X #endif X--- 515,521 ---- X t1->name, t1->death) != 11) X t1->points = 0; X if(t1->points == 0) break; X! #ifdef OLD_TOS X t1->plchar=k1[0]; X t1->sex=k2[0]; X #endif X*************** X*** 609,615 **** X rank = rnd(10); X pickentry: X for(i = rank; i; i--) { X! #ifdef TOS X char k1[2], k2[2]; X if(fscanf(rfile, "%6s %d %d %d %d %d %ld %1s%1s %s %s]", X #else X--- 644,650 ---- X rank = rnd(10); X pickentry: X for(i = rank; i; i--) { X! #ifdef OLD_TOS X char k1[2], k2[2]; X if(fscanf(rfile, "%6s %d %d %d %d %d %ld %1s%1s %s %s]", X #else X*************** X*** 618,624 **** X tt->date, &tt->uid, X &tt->level, &tt->maxlvl, X &tt->hp, &tt->maxhp, &tt->points, X! #ifdef TOS X k1, k2, X #else X &tt->plchar, &tt->sex, X--- 653,659 ---- X tt->date, &tt->uid, X &tt->level, &tt->maxlvl, X &tt->hp, &tt->maxhp, &tt->points, X! #ifdef OLD_TOS X k1, k2, X #else X &tt->plchar, &tt->sex, X*************** X*** 626,632 **** X tt->name, tt->death) != 11) X tt->points = 0; X if(tt->points == 0) break; X! #ifdef TOS X tt->plchar=k1[0]; X tt->sex=k2[0]; X #endif X--- 661,667 ---- X tt->name, tt->death) != 11) X tt->points = 0; X if(tt->points == 0) break; X! #ifdef OLD_TOS X tt->plchar=k1[0]; X tt->sex=k2[0]; X #endif X*** src/Old/trap.c Wed Jul 19 04:10:30 1989 X--- src/trap.c Mon Jul 31 21:56:52 1989 X*************** X*** 295,301 X } else { X (void) mksobj_at(DART, u.ux, u.uy); X fobj->quan = 1; X! fobj->opoisoned = 1; X fobj->owt = weight(fobj); X } X break; X X--- 295,301 ----- X } else { X (void) mksobj_at(DART, u.ux, u.uy); X fobj->quan = 1; X! if(!rn2(6)) fobj->opoisoned = 1; X fobj->owt = weight(fobj); X } X break; X*************** X*** 689,694 X case DART_TRAP: X otmp = mksobj(DART, FALSE); X otmp->quan = 1; X otmp->owt = weight(otmp); X if(thitm(7, mtmp, otmp, 0)) trapkilled = TRUE; X break; X X--- 689,695 ----- X case DART_TRAP: X otmp = mksobj(DART, FALSE); X otmp->quan = 1; X+ if (!rn2(6)) otmp->opoisoned = 1; X otmp->owt = weight(otmp); X if(thitm(7, mtmp, otmp, 0)) trapkilled = TRUE; X break; X*************** X*** 943,949 X u.uundetected = 0; X if (u.usym == S_MIMIC_DEF) u.usym = S_MIMIC; X #endif X- setsee(); X if(Punished) placebc(1); X if(u.uswallow){ X u.uswldtim = u.uswallow = 0; X X--- 944,949 ----- X u.uundetected = 0; X if (u.usym == S_MIMIC_DEF) u.usym = S_MIMIC; X #endif X if(Punished) placebc(1); X if(u.uswallow){ X u.uswldtim = u.uswallow = 0; X*************** X*** 949,954 X u.uswldtim = u.uswallow = 0; X docrt(); X } X nomul(0); X spoteffects(); X } X X--- 949,955 ----- X u.uswldtim = u.uswallow = 0; X docrt(); X } X+ setsee(); X nomul(0); X spoteffects(); X } X*************** X*** 1621,1626 X if (dam < 1) dam = 1; X } X if ((mon->mhp -= dam) <= 0) { X if (cansee(mon->mx, mon->my)) X pline("%s is killed!", Monnam(mon)); X else if (mon->mtame) X X--- 1622,1630 ----- X if (dam < 1) dam = 1; X } X if ((mon->mhp -= dam) <= 0) { X+ int xx = mon->mx; X+ int yy = mon->my; X+ X if (cansee(mon->mx, mon->my)) X pline("%s is killed!", Monnam(mon)); X else if (mon->mtame) X*************** X*** 1626,1631 X else if (mon->mtame) X You("have a sad feeling for a moment, then it passes."); X mondied(mon); X trapkilled = TRUE; X } X } X X--- 1630,1636 ----- X else if (mon->mtame) X You("have a sad feeling for a moment, then it passes."); X mondied(mon); X+ newsym(xx, yy); X trapkilled = TRUE; X } X } X*** src/Old/uhitm.c Mon Jul 31 14:50:00 1989 X--- src/uhitm.c Mon Jul 31 09:20:24 1989 X*************** X*** 11,17 **** X #ifdef POLYSELF X static boolean hmonas(); X #endif X- static int passive(); X X #ifdef WORM X extern boolean notonhead; X--- 11,16 ---- X*************** X*** 26,32 **** X X mm.x = mon->mx; X mm.y = mon->my; X! enexto(&mm, mm.x, mm.y); 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--- 25,31 ---- X 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*************** X*** 301,309 **** X register int thrown; X { X register int tmp; X! boolean hittxt = FALSE; X boolean get_dmg_bonus = TRUE; X! boolean ispoisoned = FALSE; X X wakeup(mon); X if(!obj) { X--- 300,308 ---- X register int thrown; X { X register int tmp; X! boolean hittxt = FALSE, destroyed = FALSE; X boolean get_dmg_bonus = TRUE; X! boolean ispoisoned = FALSE, needpoismsg = FALSE; X X wakeup(mon); X if(!obj) { X*************** X*** 318,343 **** X mon_nam(mon), makeplural(body_part(HAND))); X You("turn to stone..."); X done_in_by(mon); X } X } else { X if(obj->olet == WEAPON_SYM || obj->otyp == PICK_AXE || X obj->olet == ROCK_SYM) { X X- if(mon->data == &mons[PM_RUST_MONSTER] && obj == uwep && X- objects[obj->otyp].oc_material == METAL && X- obj->spe > -2) { X- if(obj->rustfree) { X- pline("The rust on your %s vanishes instantly!", X- is_sword(obj) ? "sword" : "weapon"); X- } else if(obj->blessed && rnl(4)) X- pline("Somehow your %s is not affected!", X- is_sword(obj) ? "sword" : "weapon"); X- else { X- Your("%s!", aobjnam(uwep, "corrode")); X- uwep->spe--; X- } X- } X- X if(obj == uwep && (obj->otyp > VOULGE || obj->otyp < BOOMERANG) X && obj->otyp != PICK_AXE) X tmp = rnd(2); X--- 317,328 ---- X mon_nam(mon), makeplural(body_part(HAND))); X You("turn to stone..."); X done_in_by(mon); X+ hittxt = TRUE; /* maybe lifesaved */ X } X } else { X if(obj->olet == WEAPON_SYM || obj->otyp == PICK_AXE || X obj->olet == ROCK_SYM) { X X if(obj == uwep && (obj->otyp > VOULGE || obj->otyp < BOOMERANG) X && obj->otyp != PICK_AXE) X tmp = rnd(2); X*************** X*** 513,524 **** X } X */ X if (ispoisoned) { X- /* OK to reference obj because ispoisoned can only be set X- * when obj is a throwing weapon */ X- hit(xname(obj), mon, exclam(tmp)); X- hittxt = TRUE; X if(resists_poison(mon->data)) X! kludge("The poison doesn't seem to affect %s.", mon_nam(mon)); X else if (rn2(10)) X tmp += rnd(6); X else { X--- 498,505 ---- X } X */ X if (ispoisoned) { X if(resists_poison(mon->data)) X! needpoismsg = TRUE; X else if (rn2(10)) X tmp += rnd(6); X else { X*************** X*** 530,539 **** X if(tmp < 1) tmp = 1; X X mon->mhp -= tmp; X! if(mon->mhp < 1) { X! killed(mon); X! return(FALSE); X! } X if(mon->mtame && (!mon->mflee || mon->mfleetim)) { X #ifdef SOUNDS X if (rn2(8)) yelp(mon); X--- 511,518 ---- X if(tmp < 1) tmp = 1; X X mon->mhp -= tmp; X! if(mon->mhp < 1) X! destroyed = TRUE; X if(mon->mtame && (!mon->mflee || mon->mfleetim)) { X #ifdef SOUNDS X if (rn2(8)) yelp(mon); X*************** X*** 544,552 **** X mon->mfleetim += 10*rnd(tmp); X } X if((mon->data == &mons[PM_BLACK_PUDDING] || X! mon->data == &mons[PM_BROWN_PUDDING]) && uwep && X! uwep == obj && objects[obj->otyp].oc_material == METAL X! && mon->mhp > 1 && !thrown && !mon->mcan) { X X if (clone_mon(mon)) { X pline("%s divides as you hit it!", Monnam(mon)); X--- 523,532 ---- X mon->mfleetim += 10*rnd(tmp); X } X if((mon->data == &mons[PM_BLACK_PUDDING] || X! mon->data == &mons[PM_BROWN_PUDDING]) && obj && X! obj == uwep && objects[obj->otyp].oc_material == METAL X! && mon->mhp > 1 && !thrown && !mon->mcan X! /* && !destroyed -- guaranteed by mhp > 1 */ ) { X X if (clone_mon(mon)) { X pline("%s divides as you hit it!", Monnam(mon)); X*************** X*** 554,560 **** X } X } X X! if(!hittxt) { X if(thrown) X /* thrown => obj exists */ X hit(xname(obj), mon, exclam(tmp) ); X--- 534,540 ---- X } X } X X! if(!hittxt && !destroyed) { X if(thrown) X /* thrown => obj exists */ X hit(xname(obj), mon, exclam(tmp) ); X*************** X*** 562,568 **** X else You("hit %s%s", mon_nam(mon), exclam(tmp)); X } X X! if(u.umconf && !thrown) { X if(!Blind) { X Your("%s stop glowing %s.", X makeplural(body_part(HAND)), X--- 542,553 ---- 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 (destroyed) X! killed(mon); /* takes care of messages */ X! else if(u.umconf && !thrown) { X if(!Blind) { X Your("%s stop glowing %s.", X makeplural(body_part(HAND)), X*************** X*** 574,580 **** X pline("%s appears confused.", Monnam(mon)); X u.umconf = 0; X } X! return(TRUE); /* mon still alive */ X } X X #ifdef POLYSELF X--- 559,581 ---- X pline("%s appears confused.", Monnam(mon)); X u.umconf = 0; X } X! X! if(mon->data == &mons[PM_RUST_MONSTER] && obj && obj == uwep && X! objects[obj->otyp].oc_material == METAL && X! obj->olet == WEAPON_SYM && obj->spe > -2) { X! if(obj->rustfree) { X! pline("The rust on your %s vanishes instantly!", X! is_sword(obj) ? "sword" : "weapon"); X! } else if(obj->blessed && rnl(4)) X! pline("Somehow your %s is not affected!", X! is_sword(obj) ? "sword" : "weapon"); X! else { X! Your("%s!", aobjnam(obj, "corrode")); X! obj->spe--; X! } X! } X! X! return(destroyed ? FALSE : TRUE); X } X X #ifdef POLYSELF X*************** X*** 911,922 **** X kludge("You engulf %s!", mon_nam(mdef)); X switch(mattk->adtyp) { X case AD_DGST: X! u.uhunger += 20*mdef->mhpmax; X newuhs(FALSE); X xkilled(mdef,2); X Sprintf(msgbuf, "You totally digest %s.", X Blind ? "it" : mon_nam(mdef)); X! if ((tmp = mdef->mhpmax/5)) { X kludge("You digest %s.", mon_nam(mdef)); X nomul(-tmp); X nomovemsg = msgbuf; X--- 912,923 ---- X kludge("You engulf %s!", mon_nam(mdef)); X switch(mattk->adtyp) { X case AD_DGST: X! u.uhunger += mdef->data->cnutrit; X newuhs(FALSE); X xkilled(mdef,2); X Sprintf(msgbuf, "You totally digest %s.", X Blind ? "it" : mon_nam(mdef)); X! if (tmp = 3 + (mdef->data->cwt >> 2)) { X kludge("You digest %s.", mon_nam(mdef)); X nomul(-tmp); X nomovemsg = msgbuf; X*************** X*** 1170,1176 **** X X /* Special (passive) attacks on you by monsters done here. */ X X! static int X passive(mon, mhit, malive) X register struct monst *mon; X register boolean mhit; X--- 1171,1177 ---- X X /* Special (passive) attacks on you by monsters done here. */ X X! int X passive(mon, mhit, malive) X register struct monst *mon; X register boolean mhit; X*** src/Old/unixmain.c Mon Jul 31 14:51:12 1989 X--- src/unixmain.c Sun Jul 30 18:19:38 1989 X*************** X*** 188,198 **** X (void) signal(SIGQUIT,SIG_IGN); X (void) signal(SIGINT,SIG_IGN); X if(!locknum) X! Strcpy(lock,plname); X getlock(); /* sets lock if locknum != 0 */ X #ifdef WIZARD X } else X! Strcpy(lock,plname); X #endif /* WIZARD /**/ X setftty(); X X--- 188,198 ---- X (void) signal(SIGQUIT,SIG_IGN); X (void) signal(SIGINT,SIG_IGN); X if(!locknum) X! Sprintf(lock, "%d%s", getuid(), plname); X getlock(); /* sets lock if locknum != 0 */ X #ifdef WIZARD X } else X! Sprintf(lock, "%d%s", getuid(), plname); X #endif /* WIZARD /**/ X setftty(); X X*** src/Old/unixunix.c Mon Jul 31 14:52:10 1989 X--- src/unixunix.c Sat Jul 29 21:26:29 1989 X*************** X*** 15,24 **** X--- 15,28 ---- X X /* block some unused #defines to avoid overloading some cpp's */ X #define MONATTK_H X+ #define MONFLAG_H X #include "hack.h" /* mainly for index() which depends on BSD */ X X #include <errno.h> X #include <sys/stat.h> X+ #ifdef NO_FILE_LINKS X+ #include <fcntl.h> X+ #endif X X void X setrandom() X*************** X*** 215,220 **** X--- 219,228 ---- X { X extern int errno; X register int i = 0, fd; X+ #ifdef NO_FILE_LINKS X+ int hlockfd ; X+ int sleepct = 20 ; X+ #endif X X #ifdef HARD X /* idea from rpick%ucqais@uccba.uc.edu X*************** X*** 230,235 **** X--- 238,261 ---- X (void) fflush(stdout); X X /* we ignore QUIT and INT at this point */ X+ #ifdef NO_FILE_LINKS X+ while ((hlockfd = open(LLOCK,O_RDONLY|O_CREAT|O_EXCL,0644)) == -1) { X+ if (--sleepct) { X+ Printf( "Lock file in use. %d retries left.\n",sleepct); X+ (void) fflush(stdout); X+ # if defined(SYSV) || defined(ULTRIX) X+ (void) X+ # endif X+ sleep(1); X+ } else { X+ Printf("I give up! Try again later.\n"); X+ getret(); X+ error(""); X+ } X+ } X+ (void) close(hlockfd); X+ X+ #else /* NO_FILE_LINKS */ X if (link(HLOCK, LLOCK) == -1) { X register int errnosv = errno; X X*************** X*** 252,257 **** X--- 278,284 ---- X error(""); X /*NOTREACHED*/ X } X+ #endif /* NO_FILE_LINKS */ X X regularize(lock); X glo(0); X*** src/Old/vault.c Mon Jul 31 14:52:40 1989 X--- src/vault.c Wed Jul 26 12:01:14 1989 X*************** X*** 101,107 **** X X /* make something interesting happen */ X if(!(guard = makemon(&mons[PM_GUARD], x, y))) return; X! guard->isgd = guard->mpeaceful = 1; X EGD->gddone = 0; X gdlevel = dlevel; X if(!cansee(guard->mx, guard->my)) { X--- 101,108 ---- X X /* make something interesting happen */ X if(!(guard = makemon(&mons[PM_GUARD], x, y))) return; X! guard->isgd = 1; X! guard->mpeaceful = 1; X EGD->gddone = 0; X gdlevel = dlevel; X if(!cansee(guard->mx, guard->my)) { X*************** X*** 177,184 **** X /* seems we found a good place to leave him alone */ X EGD->gddone = 1; X if(ACCESSIBLE(typ)) goto newpos; X! X crm->typ = (typ == SCORR) ? CORR : DOOR; X if(crm->typ == DOOR) crm->doormask = D_NODOOR; X goto proceed; X } X--- 178,191 ---- X /* seems we found a good place to leave him alone */ X EGD->gddone = 1; X if(ACCESSIBLE(typ)) goto newpos; X! #ifdef STUPID X! if (typ == SCORR) X! crm->typ = CORR; X! else X! crm->typ = DOOR; X! #else X crm->typ = (typ == SCORR) ? CORR : DOOR; X+ #endif X if(crm->typ == DOOR) crm->doormask = D_NODOOR; X goto proceed; X } X*** src/Old/zap.c Sat Jul 22 08:19:59 1989 X--- src/zap.c Mon Jul 31 21:56:58 1989 X*************** X*** 245,250 X #ifdef SPELLS X case SPE_POLYMORPH: X #endif X #ifdef MAIL X /* You can't send yourself 100 mail messages and then X * polymorph them into useful scrolls X X--- 245,253 ----- X #ifdef SPELLS X case SPE_POLYMORPH: X #endif X+ /* preserve symbol and quantity */ X+ otmp2 = mkobj_at(obj->olet, obj->ox, obj->oy); X+ otmp2->quan = obj->quan; X #ifdef MAIL X /* You can't send yourself 100 mail messages and then X * polymorph them into useful scrolls X*************** X*** 249,255 X /* You can't send yourself 100 mail messages and then X * polymorph them into useful scrolls X */ X! if (obj->otyp == SCR_MAIL) obj->spe = 1; X #endif X /* preserve symbol and quantity */ X otmp2 = mkobj_at(obj->olet, obj->ox, obj->oy); X X--- 252,261 ----- X /* You can't send yourself 100 mail messages and then X * polymorph them into useful scrolls X */ X! if (obj->otyp == SCR_MAIL) { X! otmp2->otyp = SCR_MAIL; X! obj->spe = 1; X! } X #endif X /* keep special fields (including charges on wands) */ X if (index(charged_objs, otmp2->olet)) otmp2->spe = obj->spe; X*************** X*** 251,260 X */ X if (obj->otyp == SCR_MAIL) obj->spe = 1; X #endif X- /* preserve symbol and quantity */ X- otmp2 = mkobj_at(obj->olet, obj->ox, obj->oy); X- otmp2->quan = obj->quan; X- X /* keep special fields (including charges on wands) */ X if (index(charged_objs, otmp2->olet)) otmp2->spe = obj->spe; X X X--- 257,262 ----- X obj->spe = 1; X } X #endif X /* keep special fields (including charges on wands) */ X if (index(charged_objs, otmp2->olet)) otmp2->spe = obj->spe; X X*************** X*** 1226,1232 X #ifdef MSDOSCOLOR X Tmp_at2(-3, (int)(abstype == 1 ? AT_RED : /* fire */ X abstype == 3 || abstype == 5 ? AT_WHITE : /* cold/elec */ X! AT_ZAP); X #endif X while(range-- > 0) { X sx += dx; X X--- 1228,1234 ----- X #ifdef MSDOSCOLOR X Tmp_at2(-3, (int)(abstype == 1 ? AT_RED : /* fire */ X abstype == 3 || abstype == 5 ? AT_WHITE : /* cold/elec */ X! AT_ZAP)); X #endif X while(range-- > 0) { X sx += dx; X*************** X*** 1589,1595 X do { X tx = rn1(COLNO-3,2); X ty = rn2(ROWNO); X! } while(!goodpos(tx,ty)); X obj->ox = tx; X obj->oy = ty; X set_omask(otx,oty); X X--- 1591,1597 ----- X do { X tx = rn1(COLNO-3,2); X ty = rn2(ROWNO); X! } while(!goodpos(tx,ty,(struct permonst *)0)); X obj->ox = tx; X obj->oy = ty; X set_omask(otx,oty); X*************** X*** 1606,1612 X { X /* unpobj(obj); */ X obj->otyp = ROCK; X- obj->blessed = FALSE; X obj->quan = 7 + rn2(60); X obj->owt = weight(obj); X obj->olet = GEM_SYM; X X--- 1608,1613 ----- X { X /* unpobj(obj); */ X obj->otyp = ROCK; X obj->quan = 7 + rn2(60); X obj->owt = weight(obj); X obj->olet = GEM_SYM; END_OF_FILE if test 48599 -ne `wc -c <'src4.diff'`; then echo shar: \"'src4.diff'\" unpacked with wrong size! fi # end of 'src4.diff' fi echo shar: End of archive 6 \(of 6\). cp /dev/null ark6isdone MISSING="" for I in 1 2 3 4 5 6 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 6 archives. echo "now type ./do_patch.sh" rm -f ark[1-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0