Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!mnetor!uunet!tektronix!tekgen!tekred!games-request From: games-request@tekred.TEK.COM Newsgroups: comp.sources.games Subject: v03i005: NetHack2.2 - display oriented dungeons and dragons, Part05/20 Message-ID: <1888@tekred.TEK.COM> Date: Tue, 1-Dec-87 19:39:30 EST Article-I.D.: tekred.1888 Posted: Tue Dec 1 19:39:30 1987 Date-Received: Sat, 5-Dec-87 08:44:16 EST Sender: billr@tekred.TEK.COM Lines: 1644 Approved: billr@tekred.TEK.COM Submitted by: mike@genat.UUCP (Mike Stephenson) Comp.sources.games: Volume 3, Issue 5 Archive-name: nethack2.2/Part05 #! /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 permonst.h <<'END_OF_permonst.h' X/* SCCS Id: @(#)permonst.h 2.2 87/11/29 X/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X Xstruct permonst { X char *mname,mlet; X schar mlevel,mmove,ac,mr,damn,damd; X unsigned pxlth; X}; X Xextern struct permonst mons[]; X#define PM_GNOME &mons[1] X#define PM_HOBGOBLIN &mons[2] X#ifndef KOPS X#define PM_KOBOLD &mons[4] X#endif X#define PM_ACID_BLOB &mons[7] X#ifdef ROCKMOLE X#define PM_ORC &mons[10] X#define PM_ZOMBIE &mons[12] X#else X#define PM_ORC &mons[11] X#define PM_ZOMBIE &mons[13] X#endif X#define PM_PIERCER &mons[17] X#define PM_CENTAUR &mons[22] X#define PM_KILLER_BEE &mons[26] X#ifdef SPIDERS X#define PM_SPIDER &mons[31] X#endif X#define PM_WRAITH &mons[33] X#define PM_MIMIC &mons[37] X#define PM_TROLL &mons[38] X#define PM_VAMPIRE &mons[43] X#define PM_XORN &mons[44] X#define PM_CHAMELEON &mons[47] X#define PM_DRAGON &mons[48] X#define PM_ETTIN &mons[49] X/* The ones below changed to include giants. */ X#define PM_DEMON &mons[55] X X#ifdef SAC X#define PM_SOLDIER &mons[56] X#define PM_MINOTAUR &mons[57] /* last in mons array */ X#define PM_SHK &mons[58] /* very last */ X#else X#define PM_MINOTAUR &mons[56] X#define PM_SHK &mons[57] X#endif X X#define PM_GHOST &pm_ghost X#define PM_EEL &pm_eel X#define PM_WIZARD &pm_wizard X#ifdef RPH X#define PM_MEDUSA &pm_medusa X#endif X#ifdef SAC X#define CMNUM 57 /* number of common monsters */ X#else X#define CMNUM 56 X#endif END_OF_permonst.h if test 1373 -ne `wc -c termcap.uu <<'END_OF_termcap.uu' Xbegin 644 termcap.arc XM&@A&1T543%(N0P`E)24E,`8```P-F@'&>=0*```,+U1`0M)``0@5"2`E4%'P XM8(*'0][`R2,GS1DT=$"@&),"1(P<.&2P`&%$3ADR)-/,0?-P84.$#T'(!!&$ XM#1L04BQBG(.SS)PR",' XM!)DW8^JT*>.&3A@Z:=ZX`>'4))LR87ZB-,,5!)PZ8MBD&5/4(1F5="J*J8-6 XM+0BZ7>$`A>HF#)N1;M2V&/.FS5@Y8](X!E'G)PBU;/*X>)C4(9,T;=+0.0FB XMXD4Z/.F\X?QS9)LW?\WD&8D5I3*ES-OOBL'SIN?;G7T XM6&`9>,"A5V9TA.:52A#ZUP9/6+&(FI)I#(5C`BBJB)9^48&078)FB9&&7G2P XM6)<9JKGA$T^(O<@B'%7A5P<;55'(G7<_C0;)`5LB]=)`+[U04$$,%!302S(Q XMD8004@0A118D5>'$$%0D\803+\%GQH)-=C43J""P\<89>VUF$F5RS$5>&U<= XM=F89G1HETQ)%4'K%$U(0,46M#GU:1JCP!5>1@H?5X<:`:;DQ![`JR#1%%DX\ XM`<442?QJ%'P(5G60L*&B(`8<+(P[1QIZE,&"&7"DP.UZ7:DP[@[P!0B"N>B6 XM0:]21B3!1!'?PK'O08R"0$014PPA11)09+HIM`E(`1<9L2%G'Y(9F8KJ&*J6 XMP:JKE3T5&%RPBL"N"&R5-=M@9I@!%`@BC"L"?,JB=9.;>&2DK$\<*X:2FW?H XMY>9(,<-Q;KHHI^9&9Y^Y^2"\80RX&'SK"75O&63M%P89(Y&%4IALOC52729M XM#0)0Y,GA`GP=EAI71MU")W579:/D%%TVO7$':\O%ZD053#"Q]K9*!5'JJ:G> XMM"I7*/7'XHY8/56&4-#=!`<:>9S+L>(>,\Y3WU7_=P9\<"%X<=#_.>.'Q"JPM"'L.ZV$GB=S4?E4TZ5Z&2^A3$OL6UZGA;DA@=ZB`'9[$% XM-K*20W",BNH`E+!JT2T6P-YLJ/:TJ XMO%O,U42G-3)`L&!"J,(1M(4\A[0--"RB"HM^M(;(W($M+JK;B>+R/3DH[2RL XM(4,='/0CEKFL*T>CE5+TDAJS%`9`!%S-!N.4/J#U[VJ(X:+%>G=%M"@(/DNS XMR0^-8B@%%&0$_X%0'=`#`AX$YR]O<`$:?(`H1>%()M[-*W6B9@"2X036:T4NZ[/*&`+WL1W3\SUEX XMF$O4PTJE/$1B2HJ:@\00 XMO.'%!0VN4X_WW%D&9KHRG_DYW1MK)-!N&E1B9BL0ZQ23%3%QI:#KG$D1*IH& XM,[1RHW;SJ#TE",M[U:%E+_..-=4&'UMR5*0.`>EA0`5*:/6Q(.-4P2?E("YR XMX2M=ZVH73N%UD'D5Q%X_U5=!^O6O@.UK#PV9B;V6%CXT#&PF.1V#P`YE$*FZ XM"`7@FD-/RV6T?`6U(SWH`0ADR82.0%4!"3#)!"N(`K:FX*HRZXH:>WK4@\8$#"-1J@G%M`;!HZ,*^$M!1C:B@!9-1;%I!<`(NN.$$ XM;D7L*"N+`LB"P`<>`8$)3'`0S&IUL6KM+!=`VU?$+D2K*UC!8CGKV1-,]K:: XM72O@F/#;G6[$IV5-5PL@NX(8G'6RH^P#8J4+5[G"TK!X!0%UJ0L:"$E31$E' XM250N0P`E)24K`P``#`VF`=%N3`4```PO5$!"TD`!"!4)("504?!@@H=#WL#) XM(R?-&31T0*`8DP)$C!PX9+``841.&3(DT\Q!\W!A0X0/0<@$$80-&Q!2+&*< XM@[/,G#)R[)QLZ=(@0H4,C2:@@D8EB#EOS-"Y$\8DB#!NR+QX(P<$F3=CZK0I XMXX9.&#IIWK@!X=0DFS)A?J(TPQ4$G#IBV*094]0A&95T*HJI@U8M"+I=X0"% XMZB8,FY%NU+88\Z;-6#ECTC@&4>09B16ER;]S`J<9O/JJ531`RXC)TQ?A&3E85\^M&]G-Y,J7,V^^ XM*P?.FY]S1L*1\\9.&C*LZ:`Y>]4FZ9<)*$]TC1%$9+1C?+8NTR9,FK7_F35& XM1KVU=],8Z[EQAGY5E0'"&&]5%5IS"7P5UEAEG>2"3$PY&`9A:-35WQKZ108" XM57)`5U8>GYEQE1LLKO$?2G>HQE)I")DTAV(#@B";CTWQ-!YN=?188!EXP*%7 XM9G2$YI5*$/K7!D]8L8B:DFD,A6,"**J(EGY1@9!=@F:)D89>=+!8EQFJN>$3 XM3XB]R"(<5>%7!QM54H-I.//F6$8%5A#`C48=2)!=1>=I&GF!QI=FJ4 XM3%-DX<034$R1Q!2V.A0@6W.`JMI&:*0`WZE=(;A#L"K(1$014PPA11)09+HI XMM`E(408==3 XM8?TA^)]^_YW8%(+VG96&4`VC6O!3WQ)KW\0T59M$$A5S;)2A"A0TPG\0UH$> XM"#P$]]<;+J#APZ$*C(`>FVZ"4.ZY'@D]]LN"#!`/>RG%AV+H+(*,-OP XMLPKLT=!,_VK$L@\@G)##"2#PP4?#2-<-PPD=N:U``B:!*RX*Z[9;1`ILC]H' XM"&6PX9G@A'\;KALH7+UXXS/U49#G"@`:"$U!2T5&24Q%`"4E)24"`0``#`_/ XM`X4;:@$```PC&BAH\H1($28)>B1`(W"($29!CDQ)F*!%&Q(H"!IDD@)$"R)- XMIA!Y,L4C$2)'EGATTL*C%H]+6K9XXO%."SARWM1LX>8-&8$!%5"9\J2*E"%% XM2BJD4V8.'3ICX+@8`T(@$Z)&D2I-0.=,&:9NZ$P%T?6K&39ASHPM2\=-G39K XMO=)Q*B?N&SIOQG(1F(`KG#ISQZ:90R;-F31BJ9J1RZ;N&*`"J3P1HJ3(D*$@ XMEC9]&M7%&S%JK$ZN?'DKVS)A/8,F*_=L6M5J6']U"_=S;+9T88/8JZ!OU[MY XM;9/]&UCXX,*'Q0I?_+4Q;,@*F,IIPR:-&!?5Q8#0D0`CD]&6AZ80"!H(5$=% XM5$5.5"Y#`"4E);,/```K#Z$Y$&">'P``#"]40$+20`$(%0D@)5!1\&""AT/> XMP,DC)\T9-'1`H!B3`D2,'#ADL`!A1$X9,B33S$'S<&%#A`]!R`01A`T;$%(L XM8IR#L\R<,G+LG&SITB!"A0R-)J""1B6(.6_,T+D3QB2(,&[(O'@C!P29-V/J XMM"GCADX8.FG>N`'AU"2;,F%^HC3#%02<.F+8I!E3U"$9E70JBJF#5BT(NEWA XM`(7J)@R;D6[4MACSILU8.6/2.`91YR<(M6SRN'B8U"&3-&W2T#D)HN)%.CSI XMO.'\"JY4U$QMOA('28&:8`=2)-H)`5F`LQKEC&9FQ XMF1Y0J37&1J=&R;1$$91>\8041$S!JT.KR='&&&'`<5@=;@R8EAMSP$?8F:JQ XM2-ZU;E9K%*,@3)&%$T]`,442QGZK5(`^@OHJ"F+`P4)C8Z4`'X)5'13O#O>N XMUY4*]);!K[H'R41$$5,,(4424&2ZZ;$(%8%'8&$,&!MRKI8E1ZQU)9OK9CP$ XM[,-AY+4!I(,>,^LLFV_!5Z"2%>NG&EMKJ><@OM`-N"JJJG;%0[P^;"A3$ADY XM%5:*KX;F\AQSB)7>>AG%RQ:5&448G$EAA+<,,7%?E]6(GNXI'?DSWJ[?.U(9`?'51@+7L4T6)6S5J-Z?:OM[*L;WXO5?8D[ XM:(9)K$&+UDV.W>3\@]U3:15E;2A9AG2D$XP0%>Z*RNQ:G?]EDLXH_4CJ&VO0 XM?!7;;]V.W-P)0MOBRF"&#[$A(RAXP?G&\`+G=<1VZ&&3&_YSAA=ES#SD<0.& XMZ``?.U1%,WFY6?=80X4B2*$)0P@"%'PTF\Z1C4[J"5B+^H8>U_W&4[I;&\O* XM(#2F.&5V/S'#G0Y3%_0,Y@QGH*!]RG"'LE7$)^ES"+E*J(.^P1`-,FQ"%:9` XMA>HE<2W+0\/^3O""$^0M9\F*XI9.]X:1I&%L&`M.111D/->=070L!$$)3YC" XM%7ZE1*KSXG]8I1Z7@8",9BS0&_M&%@RJ98,@\&!%PA!"/9JP"6(Z"X+T$[(P XMC&5D-G.#`)\B'#K&Q8YX_-$>4:C"J3U((EFJ7POKD*I5_0P.(X//?X(#%Y2$ XMR22F4F(8?)3#E;5-C0D`EQ2*0(4J2,$)Z3H(?%H0`YDLDFS?VR'XW$"]SDF$ XM+">!#PA@8$T7F0AZ5JI9,?GGH/[089,\Z>0GQ5E-MK@(2123EF&`JUU*>P:YX7:L" XM1A#!_SB("E*H0DACP-;"NHDD01AI2&'06`(:%@1"J((1SJ6%Q6:-!BT)"$V8 XMYC24N$X/5KWGQ("BJXK6\E]JK:P$'42N+Q@A"4PH0@)`0,W0JJ`GGPL=:Q;Y XMOA-DY)MKT:8*U$I8RSZVMD5P`F(I-4[?`A=T>"0N5HS+MJQ<]"#,=:R#IE"% XM(0P!85.820RL*X7S87>X]]08QZ#ER_PM5[:71:RE4EA"(BB4O>X5+DH6B4XB XMTK>B&90(4O2.$)3^BB")SG@C&X XMP0PB>(AH91C&-UCTBJ\LGUI>Q6"#D`2W(54!713C!CB@(`4#&T'&K\DZ`5L7E1"E@4;T"@;F*4`4B/`$$0WC"P4HGA#)\L5WG XM>Y4X9U($Z'BF2G8QB7E.0 XM_@GMF:A:/3_D28&=<@>HG.VD_X0G2G>_&3GYK1VF:Y4EY^TE!QD-^%:C"[BOZN XM>,W+DV6PEP*\K()]E?FW4"!UAN8VR]=J)`:?/:.8_M,1+E,]8&2V;M9+G4>/ XM_6V-UE4G5G]8#:2F;"P%`-YC&( XMF98@./R^!F]/C:!@[Y'O+AG^WC9XP2$%'>G!X9V0^([870$)6"0*"@^"$(R^ XM]"`X_;!E8A)CHP#9(Y\"D`N2@#ZXBN.QYSVJ:X]=%%0;Q[M'?1\H[_LR`%_V XM,^_?Y4'%!CEXG@69W6P2.LN"O8,^^*A'M>K/H#I\73]@WY=]`LP`H>^4X?*? XM']A#5!^O+#=A[PC<3RZ=\O$=\H6-\.;=SDY)\J+:!&VAG>%8PJ29=)N0$ XMD54IE^(PG*(^ZS,B?.(Z(=11(/`KP3(LQ5(Z XMI=9:0A0M#Y5Q-9@5-]AQ7!4NXU(NYQ)-6V)R>W%CN=5W-@AX\2)U#D%UDW>% XM!Y,P"],PFC*#TJ0404`'JU$^L)%'I+)1'N)=/QAPK*9#Q]15SC8;"4(&;R&% XMG:%$9--(:9!!D+1*?015PG0Q'C(@=;`9E@8?*,`Z)V`X:,`B4K,>L=%">T@S XM=Y$1=`(=8Y$L*:!&\*%JD-A*3B%>O"9(U$)(8C1,B'1&>P-`#KYO$X:,,>\E0&(^-.\,1(;N!( XM&D1CD@1"_;-*\*B"F74$7`@?'6(51@,Z)E$63F(BOH:0#M(T5C%S"+)JS0@' XM\*%-"(=6[*%-3@&4IE4D$W4G3@*8+0%QQ@:$0J)U:41P+[=M XMPH9JWM:4@0E'R>%*P[1*%]2(CZ26<%N+@*:&HD<\20R`4EP_281+!*+ XM*[26=/0CEK9L#V%S:T%Z3,`$1-05)K)#NHF904>9QWF90+=R,9><";6<,*<4 XMJ/8$/&9A!62..MEJVE0@'K@6.F*.*.<0+^>5-*<^L:4`7AA3>2>&5$B&GU<0 XM:`@'`W-ZJ+:>.L9W.H9<@4=Y5.=X(P$P_GD0[6,'^RE8XNA3&"A!HBA&BIZAP20?,`'!Q&B_\<%7#"` XMX#=_"`I_F;=C9*&@+"`"!"?"C*&"?*0"E XM\C>D!2BD)C^9=A&]9A'Q9B(V&C.%J`W7D8\LE[SN<9 XMJB>I1,1C*&"I2M9A>;>I-PIZG@IR>R=_HVJ%#_&IE.ICJKIDF4H%KBH"(X&F XM%5:KE/>CE)JJ2':I3)9;-?JJR2=D9$%D"G""4PDN2<""S_2"1K!?,E@ZY/=. XMZS$3JW$U/_(3;F-P>>J-=3$KM1)+.OEVNW*%XD(NYH(NWEI^ZW%^4&>&"!&? XMB]>O_G(0:&>$:Z@P#-.M-$@%/G&'Y5H&Y\J19C-(HB8UJZD?S`BO\,&N;^2N XMMA,P0L.;/*%?(;5(J^E*Z+$:]#,2&B99\*$Z_U,C?1*5"H""5*EG'W65@"9H XM14!H_+@6WXHO8.DB#MDUA.-*Y`-).-.+KRELO`E9DO44K^,@:^8?6;$J1H,= XMBB:=C,9Q;CE!:.$8:8!:]J&,<_`^HU9JRQ81Y=,@8SL6+W*/7J<]9S)DG]$5 XMJ3$'J[ELJC95Y_&NC?&G<%(70<4\,E0@HF:;9R"%!MBT(@NU0[D_)8MPL985 XMV,:URBD39N5=;C(QJ6,=,I2T12NQM-0SRX9JJD8]=>,8R?*W#B)#/Y&*#'=I XM1)LL!->T*_M1C@L[)G(;5A$PH\@UM+(&I;NUWW:72[&P2\2YA>M=G_J=!Q2> XM,&&?_%F^/;9X XME(>A4B.B)S`"+"I[/WJ[14""&OA[1<@J_>_(LIZ)F`"`NLL XM.@I[>]!C*[`".Q`[$;P#0HJA!OQZOPD"":P1K">B.PH"):HOAO=_?&!&(_S! XM_Z<#`^BA$FA[(MN`1.H@LH=J`^S!4M/`&]S!K#>A)\#"'*S`/6S"]1LO%QTZ!?%&NBFS%<0&P@:"%1'151& XM3$%'+D,`)26S!```%0^2N_30_P<```PO5$!"TD`!"!4)("504?!@@H=#WL#) XM(R?-&31T0*`8DP)$C!PX9+``841.&3(DT\Q!\W!A0X0/0<@$$80-&Q!2+&*< XM@[/,G#)R[)QLZ=(@0H4,C2:@@D8EB#EOS-"Y$\8DB#!NR+QX(P<$F3=CZK0I XMXX9.&#IIWK@!X=0DFS)A?J(TPQ4$G#IBV*094]0A&95T*HJI@U8M"+I=X0"% XMZB8,FY%NU+88\Z;-6#ECTC@&4>09B16ER;]S`J<9O/JJ531`RXC)TQ?A&3E85\^M&]G-Y,J7,V^^ XM*P?.FY]S1L*1\\9.&C*LZ:`Y>]4FZ9<)*$]TC1%$9+1C?+8NTR9,FK7_F35& XM1KVU=],8Z[EQAGY5E0'"&&]5%5IS"7P5UEAEG>2"3$PY&`9A:-35WQKZ108" XM57)`5U8>GYEQE1LLKO$?2G>HQE)I")DTAV(#@B";CTWQ-!YN=?188!EXP*%7 XM9G2$YI5*$/K7!D]8L8B:DFD,A6,"**J(EGY1@9!=@F:)D89>=+!8EQFJN>$3 XM3XB]R"(<5>%7!QM54<9,R$96!@]BO'&&Q&NM9H<;8P1!AP/SAJ& XMF6CFT:E1,BU1!*57/"$%$5/LZM"KLE`!^"51UTW@[+RD1$$5,,(4424&2ZZ;()2%$&'77(X09/5$A111%LN;AC XM&9FQR=IY;`FI(UD9_>FRZ"4*^^WH4,L__.6A$ XMQ1>#`$/(_?(,0A-3$/%$M2-X54;/#LZ(Y%.!(2@'TV3E=J@"I@*U%KA=J?`% XM'6/`,9@9.SP4T,\,RTIKQ"R^;090=KT1(-\J?)RH`HOR"H*T150A-0A#/'$N XMO$*4<8;"G\Z;[1GPS01"$FZHIIE>>CCHW=]=_:CQPK#:#0+>(.@-E`N9SW1% XM4V\!F5S!5QV6)1LH_3AD?G/,`5\"4\A(:WE\GRXP[T^502=TLG6%-JJOPJY4 XM`DFXJ)Y33IW.^AT.4E66[6X,KWGVJY[G(9R&P%V!QJ+&Y5\?[[SUK@5T XM$>;/5`0;/QG>_>AE+XI9C'_7TUP1LM*OX2T0)>^+G4P>>"+:E4&"/2'@6HYV XMP*OPA&#END<%;"D";N,A`+@7LH2$SD:$*Q`"' XM&FJN;`74H=;P@((4U!"',N$A"'H`@K6U[6T^G,D=+*@1%"B1B4.T(AQ8<`(= XMG"`%'0D!$YU0!28PH2,W5$`">+B"%=0P`>_3R`[AT,8E8I$,6X!!%T!@`A,< XM1(EB!`$9SP,DC)\T9-'1`H!B3`D2,'#ADL`!A1$X9,B33S$'S XM<&%#A`]!R`01A`T;$%(L8IR#L\R<,G+LG&SITB!"A0R-)J""1B6(.6_,T+D3 XMQB2(,&[(O'@C!P29-V/JM"GCADX8.FG>N`'AU"2;,F%^HC3#%02<.F+8I!E3 XMU"$9E70JBJF#5BT(NEWA`(7J)@R;D6[4MACSILU8.6/2.`91YR<(M6SRN'B8 XMU"&3-&W2T#D)HN)%.CSIO.'\"=+@AUDQ(!A9&CZ)> XMMM=G$C4&V,$08<()`56!Z=&B73$D50>L434A`Q1:\.K29'K;?" XME]]A=;@Q8%INS(&L"C)-D8433T`Q11+'&N4IJ*FB<%X*SJ[7E0KG[7"M3$04 XM,<404B0!1::;7IN`%&7048<&OD=U!I1@@9P2663>E*L9B(]W1%(+PO7S&?R?: XM"`(,+EQKJ`(%C?`?A'6@!P(/P?WUA@MH;*R`T-*R4;2#2`NG(--.CW`Q>BXV XM,0413X2K-=?_.3@CDD\%AJ`<0>>:51IF'*I`J4"MA6!5!WU!QQAP#&;&#@\% XM!`(5M"[L]JX@^&T&4':]$2#C*OR XMEB4;*/TX9'YS6*M4`E/(B&MYC-NN?!G,/U4&G=#)UM7=T`WX.WP)).&B>DXY XMI?WN+-[A(%5E&>\&^JFK;_SAO"-OWQL$$IBJQF`_].VK7_]ZE7^D9A6#2:T, XMP'-(`E)7!#;\Q("K:YUCT@`[$#@083Z:#>S($T&8I,]%+F.]"S4"MQ<;G=;'!0PI94\((U3!T.";1#L?3054#T XMS(]BP#,#%B$K%S/@\,YT.^18Q2EA$"#!"$B^4RG+@*D+0A/;\,0N.NB#$+0B XM%F7&10/RRU\`\^#!XC@]"F(1;NB[(DH`&;R9"/)$Q"L#ZF9RQP0>9H'_>N,> XMBWC(TH5*+#Z3FR7+=:Z"D.\@[2K('AHRDP#I\8$C$4,0W660F7Q2!6*``RM3 XM1[<\OO)L>$!!"EA)2IG$$@0]`('>^.:W6L',+,>A"-PMB0YF8$P7H!($]\E*BI0ZD*@OG3E49U XMCR!803"9JLX6@.`$,?WH-Q/0!Z)J-($H@*-8"PJ"LG[3K2'MY7XVVM$8B-6M XM&@A41T544U12+D,`)24E&@T``!4/KKM7,\,9```,+U1`0M)``0@5"2`E4%'P XM8(*'0][`R2,GS1DT=$"@&),"1(P<.&2P`&%$3ADR)-/,0?-P84.$#T'(!!&$ XM#1L04BQBG(.SS)PR",' XM!)DW8^JT*>.&3A@Z:=ZX`>'4))LR87ZB-,,5!)PZ8MBD&5/4(1F5="J*J8-6 XM+0BZ7>$`A>HF#)N1;M2V&/.FS5@Y8](X!E'G)PBU;/*X>)C4(9,T;=+0.0FB XMXD4Z/.F\X?QS9)LW?\WD&8D5I3*ES-OOBL'SIN?;G7T XM6&`9>,"A5V9TA.:52A#ZUP9/6+&(FI)I#(5C`BBJB)9^48&078)FB9&&7G2P XM6)<9JKGA$T^(O<@B'%7A5P<;55'(G7<_C0;)`5LB]=)`+[U04$$,%!302S(Q XMD8004@0A118D5>'$$%0D\803+\%'QX*P!383DH&%T6-P%2GX8!ATFHDFBV:0 XMUX:/0+4Q!JL@D!58'IT:)=,215!ZQ1-2$#%%KPZM)H>MK"*K@DQ39.'$$U!, XMD<2Q1L&'8%4'?5I&J'*@3N@RZT**I3;;K:^@D!$$5,, XM(4424&2ZJ;,)'/%M;,@])9RJM[9ZIFJPUL7#>3Z(AV=FJJK&EAN>%CR8&68` XM=55&\9H4!F]9746&'5A1?,9!Y?HXFWCJ;FW@0B/*98>3E8'!28;2A9!DCI>&B>@[29=,;-2+,:LX+?TFE2?#]!Z2#RC(+QV%GEJ$#P`EH XMH44/>J2M!WP)9)%%#WE`8@#;5US1PQUX`\ST6G,4F=\<BQ/1A;SP=]^Y7\>Y[5S^> XM_J+E!:N7AAQDP(>\[;CK[GR&T,^F^H8@./%&<>JQ!Q>"Q!^\LE-NW'E3U_^= XM=1)O5WM8^Q`&IWK&'$`+'4*&D"Y3*4M()LD/>E"RG*VMBCP9V19T!N0Q%'`A XM!C.PP;F4TB`QL4HQ*`G0;"Y'F13YQ#M90=R#U!*8S#VH@!240P`=(K2N$,UH XM;Q%>]>XP&PD:T&,_B4,=R)(?$'@A""`00QDH,Y8YP&=W@5/06U98%O*PH05( XMM"`,8!"#CO@PAC/!*4HCPC4#8H.BZ(09>\!($ON0@#86JDF,>$XQCD XM2*AG.Q]8$9\Y2'G=&R4X;YD1 XMATH3G3&0J#$_62:-EE*A7""#2D%@SH^JE`SKK(J92B4'%OGS26=0#4KQ`,U> XMXL&:,T$!5_[2F)K29*+S=):A%%"0$?P'0G5`#PAX$)R_O,$%:/!!4Y_*AJ@Z XMB*KNPZI6%3`"MI@!/2YJPA2(\`1LE16M_W'0C)#4/P29DJRY2J$9#J4`4@%E XM+1(\R!?H,`8X;&P'#PD("*A0JX3E=5=)K`/'/`8S\!UDJ8E2P*+J5:TB5(&M XM(!C"$^X%,"&4(:=K\1:XX#,3$"0!D6AQ#"R_A\8?7:YKCM6543L'E#`FH+57 XM:,H4F685I^R.365@@^5>1IZ_.5$I"9B"C+Y6GM\5#+G*?4H9Z`0=V73EF[Y- XM0!*6%J0T.E"W++J#@ZA2EJUA#+JM'>]YJV@EGMPGDNYS+]L2((5O9=0)56`" XM$\+;VB*PX2?[I8**YN"Y_JFP0'*@PUHJJRP"SZ0()5,:VS`K?4K\W:<%22A(`5()G*Z#H(>RJ#GR?,:LDR,S%(0#+:PA]7RB42L XM$11PN0<70P\>S`P'%IQ`!R=(04="@.84,Z$C0E9``HR\@A7,*P%*TX@*^+P" XMEJ+Y/%N`01=`8`(3'(3+="Y?@)G`:$'X+1W*'`SE`.=6O[D*L#.VC6":BU&U!09=R4 XM@M)YUH!T<[L9@\BDR0X@0I%D((3@D!I(U@* XM4YKBE``KM$1CSZ14;F`P$/.;,*J]:B3%)NK*^JB8Y]JR7M&:5K6N!;#@G&4O XM&J5RNZ]LY&2;RUWJ,C*2$>)C>3E+)O?*U[[ZE>[6+=AS:G2PU!1V;\Y\S;8% XMHUE&WGP"B)=R)-21G_!&J#')-IC"Z9G->C%SN/ZJA XM)'Q0UE4'A0GHTV.9R,Q;!SB0P7[+I:W,'*CRJ]P,3SH#`1O`QGGQ#:T1:AM*?56KY'_.&9O#;ILE6D`^$M XM[\3T#GR^!2Z9B2M7*@'(#7>)(`S1^!:II'Y(SF7;%&I$6#0\_F+9-VD,V3:$ XMN#@(7T,(`A2*4$N8M)8("_=0R?#0X,OQ.Y:`=$GY86$R(00BLP;LYWZ]]VU2 XM\`2.8@194'\Q,1,14469HS0L4B#\EW;V02KJ5V%LTUI!<#(IPS4U-UG.]SP$ XMF'<'R#;X9P8?P@9T((&B)A-8T&"[PT9Z](&]M6$E,P?DQS[%)Q,L=@`:^Q6+#!V-,I0`&AQ\)IP+# XMAVSEHF-3=FGS4G$B$V1B)F.%-1*#=DA1)A,R]A5?0$98QE>M55A=!G25.&9A XM(VB05F>3IFJFYFIP!FIZ!H2J@2"E9F2L&!\*Z$M<\&:Z-A-GYA5OD(FAM!&L XMQ@)])HO,IHL'^&>WXADGX`6XJ&>MI0*%E6EHI@+#^#6.!DPW4(Q;QFK:F$3' XM&&IH%8,SF(LR`8VL]HF$UHUB\(UZ%FW-)FWE&(V%9HH"%HIB<$B?:''P*'5P XMT66%%8K4=H]N<&W9=GMXYVW@)F[D5BF7XB_JYG<(@8EDU%K@]R8O@DQ^1'R`+_<6T.(6->.''QD8C_,7%XEW'ZPB\."3!0 XMT%QOPB!K\7_:%4B8Y"`XEW4[IQ3_(3QRYS^#E]TP8KR&*($8(SH6!8T7P.U)G15YD&YAF!]DWFI34F XMT1]?HQ>Q(YBBTUJD&6_]5S"Q^4'RM'T].)@R,8(H$Y0.]!_IUY5J,8"LI9J^ XM)IK0M)0)%\$NI)`;.9`;CY`;V)`<,10=<0`FHC_*&9*!E@PV61K XMII*C4C-_=3$9H1)_D5-TL(E_V%JDMBYK@6K6)FNA1FHP:A&J46HI.8N=:'YH XM!@/=&"<;87KM=:0[L$(*(TO]&>\EERLZ2(H`(Q=-E=K)I^` XMP0):.F?T>&<\ZHPS0:>$8:?4N`(CJJ@R\1]]AJ>]YAFS]HQU.H\'0:E^YFS0 XM)F;4EI+S$FT:"%1'3U1/+D,`)24E)27`"P``%0_CN[A9(Q<```PO5$!"TD`! XM"!4)("504?!@@H=#WL#)(R?-&31T0*`8DP)$C!PX9+``841.&3(DT\Q!\W!A XM0X0/0<@$$80-&Q!2+&*<@[/,G#)R[)QLZ=(@0H4,C2:@@D8EB#EOS-"Y$\8D XMB#!NR+QX(P<$F3=CZK0IXX9.&#IIWK@!X=0DFS)A?J(TPQ4$G#IBV*094]0A XM&95T*HJI@U8M"+I=X0"%ZB8,FY%NU+88\Z;-6#ECTC@&4>09B16ER;]S`J<9O/JJ531`RXC)TQ?A XM&3E85\^M&]G-Y,J7,V^^*P?.FY]S1L*1\\9.&C*LZ:`Y>]4FZ9<)*$]TC1%$ XM9+1C?+8NTR9,FK7_F35&1KVU=],8Z[EQAGY5E0'"&&]5%5IS"7P5UEAEG>2" XM3$PY&`9A:-35WQKZ108"57)`5U8>GYEQE1LLKO$?2G>HQE)I")DTAV(#@B"; XMCTWQ-!YN=?188!EXP*%79G2$YI5*$/K7!D]8L8B:DFD,A6,"**J(EGY1@9!= XM@F:)D89>=+!8EQFJN>$33XB]R"(<5>%7!QM54,<_YWQE'`*'D9>&P_B.D88=)J)9AZ=&B73$D50>L434A`Q1;`.K29' XM&[O"P:P*,DV1A1-/0#%%$LL:!1^"51WT::AO;-0&"^@%1]ECZ3;Y7QDI?+M> XM5RJ,T<8.\`7HE4]TK(NO4OJVJY>;_Q[$*`A$%#'%$%(D`46FFTZ;@!1ET(&J XM&SR%E6I=K+KZ9JRS5J3@2.A1AMYR@P.^Z('&'A[UATQLUUOI3''60E1]/G8'I)EMNW$6@ XM'&>(118=(Y5A(U!%O_M95SZWX09OIBH91GXJ7P7'D.-I5MP<>`6G&F%I$0WP XM6NHY^`9A7H<%8U1K]1]/"2201KU*.RY"` XM7B2"\#@(Q#6-F7YLEL$&C>>IY^-L,L#G^`RGIY'ZZJTC=O5A6XP,\-(70/FA<( XMSE?$PJVE8^+;7!._]\3P@:LKHFF>'!)@DA9Z1G*4`YQAPF0TW26@0&U;"PJ, XM-L2G]`TME3N)&]F4JHPL9U]F^!`;Z)`"&#K$<6F(SX?`P[7$,9$G07/:B\C@ XM1J2A<#8^Y-H83`)!#36O!$9,@U!XG*FEF$B XMQS/PK,.^?A(4!]UA/:MIH3QYI1B,Q;)0B%+4EIH`)=GAR4V'(Z7%S&`&A"J@ XM("/X#X3J@!X0\"`X?WF#"]#@`XQJE'P=_2BMSC#2DEY4`2-`#YNVUH0@8$%2 XMM@1![EX:'/YE[XL'^<\.'A*0"69(#MI\D$34Y*+_)&YF(/-.@%BI`D,IH*?X XM226]#D>'H2:@J%!XPU1Y-ANN)JXJT&%150N"U;UP[6MGF,,6:GI3*=BR"T,M XM:A/"@`?4B,4^8O%A5\)4E;@JCS)`!$I&UGI5LV157W"@3!W*XM6B1F2R&G11 XM8854OS>QAK%M_:D4S4J8+=B`!G@E*K4BDE@7L@:JM6)L0A6P*&&!0%M%J`(1 XMG@""(3PA81(30AG.X+EQI5`I,YD@#F<#6UG]:$CV4YG@#DDQBR'5+F(]JO*` XM0IZN-#>6"4AN$;99!MTEP0VJT8Q>].`@J6KW1T[=WG?-BUZT."8-[,7N6)6G XMHSME9+ZD,T(:^NC`.M+1#8%EY1]E*D@Z@#!8E>:C8@Z_0E%,6SBI.P4JHD,.V>:V2K"6VG^Z2Z\XO XMWKB.81`@@5#IXP&QTHING((O620?%OV(M`[>\4S&^Q,W0J&S+!X375#W17!5/\\4WE)5]V+Z?>]S'6L6Z&L.`6!=\PH*;-2SGQ-4!T7 XMEP>Q:D&`J@+CELM>Z.+7NA(='*.-CM#V^E?`%.TT27_0DF7XUQX:,I,;:L1> XM(.A!#T#@A"HP@0D=V;0"R%BQBZ%`!$_(UA1$D(*"S:0/()"=9U2=`,^-.M(% XM20!70^U*.GCM7V\$FUQAT`5B8QK9F]U"#)H]ZDBR`=F1/=P'1PT#9*?YE"A0 XM@>=",.I2GSK5P4ZNI\,][E&?H`0G0/>J%\+5%:R`V.)V@[V1G5Q",K':O$D1)(&7YD1-H"%?VJ18(]9N)C` XMM:CM6PN3X<56D>S5?6P\`8O&PB/=NF4;L_GBB48Y.39/FIRQ%Z_M062"6]WR XMUK?`_7T"A`OUGF<9/LF=@HS@\!F!6AWQSKKS3*9`=02-\/!%3F(8I,+*$D!_ XM)D.(BX-.0(83,(YT2(_NZM*D&*6V%E:&08'F*O*R4]:(#.K!3FQF-O6E7OAE XM.)P'=W+P8$)@$F&P!@6#$,F5?IYQ`C+@?KH3?V^B.M>4!_6'6"Z7?_]G.S(@ XM@-1%@.EU7_E%9X$'%`SH@!!X?C)!@>LW`Q@(?X['@3[B@2U7>B*(/,MC@C!! XM,?^1@NN%@,:V/2VX@+K3@'`1@\B%?NH'`B?@`B>0@3DH/3OX@:27*H'S@D\8 XM@>$EA16X`C=X2!J8WW?I&3-V5A!@]'&"P@`H\C`BP0;;=7%O;6!1$G;-LS:B8` XM95LP,V_AMW@>*X(R)#!^;(5>E8`C`@`V3`CNXH6?"X XM`O*(;,-FC_BHCV1QCDE(2'CUCP%IC01)A39XD.2HD![9D#`P`Q'9CLJV!>]( XM!_$XCQD)`O?(>?D8&/OHD5Z3`B&Y:@`9AB2YAU8HCBI0;_6;]4HE"-)E0^RAWTHCNNVE671;#X05-LH XM;V,H$VI)!\VV`J,&EBN`;/Y&7B#`:\P8E@E0<0D@E9DX$R5Y`H\HCLY(?4P9 XMDS,9E,D65S))D72IE8Y)F2LP;=!VF4Z9F=3F(_P!C2))E&1YF)THCG/9!8`Y XMEYX)F(0ID&59@:L8;$E)&/9&;.]V`E$YEOU6$!4'&@A44%544RY#`"4E)24E XMW`H```P-2$ZAICX5```,+U1`0M)``0@5"2`E4%'P8(*'0][`R2,GS1DT=$"@ XM&),"1(P<.&2P`&%$3ADR)-/,0?-P84.$#T'(!!&$#1L04BQBG(.SS)PR",'!)DW8^JT*>.&3A@Z:=ZX XM`>'4))LR87ZB-,,5!)PZ8MBD&5/4(1F5="J*J8-6+0BZ7>$`A>HF#)N1;M2V XM&/.FS5@Y8](X!E'G)PBU;/*X>)C4(9,T;=+0.0FBXD4Z/.F\X?QS9)LW?\WD XM&8D5I3*ES-OOBL'SIN?;G7T6&`9>,"A5V9TA.:52A#Z XMUP9/6+&(FI)I#(5C`BBJB)9^48&078)FB9&&7G2P6)<9JKGA$T^(O<@B'%7A XM5P<;55'(G7<_C0;)`5LB]=)`+[U04$$,%!302S(QD8004@0A118D5>'$$%0D XM\803+\%'QUVPS233&X2!^I1P"IYHXU5P##F>9L712<9?"G9JE$Q+%$'I%4]( XM0<04MCJTFAQMC!$&',&J(-,463CQ!!13)`&L49Z".L=&<+`0AAEFC%$6"Z32 XMP1%\"%9UT!AP[`!?@%=QZRT=ZBK%+@HJA,L1"BG$>Q"C(!!1Q!1#2)$$%)EN XMFFP"3Y1*&$_!592J=P&F-]MR#V9+VW]G'%:'&P.FM9:]O&4%'UTVO5%CJJJI XMJAZ0'K9*WJMG.>B&6&(`U:)=8;E+);1D_DS'2'4TAR!9/G9T$7UQ7B7DG6EC:'*=Z#NY(=1ILLJ985U`[ XM**N/J)6Q(0A)F`'?VR#$C3-*E&VP1"_`Y XM2P4(>@#U1M#4*M7A85SUEU&8:)_J<,809XC2CQ2CN[4.!R>PQ=QHC=7%%BIT XMP4/#.__X4U8^Q(YUGA:N59J-JE$M5IDS`$?:YH_MG? XMTL)E*K6QAG1+&U9J_B<_^)"%,NA!R7]`\(+.R.$%_X%0'=#S@CF<@0YI<@$: XM9(("(<"@!4+(@0U@`(,4<&Y?MP*!$*IPA&E!T2%$L$C**.,&H<@!?X9QBACB XM20#3MTT.[H\)?-H2%X"BC("-ABAJR4P45-F`(1GC"M XM_@%E+>X#`0)WT)*`J#)G:GR?S7[4M8/HT91R0&7//F-",K`R`:XL`L=PL[,P XMD9`P3\D@2E2@QX($YRQ[84O1R#>'+70A>2#80T-F`@,6$,655""+>G@2IBG9 XMQ6:IA`$(QKA#6VY3)C)@8C=;J:QPE@4-Y'21.?F6RAJHDYW+U*.H8C"#@GKS XM(>`4)SYOMD]T[O(&-5CGAP+Z3A#D``8Y."@PZZG0?(I)2`XU5PQB\,^)NM,@ XM,[D!#6:@T83>TZ,-[4HJ"4H#B;:3F16U@4Y;RM&7,A2D,MUE#/QI4XJB5";^ XMG"=">SK.GYXSJ.:*9TEO*M"9%)2E]`2!/9M:3J#&$@0S8&)13SK0G69UJPOM XMZE._NL2I&E54.,#J63OJ5'X*5:ICQ>E105"#&FATHUJEJUKM*E(3:4,:'!8D^I55/%L+%/3"MFUII(&AG5K8F5"TF]N%J:1W:42 XM*TO5@O0A7ILD2VX8R4<_'D0FT"I"%48)@B$\P5\'$T(9SC!#.ISA#;*!CZCR XM9KJ=I0Y^3OF/`/6R.N2X87M2*`,BZ(BPO/6UI^;O$4J3VF*5,IKWID$80P7NE/,6-8W XMD]DLOJHAL#"G(X?M!8$,:NA,XXSU%N?Y2+#Z/)->?L+%[&V/N6BSBE/"<)CW XM>6PS;8,%A\S(V;86,?40N@3);H,VZ."BN:0&@(Y6E:T XMRIA)XE"'-/RFO.*,>[+O?_^X(MQ-@DNVZ05\SZ0,( XM!.F9A<<)!=]&WKYAL(.MT=O9<,A7Q5:P`H47Q-)V*;<*]DW2>*$\X\U;P;[I XMY;H6@.`$,#A!OD[>AY/#W$$K]PC'3XYOD.O[YB[0>39/+BITD=SE]W81?>?P XM<72EP.0*>,C/02!SC8"]9`KW.DKV$'/LS[W XM!!3==0:_N0J4OG!1;3WHTGY7V64"=Y?7/>T=IOF-0W!P?S,!ZRB_MK*S_?62 XM&UZ3G/0D*$5)RI-_Y0NPQAC&R9=L<>V\D1//RJ[W.O>Y\W&3;-,\"$(YRFG9 XM5EF5NE3!.-4YO[P!]#F+M:@"@Q56IZQ*?WMT&WDRZUK_)EG+:M:SHF7%+3T3 XM/U[Y?>@5-/JZE7[9#O$VN-=E[7I-OMZ]Q[V_`"8P@FF*]U=$B'X9].K@[ZSY XMMF8-V+['MBQ%;D[E1E_[TU'P44[J1F+8,P+M$>*@B.X XM-06ZQ5N^!5SIEP#"15QK\7G;=P;*-1,HAAPJ1F35T0*90Q[)5VYH]CMDT(;LU17N-41J XM*$M=X3NRE3ZJ5GRM9F>P5(C#TH97AAC;'8R<7$@T'$$^44@L#P<%W8M$)$*6(T/(7FZB$`"*2IU-W<@Z5J8 X&)UNK!QH` X` Xend END_OF_termcap.uu if test 25830 -ne `wc -c zap.c <<'END_OF_zap.c' X/* SCCS Id: @(#)zap.c 2.1 87/11/10 X/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X X#include "hack.h" X Xextern struct obj *mkobj_at(); Xextern struct monst *makemon(), *mkmon_at(), youmonst; Xstruct monst *bhit(); Xchar *exclam(); X#ifdef KAA Xextern char *xname(); X#endif X Xchar *fl[]= { X "magic missile", X "bolt of fire", X "sleep ray", X "bolt of cold", X "death ray", X "magic missile", /* Spell equivalents of above wands */ X "fireball", X "sleep ray", X "cone of cold", X "finger of death" X}; X X/* Routines for IMMEDIATE wands and spells. */ X/* bhitm: monster mtmp was hit by the effect of wand or spell otmp */ Xbhitm(mtmp, otmp) Xregister struct monst *mtmp; Xregister struct obj *otmp; X{ X wakeup(mtmp); X switch(otmp->otyp) { X case WAN_STRIKING: X#ifdef SPELLS X case SPE_FORCE_BOLT: X#endif X if(u.uswallow || rnd(20) < 10+mtmp->data->ac) { X register int tmp = d(2,12); X hit((otmp->otyp == WAN_STRIKING) ? "wand" : "spell", mtmp, exclam(tmp)); X resist(mtmp, otmp->olet, tmp, TELL); X } else miss((otmp->otyp == WAN_STRIKING) ? "wand" : "spell", mtmp); X break; X case WAN_SLOW_MONSTER: X#ifdef SPELLS X case SPE_SLOW_MONSTER: X#endif X if(! resist(mtmp, otmp->olet, 0, NOTELL)) X mtmp->mspeed = MSLOW; X break; X case WAN_SPEED_MONSTER: X if (!resist(mtmp, otmp->olet, 0, NOTELL)) X mtmp->mspeed = MFAST; X break; X case WAN_UNDEAD_TURNING: X#ifdef SPELLS X case SPE_TURN_UNDEAD: X#endif X if(index(UNDEAD,mtmp->data->mlet)) { X X if(!resist(mtmp, otmp->olet, rnd(8), NOTELL)) X mtmp->mflee = 1; X } X break; X case WAN_POLYMORPH: X#ifdef SPELLS X case SPE_POLYMORPH: X#endif X if(!resist(mtmp, otmp->olet, 0, NOTELL)) X if( newcham(mtmp,&mons[rn2(CMNUM)]) ) X if (!Hallucination) X objects[otmp->otyp].oc_name_known = 1; X break; X case WAN_CANCELLATION: X#ifdef SPELLS X case SPE_CANCELLATION: X#endif X if(!resist(mtmp, otmp->olet, 0, NOTELL)) X mtmp->mcan = 1; X break; X case WAN_TELEPORTATION: X#ifdef SPELLS X case SPE_TELEPORT_AWAY: X#endif X rloc(mtmp); X break; X case WAN_MAKE_INVISIBLE: X mtmp->minvis = 1; X break; X case WAN_NOTHING: X break; X case WAN_PROBING: X#ifdef PROBING X mstatusline(mtmp); X#else X pline("Nothing Happens."); X#endif X break; X default: X impossible("What an interesting effect (%u)", otmp->otyp); X } X} X Xbhito(obj, otmp) /* object obj was hit by the effect of wand otmp */ Xregister struct obj *obj, *otmp; /* returns TRUE if sth was done */ X{ X register int res = TRUE; X#ifdef DGKMOD X struct obj *otmp2; X#endif X X if(obj == uball || obj == uchain) X res = FALSE; X else X switch(otmp->otyp) { X case WAN_POLYMORPH: X#ifdef SPELLS X case SPE_POLYMORPH: X#endif X /* preserve symbol and quantity, but turn rocks into gems */ X#ifdef DGKMOD X otmp2 = mkobj_at((obj->otyp == ROCK X || obj->otyp == ENORMOUS_ROCK) ? GEM_SYM : obj->olet, X obj->ox, obj->oy); X otmp2->quan = obj->quan; X /* keep special fields (including charges on wands) */ X /* The DGK modification doesn't allow polymorphing a weapon X with enchantments into another one, and doesn't allow X polymorphed rings to have plusses. KAA*/ X if (index("/)[", otmp2->olet)) otmp2->spe = obj->spe; X /* Amulets gets cheap stewr 870807 */ X if (obj->otyp == AMULET_OF_YENDOR) otmp2->spe = obj->spe; X /* Wands of wishing max 3 stewr 870808 */ X if ((otmp2->otyp == WAN_WISHING) X && (obj->spe > 3)) otmp2->spe = 3; X otmp2->cursed = otmp->cursed; X /* update the weight */ X otmp2->owt = weight(otmp2); X#else X mkobj_at((obj->otyp == ROCK || obj->otyp == ENORMOUS_ROCK) X ? GEM_SYM : obj->olet, X obj->ox, obj->oy) -> quan = obj->quan; X#endif X delobj(obj); X break; X case WAN_STRIKING: X#ifdef SPELLS X case SPE_FORCE_BOLT: X#endif X if(obj->otyp == ENORMOUS_ROCK) X fracture_rock(obj); X else X res = FALSE; X break; X case WAN_CANCELLATION: X#ifdef SPELLS X case SPE_CANCELLATION: X#endif X if(obj->spe && obj->olet != AMULET_SYM) { X obj->known = 0; X obj->spe = (obj->olet == WAND_SYM) ? -1 : 0; X } X break; X case WAN_TELEPORTATION: X#ifdef SPELLS X case SPE_TELEPORT_AWAY: X#endif X rloco(obj); X break; X case WAN_MAKE_INVISIBLE: X obj->oinvis = 1; X break; X case WAN_UNDEAD_TURNING: X#ifdef SPELLS X case SPE_TURN_UNDEAD: X#endif X res = revive(obj); X break; X case WAN_SLOW_MONSTER: /* no effect on objects */ X#ifdef SPELLS X case SPE_SLOW_MONSTER: X#endif X case WAN_SPEED_MONSTER: X case WAN_NOTHING: X case WAN_PROBING: X res = FALSE; X break; X default: X impossible("What an interesting effect (%u)", otmp->otyp); X } X return(res); X} X X/* X * zappable - returns 1 if zap is available, 0 otherwise. X * it removes a charge from the wand if zappable. X * added by GAN 11/03/86 X */ Xint Xzappable(wand) Xregister struct obj *wand; X{ X if(wand->spe < 0 || (wand->spe ==0 && rn2(121))) X return(0); X else { X if(wand->spe == 0) X pline("You wrest one more spell from the worn-out wand."); X wand->spe--; X return(1); X } X} X X/* X * zapnodir - zaps an NODIR wand. X * added by GAN 11/03/86 X */ Xzapnodir(wand) Xregister struct obj *wand; X{ X switch(wand->otyp){ X case WAN_LIGHT: X litroom(TRUE); X break; X case WAN_SECRET_DOOR_DETECTION: X if(!findit()) return; X break; X case WAN_CREATE_MONSTER: X { register int cnt = 1; X if(!rn2(23)) cnt += rn2(7) + 1; X while(cnt--) X (void) makemon((struct permonst *) 0, u.ux, u.uy); X } X break; X case WAN_WISHING: X X if(u.uluck + rn2(5) < 0) { X pline("Unfortunately, nothing happens."); X break; X } X makewish(); X break; X } X if(!objects[wand->otyp].oc_name_known) { X objects[wand->otyp].oc_name_known = 1; X more_experienced(0,10); X } X} X Xdozap() X{ X register struct obj *obj; X int damage; X X obj = getobj("/", "zap"); X if(!obj) return(0); X X /* zappable addition done by GAN 11/03/86 */ X if(!zappable(obj)) { X pline("Nothing Happens."); X return(1); X } X if(!(objects[obj->otyp].bits & NODIR) && !getdir(1)) { X pline("The %s glows and fades.",xname(obj)); X return(1); /* make him pay for knowing !NODIR */ X } X#ifdef KAA X if(!u.dx && !u.dy && !u.dz && !(objects[obj->otyp].bits & NODIR)) { X X if((damage = zapyourself(obj))) X losehp(damage,"self-inflicted injury"); X return(1); X } X#endif X weffects(obj); X#ifdef HARD X if (obj->spe < 0) { X pline ("The %s glows violently, then turns to dust.", xname(obj)); X useup(obj); X } X#endif X return(1); X} X X#ifdef KAA X#define makeknown(x) objects[x].oc_name_known = 1 X Xzapyourself(obj) X register struct obj *obj; X{ Xstruct obj *otmp; Xint damage = 0; X X switch(obj->otyp) { X case WAN_STRIKING: X#ifdef SPELLS X case SPE_FORCE_BOLT: X#endif X pline("You magically bash yourself!"); X damage=d(8,6); X break; X case WAN_FIRE: X makeknown(WAN_FIRE); X#ifdef SPELLS X case SPE_FIREBALL: X#endif X pline("You've set light to yourself!"); X if (!Fire_resistance) damage=d(12,6); X burn_scrolls(); X boil_potions(); X break; X case WAN_COLD: X makeknown(WAN_COLD); X#ifdef SPELLS X case SPE_CONE_OF_COLD: X#endif X pline("You imitate a popsicle!"); X if (!Cold_resistance) damage=d(12,6); X break; X case WAN_MAGIC_MISSILE: X makeknown(WAN_MAGIC_MISSILE); X#ifdef SPELLS X case SPE_MAGIC_MISSILE: X#endif X damage = d(4,6); X pline("Idiot! You've shot yourself!"); X break; X case WAN_POLYMORPH: X makeknown(WAN_POLYMORPH); X#ifdef SPELLS X case SPE_POLYMORPH: X#endif X polyself(); X break; X case WAN_CANCELLATION: X#ifdef SPELLS X case SPE_CANCELLATION: X#endif X for(otmp = invent; otmp; otmp = otmp->nobj) X if(otmp != uball && otmp->otyp != AMULET_OF_YENDOR) X otmp->spe = (obj->olet == WAND_SYM) ? -1 : 0; X if(u.mtimedone) rehumanize(); X flags.botl = 1; /* because of potential AC change */ X find_ac(); X break; X case WAN_MAKE_INVISIBLE: X HInvis |= INTRINSIC; X /* Tough luck if you cannot see invisible! */ X if (!See_invisible) newsym(u.ux, u.uy); X break; X case WAN_SPEED_MONSTER: X Fast |= INTRINSIC; X break; X case WAN_SLEEP: X makeknown(WAN_SLEEP); X#ifdef SPELLS X case SPE_SLEEP: X#endif X pline("The sleep ray hits you!"); X nomul(-rn2(50)); X break; X case WAN_SLOW_MONSTER: X#ifdef SPELLS X case SPE_SLOW_MONSTER: X#endif X Fast = 0; X break; X case WAN_TELEPORTATION: X#ifdef SPELLS X case SPE_TELEPORT_AWAY: X#endif X tele(); X break; X case WAN_DEATH: X#ifdef SPELLS X case SPE_FINGER_OF_DEATH: X#endif X killer = "death ray"; X pline("You irradiate yourself with pure energy!"); X pline("You die."); X done("died"); X break; X#ifdef SPELLS X case SPE_LIGHT: X pline("You've blinded yourself!"); X Blinded += rnd(100); X break; X case SPE_DIG: X case SPE_TURN_UNDEAD: X case SPE_DETECT_UNSEEN: X#endif X case WAN_PROBING: X#ifdef PROBING X ustatusline(); X#else X pline("Nothing happens."); X#endif X break; X case WAN_DIGGING: X case WAN_UNDEAD_TURNING: X case WAN_NOTHING: X break; X default: impossible("object %d used?",obj->otyp); X } X return(damage); X} X#endif /* KAA /**/ X X/* called for various wand and spell effects - M. Stephenson */ Xweffects(obj) X register struct obj *obj; X{ X xchar zx,zy; X X if(objects[obj->otyp].bits & IMMEDIATE) { X if(u.uswallow) X bhitm(u.ustuck, obj); X else if(u.dz) { X if(u.dz > 0 && o_at(u.ux,u.uy)) { X register struct obj *otmp; X X /* changed by GAN to hit all objects there */ X for(otmp = fobj; otmp ; otmp = otmp->nobj) X if(otmp->ox == u.ux && X otmp->oy == u.uy) X (void) bhito(otmp, obj); X } X } else X (void) bhit(u.dx,u.dy,rn1(8,6),0,bhitm,bhito,obj); X } else { X switch(obj->otyp){ X case WAN_LIGHT: X#ifdef SPELLS X case SPE_LIGHT: X#endif X litroom(TRUE); X break; X case WAN_SECRET_DOOR_DETECTION: X#ifdef SPELLS X case SPE_DETECT_UNSEEN: X#endif X if(!findit()) return; X break; X case WAN_CREATE_MONSTER: X { register int cnt = 1; X if(!rn2(23)) cnt += rn2(7) + 1; X while(cnt--) X (void) makemon((struct permonst *) 0, u.ux, u.uy); X } X break; X case WAN_WISHING: X if(u.uluck + rn2(5) < 0) { X pline("Unfortunately, nothing happens."); X break; X } X makewish(); X break; X case WAN_DIGGING: X#ifdef SPELLS X case SPE_DIG: X#endif X /* Original effect (approximately): X * from CORR: dig until we pierce a wall X * from ROOM: piece wall and dig until we reach X * an ACCESSIBLE place. X * Currently: dig for digdepth positions; X * also down on request of Lennart Augustsson. X */ X { register struct rm *room; X register int digdepth; X if(u.uswallow) { X register struct monst *mtmp = u.ustuck; X X pline("You pierce %s's stomach wall!", X monnam(mtmp)); X mtmp->mhp = 1; /* almost dead */ X unstuck(mtmp); X mnexto(mtmp); X break; X } X if(u.dz) { X if(u.dz < 0) { X pline("You loosen a rock from the ceiling."); X pline("It falls on your head!"); X losehp(1, "falling rock"); X mksobj_at(ROCK, u.ux, u.uy); X fobj->quan = 1; X stackobj(fobj); X if(Invisible) newsym(u.ux, u.uy); X } else { X dighole(); X } X break; X } X zx = u.ux+u.dx; X zy = u.uy+u.dy; X digdepth = 8 + rn2(18); X Tmp_at(-1, '*'); /* open call */ X while(--digdepth >= 0) { X if(!isok(zx,zy)) break; X room = &levl[zx][zy]; X Tmp_at(zx,zy); X if(!xdnstair){ X if(zx < 3 || zx > COLNO-3 || X zy < 3 || zy > ROWNO-3) X break; X if(room->typ == HWALL || X room->typ == VWALL){ X room->typ = ROOM; X break; X } X } else X if(room->typ == HWALL || room->typ == VWALL || X room->typ == SDOOR || room->typ == LDOOR){ X room->typ = DOOR; X digdepth -= 2; X } else X if(room->typ == SCORR || !room->typ) { X room->typ = CORR; X digdepth--; X } X mnewsym(zx,zy); X zx += u.dx; X zy += u.dy; X } X mnewsym(zx,zy); /* not always necessary */ X Tmp_at(-1,-1); /* closing call */ X break; X } X default: X#ifdef SPELLS X if((int) obj->otyp >= SPE_MAGIC_MISSILE) { X X buzz((int) obj->otyp - SPE_MAGIC_MISSILE + 5, X u.ux, u.uy, u.dx, u.dy); X } else X#endif X X buzz((int) obj->otyp - WAN_MAGIC_MISSILE, X u.ux, u.uy, u.dx, u.dy); X break; X } X if(!objects[obj->otyp].oc_name_known) { X objects[obj->otyp].oc_name_known = 1; X more_experienced(0,10); X } X } X return; X} X Xchar * Xexclam(force) Xregister int force; X{ X /* force == 0 occurs e.g. with sleep ray */ X /* note that large force is usual with wands so that !! would X require information about hand/weapon/wand */ X return( (force < 0) ? "?" : (force <= 4) ? "." : "!" ); X} X Xhit(str,mtmp,force) Xregister char *str; Xregister struct monst *mtmp; Xregister char *force; /* usually either "." or "!" */ X{ X if(!cansee(mtmp->mx,mtmp->my)) pline("The %s hits it.", str); X else pline("The %s hits %s%s", str, monnam(mtmp), force); X} X Xmiss(str,mtmp) Xregister char *str; Xregister struct monst *mtmp; X{ X if(!cansee(mtmp->mx,mtmp->my)) pline("The %s misses it.",str); X else pline("The %s misses %s.",str,monnam(mtmp)); X} X X/* bhit: called when a weapon is thrown (sym = obj->olet) or when an X IMMEDIATE wand is zapped (sym = 0); the weapon falls down at end of X range or when a monster is hit; the monster is returned, and bhitpos X is set to the final position of the weapon thrown; the ray of a wand X may affect several objects and monsters on its path - for each of X these an argument function is called. */ X/* check !u.uswallow before calling bhit() */ X Xstruct monst * Xbhit(ddx,ddy,range,sym,fhitm,fhito,obj) Xregister int ddx,ddy,range; /* direction and range */ Xchar sym; /* symbol displayed on path */ Xint (*fhitm)(), (*fhito)(); /* fns called when mon/obj hit */ Xstruct obj *obj; /* 2nd arg to fhitm/fhito */ X{ X register struct monst *mtmp; X register struct obj *otmp; X register int typ; X X bhitpos.x = u.ux; X bhitpos.y = u.uy; X X if(sym) tmp_at(-1, sym); /* open call */ X while(range-- > 0) { X bhitpos.x += ddx; X bhitpos.y += ddy; X typ = levl[bhitpos.x][bhitpos.y].typ; X if(mtmp = m_at(bhitpos.x,bhitpos.y)){ X if(sym) { X tmp_at(-1, -1); /* close call */ X return(mtmp); X } X (*fhitm)(mtmp, obj); X range -= 3; X } X /* modified by GAN to hit all objects */ X if(fhito && o_at(bhitpos.x,bhitpos.y)){ X int hitanything = 0; X for(otmp = fobj; otmp; otmp = otmp->nobj) X if(otmp->ox == bhitpos.x && X otmp->oy == bhitpos.y) X hitanything += (*fhito)(otmp, obj); X if(hitanything) range--; X } X if(!ZAP_POS(typ)) { X bhitpos.x -= ddx; X bhitpos.y -= ddy; X break; X } X if(sym) tmp_at(bhitpos.x, bhitpos.y); X } X X /* leave last symbol unless in a pool */ X if(sym) X tmp_at(-1, (levl[bhitpos.x][bhitpos.y].typ == POOL) ? -1 : 0); X return(0); X} X Xstruct monst * Xboomhit(dx,dy) { X register int i, ct; X register struct monst *mtmp; X char sym = ')'; X extern schar xdir[], ydir[]; X X bhitpos.x = u.ux; X bhitpos.y = u.uy; X X for(i=0; i<8; i++) if(xdir[i] == dx && ydir[i] == dy) break; X tmp_at(-1, sym); /* open call */ X for(ct=0; ct<10; ct++) { X if(i == 8) i = 0; X sym = ')' + '(' - sym; X tmp_at(-2, sym); /* change let call */ X dx = xdir[i]; X dy = ydir[i]; X bhitpos.x += dx; X bhitpos.y += dy; X if(mtmp = m_at(bhitpos.x, bhitpos.y)){ X tmp_at(-1,-1); X return(mtmp); X } X if(!ZAP_POS(levl[bhitpos.x][bhitpos.y].typ)) { X bhitpos.x -= dx; X bhitpos.y -= dy; X break; X } X if(bhitpos.x == u.ux && bhitpos.y == u.uy) { /* ct == 9 */ X if(rn2(20) >= 10+u.ulevel){ /* we hit ourselves */ X (void) thitu(10, rnd(10), "boomerang"); X break; X } else { /* we catch it */ X tmp_at(-1,-1); X pline("Skillfully, you catch the boomerang."); X return(&youmonst); X } X } X tmp_at(bhitpos.x, bhitpos.y); X if(ct % 5 != 0) i++; X } X tmp_at(-1, -1); /* do not leave last symbol */ X return(0); X} X Xuchar Xdirlet(dx,dy) register dx,dy; { X return X (dx == dy) ? '\\' : (dx && dy) ? '/' : dx ? HWALL_SYM : VWALL_SYM; X} X X/* type == -1: monster spitting fire at you */ X/* type == -1,-2,-3: bolts sent out by wizard */ X/* called with dx = dy = 0 with vertical bolts */ Xbuzz(type,sx,sy,dx,dy) Xregister int type; Xregister xchar sx,sy; Xregister int dx,dy; X{ X int abstype = (type == 10) ? 1 : abs(type); X register char *fltxt = (type == -1 || type == 10) ? "blaze of fire" : fl[abstype]; X struct rm *lev; X xchar range; X struct monst *mon; X X if(u.uswallow) { X register int tmp; X X if(type < 0) return; X tmp = zhit(u.ustuck, type); X if(!u.ustuck) u.uswallow = 0; X else pline("The %s rips into %s%s", X fltxt, monnam(u.ustuck), exclam(tmp)); X return; X } X if(type < 0) pru(); X range = rn1(7,7); X Tmp_at(-1, dirlet(dx,dy)); /* open call */ X while(range-- > 0) { X sx += dx; X sy += dy; X if((lev = &levl[sx][sy])->typ) Tmp_at(sx,sy); X else { X int bounce = 0; X if(cansee(sx-dx,sy-dy)) X pline("The %s bounces!", fltxt); X if(ZAP_POS(levl[sx][sy-dy].typ)) X bounce = 1; X if(ZAP_POS(levl[sx-dx][sy].typ)) { X if(!bounce || rn2(2)) bounce = 2; X } X switch(bounce){ X case 0: X dx = -dx; X dy = -dy; X continue; X case 1: X dy = -dy; X sx -= dx; X break; X case 2: X dx = -dx; X sy -= dy; X break; X } X Tmp_at(-2,dirlet(dx,dy)); X continue; X } X if(lev->typ == POOL && abstype == 1 /* fire */) { X range -= 3; X lev->typ = ROOM; X if(cansee(sx,sy)) { X mnewsym(sx,sy); X pline("The water evaporates."); X } else X pline("You hear a hissing sound."); X } X if(o_at(sx,sy) && abstype == 1) X if(burn_floor_scrolls(sx,sy) && cansee(sx,sy)) { X mnewsym(sx,sy); X pline("You see a puff of smoke."); X } X if((mon = m_at(sx,sy)) && X (type != -1 || mon->data->mlet != 'D')) { X wakeup(mon); X if(rnd(20) < 18 + mon->data->ac) { X register int tmp = zhit(mon,abstype); X if(mon->mhp < 1) { X if(type < 0) { X if(cansee(mon->mx,mon->my)) X pline("%s is killed by the %s!", X Monnam(mon), fltxt); X mondied(mon); X } else X killed(mon); X } else X hit(fltxt, mon, exclam(tmp)); X range -= 2; X } else X miss(fltxt,mon); X } else if(sx == u.ux && sy == u.uy) { X nomul(0); X if(rnd(20) < 18+u.uac) { X register int dam = 0; X range -= 2; X pline("The %s hits you!",fltxt); X switch(abstype) { X case 0: X case 5: dam = d(2,6); X break; X case 1: X case 6: if(Fire_resistance) X pline("You don't feel hot!"); X else dam = d(6,6); X if(!rn2(3)) { X boil_potions(); X burn_scrolls(); X } X break; X case 2: X case 7: nomul(-rnd(25)); /* sleep ray */ X break; X case 3: X case 8: if(Cold_resistance) X pline("You don't feel cold!"); X else dam = d(6,6); X break; X case 4: X case 9: u.uhp = -1; X break; X } X losehp(dam,fltxt); X } else pline("The %s whizzes by you!",fltxt); X stop_occupation(); X } X if(!ZAP_POS(lev->typ)) { X int bounce = 0, rmn; X if(cansee(sx,sy)) pline("The %s bounces!",fltxt); X range--; X if(!dx || !dy || !rn2(20)){ X dx = -dx; X dy = -dy; X } else { X if(ZAP_POS(rmn = levl[sx][sy-dy].typ) && X (IS_ROOM(rmn) || ZAP_POS(levl[sx+dx][sy-dy].typ))) X bounce = 1; X if(ZAP_POS(rmn = levl[sx-dx][sy].typ) && X (IS_ROOM(rmn) || ZAP_POS(levl[sx-dx][sy+dy].typ))) X if(!bounce || rn2(2)) X bounce = 2; X X switch(bounce){ X case 0: X dy = -dy; X dx = -dx; X break; X case 1: X dy = -dy; X break; X case 2: X dx = -dx; X break; X } X Tmp_at(-2, dirlet(dx,dy)); X } X } X } X Tmp_at(-1,-1); X} X Xzhit(mon,type) /* returns damage to mon */ Xregister struct monst *mon; Xregister type; X{ X register int tmp = 0; X X switch(type) { X case 0: /* magic missile */ X case 5: tmp = d(2,6); X break; X case -1: /* Dragon blazing fire */ X case 1: /* fire wand*/ X case 6: /* fire spell */ X case 10: /* Polymorphed human blazing fire */ X if(index("Dg", mon->data->mlet)) break; X tmp = d(6,6); X if(index("YF", mon->data->mlet)) tmp += 7; X break; X case 2: /* sleep*/ X case 7: tmp = 0; X if(!resist(mon, (type == 2) ? '/' : '+', 0, NOTELL)) X mon->mfroz = 1; X break; X case 3: /* cold */ X case 8: X if(index("YFgf", mon->data->mlet)) break; X tmp = d(6,6); X if(mon->data->mlet == 'D') tmp += 7; X break; X case 4: /* death*/ X case 9: X if(index(UNDEAD, mon->data->mlet)) break; X tmp = mon->mhp+1; X break; X } X if (resist(mon, (type < 5) ? '/' : '+', 0, NOTELL)) tmp /= 2; X mon->mhp -= tmp; X return(tmp); X} X X#define CORPSE_I_TO_C(otyp) (char) ((otyp >= DEAD_ACID_BLOB)\ X ? 'a' + (otyp - DEAD_ACID_BLOB)\ X : '@' + (otyp - DEAD_HUMAN)) Xrevive(obj) Xregister struct obj *obj; X{ X register struct monst *mtmp; X register int let; X X if(obj->olet == FOOD_SYM && obj->otyp > CORPSE) { X#ifdef KAA X switch (obj->otyp) { X case DEAD_HUMAN: { let = 'Z'; break; } X case DEAD_GIANT: { let = '9'; break; } X case DEAD_DEMON: { let = '&'; break; } X default: let = CORPSE_I_TO_C(obj->otyp); X } X delobj(obj); X/* Originally there was a bug which caused the object not to be erased X from the screen. This happened because first the monster got created, X then the corpse removed. Although delobj() called unpobj(), the object X didn't get erased from the screen because the monster was sitting on top X of it. Solution: place the delobj() call before the mkmon() call. */ X mtmp = mkmon_at(let, obj->ox, obj->oy); X if (mtmp && obj->otyp == DEAD_HUMAN) { X mtmp->mhp = mtmp->mhpmax = 100; X mtmp->mspeed = MFAST; X } X#endif X /* do not (yet) revive shopkeepers */ X /* Note: this might conceivably produce two monsters X at the same position - strange, but harmless */ X#ifndef KAA X delobj(obj); X mtmp = mkmon_at(CORPSE_I_TO_C(obj->otyp),obj->ox,obj->oy); X#endif X } X return(!!mtmp); /* TRUE if some monster created */ X} X Xrloco(obj) Xregister struct obj *obj; X{ X register tx,ty,otx,oty; X X otx = obj->ox; X oty = obj->oy; 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 if(cansee(otx,oty)) X newsym(otx,oty); X} X Xfracture_rock(obj) /* fractured by pick-axe or wand of striking */ Xregister struct obj *obj; /* no texts here! */ X{ X /* unpobj(obj); */ X obj->otyp = ROCK; X obj->quan = 7 + rn2(60); X obj->owt = weight(obj); X obj->olet = WEAPON_SYM; X if(cansee(obj->ox,obj->oy)) X prl(obj->ox,obj->oy); X} X Xboil_potions() X{ X register struct obj *obj, *obj2; X register int scrquan, i; X X for(obj = invent; obj; obj = obj2) { X obj2 = obj->nobj; X if(obj->olet == POTION_SYM) { X scrquan = obj->quan; X for(i = 1; i <= scrquan; i++) X if(!rn2(3)) { X pline("%s %s boils and explodes!", X (obj->quan != 1) ? "One of your" : "Your", X xname(obj)); X potionbreathe(obj); X useup(obj); X losehp(rn2(4),"boiling potion"); X } X } X } X} X Xburn_scrolls() X{ X register struct obj *obj, *obj2; X register int cnt = 0; X register int scrquan, i; X X for(obj = invent; obj; obj = obj2) { X obj2 = obj->nobj; X if(obj->olet == SCROLL_SYM) { X scrquan = obj->quan; X for(i = 1; i <= scrquan ; i++) X if(!rn2(3)) { X cnt++; X useup(obj); X } X } X } X X /* "Killed by a burning scrolls" doesn't make too much sense. KAA*/ X if (cnt) { X pline("%s of your scrolls catch%s fire!", X cnt==1 ? "One" : "Some", cnt==1 ? "es" : ""); X if(Fire_resistance) X pline("You aren't hurt!"); X else X losehp(cnt,"burning scroll"); X } X} X Xresist(mtmp, olet, damage, tell) Xregister struct monst *mtmp; Xregister char olet; Xregister int damage, tell; X{ Xregister int resisted = 0; X#ifdef HARD Xregister int level; X X switch(olet) { X X case '/': level = 8; X break; X X case '?': level = 6; X break; X X case '!': level = 5; X break; X X default: level = u.ulevel; X break; X } X X resisted = (rn2(100) - mtmp->data->mlevel + level) < mtmp->data->mr; X if(resisted) { X X if(tell) pline("The %s resists!", mtmp->data->mname); X mtmp->mhp -= damage/2; X } else X#endif X mtmp->mhp -= damage; X X if(mtmp->mhp < 1) killed(mtmp); X return(resisted); X} X X/* X * burn scrolls on floor at position x,y X * return the number of scrolls burned X */ Xint Xburn_floor_scrolls(x,y) X{ X register struct obj *obj, *obj2; X register int scrquan, i; X register int cnt = 0; X X for(obj = fobj; obj; obj = obj2) { X obj2 = obj->nobj; X /* Bug fix - KAA */ X if(obj->ox == x && obj->oy == y && obj->olet == SCROLL_SYM) { X scrquan = obj->quan; X for(i = 1; i <= scrquan ; i++) X if(!rn2(3)) { X cnt++; X useupf(obj); X } X } X } X return(cnt); X} X Xmakewish() /* Separated as there are now 3 places you can wish at. */ X{ X char buf[BUFSZ]; X register struct obj *otmp; X extern struct obj *readobjnam(), *addinv(); X int wishquan, mergquan; X X pline("You may wish for an object. What do you want? "); X getlin(buf); X if(buf[0] == '\033') buf[0] = 0; X otmp = readobjnam(buf); X#ifdef KAA X/* Wishing for gold has been implemented in readobjnam() and returns 0 X if successful. */ X if (otmp) { X#endif X wishquan = otmp->quan; X otmp = addinv(otmp); X /* indented lines added below so quantity shows X * right. GAN - 11/13/86 X */ X mergquan = otmp->quan; X otmp->quan = wishquan; /* to fool prinv() */ X prinv(otmp); X otmp->quan = mergquan; X#ifdef KAA X } X#endif X} END_OF_zap.c if test 24867 -ne `wc -c