From decwrl!wyse!mips!zaphod.mps.ohio-state.edu!uakari.primate.wisc.edu!aplcen!uunet!zephyr.ens.tek.com!tekred!saab!billr Sat May 19 13:03:48 PDT 1990
Article 903 of comp.sources.games:
Path: decwrl!wyse!mips!zaphod.mps.ohio-state.edu!uakari.primate.wisc.edu!aplcen!uunet!zephyr.ens.tek.com!tekred!saab!billr
From: billr@saab.CNA.TEK.COM (Bill Randle)
Newsgroups: comp.sources.games
Subject: v09i079:  umoria3 - single player dungeon simulation (ver. 5.2), Part24/31
Message-ID: <5614@tekred.CNA.TEK.COM>
Date: 17 May 90 16:27:31 GMT
Sender: news@tekred.CNA.TEK.COM
Lines: 1481
Approved: billr@saab.CNA.TEK.COM

Submitted-by: wilson@ernie.Berkeley.EDU (Jim Wilson)
Posting-number: Volume 9, Issue 79
Archive-name: umoria3/Part24
Supersedes: umoria2: Volume 5, Issue 32-37,41-52,87



#! /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 24 (of 31)."
# Contents:  mac/resource.hqx misc/rick.msg source/files.c
#   source/types.h
# Wrapped by billr@saab on Wed May 16 11:54:40 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'mac/resource.hqx' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'mac/resource.hqx'\"
else
echo shar: Extracting \"'mac/resource.hqx'\" \(15097 characters\)
sed "s/^X//" >'mac/resource.hqx' <<'END_OF_FILE'
X(This file must be converted with BinHex 4.0)
X:$Qe[FQPK,R*cFQ-ZFfPd!&0*9#&6593K!!!!!#Vp!!!!!((%8dP8)3!$!!!UrA*
X-BA8"!!!!!!!!!!)!#Ne[FQPK,R*cFQ-YNPa!JG%13)(4'%#"d5J!"!!$!aBLD!!
X%5P%!,C*b!#UjJ!!Yr"i$(J%#!#%!!3!!!#f5M(*cFQ058d9%!3#LEZ5!SQlNJ`!
X!-0J!!!!!!!!Fp!!!!!$JL`!!!!!!!!!!qJN!!!3)#'!&L)!U$J)SJ!X3%%"J1)%
X4p"$)`am!-'V-b((M(d$rJ#PSmNC1QM!Zj-b4-bD-!))U@8UC8S3)`CX`9ikC@41
XRcjmq4ENK"mJR$'`K3hlFZ"%!!UF%L6$Pq0#KeBKJ%!'"C"(3e+mF2bB&0REXdSi
XFS6i0+"8YaUS9)I)#Bl8Vf+B"58!95$$!3)%["3i)')!!i3+%$4!qJ,2Ye)H%J%3
XQK,AZ4EHB-BSPblNXX,06e8B&#cF3%%'9+ekqLhDcCl0H-BYQ5aT3ABLIk+U1cGS
XMb-l!PI*'1aZ!Bl4`VdUNk("ejYDrAh-'6IcT@Z1eEf1GE2Ij90I"T`p[DRddjZ3
X2X@VPkV`h!2$5UC2ILrfmlEKJjPSHlrepp2$#J9AFF4["a48LU6A((f[`K5GI@Z8
X&G)!"*,N4aKK[%&3"!$J!F"!j!E$"&e#"h,3K#J#Jk%J!,)ciNb"pi3+!"6LKm"F
X2!I"!J!"2,)%6&RqaN5-""J`4KKYMP#(L63FG"!-!F"K3`"9ST%&('8Cj#!!38%S
XT""XAVZ%6P`G"dH8!8T4"KNpQ(J4'P`8F)8FCCEMKdjX(`G%P!9r@JH90HKj89*3
X%$*((N6J9G4!NA4l34"KRe%P('$iaHK!SA4U3!)@5E,aa"di(B3,!NqK)5D@9Ipl
XdT+KFPPV!Pf'1#B#SCTD+TTTXcJV!Qkl+5DHG1,dTUTkPmXQ'RcMT+@T4a4U+k%e
X&LFTSUBj#+LQP1$%U+UDPDXUTTcK"!)#iU!#!4e(K!S!)!1A#Jqj06f%!J,aS)++
X!%5@9FBBFEp6KaTV`!X#S[1$B+d5BqrEl,di`")!L$J(!m#i!AJ"Jf%hLbUJA233
X-X1NFXXT)"3!F#q"%KMG0!-!i!)3!3$`6"j6!U!"N`5iL$33a*`Kjp![#((A-L4&
X1jD')!LL"%D3#!$%6p-r6q`4!J30"L0%[(5"--BBFEM5aEc)h"G!#8%J!!1026rm
X6#!&&N!"K*3&9r*ZK&S506G!!3p4""`"B"&6S'h$N!F!3!48!44KcA!Q!&B82`8B
XCBFK"YYP!TEefffr(63E+GGq%Ypihr4hi6BBMVMK""6J1ZH3rS6K)j9!ES2@FG4i
X`a"ZGUJ4fAhEl*#mKX$q0!,jZd$&&'RUN#Y9J4C9ip[*-!e!1!1B3*!%!-J#J!!$
Xk"'!$!$-6pK-0-j!!C&)B)06JJJ`Z`!##'5@"3!FDCB$`k"KT&2r'('MS!%)5EB$
X$ipT`,6UNi3eZ!!(lB##''"#%"Nf3!%)5JY#A*!c"#5-!30++-T!!%Ve%%%D3!%)
X4M'!aJR!3!"kNh'"HCaMJ55J)8)!#%habJ#N%`3T&F"%!$N#&)Q"KC%REi45'm!3
XTD2!QYR1#%Bj`4"1k5!$S)J#AR+)3#)J,!#*B5a%ZKJJB"D!!'a+!!&!"##PD"!&
XN"%%%0J3"%LJL48#)`Jq)%!N3!%-4A!*%&%J3""L)!!)"3!B&%Z#"2caL4c!iJ!!
XSH)#"!))a%'%-%$j`$Jm*i!2M)J"M%,!@!Pa4!!S*`"5Mjd5JQ2+832R$drb"VJ"
XS3K@U5%8V+e'&+Q5KPDq-C5X,SFSSY,+9U[b(2e"*c'+L%K!2%#EdRJ*&CJ+"Q5"
XJ*J5H-J"mV)@6!H(N!B$"b3H!Jj-BJ!%RBB!"6S+JR2(#TMLI!JCXFK-"!3!%*q-
Xj6hR#djlC[#FR"r"1HPlcRrN-U&15q3pmL1q*8C`L!UTia5`'C)X"kD*!`+M"-CE
X4)Xp-iaV(j8BibT'1GX3MdrEBacm'FT!!K6bN!"+jb"dk%T*JN!!N*5f*53KSdLQ
XGr'3S4pR+Zk&VQ`(aCN!q!)q!r-#Jlq&(3*3CJ+F"B!"2Hq66J%&3F(cJDI$i`G2
X`%8aqT-dI`Ib(9S9jeAr`Jk$r1%$DS2UdTMSeEHpakJrmJFN2m)-a$d$U!BVk9(!
X3"KLPj%XbKdP0U$46Jmr8B$3e1-fR@P1JR2b$2cJT[!3!)J#)5-!RmT&C@#3JXl&
X)3@BPNBV-4N+d#B"&%MVl@FebeV+B6F$6-MYEf#,LQJQ3!!!C-PZ,+L!K!98S!c)
X58!(IjYDheb3S2JB,!))f0kS%THV6`%&3H#MhZP[&EN'eZpcXHRHlhqdZH-FVh[*
XbplcK4@p"aFIF`M)6%!RBKbX5#dTT*Z!HHhJX6V1CJ&fd!aN!GFTpE`&Jb#DJ&[d
XSm(i&I!GE+"LE!Pl(,C!!%'!))b#hZcf`FB-lh1,q9J,)c5CfKqPFJL*cUP@YVRV
X0Qpi@NhI&-(BaLemXBq9U#!!Z!)!')KD!krhP*a0cae0aiPI!hJ-!kpK4Mh##$J$
Xi04i!5%I6a288Jq)#%Dm`hdRH&lrjeHpqqD2$rY$3!#Z8358(6+$k&YJ!!!U`$!3
XXAKJ-L%!&YUq"$FJc&2LeVc#dJB!Ud8%$T2!'-C`CDd%!8`+Am)BkP@%0C@L!%Y,
X`jc,N!34A#%-Hh&!r+Vb"$'6)Fa@FN!!%,)!!#L@KJk#9i1Fbc!%%4A!"TY2!KMN
XJ--pJeKrr6TeU3HG0$JCmp49NhB3a'+N1Ma0FZSC"Xh%JMC3!D!!$URBeqjAN*,Z
Xc@!Xi&j!!$5e0"!$34J!SSF1`KBd#p!N)"K`fUJ#!3FNqZJN3f!fNGaIT5%PD%N&
X3*+m1)F-!%b$d'Ic8!LDN!G)JZ0fIMd3'N!$KK%[b-Y1r)r!%Nj`KIf&J3m,IX2"
Xr14a3!#JE+Yb0##d-!3e[f&rp[!`#-VJk$A-L!`J`e('Cck%-G*!!03LS3,qCSq&
X)N3,"(@LYm8NK[!aQ-%-CaS#e1p![J6fV`mmQ"@cjpCc6H-$D'9UGBib0DeF!3%I
X6iM8[!+!"!3SiHFT[$S)RF"T8!6#6ME$30$f*Le%`30U2,GD%)!b"JYd'`,F"))i
X!U+,FIIPa!*Df[CZXQdX0``1m(bj+[J9!m[G'NT*U9(Cr'`!"plZ#58j(%)J$`%b
X`-)!$QT!!KUhYl`eQ`0S95J)`J[50AJ")23@Hi'8jq!m%4U"erBB`TcQAj%Hj0cX
X!i-%SR+bVE,#i2#+JS(D9#rhR@&Y$rQ31qjDrB3aeL$-GAKeeS4m*DeT'RjKRA[`
XVAEp1),!5#1"JNZ+pH[hS-i2`Zdi3+TXV!!J`GQ9(,fKAI@cRGXVM)3'!"LN5!($
X301Y#,U1LGcpf)LR#,J(J!iK('%%N+SJKEemh-Na!!!3`"@&J"`Ri*Z+b0b0)!&&
X3"eB5,!#!$!"!"i9"*%DLHIS@%&a#JfD#$3,B)3f$!)J3!e3bCpl(-cjc"qFR2fq
X3!)4$0cp@9cpE4d$aPd$dp`EliQTc-$3")biSNRG""!"4J%,"F`J%%(b2-`"18!D
XIiJ5&m`4`8#GJm`5G3a!PH)*B-JACC))S#!*"-!IC*K#pBc%[')0PL"0P1$eSmc4
XSU)CP`)CZ5$Tb5)GK8iKjL),`iSIe%iL$+$DKFiKlma0p8`L`i`m[8!$T9`")S#4
X`!$CP!`!-S("Y`("CJh1$b!!pp%1`jMCL*JHI@)J-J!4TF!CSN!!e'$)RJJJ8IC-
X1TjL+UpL+E2#+0c',(&H,rh+,G*!!LlY)"EeS*584M09)M-D)M2QbM$pKJ5,J23&
X39(Yh%f-))arBIjJ&!#33!-5JC',LH!%!#`VB%&N#6r!%N!!-%`#h!)!"F!b+0)C
X333-0b!H)8!,Taf9b-)AfFb&K0QBJB'CS9QGVeMiq863TmQc[FJ%iJ3eIKhKAK"-
XA)!JmP`D["T-JF#3JB'L6!J)Sf*%*e(hhBfhR``,a&d!$9%"TCQF-&!0!kA5YGi`
Xb+3D)SbBJ8'FX9`9YF'hSmj(ZBfY"Nb4cS(03m$K2q60e)R-d*hk[CSYL8!GR!!*
Xc!JHTGRp21(5eKN"!F'CZN!!'CH!#3R"QN!#@E#j3%e8!!LJ`D@d`Dh2T"LN3P49
Xj!c-J!c-!!qXM!c3!"$3("h9`Fh+!JLj!Fi,jDm&Q2mB@"XKQD5RJ!U+'QDr@II4
XA"RC`3*H*NfFf"fQ@QQC`N@2JNe['2rh#"M,R0R23%R)JFbb(1c+AKAh@"MV(Hr3
XM"d0hFd$*FX(h,fF'!Qe3M'LJG6JhF`KN"TF*P8i(Iq@h1A8J"Sr6!Q2!"Ufh"P'
XC31Jc"hSSFe@iFNqB1*'$IPCTQJfJ![UjRrcCRrljRbU!DeBCIfICF[i5+A9@"RJ
XJ3#8aCd8CRcV(Fr9M)9C)Fklf2[a5Q0)JS5$!",3APEA*FP+3!$pR-!I6)$mQd5P
XRF'Ph-(TANN"LF'P+)'Y53+1bjQPXS(eeSR-6+C0Ck!B+Nb3b&iA(b()ANL6&Xji
X@UAmUJ69cN!!(E!!Qj&N'3*QACd"X493%,8!R,4!'D+"cq&+4,MFTY*DD#F4bm4P
XrikFNCJ#8EaD@a5HF26H442"pVkCrMf0e5#L6[NN(*T'@9b*c'BG!DdQNZ)N5!RS
XqjTHD&SGa8FUL,JTrm&149K!%@2!#9Y!%8r!cHC!!1($@P5!!L+m'0'1!"N#TTJ3
X+![4cJV4fD5ihKp+CT&,CFj!!PJG@%cNb0kNJN!#Q!U4T%GTc9GQGU3UN@01GJSS
Xe'FF'9BS(53)(@+1Vp2N[Z'Te*2TUk)P`FIDDYZJfJeUL%IU%NB+X))#HL31L&RQ
X#B8"VB6#P)&#VYaUFfPPcF`#89B)e,%F02e!0l@TTebGmm`FQH8#L&JQKH6B&(&F
XrhFGbCFP`ClNcFc#(q+0r8)Ni09N'!SXKaF-['PHUNA-K9k)53*N',T!!Pk(URUh
XT"QZ*TUf@UPk!"GmU2hN`Ke2)GK`V"aiEQkT+R0jh"fIDFaMVTlLcVjGQLek'KFT
XiIcdA"R#3!)AdGa,Z9l-h@j'eUR0*8*[KqB6%UUTk1*2DQE&"@kY!+D`+Hiff@+Z
X#UE4[pJ,Rq3Bj#CDe@DZ*Q6qH'JEF&k)qLd"!Uh&6'kT9Ui45YjT+*`G!@AkeH'Q
X5-TeH4V0Nkh%JF*N#5`Ghm)5eQMMm!QRc@T1AaU6P5JFaqlJpG`*HF!*#bf94kLP
X3'D-@q6Kdm,(ibD&TQR'feVJhKl6eifSY)E0QL`*&-%5*'3F`k(lS)`C@3V9@kc1
XE!`*Cqh0r5*1fUl6eBlCe&R95DfR[5JD$kc-YN8"Lfh0J-,TGeR1U%cRHfl-6'Rj
XReRT##`GdHi9c5`Bk&`3*e,`bQldc1CHB#l0c++L[jJ9E%,)M+fXrUl'#'6m,qbq
X*q6La9j-f1`D3!*CcH3D*pP-RGC!!CkklXYcjU$p6"d[lPKBCV@3`VENQCVZ'Tr@
X6V6TA"@cAKRIJK&0ARrqUD3+,2Tbf`[&jU[&6L@IkK-T)GH+kQUhC,km'SD'D09X
XEL%*(G2A,K*dkNh1JRZ@RUba(S3KVYr9$`LaXX[8M[6lAX8`hRIQMFjaia&%UZh@
X3!+bAKX8$Zl,j`l9@E+JXjjj@+-9-E*&bR,!q'c4cNU43fm9b3,aq1j-ldkX"Ll*
XF1m1lfQT!'6r+@cmFLl*3'F8VfheD[-FI#j4K,*FD*lGAXVk)im3q!m9A&mP8r$0
XE5m+r@MqL'*A1QQD*A*XB%M61QDV'bX)++RmU5d$i'35(A+%dL8"XF'Q'4XSSH+`
X@kCCKpRil)hmbUF9d%$3j6*eX5l+!L+aMr!Dp*cq8GU%X&mB&2+4)R,A"M+lU1U@
XYfh-3h!35R+UqZDk2-k49NUFQ'm2CZ-2A4XMa#DSlYjce)j0!1R1LbADkQR'48jK
XT8,a5Gh-V9b@T13EJemHK'J5aKlJp"cKRjU"e*T19UETUmTck,-BD&mlcPk(1UUG
X1UQQ[*JfV13GRk3DACVEVpl2jibI6m,i4AC(PPp)&#VB@HFlTM-N9bjDr`XjUJTp
Xp1mNrYm!Ifh*iHERa%jj,P`BZGm9L"JGXk5ph5FK9dJEA+h8q(FaC'%#"LT0EeTk
X6)Uh`DXAFUU)85FHLc-EqZXC+@DTA[,8+6Ce`GQfZjT9(Hl(iTL3H2C0fm!C3,Fb
XH@m*hE4*jR@HBJhi56-%pYpJ4l!C5KbTYd,!6DXfbHlUAGX[5c+'3!*fYkJb63Le
Xcr[)i+Mf&b9bJ41"UkKN%$-f&*A&T&1d'q$Nl[r)#a'-mb20PMGeQ"UfebkZGZF1
XTRUV9&RNl`dhCpGXTGd"q2[25+'Gp,1H8$*``rL+Sf6LTqX)[ebhF*8'ED@b&3bF
XhGh$+Zec#PeQXE)Fq'"ZY63I98JJra318XH[,QcfR#(3K6bMI@#163,2"`$E8SCS
X&f(XNp'Uk18RI%&[3,&SPFQh-55UEb825Imb%5ETqh@RHS1h6j)SeV(PQP`EK6VV
XEJ*fZ8TURdGX[&4R#'JR+AjEI'-*PaC2,C'!(I8hDU1R2#95UDeFrk1-f5AGQNL,
XM@)1kMN[)D6)(N!!G2qe*DHTDNFCTXi@jIQTLbcdh"93J"5!J!VN0!Nl3DL)!e&V
X*%RQCU&Z'cT+GCp*)e@*3IbADZ&3p2hak%LU+Rl4SLe13!*h*kLR1,AA3hH-9#lQ
XrBT(AGR%@SR%6fFeLLDcCf-ZVR0mEZlJfPjfb@CeJ8T(V0j@NCQTT+R"qSZ(TQN"
X!(VKeNL5"IJH$cR+3!2Z%-MNr5$LFMAVSmBU0NklHfRaejQX5YeQVkTZVm919+#K
Xq5DR2&#ZL@NK`emV)NVlSQ8fl)%!0D+!'Dm!'qMUj&!Q8bJLa"S5#[`b8#)`eQm1
XcF$k6mfbG14HU("VPI[EAFd*!E@"S0UhLLfj!K'b,`LTr&2[M5#HDE'#[9kHJpTV
X0IdbI95I$EVM&5(eQjUhS0iFep"[-2(jc#H6L-iI(3dl*dfRNXNR)EjbGJ%0RE["
XU+(!#2A!#LGR0q(NblZIUrPkqJ)Dq[%kh)@[3&IQNaDfeCNUPUCTa5Rb@0Ml1HDU
XVfpGk$NV)EM-R6$HEf+i[Z'VDi$ff0FIX%EqMk*kdFX![+fcY2KfjFU#H&)[U8GU
Xk!2q0[lMFI2l(IblG2FHj-YYphIJqrVSeN!!6eULEIKbpTjH,lkAEh'JrR`YZ"Jf
XqP$1jY1MC%L$rem%mbkJ,RGXhRGm*G6icfeclpPBXph1QfBHUF`3ZGI6,ipBAHU1
X(X#[HH[aLD`NmHfFYI2Lmq6TH[l(lX%m0q"eFM"E5c$YMarAMFV)CFi-[3%4rq!A
Xpai!lREC'3(*1b%TbFrK*MXHS0HHSe!m,X'GCcD2mQmqI12NLFf[maXQ)G2Xhi!@
Xqif#*kI6$GYD[M2HV"ZRGFNU#Fi80!Xa[MZK[bP8[NdShCd'cckq@YC6fCZ)he(R
XQGVJ"r60`E0EK5`)$m!fB1I4Krj!!c5qc(mM'J1JIk954+T1$QP)[)!``S6P"YE$
X'R2"G-1G#dB!Di$k@J,PbGl'YF9&!#0M[#PVMFfMjM!UY,*mQ"rb&NMS5PiE&l4T
X$&3-Lf0D*8HlReq@,%hMBmJ"q5R3(kp8BUKrhIFbAR$Pm*!`SYB3S"CASP*dbEeC
X`$0bTYlE53)##kP@eVbMK[[0'h+i%FJT9A`PbX*ef"fIJ(3[MH5B0q[QT0!#S%TV
XpmeGZV1I8X*q42dbGr2PCSHl9Y)%k)0IkAkTT3[PM8Y8LN!"h"!H86l0m+bpb`6h
X6pRi5L$*l06@3!,C9[IS4rjcIr20AN!#Q$-#"!YAKc"AhHhlG*eQC`TlM`ea6%'X
Xeq+a[bENYQ+Ii'@C,DC)#+"Qm&BC!kNGABf6Y"bTY[ji$2hL6ih0`a`J3bUh`eYR
XU@Z@M5F%-dS`dLhA0KQ%9)di5$3NT`j!!Gki)hqpMCBVT#PQN+G#Tc#$``BCpE!'
Xk[LF%#5p8rSPlbDS+$LJ"5!$&i6BVKh$Q("T$'2L5D+'bNc2,8"@13Ba&!)1'4E1
X%#A#YfEd-*YH+AFq4F$iZ'h8+`bF'Dp0i#hHALqA`0ckB2$LDXSYk$Dp+dB%am+[
XZB*iDK1@UhB8kHhMPmS!ja"IlX*bYR,(RQ`5CGhSkKkU&!CYASm&5&IEMIGD`jFb
XCr&-5e*-Gme&m4XTT[[$R"Ad4UM*89@PcMEdUpiYH$HV5A!l[jk#XpfI&f0i8+fC
X*FGfCJ3`&!Ni!$*%KSQ[pR)"Z*,S-9C*EE$SR6EJl0`MGJ%j#Uf,qbL[@T$!aNlB
X1A-1*j5Gb*$6ZCSadcPlbCh2LJL%[c,CqqP63%!1T+hpFU,KfM!b0S6YL8JKpR)!
X4F!*-ddf3!!"JS2%`!5)`3X4)3(!#qH!Rk)Q,34!H3!!`"3"J"!3!FD#2F-+kJ3B
X+#!KP#3%3!$*!!&!(3DJ"33&%3!)Q8LIXIR1J!D!Df36bpTIl@$pH`)%%M+GJ0%M
X5M8%4kqJ)#!!(X)%UbNd!0qm)#N3-!%!'3N4Y4#,'!3!FJ4#"#!5!&hJ5!B%"#*l
Xj5!N#!#J`$,@%)#L![V%3Z%(Km)m(T5!SK)431'6%#eJ!j#!"`%F!`!%'J#%!!",
XJ3J30JU!*KN!9Q!Nl"!#B!LbRj34#!$!!4)!*2!%QdNJm!"&)!P4JKX!62p!%LS!
X6U!*1i6Ff!5%3")a)!"!!9L!*+"%lT%'kKJ3"2!*!$`J"*a!L!i)!-!3KC)4B$!%
XJ#5c)%i"$BX3C@"!-8P(N`39C)S,"!Pb3!"3C%!D!#qK'A9)(M%BPq95-3""J!P*
XJC$b9QC!!",4!$RNU&D0T!)!$Z@i!J&-*##ML3%)-Yd)3p-5"a"%#i%i#!!1j!1B
X0@cNS"j))&)Bl'3$+aS&%!Pq%86++!mN%2L5M4%N(mKkTPApJ*!r#J636*H)"(!3
X"`)!1C0qi,"RJ)$#!*$!R&m$)+"'T8S1!M"I!!!!,M!K9'S34c%N'3!fB4J"S!!G
XK!@LJ!`N'"N)!k)'b5!c-53A!#[a#!!K-d@B6,%Y3F#-$3'%#!!j!(#a,62!5!X!
X`1!J3)$@q!!A3(X@)!MJ)+B$CM%Xp85))T!!S"DebEm!)C%N!+-@"A"HAC3)%bb[
X3+Lq,31J"UR)2,-Z4iaI34l5K"FZ5%e6,3A!3(-!q@*D8S&XbJi-3!Dl(Z#3%BL3
X!q!0dDBI'*4d`$!,!!U",rcJZ4844f!&q3edZ!1!")`!2!B!b"j)28!m!3%)@3Jp
XSPCMLGF$)KC!!#&SP`J3HA+"`e)*@b5i$3#B)+THJ9H)"k4%!2%&3B3HY8PF@JJ$
X3#J)#"+!Jij*4T)-!-!ZXCLGBPVUb+2b*!K!0@L8[!!$N!!#JM!,3$9SPZ4N)Vf-
XK1+-$+4rY*+GF#*cb3$i&N!$`$`k#!EJ"V6)J&)9(i$Fca,Jd+#9L%rK02E!XL`U
X--!9qda50bbEc1Q+"hjb8#X#[!!pHi$HPjEK%588"'IK0f$JZUF&IS!B(i3!XMA%
X*$Ib#NdQGVQ"C-S2S`3i1!J,)(Z15'*JKI(!3%X$h'*GR8a!%J!&`%"5!$PL@Y-"
XBPJ"956I'CI6a#dRJ)$5!5E!X58'he&F!)!+)LR%*#,TP1U#BAA0FmS'-+3r3C3j
XBPT*(Jj!!J)1J!Pl#Z%3$DH0ZUJ#,U3$)J!-J0*1#hUfP6$-5d8!#k(*IMS!8#Gc
Xah4,!a`L(*f1!jSijB%![92`i'38J#"#q-X!fI*%$J'`Si'5!J#9JDHC!#T!!(A+
X[6J`2[(8mNNF#H"4V$-h9J3Q!3K1)#K9-'T5$GUS8X!"X'ra"J2"M!8K3hdF4%BJ
X##'13!'J1+!!FqS5#k!rYIX"(q#`!HPL-NZMMd+(HX)HkJ5@kl2)F(A#92X3E,ED
X5!%9jk%(mS9XVL#D!)&!(m)!6G684e'VSM64k0A5S'X8D9-"+20%lPifX+"@0HRD
X8MXSF1rVfYUJF`++mb)m#8LhULdT#"H"%3%N8*E++P)2bc5(93iRdGbh5K02Af%!
XD%Mi1!)*Pd#FN3cfS+V*+$f!LEG)0fN&6!1Lj%2$2&Ch5fl6Q@#JUAA2)5'0TR)-
XK"eCT+Te'#q!iRU0FDThNRk[KTHA)%lUD"R!%()h0dMK&i1U9"'*U6$-1V&'QFJ!
X#!!a6Bh*Z6@Gb,R*cFQ0F3)(4$N#"d4K!JG%S!!3!!`-@)QJ!"%T4!#f5FJ!UZB!
X!,I`H!ai"!J!K!!%!!!!YNSabFh*M8P0&4!%!SQlMED*Zih!!!!TZ!!!!!!!!"DF
X!!!!!3m3!!!!!!!!!!#cH!!!%#!J!3B5!"`i#%0#&S-1(%#0'2##PM"iAEqV3%8"
X3cK`jBk4-+8*%BX!VV`*k"#Q5T-QA$d@j'GF'SJ)h-(2Uh-QcTmqI2NN8$$L3!'M
X4!"`&$L"+J'J"SJD)(RK)j!F!UeJ"!!&%#%KA3Q!iJ3'd&FM@V'L[UVAk"p!rB'r
XM`ThE0Uh9S3J)9PfVGL[C3%!%K4eEpLaIZfVEbPe-&a"L[(S4qbd,#-`R`Q30)dk
XVH#lMYh82"mbE0q$HY*2*9KBVU,"MdBJlIflmQ(4NdDQh$[jUp[9Q[V)p#`qG&V*
XTbB"8kaD,#!LNhVmjZaA1Q$KIi`"1mmeGQ4GQk,"&"jpY25Yfl9NR2dFd@,RQm&R
X(8`G@ALhf"`k#L-P)"m58-A+idF3CFL4$d!%'02'''f'-m3C"&3$!!J!D!#"+!$S
X)C")J$N@)!`!J!%"1!'aS+&%J(3+!JSS!1",!K%9&*)K$1#hP8")!R!&!'!$m3S!
X!6bca%"3!H!*!&J#F`Z&$%!`&3J!4)"$#I`%1+)F1)&K4KNGT,!K#$#l!!))--S#
XJ4"eXj2&P$MMN!0'+HAf)"`)2$&'(((5N-3F)6B`a4"KSPT%(33(J!S!&$k&3&!m
X"m2"MN!!2B9%8'id5B-#IESa44SN1K4JL$!$!B8!"9k#4"KeP3!4UL%#%1US3E$5
Xi"N5YKNLNU!084!C%4)B)KUX&(#&('@AJp0#[)F,K+J'`eT'U3mU'b+'S"!b44aM
X'%X4KL*!!Z(T!%f'F85`G2$l8EBLJZ'T!&TZbmFBG$i@)#3#JSM0UUDFqka#SmlC
XUE`'`bNSV!2-5D@qZCH`k*-%!r2U[X-4Q5p#[mbTV,l0X12Z3!,,cFRLaYGJqa1'
XmhGVlEEMMPZY3Yr1QDqqklEl,*!"0SJ)!(NXke#3L!0J-6mi%jB8"!%1MJBJ#4V`
Xa,)%CZD&`d!"d1c3i4`XK+p0e12d3$!'XL%-!-!$Y"3"0k3b!S8,43m!!l-iaX+&
X8!+#f!%imk0!%!)`$3!J!a!0d3!R3Hf62L$33a,!Jj*%4#(2F@FCG$YQf)JUJ*%@
X3!!S!r%h32jc[%`!&qHfRNAm!#NLJJB5f)*%0!+!B%HIrh%1!%@Q`83B"6m"4,!"
X2"&6!%1l1NHS94+P1%!&4e(%U!&&!K!3!-ll1H5!%&%('U348iI5$@K6[d!"fdJ%
X!&J&9q`BFJ`lK1a4Kc)%U!&Ei$R`CBFLaHZX5`5illEEMVV[%[`ZH[J4L[2)PEhN
X4H9ld)!)lkPN2HpSMJpfm4a$`DF3KjN1I3`V!2[F0-)$dXep%9M5)r(A1!&5+f!'
X'm!ChH34e&)6)d!KK3XiK)'PZS--8dU#(!HCP+4a#d3*rQ$N!P!-!jL#)"!!J!`!
XS!!$k#!$V!NF8S,b%!`%3"3!1d+!l%83)3kL#5,B)!#G-J3T5#0&!A%%%*McK#!X
X"J$')N!!%+M!KMZTS3K'F8!8!'#!!$QL#%))J"B%%3!a*F))4HLF32464*!2K(%&
X@4+J!5$)JbL+8!#jj0SF%B!#AM"&63[Nm3K8JP0dLP!&#L3e2(Z#5!JL43cMdJ"!
X*!!d23G%'E,N(N3'J",Bd4#i"X!*EIZ)K-bV63J`e5`$``*E4'+B33J3qC!)J#5%
XL`$pm13AIU5`J+%)5!!V`#'Z1EC``$-J4aa!3!d6))8N8S3%B5C!!%VV1!*Yi#!e
XjjXGMq$)5lG5E3mJ"J(ckm4d2'8K+r,J2KcK!#QmJ9jlFF!B3A#%-G"J$'KDJ(rk
X!J!URXPd#F0JI*i5K$@8S3%FeFUN@+Qd1#@JE#*3'JVUT9(4dD+N,B5T6QYSd#(#
X!3rriGlX(dX%"4!8"#ZS'JL8)DJiTF)"4PFT8TqB"ULJ%8-4ZZ#!GmV!-#3"A'Yc
X!Tf,9B3*L*@X6c%V90c6eU5PB3!U,"B)NZ-%-E`!#!!e6Bh*Z9'9cG#jbFh*M3)(
X4$N#"d4K!JG%S!!3!!`-@)QJ!"%T4!#f5FJ!UZB!!,I`H!ai"!J!K!!%!!!!YNSa
XbFh*M8P0&4!%!SQlN8+*Zj&)!!!Zc!!!!!!!!"[`!!!!!iGS!!!!!!!!!!$$Q!!!
X%#!J!JE@!"`i#%0!Yc4Xh)'+iJ!&#KJ`35ZU`b4-a"iiF"!QL+!J!"i!'8mE)F81
XPc"`k,Z6-N60'!%'C0+9-+8)NC%LFBh6bp%Qd+&&4EXK")ETJ&Tdb4'%!!!%!#!!
Xi"JS)B40Qc"UL9UNZa6T!5KNb4*G5"A-eka%jCFUi)FU@+Tbf",E@J4Vb,P9!H)I
XN#6-h*'#UN!$D(QJ5jSaF1Q')*UB++L3*NJ)*"KJSd+E!!3%$%!KG),5"d!Gm%[N
X"J,AVUS!)!C&0#!`R-)#!j0EpZRIVhkcr!2S(M,MaiXL&qfC0%J("eF"rkmiG#)J
XJflKe!q%GIIP[iFI$*`IN[IPclp1e!`,c+IYZmYhM"aq1A$aajI(0"i6Z1hhZpEF
X*SKehh[N'ARd)hJHIErS"`&pdrZQ'(@hE,5KIG!ID0ejjcMQh(hU!r#IKEBJ!!8Q
X&"FDABB)EjYIKHI&&Z"i[lU&iSB(dDDJJKjJj#'*Z*b+#RBJ%h[KGMLcZk'+2"aM
X3a%0G[8&3"3#`!)!'!)J5J!kC'3ABP#90"3!j!E$4C9'"K%6P5#-j%S#9R"8P5%K
XcJ4C5%J#F!8"N[a!J`"0,q,58*`"N!F!TAiB%!8NJ""!"!L'NY&)6CmLK!`K@P#'
X63a"*4*&&''R%83`HJH665-kCK!F#$`a4KaadT$%(#%f--83B'T@4KfDi!'$"UCc
Xa%!!2IJ,U%aDFX6%X!3EFkXBBCCJC%P985B99!9HJNFC68BPTeE9EGI@96f%"-*B
X"CCf9PTKXAIY@A)@&90G9H1R&&d&q!3!B9J3)4TK2K`'3!"K@LcAf@'3q63C!C9J
XCN!"&Y'bmFBG29'%#J&6SC*AYY[F5**A&9Q@X&9GHJ3@!a8YPR#jDJTi-!&XL[bX
XAA5lIPA&HE1cPded@!hDc[r%'"*M&L@9FX'0Z3#DCbj9Pl$$%%[Zdk++S!)"(SJ3
XYLJJ!9F1$G8$1B3#!f'JJSS!4Em"9k4YeZ-%b3FiP*MBiCJXKlYTY[ad3$!'-K%-
X!-'$Y"3#M+3T!VjI43m!!$mpKFUp8!+#i!%j)'G)%!)`$3!J!a2-e!!PFA#MAL$3
X3"&`Jj-%f#(1m@JCc)Eh)*LLH%D5#[NEpSrXq!9$J3""LX%d(#*+k3DNFbB383!Y
X'f3"!QNATrXmp""L4"KYP%2!%($-r%9!"3d3m"e4AK-Bm334%8FHf!%4"&")!c"Q
XplS%38!3Cfa*3KGY5DQ&q5!0`&4d!J)@!p1X0F0M9%,i(K6#m"#T@q&libK!'166
X[HER6(I@XKchYF5pSi"0IajBAN[5YEi"&JCrmL#+pqYd[IrXMJqAq4j!!!0B"K3B
XF!J*h4C!!!M6`J5%*)38Y@*54$#+$rpL(!53&V`2S-')b5CjQcNF8X4%#LIp!!0U
X50S8dk+&McJ%0B0+d`M$LVK`!-!G"*!!!'3"!!3$34`#F&lV3&!8#$`#Hm)LR%TD
XiK!j5")$ciK53!!+#!`$+iN#aaJ@hUJ!!#3%!!5)X3!9Yc8T@)!J$#-K3KcDdJ50
XK`"kXA%!3"J"J*,Ic4!$!-*SU9)%JEL`%&K&3[*DmT!"B!-%6EKL5"4#KNjm%34"
X%1F!J%-@0kCKP,Iq)5ehbNL#q"#C(KUNT(2T%!39F#%&UGbD$)%3K$!(!#aC!MJ4
X)*5!F#)!l30H99a&%#N1SJNi!N!!D,db"#P+JbN"m333Q21%)fV3'%C*!"5B!!$6
XkD%)4R2"+"!4!"8d33K#N)*!!!&JL#8i`J[F%iSSJ-%%+N41),UD3!!3Y&#%daX!
XG8FE*Li(S6L6LA!!F0[25J0aPR,3)J!"UHVLBJL)!!kJTCmE*#0%)&AlMj%-!#L$
X8a)`6$`%`J&#a%90#"1!!048!9FDjY63pJ#S#3%0-"`LB9e$&!2k)+@!!N`'`1Zi
X&$+!'"Mm!9ND)N`(!L"m!6!$@8X58,B#Kb%*m%G-#TXN'9"Q!9-BCZ6ReJ#S%B%G
X-S9#iA9$P!'`Fjf8!!e!!&-!*-69SQTV`26l%9)8!S+KRE4(6RU#aI!!`J%h'D48
XeQL%J"Z""6(9la$VJGQ[M0-N964YE@X58"J#3!18d%-+&Q()!!-RN"N)N%91a!8D
X@XB9'6+9#$J!m!VI5(5HF!$!+h+)MTLJSh$%ZDp"aJN"krd!)-Q)+!3G)i3f3!)Q
X9'mi!JLZ%J3jM3%-#YMJm*i5K$@8SJ"j[f+`h3(%1#@JF#0)'JXST1(J-IQ,D)#a
XK#PXi#(#!3`FjQ,dAdX%"*!B"#LS(JLASDJiTF)#*9FaL&qF"aNY8#Ebdq"!kG2'
X,#@"-'L$5",R8B3*#*V+4DIb'&Vmi"3YJSPa!N!!%0jMK$3YBm2#SX#hX4G16db6
XQPi0*69M4XSqfT)-%P[N5*M[jaLN!+HJ!!!:END_OF_FILE
if test 15097 -ne `wc -c <'mac/resource.hqx'`; then
    echo shar: \"'mac/resource.hqx'\" unpacked with wrong size!
fi
# end of 'mac/resource.hqx'
fi
if test -f 'misc/rick.msg' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'misc/rick.msg'\"
else
echo shar: Extracting \"'misc/rick.msg'\" \(14627 characters\)
sed "s/^X//" >'misc/rick.msg' <<'END_OF_FILE'
XFrom 18862246%VUVAXCOM.BITNET@lilac.berkeley.edu Thu Aug 24 13:11:19 1989
XReceived: from lilac.Berkeley.EDU by ernie.Berkeley.EDU (5.61/1.36)
X	id AA06320; Thu, 24 Aug 89 13:11:14 -0700
XReceived: by lilac.berkeley.edu (5.61.1/1.16.22)
X	id AA05399; Thu, 24 Aug 89 12:47:05 PDT
XMessage-Id: <8908241947.AA05399@lilac.berkeley.edu>
XDate:     Thu, 24 Aug 89 15:41 EST
XFrom: "Computers and you, living life a bit at a time"
X          <188622462%VUVAXCOM.bitnet@lilac.berkeley.edu>
XSubject:  Here is the UPDATE.TXT file
XTo: wilson@ernie.Berkeley.EDU
XOriginal_To:  BITNET%"wilson@ucbernie"
XStatus: RO
X
X
XHere are the changes incorporated to date in the upgrade from V5.0 to V6.0:
X
X    o The source code has been converted from a %INCLUDE format to modular
X      programs.  Due to low system memory quotas set on student accounts at my
X      university, compiling the %INCLUDE form was not possible.  By converting
X      to modular form, anyone with enough disk space can compile the program,
X      by compiling each module separately, and then linking all the files
X      together.  Along with this, I also changed all the indentation in the
X      code so that it is uniform throughout, something that was not there from
X      having four or more different people work on it before.
X
X    o Creation of a new high score list.  Early in Moria's time at my node,
X      many people had found out the Wizard mode password (this was for versions
X      4.3 and then 4.8), so I have created a Wizard Mode Top Twenty list.  Part
X      of this has been creating 2 new fields in the player character record to
X      enable Moria to remember if your character ever entered Wizard or God
X      modes.  If you used Wizard mode at any point, you are eligible for the
X      Wizard mode list, if you used God mode, you can't get on any list.  If
X      you die and aren't allowed to go to either of the lists, the game does
X      tell you what score you earned.
X
X    o A second effect of everyone here knowing the Wizard password was the
X      continual resurrection of characters by copying the save file and re-
X      storing the character.  This lead to multiple copies of the same
X      character appearing on the high score lists.  I have solved this problem
X      by adding two more new fields to the character record, to keep track of
X      the birthdate and birthtime of the character, taken from the system time
X      at the same point that the stats are rolled.  When a character dies, his
X      birthdate/time is recorded in the high score file, and whenever that same
X      userid kills another character, it checks to see if the birthdate/times
X      match, if so, then it assumes a clone, and doesn't post the score to the
X      list.  The game does tell you what you had earned in this case.
X
X    o The game now saves the userid of the character's creator in the character
X      save file.  This prevents one person making a strong character, then
X      giving it to someone else to use to finish off the Balrog.
X
X    o The increase of stats via special items (ie: HA increasing strength) and
X      via Gain potions has been re-worked.  Increase stat items (weapons,
X      rings, crowns, amulets, armor) now affects only the current value of the
X      stat, not the max value.  Gain potions affect the max and the current,
X      based on the max value.  If you are close to 18/100 and the item would
X      increase you past that, you will see a drop in the current value of the
X      stat when you take it off, but a Restore potion will return you to what
X      it was before you wielded/wore the item.
X
X    o The changing of the cost of an item has been repaired where an increase
X      to the tohit and todam values are concerned.  Also, changes have been
X      implemented wherever items are damaged, so that the shops will know of
X      their decreased value.
X
X    o The Vampire Bites attack has been modified.  Originally, you lost the
X      same amount (or close to it) of hit points as you did experience points
X      (which could be from 18d8 to 32d8, depending on the type of Vampire).
X      The Vampire Bite now takes off 1d6 hit points (logic: you bleed a bit).
X
X    o The stats area (left side of screen) has been fixed in regards to field
X      widths.  All fields, when re-printed, wipe out any extra digits from the
X      previous value.  If you have more than 9,999,999 in gold, the string
X      "$$$$$$$" is printed.  If more than 9,999,999 experience points are
X      earned, the string "*******" is printed.  If you have more than 999 mana,
X      then the string "###/###" will be printed.
X
X    o The God mode function ^C (Make Nice Character) now checks to see if the
X      character is a Magic-using type (ie: not Warrior or Rogue) before upping
X      the mana score.  The God function ^E (Change Character) does the same.
X
X    o A new wizard function: Describe Object.  This will give you information
X      about the item specified, including Damage, Tohit and ToDam adjustments,
X      weight, and others.  This will not identify an unidentified item, only
X      help you in figuring out if one item is better than another (ie: which
X      sword does more damage?).  The hex flags for the item in question will
X      be translated to show what special magic is inherit in the item.
X
X    o A new God Mode function, ^X, Examine Character.  This prints out all the
X      values of the Flags section of the player character record.  Useful in
X      debugging purposes.
X
X    o A bug with Search mode and going up/down stairs has been fixed.  When
X      using stairs, Search mode is turned off (if it was on) and the relevant
X      reduction in speed is removed.
X
X    o All code referring to the "Consultant" classes and the "Extra" spells
X      group have been removed, since a) they were written, but no character
X      race was allowed to be one and b) they were simply slight modifications
X      on the mage class.
X
X    o In the source, there were two people who used their initials as parts of
X      variable names.  These have all been changed to more descriptive names.
X
X    o The Town generation code has been fixed so that any store could appear
X      at any of the locations, instead of the Black Market always appearing in
X      the upper right-hand corner.  The code there has also been fixed so that
X      adding in additional stores should not be difficult.
X
X    o The various spell books have been fixed so that multiple copies will be
X      listed as "a) 2 Books of <whatever>" in the inventory list.
X
X    o The running of the Black Market has been fixed up so that it works more
X      like the other stores, except store inventory turn-around is still as
X      as fast as it was before.  The inventory will now flucuate in size, just
X      as the other stores do.
X
X    o A bug involving the Wizard Mode Light Dungeon function and using a torch
X      has been repaired so that the tunnel floors remain lit after passing over
X      them.
X
X    o Caps/Helms of Intelligence/Wisdom bought in the Black Market now correctly
X      increase the relevant stat.
X
X    o A bug involving certain area-affect spells (Light Area, any Ball-type
X      spell, etc) and the right-hand and bottom edges of the town level has
X      been fixed.
X
X    o The magic translation case statements in SCROLLS.PAS and POTIONS.PAS
X      has been fixed to allow a full set of both to be used.  Previously,
X      each one was coming up short of the 64 actual possible slots that are
X      available by using two Tval values.
X
X    o The problem with the special Magic and Prayer books from the Black Market
X      has been fixed so that they appear as separate items in your inventory
X      and are not added with the normal books.
X
X    o The bug concerning enchanting items bought from the Black Market and the
X      new values never being seen was been repaired, so that the name string of
X      the item will be displayed properly.
X
X    o The Control-Y exit command has been changed so the user has to hit Q to
X      exit instead of Y.  This is to make it more fool-proof and more accident-
X      proof (but not totally).
X
X    o Three new monster attacks: Lose Mana (different from the monster spell),
X      Slip, Trip, and Fall (you'll find out), and Eclipse attack.  A number of
X      new attack descriptions have been added with this.  A new function was
X      added, function DEX_ADJ, to determine the character's plus or minus to
X      his dexterity saving throw.
X
X    o New monsters have found their way into the Dungeons of Moria.  A list of
X      their names can be found in the file MONSTERS.NEW, included in the
X      distribution package (or from your local Moria Wizard).
X
X    o The creatures "Mother & Baby" and "Small Girl" have been fixed to
X      correctly utilize the CDEFENSE flag of Lose Experience for killing that
X      creature.
X
X    o The global constant store$turn_around has been changed to the global
X      array variable store_turnaround, allowing each store to have a different
X      inventory turn over rate.  This was done partially to work the Black
X      Market in more properly.
X
X    o A bug involving the running function ('.' and a direction) has been fixed
X      so that if you are attacked in any form, either via a physical hit or a
X      spell, you will stop running at that point.
X
X    o New monster defense: cloning on death.  A new value has been added to
X      the CDEFENSE flag so that certain monsters can try to clone themselves
X      when they have been dealt a mortal blow.  There are four types of
X      cloning, each giving a different base chance to clone.  The chance is
X      reduced based on how badly killed the creature is (if you "neutronize"
X      the critter, he isn't as likely to clone himself).
X
X    o The \ function has been fixed up a bit, mainly in formatting control,
X      with an added piece to watch for the end of the screen and page it out as
X      needed.  Also, it has been renamed to ^U, and is now a Wizard mode
X      function, just as creating the Monster Dictionary is.
X
X    o The Create Food spell/scroll has been fixed.  If an item is under you
X      when you cast/read this spell, it will not be deleted as it was doing
X      before.  Make sure you have a open space of floor under or around you,
X      or you may go hungry...
X
X    o The Medusa has been fixed so that it's gaze causes Turn to Stone, not
X      Vampire Bite.
X
X    o Added a new flag to the monster's spell flags.  A creature can now be
X      set up so that only a percentage of that type of creature will be spell
X      casters, assuming the type has any spell ability at all.  For example,
X      the Young Blue Dragon could be set up so that only 1 in 10 Young Blue
X      Dragons can cast spells at all.  This does not effect Dragon Breath
X      attacks, only spell ability.  If a zero or one is in this position,
X      all members of that creature type can cast spells, if any are indicated.
X
X
XFrom 18862246%VUVAXCOM.BITNET@lilac.berkeley.edu Thu Aug 31 06:10:59 1989
XReceived: from lilac.Berkeley.EDU by ernie.Berkeley.EDU (5.61/1.36)
X	id AA14710; Thu, 31 Aug 89 06:10:54 -0700
XReceived: by lilac.berkeley.edu (5.61.1/1.16.22)
X	id AA04291; Thu, 31 Aug 89 05:54:29 PDT
XMessage-Id: <8908311254.AA04291@lilac.berkeley.edu>
XDate:     Thu, 31 Aug 89 08:51 EST
XFrom: "Charon, the Ferryman on the River Styx"
X          <188622462%VUVAXCOM.bitnet@lilac.berkeley.edu>
XSubject:  what to put for a subject?  I don't know...
XTo: wilson@ernie.Berkeley.EDU
XOriginal_To:  BITNET%"wilson@ucbernie"
XStatus: RO
X
X
XJim-
X
XI see what you mean about the up/down and the search flag thing.  What did
Xyou add to the main dungeon procedure to fix this?
X
XAt the end of this letter, I've appended the dictionary descriptions of the
X"Mother & Baby" and "Small Girl".  I've also include the piece from the
Xmon_take_hit function that checks the appropriate bit in the monster cdefense
Xflag.  I believe this was something written in for the 5.0 UB version, but
XI'm not certain, so if you need more to be able to put it into yours, I can
Xsend whatever you need.
X
XThat bug you mention could well be the result of someone diddling with the
Xsources.  Off hand, I can think of one or two reasons they'd do something to
Xthe monster-array parts, to save on memory usage, but the file-access goes
Xway up the minute you do anything other than the orginial form, so you lose
Xout in the end.  I'll keep my eye out, but I doubt if I'll ever see it happen
Xhere.
X
XSounds like you and I, and the rest of the Usenet community, are in agreement
Xthen.  We'll keep our two separate "schools" of Moria, and just share thoughts
Xback and forth.
X
XNow if only the VM/CMS Moria porter would respond to my letter...
X
XCatch you later,
X
XRick
X
X
X---excerpt from function mon_take_hit.  Insert within the section of if
X   statement that has determined the monster has died.
X   EXP is the player's current experience points.  LEV is the player's level.
X   I1 is the amount of experience the creature is worth (I think it's a
X   calculated value)
X
X                {Penalize player - subtract experience}
X                if (uand (cdefense, %X'00000400') <> 0) then
X                  begin
X                    exp := exp - 10*lev;
X                    if (exp < 0) then exp := 0;
X                  end
X                else
X                  exp := exp + i1;
X
X
X--------------------------------------------
X  1  Mother and Baby                (p)
X     Speed =  1  Level     =  0  Exp =     0
X     AC    =  1  Eye-sight =  4  HD  =   1d1
X     Creature harmed by cold.
X     Creature harmed by fire.
X     Creature harmed by poison.
X     Creature harmed by acid.
X     Creature harmed by stone-to-mud.
X     Causes experience loss when killed
X     Creature seen with Infra-Vision.
X     Creature picks up objects.
X--Spells/Dragon Breath =
X--Movement =
X     Moves and attacks normally.
X     20% random movement.
X     Can open doors.
X--Creature attacks =
X     Touches you for normal damage. (0d0)
X--------------------------------------------
X  2  Small Girl                     (p)
X     Speed =  1  Level     =  0  Exp =     0
X     AC    =  1  Eye-sight =  4  HD  =   1d1
X     Creature harmed by cold.
X     Creature harmed by fire.
X     Creature harmed by poison.
X     Creature harmed by acid.
X     Creature harmed by stone-to-mud.
X     Causes experience loss when killed
X     Creature seen with Infra-Vision.
X     Creature picks up objects.
X--Spells/Dragon Breath =
X--Movement =
X     Moves and attacks normally.
X     20% random movement.
X     Can open doors.
X--Creature attacks =
X     Touches you for normal damage. (0d0)
X--------------------------------------------
X
X
END_OF_FILE
if test 14627 -ne `wc -c <'misc/rick.msg'`; then
    echo shar: \"'misc/rick.msg'\" unpacked with wrong size!
fi
# end of 'misc/rick.msg'
fi
if test -f 'source/files.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'source/files.c'\"
else
echo shar: Extracting \"'source/files.c'\" \(14229 characters\)
sed "s/^X//" >'source/files.c' <<'END_OF_FILE'
X/* files.c: misc code to access files used by Moria
X
X   Copyright (c) 1989 James E. Wilson, Robert A. Koeneke
X
X   This software may be copied and distributed for educational, research, and
X   not for profit purposes provided that this copyright and statement are
X   included in all such copies. */
X
X#include <stdio.h>
X#include <errno.h>
X
X#include "constant.h"
X#include "config.h"
X#include "types.h"
X#include "externs.h"
X
X#ifdef MSDOS
Xextern int errno;
X#endif
X
X#if defined(GEMDOS) && (__STDC__ == 0)
X#include <access.h>
Xchar *strcat();
X#endif
X
X#ifdef USG
X#ifndef ATARIST_MWC
X#include <string.h>
X#include <fcntl.h>
X#endif
X#else
X#include <strings.h>
X#ifndef VMS
X#include <sys/file.h>
X#else
X#include <file.h>
X#endif
X#endif
X
X#ifndef VMS
X#if defined(ultrix) || defined(USG)
Xvoid exit();
X#endif
X#endif
X
X#if 0
X/* Not touched for Mac port */
X/*
X *  init_scorefile
X *  Open the score file while we still have the setuid privileges.  Later
X *  when the score is being written out, you must be sure to flock the file
X *  so we don't have multiple people trying to write to it at the same time.
X *  Craig Norborg (doc)		Mon Aug 10 16:41:59 EST 1987
X */
Xinit_scorefile()
X{
X#ifndef VMS
X#ifndef ATARIST_MWC
X  if (1 > (highscore_fd = open(MORIA_TOP, O_RDWR | O_CREAT, 0644)))
X#else
X  if (1 > (highscore_fd = open(MORIA_TOP, 2)))
X#endif
X    {
X      (void) fprintf (stderr, "Can't open score file \"%s\"\n", MORIA_TOP);
X      exit(1);
X    }
X#endif
X#ifdef MSDOS
X  /* can't leave it open, since this causes problems on networked machines,
X     we DO want to check to make sure we can open the file, though */
X  close (highscore_fd);
X#endif
X}
X#endif
X
X#ifndef MAC
X/* Attempt to open the intro file			-RAK-	 */
X/* This routine also checks the hours file vs. what time it is	-Doc */
Xvoid read_times()
X{
X  register int i;
X  vtype in_line;
X  FILE *file1;
X
X#ifdef MORIA_HOU
X  /* Attempt to read hours.dat.	 If it does not exist,	   */
X  /* inform the user so he can tell the wizard about it	 */
X  if ((file1 = fopen(MORIA_HOU, "r")) != NULL)
X    {
X      while (fgets(in_line, 80, file1) != NULL)
X	if (strlen(in_line) > 3)
X	  {
X	    if (!strncmp(in_line, "SUN:", 4))
X	      (void) strcpy(days[0], in_line);
X	    else if (!strncmp(in_line, "MON:", 4))
X	      (void) strcpy(days[1], in_line);
X	    else if (!strncmp(in_line, "TUE:", 4))
X	      (void) strcpy(days[2], in_line);
X	    else if (!strncmp(in_line, "WED:", 4))
X	      (void) strcpy(days[3], in_line);
X	    else if (!strncmp(in_line, "THU:", 4))
X	      (void) strcpy(days[4], in_line);
X	    else if (!strncmp(in_line, "FRI:", 4))
X	      (void) strcpy(days[5], in_line);
X	    else if (!strncmp(in_line, "SAT:", 4))
X	      (void) strcpy(days[6], in_line);
X	  }
X      (void) fclose(file1);
X    }
X  else
X    {
X      restore_term();
X      (void) fprintf(stderr, "There is no hours file \"%s\".\nPlease inform the wizard, %s, so he can correct this!\n", MORIA_HOU, WIZARD);
X      exit(1);
X    }
X
X  /* Check the hours, if closed	then exit. */
X  if (!check_time())
X    {
X      if ((file1 = fopen(MORIA_HOU, "r")) != NULL)
X	{
X	  clear_screen();
X	  for (i = 0; fgets(in_line, 80, file1) != NULL; i++)
X	    put_buffer(in_line, i, 0);
X	  (void) fclose(file1);
X	}
X      exit_game();
X    }
X#endif
X
X#ifdef MSDOS
X  msdos_intro();			/* Print a canned message */
X#else
X  /* Print the introduction message, news, etc.		 */
X  if ((file1 = fopen(MORIA_MOR, "r")) != NULL)
X    {
X      clear_screen();
X      for (i = 0; fgets(in_line, 80, file1) != NULL; i++)
X	put_buffer(in_line, i, 0);
X      pause_line(23);
X      (void) fclose(file1);
X    }
X#endif
X}
X#endif
X
X/* File perusal.	    -CJS-
X   primitive, but portable */
Xvoid helpfile(filename)
Xchar *filename;
X#ifdef MAC
X{
X  mac_helpfile(filename, TRUE);
X}
X#else
X{
X  bigvtype tmp_str;
X  FILE *file;
X  char input;
X  int i;
X
X  file = fopen(filename, "r");
X  if (file == NULL)
X    {
X      (void) sprintf (tmp_str, "Can not find help file \"%s\".\n", filename);
X      prt (tmp_str, 0, 0);
X      return;
X    }
X
X  save_screen();
X
X  while (!feof(file))
X    {
X      clear_screen();
X      for (i = 0; i < 23; i++)
X	if (fgets (tmp_str, BIGVTYPESIZ-1, file) != NULL)
X	  put_buffer (tmp_str, i, 0);
X      prt("[Press any key to continue.]", 23, 23);
X      input = inkey();
X      if (input == ESCAPE)
X	break;
X    }
X
X  (void) fclose(file);
X  restore_screen();
X}
X#endif
X
X/* Prints a list of random objects to a file.  Note that -RAK-	 */
X/* the objects produced is a sampling of objects which		 */
X/* be expected to appear on that level.				 */
Xvoid print_objects()
X{
X  register int i;
X  int nobj, j, level;
X  vtype filename1; bigvtype tmp_str;
X  register FILE *file1;
X  register inven_type *i_ptr;
X#ifdef MAC
X  short vrefnum;
X#endif
X
X  prt("Produce objects on what level?: ", 0, 0);
X  level = 0;
X  if (!get_string(tmp_str, 0, 32, 10))
X    return;
X  level = atoi(tmp_str);
X  prt("Produce how many objects?: ", 0, 0);
X  nobj = 0;
X  if (!get_string(tmp_str, 0, 27, 10))
X    return;
X  nobj = atoi(tmp_str);
X  if ((nobj > 0) && (level > -1) && (level < 1201))
X    {
X      if (nobj > 10000)
X	nobj = 10000;
X#ifdef MAC
X      (void) strcpy(filename1, "Objects");
X      if (doputfile("Save objects in:", filename1, &vrefnum))
X#else
X      prt("File name: ", 0, 0);
X      if (get_string(filename1, 0, 11, 64))
X#endif
X	{
X	  if (strlen(filename1) == 0)
X	    return;
X#ifdef MAC
X	  changedirectory(vrefnum);
X#endif
X	  if ((file1 = fopen(filename1, "w")) != NULL)
X	    {
X	      (void) sprintf(tmp_str, "%d", nobj);
X	      prt(strcat(tmp_str, " random objects being produced..."), 0, 0);
X	      put_qio();
X	      (void) fprintf(file1, "*** Random Object Sampling:\n");
X	      (void) fprintf(file1, "*** %d objects\n", nobj);
X	      (void) fprintf(file1, "*** For Level %d\n", level);
X	      (void) fprintf(file1, "\n");
X	      (void) fprintf(file1, "\n");
X	      j = popt();
X	      for (i = 0; i < nobj; i++)
X		{
X		  invcopy(&t_list[j], sorted_objects[get_obj_num(level)]);
X		  magic_treasure(j, level);
X		  i_ptr = &t_list[j];
X		  store_bought(i_ptr);
X		  if (i_ptr->flags & TR_CURSED)
X		    add_inscribe(i_ptr, ID_DAMD);
X		  objdes(tmp_str, i_ptr, TRUE);
X		  (void) fprintf(file1, "%d %s\n", i_ptr->level, tmp_str);
X		}
X	      pusht((int8u)j);
X	      (void) fclose(file1);
X#ifdef MAC
X	      setfileinfo(filename1, vrefnum, INFO_FTYPE);
X#endif
X	      prt("Completed.", 0, 0);
X	    }
X	  else
X	    prt("File could not be opened.", 0, 0);
X#ifdef MAC
X	  restoredirectory();
X#endif
X	}
X    }
X  else
X    prt ("Parameters no good.", 0, 0);
X}
X
X
X/* Print the character to a file or device		-RAK-	 */
X#ifdef MAC
Xint file_character()
X#else
Xint file_character(filename1)
Xchar *filename1;
X#endif
X{
X  register int i;
X  int j, xbth, xbthb, xfos, xsrh, xstl, xdis, xsave, xdev;
X  vtype xinfra;
X  int fd;
X  register FILE *file1;
X  bigvtype prt2;
X  register struct misc *p_ptr;
X  register inven_type *i_ptr;
X  vtype out_val, prt1;
X  char *p, *colon, *blank;
X#ifdef MAC
X  vtype filename1;
X  short vrefnum;
X#endif
X
X#ifdef MAC
X  (void) makefilename(filename1, "Stats", TRUE);
X  if (!doputfile("Save character description in:", filename1, &vrefnum))
X    return (FALSE);
X#endif
X
X#ifdef MAC
X  changedirectory(vrefnum);
X  fd = open (filename1, O_WRONLY|O_CREAT|O_TRUNC);
X  restoredirectory();
X#else
X#if defined(GEMDOS) && (__STDC__ == 0)
X  if (!access(filename1, AREAD))
X    {
X      (void) sprintf(out_val, "Replace existing file %s?", filename1);
X      if (get_check(out_val))
X	fd = creat(filname1, 1);
X    }
X  else
X    fd = creat (filename1, 1);
X#else
X  fd = open (filename1, O_WRONLY|O_CREAT|O_EXCL, 0644);
X  if (fd < 0 && errno == EEXIST)
X    {
X      (void) sprintf(out_val, "Replace existing file %s?", filename1);
X      if (get_check(out_val))
X	fd = open(filename1, O_WRONLY, 0644);
X    }
X#endif
X#endif
X  if (fd >= 0)
X    {
X      /* on some non-unix machines, fdopen() is not reliable, hence must call
X	 close() and then fopen() */
X      (void) close(fd);
X      file1 = fopen(filename1, "w");
X    }
X  else
X    file1 = NULL;
X
X  if (file1 != NULL)
X    {
X      prt("Writing character sheet...", 0, 0);
X      put_qio();
X      colon = ":";
X      blank = " ";
X#ifdef MAC
X      (void) fprintf(file1, "\n\n");
X#else
X      (void) fprintf(file1, "%c\n\n", CTRL('L'));
X#endif
X      (void) fprintf(file1, " Name%9s %-23s", colon, py.misc.name);
X      (void) fprintf(file1, " Age%11s %6d", colon, (int)py.misc.age);
X      cnv_stat(py.stats.use_stat[A_STR], prt1);
X      (void) fprintf(file1, "   STR : %s\n", prt1);
X      (void) fprintf(file1, " Race%9s %-23s", colon,race[py.misc.prace].trace);
X      (void) fprintf(file1, " Height%8s %6d", colon, (int)py.misc.ht);
X      cnv_stat(py.stats.use_stat[A_INT], prt1);
X      (void) fprintf(file1, "   INT : %s\n", prt1);
X      (void) fprintf(file1, " Sex%10s %-23s", colon,
X		     (py.misc.male ? "Male" : "Female"));
X      (void) fprintf(file1, " Weight%8s %6d", colon, (int)py.misc.wt);
X      cnv_stat(py.stats.use_stat[A_WIS], prt1);
X      (void) fprintf(file1, "   WIS : %s\n", prt1);
X      (void) fprintf(file1, " Class%8s %-23s", colon,
X		     class[py.misc.pclass].title);
X      (void) fprintf(file1, " Social Class : %6d", py.misc.sc);
X      cnv_stat(py.stats.use_stat[A_DEX], prt1);
X      (void) fprintf(file1, "   DEX : %s\n", prt1);
X      (void) fprintf(file1, " Title%8s %-23s", colon, title_string());
X      (void) fprintf(file1, "%22s", blank);
X      cnv_stat(py.stats.use_stat[A_CON], prt1);
X      (void) fprintf(file1, "   CON : %s\n", prt1);
X      (void) fprintf(file1, "%34s", blank);
X      (void) fprintf(file1, "%26s", blank);
X      cnv_stat(py.stats.use_stat[A_CHR], prt1);
X      (void) fprintf(file1, "   CHR : %s\n\n", prt1);
X
X      (void) fprintf(file1, " + To Hit    : %6d", py.misc.dis_th);
X      (void) fprintf(file1, "%8sLevel      : %6d", blank, (int)py.misc.lev);
X      (void) fprintf(file1, "    Max Hit Points : %6d\n", py.misc.mhp);
X      (void) fprintf(file1, " + To Damage : %6d", py.misc.dis_td);
X      (void) fprintf(file1, "%8sExperience : %6ld", blank, py.misc.exp);
X      (void) fprintf(file1, "    Cur Hit Points : %6d\n", py.misc.chp);
X      (void) fprintf(file1, " + To AC     : %6d", py.misc.dis_tac);
X      (void) fprintf(file1, "%8sGold%8s %6ld", blank, colon, py.misc.au);
X      (void) fprintf(file1, "    Max Mana%8s %6d\n", colon, py.misc.mana);
X      (void) fprintf(file1, "   Total AC  : %6d", py.misc.dis_ac);
X      (void) fprintf(file1, "%27s", blank);
X      (void) fprintf(file1, "    Cur Mana%8s %6d\n\n", colon, py.misc.cmana);
X
X      p_ptr = &py.misc;
X      xbth = p_ptr->bth + p_ptr->ptohit * BTH_PLUS_ADJ
X	+ (class_level_adj[p_ptr->pclass][CLA_BTH] * p_ptr->lev);
X      xbthb = p_ptr->bthb + p_ptr->ptohit * BTH_PLUS_ADJ
X	+ (class_level_adj[p_ptr->pclass][CLA_BTHB] * p_ptr->lev);
X      /* this results in a range from 0 to 29 */
X      xfos = 40 - p_ptr->fos;
X      if (xfos < 0)
X	xfos = 0;
X      xsrh = p_ptr->srh;
X      /* this results in a range from 0 to 9 */
X      xstl = p_ptr->stl + 1;
X      xdis = p_ptr->disarm + 2 * todis_adj() + stat_adj(A_INT)
X	+ (class_level_adj[p_ptr->pclass][CLA_DISARM] * p_ptr->lev / 3); 
X      xsave = p_ptr->save + stat_adj(A_WIS)
X	+ (class_level_adj[p_ptr->pclass][CLA_SAVE] * p_ptr->lev / 3);
X      xdev = p_ptr->save + stat_adj(A_INT)
X	+ (class_level_adj[p_ptr->pclass][CLA_DEVICE] * p_ptr->lev / 3);
X
X      (void) sprintf(xinfra, "%d feet", py.flags.see_infra * 10);
X
X      (void) fprintf(file1, "(Miscellaneous Abilities)\n\n");
X      (void) fprintf(file1, " Fighting    : %-10s", likert(xbth, 12));
X      (void) fprintf(file1, "   Stealth     : %-10s", likert(xstl, 1));
X      (void) fprintf(file1, "   Perception  : %s\n", likert(xfos, 3));
X      (void) fprintf(file1, " Bows/Throw  : %-10s", likert(xbthb, 12));
X      (void) fprintf(file1, "   Disarming   : %-10s", likert(xdis, 8));
X      (void) fprintf(file1, "   Searching   : %s\n", likert(xsrh, 6));
X      (void) fprintf(file1, " Saving Throw: %-10s", likert(xsave, 6));
X      (void) fprintf(file1, "   Magic Device: %-10s", likert(xdev, 6));
X      (void) fprintf(file1, "   Infra-Vision: %s\n\n", xinfra);
X      /* Write out the character's history     */
X      (void) fprintf(file1, "Character Background\n");
X      for (i = 0; i < 4; i++)
X	(void) fprintf(file1, " %s\n", py.misc.history[i]);
X      /* Write out the equipment list.	     */
X      j = 0;
X      (void) fprintf(file1, "\n  [Character's Equipment List]\n\n");
X      if (equip_ctr == 0)
X	(void) fprintf(file1, "  Character has no equipment in use.\n");
X      else
X	for (i = INVEN_WIELD; i < INVEN_ARRAY_SIZE; i++)
X	  {
X	    i_ptr = &inventory[i];
X	    if (i_ptr->tval != TV_NOTHING)
X	      {
X		switch (i)
X		  {
X		  case INVEN_WIELD:	p = "You are wielding";	break;
X		  case INVEN_HEAD:	p = "Worn on head";	break;
X		  case INVEN_NECK:	p = "Worn around neck";	break;
X		  case INVEN_BODY:	p = "Worn on body";	break;
X		  case INVEN_ARM:	p = "Worn on shield arm";break;
X		  case INVEN_HANDS:	p = "Worn on hands";	break;
X		  case INVEN_RIGHT:	p = "Right ring finger";break;
X		  case INVEN_LEFT:	p = "Left  ring finger";break;
X		  case INVEN_FEET:	p = "Worn on feet";	break;
X		  case INVEN_OUTER:	p = "Worn about body";	break;
X		  case INVEN_LIGHT:	p = "Light source is";	break;
X		  case INVEN_AUX:	p = "Secondary weapon";	break;
X		  default: p = "*Unknown value*";     break;
X		  }
X		objdes(prt2, &inventory[i], TRUE);
X		(void) fprintf(file1, "  %c) %-19s: %s\n", j+'a', p, prt2);
X		j++;
X	      }
X	  }
X
X      /* Write out the character's inventory.	     */
X#ifdef MAC
X      (void) fprintf(file1, "\n\n");
X#else
X      (void) fprintf(file1, "%c\n\n", CTRL('L'));
X#endif
X      (void) fprintf(file1, "  [General Inventory List]\n\n");
X      if (inven_ctr == 0)
X	(void) fprintf(file1, "  Character has no objects in inventory.\n");
X      else
X	{
X	  for (i = 0; i < inven_ctr; i++)
X	    {
X	      objdes(prt2, &inventory[i], TRUE);
X	      (void) fprintf(file1, "%c) %s\n", i+'a', prt2);
X	    }
X	}
X#ifndef MAC
X      (void) fprintf(file1, "%c", CTRL('L'));
X#endif
X      (void) fclose(file1);
X#ifdef MAC
X      setfileinfo(filename1, vrefnum, INFO_FTYPE);
X#endif
X      prt("Completed.", 0, 0);
X      return TRUE;
X    }
X  else
X    {
X      if (fd >= 0)
X	(void) close (fd);
X      (void) sprintf (out_val, "Can't open file %s:", filename1);
X      msg_print(out_val);
X      return FALSE;
X    }
X}
END_OF_FILE
if test 14229 -ne `wc -c <'source/files.c'`; then
    echo shar: \"'source/files.c'\" unpacked with wrong size!
fi
# end of 'source/files.c'
fi
if test -f 'source/types.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'source/types.h'\"
else
echo shar: Extracting \"'source/types.h'\" \(13186 characters\)
sed "s/^X//" >'source/types.h' <<'END_OF_FILE'
X/* types.h: global type declarations
X
X   Copyright (c) 1989 James E. Wilson, Robert A. Koeneke
X
X   This software may be copied and distributed for educational, research, and
X   not for profit purposes provided that this copyright and statement are
X   included in all such copies. */
X
Xtypedef unsigned long  int32u;
Xtypedef long	       int32;
Xtypedef unsigned short int16u;
Xtypedef short	       int16;
Xtypedef unsigned char  int8u;
X/* some machines will not accept 'signed char' as a type, and some accept it
X   but still treat it like an unsigned character, let's just avoid it,
X   any variable which can ever hold a negative value must be 16 or 32 bits */
X
X#define VTYPESIZ	80
X#define BIGVTYPESIZ	160
Xtypedef char vtype[VTYPESIZ];
X/* note that since its output can easily exceed 80 characters, objdes must
X   always be called with a bigvtype as the first paramter */
Xtypedef char bigvtype[BIGVTYPESIZ];
Xtypedef char stat_type[7];
X
X/* Many of the character fields used to be fixed length, which greatly
X   increased the size of the executable.  I have replaced many fixed
X   length fields with variable length ones. */
X
X/* all fields are given the smallest possbile type, and all fields are
X   aligned within the structure to their natural size boundary, so that
X   the structures contain no padding and are minimum size */
X
X/* bit fields are only used where they would cause a large reduction in
X   data size, they should not be used otherwise because their use
X   results in larger and slower code */
X
Xtypedef struct creature_type
X{
X  char *name;		/* Descrip of creature	*/
X  int32u cmove;		/* Bit field		*/
X  int32u spells;	/* Creature spells	*/
X  int16u cdefense;	/* Bit field		*/
X  int16u mexp;		/* Exp value for kill	*/
X  int8u sleep;		/* Inactive counter/10	*/
X  int8u aaf;		/* Area affect radius	*/
X  int8u ac;		/* AC			*/
X  int8u speed;		/* Movement speed+10	*/
X  int8u cchar;		/* Character rep.	*/
X  int8u hd[2];		/* Creatures hit die	*/
X  int8u damage[4];	/* Type attack and damage*/
X  int8u level;		/* Level of creature	*/
X} creature_type;
X
Xtypedef struct m_attack_type	/* Monster attack and damage types */
X  {
X    int8u attack_type;
X    int8u attack_desc;
X    int8u attack_dice;
X    int8u attack_sides;
X  } m_attack_type;
X
Xtypedef struct recall_type	/* Monster memories. -CJS- */
X  {
X    int32u r_cmove;
X    int32u r_spells;
X    int16u r_kills, r_deaths;
X    int16u r_cdefense;
X    int8u r_wake, r_ignore;
X    int8u r_attacks[MAX_MON_NATTACK];
X  } recall_type;
X
Xtypedef struct monster_type
X{
X  int16 hp;		/* Hit points		*/
X  int16 csleep;		/* Inactive counter	*/
X  int16 cspeed;		/* Movement speed	*/
X  int16u mptr;		/* Pointer into creature*/
X  /* Note: fy, fx, and cdis constrain dungeon size to less than 256 by 256 */
X  int8u fy;		/* Y Pointer into map	*/
X  int8u fx;		/* X Pointer into map	*/
X  int8u cdis;		/* Cur dis from player	*/
X  int8u ml;
X  int8u stunned;
X  int8u confused;
X} monster_type;
X
Xtypedef struct treasure_type
X{
X  char *name;		/* Object name		*/
X  int32u flags;		/* Special flags	*/
X  int8u tval;		/* Category number	*/
X  int8u tchar;		/* Character representation*/
X  int16 p1;		/* Misc. use variable	*/
X  int32 cost;		/* Cost of item		*/
X  int8u subval;		/* Sub-category number	*/
X  int8u number;		/* Number of items	*/
X  int16u weight;	/* Weight		*/
X  int16 tohit;		/* Plusses to hit	*/
X  int16 todam;		/* Plusses to damage	*/
X  int16 ac;		/* Normal AC		*/
X  int16 toac;		/* Plusses to AC	*/
X  int8u damage[2];	/* Damage when hits	*/
X  int8u level;		/* Level item first found */
X} treasure_type;
X
X/* only damage, ac, and tchar are constant; level could possibly be made 
X   constant by changing index instead; all are used rarely */
X/* extra fields x and y for location in dungeon would simplify pusht() */
X/* making inscrip a pointer and mallocing space does not work, there are
X   two many places where inven_types are copied, which results in dangling
X   pointers, so we use a char array for them instead */
X#define INSCRIP_SIZE 13  /* notice alignment, must be 4*x + 1 */
Xtypedef struct inven_type
X{
X  int16u index;		/* Index to object_list */
X  int8u name2;		/* Object special name  */
X  char inscrip[INSCRIP_SIZE]; /* Object inscription   */
X  int32u flags;		/* Special flags	*/
X  int8u tval;		/* Category number	*/
X  int8u tchar;		/* Character representation*/
X  int16 p1;		/* Misc. use variable	*/
X  int32 cost;		/* Cost of item		*/
X  int8u subval;		/* Sub-category number	*/
X  int8u number;		/* Number of items	*/
X  int16u weight;	/* Weight		*/
X  int16 tohit;		/* Plusses to hit	*/
X  int16 todam;		/* Plusses to damage	*/
X  int16 ac;		/* Normal AC		*/
X  int16 toac;		/* Plusses to AC	*/
X  int8u damage[2];	/* Damage when hits	*/
X  int8u level;		/* Level item first found */
X  int8u ident;		/* Identify information */
X} inven_type;
X
X
Xtypedef struct player_type
X{
X  struct misc
X    {
X      char name[27];	/* Name of character	*/
X      int8u male;	/* Sex of character	*/
X      int32 au;		/* Gold			*/
X      int32 max_exp;	/* Max experience	*/
X      int32 exp;	/* Cur experience	*/
X      int16u exp_frac;	/* Cur exp fraction * 2^16 */
X      int16u age;	/* Characters age	*/
X      int16u ht;	/* Height		*/
X      int16u wt;	/* Weight		*/
X      int16u lev;	/* Level		*/
X      int16u max_dlv;	/* Max level explored	*/
X      int16 srh;	/* Chance in search	*/
X      int16 fos;	/* Frenq of search	*/
X      int16 bth;	/* Base to hit		*/
X      int16 bthb;	/* BTH with bows	*/
X      int16 mana;	/* Mana points		*/
X      int16 mhp;	/* Max hit pts		*/
X      int16 ptohit;	/* Plusses to hit	*/
X      int16 ptodam;	/* Plusses to dam	*/
X      int16 pac;	/* Total AC		*/
X      int16 ptoac;	/* Magical AC		*/
X      int16 dis_th;	/* Display +ToHit	*/
X      int16 dis_td;	/* Display +ToDam	*/
X      int16 dis_ac;	/* Display +ToAC	*/
X      int16 dis_tac;	/* Display +ToTAC	*/
X      int16 disarm;	/* % to Disarm		*/
X      int16 save;	/* Saving throw		*/
X      int16 sc;		/* Social Class		*/
X      int16 stl;	/* Stealth factor	*/
X      int8u pclass;	/* # of class		*/
X      int8u prace;	/* # of race		*/
X      int8u hitdie;	/* Char hit die		*/
X      int8u expfact;	/* Experience factor	*/
X      int16 cmana;	/* Cur mana pts		*/
X      int16u cmana_frac; /* Cur mana fraction * 2^16 */
X      int16 chp;	/* Cur hit pts		*/
X      int16u chp_frac;	/* Cur hit fraction * 2^16 */
X      char history[4][60]; /* History record	*/
X    } misc;
X  /* Stats now kept in arrays, for more efficient access. -CJS- */
X  struct stats
X    {
X      int8u max_stat[6];	/* What is restored */
X      int8u cur_stat[6];	/* What is natural */
X      int16 mod_stat[6];	/* What is modified, may be +/- */
X      int8u use_stat[6];	/* What is used */
X    } stats;
X  struct flags
X    {
X      int32u status;		/* Status of player    */
X      int16 rest;		/* Rest counter	       */
X      int16 blind;		/* Blindness counter   */
X      int16 paralysis;		/* Paralysis counter   */
X      int16 confused;		/* Confusion counter   */
X      int16 food;		/* Food counter	       */
X      int16 food_digested;	/* Food per round      */
X      int16 protection;		/* Protection fr. evil */
X      int16 speed;		/* Cur speed adjust    */
X      int16 fast;		/* Temp speed change   */
X      int16 slow;		/* Temp speed change   */
X      int16 afraid;		/* Fear		       */
X      int16 poisoned;		/* Poisoned	       */
X      int16 image;		/* Hallucinate	       */
X      int16 protevil;		/* Protect VS evil     */
X      int16 invuln;		/* Increases AC	       */
X      int16 hero;		/* Heroism	       */
X      int16 shero;		/* Super Heroism       */
X      int16 blessed;		/* Blessed	       */
X      int16 resist_heat;	/* Timed heat resist   */
X      int16 resist_cold;	/* Timed cold resist   */
X      int16 detect_inv;		/* Timed see invisible */
X      int16 word_recall;	/* Timed teleport level*/
X      int16 see_infra;		/* See warm creatures  */
X      int16 tim_infra;		/* Timed infra vision  */
X      int8u see_inv;		/* Can see invisible   */
X      int8u teleport;		/* Random teleportation*/
X      int8u free_act;		/* Never paralyzed     */
X      int8u slow_digest;	/* Lower food needs    */
X      int8u aggravate;		/* Aggravate monsters  */
X      int8u fire_resist;	/* Resistance to fire  */
X      int8u cold_resist;	/* Resistance to cold  */
X      int8u acid_resist;	/* Resistance to acid  */
X      int8u regenerate;		/* Regenerate hit pts  */
X      int8u lght_resist;	/* Resistance to light */
X      int8u ffall;		/* No damage falling   */
X      int8u sustain_str;	/* Keep strength       */
X      int8u sustain_int;	/* Keep intelligence   */
X      int8u sustain_wis;	/* Keep wisdom	       */
X      int8u sustain_con;	/* Keep constitution   */
X      int8u sustain_dex;	/* Keep dexterity      */
X      int8u sustain_chr;	/* Keep charisma       */
X      int8u confuse_monster;	/* Glowing hands.    */
X      int8u new_spells;		/* Number of spells can learn. */
X    } flags;
X} player_type;
X
Xtypedef struct spell_type
X{  /* spell name is stored in spell_names[] array at index i, +31 if priest */
X  int8u slevel;
X  int8u smana;
X  int8u sfail;
X  int8u sexp;	/* 1/4 of exp gained for learning spell */
X} spell_type;
X
Xtypedef struct race_type
X{
X  char	*trace;		/* Type of race			*/
X  int16 str_adj;	/* adjustments			*/
X  int16 int_adj;
X  int16 wis_adj;
X  int16 dex_adj;
X  int16 con_adj;
X  int16 chr_adj;
X  int8u b_age;	       /* Base age of character		*/
X  int8u m_age;	       /* Maximum age of character	*/
X  int8u m_b_ht;	      /* base height for males		*/
X  int8u m_m_ht;	      /* mod height for males		*/
X  int8u m_b_wt;	      /* base weight for males		*/
X  int8u m_m_wt;	      /* mod weight for males		*/
X  int8u f_b_ht;	      /* base height females		*/
X  int8u f_m_ht;	      /* mod height for females	*/
X  int8u f_b_wt;	      /* base weight for female	*/
X  int8u f_m_wt;	      /* mod weight for females	*/
X  int16 b_dis;	       /* base chance to disarm		*/
X  int16 srh;	       /* base chance for search	*/
X  int16 stl;	       /* Stealth of character		*/
X  int16 fos;	       /* frequency of auto search	*/
X  int16 bth;	       /* adj base chance to hit	*/
X  int16 bthb;	       /* adj base to hit with bows	*/
X  int16 bsav;	       /* Race base for saving throw	*/
X  int8u bhitdie;	       /* Base hit points for race	*/
X  int8u infra;	       /* See infra-red			*/
X  int8u b_exp;	       /* Base experience factor	*/
X  int8u rtclass;       /* Bit field for class types	*/
X} race_type;
X
Xtypedef struct class_type
X{
X  char *title;		/* type of class		*/
X  int8u adj_hd;		/* Adjust hit points		*/
X  int8u mdis;		/* mod disarming traps		*/
X  int8u msrh;		/* modifier to searching	*/
X  int8u mstl;		/* modifier to stealth		*/
X  int8u mfos;		/* modifier to freq-of-search	*/
X  int8u mbth;		/* modifier to base to hit	*/
X  int8u mbthb;		/* modifier to base to hit - bows*/
X  int8u msav;		/* Class modifier to save	*/
X  int16 madj_str;	/* Class modifier for strength	*/
X  int16 madj_int;	/* Class modifier for intelligence*/
X  int16 madj_wis;	/* Class modifier for wisdom	*/
X  int16 madj_dex;	/* Class modifier for dexterity */
X  int16 madj_con;	/* Class modifier for constitution*/
X  int16 madj_chr;	/* Class modifier for charisma	*/
X  int8u spell;		/* class use mage spells	*/
X  int8u m_exp;		/* Class experience factor	*/
X  int8u first_spell_lev;/* First level where class can use spells. */
X} class_type;
X
Xtypedef struct background_type
X{
X  char *info;		/* History information		*/
X  int8u roll;		/* Die roll needed for history	*/
X  int8u chart;		/* Table number			*/
X  int8u next;		/* Pointer to next table	*/
X  int8u bonus;		/* Bonus to the Social Class+50	*/
X} background_type;
X
Xtypedef struct cave_type
X{
X  int8u cptr;
X  int8u tptr;
X  int8u fval;
X#if !defined(MSDOS) && !defined(ATARIST_MWC)
X  unsigned int lr : 1;  /* room should be lit with perm light, walls with
X			   this set should be perm lit after tunneled out */
X  unsigned int fm : 1;	/* field mark, used for traps/doors/stairs, object is
X			   hidden if fm is FALSE */
X  unsigned int pl : 1;	/* permanent light, used for walls and lighted rooms */
X  unsigned int tl : 1;	/* temporary light, used for player's lamp light,etc.*/
X#else
X#ifndef IBMPC_TURBO_C
X  /* this is not legal ANSI C, this is a MSC extension, which will use 1 byte
X     for the bitfields whereas MSC uses 2 bytes for the bitfields above */
X  /* this is also a MWC extension on the Atari ST */
X  unsigned char lr : 1;
X  unsigned char fm : 1;
X  unsigned char pl : 1;
X  unsigned char tl : 1;
X#else
X  unsigned lr : 1;
X  unsigned fm : 1;
X  unsigned pl : 1;
X  unsigned tl : 1;
X#endif
X#endif
X} cave_type;
X
Xtypedef struct owner_type
X{
X  char *owner_name;
X  int16 max_cost;
X  int8u max_inflate;
X  int8u min_inflate;
X  int8u haggle_per;
X  int8u owner_race;
X  int8u insult_max;
X} owner_type;
X
Xtypedef struct inven_record
X{
X  int32 scost;
X  inven_type sitem;
X} inven_record;
X
Xtypedef struct store_type
X{
X  int32 store_open;
X  int16 insult_cur;
X  int8u owner;
X  int8u store_ctr;
X  int16u good_buy;
X  int16u bad_buy;
X  inven_record store_inven[STORE_INVEN_MAX];
X} store_type;
X
X#if 0
Xtypedef struct high_scores
X{
X  int32 points;
X  int16u lev;
X  int16u max_lev;
X  int16 mhp;
X  int16 chp;
X  int16 uid;
X  int16 dun_level;
X  int8u sex;
X  vtype name;
X  vtype died_from;
X  int8u pclass;
X  int8u prace;
X} high_scores;
X#endif
END_OF_FILE
if test 13186 -ne `wc -c <'source/types.h'`; then
    echo shar: \"'source/types.h'\" unpacked with wrong size!
fi
# end of 'source/types.h'
fi
echo shar: End of archive 24 \(of 31\).
cp /dev/null ark24isdone
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 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 31 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


