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
LEFT4:
If BUGY(CH)<11 and MY(BUGX(CH),BUGY(CH)+1)=0 Then Inc BUGY(CH) : A$=GODOWN$ : BUGDIR(CH)=1 : Goto EATME
If BUGX(CH)<11 and MX(BUGX(CH)+1,BUGY(CH))=0 Then Inc BUGX(CH) : A$=GORIGHT$ : Goto EATME
Dec BUGX(CH) : A$=GOLEFT$ : BUGDIR(CH)=3 : Goto EATME
EATME:
If A$<>"" Then Amal CH,A$ : Amal On CH
Return
Rem ----------------------------------------
Rem Ladybug movement routine
Rem ----------------------------------------
MOVELADY:
A$=""
K=Joy(1)
If K=0 Then Return
Bar LBX*19-12,LBY*18-13 To LBX*19+2,LBY*18
If K>16 Then K=K-16
If K=1 and LBY>1 and MY(LBX,LBY)=0 Then Dec LBY : A$=LADYUP$ : Goto SHITME
If K=2 and LBY<11 and MY(LBX,LBY+1)=0 Then Inc LBY : A$=LADYDOWN$ : Goto SHITME
If K=4 and LBX>1 and MX(LBX,LBY)=0 Then Dec LBX : A$=LADYLEFT$ : Goto SHITME
If K=8 and LBX<11 and MX(LBX+1,LBY)=0 Then Inc LBX : A$=LADYRIGHT$ : Goto SHITME
Rem --check to see if going thru turnstiles
If K=1 and LBY>1 and MY(LBX,LBY)=2 Then Goto TURNCLOCKUP
If K=2 and LBY<11 and MY(LBX,LBY+1)=2 Then Goto TURNCOUNTDOWN
If K=4 and LBX>1 and MX(LBX,LBY)=2 Then Goto TURNCOUNTLEFT
If K=8 and LBX<11 and MX(LBX+1,LBY)=2 Then Goto TURNCLOCKRIGHT
If K=1 and LBY>1 and MY(LBX,LBY)=3 Then Goto TURNCOUNTUP
If K=2 and LBY<11 and MY(LBX,LBY+1)=3 Then Goto TURNCLOCKDOWN
If K=4 and LBX>1 and MX(LBX,LBY)=3 Then Goto TURNCLOCKLEFT
If K=8 and LBX<11 and MX(LBX+1,LBY)=3 Then Goto TURNCOUNTRIGHT
SHITME:
If A$<>"" Then Amal 1,A$ : Amal On 1
If DX(LBX,LBY)=1 Then DX(LBX,LBY)=0 : FOODLEFT=FOODLEFT-1 : SCORE=SCORE+10*MULTIPLIER : Gosub SCOREUPDATE : Shoot
If DX(LBX,LBY)>2 and DX(LBX,LBY)<27 Then Gosub CHECKCOLOR
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
If DX(LBX,LBY)>29 and VEGE=1 Then Bell 1 : FOODLEFT=FOODLEFT-1 : SCORE=SCORE+500 : Gosub SCOREUPDATE : DX(LBX,LBY)=0
If FOODLEFT<1 and VEGE=1 Then Return
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
Return
Rem ------------------------------------------
Rem --
Rem ------------------------------------------
CHECKCOLOR:
Bell 1
If Colour(12)=$F00 Then Goto RED
If Colour(12)=$FF0 Then Goto YELLOW
If DX(LBX,LBY)=3 and Colour(12)=$F Then Inc BONUS : Gosub HEART
TAKEMEBACK:
FOODLEFT=FOODLEFT-1
DX(LBX,LBY)=0
Return
HEART:
If BONUS=1 Then Paste Icon 235,129,26 : MULTIPLIER=2
If BONUS=2 Then Paste Icon 260,129,27 : MULTIPLIER=3
If BONUS=3 Then Paste Icon 286,129,28 : MULTIPLIER=5
SCORE=SCORE+MULTIPLIER*100 : Gosub SCOREUPDATE
Return
RED:
SCORE=SCORE+100*MULTIPLIER : Gosub SCOREUPDATE
If DX(LBX,LBY)=4 Then SPECIAL(1)=1 : Paste Icon 228,58,14 : Gosub CHSPECIAL
If DX(LBX,LBY)=5 Then SPECIAL(2)=1 : Paste Icon 241,58,15 : Gosub CHSPECIAL
If DX(LBX,LBY)=6 Then SPECIAL(3)=1 : Paste Icon 252,58,16 : Gosub CHSPECIAL
If DX(LBX,LBY)=7 Then SPECIAL(4)=1 : Paste Icon 265,58,17 : Gosub CHSPECIAL
If DX(LBX,LBY)=8 Then SPECIAL(5)=1 : Paste Icon 278,58,18 : Gosub CHSPECIAL
If DX(LBX,LBY)=9 Then SPECIAL(6)=1 : Paste Icon 288,58,19 : Gosub CHSPECIAL
If DX(LBX,LBY)=10 Then SPECIAL(7)=1 : Paste Icon 303,58,20 : Gosub CHSPECIAL
Goto TAKEMEBACK
YELLOW:
SCORE=SCORE+50*MULTIPLIER : Gosub SCOREUPDATE
If DX(LBX,LBY)=6 Then EXTRA(1)=1 : Paste Icon 235,93,21 : Gosub CHEXTRA
If DX(LBX,LBY)=11 Then EXTRA(2)=1 : Paste Icon 249,93,22 : Gosub CHEXTRA
If DX(LBX,LBY)=12 Then EXTRA(3)=1 : Paste Icon 263,93,23 : Gosub CHEXTRA
If DX(LBX,LBY)=13 Then EXTRA(4)=1 : Paste Icon 276,93,24 : Gosub CHEXTRA
If DX(LBX,LBY)=9 Then EXTRA(5)=1 : Paste Icon 291,93,25 : Gosub CHEXTRA
Goto TAKEMEBACK
Rem -------------------------------------------------------------
Rem -- Turnstile rotating routines
Rem -------------------------------------------------------------
TURNCLOCKLEFT:
MX(LBX,LBY)=0
MX(LBX,LBY-1)=0
MY(LBX-1,LBY)=2
MY(LBX,LBY)=3
TX=LBX-1 : TY=LBY-1
LBX=LBX-1 : A$=LADYLEFT$
Bell
Gosub HORIZONTAL
Goto SHITME
TURNCLOCKRIGHT:
MX(LBX+1,LBY)=0
MX(LBX+1,LBY+1)=0
MY(LBX,LBY+1)=2
MY(LBX+1,LBY+1)=3
TX=LBX : TY=LBY
Inc LBX : A$=LADYRIGHT$
Bell
Gosub HORIZONTAL
Goto SHITME
TURNCLOCKUP:
MY(LBX,LBY)=0
MY(LBX+1,LBY)=0
MX(LBX+1,LBY-1)=2
MX(LBX+1,LBY)=3
TX=LBX : TY=LBY-1
LBY=LBY-1 : A$=LADYUP$
Bell
Gosub VERTICAL
Goto SHITME
TURNCLOCKDOWN:
MY(LBX,LBY+1)=0
MY(LBX-1,LBY+1)=0
MX(LBX,LBY)=2
MX(LBX,LBY+1)=3
TX=LBX-1 : TY=LBY
Inc LBY : A$=LADYDOWN$
Bell
Gosub VERTICAL
Goto SHITME
TURNCOUNTLEFT:
MX(LBX,LBY)=0
MX(LBX,LBY+1)=0
MY(LBX,LBY+1)=3
MY(LBX-1,LBY+1)=2
TX=LBX-1 : TY=LBY
LBX=LBX-1 : A$=LADYLEFT$
Bell
Gosub HORIZONTAL
Goto SHITME
TURNCOUNTRIGHT:
MX(LBX+1,LBY-1)=0
MX(LBX+1,LBY)=0
MY(LBX,LBY)=2
MY(LBX+1,LBY)=3
TX=LBX : TY=LBY-1
Inc LBX : A$=LADYRIGHT$
Bell
Gosub HORIZONTAL
Goto SHITME
TURNCOUNTUP:
MY(LBX,LBY)=0
MY(LBX-1,LBY)=0
MX(LBX,LBY)=3
MX(LBX,LBY-1)=2
TX=LBX-1 : TY=LBY-1
LBY=LBY-1 : A$=LADYUP$
Bell
Gosub VERTICAL
Goto SHITME
TURNCOUNTDOWN:
MY(LBX,LBY+1)=0
MY(LBX+1,LBY+1)=0
MX(LBX+1,LBY)=2
MX(LBX+1,LBY+1)=3
TX=LBX : TY=LBY
Inc LBY : A$=LADYDOWN$
Bell
Gosub VERTICAL
Goto SHITME
Rem ----------------------------------
Rem -- Redraw Turnstile --
Rem ----------------------------------
HORIZONTAL:
Paste Icon TX*19-12,TY*18-13,1
Return
VERTICAL:
Paste Icon TX*19-12,TY*18-13,2
Return
Rem ----------------------------------------------------------------
Rem -- setup (get all bobs, icons, etc, used for game)
Rem ----------------------------------------------------------------
SETUP:
Randomize Timer
Screen Open 0,320,204,2,0
Hide
Curs Off
Paper 0 : Cls
Auto View Off
Rem Load "df0:newbank.abk"
Screen Open 1,320,204,16,0
Screen Open 2,320,204,16,0
Screen Open 3,320,204,2,0
Screen Hide 1
Screen Hide 2
Screen Hide 3
Screen To Front 0
Auto View Off
Unpack 5 To 1
Wait Vbl
Screen To Front 0
Auto View Off
Unpack 6 To 3
Screen To Front 0
Rem Screen Show 1
Rem Screen 2
Rem Load "empty:gameparts.abk"
Make Mask
Screen Hide 2
Screen To Front 0
Rem Screen Show 2
Make Icon Mask
For Y=1 To 11
For X=1 To 12
Read MAZEX(X,Y)
Next
Next
For Y=1 To 12
For X=1 To 11
Read MAZEY(X,Y)
Next
Next
For Z=1 To 11
Read LEVEL$(Z)
Next
Channel 1 To Sprite 1
Channel 2 To Sprite 2
Channel 3 To Sprite 3
Channel 4 To Sprite 4
Channel 5 To Sprite 5
Hide
Curs Off
Update Every 2
Screen 2 : Curs Off
Flash Off
Flash 12,"(00F,400)(FF0,200)(F00,100)"
Rem - screen colours
Colour 5,$FFF
Colour 7,$99F
Colour 8,$F00
Colour 9,$FF0
Colour 10,$F
Colour 13,$0
Colour 14,$F77
Rem --sprite 0/1
Colour 17,$FFF
Colour 18,$F77
Colour 19,$F00
Rem --sprite 6/7
Colour 29,$FFF
Screen To Front 0
Screen 0 : Screen To Front 0
Auto View On
Data 0,0,0,0,0,0,0,0,0,0,0,0
Data 0,1,0,1,2,1,1,2,1,0,1,0
Data 0,2,0,0,3,0,0,3,0,0,2,0
Data 0,3,1,0,0,1,1,0,0,1,3,0
Data 0,0,0,1,0,0,0,0,1,0,0,0
Data 0,0,1,2,1,1,1,1,2,1,0,0
Data 0,1,2,3,2,0,0,2,3,2,1,0
Data 0,1,3,1,3,1,1,3,1,3,1,0
Data 0,0,0,0,0,0,0,0,0,0,0,0
Data 0,1,0,0,0,1,1,0,0,0,1,0
Data 0,0,0,0,0,0,0,0,0,0,0,0
Rem ---
Data 0,0,0,0,0,0,0,0,0,0,0
Data 0,2,3,0,1,0,1,0,2,3,0
Data 0,1,0,0,0,0,0,0,0,1,0
Data 0,0,2,3,1,0,1,2,3,0,0
Data 0,1,0,2,3,0,2,3,0,1,0
Data 0,1,0,0,0,0,0,0,0,1,0
Data 0,0,0,0,0,1,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,0,0,0
Data 0,1,0,0,1,0,1,0,0,1,0
Data 0,1,1,2,3,0,2,3,1,1,0
Data 0,2,3,1,0,0,0,1,2,3,0
Data 0,0,0,0,0,0,0,0,0,0,0
Data "Cucumber","Carrot","Radish","Potato","Celery","Onion","Eggplant","Tomato"
Data "Cauliflower","Broccoli","Cucumber"
Return
Rem -----------------------------------------------------------
Rem -- Initialize stuff for a game -------------------------
Rem -----------------------------------------------------------
INITGAME:
LIVES=5
LEVEL=1 : OFFSET=0
SCORE=0
For Z=1 To 7 : SPECIAL(Z)=0 : Next
For Z=1 To 5 : EXTRA(Z)=0 : Next
Gosub NEWLEVEL
Gosub PREPSCREEN
Return
Rem -----------------------------------------------------------
Rem -- Stuff thats to be done with every NEW level --
Rem -----------------------------------------------------------
NEWLEVEL:
Rem --make new working copy (mx,my) of official maze data (mazex,mazey)
For Y=1 To 11
For X=1 To 12
MX(X,Y)=MAZEX(X,Y)
Next
Next
For Y=1 To 12
For X=1 To 11
MY(X,Y)=MAZEY(X,Y)
Next
Next
For Y=1 To 11
For X=1 To 11
DX(X,Y)=1
Next
Next
DX(6,6)=30+LEVEL : Rem --put vegetable in bugbox
DX(6,9)=0
FOODLEFT=119
Rem --add assorted goodies to maze
Rem --add skulls
Z=0
While Z<3
ZX=Rnd(11) : ZY=Rnd(11)
If DX(ZX,ZY)=1 Then DX(ZX,ZY)=2 : FOODLEFT=FOODLEFT-1 : Inc Z
Wend
Rem --add hearts
Z=0
While Z<3
ZX=Rnd(11) : ZY=Rnd(11)
If DX(ZX,ZY)=1 Then DX(ZX,ZY)=3 : Inc Z
Wend
Rem --add letters
Z=0
While Z<3
ZX=Rnd(11) : ZY=Rnd(11)
If DX(ZX,ZY)=1 Then DX(ZX,ZY)=Rnd(9)+4 : Inc Z
Wend
BONUS=0
Screen 2
If LEVEL>10 Then LEVEL=LEVEL-10 : OFFSET=OFFSET+1
If LEVEL=1 Then Palette $0,$676,$6D7,$657,$F97,,$556,,,,,$6D7,,,,$667,,,,,,$1DB,$557,,,$1DB,$557
If LEVEL=2 Then Palette $0,$49A,$6D7,$645,$FFF,,$578,,,,,$F91,,,,$C04,,,,,,$12,$565,$EC6,,$12,$565,$EC6
If LEVEL=3 Then Palette $0,$432,$6D7,$645,$5B5,,$560,,,,,$F91,,,,$C04,,,,,,$CDB,$876,$666,,$CDB,$876,$666
If LEVEL=4 Then Palette $0,$646,$952,$620,$FA5,,$520,,,,,$F91,,,,$C04,,,,,,,$B00,$CA6,,,$B00,$CA6
If LEVEL=5 Then Palette $0,$171,$6D7,$620,$FF5,,$520,,,,,$E0,,,,$E0,,,,,,,$547,$B8D,$959,,$547,$B8D,$959
If LEVEL=6 Then Palette $0,$5,,$206,$E0,,$206,,,,,$E0,,,,,$F,,,,,,,$6BB,$55B,,,$6BB,$55B
If LEVEL=7 Then Palette $0,$955,$B0F,$F66,$F67,,$E06,,,,,$FAA,,,,$BF,,,,,,,$E94,$F65,$D0,,$E94,$F65,$D0
If LEVEL=8 Then Palette $0,$547,$6D7,$547,$557,,$547,,,,,$F8A,,,,$BF,,,,,,,$E8B,$6B6,$C96,,$E8B,$6B6,$C96
If LEVEL=9 Then Palette $0,$5A7,,$C47,$567,,$547,,,,,$F8A,,,,$BF,,,,,,,$CFC,$673,$FF0,,$CFC,$673,$FF0
If LEVEL=10 Then Palette $0,$5,$171,$577,$5A7,,$547,,,,,$5A4,,,,$BF,,,,,,,$FF6,$F55,$4BB,,$FF6,$F55,$4BB
If LEVEL=1 Then SPEED$="25"
If LEVEL=2 Then SPEED$="24"
If LEVEL=3 Then SPEED$="23"
If LEVEL=4 Then SPEED$="22"
If LEVEL=5 Then SPEED$="21"
If LEVEL=6 Then SPEED$="20"
If LEVEL=7 Then SPEED$="19"
If LEVEL=8 Then SPEED$="18"
If LEVEL=9 Then SPEED$="17"
If LEVEL=10 Then SPEED$="16"
If OFFSET>0 Then SPEED$="14"
LADYLEFT$="A1,(3,1) M -19,0,19"
LADYRIGHT$="A1,(4,1) M 19,0,19"
LADYUP$="A1,(2,1) M 0,-18,18"
LADYDOWN$="A1,(1,1) M 0,18,18"
GOLEFT$="A1,("+Str$(3+4*LEVEL)+",1) M -19,0,"+SPEED$
GORIGHT$="A1,("+Str$(4+4*LEVEL)+",1) M 19,0,"+SPEED$
GOUP$="A1,("+Str$(1+4*LEVEL)+",1) M 0,-18,"+SPEED$
GODOWN$="A1,("+Str$(2+4*LEVEL)+",1) M 0,18,"+SPEED$
MULTIPLIER=1
Return
Rem -----------------------------------------------------------
Rem Draw the screen (with current data)
Rem -----------------------------------------------------------
PREPSCREEN:
If LIVES=0 Then Return
Screen 2
Sprite Update : Paper 0
Ink 0 : Bar 0,0 To 320,204 : Wait Vbl
Screen To Front 0
Screen Copy 1 To 2
Sprite Update Off
DX(6,6)=30+LEVEL
Rem --draw turnstiles
For Y=1 To 11
For X=1 To 12
If MX(X,Y)=2 Then Paste Icon X*19-31,Y*18-13,2
Next
Next
For Y=1 To 12
For X=1 To 11
If MY(X,Y)=2 Then Paste Icon X*19-12,Y*18-31,1
Next
Next
Rem --draw the dots, hearts, letters
N=6
For X=1 To 11
For Y=1 To 11
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
Rem If DX(X,Y)=1 Then Ink 4 : Plot X*19-8,Y*18-8
If DX(X,Y)=1 Then Paste Icon X*19-10,Y*18-11,30
If DX(X,Y)=3 Then Paste Icon X*19-10,Y*18-11,DX(X,Y)
If DX(X,Y)>3 and DX(X,Y)<29 Then Paste Icon X*19-10,Y*18-11,DX(X,Y)
If DX(X,Y)>29 Then Paste Icon X*19-12,Y*18-14,DX(X,Y)
Next
Next
Z=BONUS : If Z>0 Then For BONUS=1 To Z : Gosub HEART : Next : BONUS=Z