[comp.sources.games] v10i016: umoria3 - single player dungeon simulation

billr@saab.CNA.TEK.COM (Bill Randle) (06/05/90)

Submitted-by: wilson@ernie.Berkeley.EDU (Jim Wilson)
Posting-number: Volume 10, Issue 16
Archive-name: umoria3/Patch1b
Patch-To: umoria3: Volume 9, Issue 55-86


#! /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 2 (of 3)."
# Contents:  mac/MakeFile.hqx mac/dumpres/MakeFile.hqx
#   mac/scrnmgr/ScrnMgr.doc source/player.c
# Wrapped by wilson@atlas on Wed May 30 14:20:00 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'mac/MakeFile.hqx' -a "${1}" != "-c" ; then 
  mv -f mac/MakeFile.hqx mac/MakeFile.hqx.old
fi
echo shar: Extracting \"'mac/MakeFile.hqx'\" \(8517 characters\)
sed "s/^X//" >'mac/MakeFile.hqx' <<'END_OF_FILE'
X(This file must be converted with BinHex 4.0)
X:#%eKDf9'D@aP!&4&@&408&-J!3!!!"E0!!!"IRGE3dp`G'P[ER-J23N*,@)b)#e
Xc)(Y%C@CKG@adI5!YC#"038-J,@eLCb"[EL!YFhPY)'pZ$3e5Fh*M6h"dD@pZFb!
Xp#5eL-L!YE5!YC#"58e*$)#eN)%e"3`d0,Q-ZE`N*#F3*,Q-0#AY$I5"l3dp`G'P
X[ER0p)(Y%CA"%DA*pHd4PCQ&eE(4p,Q-J,@mJHe4KFQG%DA*pHd4PCQ&eE(4p,Q-
XZE`d*$5jbFh*M,Qm*#3R%#5jM$3Pl3hdJHe*cFQ02F(4TEfjcI5"l4'9`4'PbIAY
X%C@CKG@adI5jM)#e[)(Y8BA*R4'PbIAY%C@CKG@adI5jbFh*M,Qm0#3e2BQTPBh4
Xc)$d*#@eKBbjM,QmJYJd*#3N*E@&MBfpZCLjM,QmJYJd*#3N*E@&MD'9XF#jM,Qm
XJYJd*#3N*E@&MFf0[FQ8ZBbj[),B0#3N*#@eKBh*cFQ-ZBbj[),B0#3N*#@eKD@i
XZBbj[),B0#3N*#@0bC@&dC5jM,QmJYJd*#3N*Bh*PBA4eFQ8ZBbj[),B0#3N*#@4
XPBA4S,Q-ZEb#f$3N*#3PNCA0M,Q-ZEb#f$3N*#3PNG@jRC@pZ,Q-ZEb#f$3N*#3P
XPBA3ZBbj[),B0#3N*#@CTE'9c,Q-ZEb#f$3N*#3PRC@jPFQ&dC5jM,QmJYJd*#3N
X*D'9XF#jM,QmJYJd*#3N*E@&MD@mZBbj[),B0#3N*#@eKCfPM,Q-ZEb#f$3N*#3P
XYDA0M-5jM,QmJYJd*#3N*E@PcBc)ZBbj[),B0#3N*#@e[ER0dCA*c,Q-ZEb#f$3N
X*#3PYEh*TB6%ZBbj[),B0#3N*#@e[FQPK-LjM,QmJYJd*#3N*F'aKH@9b,Q-ZEb#
Xf$3N*#3P`Eh4TEfjc,Q-ZEb#f$3N*#3P`FQ&jCA)ZBbj[),B0#3N*#A*PBf&XE#j
XM,QmJYJd*#3N*FQjN,Q-ZEb#f$3N*#3PcBACP,Q-ZEb#f$3N*#3PcBh*[E'ac,Q-
XZEb#f$3N*#3PcCA4c,Q-ZEb#f$3N*#3PcD@GZB@ac,Q-ZEb#f$3N*#3PcF'9XE(-
XZBbj[),B0#3N*#A0dB@CQFbjM,QmJYJd*#3N*Fh4[FQ8a,Q-ZEb#f$3N*#3PcG'p
XbC6)ZBbj[),B0#3N*#A4KBQaPFbjM,QmJYJd*#3N*G(*PBA0eFQ8ZBbj[),B0#3N
X*#A9ZC'9Q,Q-ZEb#f$3N*#3PfBA*TB@*XC5jM,QmJYJd*#3N*Gf&ZC(-ZBbj[),B
X0#3N*#AGTHQ&bC#jM,Qm0#3N*#3e5Fh*MFb!p#3N*E@&MC'&dB5jbFh*M,QmJYJd
X*#3N*E@&MFR0bBbjbFh*M,QmJYJd*#3N*E@pZFh4PFR-ZFR0bBbj[),B0#3N*#A"
XXBAPPFLjbFh*M,QmJYJd*#3N*G'&LE'9c,R*cFQ-ZEb#f$3N*#3PdFQ9KFh9bC5j
XbFh*M,QmJYJd*#3N*GQ&bD@&LE'8ZFR0bBbj[$3N*#3N09'9iG(-J23N*#@jPGh-
XJYJd*#3N*Eh*TCf0YC(-ZD'a`),B0#3N*#@phDATME@4c,QKXF##f$3N*#3PbEfG
XXBfeNFbjSE(!JYJd*#3N*FRGTHQ0YC(-ZD'a`),B0#3N*#ACPFR0TEfiZD'a`),B
X0#3N*#AGPE'0[E@8ZD'a`$3N*#3N0)b"+9cSJ3e*eER4TE@8ZEb"KEQ3J3dPZG'9
XbCQ&MC5j[)'4PE'9dC@3JBA-J55"hBA-JG'pXC#"dD'&d)(4SCANJBA*P)'pLFfp
XXCA4P$8e[FQPK#3N*a-3*He*cFQ0cI3d*6'PZDb!YE@&`)#eh)#ed)#G08&08*b!
XYBb!R69"6)#Hf$3N*,A0c)$)`-$!`-#!YFh*d),B0#3Pl8R0bBh0p),B0#3NLHd0
X-D@*bBA*TCA0p)N4eEA"5CA-ZEb#f$3N*)RY-D@*bBA*TCA0p)R0dG@*c,QmJYJd
X*#5*l6'PLFQ&bD@9cI5*5G@jdD@eP,QmJYJd*#5*l6'PLFQ&bD@9cI5**ER4PFQC
XKBf8ZEb#f$3N*)RY$6'PLFQ&bD@9cI5*6G'4$6'PL,QmJYJd*#5*l3daTBR*KFQP
XPFhdL3e0"6N9-D@)ZEb#f$3N*)RY$6'PLFQ&bD@9cI5*0BA4S,QmJYJd*#5*l6'P
XLFQ&bD@9cI5*8EfpX6'PLFbj[),B0#3Nq)'eKBf4KG'%ZE@&`$3P-D@jV,NpeG#"
X0Eh*TB3d*4'9XCA4P)%aTEQXZ6h9d$3e0Eh*TB5!*#3R%a#!*HdpLDQ9MG(0p$3P
X-D@jV)#eYBA!J,AFJ,A3J*d&38%`R)#eM)#G08NP"*lB0#3NYH#"YEh*TB5jiFQ9
XQ),B0#3NYFhPY)'pZ),B0#3NYEb"0Eh*TB5#f$3N*,A*K)$de-L#f$3N*,A0R)%e
XKD@ipE@&M,'eKD@iXFQjN,(0TCfjKE(-XG@jNC@BXE@&MFR0bBb#f$3N*,A*K)%e
XKD@ip06)JYJd*#5ecCb"*6ceYB@0TEb#f$3N*,A*K)%P2268b),B0#3NYFfFJ3A"
X`6@9ZG6eYB@0SC@a`,'eKBf0[EQBXE@&MFf0[FQ8JYJd*#5ebB5""F("0C@je26-
Xb),B0#3NYFfFJ3h*PBA4P2@0bC@&dC5#f$3N*,A*K)%0bC@&dC6dc-L#f$3N*,A0
XR)%0bC@&dGA*P2@0bC@&dGA*P),B0#3NYFQ%J3h*PBA4eFQ8p-c)JYJd*#5ecCb"
X%C@&dD$eNC@&dD##f$3N*,A*K)%4PBA4S26-b),B0#3NYFfFJ4(9ZCf9[EMeNG@j
XRC@pZ),B0#3NYFQ%J4(9ZCf9[EMde-L#f$3N*,A0R)%9KG$ePBA3JYJd*#5ebB5"
X&BA3p-c)JYJd*#5ecCb"'D@aPFceQD@aPFb#f$3N*,A*K)%CTE'9c26-b),B0#3N
XYFfFJ4f9ZCA*KG'8pCf9ZCA*KG'8JYJd*#5ebB5"(C@jPFQ&dC6dc-L#f$3N*,A0
XR)%KPE(!pD'9XF##f$3N*,A*K)%KPE(!p-c)JYJd*#5ecCb"0B@GTBceYB@GTBb#
Xf$3N*,A*K)%eKCfPM26-b),B0#3NYFfFJ6@PcBc%pE@PcBc%XC'9cBbacCA4c),B
X0#3NYFQ%J6@PcBc%p06)JYJd*#5ecCb"0DA0M-MeYDA0M-L#f$3N*,A*K)%eTFf-
Xb268b),B0#3NYFfFJ6@pbD@%a2@e[FQPK-5#f$3N*,A*K)%e[FQPK-6de-L#f$3N
X*,A0R)%e[FQPK-MeYEh*TB6)JYJd*#5ebB5"0Eh*TB6)p06)JYJd*#5ecCb"3FQ&
XjCA)pF(*KH@9b),B0#3NYFQ%J8(*KH@9b26-b),B0#3NYFfFJ8'pdD@pZFce`Eh4
XTEfjc),B0#3NYFQ%J8'pdD@pZFcdc-L#f$3N*,A0R)&*PBf&XE$ebC@0KE'`JYJd
X*#5ebB5"5C@0KE'`p-c)JYJd*#5ecCb"6BACP2A0KGQ8JYJd*#5ebB5"6BACP26-
Xb),B0#3NYFfFJ8f0bEfaXFcecBh*[E'ac),B0#3NYFQ%J8f0bEfaXFcdc-L#f$3N
X*,A0R)&0`C@aXFcecF'9XE(-JYJd*#5ebB5"6F'9XE(-p06)JYJd*#5ecCb"6G'&
XQCR-pFh4KCQCc),B0#3NYFQ%J8h4KCQCc26-b),B0#3NYFfFJ8h4[FQ8pFh4[FQ8
Xa,(0dEh*P-L#f$3N*,A*K)&0dEh*P26-b),B0#3NYFfFJ9f&ZC(-pGf&ZC(-JYJd
X*#5ebB5"AB@jNFcdc-L#f$3N*,A0R)&GTHQ&bC$ehDATKFQ3JYJd*#5ebB5"ADAT
XKFQ3p-c)JYJd*#AY2BQTPBh4cI5#f$3N*)RY$6'PLFQ&bD@9cI5*6Bh*Z6@Gb,Qm
XJYJd*#5*l3daTBR*KFQPPFhdL4(9YF&*PFbj[),B0#3NLHd0-D@*bBA*TCA0p)N0
X5G@jdD@eP,QmJYJd*#5*l6'PLFQ&bD@9cI5**ER4PFQCKBf8ZEb#f$3N*)RY$6'P
XLFQ&bD@9cI5*6G'4$6'PL,QmJYJd*#5*l3daTBR*KFQPPFhdL3e0"6N9-D@)ZEb#
Xf$3N*)RY$6'PLFQ&bD@9cI5*0BA4S,QmJYJd*#5*l3daTBR*KFQPPFhdL3dPZG'9
XbCQ&MC5j[),B0#3Nq)'e[FQPK,QeKF!d*8f9d4QPXC5!YB5"#)%e[FQPK$3e0Eh*
XTB3N*#F6%#@e[FQPK,R)0#9*PHL"YEh*TB5jb)#eKF("PEQ3J,@mJ6@pbD@%J,A-
XJHe**EQ0XG@4PFhd0#3e0Eh*TB3N*#F6%#AY8CAKdFhd0#8C[FL"'D@aP6Q&YC5"
XTEL"l9'9iG(0p$3N*5@BJ)RY'D@aP6Q&YCAdL)$eq)#r&1LM&+DJa,`d*#3P&BfK
X[)#)MHkJaI5)0#3P&E(0P$3N*#89MD'mJ)L0l4QPXC8jKE@9p)Jd*#89ZC!d*#80
XKG'9ZBA4P)#*l4QPXC8jKE@9p)Jd*4@jN)(`J4@jdB@)J,@3J1#!YG#!`)$iJ6@p
XbD@%0#90PG%CTE'8J,@-J*de558%R)#ed)#G"8&"-*b"0Eh*TB3d*$5-J4QPXCA-
XJGbp[)#)ZD#)JC'9`C@jNC@jMD@9c)#dY$5-*E@&MBfpZCLjM$5-*E@&MD'9XF#j
XM$3eYB@-ZBbj[#3N*#F3*BfpZFh4KER3ZD#"MEfjQD@FZD#"dHA"PFbjS)'9iG'9
XbER-ZD#"YB@0bFh*M,QJ0E@&MFf0[FQ8ZBbj[#3R%#@0[ER0dB@jd,QJJBfpZCQP
XR,QJJG(P`CA-ZD#"PH(4PFQjc,QJ0E@&MFR0bBbjM,Qm*#3R%#@0[ER0dB@jd,QJ
XJBfpZCQPR,QJJG(P`CA-ZD#"PH(4PFQjc,QJJE@&MFR0bBbjS$3eYB@PZ,Q-ZE`N
X*#F3*BfpZFh4KER3ZD#"MEfjQD@FZD#"dHA"PFbjS)'9iG'9bER-ZD!eMFQ9KG'8
XZBbj[#3N*a!PMEfjcG'&ZG#jS)'0[EQCTCbjS)(4jF'9c,QJJCAKdCA*ZFbjS$@0
XbC@&dGA*P,Q-ZE`N*a!PMEfjcG'&ZG#jS)'0[EQCTCbjS)(4jF'9c,QJJCAKdCA*
XZFbjS$@4PBA4S,Q-ZE`N*#F3*BfpZFh4KER3ZD#"MEfjQD@FZD#"dHA"PFbjS)'9
XiG'9bER-ZD!eNCA0M,Q-ZE`N*#F3*BfpZFh4KER3ZD#"MEfjQD@FZD#"dHA"PFbj
XS)'9iG'9bER-ZD!eNG@jRC@pZ,Q-ZE`N*#F3*BfpZFh4KER3ZD#"MEfjQD@FZD#"
XdHA"PFbjS)'9iG'9bER-ZD!ePBA3ZBbj[#3N*#F3*BfpZFh4KER3ZD#"MEfjQD@F
XZD#"dHA"PFbjS)'9iG'9bER-ZD!eQD@aPFbjM,Qm*#3R%#@0[ER0dB@jd,QJJBfp
XZCQPR,QJJG(P`CA-ZD#"PH(4PFQjc,QJ0Cf9ZCA*KG'8ZBbj[#3R%#@0[ER0dB@j
Xd,QJJBfpZCQPR,QJJG(P`CA-ZD#"PH(4PFQjc,QJ0D'9XF#jM,Qm*#3R%#@0[ER0
XdB@jd,QJJBfpZCQPR,QJJG(P`CA-ZD#"PH(4PFQjc,QJ0E@&MD@mZBbj[#3N*a!P
XMEfjcG'&ZG#jS)'0[EQCTCbjS)(4jF'9c,QJJCAKdCA*ZFbjS$@eKCfPM,Q-ZE`N
X*#F3*BfpZFh4KER3ZD#"MEfjQD@FZD#"dHA"PFbjS)'9iG'9bER-ZD!eYDA0M-5j
XM,Qm*#3R%#@0[ER0dB@jd,QJJBfpZCQPR,QJJG(P`CA-ZD#"PH(4PFQjc,QJ0E@P
XcBc)ZBbj[#3N*a!PMEfjcG'&ZG#jS)'0[EQCTCbjS)(4jF'9c,QJJCAKdCA*ZFbj
XS$@e[ER0dCA*c,Q-ZE`N*a!PMEfjcG'&ZG#jS)'0[EQCTCbjS)(4jF'9c,QJ0E@p
XbD@%a,Q-ZE`N*#F3*BfpZFh4KER3ZD#"MEfjQD@FZD#"dHA"PFbjS)'9iG'9bER-
XZD!eYEh*TB6)ZBbj[#3N*a!PMEfjcG'&ZG#jS)'0[EQCTCbjS)(4jF'9c,QJJCAK
XdCA*ZFbjS$A"XBAPPFLjM,Qm*#3R%#@0[ER0dB@jd,QJJBfpZCQPR,QJJG(P`CA-
XZD!e`Eh4TEfjc,Q-ZE`N*#F3*BfpZFh4KER3ZD#"MEfjQD@FZD#"dHA"PFbjS)'9
XiG'9bER-ZD!e`FQ&jCA)ZBbj[#3N*a!PMEfjcG'&ZG#jS)'0[EQCTCbjS)(4jF'9
Xc,QJJCAKdCA*ZFbjS$A*PBf&XE#jM,Qm*#3R%#@0[ER0dB@jd,QJJBfpZCQPR,QJ
XJG(P`CA-ZD#"PH(4PFQjc,QJ0FQjN,Q-ZE`N*#3R%#@0[ER0dB@jd,QJJ)#!J)#!
XJ)#!JG(P`CA-ZD!ecBACP,Q-ZE`N*#F3*BfpZFh4KER3ZD#"MEfjQD@FZD#"dHA"
XPFbjS)'9iG'9bER-ZD!ecBh*[E'ac,Q-ZE`N*#F3*BfpZFh4KER3ZD#"MEfjQD@F
XZD#"dHA"PFbjS)'9iG'9bER-ZD!ecCA4c,Q-ZE`N*#F3*BfpZFh4KER3ZD#"MEfj
XQD@FZD!ecD@GZB@ac,Q-ZE`N*#F3*BfpZFh4KER3ZD#"MEfjQD@FZD#"dHA"PFbj
XS)'9iG'9bER-ZD!ecF'9XE(-ZBbj[#3N*a!PMEfjcG'&ZG#jS)'0[EQCTCbjS)(4
XjF'9c,QJJCAKdCA*ZFbjS$A0dB@CQFbjM,Qm*#3R%#@0[ER0dB@jd,QJJBfpZCQP
XR,QJJG(P`CA-ZD#"PH(4PFQjc,QJ0Fh4[FQ8a,Q-ZE`N*#F3*BfpZFh4KER3ZD#"
XMEfjQD@FZD#"dHA"PFbjS)'9iG'9bER-ZD!ecG'pbC6)ZBbj[#3N*a!PMEfjcG'&
XZG#jS)'0[EQCTCbjS)(4jF'9c,QJJCAKdCA*ZFbjS$A4KBQaPFbjM,Qm*#3R%#@0
X[ER0dB@jd,QJJBfpZCQPR,QJJG(P`CA-ZD!edFQ9KFh9bC5jM,Qm*#F3*BfpZFh4
XKER3ZD#"MEfjQD@FZD#"dHA"PFbjS$A9ZC'9Q,Q-ZE`N*#F3*BfpZFh4KER3ZD#"
XMEfjQD@FZD#"dHA"PFbjS)'9iG'9bER-ZD!efBA*TB@*XC5jM,Qm*#F3*BfpZFh4
XKER3ZD#"MEfjQD@FZD#"dHA"PFbjS$AGKEQ4c,Q-ZE`N*#F3*BfpZFh4KER3ZD#"
XMEfjQD@FZD#"dHA"PFbjS)'9iG'9bER-ZD!ehDATKFQ3ZBbj[#3N*a!PMEfjcG'&
XZG#jS)'0[EQCTCbjS)(4jF'9c,QJJCAKdCA*ZFbjS$3eYB@0NBA4K,R*cFQ-ZE`N
X*a!NJ)#!J)#!J)#!J)#!J)#!J)#!J)#!J)#!J)#!J)#!J)#!J)#!J)'eKBh*cFQ-
XZD!eYB@0bFh*M,R*cFQ-ZE`N*a!PMEfjcG'&ZG#jS)'0[EQCTCbjS)(4jF'9c,QJ
XJCAKdCA*ZFbjS)'eKBh*cFQ-ZD!eYEfjcG'9bFbjbFh*M,Qm*#F3*BfpZFh4KER3
XZD#"MEfjQD@FZD#"dHA"PFbjS$A"XBAPPFLjbFh*M,Qm*#F3*BfpZFh4KER3ZD#"
XMEfjQD@FZD#"dHA"PFbjS$A4KBQaPFbjbFh*M,Qm*#F3*BfpZFh4KER3ZD#"MEfj
XQD@FZD#"dHA"PFbjS$A4bC@&cGA*P,R*cFQ-ZE`N*a!PMEfjcG'&ZG#jS)'0[EQC
XTCbjS)(4jF'9c,QJ0GQ&bD@&LE'8ZFR0bBbj[#3R%#@0[ER0dB@jd,QJJBfpZCQP
XR,QJJG(P`CA-ZD!fU&J!!!3!!!!&-!!!!6!!!!$)!!!!F!%!!3!#D!F3!!3%!!!!
X!!!!!!))(3fpZCQPbE3K0B@YP4QPXC5d#!!!!9%9B9%e38b!"!!!!!%!!!!!!!!"
X849K869"6)!%!!!!!3!!!!!!!!!!!!!!!!!!!!!!!!++&Jjm!!"E0!!!"IJ#$!!!
X!!*3!"`!!!!!!M!%!!*i"4J3$6Q9h!!!!!!!!TJ%!!,J"4J3'3f&ZBf9X!!!!!!#
X0!!i!R3#kL!Y1CAFJ9fPZC'ph1J!!!!!!!"S!h`!Z!9Z!!!!!!!!!0!%!!%B"4J3
X&4@TPBh3!!!!!!!"1!3!!B!&'"!9%FQPfC3!!!!!!!!")!!P0EfjKBfm!!!!!!!!
X!!!!!!!!!!!!!!!!!!!!!!!!!!!!'!!3!2J!2!G-#F`!q!!m"d`*cSS@5q3!!&Xd
X!!"E0!!!6e`%!!!!"!!!!!8`!!!"-!!!!-J!Z#8!)&J!!!"`!-J!!69"68J!!!!S
X$lIrr!!!!!!![$)42eJ:
END_OF_FILE
if test 8517 -ne `wc -c <'mac/MakeFile.hqx'`; then
    echo shar: \"'mac/MakeFile.hqx'\" unpacked with wrong size!
fi
# end of 'mac/MakeFile.hqx'
if test -f 'mac/dumpres/MakeFile.hqx' -a "${1}" != "-c" ; then 
  mv -f mac/dumpres/MakeFile.hqx mac/dumpres/MakeFile.hqx.old
fi
echo shar: Extracting \"'mac/dumpres/MakeFile.hqx'\" \(1515 characters\)
sed "s/^X//" >'mac/dumpres/MakeFile.hqx' <<'END_OF_FILE'
X(This file must be converted with BinHex 4.0)
X:#%eKDf9'D@aP!&4&@&408&-J!3!!!!+E!!!"IV2*3dp`G'P[ER-J25!YE@*R)'p
XZ$8a2F(4TEfjc)$d0$84eEA"5CA-ZEb$%)%4eEA"5CA-ZB`d*3b"l3dp`G'P[ER0
Xp)#e[)%4eEA"5CA-ZEb"%G@e`8Q9c,Q-0$84eEA"5CA08CA0d,Q-ZEb$%)%4eEA"
X5CA08CA0d,Q-0#8-JHd02F(4TEfjcI5"%G@e`8Q9c9'9cG#jM$3N06f*UC@0dFb!
Xp)%4eEA"5CA08CA0d,Q-ZEb"%G@e`8Q9c,Qm0$5-J5PFk)%05G@jdD@eP,QmJB@j
XN)%0*ER4PFQCKBf8ZEb"bC@e[GQ9N)(0TEQ0P)%NJGf&c)(4[E'3JG'KKG#"dD'9
Xj)'&bC5"[BR0[E'9dC3e%G@e`8Q9c9'9cG#$%a#"l6f*UC@0dFhd0#8aTEQXJHda
X2F(4TEfjcI5!YGb!YBb!R69"6)#FJ,A3J69"69##f$3N*HdpLDQ9MG(0p),B0#3N
XLHdaTBR*KFQPPFhdLFh4eBR-ZEb#f$3N*)RY-D@*bBA*TCA0p)P*eER4TE@8ZEb#
Xf$3N*)RY-D@*bBA*TCA0p)NPZG'9bCQ&MC5j[),B0#3NLHd0-D@*bBA*TCA0p)P0
XdC%0-D@)ZEb#f$3N*)RY$6'PLFQ&bD@9cI5*$8d&148aTBLj[),B0#3NLHd0-D@*
XbBA*TCA0p)NeKG'JZEb#f$3N*)RY-D@*bBA*TCA0p)P4[Efa-D@*c,QmJYJd*#5e
X[)%4eEA"5CA08CA0d$3e*ER0dB@aX)-3J4(9YF&*PFbjS)%4eEA"5CA-ZE`d*4(9
X`E'PMBA4P)#ej)%4eEA"5CA-ZD#!LHd0*EQ0XG@4PFhdL$3P%GA"XD@0KG'8J,AN
XJ4(9YF&*PFbj[)#*l3daTBR*KFQPPFhdL$6Yi!!!"!!!!!8`!!!"-!!!!-N4eEA"
X5CA08CA0d,QeKDf80)b!J)&4KFQGPG$SJ)#!J$8eKDf9'D@aP,Q4eEA!#!!!!9%9
XB9%e38b!!!!!!!!!!!&4&@&408&-J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!SS@
X$J3!!!TX!!!&qBA*MD#!e,#!a16Jj)$%b1M)a1M3d$3e%G@e`8Q9c9'9cG#jM,Qm
XJa#"%G@e`8Q9c9'9cG#jYB@YP)%4eEA"5CA08CA0d,Q-0#8-J4(9YF&*PFe4PFh3
XZB`e%G@e`8Q9c,Q-ZEb$%)%4eEA"5CA08CA0d,QeKDf8J4(9YF&*PFbjM$3!!!%J
X!#8e[EQ&ME`##!!-!#3!+Irm!$J!*!!Trr`#(!)%!JRrr!!B!"!!q!!m"d`*c!$i
X!$`(6!R1LKBLX!!!#!J!!!J)!!!!!!3!!!!%!!!!"6!!!!%`!!!!b!#eT3!Kd!!!
X!(!!b!!"08&05!!!!#J2Yrrm!!!!!!#jV*$e,:
END_OF_FILE
if test 1515 -ne `wc -c <'mac/dumpres/MakeFile.hqx'`; then
    echo shar: \"'mac/dumpres/MakeFile.hqx'\" unpacked with wrong size!
fi
# end of 'mac/dumpres/MakeFile.hqx'
if test -f 'mac/scrnmgr/ScrnMgr.doc' -a "${1}" != "-c" ; then 
  mv -f mac/scrnmgr/ScrnMgr.doc mac/scrnmgr/ScrnMgr.doc.old
fi
echo shar: Extracting \"'mac/scrnmgr/ScrnMgr.doc'\" \(20464 characters\)
sed "s/^X//" >'mac/scrnmgr/ScrnMgr.doc' <<'END_OF_FILE'
XCopyright (C) Curtis McCauley, 1989.  All rights reserved.
X
XYou may copy this subroutine package freely, modify it as you desire,
Xand distribute it at will, as long as the copyright notice in the
Xsource material is not disturbed, excepting that no one may use this
Xpackage or any part of it for commercial purposes of any kind without
Xthe express written consent of its author.
X 
XThis document describes a package of subroutines I have decided to
Xcall the Screen Manager.
X
XEnclosed files:
X
XScrnMgr.doc		What you are reading
X
XScrnMgr.c		The source for the subroutine package
XScrnMgr.r		Resources used by the subroutines
XScrnMgr.h		Include file for applications
X
XScrnMgr.rsrc	The Rez output from ScrnMgr.r (if you do not have Rez)
X
XScrnTest.c		A test application
XScrnTest.r		Resources used by the test application
X
XMakeFile		What the name implies
X
XThe package is pretty heavily built around MPW.  It is specifically
Xtailored for version 3.0, but should work with 2.0.2.  The only thing
XI think you would have to modify for the older version is the SIZE
Xresource.  Porting the package to other environments is not something
XI would recommend.
X
XThe make file recognizes two primary targets: ScrnTest - which will
Xbuild the test application along with the subroutine package object
Xfile, and Install - which will copy the object files to appropriate
Xdirectories.  If you have a non-standard MPW directory structure, you
Xwill want to modify the rules for Install.
X
XI initially built the subroutine package around a model of the IBM PC
Xscreen BIOS calls.  The idea was to take a public domain curses
Xpackage for the PC and replace all the BIOS calls with calls to my
Xpackage.  Since my ultimate goal was to port the UNIX moria program
Xwhich relied on curses, and the only copy of curses I had was the PC
Xversion, this strategy initially seemed to make sense.  Moria, as it
Xturns out, only calls a few of the curses routines, so I never had to
Xactually port the whole PC curses package.  It was a lot easier to
Xjust replace the curses calls in moria with direct calls to my
Xsubroutine package.  By reducing the number of software layers I
Xachieved better performance, anyway.
X
XStill, the internal structure of the package resembles the PC BIOS.  I
Xkeep two large byte arrays to hold the entire screen, one with the
Xcharacters, the other with the attributes.  The attributes are
Xforeground and background color (the eight original quickdraw colors),
Xunderlined, and italicized.  The bulk of the package, at least in
Xnumber of functions, is taken up with routines to manipulate these
Xbuffers, either to put data in or take data out.  Whenever the
Xcontents of the buffers are changed, the window is not immediately
Xupdated to reflect the change.  Instead, I "invalidate" the portion of
Xthe window changed.  This is done by using InvalRect(), which causes
Xthe area to be accumulated in the update region of the window, or by
Xadding the area to an internal representation of the dirty area of the
Xscreen.  This internal representation is less precise than the region
Xwhich is kept by quickdraw calls to InvalRect().  It consists of the
Xbeginning and ending dirty area on each screen line.  The latter
Xmethod is faster, but the screen changes will only be noticed when a
Xcall to update the screen is explicitly made, as opposed to the idle
Xroutine (see below) catching an update event.  There are two sets of
Xroutines, then, to change the screen buffers.  The ones prefixed with
Xa 'D' (for delayed update) use the later method.
X
XA program which uses this package, at a minimum, has to call
XInitScreenMgr() at the beginning to open the window, call
XIdleScreenMgr() frequently in the middle to handle all the standard
Xmac events (mouse and keyboard events, especially, but also the
XMultiFinder stuff as well), and call CloseScreenMgr() at the end.  The
Xbest time to call the idle routine is whenever your program is waiting
Xfor a keystroke.  Another good time is at regular intervals in a heavy
Xcompute loop.  If you do this, you can actually get your program to
Xrun in the background, but all the idle calls will, of course, slow
Xthings down some.  In heavy compute passages, then, you might instead
Xwant to bracket the code with calls to BeginScreenWait() and
XEndScreenWait() to change the mouse cursor to a spinning watch.
X
XA description of each routine in the package follows --
X
Xint InitScreenMgr(int h, int v, char *title,
X	char *resFile, OSType rfCreator, OSType rfType,
X	void (*fileMenuProc)(int item),
X	void (*appMenuProc)(int item),
X	int multiColorFlag);
X
XThis routine initializes the package, allocates buffers, and puts the
Xwindow on the monitor.  H and v are the dimensions of the screen in
Xcharacters.  Title is the window title.  ResFile, rfCreator, and
XrfType describe the file to contain the configuration information.
XThis file will be maintained in the system folder.  It remembers the
Xposition and size of the window, the font size selected, and, if the
Xscreen is only two colors, the user's choices for foreground and
Xbackground color.  FileMenuProc points to a routine to be called when
Xa selection from the file menu is made.  A click in the window's close
Xbox is considered like a selection from the menu, resulting in a call
Xto fileMenuProc with the item number equal to the constant
XcloseBoxItem.  AppMenuProc points to a routine to be called when a
Xselection from the application menu is made.  Both can be NULL, in
Xwhich case the subroutine package will handle them as best it can.
XMultiColorFlag is non-zero when more than two colors will be displayed
Xon the screen.
X
Xvoid IdleScreenMgr(void);
X
XThis routine handles the macintosh event queue.  It must be called
Xfrequently, or the user will not be able to select from menus, switch
Xto another program or desk accessory, etc.  It also blinks the screen
Xcursor.
X
Xvoid ShowScreen(int visible);
X
XShows or hides the screen window, depending upon the visible flag.
X
Xvoid CloseScreenMgr(void);
X
XCloses the window, deallocates buffers.
X
Xvoid SetScreenQuitProc(void (*quitProc)(void), int willReturnFlag);
X
XTells the package what routine to call when quit is chosen.  If the
Xroutine pointed to by quitProc will always return (as opposed to doing
Xsomething like ExitToShell()), willReturnFlag should be non-zero.
X
Xvoid SetScreenAboutProc(void (*aboutProc)(void));
X
XAllows the standard about box to be overridden.  AboutProc points to a
Xroutine which should be called when the about item is chosen from the
Xapple menu.
X
XThe following routines all manipulate the screen buffers.  Calls
Xbeginning with 'Set' do not move the screen cursor and need to be told
Xwhere to begin the operation.  Calls beginning with 'Write' move the
Xcursor and begin the operation at the current cursor location.  All of
Xthese routines can be prefixed with a 'D' to make changes to the
Xinternal dirty area instead of calling InvalRect().  The internal
Xdirty area is updated only when a call to UpdateScreen() is made or
Xsome external update event is generated and caught by the idle
Xroutine.
X
XThe screen cells are indicated by column (h) and row (v) numbers which
Xincrease from left to right and top to bottom.  Hence the upper left
Xof the screen is (0, 0) and the bottom right is (h, v) as set by the
Xcall to InitScreenMgr().
X
Xvoid SetScreenChar(char c, int h, int v);
X
Xvoid SetScreenCharAttr(char c, char a, int h, int v);
X
Xvoid WriteScreenChar(char c);
X
Xvoid WriteScreenCharAttr(char c, char a);
X
XSets the character at (h, v) to c and the attribute to a.
X
Xvoid SetScreenBuffer(char *buffer, int rowBytes,
X	Rect *area, int h, int v);
X
Xvoid SetScreenBufferAttr(char *buffer, char a,
X	int rowBytes, Rect *area, int h, int v);
X
Xvoid WriteScreenBuffer(char *buffer, int rowBytes, Rect *area);
X
Xvoid WriteScreenBufferAttr(char *buffer, char a,
X	int rowBytes, Rect *area);
X
XSets the block of characters at (h, v) to the contents of buffer and
Xall the attributes to a.  RowBytes indicates the number of bytes in a
Xrow in buffer.  Area indicates the block of characters to copy,
Xassuming that the first byte in buffer is at (0, 0).  Note: This means
Xthat the area rectangle is in buffer coordinates, not screen
Xcoordinates.
X
Xvoid SetScreenString(char *str, int h, int v);
X
Xvoid SetScreenStringAttr(char *str, char a, int h, int v);
X
Xvoid WriteScreenString(char *str);
X
Xvoid WriteScreenStringAttr(char *str, char a);
X
XSets the characters at (h, v) and following to the contents of string
Xand all the attributes to a.
X
Xvoid SetScreenImage(char *c, char *a, int rowBytes,
X	Rect *area, int h, int v);
X
Xvoid WriteScreenImage(char *c, char *a,
X	int rowBytes, Rect *area);
X
XSets the block of characters at (h, v) to the contents of c and the
Xattributes to the contents of a.  RowBytes indicates the number of
Xbytes in a row in the c and a buffers.  Area indicates the block of
Xbytes to copy, assuming that the first byte in the buffers is at (0,
X0).  Note: This means that the area rectangle is in buffer
Xcoordinates, not screen coordinates.
X
Xvoid FillScreen(char c, char a, Rect *area);
X
XFills the part of the screen indicated by area with the character c
Xand the attribute a.  Area is in screen coordinates.
X
Xvoid EraseScreen(Rect *area);
X
XFills the part of the screen indicated by area with the blank
Xcharacter (0x20) and the normal attribute (attrNormal).  Area is in
Xscreen coordinates.
X
Xvoid ScrollScreen(int dh, int dv, Rect *area, char a);
X
XScrolls the part of the screen indicated by area the distance
Xindicated by dh and dv (which may be negative).  The leftover space is
Xfilled with the blank character (0x20) and the normal attribute
X(attrNormal).  Area is in screen coordinates.
X
Xvoid MoveScreenCursor(int dh, int dv);
X
XMoves the screen cursor by the number of character cells indicated by
Xdh and dv (which may be negative).
X
Xvoid SetScreenCursor(int h, int v);
X
XPositions the screen cursor at the character cell indicated by h and v.
X
Xvoid DefineScreenCursor(int color, int lines, int blinkRate);
X
XDefines the screen cursor.  Color indicates what you would expect,
Xlines indicates the height of the cursor in pixels (up to the height
Xof the character cell, so lines = 32767 will probably give you a block
Xcursor), and blinkRate indicates the number of clock ticks between
Xcursor blinks or zero for a non-blinking cursor (a really friendly
Xprogram will use GetCaretTime() to set this).  The default cursor uses
Xblack, 2 lines, and no blinks.  It is initially hidden.
X
Xvoid HideScreenCursor(void);
X
Xvoid ShowScreenCursor(void);
X
XAn internal counter is used to keep track of whether the cursor is to
Xbe shown on the screen.  When it is less than or equal to zero, the
Xcursor is hidden.  Otherwise it is shown.  The hide routine decrements
Xthis counter.  Show increments it.
X
Xvoid UpdateScreen(void);
X
XImmediately draws the dirty portion of the screen.  The dirty portion
Xincludes the update region of the window and the internal dirty area
Xmaintained by the 'D' buffer manipulation routines.
X
XIn addition to the macintosh event queue, this package maintains a
Xbuffer of keystrokes and mouse clicks.  Whenever the idle routine is
Xcalled, the events are pulled out of the macintosh queue and put into
Xthe internal buffer.
X
Xvoid FlushScreenKeys(void);
X
XFlushes the internal buffer of keystrokes and the macintosh event queue.
X
Xint CountScreenKeys(void);
X
XCounts the number of entries in the internal keystroke buffer.
X
Xint GetScreenKeys(char *keyCode, char *modifiers, char *ascii,
X	int *h, int *v);
X
XPulls the top element off the internal buffer.  KeyCode contains the
Xkeycode as described in the IM Event Manager documentation.  Modifiers
Xcontains bits which indicate the state of the control keys (command,
Xshift, caps lock, option, and control) and whether the event is a
Xmouse click.  There are masks defined in ScrnMgr.h that indicate the
Xexact bit for each.  In the case of a mouse click, h and v will be
Xset.  If you are not interested in mouse clicks, you can pass NULLs
Xfor both.  Ascii will get the ascii code of the key hit.  If the
Xkeyboard in use has a control key, the ascii value is taken right from
Xthe event which will contain the appropriate control code.  If the
Xkeyboard does not have a control key, a test is made to see if the
Xcommand modifier key is down. If so, the ascii value is converted to
Xthe appropriate control code.  See the discussion on MENU resources
Xbelow to see how command key equivalents work on machines without a
Xcontrol key.
X
Xvoid EnableScreenMouse(int flag);
X
XEnables or disables the queuing of mouse clicks in the internal
Xbuffer, according to flag.  Initially, mouse clicks are disabled.
X
Xvoid ClipScreenMouse(Rect *clip);
X
XLimits the detection of mouse clicks to the area indicated by clip,
Xmeasured in character cells on the screen.
X
Xvoid GetScreenCharAttr(char *c, char *a, int h, int v);
X
XReturns in c and a the character and attribute at (h, v).
X
Xvoid GetScreenImage(char *c, char *a, int rowBytes,
X	Rect *area, int h, int v);
X
XReturns in c and a the block of characters and attributes beginning at
X(h, v).  RowBytes indicates the number of bytes in a row in the c and
Xa buffers.  Area indicates the block of bytes to copy, assuming that
Xthe first byte in the buffers is at (0, 0).  Note: This means that the
Xarea rectangle is in buffer coordinates, not screen coordinates.
X
Xvoid GetScreenCursor(int *h, int *v);
X
XReturns the screen coordinates of the cursor.
X
XThe next few routines help with dialogs.  They are designed to work
Xwith multi-monitor systems.  On such systems, the active monitor is
Xchosen by the current mouse location, arguably not a good choice, but
Xprobably a choice as good as any other.
X
Xint YesOrNo(char *question);
X
XPuts up a dialog box with the string pointed to by question, a button
Xfor yes (the default), and a button for no.  Returns true if yes is
Xselected.  The box will be centered horizontally on the active
Xmonitor, one-third of the way from the top.
X
Xint DoScreenALRT(int id, int kind, Fixed hRatio, Fixed vRatio);
X
XPuts up the alert indicated by id.  Kind specifies the type of alert
X(normal, stop, note, or caution).  There are constants defined in
XScrnMgr.h for each of these kinds.  The alert will be centered hRatio
Xof the way from the left and vRatio of the way from the top of the
Xactive monitor.  (I.e., if hRatio = vRatio = .5, the alert will be
Xexactly in the middle of the screen.)  ScrnMgr.h contains fixed
Xconstants for common ratios.  See IM for a general discussion of fixed
Xnumbers.  Returns the item number of the button pressed.
X
Xvoid CenterScreenDLOG(int id, Fixed hRatio, Fixed vRatio,
X	int *h, int *v);
X
XGiven a DLOG, which does not have to be currently shown on the screen,
Xindicated by id, and hRatio and vRatio, returns where to position its
Xtop left corner in h and v.  See DoScreenALRT for an explanation of
XhRatio and vRatio.  This routine is generally used prior to calling
XGetNewDialog().  You should declare your DLOG to be invisible, call
XMoveWindow() using h and v to center it, and then call ShowWindow().
X
Xvoid GetScreenBounds(Rect *bounds);
X
XReturns the bounds in global coordinates of the active monitor, less
Xthe menu bar if it is on this monitor.
X
Xpascal void DrawDefaultBorder();
X
Xpascal void DrawGroupRect();
X
XTwo handy routines for installing in dialog userItems.
X
Xvoid ConfigScreenMgr(int force, ResType theType, int theID,
X	int (*configProc)(Handle theData));
X
XA routine to manipulate resources in the configuration file.  Checks
Xfor the presence of the resource indicated by theType and theID.  If
Xthis resource is not found, it does nothing.  If the resource is found
Xsomewhere other than in the configuration file (see InitScreenMgr()),
Xthis routine assumes that some action needs to be taken.  The usual
Xplace other the the configuration file to find this kind of resource
Xis in the program file itself and logically represents default values.
XIf some action needs to be taken or force is non-zero, the routine
Xpointed to by configProc is called.  TheData contains a handle to the
Xresource found as described above.  ConfigProc should generally put up
Xa dialog box to change the data in theHandle.  If it does change the
Xdata, configProc should return true.  Otherwise, false.  If configProc
Xreturns true, the handle is marked changed so that it is added to the
Xconfiguration file.  A nice time to call this routine is at the start
Xof your program with force false, so that initial configuration
Xinformation can be obtained from the user.  Then provide a menu item
Xin the application menu to allow the user to change it later, calling
Xthis routine with force true.
X
Xvoid BeginScreenWait(int rate);
X
XChanges the cursor to a spinning wristwatch.  Rate indicates the
Xnumber of ticks between each spin.
X
Xvoid EndScreenWait(void);
X
XReturns the cursor to the standard arrow.
X
XHandle GetFileMHandle(void);
X
XHandle GetAppMHandle(void);
X
XReturns a handle to the file or application menu.
X
Xint PushScreen();
X
XSaves the current screen buffer (characters, attributes, and cursor
Xlocation) on a stack.  Allocates a significant amount of memory.
XReturns 0 if successful.
X
Xvoid PopScreen()
X
XSets the screen contents to the last screen saved by PushScreen().  If
Xthere are no saved screens on the stack, does nothing.
X
XYou should include in your application all the resources found in the
Xfile ScrnMgr.rsrc.  This file is produced from ScrnMgr.r by the MPW
Xtool Rez.  The best way to do this, assuming you have Rez, is to
Xinclude at the beginning of your program's .r file, the line 'include
X"ScrnMgr.rsrc";'
X
XThis package assumes that your program will have 4 or 5 menus: the
XApple, File, Edit, Screen (FontSize), and optionally an "application"
Xmenu.  You can override the standard file menu, if you provide a
XfileMenuProc in the InitScreenMgr() call.  If you do override, you
Xshould provide two menu resources to replace the default ones in
XScrnMgr.rsrc.  The first must be MENU(129).  The second, MENU(229),
Xmust be a copy of the first, except for not having any command key
Xequivalents.  It will be used on machines without a control key.  In
Xother words, machines without a control key on the keyboard cannot use
Xcommand key equivalents.  If you want to implement an application
Xmenu, you must provide an appMenuProc to the initialization routine,
Xalong with MENU(133) and MENU(233).  The first menu is the application
Xmenu with command key equivalents, the second without.
X
XYou will probably want to override the STR(128) resource which
Xcontains the title of the first item in the apple menu (i.e, the about
Xitem).  If you override the DLOG(128) and DITL(128) resources, you can
Xrely on the package to put up your customized about box.  Otherwise,
Xyou can call SetScreenAboutProc() to really customize things.  The
Xdefault about box mentions the version of this package and its
Xprogrammer.
X
XThe STR(129) resource contains the name of the font the package should
Xuse.  Any true monospaced font should work.  Be forewarned that very
Xfew fonts are completely monospaced.  Many have a few odd characters
Xwhose width is not the same as most others.  Since this package relies
Xon GetFontInfo() and the returned widMax to setup the screen, even the
Xpresence of one extra wide character in the font will cause funny
Xthings to happen.
X
XYou will probably want to override the INFO(1) resource.  This
Xresource contains the window size, position, font size, and colors.  A
Xcopy of it is made the first time your program is run in the
Xconfiguration file and is thereafter kept up to date.  Hence, the copy
Xyou keep in you application file should contain the default initial
Xvalues.  The window size and position are indicated by a rectangle in
Xglobal coordinates.  Since ResEdit does not provide a template for
Xthis kind of resource, you will have to at least look at the ScrnMgr.r
Xfile to see the format of the resource if you want to use ResEdit to
Xmodify it.
X
XFinally, you will want to supply a SIZE resource to make your program
XMultiFinder friendly.
X
XI am somewhat ambivalent about releasing this package to the public.
XI do not think that it is particularly well-written.  And I certainly
Xdo not think that it does justice to what the mac is all about.  It is
Xprobably full of bugs.  The only real testing that it has had is in
Xthe moria port, which doesn't call all of the routines available.
XHence, I do not provide an express or implied warranty of any kind.
XYou use the package at your own risk.  If you have any questions, I
Xcan be reached at 73230.224@compuserve.com or at 73230,224 on CIS.
X
XCurtis McCauley
X22 July 1989
END_OF_FILE
if test 20464 -ne `wc -c <'mac/scrnmgr/ScrnMgr.doc'`; then
    echo shar: \"'mac/scrnmgr/ScrnMgr.doc'\" unpacked with wrong size!
fi
# end of 'mac/scrnmgr/ScrnMgr.doc'
if test -f 'source/player.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'source/player.c'\"
else
echo shar: Extracting \"'source/player.c'\" \(19680 characters\)
sed "s/^X//" >'source/player.c' <<'END_OF_FILE'
X/* player.c: player specific variable definitions
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 "constant.h"
X#include "config.h"
X#include "types.h"
X
X/* Player record for most player related info */
Xplayer_type py;
X/* player location in dungeon */
Xint16 char_row;
Xint16 char_col;
X/* calculated base hp values for player at each level, store them so that
X   drain life + restore life does not affect hit points */
Xint16u player_hp[MAX_PLAYER_LEVEL];
X
X/* Class titles for different levels				*/
X#ifdef MACGAME
Xchar *(*player_title)[MAX_PLAYER_LEVEL];
X#else
Xchar *player_title[MAX_CLASS][MAX_PLAYER_LEVEL] = {
X	/* Warrior	 */
X{"Rookie","Private","Soldier","Mercenary","Veteran(1st)","Veteran(2nd)",
X"Veteran(3rd)","Warrior(1st)","Warrior(2nd)","Warrior(3rd)","Warrior(4th)",
X"Swordsman-1","Swordsman-2","Swordsman-3","Hero","Swashbuckler","Myrmidon",
X"Champion-1","Champion-2","Champion-3","Superhero","Knight","Superior Knt",
X"Gallant Knt","Knt Errant","Guardian Knt","Baron","Duke","Lord (1st)",
X"Lord (2nd)","Lord (3rd)","Lord (4th)","Lord (5th)","Lord (6th)","Lord (7th)",
X"Lord (8th)","Lord (9th)","Lord Gallant","Lord Keeper","Lord Noble"},
X	/* Mage		 */
X{"Novice","Apprentice","Trickster-1","Trickster-2","Trickster-3","Cabalist-1",
X"Cabalist-2","Cabalist-3","Visionist","Phantasmist","Shadowist","Spellbinder",
X"Illusionist","Evoker (1st)","Evoker (2nd)","Evoker (3rd)","Evoker (4th)",
X"Conjurer","Theurgist","Thaumaturge","Magician","Enchanter","Warlock",
X"Sorcerer","Necromancer","Mage (1st)","Mage (2nd)","Mage (3rd)","Mage (4th)",
X"Mage (5th)","Wizard (1st)","Wizard (2nd)","Wizard (3rd)","Wizard (4th)",
X"Wizard (5th)","Wizard (6th)","Wizard (7th)","Wizard (8th)","Wizard (9th)",
X"Wizard Lord"},
X	/* Priests	 */
X{"Believer","Acolyte(1st)","Acolyte(2nd)","Acolyte(3rd)","Adept (1st)",
X"Adept (2nd)","Adept (3rd)","Priest (1st)","Priest (2nd)","Priest (3rd)",
X"Priest (4th)","Priest (5th)","Priest (6th)","Priest (7th)","Priest (8th)",
X"Priest (9th)","Curate (1st)","Curate (2nd)","Curate (3rd)","Curate (4th)",
X"Curate (5th)","Curate (6th)","Curate (7th)","Curate (8th)","Curate (9th)",
X"Canon (1st)","Canon (2nd)","Canon (3rd)","Canon (4th)","Canon (5th)",
X"Low Lama","Lama-1","Lama-2","Lama-3","High Lama","Great Lama","Patriarch",
X"High Priest","Great Priest","Noble Priest"},
X	/* Rogues	 */
X{"Vagabond","Footpad","Cutpurse","Robber","Burglar","Filcher","Sharper",
X"Magsman","Common Rogue","Rogue (1st)","Rogue (2nd)","Rogue (3rd)",
X"Rogue (4th)","Rogue (5th)","Rogue (6th)","Rogue (7th)","Rogue (8th)",
X"Rogue (9th)","Master Rogue","Expert Rogue","Senior Rogue","Chief Rogue",
X"Prime Rogue","Low Thief","Thief (1st)","Thief (2nd)","Thief (3rd)",
X"Thief (4th)","Thief (5th)","Thief (6th)","Thief (7th)","Thief (8th)",
X"Thief (9th)","High Thief","Master Thief","Executioner","Low Assassin",
X"Assassin","High Assassin","Guildsmaster"},
X	/* Rangers	 */
X{"Runner (1st)","Runner (2nd)","Runner (3rd)","Strider (1st)","Strider (2nd)",
X"Strider (3rd)","Scout (1st)","Scout (2nd)","Scout (3rd)","Scout (4th)",
X"Scout (5th)","Courser (1st)","Courser (2nd)","Courser (3rd)","Courser (4th)",
X"Courser (5th)","Tracker (1st)","Tracker (2nd)","Tracker (3rd)",
X"Tracker (4th)","Tracker (5th)","Tracker (6th)","Tracker (7th)",
X"Tracker (8th)","Tracker (9th)","Guide (1st)","Guide (2nd)","Guide (3rd)",
X"Guide (4th)","Guide (5th)","Guide (6th)","Guide (7th)","Guide (8th)",
X"Guide (9th)","Pathfinder-1","Pathfinder-2","Pathfinder-3","Ranger",
X"High Ranger","Ranger Lord"},
X	/* Paladins	 */
X{"Gallant","Keeper (1st)","Keeper (2nd)","Keeper (3rd)","Keeper (4th)",
X"Keeper (5th)","Keeper (6th)","Keeper (7th)","Keeper (8th)","Keeper (9th)",
X"Protector-1","Protector-2","Protector-3","Protector-4","Protector-5",
X"Protector-6","Protector-7","Protector-8","Defender-1","Defender-2",
X"Defender-3","Defender-4","Defender-5","Defender-6","Defender-7","Defender-8",
X"Warder (1st)","Warder (2nd)","Warder (3rd)","Warder (4th)","Warder (5th)",
X"Warder (6th)","Warder (7th)","Warder (8th)","Warder (9th)","Guardian",
X"Chevalier","Justiciar","Paladin","High Lord"}
X};
X#endif
X
X/* Base experience levels, may be adjusted up for race and/or class*/
Xint32u player_exp[MAX_PLAYER_LEVEL] = {
X      10,      25,	45,	 70,	  100,	    140,      200,	280,
X     380,     500,     650,	850,	 1100,	   1400,     1800,     2300,
X    2900,    3600,    4400,    5400,	 6800,	   8400,    10200,    12500,
X   17500,   25000,  35000L,  50000L,   75000L,	100000L,  150000L,  200000L,
X 300000L, 400000L, 500000L, 750000L, 1500000L, 2500000L, 5000000L, 10000000L
X};
X
X/*Race	STR,INT,WIS,DEX,CON,CHR,
X	Ages, heights, and weights (male then female)
X	Racial Bases for: dis,srh,stl,fos,bth,bthb,bsav,hitdie,
X	infra, exp base, choice-classes */
X#ifdef MACGAME
Xrace_type *race;
X#else
Xrace_type race[MAX_RACES] = {
X   {"Human",	 0,  0,	 0,  0,	 0,  0,
X      14,  6, 72,  6,180, 25, 66,  4,150, 20,
X      0,  0,  0,  0,  0,  0,  0, 10,  0, 100, 0x3F,
X    },
X   {"Half-Elf", -1,  1,	 0,  1, -1,  1,
X      24, 16, 66,  6,130, 15, 62,  6,100, 10,
X      2,  6,  1, -1, -1,  5,  3,  9,  2, 110, 0x3F,
X    },
X   {"Elf",	-1,  2,	 1,  1, -2,  1,
X      75, 75, 60,  4,100,  6, 54,  4, 80,  6,
X      5,  8,  1, -2, -5, 15,  6,  8,  3, 120, 0x1F,
X    },
X   {"Halfling", -2,  2,	 1,  3,	 1,  1,
X      21, 12, 36,  3, 60,  3, 33,  3, 50,  3,
X      15, 12,  4, -5,-10, 20, 18,  6,  4, 110, 0x0B,
X    },
X   {"Gnome",	-1,  2,	 0,  2,	 1, -2,
X      50, 40, 42,  3, 90,  6, 39,  3, 75,  3,
X      10,  6,  3, -3, -8, 12, 12,  7,  4, 125, 0x0F,
X    },
X   {"Dwarf",	 2, -3,	 1, -2,	 2, -3,
X      35, 15, 48,  3,150, 10, 46,  3,120, 10,
X      2,  7,  -1,  0, 15,  0,  9,  9,  5, 120, 0x05,
X    },
X   {"Half-Orc",	 2, -1,	 0,  0,	 1, -4,
X      11,  4, 66,  1,150,  5, 62,  1,120,  5,
X      -3,  0, -1,  3, 12, -5, -3, 10,  3, 110, 0x0D,
X    },
X   {"Half-Troll",4, -4, -2, -4,	 3, -6,
X      20, 10, 96, 10,255, 50, 84,  8,225, 40,
X      -5, -1, -2,  5, 20,-10, -8, 12,  3, 120, 0x05,
X    }
X };
X#endif
X
X/* 5 char race for printing scores. */
Xchar *dsp_race[MAX_RACES] = {
X  "Human",
X  "H-Elf",
X  "Elf  ",
X  "Hobbt",
X  "Gnome",
X  "Dwarf",
X  "H-Orc",
X  "H-Tro"
X};
X
X/* Background information					*/
X#ifdef MACGAME
Xbackground_type *background;
X#else
Xbackground_type background[MAX_BACKGROUND] = {
X{"You are the illegitimate and unacknowledged child ",		 10, 1, 2, 25},
X{"You are the illegitimate but acknowledged child ",		 20, 1, 2, 35},
X{"You are one of several children ",				 95, 1, 2, 45},
X{"You are the first child ",					100, 1, 2, 50},
X{"of a Serf.  ",						 40, 2, 3, 65},
X{"of a Yeoman.  ",						 65, 2, 3, 80},
X{"of a Townsman.  ",						 80, 2, 3, 90},
X{"of a Guildsman.  ",						 90, 2, 3,105},
X{"of a Landed Knight.  ",					 96, 2, 3,120},
X{"of a Titled Noble.  ",					 99, 2, 3,130},
X{"of a Royal Blood Line.  ",					100, 2, 3,140},
X{"You are the black sheep of the family.  ",			 20, 3,50, 20},
X{"You are a credit to the family.  ",				 80, 3,50, 55},
X{"You are a well liked child.  ",				100, 3,50, 60},
X{"Your mother was a Green-Elf.  ",				 40, 4, 1, 50},
X{"Your father was a Green-Elf.  ",				 75, 4, 1, 55},
X{"Your mother was a Grey-Elf.  ",				 90, 4, 1, 55},
X{"Your father was a Grey-Elf.  ",				 95, 4, 1, 60},
X{"Your mother was a High-Elf.  ",				 98, 4, 1, 65},
X{"Your father was a High-Elf.  ",				100, 4, 1, 70},
X{"You are one of several children ",				 60, 7, 8, 50},
X{"You are the only child ",					100, 7, 8, 55},
X{"of a Green-Elf ",						 75, 8, 9, 50},
X{"of a Grey-Elf ",						 95, 8, 9, 55},
X{"of a High-Elf ",						100, 8, 9, 60},
X{"Ranger.  ",							 40, 9,54, 80},
X{"Archer.  ",							 70, 9,54, 90},
X{"Warrior.  ",							 87, 9,54,110},
X{"Mage.  ",							 95, 9,54,125},
X{"Prince.  ",							 99, 9,54,140},
X{"King.  ",							100, 9,54,145},
X{"You are one of several children of a Halfling ",		 85,10,11, 45},
X{"You are the only child of a Halfling ",			100,10,11, 55},
X{"Bum.  ",							 20,11, 3, 55},
X{"Tavern Owner.  ",						 30,11, 3, 80},
X{"Miller.  ",							 40,11, 3, 90},
X{"Home Owner.  ",						 50,11, 3,100},
X{"Burglar.  ",							 80,11, 3,110},
X{"Warrior.  ",							 95,11, 3,115},
X{"Mage.  ",							 99,11, 3,125},
X{"Clan Elder.  ",						100,11, 3,140},
X{"You are one of several children of a Gnome ",			 85,13,14, 45},
X{"You are the only child of a Gnome ",				100,13,14, 55},
X{"Beggar.  ",							 20,14, 3, 55},
X{"Braggart.  ",							 50,14, 3, 70},
X{"Prankster.  ",						 75,14, 3, 85},
X{"Warrior.  ",							 95,14, 3,100},
X{"Mage.  ",							100,14, 3,125},
X{"You are one of two children of a Dwarven ",			 25,16,17, 40},
X{"You are the only child of a Dwarven ",			100,16,17, 50},
X{"Thief.  ",							 10,17,18, 60},
X{"Prison Guard.  ",						 25,17,18, 75},
X{"Miner.  ",							 75,17,18, 90},
X{"Warrior.  ",							 90,17,18,110},
X{"Priest.  ",							 99,17,18,130},
X{"King.  ",							100,17,18,150},
X{"You are the black sheep of the family.  ",			 15,18,57, 10},
X{"You are a credit to the family.  ",				 85,18,57, 50},
X{"You are a well liked child.  ",				100,18,57, 55},
X{"Your mother was an Orc, but it is unacknowledged.  ",		 25,19,20, 25},
X{"Your father was an Orc, but it is unacknowledged.  ",		100,19,20, 25},
X{"You are the adopted child ",					100,20, 2, 50},
X{"Your mother was a Cave-Troll ",				 30,22,23, 20},
X{"Your father was a Cave-Troll ",				 60,22,23, 25},
X{"Your mother was a Hill-Troll ",				 75,22,23, 30},
X{"Your father was a Hill-Troll ",				 90,22,23, 35},
X{"Your mother was a Water-Troll ",				 95,22,23, 40},
X{"Your father was a Water-Troll ",				100,22,23, 45},
X{"Cook.  ",							  5,23,62, 60},
X{"Warrior.  ",							 95,23,62, 55},
X{"Shaman.  ",							 99,23,62, 65},
X{"Clan Chief.  ",						100,23,62, 80},
X{"You have dark brown eyes, ",					 20,50,51, 50},
X{"You have brown eyes, ",					 60,50,51, 50},
X{"You have hazel eyes, ",					 70,50,51, 50},
X{"You have green eyes, ",					 80,50,51, 50},
X{"You have blue eyes, ",					 90,50,51, 50},
X{"You have blue-gray eyes, ",					100,50,51, 50},
X{"straight ",							 70,51,52, 50},
X{"wavy ",							 90,51,52, 50},
X{"curly ",							100,51,52, 50},
X{"black hair, ",						 30,52,53, 50},
X{"brown hair, ",						 70,52,53, 50},
X{"auburn hair, ",						 80,52,53, 50},
X{"red hair, ",							 90,52,53, 50},
X{"blond hair, ",						100,52,53, 50},
X{"and a very dark complexion.",					 10,53, 0, 50},
X{"and a dark complexion.",					 30,53, 0, 50},
X{"and an average complexion.",					 80,53, 0, 50},
X{"and a fair complexion.",					 90,53, 0, 50},
X{"and a very fair complexion.",					100,53, 0, 50},
X{"You have light grey eyes, ",					 85,54,55, 50},
X{"You have light blue eyes, ",					 95,54,55, 50},
X{"You have light green eyes, ",					100,54,55, 50},
X{"straight ",							 75,55,56, 50},
X{"wavy ",							100,55,56, 50},
X{"black hair, and a fair complexion.",				 75,56, 0, 50},
X{"brown hair, and a fair complexion.",				 85,56, 0, 50},
X{"blond hair, and a fair complexion.",				 95,56, 0, 50},
X{"silver hair, and a fair complexion.",				100,56, 0, 50},
X{"You have dark brown eyes, ",					 99,57,58, 50},
X{"You have glowing red eyes, ",					100,57,58, 60},
X{"straight ",							 90,58,59, 50},
X{"wavy ",							100,58,59, 50},
X{"black hair, ",						 75,59,60, 50},
X{"brown hair, ",						100,59,60, 50},
X{"a one foot beard, ",						 25,60,61, 50},
X{"a two foot beard, ",						 60,60,61, 51},
X{"a three foot beard, ",					 90,60,61, 53},
X{"a four foot beard, ",						100,60,61, 55},
X{"and a dark complexion.",					100,61, 0, 50},
X{"You have slime green eyes, ",					 60,62,63, 50},
X{"You have puke yellow eyes, ",					 85,62,63, 50},
X{"You have blue-bloodshot eyes, ",				 99,62,63, 50},
X{"You have glowing red eyes, ",					100,62,63, 55},
X{"dirty ",							 33,63,64, 50},
X{"mangy ",							 66,63,64, 50},
X{"oily ",							100,63,64, 50},
X{"sea-weed green hair, ",					 33,64,65, 50},
X{"bright red hair, ",						 66,64,65, 50},
X{"dark purple hair, ",						100,64,65, 50},
X{"and green ",							 25,65,66, 50},
X{"and blue ",							 50,65,66, 50},
X{"and white ",							 75,65,66, 50},
X{"and black ",							100,65,66, 50},
X{"ulcerous skin.",						 33,66, 0, 50},
X{"scabby skin.",						 66,66, 0, 50},
X{"leprous skin.",						100,66, 0, 50}
X};
X#endif
X
X/* Classes.							*/
Xclass_type class[MAX_CLASS] = {
X/*	  HP Dis Src Stl Fos bth btb sve S  I  W  D Co Ch  Spell Exp  spl */
X{"Warrior",9, 25, 14, 1, 38, 70, 55, 18, 5,-2,-2, 2, 2,-1, NONE,    0, 0},
X{"Mage",   0, 30, 16, 2, 20, 34, 20, 36,-5, 3, 0, 1,-2, 1, MAGE,   30, 1},
X{"Priest", 2, 25, 16, 2, 32, 48, 35, 30,-3,-3, 3,-1, 0, 2, PRIEST, 20, 1},
X{"Rogue",  6, 45, 32, 5, 16, 60, 66, 30, 2, 1,-2, 3, 1,-1, MAGE,    0, 5},
X{"Ranger", 4, 30, 24, 3, 24, 56, 72, 30, 2, 2, 0, 1, 1, 1, MAGE,   40, 3},
X{"Paladin",6, 20, 12, 1, 38, 68, 40, 24, 3,-3, 1, 0, 2, 2, PRIEST, 35, 1}
X};
X
X/* making it 16 bits wastes a little space, but saves much signed/unsigned
X   headaches in its use */
X/* CLA_MISC_HIT is identical to CLA_SAVE, which takes advantage of
X   the fact that the save values are independent of the class */
Xint16 class_level_adj[MAX_CLASS][MAX_LEV_ADJ] = {
X/*	       bth    bthb   device  disarm   save/misc hit  */
X/* Warrior */ {	4,	4,	2,	2,	3 },
X/* Mage    */ { 2,	2,	4,	3,	3 },
X/* Priest  */ { 2,	2,	4,	3,	3 },
X/* Rogue   */ { 3,	4,	3,	4,	3 },
X/* Ranger  */ { 3,	4,	3,	3,	3 },
X/* Paladin */ { 3,	3,	3,	2,	3 }
X};
X
Xint32u spell_learned = 0;	/* bit mask of spells learned */
Xint32u spell_worked = 0;	/* bit mask of spells tried and worked */
Xint32u spell_forgotten = 0;	/* bit mask of spells learned but forgotten */
Xint8u spell_order[32];		/* order spells learned/remembered/forgotten */
X
X/* Warriors don't have spells, so there is no entry for them.  Note that
X   this means you must always subtract one from the py.misc.pclass before
X   indexing into magic_spell[]. */
X#ifdef MACGAME
Xspell_type (*magic_spell)[31];
X#else
Xspell_type magic_spell[MAX_CLASS-1][31] = {
X  {		  /* Mage	   */
X     {	1,  1, 22,   1},
X     {	1,  1, 23,   1},
X     {	1,  2, 24,   1},
X     {	1,  2, 26,   1},
X     {	3,  3, 25,   2},
X     {	3,  3, 25,   1},
X     {	3,  3, 27,   2},
X     {	3,  4, 30,   1},
X     {	5,  4, 30,   6},
X     {	5,  5, 30,   8},
X     {	5,  5, 30,   5},
X     {	5,  5, 35,   6},
X     {	7,  6, 35,   9},
X     {	7,  6, 50,  10},
X     {	7,  6, 40,  12},
X     {	9,  7, 44,  19},
X     {	9,  7, 45,  19},
X     {	9,  7, 75,  22},
X     {	9,  7, 45,  19},
X     { 11,  7, 45,  25},
X     { 11,  7, 99,  19},
X     { 13,  7, 50,  22},
X     { 15,  9, 50,  25},
X     { 17,  9, 50,  31},
X     { 19, 12, 55,  38},
X     { 21, 12, 90,  44},
X     { 23, 12, 60,  50},
X     { 25, 12, 65,  63},
X     { 29, 18, 65,  88},
X     { 33, 21, 80, 125},
X     { 37, 25, 95, 200}
X   },
X   {		  /* Priest	   */
X     {	1,  1, 10,   1},
X     {	1,  2, 15,   1},
X     {	1,  2, 20,   1},
X     {	1,  2, 25,   1},
X     {	3,  2, 25,   1},
X     {	3,  3, 27,   2},
X     {	3,  3, 27,   2},
X     {	3,  3, 28,   3},
X     {	5,  4, 29,   4},
X     {	5,  4, 30,   5},
X     {	5,  4, 32,   5},
X     {	5,  5, 34,   5},
X     {	7,  5, 36,   6},
X     {	7,  5, 38,   7},
X     {	7,  6, 38,   9},
X     {	7,  7, 38,   9},
X     {	9,  6, 38,  10},
X     {	9,  7, 38,  10},
X     {	9,  7, 40,  10},
X     { 11,  8, 42,  10},
X     { 11,  8, 42,  12},
X     { 11,  9, 55,  15},
X     { 13, 10, 45,  15},
X     { 13, 11, 45,  16},
X     { 15, 12, 50,  20},
X     { 15, 14, 50,  22},
X     { 17, 14, 55,  32},
X     { 21, 16, 60,  38},
X     { 25, 20, 70,  75},
X     { 33, 24, 90, 125},
X     { 39, 32, 99, 200}
X   },
X   {		  /* Rogue	   */
X     { 99, 99,	0,   0},
X     {	5,  1, 50,   1},
X     {	7,  2, 55,   1},
X     {	9,  3, 60,   2},
X     { 11,  4, 65,   2},
X     { 13,  5, 70,   3},
X     { 99, 99,	0,   0},
X     { 15,  6, 75,   3},
X     { 99, 99,	0,   0},
X     { 17,  7, 80,   4},
X     { 19,  8, 85,   5},
X     { 21,  9, 90,   6},
X     { 99, 99,	0,   0},
X     { 23, 10, 95,   7},
X     { 99, 99,	0,   0},
X     { 99, 99,	0,   0},
X     { 25, 12, 95,   9},
X     { 27, 15, 99,  11},
X     { 99, 99,	0,   0},
X     { 99, 99,	0,   0},
X     { 29, 18, 99,  19},
X     { 99, 99,	0,   0},
X     { 99, 99,	0,   0},
X     { 99, 99,	0,   0},
X     { 99, 99,	0,   0},
X     { 99, 99,	0,   0},
X     { 99, 99,	0,   0},
X     { 99, 99,	0,   0},
X     { 99, 99,	0,   0},
X     { 99, 99,	0,   0},
X     { 99, 99,	0,   0},
X   },
X   {		   /* Ranger	    */
X     {	3,  1, 30,   1},
X     {	3,  2, 35,   2},
X     {	3,  2, 35,   2},
X     {	5,  3, 35,   2},
X     {	5,  3, 40,   2},
X     {	5,  4, 45,   3},
X     {	7,  5, 40,   6},
X     {	7,  6, 40,   5},
X     {	9,  7, 40,   7},
X     {	9,  8, 45,   8},
X     { 11,  8, 40,  10},
X     { 11,  9, 45,  10},
X     { 13, 10, 45,  12},
X     { 13, 11, 55,  13},
X     { 15, 12, 50,  15},
X     { 15, 13, 50,  15},
X     { 17, 17, 55,  15},
X     { 17, 17, 90,  17},
X     { 21, 17, 55,  17},
X     { 21, 19, 60,  18},
X     { 23, 25, 95,  20},
X     { 23, 20, 60,  20},
X     { 25, 20, 60,  20},
X     { 25, 21, 65,  20},
X     { 27, 21, 65,  22},
X     { 29, 23, 95,  23},
X     { 31, 25, 70,  25},
X     { 33, 25, 75,  38},
X     { 35, 25, 80,  50},
X     { 37, 30, 95, 100},
X     { 99, 99,	0,   0}
X   },
X   {		  /* Paladin	   */
X     {	1,  1, 30,   1},
X     {	2,  2, 35,   2},
X     {	3,  3, 35,   3},
X     {	5,  3, 35,   5},
X     {	5,  4, 35,   5},
X     {	7,  5, 40,   6},
X     {	7,  5, 40,   6},
X     {	9,  7, 40,   7},
X     {	9,  7, 40,   8},
X     {	9,  8, 40,   8},
X     { 11,  9, 40,  10},
X     { 11, 10, 45,  10},
X     { 11, 10, 45,  10},
X     { 13, 10, 45,  12},
X     { 13, 11, 45,  13},
X     { 15, 13, 45,  15},
X     { 15, 15, 50,  15},
X     { 17, 15, 50,  17},
X     { 17, 15, 50,  18},
X     { 19, 15, 50,  19},
X     { 19, 15, 50,  19},
X     { 21, 17, 50,  20},
X     { 23, 17, 50,  20},
X     { 25, 20, 50,  20},
X     { 27, 21, 50,  22},
X     { 29, 22, 50,  24},
X     { 31, 24, 60,  25},
X     { 33, 28, 60,  31},
X     { 35, 32, 70,  38},
X     { 37, 36, 90,  50},
X     { 39, 38, 95, 100}
X   }
X };
X#endif
X
Xchar *spell_names[62] = {
X  /* Mage Spells */
X  "Magic Missile",  "Detect Monsters",	"Phase Door",  "Light Area",
X  "Cure Light Wounds",	"Find Hidden Traps/Doors",  "Stinking Cloud",
X  "Confusion",	"Lightning Bolt",  "Trap/Door Destruction", "Sleep I",
X  "Cure Poison",  "Teleport Self",  "Remove Curse",  "Frost Bolt",
X  "Turn Stone to Mud",	"Create Food",	"Recharge Item I",  "Sleep II",
X  "Polymorph Other",  "Identify",  "Sleep III",	 "Fire Bolt",  "Slow Monster",
X  "Frost Ball",	 "Recharge Item II", "Teleport Other",	"Haste Self",
X  "Fire Ball", "Word of Destruction", "Genocide",
X  /* Priest Spells, start at index 31 */
X  "Detect Evil",  "Cure Light Wounds",	"Bless",  "Remove Fear", "Call Light",
X  "Find Traps",	 "Detect Doors/Stairs",	 "Slow Poison",	 "Blind Creature",
X  "Portal",  "Cure Medium Wounds",  "Chant",  "Sanctuary",  "Create Food",
X  "Remove Curse",  "Resist Heat and Cold",  "Neutralize Poison",
X  "Orb of Draining",  "Cure Serious Wounds",  "Sense Invisible",
X  "Protection from Evil",  "Earthquake",  "Sense Surroundings",
X  "Cure Critical Wounds",  "Turn Undead",  "Prayer",  "Dispel Undead",
X  "Heal",  "Dispel Evil",  "Glyph of Warding",	"Holy Word"
X};
X
X/* Each type of character starts out with a few provisions.	*/
X/* Note that the entries refer to elements of the object_list[] array*/
X/* 344 = Food Ration, 365 = Wooden Torch, 123 = Cloak, 30 = Stiletto,
X   103 = Soft Leather Armor, 318 = Beginners-Majik, 322 = Beginners Handbook */
Xint16u player_init[MAX_CLASS][5] = {
X		{ 344, 365, 123,  30, 103},	/* Warrior	 */
X		{ 344, 365, 123,  30, 318},	/* Mage		 */
X		{ 344, 365, 123,  30, 322},	/* Priest	 */
X		{ 344, 365,  30, 103, 318},	/* Rogue	 */
X		{ 344, 365, 123,  30, 318},	/* Ranger	 */
X		{ 344, 365, 123,  30, 322}	/* Paladin	 */
X};
END_OF_FILE
if test 19680 -ne `wc -c <'source/player.c'`; then
    echo shar: \"'source/player.c'\" unpacked with wrong size!
fi
# end of 'source/player.c'
fi
echo shar: End of archive 2 \(of 3\).
cp /dev/null ark2isdone
MISSING=""
for I in 1 2 3 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 3 archives.
    echo "Please read the file NOTES01."
    rm -f ark[1-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0