From bacchus.pa.dec.com!decwrl!elroy.jpl.nasa.gov!usc!cs.utexas.edu!rice!uw-beaver!zephyr.ens.tek.com!tekred!saab!billr Fri Jul 13 12:52:08 PDT 1990 Article 993 of comp.sources.games: Path: bacchus.pa.dec.com!decwrl!elroy.jpl.nasa.gov!usc!cs.utexas.edu!rice!uw-beaver!zephyr.ens.tek.com!tekred!saab!billr From: billr@saab.CNA.TEK.COM (Bill Randle) Newsgroups: comp.sources.games Subject: v10i074: nethack3p9 - display oriented dungeons & dragons (Ver. 3.0i), Part29/56 Message-ID: <5932@tekred.CNA.TEK.COM> Date: 12 Jul 90 16:04:38 GMT Sender: news@tekred.CNA.TEK.COM Lines: 1732 Approved: billr@saab.CNA.TEK.COM Submitted-by: Izchak Miller 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 '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