home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AMOS PD CD
/
amospdcd.iso
/
251-275
/
apd258
/
eric.amos
/
eric.amosSourceCode
< prev
next >
Wrap
AMOS Source Code
|
1991-07-05
|
12KB
|
479 lines
Screen Open 0,320,200,16,Lowres : Curs Off : Flash Off : Cls 0
Dim F(19,12),M(2,200)
Global CHASER_DELAY,REPLAY,WON,ROWTOP,SPECIAL,T$
Global CHEAT,LIVES,DEAD,ALIVE,S,X,Y,XP,YP,TX,TY,TP,COUNT,P,F(),M()
INITIALIZE
'CHEAT=1
CHEAT=0
CHASER_DELAY=400 : Rem delay before chaser starts
GAME
End
Procedure GAME
'----------------main loop----------------------
Do
WON=0
LIVES=4 : ROWTOP=11
For S=1 To 5
If S=2 or S=4 Then SPECIAL=-1 Else SPECIAL=0
Auto View Off
Unpack 7 To 1 : Double Buffer :
For C=0 To 31 : Colour C,$0 : Next
For N=0 To LIVES-1 : Paste Bob N*14+10,210,1 : Next
'
'
STAGE[10+S*7,CHEAT]
If LIVES=0
S=S-1
REPLAY
Ink 2,1
Text 92,115,"G A M E O V E R"
While Inkey$="" and Joy(1)=0 : Wend
Exit
End If
If ALIVE=0
S=S-1
REPLAY
Text 90,100,"Press Fire Button"
While Inkey$="" and Joy(1)=0 : Wend
End If
Fade 5 : Wait 75
Next S
If ALIVE=0 Then Goto FINI :
SIX:
S=6 : ROWTOP=59
Auto View Off : Unpack 7 To 1 : Double Buffer
For C=0 To 31 : Colour C,$0 : Next
For N=0 To LIVES-1 : Paste Bob N*14+10,210,1 : Next
STAGE[0,0]
'----------if got to front door-----------
If WON
Mvolume 35 : Music 1
Cls 0 : Curs Off : Pen 2 : Paper 0 : Locate 1,10 : Print "Brills ,You've saved Eric and the World"
Locate 7,14 : Print "Hit Fire for another Go..."
While Joy(1)=0 : Wend
For N=35 To 1 Step -1 : Mvolume N : Wait 2 : Next : Music Off
End If
If LIVES=0
S=S-1
REPLAY
Ink 2,1
Text 92,115,"G A M E O V E R"
While Inkey$="" and Joy(1)=0 : Wend
Exit
End If
If ALIVE=0
S=S-1
REPLAY
While Inkey$="" and Joy(1)=0
Wend
Goto SIX
End If
FINI:
Loop
End Proc
Procedure INITIALIZE
Load "ericmus.abk"
Mvolume 35 : Music 1
Cls 0
Screen Open 1,320,250,32,Lowres
Curs Off : Hide : Flash Off : Cls 0
' Load Iff "df1:willietitle.iff"
' Spack 1 To 8
Auto View Off
Unpack 8 To 1 : For N=0 To 31 : Colour N,$0 : Next
Auto View On : View
Fade 2 To -1
Timer=0
Repeat
Exit If Inkey$<>"" or Joy(1)<>0
Until Timer=250
Fade 2 : Wait 30
' Load Iff "df1:willieinst.iff"
' Spack 1 To 9
Auto View Off
Unpack 9 To 1 : For N=0 To 31 : Colour N,$0 : Next
Auto View On : View
Fade 2 To -1
While Inkey$="" and Joy(1)=0 : Wend
Fade 3 : Wait 45
For N=35 To 1 Step -1 : Mvolume N : Wait 2 : Next : Music Off
Priority Reverse On
'Unpack 7 To 1
'Load Iff "df1:willie.iff"
'Spack 1 To 7
'Unpack 7 To 1
'Double Buffer
'Load "df1:williesprite.abk"
'Load "ericsamples.abk"
For N=10 To 16 : Hot Spot N,4,4 : Next
For N=1 To 9 : Hot Spot N,4,3 : Next
End Proc
Procedure STAGE[BOMBS,SEE]
' For N=1 To 10 : Colour 1,N*($118) : Play Rnd(60)+10,1 : Wait 5 : Next
Colour 1,S*($118)
For N=1 To 50 : M(1,N)=0 : M(2,N)=0 : Next
P=0
Ink 1,0
Ink 12
Text 288,220,Str$(S)
Text 192,220,Str$(BOMBS)
ZEROARAY
BOMBSPUT[BOMBS,SEE]
If SPECIAL Then MAKEGAP
Auto View On : View : Fade 1 To -1 : Wait 15
X=156 : Y=188 : TX=156 : TY=188 : M(1,1)=10 : M(2,1)=12
Bob 1,X,Y,1
TP=1 : P=1 : CHASER=0 : ALIVE=-1
XP=(X+4)/16 : YP=(Y+4)/16
SEARCH
'
While Joy(1)=0 : Wend
Timer=0
Channel 2 To Bob 2
T$="Anim 0,(10,2)(11,2)(12,2)(11,2) ; "
While ALIVE
Wait Vbl
If Jleft(1) Then MOVELEFT : NEWPOS : SEARCH
If Jright(1) Then MOVERIGHT : NEWPOS : SEARCH
If Jup(1) Then MOVEUP : NEWPOS : SEARCH
If Jdown(1) Then MOVEDOWN : NEWPOS : SEARCH
'Test if top reached
If YP=1
Sam Play 3,5,7000
Exit
End If
If S=6 and XP=10 and YP=4 Then WON=-1 : Exit
If Timer>CHASER_DELAY
Bob 2,TX,TY,10
CHASER=-1
Amal 2,T$ : Amal On 2
End If
If CHASER and Timer>70 Then TRACKER
MISS:
'check for hit mine or caught by chaser
If(F(XP,YP)=1) or(X=TX and Y=TY and CHASER)
Bob Off 1 : Bob Off 2
BIG_EXPLO[X,Y,45,10,200,5,1]
ALIVE=0
LIVES=LIVES-1
Exit
End If
Wend
End Proc
Procedure TRACKER
Timer=0
Sam Play 2,1,8000
If TX+4<M(1,TP)*16
Repeat : Inc TX : Wait Vbl : Bob 2,TX,TY, : Until TX+4=M(1,TP)*16
Goto FIN
End If
If TX+4>M(1,TP)*16
Repeat : Dec TX : Wait Vbl : Bob 2,TX,TY, : Until TX+4=M(1,TP)*16
Goto FIN
End If
If TY+4<M(2,TP)*16
Repeat : Inc TY : Wait Vbl : Bob 2,TX,TY, : Until TY+4=M(2,TP)*16
Goto FIN
End If
If TY+4>M(2,TP)*16
Repeat : Dec TY : Wait Vbl : Bob 2,TX,TY, : Until TY+4=M(2,TP)*16
End If
FIN:
Inc TP
If TP>P Then TP=P
TX=X Bob(2)
TY=Y Bob(2)
End Proc
Procedure REPLAY
REPLAY=-1
X=156 : Y=188
Bob 1,X,Y,
Ink 2
For A=1 To 19
For B=1 To 11
If F(A,B)=1 Then Circle A*16,B*16,2
Next
Next
Clear Key
For N=1 To P-1
Sam Play 2,6,20000 : Sam Play 2,6,20000
Wait 1
If M(1,N+1)<M(1,N)
For Z=1 To M(1,N)-M(1,N+1)
MOVELEFT
NEWPOS
Next Z
Goto N
End If
If M(1,N+1)>M(1,N)
For Z=1 To M(1,N+1)-M(1,N)
MOVERIGHT
NEWPOS
Next Z
Goto N
End If
If M(2,N+1)<M(2,N)
For Z=1 To M(2,N)-M(2,N+1)
MOVEUP
NEWPOS
Next Z
Goto N
End If
If M(2,N+1)>M(2,N)
For Z=1 To M(2,N+1)-M(2,N)
MOVEDOWN
NEWPOS
Next Z
Goto N
End If
N: Next
BIG_EXPLO[X,Y,45,10,200,5,1]
REPLAY=0
End Proc
Procedure ZEROARAY
For X=1 To 19
For Y=1 To 12
F(X,Y)=0
Next : Next
End Proc
Procedure BOMBSPUT[HOWMANY,SEE]
If S=6 Then Goto FINALSTAGE
For N=1 To HOWMANY
REP: X=Rnd(18)+1 : Y=Rnd(9)+2
If F(X,Y)=1 Then Goto REP
If SPECIAL and Y=6 Then Goto REP
If SPECIAL and Y=5 Then Goto REP
Ink 2
F(X,Y)=1
If SEE=1
Circle X*16,Y*16,2
End If
'Locate 1,28 : Print X,Y
'Wait Key
Next
Pop Proc
FINALSTAGE:
Ink 2
Restore BOMBPLAN
For B=4 To 12 : For A=1 To 19
Read P
If P=1
F(A,B)=1
If CHEAT=1
Circle A*16,B*16,2
End If
Else
F(A,B)=0
End If
Next A : Next B
BOMBPLAN:
Data 0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0
Data 1,0,1,0,1,0,1,1,1,0,1,1,1,0,1,0,1,0,1
Data 0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0
Data 0,0,0,0,0,1,1,0,1,1,1,0,1,1,0,0,0,0,0
Data 0,1,0,1,0,0,0,0,1,1,1,0,0,0,0,1,0,1,0
Data 1,1,0,1,0,0,1,1,0,0,0,1,1,0,0,1,0,1,1
Data 0,0,0,0,0,1,1,0,0,1,0,0,1,1,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
If Rnd(100)>50
F(7,6)=1
If CHEAT=1
Circle 7*16,6*16,3
End If
Else
F(13,6)=1
If CHEAT=1
Circle 13*16,6*16,3
End If
End If
If Rnd(100)>50
F(9,6)=1
If CHEAT=1
Circle 9*16,6*16,3
End If
Else
F(11,6)=1
If CHEAT=1
Circle 11*16,6*16,3
End If
End If
Ink 0
Bar 0,0 To 320,55
Bob 4,133,28,17
End Proc
Procedure MAKEGAP
'======================== for gap =====================
Ink 0 : Bar 0,89 To 320,103
Bob 3,-10,93,13
Channel 3 To Bob 3
S$="Anim 0,(13,4)(14,4)(15,4) ; F: L X=-10 ; L Y=93 ; M 320,0,320 ; J F ;"
Amal 3,S$
Amal On 3
'======================================================
End Proc
Procedure SEARCH
COUNT=0
Gosub ABOVE
Gosub BELOW
Gosub LEFT
Gosub RIGHT
Ink 19,0
Text 104,240,Str$(COUNT)
If COUNT>0
For N=1 To COUNT : Sam Play 1,3,7800 : Wait 10 : Next
End If
'store location in array M
M(1,P)=XP
M(2,P)=YP
Pop Proc
ABOVE: A=XP : B=YP-1
If B=0 Then Return
If F(A,B)=1 Then COUNT=COUNT+1
Return
BELOW: A=XP : B=YP+1
If B=13 Then Return
If F(A,B)=1 Then COUNT=COUNT+1
Return
LEFT: A=XP-1 : B=YP
If A=0 Then Return
If F(A,B)=1 Then COUNT=COUNT+1
Return
RIGHT: A=XP+1 : B=YP
If A=20 Then Return
If F(A,B)=1 Then COUNT=COUNT+1
Return
End Proc
Procedure NEWPOS
X=X Bob(1) : Y=Y Bob(1)
XP=(X+4)/16 : YP=(Y+4)/16
End Proc
Procedure MOVELEFT
Channel 1 To Bob 1
If X-16<11 Then Pop Proc
L$="Anim 1,(8,4)(9,4)(8,4)(9,4) ; "
L$=L$+"Move -16,0,16 ; "
Sam Play 2,6,20000 : Sam Play 2,6,20000
Amal 1,L$
Amal On 1
Wait 16
Amal Off 1
Inc P
End Proc
Procedure MOVERIGHT
Channel 1 To Bob 1
If X+16>300 Then Pop Proc
R$="Anim 1,(6,4)(7,4)(6,4)(7,4) ; "
R$=R$+"Move 16,0,16 ; "
Sam Play 2,6,20000 : Sam Play 2,6,20000
Amal 1,R$
Amal On 1
Wait 16
Amal Off 1
Inc P
End Proc
Procedure MOVEUP
Channel 1 To Bob 1
If REPLAY Then Goto MISSIT
If Y-16<ROWTOP Then Pop Proc
If SPECIAL and YP=7 and Point(X,Y-10)<>0 Then Amal Freeze 3 : Gosub MOVETOGETHER
If SPECIAL and YP=7 and Point(X,Y-12)=0 Then Pop Proc
MISSIT:
U$="Anim 1,(1,2)(2,2)(3,2)(4,2)(5,2)(4,2)(3,2)(2,2) ; "
U$=U$+"Move 0,-16,16 ; "
Sam Play 2,6,20000 : Sam Play 2,6,20000
Amal 1,U$
Amal On 1
Wait 16
Amal Off 1
Inc P
Pop Proc
MOVETOGETHER:
Amal Freeze 3
U$="Anim 1,(1,2)(2,2)(3,2)(4,2)(5,2)(4,2)(3,2)(2,2) ; "
U$=U$+"Move 0,-16,16 ; "
Amal 1,U$
Amal On 1
Wait 16
Amal Off 1
Inc P
NEWPOS
SEARCH
While Jup(1) : Wend
Amal On 3
Repeat
Wait Vbl
Bob 1,X Bob(3),Y Bob(3)-1,
Until Jup(1)
XX=X Bob(1)
Bob 1,XX-XX mod 16+12,,
Inc P
NEWPOS
SEARCH
Amal On 1
Return
End Proc
Procedure MOVEDOWN
Channel 1 To Bob 1
If Y+16>200 Then Pop Proc
If SPECIAL and YP=5 Then Pop Proc
D$="Anim 1,(1,2)(2,2)(3,2)(4,2)(5,2)(4,2)(3,2)(2,2) ; "
D$=D$+"Move 0,16,16 ; "
Sam Play 2,6,20000 : Sam Play 2,6,20000
Amal 1,D$
Amal On 1
Wait 16
Amal Off 1
Inc P
End Proc
Procedure BIG_EXPLO[X,Y,ANG,SPEED,REACH,FIRSTBOB,REP]
Degree
Sam Play 3,4,4000
For T=1 To REP
For R=1 To REACH Step SPEED
B=FIRSTBOB-1
For N=0 To(360/ANG)-1
Inc B
Bob B,X+R*Sin(N*ANG),Y+R*Cos(N*ANG),16
Next
Next
For C=1 To B : Bob Off C : Next
Next T
End Proc
Procedure MAKEGRID
Ink 2
For X=8 To 312 Step 16
Draw X,8 To X,200
Next
For Y=8 To 208 Step 16
Draw 8,Y To 312,Y
Next
Ink 12
For X=10 To 300 Step 16
Bar X,10 To X+12,22
Bar X,186 To X+12,198
Next
Ink 1
For X=10 To 300 Step 16
For Y=26 To 180 Step 16
Bar X,Y To X+12,Y+12
Next : Next
End Proc
'
'------------------------------------------------------------
'
'----------------------- VARIABLE LIST ----------------------
'
' XP,YP are the grid positions of Eric
' X,Y are the screen positions of Eric
' TX,TY are the screen positions of the chaser
' LIVES - Lives (1-4)
' ALIVE = -1 if Current Life Alive
' CHASER= -1 if Chaser is moving
' S = Stage
' WON = -1 if Eric gets to front door
' M(2,200) is record of Eric's movements (1,200)=X (2,200)=Y
' F(19,12) is representation of Minefield
' P is incremented every time Eric moves
' TP is incremented every time the Chaser moves
'