home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AMOS PD CD
/
amospdcd.iso
/
476-500
/
apd478
/
led_clones.amos
/
led_clones.amosSourceCode
< prev
Wrap
AMOS Source Code
|
1988-02-16
|
11KB
|
533 lines
Cls 0 : Change Mouse 2
Get Disc Fonts
Set Font 2
Dir$="marksman:leds"
Load "ledmusic.abk"
Load "led-samples.abk"
Music 1
Ink 4,0
Dim HIGHSCORE(9) : Dim HIGHSCORE$(9) : For F=0 To 9 : HIGHSCORE(F)=0 : HIGHSCORE$(F)="CHAZ" :
Next F
Dim CLONX(6) : Dim CLONY(6)
Global CLONX(),CLONY()
METHOD=0
BEGIN:
Screen Open 0,320,256,32,Lowres
CLONX(1)=166 : CLONX(2)=90 : CLONX(3)=287 : CLONX(4)=47 : CLONX(5)=137 : CLONX(6)=227
CLONY(1)=164 : CLONY(2)=133 : CLONY(3)=134 : CLONY(4)=104 : CLONY(5)=104 : CLONY(6)=104
' initialise variables
Rem MX & MY =X & Y co-ordinates,Mshot=trigger value(-1=trigger pressed,0=trigger not pressed)
XCAL=0 : YCAL=0
MX=0 : MY=0 : MSHOT=0 : SCORE=0 : LIVES=10 : MEHIT=0 : LEVEL=1 : KILED=0 : Amreg(0)=15 : Amreg(1)=20 : Amreg(2)=0
MXPTR=Varptr(MX)
MYPTR=Varptr(MY)
MSHOTPTR=Varptr(MSHOT)
OLDSHOT=0
' Initialise Gun and screen
Dreg(0)=0
Call 6
Load "ledhi.abk"
Curs Off : Flash Off : Paper 0 : Pen 2 : Cls : Get Sprite Palette
If METHOD=0 Then Proc METHOD : Cls
Bob Off 1
Load "lev1.abk" : Load "lev1.iff.abk",7
If METHOD=1
If THRU=0
Proc CALIBRATEGUN
End If
End If
THRU=1
Bob Off 1
'
Cls 0
Hide
Set Font 2
Ink 1,0
Text X Graphic(17),Y Graphic(11),"LEVEL"
Text X Graphic(19),Y Graphic(13),"1"
Wait 45
Screen Close 0
Screen Open 0,320,256,32,Lowres : Double Buffer
Hide
Get Sprite Palette
Flash Off : Curs Off
Unpack 7 : Hide
Locate 2,1 : Print "score:0" : For GUN=1 To 10 : Paste Bob 80+(GUN*20),9,29 : Next GUN
For V=63 To 0 Step -1
Mvolume V
Wait 2
Next V
Music Stop
Wait 30
Sam Play 1,1,14300
Wait 75
'
'
' main loop which gives screen X & Y position
Update Every 2
MAIN_LOOP:
While KILED<20+LEVEL*2
Proc PICK
For DELAY=1 To 130
If METHOD=1
Proc TRIGGER
Else Proc MOOSE
End If
If MSHOT=-1 Then Bob 1,MX,MY,1 : If Bob Col(1,2 To 8) Then Proc HIT_WHO
Proc HITME
If LIVES=0 Then MYDEATH : Goto BEGIN
Next DELAY
'
Wait Vbl
Wend
Proc NEX_LEVEL
KILED=0
Goto MAIN_LOOP
'
' Wait for the trigger to be pressed then return
Procedure TRIGWAIT
Shared MSHOT,MSHOTPTR
' init trigger
Dreg(0)=0
Call 6
MSHOT=0
Repeat
MSHOT=Jleft(1)
Until MSHOT=-1
End Proc
'
' Read the trigger and goto beampos if pressed, should be last routine called
Procedure TRIGGER
Shared MSHOT,OLDSHOT,MSHOTPTR
' read trigger - valptr in a0
MSHOT=Jleft(1)
If MSHOT<>OLDSHOT
OLDSHOT=MSHOT
If MSHOT=-1 : Proc BEAMPOS : Sam Play 2,5,16000 : End If
Else
Wait Vbl
MSHOT=0
End If
End Proc
'
' Return values in MX,MY,MSHOT = -1 if shot
Procedure BEAMPOS
Shared MSHOT,MX,MY,MXPTR,MYPTR,MSHOTPTR,XCAL,YCAL
Dreg(0)=2
Dreg(1)=Cop Logic
Dreg(2)=Phybase(0)
Dreg(3)=Phybase(1)
Dreg(4)=Phybase(2)
Dreg(5)=Phybase(3)
Areg(0)=MXPTR
Areg(1)=MYPTR
Areg(2)=MSHOTPTR
Call 6
MX=MX+XCAL
MY=MY+YCAL
If MY<0 or MY>255 Then MSHOT=0
End Proc
Procedure PSYCHO_ONE
Shared MEHIT
MEHIT=0
Bob 2,CLONX(1),CLONY(1),32
Channel 2 To Bob 2
A$="A 1,(5,RA)(4,RA)(3,RA)(2,RB)(14,RA)(2,RA)(3,RA)(4,RA)(5,RA)(32,RA)"
Amal 2,A$
Amal On 2
End Proc
Procedure PSYCHO_TWO
Shared MEHIT
MEHIT=0
Bob 3,CLONX(2),CLONY(2),32
Channel 3 To Bob 3
A$="A 1,(9,RA)(8,RA)(7,RA)(6,RB)(15,RA)(6,RA)(7,RA)(8,RA)(9,RA)(32,RA)"
Amal 3,A$
Amal On 3
End Proc
Procedure PSYCHO_THREE
Shared MEHIT
MEHIT=0
Bob 4,CLONX(3),CLONY(3),32
Channel 4 To Bob 4
A$="A 1,(9,RA)(8,RA)(7,RA)(6,RB)(15,RA)(6,RA)(7,RA)(8,RA)(9,RA)(32,RA)"
Amal 4,A$
Amal On 4
End Proc
Procedure PSYCHO_FOUR
Shared MEHIT
MEHIT=0
Bob 5,CLONX(4),CLONY(4),32
Channel 5 To Bob 5
A$="A 1,(13,RA)(12,RA)(11,RA)(10,RB)(16,RA)(10,RA)(11,RA)(12,RA)(13,RA)(32,RA)"
Amal 5,A$
Amal On 5
End Proc
Procedure PSYCHO_FIVE
Shared MEHIT
MEHIT=0
Bob 6,CLONX(5),CLONY(5),32
Channel 6 To Bob 6
A$="A 1,(13,RA)(12,RA)(11,RA)(10,RB)(16,RA)(10,RA)(11,RA)(12,RA)(13,RA)(32,RA)"
Amal 6,A$
Amal On 6
End Proc
Procedure PSYCHO_SIX
Shared MEHIT
MEHIT=0
Bob 7,CLONX(6),CLONY(6),32
Channel 7 To Bob 7
A$="A 1,(13,RA)(12,RA)(11,RA)(10,RB)(16,RA)(10,RA)(11,RA)(12,RA)(13,RA)(32,RA)"
Amal 7,A$
Amal On 7
End Proc
Procedure DIE_ONE
Amal Off 2
Bob 2,CLONX(1),CLONY(1),17
Channel 2 To Bob 2
A$="A 1,(17,5)(18,5)(19,5)(20,5)(5,5)(32,5)"
Amal 2,A$
Amal On 2
ADSCORE
End Proc
Procedure DIE_TWO
Amal Off 3
Bob 3,CLONX(2),CLONY(2),21
Channel 3 To Bob 3
A$="A 1,(21,5)(22,5)(23,5)(24,5)(32,5)"
Amal 3,A$
Amal On 3
ADSCORE
End Proc
Procedure DIE_THREE
Amal Off 4
Bob 4,CLONX(3),CLONY(3),21
Channel 4 To Bob 4
A$="A 1,(21,5)(22,5)(23,5)(24,5)(32,5)"
Amal 4,A$
Amal On 4
ADSCORE
End Proc
Procedure DIE_FOUR
Amal Off 5
Bob 5,CLONX(4),CLONY(4),25
Channel 5 To Bob 5
A$="A 1,(25,5)(26,5)(27,5)(28,5)(32,5)"
Amal 5,A$
Amal On 5
ADSCORE
End Proc
Procedure DIE_FIVE
Amal Off 6
Bob 6,CLONX(5),CLONY(5),25
Channel 6 To Bob 6
A$="A 1,(25,5)(26,5)(27,5)(28,5)(32,5)"
Amal 6,A$
Amal On 6
ADSCORE
End Proc
Procedure DIE_SIX
Amal Off 7
Bob 7,CLONX(6),CLONY(6),25
Channel 7 To Bob 7
A$="A 1,(25,5)(26,5)(27,5)(28,5)(32,5)"
Amal 7,A$
Amal On 7
ADSCORE
End Proc
Procedure PICK
PICK:
P=Rnd(5)+1
If Chanan(P+1) Then Goto PICK
If P=1 Then Proc PSYCHO_ONE
If P=2 Then Proc PSYCHO_TWO
If P=3 Then Proc PSYCHO_THREE
If P=4 Then Proc PSYCHO_FOUR
If P=5 Then Proc PSYCHO_FIVE
If P=6 Then Proc PSYCHO_SIX
End Proc
Procedure HIT_WHO
If Bob Col(2,0 To 1)
If I Bob(2)<=17
Amal Off 2 : Bob 2,,,17 : Sam Play 1,3,22000 : DIE_ONE
End If
End If
If Bob Col(3,0 To 1)
If I Bob(3)<=21
Amal Off 3 : Bob 3,,,21 : Sam Play 1,3,22000 : DIE_TWO
End If
End If
If Bob Col(4,0 To 1)
If I Bob(4)<=21
Amal Off 4 : Bob 4,,,21 : Sam Play 1,3,22000 : DIE_THREE
End If
End If
If Bob Col(5,0 To 1)
If I Bob(5)<=25
Amal Off 5 : Bob 5,,,25 : Sam Play 1,3,22000 : DIE_FOUR
End If
End If
If Bob Col(6,0 To 1)
If I Bob(6)<=25
Amal Off 6 : Bob 6,,,25 : Sam Play 1,3,22000 : DIE_FIVE
End If
End If
If Bob Col(7,0 To 1)
If I Bob(7)<=25
Amal Off 7 : Bob 7,,,25 : Sam Play 1,3,22000 : DIE_SIX
End If
End If
Bob Off 1
End Proc
Procedure ADSCORE
Shared SCORE
SCORE=SCORE+10
Shared KILED
KILED=KILED+1
Locate 7,1 : Print SCORE
End Proc
Procedure HITME
Shared MEHIT
For A=5 To 7
If Chanan(A)
If I Bob(A)=16
If MEHIT=0
Sam Play 4,4,17000 : Sam Play 2,3,27000 : Proc INJ : MEHIT=1
End If
End If
End If
Next A
For B=3 To 4
If Chanan(B)
If I Bob(B)=15
If MEHIT=0
Sam Play 4,4,17000 : Sam Play 2,3,27000 : Proc INJ : MEHIT=1
End If
End If
End If
Next B
If Chanan(2)
If I Bob(2)=14
If MEHIT=0
Sam Play 4,4,17000 : Sam Play 2,3,27000 : Proc INJ : MEHIT=1
End If
End If
End If
End Proc
' Calibrate the gun
Procedure CALIBRATEGUN
Hide
Shared MSHOT,XCAL,YCAL,MX,MY
Bob 1,399,399,
Bob Off 1
Cls 0
Text 50,180,"Fire at cross-hair to calibrate gun"
Paste Bob 160,100,31
OK=False
Repeat
XCAL=0 : YCAL=0
' clear trigger
MSHOT=0
' init trigger
Dreg(0)=0
Call 6
Repeat
Proc TRIGGER
Until MSHOT=-1
XCAL=160-MX
YCAL=100-MY
If XCAL<40 and XCAL>-40 Then OK=True
If YCAL<80 and YCAL>-80 Then OK=True
Until OK
MX=0 : MY=0
Cls
End Proc
Procedure INJ
Shared LIVES
LIVES=LIVES-1
If LIVES=9 Then Paste Bob 280,9,30
If LIVES=8 Then Paste Bob 260,9,30
If LIVES=7 Then Paste Bob 240,9,30
If LIVES=6 Then Paste Bob 220,9,30
If LIVES=5 Then Paste Bob 200,9,30
If LIVES=4 Then Paste Bob 180,9,30
If LIVES=3 Then Paste Bob 160,9,30
If LIVES=2 Then Paste Bob 140,9,30
If LIVES=1 Then Paste Bob 120,9,30
End Proc
Procedure METHOD
Shared METHOD
Show
Reserve Zone 2
A$=Zone$(" MOUSE ",1)
B$=Zone$(" PHAZER ",2)
Set Font 2
Ink 4,0
Bob 1,80,0,4
Text 20,110,"This Game can be Played with a Mouse"
Text 90,130,"Or....even better,"
Text 115,150,"with a"
Text 80,170,"TROJAN LIGHT PHAZER"
Text 105,190,"Please Select."
Locate 10,25 : Paper 5 : Print A$
Locate 20,25 : Paper 5 : Print B$
DEL:
If Mouse Zone=1 and Mouse Key=1 Then METHOD=2 : Paper 0 : Pop Proc
If Mouse Zone=2 and Mouse Key=1 Then METHOD=1 : Paper 0 : Pop Proc
Goto DEL
Bob 1,300,300,1
Bob Off 1
End Proc
Procedure DEL
Shared METHOD
While W<1
If METHOD=1 Then TRIGWAIT : W=1
If METHOD=2 and Mouse Key=1 Then W=1
Wend
End Proc
Procedure MOOSE
Shared MSHOT,MX,MY
MSHOT=0
For D=1 To 5
M=Mouse Click
If M=1 Then MSHOT=-1 : Sam Play 2,5,16000
MX=X Screen(X Mouse) : MY=Y Screen(Y Mouse)
Next D
M=0
Bob 10,MX,MY,33
End Proc
Procedure NEX_LEVEL
Wait 30
Shared LEVEL,METHOD,LIVES,CLONX(),CLONY()
LEVEL=LEVEL+1
If LEVEL=10
ENGAME
End If
Screen Open 2,320,200,4,Lowres
Curs Off
Screen 2
Cls 0
Locate 0,10
Set Font 2
Ink 2,0
Amreg(0)=10-LEVEL
Amreg(1)=20-LEVEL
Text X Graphic(17),Y Graphic(11),"LEVEL"
Text X Graphic(19),Y Graphic(13),Chr$(48+LEVEL)
Screen Hide 0
Paper 0
W=0
While W<1
If METHOD=1 Then TRIGWAIT : W=1
If METHOD=2 and Mouse Key=1 Then W=1
Wend
If LEVEL=4
Load "lev2.iff.abk",7 : Load "lev2.abk"
Screen 0 : Unpack 7
Locate 2,1 : Print "score:0" : For GUN=1 To LIVES : Paste Bob 80+(GUN*20),9,29 : Next GUN
End If
If LEVEL=7
Load "lev3.iff.abk",7 : Load "lev3.abk"
Screen 0 : Unpack 7
Locate 2,1 : Print "score:0" : For GUN=1 To LIVES : Paste Bob 80+(GUN*20),9,29 : Next GUN
CLONX(1)=132 : CLONX(2)=55 : CLONX(3)=295 : CLONX(4)=168 : CLONX(5)=230 : CLONX(6)=266
CLONY(1)=205 : CLONY(2)=128 : CLONY(3)=143 : CLONY(4)=85 : CLONY(5)=98 : CLONY(6)=96
End If
Sam Play 1,1,14300
Wait 30
Screen Show 0
Screen Close 2
Screen 0
End Proc
Procedure NUHIGH
Shared SCORE,HIGHSCORE(),HIGHSCORE$()
Locate 0,24 : Input "NAME :MAX 7 LETTERS: ";G$
Curs Off
U$=Upper$(G$) : N$=Left$(U$,7)
For H=0 To 9 Step 1
If SCORE>HIGHSCORE(H)
For M=8 To H Step -1
HIGHSCORE(M+1)=HIGHSCORE(M)
HIGHSCORE$(M+1)=HIGHSCORE$(M)
Next M
HIGHSCORE$(H)=N$
HIGHSCORE(H)=SCORE
H=9
End If
Next H
End Proc
Procedure PRTHIGH
Shared HIGHSCORE(),HIGHSCORE$()
Cls 0
Set Font 2
Ink 2,0
Bob 1,100,10,3
Bob 2,20,30,1
Bob 3,260,29,2
For H=0 To 9
B$=HIGHSCORE$(H)
D$=Str$(HIGHSCORE(H))
C=Len(D$)
R$=Right$(D$,C-1)
F$=String$("0",7-C)
P$=F$+R$
Text 190,50+H*15,P$
Text 80,50+H*15,B$
Next H
Ink 3,0
End Proc
Procedure MYDEATH
Sam Play 1,6,11000
Wait 70
Music 1
For V=0 To 63
Wait 2
Mvolume V
Next V
Load "ledhi.abk"
Shared SCORE,LEVEL,HIGHSCORE()
Amal Off
Screen Close 0
Screen Open 0,320,256,32,Lowres : Get Sprite Palette : Curs Off : Hide : Paper 0 : Cls 0
Set Font 2
Bob 1,80,0,4
Ink 3,0
Text 110,110,"GAME OVER"
Ink 2,0
Text 80,140,"SCORE "
Text 180,140,Str$(SCORE)
Text 80,170,"LEVEL"
Text 180,170,Str$(LEVEL)
If SCORE>HIGHSCORE(9) Then NUHIGH
Wait 50
Bob Off 1 : Wait 10
Cls 0
PRTHIGH
Set Font 2
Ink 3,0
Text 70,210,"PRESS FIRE TO PLAY AGAIN"
DEL
Screen Close 0
End Proc
Procedure ENGAME
Music 1
For MV=0 To 63
Wait 2
Mvolume MV
Next MV
Screen Open 2,320,256,4,Lowres
Hide : Curs Off : Cls 0
Ink 3,0
Set Font 1
Text 80,30,"WELL DONE!"
Set Font 2
Ink 2,0
Text 30,53,"You have achieved the almost impossible"
Text 30,70,"I only hope you didn't cheat ,or else"
Text 30,90,"You'll never survive the challenge of:"
Set Font 1
Ink 3,0
Text 70,120,"LED CLONES II"
DEL
Direct
End Proc