
OPEN WINDOW 640,512
PT=VAL(RIGHT$(time$,2))
DIM NAME$(4):DIM CDOWN$(4)
DIM ENDPLAY$(4):DIM CNAM$(4)
DIM C1(16):DIM C2(16)
DIM DP(4):DIM DST(16)
DIM ANG(16):DIM SP(4)
DIM CPU(4):DIM CLR(4,3)
DIM XV(16,4):DIM YV(16,4)
DIM XP(4):DIM YP(4)
DIM YM(8):DIM GP(4)
DIM VP(4):DIM YLL(4)
DIM YUL(4):DIM SD(4)
DIM SHOT(4):DIM XS(16)
DIM YS(16):DIM OB(120,100)
AUTHOR$="NORTHERN LIGHTS PARTY PLAY 2002"
LSTNXT$="L1 - LAST | L2 - NEXT"
RESTORE CNAM
FOR A=0 TO 3
READ CNAM$(A)
NEXT A
RESTORE TITLES
FOR A=0 TO 3
READ NAME$(A)
NEXT A
RESTORE TTO
FOR A=0 TO 3
READ CDOWN$(A)
NEXT A
RESTORE PCOLOUR
FOR P=0 TO 3
FOR C=0 TO 2
READ CLR(P,C)
NEXT C
NEXT P
90 CLEAR WINDOW
RESTORE BLAST
FOR A=0 TO 2
READ DST(A)
READ ANG(A)
XV(A,1)=DST(A)*COS(ANG(A))+310
XV(A+3,1)=DST(A)*COS(-ANG(A))+310
YV(A,1)=DST(A)*SIN(ANG(A))+370
YV(A+3,1)=DST(A)*SIN(-ANG(A))+370
NEXT A
SETRGB 1,0,255,0
FILL CIRCLE 310,370,15
CLEAR FILL TRIANGLE XV(0,1),YV(0,1) TO XV(1,1),YV(1,1) TO XV(2,1),YV(2,1)
CLEAR FILL TRIANGLE XV(3,1),YV(3,1) TO XV(4,1),YV(4,1) TO XV(5,1),YV(5,1)
SETRGB 1,128,128,255
RESTORE TANK
FOR A=0 TO 15
READ DST(A):READ ANG(A)
NEXT A
FILL RECT 295,105 TO 305,145
FILL CIRCLE 310,125,5
SETRGB 1,255,255,0
FOR A=0 TO 15
XV(A,1)=1.5*DST(A)*COS(ANG(A)+(5*PI/8))+190
YV(A,1)=1.5*-DST(A)*SIN(ANG(A)+(5*PI/8))+250
NEXT A
FOR A=0 TO 3
YM(A)=170
FILL TRIANGLE XV(A*4,1),YV(A*4,1) TO XV(A*4+1,1),YV(A*4+1,1) TO XV(A*4+2,1),YV(A*4+2,1)
FILL TRIANGLE XV(A*4+1,1),YV(A*4+1,1) TO XV(A*4+2,1),YV(A*4+2,1) TO XV(A*4+3,1),YV(A*4+3,1)
NEXT A
SETRGB 1,255,0,0
FILL RECT 405,255 TO 410,270
FILL RECT 410,255 TO 450,260
FILL RECT 450,260 TO 455,225
RECT 225,95 TO 395,165
RECT 155,165 TO 225,335
RECT 395,165 TO 465,335
RECT 225,335 TO 395,405
RECT 199,39 TO 421,53
B=0:LM=0
TEXT 100,420,"USE LEFT AND RIGHT TO ROTATE THE TANK"
TEXT 100,435,"USE L2 TO SHOOT THE GAME YOU WANT TO PLAY"
TEXT 100,450,"USE START+SELECT TO EXIT THIS PROGRAM"
TEXT 100,465,"USE START FOR A SET OF INSTRUCTIONS"
TEXT 300,500,"PARSE TIME "+STR$(PT)+" SECONDS"
91 IF C1(3)=1 INST=1
IF INST=1 AND C1(3)=0 GOTO 1234
IF C1(8)=1 S=1
B=B+C1(7)-C1(5)
IF B>15 B=0
IF B<0 B=15
CLEAR FILL RECT 226,166 TO 394,334
FOR A=0 TO 15
XV(A,0)=8*DST(A)*COS(ANG(A)+(B*PI/8))+310
YV(A,0)=-8*DST(A)*SIN(ANG(A)+(B*PI/8))+250
NEXT A
FOR A=0 TO 3
FILL TRIANGLE XV(A*4,0),YV(A*4,0) TO XV(A*4+1,0),YV(A*4+1,0) TO XV(A*4+2,0),YV(A*4+2,0)
FILL TRIANGLE XV(A*4+1,0),YV(A*4+1,0) TO XV(A*4+2,0),YV(A*4+2,0) TO XV(A*4+3,0),YV(A*4+3,0)
NEXT A
IF C<>B THEN
CLEAR FILL RECT 200,40 TO 420,52
C=B
FI
GAME=INT((C+2)/4):IF GAME>3 GAME=0
IF S=1 THEN
XS=(XV(5,0)+XV(7,0))/2
YS=(YV(5,0)+YV(7,0))/2
FOR A=0 TO 20
XS=XS+(4*COS(B*PI/8))
YS=YS+(-4*SIN(B*PI/8))
FILL CIRCLE XS,YS,10
WAIT 0.03
CLEAR FILL CIRCLE XS,YS,10
NEXT A
S=0
92 IF GAME=0 GOTO 1
IF GAME=1 GOTO 2
IF GAME=2 GOTO 3
IF GAME=3 GOTO 4
FI
TEXT 210,50,NAME$(GAME)
GOSUB 901
GOTO 91

