home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AMOS PD CD
/
amospdcd.iso
/
551-575
/
apd566
/
source
/
ladybug.amos
/
ladybug.amosSourceCode
Wrap
AMOS Source Code
|
1994-01-01
|
23KB
|
795 lines
'NB: If you haven't read the Read Me! file then take note. This is an
' incomplete attempt at a game trying a certain method of bob updating.
' My aim is to get complex movement patterns for the baddies through the
' maze (so they take the obvious route to the ladybug!) while having
' only a short time between updates (and get rid of all other niggling
' problems as well)...
Screen Open 1,64,42,16,Lowres
Curs Off : Flash Off
Screen Hide
Hide : Curs Off
'
Global PL
Load Iff "SLBTitleScreen.IFF",0
TITLE_SCREEN
'
WDTH=12 : HGHT=12
N_ICONS=79
HISCORE=10000
N_TAKE=54 : Rem .... Number of gettable objects
S_TAKE=20 : Rem .... Start of gettable objects
Dim M(WDTH,HGHT),N(WDTH,HGHT),O(WDTH,HGHT),X(16),Y(16),B(16),STAND(16)
Dim LIVES(PL),SCORE(PL),EXTRA(PL),MARKV(PL),MARKX(PL),MARKY(PL),MARKT(PL)
Dim WORTH(N_TAKE),OX(16),OY(16),U(16),V(16),WEAPON(PL),AM$(17),DEAD(PL)
Dim SHIELDT(PL),WPX(3),WPY(3),NPX(3),NPY(3)
AM$(17)="A 1,"
For I=4 To 8
For J=5 To 8
AM$(17)=AM$(17)+"("+Str$(J)+","+Str$(I)+")"
Next J
Next I
AM$(17)=AM$(17)+"(5,20)(20,5)(21,5)(22,5)(23,5)"
For I=0 To N_TAKE : WORTH(I)=100 : Next I
SPT=-1
Global M(),N(),O(),WDTH,HGHT,X(),Y(),B(),N_BUGS,SPO,SPX,SPY,SPT,AM$()
Global LIVES(),SCORE(),EXTRA(),MARKV(),MARKX(),MARKY(),MARKT(),WORTH()
Global N_TAKE,TIME,TX,TY,LIGHT,STAND(),OX(),OY(),HARVEST,CREDITS,FINISH
Global U(),V(),HISCORE,WEAPON(),S_TAKE,DEAD(),SHIELDT(),LEVEL
Global WPX(),WPY(),N_WEAPON_POS,NPX(),NPY(),N_NESTS
'
Auto View Off
Load Iff "LadybugScreen.IFF",0
'
Ink 1,0
H$=Str$(HISCORE)-" " : Text 315-Text Length(H$),232,H$
Text 306,80,"0" : Text 306,141,"0"
'
Double Buffer : Autoback 0 : Update Off
Flash 15,"(F00,35)(ABF,60)(4F4,120)"
'
Load "LadybugSprites.abk"
Load "LadybugIcons.abk"
Make Icon Mask
For I=1 To Length(1)
Hot Spot I,$11
Next I
'
For I=0 To PL
For J=1 To 3
' Inc LIVES(I)
LIVES[I,1]
Next J
Next I
'
Every 20 Proc COUNTER
LEVEL_LOAD
'
Do
MOVE_LADYBUG
MOVE_BADDIES
DISPLAY_SCREEN
Loop
'
Procedure LEVEL_LOAD
Every Off : Rem Bob Off
Bob Clear
Inc LEVEL
LEVEL$="Small"+(Str$((LEVEL-1) mod 3+1)-" ")+".LBM"
Load LEVEL$,6
S=Start(6) : L=Length(6)
For I=0 To 3 : WPX(I)=0 : WPY(I)=0 : Next I
N_WEAPON_POS=-1
For J=1 To HGHT
For I=1 To WDTH
M(I,J)=Val(Bin$(Peek(S+(J-1)*WDTH+I-1),4))
N(I,J)=Peek(S+(J-1)*WDTH+I-1)-M(I,J)
If Btst(4,N(I,J)) and N_WEAPON_POS<3
Inc N_WEAPON_POS : WPX(N_WEAPON_POS)=I : WPY(N_WEAPON_POS)=J
End If
Next I
Next J
N_NESTS=-1
For J=1 To HGHT
For I=1 To WDTH
O(I,J)=Peek(S+L/2+(J-1)*WDTH+I-1)
If O(I,J)=75 and N_NESTS<3
Inc N_NESTS : NPX(N_NESTS)=I : NPY(N_NESTS)=J
End If
Next I
Next J
'
Erase 6
'
Auto View Off
Screen Open 2,260,256,32,Lowres
Screen To Back 2
' Auto View On
For J=1 To HGHT
For I=1 To WDTH
If I<WDTH Then MR=M(I+1,J)+1
If J<HGHT Then MD=M(I,J+1)+1
' ..... NR=N(I+1,J) : ND=N(I,J+1)
If(MR>1 and MR<7) or MR=10 Then Bset 1,N(I,J)
If(MD>1 and MD<5) or(MD>6 and MD<9) or MD=10 Then Bset 2,N(I,J)
'
'
If I<WDTH and J<HGHT
If Btst(5,N(I+1,J)) or Btst(5,N(I+1,J+1)) : Bclr 1,N(I,J) : End If
If Btst(6,N(I,J+1)) or Btst(6,N(I+1,J+1)) : Bclr 2,N(I,J) : End If
End If
'
'
Paste Icon I*21-13,J*21-11,M(I,J)+76
Next I
Next J
For J=1 To HGHT
For I=1 To WDTH
If Btst(5,N(I,J)) Then VDOOR[I,J,I*21-13,J*21-11]
If Btst(6,N(I,J)) Then HDOOR[I,J,I*21-13,J*21-11]
Next I
Next J
For J=1 To HGHT
For I=1 To WDTH
If O(I,J) : Paste Icon I*21-8,J*21-6,O(I,J) : End If
Next I
Next J
' For J=1 To HGHT
' For I=1 To WDTH
' If Btst(1,N(I,J)) Then Draw I*21+10,J*21-11 To I*21+10,J*21+10
' If Btst(2,N(I,J)) Then Draw I*21-11,J*21+10 To I*21+10,J*21+10
' Next I
' Next J
'
'
Screen Copy 2,8,10,244,246 To 0,8,10
Screen Close 2
Screen 0
A=(LEVEL-1)/4+1 : B=(LEVEL-1) mod 4+1
Text 290,45,Str$(A)-" "+"_"+Str$(B)-" "
'
If LIGHT=18 Then A=TIME : B=140 Else A=1 : B=TIME
LIGHT=18
For K=A To B
If K<19 Then I=120+K*7 : J=3
If K>17 and K<54 Then I=246 : J=K*7-123
If K>53 and K<89 Then I=617-K*7 : J=248
If K>88 and K<124 Then I=1 : J=864-K*7
If K>123 Then I=K*7-860 : J=3
Paste Icon I,J,LIGHT
Next K
TIME=0
If LEVEL=1
Screen Copy 0 To Physic
Else
Appear 0 To Physic,43
End If
For I=0 To PL
SHIELDT(I)=100 : WEAPON(I)=0 : WEAPON_DRAW[0,I]
X(I)=2+PL*8 : Y(I)=10 : B(I)=1+PL*2
AM$(I)="LA=R2+1 ; M R0*21,R1*21,15"
Bob I,X(I)*21+1,Y(I)*21+2,B(I)+1
Channel I To Bob I
Next I
N_BUGS=2
For I=2 To 13
AM$(I)="A 1,(R2,4)(R2+1,4)(R2+2,4)(R2+1,4) ; M R0*21,R1*21,15"
X(I)=0 : Y(I)=0 : Bclr 3,N(X(I),Y(I)) : B(I)=0
Amal Off I
Next I
Auto View On
Wait 10
Every On
End Proc
Procedure VDOOR[I,J,U,V]
M=M(I,J+1)+1 : B=0
If M=2 or M=7 Then B=1
If M=5 or M=6 or M=9 or M=13 or M=14 Then B=2
Paste Icon U,V-16,B+90
If O(I,J) Then Paste Icon I*21-8,J*21-6,O(I,J)
End Proc
Procedure HDOOR[I,J,U,V]
M=M(I+1,J)+1 : B=0
If M=3 or M=5 Then B=1
If M=7 or M=8 or M=9 or M=12 or M=14 Then B=2
Paste Icon U-16,V,B+93
If O(I,J) Then Paste Icon I*21-8,J*21-6,O(I,J)
End Proc
Procedure DISPLAY_SCREEN
For I=0 To 1
Screen Swap : Wait Vbl
Bob Clear
'
If TY
Paste Icon TX,TY,LIGHT
End If
'
If SPT=-200
If I=0
R=Rnd(N_WEAPON_POS)
If O(WPX(R),WPY(R))=0 and Rnd(3)=0
SPX=WPX(R) : SPY=WPY(R)
SPO=65+Rnd(8)
'SPO=48
SPT=300
Else
SPT=-1
End If
End If
End If
If SPT=300
Bell 60
Paste Icon SPX*21-8,SPY*21-6,SPO
End If
If SPT=0
If I=0
COVER[SPX,SPY,48]
End If
Put Block 49,SPX*21-8,SPY*21-6
End If
'
For K=0 To N_BUGS
If STAND(K)
Put Block K+1,OX(K)*21-8,OY(K)*21-6
If I=1 : STAND(K)=0 : Del Block K+1 : End If
End If
If U(K)
Put Block(K*2)+18,U(K)*21-13,V(K)*21-27
Put Block(K*2)+19,U(K)*21-29,V(K)*21-11
If I=1
Bell 55 : U(K)=0 : V(K)=0
Del Block(K*2)+18 : Del Block(K*2)+19
End If
End If
If O(0,K)=True
Paste Icon X(14+K)*21-8,Y(14+K)*21-6,64
If I=1 : O(O,K)=False : End If
End If
Next K
'
Bob Draw
Next I
Dec SPT
End Proc
Procedure DEAD[K]
If SHIELDT(K) Then Pop Proc
DEAD(K)=True
SHIELDT(K)=100
Amal K,AM$(17)
Amal On K
LIVES[K,0] : Boom
End Proc
Procedure MOVE_LADYBUG
For K=0 To PL
If DEAD(K)=0
If SHIELDT(K)
Dec SHIELDT(K)
'Bob 14+K,X Bob(K),Y Bob(K),23
If SHIELDT(K)=0 : Bob Off 14+K : End If
End If
If Bob Col(K,3 To N_BUGS+1)
DEAD[K]
End If
If Chanmv(K)=0
O=O(X(K),Y(K))
If O
If O=74
If SHIELDT(K)=0
OX(K)=X(K) : OY(K)=Y(K) : O(X(K),Y(K))=0
STAND(K)=O : COVER[OX(K),OY(K),K]
DEAD[K]
End If
Else
If O=64
If WEAPON(K)=0
WEAPON(K)=64 : WEAPON_DRAW[64,K]
Bell 60 : O(X(K),Y(K))=0
OX(K)=X(K) : OY(K)=Y(K)
STAND(K)=O : COVER[OX(K),OY(K),K]
End If
Else
If O<>75
Bell 63 : O(X(K),Y(K))=0 : Add SCORE(K),WORTH(O-S_TAKE)
OX(K)=X(K) : OY(K)=Y(K) : CHG_SCORE[K]
STAND(K)=O : COVER[OX(K),OY(K),K]
End If
End If
If O>19 and O<29
C=Colour(15)
If C=$F00 : EXTRA[K,O] : End If
If C=$ABF : FINISH[O] : End If
If C=$4F4 : HARVEST[O] : End If
End If
End If
End If
If SPT>0 and X(K)=SPX and Y(K)=SPY
SPECIAL_OBJECT[K]
End If
''U(K)=0 : V(K)=0
' If K=1
' J=2^Rnd(3)
' Else
J=Joy(1-K)
If J>15
Add J,-16
USE_WEAPON[K]
End If
' End If
JX=(J=4)-(J=8) : JY=(J=1)-(J=2)
B=(JY<0)*2-JX+2
'
If JX=-1
If Btst(5,N(X(K),Y(K))) : U(K)=X(K) : V(K)=Y(K) : End If
If Btst(5,N(X(K),Y(K)+1)) : U(K)=X(K) : V(K)=Y(K)+1 : End If
End If
If JX=1
If Btst(5,N(X(K)+1,Y(K))) : U(K)=X(K)+1 : V(K)=Y(K) : End If
If Btst(5,N(X(K)+1,Y(K)+1)) : U(K)=X(K)+1 : V(K)=Y(K)+1 : End If
End If
If JY=-1
If Btst(6,N(X(K),Y(K))) : U(K)=X(K) : V(K)=Y(K) : End If
If Btst(6,N(X(K)+1,Y(K))) : U(K)=X(K)+1 : V(K)=Y(K) : End If
End If
If JY=1
If Btst(6,N(X(K),Y(K)+1)) : U(K)=X(K) : V(K)=Y(K)+1 : End If
If Btst(6,N(X(K)+1,Y(K)+1)) : U(K)=X(K)+1 : V(K)=Y(K)+1 : End If
End If
'
If(JX or JY)
B(K)=B
If(Btst(2+(JX<>0),N(X(K)+(JX=-1),Y(K)+(JY=-1))) or U(K))
Add X(K),JX : Add Y(K),JY
Amal K,AM$(K)
Amreg(K,0)=JX : Amreg(K,1)=JY : Amreg(K,2)=B
Amal On K
Else
Bob K,,,B+1
End If
End If
'
A: If U(K)
Bchg 5,N(U(K),V(K)) : Bchg 6,N(U(K),V(K))
Bchg 1,N(U(K)-1,V(K)-1) : Bchg 2,N(U(K)-1,V(K)-1)
Bchg 1,N(U(K)-1,V(K)) : Bchg 2,N(U(K),V(K)-1)
SWING_DOOR[U(K),V(K),B(K),K]
End If
End If
On WEAPON(K)-163 Proc STONE,BOW_ARROW,LIGHTNING,DYNAMITE
Else
If Chanan(K)=0
DEAD(K)=0
X(K)=2+K*8 : Y(K)=10
Bob K,X(K)*21+1,Y(K)*21+2,B(K)+1
End If
End If
Next K
End Proc
Procedure MOVE_BADDIES
For I=2 To N_BUGS
If Chanmv(I)=0 and X(I)
'
O=O(X(I),Y(I))
' If O and O<>79
' Bell 40 : O(X(I),Y(I))=0
' OX(I)=X(I) : OY(I)=Y(I) : STAND(I)=O
' End If
If O=74
OX(I)=X(I) : OY(I)=Y(I) : O(X(I),Y(I))=0
STAND(I)=O : COVER[OX(I),OY(I),I]
Boom : Bclr 3,N(X(I),Y(I)) : X(I)=0 : Y(I)=0
Amal Off I : Bob Off I
Goto S
End If
'
DX=X(0)-X(I) : DY=Y(0)-Y(I)
If Abs(DX)<Abs(DY)
CX=0 : CY=Sgn(DY)
Else
CY=0 : CX=Sgn(DX)
End If
D=(CY<0)*2-CX+2 : B=D
Gosub TEST
If T1 or T2 or T3
If D=1 or D=3
If DY<>0 : B=1+Sgn(DY) : Else B=0 : End If
End If
If D=0 or D=2
If DX<>0 : B=2-Sgn(DX) : Else B=1 : End If
End If
Gosub TEST
If T1 or T2 or T3
If D=1 or D=3
If DY<>0 : B=1-Sgn(DY) : Else B=2 : End If
End If
If D=0 or D=2
If DX<>0 : B=2+Sgn(DX) : Else B=3 : End If
End If
Gosub TEST
If T1 or T2 or T3
B=(D+2) mod 4
Gosub TEST
If T1 or T2 or T3
B=(B(I)+2) mod 4
Gosub TEST
If T3
CX=0 : CY=0
End If
End If
End If
End If
End If
Bclr 3,N(X(I),Y(I))
B(I)=B : Add X(I),CX : Add Y(I),CY
Bset 3,N(X(I),Y(I))
Amal I,AM$(I) : Amreg(I,0)=CX : Amreg(I,1)=CY : Amreg(I,2)=B*3+24
Amal On I
End If
If Bob Col(I,14 To 14+PL)
OX(I)=X(I) : OY(I)=Y(I) : O(X(I),Y(I))=0
STAND(I)=O : COVER[OX(I),OY(I),I]
Boom : Bclr 3,N(X(I),Y(I)) : X(I)=0 : Y(I)=0
Amal Off I : Bob Off I : K=Col(14)
Add SCORE(1+K),1000 : CHG_SCORE[1+K]
End If
S: Next I
Pop Proc
TEST:
CX=(B=3)-(B=1) : CY=(B=0)-(B=2)
T1= Not Btst(2+(CX<>0),N(X(I)+(CX=-1),Y(I)+(CY=-1)))
T2=(B(I)=(B+2) mod 4)
T3=Btst(3,N(X(I)+CX,Y(I)+CY))
Return
End Proc
Procedure COVER[I,J,K]
Screen 1
Paste Icon -5,-5,M(I,J)+76
If Btst(5,N(I,J)) : VDOOR[I,J,-5,-5] : End If
If Btst(5,N(I,J+1)) : VDOOR[I,J+1,-5,16] : End If
If Btst(6,N(I,J)) : HDOOR[I,J,-5,-5] : End If
If Btst(6,N(I+1,J)) : HDOOR[I+1,J,16,-5] : End If
Get Block K+1,0,0,16,16 : Rem ... add ,1 for mask
Screen 0
End Proc
Procedure SWING_DOOR[U,V,B,K]
Screen 1
Paste Icon 16,-5,M(U,V-1)+76
For I=-1 To 1 : Paste Icon(I+1)*21-5,16,M(U+I,V)+76 : Next I
Paste Icon 16,37,M(U,V+1)+76
If Btst(6,N(U-1,V-1)) : HDOOR[U-1,V-1,-5,-5] : End If
If Btst(5,N(U-1,V-1)) : VDOOR[U-1,V-1,-5,-5] : End If
If Btst(6,N(U+1,V-1)) : HDOOR[U+1,V-1,37,-5] : End If
If Btst(5,N(U+1,V-1)) : VDOOR[U+1,V-1,37,-5] : End If
If Btst(6,N(U-1,V+1)) : HDOOR[U-1,V+1,-5,37] : End If
If Btst(5,N(U-1,V+1)) : VDOOR[U-1,V+1,-5,37] : End If
If(B=3)-(B=1) : HDOOR[U,V,16,16] : End If
If(B=0)-(B=2) : VDOOR[U,V,16,16] : End If
If Btst(6,N(U+1,V+1)) : HDOOR[U+1,V+1,37,37] : End If
If Btst(5,N(U+1,V+1)) : VDOOR[U+1,V+1,37,37] : End If
If O(I,J) : Paste Icon I*21-8,J*21-6,O(I,J) : End If
If O(U,V-1) : Paste Icon 21,0,O(U,V-1) : End If
For I=-1 To 1
If O(U+I,V) : Paste Icon(I+1)*21,21,O(U+I,V) : End If
Next I
If O(U,V+1) : Paste Icon 21,42,O(U,V+1) : End If
If SPT>0 : Paste Icon(SPX-U)*21+21,(SPY-V)*21+21,SPO : End If
Get Block(K*2)+18,16,0,8,40,1 : Get Block(K*2)+19,0,16,40,8,1
Screen 0
End Proc
Procedure COUNTER
TX=0 : TY=0 : Add TIME,1,1 To 140
If TIME=1
Add LIGHT,1,18 To 19
For I=2 To N_BUGS
If X(I)=0 : J=I : I=N_BUGS : End If
Next I
If J=0 : Inc N_BUGS : J=N_BUGS : End If
R=Rnd(N_NESTS) : X(J)=NPX(R) : Y(J)=NPY(R) : B(J)=Rnd(3)
Bob J,X(J)*21+1,Y(J)*21+2,B(J)*3+24
Channel J To Bob J
Bell 40
End If
If TIME<19 Then TX=120+TIME*7 : TY=3
If TIME>17 and TIME<54 Then TX=246 : TY=TIME*7-123
If TIME>53 and TIME<89 Then TX=617-TIME*7 : TY=248
If TIME>88 and TIME<124 Then TX=1 : TY=864-TIME*7
If TIME>123 Then TX=TIME*7-860 : TY=3
Every On
End Proc
Procedure EXTRA[K,O]
If O=21 : Paste Icon 263,98+61*K,1 : Bset 0,EXTRA(K) : End If
If O=28 : Paste Icon 272,98+61*K,2 : Bset 1,EXTRA(K) : End If
If O=26 : Paste Icon 281,98+61*K,3 : Bset 2,EXTRA(K) : End If
If O=24 : Paste Icon 290,98+61*K,4 : Bset 3,EXTRA(K) : End If
If O=20 : Paste Icon 299,98+61*K,5 : Bset 4,EXTRA(K) : End If
Screen Copy 0,263,98+61*K,308,107+61*K To Physic,263,98+61*K
If EXTRA(K)=31 : ANOTHER_LIFE[K] : End If
End Proc
Procedure FINISH[O]
If O=23 : Paste Icon 268,181,6 : Bset 0,FINISH : End If
If O=21 : Paste Icon 277,181,7 : Bset 1,FINISH : End If
If O=28 : Paste Icon 286,181,8 : Bset 2,FINISH : End If
If O=26 : Paste Icon 295,181,9 : Bset 3,FINISH : End If
Screen Copy 0,268,181,305,190 To Physic,268,181
If FINISH=15 : FINISH_LEVEL : End If
End Proc
Procedure HARVEST[O]
If O=22 : Paste Icon 255,195,10 : Bset 0,HARVEST : End If
If O=20 : Paste Icon 264,195,11 : Bset 1,HARVEST : End If
If O=24 : Paste Icon 273,195,12 : Bset 2,HARVEST : End If
If O=27 : Paste Icon 282,195,13 : Bset 3,HARVEST : End If
If O=21 : Paste Icon 291,195,14 : Bset 4,HARVEST : End If
If O=25 : Paste Icon 300,195,15 : Bset 5,HARVEST : End If
If O=26 : Paste Icon 309,195,16 : Bset 6,HARVEST : End If
If HARVEST=127 : HARVEST_LEVEL : End If
Screen Copy 0,255,195,318,204 To Physic,255,195
End Proc
Procedure FLICKER[X,Y,W,H]
Amal Freeze
Every Off
Get Block 40,X,Y,W,H
Bell
For I=1 To 15
Put Block 40
Screen Copy 0,X,Y,X+W,Y+H To Physic,X,Y
Wait 4
Cls 0,X,Y To X+W-2,Y+H
Screen Copy 0,X,Y,X+W,Y+H To Physic,X,Y
Wait 3
Next I
Del Block 40
Every On : Amal On
End Proc
Procedure ANOTHER_LIFE[K]
FLICKER[263,98+61*K,47,9]
EXTRA(K)=0
LIVES[K,1]
End Proc
Procedure FINISH_LEVEL
FLICKER[268,181,39,9]
FINISH=0
LEVEL_LOAD
End Proc
Procedure HARVEST_LEVEL
FLICKER[255,195,65,9]
HARVEST=0
End Proc
Procedure CHG_SCORE[K]
S$=Str$(SCORE(K))-" "
Text 314-Text Length(S$),80+61*K,S$
Screen Copy 0,259,74+61*K,314,81+61*K To Physic,259,74+61*K
If SCORE(K)>HISCORE
HISCORE=SCORE(K)
' Text 315-Text Length(S$),225,S$
Screen Copy 0,259,74+61*K,314,81+61*K To 0,260,226
Screen Copy 0,260,226,314,234 To Physic,260,226
End If
End Proc
Procedure LIVES[K,D]
If D
Inc LIVES(K)
Paste Icon 314-LIVES(K)*12,86+K*61,17
Else
Dec LIVES(K)
Cls 0,302-LIVES(K)*12,86+K*61 To 313-LIVES(K)*12,94+K*61
End If
Screen Copy 0,257,85+K*61,313,94+K*61 To Physic,257,85+K*61
End Proc
Procedure WEAPON_DRAW[I,K]
If I=0
Cls 0,298,55+K*61 To 311,69+K*61
Else
Paste Icon 296,54+K*61,I
End If
Screen Copy 0,298,55+K*61,311,69+K*61 To Physic,298,55+K*61
End Proc
Procedure SPECIAL_OBJECT[K]
If WEAPON(K)=0
If SPO=65
'Bow and Arrow
WEAPON(K)=65 : T=True
WEAPON_DRAW[65,K]
End If
If SPO=66
'Lightning
WEAPON(K)=66 : T=True
WEAPON_DRAW[66,K]
End If
If SPO=67
'Dynamite
WEAPON(K)=67 : T=True
WEAPON_DRAW[67,K]
End If
End If
If SPO=68
'Shield
SHIELDT(K)=1000
T=True
End If
If SPO=69
'Alphabet Block
C=Colour(15)
If C=$F00
For I=1 To 5
Paste Icon 263+(I-1)*9,98+61*K,I
Next I
EXTRA(K)=31
Screen Copy 0,263,98+61*K,308,107+61*K To Physic,263,98+61*K
ANOTHER_LIFE[K]
End If
If C=$ABF
For I=6 To 9
Paste Icon 268+(I-6)*9,181,I
Next I
FINISH=15
Screen Copy 0,268,181,305,190 To Physic,268,181
FINISH_LEVEL
End If
If C=$4F4
For I=10 To 16
Paste Icon 255+(I-10)*9,195,I
Next I
HARVEST=127
Screen Copy 0,255,195,318,204 To Physic,255,195
HARVEST_LEVEL
End If
T=True
End If
If SPO=70
'Crucifix
Boom
Cls 1 : Screen Swap : Wait Vbl
Boom
For L=2 To N_BUGS
If X(L)
Bclr 3,N(X(L),Y(L)) : X(L)=0 : Y(L)=0
Amal Off L : Bob Off L
Add SCORE(K),1000
End If
Next L
Screen Copy 0 To Physic
CHG_SCORE[K]
T=True
End If
If SPO=71
'Clock
T=True
End If
If SPO=72
'Hourglass
T=True
End If
If SPO=73
'Shoe
AM$(K)=Left$(AM$(K),Len(AM$(K))-2)+"12"
T=True
End If
If T
SPT=0 : Bell 60
End If
End Proc
Procedure USE_WEAPON[K]
W=WEAPON(K)
If W<64 or W>67
Pop Proc
End If
Add WEAPON(K),100
If W=64
'Stone
X(14+K)=X(K) : Y(14+K)=Y(K) : B(14+K)=B(K)
Bob 14+K,X(K)*21+5,Y(K)*21+2,19
Channel 14+K To Bob 14+K
AM$(14+K)="M"+Str$(((B(K)=3)-(B(K)=1))*21)+","+Str$(((B(K)=0)-(B(K)=2))*21)+",7"
End If
If W=65
'Bow&Arrow
X(14+K)=X(K) : Y(14+K)=Y(K) : B(14+K)=B(K)
Bob 14+K,X(K)*21+5,Y(K)*21+2,9+B(K)
Channel 14+K To Bob 14+K
AM$(14+K)="M"+Str$(((B(K)=3)-(B(K)=1))*21)+","+Str$(((B(K)=0)-(B(K)=2))*21)+",7"
End If
If W=66
'Lightning
X(14+K)=X(K) : Y(14+K)=Y(K) : B(14+K)=B(K)
Bob 14+K,X(K)*21+5,Y(K)*21+2,13+B(K)
Channel 14+K To Bob 14+K
AM$(14+K)="M"+Str$(((B(K)=3)-(B(K)=1))*21)+","+Str$(((B(K)=0)-(B(K)=2))*21)+",7"
End If
If W=67
'Dynamite
Bob 14+K,X(K)*21+5,Y(K)*21+2,17
Channel 14+K To Bob 14+K
Amal 14+K,"A 20,(18,4)(17,4)"
Amal On 14+K
End If
WEAPON_DRAW[0,K]
End Proc
Procedure LIGHTNING
Shared K
If Chanmv(14+K)=0
CX=(B(14+K)=3)-(B(14+K)=1) : CY=(B(14+K)=0)-(B(14+K)=2)
If X(14+K)+CX>0 and X(14+K)+CX<12 and Y(14+K)+CY>0 and Y(14+K)+CY<12
Add X(14+K),CX : Add Y(14+K),CY
Amal 14+K,AM$(14+K)
Amal On 14+K
Else
Bob Off 14+K
WEAPON(K)=0
End If
End If
End Proc
Procedure DYNAMITE
Shared K
If Chanan(14+K)=0
Bob Off 14+K
WEAPON(K)=0
End If
End Proc
Procedure BOW_ARROW
Shared K
If Chanmv(14+K)=0
CX=(B(14+K)=3)-(B(14+K)=1) : CY=(B(14+K)=0)-(B(14+K)=2)
If Btst(2+(CX<>0),N(X(14+K)+(CX=-1),Y(14+K)+(CY=-1)))
Add X(14+K),CX : Add Y(14+K),CY
Amal 14+K,AM$(14+K)
Amal On 14+K
Else
Bob Off 14+K
WEAPON(K)=0
End If
End If
End Proc
Procedure STONE
Shared K
If Chanmv(14+K)=0
CX=(B(14+K)=3)-(B(14+K)=1) : CY=(B(14+K)=0)-(B(14+K)=2)
If Btst(2+(CX<>0),N(X(14+K)+(CX=-1),Y(14+K)+(CY=-1)))
Add X(14+K),CX : Add Y(14+K),CY
Amal 14+K,AM$(14+K)
Amal On 14+K
Else
Bob Off 14+K
WEAPON(K)=0
O(X(14+K),Y(14+K))=64
O(0,K)=True
End If
End If
End Proc
Procedure TITLE_SCREEN
A=1 : B=0
Ink 1 : Box 96,190+B*18 To 217,207+B*18
Timer=0
Repeat
J=Joy(1)
If J=1 or J=2
Ink 0 : Box 96,190+B*18 To 217,207+B*18
Swap A,B
Ink 1 : Box 96,190+B*18 To 217,207+B*18
Wait 10
Timer=0
End If
If Timer>300
Timer=0
Get Block 1,0,0,320,256,0
Cls 0,10,10 To 310,246
Pen 5 : Paper 0
Locate 0,3 : Centre "T O P T E N S C O R E S ! ! !"
Pen 3
Locate 0,7 : Centre "PLACE NAME SCORE LEVEL"
NAME$="GLENN" : SCORE=1000000 : LVL=35
Pen 10
For I=0 To 9
Print At(7,10+I*2);I+1
Print At(13,10+I*2);NAME$
Print At(19,10+I*2);SCORE
Print At(28,10+I*2);LVL
Next I
Repeat
If Fire(1) : Timer=401 : Wait 15 : End If
Until Timer>400
Put Block 1
Del Block 1
Timer=0
End If
Until J>15
PL=B
End Proc