home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / sourcecode / games / devils_dittany.amos / devils_dittany.amosSourceCode
AMOS Source Code  |  1989-04-02  |  26KB  |  1,161 lines

  1. 'Do  
  2. 'If Inkey$<>"" Then Print Scancode 
  3. 'Loop  
  4. Proc INST
  5. Load ":L1map.ABK"
  6. Load ":walls.ABK"
  7. Load ":people.ABK",1
  8. Load ":obj.abk",1
  9. Load ":DUNG.ABK"
  10. Music 1
  11. Hide On 
  12. Flash Off 
  13. Curs Off 
  14. Cls 0
  15. Get Icon Palette 
  16. Double Buffer : Autoback 0
  17. Reserve Zone 2
  18. Dim X(1)
  19. Dim Y(1)
  20. Dim PA(1)
  21. Dim DTA(9,6)
  22. Dim CTR(1)
  23. Dim WIZ(1,27)
  24. Dim PR(7)
  25. Dim CCT(1,3)
  26. Global X(),Y(),DTA(),CTR(),PRORET,PA(),WIZ(),PR(),CCT(),MNC,TERM,COMPT
  27. Proc FILARY
  28. Do 
  29. Do 
  30. Proc TITLE
  31. If TERM=1 Then Exit 
  32. Loop 
  33. For T=70 To 187
  34. Make Icon Mask T
  35. Next T
  36. Proc HSET
  37. CTR(0)=0
  38. CTR(1)=16
  39. Proc SSPEL
  40. For T=0 To 1
  41. X(T)=Peek(Start(5)+20000+(CTR(T)*20)+2)-4
  42. Y(T)=Peek(Start(5)+20000+(CTR(T)*20)+3)-4
  43. PA(T)=0
  44. Proc PANEL[T]
  45. Proc SCR[T,0,0]
  46. Proc PUD[T,0]
  47. Proc PUD[T,1]
  48. Next T
  49. TERM=0
  50. If COMPT=1 Then WIZ(1,0)=999 : For T=19 To 23 : WIZ(1,T)=99 : Next T
  51. Do 
  52. If Key State(25)=-1 Then Clear Key : Amal Freeze : Wait Key : Amal On 
  53. Proc MVE
  54. Proc BUTT
  55. Proc CTRL
  56. Proc NASTM
  57. Screen Swap : Wait Vbl 
  58. Screen Copy Physic(0) To Logic(0)
  59. If TERM=1 Then Exit 
  60. Loop 
  61. For X=0 To 1
  62. For Y=0 To 27
  63. WIZ(X,Y)=0
  64. Next Y
  65. Next X
  66. Load ":l1map.ABK"
  67. Loop 
  68. Procedure SCR[N,DX,DY]
  69. Add X(N),DX,0 To 99
  70. Add Y(N),DY,0 To 99
  71. XF=N*176
  72. X1=XF : X2=XF+144
  73. Y1=0 : Y2=144
  74. If DX=1 Then X1=X1+16
  75. If DX=-1 Then X2=X2-16
  76. If DY=1 Then Y1=Y1+16
  77. If DY=-1 Then Y2=Y2-16
  78. Screen Copy 0,X1,Y1,X2,Y2 To 0,X1-(16*DX),Y1-(16*DY)
  79. If DX=1 Then X1=8 : Y1=0 : X2=8 : Y2=8 : Gosub RED
  80. If DX=-1 Then X1=0 : Y1=0 : X2=0 : Y2=8 : Gosub RED
  81. If DY=1 Then X1=0 : Y1=8 : X2=8 : Y2=8 : Gosub RED
  82. If DY=-1 Then X1=0 : Y1=0 : X2=8 : Y2=0 : Gosub RED
  83. If DY=0 and DX=0 Then X1=0 : Y1=0 : X2=8 : Y2=8 : Gosub RED
  84. Pop Proc
  85. RED:
  86. Ink 0
  87. Bar XF+(X1*16),Y1*16 To XF+(X2*16)+15,Y2*16+15
  88. For X=X1 To X2
  89. For Y=Y1 To Y2
  90. XT=X(N)+X
  91. YT=Y(N)+Y
  92. If XT>99 Then XT=XT-100
  93. If YT>99 Then YT=YT-100
  94. P=Peek(Start(5)+XT+(YT*100))
  95. If P>0 Then Paste Icon XF+(X*16),Y*16,P
  96. O=Peek(Start(5)+XT+(YT*100)+10000)
  97. If O>0 and O<100 Then Paste Icon X*16+XF,Y*16,O+109
  98. If O=>100 Then Paste Icon X*16+XF,Y*16,Peek(Start(5)+20000+((O-100)*20)+1) : If(O=100 or O=116) Then If WIZ((O-100)/16,1)>0 Then Paste Icon X*16+XF,Y*16,WIZ((O-100)/16,1)+178
  99. Next Y
  100. Next X
  101. Return 
  102. End Proc
  103. Procedure FILARY
  104. For Y=0 To 9
  105. For X=0 To 6
  106. Read DTA(Y,X)
  107. Next X
  108. Next Y
  109. Flash 14,"(ff0,5)(dd0,5)(bb0,5)(990,5)(770,5)(550,5)(330,5)(110,5)(330,5)(550,5)(770,5)(990,5)(bb0,5)(dd0,5)"
  110. Wait 40
  111. Flash 15,"(f00,5)(d00,5)(b00,5)(900,5)(700,5)(500,5)(300,5)(100,5)(300,5)(500,5)(700,5)(900,5)(b00,5)(d00,5)"
  112. '
  113. WIZ(1,2)=15
  114. WIZ(1,3)=14
  115. WIZ(1,4)=19
  116. WIZ(1,5)=1
  117. WIZ(1,6)=5
  118. WIZ(1,11)=4
  119. WIZ(1,7)=7
  120. WIZ(1,8)=11
  121. WIZ(1,9)=10
  122. WIZ(1,10)=16
  123. WIZ(0,2)=12
  124. WIZ(0,3)=20
  125. WIZ(0,4)=19
  126. WIZ(0,5)=11
  127. WIZ(0,6)=3
  128. WIZ(0,11)=4
  129. WIZ(0,7)=6
  130. WIZ(0,8)=7
  131. WIZ(0,9)=10
  132. WIZ(0,10)=16
  133. '
  134. Pop Proc
  135. Data 1,0,0,10,10,10,1
  136. Data 1,0,0,10,10,10,1
  137. Data 1,0,20,10,10,10,1
  138. Data 1,0,40,20,20,20,1
  139. Data 1,0,20,10,10,10,1
  140. Data 1,0,40,15,15,10,1
  141. Data 0,0,25,20,20,12,1
  142. Data 0,1,80,30,30,35,1
  143. Data 0,1,30,10,5,10,1
  144. Data 0,0,40,20,40,25,1
  145. End Proc
  146. Procedure HSET
  147. Hide On 
  148. Sprite 0,128,194,1
  149. A$="LR0=0;A:P;IJ1<16JA;LR0=1;B:IJ1<16JG;P;IJ1=17JC;IJ1=18JD;IJ1=20JE;IJ1=24JF;IJ1=21JH;IJ1=26JI;IJ1=22JJ;IJ1=25JK;JB;G:LR0=2;JA"
  150. A$=A$+";C:IY<194JB;M0,-2,1;JB"
  151. A$=A$+";D:IY>250JB;M0,2,1;JB"
  152. A$=A$+";E:IX<128JB;M-2,0,1;JB"
  153. A$=A$+";F:IX>272JB;M2,0,1;JB"
  154. A$=A$+";H:IY<194JB;IX<128JB;M-2,-2,1;JB"
  155. A$=A$+";I:IY>250JB;IX>272JB;M2,2,1;JB"
  156. A$=A$+";J:IX<128JB;IY>250JB;M-2,2,1;JB"
  157. A$=A$+";K:IX>272JB;IY<194JB;M2,-2,1;JB"
  158. Amal 0,A$
  159. Amal On 0
  160. If COMPT=0
  161. Sprite 2,304,194,1
  162. A$="LR0=0;A:P;IJ0<16JA;LR0=1;B:IJ0<16JG;P;IJ0=17JC;IJ0=18JD;IJ0=20JE;IJ0=24JF;IJ0=21JH;IJ0=26JI;IJ0=22JJ;IJ0=25JK;JB;G:LR0=2;JA"
  163. A$=A$+";C:IY<194JB;M0,-2,1;JB"
  164. A$=A$+";D:IY>250JB;M0,2,1;JB"
  165. A$=A$+";E:IX<304JB;M-2,0,1;JB"
  166. A$=A$+";F:IX>448JB;M2,0,1;JB"
  167. A$=A$+";H:IY<194JB;IX<204JB;M-2,-2,1;JB"
  168. A$=A$+";I:IY>250JB;IX>448JB;M2,2,1;JB"
  169. A$=A$+";J:IX<304JB;IY>250JB;M-2,2,1;JB"
  170. A$=A$+";K:IX>448JB;IY<194JB;M2,-2,1;JB"
  171. Amal 2,A$
  172. Amal On 2
  173. End If 
  174. Set Zone 1,2*16,10*16 To 7*16,12*16
  175. Set Zone 2,13*16,10*16 To 18*16,12*16
  176. End Proc
  177. Procedure CTRL
  178. Add MNC,1,0 To 9
  179. For A=0 To 1
  180. If MNC=2 Then WIZ(A,0)=Min(999,WIZ(A,0)+1) : Proc PUD[A,1]
  181. If WIZ(A,26)>0 Then Dec WIZ(A,26) : Proc MKBUL[A*16,WIZ(A,27),3,WIZ(A,25),3]
  182. If WIZ(A,24)>0 Then Dec WIZ(A,24) : If WIZ(A,24)=0 Then WIZ(A,1)=0
  183. If A=1 and COMPT=1 Then Goto ND1
  184. If Amreg(A*2,0)=1 Then Goto ND1
  185. T=CTR(A)
  186. DX=Jleft(1-A)-Jright(1-A)
  187. DY=Jup(1-A)-Jdown(1-A)
  188. If DX<>0 or DY<>0 Then Proc GO[DX,DY,T,A+1,0]
  189. ND1:
  190. Next A
  191. End Proc
  192. Procedure GO[DX,DY,T,F,BUL]
  193. MD=Peek(Start(5)+20000+(T*20)+19)
  194. If MD>0 Then Poke Start(5)+20000+(T*20)+19,MD-1 : PRORET=0 : Pop Proc
  195. X=Peek(Start(5)+20000+(T*20)+2)
  196. Y=Peek(Start(5)+20000+(T*20)+3)
  197. NM=Peek(Start(5)+20000+(T*20))
  198. X1=X : Add X1,DX,0 To 99
  199. Y1=Y : Add Y1,DY,0 To 99
  200. P=Peek(Start(5)+X1+(Y1*100))
  201. O=Peek(Start(5)+20000+(T*20)+18)
  202. If(NM<11 and(P>29 or P<0)) or(NM>10 and P>33) Then Gosub CL : Gosub REFAC : PRORET=0 : Pop Proc
  203. Q=Peek(Start(5)+X1+(Y1*100)+10000)
  204. If Q=5 Then VA=Peek(Start(5)+20000+(T*20)+6) : If VA=2 Then Proc RGN : Poke Start(5)+X1+(Y1*100)+10000,PRORET : Q=PRORET : Proc RED[X1,Y1] : Poke Start(5)+20000+(T*20)+6,0 : Proc PANEL[T/16]
  205. If Q>99
  206. Gosub REFAC
  207. TB=Peek(Start(5)+20000+((Q-100)*20))
  208. If TB<11
  209. If BUL=1
  210. Proc BULHIT[T,X1,Y1]
  211. Else 
  212. Proc CCBT[T,Q-100,X,Y,X1,Y1]
  213. End If 
  214. Else 
  215. If BUL=0
  216. Proc BULHIT[Q-100,X,Y]
  217. End If 
  218. End If 
  219. Pop Proc
  220. End If 
  221. MVD=1
  222. If P>19 and P<30 Then MVD=3
  223. NZT=Peek(Start(5)+20000+(T*20))
  224. If NZT=8 or NZT=10 Then Inc MVD
  225. Poke Start(5)+X+(Y*100)+10000,O
  226. Poke Start(5)+20000+(T*20)+18,Q
  227. Poke Start(5)+20000+(T*20)+2,X1
  228. Poke Start(5)+20000+(T*20)+3,Y1
  229. XO=Peek(Start(5)+20000+(T*20)+4)-2
  230. YO=Peek(Start(5)+20000+(T*20)+5)-2
  231. IB=Peek(Start(5)+20000+(T*20))*4+66
  232. If XO<>DX or YO<>DY Then Proc FINAM[IB,1,DX,DY] : Poke Start(5)+20000+(T*20)+1,PRORET
  233. Poke Start(5)+20000+(T*20)+4,DX+2
  234. Poke Start(5)+20000+(T*20)+5,DY+2
  235. Poke Start(5)+X1+(Y1*100)+10000,T+100
  236. If BUL=0 Then Poke Start(5)+20000+(T*20)+19,MVD
  237. If F>0 Then Proc SCR[F-1,DX,DY]
  238. Proc RED[X,Y]
  239. Proc RED[X1,Y1]
  240. PRORET=-1
  241. Pop Proc
  242. CL:
  243. 'If NM>10 Then Poke Start(5)+X+(Y*100)+10000,O : Poke Start(5)+20000+(T*20),0 : Proc RED[X,Y]
  244. If BUL=1 Then Proc BULHIT[T,X1,Y1] : Goto ABL
  245. If P=66 Then Poke Start(5)+X1+(Y1*100),19 : Proc RED[X1,Y1]
  246. If P=64 Then Poke Start(5)+X1+(Y1*100),17 : Proc RED[X1,Y1]
  247. If P=68 Then Poke Start(5)+X1+(Y1*100),18 : Proc RED[X1,Y1]
  248. If P=67 or P=65 or P=69 Then O=Peek(Start(5)+20000+(T*20)+6) : If O=1 Then Poke Start(5)+X1+(Y1*100),P-1 : Proc RED[X1,Y1] : Poke Start(5)+20000+(T*20)+6,0 : Proc PANEL[T/16]
  249. Poke Start(5)+20000+(T*20)+4,DX+2
  250. Poke Start(5)+20000+(T*20)+5,DY+2
  251. Proc RED[X,Y]
  252. ABL:
  253. Return 
  254. REFAC:
  255. 'XO=Peek(Start(5)+20000+(T*20)+4)-2
  256. 'YO=Peek(Start(5)+20000+(T*20)+5)-2
  257. IB=Peek(Start(5)+20000+(T*20))*4+66
  258. 'If XO<>DX or YO<>DY 
  259. Proc FINAM[IB,1,DX,DY] : Poke Start(5)+20000+(T*20)+1,PRORET
  260. 'Poke Start(5)+20000+(T*20)+4,DX+2 
  261. 'Poke Start(5)+20000+(T*20)+5,DY+2 
  262. Proc RED[X,Y]
  263. 'End If  
  264. Return 
  265. End Proc
  266. Procedure RED[X,Y]
  267. For T=0 To 1
  268. XT=X(T)+8 : If XT>99 Then XT=XT-100
  269. YT=Y(T)+8 : If YT>99 Then YT=YT-100
  270. If((X=>X(T) and X<X(T)+9) or(X=<XT and X>XT-9)) and((Y=>Y(T) and Y<Y(T)+9) or(Y=<YT and Y>YT-9))
  271. XF=T*176
  272. XA=X-X(T) : If XA<0 : XA=XA+100 : End If 
  273. YA=Y-Y(T) : If YA<0 : YA=YA+100 : End If 
  274. P=Peek(Start(5)+X+(Y*100))
  275. If P>0 : Paste Icon XF+(XA*16),YA*16,P : End If 
  276. O=Peek(Start(5)+X+(Y*100)+10000)
  277. If O>0 and O<100 : Paste Icon XA*16+XF,YA*16,O+109 : End If 
  278. If O>99 : Paste Icon XA*16+XF,YA*16,Peek(Start(5)+20000+((O-100)*20)+1) : End If 
  279. If(O=100 or O=116) : If WIZ((O-100)/16,1)>0 : Paste Icon XA*16+XF,YA*16,WIZ((O-100)/16,1)+178 : End If : End If 
  280. End If 
  281. Next T
  282. End Proc
  283. Procedure PANEL[PL]
  284. If PA(PL)<>7 Then Goto GT5
  285. A=0
  286. For X=0 To 4
  287. A=1-A
  288. Paste Icon(X*16)+32+(PL*176),160,12+X
  289. Pen X+7 : Paper 0
  290. Locate X Text(X*16+32+PL*176)-1,Y Text(180)+A
  291. Print WIZ(PL,19+X);" ";
  292. Next X
  293. Goto GT2
  294. GT5:
  295. If PA(PL)<3 or PA(PL)>6 Then Goto GT4
  296. For X=0 To 4
  297. For Y=0 To 1
  298. Paste Icon(X*16)+32+(PL*176),(10+Y)*16,127
  299. If Y=1 and X=0 Then Paste Icon(X*16)+32+(PL*176),(10+Y)*16,PL*4+70
  300. If Y=1 Then Exit 
  301. P=Peek(Start(5)+20000+((PL*16+6+X)*20))
  302. If P>0 Then Paste Icon(X*16)+32+(PL*176),(10+Y)*16,P*4+66
  303. Inc A
  304. Next Y
  305. Next X
  306. Goto GT2
  307. GT4:
  308. If PA(PL)<>2 Then Goto GT3
  309. A=2
  310. For Y=0 To 1
  311. For X=0 To 4
  312. Paste Icon(X*16)+32+(PL*176),(10+Y)*16,127
  313. If WIZ(PL,A)>0 Then Proc SIF[WIZ(PL,A)] : Paste Icon(X*16)+32+(PL*176),(10+Y)*16,PR(0)
  314. If A<9 and OB>0 Then Paste Icon(X*16)+32+(PL*176),(10+Y)*16,OB+109
  315. Inc A
  316. Next X
  317. Next Y
  318. Goto GT2
  319. GT3:
  320. If PA(PL)<>1 Then Goto GT1
  321. A=0
  322. For Y=0 To 1
  323. For X=0 To 4
  324. If A=9 Then Paste Icon(X*16)+32+(PL*176),(10+Y)*16,128 : Exit 2
  325. OB=Peek(Start(5)+20000+(CTR(PL)*20)+A+7)
  326. Paste Icon(X*16)+32+(PL*176),(10+Y)*16,127
  327. If A<9 and OB>0 Then Paste Icon(X*16)+32+(PL*176),(10+Y)*16,OB+109
  328. Inc A
  329. Next X
  330. Next Y
  331. Goto GT2
  332. GT1:
  333. Restore 100+PA(PL)
  334. For Y=0 To 1
  335. For X=0 To 4
  336. Read A
  337. If A<>0 Then Paste Icon(X*16)+32+(PL*176),(10+Y)*16,127 : Paste Icon(X*16)+32+(PL*176),(10+Y)*16,Abs(A)
  338. Next X
  339. Next Y
  340. GT2:
  341. OB=Peek(Start(5)+20000+(CTR(PL)*20)+6)
  342. Paste Icon PL*176+5,160,127
  343. If OB>0 Then Paste Icon PL*176+5,160,OB+109
  344. Pop Proc
  345. 100 Data -12,136,137,138,139,140,141,142,143,144
  346. End Proc
  347. Procedure HITBUT[T]
  348. PRORET=0
  349. If Amreg(T*2,0)=2
  350. Amreg(T*2,0)=0
  351. If Hzone(X Sprite(T*2),Y Sprite(T*2))=T+1
  352. X=X Screen(X Sprite(T*2))-(T*176)-32
  353. X=X/16
  354. Y=Y Screen(Y Sprite(T*2))-160
  355. Y=Y/16
  356. PRORET=X+(Y*5)+1
  357. End If 
  358. End If 
  359. End Proc
  360. Procedure BUTT
  361. For T=0 To 1
  362. If T=0 or COMPT=0
  363. Proc HITBUT[T]
  364. Else 
  365. If Rnd(9)=0
  366. WIZ(T,18)=Rnd(19)+1
  367. If WIZ(T,18)<>15 and WIZ(T,18)<>11
  368. Goto CCST
  369. End If 
  370. End If 
  371. End If 
  372. RETPRO=PRORET
  373. If PRORET=0 Then Goto SPDLP
  374. DWEEZIL=DTA(Peek(Start(5)+20000+(CTR(T)*20))-1,0)=1
  375. If PA(T)=0
  376. If PRORET=2 and CTR(T)<>T*16
  377. P=Peek(Start(5)+20000+(CTR(T)*20))
  378. If DTA(P-1,1)=1
  379. Proc MKBUL[CTR(T),153,0,8,50]
  380. End If 
  381. PRORET=0
  382. Goto LABL
  383. End If 
  384. If PRORET=2 and WIZ(T,18)>0 and CTR(T)=T*16
  385. CCST:
  386. Proc SIF[WIZ(T,18)]
  387. If WIZ(T,0)<PR(7) : Goto LABL : End If 
  388. For N=0 To 2
  389. If WIZ(T,PR(N+4)+18)<1 and PR(N+4)<>0 : Goto LABL : End If 
  390. Next N
  391. If PR(1)=5
  392. For CC=0 To 99
  393. XR=Rnd(99)
  394. YR=Rnd(99)
  395. AR=Peek(Start(5)+XR+(YR*100))
  396. NR=Peek(Start(5)+XR+(YR*100)+10000)
  397. If AR<30 and NR<100 and AR<>26
  398. XN=Peek(Start(5)+20000+(CTR(T)*20)+2)
  399. YN=Peek(Start(5)+20000+(CTR(T)*20)+3)
  400. Poke Start(5)+XN+(YN*100)+10000,NR
  401. Poke Start(5)+20000+(CTR(T)*20)+2,XR
  402. Poke Start(5)+20000+(CTR(T)*20)+3,YR
  403. Poke Start(5)+XR+(YR*100)+10000,CTR(T)+100
  404. RED[XN,YN]
  405. RED[XR,YR]
  406. X(T)=XR-4
  407. Y(T)=YR-4
  408. If X(T)>99 : X(T)=X(T)-100 : End If 
  409. If Y(T)>99 : Y(T)=Y(T)-100 : End If 
  410. If X(T)<0 : X(T)=X(T)+100 : End If 
  411. If Y(T)<0 : Y(T)=Y(T)+100 : End If 
  412. SCR[T,0,0]
  413. Gosub DRAIN
  414. Exit 
  415. End If 
  416. Next CC
  417. End If 
  418. If PR(1)=1
  419. Proc MKBUL[CTR(T),PR(0),PR(2),WIZ(T,18),50]
  420. If PRORET=1 : Gosub DRAIN : End If 
  421. End If 
  422. If PR(1)=3
  423. WIZ(T,1)=WIZ(T,18)-16
  424. WIZ(T,24)=PR(2)
  425. X=Peek(Start(5)+20000+(CTR(T)*20)+2)
  426. Y=Peek(Start(5)+20000+(CTR(T)*20)+3)
  427. Proc RED[X,Y]
  428. Gosub DRAIN
  429. End If 
  430. If PR(1)=0
  431. X=Peek(Start(5)+20000+(CTR(T)*20)+2)
  432. Y=Peek(Start(5)+20000+(CTR(T)*20)+3)
  433. DX=Peek(Start(5)+20000+(CTR(T)*20)+4)-2
  434. DY=Peek(Start(5)+20000+(CTR(T)*20)+5)-2
  435. Add X,DX,0 To 99
  436. Add Y,DY,0 To 99
  437. Proc SUM[X,Y,T,PR(2)]
  438. If PRORET>-1 : Gosub DRAIN : End If 
  439. End If 
  440. If PR(1)=6
  441. XT=Peek(Start(5)+20000+(CTR(T)*20)+2)
  442. YT=Peek(Start(5)+20000+(CTR(T)*20)+3)
  443. For X=-1 To 1
  444. For Y=-1 To 1
  445. If X<>0 or Y<>0
  446. XV=XT+X : YV=YT+Y
  447. If XV>99 : XV=XV-100 : End If 
  448. If XV<0 : XV=XV+100 : End If 
  449. If YV>99 : YV=YV-100 : End If 
  450. If YV<0 : YV=YV+100 : End If 
  451. P=Peek(Start(5)+XV+(YV*100))
  452. If P=10 or P=11
  453. Proc SUM[XV,YV,T,PR(2)]
  454. End If 
  455. End If 
  456. Next Y
  457. Next X
  458. Gosub DRAIN
  459. End If 
  460. If PR(1)=2
  461. WIZ(T,25)=WIZ(T,18)
  462. WIZ(T,26)=PR(2)
  463. WIZ(T,27)=PR(0)
  464. Gosub DRAIN
  465. End If 
  466. PRORET=0
  467. End If 
  468. LABL:
  469. If PRORET=1 and DWEEZIL
  470. PA(T)=7 : Proc PANEL[T]
  471. Goto SPDLP
  472. End If 
  473. If PRORET=4 and DWEEZIL
  474. OB=Peek(Start(5)+20000+(CTR(T)*20)+6)
  475. P=Peek(Start(5)+20000+(CTR(T)*20)+18)
  476. Swap P,OB
  477. Poke Start(5)+20000+(CTR(T)*20)+6,OB
  478. Poke Start(5)+20000+(CTR(T)*20)+18,P
  479. Proc PANEL[T]
  480. End If 
  481. If PRORET=5 and DWEEZIL
  482. PA(T)=1
  483. Proc PANEL[T]
  484. PRORET=0
  485. End If 
  486. PRORET=RETPRO
  487. If PRORET>6
  488. PA(T)=PRORET-4
  489. Proc PANEL[T]
  490. PRORET=0
  491. End If 
  492. If PRORET=3 and CTR(T)=T*16
  493. PA(T)=2
  494. Proc PANEL[T]
  495. PRORET=0
  496. End If 
  497. If PRORET=6 and DWEEZIL
  498. OB=Peek(Start(5)+20000+(CTR(T)*20)+6)
  499. If OB=3
  500. Proc MKBUL[CTR(T),145,2,21,50]
  501. End If 
  502. If OB=9
  503. Proc MKBUL[CTR(T),153,0,8,50]
  504. End If 
  505. If OB=13
  506. Proc MKBUL[CTR(T),157,2,10,50]
  507. End If 
  508. If OB=10 and CTR(T)=T*16
  509. WIZ(T,1)=1
  510. WIZ(T,24)=100
  511. X=Peek(Start(5)+20000+(CTR(T)*20)+2)
  512. Y=Peek(Start(5)+20000+(CTR(T)*20)+3)
  513. Proc RED[X,Y]
  514. End If 
  515. If OB=11
  516. WIZ(T,0)=WIZ(T,0)+10 : Proc PUD[T,1]
  517. End If 
  518. If OB=17
  519. TYP=Peek(Start(5)+20000+(CTR(T)*20))
  520. IS=DTA(TYP-1,5)
  521. Poke Start(5)+20000+(CTR(T)*20)+16,IS
  522. If CTR(T)=T*16
  523. WIZ(T,0)=WIZ(T,0)+50
  524. Proc PUD[T,1]
  525. End If 
  526. Poke Start(5)+20000+(CTR(T)*20)+6,0
  527. Proc PUD[T,0]
  528. Proc PANEL[T]
  529. End If 
  530. If OB=12
  531. XN=Peek(Start(5)+20000+(CTR(T)*20)+2)
  532. YN=Peek(Start(5)+20000+(CTR(T)*20)+3)
  533. DXN=Peek(Start(5)+20000+(CTR(T)*20)+4)-2
  534. DYN=Peek(Start(5)+20000+(CTR(T)*20)+5)-2
  535. XR=XN+(DXN*10)
  536. YR=YN+(DYN*10)
  537. If XR>99 : XR=XR-100 : End If 
  538. If YR>99 : YR=YR-100 : End If 
  539. If XR<0 : XR=XR+100 : End If 
  540. If YR<0 : YR=YR+100 : End If 
  541. AR=Peek(Start(5)+XR+(YR*100))
  542. NR=Peek(Start(5)+XR+(YR*100)+10000)
  543. If AR<30 and NR<100 and AR<>26
  544. Poke Start(5)+XN+(YN*100)+10000,NR
  545. Poke Start(5)+20000+(CTR(T)*20)+2,XR
  546. Poke Start(5)+20000+(CTR(T)*20)+3,YR
  547. Poke Start(5)+XR+(YR*100)+10000,CTR(T)+100
  548. RED[XN,YN]
  549. RED[XR,YR]
  550. X(T)=XR-4
  551. Y(T)=YR-4
  552. If X(T)>99 : X(T)=X(T)-100 : End If 
  553. If Y(T)>99 : Y(T)=Y(T)-100 : End If 
  554. If X(T)<0 : X(T)=X(T)+100 : End If 
  555. If Y(T)<0 : Y(T)=Y(T)+100 : End If 
  556. SCR[T,0,0]
  557. End If 
  558. End If 
  559. End If 
  560. PRORET=0
  561. End If 
  562. If PA(T)=1 and PRORET>0
  563. If PRORET<10
  564. OB=Peek(Start(5)+20000+(CTR(T)*20)+6)
  565. P=Peek(Start(5)+20000+(CTR(T)*20)+6+PRORET)
  566. Swap P,OB
  567. Poke Start(5)+20000+(CTR(T)*20)+6,OB
  568. Poke Start(5)+20000+(CTR(T)*20)+6+PRORET,P
  569. End If 
  570. PA(T)=0 : Proc PANEL[T]
  571. End If 
  572. If PA(T)=2 and PRORET>0
  573. WIZ(T,18)=WIZ(T,1+PRORET)
  574. PA(T)=0
  575. Proc PANEL[T]
  576. End If 
  577. If PA(T)=3
  578. If PRORET>0 and PRORET<7
  579. If PRORET=6 : TG=T*16 Else TG=T*16+5+PRORET : End If 
  580. P=Peek(Start(5)+20000+(TG*20))
  581. If P>0
  582. CTR(T)=TG
  583. X(T)=Peek(Start(5)+20000+(CTR(T)*20)+2)-4
  584. Y(T)=Peek(Start(5)+20000+(CTR(T)*20)+3)-4
  585. If X(T)>99 : X(T)=X(T)-100 : End If 
  586. If Y(T)>99 : Y(T)=Y(T)-100 : End If 
  587. If X(T)<0 : X(T)=X(T)+100 : End If 
  588. If Y(T)<0 : Y(T)=Y(T)+100 : End If 
  589. Proc PUD[T,0]
  590. Proc SCR[T,0,0]
  591. End If 
  592. PA(T)=0
  593. Proc PANEL[T]
  594. End If 
  595. End If 
  596. If PA(T)>3 and PA(T)<7 and PRORET>0 and PRORET<7
  597. If PRORET=6 : TG=12 Else TG=12+PRORET : End If 
  598. WIZ(T,TG)=PA(T)-4
  599. PA(T)=0
  600. Proc PANEL[T]
  601. End If 
  602. If PA(T)=7 Then PA(T)=0 : Proc PANEL[T]
  603. SPDLP:
  604. Next T
  605. Pop Proc
  606. DRAIN:
  607. WIZ(T,0)=WIZ(T,0)-PR(7)
  608. For N=0 To 2
  609. If PR(N+4)>0 Then Dec WIZ(T,18+PR(N+4))
  610. Next N
  611. Proc PUD[T,1]
  612. Return 
  613. End Proc
  614. Procedure RGN
  615. If Rnd(1)=0
  616. PRORET=Rnd(1)+16
  617. Else 
  618. PRORET=Rnd(2)+6
  619. End If 
  620. End Proc
  621. Procedure MKBUL[PR,I,TA,OB,RAN]
  622. PRORET=1
  623. S1=-1
  624. N=-1
  625. If PR=0 Then S1=1 : S2=5
  626. If PR=16 Then S1=17 : S2=21
  627. If(PR>5 and PR<11) or(PR>21 and PR<27) Then S1=PR+5 : S2=PR+5
  628. If S1=-1 Then PRORET=0 : Pop Proc
  629. For S=S1 To S2
  630. P=Peek(Start(5)+20000+(S*20))
  631. If P=0 Then N=S : Exit 
  632. Next S
  633. If N=-1 Then PRORET=0 : Pop Proc
  634. X=Peek(Start(5)+20000+(PR*20)+2)
  635. Y=Peek(Start(5)+20000+(PR*20)+3)
  636. DX=Peek(Start(5)+20000+(PR*20)+4)-2
  637. DY=Peek(Start(5)+20000+(PR*20)+5)-2
  638. Add X,DX,0 To 99
  639. Add Y,DY,0 To 99
  640. P=Peek(Start(5)+X+(Y*100))
  641. Q=Peek(Start(5)+X+(Y*100)+10000)
  642. If P>32 or Q>99
  643. Poke Start(5)+20000+(N*20)+18,Q
  644. Poke Start(5)+20000+(N*20),OB+3
  645. Poke Start(5)+20000+(N*20)+2,255
  646. Proc BULHIT[N,X,Y] : PRORET=1 : Pop Proc
  647. End If 
  648. Poke Start(5)+20000+(N*20)+18,Q
  649. Poke Start(5)+20000+(N*20)+2,X
  650. Poke Start(5)+20000+(N*20)+3,Y
  651. Poke Start(5)+20000+(N*20)+4,DX+2
  652. Poke Start(5)+20000+(N*20)+5,DY+2
  653. Poke Start(5)+20000+(N*20)+6,RAN
  654. Poke Start(5)+X+(Y*100)+10000,N+100
  655. Poke Start(5)+20000+(N*20),OB+3
  656. Proc FINAM[I,TA,DX,DY]
  657. Poke Start(5)+20000+(N*20)+1,PRORET
  658. Proc RED[X,Y]
  659. PRORET=1
  660. End Proc
  661. Procedure FINAM[I,A,DX,DY]
  662. PRORET=I
  663. If A=0 Then Pop Proc
  664. If A=3 Then Goto LB3
  665. If A=2 Then Goto LB1
  666. If DX=-1 Then PRORET=I+3
  667. If DX=1 Then PRORET=I+2
  668. If DY=-1 Then PRORET=I+1
  669. If DY=1 Then PRORET=I
  670. Pop Proc
  671. LB1:
  672. If DX=-1 and DY=-1 Then PRORET=I+7
  673. If DX=1 and DY=-1 Then PRORET=I+1
  674. If DX=-1 and DY=1 Then PRORET=I+5
  675. If DX=0 and DY=1 Then PRORET=I+4
  676. If DX=1 and DY=1 Then PRORET=I+3
  677. If DX=-1 and DY=0 Then PRORET=I+6
  678. If DX=1 and DY=0 Then PRORET=I+2
  679. Pop Proc
  680. LB3:
  681. If DX<>0 Then PRORET=I+2
  682. If DY<>0 Then PRORET=I
  683. End Proc
  684. Procedure MVE
  685. SD=0
  686. For T=1 To 5
  687. Gosub M
  688. Next T
  689. SD=1
  690. For T=17 To 21
  691. Gosub M
  692. Next T
  693. SD=2
  694. For T=11 To 15
  695. Gosub M
  696. Next T
  697. For T=27 To 31
  698. Gosub M
  699. Next T
  700. For T=42 To 51
  701. Gosub M
  702. Next T
  703. Pop Proc
  704. M:
  705. P=Peek(Start(5)+20000+(T*20))
  706. If P>10
  707. RG=Peek(Start(5)+20000+(T*20)+6)
  708. Dec RG
  709. If RG>0
  710. Poke Start(5)+20000+(T*20)+6,RG
  711. DX=Peek(Start(5)+20000+(T*20)+4)-2
  712. DY=Peek(Start(5)+20000+(T*20)+5)-2
  713. If P=15
  714. DX=Peek(Start(5)+20000+(SD*320)+4)-2
  715. DY=Peek(Start(5)+20000+(SD*320)+5)-2
  716. Poke Start(5)+20000+(T*20)+4,DX+2
  717. Poke Start(5)+20000+(T*20)+5,DY+2
  718. Proc FINAM[166,2,DX,DY]
  719. Poke Start(5)+20000+(T*20)+1,PRORET
  720. End If 
  721. Proc GO[DX,DY,T,0,1]
  722. Else 
  723. Poke Start(5)+20000+(T*20),0
  724. X=Peek(Start(5)+20000+(T*20)+2)
  725. Y=Peek(Start(5)+20000+(T*20)+3)
  726. OB=Peek(Start(5)+20000+(T*20)+18)
  727. Poke Start(5)+X+(Y*100)+10000,OB
  728. Proc RED[X,Y]
  729. End If 
  730. End If 
  731. Return 
  732. End Proc
  733. Procedure SIF[N]
  734. Restore 1000+N
  735. For T=0 To 7
  736. Read PR(T)
  737. Next T
  738. 1001 Data 78,0,3,0,0,0,0,20
  739. 1002 Data 82,0,4,0,1,0,0,40
  740. 1003 Data 90,6,6,0,0,0,0,40
  741. 1004 Data 94,0,7,0,0,0,0,25
  742. 1005 Data 98,0,8,0,2,3,1,80
  743. 1006 Data 102,0,9,0,4,0,0,30
  744. 1007 Data 106,0,10,0,5,4,3,70
  745. 1008 Data 153,1,0,16,0,0,0,1
  746. 1009 Data 154,2,10,20,1,0,0,2
  747. 1010 Data 157,1,2,30,2,0,0,2
  748. 1011 Data 165,1,0,30,3,0,0,4
  749. 1012 Data 166,1,2,25,4,5,0,2
  750. 1013 Data 174,1,0,0,1,0,0,1
  751. 1014 Data 184,5,0,0,2,0,0,20
  752. 1015 Data 175,1,0,16,3,4,0,15
  753. 1016 Data 176,2,10,30,5,1,2,5
  754. 1017 Data 179,3,800,10,3,0,0,40
  755. 1018 Data 180,3,-1,0,4,0,0,5
  756. 1019 Data 181,3,1000,30,4,3,1,180
  757. 1020 Data 182,3,800,10,5,0,0,60
  758. 1021 Data 182,1,2,15,0,0,0,0
  759. End Proc
  760. Procedure SUM[X,Y,S,T]
  761. SEL=-1
  762. For N=S*16+6 To S*16+10
  763. If Peek(Start(5)+20000+(N*20))=0 Then SEL=N
  764. Next N
  765. Q=Peek(Start(5)+X+(Y*100)+10000)
  766. R=Peek(Start(5)+X+(Y*100))
  767. If R>29 or Q>99 or SEL=-1 Then PRORET=-1 : Pop Proc
  768. WIZ(S,13+SEL-(S*16)-6)=0
  769. If S=1 and COMPT=1 Then WIZ(S,13+SEL-(S*16)-6)=2
  770. PRORET=0
  771. Poke Start(5)+X+(Y*100)+10000,100+SEL
  772. ADR=Start(5)+20000+(SEL*20)
  773. For N=6 To 17
  774. Poke ADR+N,0
  775. Next N
  776. Poke ADR+4,2
  777. Poke ADR+5,2
  778. Poke ADR,T
  779. Poke ADR+1,T*4+66
  780. Poke ADR+2,X
  781. Poke ADR+3,Y
  782. Poke ADR+18,Q
  783. Poke ADR+16,DTA(T-1,5)
  784. Proc RED[X,Y]
  785. End Proc
  786. Procedure BULHIT[N,X,Y]
  787. Q=Peek(Start(5)+20000+(N*20))
  788. XE=Peek(Start(5)+20000+(N*20)+2)
  789. YE=Peek(Start(5)+20000+(N*20)+3)
  790. ZE=Peek(Start(5)+20000+(N*20)+18)
  791. Poke Start(5)+20000+(N*20),0
  792. If XE<100 Then Poke Start(5)+XE+(YE*100)+10000,ZE : Proc RED[XE,YE]
  793. If Q=18 or Q=14 Then B=1 Else B=0
  794. Proc SIF[Q-3]
  795. DM=PR(3)
  796. For DX=-B To B
  797. For DY=-B To B
  798. XT=X : YT=Y
  799. SB=Min(2,N/16)
  800. Add XT,DX,0 To 99
  801. Add YT,DY,0 To 99
  802. If Q=18 Then Poke Start(5)+XT+(YT*100),26
  803. E=Peek(Start(5)+XT+(YT*100)+10000)
  804. If Not E>99 Then Goto NT
  805. G=Peek(Start(5)+20000+((E-100)*20))
  806. ST=Min(2,(E-100)/16)
  807. If ST=SB Then Goto NT
  808. If G<11 Then Proc MBLOW[E-100,XT,YT,DM,0] : If Q=16 Then Poke Start(5)+20000+((E-100)*20)+19,100
  809. NT:
  810. Proc RED[XT,YT]
  811. Next DY
  812. Next DX
  813. End Proc
  814. Procedure MBLOW[N,X,Y,D,NOD]
  815. ADR=Start(5)+20000+(N*20)
  816. TP=Peek(ADR)
  817. DF=DTA(TP-1,4)
  818. HP=Peek(ADR+16)
  819. DB=0
  820. For M=6 To 15
  821. W=Peek(ADR+M)
  822. If W=6 Then DB=Max(6,DB)
  823. If W=8 Then DB=Max(10,DB)
  824. If W=15 Then DB=Max(20,DB)
  825. Next M
  826. DF=DF+DB
  827. If N=0 or N=16
  828. DS=WIZ(N/16,1)
  829. If DS=2
  830. DF=200
  831. WIZ(N/16,1)=0
  832. End If 
  833. If DS=1 or DS=4 : DF=DF+10 : End If 
  834. If DS=3 : DF=DF+30 : End If 
  835. End If 
  836. If NOD=1 Then HP=HP-D : Goto INST
  837. DM=Max(0,D+Rnd(D)-DF-Rnd(DF))
  838. HP=HP-DM
  839. INST:
  840. If HP>0
  841. Poke ADR+16,HP
  842. T=N/16
  843. If T<2
  844. If CTR(T)=N : Proc PUD[T,0] : End If 
  845. End If 
  846. PRORET=0
  847. Else 
  848. PRORET=1
  849. Poke ADR,0
  850. OB=Peek(ADR+18)
  851. Poke Start(5)+X+(Y*100)+10000,OB
  852. For T=0 To 1
  853. If CTR(T)=N
  854. CTR(T)=T*16
  855. X(T)=Peek(Start(5)+20000+(CTR(T)*20)+2)-4
  856. Y(T)=Peek(Start(5)+20000+(CTR(T)*20)+3)-4
  857. If X(T)>99 : X(T)=X(T)-100 : End If 
  858. If Y(T)>99 : Y(T)=Y(T)-100 : End If 
  859. If X(T)<0 : X(T)=X(T)+100 : End If 
  860. If Y(T)<0 : Y(T)=Y(T)+100 : End If 
  861. Proc PUD[T,0]
  862. Proc SCR[T,0,0]
  863. End If 
  864. Proc RED[X,Y]
  865. If Peek(Start(5)+20000+(T*16*20))=0
  866. Proc GAMEOVER[1-T]
  867. End If 
  868. Next T
  869. End If 
  870. End Proc
  871. Procedure CCBT[A,B,X1,Y1,X2,Y2]
  872. GP1=Min(2,A/16)
  873. GP2=Min(2,B/16)
  874. If GP1=GP2 Then Pop Proc
  875. CCT(0,0)=A : CCT(0,1)=X1 : CCT(0,2)=Y1
  876. CCT(1,0)=B : CCT(1,1)=X2 : CCT(1,2)=Y2
  877. For T=0 To 1
  878. N=Peek(Start(5)+20000+(CCT(T,0)*20))
  879. A=DTA(N-1,3)
  880. C=Peek(Start(5)+20000+(CCT(T,0)*20)+6)
  881. If C=4 Then A=A+10
  882. If C=7 Then A=A+4
  883. If C=14 Then A=A+20
  884. If CCT(T,0)=0 or CCT(T,0)=16
  885. If WIZ(CCT(T,0)/16,1)=4
  886. A=A+10
  887. End If 
  888. End If 
  889. CCT(T,3)=A
  890. Next T
  891. For T=0 To 1
  892. Proc MBLOW[CCT(1-T,0),CCT(1-T,1),CCT(1-T,2),CCT(T,3),0]
  893. If PRORET=1 Then Proc RED[CCT(1-T,1),CCT(1-T,2)]
  894. Next T
  895. End Proc
  896. Procedure GAMEOVER[N]
  897. TERM=1
  898. Cls 0
  899. Pen N+14
  900. Paper 0
  901. Locate 0,5
  902. Centre "Game over"
  903. Locate 0,7
  904. Centre "Player "+Str$(N+1)+" wins"
  905. For A=0 To 5
  906. For T=13 To 70
  907. Screen Copy 0,0,T*3,320,200 To 0,0,T*3+1
  908. Screen Swap : Wait Vbl 
  909. Screen Copy Physic(0) To Logic(0)
  910. Next T
  911. Next A
  912. Wait Key 
  913. TERM=1
  914. End Proc
  915. Procedure PUD[N,T]
  916. Paper 0
  917. Pen 7+N+T+T
  918. Locate N*22+T*8,19
  919. If T=0 Then Print "Hl:";Peek(Start(5)+20000+(CTR(N)*20)+16);"  "; : Pop Proc
  920. Print "Mn:";WIZ(N,0);"  ";
  921. End Proc
  922. Procedure NASTM
  923. S=0
  924. T=0 : N=0 : Gosub MV
  925. For T=6 To 10 : N=T-5 : Gosub MV : Next T
  926. S=1
  927. T=16 : N=0 : Gosub MV
  928. For T=22 To 26 : N=T-21 : Gosub MV : Next T
  929. S=2
  930. For T=32 To 41 : Gosub MV : Next T
  931. Pop Proc
  932. MV:
  933. ADR=Start(5)+20000+(T*20)
  934. P=Peek(ADR)
  935. If P>0
  936. X=Peek(ADR+2)
  937. Y=Peek(ADR+3)
  938. Q=Peek(Start(5)+X+(Y*100))
  939. If Q=26
  940. Proc MBLOW[T,X,Y,2+Rnd(2),1]
  941. End If 
  942. If Q>11 and Q<17 and(T=0 or T=16)
  943. WIZ(T/16,Q+7)=99
  944. If PA(T/16)=7
  945. Proc PANEL[T/16]
  946. End If 
  947. End If 
  948. If T=16 and COMPT=1
  949. XM=Peek(Start(5)+20000+320+4)-2
  950. YM=Peek(Start(5)+20000+320+5)-2
  951. If Rnd(9)=0 : XM=Rnd(2)-1 : YM=Rnd(2)-1 : End If 
  952. '
  953. Gosub SSCAN
  954. '
  955. Proc GO[XM,YM,T,0,0]
  956. End If 
  957. If S<2
  958. If CTR(S)<>T
  959. OD=WIZ(S,N+12)
  960. If OD>0
  961. If OD=2
  962. XT=Peek(Start(5)+20000+((1-S)*320)+2)
  963. YT=Peek(Start(5)+20000+((1-S)*320)+3)
  964. If DTA(P-1,1)=1 and Rnd(9)=0
  965. Proc MKBUL[T,153,0,8,50]
  966. End If 
  967. Else 
  968. XT=Peek(Start(5)+20000+(S*320)+2)
  969. YT=Peek(Start(5)+20000+(S*320)+3)
  970. End If 
  971. If XT-X<>0
  972. XM=(XT-X)/Abs(XT-X)
  973. If 100-Abs((XT-X))<Abs(XT-X) : XM=-XM : End If 
  974. Else 
  975. XM=0
  976. End If 
  977. If YT-Y<>0
  978. YM=(YT-Y)/Abs(YT-Y)
  979. If 100-Abs((YT-Y))<Abs(YT-Y) : YM=-YM : End If 
  980. Else 
  981. YM=0
  982. End If 
  983. Gosub SSCAN
  984. '
  985. Proc GO[XM,YM,T,0,0]
  986. '
  987. End If 
  988. End If 
  989. Else 
  990. If DTA(P-1,1)=1 and Rnd(9)=0
  991. Proc MKBUL[T,153,0,8,50]
  992. End If 
  993. Proc GO[Rnd(2)-1,Rnd(2)-1,T,0,0]
  994. End If 
  995. End If 
  996. Return 
  997. SSCAN:
  998. XL=X+XM : YL=Y+YM
  999. If XL>99 Then Add XL,-100
  1000. If XL<0 Then Add XL,100
  1001. If YL>99 Then Add YL,-100
  1002. If YL<0 Then Add YL,100
  1003. RUS=Peek(Start(5)+XL+(YL*100))
  1004. If RUS=26 Then XM=-XM : YM=-YM
  1005. If RUS>29 Then XM=Rnd(2)-1 : YM=Rnd(2)-1
  1006. Return 
  1007. End Proc
  1008. Procedure SSPEL
  1009. Autoback 1
  1010. Cls 0
  1011. For S=0 To 1-COMPT
  1012. SR=5
  1013. For SS=0 To 9
  1014. Gosub SPD
  1015. Do 
  1016. If Jleft(1-S)=-1 Then Add SR,-1,1 To 20 : Gosub SPD
  1017. If Jright(1-S)=-1 Then Add SR,1,1 To 20 : Gosub SPD
  1018. If Fire(1-S)=-1 Then WIZ(S,2+SS)=SR : Exit 
  1019. Loop 
  1020. While Fire(S)=-1
  1021. Wend 
  1022. Next SS
  1023. Next S
  1024. Cls 0
  1025. Autoback 0
  1026. Pop Proc
  1027. SPD:
  1028. Cls 0
  1029. Pen 2 : Paper 0
  1030. Locate 0,0
  1031. Centre "Spell no "+Str$(SS+1)
  1032. Locate 0,4
  1033. Restore 10000+SR : Read A$ : Centre A$
  1034. Locate 0,10
  1035. Proc SIF[SR]
  1036. Paste Icon 152,10,PR(0)
  1037. Print "Cost:";PR(7)
  1038. Locate 0,12
  1039. Print "Herbs Required:"
  1040. For N=0 To 2
  1041. If PR(N+4)>0 Then Paste Icon 130+(N*20),92,PR(N+4)+11
  1042. Next N
  1043. Pen 8
  1044. Wait 5
  1045. Return 
  1046. 10001 Data "Orque"
  1047. 10002 Data "Giant"
  1048. 10003 Data "Raise Dead"
  1049. 10004 Data "Crocodile"
  1050. 10005 Data "Daemon"
  1051. 10006 Data "Shrivenzale"
  1052. 10007 Data "Kraken"
  1053. 10008 Data "Small fireball"
  1054. 10009 Data "Firefist"
  1055. 10010 Data "Firehammer"
  1056. 10011 Data "Wootlesning's Thaumic Accelerator"
  1057. 10012 Data "Glenknoddle's Potent Asp Spray MK VI"
  1058. 10013 Data "Freeze"
  1059. 10014 Data "Escape"
  1060. 10015 Data "Magma"
  1061. 10016 Data "Finger Of Death"
  1062. 10017 Data "Aura of Protection"
  1063. 10018 Data "Void Sphere"
  1064. 10019 Data "Aura of Invulnerability"
  1065. 10020 Data "Wall of fire"
  1066. End Proc
  1067. Procedure TITLE
  1068. TERM=0
  1069. Sprite Off 
  1070. Amal Off 
  1071. Load ":tytle.ABK"
  1072. Cls 0
  1073. For T=1 To 6
  1074. Paste Bob T*48-20,0,T
  1075. Next T
  1076. For T=1 To 7
  1077. Paste Bob T*32+20,40,T+6
  1078. Next T
  1079. Paste Bob 112,70,14
  1080. Pen 8 : Paper 0
  1081. Locate 25,13
  1082. Print "1:1 Player"
  1083. Locate 25,15
  1084. Print "2:2 Player"
  1085. Locate 25,17
  1086. Print "3:new level" : Locate 20,22 : Print "By Mark Potter";
  1087. Screen Swap 
  1088. Do 
  1089. If Key State(3)=-1
  1090. Autoback 1 : Locate 0,0 : Cls 0
  1091. Print "Level Number?"
  1092. Clear Key 
  1093. Input N$
  1094. FL$=":l"+N$+"map.ABK"
  1095. If Exist(FL$)
  1096. Load FL$,5
  1097. Else 
  1098. Print "Level file not found!"
  1099. End If 
  1100. Curs Off 
  1101. Autoback 0
  1102. Pop Proc
  1103. End If 
  1104. If Key State(2)=-1 Then COMPT=0 : TERM=1 : Exit 
  1105. If Key State(1)=-1 Then COMPT=1 : TERM=1 : Exit 
  1106. Loop 
  1107. Curs Off 
  1108. Screen Swap : Cls 0
  1109. Load ":hand.ABK"
  1110. End Proc
  1111. Procedure INST
  1112. Screen Open 0,640,200,2,Hires
  1113. Palette $0,$F0
  1114. Locate 0,0
  1115. Centre "Pre-Game Instruction Sequence"
  1116. Print 
  1117. Centre "By Mark Potter"
  1118. Print 
  1119. Print 
  1120. Print "Press a Key..."
  1121. Print 
  1122. Do 
  1123. If Inkey$<>"" Then Read A$ : Print A$ : Clear Key : If A$="END" Then Exit 
  1124. Loop 
  1125. Default 
  1126. Pop Proc
  1127. Data "Hello and welcome"
  1128. Data "To Devils Dittany"
  1129. Data ""
  1130. Data "This is an editorware game:"
  1131. Data "If you send me ï¿½5,"
  1132. Data "I'll send you the editor"
  1133. Data "My adress is:"
  1134. Data "Howefield"
  1135. Data "Baldersby"
  1136. Data "Thirsk"
  1137. Data "North Yorkshire"
  1138. Data "YO7 4PZ"
  1139. Data ""
  1140. Data "Oh yes,enough money making,about the game..."
  1141. Data ""
  1142. Data "For one or two players,you each control a wizard bent on exterinating"
  1143. Data "the other one.Upon starting,first select 10 different spells"
  1144. Data "to use from the list provided.Once the game starts you will"
  1145. Data "find yourself standing in the middle of the screen."
  1146. Data "Control is by the joystick;to press a button on the panel,press fire,"
  1147. Data "move the pointer over the button, and let go."
  1148. Data "Buttons are (left-right,top-bottom)"
  1149. Data ""
  1150. Data "1:Herb list:there are 5 types of herb,which are required to cast most spells"
  1151. Data "99 doses of each Herb are picked up by walking over it."
  1152. Data "2:Cast spell"
  1153. Data "3:Change selected spell from list of 10"
  1154. Data "4:Pick up/drop object in hands"
  1155. Data "5:swap object in hand with a space in inventory"
  1156. Data "(second row:)"
  1157. Data "6:Use object in hand"
  1158. Data "7:Change character under your control"
  1159. Data ""
  1160. Data "END"
  1161. End Proc