1 DIM SCP(4)
SETRGB 1,128,128,128
10 CLEAR WINDOW
GOSUB 904
RESTORE TRONINST
GOSUB 908
SETRGB 1,128,128,128
TEXT 290,50,"TRON"
TEXT 150,80,AUTHOR$
RECT 90,90 TO 500,210
TEXT 110,110,"WHO IS PLAYING?"
TEXT 110,125,LSTNXT$
FOR P=0 TO 3
SETRGB 1,CLR(P,0),CLR(P,1),CLR(P,2)
TEXT 110+P*100,155,"MAN "+STR$(P+1)+"UP"
TEXT 110+P*100,170,"CPU "+CNAM$(P)
TEXT 110+P*100,185,"NO PLAY"
NEXT P
SETRGB 1,128,128,128
R=0:PL=3:LM=3
REPEAT
GOSUB 901
IF C1(8)=0 AND R=2 AND M>0 AND M+C>1 R=1
IF R=2 AND (M<1 OR M+C<2) R=0
C=0:M=0:DIF=0
FOR P=0 TO 3
CPU(P)=(YM(P)-155)/15
IF CPU(P)=1 THEN
C=C+1:DIF=4
FI
IF CPU(P)=0 M=M+1
NEXT P
UNTIL(R=1 OR R=3)
IF R=3 GOTO 90
11 LM=3:PL=0
IF DIF=4 THEN
CLEAR FILL RECT 91,91 TO 499,209
YM(0)=170
TEXT 110,110,"PLEASE SELECT CPU EXPERIENCE"
TEXT 110,125,LSTNXT$
TEXT 110,155,"D.BECKHAM - DIES ON SOME CORNERS"
TEXT 110,170,"J.VEGAS   - AVERAGE INTELLIGENCE"
TEXT 110,185,"B.HILL    - CHASES NEAREST OPPONENT"
IF M=1 AND C=3 THEN
TEXT 110,200,"V.RAPTOR  - ATTACKS AS A PACK":LM=4
FI
IF M>1 THEN
TEXT 110,200,"CPU OFF   - HUMANS ONLY":LM=4
FI
R=0:PL=0
REPEAT
GOSUB 901
IF C1(8)=0 AND R=2 R=1
UNTIL(R=1 OR R=3)
IF R=3 GOTO 10
DIF=(YM(0)-155)/15
FI
CLEAR FILL RECT 91,91 TO 499,209
YM(0)=170
TEXT 110,110,"PLEASE SELECT GAME DIFFICULTY"
TEXT 110,125,LSTNXT$
TEXT 110,155,"EASY   - SLOW ENOUGH FOR BEGINNERS"
TEXT 110,170,"NORMAL - GO ON, YOU KNOW YOU WANT TO"
TEXT 110,185,"HARD   - FOR THE ENTHUSIAST"
TEXT 110,200,"TRON   - HARD CORE TRON PLAYERS ONLY"
R=0:LM=4
REPEAT
GOSUB 901
IF C1(8)=0 AND R=2 R=1
UNTIL(R=1 OR R=3)
IF R=3 AND C=0 GOTO 10
IF R=3 AND C>0 THEN
DIF=4:GOTO 11
FI
SPD=9-((YM(0)-155)/7.5)
FOR A=0 TO 119
FOR B=0 TO 99
OB(A,B)=0
NEXT B
NEXT A
FOR P=0 TO 3
12 OX=INT(RAN(119)):OY=INT(RAN(99))
XP(P)=OX*5+10:YP(P)=OY*5
IF 500-YP(P)=MIN(YP(P),500-YP(P)) AND 500-YP(P)<=MIN(XP(P)-10,610-XP(P)) 
DP(P)=1
IF YP(P)=MIN(YP(P),500-YP(P)) AND YP(P)<=MIN(XP(P)-10,610-XP(P)) DP(P)=2
IF 610-XP(P)=MIN(XP(P)-10,610-XP(P)) AND 610-XP(P)<=MIN(YP(P),500-YP(P)) 
DP(P)=3
IF XP(P)-10=MIN(XP(P)-10,610-XP(P)) AND XP(P)-10<=MIN(YP(P),500-YP(P)) 
DP(P)=4
IF CPU(P)=2 OR (CPU(P)=1 AND DIF=3 AND M>1) DP(P)=-1
IF DP(P)=-1 ENDPLAY$(P)="DID NOT PLAY"
FOR Q=0 TO P
IF P>Q AND XP(P)=XP(Q) AND YP(P)=YP(Q) GOTO 12
NEXT Q
OB(OX,OY)=P+1
NEXT P
GOSUB 902
QQ=4:RECT 10,0 TO 610,500:RR=0
REPEAT
WAIT SPD/100
BA=PEEK("port1")
BB=PEEK("port2")
FOR A=0 TO 15
C1(A)=SIG(AND(BA,2^A))
C2(A)=SIG(AND(BB,2^A))
NEXT A
IF C1(3)=1 OR C2(3)=1 RR=2
IF C1(3)=0 AND C1(3)=0 AND RR=2 RR=1
IF RR=1 THEN
RR=0:GOSUB 905
FI
FOR P=0 TO 3
SETRGB 1,CLR(P,0),CLR(P,1),CLR(P,2)
FILL RECT XP(P),YP(P) TO XP(P)+5,YP(P)+5
IF DP(P)<0 THEN
QQ=0
FOR Q=0 TO 3
IF DP(Q)<0 THEN
FOR A=0 TO 119
FOR B=0 TO 99
IF OB(A,B)=Q+1 THEN
XX=A*5+10:YY=B*5
CLEAR FILL RECT XX,YY TO XX+5,YY+5
OB(A,B)=0
FI
NEXT B
NEXT A
DP(Q)=0:XP(Q)=0:YP(Q)=0
IF CPU(Q)=0 M=M-1
FI
QQ=ABS(SIG(DP(Q)))+QQ
NEXT Q
RECT 10,0 TO 610,500
FI
IF DP(P)=0 GOTO 105
IF DIF>1 THEN
FOR DS0=0 TO 5
DS1=2
IF DS0<5 DS1=1
IF DS0<3 DS1=0
DS2=3
IF DS0=1 OR DS0=3 DS2=2
IF DS0=0 DS2=1
DST(DS0)=(((XP(DS1)-XP(DS2))^2)+((YP(DS1)-YP(DS2))^2))^0.5
NEXT DS0
IF DP(0)=0 THEN
DST(0)=999:DST(1)=999:DST(2)=999
FI
IF DP(1)=0 THEN
DST(0)=999:DST(3)=999:DST(4)=999
FI
IF DP(2)=0 THEN
DST(1)=999:DST(3)=999:DST(5)=999
FI
IF DP(3)=0 THEN
DST(2)=999:DST(4)=999:DST(5)=999
FI
FI
IF CPU(P)=1 THEN
IF DIF=3 THEN
FOR Q=0 TO 3
IF CPU(Q)=0 VP(P)=Q
NEXT Q
FI
IF DIF=2 THEN
IF P=0 THEN
IF DST(0)<MIN(DST(1),DST(2)) VP(0)=1
IF DST(1)<MIN(DST(0),DST(2)) VP(0)=2
IF DST(2)<MIN(DST(0),DST(1)) VP(0)=3
FI
IF P=1 THEN
IF DST(0)<MIN(DST(3),DST(4)) VP(0)=0
IF DST(3)<MIN(DST(0),DST(4)) VP(0)=2
IF DST(4)<MIN(DST(0),DST(3)) VP(0)=3
FI
IF P=2 THEN
IF DST(1)<MIN(DST(3),DST(5)) VP(0)=0
IF DST(3)<MIN(DST(1),DST(5)) VP(0)=1
IF DST(5)<MIN(DST(1),DST(3)) VP(0)=3
FI
IF P=3 THEN
IF DST(2)<MIN(DST(4),DST(5)) VP(0)=0
IF DST(4)<MIN(DST(2),DST(5)) VP(0)=1
IF DST(5)<MIN(DST(2),DST(4)) VP(0)=2
FI
FI
IF DIF>1 THEN
XMV=SIG(XP(VP(P))-XP(P))
YMV=SIG(YP(VP(P))-YP(P))
XDS=ABS(XP(VP(P))-XP(P))
YDS=ABS(YP(VP(P))-YP(P))
IF (DP(P)=1 AND YMV=1) OR (DP(P)=2 AND YMV=-1) GP(P)=3.5+XMV/2
IF (DP(P)=3 AND XMV=1) OR (DP(P)=4 AND XMV=-1) GP(P)=1.5+YMV/2
IF DP(P)<3 AND XDS>YDS GP(P)=3.5+XMV/2
IF DP(P)>2 AND XDS<YDS GP(P)=1.5+YMV/2
FI
SCP(0)=YP(P)-5
SCP(1)=YP(P)+5
SCP(2)=XP(P)-5
SCP(3)=XP(P)+5
FOR Q=0 TO 3
SP(Q)=1
NEXT Q
IF YP(P)=0 SP(0)=0
IF YP(P)=495 SP(1)=0
IF XP(P)=10 SP(2)=0
IF XP(P)=605 SP(3)=0
FOR R=0 TO 1
IF YP(P)>0 AND YP(P)<495 THEN
IF OB((XP(P)-10)/5,SCP(R)/5)>0 SP(R)=0
FOR Q=0 TO 3
IF XP(P)=XP(Q) AND SCP(R)=YP(Q) AND Q<>P SP(R)=0
NEXT Q
FI
IF XP(P)>10 AND XP(P)<605 THEN
IF OB((SCP(R+2)-10)/5,YP(P)/5)>0 SP(R+2)=0
FOR Q=0 TO 3
IF SCP(R+2)=XP(Q) AND YP(P)=YP(Q) AND Q<>P SP(R+2)=0
NEXT Q
FI
NEXT R
IF DP(P)=1 SP(1)=0
IF DP(P)=2 SP(0)=0
IF DP(P)=3 SP(3)=0
IF DP(P)=4 SP(2)=0
IF SP(DP(P)-1)=0 AND DIF=0 THEN
IF DP(P)<3 DG=3+INT(RAN(2))
IF DP(P)>2 DG=1+INT(RAN(2))
DP(P)=DG
FI
DT=0:DF=0:DG=0
IF DIF>0 THEN
FOR DN=0 TO 3
IF DP(P)<>DN+1 AND SP(DN)=1 DT=DN+1
IF DP(P)=DN+1 AND SP(DN)=1 DF=DP(P)
IF DIF>1 AND GP(P)=DN+1 AND SP(DN)=1 DG=GP(P)
NEXT DN
IF DIF=1 AND DF=0 DP(P)=DT
IF DIF>1 AND DP(P)<>DG AND DG>0 DP(P)=DG
IF DIF>1 AND DG=0 AND DF=0 AND DT>0 DP(P)=DT
FI
FI
XS(0)=0
IF CPU(P)=0 THEN
IF P=0 THEN
IF DP(P)>2 THEN
IF C1(4)=1 DP(P)=1
IF C1(6)=1 DP(P)=2
XS(0)=1
FI
IF DP(P)<3 AND XS(0)=0 THEN
IF C1(7)=1 DP(P)=3
IF C1(5)=1 DP(P)=4
FI
FI
IF P=1 THEN
IF DP(P)>2 THEN
IF C2(4)=1 DP(P)=1
IF C2(6)=1 DP(P)=2
XS(0)=1
FI
IF DP(P)<3 AND XS(0)=0 THEN
IF C2(7)=1 DP(P)=3
IF C2(5)=1 DP(P)=4
FI
FI
IF P=2 THEN
IF DP(P)>2 THEN
IF C1(12)=1 DP(P)=1
IF C1(14)=1 DP(P)=2
XS(0)=1
FI
IF DP(P)<3 AND XS(0)=0 THEN
IF C1(15)=1 DP(P)=3
IF C1(13)=1 DP(P)=4
FI
FI
IF P=3 THEN
IF DP(P)>2 THEN
IF C2(12)=1 DP(P)=1
IF C2(14)=1 DP(P)=2
XS(0)=1
FI
IF DP(P)<3 AND XS(0)=0 THEN
IF C2(15)=1 DP(P)=3
IF C2(13)=1 DP(P)=4
FI
FI
FI
IF DP(P)=1 YP(P)=YP(P)-5
IF DP(P)=2 YP(P)=YP(P)+5
IF DP(P)=3 XP(P)=XP(P)-5
IF DP(P)=4 XP(P)=XP(P)+5
FOR Q=0 TO 3
IF XP(P)=XP(Q) AND YP(P)=YP(Q) AND P<>Q THEN
DP(P)=-1:ENDPLAY$(P)="CRASHED INTO WALL"
DP(Q)=-1:ENDPLAY$(Q)="CRASHED INTO WALL"
FI
NEXT Q
IF YP(P)=-5 OR YP(P)=500 OR XP(P)=5 OR XP(P)=610 THEN
DP(P)=-1
ENDPLAY$(P)="CRASHED INTO PERIMETER"
FI
IF DP(P)>-1 THEN
IF OB((XP(P)-10)/5,YP(P)/5)>0 THEN
DP(P)=-1:ENDPLAY$(P)="CRASHED INTO WALL"
ELSE
OB((XP(P)-10)/5,YP(P)/5)=P+1
FI
FI
105 NEXT P
UNTIL(QQ<2 OR M=0)
FOR P=0 TO 3
IF DP(P)>0 THEN
IF CPU(P)=0 THEN
ENDPLAY$(P)="WINS THE GAME"
ELSE
ENDPLAY$(P)="CPU BEATS PLAYERS"
FI
FI
NEXT P
GOTO 903

