0 CLEAR100:DIMH(4,5),V(4,5),MS(4),ML(4),PR(4),XS(102),YS(102),X(1),Y(1),LU(1,2):CL$=CHR$(128)+CHR$(128)+CHR$(128)
1 VIDRAM=16384:VND=16895:VCTRL=49151:CH=16:FORX=0TO1:FORY=0TO2:READLU(X,Y):NEXTY,X:GOTO20:DATA32,8,2,16,4,1
2 POKEBYTE,MASK:IFMASK<192THENPOKEBYTE,MASK+64
3 POKEVCTRL,CHOR(PEEK(VCTRL)AND7):RETURN
4 POKEVCTRL,0:RETURN
5 X1=INT(X/2):Y1=INT(Y/3):BYTE=VIDRAM+(X1+Y1*32):VLU=LU(INT(X-X1*2),INT(Y-Y1*3))
6 MASK=VLUORPEEK(BYTE):ONPSTGOTO7,2:POKEBYTE,NOT(NOTMASKORVLU):RETURN
7 POKEBYTE,MASK:RETURN
8 FORZZ=0TO1:X(ZZ)=X(ZZ)/4:Y(ZZ)=Y(ZZ)/4:NEXTZZ:DX=X(1)-X(0):DY=Y(1)-Y(0):SX=SGN(DX):SY=SGN(DY):IFDX=0THEN10
9 SL=DY/DX:B=Y(0)-SL*X(0):T1=SQR(SL*SL+1):NX=1/T1*SX:FORXT=X(0)TOX(1)STEPNX:X=INT(XT+.5):Y=INT(SL*XT+B+.5):GOSUB5:NEXTXT:RETURN
10 X=X(0):FORY=Y(0)TOY(1)STEPSY:GOSUB5:NEXTY:RETURN
10 X=X(0):FORY=Y(0)TOY(1)STEPSY:GOSUB5:NEXTY:RETURN
20 CLS(0):PRINT@74," 'SUB SEARCH' ";:PRINT@112,"BY";:PRINT@139," STEVE WARD ";
25 PRINT@195,"MC-10 VERSION BY JIM GERRIE";:GOSUB2000:PRINT@76,CL$;
30 FORW=1TO20:R=RND(500):PRINT@R,"sub";:SOUND1,2:PRINT@R,CL$;:NEXT
40 CLS(3):PRINT"MISSION: DESTROY ENEMY SUBMARINE";:PRINT@40,"*SPEED: 10KTS  ";:PRINT@72,"*DEPTH: UNKNOWN";
50 PRINT@128,"FORCE:1 SPRUANCE CLASS DESTROYER";:PRINT"*EQUIP  : SONAR (DISTANCE ONLY)":PRINT"*SPEED  : 0 TO 30KTS"
52 PRINT"*HEADING: 001 TO 360 DEGREES"
60 PRINT"*WEAPONS: 4 ASROCS":PRINT@296,"RANGE: 10NM":PRINT@328,"*DEPTH SETTING: MUST BE":PRINT@360," WITHIN 25 FT OF SUB"
70 PRINT@480,"...HIT <ENTER>";:INPUTA$
100 CLS(4):PRINT"SUB STARTS IN CENTRE...COURSE   CHANGES EVERY 7-9 TURNS.":PRINT:PRINT"EACH PLAYER STARTS IN A CORNER.":PRINT
102 PRINT"TO REPAIR AND REARM SHIP, HEAD  FOR RED REPAIR DOCK IN CENTRE.";
110 PRINT@256,"TO ENTER SHIP'S COURSE AND SPEED...HIT <ENTER>.   NEW SHIP TRACK";:PRINT"WILL THEN  >>FLICKER<<":PRINT
112 PRINT"YOU THEN HAVE THE OPTION OF     ATTACKING... HIT <Y> OR <N>";:PRINT@480,"...HIT <ENTER>";:INPUTN$
115 GOSUB810
120 CLS(3):PRINT@64," INPUT NUMBER OF PLAYERS";:INPUTP4:IFP4>2THENMR=7:GOTO127
125 MR=RND(3)+7
127 LC=266:IFP4<1ORP4>4THEN120
130 PRINT@160," SELECT DIFFICULTY...":PRINT:PRINT"1. LANDLUBBER-DISPLAYS SUB PATH 2. OLD SALT":INPUTA3:GOSUB1320
140 FORP=1TOP4:PR(P)=30:MS(P)=4:ML(P)=2:NEXTP
145 XS(0)=128:YS(0)=96
150 TT=1:T=1:D=P4*300:DD=RND(D)
160 CLS(0):PRINT@64,"SUB DEPTH IS 1 TO"D"FEET";:GOSUB2000
170 DS=RND(36)*10:GOTO200
180 FORB=1TOP4:FORC=1TO4:H(B,C)=H(B,C+1):V(B,C)=V(B,C+1):NEXTC,B
190 CLS(0):IFTT=101THEN1490
195 PRINT@64,"YOU ARE ON TURN #"TT"..GIVE UP?":PRINT@416,"TO CONTINUE GAME, HIT <ENTER>":PRINT@96,""
197 INPUT" ENTER <I GIVE UP>...";G$:IFG$="I GIVE UP"THEN1490
200 MV=MV+1:IFMV=MR THENMV=0:GOTO170
210 T=T+1:TH=T:T=2:H(0,1)=XS(TH-1):V(0,1)=YS(TH-1):DR=DS:SP=10:P=0:GOTO320
220 XS(T)=H(0,2):YS(T)=V(0,2)
230 P=1
240 GOSUB910:CLS(0):GOSUB3:GOSUB1530:IFA3=1THENGOSUB1600
250 PST=1:FORN=1TO3:X(0)=H(P,N):Y(0)=V(P,N):X(1)=H(P,N+1):Y(1)=V(P,N+1):GOSUB8
260 A$=INKEY$:IFA$<>""THEN280
262 NEXTN
270 PST=0:FORN=1TO3:X(0)=H(P,N):Y(0)=V(P,N):X(1)=H(P,N+1):Y(1)=V(P,N+1):GOSUB8:NEXTN:GOTO250
280 GOSUB4:CLS(4):GOSUB3000:PRINT@64,"SKIPPER..WHAT COURSE (001-360)";:INPUTDR:IFDR>360ORDR=0THEN280
290 PRINT@160,".";:INPUT"..WHAT SPEED";SP
300 IFSP>PR(P)THENPRINT@228,"WE CAN'T GO THAT FAST!";:PRINT@486,"TOP SPEED IS"PR(P)"KTS";:GOTO290
310 TH=T:T=5:CLS(0):GOSUB3:GOSUB1530:IFA3=1THENGOSUB1600
320 REM DIRECTIONS
330 IF DR=360THEN340
335 GOTO370
340 H(P,T)=H(P,(T-1))
350 V(P,T)=V(P,(T-1))-SP
360 GOTO710
370 IF DR<>090THEN410
380 H(P,T)=H(P,(T-1))+SP
390 V(P,T)=V(P,(T-1))
400 GOTO710
410 IF DR<>180THEN450
420 H(P,T)=H(P,(T-1))
430 V(P,T)=V(P,(T-1))+SP
440 GOTO710
450 IF DR<>270THEN490
460 H(P,T)=H(P,(T-1))-SP
470 V(P,T)=V(P,(T-1))
480 GOTO710
490 IF DR>90THEN550
500 AA=90-DR:AB=DR
510 GOSUB770
520 H(P,T)=H(P,(T-1))+INT(SB)
530 V(P,T)=V(P,(T-1))-INT(SA)
540 GOTO710
550 IF DR>180THEN610
560 AA=DR-90:AB=90-AA
570 GOSUB770
580 H(P,T)=H(P,(T-1))+INT(SB)
590 V(P,T)=V(P,(T-1))+INT(SA)
600 GOTO710
610 IF DR>270THEN670
620 AA=DR-180:AB=90-AA
630 GOSUB770
640 H(P,T)=H(P,(T-1))-SA
650 V(P,T)=V(P,(T-1))+SB
660 GOTO710
670 AA=DR-270:AB=90-AA
680 GOSUB770
690 H(P,T)=H(P,(T-1))-SB
700 V(P,T)=V(P,(T-1))-SA
710 GOSUB840
720 T=TH:IFP=0THEN220
730 GOSUB980:GOTO1050
740 GOSUB1360
750 P=P+1:IFP<=P4 THEN240
760 TT=TT+1:GOTO180
770 R5=57.29577951:AC=90
780 AA=AA/R5:AB=AB/R5:AC=AC/R5
790 SA=(SIN(AA)/SIN(AC))*SP
800 SB=(SIN(AB)/SIN(AC))*SP:RETURN
810 DATA 0,0,5,5,255,0,250,5,255,191,250,186,0,191,5,186
820 FORP=1TO4:READX,Y,X1,Y1:FORN=1TO4:IFN=3THENH(P,N)=X1:V(P,N)=Y1:GOTO830
825 H(P,N)=X:V(P,N)=Y
830 NEXTN,P:XS(1)=128:YS(1)=96:RETURN
840 IFH(P,T)<0ORH(P,T)>255ORV(P,T)<0ORV(P,T)>191THEN880
850 IFP=0THENRETURN
860 IFH(P,T)<118ORH(P,T)>138ORV(P,T)<86ORV(P,T)>106THENRETURN
870 CLS(2):PRINT@64,"YOU HAVE REACHED THE REPAIR DOCK":PR(P)=30:MS(P)=4:ML(P)=2:SOUND1,5:GOSUB2000:GOSUB980:T=TH:GOTO750
880 IFP=0THENT=TH-1:MV=0:GOTO170
890 CLS(8):PRINT@96,"SKIPPER!  WE HIT THE REEF !!!":PR(P)=PR(P)-10:SOUND1,5:GOSUB2000:IFPR(P)<20THENPR(P)=15
900 PRINT:PRINT"WE HAVE PROP DAMAGE !":PRINT:SOUND1,5:PRINT"TOP SPEED IS NOW"PR(P)"KTS.":PRINT"TRY AGAIN...":GOSUB1420:T=TH
905 GOTO240
910 CLS(3)
920 PRINT@32," STATUS OF DESTROYER #"P
930 PRINT@128," TOP SPEED ="PR(P)"KTS"
940 PRINT:PRINT" ASROCS ="MS(P)
950 PRINT:PRINT" LAUNCHERS ="ML(P)
960 PRINT@480,"...HIT <ENTER>";:INPUTF$:RETURN
980 SX=ABS(XS(T)-H(P,5))
990 SY=ABS(YS(T)-V(P,5))
1000 SD=INT(SQR(SX*SX+SY*SY))
1010 RETURN
1020 FOR H=1TO MS
1030 SOUND100,2:SOUND50,2
1040 NEXTH:RETURN
1050 A$=INKEY$:PST=0:GOSUB1080:IFA$<>""THEN1090
1060 PST=1:GOSUB1080:IFA$<>""THEN1090
1070 A$=INKEY$:GOTO1090
1080 X(0)=H(P,4):Y(0)=V(P,4):X(1)=H(P,5):Y(1)=V(P,5):GOSUB8:RETURN
1090 IFA$="Y"THENGOSUB4:GOTO1110
1100 IFA$="N"THENGOSUB4:GOTO740
1105 GOTO1050
1110 FORW=1TO5
1120 FOR WT=0TO8:CLS(WT):PRINT@160,"^ ^ ^ ^ BATTLE STATIONS ^ ^ ^ ^ "
1130 NEXTWT,W
1140 IFMS(P)=0ORML(P)=0THENPRINT@64," HEY SKIPPER...HOW ABOUT HEADING FOR THE REPAIR DOCK ? ? ?":GOSUB2000:GOTO740
1150 PRINT@64," HOW MANY ROCKETS";:INPUTMS:IFMS<1THEN1150
1160 IF MS>MS(P)ORMS>ML(P)THENPRINT@256," SKIPPER...WE CAN'T DO THAT ! !":GOSUB2000:GOTO1140
1170 MS(P)=MS(P)-MS:FORWT=1TOMS
1180 PRINT@(128*WT+128),"WHAT DEPTH FOR ROCKET #"WT;:INPUT MD(WT)
1190 NEXTWT:GOSUB1020
1200 IF SD>10THENGOSUB2000:GOTO740
1210 FORWT=1TO MS:IF ABS(MD(WT)-DD)<26THEN1430
1215 NEXTWT
1220 GOSUB2000
1230 FORE=1TO3:FORF=1TO7:SOUND15,1:NEXTF:SOUND30,1:NEXTE
1250 CLS(8):ONRND(2)GOTO1260,1290
1260 PRINT@96," SKIPPER! WE TOOK A HIT IN THE   ENGINE ROOM !":PRINT:GOSUB2000
1270 IFPR(P)<21THENPR(P)=25
1280 PR(P)=PR(P)-10:PRINT@192,"TOP SPEED IS NOW"PR(P)"KTS.":GOSUB1420:GOTO740
1290 PRINT@96," SKIPPER!!  WE TOOK A HIT AFT!!":GOSUB2000
1300 ML(P)=ML(P)-1:PRINT@160," WE LOST A ROCKET LAUNCHER !!!":GOSUB2000:PRINT@320," LAUNCHERS NOW OPERATIONAL="ML(P):GOSUB1420
1305 GOTO740
1320 CLS(0):PRINT@96,"GET READY TO COPY DISTANCE CODE.":PRINT"DON'T LET ANYONE SEE YOUR CODE!!";:SOUND1,1
1322 FORZZ=1TO1000:NEXTZZ
1330 FORN=1TOP4:CLS(0)
1340 PRINT@64," PLAYER #"N"YOUR NUMBER IS.....":KE(N)=RND(10):PRINT:PRINT"...READY?...HIT ANY KEY";
1345 A$=INKEY$:ZZ=RND(100):IFA$=""THEN1345
1350 PRINT@192,"........"KE(N):GOSUB2000:NEXTN:RETURN
1360 CLS(2):PRINT" SKIPPER #"P"...USE YOUR CODE #  TO DETERMINE SUB'S DISTANCE.":PRINT:FORWT=1TO10
1370 IFWT=KE(P)THENPRINTWT". "SD:GOTO1390
1380 RN=RND(2):ONRND(2)GOSUB1400,1410
1390 NEXTWT:PRINT@480,"...HIT <ENTER>";:INPUTF$:RETURN
1400 PRINTWT". "(ABS(SD+RND(RN*15))):RETURN
1410 PRINTWT". "(ABS(SD-RND(RN*15))):RETURN
1420 GOSUB2000:RETURN
1430 LS=1
1440 CLS(8):PRINT@37,"---MISSION COMPLETE---";:PRINT@99,"SUB DESTROYED AT"DD"FEET.";:GOSUB2000:GOTO1500
1450 FORD=1TO(TT)
1460 X(0)=XS(D):Y(0)=YS(D):X(1)=XS(D+1):Y(1)=YS(D+1):PST=1:GOSUB8
1480 IFCN=1THEN1510
1485 NEXTD:RETURN
1490 TT=TT-1:CLS(8):PRINT@64,"BETTER LUCK NEXT TIME...........":GOSUB2000:PRINT"SUB WAS AT"DD"FEET.":GOSUB2000
1500 CN=1:CLS(0):GOSUB3:GOSUB1530:GOTO1450
1510 NEXTD:GOSUB4000:CLS(0):GOSUB4:PRINT@64,"PLAY AGAIN (Y/N)";:INPUTF$
1520 IFLEFT$(F$,1)="Y"THENRUN
1521 END
1530 PRINT@238,CHR$(193);CHR$(204);CHR$(204);CHR$(194);:PRINT@270,CHR$(213);:PRINT@273,CHR$(234);
1535 PRINT@303,CHR$(240);CHR$(240);
1540 RETURN
1600 FORD=TT-2TOTT
1605 IFD<0THEND=D+1
1610 X(0)=XS(D):Y(0)=YS(D):X(1)=XS(D+1):Y(1)=YS(D+1):PST=1:GOSUB8
1615 NEXTD
1620 RETURN
2000 FOR ZZ=1TO2000:NEXTZZ
2010 RETURN
2090 LC=266
3000 PRINT@LC,   "    360    ";
3010 PRINT@LC+32,"  330:030  ";
3020 PRINT@LC+64," 300 : 060 ";
3030 PRINT@LC+96,"270--+--090";
3040 PRINT@LC+128," 240 : 120 ";
3050 PRINT@LC+160,"  210:150  ";
3060 PRINT@LC+192,"    180    ";
3070 RETURN
4000 IFLS<>1THENGOSUB1420:GOTO4020
4010 FORC=1TO10:X=XS(T)/4:Y=YS(T)/4:PST=1:GOSUB5:PST=0:GOSUB5:NEXTC
4020 RETURN

