[comp.sources.games] v10i071: nethack3p9 - display oriented dungeons & dragons

billr@saab.CNA.TEK.COM (Bill Randle) (07/12/90)

Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu>
Posting-number: Volume 10, Issue 71
Archive-name: nethack3p9/Part26
Supersedes: 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 26 (of 56)."
# Contents:  others/termcap.uu src/potion.c
# Wrapped by billr@saab on Wed Jul 11 17:11:30 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'others/termcap.uu' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'others/termcap.uu'\"
else
echo shar: Extracting \"'others/termcap.uu'\" \(25830 characters\)
sed "s/^X//" >'others/termcap.uu' <<'END_OF_FILE'
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<NR<;.G2($*%#(TFH()&)8@Y;\S0N1/&)(@P;LB\>",'
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&8D5I<F_<P*G&;SZJE4T0,N(R=,7X1DY6%?/K1O9
XMS>3*ES-OOBL'SIN?<T;"D?/&3AHRK.F@.7O5)NF7"2A/=(T11&2T8WRV+M,F
XM3)JU_YDU1D:]M7?3&.NY<89^594!PAAO515:<PE\%=9899WD@DQ,.1@&86C4
XMU=\:^D4&`E5R0%=6'I^9<94;+*[Q'TIWJ,92:0B9-(=B`X(@FX]-\30>;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<=#_.<AS&#Z?
XM:".0#@;76U4H#7'V'#T[&'?4J\D!G[A1KS$'GBNE,#C!2C'EE%-TRF$GGG(X
XMV5D99MQY6%WJB<Z37B3"[B-0;?3LZ:PCW8&<56$\)?I;9Y<EAY6QO3&;J<C&
XMJ9:#EV>>.'Q"JPM"'L.ZV$GB=S4?E4TZ5Z&2^A3$OL6UZGA;DA@=ZB`'9[$%
XM-K*20W",<P:QD$5G;GC+'*BT%J^U2%;L(]O$2)>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<J0A6(\`00#.$)!X.8
XM$,J`JK6`BPV^4\I,0)"$*$[L,/YA0\7(`I^(#8N":_E;X""8@%$6095B=$@"
XMC#"CSQ`&!"%Z8G]@=$.Y]8XG>[-*W6B9@"2X036:T4NZ[/*&`+WL1W3\SUEX
XMF$<V,+.4;MM@W'HX19ZX,76P<T,K1PG.<SJ-*CQ97>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*HRZ</9<`F"MR:`
XMJJ93J['>XH:>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><G"+5L\KAXF-0ADS1MTM`Y":+B13H\Z;SA
XM_'-DFS=_S>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<B==S^-!LD!6R+UTD`OO5!000P4%-!+,C&1A!!2!"%%
XM%B15X<005"3QA!,OP:?27V>H-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==<CA!D]42%%%$9]U94003$R!+GJ*9?7?&9QYM]8=R*FWJKY/\9@&
XMFR<MNQYTJG;E5!CVN5K1&`\.G.IJ75'W!ATN0"N3$%4<`:Q1\#41!HMF^'>3
XM8?TA^)]^_YW8%(+VG96&4`VC6O!3WQ)KW\0T59M$$A5S;)2A"A0TPG\0UH$>
XM"#P$]]<;+J#APZ$*C(`>FVZ"4.ZY'@D]]<DDL>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.'\<V2;-W_-Y!F)%:7)OW,"IQF\^JI5-$#+B,G3%^$9.5A7SZT;V<WDRI<S
XM;[XK!\Z;GW-&PI'SQDX:,JSIH#E[U2;IEPDH3W2-$41DM&-\MB[3)DR:M?^9
XM-49&O;5WTQCKN7&&?E65`<(8;U456G,)?!766&6=Y(),3#D8!F%HU-7?&OI%
XM!@)5<D!75AZ?F7&5&RRN\1]*=ZC&4FD(F32'8@."()N/3?$T'FYU]%A@&7C`
XMH5=F=(3FE4H0^M<&3UBQB)J2:0R%8P(HJHB6?E&!D%V"9HF1AEYTL%B7&:JY
XMX1-/B+W((AQ5X5<'&U51R)UW/XT&R0%;(O720"^]4%!!#!04T$LR,9&$$%($
XM(446)%7AQ!!4)/&$$R_!1\>"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$<PR$##@_Y6G.P<0B?AHLT9PTJSIQBG
XMW.QA9SKH%)YR+-B5>EAA+<,,7%?E]6(GNXI'?DSWJ[?.<O!4HTT@B.$@<,S*
XM@1Y*!38[Y'B:%1?<69VQ:A-\BN]'1QURN$F&"Q`G4!-4]KU1'-T9S?%??HD[
XMZU1GK"WWF<USXZHR?-NBU>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&<TK0Q`&X.
XM0KQ)&%/GJA1QQ5L.`8$,RNFW?!8&0#SIYS\#FCC".)%%@8$6LZ0#,9E,H0A%
XMH`D3IO"$TGWJ?&X0RTSPB4;[.*TB8_!1'A0#/CJ9"4UY\!2HS("G"A+S:F)X
XMPQLB5+.9BM"FV$J33L\GQYF`BI1SK*`'V5`'!X5)991,:D[5)Y,@5($*2!A6
XMZ4K"&B.H!`T0,Y0""C*"UU$5/2#@07#^\@87H,$';'5K'>`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&<EHM,![J,':,X(@(,(1EL!6KSC700<S@E>90(4O2.$)3^BB")SG@C&X
XMP0PB>(AH91C&-UCTBJ\LGUI>Q6"#D`2W(54!713C!CB@(`4#&T'&<E-A\4:X
XM"!JN`H=MBV,0B$"![VQ@,5,LV@@:,,'KW*$,[RM8G!WD"^^$`ZIV0!310@%/
XML/N12<;2!L5UA6>K\DZ`5L7E1"E@4;T"@;F*4`4B/`$$0WC"P4HGA#)\L5WG
XM>Y4X9U($Z'BF2G8QB7E<S!,X=X4R&2H+V!8MD_:RV<U]L[1=WC!G.2!S)B`0
XM&S&5I3)VNI)Z=#EP*.&3`%6+FBIP.M-;(`<CJF`4.:)4RFYGTM[@KH6\YD4O
XM,A-0!#;\A-:H+C9V05#;V^9VV47P[ALY#8)F/UO85VA*_^;'%3+PY"U2R>.0
XM_@GMF:A:/3_D28&=<@>HG<A!5!'5K(6=@"&0RC/8S/(Q:5WK^)H-USZ2@T;/
XM\C2R$#S:`5Z+?B\5A/Z2$G,(A0FSG5V&AQ,[XN$J[WFGD-[+?6[3_,[V@,W0
XM;IFHW)ZT?GF]VT9K:8>.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_6<S!?Z1!%'"Y3TT9";6SK$9Y'60N7]AAS\>V-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+<CQ+6[P?`JHV876'_X$7.`&)V!ZO#=[GE-\$\=?14`$R?<0S?=\
XM!3A\$7=[(H=>#=A[PC<3RZ=\O$=\H6-\.;=SDY)\J+:!&VAG>%8PJ29=)N0$
XMD54IE^(PG*(^ZS<CG-<_,S%WS2-P_5,@R,461>,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-`#K<N11,;84`B
XM-4.*5G066`1U,^2'RP*(/9@5+K,69U&'<!",F017/_*#JA$V<.04!70FE!AL
XMR((Q5G8G6/:'QM0_0#1<U+(:IN**2@&+EQ2)LWAAIV)1?\03W61H@S10NEA&
XM)R.."#$S3G%*I95'+H0Q7G.)-R%JF&9T0D(>YO$X:,,>\E0&(^-.\,1(;N!(
XM&D1CD@1"_;-*\*B"F74$7`@?'6(51@,Z)E$63F(BOH:0#M(T5C%S"+)JS0@'
XM\*%-"(=<K.$ZT8(RY$A`5Z8YW,,&OE9I5H@L3S0Z:84HBH(C,K%G??9G@39H
XM-%AHA^9W.\1M[_8_;D,EEL1'K<2(CDAC<J2(P$9K85F3?O5J@912B+-O#F&`
XM;RF)=%20=H&,,F27&A>6[*%-3@&4IE4D$W4G3@*8+0%QQ@:$0J)U:41P+[=M
XMPH9JWM:4@0E'R>%*P[1*%]2(CZ26<<F8,>%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,'^RE8XN<B*+`1A@<"`XH"
XM(D";(O!]KH=XOTF`J*=Z*N!X_D>A3&"A!HBA&BIZAP20?,`'!Q&B_\<%7#"`
XMX#=_"`I_F;=C9*&@+"`"<A"A'3&AOMFA+6J`W0E_%[B!!OB`GJ%^JH<"T;*@
XM#?J@EX2C&[JC'OJA""I'8U`^-)JDH7=X,!"E"4"E$W%]CG>!"?"C*&"?*0"E
XM\C>D!2BD)<A[&]BF#O9&$"9A%(9ZHD4%&_,@+DEC\D,KLK$QP`-L(`!E#.0\
XM@4H6[:$6%?1"R"A\7)9Z"(IYAR>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,&&<S"ELE2ETS^ERSADQWO6SZR&S!<&]8:"O]0*?`5MX`W-V4#>?_%F^/;9X
XME(>A4B.B)S`"+"I[/WJ[14""&OA[1<I[/99Y`XMZT><@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%<RF
XM,P&_#$S$47J_D?51#5B"_$O#L6I[X(L"$>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><G"+5L\KAXF-0ADS1MTM`Y":+B13H\Z;SA
XM_'-DFS=_S>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<B==S^-!LD!6R+UTD`OO5!000P4%-!+,C&1A!!2!"%%
XM%B15X<005"3QA!,OP4?'@G28@><9,R$96!@]BO'&&Q&NM9H<;8P1!AP/SAJ&
XMF6CFT:E1,BU1!*57/"$%$5/LZM"KL<YJK`HR39&%$T]`,442Q1KE*:BBAG$&
XM"N>E`!^"51UTW@[+RD1$$5,,(4424&2ZZ;()2%$&'77(X09/5$A111%LN;AC
XM&9FQR=IY;`FI(UD9_><C4*DUQ@9\",NQ&TE!,#$%OV^H!U2-?2YKJ`(%C?`?
XMA'6@!P(/P?WUA@MH^!#RR&R4["#*PBG(LLL@*S`">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<E,>[G(9R&P%V!QJ+&Y5\?[[SUK@5T
XM$>;/5`0;/QG>_>AE+XI9C'_7TUP1LM*OX2T0)>^+G4P>>"+:E4&"/2'@6HYV
XMP*OPA&<?8@,=K.<0"E8N5*/RV-A.>#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!`$9S<A'/\ZQCCVXXQ9BT`4T%B0!FHLC"N9H1T&6D0D@X`,?_DC'%52R
XMBU\$01H?8A(-HF!_1GRDYOJP.@`Z:)0)*&7^4,#!BZ52C:M\9!^0"()=&F0F
XMLK07+9%6A%OZ$AH(5$=%5$Y532Y#`"4E):8%```5#Z.[O7GH"0``#"]40$+2
XM0`$(%0D@)5!1\&""AT/>P,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.'\<V2;-W_-Y!F)%:7)OW,"IQF\^JI5-$#+B,G3
XM%^$9.5A7SZT;V<WDRI<S;[XK!\Z;GW-&PI'SQDX:,JSIH#E[U2;IEPDH3W2-
XM$41DM&-\MB[3)DR:M?^9-49&O;5WTQCKN7&&?E65`<(8;U456G,)?!766&6=
XMY(),3#D8!F%HU-7?&OI%!@)5<D!75AZ?F7&5&RRN\1]*=ZC&4FD(F32'8@."
XM()N/3?$T'FYU]%A@&7C`H5=F=(3FE4H0^M<&3UBQB)J2:0R%8P(HJHB6?E&!
XMD%V"9HF1AEYTL%B7&:JYX1-/B+W((AQ5X5<'&U51R)UW/XT&R0%;(O720"^]
XM4%!!#!04T$LR,9&$$%($(446)%7AQ!!4)/&$$R_!1\>"=+@AUDQ(!A9&CZ)>
XMMM=G<!2VEAGDM>$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<<U=HG%E"KVN%8'0Z&:2N=9J+)(@_G^3!272W$
XMP):+$)/A`WQ.W7?8&]&2L>&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<J`*+^@J"MT54`38(0SP1K[Y"E''S6I_V
XMFRI\,X&0A!NJ:::7'@YZ]WA7/ZKGH++,XJJK'"PJ#E3/2J5^15-O`9D<6U0>
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.<S?[#DQJI!P0C
XMG(WM[C>]"<YD"OVZRA@N=*>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]`('>^.:W6<Z$CL5#`0I^&4Q<+A,.+#B!#DZ0
XM@HZ$()A.J`(3F-"142H@`;%<P0I8F0"X:026<!`G,)M)ABW`H`L@,($)#O++
XM:X(@F]N,YSS1J<X>L',+,>A"-PMB0YF8$P7H!($]\<D$?=(SG2M0:#!/,`)J
XM@L";#S$)'MV`@HKMDJ"IZT.N+.@@C"8`CL#<&3G+Z2*$,G.B,+"H25.G2L\$
XM$P<K%2GW/#/3F=340<&D8DX)RJ5$:D0E?[D9'5P*AVI>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<NR<;.G2($*%#(TFH()&)8@Y;\S0N1/&)(@P;LB\>",'
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&8D5I<F_<P*G&;SZJE4T0,N(R=,7X1DY6%?/K1O9
XMS>3*ES-OOBL'SIN?<T;"D?/&3AHRK.F@.7O5)NF7"2A/=(T11&2T8WRV+M,F
XM3)JU_YDU1D:]M7?3&.NY<89^594!PAAO515:<PE\%=9899WD@DQ,.1@&86C4
XMU=\:^D4&`E5R0%=6'I^9<94;+*[Q'TIWJ,92:0B9-(=B`X(@FX]-\30>;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'*@<!X+#8:1@K;K=:7">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?HXFW<!>CJ;FW@0B/*98>3E8'!<A;&@"P`;
XM41>28;2A9!DCI>&B>@[29=,;-2+,:LX+?TFE2?#]!Z2#RC(+QV%GEJ$#P`EH
XMH44/>J2M!WP)9)%%#WE`8@#;5US1PQUX`\ST6G,4F=\<<Z0AU*HV\=39?RN[
XM/9+9)*-4]XEGL@'?8&>BQ/1A;SP=]<H;=RS'V/0ZE$#<!L"@MAXPX'T'#`!W
XM"+8<P1%^4XTV[4=''7*L%89=;P3H\8^DC\0T?#]15C+M-YET>^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/<DNM\DC`'?5%9;"&8@R*SK,WP3PRF6L,<\+22Z65LC5SI
XMSTWX1T96[:P,0B0B@ZR2P#><P0UIT,/]VJ.6,VC/1LW;T1(U<Y,@#M$-18S3
XMY8*0KR0D(5=S*.,+J_)#.<!'BS.800K(Y[I"'C*1K+&D(/,'NH.PC0M%F$D/
XM?""3$W`!!JD\@4Q0P,DA>!*4HCPC4#8H.BZ(09>\!($ON0@#86JDF,>$XQCD
XM2*<B*E,.S(0)%UPDDUWV\I<QH($UB=G)3R)F5AUCS3?#^1`NK*6<T9QF#&2P
XM3FQ^TDUWT(N;7B#0,L03)1*D9P*XT!5\GI.+->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`<PKTJI<#'$VX9
XM6#N3_BYO+0`6,'PX["-0H4JI?`VL"E2+*G&1@5PBVZ",V540&8<,+O/:0T-F
XM(F,QP&%>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`:$</&@Y]-C1;R+"%&'0!SP7Y[4P"C8)+
XM@R#2=J[THS%=Z$B?H`=Q!D&>'X+1W*'`SE`.=6O[D*L#.VC6":BU&U!09=R4
XM@<TXAHN<_[SK4/=!S,\VR$R$?>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-<NY(6X]I[<=A()_YT+>>C%SN/ZJA
XM)'Q0UE4'A0GHTV.9R,Q;!SB0P7[+I:W,'*CRJ]P,3SH#`1O`<G##A$$JUEVC
XM_#Q5J_JA156W_7AR4((JQ(6142`00A6.@*U_.Z1#Q;7O;*HK!S.,_0XO7**,
XM5/45-WTFM05#3W#<GI;W.H2W<A@)5-B2$272`8U*%'M5%I37-]3A(BX#08B4
XM^\3:(8E'TA'Y_^YN%,PJ"D<RZ>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=@<B1F(R
XMX03R0RO+XG8FZ'2$D7YUIR#15V+\P1]*U!5&F!P.9'IT((7Y97`1!D!("`)5
XM8'7VTX512!B1A8(])T-E:&(9A7/AHX9?R(93>`:^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'<!
XM*$@7!P(!1RW6TG=;<HF]J(E>R`+_<6T.(6->.''QD8C_,7%XEW'ZPB\."3!0
XMT%QOPB!K\7_:%4B8Y"`XEW4[IQ3_(3QRYS^<EWIC=RN%,6'/%WNR,3EJ0AB-
XM8W)7]W8K<SETF'K_07N7A2@&R5E3X%F@)5JDM6ZFA5J\Z(MC4(;R=3EL`CO:
XM1THQ9%[WM3NIMC=L(U_&A5,6PY?P-1-3\"T@P'1#E'J*1!XK6$,FEWHS`)BP
XM$8*0@`!!,`87<B=I>#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)IK0<B5.PGR[:4;`"8<?IIH9YF$.`6(=%H?^Q3Q5EY6L@9QL2(=[6#(2&4I^
XM6!"!B'`R)INTF1%HEF>M)0)%\$NI)`;.9`;CY`;V)`<,10=<0`<B4!!]D&4*
XM0))N*516F9(]EH@M&:'O$I,%89^CUEZ440=E$8J!A2`>FHC_*&9*!E@PV61K
XMII*C4C-_=3$9H1)_D5-TL(E_V%JDMBYK@6K6)FNA1FHP:A&J46HI.8N=:'YH
XM!@/=&"<;87KM=:0[L$(<FA$\``*1V6AI%*-!BJ-0=C%]-HN_A2!3Q0-H-@-_
XM]J7FQP=H)J1KT0+25$W75H,@$&UPJ@)>*(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><G"+5L\KAXF-0A
XMDS1MTM`Y":+B13H\Z;SA_'-DFS=_S>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<B==S^-!LD!6R+UTD`OO5!0
XM00P4%-!+,C&1A!!2!"%%%B15X<005"3QA!,OP4?'&6_\*!.2=&;U8!UR0-55
XM&&20H>,<_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.A1AMY<MP+IH+W?\AJ&KZJQ&)S(9XSTXVU"G;IQ
XM5S^N*]9:[:[[F1OP#>R@P.^Z('&'A[UATQLUUOI3''60E1]/G8'I)EMNW$6@
XM'&>(118=(Y5A(U!%O_M95SZWX09OIBH91GXJ7P7'D.-I5MP<>`6G&F%I$0WP
XM6NHY^`9A7H<<JPX2)U`"&0GP+8;?%A=7,FJ;V>%8U1K]1]/"2201KU*.RY"`
XM7B2"\#@(Q#6-F7YLEL$&C>>IY^-L,L#G^`RGIY'ZZJTC=O5A6<Y^8NUHW`["
XM#+J7,!KJ#I8P1O,KX-'[[V.P3MA5K?(4!.A)@*`Y&YR'B<?2R#7]=-2R3EVU
XM&\/OFK5=Y%T-:ZVWY;;768'/`5_K7[%/J$`@@OG5`0XB&)KA7%0XXX0-0[#9
XM$`B2P$#D`$LI<\N(8;#B0+&5164LRN#0ZN8F/&AP:[+YW\K4(A0Y2$=IWB)=
XM"7R`!^:DP44ES,CX./<C,:S0#2V4#EO\1[H$/`<NS@(2!W>XP,\-(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!X<K\SO$5U4:Q*!H'"M<\@CC"&Q)%,A%"%
XM(W3+8$HAPAM*-,`KO06"3ZE,$QMX&ZM495=;<Y_58,<5^$#G+[NR"8ON8#8Y
XMH,19J6D,&WB"@AV5(3-LBJ:32O`VU0EA)"90'1$*"1\*@B`/AP/!>G*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@#<!4_BF6E!2V#H*#<%M$"SK6,1@
XM_S[8";,IK`=A0S^P>!8E>:C8@Z_0E%,6SBI.P4JHD,.V>:V2K"6VG^Z2Z\XO
XMWKB.81`@@5#IXP&QTHING((O620?%OV(M`[>\4S&^Q,W0J&S<XA-^A`;&$DJ
XM$WYE>+!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<Z]I!O$X`
XM=-^$@EJG^];![D.P36)=-Z``R@8W",(5H'`%)(JVLIR@$ZA0!"DX(0A,J-2E
XM(,:I&#IDX%F>"<JU_$,S!NX%E+%,@;Z<GVE5ZUJRYI;$0IMC@H\.T-1"F,(8
XMYC"22^S*)LZR?AI(<P?YD+AN0&^M:F2[!I9`JS<&+Q$&_,TFL:@_Z+T+GE;#
XM\D;*=Z5O=I;-D`,?.C<W[4"!VS73)V((SD&"3(#+*#V5OOC^%^WN36+@0?:C
XM!N80ZT:6@Z<PV5XLRT7N=7,[X+,K>,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!J8<EI(?SWHA89!=<D3%6;P$U%&.D[X@&(X@5-X`CYPAC"1
XMAE0"-B,F)KAQ0_M3&&X`AG@H@[VUAW+@AP\!B!T$3&6T&(ZAB%#H$'I8@6D`
XMB0EP7IO$'V,SB:/X2)B8AV2X?O#V?H<4$1.A/%`V$KLGBF41592W&*?(B'SV
XM%-V'!O"QBRLW+8)F<6PE9]FS<@57$*JF;A^T&FT`!__":3+Q'_LFC;RH&@C"
XM;OJV`O*67+M2@>WW?I&3-V5A!@]'&"P@`H\C`BP0;;=7%O;6!1$G;-LS:B8`
XM95LP,V_A<!"76L$F!C!H:S+QC>MW@>*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;_<V:A.I;31ID<@V
XME(LH<0.YAV:(E$I);$V)6?$(`O>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<NR<
XM;.G2($*%#(TFH()&)8@Y;\S0N1/&)(@P;LB\>",'!)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&8D5I<F_<P*G&;SZJE4T0,N(R=,7X1DY6%?/K1O9S>3*ES-OOBL'SIN?<T;"
XMD?/&3AHRK.F@.7O5)NF7"2A/=(T11&2T8WRV+M,F3)JU_YDU1D:]M7?3&.NY
XM<89^594!PAAO515:<PE\%=9899WD@DQ,.1@&86C4U=\:^D4&`E5R0%=6'I^9
XM<94;+*[Q'TIWJ,92:0B9-(=B`X(@FX]-\30>;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<R*\8/K03?@8B[`%X2[93VHEEG_Q8:<?33;
XM'*9>;E+);1D_DS'2'4TAR!9/G9T$7UQ7B7DG6EC:'*=Z#NY(=1ILLJ985U`[
XM**N/J)6Q(0A)F`'?VR#$C3-*E&V<D5/WL8JEL7F5P1O1&:U$*ALHU>P1"_`Y
XM2P4(>@#U1M#4*M7A85SUEU&8:)_J<,809XC2CQ2CN[4.!R>PQ=QHC=7%%BIT
XMP4/#.__X4U8^Q(YU<CHD0'O=(/3@`]UC^3@;>GA:N59J-JE$M5IDS`$?:<DO
XMKW9F;2O-7NT..L5WW-LG`-_G<Y?K\[!;7S7''&))O-\<YY6_5NE(#ML8&_"Q
XM0U4TDS@0B``*0Q#!W6H"E9'P#P_^VXP`*Q*&`HK@.XHYB0C@X[@[`>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
XM<L*U-`8M0N%95<+PLZ[\A`[PJ=G.@@"P)"3AB3@RE`(2I8!%*:4)4"J#3;!2
XM!E(QC`YUX%:A#J6`$>20#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(<B!6@9)T)
XM#6+P5Y=R59]>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*`,B<ZFR$"'S*SNKDGHPAL<$B*H(;/C)]HQ0
XM%[AH;6Y_(6Y&4,`V.:5@>Z(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,<?F<R!1G!@<'HR4Q_[?*&`!%XN2Y*<?FH!(+IGN?#/H4P')7RD`,G
XM&$_%*=UJ7OKCF4R8DS.621;G8"PY^(8_(=R9DN<@X:Q@F<G,/=]_AIS,M;6M
XMNF3),DTPK&$&'V\L5=8RE*H"Y[7ZS0QXRIC[RBQ#O3'Y"DWIL)"-XR$8Q9*-
XMP^+)?Y?LD`(O2[8L:\-GD&D>%A\S(V;86,?40N@3);H,VZ."BN:0&@(Y6E:T
XMRIA)XE"'-/RFO.<U,]O@<V7C(O<-R6JF`CZU,&QIBW'@(LRX%)!*%:`K7NS:
XM5K?*`NVBT<M>*<!7O+2Y5W;!@7R_!"P48$D^:2+YL6(2L?5*S)/+S@27`"J:
XM2I2L;4:*JK[82EX/0."$*C"!"2#@`Q_.=>,>[+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"<Y""P.<YU#O6(,WTF6#N3@Z9>]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<IX$`CI#"-HTP@0%Q"$6\,!F^.
XM$4`#5$$=AD%E<!(ATV?MTS.09C,22!;FAC8N!$&G)$$96$`(A$>+M$>*@B.X
XM-06ZQ5N^!5SIEP#"15QK\7G;=P;*-1,HAAPJ1F35T0*90Q[)5VYH<UUH%F1+
XM8X$WT4OQ,T,JLB`L`X65)BI,\`9OL`:<<6.E`SUA,"<V$X)KU$9YAA.D8F9W
XMYB!U<&,4LQYLX"(LYCXC*`=M&!%M`"HRTS1=$29ZN'P>]CMDT(;LU17N-41J
XM*$M=X3NRE3ZJ5GRM9F>P5(C#TH97AAC;<V6KYQ"Y5FB\9F9`:'^UDG["=GW1
XM=(HZPWT_]WWWI0#B5S?5-E_F9WKHQVVB8A+$%1PVPRX<TS-S`'$RX8N`$8S3
XM!`=C$"\5A6];QW@@T$1+EW7XQH&LX0,;!P(F8`*\!($\,'/XDSE1@0+4E`(O
XM\!1I0(YF((!T<'60-WS,B$W4M`782`9=,'@IASQ=9X[SF(XR<'HH-XQ5P1/[
XMMG7I^"G->'8R<7$@T'$$^44@L#P<%W8M$)$*6(T/(7FZB$`"*2IU-W<@Z5J8
X&)UNK!QH`
X`
Xend
END_OF_FILE
if test 25830 -ne `wc -c <'others/termcap.uu'`; then
    echo shar: \"'others/termcap.uu'\" unpacked with wrong size!
fi
# end of 'others/termcap.uu'
fi
if test -f 'src/potion.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'src/potion.c'\"
else
echo shar: Extracting \"'src/potion.c'\" \(30531 characters\)
sed "s/^X//" >'src/potion.c' <<'END_OF_FILE'
X/*	SCCS Id: @(#)potion.c	3.0	88/11/11
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 OVLB
Xstatic void NDECL(ghost_from_bottle);
Xstatic boolean FDECL(neutralizes, (struct obj *,struct obj *));
X
Xstatic int NEARDATA nothing, NEARDATA unkn;
X#endif /* OVLB */
X
X#ifdef WORM
X
Xextern boolean notonhead;
X
X#ifdef OVLB
X
Xboolean notonhead = FALSE;
X
X#endif /* OVLB */
X
X#endif
X
X#ifdef OVLB
X
Xstatic const char NEARDATA beverages[] = { POTION_SYM, 0 };
X
Xvoid
Xmake_confused(xtime,talk)
Xlong xtime;
Xboolean talk;
X{
X	long old = HConfusion;
X
X	if (!xtime && old) {
X		if (talk) {
X			if (Hallucination) You("feel less trippy now.");
X			else		   You("feel less confused now.");
X		}
X		flags.botl = 1;
X	}
X	if (xtime && !old)
X		flags.botl = 1;
X	HConfusion = xtime;
X}
X
Xvoid
Xmake_stunned(xtime,talk)
Xlong xtime;
Xboolean talk;
X{
X	long old = HStun;
X
X	if (!xtime && old) {
X		if (talk) {
X			if (Hallucination) You("feel less wobbly now.");
X			else		   You("feel a bit steadier now.");
X		}
X		flags.botl = 1;
X	}
X	if (xtime && !old) {
X		if (talk)
X			You("stagger...");
X		flags.botl = 1;
X	}
X	HStun = xtime;
X}
X
Xvoid
Xmake_sick(xtime, talk)
Xlong xtime;
Xboolean talk;
X{
X	long old = Sick;
X
X#ifdef POLYSELF
X	if (xtime && u.usym == S_FUNGUS) return;
X#endif
X	if (!xtime && old) {
X		if (talk) pline("What a relief!");
X		flags.botl = 1;
X	}
X	if (!old && xtime) {
X		You("feel deathly sick.");
X		flags.botl = 1;
X	}
X	Sick = xtime;
X}
X
Xvoid
Xmake_vomiting(xtime, talk)
Xlong xtime;
Xboolean talk;
X{
X	long old = Vomiting;
X
X	if(!xtime && old)
X	    if(talk) You("feel much less nauseous now.");
X
X	Vomiting = xtime;
X}
X
X
Xvoid
Xmake_blinded(xtime, talk)
Xlong xtime;
Xboolean talk;
X{
X	long old = Blinded;
X
X	if (!xtime && old && !Blindfolded) {
X		if (talk) {
X			if (Hallucination) pline("Oh, like, wow!  What a rush.");
X			else		   You("can see again.");
X		}
X		flags.botl = 1;
X	}
X	if (xtime && !old && !Blindfolded) {
X		if (talk) {
X			if (Hallucination)
X				pline("Bummer!  Everything is dark!  Help!");
X			else
X				pline("A cloud of darkness falls upon you.");
X		}
X		seeoff(0);
X		flags.botl = 1;
X	}
X	Blinded = xtime;
X	if (!Blind)
X		setsee();
X}
X
Xvoid
Xmake_hallucinated(xtime, talk)
Xlong xtime;
Xboolean talk;
X{
X	long old = Hallucination;
X	register struct monst *mtmp;
X
X	if (!xtime && old ) {
X		if (!Blind && talk) pline("Everything looks SO boring now.");
X		for (mtmp=fmon; mtmp; mtmp=mtmp->nmon)
X		  if (showmon(mtmp))
X		    atl(mtmp->mx, mtmp->my, (!mtmp->m_ap_type ||
X					     Protection_from_shape_changers)
X			? mtmp->data->mlet : (char) mimic_appearance(mtmp));
X		flags.botl = 1;
X	}
X	if (xtime && !old ) {
X		if (!Blind && talk) pline("Oh wow!  Everything looks so cosmic!");
X		flags.botl = 1;
X	}
X	Hallucination = xtime;
X	setsee();
X}
X
Xstatic void
Xghost_from_bottle()
X{
X	struct monst *mtmp = makemon(&mons[PM_GHOST], u.ux, u.uy);
X
X	if (!mtmp) {
X		pline("This bottle turns out to be empty.");
X		return;
X	}
X	if (Blind) {
X		pline("As you open the bottle, something emerges.");
X		return;
X	}
X	pline("As you open the bottle, an enormous %s emerges!",
X		Hallucination ? rndmonnam() : "ghost");
X	if(flags.verbose)
X	    You("are frightened to death, and unable to move.");
X	nomul(-3);
X	nomovemsg = "You regain your composure.";
X}
X
Xint
Xdodrink() {
X	register struct obj *otmp;
X
X	if (Strangled) {
X		pline("If you can't breathe air, how can you drink liquid?");
X		return 0;
X	}
X#ifdef FOUNTAINS
X	/* Is there a fountain to drink from here? */
X        if (IS_FOUNTAIN(levl[u.ux][u.uy].typ)) {
X		pline("Drink from the fountain? ");
X		if(yn() == 'y') {
X			(void) drinkfountain();
X			return 1;
X		}
X	}
X#endif
X#ifdef SINKS
X	/* Or a kitchen sink? */
X	if (IS_SINK(levl[u.ux][u.uy].typ)) {
X		pline("Drink from the sink? ");
X		if (yn() == 'y') {
X			(void) drinksink();
X			return 1;
X		}
X	}
X#endif
X
X	otmp = getobj(beverages, "drink");
X	if(!otmp) return(0);
X#ifndef NO_SIGNAL
X	otmp->in_use = TRUE;		/* you've opened the stopper */
X#endif
X	if(objects[otmp->otyp].oc_descr && !strcmp(objects[otmp->otyp].oc_descr, "smoky") && !rn2(13)) {
X		ghost_from_bottle();
X		useup(otmp);
X		return(1);
X	}
X	if(objects[otmp->otyp].oc_descr && !strcmp(objects[otmp->otyp].oc_descr, "glowing") && !rn2(13)) {
X		djinni_from_bottle(otmp);
X		useup(otmp);
X		return(1);
X	}
X	return dopotion(otmp);
X}
X
Xint
Xdopotion(otmp)
Xregister struct obj *otmp;
X{
X	int retval;
X
X	nothing = unkn = 0;
X	if((retval = peffects(otmp)) >= 0) return(retval);
X
X	if(nothing) {
X	    unkn++;
X	    You("have a %s feeling for a moment, then it passes.",
X		  Hallucination ? "normal" : "peculiar");
X	}
X	if(otmp->dknown && !objects[otmp->otyp].oc_name_known) {
X		if(!unkn) {
X			makeknown(otmp->otyp);
X			more_experienced(0,10);
X		} else if(!objects[otmp->otyp].oc_uname)
X			docall(otmp);
X	}
X	useup(otmp);
X	return(1);
X}
X
Xint
Xpeffects(otmp)
X	register struct obj	*otmp;
X{
X	register int i, ii, isdone;
X
X	switch(otmp->otyp){
X	case POT_RESTORE_ABILITY:
X#ifdef SPELLS
X	case SPE_RESTORE_ABILITY:
X#endif
X		unkn++;
X		if(otmp->cursed) {
X		    pline("Ulch!  This makes you feel mediocre!");
X		    break;
X		} else {
X		    pline("Wow!  This makes you feel %s!",
X			  (otmp->blessed) ? "great" : "good");
X		    i = rn2(A_MAX);		/* start at a random point */
X		    for(isdone = ii = 0; !isdone && ii < A_MAX; ii++) {
X			if(ABASE(i) < AMAX(i)) {
X			    ABASE(i) = AMAX(i);
X			    /* only first found if not blessed */
X			    isdone = !(otmp->blessed);
X			    flags.botl = 1;
X			}
X			if(++i >= A_MAX) i = 0;
X		    }
X		    if((ABASE(A_STR) == AMAX(A_STR)) && (u.uhs >= 3))
X			losestr(1);		/* kludge - mrs */
X		}
X		break;
X	case POT_HALLUCINATION:
X		if (Hallucination) nothing++;
X		make_hallucinated(Hallucination +
X				  rn1(200, 600 - 300*bcsign(otmp)), TRUE);
X		break;
X	case POT_WATER:
X		if(!otmp->blessed && !otmp->cursed) {
X			pline("This tastes like %swater.",
X			      otmp->spe == -1 ? "impure " : "");
X			lesshungry(rnd(otmp->spe == -1 ? 3 : 10));
X			break;
X		}
X		unkn++;
X#ifdef POLYSELF
X		if(is_undead(uasmon) || is_demon(uasmon) || 
X				u.ualigntyp == U_CHAOTIC) {
X		    if(otmp->blessed) {
X			pline("This burns like acid!");
X			if (u.ulycn != -1) {
X				Your("affinity to %s disappears!",
X				     makeplural(mons[u.ulycn].mname));
X				if(uasmon == &mons[u.ulycn] && !Polymorph_control)
X					rehumanize();
X				u.ulycn = -1;
X			}
X			losehp(d(2,6), "potion of holy water", KILLED_BY_AN);
X		    } else if(otmp->cursed) {
X			You("feel quite proud of yourself.");
X			healup(d(2,6),0,0,0);
X		    }
X		} else
X#endif
X		    if(otmp->blessed) {
X			You("feel full of awe.");
X			make_sick(0L,TRUE);
X#ifdef POLYSELF
X			if (u.ulycn != -1) {
X				You("feel purified.");
X				if(uasmon == &mons[u.ulycn] && !Polymorph_control)
X					rehumanize();
X				u.ulycn = -1;
X			}
X#endif
X			/* make_confused(0L,TRUE); */
X		    } else {
X			if(u.ualigntyp == U_LAWFUL) {
X			    pline("This burns like acid!");
X			    losehp(d(2,6), "potion of unholy water",
X				KILLED_BY_AN);
X			} else
X			    You("feel full of dread.");
X		    }
X		break;
X	case POT_BOOZE:
X		unkn++;
X		pline("Ooph!  This tastes like %s!",
X		      Hallucination ? "furniture polish" : "liquid fire");
X		if (!otmp->blessed) make_confused(HConfusion + d(3,8),FALSE);
X		/* the whiskey makes us feel better */
X		if(u.uhp < u.uhpmax) losehp(-1, "", 0); /* can't kill you */
X		lesshungry(10 * (2 + bcsign(otmp)));
X		if(otmp->cursed) {
X			You("pass out.");
X			multi = -rnd(15);
X			nomovemsg = "You awake with a headache.";
X		}
X		break;
X	case POT_ENLIGHTENMENT:
X		if(otmp->cursed) {
X			unkn++;
X			You("have an uneasy feeling...");
X		} else {
X			if (otmp->blessed) {
X				adjattrib(A_INT, 1, FALSE);
X				adjattrib(A_WIS, 1, FALSE);
X			}
X			You("feel self-knowledgeable...");
X			more();
X			enlightenment();
X			pline("The feeling subsides.");
X		}
X		break;
X	case POT_INVISIBILITY:
X#ifdef SPELLS
X	case SPE_INVISIBILITY:
X#endif
X		if(Invisible || See_invisible) nothing++;
X		else {
X		     newsym(u.ux,u.uy);
X		     if(!Blind)
X		       pline(Hallucination ?
X			 "Far out, man!  You can see right through yourself!" :
X			 "Gee!  All of a sudden, you can't see yourself.");
X		     else
X		       You("feel rather airy."), unkn++;
X		}
X		if (otmp->blessed && !(HInvis & INTRINSIC)) {
X			nothing = 0;
X#ifndef MACOS
X			pline("Do you want the invisibility to be permanent? ");
X			if (yn()=='n') HInvis += rn1(15,31);
X			else HInvis |= INTRINSIC;
X#else
X			if (UseMacAlertText(128,
X				"Do you want the invisibility to be permanent ?")
X				== 2) HInvis += rn1(15,31);
X			else HInvis |= INTRINSIC;
X#endif
X		} else HInvis += rn1(15,31);
X		if(otmp->cursed) {
X		    pline("For some reason, you feel your presence is known.");
X		    aggravate();
X		}
X		break;
X	case POT_SEE_INVISIBLE:
X	case POT_FRUIT_JUICE:
X		unkn++;
X		if(otmp->cursed)
X			pline("Yecch!  This tastes %s.",
X			  Hallucination ? "overripe" : "rotten"
X			 );
X		else pline (Hallucination ?
X#ifdef TUTTI_FRUTTI
X		   "This tastes like 10%% real %s juice all-natural beverage." :
X		   "This tastes like %s juice.", pl_fruit);
X#else
X		   "This tastes like 10%% real fruit juice all-natural beverage." :
X		   "This tastes like fruit juice.");
X#endif
X		if (otmp->otyp == POT_FRUIT_JUICE) {
X			lesshungry(10 * (2 + bcsign(otmp)));
X			break;
X		}
X		if (!otmp->cursed) {
X			/* Tell them they can see again immediately, which
X			 * will help them identify the potion...
X			 */
X			make_blinded(0L,TRUE);
X		}
X		if (otmp->blessed)
X			HSee_invisible |= INTRINSIC;
X		else
X			HSee_invisible += rn1(100,750);
X		break;
X	case POT_PARALYSIS:
X		if(Levitation)
X			You("are motionlessly suspended.");
X		else
X			Your("%s are frozen to the floor!",
X				makeplural(body_part(FOOT)));
X		nomul(-(rn1(10, 25 - 12*bcsign(otmp))));
X		break;
X	case POT_MONSTER_DETECTION:
X#ifdef SPELLS
X	case SPE_DETECT_MONSTERS:
X#endif
X		if (monster_detect(otmp))
X			return(1);		/* nothing detected */
X		break;
X	case POT_OBJECT_DETECTION:
X#ifdef SPELLS
X	case SPE_DETECT_TREASURE:
X#endif
X		if (object_detect(otmp))
X			return(1);		/* nothing detected */
X		break;
X	case POT_SICKNESS:
X		pline("Yecch!  This stuff tastes like poison.");
X		if (otmp->blessed) {
X#ifdef TUTTI_FRUTTI
X		pline("(But in fact it was mildly stale %s juice.)", pl_fruit);
X#else
X		pline("(But in fact it was mildly stale orange juice.)");
X#endif
X			if (pl_character[0] != 'H')
X				losehp(1, "mildly contaminated potion",
X					KILLED_BY_AN);
X		} else {
X		    if(Poison_resistance)
X#ifdef TUTTI_FRUTTI
X    pline("(But in fact it was biologically contaminated %s juice.)",pl_fruit);
X#else
X    pline("(But in fact it was biologically contaminated orange juice.)");
X#endif
X		    if (pl_character[0] == 'H')
X			pline("Fortunately, you have been immunized.");
X		    else {
X			int typ = rn2(A_MAX);
X			poisontell(typ);
X			adjattrib(typ,Poison_resistance ? -1 : -rn1(4,3), TRUE);
X			if(!Poison_resistance)
X				losehp(rnd(10)+5*!!(otmp->cursed),
X				       "contaminated potion", KILLED_BY_AN);
X		    }
X		}
X		if(Hallucination) {
X			You("are shocked back to your senses!");
X			make_hallucinated(0L,FALSE);
X		}
X		break;
X	case POT_CONFUSION:
X		if(!Confusion)
X		    if (Hallucination) {
X			pline("What a trippy feeling!");
X			unkn++;
X		    } else
X			pline("Huh, What?  Where am I?");
X		else	nothing++;
X		make_confused(HConfusion + rn1(7,16-8*bcsign(otmp)),FALSE);
X		break;
X	case POT_GAIN_ABILITY:
X		if(otmp->cursed) {
X		    pline("Ulch!  That potion tasted foul!");
X		    unkn++;
X		} else {
X		    i = rn2(A_MAX);		/* start at a random point */
X		    for(isdone = ii = 0; !isdone && ii < A_MAX; ii++) {
X			adjattrib(i, 1, FALSE);
X			/* only first found if not blessed */
X			isdone = !(otmp->blessed);
X			flags.botl = 1;
X			if(++i >= A_MAX) i = 0;
X		    }
X		}
X		break;
X	case POT_SPEED:
X		if(Wounded_legs && !otmp->cursed) {
X			heal_legs();
X			unkn++;
X			break;
X		}		/* and fall through */
X#ifdef SPELLS
X	case SPE_HASTE_SELF:
X#endif
X		if(!(Fast & TIMEOUT))
X			You("are suddenly moving much faster.");
X		else {
X			Your("%s get new energy.",
X				makeplural(body_part(LEG)));
X			unkn++;
X		}
X		Fast += rn1(10,100+60*bcsign(otmp));
X		break;
X	case POT_BLINDNESS:
X		if(Blind) nothing++;
X		make_blinded(Blinded + rn1(200, 250-125*bcsign(otmp)), TRUE);
X		break;
X	case POT_GAIN_LEVEL:
X		if (otmp->cursed) {
X			unkn++;
X			/* they went up a level */
X#ifdef ENDGAME
X			if((dlevel > 1  || u.uhave_amulet) &&
X							dlevel <= MAXLEVEL) { 
X				You("rise up, through the ceiling!");
X				goto_level((dlevel==1) ? ENDLEVEL
X					: dlevel-1, FALSE, FALSE);
X			} else You("have an uneasy feeling.");
X#else
X			if(dlevel > 1 && dlevel <= MAXLEVEL) {
X				You("rise up, through the ceiling!");
X#ifdef MACOS
X				segments |= SEG_POTION;
X#endif
X				goto_level(dlevel-1, FALSE, FALSE);
X			} else You("have an uneasy feeling.");
X#endif
X			break;
X		}
X		pluslvl();
X		if (otmp->blessed)
X			/* blessed potions place you at a random spot in the
X			 * middle of the new level instead of the low point
X			 */
X			u.uexp = rndexp();
X		break;
X	case POT_HEALING:
X		You("begin to feel better.");
X		healup(d(5,2) + 5 * bcsign(otmp),
X		       1, !!(otmp->blessed), !(otmp->cursed));
X		break;
X	case POT_EXTRA_HEALING:
X		You("feel much better.");
X		healup(d(5,4) + 5 * bcsign(otmp),
X		       2+3*!!(otmp->blessed), !(otmp->cursed), 1);
X		make_hallucinated(0L,TRUE);
X		break;
X	case POT_LEVITATION:
X#ifdef SPELLS
X	case SPE_LEVITATION:
X#endif
X		if(!Levitation) {
X			float_up();
X			if (otmp->cursed) {
X#ifdef STRONGHOLD
X	if((u.ux != xupstair || u.uy != yupstair) &&
X	   (!xupladder || u.ux != xupladder || u.uy != yupladder)) {
X#else
X	if(u.ux != xupstair || u.uy != yupstair) {
X#endif /* STRONGHOLD /**/
X					You("hit your %s on the ceiling.",
X						body_part(HEAD));
X					losehp(uarmh ? 1 : rnd(10),
X						"colliding with the ceiling",
X						KILLED_BY);
X				} else (void) doup();
X			}
X		} else
X			nothing++;
X		if (otmp->blessed) {
X			char buf[BUFSZ];
X			int lmoves = 0;
X
X			makeknown(POT_LEVITATION);
X			pline("How many moves do you wish to levitate for? [1-300] ");
X			do {
X				getlin(buf);
X			} while (buf[0]=='\033' || !buf[0] ||
X				(lmoves = atoi(buf)) < 1 || lmoves > 300);
X			HLevitation += lmoves;
X		} else HLevitation += rnd(150);
X		u.uprops[LEVITATION].p_tofn = float_down;
X		break;
X#ifdef SPELLS
X	case POT_GAIN_ENERGY:			/* M. Stephenson */
X		{	register int	 num;
X			if(otmp->cursed)
X			    You("feel lackluster.");
X			else
X			    pline("Magical energies course through your body.");
X			num = rnd(5) + 5 * otmp->blessed + 1;
X			u.uenmax += (otmp->cursed) ? -num : num;
X			u.uen += (otmp->cursed) ? -num : num;
X			if(u.uenmax <= 0) u.uen = u.uenmax = 0;
X			flags.botl = 1;
X		}
X		break;
X#endif
X	default:
X		impossible("What a funny potion! (%u)", otmp->otyp);
X		return(0);
X	}
X	return(-1);
X}
X
Xvoid
Xhealup(nhp, nxtra, curesick, cureblind)
X	int	nhp, nxtra;
X	register boolean curesick, cureblind;
X{
X#ifdef POLYSELF
X	if (u.mtimedone && nhp) {
X		u.mh += nhp;
X		if (u.mh > u.mhmax) u.mh = (u.mhmax += nxtra);
X	}
X#endif
X	if(nhp)	{
X		u.uhp += nhp;
X		if(u.uhp > u.uhpmax)	u.uhp = (u.uhpmax += nxtra);
X	}
X	if(cureblind)	make_blinded(0L,TRUE);
X	if(curesick)	make_sick(0L,TRUE);
X	flags.botl = 1;
X	return;
X}
X
Xvoid
Xstrange_feeling(obj,txt)
Xregister struct obj *obj;
Xregister const char *txt;
X{
X	if(flags.beginner)
X		You("have a %s feeling for a moment, then it passes.",
X		Hallucination ? "normal" : "strange");
X	else
X		pline(txt);
X
X	if(!obj)	/* e.g., crystal ball finds no traps */
X		return;
X
X	if(obj->dknown && !objects[obj->otyp].oc_name_known &&
X						!objects[obj->otyp].oc_uname)
X		docall(obj);
X	useup(obj);
X}
X
Xconst char *bottlenames[] = {
X	"bottle", "phial", "flagon", "carafe", "flask", "jar", "vial"
X};
X
Xvoid
Xpotionhit(mon, obj)
Xregister struct monst *mon;
Xregister struct obj *obj;
X{
X	register const char *botlnam = bottlenames[rn2(SIZE(bottlenames))];
X	boolean uclose, isyou = (mon == &youmonst);
X
X	if(isyou) {
X		uclose = TRUE;
X		pline("The %s crashes on your %s and breaks into shivers.",
X			botlnam, body_part(HEAD));
X		losehp(rnd(2), "thrown potion", KILLED_BY_AN);
X	} else {
X		uclose = (dist(mon->mx,mon->my) < 3);
X		if(Blind) pline("Crash!");
X		else pline("The %s crashes on %s%s and breaks into shivers.",
X			botlnam, mon_nam(mon), (haseyes(mon->data) &&
X			mon->data != &mons[PM_FLOATING_EYE]) ?
X#ifdef WORM
X			(notonhead ? "'s body" : "'s head")
X#else
X			"'s head"
X#endif
X			: "");
X		if(rn2(5) && mon->mhp > 1)
X			mon->mhp--;
X	}
X#ifdef WORM
X	notonhead = FALSE;
X#endif
X	pline("The %s evaporates.", xname(obj));
X
X	if(!isyou) switch (obj->otyp) {
X
X	case POT_RESTORE_ABILITY:
X	case POT_GAIN_ABILITY:
X	case POT_HEALING:
X	case POT_EXTRA_HEALING:
X		if(mon->mhp < mon->mhpmax) {
X			mon->mhp = mon->mhpmax;
X			if(!Blind)
X			pline("%s looks sound and hale again.", Monnam(mon));
X		}
X		break;
X	case POT_SICKNESS:
X		if((mon->mhpmax > 3) && !resist(mon, POTION_SYM, 0, NOTELL))
X			mon->mhpmax /= 2;
X		if((mon->mhp > 2) && !resist(mon, POTION_SYM, 0, NOTELL))
X			mon->mhp /= 2;
X		if(!Blind)
X		pline("%s looks rather ill.", Monnam(mon));
X		break;
X	case POT_CONFUSION:
X	case POT_BOOZE:
X		if(!resist(mon, POTION_SYM, 0, NOTELL))  mon->mconf = 1;
X		break;
X	case POT_INVISIBILITY:
X		unpmon(mon);
X		mon->minvis = 1;
X		pmon(mon);
X		break;
X	case POT_PARALYSIS:
X		if (mon->mcanmove) {
X			mon->mcanmove = 0;
X			/* really should be rnd(5) for consistency with players
X			 * breathing potions, but...
X			 */
X			mon->mfrozen = rnd(25);
X		}
X		break;
X	case POT_SPEED:
X		if (mon->mspeed == MSLOW) mon->mspeed = 0;
X		else mon->mspeed = MFAST;
X		break;
X	case POT_BLINDNESS:
X		{
X		    register int btmp = 64 + rn2(32) +
X					rn2(32) * !resist(mon, POTION_SYM, 0, NOTELL);
X		    mon->mblinded |= btmp;
X		    mon->mcansee = 0;
X		}
X		break;
X	case POT_WATER:
X		if (is_undead(mon->data) || is_demon(mon->data)) {
X			if (obj->blessed) {
X				kludge("%s shrieks in pain!", Monnam(mon));
X				mon->mhp -= d(2,6);
X				if (mon->mhp <1) killed(mon);
X			} else if (obj->cursed) {
X				if(!Blind)
X				pline("%s looks healthier.", Monnam(mon));
X				mon->mhp += d(2,6);
X				if (mon->mhp > mon->mhpmax)
X					mon->mhp = mon->mhpmax;
X			}
X		}
X		/* TO DO: Gremlins multiply when doused with water */
X		break;
X/*
X	case POT_GAIN_LEVEL:
X	case POT_LEVITATION:
X	case POT_FRUIT_JUICE:
X	case POT_MONSTER_DETECTION:
X	case POT_OBJECT_DETECTION:
X		break;
X*/
X	}
X	if(uclose && rn2(5))
X		potionbreathe(obj);
X	obfree(obj, (struct obj *)0);
X}
X
Xvoid
Xpotionbreathe(obj)
Xregister struct obj *obj;
X{
X	register int i, ii, isdone;
X
X	switch(obj->otyp) {
X	case POT_RESTORE_ABILITY:
X	case POT_GAIN_ABILITY:
X		if(obj->cursed) {
X		    pline("Ulch!  That potion smells terrible!");
X		    break;
X		} else {
X		    i = rn2(A_MAX);		/* start at a random point */
X		    for(isdone = ii = 0; !isdone && ii < A_MAX; ii++) {
X			if(ABASE(i) < AMAX(i)) {
X			    ABASE(i)++;
X			    /* only first found if not blessed */
X			    isdone = !(obj->blessed);
X			    flags.botl = 1;
X			}
X			if(++i >= A_MAX) i = 0;
X		    }
X		}
X		break;
X	case POT_HEALING:
X	case POT_EXTRA_HEALING:
X		if(u.uhp < u.uhpmax) u.uhp++, flags.botl = 1;
X		break;
X	case POT_SICKNESS:
X		if(u.uhp <= 5) u.uhp = 1; else u.uhp -= 5;
X		flags.botl = 1;
X		break;
X	case POT_HALLUCINATION:
X		You("have a vision for a moment.");
X		break;
X	case POT_CONFUSION:
X	case POT_BOOZE:
X		if(!Confusion)
X			You("feel somewhat dizzy.");
X		make_confused(HConfusion + rnd(5),FALSE);
X		break;
X	case POT_INVISIBILITY:
X		if (!See_invisible && !Invis)
X			pline("For an instant you could see through yourself!");
X		break;
X	case POT_PARALYSIS:
X		pline("Something seems to be holding you.");
X		nomul(-rnd(5));
X		break;
X	case POT_SPEED:
X		Fast += rnd(5);
X		Your("knees seem more flexible now.");
X		break;
X	case POT_BLINDNESS:
X		if(!Blind) pline("It suddenly gets dark.");
X		make_blinded(Blinded + rnd(5),FALSE);
X		seeoff(0);
X		break;
X/*
X	case POT_GAIN_LEVEL:
X	case POT_LEVITATION:
X	case POT_FRUIT_JUICE:
X	case POT_MONSTER_DETECTION:
X	case POT_OBJECT_DETECTION:
X		break;
X*/
X	}
X	/* note: no obfree() */
X}
X
Xstatic boolean
Xneutralizes(o1, o2)
Xregister struct obj *o1, *o2;
X{
X	switch (o1->otyp) {
X		case POT_SICKNESS:
X		case POT_HALLUCINATION:
X		case POT_BLINDNESS:
X		case POT_CONFUSION:
X			if (o2->otyp == POT_HEALING ||
X			    o2->otyp == POT_EXTRA_HEALING)
X				return TRUE;
X		case POT_HEALING:
X		case POT_EXTRA_HEALING:
X		case UNICORN_HORN:
X			if (o2->otyp == POT_SICKNESS ||
X			    o2->otyp == POT_HALLUCINATION ||
X			    o2->otyp == POT_BLINDNESS ||
X			    o2->otyp == POT_CONFUSION)
X				return TRUE;
X	}
X
X	return FALSE;
X}
X
Xboolean
Xget_wet(obj)
Xregister struct obj *obj;
X/* returns TRUE if something happened (potion should be used up) */
X{
X	switch (obj->olet) {
X	    case WEAPON_SYM:
X		if (!obj->rustfree &&
X		    objects[obj->otyp].oc_material == METAL &&
X		    obj->spe > -6 && !rn2(10)) {
X			Your("%s somewhat.", aobjnam(obj,"rust"));
X			obj->spe--;
X			return TRUE;
X		} else break;
X	    case POTION_SYM:
X		if (obj->otyp == POT_WATER) return FALSE;
X		Your("%s.", aobjnam(obj,"dilute"));
X		if (obj->spe == -1) {
X			obj->spe = 0;
X			obj->blessed = obj->cursed = 0;
X			obj->otyp = POT_WATER;
X		} else obj->spe--;
X		return TRUE;
X	    case SCROLL_SYM:
X		if (obj->otyp != SCR_BLANK_PAPER
X#ifdef MAIL
X		    && obj->otyp != SCR_MAIL
X#endif
X		    ) {
X			if (!Blind) {
X				if (obj->quan == 1)
X					pline("The scroll fades.");
X				else pline("The scrolls fade.");
X			}
X			obj->otyp = SCR_BLANK_PAPER;
X			return TRUE;
X		}
X	}
X	Your("%s wet.", aobjnam(obj,"get"));
X	return FALSE;
X}
X
Xint
Xdodip()
X{
X	register struct obj *potion, *obj;
X	const char *tmp;
X	uchar here;
X
X	if(!(obj = getobj("#", "dip")))
X		return(0);
X
X	here = levl[u.ux][u.uy].typ;
X#ifdef FOUNTAINS
X	/* Is there a fountain to dip into here? */
X	if (IS_FOUNTAIN(here)) {
X		pline("Dip it into the fountain? ");
X		if(yn() == 'y') {
X			dipfountain(obj);
X			return(1);
X		}
X	}
X#endif
X        if (is_pool(u.ux,u.uy)) {
X		pline("Dip it into the %s? ",
X		      here == POOL ? "pool" : "moat");
X		if(yn() == 'y') {
X			(void) get_wet(obj);
X			return(1);
X		}
X	}
X
X	if(!(potion = getobj(beverages, "dip into")))
X		return(0);
X	if (potion==obj && potion->quan==1) {
X		pline("That is a potion bottle, not a Klein bottle!");
X		return 0;
X	}
X	if(potion->otyp == POT_WATER) {
X		if (potion->blessed) {
X			if (obj->cursed) {
X				if (!Blind)
X				    Your("%s %s.",
X					  aobjnam(obj, "softly glow"),
X					  Hallucination ? hcolor() : amber);
X				obj->cursed=0;
X				obj->bknown=1;
X	poof:
X				if(!(objects[potion->otyp].oc_name_known) &&
X				   !(objects[potion->otyp].oc_uname))
X					docall(potion);
X				useup(potion);
X				return(1);
X			} else if(!obj->blessed) {
X				if (!Blind) {
X				    tmp = Hallucination ? hcolor() : light_blue;
X				    Your("%s with a%s %s aura.",
X					  aobjnam(obj, "softly glow"),
X					  index(vowels, *tmp) ? "n" : "", tmp);
X				}
X				obj->blessed=1;
X				obj->bknown=1;
X				goto poof;
X			}
X		} else if (potion->cursed) {
X			if (obj->blessed) {
X				if (!Blind)
X				    Your("%s %s.", aobjnam(obj, "glow"),
X				     Hallucination ? hcolor() : (const char *)"brown");
X				obj->blessed=0;
X				obj->bknown=1;
X				goto poof;
X			} else if(!obj->cursed) {
X				if (!Blind) {
X				    tmp = Hallucination ? hcolor() : black;
X				    Your("%s with a%s %s aura.",
X					  aobjnam(obj, "glow"),
X					  index(vowels, *tmp) ? "n" : "", tmp);
X				}
X				obj->cursed=1;
X				obj->bknown=1;
X				goto poof;
X			}
X		} else
X			if (get_wet(obj))
X			    goto poof;
X	}
X	else if(obj->olet == POTION_SYM && obj->otyp != potion->otyp) {
X		/* Mixing potions is dangerous... */
X		pline("The potions mix...");
X		if (obj->cursed || !rn2(10)) {
X			pline("BOOM!  They explode!");
X			u.uhp -= rnd(10);
X			flags.botl = 1;
X			potionbreathe(obj);
X			useup(obj);
X			useup(potion);
X			return(1);
X		}
X
X		obj->blessed = obj->cursed = obj->bknown = 0;
X		if (Blind) obj->dknown = 0;
X
X		switch (neutralizes(obj, potion) ||
X			obj->spe == -1 /* diluted */ ? 1 : rnd(8)) {
X			case 1:
X				obj->otyp = POT_WATER;
X				obj->blessed = obj->cursed = 0;
X				break;
X			case 2:
X			case 3:
X				obj->otyp = POT_SICKNESS;
X				break;
X			case 4:
X				{
X				  struct obj *otmp;
X				  otmp = mkobj(POTION_SYM,FALSE);
X				  obj->otyp = otmp->otyp;
X				  obfree(otmp, (struct obj *)0);
X				}
X				break;
X			default:
X				if (!Blind)
X			    pline("The mixture glows brightly and evaporates.");
X				useup(obj);
X				useup(potion);
X				return(1);
X		}
X
X		if (obj->otyp == POT_WATER) {
X			obj->spe = 0; /* in case it was diluted before */
X			pline("The mixture bubbles violently%s.",
X				Blind ? "" : ", then clears");
X		} else {
X			obj->spe--; /* diluted */
X			if (!Blind) {
X				pline("The mixture looks %s.", objects[obj->otyp].oc_descr);
X				obj->dknown = 1;
X			}
X		}
X
X		useup(potion);
X		return(1);
X	}
X
X	if(obj->olet == WEAPON_SYM && obj->otyp <= SHURIKEN) {
X	    if(potion->otyp == POT_SICKNESS && !obj->opoisoned) {
X		char buf[BUFSZ];
X		Strcpy(buf, xname(potion));
X		pline("The %s form%s a coating on the %s.",
X			buf, potion->quan==1 ? "s" : "", xname(obj));
X		obj->opoisoned = 1;
X		goto poof;
X	    } else if(obj->opoisoned && 
X		      (potion->otyp == POT_HEALING ||
X		       potion->otyp == POT_EXTRA_HEALING)) {
X		pline("A coating wears off the %s.", xname(obj));
X		obj->opoisoned = 0;
X		goto poof;
X	    }
X	}
X
X	if(obj->otyp == UNICORN_HORN && neutralizes(obj, potion)) {
X		pline("The potion clears.");
X		potion->otyp = POT_WATER;
X		potion->blessed = 0;
X		potion->cursed = 0;
X		potion->spe = 0;
X		return(1);
X	}
X
X	pline("Interesting...");
X	return(1);
X}
X
X
Xvoid
Xdjinni_from_bottle(obj)
Xregister struct obj *obj;
X{
X	register struct monst *mtmp;
X
X	if(!(mtmp = makemon(&mons[PM_DJINNI], u.ux, u.uy))){
X		pline("It turns out to be empty.");
X		return;
X	}
X
X	if (!Blind) {
X		pline("In a cloud of smoke, %s emerges!", defmonnam(mtmp));
X		pline("%s speaks.", Monnam(mtmp));
X	} else {
X		You("smell acrid fumes.");
X		pline("Something speaks.");
X	}
X
X	switch (obj->blessed ? 0 : obj->cursed ? 4 : rn2(5)) {
X	case 0 : verbalize("I am in your debt.  I will grant one wish!");
X		makewish();
X		mongone(mtmp);
X		break;
X	case 1 : verbalize("Thank you for freeing me!");
X		(void) tamedog(mtmp, (struct obj *)0);
X		break;
X	case 2 : verbalize("You freed me!");
X		mtmp->mpeaceful = 1;
X		break;
X	case 3 : verbalize("It is about time!");
X		pline("The %s vanishes.",
X			Hallucination ? rndmonnam() : "djinni");
X		mongone(mtmp);
X		break;
X	default: verbalize("You disturbed me, fool!");
X		break;
X	}
X}
X
X/* monster_detect is also used in the crystal ball routine */
X/* returns 1 if nothing was detected		*/
X/* returns 0 if something was detected		*/
Xint
Xmonster_detect(otmp)
Xregister struct obj	*otmp;
X{
X	register struct monst	*mtmp;
X
X	if(!fmon) {
X		if (otmp)
X			strange_feeling(otmp, Hallucination ?
X					      "You get the heebie jeebies." :
X					      "You feel threatened.");
X		return(1);
X	} else {
X		int woken = FALSE;
X
X		cls();
X		for(mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
X			if(mtmp->mx > 0)
X		    at(mtmp->mx, mtmp->my,
X		       (uchar)(Hallucination ? rndmonsym() : mtmp->data->mlet),
X		       AT_MON);
X			if (otmp && otmp->cursed && (mtmp->msleep || !mtmp->mcanmove)) {
X				mtmp->msleep = mtmp->mfrozen = 0;
X				mtmp->mcanmove = 1;
X				woken = TRUE;
X			}
X		}
X		prme();
X		You("sense the presence of monsters.");
X		if (woken)
X			pline("Monsters sense the presence of you.");
X		more();
X		docrt();
X	}
X	return(0);
X}
X
X#endif /* OVLB */
X#ifdef OVL0
X
X/* object_detect is also used in the crystal ball routine */
X/* returns 1 if nothing was detected		*/
X/* returns 0 if something was detected		*/
Xint
Xobject_detect(otmp)
Xregister struct obj	*otmp;
X{
X	register struct obj	*objs;
X	register struct monst	*mtmp;
X	boolean mfound=FALSE, mofound=FALSE;
X
X	if(!fobj) {
X		for(mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
X			/* mofound can be 1 of 2 completely different things,
X			 * either of which stops the "strange feeling"...
X			 */
X			if (mtmp->minvent || (mtmp->mimic && otmp->cursed)) {
X				mofound = TRUE;
X				break;
X			}
X		}
X		if (!mofound) {
X			if (otmp)
X			    strange_feeling(otmp, "You feel a pull downward.");
X			return(1);
X		}
X	}
X	if (mofound) goto outobjmap;
X	for(objs = fobj; objs; objs = objs->nobj)
X		if(objs->ox != u.ux || objs->oy != u.uy)
X			goto outobjmap;
X	You("sense the presence of objects nearby.");
X	return(0);
Xoutobjmap:
X	cls();
X	for(objs = fobj; objs; objs = objs->nobj)
Xat(objs->ox, objs->oy, (uchar)(Hallucination ? rndobjsym() : objs->olet), AT_OBJ);
X	/* monster possessions added by GAN 12/16/86 */
X	for(mtmp = fmon ; mtmp ; mtmp = mtmp->nmon)
X		if(mtmp->minvent)
X			for(objs = mtmp->minvent;objs;objs = objs->nobj)
X			    at(mtmp->mx, mtmp->my, (uchar)objs->olet, AT_OBJ);
X	if (otmp && otmp->cursed) {
X		for(mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
X			if (mtmp->mimic) {
X				mnexto(mtmp);
X				mfound = TRUE;
X			}
X		}
X	}
X	prme();
X	You("sense the presence of objects.");
X	if (mfound) pline("Objects sense the presence of you.");
X	more();
X	docrt();
X	return(0);
X}
X
X#endif /* OVL0 */
X#ifdef OVLB
X
X/* the detections are pulled out so they can	*/
X/* also be used in the crystal ball routine	*/
X/* returns 1 if nothing was detected		*/
X/* returns 0 if something was detected		*/
Xint
Xtrap_detect(sobj)
Xregister struct obj	*sobj;
X/* sobj is null if crystal ball, *scroll if gold detection scroll */
X{
X	register struct trap *ttmp;
X	register struct obj *obj;
X	register int door;
X	boolean found = FALSE;
X	coord cc;
X
X	for(ttmp = ftrap; ttmp; ttmp = ttmp->ntrap) {
X		if(ttmp->tx != u.ux || ttmp->ty != u.uy)
X			goto outtrapmap;
X		else found = TRUE;
X	}
X	for(obj = fobj; obj; obj = obj->nobj) {
X		if ((obj->otyp==LARGE_BOX || obj->otyp==CHEST) && obj->otrapped)
X			if (obj->ox != u.ux || obj->oy != u.uy)
X				goto outtrapmap;
X			else found = TRUE;
X	}
X	for(door=0; door<=doorindex; door++) {
X		cc = doors[door];
X		if (levl[cc.x][cc.y].doormask & D_TRAPPED)
X			if (cc.x != u.ux || cc.x != u.uy)
X				goto outtrapmap;
X			else found = TRUE;
X	}
X	if(!found) {
X		char buf[42];
X		Sprintf(buf, "Your %s stop itching.",
X			makeplural(body_part(TOE)));
X		strange_feeling(sobj,buf);
X		return(1);
X	}
X	/* traps exist, but only under me - no separate display required */
X	Your("%s itch.", makeplural(body_part(TOE)));
X	return(0);
Xouttrapmap:
X	cls();
X#define SYMBOL (uchar)(Hallucination ? rndobjsym() : \
X		(sobj && sobj->cursed) ? GOLD_SYM : TRAP_SYM)
X#define AT Hallucination || (sobj && sobj->cursed) ? AT_OBJ : AT_MAP
X	for(ttmp = ftrap; ttmp; ttmp = ttmp->ntrap)
X		at(ttmp->tx, ttmp->ty, SYMBOL, AT);
X	for(obj = fobj; obj; obj = obj->nobj) {
X		if ((obj->otyp==LARGE_BOX || obj->otyp==CHEST) && obj->otrapped)
X			at(obj->ox, obj->oy, SYMBOL, AT);
X	}
X	for(door=0; door<=doorindex; door++) {
X		cc = doors[door];
X		if (levl[cc.x][cc.y].doormask & D_TRAPPED)
X			at(cc.x, cc.y, SYMBOL, AT);
X	}
X#undef SYMBOL
X#undef AT
X	prme();
X	if (sobj && sobj->cursed)
X		You("feel very greedy.");
X	else
X		You("feel entrapped.");
X	more();
X	docrt();
X	return(0);
X}
X
X#endif /* OVLB */
END_OF_FILE
if test 30531 -ne `wc -c <'src/potion.c'`; then
    echo shar: \"'src/potion.c'\" unpacked with wrong size!
fi
# end of 'src/potion.c'
fi
echo shar: End of archive 26 \(of 56\).
cp /dev/null ark26isdone
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 56 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