2 DIM XAD(4):DIM YAD(4)
20 CLEAR WINDOW
SETRGB 1,128,128,128
GOSUB 904
TEXT 230,50,NAME$(1)
TEXT 150,80,AUTHOR$
RECT 90,90 TO 500,210
YM(0)=155
TEXT 110,110,"PLEASE SELECT THE MODE"
TEXT 110,125,LSTNXT$
TEXT 110,155,"CLASSIC    - 2 PLAYER TENNIS"
TEXT 110,170,"TAG-TEAM   - SIDE BY SIDE TEAMS"
TEXT 110,185,"DOUBLES    - 4 PLAYER TENNIS"
TEXT 110,200,"4-WAY FURY - WINNER TAKES ALL"
R=0:B=0:LM=4:PL=0
REPEAT
GOSUB 901
IF C1(8)=0 AND R=2 R=1
IF OR(C1(4),C1(6))=1 OR B=0 THEN
CLEAR FILL RECT 0,211 TO 120,512
CLEAR FILL RECT 495,211 TO 640,512
RESTORE TTTINST1
IF YM(0)=155 RESTORE TTTINST0
IF YM(0)=200 RESTORE TTTINST2
GOSUB 908
FI
SETRGB 1,128,128,128
UNTIL(R=1 OR R=3)
IF R=3 GOTO 90
MD=(YM(0)-155)/15
21 YM(0)=170
CLEAR FILL RECT 91,91 TO 499,209
TEXT 110,110,"WHO IS PLAYING?"
TEXT 110,125,LSTNXT$
IF MD>0 THEN
PL=3:L=3
ELSE
PL=1:L=1
ENDPLAY$(2)="DID NOT PLAY"
ENDPLAY$(3)="DID NOT PLAY"
FI
FOR P=0 TO PL
SETRGB 1,CLR(P,0),CLR(P,1),CLR(P,2)
TEXT 110+P*100,155,"MAN "+STR$(P+1)+"UP"
TEXT 110+P*100,170,"CPU "+CNAM$(P)
NEXT P
SETRGB 1,128,128,128
R=0:LM=2
REPEAT
GOSUB 901
IF C1(8)=0 AND R=2 AND M>0 R=1
IF R=2 AND M<1 R=0
M=0
FOR P=0 TO L
CPU(P)=(YM(P)-155)/15
IF CPU(P)=0 M=M+1
NEXT P
UNTIL(R=1 OR R=3)
IF R=3 GOTO 20
22 YM(0)=155
CLEAR FILL RECT 91,91 TO 499,209
TEXT 110,110,"SELECT WINNING SCORE"
TEXT 110,125,LSTNXT$
FOR A=0 TO 3
TEXT 110,155+A*15,STR$(A*5+5)
NEXT A
R=0:PL=0:LM=4
REPEAT
GOSUB 901
IF C1(8)=0 AND R=2 R=1
UNTIL(R=1 OR R=3)
IF R=3 GOTO 21
WS=(YM(0)-155)/3+5
CLEAR FILL RECT 91,91 TO 499,209
YM(0)=155
TEXT 110,110,"PLEASE SELECT GAME DIFFICULTY"
TEXT 110,125,LSTNXT$
TEXT 110,155,"NORMAL - CLASSIC SPEED"
TEXT 110,170,"HARD   - FASTER AND MORE INTENSE"
R=0:LM=2
REPEAT
GOSUB 901
IF C1(8)=0 AND R=2 R=1
UNTIL(R=1 OR R=3)
IF R=3 GOTO 22
SPD=5-((YM(0)-155)/7.5)
XP(0)=40:YP(0)=250:XP(1)=580:YP(1)=250
XB=40:YB=250
FOR A=0 TO 3
YLL(A)=20:YUL(A)=480:SP(A)=0
NEXT A
IF MD=1 THEN
YP(0)=125:YP(1)=375:XP(2)=40:YP(2)=375:XP(3)=580:YP(3)=125:YLL(1)=270:YLL(2)=270:YUL(0)=230:YUL(3)=230
FI
IF MD=2 THEN
XP(2)=130:YP(2)=250:XP(3)=480:YP(3)=250
FI
IF MD=3 THEN
XP(0)=90:XP(1)=530:XP(2)=310:YP(2)=20:XP(3)=310:YP(3)=470:XB=90
FI
GOSUB 902
WNR=4:BC=0:XSP=4:YSP=4
RECT 10,0 TO 610,500
IF MD>2 THEN
SETRGB 1,255,255,0
LINE 60,0 TO 560,0
SETRGB 1,0,255,0
LINE 60,500 TO 560,500
SETRGB 1,255,0,0
LINE 60,0 TO 60,500
SETRGB 1,128,128,255
LINE 560,0 TO 560,500
FI
RR=0
REPEAT
BA=PEEK("port1")
BB=PEEK("port2")
FOR A=0 TO 15
C1(A)=SIG(AND(BA,2^A))
C2(A)=SIG(AND(BB,2^A))
NEXT A
IF C1(3)=1 OR C2(3)=1 RR=2
IF C1(3)=0 AND C2(3)=0 AND RR=2 RR=1
IF RR=1 THEN
RR=0:GOSUB 905
FI
FOR P=0 TO L
DP=0:XAD(P)=0:YAD(P)=0:PSP=1
SETRGB 1,CLR(P,0),CLR(P,1),CLR(P,2)
IF P<2 OR MD<3 THEN
IF CPU(P)=1 THEN
IF YB<YP(P) DP=1
IF YB>YP(P) DP=2
FI
IF CPU(P)=0 THEN
IF P=0 THEN
IF C1(4)=1 DP=1
IF C1(6)=1 DP=2
IF C1(5)=1 XAD(0)=1
IF C1(7)=1 XAD(0)=-1
PSP=2^C1(8)
FI
IF P=1 THEN
IF C2(4)=1 DP=1
IF C2(6)=1 DP=2
IF C2(7)=1 XAD(1)=1
IF C2(5)=1 XAD(1)=-1
PSP=2^C2(8)
FI
IF P=2 THEN
IF C1(12)=1 DP=1
IF C1(14)=1 DP=2
IF C1(15)=1 XAD(2)=1
IF C1(13)=1 XAD(2)=-1
PSP=2^C1(9)
FI
IF P=2 THEN
IF C2(12)=1 DP=1
IF C2(14)=1 DP=2
IF C2(13)=1 XAD(3)=1
IF C2(15)=1 XAD(3)=-1
PSP=2^C2(9)
FI
FI
IF DP>0 CLEAR FILL RECT XP(P)-4,YP(P)-19 TO XP(P)+5,YP(P)+20
IF DP=1 AND YP(P)>YLL(P) YP(P)=YP(P)-5*PSP
IF DP=2 AND YP(P)<YUL(P) YP(P)=YP(P)+5*PSP
FILL RECT XP(P)-4,YP(P)-19 TO XP(P)+5,YP(P)+20
FI
IF P>1 AND MD=3 THEN
IF CPU(P)=1 THEN
IF XB<XP(P) DP=3
IF XB>XP(P) DP=4
FI
IF CPU(P)=0 THEN
IF P=2 THEN
IF C1(15)=1 DP=3
IF C1(13)=1 DP=4
IF C1(12)=1 YAD(2)=-1
IF C1(14)=1 YAD(2)=1
PSP=2^C1(9)
FI
IF P=3 THEN
IF C2(15)=1 DP=3
IF C2(13)=1 DP=4
IF C2(14)=1 YAD(3)=-1
IF C2(12)=1 YAD(3)=1
PSP=2^C2(9)
FI
FI
IF DP>0 CLEAR FILL RECT XP(P)-19,YP(P)-4 TO XP(P)+20,YP(P)+5
IF DP=3 AND XP(P)>80 XP(P)=XP(P)-5*PSP
IF DP=4 AND XP(P)<540 XP(P)=XP(P)+5*PSP
FILL RECT XP(P)-19,YP(P)-4 TO XP(P)+20,YP(P)+5
FI
IF P=0 THEN
CLEAR FILL CIRCLE XB,YB,5
IF ABS(XSP)>10 XSP=10*SIG(XSP)
IF ABS(YSP)>10 YSP=10*SIG(YSP)
XB=XB+XSP
YB=YB+YSP
SETRGB 1,CLR(BC,0),CLR(BC,1),CLR(BC,2)
FILL CIRCLE XB,YB,5
IF XB<XP(0)-10 OR XB>XP(1)+10 OR (MD>2 AND (YB<20 OR YB>480)) THEN
SP(BC)=SP(BC)+1
IF MD<3 THEN
SP(0)=MAX(SP(0),SP(2))
SP(1)=MAX(SP(1),SP(3))
SP(2)=MAX(SP(0),SP(2))
SP(3)=MAX(SP(1),SP(3))
ELSE
YP(0)=250:YP(1)=250
XP(2)=310:XP(3)=310
FI
FILL CIRCLE 13+(BC*150)+((SP(BC)-1)*7),504,5
WAIT 1
XB=XP(BC):XSP=SIG(XSP)*4
YB=YP(BC):YSP=SIG(YSP)*4
CLEAR FILL RECT 61,1 TO 559,499
IF MD<3 CLEAR FILL RECT 11,1 TO 609,499
FI
FI
IF SP(P)=WS WNR=P
NEXT P
IF MD<3 THEN
IF YB>=490 YSP=ABS(YSP)*-1
IF YB<=10 YSP=ABS(YSP)
FI
FOR Q=0 TO L
IF ((Q<2 OR MD<3) AND XB>=XP(Q)-4 AND XB<=XP(Q)+5 AND YB>=YP(Q)-19 AND YB<=YP(Q)+20) OR (Q>1 AND MD=3 AND XB>=XP(Q)-19 AND XB<=XP(Q)+20 AND YB>=YP(Q)-4 AND YB<=YP(Q)+5) THEN
BC=Q
IF Q<2 OR MD<3 THEN
IF ABS(XSP)>1 AND XAD(Q)=-1 XSP=(SIG(XSP))*(ABS(XSP)-1)
IF ABS(XSP)<10 AND XAD(Q)=1 XSP=(SIG(XSP))*(ABS(XSP)+1)
IF BC=0 OR BC=2 XSP=ABS(XSP)
IF BC=1 OR BC=3 XSP=ABS(XSP)*-1
IF XB>=XP(Q)-4 AND XB<=XP(Q)+5 AND YB>=YP(Q)-19 AND YB<=YP(Q)-9 YSP=YSP+1
IF XB>=XP(Q)-4 AND XB<=XP(Q)+5 AND YB>=YP(Q)+10 AND YB<=YP(Q)+20 YSP=YSP-1
FI
IF Q>1 AND MD=3 THEN
IF ABS(YSP)>1 AND YAD(Q)=-1 YSP=(SIG(YSP))*(ABS(YSP)-1)
IF ABS(YSP)<10 AND YAD(Q)=1 YSP=(SIG(YSP))*(ABS(YSP)+1)
IF BC=0 OR BC=2 XSP=ABS(XSP)
IF BC=1 OR BC=3 XSP=ABS(XSP)*-1
IF YB>=YP(Q)-4 AND YB<=XP(Q)+5 AND XB>=XP(Q)-19 AND XB<=XP(Q)-9 XSP=XSP+1
IF YB>=YP(Q)-4 AND YB<=XP(Q)+5 AND XB>=XP(Q)+10 AND XB<=XP(Q)+20 XSP=XSP+1
FI
FI
NEXT Q
WAIT SPD/100
UNTIL(WNR<4)
FOR P=0 TO L
IF WNR=P THEN ENDPLAY$(P)="WINS"
ELSE
ENDPLAY$(P)="SCORED "+STR$(SP(P))
FI
NEXT P
GOTO 903

