home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / 551-575 / apd560 / amoner5 / biteme!.amos / biteme!.amosSourceCode < prev    next >
AMOS Source Code  |  1993-11-29  |  24KB  |  732 lines

  1. Rem ------------------------------------------------------------------------       
  2. Rem -- BiteMe! V0.9   Coding: Eric Askilsrud   Redlense@u.washington.edu  --       
  3. Rem --   June 92                               ^send me mail if you used  --     
  4. Rem --                                        this program. I wanna hear! -- 
  5. Rem ------------------------------------------------------------------------     
  6. Rem  
  7. Dim MAZEX(13,13),MX(13,13),MAZEY(13,13),MY(13,13),DX(11,11),BUGON(5),BUGX(5),BUGY(5),BUGDIR(5),SPECIAL(7),EXTRA(5),SX(7),SY(7),LEVEL$(11)
  8. MAIN:
  9. Gosub SETUP
  10. While INGAME=0
  11.    Gosub DEMO
  12.    Gosub INITGAME
  13.    Rem -------------------------------------------------------------- 
  14.    Rem --                 main game loop  
  15.    Rem -------------------------------------------------------------- 
  16.    While LIVES>0
  17.       If Chanmv(1)=0 Then Gosub MOVELADY
  18.       For CH=2 To 5
  19.          If BUGON(CH)=1 Then If Chanmv(CH)=0 Then Gosub BUGMOVE
  20.       Next 
  21.       B$=Inkey$ : If B$<>"" Then Gosub CHECKKEYS
  22.       If Amreg(0)=1 Then Amreg(0)=0 : Gosub RELEASEBUG
  23.       If Sprite Col(1)<>0 Then Gosub DIE
  24.       If Sprite Col(6)<>0 Then Gosub CHECKSK1
  25.       If Sprite Col(7)<>0 Then Gosub CHECKSK2
  26.       If Sprite Col(0)<>0 Then Gosub CHECKSK3
  27.    Wend 
  28.    Gosub CLEANUP
  29.    Locate ,6 : Centre "Game Over!"
  30.    Locate ,9 : Centre "Score: "+Str$(SCORE)
  31.    While Joy(1)<16 : Wend 
  32.    Rem -- if they got a highscore, get it 
  33. Wend 
  34. End 
  35. Rem -------------------------------- 
  36. Rem -- Your dead routine 
  37. Rem -------------------------------- 
  38. DIE:
  39. Boom : LIVES=LIVES-1
  40. If Col(6)=-1 Then DX(SX(6),SY(6))=0
  41. If Col(7)=-1 Then DX(SX(7),SY(7))=0
  42. If Col(0)=-1 Then DX(SX(0),SY(0))=0
  43. Amal Off 
  44. Fade 1,,,,,,,,,,,,,,,,,,,,$FF0
  45. Wait 15
  46. Fade 1,,,,,,,,,,,,,,,,,,,,$F0
  47. Wait 60
  48. Gosub CLEANUP
  49. Locate ,8 : Centre "Get Ready"
  50. Locate ,10 : Centre "Level"+Str$(LEVEL+OFFSET*10)
  51. Gosub PREPSCREEN
  52. Return 
  53. Rem ------------------ 
  54. Rem --check skulls  -- 
  55. Rem ------------------ 
  56. CHECKSK1:
  57. If Col(1)<>0 Then Return 
  58. DX(SX(6),SY(6))=0
  59. For CHAN=2 To 5
  60.    If Col(CHAN)=-1 Then Boom : Amal Off CHAN : BUGON(CHAN)=0 : BUGDIR(CHAN)=2 : DX(6,6)=LEVEL+30 : BUGX(CHAN)=6 : BUGY(CHAN)=6 : Sprite CHAN,X Hard(BUGX(CHAN)*19-13),Y Hard(BUGY(CHAN)*18-14),1+LEVEL*4 : Paste Icon 6*19-13,6*18-14,LEVEL+30
  61. Next 
  62. Sprite Off 6
  63. Return 
  64. CHECKSK2:
  65. If Col(1)<>0 Then Return 
  66. DX(SX(7),SY(7))=0
  67. For CHAN=2 To 5
  68.    If Col(CHAN)=-1 Then Boom : Amal Off CHAN : BUGON(CHAN)=0 : BUGDIR(CHAN)=2 : DX(6,6)=LEVEL+30 : BUGX(CHAN)=6 : BUGY(CHAN)=6 : Sprite CHAN,X Hard(BUGX(CHAN)*19-13),Y Hard(BUGY(CHAN)*18-14),1+LEVEL*4 : Paste Icon 6*19-13,6*18-14,LEVEL+30
  69. Next 
  70. Sprite Off 7
  71. Return 
  72. CHECKSK3:
  73. If Col(1)<>0 Then Return 
  74. DX(SX(0),SY(0))=0
  75. For CHAN=2 To 5
  76.    If Col(CHAN)=-1 Then Boom : Amal Off CHAN : BUGON(CHAN)=0 : BUGDIR(CHAN)=2 : DX(6,6)=LEVEL+30 : BUGX(CHAN)=6 : BUGY(CHAN)=6 : Sprite CHAN,X Hard(BUGX(CHAN)*19-13),Y Hard(BUGY(CHAN)*18-14),1+LEVEL*4 : Paste Icon 6*19-13,6*18-14,LEVEL+30
  77. Next 
  78. Sprite Off 0
  79. Return 
  80. Rem -------------------------------------------------------------- 
  81. Rem --      Enemy Movement routines
  82. Rem -------------------------------------------------------------- 
  83. BUGMOVE:
  84. Rem --if the bug is on the screen, and not moving, give it an instruction
  85. A$="" : SMART=Rnd(5)
  86. If SMART>2 Then Goto ACH
  87. Rem --keep going in the same dir 
  88. If BUGDIR(CH)=1 and BUGY(CH)<11 and MY(BUGX(CH),BUGY(CH)+1)=0 Then Inc BUGY(CH) : A$=GODOWN$ : Goto EATME
  89. If BUGDIR(CH)=2 and BUGY(CH)>1 and MY(BUGX(CH),BUGY(CH))=0 Then Dec BUGY(CH) : A$=GOUP$ : Goto EATME
  90. If BUGDIR(CH)=3 and BUGX(CH)>1 and MX(BUGX(CH),BUGY(CH))=0 Then Dec BUGX(CH) : A$=GOLEFT$ : Goto EATME
  91. If BUGDIR(CH)=4 and BUGX(CH)<11 and MX(BUGX(CH)+1,BUGY(CH))=0 Then Inc BUGX(CH) : A$=GORIGHT$ : Goto EATME
  92. ACH:
  93. Rem --find the smartest dir to go, but, unless extra smart, not backwards  
  94. If LBY>BUGY(CH) and BUGDIR(CH)<>2 and MY(BUGX(CH),BUGY(CH)+1)=0 Then Inc BUGY(CH) : A$=GODOWN$ : BUGDIR(CH)=1 : Goto EATME
  95. If LBY<BUGY(CH) and BUGDIR(CH)<>1 and MY(BUGX(CH),BUGY(CH))=0 Then Dec BUGY(CH) : A$=GOUP$ : BUGDIR(CH)=2 : Goto EATME
  96. If LBX<BUGX(CH) and BUGDIR(CH)<>4 and MX(BUGX(CH),BUGY(CH))=0 Then Dec BUGX(CH) : A$=GOLEFT$ : BUGDIR(CH)=3 : Goto EATME
  97. If LBX>BUGX(CH) and BUGDIR(CH)<>3 and MX(BUGX(CH)+1,BUGY(CH))=0 Then Inc BUGX(CH) : A$=GORIGHT$ : BUGDIR(CH)=4 : Goto EATME
  98. Rem --if still havent found a dir to go, go left or right, otherwise straight
  99. LR=Rnd(1)+1
  100. Rem -- try going right,try going left,try going straight, otherwise backwards  
  101. If LR=1 Then On BUGDIR(CH) Goto LEFT1,LEFT2,LEFT3,LEFT4
  102. On BUGDIR(CH) Goto BUG1,BUG2,BUG3,BUG4
  103. BUG1:
  104. If BUGX(CH)<11 and MX(BUGX(CH)+1,BUGY(CH))=0 Then Inc BUGX(CH) : A$=GORIGHT$ : BUGDIR(CH)=4 : Goto EATME
  105. LEFT1:
  106. If BUGX(CH)>1 and MX(BUGX(CH),BUGY(CH))=0 Then Dec BUGX(CH) : A$=GOLEFT$ : BUGDIR(CH)=3 : Goto EATME
  107. If BUGY(CH)<11 and MY(BUGX(CH),BUGY(CH)+1)=0 Then Inc BUGY(CH) : A$=GODOWN$ : Goto EATME
  108. Dec BUGY(CH) : A$=GOUP$ : BUGDIR(CH)=2 : Goto EATME
  109. BUG2:
  110. If BUGX(CH)>1 and MX(BUGX(CH),BUGY(CH))=0 Then Dec BUGX(CH) : A$=GOLEFT$ : BUGDIR(CH)=3 : Goto EATME
  111. LEFT2:
  112. If BUGX(CH)<11 and MX(BUGX(CH)+1,BUGY(CH))=0 Then Inc BUGX(CH) : A$=GORIGHT$ : BUGDIR(CH)=4 : Goto EATME
  113. If BUGY(CH)>1 and MY(BUGX(CH),BUGY(CH))=0 Then Dec BUGY(CH) : A$=GOUP$ : Goto EATME
  114. Inc BUGY(CH) : A$=GODOWN$ : BUGDIR(CH)=1 : Goto EATME
  115. BUG3:
  116. If BUGY(CH)<11 and MY(BUGX(CH),BUGY(CH)+1)=0 Then Inc BUGY(CH) : A$=GODOWN$ : BUGDIR(CH)=1 : Goto EATME
  117. LEFT3:
  118. If BUGY(CH)>1 and MY(BUGX(CH),BUGY(CH))=0 Then Dec BUGY(CH) : A$=GOUP$ : BUGDIR(CH)=2 : Goto EATME
  119. If BUGX(CH)>1 and MX(BUGX(CH),BUGY(CH))=0 Then Dec BUGX(CH) : A$=GOLEFT$ : Goto EATME
  120. Inc BUGX(CH) : A$=GORIGHT$ : BUGDIR(CH)=4 : Goto EATME
  121. BUG4:
  122. If BUGDIR(CH)=4 and BUGY(CH)>1 and MY(BUGX(CH),BUGY(CH))=0 Then Dec BUGY(CH) : A$=GOUP$ : BUGDIR(CH)=2 : Goto EATME
  123. LEFT4:
  124. If BUGY(CH)<11 and MY(BUGX(CH),BUGY(CH)+1)=0 Then Inc BUGY(CH) : A$=GODOWN$ : BUGDIR(CH)=1 : Goto EATME
  125. If BUGX(CH)<11 and MX(BUGX(CH)+1,BUGY(CH))=0 Then Inc BUGX(CH) : A$=GORIGHT$ : Goto EATME
  126. Dec BUGX(CH) : A$=GOLEFT$ : BUGDIR(CH)=3 : Goto EATME
  127. EATME:
  128. If A$<>"" Then Amal CH,A$ : Amal On CH
  129. Return 
  130. Rem ---------------------------------------- 
  131. Rem     Ladybug movement routine 
  132. Rem ---------------------------------------- 
  133. MOVELADY:
  134. A$=""
  135. K=Joy(1)
  136. If K=0 Then Return 
  137. Bar LBX*19-12,LBY*18-13 To LBX*19+2,LBY*18
  138. If K>16 Then K=K-16
  139. If K=1 and LBY>1 and MY(LBX,LBY)=0 Then Dec LBY : A$=LADYUP$ : Goto SHITME
  140. If K=2 and LBY<11 and MY(LBX,LBY+1)=0 Then Inc LBY : A$=LADYDOWN$ : Goto SHITME
  141. If K=4 and LBX>1 and MX(LBX,LBY)=0 Then Dec LBX : A$=LADYLEFT$ : Goto SHITME
  142. If K=8 and LBX<11 and MX(LBX+1,LBY)=0 Then Inc LBX : A$=LADYRIGHT$ : Goto SHITME
  143. Rem --check to see if going thru turnstiles  
  144. If K=1 and LBY>1 and MY(LBX,LBY)=2 Then Goto TURNCLOCKUP
  145. If K=2 and LBY<11 and MY(LBX,LBY+1)=2 Then Goto TURNCOUNTDOWN
  146. If K=4 and LBX>1 and MX(LBX,LBY)=2 Then Goto TURNCOUNTLEFT
  147. If K=8 and LBX<11 and MX(LBX+1,LBY)=2 Then Goto TURNCLOCKRIGHT
  148. If K=1 and LBY>1 and MY(LBX,LBY)=3 Then Goto TURNCOUNTUP
  149. If K=2 and LBY<11 and MY(LBX,LBY+1)=3 Then Goto TURNCLOCKDOWN
  150. If K=4 and LBX>1 and MX(LBX,LBY)=3 Then Goto TURNCLOCKLEFT
  151. If K=8 and LBX<11 and MX(LBX+1,LBY)=3 Then Goto TURNCOUNTRIGHT
  152. SHITME:
  153. If A$<>"" Then Amal 1,A$ : Amal On 1
  154. If DX(LBX,LBY)=1 Then DX(LBX,LBY)=0 : FOODLEFT=FOODLEFT-1 : SCORE=SCORE+10*MULTIPLIER : Gosub SCOREUPDATE : Shoot 
  155. If DX(LBX,LBY)>2 and DX(LBX,LBY)<27 Then Gosub CHECKCOLOR
  156. If DX(LBX,LBY)>29 and VEGE=0 Then Wait 20 : Bell 1 : For Z=2 To 5 : Amal Z,"M 0,0,400" : Amal On Z : Next : SCORE=SCORE+500+LEVEL*500 : Gosub SCOREUPDATE : DX(LBX,LBY)=0
  157. If DX(LBX,LBY)>29 and VEGE=1 Then Bell 1 : FOODLEFT=FOODLEFT-1 : SCORE=SCORE+500 : Gosub SCOREUPDATE : DX(LBX,LBY)=0
  158. If FOODLEFT<1 and VEGE=1 Then Return 
  159. If FOODLEFT<1 Then Wait 20 : Amal Off : Wait 80 : LEVEL=LEVEL+1 : Gosub CLEANUP : Locate ,4 : Centre "Get Ready" : Locate ,6 : Centre "Level"+Str$(LEVEL+OFFSET*10) : Locate ,8 : Centre("("+LEVEL$(LEVEL)+")") : Gosub NEWLEVEL : Gosub PREPSCREEN
  160. Return 
  161. Rem ------------------------------------------ 
  162. Rem --     
  163. Rem ------------------------------------------ 
  164. CHECKCOLOR:
  165. Bell 1
  166. If Colour(12)=$F00 Then Goto RED
  167. If Colour(12)=$FF0 Then Goto YELLOW
  168. If DX(LBX,LBY)=3 and Colour(12)=$F Then Inc BONUS : Gosub HEART
  169. TAKEMEBACK:
  170. FOODLEFT=FOODLEFT-1
  171. DX(LBX,LBY)=0
  172. Return 
  173. HEART:
  174. If BONUS=1 Then Paste Icon 235,129,26 : MULTIPLIER=2
  175. If BONUS=2 Then Paste Icon 260,129,27 : MULTIPLIER=3
  176. If BONUS=3 Then Paste Icon 286,129,28 : MULTIPLIER=5
  177. SCORE=SCORE+MULTIPLIER*100 : Gosub SCOREUPDATE
  178. Return 
  179. RED:
  180. SCORE=SCORE+100*MULTIPLIER : Gosub SCOREUPDATE
  181. If DX(LBX,LBY)=4 Then SPECIAL(1)=1 : Paste Icon 228,58,14 : Gosub CHSPECIAL
  182. If DX(LBX,LBY)=5 Then SPECIAL(2)=1 : Paste Icon 241,58,15 : Gosub CHSPECIAL
  183. If DX(LBX,LBY)=6 Then SPECIAL(3)=1 : Paste Icon 252,58,16 : Gosub CHSPECIAL
  184. If DX(LBX,LBY)=7 Then SPECIAL(4)=1 : Paste Icon 265,58,17 : Gosub CHSPECIAL
  185. If DX(LBX,LBY)=8 Then SPECIAL(5)=1 : Paste Icon 278,58,18 : Gosub CHSPECIAL
  186. If DX(LBX,LBY)=9 Then SPECIAL(6)=1 : Paste Icon 288,58,19 : Gosub CHSPECIAL
  187. If DX(LBX,LBY)=10 Then SPECIAL(7)=1 : Paste Icon 303,58,20 : Gosub CHSPECIAL
  188. Goto TAKEMEBACK
  189. YELLOW:
  190. SCORE=SCORE+50*MULTIPLIER : Gosub SCOREUPDATE
  191. If DX(LBX,LBY)=6 Then EXTRA(1)=1 : Paste Icon 235,93,21 : Gosub CHEXTRA
  192. If DX(LBX,LBY)=11 Then EXTRA(2)=1 : Paste Icon 249,93,22 : Gosub CHEXTRA
  193. If DX(LBX,LBY)=12 Then EXTRA(3)=1 : Paste Icon 263,93,23 : Gosub CHEXTRA
  194. If DX(LBX,LBY)=13 Then EXTRA(4)=1 : Paste Icon 276,93,24 : Gosub CHEXTRA
  195. If DX(LBX,LBY)=9 Then EXTRA(5)=1 : Paste Icon 291,93,25 : Gosub CHEXTRA
  196. Goto TAKEMEBACK
  197. Rem -------------------------------------------------------------
  198. Rem --     Turnstile rotating routines 
  199. Rem -------------------------------------------------------------
  200. TURNCLOCKLEFT:
  201. MX(LBX,LBY)=0
  202. MX(LBX,LBY-1)=0
  203. MY(LBX-1,LBY)=2
  204. MY(LBX,LBY)=3
  205. TX=LBX-1 : TY=LBY-1
  206. LBX=LBX-1 : A$=LADYLEFT$
  207. Bell 
  208. Gosub HORIZONTAL
  209. Goto SHITME
  210. TURNCLOCKRIGHT:
  211. MX(LBX+1,LBY)=0
  212. MX(LBX+1,LBY+1)=0
  213. MY(LBX,LBY+1)=2
  214. MY(LBX+1,LBY+1)=3
  215. TX=LBX : TY=LBY
  216. Inc LBX : A$=LADYRIGHT$
  217. Bell 
  218. Gosub HORIZONTAL
  219. Goto SHITME
  220. TURNCLOCKUP:
  221. MY(LBX,LBY)=0
  222. MY(LBX+1,LBY)=0
  223. MX(LBX+1,LBY-1)=2
  224. MX(LBX+1,LBY)=3
  225. TX=LBX : TY=LBY-1
  226. LBY=LBY-1 : A$=LADYUP$
  227. Bell 
  228. Gosub VERTICAL
  229. Goto SHITME
  230. TURNCLOCKDOWN:
  231. MY(LBX,LBY+1)=0
  232. MY(LBX-1,LBY+1)=0
  233. MX(LBX,LBY)=2
  234. MX(LBX,LBY+1)=3
  235. TX=LBX-1 : TY=LBY
  236. Inc LBY : A$=LADYDOWN$
  237. Bell 
  238. Gosub VERTICAL
  239. Goto SHITME
  240. TURNCOUNTLEFT:
  241. MX(LBX,LBY)=0
  242. MX(LBX,LBY+1)=0
  243. MY(LBX,LBY+1)=3
  244. MY(LBX-1,LBY+1)=2
  245. TX=LBX-1 : TY=LBY
  246. LBX=LBX-1 : A$=LADYLEFT$
  247. Bell 
  248. Gosub HORIZONTAL
  249. Goto SHITME
  250. TURNCOUNTRIGHT:
  251. MX(LBX+1,LBY-1)=0
  252. MX(LBX+1,LBY)=0
  253. MY(LBX,LBY)=2
  254. MY(LBX+1,LBY)=3
  255. TX=LBX : TY=LBY-1
  256. Inc LBX : A$=LADYRIGHT$
  257. Bell 
  258. Gosub HORIZONTAL
  259. Goto SHITME
  260. TURNCOUNTUP:
  261. MY(LBX,LBY)=0
  262. MY(LBX-1,LBY)=0
  263. MX(LBX,LBY)=3
  264. MX(LBX,LBY-1)=2
  265. TX=LBX-1 : TY=LBY-1
  266. LBY=LBY-1 : A$=LADYUP$
  267. Bell 
  268. Gosub VERTICAL
  269. Goto SHITME
  270. TURNCOUNTDOWN:
  271. MY(LBX,LBY+1)=0
  272. MY(LBX+1,LBY+1)=0
  273. MX(LBX+1,LBY)=2
  274. MX(LBX+1,LBY+1)=3
  275. TX=LBX : TY=LBY
  276. Inc LBY : A$=LADYDOWN$
  277. Bell 
  278. Gosub VERTICAL
  279. Goto SHITME
  280. Rem ---------------------------------- 
  281. Rem --      Redraw Turnstile        -- 
  282. Rem ---------------------------------- 
  283. HORIZONTAL:
  284. Paste Icon TX*19-12,TY*18-13,1
  285. Return 
  286. VERTICAL:
  287. Paste Icon TX*19-12,TY*18-13,2
  288. Return 
  289. Rem ---------------------------------------------------------------- 
  290. Rem --      setup  (get all bobs, icons, etc, used for game) 
  291. Rem ---------------------------------------------------------------- 
  292. SETUP:
  293. Randomize Timer
  294. Screen Open 0,320,204,2,0
  295. Hide 
  296. Curs Off 
  297. Paper 0 : Cls 
  298. Auto View Off 
  299. Rem Load "df0:newbank.abk" 
  300. Screen Open 1,320,204,16,0
  301. Screen Open 2,320,204,16,0
  302. Screen Open 3,320,204,2,0
  303. Screen Hide 1
  304. Screen Hide 2
  305. Screen Hide 3
  306. Screen To Front 0
  307. Auto View Off 
  308. Unpack 5 To 1
  309. Wait Vbl 
  310. Screen To Front 0
  311. Auto View Off 
  312. Unpack 6 To 3
  313. Screen To Front 0
  314. Rem Screen Show 1
  315. Rem Screen 2 
  316. Rem Load "empty:gameparts.abk" 
  317. Make Mask 
  318. Screen Hide 2
  319. Screen To Front 0
  320. Rem Screen Show 2
  321. Make Icon Mask 
  322. For Y=1 To 11
  323.    For X=1 To 12
  324.       Read MAZEX(X,Y)
  325.    Next 
  326. Next 
  327. For Y=1 To 12
  328.    For X=1 To 11
  329.       Read MAZEY(X,Y)
  330.    Next 
  331. Next 
  332. For Z=1 To 11
  333.    Read LEVEL$(Z)
  334. Next 
  335. Channel 1 To Sprite 1
  336. Channel 2 To Sprite 2
  337. Channel 3 To Sprite 3
  338. Channel 4 To Sprite 4
  339. Channel 5 To Sprite 5
  340. Hide 
  341. Curs Off 
  342. Update Every 2
  343. Screen 2 : Curs Off 
  344. Flash Off 
  345. Flash 12,"(00F,400)(FF0,200)(F00,100)"
  346. Rem - screen colours 
  347. Colour 5,$FFF
  348. Colour 7,$99F
  349. Colour 8,$F00
  350. Colour 9,$FF0
  351. Colour 10,$F
  352. Colour 13,$0
  353. Colour 14,$F77
  354. Rem --sprite 0/1 
  355. Colour 17,$FFF
  356. Colour 18,$F77
  357. Colour 19,$F00
  358. Rem --sprite 6/7 
  359. Colour 29,$FFF
  360. Screen To Front 0
  361. Screen 0 : Screen To Front 0
  362. Auto View On 
  363. Data 0,0,0,0,0,0,0,0,0,0,0,0
  364. Data 0,1,0,1,2,1,1,2,1,0,1,0
  365. Data 0,2,0,0,3,0,0,3,0,0,2,0
  366. Data 0,3,1,0,0,1,1,0,0,1,3,0
  367. Data 0,0,0,1,0,0,0,0,1,0,0,0
  368. Data 0,0,1,2,1,1,1,1,2,1,0,0
  369. Data 0,1,2,3,2,0,0,2,3,2,1,0
  370. Data 0,1,3,1,3,1,1,3,1,3,1,0
  371. Data 0,0,0,0,0,0,0,0,0,0,0,0
  372. Data 0,1,0,0,0,1,1,0,0,0,1,0
  373. Data 0,0,0,0,0,0,0,0,0,0,0,0
  374. Rem ---
  375. Data 0,0,0,0,0,0,0,0,0,0,0
  376. Data 0,2,3,0,1,0,1,0,2,3,0
  377. Data 0,1,0,0,0,0,0,0,0,1,0
  378. Data 0,0,2,3,1,0,1,2,3,0,0
  379. Data 0,1,0,2,3,0,2,3,0,1,0
  380. Data 0,1,0,0,0,0,0,0,0,1,0
  381. Data 0,0,0,0,0,1,0,0,0,0,0
  382. Data 0,0,0,0,0,0,0,0,0,0,0
  383. Data 0,1,0,0,1,0,1,0,0,1,0
  384. Data 0,1,1,2,3,0,2,3,1,1,0
  385. Data 0,2,3,1,0,0,0,1,2,3,0
  386. Data 0,0,0,0,0,0,0,0,0,0,0
  387. Data "Cucumber","Carrot","Radish","Potato","Celery","Onion","Eggplant","Tomato"
  388. Data "Cauliflower","Broccoli","Cucumber"
  389. Return 
  390. Rem -----------------------------------------------------------
  391. Rem --   Initialize stuff for a game  -------------------------
  392. Rem -----------------------------------------------------------
  393. INITGAME:
  394. LIVES=5
  395. LEVEL=1 : OFFSET=0
  396. SCORE=0
  397. For Z=1 To 7 : SPECIAL(Z)=0 : Next 
  398. For Z=1 To 5 : EXTRA(Z)=0 : Next 
  399. Gosub NEWLEVEL
  400. Gosub PREPSCREEN
  401. Return 
  402. Rem -----------------------------------------------------------
  403. Rem --      Stuff thats to be done with every NEW level      --
  404. Rem -----------------------------------------------------------
  405. NEWLEVEL:
  406. Rem --make new working copy (mx,my) of official maze data (mazex,mazey)
  407. For Y=1 To 11
  408.    For X=1 To 12
  409.       MX(X,Y)=MAZEX(X,Y)
  410.    Next 
  411. Next 
  412. For Y=1 To 12
  413.    For X=1 To 11
  414.       MY(X,Y)=MAZEY(X,Y)
  415.    Next 
  416. Next 
  417. For Y=1 To 11
  418.    For X=1 To 11
  419.       DX(X,Y)=1
  420.    Next 
  421. Next 
  422. DX(6,6)=30+LEVEL : Rem --put vegetable in bugbox
  423. DX(6,9)=0
  424. FOODLEFT=119
  425. Rem --add assorted goodies to maze 
  426. Rem --add skulls 
  427. Z=0
  428. While Z<3
  429.    ZX=Rnd(11) : ZY=Rnd(11)
  430.    If DX(ZX,ZY)=1 Then DX(ZX,ZY)=2 : FOODLEFT=FOODLEFT-1 : Inc Z
  431. Wend 
  432. Rem --add hearts 
  433. Z=0
  434. While Z<3
  435.    ZX=Rnd(11) : ZY=Rnd(11)
  436.    If DX(ZX,ZY)=1 Then DX(ZX,ZY)=3 : Inc Z
  437. Wend 
  438. Rem --add  letters 
  439. Z=0
  440. While Z<3
  441.    ZX=Rnd(11) : ZY=Rnd(11)
  442.    If DX(ZX,ZY)=1 Then DX(ZX,ZY)=Rnd(9)+4 : Inc Z
  443. Wend 
  444. BONUS=0
  445. Screen 2
  446. If LEVEL>10 Then LEVEL=LEVEL-10 : OFFSET=OFFSET+1
  447. If LEVEL=1 Then Palette $0,$676,$6D7,$657,$F97,,$556,,,,,$6D7,,,,$667,,,,,,$1DB,$557,,,$1DB,$557
  448. If LEVEL=2 Then Palette $0,$49A,$6D7,$645,$FFF,,$578,,,,,$F91,,,,$C04,,,,,,$12,$565,$EC6,,$12,$565,$EC6
  449. If LEVEL=3 Then Palette $0,$432,$6D7,$645,$5B5,,$560,,,,,$F91,,,,$C04,,,,,,$CDB,$876,$666,,$CDB,$876,$666
  450. If LEVEL=4 Then Palette $0,$646,$952,$620,$FA5,,$520,,,,,$F91,,,,$C04,,,,,,,$B00,$CA6,,,$B00,$CA6
  451. If LEVEL=5 Then Palette $0,$171,$6D7,$620,$FF5,,$520,,,,,$E0,,,,$E0,,,,,,,$547,$B8D,$959,,$547,$B8D,$959
  452. If LEVEL=6 Then Palette $0,$5,,$206,$E0,,$206,,,,,$E0,,,,,$F,,,,,,,$6BB,$55B,,,$6BB,$55B
  453. If LEVEL=7 Then Palette $0,$955,$B0F,$F66,$F67,,$E06,,,,,$FAA,,,,$BF,,,,,,,$E94,$F65,$D0,,$E94,$F65,$D0
  454. If LEVEL=8 Then Palette $0,$547,$6D7,$547,$557,,$547,,,,,$F8A,,,,$BF,,,,,,,$E8B,$6B6,$C96,,$E8B,$6B6,$C96
  455. If LEVEL=9 Then Palette $0,$5A7,,$C47,$567,,$547,,,,,$F8A,,,,$BF,,,,,,,$CFC,$673,$FF0,,$CFC,$673,$FF0
  456. If LEVEL=10 Then Palette $0,$5,$171,$577,$5A7,,$547,,,,,$5A4,,,,$BF,,,,,,,$FF6,$F55,$4BB,,$FF6,$F55,$4BB
  457. If LEVEL=1 Then SPEED$="25"
  458. If LEVEL=2 Then SPEED$="24"
  459. If LEVEL=3 Then SPEED$="23"
  460. If LEVEL=4 Then SPEED$="22"
  461. If LEVEL=5 Then SPEED$="21"
  462. If LEVEL=6 Then SPEED$="20"
  463. If LEVEL=7 Then SPEED$="19"
  464. If LEVEL=8 Then SPEED$="18"
  465. If LEVEL=9 Then SPEED$="17"
  466. If LEVEL=10 Then SPEED$="16"
  467. If OFFSET>0 Then SPEED$="14"
  468. LADYLEFT$="A1,(3,1) M -19,0,19"
  469. LADYRIGHT$="A1,(4,1) M 19,0,19"
  470. LADYUP$="A1,(2,1) M 0,-18,18"
  471. LADYDOWN$="A1,(1,1) M 0,18,18"
  472. GOLEFT$="A1,("+Str$(3+4*LEVEL)+",1) M -19,0,"+SPEED$
  473. GORIGHT$="A1,("+Str$(4+4*LEVEL)+",1) M 19,0,"+SPEED$
  474. GOUP$="A1,("+Str$(1+4*LEVEL)+",1) M 0,-18,"+SPEED$
  475. GODOWN$="A1,("+Str$(2+4*LEVEL)+",1) M 0,18,"+SPEED$
  476. MULTIPLIER=1
  477. Return 
  478. Rem -----------------------------------------------------------
  479. Rem             Draw the screen (with current data)
  480. Rem -----------------------------------------------------------  
  481. PREPSCREEN:
  482. If LIVES=0 Then Return 
  483. Screen 2
  484. Sprite Update : Paper 0
  485. Ink 0 : Bar 0,0 To 320,204 : Wait Vbl 
  486. Screen To Front 0
  487. Screen Copy 1 To 2
  488. Sprite Update Off 
  489. DX(6,6)=30+LEVEL
  490. Rem --draw turnstiles
  491. For Y=1 To 11
  492.    For X=1 To 12
  493.       If MX(X,Y)=2 Then Paste Icon X*19-31,Y*18-13,2
  494.    Next 
  495. Next 
  496. For Y=1 To 12
  497.    For X=1 To 11
  498.       If MY(X,Y)=2 Then Paste Icon X*19-12,Y*18-31,1
  499.    Next 
  500. Next 
  501. Rem --draw the dots, hearts, letters 
  502. N=6
  503. For X=1 To 11
  504.    For Y=1 To 11
  505.       If DX(X,Y)=2 Then Sprite N,X Hard(X*19-12),Y Hard(Y*18-13),49 : SX(N)=X : SY(N)=Y : Inc N : If N=8 Then N=0
  506.       Rem If DX(X,Y)=1 Then Ink 4 : Plot X*19-8,Y*18-8 
  507.       If DX(X,Y)=1 Then Paste Icon X*19-10,Y*18-11,30
  508.       If DX(X,Y)=3 Then Paste Icon X*19-10,Y*18-11,DX(X,Y)
  509.       If DX(X,Y)>3 and DX(X,Y)<29 Then Paste Icon X*19-10,Y*18-11,DX(X,Y)
  510.       If DX(X,Y)>29 Then Paste Icon X*19-12,Y*18-14,DX(X,Y)
  511.    Next 
  512. Next 
  513. Z=BONUS : If Z>0 Then For BONUS=1 To Z : Gosub HEART : Next : BONUS=Z
  514. If SPECIAL(1)=1 Then Paste Icon 228,58,14
  515. If SPECIAL(2)=1 Then Paste Icon 241,58,15
  516. If SPECIAL(3)=1 Then Paste Icon 252,58,16
  517. If SPECIAL(4)=1 Then Paste Icon 265,58,17
  518. If SPECIAL(5)=1 Then Paste Icon 278,58,18
  519. If SPECIAL(6)=1 Then Paste Icon 288,58,19
  520. If SPECIAL(7)=1 Then Paste Icon 303,58,20
  521. If EXTRA(1)=1 Then Paste Icon 235,93,21
  522. If EXTRA(2)=1 Then Paste Icon 249,93,22
  523. If EXTRA(3)=1 Then Paste Icon 263,93,23
  524. If EXTRA(4)=1 Then Paste Icon 276,93,24
  525. If EXTRA(5)=1 Then Paste Icon 291,93,25
  526. Colour 19,$F00
  527. Locate 31,20 : Print "Score:"
  528. Gosub SCOREUPDATE
  529. Locate 30,22 : Print "Level"; : Print LEVEL+OFFSET*10
  530. If LIVES>1 Then For Z=1 To LIVES-1 : Paste Icon 220+Z*15,190,29 : Next 
  531. Rem --put everybody in their starting places...
  532. For Z=2 To 5
  533.    BUGX(Z)=6 : BUGY(Z)=6 : BUGDIR(Z)=2 : BUGON(Z)=0
  534. Next 
  535. LBX=6 : LBY=9 : A$=""
  536. For Z=2 To 5
  537.    Sprite Z,X Hard(BUGX(2)*19-13),Y Hard(BUGY(2)*18-14),1+LEVEL*4
  538. Next 
  539. Set Rainbow 1,13,180,"","",""
  540. Rainbow 1,56,176,255
  541. Rain(1,83)=255
  542. Channel 6 To Rainbow 1
  543. Amreg(0)=0
  544. Amal 6,"L: L Y=176 Move 0,-150,200 L RA=1 P J L"
  545. Ink 1
  546. Screen 0 : Locate ,23 : Centre "press button.."
  547. While Joy(1)<16 : Wend 
  548. Screen 2
  549. Screen To Front 2 : Screen Show 2 : Auto View On 
  550. Sprite 1,X Hard(220+LIVES*15),Y Hard(189),3
  551. Sprite Update On 
  552. Amal 1,"M -"+Str$(119+LIVES*15)+",0,100"
  553. Amal On 1
  554. Wait 100
  555. Amal 1,"A1,(2,1) M 0,-41,30"
  556. Amal On 1
  557. Wait 30
  558. Amal On 6
  559. Return 
  560. Rem ---------------------------------------  
  561. Rem --        Release a bug  
  562. Rem ---------------------------------------  
  563. RELEASEBUG:
  564. Rem find a bug 
  565. FIND=0
  566. For Z=2 To 5
  567.    If BUGON(Z)=0 Then FIND=Z
  568. Next 
  569. If FIND<>0 Then Boom : BUGON(FIND)=1
  570. Return 
  571. Rem -----------------------------------------------------------
  572. Rem --             Check for EXTRA                           --
  573. Rem -----------------------------------------------------------
  574. CHEXTRA:
  575. WON=0
  576. For Z=1 To 5
  577.    If EXTRA(Z)=0 Then WON=1
  578. Next 
  579. If WON=1 Then Return 
  580. Wait 20 : Bell : Wait 5 : Bell : Wait 5 : Bell : Wait 20
  581. LIVES=LIVES+1 : For Z=1 To 5 : EXTRA(Z)=0 : Next : LEVEL=LEVEL+1
  582. Gosub CLEANUP
  583. Locate ,8 : Centre "Congratulations"
  584. Locate ,10 : Centre "you win an extra life!"
  585. Bell : Wait 5 : Boom : Wait 5 : Boom : Wait 5 : Boom 
  586. Rem ---------------- play music  
  587. Wait 200
  588. Locate ,13 : Centre "Next Level: "+LEVEL$(LEVEL)
  589. Gosub NEWLEVEL : Gosub PREPSCREEN
  590. Return 
  591. Rem -----------------------------------------------------------
  592. Rem --            Check for SPECIAL                          --
  593. Rem -----------------------------------------------------------
  594. CHSPECIAL:
  595. WON=0
  596. For Z=1 To 7
  597.    If SPECIAL(Z)=0 Then WON=1
  598. Next 
  599. If WON=1 Then Return 
  600. Wait 20 : Bell : Wait 5 : Bell : Wait 5 : Bell : Wait 20
  601. Gosub CLEANUP
  602. Locate ,4 : Centre "Great Job!"
  603. Locate ,6 : Centre "You've made it to the vegetable"
  604. Locate ,8 : Centre "harvest bonus screen!"
  605. OLDSCORE=SCORE
  606. Gosub VEGEGARDEN : LEVEL=LEVEL+1 : For Z=1 To 7 : SPECIAL(Z)=0 : Next 
  607. Gosub CLEANUP
  608. Locate ,2
  609. If FOODLEFT<>0 Then Centre "Out of Time!"
  610. If FOODLEFT=0 Then Centre "Great Job!" : Locate ,6 : Centre "+5000 Completion Bonus!"
  611. Locate ,4 : Centre "points earned: "+Str$(SCORE-OLDSCORE)
  612. Locate ,10 : Centre "Get Ready Level "+Str$(LEVEL+OFFSET*10)
  613. Locate ,12 : Centre "("+LEVEL$(LEVEL)+")"
  614. If FOODLEFT=0 Then SCORE=SCORE+5000
  615. Gosub NEWLEVEL : Gosub PREPSCREEN
  616. Return 
  617. Rem -----------------------------------------------------------
  618. Rem --  vegetable garden bonus screen                        --
  619. Rem -----------------------------------------------------------
  620. VEGEGARDEN:
  621. Rem --make new working copy (mx,my) of official maze data (mazex,mazey)
  622. For Y=1 To 11
  623.    For X=1 To 12
  624.       MX(X,Y)=MAZEX(X,Y)
  625.    Next 
  626. Next 
  627. For Y=1 To 12
  628.    For X=1 To 11
  629.       MY(X,Y)=MAZEY(X,Y)
  630.    Next 
  631. Next 
  632. For Y=1 To 11
  633.    For X=1 To 11
  634.       DX(X,Y)=0
  635.    Next 
  636. Next 
  637. FOODLEFT=30
  638. BONUS=0
  639. MULTIPLIER=1
  640. Rem -- add 30 vegetables 
  641. Z=0
  642. While Z<30
  643.    ZX=Rnd(10)+1 : ZY=Rnd(10)+1
  644.    If DX(ZX,ZY)=0 and(ZX<>6 and ZY<>9) Then DX(ZX,ZY)=Rnd(9)+31 : Inc Z
  645. Wend 
  646. Screen To Front 0
  647. Screen 2 : Ink 0 : Bar 0,0 To 320,204 : Wait Vbl 
  648. Screen Copy 1,0,0,218,204 To 2,0,0
  649. Palette ,$967,$6D7,$657,$CD7,,$556,,,,,$6A7,,,,$67
  650. Sprite Update Off 
  651. Rem --draw turnstiles
  652. For Y=1 To 11
  653.    For X=1 To 12
  654.       If MX(X,Y)=2 Then Paste Icon X*19-31,Y*18-13,2
  655.    Next 
  656. Next 
  657. For Y=1 To 12
  658.    For X=1 To 11
  659.       If MY(X,Y)=2 Then Paste Icon X*19-12,Y*18-31,1
  660.    Next 
  661. Next 
  662. Rem --draw the vegetables  
  663. For X=1 To 11
  664.    For Y=1 To 11
  665.       If DX(X,Y)>0 Then Paste Icon X*19-12,Y*18-14,DX(X,Y)
  666.    Next 
  667. Next 
  668. Colour 19,$F00
  669. Locate 31,3 : Print "Time"
  670. Locate 31,20 : Print "Score:"
  671. Gosub SCOREUPDATE
  672. Locate 28,17 : Print "Bonus Screen"
  673. LBX=6 : LBY=9 : A$=""
  674. Ink 1 : Screen 0 : Locate ,23 : Centre "press button.."
  675. While Joy(1)<16 : Wend 
  676. Screen 2
  677. Screen To Front 2
  678. Sprite 1,X Hard(220+LIVES*15),Y Hard(189),3
  679. Sprite Update On 
  680. Amal 1,"M -"+Str$(119+LIVES*15)+",0,100"
  681. Amal On 1
  682. Wait 100
  683. Amal 1,"A1,(2,1) M 0,-41,30"
  684. Amal On 1
  685. Wait 30
  686. VEGE=1 : W=Timer
  687. While Timer-W<1350 and FOODLEFT>0
  688.    If Chanmv(1)=0 Then Gosub MOVELADY
  689.    Locate 31,4 : Print Using "####";(W+1350)-Timer
  690. Wend 
  691. If FOODLEFT<>0 Then Amal Off : Wait 100
  692. If FOODLEFT=0 or ALL=1 Then Wait 30 : Bell : Wait 5 : Bell : Wait 5 : Bell : Wait 5 : Wait 70
  693. VEGE=0
  694. Return 
  695. DEMO:
  696. Gosub CLEANUP
  697. Screen Copy 3 To 0
  698. Colour 1,$FA8
  699. Wait 20
  700. Locate ,24 : Centre "Press button to start. Q to quit."
  701. GO=0
  702. While GO=0 and QUIT=0
  703.    K=Joy(1)
  704.    If K>15 Then GO=1
  705.    K$=Inkey$
  706.    If Upper$(K$)="Q" Then QUIT=1
  707.    If K$=Chr$(27) Then QUIT=1
  708. Wend : Cls 
  709. If QUIT=1
  710.    Run "autoexec.amos"
  711. End If 
  712. Colour 1,$FFF
  713. Locate ,2 : Centre "Bite Me! was written with Amos."
  714. Locate ,12 : Centre "Good Luck!"
  715. Locate ,7 : Centre "Level 1"
  716. Locate ,9 : Centre "("+LEVEL$(1)+")"
  717. Return 
  718. CLEANUP:
  719. Amal Off 6
  720. For Z=0 To 7 : Sprite Off Z : Next : Sprite Update 
  721. Screen 0 : Cls : Screen To Front 0
  722. Return 
  723. SCOREUPDATE:
  724. Locate 32,21 : Print Using "#######";SCORE
  725. Return 
  726. CHECKKEYS:
  727. If B$="p" Then Amal Freeze : While Inkey$="" : Wend : Amal On 
  728. If B$="q" Then LIVES=0
  729. If B$=Chr$(27) Then LIVES=0
  730. If B$="+" Then FOODLEFT=0 : Rem --Heres a cheat! press + to pass a level!  
  731. If B$="!" Then LIVES=LIVES+1 : Rem --Heres a cheat! press ! to get free guys! 
  732. Return