billr@saab.CNA.TEK.COM (Bill Randle) (07/12/90)
Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu>
Posting-number: Volume 10, Issue 74
Archive-name: nethack3p9/Part29
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 29 (of 56)."
# Contents: include/msdos.h mac/SL.proj.hqx src/read.c
# Wrapped by billr@saab on Wed Jul 11 17:11:35 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'include/msdos.h' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'include/msdos.h'\"
else
echo shar: Extracting \"'include/msdos.h'\" \(605 characters\)
sed "s/^X//" >'include/msdos.h' <<'END_OF_FILE'
X/* SCCS Id: @(#)msdos.h 3.0 88/07/21
X/* msdos.h - function declarations for msdos.c */
X/* NetHack may be freely redistributed. See license for details. */
X
X#ifndef MSDOS_H
X#define MSDOS_H
X
X#ifdef OLD_TOS
X#define msmsg cprintf
X#endif
Xextern const char *alllevels, *allbones;
Xextern char levels[], bones[], permbones[], SAVEF[], hackdir[];
X#ifdef MSDOS
Xextern char SAVEP[];
X#endif
Xextern int ramdisk;
X#if defined(DGK) && !defined(OLD_TOS)
Xextern int count_only;
X#endif
X
X#define C(c) (0x1f & (c))
X#define M(c) (0x80 | (c))
X#define ABORT C('a')
X#define COUNT 0x1
X#define WRITE 0x2
X
X#endif /* MSDOS_H /* */
END_OF_FILE
if test 605 -ne `wc -c <'include/msdos.h'`; then
echo shar: \"'include/msdos.h'\" unpacked with wrong size!
fi
# end of 'include/msdos.h'
fi
if test -f 'mac/SL.proj.hqx' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'mac/SL.proj.hqx'\"
else
echo shar: Extracting \"'mac/SL.proj.hqx'\" \(25348 characters\)
sed "s/^X//" >'mac/SL.proj.hqx' <<'END_OF_FILE'
X(This file must be converted with BinHex 4.0)
X
X:$A0`C@0IE'9f,R"bEfS!8&*25NY"5%`!N!K2Z-2$!*!%!3#3!diH!!"0(J!!!CS
X!!""G$80bD@0VCA3J4h*KF'J#!*!$39"36%0(8NBK"!ecF'9MAfaPGLj`FQpU!J#
X3!e"56dT,38K-!!%!P!!i!!"38Np+5d&)6!!"!*3!1!#3%3+L,8`q!*!'6lJ!N!S
X9!*!$%&d2CQPZC#"04L"QB@0dEh*c!J#3!d&38%a0ENCN)33!#J!X!*!%)JS!N!j
XC&!!!A!#KeUj)SGDZ6k(AMGB!N"i-c!!"$BB!&J#3"J2`!*$r!*$r!*$r!*$be!!
X!!9J!!(!&!!"%8PC5!9!!*'hN!!$r-!#f!*!&%!!NEH3!!2m`!,B!N!83!#4Yj!!
X!rc!!YJ#3"4!!*'hN!!$r-!#f!*!&%!!NEH3!!2m`!,B!N!83!#4Yj!!!rc!!YJ#
X3"4!!*'hN!!$r-!#f!*!&%!!NEH3!!2m`!,B!N!83!#4Yj!!!rc!!YJ#3"4!!*'h
XN!!$r-!#f!*!&%!!NEH3!!2m`!,B!N!83!#4Yj!!!rc!!YJ#3"4!!*'hN!!$r-!#
Xf!*!&%!!NEH3!!2m`!,B!N!83!#4Yj!!!rc!!YJ#3"4!!*'hN!!$r-!#f!*!&%!K
XcF'9MAfaPGVB!N!83!#4Yj!!!rc!!YJ#3"4!!*'hN!!$r-!#f!*!&%!!NEH3!!2m
X`!,B!N!8339"36'jS8d`)!!'!!!!#`!!!!3#3"'!!N"-%!*!J!J-!!`#3!r`!N!0
XJ!*!6"!#3(J'A!3)!"3#3!rJ!N!0J!*!6"!#3(TNS!3)!"J#3!r3!N!0J!*!6"!#
X3(TNS!3)!"`#3!r!!N!0J!*!6"!#3(TNS!3)!"!#3!q`!N!0J!*!6"!#3(J'A!3)
X!!J#3!qJ!N!0J!*!6"!#3)!%#!!J!N!2N!*!$B!#3%`3!N#!"!J!*!*!$i!#3!f!
X!N"-%!*!HI[!"!J!+!*!$h!#3!f!!N"-%!*!J!3)!!3#3!pJ!N!0J!*!6"!#3(Rl
X8!3)!N!8)!"Mr-!#fri3!N!0J!*!$F!#3"e!!N!-J!"`r2!!"UI!%#Mmm!!'Tm!3
XH2c`!!DR`"$)r2!!"UI!%6Mmm!!'Tm!5%2c`!!DR`"+3r2!!"UI!%aMmm!!'Tm!6
XQ2c`!!DR`"air2!!"UI!!N!-%!*!("!#3)`S)!!!'!*!$"J#3"!F`!*!$#J#3'p4
X#H!T+RFj1ZJ"86VS!CL`m58j%@%kk"@j(q[r+*Sa(q[r)*S41ZJ"Q6VS#U%kk"LC
X1ZJ$F6VS!U%*R5(MrrdK[!!4)9cmm!!%L1[qb6VS$JNke%!!JE3"X6T!!UI44q!T
XHIJ"1ZJ,kC`K+N!"R"!M3!!C1G5!i#RKQ$#`m@Np148kk"33J$%IkrfBQJ%je@Bm
X[2%4"9%&#CkQJ)&FJ8#*i#3JJ$C!!L8IkrdiQJ+!ZUD-X2&088P01ZJ614rVr0LD
X-,$a%8N9-6VS%[L"-)!4R$%kk!EB%J!#3!`aQp%lk"@T19[rD3IJ*%#*2F##J,R!
X"d"&D%G,!3IS!%R!&S#j9MdK[!!+TPdjH6R8ZFR0bB`"(qJAZ*VJ+I#mi#S"Q!PL
X26R9)jrri2Lm!2&(i#PjJ#PQ2,`LTT5!IS%"1ZJ)NCd4(q[ki*SJJ%'IQ)N"+N@B
XZ!"!!`#`m3e*&6%kk"#aR*$i[!$`J6#!%C`a1ZJ"i")!!N!--C[41ZJ636VS"R%c
XI(rp1GA!2UFP1ZJ9m6VS!#%kk"241G5"i#ZbJ*5"3)NJL''!+3HJ!#(3"K"M3`P(
X*rr53!)M3L@B#6R8L!+!Z)(J+l#!"S#3L8%r[rm!J6d+S!")aD3!%!"DJ&8+R5'N
X!$#"2UI)b'%kk!CiN@0A"0"JL''ibCaC53@F'8N&R'Nje-LMrp%kk!EM68Nje-LM
Xrp%kk!BM68Nje-LMrp%kk!Bl6U[rq6R91ZJ&1-LN!$%TT!!TQ(&4#DJa`BkR*8N*
XQq0056R91ZJ&8dUN!$Y056R91ZJ&XdUN!$P*#CJ668Nje3r83!Vj4CY3-B6mmCXj
X53QB'#QS!&rrq-L&B35*krAc5NC*+de*1G6)B6VS"$NAe%!$9f$3BCc)L''iNC`j
X53@B8-LMrp%kk!4CJ'$)Srr41ZJ$SB!ib+2rd6VS!m'!'6VS"%0+0dj*1G5)B6VS
X""0056R8JH[d3)$Vp%%US!!"R+$)S!#KR)L3S!"KC3N2Y!"$6k!!%e9Nbr$mm3KN
X5k!!p-[bTm&&"CZa"k!"!")!!N!0!CXC1G5"kr-`J1[c-F[pd!%US!!"R',iS!$e
XQ%MBS!#KR$04$XUJ!"'8%)LJ!"%(S!%!%J!#3!d"QeL"kr+SJ8!4"!"!``HC+--*
X1G9Q2,ca$6d4&2`HTS#"I82J+AL!)6R8SH[af)R3B!*2X!$M6c%je+(VmAX,m!%!
XL0"JB+(VmCY+86R8SH[a+`[`!3#)d'!L5Z[a16R8SH[`i`[`!3#)d'"$5Z[`i6R8
XSH[`Q`[`!3#)d'!3'J3#3!a"1G8kkrk)b+3!-5QN!#QB'6VVrZ'!%6VVreY+T!!j
X1G5"I-KJd',"B9mRrqNT#Crj1m#$m)&mb'$3BX*KAbIrk5N*RrNl`)2SJAc)B0"L
X`3Qi+N!""E3E33%(`!!)`%'Iq6[!!!#![!!3[33!%)Lm!##pI!!4)jc`!*!!Q!8K
X#a--S!#S"5%A)aG4%5%+3!m$"d)*-h`!m)Kp1G5![!!3[33!%)Lm!##pI!!4)jc%
X!6VS!R%cI!)`L(dje)#m!"#p"!!3L,`!),em!"%MR-3"1ZJ"m)!&-h`#-)Kp1G5!
X[!!3[33!%)Lm!##pI!!4)jc%!6VS!,%cI!)`L(dje)#m!"#p"!!3L,`!),em!"%M
XR-3"1ZJ!-)!&-h`#-)Kp1G8U!DKa+J@S-4)"%J8kk!#"%J8je4)"1ZJ!@4)"%J8j
Xe5S&U#N5"6VS!"N5!6R8Z2!!!rrqbJ'-')J"`!%jeX)GL$)$"5%!b!%*!5%"1GE+
X(BKSZ!%*!5%#!`8K!5%Fq!%K(MX%`"dK(-JG1G53!*J(LL1+*XSGLq)$"`)Fb!m,
X!,J0)4ml!5%I5Kf8)NS*L"%5"6R963'$NIJ"4q!TH@Bm["Mm(UD!J(fF!!+iQ3&Q
X2,`ZTT5BI)!XS!e*(ldG54cS(B"CCMbm'2`HTS#!IC`!!L&*("S3!!(rq9Bm[!+Q
XQ-"m)!!!&CYa3q!THcd@D4fBF)!1J3#m,UD)J%fF!!&S[#kQ5+&-J5k!TF!&1G5!
X%S4iJ#'F!!%)S5#m,UD)J%fF!!$BJ5b!$B"KCMbm'2`HTS#!IC`!!)P*()%!J2!!
X!Iri[##"3)NcC`+!ZUD04cIrDQF3Q6(!"6R8J5dT&CJ5J)djeS"p1G6)mUI"$q[V
X'6VS!D$)mUI*$q[XS6VS!A$)mUI0$q[XF6VS!8$)mUI4$q[X)6[S!4#m))'m!##p
XS!!)!##"i!UC`$0#3!,#i!UTQ*%kk!'3b2+R`6VS!4$)mUI*1ZJ!m-MbTmdkk!$3
Xb2+Rd6VS!,#"I6R8`!D&'*%K`$%Ti!SjU"+8HB!+K(M!"S%F`r%kj)-N`r%lj)-T
X1G6!"S8BLD!!)S"m`!5"*S%G1G3#3"%je)$Vrq'F%)%"#N!"1G3#3$#*krAc5NC*
X+de*1G6)B6VS"$NAe%!$9f$3BCc)L''iNC`j53@B8-LMrp%kk!4CJ'$)Srr41ZJ$
XSB!ib+2rd6VS!m'!'6VS"%0+0dj*1G5)B6VS""0056R8JH[d3)$Vp%%US!!"R+$)
XS!#KR)L3S!"KC3N2Y!"$6k!!%e9Nbr$mm3KN5k!!p-[bTm&&"CZa"k!"!")!!N!0
X!CXC1G5"kr-`J1[c-F[pd!%US!!"R',iS!$eQ%MBS!#KR$04$XUJ!"'8%)LJ!"%(
XS!%!%J!#3!d"QeL"kr+SJ8!4"!"!``HC+--*1G9Q2,ca$6d4&2`HTS#"I82J+AL!
X)6R8SH[af)R3B!*2X!$M6c%je+(VmAX,m!%!L0"JB+(VmCY+86R8SH[a+`[`!3#)
Xd'!L5Z[a16R8SH[`i`[`!3#)d'"$5Z[`i6R8SH[`Q`[`!3#)d'!3'J3#3!a"1G8k
Xkrk)b+3!-5QN!#QB'6VVrZ'!%6VVreY+T!!j1G5"I-KJd',"B9mRrqNT#Crj1m#$
Xm)&mb'$3BX*KAbIrk5N*RrNl`)2SJAc)B0"L`3Qi+N!""E3E33%(`!!)`%'Iq6[!
X!!#![!!3[33!%)Lm!##pI!!4)jc`!*!!Q!8K#a--S!#S"5%A)aG4%5%+3!m$"d)*
X-h`!m)Kp1G5![!!3[33!%)Lm!##pI!!4)jc%!6VS!R%cI!)`L(dje)#m!"#p"!!3
XL,`!),em!"%MR-3"1ZJ"m)!&-h`#-)Kp1G5![!!3[33!%)Lm!##pI!!4)jc%!6VS
X!,%cI!)`L(dje)#m!"#p"!!3L,`!),em!"%MR-3"1ZJ!-)!&-h`#-)Kp1G8U!DKa
X+J@S-4)"%J8kk!#"%J8je4)"1ZJ!@4)"%J8je5S&U#N5"6VS!"N5!6R8Z2!!!rrq
XbJ'-')J"`!%jeX)GL$)$"5%!b!%*!5%"1GE+(BKSZ!%*!5%#!`8K!5%Fq!%K(MX%
X`"dK(-JG1G53!*J(LL1+*XSGLq)$"`)Fb!m,!,J0)4ml!5%I5Kf8)NS*L"%5"6R9
X63'$NIJ"4q!TH@Bm["Mm(UD!J(fF!!+iQ3&Q2,`ZTT5BI)!XS!e*(ldG54cS(B"C
XCMbm'2`HTS#!IC`!!L&*("S3!!(rq9Bm[!+QQ-"m)!!!&CYa3q!THcd@D4fBF)!1
XJ3#m,UD)J%fF!!&S[#kQ5+&-J5k!TF!&1G5!%S4iJ#'F!!%)S5#m,UD)J%fF!!$B
XJ5b!$B"KCMbm'2`HTS#!IC`!!)P*()%!J2!!!Iri[##"3)NcC`+!ZUD04cIrDQF3
XQ6(!"6R8J5dT&CJ5J)djeS"p1G6)mUI"$q[V'6VS!D$)mUI*$q[XS6VS!A$)mUI0
X$q[XF6VS!8$)mUI4$q[X)6[S!4#m))'m!##pS!!)!##"i!UC`$0#3!,#i!UTQ*%k
Xk!'3b2+R`6VS!4$)mUI*1ZJ!m-MbTmdkk!$3b2+Rd6VS!,#"I6R8`!D&'*%K`$%T
Xi!SjU"+8HB!+K(M!"S%F`r%kj)-N`r%lj)-T1G6!"S8BLD!!)S"m`!5"*S%G1G3#
X3"%je)$Vrq'F%)%"#N!"1G3"%-MbTmNkk!$`b2+Rc6VS!0$)mUI41ZJ!X)&p1G6!
X"S8BN5(!-5RJ#MQS%T4jJ!U%H-!'J4c$m6VNJb6$m6[NJbNje-!'K4L*S!!LJ(c!
X")%QJ4dje!*!%6R8J1[riC`3J3%+3!%je!*!6#J#3$$J!!$1+U!!c8ZJ!-e1%!!!
X$B!#3"6)!N"C!J1j1!$05k%!!!0!!-e+d!*!&-e,`!$05p!!c8[J!-e,m!$06!!!
Xc8`3!-e-)!$06$!!c8a!!-e-8!$06'!!c8a`!-e-J!$06*!!c8bJ!-e-X!$06-!!
Xc8c3!-e-i!$062!!c8d!!-e0%!$065!!c8d`!-e03!$069!!c8eJ!-e0F!$06B!!
Xc8f3!-e0S!$06E!!c8h!!-e0d!$06H!!c8h`!-e1!!$1(+!!cJN`!-hcF!$0ff!!
XcESJ!-f$)!$0BR!!c8m!!-fNB!$0Z9!!cEL3!-fhdJ!!%h!#3!r!#!!N*!!%!!2q
X3#+)H5`d!'!!"!!!Te8e"3dB!#@eKBfCTE'8ZB`!!!D#Fc@fJR-eYS*c0E3!D!!)
X!!#Iq68&$5!%+6@&M5'9KC'9bF`#3!`'L,DLkSLfSZU)YZVF!'!!"!!!TeN026NB
X!#'0[EQCTCbjS!(-!!U)H([HL(KlhSKiHp`!D!!%!!#R@9&*"4!!+G(*KC(0dC'-
XZD!#3!`+L(Ke&SKiG4D)H(88!'!!"!!!TeNG-6d)!#'GXEf*KE#jS!'J!!k$(pEH
XJar@hS-IeY`!@!!)!!#KJ8e4%53%(Fh4ND@mZD!!!!k)H'rQL(K[jSKiEq3!@!!%
X!!#R@3dp28J!(Bfp[FQ3ZD!!!!k)R#q+L*`[LSLF,iJ!B!!%!!#R@68&$3`!*E@&
XMBfpZCLjS!!!%SKiH"U)H(JDL(Ki'!"B!!3!!+GC08d42!!GYFf4[FbjS!!!%SKi
XHdk)H(Y1L(Kl6!"J!!3!!+GC6@908!!KcHA0dC@dZD!#3!`5JR0hPS*cGjD#FhH8
X!&J!#!!!SB&4*688""R4TE@8ZD!"S!!5JR0dhS*cG0k#Fh6F!&J!#!!!SB%C$6P3
X""dCMER4X,QJ!!!5JR0fXS*cGV+#FhD`!'!!#!!!SB&084%3"#&0dC'4PCLjS!*!
X$"+#FhG@JR0h9S*cGe3!B!!)!!#KJ8e4%6!%)8h4NE'PL,QJ!N!-%S-IdfD$(p0Q
XJar6C!"J!!J!!+'"69&**!3K6G(*TEQFZD!#3!`5JR-e$S*c03k#Fc8-!'!!#!!!
XS!e""8d-"#("KFf0KE#jS!*!$"+#FaLHJR-BRS*c'*`!D!!)!!#J$899*3`%,8A9
XTBfYNFQ&h,QJ!!!5JR-AQS*c&jU#FaHB!'!!#!!!S!dC26P3"#8C[ER40Ch)ZD!!
X!"+#FaG@JR-A9S*c&e3!D!!)!!#J$49C&6J%+4ACPER40Ch)ZD!#3!`5JR-ClS*c
X'Hk#FaRX!'J!#!!!S!eG*6N3"#eGTEQ4[GdeRFLjS!!!%S*c'"+#FaJ5JR-B%!"J
X!!J!!+!0048j9!3P0C@je6@Gb,QJ!!!5JR-CIS*c'Ak#FaPm!(!!#!!!S!e084%B
X"$&0dC%CTE'93DfFZD!#3!`5JR-BrS*c'2k#FaMm!(!!#!!!S!e0&4dd"$&0PCfe
XPER4-C()ZD!#3!`5JR-CYS*c'ED#FaQd!(!!#!!!S!e426d`"$94[EfaLEhK9G'P
XX,QJ!!!5JR-B1S*c'$U#FaJi!'!!#!!!S!dp6993"#%p69A4TE#jS!'N!"+#FaF1
XJR-A$S*c&``!D!!)!!#J$4%P"6!%,4'PKE'pR6@Gb,QJ!!!5JR-ADS*c&fU#FaGS
X!'!!#!!!S!dC*6%8"#8CTE'90Ch)ZD!!!"+#FaHbJR-AXS*c&l!!8!!)!!#J$5%C
X6,J%&5%C6,QJ!!!5JX6d9S,%p&D#a248!&J!#!!!S!d026%m""d0[E'pb,QJ!!!5
XJR-BVS*c'+k#FaLX!(!!#!!!S!e*&8dm"$9*PFfpeFQ0P6@Gb,QJ!!!5L+DM@SLQ
XSeU)TU0B!'!!"!!!TeN9B9%8!#'9iG'9bELjS!'F!"+)H'jUL(KZDSKiEQJ!D!!%
X!!#R@68&$33!+6@&M3@aPFR3ZD!!ZJJ!),!#3!q`#!!N*!!%!!2q3#+)YR58!'J!
X"!!!Te8a&9Pm!#QaPGPpMEfe`,Q-!N!-"S*c0ED#Fc@fJR-eY!"S!!J!!*rj0380
X)!3T0B@0)C@&NCA*c!*!$!D)H(9fL(KeGSKiGA3!@!!%!!#R@5%&$5`!'D'&MDbj
XS!'8!!U)YU,UL,DLkSLfkY`!B!!%!!#R@3dp14J!)BfpZCQPR,QJ!F`!$SKiHpk)
XH([HL(Klh!"S!!3!!+GC88N&%!!TdFQ&NFh4NBbjS!*!$!k)H(8@L(Ke&SKiG43!
XB!!%!!#R@4da23J!)Cfa[BQ&X,QJ!D!!%S-IeYk$(pEHJar@h!"B!!J!!+'"69%4
X*!3GcG'4TEbjS!!!%SKiEqD)H'rQL(K[j!"B!!3!!+GC$6dp5!!GMEfpbC#jS!!!
X%SLF,iU)R#q+L*`[L!"J!!3!!+GC0380$!!PYB@0MEfjQ,QJ!!!@L(Ki'SKiH"U)
XH(JB!&J!"!!!TeNe64%m!"fecC'pc,QJ!!!@L(Kl6SKiHdk)H(Y-!'!!"!!!TeP0
XC8e3!#(0jFh4PE5jS!*!$"D#FhH@JR0hPS*cGj3!@!!)!!#KJ9%P043%'G'PYC5j
XS!'J!"D#Fh6HJR0dhS*cG0`!@!!)!!#KJ4N019!%(4Q0ZG'`ZD!!!"D#FhDbJR0f
XXS*cGV!!B!!)!!#KJ8e4%4!%)8h4NC'9Q,QJ!N!-&S*cGeD#FhG@JR0h9!"J!!J!
X!+'"69%4-!3K6G'4XD@)ZD!#3!`@Jar6CS-IdfD$(p0N!'!!#!!!SB&088NN"#&0
XdFQPZCbjS!*!$"D#Fc81JR-e$S*c03`!B!!)!!#J$8%&63`%)F'&cBf&X,QJ!N!-
X&S*c'*k#FaLHJR-BR!"S!!J!!+!0498P$!3Y4G@PMDf4bBAFZD!!!"D#FaHDJR-A
XQS*c&jJ!B!!)!!#J$4Np19!%*4QpZG%eRFLjS!!!&S*c&eD#FaG@JR-A9!"S!!J!
X!+!0&9N91!3T&GQ9ZG%eRFLjS!*!$"D#FaRZJR-ClS*c'H`!D!!)!!#J$9dP14!%
X,9fPZC'ph6@Gb,QJ!!!@JR-B%S*c'"+#FaJ3!'!!#!!!S!de&6P8"#8ePER90Ch)
XZD!!!"D#FaPqJR-CIS*c'A`!F!!)!!#J$8e4%4J%-8h4N4QPXC9"VCbjS!*!$"D#
XFaMqJR-BrS*c'2`!F!!)!!#J$8d9(63%-8f9RE@9ZG%aNFLjS!*!$"D#FaQfJR-C
XYS*c'E3!F!!)!!#J$9%p26!%09'p[E'*[H&9dD@`ZD!!!"D#FaJkJR-B1S*c'$J!
XB!!)!!#J$6e099!%)6e09G'PX,QJ!D3!&S*c&`k#FaF1JR-A$!"S!!J!!+!0%58&
X-!3Y%D@&XEfG0Ch)ZD!!!"D#FaGUJR-ADS*c&fJ!B!!)!!#J$4NP-43%*4QPXC8e
XRFLjS!!!&S*c&l+#FaHbJR-AX!"3!!J!!+!0)4P-Z!39)4P-ZD!!!"D#a24@JX6d
X9S,%p&3!@!!)!!#J$3dp-6`%(3fpXEh)ZD!!!"D#FaLZJR-BVS*c'+`!F!!)!!#J
X$8N966`%08Q9cEh9bBf90Ch)ZD!!!"D)TU0DL+DM@SLQSeJ!B!!%!!#R@49K843!
X)CAKdCA*Z,QJ!C`!&SKiEQU)H'jUL(KZD!"S!!3!!+GC0380"!!T0B@0"E'9bG#j
XS!#i!!U)H("HL(K`ASKiF&`!@!!%!!#R@4%9$6!!'C'9ME#jS!(3!!k)H(UQL(Kk
XTSKiHU3!@!!%!!#R@8e"&6!!(Fh"PE'`ZD!!!!k)H'm1L(K[$SKiE``!@!!%!!#R
X@3dp-6`!(BfpXEh)ZD!!!!k)H(KZL(KiESKiH'`!8!!%!!#R@6d*+,J!&Ef*U,QJ
X!!!1L(KpYSKiIED)H(fd!&!!"!!!TePP295i!"AP[G5jS!!!%SKiE[+)H'lbL(KZ
Xm!"J!!3!!+GC"9&45!!KKG(4bD@)ZD!"S!!5L(KhdSKiGp+)H(I3!&J!"!!!TeNe
X26P-!"fe[ER0d,QJ!!!5L(Kq*SKiILD)H(iN!'!!"!!!TePP299!!#AP[GA"bEh!
XZD!!!"D)H(QQL(KjTSKiHD3!@!!%!!#R@8&*28!!'F(*[F#jS!#i!"D)H(Q'L(Kj
XKSKiHB3!D!!%!!#R@8%9563!+F'9bE@pZFh3ZD!!Z!!DL(KfUSKiGUU)H(DS!'!!
X"!!!TeNe26N%!#@e[EQ&dG'XZD!!!"U)H(H+L(KhLSKiGiJ!B!!%!!#R@68p14J!
X*E@pZCQaKCbjS!!!&SLabkU)XFZUL,(,U!"3!!3!!+GC365j)!!4`E5jS!'%!!k)
XXF['L,(,aSLabm3!B!!%!!#R@6dj"63!)EfjKE@9c,QJ!N!-#SKiH!D)H(J'L(Ki
X"!"J!!3!!+GC06dj6!!KYEfjcH@dZD!#3!`+L(KfBSKiGQ+)H(CJ!'!!"!!!TeNe
X,8Nm!#'eVFQp[E5jS!*!$!U)H(LkL(KiZSKiH,J!D!!%!!#R@6d*+3`!+Ef*UBfa
XKFh-ZD!!Z!!+L(Ke*SKiG5D)H(8N!&J!"!!!TeNG26%3!"QG[E'3ZD!"c!!+L,(,
XMSLabik)XFZ-!&J!"!!!TeP4539!!"R4bBA!ZD!"c!!+L(KdQSKiG*U)H(5B!&J!
X"!!!TeNC-38F!"QCXB@FZD!"c!!+L(KkCSKiHQD)H(TN!&!!"!!!TeP*0,NJ!"(*
XY,QJ!D!!"SKiHTU)H(UDL(KkQ!"J!!3!!+GC68&p-!!KcF&pXCABZD!"S!"b!!!K
X3!*!$k!)!#3N!!3!!rj!)SLfEh!!B!!%!!#R96%9@A`!*E'9fAfaPH#jM!!!"S*c
X0ED#Fc@fJR-eY!"S!!J!!*rj0380)!3T0B@0)C@&NCA*c!*!$!D$(pEHJar@hS-I
XeY`!@!!)!!#KJ8e4%53!(Fh4ND@mZD!!!!D)H(9fL(KeGSKiGA3!@!!%!!#R@5%&
X$5`!'D'&MDbjS!*!$!U)YU,UL,DLkSLfkY`!B!!%!!#R@3dp14J!)BfpZCQPR,QJ
X!F`!$SKiHpk)H([HL(Klh!"S!!3!!+GC88N&%!!TdFQ&NFh4NBbjS!*!$!k)H(8@
XL(Ke&SKiG43!B!!%!!#R@4da23J!)Cfa[BQ&X,QJ!D!!%SKiEqD)H'rQL(K[j!"B
X!!3!!+GC$6dp5!!GMEfpbC#jS!!!%SLF,iU)R#q+L*`[L!"J!!3!!+GC0380$!!P
XYB@0MEfjQ,QJ!!!@L(Ki'SKiH"U)H(JB!&J!"!!!TeNe64%m!"fecC'pc,QJ!!!@
XL(Kl6SKiHdk)H(Y-!'!!"!!!TeP0C8e3!#(0jFh4PE5jS!*!$"D#FhH@JR0hPS*c
XGj3!@!!)!!#KJ9%P043%'G'PYC5jS!'J!"D#Fh6HJR0dhS*cG0`!@!!)!!#KJ4N0
X19!%(4Q0ZG'`ZD!!!"D#FhDbJR0fXS*cGV!!B!!)!!#KJ8e4%4!%)8h4NC'9Q,QJ
X!N!-&S*cGeD#FhG@JR0h9!"J!!J!!+'"69%4-!3K6G'4XD@)ZD!#3!`@Jar6CS-I
XdfD$(p0N!'!!#!!!SB&088NN"#&0dFQPZCbjS!*!$"D#Fc81JR-e$S*c03`!B!!)
X!!#J$8%&63`%)F'&cBf&X,QJ!N!-&S*c'*k#FaLHJR-BR!"S!!J!!+!0498P$!3Y
X4G@PMDf4bBAFZD!!!"D#FaHDJR-AQS*c&jJ!B!!)!!#J$4Np19!%*4QpZG%eRFLj
XS!!!&S*c&eD#FaG@JR-A9!"S!!J!!+!0&9N91!3T&GQ9ZG%eRFLjS!*!$"D#FaRZ
XJR-ClS*c'H`!D!!)!!#J$9dP14!%,9fPZC'ph6@Gb,QJ!!!@JR-B%S*c'"+#FaJ3
X!'!!#!!!S!de&6P8"#8ePER90Ch)ZD!!!"D#FaPqJR-CIS*c'A`!F!!)!!#J$8e4
X%4J%-8h4N4QPXC9"VCbjS!*!$"D#FaMqJR-BrS*c'2`!F!!)!!#J$8d9(63%-8f9
XRE@9ZG%aNFLjS!*!$"D#FaQfJR-CYS*c'E3!F!!)!!#J$9%p26!%09'p[E'*[H&9
XdD@`ZD!!!"D#FaJkJR-B1S*c'$J!B!!)!!#J$6e099!%)6e09G'PX,QJ!D3!&S*c
X&`k#FaF1JR-A$!"S!!J!!+!0%58&-!3Y%D@&XEfG0Ch)ZD!!!"D#FaGUJR-ADS*c
X&fJ!B!!)!!#J$4NP-43%*4QPXC8eRFLjS!!!&S*c&l+#FaHbJR-AX!"3!!J!!+!0
X)4P-Z!39)4P-ZD!!!"D#a24@JX6d9S,%p&3!@!!)!!#J$3dp-6`%(3fpXEh)ZD!!
X!"D#FaLZJR-BVS*c'+`!F!!)!!#J$8N966`%08Q9cEh9bBf90Ch)ZD!!!"D)TU0D
XL+DM@SLQSeJ!B!!%!!#R@49K843!)CAKdCA*Z,QJ!C`!&SKiEQU)H'jUL(KZD!"S
X!!3!!+GC0380"!!T0B@0"E'9bG#jS!#i!!U)H("HL(K`ASKiF&`!@!!%!!#R@4%9
X$6!!'C'9ME#jS!(3!!k)H(UQL(KkTSKiHU3!@!!%!!#R@8e"&6!!(Fh"PE'`ZD!!
X!!k)H'm1L(K[$SKiE``!@!!%!!#R@3dp-6`!(BfpXEh)ZD!!!!k)H(KZL(KiESKi
XH'`!8!!%!!#R@6d*+,J!&Ef*U,QJ!!!1L(KpYSKiIED)H(fd!&!!"!!!TePP295i
X!"AP[G5jS!!!%SKiE[+)H'lbL(KZm!"J!!3!!+GC"9&45!!KKG(4bD@)ZD!"S!!5
XL(KhdSKiGp+)H(I3!&J!"!!!TeNe26P-!"fe[ER0d,QJ!!!5L(Kq*SKiILD)H(iN
X!'!!"!!!TePP299!!#AP[GA"bEh!ZD!!!"D)H(QQL(KjTSKiHD3!@!!%!!#R@8&*
X28!!'F(*[F#jS!#i!"D)H(Q'L(KjKSKiHB3!D!!%!!#R@8%9563!+F'9bE@pZFh3
XZD!!Z!!DL(KfUSKiGUU)H(DS!'!!"!!!TeNe26N%!#@e[EQ&dG'XZD!!!"U)H(H+
XL(KhLSKiGiJ!B!!%!!#R@68p14J!*E@pZCQaKCbjS!!!&SLabkU)XFZUL,(,U!"3
X!!3!!+GC365j)!!4`E5jS!'%!!k)XF['L,(,aSLabm3!B!!%!!#R@6dj"63!)Efj
XKE@9c,QJ!N!-#SKiH!D)H(J'L(Ki"!"J!!3!!+GC06dj6!!KYEfjcH@dZD!#3!`+
XL(KfBSKiGQ+)H(CJ!'!!"!!!TeNe,8Nm!#'eVFQp[E5jS!*!$!U)H(LkL(KiZSKi
XH,J!D!!%!!#R@6d*+3`!+Ef*UBfaKFh-ZD!!Z!!+L(Ke*SKiG5D)H(8N!&J!"!!!
XTeNG26%3!"QG[E'3ZD!"c!!+L,(,MSLabik)XFZ-!&J!"!!!TeP4539!!"R4bBA!
XZD!"c!!+L(KdQSKiG*U)H(5B!&J!"!!!TeNC-38F!"QCXB@FZD!"c!!+L(KkCSKi
XHQD)H(TN!&!!"!!!TeP*0,NJ!"(*Y,QJ!D!!"SKiGCk)H(@HL(KeR!"S!!3!!+GC
X-49CI!!TXCACIBfpYF#jS!#i!!D)H(UDL(KkQSKiHTJ!B!!%!!#R@8e"I6!!)Fh"
XIE'9f,QJ!D))!"0`!N!2d!J!*#3!"!!$rN!LL(LA[!"B!!3!!+G9"6%a2!!GKE'a
X[BbjM!!!"S*c0ED#Fc@fJR-eY!"S!!J!!*rj0380)!3T0B@0)C@&NCA*c!'%!!D)
XYU,UL,DLkSLfkY`!B!!%!!#R@3dp14J!)BfpZCQPR,QJ!F`!#SKiHpk)H([HL(Kl
Xh!"S!!3!!+GC88N&%!!TdFQ&NFh4NBbjS!'%!!U)H(8@L(Ke&SKiG43!B!!%!!#R
X@4da23J!)Cfa[BQ&X,QJ!D!!$S-IeYk$(pEHJar@h!"B!!J!!+'"69%4*!3GcG'4
XTEbjS!!!$SKiEqD)H'rQL(K[j!"B!!3!!+GC$6dp5!!GMEfpbC#jS!!!$SLF,iU)
XR#q+L*`[L!"J!!3!!+GC0380$!!PYB@0MEfjQ,QJ!!!5L(Ki'SKiH"U)H(JB!&J!
X"!!!TeNe64%m!"fecC'pc,QJ!!!5L(Kl6SKiHdk)H(Y-!'!!"!!!TeP0C8e3!#(0
XjFh4PE5jS!*!$"+#FhH@JR0hPS*cGj3!@!!)!!#KJ9%P043%'G'PYC5jS!'J!"+#
XFh6HJR0dhS*cG0`!@!!)!!#KJ4N019!%(4Q0ZG'`ZD!!!"+#FhDbJR0fXS*cGV!!
XB!!)!!#KJ8e4%4!%)8h4NC'9Q,QJ!N!-%S*cGeD#FhG@JR0h9!"J!!J!!+'"69%4
X-!3K6G'4XD@)ZD!#3!`5Jar6CS-IdfD$(p0N!'!!#!!!SB&088NN"#&0dFQPZCbj
XS!*!$"+#Fc81JR-e$S*c03`!B!!)!!#J$8%&63`%)F'&cBf&X,QJ!N!-%S*c'*k#
XFaLHJR-BR!"S!!J!!+!0498P$!3Y4G@PMDf4bBAFZD!!!"+#FaHDJR-AQS*c&jJ!
XB!!)!!#J$4Np19!%*4QpZG%eRFLjS!!!%S*c&eD#FaG@JR-A9!"S!!J!!+!0&9N9
X1!3T&GQ9ZG%eRFLjS!*!$"+#FaRZJR-ClS*c'H`!D!!)!!#J$9dP14!%,9fPZC'p
Xh6@Gb,QJ!!!5JR-B%S*c'"+#FaJ3!'!!#!!!S!de&6P8"#8ePER90Ch)ZD!!!"+#
XFaPqJR-CIS*c'A`!F!!)!!#J$8e4%4J%-8h4N4QPXC9"VCbjS!*!$"+#FaMqJR-B
XrS*c'2`!F!!)!!#J$8d9(63%-8f9RE@9ZG%aNFLjS!*!$"+#FaQfJR-CYS*c'E3!
XF!!)!!#J$9%p26!%09'p[E'*[H&9dD@`ZD!!!"+#FaJkJR-B1S*c'$J!B!!)!!#J
X$6e099!%)6e09G'PX,QJ!D3!%S*c&`k#FaF1JR-A$!"S!!J!!+!0%58&-!3Y%D@&
XXEfG0Ch)ZD!!!"+#FaGUJR-ADS*c&fJ!B!!)!!#J$4NP-43%*4QPXC8eRFLjS!!!
X%S*c&l+#FaHbJR-AX!"3!!J!!+!0)4P-Z!39)4P-ZD!!!"+#a24@JX6d9S,%p&3!
X@!!)!!#J$3dp-6`%(3fpXEh)ZD!!!"+#FaLZJR-BVS*c'+`!F!!)!!#J$8N966`%
X08Q9cEh9bBf90Ch)ZD!!!"+)TU0DL+DM@SLQSeJ!B!!%!!#R@49K843!)CAKdCA*
XZ,QJ!C`!%SKiEQU)H'jUL(KZD!"S!!3!!+GC0380"!!T0B@0"E'9bG#jS!#kL(S!
X!!$!!!!%!N!-*#3!"!!$rN!LJb!28!"3!!J!!+&P"6P0*!!4"6P0*!!#!!!!`!*!
X$r!!!#3N!!3!!rj!)S-J0[!!8!!)!!#KC98j*@!!%G@jTH!!!J!!!0!#3!rJ!!!N
X*!!%!!2q3#+#Z`J)!'!!#!!!S"8e"3e3!#%eKBe4bBA"c!!#!!!K3!*!$j!)!#3N
X!!3!!rj!)SLfF,!!D!!%!!#R96%9@A`!+E'9fAfeKD@iZB`#3!`'JR-eYS*c0ED#
XFc@d!'J!#!!!RrNe"3dJ"#NeKBdKPB@4PFR-!N!-"SKiGAD)H(9fL(KeG!"B!!3!
X!+GC)380,!!CSB@0V,QJ!C3!#SLfSZU)YU,UL,EUh!"J!!3!!+GC$6dj'!!KMEfj
XQD@FZD!"c!!1L(KlhSKiHpk)H([F!'J!"!!!TeP45383!#R4bB@4cG'4M,QJ!N!-
X$SKiG4D)H(8@L(Ke&!"J!!3!!+GC(6%p#!!KRE'pLB@`ZD!"S!!5Jar@hS-IeYk$
X(pEF!&J!#!!!SB&084%N""h0dC'P[,QJ!!!5L(K[jSKiEqD)H'rN!&J!"!!!TeN0
X26e)!"f0[Eh*N,QJ!!!5L*`[LSLF,iU)R#q)!'!!"!!!TeNe"3d-!#@eKBf0[EQB
XZD!!!"D)H(JDL(Ki'SKiH"J!@!!%!!#R@690%6`!(EA0NEh-ZD!!!"D)H(Y1L(Kl
X6SKiHd`!B!!%!!#R@8eP69!!)FhPcG'9Y,QJ!N!-&S*cGjD#FhH@JR0hP!"B!!J!
X!+'"858e&!3CdD@eP,QJ!D!!&S*cG0k#Fh6HJR0dh!"B!!J!!+'"'3dj8!3G'Bfj
XdE#jS!!!&S*cGV+#FhDbJR0fX!"J!!J!!+'"69%4%!3K6G'4NC@BZD!#3!`@JR0h
X9S*cGeD#FhG8!'!!#!!!SB&084%`"#&0dC'aTBLjS!*!$"D$(p0QJar6CS-Idf3!
XB!!)!!#KJ8e4553%)8h4bD@jR,QJ!N!-&S*c03k#Fc81JR-e$!"J!!J!!+!03390
X$!3K`BA0MB@`ZD!#3!`@JR-BRS*c'*k#FaLF!'J!#!!!S!e&958-"#e&eD@0VC(*
XKGbjS!!!&S*c&jU#FaHDJR-AQ!"J!!J!!+!0'6dj8!3P'Efjd6@Gb,QJ!!!@JR-A
X9S*c&eD#FaG8!'J!#!!!S!d9@48i"#N9fC@jd6@Gb,QJ!N!-&S*c'Hk#FaRZJR-C
Xl!"S!!J!!+!0A58j%!3YAD@jNEhG0Ch)ZD!!!"D#FaJ5JR-B%S*c'"!!B!!)!!#J
X$689193%*6@9ZG8eRFLjS!!!&S*c'Ak#FaPqJR-CI!"`!!J!!+!069%4'!3a6G'4
X'D@aP8'YR,QJ!N!-&S*c'2k#FaMqJR-Br!"`!!J!!+!0648G0!3a6C@GYC@jd6'4
Xb,QJ!N!-&S*c'ED#FaQfJR-CY!"`!!J!!+!086dp-!3e8EfpXBQpi9A4TE#jS!!!
X&S*c'$U#FaJkJR-B1!"J!!J!!+!028e98!3K28e9dD@`ZD!"T!!@JR-A$S*c&`k#
XFaF-!'J!#!!!S!d4*38`"#d4TB@a[CdeRFLjS!!!&S*c&fU#FaGUJR-AD!"J!!J!
X!+!0'58a&!3P'D@aP6@Gb,QJ!!!@JR-AXS*c&l+#FaH`!&!!#!!!S!dK'8bi""8K
X'8bjS!!!&S,%p&D#a24@JX6d9!"B!!J!!+!0$6da2!3G$Efa[FLjS!!!&S*c'+k#
XFaLZJR-BV!"`!!J!!+!054902!3e5CA0[GA*MC8eRFLjS!!!&SLQSeU)TU0DL+DM
X@!"J!!3!!+GC&@&4&!!KPH(4PFQiZD!"R!!@L(KZDSKiEQU)H'jS!'J!"!!!TeNe
X"3d%!#NeKBd&XCA*d,QJ!,J!#SKiF&k)H("HL(K`A!"B!!3!!+GC%480-!!CNC@0
XX,QJ!G!!$SKiHUD)H(UQL(KkT!"B!!3!!+GC68%9-!!GcF'9XE#jS!!!$SKiE`k)
XH'm1L(K[$!"B!!3!!+GC$6da2!!GMEfa[FLjS!!!$SKiH'k)H(KZL(KiE!"3!!3!
X!+GC23NSZ!!9[BQSZD!!!!k)H(ffL(KpYSKiIE3!8!!%!!#R@@8p9,J!&H@pe,QJ
X!!!5L(KZmSKiE[+)H'l`!'!!"!!!TeN&89&)!#'&dG(*TBLjS!'J!"+)H(I5L(Kh
XdSKiGp!!@!!%!!#R@68p18`!(E@pZFh3ZD!!!"+)H(iQL(Kq*SKiIL3!B!!%!!#R
X@@8p98!!*H@peF(*[F#jS!!!&SKiHDD)H(QQL(KjT!"B!!3!!+GC38Np3!!C`FQp
X`,QJ!,J!&SKiHBD)H(Q'L(KjK!"S!!3!!+GC349*0!!T`CA*YEfjcG#jS!#i!"U)
XH(DUL(KfUSKiGUJ!B!!%!!#R@68p133!*E@pZBA4dDbjS!!!'SKiGiU)H(H+L(Kh
XL!"J!!3!!+GC06dj'!!PYEfjQE'&R,QJ!!!@L(Kh%SKiGa+)H(F3!'!!"!!!TeNe
X26N3!#@e[EQ4KG'%ZD!!!"D)XFZUL,(,USLabkJ!8!!%!!#R@8%dZ5!!%F'dZD!"
Xd!!1L,(,aSLabmD)XF[%!'!!"!!!TeNp138d!#'pZB@ePFbjS!*!$!U)H(J'L(Ki
X"SKiH!3!B!!%!!#R@68p18`!)E@pZFhPY,QJ!N!-#SKiGQ+)H(CLL(KfB!"J!!3!
X!+GC05e*2!!KYDh*[EfdZD!#3!`+L(KiZSKiH,U)H(Li!'J!"!!!TeNp#5N-!#Qp
XLDQ0XBA0c,QJ!,J!#SKiG5D)H(8QL(Ke*!"B!!3!!+GC(6da%!!CREfaN,QJ!F`!
X#SLabik)XFZ1L,(,M!"B!!3!!+GC88N&3!!CdFQ&`,QJ!F`!#SKiG*U)H(5DL(Kd
XQ!"B!!3!!+GC'6%&(!!CQE'&R,QJ!F`!#SKiHQD)H(TQL(KkC!"3!!3!!+GC565j
X)!!4bE5jS!'J!!D#Fh3DJR0d'S*cG"J!B!!)!!#KJ3dp18`%*BfpZFfpXC5jS!)!
X!"J3!N!2J!J!*#3!"!!$rN!LL(MID!"B!!3!!+G906dj6!!GYEfjcG#jM!!!"S*c
X0ED#Fc@fJR-eY!"S!!J!!*rj0380)!3T0B@0)C@&NCA*c!#i!!D)YU,UL,DLkSLf
XkY`!B!!%!!#R@3dp14J!)BfpZCQPR,QJ!F`!#SKiHpk)H([HL(Klh!"S!!3!!+GC
X88N&%!!TdFQ&NFh4NBbjS!#i!!U)H(8@L(Ke&SKiG43!B!!%!!#R@4da23J!)Cfa
X[BQ&X,QJ!D!!$S-IeYk$(pEHJar@h!"B!!J!!+'"69%4*!3GcG'4TEbjS!!!$SKi
XEqD)H'rQL(K[j!"B!!3!!+GC$6dp5!!GMEfpbC#jS!!!$SLF,iU)R#q+L*`[L!"J
X!!3!!+GC0380$!!PYB@0MEfjQ,QJ!!!5L(Ki'SKiH"U)H(JB!&J!"!!!TeNe64%m
X!"fecC'pc,QJ!!!5L(Kl6SKiHdk)H(Y-!'!!"!!!TeP0C8e3!#(0jFh4PE5jS!*!
X$"+#FhH@JR0hPS*cGj3!@!!)!!#KJ9%P043%'G'PYC5jS!'J!"+#Fh6HJR0dhS*c
XG0`!@!!)!!#KJ4N019!%(4Q0ZG'`ZD!!!"+#FhDbJR0fXS*cGV!!B!!)!!#KJ8e4
X%4!%)8h4NC'9Q,QJ!N!-%S*cGeD#FhG@JR0h9!"J!!J!!+'"69%4-!3K6G'4XD@)
XZD!#3!`5Jar6CS-IdfD$(p0N!'!!#!!!SB&088NN"#&0dFQPZCbjS!*!$"+#Fc81
XJR-e$S*c03`!B!!)!!#J$8%&63`%)F'&cBf&X,QJ!N!-%S*c'*k#FaLHJR-BR!"S
X!!J!!+!0498P$!3Y4G@PMDf4bBAFZD!!!"+#FaHDJR-AQS*c&jJ!B!!)!!#J$4Np
X19!%*4QpZG%eRFLjS!!!%S*c&eD#FaG@JR-A9!"S!!J!!+!0&9N91!3T&GQ9ZG%e
XRFLjS!*!$"+#FaRZJR-ClS*c'H`!D!!)!!#J$9dP14!%,9fPZC'ph6@Gb,QJ!!!5
XJR-B%S*c'"+#FaJ3!'!!#!!!S!de&6P8"#8ePER90Ch)ZD!!!"+#FaPqJR-CIS*c
X'A`!F!!)!!#J$8e4%4J%-8h4N4QPXC9"VCbjS!*!$"+#FaMqJR-BrS*c'2`!F!!)
X!!#J$8d9(63%-8f9RE@9ZG%aNFLjS!*!$"+#FaQfJR-CYS*c'E3!F!!)!!#J$9%p
X26!%09'p[E'*[H&9dD@`ZD!!!"+#FaJkJR-B1S*c'$J!B!!)!!#J$6e099!%)6e0
X9G'PX,QJ!D3!%S*c&`k#FaF1JR-A$!"S!!J!!+!0%58&-!3Y%D@&XEfG0Ch)ZD!!
X!"+#FaGUJR-ADS*c&fJ!B!!)!!#J$4NP-43%*4QPXC8eRFLjS!!!%S*c&l+#FaHb
XJR-AX!"3!!J!!+!0)4P-Z!39)4P-ZD!!!"+#a24@JX6d9S,%p&3!@!!)!!#J$3dp
X-6`%(3fpXEh)ZD!!!"+#FaLZJR-BVS*c'+`!F!!)!!#J$8N966`%08Q9cEh9bBf9
X0Ch)ZD!!!"+)TU0DL+DM@SLQSeJ!B!!%!!#R@49K843!)CAKdCA*Z,QJ!C`!%SKi
XEQU)H'jUL(KZD!"S!!3!!+GC0380"!!T0B@0"E'9bG#jS!#i!!D)H(Q'L(KjKSKi
XHB3!D!!%!!#R@8%9563!+F'9bE@pZFh3ZD!!Z!!+L(KfUSKiGUU)H(DS!'!!"!!!
XTeNe26N%!#@e[EQ&dG'XZD!!!!U)H(H+L(KhLSKiGiJ!B!!%!!#R@68p14J!*E@p
XZCQaKCbjS!!!"SKiH!D)H(J'L(Ki"!"J!!3!!+GC06dj6!!KYEfjcH@dZD!#3!`'
XL(K`hSKiF0k)H($F!&J!"!!!TeN965%X!"Q9cD'XZD!"S!!'L(Kp&SKiI4D)H(d8
X!&J!"!!!TePC"98`!"hCKG@ad,QJ!!!'L(K``SKiF-+)H($!!&J!"!!!TeN938NN
X!"Q9`FQNZD!#3!`'L(K[$SKiE`k)H'm-!&J!"!!!TeN026%m!"f0[E'pb,QJ!JJ!
X&F!#3!p`#!!N*!!%!!2q3#+)N!Zd!'!!"!!!Te8p#5N8!#@pLDQ9MG(-ZB`!!!D#
XFc@fJR-eYS*c0E3!D!!)!!#Iq68&$5!%+6@&M5'9KC'9bF`!Z!!'L,DLkSLfSZU)
XYZVF!'!!"!!!TeN026NB!#'0[EQCTCbjS!(-!!U)H([HL(KlhSKiHp`!D!!%!!#R
X@9&*"4!!+G(*KC(0dC'-ZD!!Z!!+L(Ke&SKiG4D)H(88!'!!"!!!TeNG-6d)!#'G
XXEf*KE#jS!'J!!k$(pEHJar@hS-IeY`!@!!)!!#KJ8e4%53%(Fh4ND@mZD!!!!k)
XH'rQL(K[jSKiEq3!@!!%!!#R@3dp28J!(Bfp[FQ3ZD!!!!k)R#q+L*`[LSLF,iJ!
XB!!%!!#R@68&$3`!*E@&MBfpZCLjS!!!%SKiH"U)H(JDL(Ki'!"B!!3!!+GC08d4
X2!!GYFf4[FbjS!!!%SKiHdk)H(Y1L(Kl6!"J!!3!!+GC6@908!!KcHA0dC@dZD!#
X3!`5JR0hPS*cGjD#FhH8!&J!#!!!SB&4*688""R4TE@8ZD!"S!!5JR0dhS*cG0k#
XFh6F!&J!#!!!SB%C$6P3""dCMER4X,QJ!!!5JR0fXS*cGV+#FhD`!'!!#!!!SB&0
X84%3"#&0dC'4PCLjS!*!$"+#FhG@JR0h9S*cGe3!B!!)!!#KJ8e4%6!%)8h4NE'P
XL,QJ!N!-%S-IdfD$(p0QJar6C!"J!!J!!+'"69&**!3K6G(*TEQFZD!#3!`5JR-e
X$S*c03k#Fc8-!'!!#!!!S!e""8d-"#("KFf0KE#jS!*!$"+#FaLHJR-BRS*c'*`!
XD!!)!!#J$899*3`%,8A9TBfYNFQ&h,QJ!!!5JR-AQS*c&jU#FaHB!'!!#!!!S!dC
X26P3"#8C[ER40Ch)ZD!!!"+#FaG@JR-A9S*c&e3!D!!)!!#J$49C&6J%+4ACPER4
X0Ch)ZD!#3!`5JR-ClS*c'Hk#FaRX!'J!#!!!S!eG*6N3"#eGTEQ4[GdeRFLjS!!!
X%S*c'"+#FaJ5JR-B%!"J!!J!!+!0048j9!3P0C@je6@Gb,QJ!!!5JR-CIS*c'Ak#
XFaPm!(!!#!!!S!e084%B"$&0dC%CTE'93DfFZD!#3!`5JR-BrS*c'2k#FaMm!(!!
X#!!!S!e0&4dd"$&0PCfePER4-C()ZD!#3!`5JR-CYS*c'ED#FaQd!(!!#!!!S!e4
X26d`"$94[EfaLEhK9G'PX,QJ!!!5JR-B1S*c'$U#FaJi!'!!#!!!S!dp6993"#%p
X69A4TE#jS!'N!"+#FaF1JR-A$S*c&``!D!!)!!#J$4%P"6!%,4'PKE'pR6@Gb,QJ
X!!!5JR-ADS*c&fU#FaGS!'!!#!!!S!dC*6%8"#8CTE'90Ch)ZD!!!"+#FaHbJR-A
XXS*c&l!!8!!)!!#J$5%C6,J%&5%C6,QJ!!!5JX6d9S,%p&D#a248!&J!#!!!S!d0
X26%m""d0[E'pb,QJ!!!5JR-BVS*c'+k#FaLX!(!!#!!!S!e*&8dm"$9*PFfpeFQ0
XP6@Gb,QJ!!!5L+DM@SLQSeU)TU0B!'!!"!!!TeN9B9%8!#'9iG'9bELjS!'F!"+)
XH'jUL(KZDSKiEQJ!D!!%!!#R@68&$33!+6@&M3@aPFR3ZD!!Z!!'L(KiESKiH'k)
XH(KX!&!!"!!!TeNp#5Li!"@pLDLjS!!!"SKiH,U)H(LkL(KiZ!"S!!3!!+GC23NT
X$!!T[BQTME'&cFbjS!#i!!D)H(QQL(KjTSKiHD3!@!!%!!#R@8&*28!!'F(*[F#j
XS!(-!!D)H'm1L(K[$SKiE``!@!!%!!#R@3dp-6`!(BfpXEh)ZD!!!!B)!"0`!N!2
XB!J!*#3!"!!$rN!LL(MXi!"B!!3!!+G9338j*!!G`B@jTBbjM!!!"S*c0ED#Fc@f
XJR-eY!"S!!J!!*rj0380)!3T0B@0)C@&NCA*c!#i!!D)YU,UL,DLkSLfkY`!B!!%
X!!#R@3dp14J!)BfpZCQPR,QJ!F`!#SKiHpk)H([HL(Klh!"S!!3!!+GC88N&%!!T
XdFQ&NFh4NBbjS!#i!!U)H(8@L(Ke&SKiG43!B!!%!!#R@4da23J!)Cfa[BQ&X,QJ
X!D!!$S-IeYk$(pEHJar@h!"B!!J!!+'"69%4*!3GcG'4TEbjS!!!$SKiEqD)H'rQ
XL(K[j!"B!!3!!+GC$6dp5!!GMEfpbC#jS!!!$SLF,iU)R#q+L*`[L!"J!!3!!+GC
X0380$!!PYB@0MEfjQ,QJ!!!5L(Ki'SKiH"U)H(JB!&J!"!!!TeNe64%m!"fecC'p
Xc,QJ!!!5L(Kl6SKiHdk)H(Y-!'!!"!!!TeP0C8e3!#(0jFh4PE5jS!*!$"+#FhH@
XJR0hPS*cGj3!@!!)!!#KJ9%P043%'G'PYC5jS!'J!"+#Fh6HJR0dhS*cG0`!@!!)
X!!#KJ4N019!%(4Q0ZG'`ZD!!!"+#FhDbJR0fXS*cGV!!B!!)!!#KJ8e4%4!%)8h4
XNC'9Q,QJ!N!-%S*cGeD#FhG@JR0h9!"J!!J!!+'"69%4-!3K6G'4XD@)ZD!#3!`5
XJar6CS-IdfD$(p0N!'!!#!!!SB&088NN"#&0dFQPZCbjS!*!$"+#Fc81JR-e$S*c
X03`!B!!)!!#J$8%&63`%)F'&cBf&X,QJ!N!-%S*c'*k#FaLHJR-BR!"S!!J!!+!0
X498P$!3Y4G@PMDf4bBAFZD!!!"+#FaHDJR-AQS*c&jJ!B!!)!!#J$4Np19!%*4Qp
XZG%eRFLjS!!!%S*c&eD#FaG@JR-A9!"S!!J!!+!0&9N91!3T&GQ9ZG%eRFLjS!*!
X$"+#FaRZJR-ClS*c'H`!D!!)!!#J$9dP14!%,9fPZC'ph6@Gb,QJ!!!5JR-B%S*c
X'"+#FaJ3!'!!#!!!S!de&6P8"#8ePER90Ch)ZD!!!"+#FaPqJR-CIS*c'A`!F!!)
X!!#J$8e4%4J%-8h4N4QPXC9"VCbjS!*!$"+#FaMqJR-BrS*c'2`!F!!)!!#J$8d9
X(63%-8f9RE@9ZG%aNFLjS!*!$"+#FaQfJR-CYS*c'E3!F!!)!!#J$9%p26!%09'p
X[E'*[H&9dD@`ZD!!!"+#FaJkJR-B1S*c'$J!B!!)!!#J$6e099!%)6e09G'PX,QJ
X!D3!%S*c&`k#FaF1JR-A$!"S!!J!!+!0%58&-!3Y%D@&XEfG0Ch)ZD!!!"+#FaGU
XJR-ADS*c&fJ!B!!)!!#J$4NP-43%*4QPXC8eRFLjS!!!%S*c&l+#FaHbJR-AX!"3
X!!J!!+!0)4P-Z!39)4P-ZD!!!"+#a24@JX6d9S,%p&3!@!!)!!#J$3dp-6`%(3fp
XXEh)ZD!!!"+#FaLZJR-BVS*c'+`!F!!)!!#J$8N966`%08Q9cEh9bBf90Ch)ZD!!
X!"+)TU0DL+DM@SLQSeJ!B!!%!!#R@49K843!)CAKdCA*Z,QJ!C`!%SKiEQU)H'jU
XL(KZD!"S!!3!!+GC0380"!!T0B@0"E'9bG#jS!#l03i!!!#J!N!28!*!&"`#3!bS
X!!3!(!*!$%J#3!`%!#!4YB@PZ)*!$!!!$B!!#!!!S!e&958-"#e&eD@0VC(*KGbj
XS!!!%S*c&jU#FaHDJR-AQ!"J!!J!!+!0'6dj8!3P'Efjd6@Gb,QJ!!!5JR-A9S*c
X&eD#FaG8!'J!#!!!S!d9@48i"#N9fC@jd6@Gb,QJ!N!-%S*c'Hk#FaRZJR-Cl!"S
X!!J!!+!0A58j%!3YAD@jNEhG0Ch)ZD!!!"+#FaJ5JR-B%S*c'"!!B!!)!!#J$689
X193%*6@9ZG8eRFLjS!!!%S*c'Ak#FaPqJR-CI!"`!!J!!+!069%4'!3a6G'4'D@a
XP8'YR,QJ!N!-%S*c'2k#FaMqJR-Br!"`!!J!!+!0648G0!3a6C@GYC@jd6'4b,QJ
X!N!-%S*c'ED#FaQfJR-CY!"`!!J!!+!086dp-!3e8EfpXBQpi9A4TE#jS!!!%S*c
X'$U#FaJkJR-B1!"J!!J!!+!028e98!3K28e9dD@`ZD!"T!!5JR-A$S*c&`k#FaF-
X!'J!#!!!S!d4*38`"#d4TB@a[CdeRFLjS!!!%S*c&fU#FaGUJR-AD!"J!!J!!+!0
X'58a&!3P'D@aP6@Gb,QJ!!!5JR-AXS*c&l+#FaH`!&!!#!!!S!dK'8bi""8K'8bj
XS!!!%S,%p&D#a24@JX6d9!"B!!J!!+!0$6da2!3G$Efa[FLjS!!!%S*c'+k#FaLZ
XJR-BV!"`!!J!!+!054902!3e5CA0[GA*MC8eRFLjS!!!%SLQSeU)TU0DL+DM@!"J
X!!3!!+GC&@&4&!!KPH(4PFQiZD!"R!!5L(KZDSKiEQU)H'jS!'J!"!!!TeNe"3d%
X!#NeKBd&XCA*d,QJ!,J!"SKiH'k)H(KZL(KiE!"3!!3!!+GC23NSZ!!9[BQSZD!!
X!!D)H(LkL(KiZSKiH,J!D!!%!!#R@6d*+3`!+Ef*UBfaKFh-ZD!!Z!!'L(KjTSKi
XHDD)H(QN!&J!"!!!TeP"56e!!"R"bEh!ZD!"c!!'L(K[$SKiE`k)H'm-!&J!"!!!
XTeN026%m!"f0[E'pb,QJ!!!%!N!0N6%9@A`!+E'9fAf0[EA!ZD!!Z!!'L(KkQSKi
XHTU)H(UB!'!!"!!!TeP03Ad`!#(0`AfaPGLjS!'J!N!-S+GC0380"!!T0B@0"E'9
XbG#jS!#i!N!-3!3e8EfpXBQpi9A4T!*!$$!!%S*c'$U#F!!!"!*!$6Ki!!%dH!!!
X"QJ!NEa3$VJ#3!a`"NJ!15%&65!#3!hTD6dj&!*!$KNY*6N3!N!159da23`#3!jj
X*6N4B!*!$UN024%8!!`#f4%&833#3!qC69&*6!*!$mN4548`!N!2q8eP08`!!!3T
X$6NC(!!!"&P0*@N8!!!%L3e*&6!!"!5j%3P9(!!%"4PK6@8d!!3&H!!%!N!FQlH`
X!!2rr!!!9'J!QlFJ!!2rr!!!$p!!QlH3!!2rr!!!)&!!QlHJ!!2rr!!!&8!!QlF`
X!!2rr!!!))!!QlF3!![rr!!!)K!!Ql@`!!rrr!!!)M!!Ql6`!!Irr&!!)[J!QlD`
X!!2rr!!!)P!!QlF!!!2rr!!!)Q!!QlEJ!!2rr!!!)R!!QlE`!!2rr!!!)S!!QlE3
X!![rr!!!9$!!QlG$rr`!'!!!)X!!QlG3!![rr!!!)T!!Ql9`!!rrr!!!)U!!Ql8`
X!![rr!!!)V!!QlA!!!rrr!!!2mJ!NETJ!![rr!!!2pJ!Ql-3!!rrr!!!2qJ!Ql9J
X&E@YKD'`"-KPm!:
END_OF_FILE
if test 25348 -ne `wc -c <'mac/SL.proj.hqx'`; then
echo shar: \"'mac/SL.proj.hqx'\" unpacked with wrong size!
fi
# end of 'mac/SL.proj.hqx'
fi
if test -f 'src/read.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'src/read.c'\"
else
echo shar: Extracting \"'src/read.c'\" \(30153 characters\)
sed "s/^X//" >'src/read.c' <<'END_OF_FILE'
X/* SCCS Id: @(#)read.c 3.0 89/11/15
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
X
Xboolean known;
X
Xstatic const char NEARDATA readable[] = { '#', SCROLL_SYM,
X#ifdef SPELLS
X SPBOOK_SYM,
X#endif
X 0 };
X
Xstatic void FDECL(explode, (struct obj *));
Xstatic void NDECL(do_class_genocide);
Xstatic void FDECL(stripspe,(struct obj *));
Xstatic void FDECL(p_glow1,(struct obj *));
Xstatic void FDECL(p_glow2,(struct obj *,const char *));
Xstatic void FDECL(recharge,(struct obj *,int));
Xstatic void FDECL(forget,(BOOLEAN_P));
X
X#endif /* OVLB */
X
XSTATIC_DCL void FDECL(show_map_spot,(int,int));
X
X#ifdef OVLB
X
Xint
Xdoread() {
X register struct obj *scroll;
X register boolean confused = (Confusion != 0);
X
X known = FALSE;
X scroll = getobj(readable, "read"); /* "#-" added by GAN 10/22/86 */
X if(!scroll) return(0);
X
X /* below added to allow reading of fortune cookies */
X if(scroll->otyp == FORTUNE_COOKIE) {
X if(flags.verbose)
X You("break up the cookie and throw away the pieces.");
X outrumor(bcsign(scroll), TRUE);
X useup(scroll);
X return(1);
X } else
X if(scroll->olet != SCROLL_SYM
X#ifdef SPELLS
X && scroll->olet != SPBOOK_SYM
X#endif
X ) {
X pline("That is a silly thing to read.");
X return(0);
X }
X
X if(Blind)
X#ifdef SPELLS
X if (scroll->olet == SPBOOK_SYM) {
X pline("Being blind, you cannot read the mystic runes.");
X return(0);
X } else
X#endif
X if (!scroll->dknown) {
X pline("Being blind, you cannot read the formula on the scroll.");
X return(0);
X }
X#ifndef NO_SIGNAL
X scroll->in_use = TRUE; /* now being read */
X#endif
X#ifdef SPELLS
X if(scroll->olet == SPBOOK_SYM) {
X if(confused) {
X You("cannot grasp the meaning of this tome.");
X useup(scroll);
X return(0);
X } else
X return(study_book(scroll));
X }
X#endif
X if(scroll->otyp != SCR_BLANK_PAPER) {
X if(Blind)
X pline("As you pronounce the formula on it, the scroll disappears.");
X else
X pline("As you read the scroll, it disappears.");
X if(confused) {
X if (Hallucination)
X pline("Being so trippy, you screw up...");
X else
X pline("Being confused, you mispronounce the magic words...");
X }
X }
X if(!seffects(scroll)) {
X if(!objects[scroll->otyp].oc_name_known) {
X if(known && !confused) {
X makeknown(scroll->otyp);
X more_experienced(0,10);
X } else if(!objects[scroll->otyp].oc_uname)
X docall(scroll);
X }
X if(!(scroll->otyp == SCR_BLANK_PAPER) || confused)
X useup(scroll);
X#ifndef NO_SIGNAL
X else scroll->in_use = FALSE;
X#endif
X }
X return(1);
X}
X
Xstatic void
Xstripspe(obj)
Xregister struct obj *obj;
X{
X if (obj->blessed) pline(nothing_happens);
X else {
X if (obj->spe > 0) {
X obj->spe = 0;
X Your("%s vibrates briefly.",xname(obj));
X } else pline(nothing_happens);
X }
X}
X
Xstatic void
Xp_glow1(otmp)
Xregister struct obj *otmp;
X{
X Your("%s %s briefly.", xname(otmp),
X Blind ? "vibrates" : "glows");
X}
X
Xstatic void
Xp_glow2(otmp,color)
Xregister struct obj *otmp;
Xregister const char *color;
X{
X Your("%s %s%s for a moment.",
X xname(otmp),
X Blind ? "vibrates" : "glows ",
X Blind ? (const char *)"" : Hallucination ? hcolor() : color);
X}
X
X/*
X * recharge an object; curse_bless is -1 if the recharging implement
X * was cursed, +1 if blessed, 0 otherwise.
X */
Xstatic
Xvoid
Xrecharge(obj, curse_bless)
Xstruct obj *obj;
Xint curse_bless;
X{
X register int n;
X boolean is_cursed, is_blessed;
X
X is_cursed = curse_bless < 0;
X is_blessed = curse_bless > 0;
X
X if (obj->olet != WAND_SYM) {
X switch(obj->otyp) {
X case MAGIC_MARKER:
X if (is_cursed) stripspe(obj);
X else if (obj->recharged) {
X if (obj->spe < 3)
X Your("marker seems permanently dried out.");
X else
X pline(nothing_happens);
X }
X else if (is_blessed) {
X n = obj->spe;
X if (n < 50) obj->spe = 50;
X if (n >= 50 && n < 75) obj->spe = 75;
X if (n >= 75) obj->spe += 10;
X p_glow2(obj,blue);
X obj->recharged = 1;
X } else {
X if (obj->spe < 50) obj->spe = 50;
X else obj->spe++;
X p_glow2(obj,white);
X obj->recharged = 1;
X }
X break;
X case LAMP:
X if (is_cursed) stripspe(obj);
X else if (is_blessed) {
X n = rn2(11);
X if (obj->spe < n) obj->spe = n;
X else obj->spe += rnd(3);
X p_glow2(obj,blue);
X } else {
X obj->spe++;
X p_glow1(obj);
X }
X break;
X case MAGIC_LAMP:
X if (is_cursed) stripspe(obj);
X else if (is_blessed > 0) {
X if (obj->spe == 1 || obj->recharged)
X pline(nothing_happens);
X else {
X obj->spe = 1;
X obj->recharged = 1;
X p_glow1(obj);
X }
X } else {
X if (obj->spe == 1 || obj->recharged)
X pline(nothing_happens);
X else {
X n = rn2(2);
X if (!n) {
X obj->spe = 1;
X obj->recharged = 1;
X p_glow1(obj);
X } else pline(nothing_happens);
X }
X }
X break;
X case CRYSTAL_BALL:
X if (is_cursed) stripspe(obj);
X else if (is_blessed) {
X obj->spe = 6;
X p_glow2(obj,blue);
X } else {
X if (obj->spe < 5) {
X obj->spe++;
X p_glow1(obj);
X } else pline(nothing_happens);
X }
X break;
X case BAG_OF_TRICKS:
X if (is_cursed) stripspe(obj);
X else if (is_blessed) {
X if (obj->spe <= 10)
X obj->spe += (5 + rnd(10));
X else obj->spe += (5 + rnd(5));
X p_glow2(obj,blue);
X } else {
X obj->spe += rnd(5);
X p_glow1(obj);
X }
X break;
X default:
X You("have a feeling of loss.");
X return;
X } /* switch */
X }
X else {
X if (obj->otyp == WAN_WISHING) {
X if (obj->recharged) { /* recharged once already? */
X explode(obj);
X return;
X }
X if (is_cursed) stripspe(obj);
X else if (is_blessed) {
X if (obj->spe != 3) {
X obj->spe = 3;
X p_glow2(obj,blue);
X } else {
X explode(obj);
X return;
X }
X } else {
X if (obj->spe < 3) {
X obj->spe++;
X p_glow2(obj,blue);
X } else pline(nothing_happens);
X }
X obj->recharged = 1; /* another recharging disallowed */
X }
X else {
X if (is_cursed) stripspe(obj);
X else if (is_blessed) {
X if (objects[obj->otyp].bits & NODIR) {
X n = rn1(5,11);
X if (obj->spe < n) obj->spe = n;
X else obj->spe++;
X }
X else {
X n = rn1(5,4);
X if (obj->spe < n) obj->spe = n;
X else obj->spe++;
X }
X p_glow2(obj,blue);
X } else {
X obj->spe++;
X p_glow1(obj);
X }
X }
X }
X}
X
X/*
X * forget some things (e.g. after reading a scroll of amnesia). abs(howmuch)
X * controls the level of forgetfulness; 0 == part of the map, 1 == all of
X * of map, 2 == part of map + spells, 3 == all of map + spells.
X */
X
Xstatic
Xvoid
Xforget(howmuch)
Xboolean howmuch;
X{
X register int zx, zy;
X
X known = TRUE;
X for(zx = 0; zx < COLNO; zx++) for(zy = 0; zy < ROWNO; zy++)
X if(howmuch & 1 || rn2(7))
X if(!cansee(zx,zy))
X levl[zx][zy].seen = levl[zx][zy].new =
X levl[zx][zy].scrsym = 0;
X docrt();
X#ifdef SPELLS
X if(howmuch & 2) losespells();
X#endif
X}
X
Xint
Xseffects(sobj)
Xregister struct obj *sobj;
X{
X register int cval = 0;
X register boolean confused = (Confusion != 0);
X register struct obj *otmp;
X
X switch(sobj->otyp) {
X#ifdef MAIL
X case SCR_MAIL:
X known = TRUE;
X if (sobj->spe)
X pline("This seems to be junk mail addressed to the finder of the Eye of Larn.");
X /* note to the puzzled: the game Larn actually sends you junk
X * mail if you win!
X */
X else readmail(/* scroll */);
X break;
X#endif
X case SCR_ENCHANT_ARMOR:
X {
X register schar s = 0;
X otmp = some_armor();
X if(!otmp) {
X strange_feeling(sobj,
X !Blind ? "Your skin glows then fades." :
X "Your skin feels warm for a moment.");
X return(1);
X }
X if(confused) {
X if(Blind)
X Your("%s feels warm for a moment.",
X xname(otmp));
X else
X Your("%s is covered by a %s %s %s!",
X xname(otmp),
X sobj->cursed ? "mottled" : "shimmering",
X Hallucination ? hcolor() :
X sobj->cursed ? black : (const char *)"gold",
X sobj->cursed ? "glow" :
X (is_shield(otmp) ? "layer" : "shield"));
X if(!(sobj->cursed))
X otmp->rustfree = TRUE;
X break;
X }
X#ifdef TOLKIEN
X if((otmp->spe > ((otmp->otyp == ELVEN_MITHRIL_COAT) ? 5 : 3))
X#else
X if((otmp->spe > 3)
X#endif
X && rn2(otmp->spe) && !sobj->cursed) {
X Your("%s violently %s%s for a while, then evaporates.",
X xname(otmp),
X Blind ? "vibrates" : "glows ",
X Blind ? nul : Hallucination ? hcolor() : silver);
X if(is_cloak(otmp)) (void) Cloak_off();
X if(is_boots(otmp)) (void) Boots_off();
X if(is_helmet(otmp)) (void) Helmet_off();
X if(is_gloves(otmp)) (void) Gloves_off();
X if(is_shield(otmp)) (void) Shield_off();
X if(otmp == uarm) (void) Armor_gone();
X useup(otmp);
X break;
X }
X s = sobj->blessed ? rnd(3) : sobj->cursed ? -1 : 1;
X Your("%s %s%s for a %s.",
X xname(otmp),
X Blind ? "vibrates" : "glows ",
X Blind ? nul : Hallucination ? hcolor() :
X sobj->cursed ? black : silver,
X (s*s>1) ? "while" : "moment");
X otmp->cursed = sobj->cursed;
X if (!otmp->blessed || sobj->cursed)
X otmp->blessed = sobj->blessed;
X otmp->spe += s;
X adj_abon(otmp, s);
X break;
X }
X case SCR_DESTROY_ARMOR:
X {
X otmp = some_armor();
X if(confused) {
X if(!otmp) {
X strange_feeling(sobj,"Your bones itch.");
X return(1);
X }
X otmp->rustfree = sobj->cursed;
X p_glow2(otmp,purple);
X break;
X }
X if(!sobj->cursed || (sobj->cursed && (!otmp || !otmp->cursed))) {
X if(!destroy_arm(otmp)) {
X strange_feeling(sobj,"Your skin itches.");
X return(1);
X }
X } else { /* armor and scroll both cursed */
X Your("%s vibrates.", xname(otmp));
X otmp->spe--;
X make_stunned(HStun + rn1(10, 10), TRUE);
X }
X }
X break;
X case SCR_CONFUSE_MONSTER:
X#ifdef SPELLS
X case SPE_CONFUSE_MONSTER:
X#endif
X if(u.usym != S_HUMAN || sobj->cursed) {
X if(!HConfusion) You("feel confused.");
X make_confused(HConfusion + rnd(100),FALSE);
X } else if(confused) {
X if(!sobj->blessed) {
X Your("%s begin to %s%s.",
X makeplural(body_part(HAND)),
X Blind ? "tingle" : "glow ",
X Blind ? nul : Hallucination ? hcolor() : purple);
X make_confused(HConfusion + rnd(100),FALSE);
X } else {
X pline("A %s%s surrounds your %s.",
X Blind ? nul : Hallucination ? hcolor() : red,
X Blind ? "faint buzz" : " glow",
X body_part(HEAD));
X make_confused(0L,TRUE);
X }
X } else {
X if (!sobj->blessed) {
X Your("%s%s %s%s.",
X makeplural(body_part(HAND)),
X Blind ? "" : " begin to glow",
X Blind ? (const char *)"tingle" : Hallucination ? hcolor() : red,
X u.umconf ? " even more" : "");
X u.umconf++;
X } else {
X if (Blind)
X Your("%s tingle %s sharply.",
X makeplural(body_part(HAND)),
X u.umconf ? "even more" : "very");
X else
X Your("%s glow a%s brilliant %s.",
X makeplural(body_part(HAND)),
X u.umconf ? "n even more" : "",
X Hallucination ? hcolor() : red);
X u.umconf += (1 + rnd(8));
X }
X }
X break;
X case SCR_SCARE_MONSTER:
X#ifdef SPELLS
X case SPE_CAUSE_FEAR:
X#endif
X { register int ct = 0;
X register struct monst *mtmp;
X
X for(mtmp = fmon; mtmp; mtmp = mtmp->nmon)
X if(cansee(mtmp->mx,mtmp->my)) {
X if(confused || sobj->cursed) {
X mtmp->mflee = mtmp->mfrozen = mtmp->msleep = 0;
X mtmp->mcanmove = 1;
X } else
X if (! resist(mtmp, sobj->olet, 0, NOTELL))
X mtmp->mflee = 1;
X if(!mtmp->mtame) ct++; /* pets don't laugh at you */
X }
X if(!ct)
X You("hear %s in the distance.",
X (confused || sobj->cursed) ? "sad wailing" :
X "maniacal laughter");
X else
X#ifdef SPELLS
X if(sobj->otyp == SCR_SCARE_MONSTER)
X#endif
X You("hear %s close by.",
X (confused || sobj->cursed) ? "sad wailing" :
X "maniacal laughter");
X break;
X }
X case SCR_BLANK_PAPER:
X if(confused)
X You("try to read the strange patterns on this scroll, but it disappears.");
X else {
X pline("This scroll seems to be blank.");
X known = TRUE;
X }
X break;
X case SCR_REMOVE_CURSE:
X#ifdef SPELLS
X case SPE_REMOVE_CURSE:
X#endif
X { register struct obj *obj;
X if(confused)
X if (Hallucination)
X You("feel the power of the Force against you!");
X else
X You("feel like you need some help.");
X else
X if (Hallucination)
X You("feel in touch with the Universal Oneness.");
X else
X You("feel like someone is helping you.");
X
X if(sobj->cursed) pline("The scroll disintegrates.");
X else {
X for(obj = invent; obj ; obj = obj->nobj)
X if(sobj->blessed || obj->owornmask ||
X (obj->otyp == LOADSTONE)) {
X if(confused) blessorcurse(obj, 2);
X else obj->cursed = 0;
X }
X }
X if(Punished && !confused) unpunish();
X break;
X }
X case SCR_CREATE_MONSTER:
X#if defined(WIZARD) || defined(EXPLORE_MODE)
X if (wizard || discover)
X known = TRUE;
X#endif /* WIZARD || EXPLORE_MODE */
X#ifdef SPELLS
X case SPE_CREATE_MONSTER:
X#endif
X { register int cnt = 1;
X
X if(!rn2(73)) cnt += rnd(4);
X if(confused || sobj->cursed) cnt += 12;
X while(cnt--) {
X#if defined(WIZARD) || defined(EXPLORE_MODE)
X if((!wizard && !discover) || !create_particular())
X#endif /* WIZARD || EXPLORE_MODE */
X (void) makemon (confused ? &mons[PM_ACID_BLOB] :
X (struct permonst *) 0, u.ux, u.uy);
X }
X break;
X }
X/* break; /*NOTREACHED*/
X case SCR_ENCHANT_WEAPON:
X if(uwep && (uwep->olet == WEAPON_SYM || uwep->otyp == PICK_AXE
X || uwep->otyp == UNICORN_HORN) && confused) {
X /* olet check added 10/25/86 GAN */
X uwep->rustfree = !(sobj->cursed);
X if(Blind)
X Your("weapon feels warm for a moment.");
X else
X Your("%s covered by a %s %s %s!",
X aobjnam(uwep, "are"),
X sobj->cursed ? "mottled" : "shimmering",
X Hallucination ? hcolor() :
X sobj->cursed ? purple : (const char *)"gold",
X sobj->cursed ? "glow" : "shield");
X } else return !chwepon(sobj, bcsign(sobj)*2+1);
X break;
X case SCR_TAMING:
X#ifdef SPELLS
X case SPE_CHARM_MONSTER:
X#endif
X { register int i,j;
X register int bd = confused ? 5 : 1;
X register struct monst *mtmp;
X
X for(i = -bd; i <= bd; i++) for(j = -bd; j <= bd; j++)
X if(isok(u.ux+i, u.uy+j) && (mtmp = m_at(u.ux+i, u.uy+j))) {
X if(sobj->cursed) {
X if(!mtmp->mtame) mtmp->mpeaceful = 0;
X } else {
X if (mtmp->isshk) {
X if (!mtmp->mpeaceful) {
X kludge("%s calms down.", Monnam(mtmp));
X mtmp->mpeaceful = 1;
X }
X } else if(!resist(mtmp, sobj->olet, 0, NOTELL))
X (void) tamedog(mtmp, (struct obj *) 0);
X }
X }
X break;
X }
X case SCR_GENOCIDE:
X You("have found a scroll of genocide!");
X#ifdef SPELLS
X case SPE_GENOCIDE:
X#endif
X known = TRUE;
X if (sobj->blessed) do_class_genocide();
X else do_genocide(!sobj->cursed | (2 * !!Confusion));
X break;
X case SCR_LIGHT:
X if(!Blind) known = TRUE;
X litroom(!confused && !sobj->cursed);
X break;
X case SCR_TELEPORTATION:
X if(confused || sobj->cursed) level_tele();
X else {
X register int uroom = inroom(u.ux, u.uy);
X
X if (sobj->blessed && !Teleport_control) {
X known = TRUE;
X#ifndef MACOS
X pline("Do you wish to teleport? ");
X if (yn()=='n') break;
X#else
X if(!flags.silent) SysBeep(1);
X if(UseMacAlertText(128, "Do you wish to teleport ?") == 2)
X break;
X#endif
X }
X tele();
X if(uroom != inroom(u.ux, u.uy)) known = TRUE;
X if(Teleport_control) known = TRUE;
X }
X break;
X case SCR_GOLD_DETECTION:
X if (confused || sobj->cursed) return(trap_detect(sobj));
X else return(gold_detect(sobj));
X case SCR_FOOD_DETECTION:
X#ifdef SPELLS
X case SPE_DETECT_FOOD:
X#endif
X if (food_detect(sobj))
X return(1); /* nothing detected */
X break;
X#ifdef SPELLS
X case SPE_IDENTIFY:
X cval = rn2(5);
X goto id;
X#endif
X case SCR_IDENTIFY:
X /* known = TRUE; */
X if(confused)
X You("identify this as an identify scroll.");
X else
X pline("This is an identify scroll.");
X if (sobj->blessed || (!sobj->cursed && !rn2(5)))
X cval = rn2(5);
X /* Note: if rn2(5)==0, identify all items */
X else cval = 1;
X useup(sobj);
X makeknown(SCR_IDENTIFY);
X#ifdef SPELLS
X id:
X#endif
X if(!confused)
X while(invent && !ggetobj("identify", identify, cval));
X return(1);
X case SCR_CHARGING:
X if (confused) {
X You("feel charged up!");
X#ifdef SPELLS
X if (u.uen < u.uenmax)
X u.uen = u.uenmax;
X else
X u.uen = u.uenmax + d(5,4);
X flags.botl = 1;
X#endif
X break;
X }
X known = TRUE;
X pline("This is a charging scroll.");
X otmp = getobj("0#", "charge");
X if (!otmp) break;
X recharge(otmp, sobj->cursed ? -1 : (sobj->blessed ? 1 : 0));
X break;
X case SCR_MAGIC_MAPPING:
X known = TRUE;
X pline("On this scroll %s a map.", confused ? "was" : "is");
X#ifdef SPELLS
X case SPE_MAGIC_MAPPING:
X#endif
X cval = (sobj->cursed && !confused);
X if(cval) HConfusion = 1; /* to screw up map */
X do_mapping();
X if(cval) {
X HConfusion = 0; /* restore */
X pline("Unfortunately, it is of a very poor quality.");
X }
X break;
X case SCR_AMNESIA:
X known = TRUE;
X forget( ((!sobj->blessed) << 1) | (!confused || sobj->cursed) );
X if (Hallucination) /* Ommmmmm! */
X Your("mind releases itself from mundane concerns.");
X else if (!strncmp(plname, "Maud", 4))
X pline("As your mind turns inward on itself, you forget everything else.");
X else if (rn2(2))
X pline("Who was that Maud person anyway?");
X else
X pline("Thinking of Maud you forget everything else.");
X break;
X case SCR_FIRE:
X { register int num;
X register struct monst *mtmp;
X/*
X * Note: Modifications have been made as of 3.0 to allow for some damage
X * under all potential cases.
X */
X cval = bcsign(sobj);
X useup(sobj);
X makeknown(SCR_FIRE);
X if(confused) {
X if(Fire_resistance) {
X shieldeff(u.ux, u.uy);
X if(!Blind)
X pline("Oh, look, what a pretty fire in your %s.",
X makeplural(body_part(HAND)));
X else You("feal a pleasant warmth in your %s.",
X makeplural(body_part(HAND)));
X } else {
X pline("The scroll catches fire and you burn your %s.",
X makeplural(body_part(HAND)));
X losehp(1, "scroll of fire", KILLED_BY_AN);
X }
X return(1);
X }
X pline("The scroll erupts in a tower of flame!");
X num = rnd(6) - 3 * cval;
X if(num <= 0 || Fire_resistance) {
X shieldeff(u.ux, u.uy);
X You("are uninjured.");
X } else {
X u.uhpmax -= num;
X losehp(num, "scroll of fire", KILLED_BY_AN);
X }
X destroy_item(SCROLL_SYM, AD_FIRE);
X#ifdef SPELLS
X destroy_item(SPBOOK_SYM, AD_FIRE);
X#endif
X destroy_item(POTION_SYM, AD_FIRE);
X
X num = (2*(rn1(3, 3) + 2 * cval) + 1)/3;
X for(mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
X if(dist(mtmp->mx,mtmp->my) < 3) {
X if (resists_fire(mtmp->data)) continue;
X if (u.uswallow) {
X if (mtmp != u.ustuck) continue;
X if (is_animal(u.ustuck->data))
X pline("%s gets heartburn.",
X Monnam(u.ustuck));
X else
X You("toast %s slightly.",
X Monnam(u.ustuck));
X num *= 2;
X }
X mtmp->mhp -= num; /* No saving throw! */
X if(resists_cold(mtmp->data))
X mtmp->mhp -= 3*num;
X if(mtmp->mhp < 1) {
X killed(mtmp);
X break; /* primitive */
X }
X }
X }
X return(1);
X }
X case SCR_PUNISHMENT:
X known = TRUE;
X if(confused || sobj->blessed) {
X You("feel guilty.");
X break;
X }
X punish(sobj);
X break;
X default:
X impossible("What weird effect is this? (%u)", sobj->otyp);
X }
X return(0);
X}
X
Xstatic void
Xexplode(obj)
Xregister struct obj *obj;
X{
X Your("%s vibrates violently, and explodes!",xname(obj));
X bell();
X losehp(rn2(2*(u.uhpmax+1)/3),"exploding wand", KILLED_BY_AN);
X useup(obj);
X}
X
Xvoid
Xlitroom(on)
Xregister boolean on;
X{
X register int zx,zy;
X
X /* first produce the text (provided he is not blind) */
X if(Blind) goto do_it;
X if(!on) {
X if(u.uswallow || is_maze_lev || levl[u.ux][u.uy].typ == CORR ||
X !levl[u.ux][u.uy].lit) {
X pline("It seems even darker in here than before.");
X return;
X } else
X pline("It suddenly becomes dark in here.");
X } else {
X if(u.uswallow){
X if (is_animal(u.ustuck->data))
X pline("%s's stomach is lit.", Monnam(u.ustuck));
X else
X if (is_whirly(u.ustuck->data))
X pline("%s shines briefly.",
X Monnam(u.ustuck));
X else
X pline("%s glistens.", Monnam(u.ustuck));
X return;
X }
X if(is_maze_lev){
X pline(nothing_happens);
X return;
X }
X if(levl[u.ux][u.uy].typ == CORR) {
X pline("The corridor lights up around you, then fades.");
X return;
X } else if(levl[u.ux][u.uy].lit) {
X pline("The light here seems better now.");
X return;
X } else
X pline("The room is lit.");
X }
X
Xdo_it:
X if(levl[u.ux][u.uy].lit == on)
X return;
X if (inroom(u.ux,u.uy) < 0)
X return;
X getcorners(&seelx,&seehx,&seely,&seehy,&seelx2,&seehx2,&seely2,&seehy2);
X
X for(zy = seely; zy <= seehy; zy++)
X for(zx = seelx; zx <= seehx; zx++) {
X levl[zx][zy].lit = on;
X if(!Blind && dist(zx,zy) > 2)
X if(on) prl(zx,zy); else nosee(zx,zy);
X }
X for(zy = seely2; zy <= seehy2; zy++)
X for(zx = seelx2; zx <= seehx2; zx++) {
X levl[zx][zy].lit = on;
X if(!Blind && dist(zx,zy) > 2)
X if(on) prl(zx,zy); else nosee(zx,zy);
X }
X if(!on) seehx = 0;
X}
X
Xstatic void
Xdo_class_genocide()
X{
X register int i, j, immunecnt, gonecnt, goodcnt;
X char buf[BUFSZ];
X
X for(j=0; ; j++) {
X if (j >= 5) {
X pline(thats_enough_tries);
X return;
X }
X do {
X pline("What class of monsters do you wish to genocide? [type a letter] ");
X getlin(buf);
X } while (buf[0]=='\033' || strlen(buf) != 1);
X immunecnt = gonecnt = goodcnt = 0;
X for(i=0; mons[i].mlet; i++) {
X if(mons[i].mlet == buf[0]) {
X if (!(mons[i].geno & G_GENO)) immunecnt++;
X else if(mons[i].geno & G_GENOD) gonecnt++;
X else goodcnt++;
X }
X }
X if (!goodcnt && buf[0] != S_HUMAN) {
X if (gonecnt)
X pline("All such monsters are already nonexistent.");
X else if (immunecnt)
X You("aren't permitted to genocide such monsters.");
X else
X pline("That symbol does not represent any monster.");
X continue;
X }
X for(i=0; mons[i].mlet; i++) {
X if(mons[i].mlet == buf[0]) {
X register struct monst *mtmp, *mtmp2;
X char *n = makeplural(mons[i].mname);
X
X if (&mons[i]==player_mon() || ((mons[i].geno & G_GENO)
X && !(mons[i].geno & G_GENOD))) {
X /* This check must be first since player monsters might
X * have G_GENOD or !G_GENO.
X */
X pline("Wiped out all %s.", n);
X if (&mons[i] == player_mon()) {
X u.uhp = -1;
X killer_format = KILLED_BY_AN;
X killer = "scroll of genocide";
X#ifdef POLYSELF
X if (u.umonnum >= 0)
X You("feel dead inside.");
X else
X#endif
X done(GENOCIDED);
X }
X /* for simplicity (and fairness) let's avoid
X * alignment changes here...
X */
X#ifdef POLYSELF
X if (i==u.umonnum) rehumanize();
X#endif
X mons[i].geno |= G_GENOD;
X for(mtmp = fmon; mtmp; mtmp = mtmp2) {
X mtmp2 = mtmp->nmon;
X if(mtmp->data == &mons[i])
X mondead(mtmp);
X }
X } else if ((mons[i].geno & G_GENOD) &&
X !(mons[i].geno & G_UNIQ))
X pline("All %s are already nonexistent.", n);
X else
X You("aren't permitted to genocide %s%s.",
X i == PM_WIZARD_OF_YENDOR ? "the " : "",
X type_is_pname(&mons[i]) ? mons[i].mname : n);
X }
X }
X return;
X }
X}
X
X#define REALLY 1
X#define PLAYER 2
Xvoid
Xdo_genocide(how)
Xint how;
X/* 0 = no genocide; create monsters (cursed scroll) */
X/* 1 = normal genocide */
X/* 3 = forced genocide of player */
X{
X char buf[BUFSZ];
X register int i, j, killplayer = 0;
X register struct permonst *ptr;
X register struct monst *mtmp, *mtmp2;
X
X if (how & PLAYER) {
X ptr = player_mon();
X Strcpy(buf, ptr->mname);
X killplayer++;
X } else {
X for(j = 0; ; j++) {
X if(j >= 5) {
X pline(thats_enough_tries);
X return;
X }
X pline("What monster do you want to genocide? [type the name] ");
X getlin(buf);
X
X if(strlen(buf) && (!strncmp(buf, pl_character, PL_CSIZ))) {
X /* Note: pl_character starts with capitals and player_mon does not */
X ptr = player_mon();
X killplayer++;
X goto deadmeat;
X } else {
X i = name_to_mon(buf);
X if(i == -1 || (mons[i].geno & G_GENOD)) {
X pline("Such creatures do not exist in this world.");
X continue;
X }
X ptr = &mons[i];
X if (ptr == player_mon()) {
X killplayer++;
X goto deadmeat;
X }
X if (is_human(ptr)) adjalign(-sgn(u.ualigntyp));
X if (is_demon(ptr)) adjalign(sgn(u.ualigntyp));
X
X if(!(ptr->geno & G_GENO)) {
X if(flags.soundok) {
X if(flags.verbose)
X pline("A thunderous voice booms though the caverns:");
X pline("\"No, mortal! That will not be done.\"");
X }
X continue;
X }
X break;
X }
X }
X }
Xdeadmeat:
X if (Hallucination) {
X#ifdef POLYSELF
X if (u.umonnum != -1)
X Strcpy(buf,uasmon->mname);
X else
X#endif
X {
X Strcpy(buf, pl_character);
X buf[0] += 'a' - 'A';
X }
X } else Strcpy(buf,ptr->mname); /* make sure we have standard singular */
X if (how & REALLY) {
X pline("Wiped out all %s.", makeplural(buf));
X if(killplayer) {
X u.uhp = -1;
X killer_format = KILLED_BY_AN;
X killer = "genocide spell";
X#ifdef POLYSELF
X /* A polymorphed character will die as soon as he is rehumanized. */
X if(u.umonnum >= 0) You("feel dead inside.");
X else
X#endif
X done(GENOCIDED);
X return;
X }
X#ifdef POLYSELF
X else if (ptr == uasmon) rehumanize();
X#endif
X ptr->geno |= G_GENOD;
X for(mtmp = fmon; mtmp; mtmp = mtmp2) {
X mtmp2 = mtmp->nmon;
X if(mtmp->data == ptr)
X mondead(mtmp);
X }
X } else {
X pline("Sent in some %s.", makeplural(buf));
X j = rnd(3) + 3;
X for(i=1; i<=j; i++) {
X struct monst *mmon = makemon(ptr, u.ux, u.uy);
X struct obj *otmp;
X
X while(otmp = (mmon->minvent)) {
X mmon->minvent = otmp->nobj;
X free((genericptr_t)otmp);
X }
X }
X }
X}
X
X#endif /* OVLB */
X#ifdef OVL0
X
XSTATIC_OVL void
Xshow_map_spot(x, y)
Xregister int x, y;
X{
X register struct rm *lev;
X register int num;
X
X if((Confusion != 0) && rn2(7)) return;
X lev = &(levl[x][y]);
X if((num = lev->typ) == 0) return;
X
X if(num == SCORR) {
X lev->typ = CORR;
X lev->scrsym = CORR_SYM;
X /*
X * magic mapping shouldn't find secret doors,
X * especially on the stronghold level
X */
X } else if(lev->seen) return;
X if(num != ROOM)
X {
X lev->seen = lev->new = 1;
X if(lev->scrsym == STONE_SYM || !lev->scrsym)
X newsym(x, y);
X else on_scr(x, y);
X }
X}
X
Xvoid
Xdo_mapping() {
X register int zx, zy;
X
X for(zy = 0; zy < ROWNO; zy++)
X for(zx = 0; zx < COLNO; zx++)
X show_map_spot(zx, zy);
X}
X
X#endif /* OVL0 */
X#ifdef OVLB
X
Xvoid
Xdo_vicinity_map() {
X register int zx, zy;
X
X for(zy = (u.uy-5 < 0 ? 0 : u.uy-5);
X zy < (u.uy+6 > ROWNO ? ROWNO : u.uy+6); zy++)
X for(zx = (u.ux-9 < 0 ? 0 : u.ux-9);
X zx < (u.ux+10 > COLNO ? COLNO : u.ux+10); zx++)
X show_map_spot(zx, zy);
X}
X
Xint
Xgold_detect(sobj)
Xregister struct obj *sobj;
X{
X register struct gold *gtmp;
X
X if(!fgold) {
X if(sobj)
X strange_feeling(sobj, "You feel materially poor.");
X return(1);
X } else {
X known = TRUE;
X for(gtmp = fgold; gtmp; gtmp = gtmp->ngold)
X if(gtmp->gx != u.ux || gtmp->gy != u.uy)
X goto outgoldmap;
X /* only under me - no separate display required */
X You("notice some gold between your %s.",
X makeplural(body_part(FOOT)));
X return(0);
X outgoldmap:
X cls();
X for(gtmp = fgold; gtmp; gtmp = gtmp->ngold)
X at( gtmp->gx, gtmp->gy,
X (uchar)(Hallucination ? rndobjsym() : GOLD_SYM),
X AT_OBJ);
X prme();
X You("feel very greedy, and sense gold!");
X more();
X docrt();
X }
X return(0);
X}
X
X/* food_detection is pulled out so that it */
X/* can also be used in the crystal ball routine */
X/* returns 1 if nothing was detected */
X/* returns 0 if something was detected */
Xint
Xfood_detect(sobj)
Xregister struct obj *sobj;
X{
X register boolean confused = (Confusion || (sobj && sobj->cursed));
X register int ct = 0, ctu = 0;
X register struct obj *obj;
X register char foodsym = confused ? POTION_SYM : FOOD_SYM;
X
X for(obj = fobj; obj; obj = obj->nobj)
X if(obj->olet == foodsym) {
X if(obj->ox == u.ux && obj->oy == u.uy) ctu++;
X else ct++;
X }
X if(!ct && !ctu) {
X if (sobj) strange_feeling(sobj,"Your nose twitches.");
X return(1);
X } else if(!ct) {
X known = TRUE;
X You("%s %s nearby.", sobj ? "smell" : "sense",
X confused ? "something" : "food");
X } else {
X known = TRUE;
X cls();
X for(obj = fobj; obj; obj = obj->nobj)
X if(obj->olet == foodsym)
X at(obj->ox, obj->oy,
X (uchar)(Hallucination ? rndobjsym() : FOOD_SYM),
X AT_OBJ);
X prme();
X if (sobj) Your("nose tingles and you smell %s.",
X confused ? "something" : "food");
X else You("sense %s.", confused ? "something" : "food");
X more();
X docrt();
X }
X return(0);
X}
X
Xvoid
Xpunish(sobj)
Xregister struct obj *sobj;
X{
X You("are being punished for your misbehavior!");
X if(Punished){
X Your("iron ball gets heavier.");
X uball->owt += 15 * (1 + sobj->cursed);
X return;
X }
X setworn(mkobj_at(CHAIN_SYM, u.ux, u.uy, TRUE), W_CHAIN);
X setworn(mkobj_at(BALL_SYM, u.ux, u.uy, TRUE), W_BALL);
X uball->spe = 1; /* special ball (see save) */
X}
X
Xvoid
Xunpunish()
X{ /* remove the ball and chain */
X freeobj(uchain);
X unpobj(uchain);
X free((genericptr_t) uchain);
X setworn((struct obj *)0, W_CHAIN);
X uball->spe = 0;
X setworn((struct obj *)0, W_BALL);
X}
X
X/* some creatures have special data structures that only make sense in their
X * normal locations -- if the player tries to create one elsewhere, or to revive
X * one, the disoriented creature becomes a zombie
X */
Xboolean
Xcant_create(mtype)
Xint *mtype;
X{
X
X if (*mtype==PM_GUARD || *mtype==PM_SHOPKEEPER
X#if defined(ALTARS) && defined(THEOLOGY)
X || *mtype==PM_TEMPLE_PRIEST || *mtype==PM_TEMPLE_PRIESTESS
X#endif
X ) {
X *mtype = PM_HUMAN_ZOMBIE;
X return TRUE;
X } else
X return FALSE;
X}
X
X#if defined(WIZARD) || defined(EXPLORE_MODE)
Xboolean
Xcreate_particular()
X{
X char buf[BUFSZ];
X int which, tries = 0;
X
X do {
X pline("Create what kind of monster? [type the name] ");
X getlin(buf);
X which = name_to_mon(buf);
X if (which < 0) pline("I've never heard of such monsters.");
X else break;
X } while (++tries < 5);
X if (tries == 5) pline(thats_enough_tries);
X else {
X if (!(mons[which].geno & G_GENOD) && cant_create(&which) &&
X !Blind) {
X if (mons[which].geno & G_GENOD)
Xpline("An image of the creature forms, wavers momentarily, then fades.");
X else
Xpline("The disoriented creature's eyes slowly glaze over.");
X }
X (void) makemon(&mons[which], u.ux, u.uy);
X return TRUE;
X }
X return FALSE;
X}
X#endif /* WIZARD || EXPLORE_MODE */
X
X#endif /* OVLB */
END_OF_FILE
if test 30153 -ne `wc -c <'src/read.c'`; then
echo shar: \"'src/read.c'\" unpacked with wrong size!
fi
# end of 'src/read.c'
fi
echo shar: End of archive 29 \(of 56\).
cp /dev/null ark29isdone
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