3 REM NO UNIQUE ARRAYS
30 CLEAR WINDOW
GOSUB 904
RESTORE T4TMINST
GOSUB 908
SETRGB 1,128,128,128
TEXT 200,50,NAME$(2)
TEXT 150,80,AUTHOR$
RECT 90,90 TO 500,210
TEXT 110,110,"WHO IS PLAYING?"
TEXT 110,125,LSTNXT$
FOR P=0 TO 3
SETRGB 1,CLR(P,0),CLR(P,1),CLR(P,2)
TEXT 110+P*100,155,"MAN "+STR$(P+1)+"UP"
TEXT 110+P*100,170,"NO PLAY"
NEXT P
SETRGB 1,128,128,128
R=0:PL=3:LM=2
REPEAT
GOSUB 901
IF C1(8)=0 AND R=2 AND M>1 R=1
IF R=2 AND M<2 R=0
M=0
FOR P=0 TO 3
CPU(P)=(YM(P)-155)/15
IF CPU(P)=0 THEN
M=M+1
ELSE
ENDPLAY$(P)="DID NOT PLAY"
FI
NEXT P
UNTIL(R=1 OR R=3)
IF R=3 GOTO 90
31 CLEAR FILL RECT 91,91 TO 499,209
YM(0)=155
TEXT 110,110,"PLEASE SELECT ARENA"
TEXT 110,125,LSTNXT$
TEXT 110,155,"OPEN   - OPEN FIELD"
TEXT 110,170,"SPARSE - A FEW PLACES TO HIDE"
TEXT 110,185,"DENSE  - DEFLECTION PARADISE"
TEXT 110,200,"MAZE   - TANK WRAP"
R=0:PL=0:LM=4
REPEAT
GOSUB 901
IF C1(8)=0 AND R=2 R=1
UNTIL(R=1 OR R=3)
IF R=3 GOTO 30
MD=(YM(0)-155)/15
32 CLEAR FILL RECT 91,91 TO 499,209
YM(0)=155
TEXT 110,110,"PLEASE SELECT BOMB MODE"
TEXT 110,125,LSTNXT$
TEXT 110,155,"NORMAL     - STRAIT BOMBS"
TEXT 110,170,"STEER      - TURN TO STEER"
TEXT 110,185,"BOUNCE     - BOUNCY BOMBS"
TEXT 110,200,"ARM BOUNCE - BOUNCE TO ARM"
R=0:LM=4
REPEAT
GOSUB 901
IF C1(8)=0 AND R=2 R=1
UNTIL(R=1 OR R=3)
IF R=3 GOTO 31
BM=(YM(0)-155)/15
33 CLEAR FILL RECT 91,91 TO 499,209
YM(0)=155
TEXT 110,110,"PLEASE SELECT GAME TIME/TYPE"
TEXT 110,125,LSTNXT$
TEXT 110,155,"1 MINUTE  - A QUICK BLAST"
TEXT 110,170,"2 MINUTES - AVERAGE"
TEXT 110,185,"3 MINUTES - TIME AND A HALF"
TEXT 110,200,"FLAG TAG  - GET ALL FLAGS"
R=0:LM=4
REPEAT
GOSUB 901
IF C1(8)=0 AND R=2 R=1
UNTIL(R=1 OR R=3)
IF R=3 GOTO 32
MINS=(YM(0)-140)/15
CLEAR FILL RECT 91,91 TO 499,209
YM(0)=155
TEXT 110,110,"PLEASE SELECT TANK SPEED"
TEXT 110,125,LSTNXT$
TEXT 110,155,"PEDALS - SLOW ENOUGH FOR BEGINNERS"
TEXT 110,170,"TURBO  - FAST AND AGILE"
R=0:LM=2
REPEAT
GOSUB 901
IF C1(8)=0 AND R=2 R=1
UNTIL(R=1 OR R=3)
IF R=3 GOTO 33
TIME=-1
SPD=(YM(0)-140)/15
FOR P=0 TO 3
FOR V=0 TO 15
XV(V,P)=0:YV(V,P)=0
NEXT V
NEXT P
XS(12)=50:YS(12)=250:DP(0)=0
XS(13)=570:YS(13)=250:DP(1)=8
XS(14)=310:YS(14)=40:DP(2)=12
XS(15)=310:YS(15)=460:DP(3)=4
IF MD=2 THEN
YS(14)=70:YS(15)=430
FI
FOR A=0 TO 3
XP(A)=XS(A+12):YP(A)=YS(A+12):XS(A)=0:YS(A)=0:XS(A+8)=XS(A+12):YS(A+8)=YS(A+12)
NEXT A
GOSUB 902
RECT 620,472 TO 630,290
SETRGB 1,255,0,128
OBS=3
RESTORE T4L0
FOR W=0 TO 3
SP(W)=0
FOR A=0 TO 3
READ OB(W,A)
NEXT A
NEXT W
IF MD>0 THEN
OBS=13
RESTORE T4L1
FOR W=4 TO 13
FOR A=0 TO 3
READ OB(W,A)
NEXT A
NEXT W
FI
IF MD=2 THEN
OBS=25
RESTORE T4L2
FOR W=10 TO 25
FOR A=0 TO 3
READ OB(W,A)
NEXT A
NEXT W
FI
IF MD=3 THEN
OBS=8
RESTORE T4L3
FOR W=2 TO 8
FOR A=0 TO 3
READ OB(W,A)
NEXT A
NEXT W
FI
FOR W=0 TO OBS
FILL RECT OB(W,0)-OB(W,2),OB(W,1)-OB(W,3) TO OB(W,0)+OB(W,2),OB(W,1)+OB(W,3)
NEXT W
IF MINS<4 FILL RECT 621,471 TO 629,471-(MINS*60)
RR=0
REPEAT
IF MINS<4 THEN
A$=RIGHT$(time$,1)
IF A$<>B$ THEN
B$=A$:TIME=TIME+1
CLEAR LINE 621,471-(MINS*60)+TIME TO 629,471-(MINS*60)+TIME
FI
FI
BA=PEEK("port1")
BB=PEEK("port2")
FOR A=0 TO 15
C1(A)=SIG(AND(BA,2^A))
C2(A)=SIG(AND(BB,2^A))
NEXT A
IF C1(3)=1 OR C2(3)=1 RR=2
IF C1(3)=0 AND C2(3)=0 AND RR=2 RR=1
IF RR=1 THEN
RR=0:GOSUB 905
FI
TT=6/SPD
FOR T=0 TO TT
FOR P=0 TO 3
SETRGB 1,CLR(P,0),CLR(P,1),CLR(P,2)
IF MINS=4 THEN
IF P=0 TIME=60
TIME=TIME+CPU(P)*60
IF CPU(P)=0 THEN
RECT XS(P+8),YS(P+8) TO XS(P+8)+1,YS(P+8)-20
FILL TRIANGLE XS(P+8),YS(P+8)-20 TO XS(P+8),YS(P+8)-10 TO XS(P+8)+6,YS(P+8)-15
IF T=TT CIRCLE XS(P+12),YS(P+12),20
FI
FI
IF CPU(P)>0 GOTO 310
FOR Q=0 TO 3
IF CPU(Q)=0 THEN
IF XS(Q+8)<10 XS(Q+8)=610:IF XS(Q+8)>610 XS(Q+8)=10
DIST=((XS(Q+8)-XP(P))^2+(YS(Q+8)-YP(P))^2)^0.5
VP(Q)=4
IF DIST<15 THEN
VP(Q)=P
CLEAR RECT XS(Q+8),YS(Q+8) TO XS(Q+8)+1,YS(Q+8)-20
CLEAR FILL TRIANGLE XS(Q+8),YS(Q+8)-20 TO XS(Q+8),YS(Q+8)-10 TO XS(Q+8)+6,YS(Q+8)-15
IF P=Q THEN
XS(Q+8)=XS(Q+12):YS(Q+8)=YS(Q+12)
ELSE
XS(Q+8)=XP(P):YS(Q+8)=YP(P)
FI
FI
DIST=((XS(Q+8)-XS(P+12))^2+(YS(Q+8)-YS(P+12))^2)^0.5
IF DIST<15 AND P<>Q AND VP(Q)=P THEN
CPU(Q)=1
XEXP=XP(Q):YEXP=YP(Q):GOSUB 907
ENDPLAY$(Q)="BLOWN UP BY "+STR$(P+1)+"UP"
FI
FI
NEXT Q
SPED=0
IF P=0 THEN
IF T=0 DP(P)=DP(P)+(C1(7)-C1(5))
SPED=(OR(C1(10),C1(4)))
IF SHOT(0)=0 SHOT(0)=C1(8)*(INT(BM/3)+1)
FI
IF P=1 THEN
IF T=0 DP(P)=DP(P)+(C2(7)-C2(5))
SPED=(OR(C2(10),C2(4)))
IF SHOT(1)=0 SHOT(1)=C2(8)*(INT(BM/3)+1)
FI
IF P=2 THEN
IF T=0 DP(P)=DP(P)+(C1(15)-C1(13))
SPED=(OR(C1(11),C1(12)))
IF SHOT(2)=0 SHOT(2)=C1(9)*(INT(BM/3)+1)
FI
IF P=3 THEN
IF T=0 DP(P)=DP(P)+(C2(15)-C2(13))
SPED=(OR(C2(11),C2(12)))
IF SHOT(3)=0 SHOT(3)=C2(9)*(INT(BM/3)+1)
FI
IF DP(P)<0 DP(P)=15
IF DP(P)>15 DP(P)=0
SETRGB 1,255,0,128:BNC=0
FOR W=0 TO OBS
IF XS(P)<OB(W,0)+OB(W,2) AND XS(P)>OB(W,0)-OB(W,2) AND YS(P)<OB(W,1)+OB(W,3) AND YS(P)>OB(W,1)-OB(W,3) THEN
IF BM>1 THEN
IF BM=3 AND SHOT(P)=2 SHOT(P)=1
IF ABS(XS(P+4)-OB(W,0))>OB(W,2) AND BNC=0 THEN
SD(P)=8-SD(P)
IF SD(P)<0 SD(P)=16+SD(P)
FI
IF ABS(YS(P+4)-OB(W,1))>OB(W,3) AND BNC=0 SD(P)=16-SD(P)
IF ABS(XS(P+4)-OB(W,0))>OB(W,2) OR ABS(YS(P+4)-OB(W,1))>OB(W,3) BNC=1
ELSE
SHOT(P)=0:GP(P)=0
FI
FILL RECT OB(W,0)-OB(W,2),OB(W,1)-OB(W,3) TO OB(W,0)+OB(W,2),OB(W,1)+OB(W,3)
FI
IF ABS(YP(P)-OB(W,1))<OB(W,3) AND XP(P)>OB(W,0)-OB(W,2)-15 AND XP(P)<=OB(W,0) AND (DP(P)<4 OR DP(P)>12) SPED=0
IF ABS(YP(P)-OB(W,1))<OB(W,3) AND XP(P)<OB(W,0)+OB(W,2)+15 AND XP(P)>=OB(W,0) AND DP(P)<12 AND DP(P)>4 SPED=0
IF ABS(XP(P)-OB(W,0))<OB(W,2) AND YP(P)>OB(W,1)-OB(W,3)-15 AND YP(P)<=OB(W,1) AND DP(P)>8 SPED=0
IF ABS(XP(P)-OB(W,0))<OB(W,2) AND YP(P)<OB(W,1)+OB(W,3)+15 AND YP(P)>=OB(W,1) AND DP(P)<8 SPED=0
IF ABS(XP(P)-OB(W,0))<OB(W,2)+18 AND ABS(YP(P)-OB(W,1))<OB(W,3)+18 FILL RECT OB(W,0)-OB(W,2),OB(W,1)-OB(W,3) TO OB(W,0)+OB(W,2),OB(W,1)+OB(W,3)
NEXT W
FOR Q=0 TO 3
IF Q<>P AND CPU(Q)=0 THEN
DIST=((XP(P)-XP(Q))^2+(YP(P)-YP(Q))^2)^0.5
IF DIST<=29.7 THEN
IF XP(P)<=XP(Q) AND YP(P)<=YP(Q) AND (DP(P)>11 OR DP(P)=0) SPED=0
IF XP(P)<=XP(Q) AND YP(P)>=YP(Q) AND DP(P)<5 SPED=0
IF XP(P)>=XP(Q) AND YP(P)<=YP(Q) AND DP(P)>7 AND DP(P)<13 SPED=0
IF XP(P)>=XP(Q) AND YP(P)>=YP(Q) AND DP(P)>3 AND DP(P)<9 SPED=0
FI
FI
SETRGB 1,CLR(P,0),CLR(P,1),CLR(P,2)
NEXT Q
CLEAR FILL RECT XP(P)-18,YP(P)-18 TO XP(P)+18,YP(P)+18
XP(P)=XP(P)+(SPED*2*SPD*COS(DP(P)*PI/8))
YP(P)=YP(P)+(-SPED*2*SPD*SIN(DP(P)*PI/8))
IF XP(P)<10 OR XP(P)>610 THEN
IF XP(P)<10 XP(P)=610:IF XP(P)>610 XP(P)=10
FOR Q=0 TO 3
IF VP(Q)=P XS(Q+8)=XP(P)
NEXT Q
FI
FOR A=0 TO 15
XV(A,P)=1.5*DST(A)*COS(ANG(A)+(DP(P)*PI/8))+XP(P)
YV(A,P)=1.5*-DST(A)*SIN(ANG(A)+(DP(P)*PI/8))+YP(P)
NEXT A
FOR A=0 TO 3
FILL TRIANGLE XV(A*4,P),YV(A*4,P) TO XV(A*4+1,P),YV(A*4+1,P) TO XV(A*4+2,P),YV(A*4+2,P)
FILL TRIANGLE XV(A*4+1,P),YV(A*4+1,P) TO XV(A*4+2,P),YV(A*4+2,P) TO XV(A*4+3,P),YV(A*4+3,P)
NEXT A
IF XS(P)=0 AND YS(P)=0 AND SHOT(P)>0 THEN
XS(P)=(XV(5,P)+XV(7,P))/2
YS(P)=(YV(5,P)+YV(7,P))/2
FI
XS(P+4)=XS(P):YS(P+4)=YS(P)
CLEAR FILL RECT XS(P+4)-4,YS(P+4)-4 TO XS(P+4)+4,YS(P+4)+4
IF (XS(P)<>0 OR YS(P)<>0) AND CPU(P)=0 AND SHOT(P)>0 THEN
IF BM=1 SD(P)=DP(P)
GP(P)=GP(P)+1
XS(P)=XS(P)+(6*COS(SD(P)*PI/8))
YS(P)=YS(P)+(-6*SIN(SD(P)*PI/8))
IF XS(P)<10 XS(P)=610:IF XS(P)>610 XS(P)=10
FILL CIRCLE XS(P),YS(P),3
FI
IF GP(P)>100 THEN
CLEAR FILL RECT XS(P)-4,YS(P)-4 TO XS(P)+4,YS(P)+4:SHOT(P)=0
FI
FOR Q=0 TO 3
IF P<>Q AND CPU(Q)=0 AND SHOT(P)=1 THEN
DIST=((XS(P)-XP(Q))^2+(YS(P)-YP(Q))^2)^0.5
IF DIST<15 THEN
SP(P)=SP(P)+1
DP(P)=DP(P)+1:IF DP>15 DP(P)=0
CLEAR FILL RECT XP(Q)-18,YP(Q)-18 TO XP(Q)+18,YP(Q)+18
XP(Q)=XP(Q)+(40*COS(SD(P)*PI/8))
YP(Q)=YP(Q)+(-40*SIN(SD(P)*PI/8))
FOR W=0 TO OBS
IF ABS(XP(Q)-OB(W,0))<15+OB(W,2) AND ABS(YP(Q)-OB(W,1))<15+OB(W,3) THEN
XP(Q)=XP(Q)+SIG(XP(Q)-OB(W,0))*(15+OB(W,2))
YP(Q)=YP(Q)+SIG(YP(Q)-OB(W,1))*(15+OB(W,3))
FI
NEXT W
IF XP(Q)<35 XP(Q)=585:IF XP(Q)>585 XP(Q)=35
IF YP(Q)<25 YP(Q)=475:IF YP(Q)>475 YP(Q)=25
SPIN=64+INT(RAN(15))
SETRGB 1,CLR(Q,0),CLR(Q,1),CLR(Q,2)
FOR R=0 TO SPIN
CLEAR FILL RECT XP(Q)-18,YP(Q)-18 TO XP(Q)+18,YP(Q)+18
DP(Q)=DP(Q)+1:IF DP(Q)>15 DP(Q)=0
FOR A=0 TO 15
XV(A,Q)=1.5*DST(A)*COS(ANG(A)+(DP(Q)*PI/8))+XP(Q)
YV(A,Q)=1.5*-DST(A)*SIN(ANG(A)+(DP(Q)*PI/8))+YP(Q)
NEXT A
FOR A=0 TO 3
FILL TRIANGLE XV(A*4,Q),YV(A*4,Q) TO XV(A*4+1,Q),YV(A*4+1,Q) TO XV(A*4+2,Q),YV(A*4+2,Q)
FILL TRIANGLE XV(A*4+1,Q),YV(A*4+1,Q) TO XV(A*4+2,Q),YV(A*4+2,Q) TO XV(A*4+3,Q),YV(A*4+3,Q)
NEXT A
WAIT 0.03
IF R<4 THEN
CLEAR FILL RECT XS(R)-4,YS(R)-4 TO XS(R)+4,YS(R)+4
SHOT(R)=0:XS(R)=0:YS(R)=0:SD(R)=DP(R):GP(R)=0
FI
NEXT R
CLEAR FILL RECT 610,0 TO 640,75
FI
FI
NEXT Q
IF SHOT(P)=0 THEN
XS(P)=0:YS(P)=0:SD(P)=DP(P):GP(P)=0
FI
TEXT 610,P*15+45,STR$(SP(P))
310 NEXT P
NEXT T
UNTIL(TIME=MINS*60)
FOR P=0 TO 3
SETRGB 1,CLR(P,0),CLR(P,1),CLR(P,2)
IF CPU(P)=0 TEXT 610,P*15+45,STR$(SP(P))
IF MINS=4 AND CPU(P)=0 ENDPLAY$(P)="WINS"
IF MINS<4 AND CPU(P)=0 ENDPLAY$(P)="SCORED "+STR$(SP(P))
NEXT P
GOTO 903

