home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AMOS PD CD
/
amospdcd.iso
/
451-475
/
apd469
/
samplegame.amos
/
samplegame.amosSourceCode
< prev
next >
Wrap
AMOS Source Code
|
1993-01-25
|
9KB
|
454 lines
'
' Sample Game by David C. May
'
'-------------------------------
If Length(1)=0 Then Load "SAMPLE.ABK"
If Length(2)=0 Then Load "NUMBERS.ABK"
If Length(5)=0 Then Load "SOUNDS.ABK"
If Length(3)=0 Then Load "MUSIC.ABK"
Make Mask
Make Icon Mask
Hide
Screen Open 0,300,400,32,0
Screen Display 0,128,54,300,192 : Flash Off : Curs Off : Cls 0
Screen Open 1,640,9,4,Hires
Screen Display 1,128,45,640,9 : Flash Off : Curs Off : Cls 0
Get Icon Palette
Auto View Off
'
NUMG=3
Dim PAF(5),GX(NUMG),GY(NUMG),GF(NUMG),GS(NUMG),GD(NUMG),AGX(NUMG),AGY(NUMG),GI(NUMG),GR(NUMG)
Dim DX(3),DY(3),JDR(15)
Dim DR(3)
Restore JDRS
For A=0 To 15 : Read JDR(A) : Next
'
PAF(0)=0 : PAF(1)=1 : PAF(2)=2 : PAF(3)=3 : PAF(4)=2 : PAF(5)=1
DX(0)=0 : DY(0)=-1
DX(1)=1 : DY(1)=0
DX(2)=0 : DY(2)=1
DX(3)=-1 : DY(3)=0
'
NEWGAME:
LEVEL=1 : MEN=4
Unpack 6 To 0
Double Buffer
Screen Offset 0,,51
View
Bob 0,150,139,125
Bob Draw
Screen Swap : Wait Vbl : Bob Clear
Repeat
Until Joy(1)=16
SCORE=999999 : AD=-SCORE : ZSHOWSCORE
Screen 1
Ink 1
Paper 0
Gr Writing 0
Text 0,6,"Sample Game by David C. May"
Text 280,6,"Level"+Str$(LEVEL)+" Lives"+Str$(MEN)+" Score"
Screen 0
LEVEL:
PEL=504
FRUIT=Min(LEVEL/3,2)
Screen 0
Unpack 6 To 0
Flash 31,"(f00,20)(fff,20)"
Flash 30,"(800,20)(888,20)"
Screen Offset 0,,51
Double Buffer
Autoback 0
Bob Update Off
View
DGPTR=Varptr(DG$)
NEWMAN:
Dec MEN : If MEN<0 Then Music Off : Goto NEWGAME
PDEAD=0
FRUITON=0 : SM=0 : SMTIMER=0
Screen 1
Ink 0 : Paper 0
Bar 328,0 To 343,8
Bar 432,0 To 455,8
Ink 1
Text 320,6,Str$(LEVEL)
Text 424,6,Str$(MEN)
Screen 0
PX=7 : PY=7 : PF=0 : PD=1 : APX=PX*20+8 : APY=PY*20 : PI=2
For G=0 To NUMG
GX(G)=7+Rnd(1) : GY(G)=6 : GF(G)=0 : GS(G)=0 : GD(G)=Rnd(1)*2+1
GI(G)=G mod 5 : AGX(G)=GX(G)*20+DX(GD(G))*GI(G)*4 : AGY(G)=GY(G)*20 : GR(G)=1
Next
ZSHOWGUYS
View
Screen Swap : Wait Vbl : Bob Clear
Bob 2+NUMG,150,100,124
Bob Draw
Screen Swap : Wait Vbl : Bob Clear
Music Off : Wait 2
Sam Play 3,6,9000 : Wait 1
Sam Play 12,6,9000
Wait 90
Bob Off 2+NUMG
Bob Draw
Randomize Timer
SLOWGHOSTS=0
Music 1
LPX=0 : LPY=0 : LPI=0 : SCAREDTIMER=0
MAIN:
View : Screen Swap : Wait Vbl : Bob Clear
SLOWGHOSTS=1-SLOWGHOSTS
If SCAREDTIMER>0
SCAREDTIMER=Max(0,SCAREDTIMER-1)
If SCAREDTIMER<25
Q=(SCAREDTIMER and 4)/4
Colour 15,$55A+Q*$AA5
Colour 16,$225+Q*$663
Else
Colour 15,$55A
Colour 16,$225
End If
If SCAREDTIMER=0
For G=0 To NUMG
If GR(G)=-1
GR(G)=1
End If
Next
End If
Else
Colour 15,$55A
Colour 16,$225
End If
If Rnd(500)=0 Then FRUITON=1
J=Joy(1)
JDIRECT
MC=0
If PI=0
MC=Point(APX+DX(PD)*10,APY+DY(PD)*10)
If DR>=0
CHECK=Point(APX+DX(DR)*10,APY+DY(DR)*10)
If CHECK<>15 and CHECK<>29
PD=DR
MC=0
End If
End If
End If
KPX=0 : KPY=0
If MC<>15 and MC<>29
If DR>=0 and PI>0 and Abs(PD-DR)=2
Add PX,DX(PD)
Add PY,DY(PD)
PD=DR : PI=5-PI
End If
Add PF,1,0 To 5
Add APX,DX(PD)*4
Add APY,DY(PD)*4
Add PI,1,0 To 4
If PI=0
Add PX,DX(PD)
Add PY,DY(PD)
End If
If(PI=0 or PI=3) and LPX=0
CPTX=PX*20+DX(PD)*(-10*(PI=3))
CPTY=PY*20+DY(PD)*(-10*(PI=3))
CHECK=Point(CPTX,CPTY)
If CHECK=12
KPX=CPTX : KPY=CPTY : KPI=118
Dec PEL
AD=10
Sam Play 1,Rnd(2)+1,15000
End If
If CHECK=31
KPX=CPTX : KPY=CPTY : KPI=120
Dec PEL
AD=100
EATEN=0
Sam Play 1,9,12000
For G=0 To NUMG
If GR(G)=1
GR(G)=-1
GI(G)=(5-GI(G)) mod 5
If GI(G)>0
Add GX(G),DX(GD(G)) : Add GY(G),DY(GD(G))
End If
GD(G)=(GD(G)+2) mod 4
End If
Next
SCAREDTIMER=Max(60,180-LEVEL*10)
End If
End If
If PX=0 and PI=0
PX=15 : APX=300-16 : PI=4
End If
If PX=15 and PI=0
PX=0 : APX=0+16 : PI=4
End If
End If
PGOTONE=0
For G=0 To NUMG
If Not(SLOWGHOSTS=1 and GR(G)=-1)
For GDUMMY=0 To -(GR(G)=0)
If GI(G)=0
MC=Point(AGX(G)+DX(GD(G))*10,AGY(G)+DY(GD(G))*10)
Gosub THINK
DR=DR(1)
CHECK=Point(AGX(G)+DX(DR)*10,AGY(G)+DY(DR)*10)
If CHECK<>15
GD(G)=DR
Else
DR=DR(2)
CHECK=Point(AGX(G)+DX(DR)*10,AGY(G)+DY(DR)*10)
If CHECK<>15
GD(G)=DR
Else
DR=DR(3)
CHECK=Point(AGX(G)+DX(DR)*10,AGY(G)+DY(DR)*10)
If CHECK<>15
GD(G)=DR
Else
If MC=15
GD(G)=(2+GD(G)) mod 4
End If
End If
End If
End If
End If
Add GF(G),1,0 To 3
Add AGX(G),DX(GD(G))*4
Add AGY(G),DY(GD(G))*4
Add GI(G),1,0 To 4
If GI(G)=0
Add GX(G),DX(GD(G))
Add GY(G),DY(GD(G))
End If
If GX(G)=0 and GI(G)=0
GX(G)=15 : AGX(G)=300-4 : GI(G)=1
End If
If GX(G)=15 and GI(G)=0
GX(G)=0 : AGX(G)=0+4 : GI(G)=1
End If
If GR(G)=0
If GX(G)>6 and GX(G)<9 and GY(G)=6
GR(G)=1
End If
End If
Next
End If
If Abs(AGX(G)-APX)+Abs(AGY(G)-APY)<5
If GR(G)=-1
Inc EATEN
AD=AD+100*2^Min(EATEN,4)
SM=1+Min(EATEN,4) : SMTIMER=0
SX=APX : SY=APY
GR(G)=0
PGOTONE=1
Sam Play 2,9,7000
Else
If GR(G)=1
PDEAD=1
End If
End If
End If
Next
If LPX
Paste Bob LPX-7,LPY-7,LPI
End If
If KPX
Paste Bob KPX-7,KPY-7,KPI
ZSHOWGUYS
Else
ZSHOWGUYS
End If
LPX=KPX : LPY=KPY : LPI=KPI
If FRUITON
Bob 2+NUMG,152,140,121+FRUIT
If Abs(APX-152)+Abs(APY-140)<5
FRUITON=0 : Bob Off 2+NUMG
AD=AD+500*FRUIT
SM=5+FRUIT : SMTIMER=0
If SM=5
SM=1 : AD=AD+100
End If
SX=APX : SY=APY
Sam Play 1,9,9000
End If
Else
Bob Off 2+NUMG
End If
ZSHOWSCORE
Wait Vbl
Bob Draw
If PGOTONE
End If
If PEL=0
PDEAD=0
Music Off : Wait 1
Screen Swap : Wait Vbl : Bob Clear
Paste Bob LPX-7,LPY-7,LPI
Bob Draw
For PF=PF To 0 Step -1
Screen Swap : Wait Vbl : Bob Clear : ZSHOWGUYS : Wait 2 : Bob Draw
Next
Sam Play 3,7,9000
For FR=0 To 6
PF=FR mod 6
Screen Swap : Wait Vbl : Bob Clear : ZSHOWGUYS : Wait 6 : Bob Draw
Next
Screen Swap : Wait Vbl : Bob Clear
Wait 90
Sam Play 4,5,10000 : Wait 1
Sam Play 8,5,10000
For G=0 To NUMG
Bob Off G+1
Next
Bob Draw
Screen Swap : Wait Vbl : Bob Clear
Flash 15,"(55a,20)(fff,20)"
Flash 16,"(225,20)(888,20)"
Wait 120
Inc LEVEL
Inc MEN
Goto LEVEL
End If
If PDEAD
Sam Play 3,4,12000
Screen Swap : Wait Vbl : Bob Clear
If LPX
Paste Bob LPX-7,LPY-7,LPI
End If
Wait 90
For G=0 To NUMG
Bob Off G+1
Next
Sam Play 3,10,19000
For A=101 To 107
Bob 0,APX,APY,A
Bob Draw
Screen Swap : Wait Vbl : Bob Clear
Wait 7
Next
Sam Play 3,8,25000
For A=108 To 109
Bob 0,APX,APY,A
Bob Draw
Screen Swap : Wait Vbl : Bob Clear
Wait 2
Next
Bob 0,,,128
Bob Draw
Screen Swap : Wait Vbl : Bob Clear
Wait 60
Goto NEWMAN
End If
Goto MAIN
'
THINK:
XAS=PX : YAS=PY
If PI>0 Then Add XAS,DX(PD) : Add YAS,DY(PD)
GR=GR(G)
If GR=0 Then GR=1 : XAS=7+Rnd(1) : YAS=5-(GY(G)=5 and GX(G)>6 and GX(G)<9)
GOX=GR*Sgn(XAS-GX(G))
J=-(GOX<0)*4-(GOX>0)*8
JDIRECT
DR1=DR
GOY=GR*Sgn(YAS-GY(G))
J=-(GOY<0)-(GOY>0)*2
JDIRECT
DR2=DR
SMD=GD(G)
OPD=(SMD+2) mod 4
If DR1=-1 Then DR1=DR2 : If DR1=-1 Then DR1=SMD : DR2=SMD
If DR2=-1 Then DR2=DR1
If Rnd(1)=0 Then Swap DR1,DR2
If Rnd(LEVEL*(3-(G mod 4))+1)=0 and GR(G)<>0 Then DR1=Rnd(3) : DR2=(DR1+Rnd(1)*2-1) mod 4
If GY(G)=5 and GX(G)>6 and GX(G)<9 and GR(G)<>0
If DR1=2
DR1=0
End If
If DR2=2
DR2=0
End If
End If
If DR1=SMD
If DR2=SMD
DR(1)=SMD
DR(2)=(SMD+Rnd(1)*2-1) mod 4
DR(3)=(DR(2)+2) mod 4
Else
DR(1)=SMD
DR(2)=DR2
DR(3)=(DR(2)+2) mod 4
End If
Else
If DR1=OPD
If DR2=OPD
DR(1)=(SMD+Rnd(1)*2-1) mod 4
DR(2)=(DR(1)+2) mod 4
DR(3)=SMD
Else
DR(1)=DR2
DR(2)=SMD
DR(3)=(DR(1)+2) mod 4
End If
Else
DR(1)=DR1
DR(2)=SMD
DR(3)=(DR(1)+2) mod 4
End If
End If
If GY(G)=6 and GX(G)>6 and GX(G)<9
DR(1)=SMD
If Rnd(32)=0
DR(1)=0
End If
DR(2)=SMD
DR(3)=SMD
End If
Return
'
Procedure ZSHOWSCORE
Shared SCORE,AD,MEN
If Int(SCORE/20000)<>Int((SCORE+AD)/20000) Then Inc MEN
A1$=Right$("00000"+Str$(SCORE)-" ",6)
Add SCORE,AD
A2$=Right$("00000"+Str$(SCORE)-" ",6)
Screen 1
For A=1 To 6
If Mid$(A1$,A,1)<>Mid$(A2$,A,1)
Paste Icon 528+A*8,0,1+Val(Mid$(A2$,A,1))
End If
Next
AD=0
Screen 0
End Proc
Procedure ZSHOWGUYS
Shared SM,SMTIMER,SX,SY
Shared APX,APY,PF,PD,PAF(),AGX(),AGY(),GF(),GS(),GD(),GR(),NUMG
Bob 0,APX,APY,PAF(PF)+1+PD*4
For G=0 To NUMG
If GR(G)=0
FRAME=97+GD(G)
Else
FCOLOR=-(G mod 4)*(GR(G)=1)-4*(GR(G)=-1)
FRAME=FCOLOR*16+17+4*GD(G)+GF(G)
End If
Bob G+1,AGX(G),AGY(G),FRAME
Next
If SM
Bob 3+NUMG,SX,SY,109+SM
Inc SMTIMER
If SMTIMER=25
SM=0
End If
Else
Bob Off 3+NUMG
End If
VPOINT=Min(208,Max(APY-96,0))
Screen Offset 0,,VPOINT
End Proc
Procedure JDIRECT
Shared J,PD,DR,JDR()
DR=JDR(J and 15)
End Proc
'
JDRS:
Data -1,0,2,-1,3,0,2,-1,1,0,2,-1,-1,-1,-1,-1