home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / games / eamon0.zip / CAVE.BAS < prev    next >
BASIC Source File  |  1986-06-23  |  24KB  |  488 lines

  1. 1 RANDOMIZE VAL(RIGHT$(TIME$,2))
  2. 2 REM
  3. 3 REM The Beginners Cave
  4. 4 REM Origionaly made by Donald Brown (bless his soul)
  5. 5 REM Converted with modifications by Jon Walker,139 S. Central Ave
  6. 6 REM Marshfield, WI, 54449 (no Lithuanian currency please!)
  7. 7 REM
  8. 8 REM
  9. 10 REM   CNAME$: CHARACTER NAME      HD: HARDINESS  AG: AGILITY  CH: CHARISMA
  10. 15 REM
  11. 20 REM   SA(1)-SA(4):SPELL ABILITIES
  12. 30 REM   WA(1)-WA(5):WEAPON ABILITIES
  13. 35 REM
  14. 40 REM   AE: AMROUR EXPERT.  SEX$: M OR F  GOLD: ON PERSON  BANK: GOLD IN BANK
  15. 50 REM   AC: ARMOUR CLASS  
  16. 60 REM 
  17. 70 REM WEAPON INFO:
  18. 80 REM     WNAME$: WEAPON NAME
  19. 85 REM
  20. 86 REM
  21. 87 DEF FND$(X$)=MID$(X$,INSTR(X$,".")+1)+CHR$(10)+CHR$(13)
  22. 88 REM
  23. 90 CLS:FOR I=1 TO 10:PRINT :NEXT I:PRINT"         Please wait - waking up the monsters     " :REM  /////CHANGE THIS AS NEEDED/////
  24. 95 GOTO 22000
  25. 96 REM
  26. 100 REM /// give room description if never here, then get command
  27. 110 PRINT
  28. 115 IF SPD>0 THEN SPD=SPD-1:IF SPD=0 THEN MD(0,2)=MD(0,2)/2:MD(0,10)=MD(0,10)-2*MD(0,2)
  29. 120 IF V(ROOM) THEN GET#2,ROOM:PRINT"You are standing in ";R2$
  30. 125 IF NOT V(ROOM) THEN GET#1,ROOM:PRINT FND$(R1$)
  31. 130 FOR M=1 TO NM:IF MD(M,5)=ROOM AND MD(M,15)<>0 THEN PRINT MN$(M);" is here."
  32. 135 IF MD(M,5)=ROOM AND MD(M,15)=0 THEN GET#3,M+30:PRINT FND$(R3$):MD(M,15)=1:IF M=10 THEN GET#3,26:PRINT FND$(R3$)
  33. 140 NEXT M:FOR A=1 TO NA-1:IF AD(A,4)=ROOM AND (A<NA) AND NOT V(ROOM) THEN GET#3,A:PRINT FND$(R3$)
  34. 145 IF AD(A,4)=ROOM AND (A<NA) AND V(ROOM) THEN PRINT"You see ";AN$(A)
  35. 150 NEXT A:IF AD(NA,4)=ROOM THEN PRINT"Your ";AN$(A);" is here."
  36. 155 V(ROOM)=-1
  37. 160 PRINT:PRINT"   Your command  ";
  38. 163 LINE INPUT A$:IF A$="" THEN A$=CZ$:PRINT:PRINT A$
  39. 164 GOSUB 31000
  40. 175 CZ$=A$:A=INSTR(2,A$," ")
  41. 180 IF A<>0 THEN V$=LEFT$(A$,A-1):S$=MID$(A$,A+1) ELSE V$=A$:S$=""
  42. 185 IF LEFT$(S$,1)=" " THEN S$=MID$(S$,2):GOTO 185
  43. 190 FOR C=1 TO NC:IF C$(C)=V$ OR C$(C)=S$ THEN 195 ELSE NEXT C
  44. 191 PRINT"I only understand--"
  45. 192 FOR C=1 TO NC:PRINT C$(C);SPACE$(30-LEN(C$(C)));
  46. 193 IF C/2=INT(C/2) THEN PRINT
  47. 194 NEXT C:PRINT:PRINT:GOTO 160
  48. 195 IF C$(C)=S$ THEN S$=V$:V$=C$(C)
  49. 200 ON C GOTO 1000,1000,2000,3000,4000,4000,5000,5000,5000,5000,5000,5000,5000,5000,5000,5000,5000,5000,6000,7000,8000,10000,11000,12000,13000,14000,15000,16000,17000,17000,17000,18000,18000,19000,20000,21000,28000
  50. 300 REM ///
  51. 301 REM /// commands return here
  52. 310 IF NOT NBTL THEN 440
  53. 320 FOR M=1 TO NM:IF MD(M,5)<>ROOM THEN 430
  54. 330 MR=FD(MD(M,14))/TD(MD(M,14))-FD(ABS(MD(M,14)=0))/TD(ABS(MD(M,14)=0))/5+INT(41*RND(1)-20)
  55. 340 IF MD(M,4)<MR THEN PRINT:PRINT MN$(M);" flees out an exit.":PRINT:GOSUB 17500:MD(M,5)=R2:TD(MD(M,14))=TD(MD(M,14))-MD(M,1):FD(MD(M,14))=FD(MD(M,14))-MD(M,13):GOTO 430
  56. 350 IF MD(M,14)<>0 THEN 390
  57. 360 OF=M:IF TD(1)=MD(0,1) THEN DF=0:GOSUB 3500:GOTO 430
  58. 370 SKIP=0:FOR M2=1 TO NM:IF MD(M2,5)=ROOM AND (MD(M2,14)<>0) AND RND(1)<.25 THEN DF=M2:GOSUB 3500:M2=200:SKIP=-1
  59. 380 NEXT M2:IF SKIP THEN 430 ELSE DF=0:GOSUB 3500:GOTO 430
  60. 390 OF=M
  61. 400 SKIP=0:FOR M2=1 TO NM:IF MD(M2,5)=ROOM AND MD(M2,14)=0 THEN DF=M2:GOSUB 3500:M2=200:SKIP=-1
  62. 410 NEXT M2:IF SKIP THEN 430 ELSE 400
  63. 420 REM
  64. 430 NBTL=(FD(0)<TD(0))
  65. 435 IF NBTL THEN NEXT M
  66. 440 REM
  67. 450 GOTO 100
  68. 460 REM
  69. 470 REM
  70. 1000 REM /// get command
  71. 1010 GOSUB 1950
  72. 1020 IF S$="TORCH" THEN PRINT:PRINT"All torches are bolted to the wall.":PRINT:GOTO 300
  73. 1030 IF S$="ALL" THEN 1120
  74. 1040 IF S$<>"RAT" THEN 1070
  75. 1050 FOR A=14 TO 16:IF AD(A,4)=ROOM THEN S$=AN$(A)
  76. 1060 NEXT
  77. 1070 IF S$="GOLD" OR S$="COINS" THEN S$=AN$(6)
  78. 1080 FOR A=1 TO NA:IF AN$(A)<> S$ OR AD(A,4)<>ROOM THEN NEXT A:PRINT:PRINT"I see no ";S$;" here!":PRINT:GOTO 100
  79. 1090 IF WT+AD(A,3)>10*MD(0,1) THEN PRINT:PRINT"It is too heavy for you.":PRINT:GOTO 100
  80. 1100 PRINT:PRINT"Got it.":AD(A,4)=-1:WT=WT+AD(A,3):PRINT:IF AD(A,2)<2 OR MD(0,9)<>-1 THEN 300
  81. 1110 GOTO 16000
  82. 1120 FOR A=1 TO NA:IF AD(A,4)<>ROOM THEN 1150
  83. 1130 IF WT+AD(A,3)>10*MD(0,1) THEN PRINT AN$(A);" is too heavy.":GOTO 1150
  84. 1140 PRINT AN$(A);" taken.":AD(A,4)=-1:WT=WT+AD(A,3)
  85. 1150 NEXT A:PRINT:GOTO 300
  86. 1950 IF S$="" THEN PRINT:PRINT C$(C);" what ";:A3$=A$:INPUT A$:GOSUB 31000:S$=A$:A$=A3$:GOTO 1950
  87. 1960 RETURN
  88. 2000 REM /// drop command
  89. 2010 GOSUB 1950
  90. 2020 IF NBTL THEN PRINT:PRINT"You can't do that with unfriendlies about!":PRINT:GOTO 100
  91. 2030 IF S$="ALL" THEN 2060
  92. 2040 FOR A=1 TO NA:IF AN$(A)<>S$ OR AD(A,4)<>-1 THEN NEXT A:PRINT"You aren't carrying a ";S$:GOTO 100
  93. 2050 WT=WT-AD(A,3):PRINT:PRINT"Dropped.":AD(A,4)=ROOM:PRINT:GOTO 300
  94. 2060 FOR A=1 TO NA:IF AD(A,4)<>-1 THEN 2080
  95. 2070 WT=WT-AD(A,3):AD(A,4)=ROOM:PRINT AN$(A);" dropped."
  96. 2080 NEXT A:GOTO 300
  97. 3000 REM /// attack command
  98. 3010 GOSUB 1950
  99. 3020 IF S$<>"RAT" THEN 3050
  100. 3030 FOR M=1 TO 3:IF MD(M,5)=ROOM THEN S$=MN$(M)
  101. 3040 NEXT M
  102. 3050 FOR M=1 TO NM:IF S$<>MN$(M) OR MD(M,5)<>ROOM THEN NEXT M:PRINT:PRINT"Attack who?":PRINT:GOTO 100
  103. 3060 IF MD(0,9)=-1 THEN PRINT:PRINT"You have no weapon ready!":PRINT:GOTO 100
  104. 3070 OF=0:DF=M:GOSUB 3500:IF NOT HIT THEN 3130
  105. 3080 IF INC<>0 THEN W2=AD(MD(0,9),6):WA(W2)=WA(W2)+2
  106. 3090 IF -EA<=AE THEN 300
  107. 3100 IF INT(100*RND(1)+1)<=MD(0,10) THEN 3130
  108. 3110 A=2:IF EA+AE=1 THEN A=1
  109. 3120 AE=AE+A:MD(0,10)=MD(0,10)+A
  110. 3130 IF MD(DF,14)=0 OR DF=0 THEN 300
  111. 3140 MD(DF,3)=MD(DF,3)/2:IF NBTL THEN MD(DF,14)=0:TD(0)=TD(0)+MD(DF,1):TD(1)=TD(1)-MD(DF,1):FD(0)=FD(0)+MD(DF,13):FD(1)=FD(1)-MD(DF,13):GOTO 300
  112. 3150 R2=ROOM:MD(DF,14)=0:GOTO 5100
  113. 3500 HIT=0:IF MD(OF,9)=-1 THEN RETURN
  114. 3505 PRINT MN$(OF);" attacks ";MN$(DF):PRINT" -- ";
  115. 3510 RL=INT(100*RND(1)+1):HIT=0:IF RL<5 OR RL<MD(OF,10) THEN HIT=-1
  116. 3515 IF HIT THEN 3600
  117. 3520 IF RL<97 THEN PRINT"a miss.":RETURN
  118. 3525 PRINT"a fumble!":FR=INT(100*RND(1)+1):IF FR<=35+40*ABS(MD(OF,9)=0) THEN PRINT" fumble recovered.":PRINT:RETURN
  119. 3530 IF FR<76 THEN PRINT" weapon dropped!":AD(MD(OF,9),4)=ROOM:MD(OF,9)=-1:PRINT:RETURN
  120. 3535 IF FR>95 THEN 3550
  121. 3540 PRINT" weapon broken!":AD(MD(OF,9),4)=0:MD(OF,9)=-1:IF RND(1)>.9 THEN PRINT:RETURN
  122. 3545 PRINT" Broken weapon hurts user!"
  123. 3550 IF FR=100 THEN 3560
  124. 3555 D=MD(OF,11):S=MD(OF,12):DF=OF:A=1:GOTO 3650
  125. 3560 D=MD(OF,11)*2:S=MD(OF,12):DF=OF:A=0:GOTO 3650
  126. 3600 INC=INT(100*RND(1)+1)>MD(OF,10):MD(OF,10)=MD(OF,10)+2*(-INC)
  127. 3605 D=MD(OF,11):S=MD(OF,12):A=1:IF RL>5 THEN PRINT"a hit!":GOTO 3650
  128. 3610 PRINT"a critical hit!":R2=INT(100*RND(1)+1):IF R2<51 THEN A=0:GOTO 3650
  129. 3615 IF R2<86 THEN S=1.5*S:GOTO 3650
  130. 3620 IF R2<96 THEN D=2*D:GOTO 3650
  131. 3625 IF R2<100 THEN D=3*D:GOTO 3650
  132. 3630 GOTO 3700
  133. 3650 D2=0:FOR D3=1 TO D:D2=D2+INT(S*RND(1)+1):NEXT D3:D2=D2-A*MD(DF,8):IF D2<1 THEN PRINT" blow bounces off armour":PRINT:RETURN
  134. 3655 MD(DF,13)=MD(DF,13)+D2:IF MD(DF,13)>=MD(DF,1) THEN 3700
  135. 3660 A=MD(DF,14):FD(A)=FD(A)+D2
  136. 3665 ON INT(MD(DF,13)*5/MD(DF,1)+1) GOTO 3670,3675,3680,3685,3690
  137. 3670 PRINT:PRINT MN$(DF);" takes damage but is still in good shape.":RETURN
  138. 3675 PRINT:PRINT MN$(DF);" is hurting.":RETURN
  139. 3680 PRINT:PRINT MN$(DF);" is in pain.":RETURN
  140. 3685 PRINT:PRINT MN$(DF);" is very badly injured.":RETURN
  141. 3690 PRINT:PRINT MN$(DF);"is at death's door, knocking loudly.":RETURN
  142. 3700 PRINT MN$(DF);" is dead!":PRINT:A=MD(DF,14):FD(A)=FD(A)+MD(DF,1)-MD(DF,13)+D2:MD(DF,5)=0:A2=NA-1-NM+DF:AD(A2,4)=ROOM:IF MD(DF,9)>0 THEN AD(MD(DF,9),4)=ROOM
  143. 3710 IF FD(0)>TD(0) THEN NBTL=0
  144. 3720 IF DF=0 THEN DIE=-1:GOTO 23010
  145. 3730 IF MN$(DF)="PIRATE" THEN GET#3,27:PRINT FND$(R3$):PRINT:AD(11,8)=6:V(ROOM)=0:RETURN
  146. 3740 IF MN$(DF)="MIMIC" THEN PRINT:PRINT"As the mimic dies, it rolls over and you find a ring underneath it.":AD(7,4)=ROOM
  147. 3750 PRINT:RETURN
  148. 3760 REM
  149. 4000 REM /// look command
  150. 4010 IF NBTL THEN 2020
  151. 4020 IF S$="LABEL" OR S$="BOTTLE" THEN 15000
  152. 4030 LK=0
  153. 4040 FOR A=1 TO NA-1:IF AN$(A)=S$ AND (AD(A,4)=ROOM OR AD(A,4)=-1) THEN GET#3,A:PRINT FND$(R3$):LK=-1
  154. 4050 NEXT A:IF LK THEN 300
  155. 4060 IF ROOM<>15 THEN V(ROOM)=0:GOTO 300
  156. 4070 PRINT"You found a hidden tunnel going East!":PRINT:GOTO 300
  157. 5000 REM /// movement command
  158. 5010 IF NBTL THEN 2020
  159. 5020 FOR D=1 TO 6:IF LEFT$(V$,1)<>MID$("NSEWUD",D,1) THEN NEXT
  160. 5030 R2=MAP(ROOM,D)
  161. 5040 IF R2>0 THEN 5100
  162. 5045 REM /// put special moves here
  163. 5050 IF ROOM=1 AND D=1 THEN PRINT:PRINT"You successfully ride off into the sunset.":GOTO 23010
  164. 5090 PRINT:PRINT"You can't go that way!":V(ROOM)=0:GOTO 100
  165. 5100 R3=ROOM:ROOM=R2:TD(0)=0:TD(1)=MD(0,1):FD(0)=0:FD(1)=MD(0,13)
  166. 5110 FOR M=1 TO NM:IF MD(M,5)=R3 THEN IF MD(M,14)<>0 OR 200*RND(1)<MD(M,4) THEN MD(M,5)=ROOM:GOTO 5150
  167. 5120 IF MD(M,5)<>ROOM THEN 5160
  168. 5140 IF MD(M,14)=0 THEN NBTL=1
  169. 5150 A=MD(M,14):FD(A)=FD(A)+MD(M,13):TD(A)=TD(A)+MD(M,1)
  170. 5160 NEXT M:NBTL=(TD(0)>0)
  171. 5170 GOTO 100
  172. 6000 REM /// power spell
  173. 6010 S=4:GOSUB 7500:IF NOT SUC THEN 300
  174. 6020 RAISE=0:FOR M=1 TO NM:M2=13+M:IF AD(M2,4)=ROOM OR AD(M2,4)=-1 THEN RAISE=-1:PRINT MN$(M);" come alive!":AD(M2,4)=0:MD(M,5)=ROOM:MD(M,13)=0:IF MD(M,9)>0 THEN AD(MD(M,9),4)=0:IF MD(M,9)=MD(0,9) THEN MD(0,9)=0
  175. 6030 NEXT M:IF RAISE THEN NBTL=0:R2=ROOM:GOTO 5100
  176. 6040 FOR A=1 TO NA:IF AD(A,4)=ROOM THEN RAISE=-1:PRINT AN(A);" vanishes!":AD(A,4)=0
  177. 6050 NEXT A:IF RAISE THEN PRINT:GOTO 300
  178. 6060 RR=INT(100*RND(1)+1):IF RR<11 THEN PRINT:PRINT"The section of tunnel you are in collapses and you die.":DIE=1:GOTO 23010
  179. 6070 IF RR<31 THEN PNT:PRINT"You are teleported somewhere in the dungeon":PRINT:R2=INT(26*RND(1)+1):NBTL=0:GOTO 5100
  180. 6080 IF RR<86 THEN PRINT:PRINT"You hear a very loud sonic boom that echoes through the tunnels.":PRINT:GOTO 300
  181. 6090 IF RR>95 THEN PRINT:PRINT"All of your hits are healed.":PRINT:MD(0,13)=0:GOTO 300
  182. 6100 GOTO 10020
  183. 7000 REM /// heal spell
  184. 7010 S=2:GOSUB 7500:IF NOT SUC THEN 300
  185. 7020 PRINT:IF MD(0,13)<>0 THEN PRINT"Some of your wounds seem to clear up.":PRINT
  186. 7030 MD(0,13)=MD(0,13)-INT(10*RND(1)+1):IF MD(0,13)<0 THEN MD(0,13)=0
  187. 7040 IF MD(0,13)=0 THEN H2=100 ELSE H2=HD/MD(0,13)
  188. 7050 IF H2>95 THEN PRINT"You feel great!":PRINT :GOTO 7100
  189. 7060 IF H2>66 THEN PRINT"You feel better.":PRINT:GOTO 7100
  190. 7070 IF H2>33 THEN PRINT"You feel better, you are still very sick!":PRINT :GOTO 7100
  191. 7080 PRINT"You feel better, but are still at death's door knocking loudly!":PRINT:GOTO 7100
  192. 7090 REM
  193. 7100 GOTO 300
  194. 7495 REM
  195. 7496 REM try out success on spell
  196. 7497 REM
  197. 7500 SUC=0:IF SA(S)<>0 THEN RL=INT(100*RND(1)+1):SUC=(((RL<=S2(S)) OR (RL<5)) AND (RL<95))
  198. 7510 IF NOT SUC THEN PRINT:PRINT"Nothing happened.":RETURN
  199. 7520 RL=RND(100)*RND(1)+1):IF RL>S2(S) THEN S2(S)=S2(S)+2:SA(S)=SA(S)+2
  200. 7530 S2(S)=S2(S)/2
  201. 7540 RETURN
  202. 8000 REM /// blast spell (alright!!!)
  203. 8010 GOSUB 1950
  204. 8020 FOR M=1 TO NM:IF S$<>MN$(M) OR MD(M,5)<>ROOM THEN NEXT M:PRINT:PRINT"You can't blast ";S$;"!":PRINT:GOTO 300
  205. 8030 S=1:GOSUB 7500:IF NOT SUC THEN 300
  206. 8040 PRINT:PRINT"Direct hit!":PRINT:S=5:D=1:DF=M:MD(M,14)=0:GOSUB 3650:PRINT:GOTO 300
  207. 10000 REM /// speed spell
  208. 10010 S=3:GOSUB 7500:IF NOT SUC THEN 300
  209. 10020 IF SPD=0 THEN MD(0,10)=MD(0,10)+2*MD(0,2):MD(0,2)=2*MD(0,2)
  210. 10030 SPD=INT(25*RND(1)+1:PRINT:PRINT"You can feel the new agility flowing through you!":PRINT:GOTO 300
  211. 11000 REM /// smile command
  212. 11010 PRINT:IF NBTL THEN PRINT"As you smile, the enemy attacks you.":PRINT:GOTO 300
  213. 11020 PRINT"Nothing happens.":PRINT:GOTO 300
  214. 12000 REM /// wave command
  215. 12010 PRINT:IF NBTL THEN PRINT"As you wave, the enemy attacks you.":PRINT:GOTO 300
  216. 12020 PRINT"Nothing happens.":PRINT:GOTO 300
  217. 13000 REM /// say command
  218. 13010 GOSUB 1950
  219. 13020 IF S$="TROLLSFIRE" THEN 20000
  220. 13030 IF S$="POWER" THEN 6000
  221. 13040 IF S$="HEAL" THEN 7000
  222. 13050 IF S$="BLAST" THEN 8000
  223. 13060 IF S$="SPEED" THEN 10000
  224. 13070 PRINT:PRINT"Okay, '";S$;"'":PRINT:GOTO 300
  225. 14000 REM /// drink command
  226. 14010 GOSUB 1950
  227. 14020 IF NBTL THEN 2020
  228. 14030 IF RIGHT$(S$,6)<>"POTION" AND RIGHT$(S$,6)<>"BOTTLE" THEN 14500
  229. 14040 IF AD(4,4)<>-1 AND AD(4,4)<>ROOM THEN 14500
  230. 14050 PRINT:IF MD(0,13) THEN PRINT"Some of your wounds seem to clear up.":PRINT
  231. 14060 MD(0,13)=MD(0,13)-INT(10*RND(1)+1):IF MD(0,13)<0 THEN MD(0,13)=0
  232. 14070 IF MD(0,13)=0 THEN H2=100 ELSE H2=HD/MD(0,13)
  233. 14080 IF H2>95 THEN PRINT"You feel great!":PRINT:GOTO 14110
  234. 14090 IF H2>66 THEN PRINT"You feel better.":PRINT:GOTO 14110
  235. 14100 IF H2>33 THEN PRINT"You feel better, but are still very, very sick!":PRINT:GOTO 14110
  236. 14105 PRINT"You feel better, but are still at death's door knocking loudly."
  237. 14110 AD(4,4)=0:AD(14,4)=-1
  238. 14130 GOTO 300
  239. 14500 IF S$<>"WATER" OR RIGHT$(S$,3)<>"SEA" THEN PRINT:PRINT"A difficult job.":PRINT:GOTO 300
  240. 14510 PRINT:PRINT"The water tasted salty.":PRINT:GOTO 300
  241. 15000 REM ///read command
  242. 15010 GOSUB 1950
  243. 15020 IF NBTL THEN 2020
  244. 15030 IF S$="LABEL" OR S$="BOTTLE" THEN IF AD(4,4)=ROOM OR AD(14,4)=ROOM OR AD(4,4)=-1 OR AD(14,4)=-1 THEN PRINT"The bottle says, 'HEALING POTION'":PRINT:GOTO 300
  245. 15035 IF S$="SIGN" AND ROOM=1 THEN PRINT"It says:  'Remember, Eamon Dungeon Designer diskette will let you make your own dungeons.!'":GOTO 100
  246. 15045 IF S$="TROLLSFIRE" AND (AD(11,4)=ROOM OR AD(11,4)=-1) THEN PRINT"You see the word 'TROLLSFIRE'":PRINT:GOTO 300
  247. 15050 IF S$<>"BOOK" THEN PRINT:PRINT"There are no markings to read!":PRINT:GOTO 300
  248. 15060 IF AD(10,4)<>-1 AND AD(10,4)<>ROOM THEN PRINT"What book?":PRINT:GOTO 300
  249. 15070 PRINT"As you read the book, you turn into a small fish.":PRINT
  250. 15080 IF ROOM=26 THEN PRINT"You fall into the sea and are promptly eaten by a big fish.":PRINT
  251. 15090 IF ROOM<26 THEN PRINT"You flop three times and die.":PRINT
  252. 15100 DIE=-1:GOTO 23010
  253. 15110 REM
  254. 16000 REM ///ready a weapon
  255. 16010 GOSUB 1950
  256. 16020 FOR A=1 TO NA:IF AN$(A)<>S$ OR AD(A,4)<>-1 THEN NEXT A:PRINT:PRINT"You aren't carrying it!":PRINT:GOTO 100
  257. 16030 IF AD(A,2)<2 THEN PRINT:PRINT"That isn't a weapon!":PRINT:GOTO 100
  258. 16040 MD(0,10)=(EA+AE)*ABS(-EA>AE)+AD(A,4)+WA(AD(A,6))+2*MD(0,2):MD(0,9)=A:MD(0,11)=AD(A,7):MD(0,12)=AD(A,8)
  259. 16050 IF S$<>"TROLLSFIRE" THEN PRINT" readied.":PRINT:GOTO 300
  260. 16060 TR=0:MD(0,12)=10:GOTO 20000
  261. 16070 REM
  262. 17000 REM ///flee command
  263. 17010 IF NOT NBTL THEN PRINT:PRINT"What are you fleeing from?":PRINT:GOTO 100
  264. 17020 IF MD(7,5)=ROOM THEN PRINT:PRINT"You are held fast by the Mimic and cannot ";V$:PRINT:GOTO 300
  265. 17030 M=0:GOSUB 17500
  266. 17040 NBTL=0:GOTO 5100
  267. 17500 ' map is in memory now
  268. 17510 R2=MAP(ROOM,INT(6*RND(1)+1)):IF R2<1 THEN 17510
  269. 17520 RETURN
  270. 18000 REM /// inventory command
  271. 18005 PRINT:PRINT"You are carrying the following --":FOR A=1 TO NA:IF AD(A,4)=-1 THEN PRINT"  ";AN$(A);:IF MD(0,9)=A THEN PRINT"  (Ready Weapon)" ELSE PRINT
  272. 18010 NEXT A:GOTO 100
  273. 19000 REM /// enter command
  274. 19005 IF NBTL THEN 2020
  275. 19010 GOSUB 1950
  276. 19020 IF S$<>"WATER" AND S$<>"SEA" THEN 19040
  277. 19030 PRINT:PRINT"Sorry, but I'm afraid to go into the water!":PRINT:GOTO 300
  278. 19040 IF S$="CAVE" AND ROOM=1 THEN V$="S":GOTO 5000
  279. 19050 PRINT:PRINT"I'm not sure what you mean by that.  Try giving a direction to move.":PRINT:GOTO 100
  280. 19060 REM
  281. 20000 REM /// activate TROLLSFIRE
  282. 20010 IF AD(11,4)<>-1 THEN PRINT"Nothing happens.":PRINT:GOTO 300
  283. 20020 IF NOT TR THEN 20500
  284. 20030 GET#3,30:PRINT FND$(R3$):TR=0:AD(11,8)=6:IF MD(0,9)=10 THEN MD(0,12)=6
  285. 20040 GOTO 300
  286. 20500 GET#3,28:PRINT FND$(R3$):IF MD(0,9)<>11 THEN GET#3,29:PRINT FND$(R3$):S=5:D=1:DF=0:A=0:GOSUB 3650:GOTO 300
  287. 20510 TR=-1:MD(0,12)=10:SD(10,8)=10:GOTO 300
  288. 21000 REM ///open command
  289. 21010 IF NBTL THEN 2020
  290. 21020 IF S$<>"CHEST" OR ROOM<>AD(13,4) THEN 21050
  291. 21030 GET#3,25:PRINT FND$(R3$):PRINT:AD(13,4)=0:MD(7,5)=ROOM
  292. 21040 R2=ROOM:GOTO 5100
  293. 21050 IF S$="DOOR" THEN PRINT:PRINT"The door will open when you move through it.":PRINT:GOTO 100
  294. 21060 PRINT:PRINT"Would you have any bloody ideas how?":GOTO 100
  295. 22000 REM
  296. 22010 OPEN "I",#1,"EAMON.ART"
  297. 22011 INPUT#1,NA
  298. 22012 DIM AN$(NA+1),AD(NA+1,8)
  299. 22013 FOR A=1 TO NA:INPUT#1,AN$(A)
  300. 22014 FOR A2=1 TO 4:INPUT#1,AD(A,A2)
  301. 22015 NEXT A2:IF AD(A,2)>1 THEN FOR A2=5 TO 8:INPUT#1,AD(A,A2):NEXT A2
  302. 22016 NEXT A:CLOSE#1
  303. 22017 REM
  304. 22020 OPEN"I",#1,"EAMON.MON"
  305. 22021 INPUT#1,NM:DIM MN$(NM),MD(NM,15)
  306. 22022 FOR A=1 TO NM:INPUT#1,MN$(A)
  307. 22023 FOR A2=1 TO 12:INPUT#1,MD(A,A2)
  308. 22024 NEXT A2:NEXT A
  309. 22025 CLOSE#1
  310. 22028 ON ERROR GOTO 24000
  311. 22029 A$="FRESHMEA.T"
  312. 22030 OPEN "I",#1,A$
  313. 22031 A$="":INPUT#1,REC
  314. 22035 LINE INPUT#1,B$:GOSUB 30000
  315. 22036 CLOSE#1
  316. 22037 MN$(0)=CNAME$:MD(0,1)=HD:MD(0,2)=AG
  317. 22039 REM
  318. 22040 OPEN "R",#1,"EAMON.ROM",64
  319. 22041 FIELD 1,64 AS R5$
  320. 22045 GET#1,1:NR=VAL(R5$)
  321. 22050 DIM MAP(NR,6)
  322. 22051 FOR ROOM=1 TO NR
  323. 22052 GOSUB 25000
  324. 22053 NEXT ROOM
  325. 22054 CLOSE#1
  326. 22059 REM
  327. 22060 OPEN"R",#2,"ROOM.NAM",32
  328. 22061 FIELD 2,32 AS R2$
  329. 22062 OPEN"R",#1,"EAMON.DES",255
  330. 22063 FIELD 1,255 AS R1$
  331. 22064 OPEN"R",#3,"EAMON.EFF",255
  332. 22065 FIELD 3,255 AS R3$
  333. 22070 CLS:PRINT"You have no trouble finding the path twards your"
  334. 22071 PRINT"first adventure.  You follow it and finally find"
  335. 22072 PRINT"the beginners cave.":PRINT
  336. 22073 GET#2,1:PRINT:PRINT R1$:PRINT
  337. 22080 PRINT"You see the local Knight Marshal come out to"
  338. 22081 PRINT"inspect you before you may enter the Beginners Cave.":PRINT
  339. 22090 IF WN$(1)="NONE" THEN PRINT"He shakes his head and says, 'You must have at least one weapon to adventure":PRINT"here!  Go back to the Main Hall.'":GOTO 23010
  340. 22100 IF AE<>0 OR WA(1)<>5 OR WA(3)<>20 OR WA(5)<>0 THEN PRINT"He shakes his head and says, 'You are not a beginner! You cannot adventure":PRINT"here!  Go back to the Main Hall.'":GOTO 23010
  341. 22110 IF WN$(2)="NONE" THEN W2=1:GOTO 22160
  342. 22120 PRINT"He tells you, 'You may only take one weapon into the cave. Which shall":PRINT"it be?'"
  343. 22121 PRINT:FOR W=1 TO 4:IF WN$(W)<>"NONE" THEN PRINT W;"   ";WN$(W):NEXT W
  344. 22130 PRINT:PRINT"(Hit 1 -";W;")   ";
  345. 22140 A$=INKEY$:IF A$="" THEN 22140 ELSE W2=VAL(A$):IF W2<1 OR W2>W-1 THEN 22140
  346. 22150 PRINT A$:PRINT
  347. 22160 NA=NA+1:AN$(NA)=WN$(W2):AD(NA,2)=2:AD(NA,3)=2:AD(NA,4)=-1:AD(NA,5)=WO(W2):AD(NA,6)=WT(W2):AD(NA,7)=WD(W2):AD(NA,8)=WS(W2)
  348. 22170 EA=0:MD(0,8)=0:A2=INT(AC/2):IF A2*2<>AC THEN MD(0,8)=1:EA=-5
  349. 22180 IF A2<>0 THEN MD(0,8)=MD(0,8)+A2:EA=EA-A2*10:IF A2=3 THEN MD(0,8)=MD(0,8)+2:EA=EA-30
  350. 22190 MD(0,10)=(EA+AE)*ABS(-EA>AE)+WO(W2)+WA(WT(W2))+2*MD(0,2):MD(0,7)=0:MD(0,9)=NA:MD(0,11)=WD(W2):MD(0,12)=WS(W2)
  351. 22200 TP=TP+AD(A,1)
  352. 22210 READ NC:DIM C$(NC):FOR C=1 TO NC:READ C$(C):NEXT C
  353. 22220 FOR S=1 TO 4:S2(S)=SA(S):NEXT S
  354. 22230 DIM V(26):ROOM=1
  355. 22235 FOR A=1 TO NA-1:IF AN$(NA)=AN$(A) THEN AN$(A)=AN$(A)+"#":GOTO 22235
  356. 22236 NEXT A
  357. 22240 PRINT:PRINT"Eventually the Knight Marshal says, 'You may now proceed'"
  358. 22241 PRINT"and he walkes away.":PRINT:PRINT"(Hit any key to continue)  ";
  359. 22242 A$=INKEY$:IF A$="" THEN 22242
  360. 22243 PRINT:PRINT:GOTO 100
  361. 22250 DATA 36
  362. 22260 DATA GET,PICK,DROP,ATTACK,LOOK,EXAMINE,UP,U,DOWN,D,NORTH,N,EAST,E,WEST,W,SOUTH,S,POWER,HEAL,BLAST,SPEED,SMILE,WAVE,SAY,DRINK,READ,READY,ESCAPE,RETREAT,FLEE,INVENTORY,I,ENTER,TROLLSFIRE,OPEN
  363. 22270 END
  364. 23000 REM
  365. 23010 PRINT:PRINT"(Hit any key to continue)  ";
  366. 23011 A$=INKEY$:IF A$="" THEN 23011 ELSE PRINT
  367. 23020 CLOSE#1:CLOSE#2:CLOSE#3
  368. 23030 AD(10,8)=10
  369. 23040 IF SPD THEN MD(0,2)=MD(0,2)/2
  370. 23050 IF DIE THEN 23240
  371. 23060 FOR W=2 TO 4:IF WN$(W)<>"NONE" THEN NEXT W
  372. 23070 W2=W:FOR W3=1 TO NA-1:IF AD(W3,2)>1 AND AD(W3,4)=-1 THEN WN$(W2)=AN$(W3):WP(W2)=W3:W2=W2+1:AD(W3,4)=0
  373. 23080 NEXT W3:IF W2<6 THEN 23160
  374. 23090 CLS:PRINT:PRINT:PRINT:PRINT:PRINT"As you try to leave, the Knight Marshall reappears and":PRINT"tells you, 'You have too many weapons-- 4 is the leagal limit.'":PRINT:PRINT"Your weapons are---"
  375. 23100 FOR W4=1 TO W2-1:PRINT"    ";W4;"--";WN$(W4):NEXT W4:PRINT:PRINT"Hit the number key for one to throw away. ( 1 -";W2-1;")  ";
  376. 23110 A$=INKEY$:IF A$="" THEN 23110 ELSE W5=VAL(A$):IF W5<1 OR W5>W2-1 THEN 23110
  377. 23120 IF WP(W5)<>0 THEN AD(WP(W5),4)=-1
  378. 23130 WN$(W5)=WN$(W2-1):WP(W5)=WP(W2-1):W2=W2-1:IF W2>5 THEN 23090
  379. 23140 FOR W4=2 TO W2-1:FOR W5=1 TO W4-1:IF WN$(W4)=WN$(W5) THEN WN$(W4)=WN$(W4)+"#":GOTO 23140
  380. 23150 NEXT W5:NEXT W4
  381. 23160 FOR W=1 TO 4:IF WP(W)<>0 THEN WT(W)=AD(WP(W),6):WO(W)=AD(WP(W),5):WD(W)=AD(WP(W),7):WS(W)=AD(WP(W),8)
  382. 23170 NEXT W:CLS:PRINT:PRINT:PRINT:PRINT:PRINT"As you deliver your treasures to Sam Slicker, the local buyer of such things,":PRINT"he examines your goods and pays you ";
  383. 23180 TP=0:FOR A=1 TO NA-1:IF AD(A,4)<>-1 THEN 23210
  384. 23190 IF AD(A,2)<>0 THEN AD(A,1)=AD(A,1)*CH/10
  385. 23200 TP=INT(TP+AD(A,1))
  386. 23210 NEXT A:PRINT TP;"gold pieces.":PRINT:IF MD(9,5)=1 THEN PRINT:PRINT"Additionaly, you receive ";10*CH;" gold pieces as reward for the":PRINT"safe return of Cynthia.":TP=TP+10*CH
  387. 23220 GOLD=GOLD+TP
  388. 23230 PRINT:PRINT:PRINT"(Hit any key to continue)  ";
  389. 23231 A$=INKEY$:IF A$="" THEN 23231 ELSE PRINT
  390. 23240 KILL"FRESHMEA.T"
  391. 23241 A$=INKEY$:PRINT:CLS:PRINT:PRINT:PRINT:PRINT:PRINT"(Insert EAMON MASTER diskette, then hit any key";:IF DIE THEN PRINT")  "; ELSE PRINT " to goto Main Hall)  ";
  392. 23242 A$=INKEY$:IF A$="" THEN 23242
  393. 23250 ON ERROR GOTO 24000
  394. 23251 IF DIE THEN KILL"ADVENTUR.ER":END
  395. 23260 OPEN"R",#1,"CHARACTE.RS",255
  396. 23261 GOSUB 30600
  397. 23262 FIELD 1,255 AS R1$
  398. 23263 LSET R1$=A$
  399. 23264 PUT#1,REC+1
  400. 23270 CLOSE#1
  401. 23290 OPEN "O",#1,"ADVENTUR.ER"
  402. 23291 PRINT#1,MN$(0):PRINT#1,REC
  403. 23292 CLOSE#1
  404. 23300 RUN"MAINHALL"
  405. 23310 STOP
  406. 24000 IF ERR=53 THEN 24100
  407. 24005 PRINT "Error #";ERR
  408. 24010 PRINT "At line";ERL
  409. 24020 PRINT:PRINT"Hit any key to continue"
  410. 24030 A$=INKEY$:IF A$="" THEN 24030
  411. 24040 RESUME NEXT
  412. 24050 STOP
  413. 24100 CLS
  414. 24110 IF A$<>"FRESHMEA.T" THEN 24005
  415. 24120 CLS
  416. 24130 PRINT"You must enter this program through the EAMON program and main hall."
  417. 24140 PRINT:PRINT:STOP
  418. 25000 REM
  419. 25010 GET#1,ROOM+1
  420. 25020 R$=R5$
  421. 25030 FOR I=1 TO 6
  422. 25040 ML=INSTR(R$,",")
  423. 25045 IF ML=0 THEN MAP(ROOM,I)=VAL(R$):R$="":GOTO 25070
  424. 25050 MAP(ROOM,I)=VAL(LEFT$(R$,ML-1))
  425. 25060 R$=MID$(R$,ML+1)
  426. 25070 NEXT I
  427. 25080 FOR I=1 TO NM:FR=MD(I,3): IF FR<>0 AND FR<>100 THEN FR=FR+INT((CH-10)/2)
  428. 25090 MD(I,14)=ABS(FR>100*RND(1))
  429. 25100 NEXT
  430. 25110 RETURN
  431. 28000 T1=VAL(S$)
  432. 28010 IF T1>NR OR T1<1 THEN 300
  433. 28020 R2=T1:GOTO 5100
  434. 30000 REM
  435. 30050 R$=B$
  436. 30060 W=1:X=1:Y=1:IF LEN(R$)=0 THEN R$=",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"
  437. 30070 FOR I=1 TO 38
  438. 30075 A1$=""
  439. 30080 IF R$="" THEN 30555
  440. 30090 J=INSTR(R$,",")
  441. 30095 IF J<>0 THEN A1$=LEFT$(R$,J-1):R$=MID$(R$,J+1) ELSE IF R$<>"" THEN A1$=R$:R$=""
  442. 30100 REM
  443. 30120 ON I    GOTO 30170,30180,30190,30200,30210,30210,30210,30210,30250,30250
  444. 30130 ON I-10 GOTO 30250,30250,30250,30300,30310,30320,30330,30340,30350,30360
  445. 30140 ON I-20 GOTO 30370,30380,30390,30350,30360,30370,30380,30390,30350,30360
  446. 30150 ON I-30 GOTO 30370,30380,30390,30350,30360,30370,30380,30390
  447. 30160 STOP
  448. 30170 CNAME$=A1$:GOTO 30550
  449. 30180 HD=VAL(A1$):GOTO 30550
  450. 30190 AG=VAL(A1$):GOTO 30550
  451. 30200 CH=VAL(A1$):GOTO 30550
  452. 30210 SA(X)=VAL(A1$):X=X+1:GOTO 30550
  453. 30250 WA(Y)=VAL(A1$):Y=Y+1:GOTO 30550
  454. 30300 AE=VAL(A1$):GOTO 30550
  455. 30310 SEX$=A1$:GOTO 30550
  456. 30320 GOLD=VAL(A1$):GOTO 30550
  457. 30330 BANK=VAL(A1$):GOTO 30550
  458. 30340 AC=VAL(A1$):GOTO 30550
  459. 30350 WN$(W)=A1$:GOTO 30550
  460. 30360 WT(W)=VAL(A1$):GOTO 30550
  461. 30370 WO(W)=VAL(A1$):GOTO 30550
  462. 30380 WD(W)=VAL(A1$):GOTO 30550
  463. 30390 WS(W)=VAL(A1$):W=W+1:GOTO 30550
  464. 30550 REM
  465. 30555 NEXT I
  466. 30560 RETURN
  467. 30580 REM   pack the array with commas
  468. 30600 A$=CNAME$+","+STR$(HD)+","+STR$(AG)+","+STR$(CH)+","
  469. 30610 FOR I=1 TO 4:A$=A$+STR$(SA(I))+",":NEXT I
  470. 30620 FOR I=1 TO 5:A$=A$+STR$(WA(I))+",":NEXT I
  471. 30630 A$=A$+STR$(AE)+","+SEX$+","+STR$(GOLD)+","+STR$(BANK)+","+STR$(AC)
  472. 30640 FOR I=1 TO 4:A$=A$+","+WN$(I)+","
  473. 30650 A$=A$+STR$(WT(I))+","+STR$(WO(I))+","
  474. 30660 A$=A$+STR$(WD(I))+","+STR$(WS(I))
  475. 30670 NEXT I
  476. 30680 RETURN
  477. 31000 REM
  478. 31005 A2$=""
  479. 31010 FOR I=1 TO LEN(A$)
  480. 31020 A1$=MID$(A$,I,1)
  481. 31030 IF A1$<"a" OR A1$>"z" THEN 31047
  482. 31040 A2$=A2$+CHR$(ASC(A1$)-32)
  483. 31045 GOTO 31050
  484. 31047 A2$=A2$+A1$
  485. 31050 NEXT I
  486. 31055 A$=A2$
  487. 31060 RETURN
  488.