4 RESTORE BLAST
FOR A=0 TO 2
READ DST(A):READ ANG(A)
NEXT A
40 CLEAR WINDOW
GOSUB 904
RESTORE BLASTINST
GOSUB 908
SETRGB 1,128,128,128
TEXT 260,50,NAME$(3)
TEXT 150,80,AUTHOR$
RECT 90,90 TO 500,210
TEXT 110,110,"WHO IS PLAYING?"
TEXT 110,125,LSTNXT$
FOR P=0 TO 3
SETRGB 1,CLR(P,0),CLR(P,1),CLR(P,2)
TEXT 110+P*100,155,"MAN "+STR$(P+1)+"UP"
TEXT 110+P*100,170,"NO PLAY"
NEXT P
SETRGB 1,128,128,128
R=0:PL=3:LM=2
REPEAT
GOSUB 901
IF C1(8)=0 AND R=2 AND M>1 R=1
IF R=2 AND M<2 R=0
M=0
FOR P=0 TO 3
CPU(P)=(YM(P)-155)/15
IF CPU(P)=0 THEN
M=M+1
ELSE
ENDPLAY$(P)="DID NOT PLAY"
FI
NEXT P
UNTIL(R=1 OR R=3)
IF R=3 GOTO 90
41 CLEAR FILL RECT 91,91 TO 499,209
YM(0)=155
TEXT 110,110,"PLEASE SELECT BOMB MODE"
TEXT 110,125,LSTNXT$
TEXT 110,155,"LONG RANGE - STRAIT SHOT"
TEXT 110,170,"CHARGE     - HOLD FOR MORE POWER"
TEXT 110,185,"RAPID      - SHORT RANGE RAPID FIRE"
TEXT 110,200,"HOMING     - AUTO-LOCK ON FUNCTION"
R=0:PL=0:LM=4
REPEAT
GOSUB 901
IF C1(8)=0 AND R=2 R=1
UNTIL(R=1 OR R=3)
IF R=3 GOTO 40
BM=(YM(0)-155)/15
CLEAR FILL RECT 91,91 TO 499,209
YM(0)=2
TEXT 110,110,"PLEASE SELECT ASTEROID COUNT"
TEXT 110,125,LSTNXT$
TEXT 110,155,"U - MORE | D - LESS"
R=0:LM=0
REPEAT
GOSUB 901
IF C1(8)=1 R=2
IF C1(8)=0 AND R=2 R=1
IF C1(10)=1 R=4
IF C1(10)=0 AND R=4 R=3
YM(0)=YM(0)+(C1(4)-C1(6))
IF YM(0)>10 YM(0)=2
IF YM(0)<2 YM(0)=10
CLEAR FILL RECT 110,173 TO 131,157
TEXT 110,170,STR$(YM(0))
UNTIL(R=1 OR R=3)
IF R=3 GOTO 41
OBS=YM(0)
FOR P=0 TO 3
FOR V=0 TO 15
XV(V,P)=0:YV(V,P)=0
NEXT V
NEXT P
XP(0)=50:YP(0)=250:DP(0)=0
XP(1)=570:YP(1)=250:DP(1)=8
XP(2)=310:YP(2)=40:DP(2)=12
XP(3)=310:YP(3)=460:DP(3)=4
FOR A=0 TO 3
XS(A)=0:YS(A)=0:OB(A+20,0)=0:OB(A+20,1)=0
NEXT A
GOSUB 902
FOR A=4 TO 15
XS(A)=100
IF A<8 XS(A)=4000
YS(A)=1
NEXT A
FOR W=0 TO 25
FOR A=0 TO 3
OB(W,A)=0
NEXT A
IF W>0 AND W<=OBS THEN
OB(W,0)=110+RAN(400):OB(W,1)=100+RAN(300):OB(W,2)=20:OB(W,3)=INT(RAN(15))
FI
NEXT W
RR=0
REPEAT
A$=RIGHT$(time$,1)
BA=PEEK("port1")
BB=PEEK("port2")
FOR A=0 TO 15
C1(A)=SIG(AND(BA,2^A))
C2(A)=SIG(AND(BB,2^A))
NEXT A
IF C1(3)=1 OR C2(3)=1 RR=2
IF C1(3)=0 AND C2(3)=0 AND RR=2 RR=1
IF RR=1 THEN
RR=0:GOSUB 905
FI
SETRGB 1,128,128,128:TEXT 609,35,"ESH"
FOR T=0 TO 6
FOR P=0 TO 3
IF P=0 OB(0,0)=0
OB(0,0)=OB(0,0)+OR(CPU(P),SIG(ABS(1-SIG(XS(P+4)))))
IF A$<>B$ THEN
XS(P+4)=XS(P+4)-5
IF P=3 B$=A$
FI
IF XS(P+4)<1 ENDPLAY$(P)="RAN OUT OF ENERGY"
IF XS(P+12)<1 AND CPU(P)=0 THEN
CPU(P)=1
XEXP=XP(P):YEXP=YP(P):GOSUB 907
ENDPLAY$(P)="BLEW UP"
FI
IF SP(P)=0 AND T=6 AND XS(P+8)<100 AND XS(P+4)>0 THEN
XS(P+4)=XS(P+4)-1:XS(P+8)=XS(P+8)+1
FI
IF XS(P+8)=100 YS(P+8)=1
FOR B=1 TO 3
SETRGB 1,190,95,0
IF SP(P)=0 AND B=2 SETRGB 1,0,190,95
IF XS(P+B*4)<0 XS(P+B*4)=0
IF B=1 THEN
CLEAR FILL RECT 611,41+P*105 TO 618,141+P*105-XS(P+4)/40
FILL RECT 611,141+P*105 TO 618,141+P*105-XS(P+4)/40
FI
IF B>1 THEN
CLEAR FILL RECT 601+B*10,41+P*105 TO 608+B*10,141+P*105-XS(P+B*4)
FILL RECT 601+B*10,141+P*105 TO 608+B*10,141+P*105-XS(P+B*4)
FI
SETRGB 1,CLR(P,0),CLR(P,1),CLR(P,2)
RECT 600+B*10,40+P*105 TO 609+B*10,142+P*105
NEXT B
IF CPU(P)>0 GOTO 410
SPED=0
IF P=0 THEN
IF XS(4)>0 THEN
IF C1(4)=1 OR C1(5)=1 OR C1(6)=1 OR C1(7)=1 OR (C1(8)=1 AND SHOT(0)=0) 
XS(4)=XS(4)-1
IF T=0 DP(P)=DP(P)+(C1(7)-C1(5))
SPED=(C1(4)-C1(6))/10
IF SHOT(0)=0 AND BM=1 AND OB(20,1)<30 THEN
OB(20,1)=OB(20,1)+C1(8):FILL CIRCLE XV(0,0),YV(0,0),OB(20,1)
FI
FI
FIRE=C1(8):SHIELD=C1(10)
FI
IF P=1 THEN
IF XS(5)>0 THEN
IF C2(4)=1 OR C2(5)=1 OR C2(6)=1 OR C2(7)=1 OR (C2(8)=1 AND SHOT(1)=0) 
XS(5)=XS(5)-1
IF T=0 DP(P)=DP(P)+(C2(7)-C2(5))
SPED=(C2(4)-C2(6))/10
IF SHOT(1)=0 AND BM=1 AND OB(21,1)<30 THEN
OB(21,1)=OB(21,1)+C2(8):FILL CIRCLE XV(0,1),YV(0,1),OB(21,1)
FI
FI
FIRE=C2(8):SHIELD=C2(10)
FI
IF P=2 THEN
IF XS(6)>0 THEN
IF C1(12)=1 OR C1(13)=1 OR C1(14)=1 OR C1(15)=1 OR (C1(9)=1 AND SHOT(2)=0) 
XS(6)=XS(6)-1
IF T=0 DP(P)=DP(P)+(C1(15)-C1(13))
SPED=(C1(12)-C1(14))/10
IF SHOT(2)=0 AND BM=1 AND OB(22,1)<30 THEN
OB(22,1)=OB(22,1)+C1(9):FILL CIRCLE XV(0,2),YV(0,2),OB(22,1)
FI
FI
FIRE=C1(9):SHIELD=C1(11)
FI
IF P=3 THEN
IF XS(7)>0 THEN
IF C2(12)=1 OR C2(13)=1 OR C2(14)=1 OR C2(15)=1 OR (C2(9)=1 AND SHOT(3)=0) 
XS(7)=XS(7)-1
IF T=0 DP(P)=DP(P)+(C2(15)-C2(13))
SPED=(C2(12)-C2(14))/10
IF SHOT(3)=0 AND BM=1 AND OB(23,1)<30 THEN
OB(23,1)=OB(23,1)+C2(9):FILL CIRCLE XV(0,3),YV(0,3),OB(23,1)
FI
FI
FIRE=C2(9):SHIELD=C2(11)
FI
IF XS(P+4)>0 THEN
IF (FIRE=0 AND OB(20+P,1)>2) OR OB(20+P,1)=30 SHOT(P)=1
IF BM<>1 AND SHOT(P)=0 AND FIRE=1 THEN
OB(20+P,1)=3:SHOT(P)=1
FI
FI
IF SHIELD=1 AND OB(20+P,0)=0 THEN
IF SP(P)=0 AND XS(P+8)>0 YS(P+8)=1
IF SP(P)=1 YS(P+8)=0
OB(20+P,0)=1
FI
SP(P)=YS(P+8)
OB(20+P,0)=SHIELD
IF DP(P)<0 DP(P)=15
IF DP(P)>15 DP(P)=0
OB(P+20,2)=OB(P+20,2)+SPED
IF ABS(OB(P+20,2))>10 OB(P+20,2)=10*SIG(OB(P+20,2))
IF T/2=INT(T/2) THEN
FOR W=1 TO OBS-1
FOR WW=W+1 TO OBS
IF OB(W,2)>0 AND OB(WW,2)>0 THEN
DIST=((OB(W,0)-OB(WW,2))^2+(OB(W,1)-OB(WW,1))^2)^0.5
IF DIST<OB(W,2)+OB(WW,2) THEN
OB(W,2)=OB(W,2)-1:OB(WW,2)=OB(WW,2)-1
IF OB(W,0)<>OB(WW,0) THEN
ANGLE=ATAN(ABS((OB(W,1)-OB(WW,1))/(OB(W,0)-OB(WW,0))))
IF OB(W,0)>OB(WW,0) AND OB(W,1)>OB(WW,1) ANGLE=PI-ANGLE
IF OB(W,0)>OB(WW,0) AND OB(W,1)<OB(WW,1) ANGLE=PI+ANGLE
IF OB(W,0)<OB(WW,0) AND OB(W,1)<OB(WW,1) ANGLE=PI*2-ANGLE
ELSE
ANGLE=PI/2
IF OB(W,1)>OB(WW,1) ANGLE=3*ANGLE
FI
ANGLE=INT(16*ANGLE/(PI*2))
OB(WW,3)=ANGLE-OB(WW,3)+ANGLE
IF OB(WW,3)<0 OB(WW,3)=OB(WW,3)+16
IF OB(WW,3)>15 OB(WW,3)=OB(WW,3)-16
OB(W,3)=ANGLE-OB(W,3)+ANGLE
IF OB(W,3)<0 OB(W,3)=OB(W,3)+16
IF OB(W,3)>15 OB(W,3)=OB(W,3)-16
FI
FI
NEXT WW
NEXT W
FOR W=1 TO OBS
DIST=((XS(P)-OB(W,0))^2+(YS(P)-OB(W,1))^2)^0.5
IF DIST<OB(W,2)+OB(P+20,1) AND SHOT(P)=1 THEN
IF XS(P)<>OB(W,0) THEN
ANGLE=ATAN(ABS((YS(P)-OB(W,1))/(XS(P)-OB(W,0))))
IF XS(P)>OB(W,0) AND YS(P)>OB(W,1) ANGLE=PI-ANGLE
IF XS(P)>OB(W,0) AND YS(P)<OB(W,1) ANGLE=PI+ANGLE
IF XS(P)<OB(W,0) AND YS(P)<OB(W,1) ANGLE=PI*2-ANGLE
ELSE
ANGLE=PI/2
IF YS(P)>OB(W,1) ANGLE=3*ANGLE
FI
ANGLE=INT(16*ANGLE/(PI*2))
OB(W,3)=ANGLE-OB(W,3)+ANGLE
IF OB(W,3)<0 OB(W,3)=OB(W,3)+16
IF OB(W,3)>15 OB(W,3)=OB(W,3)-16
CLEAR FILL RECT XS(P)-OB(P+20,1),YS(P)-OB(P+20,1) TO XS(P)+OB(P+20,1),YS(P)+OB(P+20,1)
OB(W,2)=OB(W,2)-(OB(P+20,1)-2):SHOT(P)=0:OB(P+20,1)=2
FI
DIST=((XP(P)-OB(W,0))^2+(YP(P)-OB(W,1))^2)^0.5
IF DIST<15+SP(P)*5+OB(W,2) THEN
IF XP(P)<>OB(W,0) THEN
ANGLE=ATAN(ABS((YP(P)-OB(W,1))/(XP(P)-OB(W,0))))
IF XP(P)>OB(W,0) AND YP(P)>OB(W,1) ANGLE=PI-ANGLE
IF XP(P)>OB(W,0) AND YP(P)<OB(W,1) ANGLE=PI+ANGLE
IF XP(P)<OB(W,0) AND YP(P)<OB(W,1) ANGLE=PI*2-ANGLE
ELSE
ANGLE=PI/2
IF YP(P)>OB(W,1) ANGLE=3*ANGLE
FI
ANGLE=INT(16*ANGLE/(PI*2))
OB(W,3)=ANGLE-OB(W,3)+ANGLE
IF OB(W,3)<0 OB(W,3)=OB(W,3)+16
IF OB(W,3)>15 OB(W,3)=OB(W,3)-16
DP(P)=ANGLE-DP(P)+ANGLE
IF DP(P)<0 DP(P)=DP(P)+16
IF DP(P)>15 DP(P)=DP(P)-16
IF SP(P)=0 XS(P+12)=XS(P+12)-1
IF SP(P)=1 XS(P+8)=XS(P+8)-1
IF XS(P+8)<1 THEN
SP(P)=0:XS(P+8)=0:YS(P+8)=0
FI
OB(W,2)=OB(W,2)-1
FI
SETRGB 1,64,64,64
CLEAR FILL RECT OB(W,0)-20,OB(W,1)-20 TO OB(W,0)+20,OB(W,1)+20
IF OB(W,2)>0 THEN
OB(W,0)=OB(W,0)+(1+INT((21-OB(W,2))/5))*COS(OB(W,3)*PI/8)
OB(W,1)=OB(W,1)-(1+INT((21-OB(W,2))/5))*SIN(OB(W,3)*PI/8)
IF OB(W,0)<0 OB(W,0)=610:IF OB(W,0)>610 OB(W,0)=0
IF OB(W,1)<0 OB(W,1)=500:IF OB(W,1)>500 OB(W,1)=0
FILL RECT OB(W,0)-OB(W,2),OB(W,1)-OB(W,2)*0.35 TO OB(W,0)+OB(W,2),OB(W,1)+OB(W,2)*0.35
FILL RECT OB(W,0)-OB(W,2)*0.35,OB(W,1)-OB(W,2) TO OB(W,0)+OB(W,2)*0.35,OB(W,1)+OB(W,2)
FILL RECT OB(W,0)-OB(W,2)*0.7,OB(W,1)-OB(W,2)*0.7 TO OB(W,0)+OB(W,2)*0.7,OB(W,1)+OB(W,2)*0.7
ELSE
OB(W,0)=1000:OB(W,1)=1000
FI
NEXT W
FI
FOR Q=0 TO 3
IF Q<>P AND CPU(Q)=0 THEN
DIST=((XP(P)-XP(Q))^2+(YP(P)-YP(Q))^2)^0.5
IF DIST<=30+SP(P)*5+SP(Q)*5 THEN
IF XP(P)<>XP(Q) THEN
ANGLE=ATAN(ABS((YP(P)-YP(Q))/(XP(P)-XP(Q))))
IF XP(P)>XP(Q) AND YP(P)>=YP(Q) ANGLE=PI-ANGLE
IF XP(P)>XP(Q) AND YP(P)<=YP(Q) ANGLE=PI+ANGLE
IF XP(P)<XP(Q) AND YP(P)<=YP(Q) ANGLE=PI*2-ANGLE
ELSE
ANGLE=PI/2
IF YP(P)>YP(Q) ANGLE=3*ANGLE
FI
ANGLE=INT(16*ANGLE/(PI*2))
DP(Q)=ANGLE-DP(Q)+ANGLE
IF DP(Q)<0 DP(Q)=DP(Q)+16
IF DP(Q)>15 DP(Q)=DP(Q)-16
DP(P)=ANGLE-DP(P)+ANGLE
IF DP(P)<0 DP(P)=DP(P)+16
IF DP(P)>15 DP(P)=DP(P)-16
IF SP(P)=0 XS(P+12)=XS(P+12)-1
IF SP(P)=1 XS(P+8)=XS(P+8)-1
IF XS(P+8)<=0 THEN
SP(P)=0:XS(P+8)=0:YS(P+8)=0
FI
IF SP(Q)=0 XS(Q+12)=XS(Q+12)-1
IF SP(Q)=1 XS(Q+8)=XS(Q+8)-1
IF XS(Q+8)<=0 THEN
SP(Q)=0:XS(Q+8)=0:YS(Q+8)=0
FI
FI
FI
SETRGB 1,CLR(P,0),CLR(P,1),CLR(P,2)
NEXT Q
CLEAR FILL RECT XP(P)-22,YP(P)-22 TO XP(P)+22,YP(P)+22
CLEAR FILL RECT XV(0,P)-OB(P+20,1),YV(0,P)-OB(P+20,1) TO XV(0,P)+OB(P+20,1),YV(0,P)+OB(P+20,1)
XP(P)=XP(P)+OB(P+20,2)*COS(DP(P)*PI/8)
YP(P)=YP(P)-OB(P+20,2)*SIN(DP(P)*PI/8)
IF XP(P)<0 XP(P)=600:IF XP(P)>600 XP(P)=0
IF YP(P)<0 YP(P)=500:IF YP(P)>500 YP(P)=0
FOR A=0 TO 2
XV(A,P)=DST(A)*COS(ANG(A)+(DP(P)*PI/8))+XP(P)
YV(A,P)=-DST(A)*SIN(ANG(A)+(DP(P)*PI/8))+YP(P)
XV(A+3,P)=DST(A)*COS(-ANG(A)+(DP(P)*PI/8))+XP(P)
YV(A+3,P)=-DST(A)*SIN(-ANG(A)+(DP(P)*PI/8))+YP(P)
NEXT A
IF SP(P)=1 CIRCLE XP(P),YP(P),20
FILL CIRCLE XP(P),YP(P),15
CLEAR FILL TRIANGLE XV(0,P),YV(0,P) TO XV(1,P),YV(1,P) TO XV(2,P),YV(2,P)
CLEAR FILL TRIANGLE XV(3,P),YV(3,P) TO XV(4,P),YV(4,P) TO XV(5,P),YV(5,P)
IF BM=3 THEN
FOR Q=0 TO 3
DST(Q+6)=10000
IF CPU(Q)=0 AND P<>Q THEN
DST(Q+6)=((XS(P)-XP(Q))^2+(YS(P)-YP(Q))^2)^0.5
FI
NEXT Q
FOR Q=0 TO 3
FOR QQ=0 TO 3
IF Q<>QQ AND DST(6+Q)<DST(6+QQ) VP(P)=Q
NEXT QQ
NEXT Q
IF XS(P)<>XP(VP(P)) THEN
ANGLE=ATAN(ABS((YS(P)-YS(VP(P)))/(XS(P)-XP(VP(P)))))
IF XS(P)>XP(VP(P)) AND YS(P)>YP(VP(P)) ANGLE=PI-ANGLE
IF XS(P)>XP(VP(P)) AND YS(P)<YP(VP(P)) ANGLE=PI+ANGLE
IF XS(P)<XP(VP(P)) AND YS(P)<YP(VP(P)) ANGLE=PI*2-ANGLE
ELSE
ANGLE=PI/2
IF YS(P)>YP(VP(P)) ANGLE=3*ANGLE
FI
ANGLE=INT(16*ANGLE/(2*PI))
IF ABS(ANGLE-SD(P))>8 SD(P)=SD(P)-SIG(ANGLE-SD(P))
IF ABS(ANGLE-SD(P))<8 SD(P)=SD(P)+SIG(ANGLE-SD(P))
IF SD(P)<0 SD(P)=SD(P)+16
IF SD(P)>16 SD(P)=SD(P)-16
FI
IF XS(P)=0 AND YS(P)=0 AND SHOT(P)>0 THEN
XS(P)=XV(0,P):YS(P)=YV(0,P)
FI
CLEAR FILL RECT XS(P)-OB(P+20,1),YS(P)-OB(P+20,1) TO XS(P)+OB(P+20,1),YS(P)+OB(P+20,1)
IF (XS(P)<>0 OR YS(P)<>0) AND CPU(P)=0 AND SHOT(P)>0 THEN
GP(P)=GP(P)+1
XS(P)=XS(P)+(12*COS(SD(P)*PI/8))
YS(P)=YS(P)+(-12*SIN(SD(P)*PI/8))
IF XS(P)<0 XS(P)=600:IF XS(P)>600 XS(P)=0
IF YS(P)<0 YS(P)=500:IF YS(P)>500 YS(P)=0
FILL CIRCLE XS(P),YS(P),OB(P+20,1)
FI
IF GP(P)>50 OR (BM=2 AND GP(P)>15) THEN
CLEAR FILL RECT XS(P)-OB(P+20,1),YS(P)-OB(P+20,1) TO XS(P)+OB(P+20,1),YS(P)+OB(P+20,1):SHOT(P)=0
FI
FOR Q=0 TO 3
IF P<>Q AND CPU(Q)=0 AND SHOT(P)=1 THEN
DIST=((XS(P)-XP(Q))^2+(YS(P)-YP(Q))^2)^0.5
IF DIST<15+SP(Q)*5+OB(P+20,1) THEN
CLEAR FILL RECT XS(P)-OB(P+20,1),YS(P)-OB(P+20,1) TO XS(P)+OB(P+20,1),YS(P)+OB(P+20,1):SHOT(P)=0
IF BM<>1 THEN
IF SP(Q)=0 XS(Q+12)=XS(Q+12)-5
IF SP(Q)=1 XS(Q+8)=XS(Q+8)-5
ELSE
IF SP(Q)=0 XS(Q+12)=XS(Q+12)-(OB(P+20,1)-2)
IF SP(Q)=1 XS(Q+8)=XS(Q+8)-(OB(P+20,1)-2)
FI
OB(P+20,1)=2
IF XS(Q+8)<=0 THEN
SP(Q)=0:XS(Q+12)=XS(Q+12)+XS(Q+8):XS(Q+8)=0:YS(Q+8)=0
FI
FI
FI
NEXT Q
IF SHOT(P)=0 THEN
XS(P)=0:YS(P)=0:SD(P)=DP(P):IF GP(P)>0 OB(P+20,1)=2:GP(P)=0
FI
410 NEXT P
NEXT T
UNTIL(OB(0,0)>2)
FOR P=0 TO 3
IF ENDPLAY$(P)="RAN OUT OF ENERGY" CPU(P)=1
IF CPU(P)=0 ENDPLAY$(P)="WINS"
NEXT P
GOTO 903

