billr@saab.CNA.TEK.COM (Bill Randle) (02/24/90)
Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu> Posting-number: Volume 9, Issue 16 Archive-name: NetHack3/Patch7p 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 16 (of 30)." # Contents: patch7.21 # Wrapped by billr@saab on Wed Feb 21 10:04:37 1990 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'patch7.21' -a "${1}" != "-c" ; then echo shar: Renaming existing file \"'patch7.21'\" to \"'patch7.21.orig'\" mv -f 'patch7.21' 'patch7.21.orig' fi echo shar: Extracting \"'patch7.21'\" \(53640 characters\) sed "s/^X//" >'patch7.21' <<'END_OF_FILE' X*** src/Old/timeout.c Mon Feb 19 19:02:27 1990 X--- src/timeout.c Thu Jan 25 22:14:40 1990 X*************** X*** 1,9 **** X! /* SCCS Id: @(#)timeout.c 3.0 87/07/06 X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X /* NetHack may be freely redistributed. See license for details. */ X X #include "hack.h" X X /* He is being petrified - dialogue by inmet!tower */ X static const char *stoned_texts[] = { X "You are slowing down.", /* 5 */ X--- 1,16 ---- X! /* SCCS Id: @(#)timeout.c 3.0 89/11/20 X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X /* NetHack may be freely redistributed. See license for details. */ X X #include "hack.h" X X+ #ifdef OVERLAY X+ extern void NDECL(stoned_dialog), NDECL(vomiting_dialog), NDECL(choke_dialog); X+ extern void FDECL(hatch_it, (struct obj*)); X+ #endif X+ X+ #ifdef OVLB X+ X /* He is being petrified - dialogue by inmet!tower */ X static const char *stoned_texts[] = { X "You are slowing down.", /* 5 */ X*************** X*** 13,19 **** X "You are a statue." /* 1 */ X }; X X! static void X stoned_dialogue() { X register long i = (Stoned & TIMEOUT); X X--- 20,26 ---- X "You are a statue." /* 1 */ X }; X X! XSTATIC void X stoned_dialogue() { X register long i = (Stoned & TIMEOUT); X X*************** X*** 34,40 **** X "You suddenly vomit!" /* 0 */ X }; X X! static void X vomiting_dialogue() { X register long i = (Vomiting & TIMEOUT) / 3L; X X--- 41,47 ---- X "You suddenly vomit!" /* 0 */ X }; X X! XSTATIC void X vomiting_dialogue() { X register long i = (Vomiting & TIMEOUT) / 3L; X X*************** X*** 42,48 **** X i >= 0 && i < SIZE(vomiting_texts)) X pline(vomiting_texts[SIZE(vomiting_texts) - i]); X X! switch(i) { X X case 0: vomit(); morehungry(20); break; X case 2: make_confused(HConfusion + d(2,4), FALSE); X--- 49,55 ---- X i >= 0 && i < SIZE(vomiting_texts)) X pline(vomiting_texts[SIZE(vomiting_texts) - i]); X X! switch((int)i) { X X case 0: vomit(); morehungry(20); break; X case 2: make_confused(HConfusion + d(2,4), FALSE); X*************** X*** 59,65 **** X "You suffocate." X }; X X! static void X choke_dialogue() X { X register long i = (Strangled & TIMEOUT); X--- 66,72 ---- X "You suffocate." X }; X X! XSTATIC void X choke_dialogue() X { X register long i = (Strangled & TIMEOUT); X*************** X*** 69,74 **** X--- 76,84 ---- X hcolor() : blue); X } X X+ #endif /* OVLB */ X+ #ifdef OVL0 X+ X void X timeout() X { X*************** X*** 105,112 **** X if(upp->p_tofn) (*upp->p_tofn)(); X else switch(upp - u.uprops){ X case STONED: X! if (!killer) killer = "cockatrice"; X! done(STONING); X break; X case VOMITING: X make_vomiting(0L, TRUE); X--- 115,124 ---- X if(upp->p_tofn) (*upp->p_tofn)(); X else switch(upp - u.uprops){ X case STONED: X! if (!killer) { X! killer_format = KILLED_BY_AN; X! killer = "cockatrice"; X! } done(STONING); X break; X case VOMITING: X make_vomiting(0L, TRUE); X*************** X*** 113,118 **** X--- 125,131 ---- X break; X case SICK: X You("die from your illness."); X+ killer_format = KILLED_BY_AN; X killer = u.usick_cause; X done(POISONING); X break; X*************** X*** 155,160 **** X--- 168,174 ---- X } X break; X case STRANGLED: X+ killer_format = KILLED_BY; X killer = "strangulation"; X done(DIED); X break; X*************** X*** 191,199 **** X } X } X X! static const char slithy[] = { S_SNAKE, S_NAGA, S_WORM, 0 }; X X! static void X hatch_it(otmp) /* hatch the egg "otmp" if possible */ X register struct obj *otmp; X { X--- 205,214 ---- X } X } X X! #endif /* OVL0 */ X! #ifdef OVLB X X! XSTATIC void X hatch_it(otmp) /* hatch the egg "otmp" if possible */ X register struct obj *otmp; X { X*************** X*** 215,227 **** X X if(Blind) X You("feel something %s from your pack!", X! (index(slithy, mtmp->data->mlet)) ? X! "slither" : "drop"); X else X! pline("%s just %s out of your pack!", X! An(mtmp->data->mname), X! (index(slithy, mtmp->data->mlet)) ? X! "slithered" : "dropped"); X X #ifdef POLYSELF X if (yours) { X--- 230,240 ---- X X if(Blind) X You("feel something %s from your pack!", X! locomotion(mtmp->data, "drop")); X else X! You("see %s %s out of your pack!", X! an(mtmp->data->mname), X! locomotion(mtmp->data, "drop")); X X #ifdef POLYSELF X if (yours) { X*************** X*** 240,245 **** X--- 253,261 ---- X } X } X X+ #endif /* OVLB */ X+ #ifdef OVL1 X+ X void X hatch_eggs() /* hatch any eggs that have been too long in pack */ X { X*************** X*** 264,266 **** X--- 280,284 ---- X } X */ X } X+ X+ #endif /* OVL1 */ X*** src/Old/topl.c Mon Feb 19 19:02:45 1990 X--- src/topl.c Mon Feb 19 10:18:54 1990 X*************** X*** 2,21 **** 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 xchar tlx, tly; /* set by pline; used by addtopl */ X! static boolean no_repeat = FALSE; X X! struct topl { X struct topl *next_topl; X char *topl_text; X } *old_toplines, *last_redone_topl; X #define OTLMAX 20 /* max nr of old toplines remembered */ X X! static void X redotoplin() { X home(); X if(index(toplines, '\n')) cl_end(); X--- 2,35 ---- X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X /* NetHack may be freely redistributed. See license for details. */ X X! #define NEED_VARARGS /* Uses ... */ /* comment line for pre-compiled headers */ X #include "hack.h" X X! VSTATIC char toplines[BUFSIZ]; X! X! #ifndef OVLB X! OSTATIC boolean no_repeat; X! #else /* OVLB */ X! XSTATIC boolean no_repeat = FALSE; X! #endif /* OVLB */ X! X! extern xchar tlx, tly; X! #ifdef OVLB X xchar tlx, tly; /* set by pline; used by addtopl */ X! #endif /* OVLB */ X X! OSTATIC void NDECL(redotoplin); X! OSTATIC void FDECL(xmore,(const char *)); X! VSTATIC struct topl { X struct topl *next_topl; X char *topl_text; X } *old_toplines, *last_redone_topl; X+ X #define OTLMAX 20 /* max nr of old toplines remembered */ X X! #ifdef OVL1 X! X! XSTATIC void X redotoplin() { X home(); X if(index(toplines, '\n')) cl_end(); X*************** X*** 35,40 **** X--- 49,57 ---- X more(); X } X X+ #endif /* OVL1 */ X+ #ifdef OVLB X+ X int X doredotopl(){ X if(last_redone_topl) X*************** X*** 48,53 **** X--- 65,73 ---- X return 0; X } X X+ #endif /* OVLB */ X+ #ifdef OVL1 X+ X void X remember_topl() { X register struct topl *tl; X*************** X*** 74,80 **** X } X X void X! addtopl(s) char *s; { X curs(tlx,tly); X if(tlx + strlen(s) > CO) putsym('\n'); X putstr(s); X--- 94,102 ---- X } X X void X! addtopl(s) X! const char *s; X! { X curs(tlx,tly); X if(tlx + strlen(s) > CO) putsym('\n'); X putstr(s); X*************** X*** 83,91 **** X flags.toplin = 1; X } X X! static void X xmore(s) X! char *s; /* allowed chars besides space/return */ X { X if(flags.toplin) { X curs(tlx, tly); X--- 105,116 ---- X flags.toplin = 1; X } X X! #endif /* OVL1 */ X! #ifdef OVL2 X! X! XSTATIC void X xmore(s) X! const char *s; /* allowed chars besides space/return */ X { X if(flags.toplin) { X curs(tlx, tly); X*************** X*** 104,109 **** X--- 129,135 ---- X cl_end(); X docorner(1, tly-1); X tlx = tly = 1; X+ curs(tlx, tly); X } X flags.toplin = 0; X } X*************** X*** 113,125 **** X xmore(""); X } X X void X cmore(s) X! register char *s; X { X xmore(s); X } X X void X clrlin(){ X if(flags.toplin) { X--- 139,157 ---- X xmore(""); X } X X+ #endif /* OVL2 */ X+ #ifdef OVLB X+ X void X cmore(s) X! register const char *s; X { X xmore(s); X } X X+ #endif /* OVLB */ X+ #ifdef OVL1 X+ X void X clrlin(){ X if(flags.toplin) { X*************** X*** 134,143 **** X flags.toplin = 0; 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--- 166,176 ---- X flags.toplin = 0; X } X X! #endif /* OVL1 */ X! #ifdef OVLB X X! /*VARARGS1*/ X! /* Note that these declarations rely on knowledge of the internals X * of the variable argument handling stuff in "tradstdc.h" X */ X X*************** X*** 272,284 **** 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--- 305,317 ---- X /*ARGSUSED*/ X /*VARARGS2*/ X void X! kludge VA_DECL2(const char *, str, const char *, arg) X #ifdef VA_NEXT X char *other1, *other2, *other3; X #endif X VA_START(arg); X! VA_INIT(str, const char *); X! VA_INIT(arg, const char *); X #ifdef VA_NEXT X VA_NEXT(other1, char *); X VA_NEXT(other2, char *); X*************** X*** 294,299 **** X--- 327,335 ---- X VA_END(); X } X X+ #endif /* OVLB */ X+ #ifdef OVL0 X+ X void X putsym(c) X char c; X*************** X*** 325,330 **** X--- 361,369 ---- X while(*s) putsym(*s++); X } X X+ #endif /* OVL0 */ X+ #ifdef OVL2 X+ X char X yn_function(resp, def) X const char *resp; X*************** X*** 356,367 **** 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--- 395,411 ---- X return q; X } X X+ #endif /* OVL2 */ X+ #ifdef OVLB X+ X /*VARARGS1*/ X void X! impossible VA_DECL(const char *, s) X VA_START(s); X! VA_INIT(s, const char *); X vpline(s,VA_ARGS); X pline("Program in disorder - perhaps you'd better Quit."); X VA_END(); X } X+ X+ #endif /* OVLB */ X*** src/Old/trap.c Mon Feb 19 19:03:58 1990 X--- src/trap.c Mon Feb 19 10:17:41 1990 X*************** X*** 1,14 **** X! /* SCCS Id: @(#)trap.c 3.0 89/11/10 X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X /* NetHack may be freely redistributed. See license for details. */ X X #include "hack.h" X #include "edog.h" X- #include "trapname.h" X X! void domagictrap(); X! static boolean thitm(); X X /* Generic rust-armor function. Returns TRUE if a message was printed; X * "print", if set, means to print a message (and thus to return TRUE) even X * if the item could not be rusted; otherwise a message is printed and TRUE is X--- 1,45 ---- X! /* SCCS Id: @(#)trap.c 3.0 89/11/20 X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X /* NetHack may be freely redistributed. See license for details. */ X X #include "hack.h" X #include "edog.h" X X! #ifdef OVLB X X+ const char *traps[] = { X+ "", X+ " monster trap", X+ " statue trap", X+ " bear trap", X+ "n arrow trap", X+ " dart trap", X+ " trapdoor", X+ " teleportation trap", X+ " pit", X+ " sleeping gas trap" X+ ," magic trap" X+ ," squeaky board" X+ ," web" X+ ," spiked pit" X+ ," level teleporter" X+ #ifdef SPELLS X+ ,"n anti-magic field" X+ #endif X+ ," rust trap" X+ #ifdef POLYSELF X+ ," polymorph trap" X+ #endif X+ ," land mine" X+ }; X+ X+ #endif /* OVLB */ X+ X+ void NDECL(domagictrap); X+ OSTATIC boolean FDECL(thitm, (int, struct monst *, struct obj *, int)); X+ X+ #ifdef OVLB X+ X /* Generic rust-armor function. Returns TRUE if a message was printed; X * "print", if set, means to print a message (and thus to return TRUE) even X * if the item could not be rusted; otherwise a message is printed and TRUE is X*************** X*** 17,28 **** X boolean X rust_dmg(otmp, ostr, type, print) X register struct obj *otmp; X! register char *ostr; X int type; X boolean print; X { X static const char *gook[] = { "slag", "rust", "rot", "corrosion" }; X static const char *action[] = { "smolder", "rust", "rot", "corrode" }; X boolean vulnerable = FALSE; X boolean plural; X X--- 48,60 ---- X boolean X rust_dmg(otmp, ostr, type, print) X register struct obj *otmp; X! register const char *ostr; X int type; X boolean print; X { X static const char *gook[] = { "slag", "rust", "rot", "corrosion" }; X static const char *action[] = { "smolder", "rust", "rot", "corrode" }; X+ static const char *msg[] = { "burnt", "rusted", "rotten", "corroded" }; X boolean vulnerable = FALSE; X boolean plural; X X*************** X*** 54,60 **** X otmp->spe--; X adj_abon(otmp, -1); X } X! } else Your("%s look%s quite rusted.", ostr, plural ? "" : "s"); X return(TRUE); X } X X--- 86,93 ---- X otmp->spe--; X adj_abon(otmp, -1); X } X! } else Your("%s %s%s quite %s.", ostr, Blind ? "feel" : "look", X! plural ? "" : "s", msg[type]); X return(TRUE); X } X X*************** X*** 65,70 **** X--- 98,112 ---- X register struct trap *ttmp; X register struct permonst *ptr; X X+ if (ttmp = t_at(x,y)) { X+ if (u.utrap && X+ ((u.utraptype == TT_BEARTRAP && typ != BEAR_TRAP) || X+ (u.utraptype == TT_WEB && typ != WEB) || X+ (u.utraptype == TT_PIT && typ != PIT && typ != SPIKED_PIT))) X+ u.utrap = 0; X+ ttmp->ttyp = typ; X+ return ttmp; X+ } X ttmp = newtrap(); X ttmp->ttyp = typ; X ttmp->tx = x; X*************** X*** 71,81 **** X ttmp->ty = y; X switch(typ) { X case MONST_TRAP: /* create a monster in "hiding" */ X if(rn2(5) && (ptr = mkclass(S_PIERCER))) X ttmp->pm = monsndx(ptr); X! else X ttmp->pm = rndmonnum(); X break; X case STATUE_TRAP: /* create a "living" statue */ X ttmp->pm = rndmonnum(); X (void) mkcorpstat(STATUE, &mons[ttmp->pm], x, y); X--- 113,131 ---- X ttmp->ty = y; X switch(typ) { X case MONST_TRAP: /* create a monster in "hiding" */ X+ { int tryct = 0; X if(rn2(5) && (ptr = mkclass(S_PIERCER))) X ttmp->pm = monsndx(ptr); X! else do { X ttmp->pm = rndmonnum(); X+ } while ((noattacks(&mons[ttmp->pm]) || X+ !mons[ttmp->pm].mmove) && ++tryct < 100); X+ if (tryct == 100) { X+ free((genericptr_t)ttmp); X+ return(struct trap *)0; X+ } X break; X+ } X case STATUE_TRAP: /* create a "living" statue */ X ttmp->pm = rndmonnum(); X (void) mkcorpstat(STATUE, &mons[ttmp->pm], x, y); X*************** X*** 111,119 **** X #ifdef POLYSELF X || is_flyer(uasmon) X #endif X! )) && X! !(IS_DOOR(levl[x][y].typ) && X! (levl[x][y].doormask & (D_LOCKED | D_CLOSED))); X return(tmp1 && tmp2 && tmp3); X #else X return( isok(x,y) && X--- 161,167 ---- X #ifdef POLYSELF X || is_flyer(uasmon) X #endif X! )) && !closed_door(x,y); X return(tmp1 && tmp2 && tmp3); X #else X return( isok(x,y) && X*************** X*** 129,138 **** X #ifdef POLYSELF X || is_flyer(uasmon) X #endif X! )) && X! !(IS_DOOR(levl[x][y].typ) && X! (levl[x][y].doormask & (D_LOCKED | D_CLOSED))) X! ); X #endif X /* Note: gold is permitted (because of vaults) */ X } X--- 177,183 ---- X #ifdef POLYSELF X || is_flyer(uasmon) X #endif X! )) && !closed_door(x,y)); X #endif X /* Note: gold is permitted (because of vaults) */ X } X*************** X*** 189,199 **** X case BEAR_TRAP: X if(Levitation X #ifdef POLYSELF X! || is_flyer(uasmon) X! #endif X! ) { X You("%s over a bear trap.", X Levitation ? "float" : "fly"); X break; X } X #ifdef POLYSELF X--- 234,246 ---- X case BEAR_TRAP: X if(Levitation X #ifdef POLYSELF X! || is_flyer(uasmon)) { X You("%s over a bear trap.", X Levitation ? "float" : "fly"); X+ #else X+ ) { X+ You("float over a bear trap."); X+ #endif X break; X } X #ifdef POLYSELF X*************** X*** 253,266 **** X case TRAPDOOR: X if(is_maze_lev X #ifdef STRONGHOLD X! && (dlevel > stronghold_level) X! #endif /* STRONGHOLD /**/ X ) { X pline("A trap door in the ceiling opens and a rock falls on your %s!", X body_part(HEAD)); X if(uarmh) X pline("Fortunately, you are wearing a helmet!"); X! losehp(uarmh ? 2 : d(2,10),"falling rock"); X (void) mksobj_at(ROCK, u.ux, u.uy); X fobj->quan = 1; X fobj->owt = weight(fobj); X--- 300,313 ---- X case TRAPDOOR: X if(is_maze_lev X #ifdef STRONGHOLD X! && (dlevel > stronghold_level) X! #endif X ) { X pline("A trap door in the ceiling opens and a rock falls on your %s!", X body_part(HEAD)); X if(uarmh) X pline("Fortunately, you are wearing a helmet!"); X! losehp(uarmh ? 2 : d(2,10),"falling rock", KILLED_BY_AN); X (void) mksobj_at(ROCK, u.ux, u.uy); X fobj->quan = 1; X fobj->owt = weight(fobj); X*************** X*** 276,285 **** X pline("A trap door opens up under you!"); X if(Levitation || u.ustuck || dlevel == MAXLEVEL X #ifdef POLYSELF X! || is_flyer(uasmon) X #endif X #ifdef ENDGAME X! || dlevel == ENDLEVEL X #endif X ) { X You("don't fall in."); X--- 323,332 ---- X pline("A trap door opens up under you!"); X if(Levitation || u.ustuck || dlevel == MAXLEVEL X #ifdef POLYSELF X! || is_flyer(uasmon) || u.umonnum == PM_WUMPUS X #endif X #ifdef ENDGAME X! || dlevel == ENDLEVEL X #endif X ) { X You("don't fall in."); X*************** X*** 290,295 **** X--- 337,343 ---- X You("are jerked back by your pet!"); X else { X #endif X+ if(in_shop(u.ux, u.uy)) shopdig(1); X unsee(); X (void) fflush(stdout); X goto_level(newlevel, FALSE, TRUE); X*************** X*** 301,307 **** 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 fobj->quan = 1; X--- 349,355 ---- 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",10); X } else { X (void) mksobj_at(DART, u.ux, u.uy); X fobj->quan = 1; X*************** X*** 343,349 **** X break; X case RUST_TRAP: X #ifdef POLYSELF X! #ifdef GOLEMS X if (u.umonnum == PM_IRON_GOLEM) { X pline("A gush of water hits you!"); X You("are covered with rust!"); X--- 391,397 ---- X break; X case RUST_TRAP: X #ifdef POLYSELF X! # ifdef GOLEMS X if (u.umonnum == PM_IRON_GOLEM) { X pline("A gush of water hits you!"); X You("are covered with rust!"); X*************** X*** 350,356 **** X rehumanize(); X break; X } else X! #endif /* GOLEMS */ X if (u.umonnum == PM_GREMLIN && rn2(3)) { X pline("A gush of water hits you!"); X if(mtmp = cloneu()) { X--- 398,404 ---- X rehumanize(); X break; X } else X! # endif /* GOLEMS */ X if (u.umonnum == PM_GREMLIN && rn2(3)) { X pline("A gush of water hits you!"); X if(mtmp = cloneu()) { X*************** X*** 415,421 **** X #endif X u.utrap = rn1(6,2); X u.utraptype = TT_PIT; X! losehp(rnd(6),"fall into a pit"); X selftouch("Falling, you"); X break; X case SPIKED_PIT: X--- 463,469 ---- X #endif X u.utrap = rn1(6,2); X u.utraptype = TT_PIT; X! losehp(rnd(6),"fell into a pit", NO_KILLER_PREFIX); X selftouch("Falling, you"); X break; X case SPIKED_PIT: X*************** X*** 435,453 **** X #endif X u.utrap = rn1(6,2); X u.utraptype = TT_PIT; X! losehp(rnd(10),"fall onto iron spikes"); X! if(!rn2(6)) poisoned("spikes",A_STR,"poison spikes"); X selftouch("Falling, you"); X break; X case LEVEL_TELEP: X! { int oldl = dlevel; X X! pline("You have %s onto a level teleport trap!", X #ifdef POLYSELF X! is_flyer(uasmon) ? "flown" : X! (Levitation || nolimbs(uasmon)) ? "moved" : "stepped"); X #else X! Levitation ? "moved" : "stepped"); X #endif X if(Antimagic) { X pru(); X--- 483,503 ---- X #endif X u.utrap = rn1(6,2); X u.utraptype = TT_PIT; X! losehp(rnd(10),"fell into a pit of iron spikes", X! NO_KILLER_PREFIX); X! if(!rn2(6)) poisoned("spikes",A_STR,"fall onto poison spikes",8); X selftouch("Falling, you"); X break; X case LEVEL_TELEP: X! X! { int oldl = dlevel; X X! You("%s onto a level teleport trap!", X! Levitation ? "float" : X #ifdef POLYSELF X! locomotion(uasmon, "step")); X #else X! "step"); X #endif X if(Antimagic) { X pru(); X*************** X*** 502,508 **** X case MGTRP: /* A magic trap. */ X if (!rn2(30)) { X You("are caught in a magical explosion!"); X! losehp(rnd(10), "magical explosion"); X #ifdef SPELLS X Your("body absorbs some of the magical energy!"); X u.uen = (u.uenmax += 2); X--- 552,558 ---- X case MGTRP: /* A magic trap. */ X if (!rn2(30)) { X You("are caught in a magical explosion!"); X! losehp(rnd(10), "magical explosion", KILLED_BY_AN); X #ifdef SPELLS X Your("body absorbs some of the magical energy!"); X u.uen = (u.uenmax += 2); X*************** X*** 515,521 **** X ) newsym(u.ux,u.uy); X } else domagictrap(); X break; X! case SQBRD: /* Stepped on a squeaky board. */ X if (Levitation X #ifdef POLYSELF X || is_flyer(uasmon) X--- 565,571 ---- X ) newsym(u.ux,u.uy); X } else domagictrap(); X break; X! case SQBRD: /* stepped on a squeaky board */ X if (Levitation X #ifdef POLYSELF X || is_flyer(uasmon) X*************** X*** 524,541 **** X if (Hallucination) You("notice a crease in the linoleum."); X else You("notice a loose board below you."); X } else { X! pline("A board underfoot gives off a loud squeak!"); X wake_nearby(); X } X break; X case WEB: /* Our luckless player has stumbled into a web. */ X X! pline("You've %s into a spider web!", X! Levitation ? "floated" : X #ifdef POLYSELF X! is_flyer(uasmon) ? "flown" : X #endif X- "stumbled"); X u.utraptype = TT_WEB; X X /* Time stuck in the web depends on your strength. */ X--- 574,592 ---- X if (Hallucination) You("notice a crease in the linoleum."); X else You("notice a loose board below you."); X } else { X! pline("A board beneath you squeaks loudly."); X wake_nearby(); X } X break; X case WEB: /* Our luckless player has stumbled into a web. */ X X! You("%s into a spider web!", X! Levitation ? "float" : X #ifdef POLYSELF X! locomotion(uasmon, "stumble")); X! #else X! "stumble"); X #endif X u.utraptype = TT_WEB; X X /* Time stuck in the web depends on your strength. */ X*************** X*** 556,584 **** X break; X X case LANDMINE: { X! # ifndef LINT X register struct monst *mtmp = fmon; X! # endif /* LINT */ X X if (Levitation X #ifdef POLYSELF X! || is_flyer(uasmon) X #endif X ) { X! You("see a trigger in a pile of soil below you!"); X if (rn2(3)) break; X pline("KAABLAMM!!! The air currents set it off!"); X } else { X! #ifdef POLYSELF X! pline("KAABLAMM!!! You %s a land mine!", X! nolimbs(uasmon) ? "encountered" : "stepped on"); X! #else X! pline("KAABLAMM!!! You stepped on a land mine!"); X! #endif X set_wounded_legs(LEFT_SIDE, 40 + rnd(35)); X set_wounded_legs(RIGHT_SIDE, 40 + rnd(35)); X } X! losehp(rnd(16), "land mine"); X /* wake everything on the level */ X while(mtmp) { X if(mtmp->msleep) mtmp->msleep = 0; X--- 607,630 ---- X break; X X case LANDMINE: { X! #ifndef LINT X register struct monst *mtmp = fmon; X! #endif X X if (Levitation X #ifdef POLYSELF X! || is_flyer(uasmon) X #endif X ) { X! You("see a trigger in a pile of soil below you."); X if (rn2(3)) break; X pline("KAABLAMM!!! The air currents set it off!"); X } else { X! pline("KAABLAMM!!! You triggered a land mine!"); X set_wounded_legs(LEFT_SIDE, 40 + rnd(35)); X set_wounded_legs(RIGHT_SIDE, 40 + rnd(35)); X } X! losehp(rnd(16), "land mine", KILLED_BY_AN); X /* wake everything on the level */ X while(mtmp) { X if(mtmp->msleep) mtmp->msleep = 0; X*************** X*** 594,601 **** X } X } X X #ifdef WALKIES X! static boolean X teleport_pet(mtmp) X register struct monst *mtmp; X { X--- 640,654 ---- X } X } X X+ #endif /* OVLB */ X+ X #ifdef WALKIES X! X! OSTATIC boolean FDECL(teleport_pet, (struct monst *)); X! X! #ifdef OVLB X! X! XSTATIC boolean X teleport_pet(mtmp) X register struct monst *mtmp; X { X*************** X*** 618,625 **** X--- 671,698 ---- X } X return TRUE; X } X+ X+ #endif /* OVLB */ X+ X #endif X X+ #ifdef OVLB X+ X+ XSTATIC void X+ seetrap(trap) X+ X+ register struct trap *trap; X+ { X+ if(!trap->tseen) { X+ X+ trap->tseen = 1; X+ newsym(trap->tx, trap->ty); X+ } X+ } X+ X+ #endif /* OVLB */ X+ #ifdef OVL1 X+ X int X mintrap(mtmp) X register struct monst *mtmp; X*************** X*** 651,660 **** X if(mtmp->data->msize > MZ_SMALL && X !amorphous(mtmp->data)) { X mtmp->mtrapped = 1; X! if(in_sight) X pline("%s is caught in a bear trap!", X Monnam(mtmp)); X! else X if((mtmp->data == &mons[PM_OWLBEAR] X || mtmp->data == &mons[PM_BUGBEAR]) X && flags.soundok) X--- 724,734 ---- X if(mtmp->data->msize > MZ_SMALL && X !amorphous(mtmp->data)) { X mtmp->mtrapped = 1; X! if(in_sight) { X pline("%s is caught in a bear trap!", X Monnam(mtmp)); X! seetrap(trap); X! } else X if((mtmp->data == &mons[PM_OWLBEAR] X || mtmp->data == &mons[PM_BUGBEAR]) X && flags.soundok) X*************** X*** 663,681 **** X break; X #ifdef POLYSELF X case POLY_TRAP: X! if(!resist(mtmp, WAND_SYM, 0, NOTELL)) X (void) newcham(mtmp, (struct permonst *)0); X break; X #endif X case RUST_TRAP: X if(in_sight) X! pline("A gush of water hits %s!", mon_nam(mtmp)); X #ifdef GOLEMS X if (mtmp->data == &mons[PM_IRON_GOLEM]) { X! if (in_sight) pline("%s falls to pieces!", X! Monnam(mtmp)); X else if(mtmp->mtame) X! pline("May %s rust in peace.", X mon_nam(mtmp)); X mondied(mtmp); X trapkilled = TRUE; X--- 737,759 ---- X break; X #ifdef POLYSELF X case POLY_TRAP: X! if(!resist(mtmp, WAND_SYM, 0, NOTELL)) { X (void) newcham(mtmp, (struct permonst *)0); X+ seetrap(trap); X+ } X break; X #endif X case RUST_TRAP: X if(in_sight) X! pline("A gush of water hits %s!", mon_nam(mtmp)); X! if(cansee(mtmp->mx,mtmp->my)) X! seetrap(trap); X #ifdef GOLEMS X if (mtmp->data == &mons[PM_IRON_GOLEM]) { X! if (in_sight) X! pline("%s falls to pieces!", Monnam(mtmp)); X else if(mtmp->mtame) X! pline("May %s rust in peace.", X mon_nam(mtmp)); X mondied(mtmp); X trapkilled = TRUE; X*************** X*** 693,717 **** X break; X case PIT: X case SPIKED_PIT: X! /* there should be a mtmp/data -> floating */ X! if(!is_flyer(mtmp->data) /* ab */ X! && mtmp->data != &mons[PM_WUMPUS] /* 3. */) { X if (!passes_walls(mtmp->data)) X! mtmp->mtrapped = 1; X! if(in_sight) X! pline("%s falls into a pit!", Monnam(mtmp)); X if(thitm(0, mtmp, (struct obj *)0, X! rnd((tt==PIT) ? 6 : 10))) X! trapkilled = TRUE; X } X break; X case SLP_GAS_TRAP: X if(!resists_sleep(mtmp->data) && X! !mtmp->msleep && !mtmp->mfroz) { X! mtmp->msleep = 1; X if(in_sight) X pline("%s suddenly falls asleep!", X Monnam(mtmp)); X } X break; X case TELEP_TRAP: X--- 771,800 ---- X break; X case PIT: X case SPIKED_PIT: X! /* TO DO: there should be a mtmp/data -> floating */ X! if(!is_flyer(mtmp->data) && X! mtmp->data != &mons[PM_WUMPUS]) { X if (!passes_walls(mtmp->data)) X! mtmp->mtrapped = 1; X! if(in_sight) { X! pline("%s falls into a pit!", Monnam(mtmp)); X! seetrap(trap); X! } X if(thitm(0, mtmp, (struct obj *)0, X! rnd((tt==PIT) ? 6 : 10))) X! trapkilled = TRUE; X } X break; X case SLP_GAS_TRAP: X if(!resists_sleep(mtmp->data) && X! !mtmp->msleep && mtmp->mcanmove) { X! mtmp->mcanmove = 0; X! mtmp->mfrozen = rnd(25); X if(in_sight) X pline("%s suddenly falls asleep!", X Monnam(mtmp)); X+ if(cansee(mtmp->mx,mtmp->my)) X+ seetrap(trap); X } X break; X case TELEP_TRAP: X*************** X*** 724,732 **** X */ X if (trap->once) vloc(mtmp); X else rloc(mtmp); X! if(in_sight && !cansee(mtmp->mx,mtmp->my)) X pline("%s suddenly disappears!", X Monnam(mtmp)); X #ifdef WALKIES X } X #endif X--- 807,817 ---- X */ X if (trap->once) vloc(mtmp); X else rloc(mtmp); X! if(in_sight && !cansee(mtmp->mx,mtmp->my)) { X pline("%s suddenly disappears!", X Monnam(mtmp)); X+ seetrap(trap); X+ } X #ifdef WALKIES X } X #endif X*************** X*** 735,740 **** X--- 820,826 ---- X otmp = mksobj(ARROW, FALSE); X otmp->quan = 1; X otmp->owt = weight(otmp); X+ if(in_sight) seetrap(trap); X if(thitm(8, mtmp, otmp, 0)) trapkilled = TRUE; X break; X case DART_TRAP: X*************** X*** 742,747 **** X--- 828,834 ---- X otmp->quan = 1; X if (!rn2(6)) otmp->opoisoned = 1; X otmp->owt = weight(otmp); X+ if(in_sight) seetrap(trap); X if(thitm(7, mtmp, otmp, 0)) trapkilled = TRUE; X break; X case TRAPDOOR: X*************** X*** 753,762 **** X--- 840,851 ---- X otmp = mksobj(ROCK, FALSE); X otmp->quan = 1; X otmp->owt = weight(otmp); X+ if(in_sight) seetrap(trap); X if(thitm(0, mtmp, otmp, d(2, 10))) X trapkilled = TRUE; X break; X } X+ if (mtmp->data == &mons[PM_WUMPUS]) break; X tdoor = TRUE; X /* Fall through */ X case LEVEL_TELEP: X*************** X*** 765,771 **** X && !mtmp->wormno X /* long worms with tails mustn't change levels */ X #endif X! ){ X #ifdef WALKIES X if(teleport_pet(mtmp)) { X #endif X--- 854,860 ---- X && !mtmp->wormno X /* long worms with tails mustn't change levels */ X #endif X! ) { X #ifdef WALKIES X if(teleport_pet(mtmp)) { X #endif X*************** X*** 786,793 **** X } X fall_down(mtmp, newlev); X } X! if(in_sight) X pline("Suddenly, %s disappears out of sight.", mon_nam(mtmp)); X return(2); /* no longer on this level */ X #ifdef WALKIES X } X--- 875,884 ---- X } X fall_down(mtmp, newlev); X } X! if(in_sight) { X pline("Suddenly, %s disappears out of sight.", mon_nam(mtmp)); X+ seetrap(trap); X+ } X return(2); /* no longer on this level */ X #ifdef WALKIES X } X*************** X*** 804,834 **** X register struct monst *ztmp = fmon; X X if(is_flyer(mtmp->data)) break; X! /* Stepped on a squeaky board. */ X! if (in_sight) X! pline("%s steps on a squeaky board.", Monnam(mtmp)); X! else X You("hear a distant squeak."); X! /* Wake up nearby monsters. */ X! while(ztmp) { X! if(dist2(mtmp->mx,mtmp->my,ztmp->mx,ztmp->my) < 40) X! if(ztmp->msleep) ztmp->msleep = 0; X! ztmp = ztmp->nmon; X! } X break; X } X case WEB: X! /* Monster in a web. */ X! /* in_sight check and confused bear by Eric Backus */ X! if(mtmp->data->mlet != S_SPIDER) { X! if(in_sight) X! pline("%s is caught in a web!", Monnam(mtmp)); X! else X! if(mtmp->data == &mons[PM_OWLBEAR]) X! You("hear the roaring of a confused bear!"); X! mtmp->mtrapped = 1; X! } X! break; X #ifdef SPELLS X case ANTI_MAGIC: break; X #endif X--- 895,926 ---- X register struct monst *ztmp = fmon; X X if(is_flyer(mtmp->data)) break; X! /* stepped on a squeaky board */ X! if (in_sight) { X! pline("A board beneath %s squeaks loudly.", mon_nam(mtmp)); X! seetrap(trap); X! } else X You("hear a distant squeak."); X! /* wake up nearby monsters */ X! while(ztmp) { X! if(dist2(mtmp->mx,mtmp->my,ztmp->mx,ztmp->my) < 40) X! if(ztmp->msleep) ztmp->msleep = 0; X! ztmp = ztmp->nmon; X! } X break; X } X case WEB: X! /* Monster in a web. */ X! if(mtmp->data->mlet != S_SPIDER) { X! if(in_sight) X! pline("%s is caught in a web.", Monnam(mtmp)); X! else /* Eric Backus */ X! if(mtmp->data == &mons[PM_OWLBEAR] || X! mtmp->data == &mons[PM_BUGBEAR]) X! You("hear the roaring of a confused bear!"); X! mtmp->mtrapped = 1; X! } X! break; X #ifdef SPELLS X case ANTI_MAGIC: break; X #endif X*************** X*** 838,845 **** X if(rn2(3)) X break; /* monsters usually don't set it off */ X if(in_sight) X! pline("KAABLAMM!!! %s steps on a land mine!", X! Monnam(mtmp)); X else if (flags.soundok) X pline("Kaablamm! You hear an explosion in the distance!"); X deltrap(t_at(mtmp->mx, mtmp->my)); X--- 930,937 ---- X if(rn2(3)) X break; /* monsters usually don't set it off */ X if(in_sight) X! pline("KAABLAMM!!! %s triggers a land mine!", X! Monnam(mtmp)); X else if (flags.soundok) X pline("Kaablamm! You hear an explosion in the distance!"); X deltrap(t_at(mtmp->mx, mtmp->my)); X*************** X*** 854,860 **** X break; X } X default: X! impossible("Some monster encountered a strange trap of type %d.",tt); X } X } X if(trapkilled) return 2; X--- 946,952 ---- X break; X } X default: X! impossible("Some monster encountered a strange trap of type %d.", tt); X } X } X if(trapkilled) return 2; X*************** X*** 861,869 **** X else return mtmp->mtrapped; X } X X void X selftouch(arg) X! char *arg; X { X if(uwep && (uwep->otyp == CORPSE && uwep->corpsenm == PM_COCKATRICE) X #ifdef POLYSELF X--- 953,964 ---- X else return mtmp->mtrapped; X } X X+ #endif /* OVL1 */ X+ #ifdef OVLB X+ X void X selftouch(arg) X! const char *arg; X { X if(uwep && (uwep->otyp == CORPSE && uwep->corpsenm == PM_COCKATRICE) X #ifdef POLYSELF X*************** X*** 872,878 **** X ){ X pline("%s touch the cockatrice corpse.", arg); X You("turn to stone..."); X! killer = "cockatrice corpse accident"; X done(STONING); X } X } X--- 967,974 ---- X ){ X pline("%s touch the cockatrice corpse.", arg); X You("turn to stone..."); X! killer_format = KILLED_BY; X! killer = "touching a cockatrice corpse"; X done(STONING); X } X } X*************** X*** 988,993 **** X--- 1084,1091 ---- X unsee(); X u.utrap = 0; X u.ustuck = 0; X+ u.ux0 = u.ux; X+ u.uy0 = u.uy; X u.ux = nux; X u.uy = nuy; X #ifdef POLYSELF X*************** X*** 1013,1019 **** X--- 1111,1121 ---- X struct trap *trap; X #ifdef SPELLS X boolean castit = FALSE; X+ # ifdef __GNULINT__ X+ register int sp_no = 0; X+ # else X register int sp_no; X+ # endif X #endif X X trap = t_at(u.ux, u.uy); X*************** X*** 1034,1040 **** X if (trap) X #ifdef POLYSELF X You("%s onto the teleportation trap.", X! nolimbs(uasmon) ? "slither" : "jump"); X #else X You("jump onto the teleportation trap."); X #endif X--- 1136,1142 ---- X if (trap) X #ifdef POLYSELF X You("%s onto the teleportation trap.", X! locomotion(uasmon, "jump")); X #else X You("jump onto the teleportation trap."); X #endif X*************** X*** 1188,1195 **** X #endif X if(newlevel <= -10) { X You("arrive in heaven."); X! pline("\"You are here a bit early, but we'll let you in.\""); X! killer = "visit to heaven"; X done(DIED); X } else if (newlevel == -9) { X You("feel deliriously happy. "); X--- 1290,1298 ---- X #endif X if(newlevel <= -10) { X You("arrive in heaven."); X! verbalize("Thou art early, but we'll admit thee."); X! killer_format = NO_KILLER_PREFIX; X! killer = "went to heaven prematurely"; X done(DIED); X } else if (newlevel == -9) { X You("feel deliriously happy. "); X*************** X*** 1219,1225 **** X pline("Unfortunately, you don't know how to fly."); X You("plummet a few thousand feet to your death."); X dlevel = 0; X! killer = "long fall"; X done(DIED); X #ifdef WIZARD X return; X--- 1322,1330 ---- X pline("Unfortunately, you don't know how to fly."); X You("plummet a few thousand feet to your death."); X dlevel = 0; X! killer_format = NO_KILLER_PREFIX; X! killer = X! self_pronoun("teleported out of the dungeon and fell to %s death","his"); X done(DIED); X #ifdef WIZARD X return; X*************** X*** 1284,1303 **** X } else { X num = rnd(6); X u.uhpmax -= num; X! losehp(num,"burst of flame"); X break; X } X } X X /* odd feelings */ X! case 13: pline("A shiver runs up and down your spine!"); X! /* TO DO: What if you're polymorphed into something spineless? */ X break; X case 14: You(Hallucination ? X "hear the moon howling at you." : X "hear distant howling."); X break; X! case 15: You("suddenly yearn for your distant homeland."); X break; X case 16: Your("pack shakes violently!"); X break; X--- 1389,1410 ---- X } else { X num = rnd(6); X u.uhpmax -= num; X! losehp(num,"burst of flame", KILLED_BY_AN); X break; X } X } X X /* odd feelings */ X! case 13: pline("A shiver runs up and down your %s!", X! body_part(SPINE)); X break; X case 14: You(Hallucination ? X "hear the moon howling at you." : X "hear distant howling."); X break; X! case 15: You("suddenly yearn for %s.", X! Hallucination ? "Cleveland" : X! "your distant homeland"); X break; X case 16: Your("pack shakes violently!"); X break; X*************** X*** 1344,1356 **** 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 obj->otyp = POT_WATER; X obj->blessed = obj->cursed = 0; X--- 1451,1463 ---- 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) > Luck 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) > Luck) { X if (obj->spe == -1) { X obj->otyp = POT_WATER; X obj->blessed = obj->cursed = 0; X*************** X*** 1378,1389 **** X #ifdef WIZARD X wizard || X #endif X! rn2(3) < u.uluck+2) { X You("attempt a teleport spell."); /* utcsri!carroll */ X (void) dotele(); X if(!is_pool(u.ux,u.uy)) return; X } X You("drown."); X killer = levl[u.ux][u.uy].typ == POOL ? "pool of water" : "moat"; X done(DROWNING); X } X--- 1485,1497 ---- X #ifdef WIZARD X wizard || X #endif X! rn2(3) < Luck+2) { X You("attempt a teleport spell."); /* utcsri!carroll */ X (void) dotele(); X if(!is_pool(u.ux,u.uy)) return; X } X You("drown."); X+ killer_format = KILLED_BY_AN; X killer = levl[u.ux][u.uy].typ == POOL ? "pool of water" : "moat"; X done(DROWNING); X } X*************** X*** 1519,1528 **** X register struct obj *otmp,*otmp2; X char buf[80]; X X! if(rn2(13+u.uluck) > 7) return; X X otmp = obj; X! switch(rn2(13-u.uluck)) { /* which trap? */ X case 23: X case 22: X case 21: X--- 1627,1638 ---- X register struct obj *otmp,*otmp2; X char buf[80]; X X! if(Luck > -13 && rn2(13+Luck) > 7) return; X X otmp = obj; X! switch(rn2(20) ? ((Luck >= 13) ? 0 : rn2(13-Luck)) : rn2(26)) { X! case 25: X! case 24: X case 23: X case 22: X case 21: X*************** X*** 1536,1542 **** X delobj(otmp); X } X X! losehp(d(6,6), buf); X wake_nearby(); X return; X case 20: X--- 1646,1652 ---- X delobj(otmp); X } X X! losehp(d(6,6), buf, KILLED_BY_AN); X wake_nearby(); X return; X case 20: X*************** X*** 1545,1562 **** X case 17: X pline("A cloud of noxious gas billows from the %s.", X xname(obj)); X! poisoned("gas cloud", A_STR, "cloud of poison gas"); X break; X case 16: X case 15: X case 14: X case 13: X pline("A tower of flame erupts from the %s", X xname(obj)); X if(Fire_resistance) { X shieldeff(u.ux, u.uy); X You("don't seem to be affected."); X! } else losehp(d(4, 6), "tower of flame"); X destroy_item(SCROLL_SYM, AD_FIRE); X #ifdef SPELLS X destroy_item(SPBOOK_SYM, AD_FIRE); X--- 1655,1679 ---- X case 17: X pline("A cloud of noxious gas billows from the %s.", X xname(obj)); X! poisoned("gas cloud", A_STR, "cloud of poison gas",15); X break; X case 16: X case 15: X case 14: X case 13: X+ You("feel a needle prick your %s.",body_part(bodypart)); X+ poisoned("needle", A_CON, "poison needle",10); X+ break; X+ case 12: X+ case 11: X+ case 10: X+ case 9: X pline("A tower of flame erupts from the %s", X xname(obj)); X if(Fire_resistance) { X shieldeff(u.ux, u.uy); X You("don't seem to be affected."); X! } else losehp(d(4, 6), "tower of flame", KILLED_BY_AN); X destroy_item(SCROLL_SYM, AD_FIRE); X #ifdef SPELLS X destroy_item(SPBOOK_SYM, AD_FIRE); X*************** X*** 1563,1589 **** X #endif X destroy_item(POTION_SYM, AD_FIRE); X break; X! case 12: X! case 10: X! case 9: X You("are jolted by a surge of electricity!"); X if(Shock_resistance) { X shieldeff(u.ux, u.uy); X You("don't seem to be affected."); X! } else losehp(d(4, 4), "electric shock"); X destroy_item(RING_SYM, AD_ELEC); X destroy_item(WAND_SYM, AD_ELEC); X break; X! case 8: X! case 7: X! case 6: X pline("Suddenly you are frozen in place!"); X nomovemsg = "You can move again."; X multi = -d(5, 6); X break; X! case 5: X! case 4: X! case 3: X pline("A cloud of %s gas billows from the %s", X hcolor(), xname(obj)); X if(!Stunned) X--- 1680,1706 ---- X #endif X destroy_item(POTION_SYM, AD_FIRE); X break; X! case 8: X! case 7: X! case 6: X You("are jolted by a surge of electricity!"); X if(Shock_resistance) { X shieldeff(u.ux, u.uy); X You("don't seem to be affected."); X! } else losehp(d(4, 4), "electric shock", KILLED_BY_AN); X destroy_item(RING_SYM, AD_ELEC); X destroy_item(WAND_SYM, AD_ELEC); X break; X! case 5: X! case 4: X! case 3: X pline("Suddenly you are frozen in place!"); X nomovemsg = "You can move again."; X multi = -d(5, 6); X break; X! case 2: X! case 1: X! case 0: X pline("A cloud of %s gas billows from the %s", X hcolor(), xname(obj)); X if(!Stunned) X*************** X*** 1594,1607 **** X make_stunned(HStun + rn1(7, 16),FALSE); X make_hallucinated(Hallucination + rn1(5, 16),FALSE); X break; X! default: X! You("feel a needle prick your %s.",body_part(bodypart)); X! poisoned("needle", A_CON, "a poisoned needle"); X break; X } X otmp->otrapped = 0; /* these traps are one-shot things */ X } X X void X wake_nearby() { /* Wake up nearby monsters. */ X register struct monst *mtmp; X--- 1711,1726 ---- X make_stunned(HStun + rn1(7, 16),FALSE); X make_hallucinated(Hallucination + rn1(5, 16),FALSE); X break; X! default: impossible("bad chest trap"); X break; X } X+ bot(); /* to get immediate botl re-display */ X otmp->otrapped = 0; /* these traps are one-shot things */ X } X X+ #endif /* OVLB */ X+ #ifdef OVL2 X+ X void X wake_nearby() { /* Wake up nearby monsters. */ X register struct monst *mtmp; X*************** X*** 1614,1619 **** X--- 1733,1741 ---- X } X } X X+ #endif /* OVL2 */ X+ #ifdef OVL0 X+ X struct trap * X t_at(x,y) X register int x, y; X*************** X*** 1626,1631 **** X--- 1748,1756 ---- X return((struct trap *)0); X } X X+ #endif /* OVL0 */ X+ #ifdef OVLB X+ X void X deltrap(trap) X register struct trap *trap; X*************** X*** 1643,1662 **** X X void X b_trapped(item) /* used for doors. can be used */ X! register char *item; /* for anything else that opens */ X { X register int dmg = rnd(5+(dlevel < 5 ? dlevel : 2+dlevel/2)); X X pline("KABOOM!! The %s was booby-trapped!", item); X! if(u.ulevel < 4 && dlevel < 3 && !rn2(3)) X You("are shaken, but luckily unhurt."); X! else losehp(dmg, "explosion"); X make_stunned(HStun + dmg, TRUE); X } X X /* Monster is hit by trap. */ X /* Note: doesn't work if both obj and d_override are null */ X! static boolean X thitm(tlev, mon, obj, d_override) X register int tlev; X register struct monst *mon; X--- 1768,1787 ---- X X void X b_trapped(item) /* used for doors. can be used */ X! register const char *item; /* for anything else that opens */ X { X register int dmg = rnd(5+(dlevel < 5 ? dlevel : 2+dlevel/2)); X X pline("KABOOM!! The %s was booby-trapped!", item); X! if(u.ulevel < 4 && dlevel < 3 && !rnl(3)) X You("are shaken, but luckily unhurt."); X! else losehp(dmg, "explosion", KILLED_BY_AN); X make_stunned(HStun + dmg, TRUE); X } X X /* Monster is hit by trap. */ X /* Note: doesn't work if both obj and d_override are null */ X! XSTATIC boolean X thitm(tlev, mon, obj, d_override) X register int tlev; X register struct monst *mon; X*************** X*** 1719,1721 **** X--- 1844,1848 ---- X !strncmp(nomovemsg,"You regain con", 15) || X !strncmp(nomovemsg,"You are consci", 15))); X } X+ X+ #endif /* OVLB */ X*** others/Old/pcunix.c Mon Feb 19 23:35:44 1990 X--- others/pcunix.c Mon Feb 5 18:45:43 1990 X*************** X*** 1,4 **** X! /* SCCS Id: @(#)pcunix.c 3.0 88/07/21 X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X /* NetHack may be freely redistributed. See license for details. */ X X--- 1,4 ---- X! /* SCCS Id: @(#)pcunix.c 3.0 89/12/29 X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X /* NetHack may be freely redistributed. See license for details. */ X X*************** X*** 14,26 **** X */ X X #include "hack.h" /* mainly for index() which depends on BSD */ X- #ifdef TOS X- #ifndef OLD_TOS X- #include <errno.h> X- #else X- #include <error.h> X- #endif /* OLD_TOS */ X- #endif X X #ifndef MACOS X #include <sys/types.h> X--- 14,19 ---- X*************** X*** 27,36 **** X #include <sys/stat.h> X #endif X X! #ifndef OLD_TOS X! # ifndef MACOS X! static struct stat buf, hbuf; X # endif X X void X setrandom() X--- 20,33 ---- X #include <sys/stat.h> X #endif X X! #ifdef OVLB X! X! #ifndef MACOS X! static struct stat buf; X! # ifdef WANT_GETHDATE X! static struct stat hbuf; X # endif X+ #endif X X void X setrandom() X*************** X*** 96,107 **** X return(getlt()->tm_hour == 0); X } X X! # ifndef MACOS X void X gethdate(name) X char *name; X { X! # if defined(TOS) && !defined(__GNUC__) X /* old version - for people short of space */ X /* X /* register char *np; X--- 93,104 ---- X return(getlt()->tm_hour == 0); X } X X! #ifndef MACOS X void X gethdate(name) X char *name; X { X! # ifdef WANT_GETHDATE X /* old version - for people short of space */ X /* X /* register char *np; X*************** X*** 141,152 **** X path = np + 1; X } X error("Cannot get status of %s.", (np = rindex(name, '/')) ? np+1 : name); X! # endif /* TOS && __GNUC__ */ X } X X int X! uptodate(fd) { X! # if defined(TOS) && !defined(__GNUC__) /* no fstat yet */ X if(fstat(fd, &buf)) { X pline("Cannot get status of saved level? "); X return(0); X--- 138,151 ---- X path = np + 1; X } X error("Cannot get status of %s.", (np = rindex(name, '/')) ? np+1 : name); X! # endif /* WANT_GETHDATE */ X } X X int X! uptodate(fd) X! int fd; X! { X! # ifdef WANT_GETHDATE X if(fstat(fd, &buf)) { X pline("Cannot get status of saved level? "); X return(0); X*************** X*** 155,177 **** X pline("Saved level is out of date. "); X return(0); X } X! # endif X return(1); X } X! # endif /* MACOS /* */ X! #endif /* OLD_TOS /* */ X X void X regularize(s) X! /* normalize file name - we don't like .'s, /'s, :'s [Mac], or spaces */ X register char *s; X { X register char *lp; X X while((lp=index(s, '.')) || (lp=index(s, '/')) || (lp=index(s,' ')) X! #ifdef MACOS X! || (lp=index(s, ':')) X #endif X- ) X- *lp = '_'; X } X--- 154,203 ---- X pline("Saved level is out of date. "); X return(0); X } X! # else X! # if defined(MSDOS) && !defined(NO_FSTAT) X! if(fstat(fd, &buf)) { X! if(moves > 1) pline("Cannot get status of saved level? "); X! else pline("Cannot get status of saved game"); X! return(0); X! } X! if(comp_times(buf.st_mtime)) { X! if(moves > 1) pline("Saved level is out of date"); X! else pline("Saved game is out of date. "); X! return(0); X! } X! # endif /* MSDOS /* */ X! # endif /* WANT_GETHDATE */ X return(1); X } X! #endif /* MACOS /* */ X X void X regularize(s) X! /* X! * normalize file name - we don't like .'s, /'s, :'s [Mac], or spaces, X! * and in msdos / OS/2 we really get picky X! */ X register char *s; X { X register char *lp; X X+ #ifdef MSDOS X+ for (lp = s; *lp; lp++) X+ if (*lp <= ' ' || *lp == '"' || (*lp >= '*' && *lp <= ',') || X+ *lp == '.' || *lp == '/' || (*lp >= ':' && *lp <= '?') || X+ # ifdef OS2 X+ *lp == '&' || *lp == '(' || *lp == ')' || X+ # endif X+ *lp == '|' || *lp >= 127 || (*lp >= '[' && *lp <= ']')) X+ *lp = '_'; X+ #else X while((lp=index(s, '.')) || (lp=index(s, '/')) || (lp=index(s,' ')) X! # ifdef MACOS X! || (lp=index(s, ':')) X! # endif X! ) *lp = '_'; X #endif X } X+ X+ #endif /* OVLB */ X*** others/Old/random.c Mon Feb 19 23:35:59 1990 X--- others/random.c Fri Feb 16 23:01:50 1990 X*************** X*** 15,22 **** X * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. X */ X X! #if defined(LIBC_SCCS) && !defined(lint) X static char sccsid[] = "@(#)random.c 5.5 (Berkeley) 7/6/88"; X #endif /* LIBC_SCCS and not lint */ X X #include <stdio.h> X--- 15,34 ---- X * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. X */ X X! /* Several minor changes were made for the NetHack distribution to satisfy X! * non-BSD compilers (by definition BSD compilers do not need to compile X! * this file for NetHack). These changes consisted of: X! * - changing the sccsid conditions to nested ifdefs from defined()s X! * to accommodate stupid preprocessors X! * - giving srandom() type void instead of allowing it to default to int X! * - making the first return in initstate() return a value consistent X! * with its type (instead of no value) X! */ X! X! #ifdef LIBC_SCCS X! # ifndef lint X static char sccsid[] = "@(#)random.c 5.5 (Berkeley) 7/6/88"; X+ # endif X #endif /* LIBC_SCCS and not lint */ X X #include <stdio.h> X*************** X*** 182,187 **** X--- 194,200 ---- X * values produced by this routine. X */ X X+ void X srandom( x ) X X unsigned x; X*************** X*** 236,242 **** X if( n < BREAK_1 ) { X if( n < BREAK_0 ) { X fprintf( stderr, "initstate: not enough state (%d bytes) with which to do jack; ignored.\n", n ); X! return; X } X rand_type = TYPE_0; X rand_deg = DEG_0; X--- 249,255 ---- X if( n < BREAK_1 ) { X if( n < BREAK_0 ) { X fprintf( stderr, "initstate: not enough state (%d bytes) with which to do jack; ignored.\n", n ); X! return (char *)0; X } X rand_type = TYPE_0; X rand_deg = DEG_0; X*** others/Old/trampoli.c Mon Feb 19 23:37:13 1990 X--- others/trampoli.c Wed Feb 7 18:39:42 1990 X*************** X*** 39,44 **** X--- 39,50 ---- X #undef domonability X #endif /* POLYSELF */ X X+ #ifdef EXPLORE_MODE X+ #undef enter_explore_mode X+ X+ int enter_explore_mode() { return enter_explore_mode_(); } X+ #endif X+ X #undef timed_occupation X X #if defined(WIZARD) || defined(EXPLORE_MODE) X*************** X*** 131,137 **** X int Boots_off() { return Boots_off_(); } X int Gloves_off() { return Gloves_off_(); } X int Helmet_off() { return Helmet_off_(); } X! /* int Armor_on() { return Armor_on_(); } */ X int Boots_on() { return Boots_on_(); } X int Gloves_on() { return Gloves_on_(); } X int Helmet_on() { return Helmet_on_(); } X--- 137,143 ---- X int Boots_off() { return Boots_off_(); } X int Gloves_off() { return Gloves_off_(); } X int Helmet_off() { return Helmet_off_(); } X! int Armor_on() { return Armor_on_(); } X int Boots_on() { return Boots_on_(); } X int Gloves_on() { return Gloves_on_(); } X int Helmet_on() { return Helmet_on_(); } X*************** X*** 173,180 **** X--- 179,188 ---- X X X /* ### end.c ### */ X+ #undef done1 X #undef done2 X X+ int done1() { return done1_(); } X int done2() { return done2_(); } X X X*************** X*** 241,246 **** X--- 249,259 ---- X int forcelock() { return forcelock_(); } X int picklock() { return picklock_(); } X X+ /* ### mondata.c ### */ X+ #undef canseemon X+ X+ boolean canseemon(x) struct monst *x; { return canseemon_(x); } X+ X X /* ### o_init.c ### */ X #undef dodiscovered X*************** X*** 290,296 **** X #undef in_container X #undef out_container X X! int ck_bag() { return ck_bag_(); } X int ck_container(obj) struct obj *obj; { return ck_container_(obj); } X int doloot() { return doloot_(); } X int in_container(obj) struct obj *obj; { return in_container_(obj); } X--- 303,309 ---- X #undef in_container X #undef out_container X X! int ck_bag(obj) struct obj *obj; { return ck_bag_(obj); } X int ck_container(obj) struct obj *obj; { return ck_container_(obj); } X int doloot() { return doloot_(); } X int in_container(obj) struct obj *obj; { return in_container_(obj); } X*************** X*** 398,405 **** X--- 411,420 ---- X X /* ### version.c ### */ X #undef doversion X+ #undef doextversion X X int doversion() { return doversion_(); } X+ int doextversion() { return doextversion_(); } X X X /* ### wield.c ### */ X END_OF_FILE if test 53640 -ne `wc -c <'patch7.21'`; then echo shar: \"'patch7.21'\" unpacked with wrong size! fi # end of 'patch7.21' echo shar: End of archive 16 \(of 30\). cp /dev/null ark16isdone MISSING="" for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 30 archives. rm -f ark[1-9]isdone ark[1-9][0-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0