1234 CLEAR WINDOW
INST=2
SETRGB 1,128,0,255
TEXT 20,30,"TO EXIT THESE INSTRUCTIONS AT ANY STAGE PRESS START"
RESTORE ALLINST
1235 PAGE=PAGE+1:NXT=0
CLEAR FILL RECT 20,46 TO 640,512
TEXT 20,75,"L2 - NEXT"
TEXT 20,60,"PAGE "+STR$(PAGE)
GOSUB 906
REPEAT
GOSUB 901
IF C1(3)=1 INST=1
IF INST=1 AND C1(3)=0 INST=0
IF C1(8)=1 NXT=1
IF PAGE<8 AND NXT=1 AND C1(8)=0 GOTO 1235
UNTIL(INST=0)
PAGE=0:GOTO 90

901 BA=PEEK("port1")
BB=PEEK("port2")
FOR A=0 TO 15
C1(A)=SIG(AND(BA,2^A))
C2(A)=SIG(AND(BB,2^A))
NEXT A
WAIT 0.15
IF LM>0 THEN
IF C1(8)=1 R=2
IF C1(10)=1 R=4
IF C1(10)=0 AND R=4 R=3
FOR P=0 TO PL
YM(P+4)=YM(P)
IF P=0 YM(P)=YM(P)+(C1(6)-C1(4))*15
IF P=1 YM(P)=YM(P)+(C2(6)-C2(4))*15
IF P=2 YM(P)=YM(P)+(C1(14)-C1(12))*15
IF P=3 YM(P)=YM(P)+(C2(14)-C2(12))*15
IF YM(P)>140+LM*15 YM(P)=155
IF YM(P)<155 YM(P)=140+LM*15
CLEAR FILL RECT (P+1)*100,YM(P+4) TO (P+1)*100+5,YM(P+4)-10
FILL RECT (P+1)*100,YM(P) TO (P+1)*100+5,YM(P)-10
NEXT P
FI
RETURN
902 CLEAR WINDOW
RECT 300,230 TO 370,260
FOR A=0 TO 3
TEXT 310,250,CDOWN$(A)
WAIT 1
CLEAR FILL RECT 310,231 TO 369,259
NEXT A
CLEAR WINDOW
RETURN
903 SETRGB 1,128,128,128
CLEAR FILL RECT 140,230 TO 510,320
RECT 140,230 TO 510,320
TEXT 150,250,"START TO PLAY AGAIN, SELECT TO QUIT"
FOR P=0 TO 3
SETRGB 1,CLR(P,0),CLR(P,1),CLR(P,2)
TEXT 150,265+P*15,STR$(P+1)+"UP "+ENDPLAY$(P)
NEXT P
953 LM=0
GOSUB 901
IF C1(3)=1 OR C2(3)=1 GOTO 92
IF C1(0)=1 OR C2(0)=1 GOTO 90
GOTO 953
904 SETRGB 1,128,128,128
FOR B=0 TO 1
RESTORE PAD
RECT 200,400-B*150 TO 400,450-B*150
FOR A=0 TO 1
READ XX:READ YY:READ CC
CLEAR FILL CIRCLE XX,YY-B*150,CC
CIRCLE XX,YY-B*150,CC
NEXT A
FOR A=0 TO 5
READ XX:READ YY:READ A$
TEXT XX,YY-B*150,A$
NEXT A
NEXT B
RETURN
905 LM=0
REPEAT
GOSUB 901
IF C1(3)=1 OR C2(3)=1 RR=2
IF C1(3)=0 AND C2(3)=0 AND RR=2 RR=1
UNTIL(RR=1)
RR=0
RETURN
906 A=-1
REPEAT
A=A+1
READ INST$
TEXT 20,90+A*15,INST$
UNTIL(INST$="" OR A=28)
RETURN
907 FOR A=2 TO 255
FOR D=0 TO 59
SETRGB 1,257-A,129-A/2,255
CLEAR DOT XEXP+(A-1)*COS(0.10472*D),YEXP+(A-1)*SIN(0.10472*D)
DOT XEXP+(A)*COS(0.10472*D),YEXP+(A)*SIN(0.10472*D)
NEXT D
NEXT A
RETURN
908 FOR P=0 TO 3
SETRGB 1,CLR(P,0),CLR(P,1),CLR(P,2)
FOR B=0 TO 6
READ A$
TEXT 20+SIG(AND(P,2))*480,250+AND(P,1)*150+B*15,A$
NEXT B
NEXT P
RETURN

LABEL TITLES
DATA "TRON","TAG-TEAM TENNIS","TANKS 4 THE MEMORIES","BLASTEROIDS"
LABEL TANK
DATA 9.9,2.36,8.06,1.05,7.62,2.74,5,0.64,2.24,2.68,7.07,0.14,2.24,-2.68,7.07,-0.14,7.62,-2.74,5,-0.64,9.9,-2.36,8.06,-1.05,7.28,1.85,7.28,1.29,7.28,-1.85,7.28,-1.29
LABEL PCOLOUR
DATA 255,0,0,128,128,255,255,255,0,0,255,0
LABEL T4L0
DATA 310,4,300,4,310,495,300,4,14,250,4,250,605,250,4,250
LABEL T4L1
DATA 76,172,12,6,76,328,12,6,544,172,12,6,544,328,12,6,82,250,6,84,538,250,6,84,202,250,30,18,418,250,30,18,310,106,18,30,310,394,18,30
LABEL T4L2
DATA 166,250,18,30,454,250,18,30,310,27,18,18,310,473,18,18,100,64,24,6,100,436,24,6,520,64,24,6,520,436,24,6,232,88,24,6,232,412,24,6,388,88,24,6,388,412,24,6,214,106,6,24,214,394,6,24,406,106,6,24,406,394,6,24
LABEL T4L3
DATA 13,250,4,125,607,250,4,125,310,250,150,4,457,130,4,123,163,370,4,123,168,128,150,4,452,372,150,4
LABEL BLAST
DATA 16,0,17,0.8,10,2
LABEL PAD
DATA 200,425,50,400,425,50,195,400,"U",195,460,"D",165,430,"L     
R",395,400,"T",395,460,"X",365,430,"S     O"
LABEL TRONINST
DATA "1UP","L2=N/A","L1=N/A","U =UP","L =LEFT","R =RIGHT","D =DOWN","2UP","L2=N/A","L1=N/A","U =UP","L =LEFT","R =RIGHT","D 
=DOWN","3UP","R2=N/A","R1=N/A","T =UP","S =LEFT","O =RIGHT","X =DOWN","4UP","R2=N/A","R1=N/A","T =UP","S =LEFT","O =RIGHT","X =DOWN"
LABEL TTTINST0
DATA "1UP","L2=FASTER","L1=N/A","U =UP","L =SOFT","R =SMASH","D =DOWN","2UP","L2=FASTER","L1=N/A","U =UP","L =SMASH","R =SOFT","D =DOWN","3UP","R2=N/A","R1=N/A","T =N/A","S=N/A","O =N/A","X =N/A","4UP","R2=N/A","R1=N/A","T =N/A","S =N/A","O =N/A","X =N/A"
LABEL TTTINST1
DATA "1UP","L2=FASTER","L1=N/A","U =UP","L =SOFT","R =SMASH","D =DOWN","2UP","L2=FASTER","L1=N/A","U =UP","L =SMASH","R =SOFT","D =DOWN","3UP","R2=FASTER","R1=N/A","T =UP","S =SOFT","O =SMASH","X =DOWN","4UP","R2=FASTER","R1=N/A","T =UP","S =SMASH","O =SOFT","X =DOWN"
LABEL TTTINST2
DATA "1UP","L2=FASTER","L1=N/A","U =UP","L =SOFT","R =SMASH","D =DOWN","2UP","L2=FASTER","L1=N/A","U =UP","L =SMASH","R =SOFT","D =DOWN","3UP","R2=FASTER","R1=N/A","T =SOFT","S =LEFT","O =RIGHT","X =SMASH","4UP","R2=FASTER","R1=N/A","T =SMASH","S =LEFT","O =RIGHT","X =SOFT"
LABEL T4TMINST
DATA "1UP","L2=FIRE","L1=DRIVE","U =DRIVE","L =TURN","R =TURN","D =N/A","2UP","L2=FIRE","L1=DRIVE","U =DRIVE","L =TURN","R =TURN","D =N/A","3UP","R2=FIRE","R1=DRIVE","T =DRIVE","S =TURN","O =TURN","X =N/A","4UP","R2=FIRE","R1=DRIVE","T =DRIVE","S =TURN","O =TURN","X =N/A"
LABEL BLASTINST
DATA "1UP","L2=FIRE","L1=SHIELD","U =BOOST","L =TURN","R =TURN","D =RETRO","2UP","L2=FIRE","L1=SHIELD","U =BOOST","L =TURN","R =TURN","D =RETRO","3UP","R2=FIRE","R1=SHIELD","T =BOOST","S =TURN","O =TURN","X =RETRO","4UP","R2=FIRE","R1=SHIELD","T =BOOST","S =TURN","O =TURN","X =RETRO"
LABEL ALLINST
DATA "THIS IS THE 4IN1 VOLUME 1 INSTRUCTION MANUAL."
DATA "4IN1 IS A SELECTION OF GAMES PROGRAMMED FOR THE"
DATA "PLAYSTATION 2, DESIGNED TO RUN WITH THE USE OF THE"
DATA "SUPPLIED DEMO DISK AND A MEMORY CARD (8MB) (FOR"
DATA "PLAYSTATION 2). THESE GAMES ARE BASED ON 1970'S AND"
DATA "1980'S ARCADE HITS, AND ALTHOUGH THE GRAPHICS ARE"
DATA "LESS THAN THE PLAYSTATION 2 IS CAPABLE OF, WE HOPE"
DATA "YOU APPRECIATE THE GAME PLAY."
DATA ""
DATA "THE MAIN MENU ALLOWS YOU TO SELECT WHICH GAME YOU"
DATA "WOULD LIKE TO PLAY. USE LEFT AND RIGHT TO STEER THE"
DATA "TANK, AND PRESS R2 TO FIRE A SHOT AND START THE"
DATA "GAME. EACH GAME IS REPRESENTED BY A SYMBOL, AND THE"
DATA "NAME OF THE GAME YOU ARE AIMING AT IS DISPLAYED AT"
DATA "THE TOP OF THE SCREEN."
DATA "THE MENUS ARE NAVIGATED BY USING THE L BUTTONS ON"
DATA "JOY-PAD 1. L1 GOES BACKWARDS, AND L2 PROGRESSES."
DATA "IF IT ONLY HAS ONE OPTION TO CHANGE, USE UP AND"
DATA "DOWN ON PAD 1 TO CHANGE THE OPTION. IF THERE ARE"
DATA "FOUR OPTIONS, EACH PLAYER CAN CHANGE THEM WITH UP"
DATA "AND DOWN BUTTONS FOR PLAYERS ONE AND TWO, TRIANGLE"
DATA "AND CROSS BUTTONS FOR PLAYERS THREE AND FOUR."
DATA ""
DATA "FOUR WAY PLAY"
DATA "TO GET FOUR PLAYERS ON EACH GAME WITHOUT A MULTI-"
DATA "TAP, THE JOY-PADS ARE SPLIT IN TWO. PLAYER ONE USES"
DATA "THE D-PAD AND L BUTTONS ON PAD 1. PLAYER TWO USES"
DATA "THE D-PAD AND L BUTTONS ON PAD 2. PLAYER THREE USES"
DATA "THE TSOX AND R BUTTONS ON PAD 1. PLAYER FOUR USES"
DATA "THE TSOX AND R BUTTONS ON PAD 2."
DATA "TSOX STANDS FOR TRIANGLE, SQUARE, CIRCLE, CROSS."
DATA "THE USE OF TSOX BUTTONS IS SUPPOSED TO BE LIKENED"
DATA "TO THE USE OF THE D-PAD."
DATA "TRIANGLE IS UP, SQUARE IS LEFT, CIRCLE IS RIGHT,"
DATA "AND CROSS IS DOWN."
DATA "IN EACH GAME, PLAYER ONE IS RED, PLAYER TWO IS"
DATA "BLUE, PLAYER THREE IS YELLOW, AND PLAYER FOUR IS"
DATA "GREEN"
DATA ""
DATA "TRON"
DATA "THE BASIC IDEA BEHIND TRON IS TO RIDE AROUND THE"
DATA "ARENA WHILE BUILDING A WALL ON YOUR MOTORBIKE. IF"
DATA "YOU HIT A WALL OR THE PERIMETER, YOU ARE OUT, AND"
DATA "YOUR WALL IS SMASHED."
DATA "YOU CAN PLAY ALONE AGAINST THE CPU OR YOUR FRIENDS"
DATA "TO SEE WHO IS THE BEST."
DATA "THE GAME STARTS WITH EACH PERSON IN A RANDOM"
DATA "POSITION, FACING AWAY FROM THE WALL."
DATA "USE UP, DOWN, LEFT AND RIGHT TO STEER."
DATA "THE CPU HAS THREE LEVELS OF DIFFICULTY."
DATA "D.BECKHAM IS EASY. IT MAY DIE IF IT HITS A TURN."
DATA "J.VEGAS IS MEDIUM. KILL IT WITH A DEAD END."
DATA "B.HILL WILL CHASE YOU - BE AFRAID..."
DATA "ONE PLAYER VS THREE CPUS REVEALS A HIDDEN CHALLENGE"
DATA "IN THE FORM OF V.RAPTOR. THEY ATTACK YOU TOGETHER,"
DATA "SO TRY HARD NOT TO CRASH!"
DATA ""
DATA "TAG-TEAM TENNIS"
DATA "CLASSIC STYLE BAT AND BALL ACTION FOR UP TO FOUR"
DATA "PLAYERS. CLASSIC MODE IS FOR TWO, WHILE TAG-TEAM,"
DATA "DOUBLES, AND FOUR-WAY FURY CAN BE PLAYED BY UP TO"
DATA "FOUR. CLASSIC IS A STANDARD GAME OF TENNIS."
DATA "TAG-TEAM IS A SIDE-BY SIDE VARIATION OF DOUBLES."
DATA "EACH PLAYER MAY DEFEND ONLY HALF A SIDE!"
DATA "DOUBLES IS THE STANDARD DOUBLES MATCH. WE RECCOMEND"
DATA "THREE OR FOUR PEOPLE FOR THIS, AS A CPU PARTNER CAN"
DATA "BE IRRITATING. 4-WAY FURY IS AN ALL OUT BATTLE TO"
DATA "BE CHAMPION."
DATA "IN MOST MODESUP AND DOWN ARE USED TO MOVE, BUT IN"
DATA "4-WAY FURY PLAYERS THREE AND FOUR USE LEFT AND"
DATA "RIGHT. YOU CAN SLOW THE BALL DOWN BY PRESSING THE"
DATA "DIRECTION AWAY FROM THE MIDDLE OF THE COURT AS YOU"
DATA "HIT IT. TO SPEED THE BALL UP, PRESS TOWARDS THE"
DATA "MIDDLE OF THE COURT. YOU CAN CHANGE THE ANGLE OF"
DATA "BOUNCE ON THE BALL BY HITTING IT WITH THE END OF"
DATA "YOUR PADDLE. MASTERING THESE ABILITIES IS THE KEY"
DATA "TO DEFEATING THE CPU. L2 OR R2 WILL SPEED YOU UP."
DATA ""
DATA "TANKS 4 THE MEMORIES"
DATA "WHO IS THE BEST TANK DRIVER? RE-LIVE THE TANK"
DATA "BALLTES OF COMBAT (R) AS YOU SHOOT YOUR FRIENDS TO"
DATA "SCORE POINTS. ALL THREE ORIGINAL LEVELS, PLUS AN"
DATA "ALL NEW LEVEL TO GET YOU GOING! BOUNCY BOMBS AND"
DATA "STEERABLE BOMBS ALSO MAKE A COMEBACK, AND A NEW"
DATA "STYLE OF PLAY HAS BEEN ADDED - FLAG-TAG! STEAL"
DATA "YOUR OPPONENT'S FLAGS AND RETURN THEM TO BASE TO"
DATA "DESTROY THEM! IF YOU SHOOT A TANK HOLDING FLAGS, IT"
DATA "DROPS THEM. TOUCH YOUR OWN TO RETURN IT TO BASE."
DATA "STEER WITH LEFT AND RIGHT, AND USE UP OR L1 OR R1"
DATA "TO MOVE FORWARDS. SHOOT USING L2 OR R2."
DATA ""
DATA "BLASTEROIDS"
DATA "SPACE BATTLES ARE DANGEROUS AMONGST ASTEROIDS, SO"
DATA "CONVERVE YOUR ENERGY AND BLOW UP YOUR FRIENDS. LAST"
DATA "SHIP IN ONE PIECE WINS. TURNING, ACCELERATING,"
DATA "BRAKING, AND SHOOTING USE UP ENERGY. CHARGING UP"
DATA "YOUR SHIELD AND LIFE SUPPORT ALSO USE UP ENERGY, SO"
DATA "BE CAREFUL, OR YOU WILL END UP DRIFTING. SHOOT THE"
DATA "ASTEROIDS TO MAKE THEM SMALLER, BUT ALWAYS"
DATA "REMEMBER TO WATCH YOUR BACK."
DATA "USE LEFT AND RIGHT TO STEER, UP TO ACCELERATE, AND"
DATA "DOWN TO BRAKE. L1 OR R1 SWITCHES YOUR SHIELD ON AND"
DATA "OFF, WHILE L2 OR R2 MAKE YOU SHOOT. YOUR SHIELD"
DATA "CANNOT BE SWITCHED OFF AT FULL CHARGE, AND WILL"
DATA "SWITCH OFF AT NO CHARGE."
DATA ""
DATA "CREDITS"
DATA "       RESEARCHER - ANTHONY BLACK"
DATA "      GAME DESIGN - ANTHONY BLACK"
DATA "       PROGRAMMER - ANTHONY BLACK"
DATA "         GRAPHICS - ANTHONY BLACK"
DATA "          TESTERS - KENNETH BLACK"
DATA "                  - MICHELLE KNIGHT"
DATA "                  - ALEX MCGUINNESS"
DATA "SPECIAL THANKS TO - PLAYTIME MULTIMEDIA"
DATA "                  - SONY"
DATA "                  - WWW.YABASIC.CO.UK"
DATA ""
LABEL TTO
DATA "THREE","TWO","ONE","GO!"
LABEL CNAM
DATA "RON","BOB","YAN","GAV"



