Skip to content

Instantly share code, notes, and snippets.

@grebenkov
Created March 7, 2017 01:46
Show Gist options
  • Save grebenkov/0d73ffaab285fb2bbd24dddfa400b501 to your computer and use it in GitHub Desktop.
Save grebenkov/0d73ffaab285fb2bbd24dddfa400b501 to your computer and use it in GitHub Desktop.
Torpedo Fire (1981, SSI, Apple II) source code
REM PROG=P0
2 POKE 214,128
5 POKE 24576,0: POKE 230,32: TEXT : HOME : FOR A = 768 TO 790: READ B: POKE A,B: NEXT
70 HTAB 4: VTAB 12: INVERSE : PRINT " LOADING INITIALIZATION PHASE ": NORMAL
80 CALL 768: & RUN "P1",24577
1000 DATA 160,0,169,32,132,0,133,1,152,145,0,200,208,251,230,1,165,1,201,96,208,242,96
REM PROG = P1
4 LOMEM: 38400
2573
17487 E%(15),X%(15),Y%(15),SCALE%(15),XROT%(15),YROT%(15),ZROT%(15),SX%(15),SY%(15)
20 RESET% = 7932:CLR% = 7951:HIRES% = 7983:CRNCH% = 7737:TXTGEN% = 768
50 I = FRE (0)
52 PI = 355 / 113
60 & RECALL "HT": CALL 3072
150 FOR I = 16386 TO 16406
152 READ J
154 POKE I,J
156 NEXT
158 DATA 173,48,192,136,208,5
160 DATA 206,1,64,240,9,202,208
162 DATA 245,174,0,64,76,2,64,96
163 DATA 210,50,210,50,190,50,170,50,210,50,170,50,190,50
164 DATA 250,170,185,70,200,20,190,50,150,150,190,200
165 DATA 210,50,190,50,170,50,150,20,190,50,150,100
166 FOR X1 = 2450 TO 2487: READ X: POKE X1,X: NEXT
170 GOTO 180
175 POKE 16384,XA: POKE 16385,XB: CALL 16386: RETURN
180 POKE 772,20: PRINT CHR$ (5): PRINT CHR$ (3);"9": PRINT CHR$ (2);"0": PRINT CHR$ (3);"3": PRINT CHR$ (12): PRINT CHR$ (16)
185 PRINT " !.#$%&'()*+,-"
190 PRINT " 0123456789:;<="
195 PRINT " @ABCDEFGHIJKLM"
200 PRINT " PQRSTUVWXYZ"; CHR$ (91); CHR$ (92);"]"
202 PRINT " ";
205 FOR LM = 96 TO 110
207 PRINT CHR$ (LM);
208 NEXT
209 PRINT "": PRINT " ";
210 FOR LM = 112 TO 126
212 PRINT CHR$ (LM);
214 NEXT
216 PRINT ""
220 POKE 772,28: PRINT CHR$ (18): PRINT CHR$ (0)
225 PRINT " Strategic Simulations Incorporated"
230 HTAB 17: PRINT "presents"
232 HTAB 12: PRINT "a game designed by"
236 HTAB 16: PRINT "John Lyon"
245 GOSUB 20080
250 GOSUB 41000
270 VTAB 16: HTAB 1: PRINT
272 PRINT " (C) 1981 Strategic Simulations Inc."
300 PRINT : PRINT "You may:"
304 PRINT " 1. Play the Introductory scenario ?"
306 PRINT " 2. Re-start a game you've saved ?"
308 PRINT " 3. Create a new scenario (Shipyard) ?"
309 PRINT " 4. Play a scenario you've created ?"
13925  PRINT " 5. Read last minute ERRATA ?"
312 PRINT "Which ?";: GOSUB 25000
313 IF AA$ = "5" THEN GOSUB 60000: GOTO 250
314 IF AA$ = "1" THEN AA$ = "INTRO-GAME": GOTO 11100
316 IF AA$ = "2" THEN 380
318 IF AA$ = "3" THEN 330
319 IF AA$ = "4" THEN 11000
320 PRINT : PRINT : PRINT "Come on you TURKEY, enter a number from 1 to 5"
322 GOSUB 20000
324 GOTO 250
330 PRINT : PR# 0: IN# 0: REM RUN SCENARIO MAKER
332 TEXT : HOME :I = FRE (0)
334 HTAB 9: VTAB 12: INVERSE : PRINT " LOADING SCENARIO MAKER ": NORMAL
335 GOTO 12000
336 STOP
380 REM
382 PRINT : PRINT : PRINT "Please remove the GAME disc and insert the disc with the game SAVEd on it."
390 PRINT : PRINT "Hit 'RETURN' when ready-";: GOSUB 25000
392 PRINT : PRINT : & C AT
400 PRINT : PRINT : PRINT "Enter NAME file saved under-": PRINT : GOSUB 25000
410 F0% = 1
500 PRINT : & READ AA$
512 INPUT SA: INPUT SB: INPUT SC: INPUT SD: INPUT SE: INPUT SF: INPUT SG
514 INPUT SH: INPUT SI: INPUT SJ: INPUT SK: INPUT SL: INPUT SM: INPUT SN: INPUT SO
516 INPUT SP: INPUT SQ: INPUT SR: INPUT SS: INPUT ST: INPUT SU: INPUT SV: INPUT SW
518 INPUT SX: INPUT SY: INPUT SZ: INPUT SA%: INPUT SB%: INPUT SC%: INPUT SD%: INPUT SE%: INPUT SF%: INPUT S9
520 INPUT UT: INPUT QP%: INPUT VU%: INPUT VS%
2573  INPUT NE%: INPUT NT%: INPUT NF%: INPUT NS%
3176  GOSUB 30000: REM PARAMETERS
530 FOR I = 0 TO UT: INPUT U$(I): NEXT
532 FOR I = 0 TO UT: INPUT UX(I): NEXT
534 FOR I = 0 TO UT: INPUT UY(I): NEXT
540 FOR I = 0 TO 20: INPUT WX(I): NEXT
542 FOR I = 0 TO 20: INPUT WY(I): NEXT
544 FOR I = 0 TO 20: INPUT WZ(I): NEXT
546 FOR I = 0 TO 20: INPUT WT%(I): NEXT
550 J = CO%
560 FOR I = 0 TO J: INPUT MO$(I): NEXT
562 FOR I = 0 TO J: INPUT FO$(I): NEXT
570 INPUT WI%: INPUT TI%
580 FOR I = 0 TO 19: INPUT TX(I): NEXT
18025  FOR I = 0 TO 19: INPUT TY(I): NEXT
584 FOR I = 0 TO 19: INPUT TZ%(I): NEXT
588 INPUT TA$: INPUT QS%: INPUT TD$
590 J = NS%: FOR I = 0 TO J: INPUT TB$(I): NEXT
592 FOR I = 0 TO J: INPUT TS$(I): NEXT
600 INPUT PS$: INPUT PU$: INPUT CT%: INPUT QB%
700 & END
710 IF AA$ = "Game Data" THEN QP% = 0
720 IF F0% = 0 THEN 1310
722 F0% = 0
730 PRINT : PRINT "Please insert the GAME disc"
740 PRINT : PRINT "Hit RETURN when ready ";: GOSUB 25000
750 FOR U = 0 TO UT
760 XN(U) = UX(U):YN(U) = UY(U):U$ = U$(U)
770 UN$ = LEFT$ (U$,1) + MID$ (U$,SI,2) + MID$ (U$,SN,3)
780 IF U < US% THEN 800
790 IF MID$ (U$,SM,3) < > "000" THEN UN$ = LEFT$ (U$,1) + MID$ (U$,SK,2) + MID$ (U$,SN,3)
800 UN$(U) = UN$
810 NEXT
820 PRINT : PR# 0: IN# 0
830 TEXT : HOME :I = FRE (0): IF QS% < > 69 THEN 900
840 VTAB 12: HTAB 12: INVERSE : PRINT " LOADING 'ACE' ": NORMAL
850 & GOTO "SOL"
900 VTAB 12: HTAB 10: INVERSE : PRINT " LOADING ORDERS PHASE "
910 HTAB 13: PRINT " SUBMARINE SIDE ": NORMAL
920 & GOTO "P3"
1310 PRINT : PRINT : PRINT "Do you wish to play against a (H)uman or against the (C)omputer ": GOSUB 25000
1312 GOSUB 31340
1320 IF AA$ = "H" THEN 1350
1330 IF AA$ = "C" THEN QS% = 69: GOSUB 40000: GOTO 1350
1332 PRINT : PRINT "Please enter a 'C' or an 'H'": GOSUB 20180: GOTO 1310
1350 PRINT : PRINT "Do you wish to play a (D)ay or a (N)ight scenario ";: GOSUB 25000
1360 IF AA$ = "D" OR AA$ = "N" THEN TD$ = AA$: GOTO 1372
1370 PRINT : PRINT "Only 'D N' allowed": GOSUB 20180: GOTO 1350
1372 PRINT : PRINT "Do you wish the 'BEGINNER'S OPTION' (See ERRATA) ": PRINT "Enter Y if Yes ";: GOSUB 25000: IF AA$ = "Y" THEN QB% = 69
1380 IF QS% < > 69 THEN GOSUB 42000
10200 PRINT : PR# 0: IN# 0
10210 GOSUB 17000
10500 TEXT : HOME :I = FRE (0)
10510 HTAB 5: VTAB 12: INVERSE : PRINT " LOADING INITIAL SEARCH PHASE ": NORMAL
10600 & GOTO "P5"
11000 : REM READ & SET-UP SCENARIO ***************
11010 PRINT : PRINT "Please remove game disc and insert the disc with the new scenario."
11020 PRINT : PRINT "Hit 'RETURN' when ready. ";: GOSUB 25000
11022 PRINT : & C AT
11030 PRINT : PRINT "Enter the NAME of this scenario. ": GOSUB 25000
11100 PRINT : & READ AA$
11112 INPUT SA: INPUT SB: INPUT SC: INPUT SD: INPUT SE: INPUT SF: INPUT SG
11114 INPUT SH: INPUT SI: INPUT SJ: INPUT SK: INPUT SL: INPUT SM: INPUT SN: INPUT SO
11116 INPUT SP: INPUT SQ: INPUT SR: INPUT SS: INPUT ST: INPUT SU: INPUT SV: INPUT SW
11118 INPUT SX: INPUT SY: INPUT SZ: INPUT SA%: INPUT SB%: INPUT SC%: INPUT SD%: INPUT SE%: INPUT SF%: INPUT S9
11120 INPUT UT: INPUT NE%: INPUT NT%: INPUT NF%: INPUT NS%
11130 GOSUB 30000: REM DIM'S & PARAMETERS
11140 FOR I = 0 TO UT: INPUT U$(I): NEXT
11150 FOR I = 0 TO UT: INPUT UX(I): NEXT
11160 FOR I = 0 TO UT: INPUT UY(I): NEXT
11170 INPUT TF$
11200 & END
11202 IF AA$ = "INTRO-GAME" THEN 1310
11210 PRINT : PRINT "Please insert the game disc."
11220 PRINT : PRINT "Hit 'RETURN' when ready. ";: GOSUB 25000
11300 GOTO 1310
12000 REM POKE THE SHIT OUT OF THIS THING *************
12050 POKE 2048,0: & RUN "P1A",2049
17000 REM GARBAGE **
17030 PRINT : PR# 0: IN# 0
17040 TEXT : HOME
17070 PRINT : & RECALL "MODULE.TWO.D"
17080 CALL RESET%: CALL CRNCH%: CALL CRNCH%
17999 RETURN
20000 IF Q9% < > 0 THEN RETURN
20002 FOR LM = 1 TO 2: FOR X1 = 1 TO 50: NEXT
20004 FOR X2 = 1 TO 6:XA = PEEK ((X2 - 1) * 2 + 2114):XB = PEEK ((X2 - 1) * 2 + 2115): GOSUB 175: NEXT
20006 NEXT
20010 RETURN
20040 IF Q9% < > 0 THEN RETURN
20042 FOR LM = 1 TO 2: FOR X1 = 1 TO 50: NEXT
20044 FOR X2 = 1 TO 7:XA = PEEK ((X2 - 1) * 2 + 2100):XB = PEEK ((X2 - 1) * 2 + 2101): GOSUB 175: NEXT
20046 NEXT
20050 RETURN
20080 IF Q9% < > 0 THEN RETURN
20082 FOR LM = 1 TO 2: FOR X1 = 1 TO 50: NEXT
20084 FOR X2 = 1 TO 6:XA = PEEK ((X2 - 1) * 2 + 2476):XB = PEEK ((X2 - 1) * 2 + 2477): GOSUB 175: NEXT
20088 NEXT
20090 RETURN
20180 IF Q9% < > 0 THEN 20195
20181 FOR LM = 1 TO 25
20182 POKE 16384,200: POKE 16385,6: CALL 16386
20184 POKE 16384,175: POKE 16385,2: CALL 16386
20186 NEXT LM
20190 RETURN
20195 FOR LM = 0 TO 1000: NEXT
20197 RETURN
25000 J = 1:AA$ = "": POKE 16384,27: POKE 16385,5: CALL 16386
25005 K = 1
25006 I = PEEK ( - 16384): IF I > 127 THEN 25017
25007 INVERSE : PRINT " "; CHR$ (8);: NORMAL
25008 K = K + 1: IF K < 10 THEN 25006
25010 K = 1
25013 I = PEEK ( - 16384): IF I > 127 THEN 25017
25014 PRINT " "; CHR$ (8);
25015 K = K + 1: IF K < 5 THEN 25013
25016 GOTO 25005
25017 POKE - 16368,0:I = I - 128:C$ = CHR$ (I)
25018 IF C$ = CHR$ (13) THEN 25035
25019 PRINT C$;
25020 IF C$ = CHR$ (8) THEN 25040
25025 AA$ = AA$ + C$: IF J > 20 THEN 25000
25030 J = J + 1: GOTO 25005
25035 PRINT " ";: RETURN
25040 J = J - 1: IF J < 2 THEN 25000
25045 NORMAL : PRINT " "; CHR$ (8);:AA$ = LEFT$ (AA$,J - 1): HTAB ( POS (0)): GOTO 25005
30000 REM SHIP TABLES *****************
30020 DIM U$(UT),UX(UT),UY(UT),XN(UT),YN(UT)
30500 REM NE% = # OF ESCORTS
30502 UE% = 0: REM U$ IDX TO 1ST ESCORT
30510 REM NT% = # OF TANKERS
30512 UT% = NE%: REM U$ IDX TO 1ST TANKER
30520 REM NF% = # OF FREIGHTERS
30522 UF% = UT% + NT%
30530 REM NS% = # OF SUBS
30532 US% = UF% + NF%
30600 DIM MO$(NE% + NS%),FO$(NE% + NS%),FS$(NE% + NS%): REM MOVE & FIRE ORDERS
30602 DIM TU%(NE% + NS%): REM TIME USED FOR EACH ORDER
30610 CO% = NE% + NS%: REM IDX TO O$ FOR CONVOY
31200 REM DEPTH CHARGE DATA
31210 DIM WX(20),WY(20),WZ(20),WT%(20)
31300 REM TORPEDO DATA ********************
31310 DIM TX(20),TY(20),TZ%(20)
31320 TA$ = "0000000000000000000000": REM TIMES FOR 19 TORPEDOES
31330 DIM TB$(NS%),TS$(NS%)
31331 GOTO 32000
31340 A = NS% - 1
31350 FOR I = 0 TO A
31360 J = I + US%:B = VAL ( MID$ (U$(J),SD%,1)):S = VAL ( MID$ (U$(J),SE%,1))
31370 A$ = "X X":TB$(I) = A$:TS$(I) = A$
31380 K = B: GOSUB 31800:TB$(I) = A$:K = S:A$ = TS$(I): GOSUB 31800:TS$(I) = A$
31390 NEXT
31400 RETURN
31800 J = 1: IF K = 0 THEN RETURN : REM K=# OF TUBES TO LOAD
31810 A$ = LEFT$ (A$,J) + "L" + RIGHT$ (A$,10 - J)
31820 J = J + 1: IF J < = K THEN 31810
31830 RETURN
32000 REM UN$ STRING ************
2573 } REM 1=GRAPHICS ID
32020 REM 2-3=CURRENT SPEED
32030 REM 4-6=CURRENT DIRECTION
32100 DIM UN$(UT)
39999 RETURN
40000 UU = US% - 1:X = 0:Y = 0:Y0 = 0: REM SOL SET-UP **
40010 FOR U = 0 TO UU
40012 IF UX(U) = 69000 THEN 40050
40020 IF UX(U) > X THEN X = UX(U)
40030 IF UY(U) > Y THEN Y = UY(U)
40040 IF UY(U) < Y0 THEN Y0 = UY(U)
40050 NEXT
40100 UU = US%
40110 FOR U = UU TO UT
40112 U$(U) = LEFT$ (U$(U),SN - 1) + "270" + RIGHT$ (U$(U),S9 - SN - 2)
40120 D = 1000 * RND (1):UX(U) = X + 2000 + D
40130 Y1 = Y + 1000 + 500 * RND (1): IF RND (1) > .5 THEN Y1 = Y0 - 1000 - 500 * RND (1)
40140 UY(U) = Y1 * RND (1)
40150 NEXT
40200 RETURN
41000 FOR I = 0 TO 2000: NEXT : VTAB 10
41010 PRINT CHR$ (3);"0": PRINT CHR$ (2);"0"
41020 PRINT CHR$ (12): VTAB 4
41030 PRINT CHR$ (5): PRINT CHR$ (3);"2"
41032 FOR I = 0 TO 3: PRINT CHR$ (9);: NEXT
41040 PRINT "TORPEDO FIRE"
41090 PRINT CHR$ (18): PRINT CHR$ (3);"9"
41100 RETURN
42000 PRINT CHR$ (12)
42010 PRINT "Surface side turn away": PRINT
42020 PRINT "Sub side enter 2 letter PASSWORD ";: GOSUB 25000:A = LEN (AA$): IF A < > 2 THEN 42000
42030 PU$ = AA$: PRINT CHR$ (12)
42040 PRINT "Sub side turn away"
42050 PRINT : PRINT "Surface side enter 2 letter PASSWORD ";: GOSUB 25000:A = LEN (AA$): IF A < > 2 THEN PRINT CHR$ (12): GOTO 42040
42060 PS$ = AA$: RETURN
60000 PRINT CHR$ (12)
60010 PRINT "* BEGINEER'S OPTION - If an underwater weapon (DC,AT or K-Gun) detonates within 250 yards of a sub then:"
60020 PRINT " 1. Damage is caused if the X,Y distance is less than 75 yards and the depth differential is less than 75 feet."
60030 PRINT " 2. The X,Y distance is displayed during the COMPUTER ACTIVITY PHASE."
60040 PRINT "* 6.21 Ahead-Throw weapons sink at a rate of 10 feet per second. If a sub's";
60050 PRINT " X,Y is within 50 yards and the depth differential is within 50 feet then the charge detonates. It will automatically detonate when 1000 feet underwater."
60090 VTAB 24: HTAB 1: PRINT "Hit RETURN to continue. ";: GOSUB 25000: RETURN
REM PROG = P1A
4 I = FRE (0)
69 PI = 3.14159
70 GOTO 10000
1000 HOME : PRINT "MAP OF 500 YARD SQUARES"
1200 FOR U = 0 TO UT
1210 I = 10 - UY(U) / 500: IF I < 1 OR I > 20 THEN 1230
1212 J = 20 + UX(U) / 500: IF J < 1 OR J > 40 THEN 1230
1220 VTAB I: HTAB J: PRINT MID$ (U$(U),SB,1)
1230 NEXT
1240 RETURN
10000 TEXT : HOME :I = FRE (0): REM MAIN **
10020 VTAB 12: HTAB 12: INVERSE : FLASH
10030 PRINT " S S I SHIPYARD "
10040 NORMAL : VTAB 18: PRINT "YOU MAY": PRINT : PRINT " 1. CREATE A NEW SCENARIO": PRINT " 2. MODIFY AN EXISTING SCENARIO": PRINT : PRINT "WHICH ";: INPUT A$
10050 IF A$ = "1" THEN 10100
10060 IF A$ = "2" THEN 40000
10070 PRINT "ONLY '1 2' ALLOWED": GOSUB 52000: GOTO 10000
10100 GOSUB 11000: REM SET UP
10110 GOSUB 51000: REM GET INIT DATA
34826 ' GOSUB 22000: REM SET UP CLASS
52746 ' TEXT : HOME
55306 ' GOSUB 13000: REM MENU CONTROL
15370 ( TEXT : HOME
17930 ( PRINT "DO YOU WISH TO WRITE THE FILE NOW ?"
20490 ( PRINT : PRINT "ENTER Y/N ";: INPUT A$
23050 ( IF A$ = "N" THEN 10200
25610 ( IF A$ < > "Y" THEN GOSUB 52000: GOTO 10300
28170 ( GOTO 50000: REM WRITE DATA FILE
40970 ( GOTO 19000: REM BACK TO P1
63498 * GOSUB 14000: GOTO 11440: REM SET UP **
522 + HOME
11100 PRINT : PRINT "HOW MANY ESCORT SHIPS (1-9) ";: INPUT A$
11110 E = VAL (A$): IF E < 1 OR E > 9 THEN GOSUB 52000: GOTO 11100
11120 PRINT : PRINT "HOW MANY TANKERS (0-9) ";: INPUT A$
11130 T = VAL (A$): IF T < 0 OR T > 9 THEN GOSUB 52000: GOTO 11120
11140 PRINT : PRINT "HOW MANY FREIGHTERS (0-9) ";: INPUT A$
11150 F = VAL (A$): IF F < 0 OR F > 9 THEN GOSUB 52000: GOTO 11140
11160 PRINT : PRINT "HOW MANY SUBS (1-9) ";: INPUT A$
11170 S = VAL (A$): IF S < 1 OR S > 9 THEN GOSUB 52000: GOTO 11160
11200 UT = E + T + F + S - 1: IF T = 0 THEN UT = UT + 1
11202 IF F = 0 THEN UT = UT + 1
11210 DIM U$(UT),UN$(UT),UX(UT),UY(UT),XN(UT),YN(UT)
11250 U = 0:I = 1:A$ = "DUMMY"
11260 U$(U) = "2E" + STR$ (I) + A$
11270 U = U + 1:I = I + 1: IF I < = E THEN 11260
11280 I = 1
11290 U$(U) = "0T" + STR$ (I) + A$
9226 ,U = U + 1:I = I + 1: IF I < = T THEN 11290
11786 ,I = 1
14346 ,U$(U) = "1F" + STR$ (I) + A$
16906 ,U = U + 1:I = I + 1: IF I < = F THEN 11320
19466 ,I = 1
22026 ,U$(U) = "3S" + STR$ (I) + A$
24586 ,U = U + 1:I = I + 1: IF I < = S THEN 11350
34826 , PRINT : PRINT "(F)AST OR (S)LOW CONVOY ";: INPUT A$
37386 , IF A$ = "F" THEN CS$ = "12": RETURN
39946 , IF A$ = "S" THEN CS$ = "08": RETURN
42506 , PRINT "ONLY 'F S' ALLOWED": GOSUB 52000: GOTO 11400
11440 PRINT : PRINT "SURFACE SIDE CHOOSE NATIONALITY"
11450 PRINT "(A)MERICAN (B)RITISH (G)ERMAN (J)APAN"
11460 INPUT A$
11470 IF A$ = "A" OR A$ = "B" OR A$ = "G" OR A$ = "J" THEN 11490
11480 PRINT "ENTER 'A B G J' DUMMY": GOSUB 52000: GOTO 11440
11490 NS$ = A$: IF A$ = "N" THEN PRINT "NO CODE YET": STOP
11500 PRINT : PRINT "SUB SIDE CHOOSE NATIONALITY"
11510 PRINT "(A)MERICAN (B)RITISH (G)ERMAN (J)APAN"
11520 INPUT A$
2573 - IF A$ = "A" OR A$ = "B" OR A$ = "G" OR A$ = "J" THEN 11550
11540 PRINT "ENTER 'A B G J' DOPE": GOSUB 52000: GOTO 11500
11550 NU$ = A$: IF A$ = "N" THEN PRINT "NO CODE YET": STOP
11560 PRINT : PRINT "CHOOSE A TIME PERIOD FROM BELOW": PRINT "1) 1939 - 1941": PRINT "2) 1942 - 1943": PRINT "3) 1944 - 1945": INPUT A$
11570 IF A$ = "1" OR A$ = "2" OR A$ = "3" THEN 11590
11580 PRINT "ONLY '1 2 3' ALLOWED": GOSUB 52000: GOTO 11560
11590 TP$ = A$: GOSUB 15000: GOTO 11100
12000 VTAB 23: REM MOD SHIP DATA **
12020 PRINT "ENTER SHIP ID (Q=QUIT M=MAP) ";: INPUT A$
12030 IF A$ = "M" THEN GOSUB 1000: GOTO 12000
12040 IF A$ = "Q" THEN RETURN
12050 U = 0
12060 IF A$ = MID$ (U$(U),SB,2) THEN 12100
12070 U = U + 1: IF U < = UT THEN 12060
12080 GOSUB 52000: GOTO 12000
12100 GOSUB 60000
12110 INPUT A$: IF A$ = "Q" THEN 12000
12120 A = VAL (A$): IF A > 0 AND A < 4 THEN 12140
12130 GOSUB 52000: GOTO 12100
12140 ON A GOTO 20100,20200,20900
13000 GOSUB 12000
13010 RETURN
14000 REM EXPLAIN PROCESS
14100 TEXT : HOME
14110 HTAB 10: INVERSE : PRINT "SHIPYARD OVER VIEW": NORMAL
14120 PRINT : PRINT "1. CHOSE SIDES AND TIME PERIOD."
14130 PRINT : PRINT "2. PICK THE # OF SHIPS OF EACH TYPE."
14140 PRINT : PRINT "3. CHOSE THE CLASS OF ESCORTS AND SUBS."
14142 PRINT : PRINT "4. PLACE THE SHIPS ON THE MAP."
14150 PRINT : PRINT "5. SAVE THE FLEETS YOU'VE JUST CREATED."
14160 PRINT : PRINT "HIT 'RETURN' TO BEGIN";: INPUT A$: RETURN
15000 REM PREPAR FOR DIM ARRAYS
15010 HOME
15100 PRINT "THE COMPUTER NEEDS YOU TO CHOSE THE # OF SHIPS OF EACH OF THE 4 TYPES.": PRINT
15110 PRINT : PRINT "HIT 'RETURN' TO CONTINUE ";: INPUT A$
15120 RETURN
19000 HOME : REM RUN P0 **
19100 & RUN "P0"
20100 PRINT "ENTER NEW X CO-ORDINATE ";: INPUT A$: REM NEW X
20110 X = VAL (A$): IF X > - 20000 AND X < 20000 THEN 20130
20120 PRINT "X MUST BE FROM -19000 TO 19000": GOSUB 52000: GOTO 20100
20130 UX(U) = X:XN(U) = X: GOTO 12100
20200 PRINT "ENTER NEW Y CO-ORDINATE ";: INPUT A$: REM NEW Y
20210 Y = VAL (A$): IF Y > - 20000 AND Y < 20000 THEN 20230
20220 PRINT "Y MUST BE FROM -19000 TO 19000": GOSUB 52000: GOTO 20200
20230 UY(U) = Y:YN(U) = Y: GOTO 12100
20900 HOME : VTAB 5: HTAB 15: INVERSE : FLASH : PRINT " WARNING ! ": NORMAL
20902 VTAB 10: PRINT "THIS IS A VERY POWERFULL OPTION. IT ALLOWS YOU TO CHANGE ANY FIELD IN THE SHIP DESCRIPTION STRING. WHICH MEANS YOUCAN MAKE MISTAKES THAT WILL CAUSE THE GAME TO 'BLOW UP' AT A LATER TIME."
20904 VTAB 18: INVERSE : FLASH : PRINT "SSI WILL NOT BE RESPONSIBLE FOR RESULTS IF YOU USE THIS OPTION": NORMAL
20906 VTAB 23: PRINT "HIT 'RETURN' OR (Q)UIT ";: INPUT A$: IF A$ = "Q" THEN 12100
20907 GOSUB 60000
20908 VTAB 22: HTAB 1: PRINT "ENTER POSITION OF FIELD ";
20910 PRINT " ";: HTAB 25: INPUT A$: IF A$ = "Q" THEN 12100
20920 A = VAL (A$): IF A > 1 AND A < S9 THEN 20940
20930 PRINT "# MUST BE 2-51": GOSUB 52000: GOTO 12100
20940 PRINT "ENTER # OF CHARACTERS TO BE CHANGED ";: INPUT A$: IF A$ = "Q" THEN 12100
20950 B = VAL (A$): IF B > 0 AND B < 4 THEN 20970
20960 PRINT "BIGGEST FIELD = 3": GOSUB 52000: GOTO 12100
20970 IF A + B > S9 THEN PRINT "FIRST & LAST CHARACTERS NOT CHANGEABLE": GOTO 20930
20972 PRINT "ENTER NEW FIELD ";: INPUT A$: IF A$ = "Q" THEN 12100
20980 U$ = LEFT$ (U$,A - 1) + RIGHT$ (A$,B) + RIGHT$ (U$,S9 - A - B + 1)
20990 U$(U) = U$: GOTO 12100
22000 TEXT : HOME :B = 1:U = 0: REM CLASS **
22100 INVERSE : VTAB 10: HTAB 9: PRINT "ESCORT SELECTION PHASE": NORMAL : PRINT : PRINT "CHOSE ESCORT E";B;" FROM BELOW"
22110 IF NS$ = "A" THEN N = 7: GOTO 22150
22120 IF NS$ = "B" THEN N = 18: GOTO 22300
22130 IF NS$ = "G" THEN N = 22: GOTO 22400
22140 IF NS$ = "J" THEN N = 31: GOTO 22500
22145 STOP
22150 PRINT : PRINT " 1. BENSON": PRINT " 2. FLETCHER": PRINT " 3. FLUSH DECK": PRINT " 4. BUCKLEY": PRINT " 5. EDSALL": PRINT " 6. SUB CHASER": PRINT " 7. FRIGATE"
22160 PRINT : PRINT "WHICH ";: INPUT A$
22170 A = VAL (A$): IF A > 0 AND A < 8 THEN 22190
22180 PRINT "ONLY 1 THRU 7 ALLOWED": GOSUB 52000: HOME : GOTO 22100
22190 U$ = S$(A - 1):I = VAL ( MID$ (U$,SC,1)):J = VAL (TP$): IF J > = I THEN 22200
22192 GOSUB 52100: HOME : GOTO 22100
22200 GOSUB 53100
22210 U$(U) = U$:U = U + 1:B = B + 1: IF B < = E THEN HOME : GOTO 22100
22220 GOTO 22600
22300 PRINT : PRINT " 1. TRIBAL": PRINT " 2. BATTLE": PRINT " 3. BLACK SWAN": PRINT " 4. FLOWER": PRINT " 5. RIVER": PRINT " 6. LOCH"
22310 PRINT : PRINT "WHICH ";: INPUT A$
22320 A = VAL (A$): IF A > 0 AND A < 7 THEN 22340
22330 PRINT "ONLY 1 THRU 6 ALLOWED": GOSUB 52000: HOME : GOTO 22100
22340 U$ = S$(A - 1 + 12):I = VAL ( MID$ (U$,SC,1)):J = VAL (TP$): IF J > = I THEN 22350
22342 GOSUB 52100: HOME : GOTO 22100
22350 GOSUB 53100
22360 U$(U) = U$:U = U + 1:B = B + 1: IF B < = E THEN HOME : GOTO 22100
22370 GOTO 22600
22400 VTAB 12: PRINT "GERMAN ESCORTS ARE ALL CLASS = Z-23"
22402 PRINT "THE COMPUTER WILL FILL THEM IN FOR YOU"
22410 FOR I = 0 TO 1000: NEXT
22420 U$ = S$(21): GOSUB 53100
22430 U$(U) = U$:U = U + 1:B = B + 1: IF B < = E THEN 22420
22440 PRINT : PRINT "HIT 'RETURN' WHEN READY ";: INPUT A$: GOTO 22600
22500 PRINT : PRINT " 1. AKITSUKI": PRINT " 2. HATSUHARU": PRINT " 3. KAMIKAZE": PRINT " 4. MATSU"
22510 PRINT : PRINT "WHICH ";: INPUT A$
22520 A = VAL (A$): IF A > 0 AND A < 5 THEN 22540
22530 PRINT "ONLY 1 THRU 4 ALLOWED": GOSUB 52000: HOME : GOTO 22100
22540 U$ = S$(A - 1 + 27):I = VAL ( MID$ (U$,SC,1)):J = VAL (TP$): IF J > = I THEN 22550
22542 GOSUB 52100: HOME : GOTO 22100
22550 GOSUB 53100
22560 U$(U) = U$:U = U + 1:B = B + 1: IF B < = E THEN HOME : GOTO 22100
22600 HOME : VTAB 10: PRINT "THE COMPUTER IS PUTTING YOUR TANKERS AND FREIGHTERS IN FOR YOU"
22610 FOR I = 1 TO 1000: NEXT
22620 B = 1
22630 U$ = S$(N): GOSUB 53100:I = SH: GOSUB 53000
22640 U$(U) = U$:U = U + 1:B = B + 1: IF B < = T THEN GOTO 22630
22650 B = 1: IF T = 0 THEN UX(U - 1) = 69000:T = 1
22660 U$ = S$(N + 1): GOSUB 53100:I = SH: GOSUB 53000
22670 U$(U) = U$:U = U + 1:B = B + 1: IF B < = F THEN GOTO 22660
22672 IF F = 0 THEN UX(U - 1) = 69000:F = 1
22680 PRINT : PRINT "HIT 'RETURN' WHEN READY ";: INPUT A$
22700 B = 1
22702 HOME : VTAB 10: HTAB 9: INVERSE : PRINT "SUBMARINE SELECTION PHASE": NORMAL : PRINT : PRINT "CHOSE SUB S";B;" FROM BELOW"
22704 IF NU$ = "A" THEN 22750
22710 IF NU$ = "B" THEN 22900
22720 IF NU$ = "G" THEN 23000
22730 IF NU$ = "J" THEN 23300
22735 STOP
22750 PRINT : PRINT " 1. SARGO": PRINT " 2. GATO": PRINT " 3. TENCH"
22760 PRINT : PRINT "WHICH ";: INPUT A$
22770 A = VAL (A$): IF A > 0 AND A < 4 THEN 22790
22780 PRINT "ONLY 1 THRU 3 ALLOWED": GOSUB 52000: HOME : GOTO 22702
22790 U$ = S$(A - 1 + 9):I = VAL ( MID$ (U$,SC,1)):J = VAL (TP$): IF J > = I THEN 22798
22792 GOSUB 52100: HOME : GOTO 22702
22798 GOSUB 53200
22800 U$(U) = U$:U = U + 1:B = B + 1: IF B < = S THEN 22702
22810 RETURN
22900 VTAB 12: PRINT "BRITISH SUBS ARE ALL CLASS = S-CLASS"
22910 PRINT "THE COMPUTER WILL FILL THEM IN FOR YOU": FOR I = 0 TO 1000: NEXT
22920 U$ = S$(20): GOSUB 53200
22930 U$(U) = U$:U = U + 1:B = B + 1: IF B < = S THEN 22920
22940 PRINT : PRINT "HIT 'RETURN' WHEN READY ";: INPUT A$: RETURN
23000 PRINT : PRINT " 1. VII C": PRINT " 2. IX C": PRINT " 3. XXI"
23010 PRINT : PRINT "WHICH ";: INPUT A$
23020 A = VAL (A$): IF A > 0 AND A < 4 THEN 23040
23030 PRINT "ONLY 1 THRU 3 ALLOWED": GOSUB 52000: GOTO 22702
23040 U$ = S$(A - 1 + 24):I = VAL ( MID$ (U$,SC,1)):J = VAL (TP$): IF J > = I THEN 23048
23042 GOSUB 52100: HOME : GOTO 22702
23048 GOSUB 53200
2573 ZU$(U) = U$:U = U + 1:B = B + 1: IF B < = S THEN 22702
23060 RETURN
23300 PRINT : PRINT " 1. RO 35": PRINT " 2. RO 100": PRINT " 3. I 15": PRINT " 4. I 16": PRINT " 5. I 176"
23310 PRINT : PRINT "WHICH ";: INPUT A$
23320 A = VAL (A$): IF A > 0 AND A < 6 THEN 23340
23330 PRINT "ONLY 1 THRU 5 ALLOWED": GOSUB 52000: GOTO 22702
23340 U$ = S$(A - 1 + 33):I = VAL ( MID$ (U$,SC,1)):J = VAL (TP$): IF J > = I THEN 23348
23342 GOSUB 52100: HOME : GOTO 22702
23348 GOSUB 53200
23350 U$(U) = U$:U = U + 1:B = B + 1: IF B < = S THEN 22702
23360 RETURN
30000 TEXT : HOME :U$ = U$(U): REM MAIN MENU **
30020 N$ = MID$ (U$,SD,1)
30100 HTAB 15: INVERSE : PRINT "SHIPYARD MENU": NORMAL
30110 PRINT "NATION IS ";: IF N$ = "A" THEN PRINT "AMERICAN";: GOTO 30200
30120 IF N$ = "B" THEN PRINT "BRITISH";: GOTO 30200
30130 IF N$ = "G" THEN PRINT "GERMANY";: GOTO 30200
30140 IF N$ = "J" THEN PRINT "JAPAN";: GOTO 30200
30150 IF N$ = "N" THEN PRINT "NONE";: GOTO 30200
30160 FLASH : PRINT "DANGER - NATION FIELD (5) BAD": NORMAL
30200 VTAB 3: HTAB 1: PRINT "TIME PERIOD IS ";: IF TP$ = "1" THEN PRINT "1939 - 1941": GOTO 30300
30210 IF TP$ = "2" THEN PRINT "1942 - 1943 ": GOTO 30300
30220 IF TP$ = "3" THEN PRINT "1944 - 1945 ": GOTO 30300
30230 IF TP$ = "0" THEN PRINT "NONE": GOTO 30300
30240 STOP REM OVE THIS IF OK !!!!!!!!!
30300 VTAB 4: HTAB 1: PRINT " 1 2 3 4"
30310 VTAB 5: HTAB 1: PRINT "1234567890123456789012345678901234567890"
30320 VTAB 6: HTAB 1: PRINT LEFT$ (U$,40)
30330 VTAB 8: HTAB 1: PRINT " 5 6"
30340 VTAB 9: HTAB 1: PRINT "12345678901234567890"
30350 VTAB 10: HTAB 1: PRINT RIGHT$ (U$,S9 - 40)
30360 RETURN
40000 HOME : REM READ OLD SCENARIO **
40020 VTAB 2: PRINT "PLEASE INSERT THE DISC THAT HAS YOUR OLD SCENARIO"
40030 PRINT : PRINT "HIT 'RETURN' WHEN READY ";: INPUT A$
40040 PRINT : PRINT "ENTER SCENARIO NAME ";: INPUT A$
40100 PRINT : & READ A$
47143 NOTRACE INPUT SA: INPUT SB: INPUT SC: INPUT SD: INPUT SE: INPUT SF: INPUT SG
40130 INPUT SH: INPUT SI: INPUT SJ: INPUT SK: INPUT SL: INPUT SM: INPUT SN: INPUT SO
40140 INPUT SP: INPUT SQ: INPUT SR: INPUT SS: INPUT ST: INPUT SU: INPUT SV: INPUT SW
40150 INPUT SX: INPUT SY: INPUT SZ: INPUT SA%: INPUT SB%: INPUT SC%: INPUT SD%: INPUT SE%: INPUT SF%: INPUT S9
40160 INPUT UT: INPUT E: INPUT T: INPUT F: INPUT S
40170 FOR I = 0 TO UT: INPUT U$(I): NEXT
40180 FOR I = 0 TO UT: INPUT UX(I): NEXT
40190 FOR I = 0 TO UT: INPUT UY(I): NEXT
40200 INPUT B$:NS$ = LEFT$ (B$,1):NU$ = MID$ (B$,2,1):TP$ = RIGHT$ (B$,1)
40300 & END
40310 PRINT : PRINT "PLEASE REMOVE YOUR DISC AND INSERT THE GAME DISC."
40320 PRINT : PRINT "HIT 'RETURN' WHEN READY. ";: INPUT A$
40500 GOTO 10200
50000 TEXT : HOME : REM WRITE SCENARIO **
50005 & RECALL "SSI INIT"
50007 GOSUB 61000
50008 IF B$ = "Y" THEN 50040
50010 PRINT : PRINT "PLEASE REMOVE THE GAME DISC AND INSERT AN SSI-SAVE-GAME DISC"
50020 PRINT : PRINT "HIT 'RETURN' WHEN READY ";: INPUT A$
50040 INVERSE : PRINT : HTAB 11: PRINT " DON'T FORGET! "
50050 PRINT " DISC MUST NOT BE WRITE PROTECTED! "
50060 PRINT " THERE MUST BE 10 SECTORS AVAILABLE! ": NORMAL
50062 PRINT : & C AT
50070 PRINT : PRINT "PLEASE ENTER THE NAME FOR THIS SCENARIO."
38954 SPC( VTAB 24: PRINT : HTAB 15: INVERSE : PRINT " ";
50080 HTAB 15: INPUT A$: NORMAL
50090 ONERR GOTO 50200
50100 & DEL A$
50200 POKE 216,0: & DEF A$,10
50210 & PRINT A$
50212 PRINT SA: PRINT SB: PRINT SC: PRINT SD: PRINT SE: PRINT SF: PRINT SG
50214 PRINT SH: PRINT SI: PRINT SJ: PRINT SK: PRINT SL: PRINT SM: PRINT SN: PRINT SO
50216 PRINT SP: PRINT SQ: PRINT SR: PRINT SS: PRINT ST: PRINT SU: PRINT SV: PRINT SW
50218 PRINT SX: PRINT SY: PRINT SZ: PRINT SA%: PRINT SB%: PRINT SC%: PRINT SD%: PRINT SE%: PRINT SF%: PRINT S9
50220 PRINT UT: PRINT E: PRINT T: PRINT F: PRINT S
50230 FOR I = 0 TO UT: PRINT U$(I): NEXT
50240 FOR I = 0 TO UT: PRINT UX(I): NEXT
50250 FOR I = 0 TO UT: PRINT UY(I): NEXT
50260 B$ = NS$ + NU$ + TP$: PRINT B$
50300 & END
50302 PRINT : & C AT
50310 PRINT : PRINT "PLEASE REMOVE THE SSI-SAVE-GAME DISC AND INSERT THE GAME DISC."
50320 PRINT : PRINT "HIT 'RETURN' WHEN READY. ";: INPUT A$
50400 GOTO 10400
51000 A$ = "TF-SHIPS": REM READ INIT DATA **
45100 STEP PRINT : & READ A$
51200 INPUT SA: INPUT SB: INPUT SC: INPUT SD: INPUT SE: INPUT SF: INPUT SG
51202 INPUT SH: INPUT SI: INPUT SJ: INPUT SK: INPUT SL: INPUT SM: INPUT SN: INPUT SO
51204 INPUT SP: INPUT SQ: INPUT SR: INPUT SS: INPUT ST: INPUT SU: INPUT SV: INPUT SW
51206 INPUT SX: INPUT SY: INPUT SZ: INPUT SA%: INPUT SB%: INPUT SC%: INPUT SD%: INPUT SE%: INPUT SF%: INPUT S9
2573 + INPUT TS
51220 DIM S$(TS)
51230 FOR I = 0 TO TS: INPUT S$(I): NEXT
51300 & END
51310 RETURN
52000 INVERSE : FLASH : PRINT : PRINT "ILLEGAL ENTRY"
52010 FOR I = 1 TO 3000: NEXT
13357 / NORMAL : RETURN
52100 PRINT "NOT AVAILABLE YET": GOSUB 52000: RETURN
53000 REM FIX STRING USING U$,I,J **
53010 U$ = LEFT$ (U$,I - 1) + A$ + RIGHT$ (U$,S9 - I - J + 1)
53020 RETURN
53100 REM FIX ESCORT STRINGS **
53110 A$ = STR$ (B):I = SB + 1:J = 1: GOSUB 53000
53120 A$ = CS$:I = SI:J = 2: GOSUB 53000
53130 RETURN
53200 REM FIX STRINGS FOR SUBS **
53210 A$ = STR$ (B):I = SB + 1:J = 1: GOSUB 53000
53220 A$ = "05":I = SK:J = 2: GOSUB 53000
53230 RETURN
60000 GOSUB 30000: REM PRINT MODIFY DATA/MENU **
60020 U$ = U$(U)
60030 VTAB 13: HTAB 1: PRINT "ID="; MID$ (U$,SB,2);
60120 VTAB 14: HTAB 10: PRINT "1. X=";UX(U);: HTAB 25: PRINT "2. Y=";UY(U)
60160 VTAB 16: HTAB 10: PRINT "3. OTHER"
60500 VTAB 22: HTAB 1: PRINT "ENTER # OF FIELD TO CHANGE (Q=EXIT) ";
60510 RETURN
61000 REM RDOS-STUFF
61002 PRINT
61010 PRINT "DO YOU WISH TO INITIALIZE A BLANK DISC FOR SAVING SSI GAMES? ENTER (Y) IF 'YES'";: INPUT B$
61020 IF B$ < > "Y" THEN 61100
61022 PRINT : PRINT "PLEASE INSERT A SCRATCH DISC.": PRINT "HIT 'RETURN' WHEN READY TO INITIALIZE ";: INPUT AA$
61030 FLASH : PRINT "INITIALIZING...": NORMAL : CALL 20480: IF NOT PEEK (0) GOTO 61100
61040 PRINT : PRINT "ERROR !!!": PRINT : GOTO 61000
61100 RETURN
63000 REM AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
63001 PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
REM PROG = P2
4 I = FRE (0):BL$ = " "
5 IF F0 = 1 THEN POKE - 16301,0:F0 = 0: GOTO 10000
6 IF QP% < > 0 THEN 30
2573
17487 E%(15),X%(15),Y%(15),SCALE%(15),XROT%(15),YROT%(15),ZROT%(15),SX%(15),SY%(15)
20 RESET% = 7932:CLR% = 7951:HIRES% = 7983:CRNCH% = 7737
30 & RECALL "MODULE.TWO.D"
50 CALL RESET%
69 PI = 3.14159
70 GOTO 92
71 UU = NE% - 1: REM RESET FSG FLAG **
72 FOR U = 0 TO UU
74 U$(U) = LEFT$ (U$(U),SJ - 1) + "N" + RIGHT$ (U$(U),S9 - SJ)
76 NEXT
78 RETURN
92 BL$ = " "
100 IF QP% < > 0 THEN TEXT : GOTO 9000
680 TEXT : HOME : PRINT "READING DATA"
700 A$ = "INTRO-GAME"
710 & READ A$
730 INPUT SA: INPUT SB: INPUT SC: INPUT SD: INPUT SE: INPUT SF: INPUT SG
740 INPUT SH: INPUT SI: INPUT SJ: INPUT SK: INPUT SL: INPUT SM: INPUT SN: INPUT SO
750 INPUT SP: INPUT SQ: INPUT SR: INPUT SS: INPUT ST: INPUT SU: INPUT SV: INPUT SW
760 INPUT SX: INPUT SY: INPUT SZ: INPUT SA%: INPUT SB%: INPUT SC%: INPUT SD%: INPUT SE%: INPUT SF%: INPUT S9
770 INPUT UT: INPUT NE%: INPUT NT%: INPUT NF%: INPUT NS%
780 FOR I = 0 TO UT: INPUT U$(I): NEXT
790 FOR I = 0 TO UT: INPUT UX(I): NEXT
800 FOR I = 0 TO UT: INPUT UY(I): NEXT
810 INPUT B$
890 & END
900 UE% = 0:UT% = 2:UF% = 3:US% = 5:CO% = NE% + NS%
910 FOR I = 0 TO UT
920 U$ = U$(I):U$ = LEFT$ (U$,SQ - 1) + "D" + RIGHT$ (U$,S9 - SQ):U$(I) = U$
922 A = LEN (U$): IF A < > S9 THEN STOP
930 NEXT
940 U$(5) = LEFT$ (U$(5),SQ - 1) + "S" + RIGHT$ (U$(5),S9 - SQ)
960 GOSUB 71
999 GOTO 9000
1000 TEXT : HOME : PRINT "X = ";: INPUT A$: IF A$ = "" THEN 1050: REM MAP **
1002 IF A$ = "Q" THEN RETURN
1010 AX = VAL (A$): PRINT "Y = ";: INPUT A$:AY = VAL (A$): IF A$ = "Q" THEN 1000
1020 IF AX < - 20000 OR AX > 20000 OR AY < - 20000 OR AY > 20000 THEN 1040
1030 GOTO 1050
1040 PRINT "X & Y MUST BE FROM -20000 TO 20000": GOSUB 52000: GOTO 1000
1050 PRINT "SCALE = ";: INPUT A$: IF A$ = "Q" THEN 1000
1060 IF A$ = "A" THEN AS = 100:AC = 0: GOTO 1110
1070 IF A$ = "B" THEN AS = 50:AC = 2: GOTO 1110
1080 IF A$ = "C" THEN AS = 25:AC = 2: GOTO 1110
1090 IF A$ = "D" THEN AS = 10:AC = 2: GOTO 1110
1092 IF A$ = "E" THEN AS = 5:AC = 3: GOTO 1110
1094 IF A$ = "F" THEN AS = 10:AC = 6: GOTO 1110
1100 PRINT "SCALES ARE 'A B C D E F'": GOSUB 52000: GOTO 1050
1110 CX = AX / AS:CY = AY / AS
1112 PRINT "(O)RIGINAL OR (N)EW POSITIONS";: INPUT B$: IF B$ = "Q" THEN 1000
1114 IF B$ = "O" OR B$ = "N" THEN 1120
1116 PRINT "ONLY 'O N' ALLOWED": GOSUB 52000: GOTO 1112
1120 FM% = 1: CALL CLR%: HGR : HCOLOR= 2: HPLOT 0,0 TO 0,0: CALL 62454: HCOLOR= 3: HPLOT 10,11 TO 261,11 TO 261,159 TO 11,159 TO 11,11
1126 HCOLOR= 0: FOR I = 10 TO 170 STEP 20: HPLOT 12,I TO 260,I: NEXT
1128 FOR I = 16 TO 260 STEP 20: HPLOT I,10 TO I,170: NEXT
1130 HPLOT 131,85 TO 141,95: HPLOT 141,85 TO 131,95
1140 FOR I = 160 TO 191: HPLOT 0,I TO 279,I: NEXT
1142 POKE 512,216: POKE 513,160: POKE 514,0: POKE 515,76: POKE 516,44: POKE 517,254: POKE 60,0: POKE 61,32: POKE 62,255: POKE 63,63: POKE 66,0: POKE 67,64: CALL 512
1144 POKE - 16302,0
1150 CALL CRNCH%: CALL CRNCH%
1152 GOSUB 2000
1160 FOR U = 0 TO UT
1170 X0 = UX(U):Y0 = UY(U):Z = VAL ( MID$ (U$(U),SN,3)): IF B$ = "O" THEN 1180
1174 X0 = XN(U):Y0 = YN(U):Z = VAL ( MID$ (UN$(U),4,3))
1180 GOSUB 8000
1190 NEXT
1192 IF LEFT$ (FU$,1) = "S" THEN X0 = FX%:Y0 = FY%:Z = FZ%:S = 3: GOSUB 8010
1200 POKE - 16301,0: RETURN
1252 VTAB 24: PRINT : PRINT "ENTER 'V' FOR VICTORY POINTS ";: INPUT A$: IF A$ < > "V" THEN RETURN
2000 AB = TI% - 1: IF TI% = 0 THEN RETURN : REM DISPLAY TORPS
2010 FOR I = 0 TO AB
2020 X = TX(I) / AS:X = X + 136 - CX: IF X < 10 OR X > 245 THEN 2050
2030 Y = TY(I) / AS:Y = 90 - Y + CY: IF Y < 11 OR Y > 170 THEN 2050
2040 HCOLOR= 5: HPLOT X + 3,Y TO X - 3,Y: HPLOT X,Y TO X,Y + 5
2042 HPLOT X + 3,Y + 1 TO X - 3,Y + 1: HPLOT X + 1,Y TO X + 1,Y + 5
2050 NEXT
2060 RETURN
8000 S = VAL ( LEFT$ (U$(U),1)): IF MID$ (U$(U),SQ,1) = "X" AND U > = US% THEN RETURN
8010 X = X0 / AS:X = X + 136 - CX: IF X < 10 OR X > 245 THEN 8080
8030 Y = Y0 / AS:Y = 90 - Y + CY: IF Y < 11 OR Y > 170 THEN 8080
8050 X%(S) = X:Y%(S) = Y:CODE%(S) = 1:SCALE%(S) = AC:ZROT%(S) = ABS ((Z / 13.3333) - 28): POKE - 16302,0: CALL CRNCH%: CALL CRNCH%
8080 X%(S) = 0:Y%(S) = 0:CODE%(S) = 0:SCALE%(S) = 0:ZROT%(S) = 0
8090 POKE - 16301,0: RETURN
9000 FOR U = 0 TO UT: REM INIT UN$ **
9010 U$ = U$(U):UN$(U) = LEFT$ (U$,1) + MID$ (U$,SI,2) + MID$ (U$,SN,3)
9011 IF U < US% THEN 9020
9012 IF MID$ (U$,SM,3) < > "000" THEN UN$(U) = LEFT$ (U$,1) + MID$ (U$,SK,2) + MID$ (U$,SN,3)
9020 XN(U) = UX(U):YN(U) = UY(U)
9030 NEXT
9040 GOSUB 53000
9050 FOR I = 0 TO 9:SX(I) = 0:SY(I) = 0: NEXT :UU = US%
9052 FOR U = UU TO UT
9054 L0 = 200 * ( RND (1) + .5): IF RND (1) > .5 THEN L0 = - L0
9056 J = U - US%:SX(J) = INT ((UX(U) + L0) / 100) * 100:SY(J) = INT ((UY(U) + L0) / 100) * 100
9058 NEXT
9060 J = NE% - 1
9070 FOR I = 0 TO J:U$(I) = LEFT$ (U$(I),SJ - 1) + "N" + RIGHT$ (U$(I),S9 - SJ): NEXT
10000 HOME : VTAB 24:I = FRE (0)
10110 PRINT "(M)AP (S)TATUS (O)RDERS (GA)ME OVER": PRINT "(E)ND THIS TURN ";: INPUT A$
10150 IF A$ = "S" THEN FM% = 0: GOSUB 12000: GOSUB 12510: VTAB 22: GOTO 10110
10200 IF A$ = "M" THEN GOSUB 1000: GOTO 10000
10300 IF A$ = "O" THEN GOSUB 20000: GOTO 10000
10400 IF A$ = "E" THEN FM% = 0: GOTO 19000
10410 IF A$ = "GA" THEN 19500
10500 PRINT : PRINT "ONLY 'M S O GA' ARE ALLOWED": GOSUB 52000: GOTO 10000
12000 VTAB 24: PRINT "ENTER SHIP ID FOR STATUS ";: INPUT A$:U = 0: IF A$ = "Q" THEN RETURN
12130 IF MID$ (U$(U),SB,2) = A$ AND UX(U) < > 69000 THEN 12190
12140 U = U + 1: IF U < US% THEN 12130
12150 PRINT : PRINT "NO SUCH SHIP": GOSUB 52000: GOTO 12000
12190 U$ = U$(U): TEXT
12200 HOME : HTAB 15: INVERSE : PRINT " STATUS REPORT ": NORMAL
12210 VTAB 3: HTAB 1: PRINT "SHIP MAP-POSITION DAMAGE PTS"
12220 VTAB 4: HTAB 2: PRINT "ID";: HTAB 6: PRINT "X";:: HTAB 13: PRINT "Y";: HTAB 19: PRINT "KN DIR START NOW TURN"
12230 VTAB 5: PRINT " "; MID$ (U$,SB,2);: HTAB 6: PRINT INT (UX(U));: HTAB 13: PRINT INT (UY(U));: HTAB 19: PRINT MID$ (U$,SI,2);: HTAB 22: PRINT MID$ (U$,SN,3);
12232 HTAB 29: PRINT MID$ (U$,SU,2);: HTAB 33: PRINT MID$ (U$,SV,2);: HTAB 38: PRINT QP%
12240 PRINT : PRINT "SHIP MAX"
12242 PRINT "CLASS KN"
12244 HTAB 2: PRINT MID$ (U$,SE,2);" "; MID$ (U$,SH,2)
12300 VTAB 10: HTAB 10: INVERSE : PRINT " SUB(S) SPOTTED ": NORMAL
12310 PRINT "X Y DEPTH BY"
12320 UU = US%:J = 0
12330 FOR I = UU TO UT
12332 IF UX(I) = 69000 THEN 12410
12340 IF MID$ (U$(I),SQ,1) = "X" THEN 12410
12342 X = SX(I - US%):Y = SY(I - US%)
12350 PRINT X;: HTAB 10: PRINT Y;
12360 HTAB 20:P = VAL ( MID$ (U$(I),SM,3)): IF P = 0 THEN PRINT "SURFACE";:J = 1: GOTO 12390
12370 IF P > 30 THEN PRINT "U/W";:J = 1: GOTO 12390
12372 IF MID$ (U$(I),SQ,1) = "S" THEN PRINT "U/W";:J = 1: GOTO 12390
12380 PRINT "PERISCOPE";:J = 1
12390 HTAB 30:C$ = MID$ (U$(I),SQ,1): IF C$ = "D" OR C$ = "N" THEN PRINT "VISUAL": GOTO 12410
12392 IF C$ = "R" THEN PRINT "RADAR": GOTO 12410
12394 IF C$ = "S" THEN PRINT "SONAR"
12399 IF C$ < > "S" THEN STOP
12410 NEXT
12420 IF LEFT$ (FU$,1) < > "S" THEN 12490
12430 PRINT FX%;: HTAB 10: PRINT FY%;:J = 1
12440 HTAB 20: IF FU$ = "SR" THEN PRINT "SURFACE";: HTAB 30: PRINT "RADAR"
12450 IF FU$ = "SS" THEN PRINT "U/W";: HTAB 30: PRINT "SONAR"
12490 IF J = 0 THEN PRINT "NO SUBS SPOTTED"
12500 PRINT :: PRINT : IF U < NE% THEN GOSUB 23120: GOTO 12504
12502 AB = U:U = CO%: GOSUB 23120:U = AB
12504 RETURN
12510 IF QS% < > 69 THEN RETURN
12520 PRINT : PRINT "ENTER 'V' FOR VICTORY POINTS ";: INPUT A$: IF A$ < > "V" THEN RETURN
12530 PRINT "SURFACE = ";VS%;" SUB = ";VU%
12540 PRINT : PRINT "HIT 'RETURN' TO CONTINUE ";: INPUT A$: RETURN
12900 FOR I = 20 TO 24: VTAB I: HTAB 1: PRINT BL$;: NEXT
12910 VTAB 21: HTAB 1: RETURN
19000 REM CHAIN **
19010 TEXT : HOME :I = FRE (0)
19100 VTAB 12: HTAB 4: INVERSE : PRINT " LOADING COMPUTER ACTIVITY PHASE ": NORMAL
19200 & GOTO "P4"
19500 TEXT : HOME
19510 VTAB 12: HTAB 10: INVERSE : PRINT " LOADING FINAL PHASE ": NORMAL
19520 & GOTO "PGA"
20000 HOME : VTAB 24: PRINT "ENTER ID OF SHIP TO BE GIVEN ORDERS ": PRINT "('Q' = QUIT) ";: INPUT A$: IF A$ = "Q" THEN RETURN
20020 IF A$ = "C" THEN GOTO 20100
20030 U = 0
20040 IF MID$ (U$(U),SB,2) = A$ AND UX(U) < > 69000 THEN U$ = U$(U): GOTO 21000
20050 U = U + 1: IF U < UT% THEN 20040
20060 PRINT : PRINT "YOU CAN'T GIVE ORDERS TO THAT SHIP!": GOSUB 52000: GOTO 20000
20100 IF QP% < CT% THEN PRINT "NO CONVOY ORDER UNTILL TURN ";CT%: GOSUB 52000: GOTO 20000
20110 PRINT : PRINT : PRINT : PRINT "MOVE ORDERS =";MO$(CO%): PRINT "ENTER MOVEMENT ORDER (SEC. 4.1) ";: INPUT A$: IF A$ = "Q" THEN 20000
20122 A = LEN (A$):B$ = LEFT$ (A$,3): IF A < > 5 THEN PRINT : PRINT "BAD FORMAT": GOSUB 52000: GOTO 20100
20124 MO$(CO%) = ""
20130 IF B$ = "MDP" OR B$ = "MDS" THEN 20400
20140 IF B$ = "MDC" THEN MO$(CO%) = "MDC60": GOTO 20500
20150 IF LEFT$ (A$,2) = "MC" THEN 20300
20160 A$ = A$ + A$: GOTO 20122
20300 C$ = A$:M$ = A$:B$ = "":D$ = "":U$ = U$(UT%):UN$ = LEFT$ (UN$(UT%),3) + MID$ (U$(UT%),SN,3): GOSUB 28000
20310 MO$(CO%) = LEFT$ (M$,5):A = LEN (M$): IF A = 5 THEN 20500
20320 IF MID$ (M$,6,2) = "MX" THEN MO$(CO%) = LEFT$ (M$,10)
20330 GOTO 20500
20400 GOSUB 29000
20410 I = INT (I / 10):B$ = "00" + STR$ (I):MO$(CO%) = LEFT$ (A$,3) + RIGHT$ (B$,2)
20500 PRINT : PRINT : PRINT : PRINT "TO (E)XECUTE CONVOY ORDER ENTER 'E' ";: INPUT A$: IF A$ < > "E" THEN 20000
20540 IF MO$(CO%) = "" THEN MO$(CO%) = "MDC60"
20542 IF MID$ (MO$(CO%),3,1) = "C" THEN NO$ = "MDC10": GOTO 20560
20550 NO$ = LEFT$ (MO$(CO%),3) + "01"
20560 UU = US% - 1:CU = UT%
20562 FOR U = CU TO UU:XN(U) = UX(U):YN(U) = UY(U): NEXT
20570 FOR U = CU TO UU
20580 TL = 60:UN$ = LEFT$ (UN$(U),3) + MID$ (U$(U),SN,3):UN$(U) = UN$
20590 IF MID$ (UN$(U),2,2) < > "00" THEN GOSUB 40000
20600 TL = TL - I: IF TL > 0 THEN 20590
20610 NEXT
20620 GOTO 20000
21000 GOSUB 23000: PRINT "DO YOU WISH TO ENTER A (M)OVE OR (F)IRE ORDER, (E)XECUTE THESE ORDERS OR (Q)UIT": INPUT A$: IF A$ = "Q" THEN 20000
21030 IF A$ = "M" THEN 21100
21040 IF A$ = "F" THEN 22000
21050 IF A$ = "E" THEN 30000
21070 PRINT "ONLY 'M F E Q' ALLOWED": GOSUB 52000: GOTO 21000
21100 GOSUB 23100: PRINT "(N)EW, (A)DD OR (Q)UIT ";: INPUT A$: IF A$ = "Q" THEN 21000
21140 IF A$ = "N" THEN MO$(U) = "": GOTO 21200
21150 IF A$ = "A" THEN 21200
21160 PRINT "ONLY 'N A Q' ALLOWED": GOSUB 52000: GOTO 21100
21200 GOSUB 23100: PRINT "ENTER MOVEMENT ORDER (SEC. 4.1)";: INPUT A$: IF A$ = "Q" THEN 21000
21222 I = LEN (A$): IF I < > 5 THEN 21250
21230 IF LEFT$ (A$,3) = "MSS" THEN 21260
21240 IF LEFT$ (A$,2) = "MD" THEN 21400
21242 IF LEFT$ (A$,2) = "MC" THEN 21500
21250 PRINT "BAD FORMAT": GOSUB 52000: GOTO 21200
21260 I = VAL ( RIGHT$ (A$,2)): IF I < 0 THEN PRINT "CAN'T GO BACKWARDS": GOSUB 52000: GOTO 21200
21270 J = VAL ( MID$ (U$,SH,2)):K = J / 3: IF I < = J THEN 21280
21274 PRINT : PRINT "CAN'T EXCEED MAX SPEED": GOSUB 52000: GOTO 21200
21280 A = LEN (MO$(U)):B = 1:X = 0
21282 IF MID$ (MO$(U),B,3) = "MSS" THEN X = 1
21284 B = B + 5: IF B < = (A) THEN 21282
21286 IF X < > 0 THEN PRINT "ONLY 1 SPEED CHANGE PER TURN": GOSUB 52000: GOTO 21200
21300 J = VAL ( MID$ (U$,SI,2)): IF ABS (J - I) < = K THEN 21320
21310 PRINT "CAN'T CHANGE SPEED THAT MUCH": GOSUB 52000: GOTO 21200
21320 MO$(U) = MO$(U) + A$: GOTO 21100
21400 IF MID$ (A$,3,1) = "C" THEN 21430
21410 IF MID$ (A$,3,1) = "P" OR MID$ (A$,3,1) = "S" THEN 21450
21420 GOTO 21250
21430 I = VAL ( MID$ (A$,4,2)): IF I > 9 AND I < 61 THEN 21320
21440 PRINT "YOU MUST ENTER 10-60 TIME POINTS": GOSUB 52000: GOTO 21200
21450 I = VAL ( MID$ (A$,4,2)): IF I > 0 AND I < 19 THEN 21320
21460 PRINT "RANGE SHOULD BE 01-18": GOSUB 52000: GOTO 21200
21500 A = VAL ( RIGHT$ (A$,3)): IF A > = 0 AND A < 360 THEN 21320
21530 PRINT "COURSE MUST BE 000 TO 359": GOSUB 52000: GOTO 21200
22000 GOSUB 23100: PRINT "(N)EW, (A)DD OR (Q)UIT ";: INPUT A$: IF A$ = "Q" THEN 21000
22030 IF A$ = "N" THEN FO$(U) = "":FS$(U) = "": GOTO 22100
22040 IF A$ = "A" THEN 22100
22050 PRINT "ONLY 'N A Q' ALLOWED": GOSUB 52000: GOTO 22000
22100 GOSUB 23100: PRINT "ENTER FIRE ORDER (SEC. 4.2) ";: INPUT A$: IF A$ = "Q" THEN 21000
22110 B$ = LEFT$ (A$,3): IF B$ = "FSG" OR B$ = "FSS" THEN 22600
22130 A = LEN (A$): IF A < > 7 THEN 22190
22140 I = VAL ( MID$ (A$,4,1)): IF I < 7 THEN 22160
22150 PRINT "TIME MUST BE 0-6": GOSUB 52000: GOTO 22100
22160 IF B$ = "FDC" THEN 22200
22170 IF B$ = "FKG" THEN 22300
22180 IF B$ = "FAT" THEN 22400
22190 PRINT "BAD FORMAT": GOSUB 52000: GOTO 22100
22200 I = VAL ( RIGHT$ (A$,3)): IF I > 25 THEN 22220
22210 PRINT "ILLEGAL DEPTH SETTING": GOSUB 52000: GOTO 22100
22220 GOTO 22800
22300 I = VAL ( RIGHT$ (A$,3)): IF I > 25 THEN 22800
22310 PRINT "ILLEGAL DEPTH SETTING": GOSUB 52000: GOTO 22100
22400 I = VAL ( RIGHT$ (A$,3)): IF I > 99 AND I < 201 THEN 22800
22410 PRINT "ILLEGAL DISTANCE": GOSUB 52000: GOTO 22100
22600 A = LEN (A$): IF A < > 10 THEN 22190
22610 I = VAL ( MID$ (A$,4,3)): IF I > = 0 AND I < 360 THEN 22630
22620 PRINT "COURSE MUST BE 000 TO 359": GOSUB 52000: GOTO 22100
22630 J = VAL ( RIGHT$ (A$,4)): IF J > 0 THEN 22650
22640 PRINT "DISTANCE MUST BE POSITIVE": GOSUB 52000: GOTO 22100
22650 X = 0:Y = 0:K = NE% + NS%:A = 1:B$ = FS$(U):B = LEN (B$)
22660 IF MID$ (U$,SJ,1) = "Y" THEN X = X + 1
22670 IF MID$ (B$,A,3) = "FSS" THEN Y = Y + 1
22680 A = A + 10: IF A < B THEN 22660
22690 IF LEFT$ (A$,3) = "FSG" AND X > 0 THEN PRINT "ONLY 1 'FSG' ALLOWED (SEE ERRATA)": GOSUB 52000: GOTO 22100
22700 IF LEFT$ (A$,3) = "FSS" AND Y > 1 THEN PRINT "ONLY 2 'FSS'S ALLOWED": GOSUB 52000: GOTO 22100
22710 I = VAL ( MID$ (U$,SW,2)): IF I < 1 THEN PRINT "SHIP DOESN'T HAVE GUNS": GOSUB 52000: GOTO 22100
22712 IF LEFT$ (A$,3) = "FSG" THEN U$ = LEFT$ (U$,SJ - 1) + "Y" + RIGHT$ (U$,S9 - SJ):U$(U) = U$
22720 FS$(U) = FS$(U) + A$: GOTO 22000
22800 X = 0:Y = 0:Z = 0:F$ = FO$(U) + A$:A = LEN (F$):B = 1: REM CHECKDC'S VS FDC'S,ETC **
22810 IF MID$ (F$,B,3) = "FDC" THEN X = X + 1
22820 IF MID$ (F$,B,3) = "FKG" THEN Y = Y + 1
22830 IF MID$ (F$,B,3) = "FAT" THEN Z = Z + 1
22840 B = B + 7: IF B < = (A) THEN 22810
22850 I = VAL ( MID$ (U$,SZ,1)): IF X > I THEN 22900
22860 I = VAL ( MID$ (U$,SY,1)): IF Y > I THEN 22900
22870 I = VAL ( MID$ (U$,SA%,1)): IF Z > I THEN 22900
22880 FO$(U) = F$: GOTO 22000
22900 PRINT LEFT$ (A$,3);" LIMIT = ";I: GOSUB 52000: GOTO 22100
23000 GOSUB 12200: GOSUB 12900: REM DATA LINE **
23010 PRINT MID$ (U$,SB,2);" X="; INT (XN(U));" Y="; INT (YN(U));" KN="; MID$ (UN$(U),2,2);" DIR="; MID$ (UN$(U),4,3)
23020 RETURN
23100 GOSUB 12900: IF U > NE% - 1 THEN RETURN
23110 PRINT MID$ (U$,SB,2);" X="; INT (XN(U));" Y="; INT (YN(U));" KN="; MID$ (UN$(U),2,2);" DIR="; MID$ (UN$(U),4,3)
23120 PRINT "MOVE ORDERS = ";MO$(U): PRINT "FIRE ORDERS = ";FO$(U): IF FS$(U) < > "" THEN PRINT " AND = ";FS$(U)
23130 RETURN
28000 IF LEFT$ (M$,2) < > "MC" THEN RETURN : REM MCNNN **
28012 A = LEN (M$): IF A = 5 THEN M$ = "": GOTO 28020
28014 M$ = RIGHT$ (M$,A - 5)
28020 D0 = VAL ( RIGHT$ (UN$,3)):D = VAL ( MID$ (C$,3,3))
28022 GOTO 28500
28030 GOSUB 29000
28090 K = 0:D$ = ""
28100 K = K + 10: IF K > = I THEN 28130
28110 IF K > = J THEN 28200
28120 GOTO 28100
28130 A = INT (K / 10):B$ = "00" + STR$ (A)
28140 D$ = D$ + "MD" + A$ + RIGHT$ (B$,2):K = 0:J = J - I: IF J = 0 THEN 28252
28142 IF J < 10 THEN A = ABS (J): GOTO 28230
28150 GOTO 28100
28200 A = INT (K / 10):B$ = "00" + STR$ (A)
28210 D$ = D$ + "MD" + A$ + RIGHT$ (B$,2)
28220 A = ABS (K - J): IF A = 0 THEN 28252
28230 B$ = "0" + STR$ (A)
28240 A$ = MID$ (D$,3,1)
28250 D$ = D$ + "MXX" + A$ + RIGHT$ (B$,1)
28252 A = LEN (C$): IF A = 5 THEN C$ = "": GOTO 28260
28254 C$ = RIGHT$ (C$,A - 5)
28260 M$ = D$ + M$: RETURN
28500 IF D0 > D THEN A$ = "P"
28510 IF D0 < D THEN A$ = "S"
28520 J = ABS (D0 - D): IF J < 180 THEN 28030
28530 J = D0 + 360 - D: IF J < = 180 THEN A$ = "P": GOTO 28030
28540 J = D + 360 - D0: IF J < 180 THEN A$ = "S": GOTO 28030
28550 STOP
29000 A = VAL ( MID$ (U$,SG,1)): IF A < 1 OR A > 9 THEN STOP
29010 ON A GOTO 29011,29012,29013,29014,29015,29016,29017,29018,29019
29011 I = 6: GOTO 29020
29012 I = 18: GOTO 29020
29013 I = 30: GOTO 29020
29014 I = 60: GOTO 29020
29015 I = 90: GOTO 29020
29016 I = 120: GOTO 29020
29017 I = 180: GOTO 29020
29018 I = 360: GOTO 29020
29019 I = 720
29020 RETURN
30000 IF FM% = 1 THEN 30020
30010 UU = U: GOSUB 1000:U = UU: GOTO 30000
30020 I = FRE (0): VTAB 24: & GOTO "P2E"
34000 D0 = VAL ( RIGHT$ (UN$,3)):D = VAL ( MID$ (M$,5,1)): REM MXXJN **
34012 IF MID$ (M$,4,1) = "P" THEN 34020
34014 D0 = D0 - D:A$ = "000" + STR$ (D0): GOTO 34030
34020 D0 = D0 + D:A$ = "000" + STR$ (D0)
34030 UN$ = LEFT$ (UN$,3) + RIGHT$ (A$,3)
34040 A = LEN (M$):M$ = RIGHT$ (M$,A - 5)
34050 UN$(U) = UN$: RETURN
40000 UN$ = UN$(U):U$ = U$(U): REM EXECUTE MDXTT **
40010 Z = VAL ( MID$ (UN$,4,3)):K0 = VAL ( MID$ (UN$,2,2))
40020 IF MID$ (NO$,3,1) < > "C" THEN 40100
40030 I = VAL ( MID$ (NO$,4,2)): IF I > 10 THEN STOP
40040 GOTO 40200
40100 IF MID$ (NO$,3,1) < > "P" AND MID$ (NO$,3,1) < > "S" THEN STOP
40110 GOSUB 29000:A = I
40120 J = A / 60:I = 10 / J
40130 Z = Z + 10: IF MID$ (NO$,3,1) = "P" THEN Z = Z - 20
40140 IF Z > 360 THEN Z = Z - 360
54922 NOTRACE IF Z < 0 THEN Z = Z + 360
40200 L0 = K0 * .5555 * I:Z2 = 450 - Z: IF Z2 > = 360 THEN Z2 = Z2 - 360
40210 X0 = XN(U) + L0 * COS (Z2 * PI / 180)
40220 Y0 = YN(U) + L0 * SIN (Z2 * PI / 180)
40230 GOSUB 8000
40300 XN(U) = X0:YN(U) = Y0
40310 A$ = "000" + STR$ (Z)
40330 UN$ = LEFT$ (UN$,3) + RIGHT$ (A$,3)
40340 UN$(U) = UN$: RETURN
52000 INVERSE : FLASH : PRINT : PRINT "ILLEGAL ENTRY"
52010 FOR I = 1 TO 1500: NEXT
52020 NORMAL : RETURN
53000 CALL CLR%: HGR : HCOLOR= 2: HPLOT 0,0 TO 0,0: CALL 62454
53010 FOR I = 0 TO 3:CODE%(I) = 1: NEXT
53012 FOR I = 0 TO 3:SCALE%(I) = 8: NEXT
53020 X%(0) = 90:Y%(0) = 40
53030 X%(1) = 180:Y%(1) = 40
53040 X%(2) = 90:Y%(2) = 110
53050 X%(3) = 180:Y%(3) = 110
53058 J = 7: IF RND (1) > .5 THEN J = 21
53060 FOR I = 0 TO 3:ZROT%(I) = J: NEXT
53100 CALL CRNCH%: CALL CRNCH%
53102 FOR I = 0 TO 3:X%(I) = X%(I) + 1: NEXT : CALL CRNCH%: CALL CRNCH%
53110 POKE - 16301,0
53112 FOR I = 0 TO 3:CODE%(I) = 0: NEXT
53114 IF QS% = 69 THEN RETURN
53120 VTAB 23: HTAB 1: PRINT "ENTER PASSWORD ";: INPUT A$
53130 IF A$ = PS$ THEN RETURN
53140 GOSUB 52000: PRINT : PRINT : PRINT : GOTO 53000
62000 REM AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
62001 REM AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
62002 REM AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
62003 REM AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
REM PROG = P2E
4 I = FRE (0)
30 & RECALL "MODULE.TWO.D"
69 PI = 3.14159
92 BL$ = " "
100 GOTO 30000
1000 TEXT : HOME : PRINT "X = ";: INPUT A$: IF A$ = "" THEN 1050: REM MAP **
1002 IF A$ = "Q" THEN RETURN
1010 AX = VAL (A$): PRINT "Y = ";: INPUT A$:AY = VAL (A$): IF A$ = "Q" THEN 1000
1020 IF AX < - 20000 OR AX > 20000 OR AY < - 20000 OR AY > 20000 THEN 1040
1030 GOTO 1050
1040 PRINT "X & Y MUST BE FROM -20000 TO 20000": GOSUB 52000: GOTO 1000
1050 PRINT "SCALE = ";: INPUT A$: IF A$ = "Q" THEN 1000
1060 IF A$ = "A" THEN AS = 100:AC = 0: GOTO 1110
1070 IF A$ = "B" THEN AS = 50:AC = 2: GOTO 1110
1080 IF A$ = "C" THEN AS = 25:AC = 2: GOTO 1110
1090 IF A$ = "D" THEN AS = 10:AC = 2: GOTO 1110
1092 IF A$ = "E" THEN AS = 5:AC = 3: GOTO 1110
1094 IF A$ = "F" THEN AS = 10:AC = 6: GOTO 1110
1100 PRINT "SCALES ARE 'A B C D E F'": GOSUB 52000: GOTO 1050
1110 CX = AX / AS:CY = AY / AS
1112 PRINT "(O)RIGINAL OR (N)EW POSITIONS";: INPUT B$: IF B$ = "Q" THEN 1000
1114 IF B$ = "O" OR B$ = "N" THEN 1120
1116 PRINT "ONLY 'O N' ALLOWED": GOSUB 52000: GOTO 1112
1120 CALL CLR%: HGR : HCOLOR= 2: HPLOT 0,0 TO 0,0: CALL 62454: HCOLOR= 3: HPLOT 10,11 TO 261,11 TO 261,159 TO 11,159 TO 11,11
1126 HCOLOR= 0: FOR I = 10 TO 170 STEP 20: HPLOT 12,I TO 260,I: NEXT
1128 FOR I = 16 TO 260 STEP 20: HPLOT I,10 TO I,170: NEXT
1130 HPLOT 131,85 TO 141,95: HPLOT 141,85 TO 131,95
1140 FOR I = 160 TO 191: HPLOT 0,I TO 279,I: NEXT
1142 POKE 512,216: POKE 513,160: POKE 514,0: POKE 515,76: POKE 516,44: POKE 517,254: POKE 60,0: POKE 61,32: POKE 62,255: POKE 63,63: POKE 66,0: POKE 67,64: CALL 512
1144 POKE - 16302,0
1150 CALL CRNCH%: CALL CRNCH%
1160 FOR U = 0 TO UT
1170 X0 = UX(U):Y0 = UY(U):Z = VAL ( MID$ (U$(U),SN,3)): IF B$ = "O" THEN 1180
1174 X0 = XN(U):Y0 = YN(U):Z = VAL ( MID$ (UN$(U),4,3))
1180 GOSUB 8000
1190 NEXT
1192 IF LEFT$ (FU$,1) = "S" THEN X0 = FX%:Y0 = FY%:Z = FZ%:S = 3: GOSUB 8010
1200 POKE - 16301,0: RETURN
8000 S = VAL ( LEFT$ (U$(U),1)): IF MID$ (U$(U),SQ,1) = "X" AND U > = US% THEN RETURN
8010 X = X0 / AS:X = X + 136 - CX: IF X < 10 OR X > 245 THEN 8080
8030 Y = Y0 / AS:Y = 90 - Y + CY: IF Y < 11 OR Y > 170 THEN 8080
8050 X%(S) = X:Y%(S) = Y:CODE%(S) = 1:SCALE%(S) = AC:ZROT%(S) = ABS ((Z / 13.3333) - 28): POKE - 16302,0: CALL CRNCH%: CALL CRNCH%
8080 X%(S) = 0:Y%(S) = 0:CODE%(S) = 0:SCALE%(S) = 0:ZROT%(S) = 0
39526  POKE - 16301,0: RETURN
19000 F0 = 1: PRINT : & GOTO "P2"
20000 PRINT "FOR A NEW MAP TYPE 'M' ";: INPUT A$
20010 IF A$ < > "M" THEN 19000
20020 D0 = U: GOSUB 1000: VTAB 24: HTAB 1
20030 PRINT "TO EXECUTE THE SAME ORDER(S) ENTER 'E'";: INPUT A$
20040 IF A$ < > "E" THEN 19000
20050 U = D0: GOTO 30000
28000 IF LEFT$ (M$,2) < > "MC" THEN RETURN : REM MCNNN **
28012 C$ = M$:A = LEN (M$): IF A = 5 THEN M$ = "": GOTO 28020
28014 M$ = RIGHT$ (M$,A - 5)
28020 D0 = VAL ( RIGHT$ (UN$,3)):D = VAL ( MID$ (C$,3,3))
28022 GOTO 28500
28030 GOSUB 29000
28090 K = 0:D$ = ""
28100 K = K + 10: IF K > = I THEN 28130
28110 IF K > = J THEN 28200
28120 GOTO 28100
28130 A = INT (K / 10):B$ = "00" + STR$ (A)
28140 D$ = D$ + "MD" + A$ + RIGHT$ (B$,2):K = 0:J = J - I: IF J = 0 THEN 28252
28142 IF J < 10 THEN A = ABS (J): GOTO 28230
28150 GOTO 28100
28200 A = INT (K / 10):B$ = "00" + STR$ (A)
28210 D$ = D$ + "MD" + A$ + RIGHT$ (B$,2)
28220 A = ABS (K - J): IF A = 0 THEN 28252
28230 B$ = "0" + STR$ (A)
28240 A$ = MID$ (D$,3,1)
28250 D$ = D$ + "MXX" + A$ + RIGHT$ (B$,1)
28252 A = LEN (C$): IF A = 5 THEN C$ = "": GOTO 28260
28254 C$ = RIGHT$ (C$,A - 5)
28260 M$ = D$ + M$: RETURN
28500 IF D0 > D THEN A$ = "P"
28510 IF D0 < D THEN A$ = "S"
28512 IF D0 = D THEN RETURN
28520 J = ABS (D0 - D): IF J < = 180 THEN 28030
28530 J = D0 + 360 - D: IF J < 180 THEN A$ = "P": GOTO 28030
28540 J = D + 360 - D0: IF J < 180 THEN A$ = "S": GOTO 28030
28550 STOP
29000 A = VAL ( MID$ (U$,SG,1)): IF A < 1 OR A > 9 THEN STOP
29010 ON A GOTO 29011,29012,29013,29014,29015,29016,29017,29018,29019
29011 I = 6: GOTO 29020
29012 I = 18: GOTO 29020
29013 I = 30: GOTO 29020
29014 I = 60: GOTO 29020
29015 I = 90: GOTO 29020
29016 I = 120: GOTO 29020
29017 I = 180: GOTO 29020
29018 I = 360: GOTO 29020
29019 I = 720
29020 RETURN
30000 GOSUB 35000: REM EXECUTE **
30010 XN(U) = UX(U):YN(U) = UY(U):C$ = MO$(U) + "MDC01":M$ = C$:F$ = FO$(U)
30012 U$ = U$(U):UN$(U) = LEFT$ (U$,1) + MID$ (U$,SI,2) + MID$ (U$,SN,3):UN$ = UN$(U)
30020 TL = 60:T = 0
30030 DC$ = "0000000": FOR I = 0 TO 20:DC$ = DC$ + "000000": NEXT
30040 DC = 2: GOSUB 28000
30100 IF F$ = "" THEN 31000
30102 GOSUB 33000
30110 IB = INT ((60 - TL) / 10):J = LEN (F$):AB = 1
30120 K = VAL ( MID$ (F$,AB + 3,1)): IF IB = K THEN 30200
30130 J = LEN (F$):AB = AB + 7: IF AB < J THEN 30120
30140 GOTO 31000
30200 Z = VAL ( MID$ (UN$,4,3)):NO$ = MID$ (F$,AB,7)
30210 IF LEFT$ (NO$,2) < > "FD" THEN 30300
30220 Z1 = Z + 180
5740 v IF Z1 > 360 THEN Z1 = Z1 - 360
30238 Z2 = 450 - Z1: IF Z2 = 360 THEN Z2 = 0
30240 X = XN(U) + 60 * COS (Z2 * PI / 180)
30250 Y = YN(U) + 60 * SIN (Z2 * PI / 180)
30260 GOSUB 30700
30270 GOTO 30900
30300 IF LEFT$ (NO$,2) < > "FA" THEN 30400
30310 J = VAL ( MID$ (NO$,5,3)) + 50:Z2 = 450 - Z: IF Z2 = 360 OR Z2 = 180 THEN Z2 = 0
30320 X = XN(U) + J * COS (Z2 * PI / 180)
30330 Y = YN(U) + J * SIN (Z2 * PI / 180)
30340 GOSUB 30700: GOTO 30900
30400 IF LEFT$ (NO$,2) < > "FK" THEN STOP
30402 J = Z + 90: IF J > 360 THEN J = J - 360
30404 Z2 = 450 - J: IF Z2 = 360 THEN Z2 = 0
30410 X = XN(U) + 100 * COS (Z2 * PI / 180)
30420 Y = YN(U) + 100 * SIN (Z2 * PI / 180)
30430 GOSUB 30700: GOSUB 30908
30440 J = Z - 90: IF J < 0 THEN J = J + 360
30450 X = XN(U) + 100 * COS ((450 - J) * PI / 180)
30460 Y = YN(U) + 100 * SIN ((450 - J) * PI / 180)
30470 GOSUB 30700: GOTO 30900
30700 X0 = X / AS:X0 = X0 + 136 - CX: REM PLOT + AT X,Y
30710 IF X0 < 10 OR X0 > 250 THEN RETURN
30720 Y0 = Y / AS:Y0 = 90 - Y0 + CY
2573 x IF Y0 < 10 OR Y0 > 170 THEN RETURN
30740 HCOLOR= 0: HPLOT X0 - 5,Y0 - 5 TO X0 + 5,Y0 + 5
30742 HPLOT X0,Y0 + 5 TO X0,Y0 - 5
30750 HPLOT X0 - 5,Y0 + 5 TO X0 + 5,Y0 - 5
30752 HPLOT X0 - 5,Y0 TO X0 + 5,Y0
30760 RETURN
30900 I = LEN (F$):F$ = LEFT$ (F$,AB + 2) + "9" + RIGHT$ (F$,I - AB - 3): REM SET T=9 IN ORDER
30902 GOTO 30940
30908 X0 = X / AS:X0 = X0 + 136 - CX: REM UPDATE DC$ **
30910 IF X0 < 10 OR X0 > 250 THEN RETURN
30912 Y0 = Y / AS:Y0 = 90 - Y0 + CY
30914 IF Y0 < 10 OR Y0 > 170 THEN RETURN
30916 I = LEN (DC$):X0 = INT (X0):Y0 = INT (Y0)
30918 A$ = STR$ (X0):B$ = STR$ (Y0)
30920 IF X0 < 100 THEN A$ = "0" + A$
30922 IF Y0 < 100 THEN B$ = "0" + B$
30924 DC$ = LEFT$ (DC$,DC - 1) + A$ + B$ + RIGHT$ (DC$,I - DC - 6)
30930 DC = DC + 6: RETURN
30940 GOSUB 30908
30990 GOTO 30130
31000 IF LEFT$ (M$,3) = "MSS" THEN GOSUB 32000: GOTO 31500
31002 IF LEFT$ (M$,2) = "MX" THEN GOSUB 34000: GOTO 30100
31004 IF LEFT$ (M$,2) = "MC" THEN GOSUB 28000: GOTO 30100
31010 IF LEFT$ (M$,3) < > "MDC" THEN 31300
31020 TI = VAL ( MID$ (M$,4,2))
31030 IF TI < 11 THEN 31150
31040 NO$ = "MDC10": GOSUB 40000
31050 TI = TI - 10:J = LEN (M$): IF TI < = 0 THEN 31200
31060 A$ = STR$ (TI)
31062 IF TI < 10 THEN A$ = "0" + A$
31064 IF J = 5 THEN 31090
31070 M$ = LEFT$ (M$,3) + RIGHT$ (A$,2) + RIGHT$ (M$,J - 5)
31080 GOTO 31100
31090 M$ = LEFT$ (M$,3) + RIGHT$ (A$,2)
31100 TL = TL - 10: GOTO 31500
31110 IF J = 5 THEN M$ = "": GOTO 31500
31150 IF TI = 10 THEN 31040
31160 A$ = STR$ (TI)
31170 NO$ = "MDC" + "0" + RIGHT$ (A$,1)
31172 GOSUB 40000
31180 TL = TL - TI: REM TL=TL-TI
31182 A = LEN (M$): IF A = 5 THEN M$ = "": GOTO 31500
31184 M$ = RIGHT$ (M$,A - 5): GOTO 31500
31200 IF J = 5 THEN M$ = "": GOTO 31100
31210 M$ = RIGHT$ (M$,J - 5): GOTO 31100
31300 NO$ = LEFT$ (M$,3) + "01": GOSUB 40000
31310 TL = TL - I
31340 J = VAL ( MID$ (M$,4,2)):J = J - 1:A = LEN (M$)
31350 IF J < > 0 THEN 31370
31360 IF A = 5 THEN M$ = "": GOTO 31500
31362 M$ = RIGHT$ (M$,A - 5): GOTO 31500
31370 A$ = STR$ (J): IF J < 10 THEN 31400
31380 IF A = 5 THEN M$ = LEFT$ (M$,3) + RIGHT$ (A$,2): GOTO 31500
31390 M$ = LEFT$ (M$,3) + RIGHT$ (A$,2) + RIGHT$ (M$,A - 5): GOTO 31500
31400 IF A = 5 THEN M$ = LEFT$ (M$,3) + "0" + RIGHT$ (A$,1): GOTO 31500
31410 M$ = LEFT$ (M$,3) + "0" + RIGHT$ (A$,1) + RIGHT$ (M$,A - 5): GOTO 31500
31500 PRINT "ORDER=";M$;" TL=";TL
31510 IF M$ = "" THEN 31600
31520 GOTO 30100
31600 PRINT : PRINT : PRINT "TIME LEFT = "; INT (TL): PRINT " HIT 'RETURN' TO CONTINUE";: INPUT A$
31610 GOSUB 33000:DC$ = "": GOTO 20000
32000 K = VAL ( MID$ (M$,4,2))
32070 B$ = "00" + STR$ (K)
32080 UN$(U) = LEFT$ (UN$(U),1) + RIGHT$ (B$,2) + RIGHT$ (UN$(U),3):UN$ = UN$(U)
32100 I = LEN (M$): IF I < > 5 THEN M$ = RIGHT$ (M$,I - 5):MN$(U) = M$: GOTO 32110
32102 M$ = "":MN$(U) = ""
32110 RETURN
33000 I = 2: REM PLOT OLD DC'S **
33010 X0 = VAL ( MID$ (DC$,I,3)): IF X0 = 0 THEN RETURN
33020 Y0 = VAL ( MID$ (DC$,I + 3,3))
33030 GOSUB 30740
33040 I = I + 6: GOTO 33010
34000 D0 = VAL ( RIGHT$ (UN$,3)):D = VAL ( MID$ (M$,5,1)): REM MXXJN **
34012 IF MID$ (M$,4,1) = "P" THEN 34020
34014 D0 = D0 - D:A$ = "000" + STR$ (D0): GOTO 34030
34020 D0 = D0 + D:A$ = "000" + STR$ (D0)
34030 UN$ = LEFT$ (UN$,3) + RIGHT$ (A$,3)
34040 A = LEN (M$):M$ = RIGHT$ (M$,A - 5)
34050 UN$(U) = UN$: RETURN
35000 A = NE% - 1: REM FSG/FSS **
35010 FOR T = 0 TO A
35020 F$ = FS$(T):F = LEN (F$):B = 1: IF F = 0 THEN 35310
35030 Z = VAL ( MID$ (F$,B + 3,3)):D = VAL ( MID$ (F$,B + 6,4))
35040 X = UX(T) + D * COS ((450 - Z) * PI / 180):Y = UY(T) + D * SIN ((450 - Z) * PI / 180)
35060 X0 = X / AS:X0 = X0 + 136 - CX: IF X0 < 10 OR X0 > 250 THEN 35300
35080 Y0 = Y / AS:Y0 = 90 - Y0 + CY: IF Y0 < 10 OR Y0 > 170 THEN 35300
35100 IF MID$ (F$,B + 2,1) = "S" THEN 35250
35110 Y0 = Y0 - 3: HCOLOR= 5: FOR I = 0 TO 5: HPLOT X0 - 3,Y0 + I TO X0 + 3,Y0 + I: NEXT
35120 GOTO 35300
35250 HCOLOR= 1: HPLOT X0,Y0 - 5 TO X0 + 15,Y0 TO X0,Y0 + 5 TO X0 - 15,Y0 TO X0,Y0 - 5
35252 HPLOT X0 + 6,Y0 TO X0,Y0 - 20 TO X0 - 6,Y0 TO X0,Y0 + 20 TO X0 + 6,Y0
35254 HCOLOR= 3: HPLOT X0 - 10,Y0 - 10 TO X0 + 10,Y0 + 10: HPLOT X0 - 10,Y0 + 10 TO X0 + 10,Y0 - 10
35300 B = B + 10: IF B < F THEN 35030
35310 NEXT
35320 RETURN
40000 UN$ = UN$(U):U$ = U$(U): REM EXECUTE MDXTT **
40010 Z = VAL ( MID$ (UN$,4,3)):K0 = VAL ( MID$ (UN$,2,2))
40020 IF MID$ (NO$,3,1) < > "C" THEN 40100
40030 I = VAL ( MID$ (NO$,4,2)): IF I > 10 THEN STOP
40040 GOTO 40200
40100 IF MID$ (NO$,3,1) < > "P" AND MID$ (NO$,3,1) < > "S" THEN STOP
40110 GOSUB 29000:A = I
40120 J = A / 60:I = 10 / J
40130 Z = Z + 10: IF MID$ (NO$,3,1) = "P" THEN Z = Z - 20
40140 IF Z > 360 THEN Z = Z - 360
40150 IF Z < 0 THEN Z = Z + 360
40200 L0 = K0 * .5555 * I:Z2 = 450 - Z: IF Z2 > = 360 THEN Z2 = Z2 - 360
40210 X0 = XN(U) + L0 * COS (Z2 * PI / 180)
40220 Y0 = YN(U) + L0 * SIN (Z2 * PI / 180)
40230 GOSUB 8000
40300 XN(U) = X0:YN(U) = Y0
40310 A$ = "000" + STR$ (Z)
40330 UN$ = LEFT$ (UN$,3) + RIGHT$ (A$,3)
40340 UN$(U) = UN$: RETURN
52000 INVERSE : FLASH : PRINT : PRINT "ILLEGAL ENTRY"
52010 FOR I = 1 TO 1500: NEXT
52020 NORMAL : RETURN
60000 REM AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
60001 REM AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
REM PROG = P3
4 I = FRE (0)
30 & RECALL "MODULE.THREE.D"
40 CALL RESET%
60 CALL CRNCH%: CALL CRNCH%
69 PI = 355 / 113
100 GOSUB 53000: GOTO 10000
1000 TEXT : HOME : POKE 520,216: POKE 521,160: POKE 522,0: POKE 523,76: POKE 524,44: POKE 525,254
1010 IF NS% = 1 AND UX(US%) < > 69000 THEN AX = UX(US%):AY = UY(US%):U = US%: GOTO 1032
1020 GOSUB 11000: IF A$ = "Q" THEN RETURN
1030 AX = UX(U):AY = UY(U)
1032 P = VAL ( MID$ (U$(U),SM,3)): IF P < 31 THEN 1040
2573  GOTO 5040
1040 AS = 100:AC = 0
1090 CX = AX / AS:CY = AY / AS
1099 HGR
1100 CALL CLR%:UU = US% - 1
1101 X%(4) = 125:Y%(4) = 80:CODE%(4) = 1:SCALE%(4) = 9:XROT%(4) = 0: CALL CRNCH%: CALL CRNCH%
1102 IF FU$ < > "UR" THEN 1110
1104 S = 2:U = 0:SX(0) = UX(0):SY(0) = UY(0):UX(0) = FX%:UY(0) = FY%:Z = FZ%
1106 F2% = 1: GOSUB 1140:F2% = 0:UX(0) = SX(0):UY(0) = SY(0)
1110 FOR U = 0 TO UU
1120 U$ = U$(U)
1122 IF MID$ (U$,SQ,1) = "S" OR MID$ (U$,SQ,1) = "X" THEN 1132
1130 S = VAL ( LEFT$ (U$,1)): GOSUB 1140
1132 NEXT : GOTO 1260
1140 X = UX(U) / AS: IF CX > = 0 THEN X = X + 125 - CX: GOTO 1160
1150 X = X - CX + 125
1160 IF X < 15 OR X > 240 THEN 1250
1170 Y = UY(U) / AS: IF CY > = 0 THEN Y = 80 - Y + CY: GOTO 1190
1180 Y = 80 + CY - Y
1190 IF Y < 10 OR Y > 182 THEN 1250
1200 X%(S) = X:Y%(S) = Y:CODE%(S) = 1:SCALE%(S) = AC
1210 IF F2% = 0 THEN Z = VAL ( MID$ (U$,SN,3))
1220 ZROT%(S) = ABS ((Z / 13.3333) - 28)
1230 CALL CRNCH%: CALL CRNCH%
1240 X%(S) = 0:Y%(S) = 0:CODE%(S) = 0:ZROT%(S) = 0
1250 RETURN
1260 POKE - 16301,0
2000 Y0 = 0:X0 = 125
2100 D = 180
2110 J = D
2120 X = 76 * COS ((450 - J) * PI / 180)
2130 J = J + 180: IF J > 360 THEN J = J - 360
2140 Y = 76 * SIN ((450 - J) * PI / 180)
2150 X = X + 125
2160 Y = 80 - Y
2180 POKE - 16300,0
2200 HCOLOR= 3
2210 HPLOT 125,80 TO X,Y
2230 POKE 60,0: POKE 61,64: POKE 62,255: POKE 63,95: POKE 66,0: POKE 67,32: CALL 520
2270 K = PEEK ( - 16384)
2280 IF K > 127 THEN RETURN
2300 VTAB 21: HTAB 1
2340 PRINT "(R)ADAR (P)ERISCOPE (O)RDERS (TDC) (S)TATUS (E)ND TURN (GA)ME OVER";
2550 D = D - 10: IF D > = - 180 THEN 2110
3328
GOTO 2100
5000 TEXT : HOME
5010 IF NS% = 1 AND UX(US%) < > 69000 THEN XC = UX(US%):YC = UY(US%): GOTO 5040
5020 GOSUB 11000: IF A$ = "Q" THEN RETURN
5030 XC = UX(U):YC = UY(U)
5040 P = VAL ( MID$ (U$(U),SM,3)): IF P < 31 THEN 5050
5042 PRINT "SUB TOO DEEP": PRINT "HIT 'RETURN' TO CONTINUE ";: INPUT A$: RETURN
5050 PRINT "ENTER DEGREE OF CENTRAL SCAN-";: INPUT A$:CD = VAL (A$):CC = 360 - CD: IF CD > - 1 AND CD < 361 THEN 5070
5060 PRINT : PRINT "ENTER DEGREE FROM 0 TO 359": PRINT : GOSUB 52000: GOTO 5050
5070 CALL CLR%
5080 X%(4) = 130:Y%(4) = 80:CODE%(4) = 1:SCALE%(4) = 15:XROT%(4) = 4
5082 X%(5) = 130:Y%(5) = 78:CODE%(5) = 1:SCALE%(5) = 15:XROT%(5) = 4
5083 GOSUB 7000
5084 CALL CRNCH%: CALL CRNCH%
5086 CODE%(4) = 0:CODE%(5) = 0
5090 HCOLOR= 0: HPLOT 130,22 TO 130,180: HPLOT 2,79 TO 260,79: HPLOT 2,80 TO 260,80
5092 UU = US% - 1
5100 FOR U = 0 TO UU
5104 U$ = U$(U):A$ = MID$ (U$,SQ,1): IF A$ = "X" OR A$ = "R" OR A$ = "S" THEN 5122
5110 S = VAL ( LEFT$ (U$,1)): IF S > 2 THEN 5122
5120 F0 = 0: GOSUB 5140
5122 NEXT
5124 GOTO 5600
5140 J = 360 - CD: IF J < 000 THEN J = J + 360
5142 K = J + 90: IF K > 360 THEN K = K - 360
5144 IF J = 180 OR J = 360 THEN J = 0
5146 IF K = 360 OR K = 180 THEN K = 0
5150 X1 = UY(U) * SIN ((J) * PI / 180) + UX(U) * SIN ((K) * PI / 180)
5160 CX = YC * SIN ((J) * PI / 180) + XC * SIN ((K) * PI / 180)
5170 J = J + 180: IF J > 360 THEN J = J - 360
5172 IF J = 180 OR J = 360 THEN J = 0
5180 Y1 = UX(U) * SIN ((J) * PI / 180) + UY(U) * SIN ((K) * PI / 180)
5190 CY = XC * SIN ((J) * PI / 180) + YC * SIN ((K) * PI / 180)
5192 X1 = INT (X1):CX = INT (CX):Y1 = INT (Y1):CY = INT (CY)
5200 CY = CY:A = (X1 - CX) * (X1 - CX):B = (Y1 - CY) * (Y1 - CY)
5210 D = SQR (A + B): IF D = 0 THEN F2% = 1: GOTO 5550
5220 D = INT (D / 10):D = D * 10
28266  IF Y1 - CY < = 0 THEN F2% = 1: GOTO 5550
5240 IF X1 - CX < = 0 THEN 5280
5250 D0 = (X1 - CX) / (Y1 - CY): IF D0 < = 1 THEN 5280
5260 IF D0 > = - 1 THEN 5280
5270 F2% = 1: GOTO 5550
5280 Y = 200
5290 IF D < 10 THEN F2% = 1: GOTO 5550
5300 D1 = D:D = ABS (CY) + Y1: IF CY > 0 AND Y1 > 0 THEN D = Y1 - CY
5310 IF D > 3400 THEN Y = 22:X2 = 30: GOTO 5420
5320 K = D / 500: IF K < 1 THEN 5350
5330 ON K GOTO 5360,5370,5380,5390,5400,5410
5340 STOP : REM REMOVE
5350 Y = 160 - (D * .088):X2 = 5: GOTO 5420
5360 J = D - 500:Y = 116 - (J * .064):X2 = 7.5: GOTO 5420
5370 J = D - 1000:Y = 84 - (J * .05):K = J * .007:X2 = 9.5 + K: GOTO 5420
5380 J = D - 1500:Y = 59 - (J * .036):K = J * .008:X2 = 13 + K: GOTO 5420
5390 J = D - 2000:Y = 41 - (J * .026):K = J * .012:X2 = 17 + K: GOTO 5420
5400 J = D - 2500:Y = 28 - (J * .012):K = J * .004:X2 = 23 + K: GOTO 5420
5410 J = D - 3000:Y = 22 - (J * .002):X2 = 25
5420 IF Y < 22 THEN Y = 22
5422 IF Y > 170 THEN F2% = 1: GOTO 5540
5430 X = 130 + (X1 / X2) - (CX / X2):D = D1
5432 IF X < 10 OR X > 245 THEN F2% = 1: GOTO 5540
5434 IF Y = 22 AND (X < 50 OR X > 200) THEN 5540
5436 IF Y < 30 AND (X < 30 OR X > 220) THEN 5540
5438 IF Y < 45 AND (X < 30 OR X > 220) THEN 5540
5450 IF Y < 10 OR Y > 182 THEN 5540
5460 Z = VAL ( MID$ (U$,SN,3))
5470 Z = Z - CD: IF Z > 360 THEN Z = Z - 360
5480 IF Z > 360 THEN Z = Z - 360
5490 IF Z < 0 THEN Z = Z + 360
5492 IF F0 = 1 THEN RETURN
5500 ZROT%(S) = ABS ((Z / 13.3333) - 28)
5510 SCALE%(S) = (1000 / D) * 4 + 1
5520 X%(S) = X:Y%(S) = Y:CODE%(S) = 1:XROT%(S) = 7
5522 CALL CRNCH%: CALL CRNCH%
5524 X%(S) = X + 1: CALL CRNCH%: CALL CRNCH%
5530 CALL CRNCH%: CALL CRNCH%
5540 X%(S) = 0:Y%(S) = 0:CODE%(S) = 0:SCALE%(S) = 0:XROT%(S) = 0:ZROT%(S) = 0
5550 RETURN
5600 GOSUB 8000: POKE - 16301,0
5610 HOME : VTAB 23
5620 PRINT "X="; INT (XC);" Y="; INT (YC);" DIR=";CD
5630 PRINT : PRINT "HIT 'RETURN' TO CONTINUE";: INPUT A$: RETURN
7000 HCOLOR= 2: HGR :J = 83:X = 130
7002 CALL CRNCH%: CALL CRNCH%
7010 FOR I = 22 TO 40
7020 HPLOT X - J,I TO X + J + 2,I
7030 J = J + 1.34
7040 NEXT
7050 FOR I = 41 TO 65
7060 HPLOT X - J,I TO X + J,I
7070 J = J + .67
7080 NEXT
7090 FOR I = 66 TO 80
7100 HPLOT X - J,I TO X + J,I
7110 J = J + .25
7120 NEXT
7130 FOR I = 81 TO 95
7140 HPLOT X - J,I TO X + J,I
7150 J = J - .25
7160 NEXT
7180 FOR I = 96 TO 110: HPLOT X - J,I TO X + J,I:J = J - .67: NEXT
7190 FOR I = 111 TO 125: HPLOT X - J,I TO X + J,I:J = J - 1: NEXT
7200 FOR I = 126 TO 145: HPLOT X - J,I TO X + J,I:J = J - 1.5: NEXT
7210 FOR I = 146 TO 160: HPLOT X - J,I TO X + J,I:J = J - 3.5: NEXT
7220 POKE 512,216: POKE 513,160: POKE 514,0: POKE 515,76: POKE 516,44: POKE 517,254: POKE 60,0: POKE 61,32: POKE 62,255: POKE 63,63: POKE 66,0: POKE 67,64: CALL 512
7230 POKE - 16302,0
7299 RETURN
8000 IF TI% = 0 THEN RETURN
8010 UU = TI% - 1:SX(0) = UX(0):SY(0) = UY(0):U = 0:F0 = 1
8100 FOR AB = 0 TO UU
8110 UX(0) = TX(AB):UY(0) = TY(AB):F2% = 0: GOSUB 5140: IF F2% = 1 THEN 8130
8120 HCOLOR= 5: FOR I = 0 TO 5: HPLOT X - 2,Y + I TO X + 2,Y + I: NEXT
8122 HPLOT X - 4,Y - 0 TO X + 4,Y - 0
8130 NEXT
8140 UX(0) = SX(0):UY(0) = SY(0):F2% = 0:F0 = 0: RETURN
10000 HOME : PRINT : VTAB 24
10020 I = FRE (0)
10100 PRINT "(R)ADAR (P)ERISCOPE (O)RDERS (TDC) (S)TATUS (E)ND TURN (GA)ME OVER";
10110 INPUT A$
10120 IF A$ = "E" THEN GOTO 19000
10130 IF A$ = "O" THEN GOSUB 20000: GOTO 10000
10140 IF A$ = "R" THEN GOSUB 1000: GOTO 10000
10150 IF A$ = "P" THEN GOSUB 5000: GOTO 10000
10160 IF A$ = "TDC" THEN GOSUB 30000: GOTO 10000
10170 IF A$ = "S" THEN GOSUB 12000: VTAB 22: GOTO 10100
10180 IF A$ = "GA" THEN 19500
10200 PRINT : PRINT : PRINT "ONLY 'R P O TDC S E GA' ARE LEGAL"
10210 GOSUB 52000: GOTO 10000
11000 PRINT "ENTER ID OF SUB AT CENTER ";
11010 INPUT A$: IF A$ = "Q" THEN RETURN
11020 U = US%
11030 IF A$ < > MID$ (U$(U),SB,2) THEN 11040
11032 IF UX(U) = 69000 THEN A$ = "Q": RETURN
11034 U$ = U$(U): RETURN
11040 U = U + 1: IF U < = UT THEN 11030
11050 PRINT : PRINT "NO SUCH SHIP": GOSUB 52000: GOTO 11000
12000 IF US% = UT THEN U = UT:O = NE%: GOTO 12090
12010 PRINT "ENTER ID FOR STATUS ";: INPUT A$: IF A$ = "Q" THEN RETURN
12020 U = US%:O = NE%
12030 IF A$ = MID$ (U$(U),SB,2) THEN 12090
12040 O = O + 1:U = U + 1: IF U < = UT THEN 12030
12050 PRINT "NO SUCH SHIP": GOSUB 52000: GOTO 12000
12090 U$ = U$(U): TEXT
12100 TEXT : HOME : HTAB 15: INVERSE : PRINT " STATUS REPORT ": NORMAL
12110 VTAB 3: HTAB 1: PRINT "SHIP MAP POSITION"
12120 VTAB 4: PRINT " ID";: HTAB 6: PRINT "X";: HTAB 13: PRINT "Y";: HTAB 20: PRINT "SPEED DIR DEPTH TURN"
12130 VTAB 5: HTAB 2: PRINT MID$ (U$,SB,2);: HTAB 6: PRINT INT (UX(U));: HTAB 13: PRINT INT (UY(U));
12132 HTAB 21: PRINT MID$ (U$,SI,2);: IF MID$ (U$,SM,3) < > "000" THEN VTAB 5: HTAB 21: PRINT MID$ (U$,SK,2);
12134 HTAB 26: PRINT MID$ (U$,SN,3);: HTAB 31: PRINT MID$ (U$,SM,3);: HTAB 38: PRINT QP%
12140 VTAB 7: PRINT " DP'S VP'S";: HTAB 24: PRINT "TORPEDO STATUS"
12150 VTAB 8: PRINT "BEG NOW ESC SUB ...BOW... ..STERN.."
12160 VTAB 9: PRINT MID$ (U$,SU,2);: HTAB 6: PRINT MID$ (U$,SV,2);" ";VS%;" ";VU%;
12170 HTAB 22: PRINT MID$ (TB$(U - US%),2,9);: HTAB 32: PRINT MID$ (TS$(U - US%),2,9)
12180 PRINT " SHIP DISTURBED"
12182 PRINT "CLASS WATER"
12184 HTAB 2: PRINT MID$ (U$,SE,2);: HTAB 10: IF MID$ (U$,SB%,1) = "Y" THEN INVERSE : PRINT "YES": NORMAL : GOTO 12200
12186 PRINT "NO"
43127 / VTAB 15: INVERSE : PRINT "SONAR REPORTS OF ENEMY SHIPS": NORMAL
12210 UU = US% - 1:X0 = UX(U):Y0 = UY(U):J = 0
12220 FOR I = 0 TO UU
12222 IF UX(U) = 69000 THEN 12250
12230 IF MID$ (U$(I),SQ,1) < > "S" THEN 12250
12240 X2 = UX(I):Y2 = UY(I): GOSUB 30900: PRINT " "; INT (A);:J = 1
12250 NEXT
12260 IF FU$ < > "US" THEN 12280
12270 X2 = FX%:Y2 = FY%: GOSUB 30900: PRINT " "; INT (A);:J = 1
12280 IF J = 0 THEN PRINT "NONE";
12290 PRINT : PRINT
12400 GOSUB 23120
12410 PRINT : PRINT "ENTER 'T' FOR TORPEDO STATUS";: INPUT A$: IF A$ < > "T" THEN 12500
12420 HOME : HTAB 10: INVERSE : PRINT " LIVE TORPEDOES AT ": NORMAL : PRINT
12430 PRINT " X Y DIR TURNS LEFT": PRINT
12440 A = TI% - 1: IF TI% = 0 THEN 12500
12450 FOR I = 0 TO A: HTAB 2: PRINT INT (TX(I));: HTAB 10: PRINT INT (TY(I));: HTAB 19: PRINT TZ%(I);
12460 HTAB 28: PRINT MID$ (TA$,I + 2,1)
12470 NEXT
12500 RETURN
19000 TEXT : HOME :I = FRE (0)
19100 VTAB 12: HTAB 10: INVERSE : PRINT " LOADING ORDERS PHASE ": HTAB 14: PRINT " SURFACE SIDE ": NORMAL
19200 & GOTO "P2"
19500 TEXT : HOME
19510 VTAB 12: HTAB 10: INVERSE : PRINT " LOADING FINAL PHASE ": NORMAL
19520 & GOTO "PGA"
20000 HOME : VTAB 24: IF US% = (UT) AND UX(US%) < > 69000 THEN U = US%:O = NE%: GOTO 20200
20010 HOME : VTAB 24: PRINT "ENTER ID OF SHIP TO BE GIVEN ORDERS ": PRINT "('Q' = QUIT) ";
20020 INPUT A$: IF A$ = "Q" THEN RETURN
20030 U = US%:O = NE%
20040 IF MID$ (U$(U),SB,2) = A$ AND UX(U) < > 69000 THEN U$ = U$(U): GOTO 20200
20050 O = O + 1:U = U + 1: IF U < = UT THEN 20040
20060 PRINT "YOU CAN'T ORDER THAT SHIP!": GOSUB 52000: GOTO 20000
20200 U$ = U$(U): PRINT : PRINT : PRINT "DO YOU WISH TO ENTER (M)OVE OR (F)IRE ORDERS OR (Q)UIT ";
20210 INPUT A$: IF A$ = "Q" THEN RETURN
20220 IF A$ = "M" THEN 20300
20230 IF A$ = "F" THEN 22000
20250 PRINT : PRINT "ONLY 'M F Q' ALLOWED": GOSUB 52000: GOTO 20200
20300 GOSUB 23100
20310 PRINT "(N)EW, (A)DD OR (Q)UIT ";: INPUT A$: IF A$ = "Q" THEN 20200
20320 IF A$ = "N" THEN MO$(O) = "": GOTO 20400
20330 IF A$ = "A" THEN 20400
20340 PRINT "ONLY 'N A Q' ALLOWED": GOSUB 52000: GOTO 20300
20400 GOSUB 23100
20410 PRINT "ENTER MOVEMENT ORDER (SEC. 4.1) ";:
20420 INPUT A$: IF A$ = "Q" THEN 20200
20430 I = LEN (A$): IF I < > 5 THEN 20470
20440 IF LEFT$ (A$,3) = "MSS" THEN 20500
20450 IF LEFT$ (A$,2) = "MD" THEN 21000
20460 IF LEFT$ (A$,2) = "MU" THEN 21500
20462 IF LEFT$ (A$,2) = "MC" THEN 21300
20470 PRINT "BAD FORMAT": GOSUB 52000: GOTO 20400
20500 A = LEN (MO$(O)):B = 1:X = 0
20502 IF MID$ (MO$(O),B,3) = "MSS" THEN X = 1
20504 B = B + 5: IF B < = (A) THEN 20502
20506 IF X = 1 THEN PRINT : PRINT "ONLY 1 SPEED CHANGE PER TURN": GOSUB 52000: GOTO 20400
20507 I = VAL ( RIGHT$ (A$,2)): IF I < 0 THEN PRINT : PRINT "CAN'T GO BACKWARDS": GOSUB 52000: GOTO 20400
20508 D = VAL ( MID$ (U$,SM,3)): IF D < > 0 THEN 20600
20510 I = VAL ( RIGHT$ (A$,2)):J = VAL ( MID$ (U$,SH,2)):K = J / 3
20520 IF I < = J THEN 20540
20530 PRINT : PRINT "CAN'T EXCEED MAX SPEED": GOSUB 52000: GOTO 20400
20540 J = VAL ( MID$ (U$,SI,2)): IF ABS (J - I) < = K THEN 20560
20550 PRINT : PRINT "CAN'T CHANGE SPEED THAT MUCH": GOSUB 52000: GOTO 20400
20560 MO$(O) = MO$(O) + A$: GOTO 20300
20600 I = VAL ( RIGHT$ (A$,2)):J = VAL ( MID$ (U$,SJ,2)):K = J / 3
20620 IF I < = J THEN 20640
20630 GOTO 20530
20640 J = VAL ( MID$ (U$,SK,2)): IF ABS (J - I) < = K THEN 20560
20650 GOTO 20550
21000 IF MID$ (A$,3,1) = "C" THEN 21030
21010 IF MID$ (A$,3,1) = "P" OR MID$ (A$,3,1) = "S" THEN 21050
21020 GOTO 20470
21030 I = VAL ( MID$ (A$,4,2)): IF I > 9 AND I < 61 THEN 20560
21040 PRINT "YOU MUST ENTER 10-60 TIME POINTS": GOSUB 52000: GOTO 20400
21050 I = VAL ( MID$ (A$,4,2)): IF I > 0 AND I < 19 THEN 20560
21060 PRINT "TURN MUST BE 01-18": GOSUB 52000: GOTO 20400
21300 A = VAL ( RIGHT$ (A$,3)): IF A > = 0 AND A < 360 THEN 20560
21310 PRINT "COURSE MUST BE 000 TO 359": GOSUB 52000: GOTO 20400
21500 D = VAL ( RIGHT$ (A$,3)):D0 = VAL ( MID$ (U$,SM,3)): IF D0 < D THEN 21530
21510 K = VAL ( MID$ (U$,SP,3)): IF D0 - D < = K THEN 21550
21520 PRINT "CAN'T RISE THAT FAST": GOSUB 52000: GOTO 20400
21530 K = VAL ( MID$ (U$,SO,3)): IF D - D0 < = K THEN 21550
21540 PRINT "CAN'T DIVE THAT FAST": GOSUB 52000: GOTO 20400
21550 I = VAL ( MID$ (U$,SL,3)): IF D < = I THEN 20560
21560 FLASH : PRINT : PRINT "WARNING! MAX DEPTH EXCEEDED": NORMAL
21570 FOR I = 0 TO 3000: NEXT : GOTO 20560
22000 GOSUB 23100
22010 PRINT "(N)EW, (A)DD OR (Q)UIT";
22020 INPUT A$: IF A$ = "Q" THEN 20200
22030 IF A$ = "N" THEN FO$(O) = "":FS$(O) = "": GOTO 22100
22040 IF A$ = "A" THEN 22100
22050 PRINT "ONLY 'N A Q' ALLOWED": GOSUB 52000: GOTO 22000
22100 GOSUB 23100
22110 PRINT "ENTER FIRE ORDER (SEC. 4.2) ";
22120 INPUT A$: IF A$ = "Q" THEN 20200
22122 IF LEFT$ (A$,3) = "FSG" THEN 22600
22130 A = LEN (A$): IF A < > 8 THEN 22134
22132 GOTO 22140
22134 PRINT "BAD FORMAT": GOSUB 52000: GOTO 22100
22140 IF MID$ (A$,3,1) = "B" OR MID$ (A$,3,1) = "S" THEN 22160
22150 GOTO 22134
22160 D = VAL ( MID$ (A$,4,3)): IF D > - 1 AND D < 361 THEN 22180
22170 PRINT "YOU CAN FIRE 0-360 DEGREES ONLY": GOSUB 52000: GOTO 22100
22180 A = VAL ( MID$ (A$,7,2)): IF A > - 1 AND A < 51 THEN 22200
22190 PRINT "TIME POINTS MUST BE 00-50": GOSUB 52000: GOTO 22100
22200 A = U - US%:F$ = FO$(O) + A$:B = 1:C = LEN (F$):X = 0:X0 = 0:Y = 0:Y0 = 0
22210 IF MID$ (F$,B + 2,1) = "B" THEN X = X + 1
22220 IF MID$ (F$,B + 2,1) = "S" THEN Y = Y + 1
22230 B = B + 8: IF B < C THEN 22210
22250 FOR I = 2 TO 10
22260 IF MID$ (TB$(A),I,1) = "L" THEN X0 = X0 + 1
22270 IF MID$ (TS$(A),I,1) = "L" THEN Y0 = Y0 + 1
22280 NEXT
22290 IF X < = X0 THEN 22310
22300 PRINT "NOT ENOUGH 'L'OADED TUBES": GOSUB 52000: GOTO 22100
22310 IF Y < = Y0 THEN 22330
22320 GOTO 22300
22330 D0 = VAL ( MID$ (U$,SN,3)): IF MID$ (A$,3,1) = "S" THEN D0 = D0 + 180
22340 IF D0 > 360 THEN D0 = D0 - 360
22350 I = ABS (D - D0): IF I > 180 THEN I = 360 - I
22360 IF I < = 120 THEN 22380
22370 FLASH : PRINT "WARNING !": NORMAL : PRINT "IF ANGLE NOT +/- 120 DEGREES THEN": PRINT "TORPEDO WILL SINK (SEC. 4.22)": PRINT "HIT' RETURN ' TO CONTINUE ";: INPUT B$
22380 FO$(O) = FO$(O) + A$: GOTO 22000
22600 A = LEN (A$): IF A < > 10 THEN 22134
22610 I = VAL ( MID$ (A$,4,3)): IF I > = 0 AND I < 360 THEN 22630
22620 PRINT "ANGLE MUST BE 000-359 DEGREES": GOSUB 52000: GOTO 22100
22630 J = VAL ( RIGHT$ (A$,4)): IF J > 0 THEN 22650
22640 PRINT "DISTANCE MUST BE POSITIVE": GOSUB 52000: GOTO 22100
22650 IF FS$(O) < > "" THEN PRINT "ONLY ONE 'FSG' ALLOWED": GOSUB 52000: GOTO 22100
22660 I = VAL ( MID$ (U$,SW,2)): IF I < 1 THEN PRINT "SUB HAS NO GUNS": GOSUB 52000: GOTO 22100
22700 FS$(O) = A$: GOTO 22000
23100 PRINT : PRINT
23110 PRINT MID$ (U$,SB,2);" X="; INT (UX(U));" Y="; INT (UY(U));
23112 IF MID$ (U$,SM,3) < > "000" THEN PRINT " KU="; MID$ (U$,SK,2);" D="; MID$ (U$,SM,3);
23114 IF MID$ (U$,SM,3) = "000" THEN PRINT " KS="; MID$ (U$,SI,2);
23116 PRINT " DIR="; MID$ (U$,SN,3)
23120 PRINT "MOVE ORDERS = ";MO$(O): PRINT "FIRE ORDERS = ";FO$(O);FS$(O)
23130 RETURN
30000 TEXT : HOME : HTAB 10: INVERSE : PRINT "TARGET DATA COMPUTER": NORMAL
30001 PI = 3.14159
30010 VTAB 4: PRINT "PLEASE ENTER THE FOLLOWING DATA"
30012 PRINT : PRINT "SUB'S X = ";: INPUT A$:X0 = VAL (A$): IF A$ = "Q" THEN RETURN
30020 PRINT "SUBS'S Y = ";: INPUT A$:Y0 = VAL (A$)
30030 PRINT "SUB'S DIRECTION = ";: INPUT A$:Z0 = VAL (A$): IF Z0 > = 0 AND Z0 < 360 THEN 30050
30040 PRINT "0-359 DEGREES ONLY": GOSUB 52000: GOTO 30030
30050 PRINT "SUB'S SPEED = ";: INPUT A$:K0 = VAL (A$)
30060 PRINT "(B)OW OR (S)TERN TUBE ";: INPUT B$: IF B$ = "B" OR B$ = "S" THEN 30080
30070 PRINT "ONLY 'B S' ALLOWED": GOSUB 52000: GOTO 30060
30080 PRINT : PRINT "TARGET'S X = ";: INPUT A$:XT = VAL (A$): IF A$ = "Q" THEN 30000
30090 PRINT "TARGET'S Y = ";: INPUT A$:YT = VAL (A$)
30100 PRINT "TARGET'S DIRECTION = ";: INPUT A$:Z1 = VAL (A$): IF Z1 > = 0 AND Z1 < 360 THEN 30120
30110 PRINT "0-359 DEGREES ONLY": GOSUB 52000: GOTO 30100
30120 PRINT "TARGET'S SPEED = ";: INPUT A$:K1 = VAL (A$): IF A$ = "Q" THEN 30000
30150 IF B$ = "S" THEN Z0 = Z0 + 180: IF Z0 > = 360 THEN Z0 = Z0 - 360
30152 I = 450 - Z0
30160 X2 = X0 + (100 + 10 * K0 * .5555) * COS (I * PI / 180):X0 = X2
30170 Y2 = Y0 + (100 + 10 * K0 * .5555) * SIN (I * PI / 180):Y0 = Y2
30200 X1 = XT:Y1 = YT:T = 0:L1 = 3 * K1 * .5555:L0 = 30 * .5555:Z2 = 450 - Z1
30210 VTAB 17: HTAB 1: PRINT "WORKING ";: INVERSE : PRINT " *";:I = I + 1: IF I > 1 THEN I = 0: GOTO 30230
30220 HTAB 9: PRINT "* ";
30230 NORMAL
30240 X2 = X1 + L1 * COS (Z2 * PI / 180):Y2 = Y1 + L1 * SIN (Z2 * PI / 180):T = T + 3
30250 D = SQR ((X0 - X2) ^ 2 + (Y0 - Y2) ^ 2):X1 = X2:Y1 = Y2
30260 T0 = D / L0: IF T0 > (T) AND D < 10000 THEN 30210
30270 GOSUB 30900
30280 Z2 = ABS (A - Z1): IF Z2 > 180 THEN Z2 = Z2 - 180
30300 PRINT : PRINT : PRINT "ANGLE TO FIRE TORPEDO = "; INT (A)
30310 PRINT "PROJECTED HIT ANGLE (SEC. 6.8) = "; INT (Z2)
30320 PRINT "PROJECTED TIME TILL DETONATION = "; INT (T0)
30400 PRINT : PRINT "HIT 'RETURN' TO CONTINUE ";: INPUT A$: RETURN
30900 IF Y0 = Y2 THEN Y0 = Y0 + 1
30902 AA = ATN ((X0 - X2) / (Y0 - Y2)) * 180 / PI
30904 X = INT (X2 - X0 + .5):Y = INT (Y2 - Y0 + .5)
30910 IF AA > 0 THEN 30940
30920 IF X > 0 THEN A = 180 + AA: GOTO 30960
30922 A = 360 + AA: GOTO 30960
30940 IF X > = 0 AND Y > = 0 THEN A = AA: GOTO 30960
30942 IF X < = 0 AND Y < = 0 THEN A = AA: GOTO 30960
30950 A = 180 + AA
30960 RETURN
52000 INVERSE : FLASH : PRINT : PRINT "ILLEGAL ENTRY"
52010 FOR I = 0 TO 1500: NEXT : NORMAL : RETURN
53000 CALL CLR%: HGR : HCOLOR= 2: HPLOT 0,0 TO 0,0: CALL 62454
53010 FOR I = 0 TO 2:CODE%(I) = 1:SCALE%(I) = 8:XROT%(I) = 7: NEXT
53020 X%(0) = 90:Y%(0) = 40
53030 X%(1) = 180:Y%(1) = 40
53040 X%(2) = 135:Y%(2) = 110
53050 J = 7: IF RND (1) > .5 THEN J = 21
53060 FOR I = 0 TO 2:ZROT%(I) = J: NEXT
53100 CALL CRNCH%: CALL CRNCH%
53102 FOR I = 0 TO 2:X%(I) = X%(I) + 1: NEXT : CALL CRNCH%: CALL CRNCH%
53110 POKE - 16301,0
53112 FOR I = 0 TO 2:CODE%(I) = 0:XROT%(I) = 0: NEXT
53120 VTAB 23: HTAB 1: PRINT "ENTER PASSWORD ";: INPUT A$: IF A$ = PU$ THEN RETURN
53130 GOSUB 52000: PRINT : PRINT : PRINT : GOTO 53000
63000 REM PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
63001 REM PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
63002 REM PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
63003 REM PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
63004 REM PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
REM PROG = P4
4 I = FRE (0): HOME : GOSUB 57000
2573
21968 S%
20 FOR U = 0 TO UT:U$(U) = LEFT$ (U$(U),SB% - 1) + "N" + RIGHT$ (U$(U),S9 - SB%): NEXT
100 GOTO 10000
1000 UN$ = UN$(U):U$ = U$(U)
1010 Z = VAL ( MID$ (UN$,4,3)):K0 = VAL ( MID$ (UN$,2,2))
1020 IF MID$ (NO$,3,1) < > "C" THEN 1100
1030 T = VAL ( MID$ (NO$,4,2)): IF T > 10 THEN STOP
1040 GOTO 1200
1100 IF MID$ (NO$,3,1) < > "P" AND MID$ (NO$,3,1) < > "S" THEN STOP
1110 GOSUB 29000:A = I
1120 J = A / 60:T = 10 / J
1130 Z = Z + 10: IF MID$ (NO$,3,1) = "P" THEN Z = Z - 20
1140 IF Z > 360 THEN Z = Z - 360
1150 IF Z < 0 THEN Z = Z + 360
1200 L0 = K0 * .5555 * T:Z2 = 450 - Z: IF Z2 > = 360 THEN Z2 = Z2 - 360
1210 X0 = XN(U) + L0 * COS (Z2 * PI / 180)
1220 Y0 = YN(U) + L0 * SIN (Z2 * PI / 180)
1300 XN(U) = X0:YN(U) = Y0
7778 A$ = "000" + STR$ (Z)
1330 UN$ = LEFT$ (UN$,3) + RIGHT$ (A$,3)
1340 UN$(U) = UN$: RETURN
10000 IF MO$(CO%) = "" THEN MO$(CO%) = "MDC60"
10002 IF LEFT$ (MO$(CO%),3) < > "MDC" THEN CT% = QP% + 5:MO$(CO%) = MO$(CO%) + "MDC60"
10004 IF LEFT$ (MO$(CO%),3) = "MDC" THEN MO$(CO%) = "MDC60MDC60"
10010 FOR U = 0 TO UT
10012 U$ = U$(U):UN$(U) = LEFT$ (U$,1) + MID$ (U$,SI,2) + MID$ (U$,SN,3):XN(U) = UX(U):YN(U) = UY(U)
10013 IF U < US% THEN 10016
10014 IF MID$ (U$,SM,3) < > "000" THEN UN$(U) = LEFT$ (U$,1) + MID$ (U$,SK,2) + MID$ (U$,SN,3)
10016 NEXT
10020 J = CO% - 1
10030 FOR I = 0 TO J:MO$(I) = MO$(I) + "MDC60MDC60":TU%(I) = 0: NEXT
10032 TU%(CO%) = 0
10040 GOSUB 36500: GOSUB 36000: GOSUB 24000
10100 TU% = 3:TT% = 2
10110 GOSUB 11000
32868 ' GOSUB 11800: REM MOVE TORPEDOES
10120 GOSUB 12000
10130 GOSUB 15000
10132 GOSUB 16000: REM TORPEDO FIRE CHAEK
10140 GOSUB 20000: REM DEPTH CHARGE COMBAT
10150 GOSUB 21000: REM TORPEDO COMBAT
10200 TU% = TU% + 3: IF TU% < 61 THEN 10110
10202 HGR : POKE - 16302,0
10204 FOR I = 5 TO 7
10205 HCOLOR= I: HPLOT 0,0 TO 0,0: CALL 62454
10206 FOR J = 0 TO 100:X = PEEK ( - 16336): NEXT
10207 NEXT : TEXT
10220 PRINT : PRINT : PRINT "HIT 'RETURN' FOR SEARCH PHASE ";: INPUT A$
10999 GOTO 19000
11000 O = 0
11100 T = 0: IF TU%(O) < TU% THEN 11130
11110 O = O + 1: IF O > CO% THEN RETURN
11120 GOTO 11100
11130 IF O = CO% THEN 11200
11140 IF O < NE% THEN U = O: GOTO 11160
11150 I = O - NE%:U = US% + I
11160 U$ = U$(U):UN$ = UN$(U)
11170 IF XN(U) = 69000 THEN 11110
11180 GOSUB 11300
11199 TU%(O) = TU%(O) + T: GOTO 11100
11200 IF MID$ (MO$(O),3,1) = "C" THEN NO$ = "MDC10": GOTO 11220
11202 IF LEFT$ (MO$(O),2) = "MX" THEN GOSUB 35000: GOTO 11200
11210 NO$ = LEFT$ (MO$(O),3) + "01"
11220 UU = UT% + NT% + NF% - 1:CC = UT%
11230 FOR U = CC TO UU
11240 IF XN(U) = 69000 THEN 11250
11242 IF MID$ (UN$(U),2,2) < > "00" THEN UN$ = UN$(U): GOSUB 1000
11250 NEXT
11252 IF T = 0 THEN T = 2
11260 IF LEFT$ (MO$(O),3) = "MDC" THEN 11290
11270 M$ = MO$(O):J = LEN (M$):I = VAL ( MID$ (M$,4,2)):I = I - 1: IF I = 0 THEN M$ = RIGHT$ (M$,J - 5): GOTO 11288
11272 A$ = "00" + STR$ (I):M$ = LEFT$ (M$,3) + RIGHT$ (A$,2) + RIGHT$ (M$,J - 5)
11288 MO$(O) = M$: IF LEFT$ (M$,2) = "MX" THEN 11202
11290 GOTO 11199
11300 M$ = MO$(O)
11310 IF LEFT$ (M$,3) = "MSS" THEN GOSUB 14000: GOTO 11300
11312 IF LEFT$ (M$,3) = "MXX" THEN GOSUB 34000: GOTO 11300
11314 IF LEFT$ (M$,2) = "MC" THEN GOSUB 28000: GOTO 11300
11320 IF LEFT$ (M$,2) = "MU" THEN GOSUB 14200: GOTO 11300
11330 IF LEFT$ (M$,3) < > "MDC" THEN 11500
11340 TL = VAL ( MID$ (M$,4,2))
11350 IF TL = 1 THEN NO$ = "MDC01": GOTO 11370
11360 NO$ = "MDC02"
11370 GOSUB 1000
11380 I = VAL ( MID$ (NO$,4,2)):TL = TL - I
11390 J = LEN (M$): IF TL = 0 THEN M$ = RIGHT$ (M$,J - 5): GOTO 11420
11400 A$ = STR$ (TL): IF TL < 10 THEN A$ = "0" + A$
11410 M$ = "MDC" + A$ + RIGHT$ (M$,J - 5)
11420 MO$(O) = M$: RETURN
11500 NO$ = LEFT$ (M$,3) + "01"
11510 GOSUB 1000:T = INT (T + .5)
11520 J = LEN (M$):I = VAL ( MID$ (M$,4,2)):I = I - 1
2573 - IF I = 0 THEN M$ = RIGHT$ (M$,J - 5): GOTO 11560
11540 A$ = STR$ (I): IF I < 10 THEN A$ = "0" + A$
11550 M$ = LEFT$ (M$,3) + A$ + RIGHT$ (M$,J - 5)
11560 MO$(O) = M$: RETURN
11800 IF TT% > TU% THEN RETURN
11810 UU = TI% - 1: IF TI% = 0 THEN 11910
11820 FOR U = 0 TO UU
11822 IF TX(U) = 69000 THEN 11900
11830 Z = TZ%(U)
11840 Z2 = 450 - Z
11850 L0 = 30 * .5555 * 6
11860 X = TX(U) + L0 * COS (Z2 * PI / 180)
11870 Y = TY(U) + L0 * SIN (Z2 * PI / 180)
11880 TX(U) = X:TY(U) = Y
11900 NEXT
11910 TT% = TT% + 6: GOTO 11800
12000 PRINT "COLLISION CHECK TIME=";TU% - 3
12010 UU = NE% - 1
12100 FOR U = 0 TO UU
12110 IF XN(U) = 69000 THEN 12130
12120 CC = 0: GOSUB 12700
25195 / NEXT
12200 UU = US%
12210 FOR U = UU TO UT
12220 IF XN(U) = 69000 THEN 12240
12230 CC = NE%: GOSUB 12700
12240 NEXT
12299 RETURN
12700 FOR C = CC TO UT: REM CHECK SHIPS **
12710 IF C = U THEN 12900
12720 IF XN(C) = 69000 THEN 12900
12730 IF ABS (XN(U) - XN(C)) > 150 THEN 12900
12740 IF ABS (YN(U) - YN(C)) > 150 THEN 12900
12748 J = VAL ( MID$ (U$(C),SM,3))
12750 I = VAL ( MID$ (U$(U),SM,3)): IF I = 0 THEN 12800
12760 IF J = 0 THEN 12900
12770 IF ABS (I - J) > 100 THEN 12900
12780 U$ = U$(U): GOSUB 50510:VS% = VS% + V
12781 FLASH : PRINT "SUBS COLLIDED U/W": NORMAL
12782 A = U:U = C
12784 U$ = U$(U): GOSUB 50510:VS% = VS% + V:U = A: GOTO 12900
12800 IF J < > 0 THEN 12900
12802 FLASH : PRINT "SHIPS COLLIDED ON SURFACE": NORMAL :UP$ = "U": IF U > = US% THEN UP$ = "S"
2573 2 GOSUB 50500: GOSUB 50600
12812 A = U:U = C:UP$ = "U": IF U > = US% THEN UP$ = "S"
12814 GOSUB 50500: GOSUB 50600:U = A
12900 NEXT
12910 RETURN
14000 UN$(U) = LEFT$ (UN$(U),1) + MID$ (M$,4,2) + RIGHT$ (UN$(U),3)
14010 I = LEN (M$):MO$(O) = RIGHT$ (MO$(O),I - 5): RETURN
14200 D = VAL ( MID$ (U$,SM,3)): IF D < > 0 THEN 14300
14210 I = VAL ( MID$ (U$,SI,2)):J = VAL ( MID$ (U$,SJ,2)):K = I: IF I > J THEN K = J
14230 A$ = "00" + STR$ (K):UN$(U) = "3" + RIGHT$ (A$,2) + RIGHT$ (UN$(U),3)
14300 U$(U) = LEFT$ (U$(U),SM - 1) + MID$ (M$,3,3) + RIGHT$ (U$(U),S9 - SM - 2)
14310 I = LEN (M$):MO$(O) = RIGHT$ (MO$(O),I - 5): RETURN
15000 UU = NE% - 1
15100 FOR O = 0 TO UU
15102 IF UX(O) = 69000 THEN 15900
15110 IF FO$(O) = "" THEN 15900
15120 F$ = FO$(O):AB = 1
15130 K = VAL ( MID$ (F$,AB + 3,1)) * 10
15140 IF K > TU% THEN 15160
15150 GOTO 15200
15160 J = LEN (F$):AB = AB + 7: IF AB < J THEN 15130
15170 GOTO 15900
15200 Z = VAL ( MID$ (UN$(O),4,3)):NO$ = MID$ (F$,AB,7)
15210 IF LEFT$ (NO$,2) < > "FD" THEN 15300
15220 Z1 = Z + 180: IF Z1 > 360 THEN Z1 = Z1 - 360
15230 Z2 = 450 - Z1
15240 J = 60: GOSUB 15700
15250 GOTO 15800
15300 IF LEFT$ (NO$,2) < > "FA" THEN 15400
15310 J = VAL ( MID$ (NO$,5,3)) + 50
15320 Z2 = 450 - Z
15330 GOSUB 15700
15340 GOTO 15800
15400 IF LEFT$ (NO$,2) < > "FK" THEN STOP
15410 J = Z + 90: IF J > 360 THEN J = J - 360
15420 Z2 = 450 - J
15430 J = 100: GOSUB 15700
15440 J = Z - 90: IF J < 0 THEN J = J + 360
15450 Z2 = 450 - J
15460 J = 100: GOSUB 15700
15470 GOTO 15800
15700 X = XN(O) + J * COS (Z2 * PI / 180): REM EXPLODE & UPDATE ******
15710 Y = YN(O) + J * SIN (Z2 * PI / 180)
15720 WX(WI%) = X:WY(WI%) = Y
15730 D = VAL ( MID$ (NO$,5,3)):WZ(WI%) = D
15740 IF LEFT$ (NO$,2) = "FA" THEN WZ(WI%) = - 69:WT%(WI%) = TU% + 7: GOTO 15760
15750 I = INT (D / 10):WT%(WI%) = I + TU% + 7
15760 WI% = WI% + 1: IF WI% > 19 THEN WI% = 19
15770 RETURN
15800 I = LEN (F$):F$ = LEFT$ (F$,AB + 2) + "9" + RIGHT$ (F$,I - AB - 3): REM UPDATE ORDER
15810 FO$(O) = F$: GOTO 15160
15900 NEXT
15910 RETURN
16000 CC = NE%:UU = CO% - 1
16100 FOR O = CC TO UU
16110 IF FO$(O) = "" THEN 16400
16120 F$ = FO$(O):AB = 1
16130 K = VAL ( MID$ (F$,AB + 6,2))
16140 IF K + 10 > TU% THEN 16160
16150 GOTO 16200
16160 J = LEN (F$):AB = AB + 8: IF AB < J THEN 16130
16170 GOTO 16400
16200 J = O + NF% + NT%:Z = VAL ( RIGHT$ (UN$(J),3))
16210 D = 150: IF MID$ (F$,AB + 2,1) = "B" THEN 16230
16220 D = - 150:Z = Z + 180: IF Z > 360 THEN Z = Z - 360
16230 Z2 = 450 - Z: IF Z2 = 360 OR Z2 = 180 THEN Z2 = 0
16232 IF XN(J) = 69000 THEN 16400
16234 VS% = VS% + 1: FLASH : PRINT "TORPEDO AWAY": NORMAL : GOSUB 16800: IF TI% > = 19 THEN 16300
16236 Z0 = VAL ( RIGHT$ (UN$(J),3)): IF MID$ (F$,AB + 2,1) = "S" THEN Z0 = Z0 + 180
16237 I = ABS (Z0 - Z): IF I > 180 THEN I = 360 - I
16238 IF I > 120 THEN 16300
16240 X = XN(J) + D * COS (Z2 * PI / 180)
16250 Y = YN(J) + D * SIN (Z2 * PI / 180)
16260 TX(TI%) = X:TY(TI%) = Y:TZ%(TI%) = VAL ( MID$ (F$,AB + 3,3))
16270 TI% = TI% + 1: IF TI% > = 19 THEN TI% = 19
16272 A$ = LEFT$ (TA$,TI%) + "8000000000000000000000":TA$ = LEFT$ (A$,22)
16300 I = LEN (F$): IF I = AB + 7 THEN 16304
16302 F$ = LEFT$ (F$,AB + 5) + "99" + RIGHT$ (F$,I - AB - 7): GOTO 16310
16304 F$ = LEFT$ (F$,AB + 5) + "99"
16310 FO$(O) = F$: GOTO 16160
16400 NEXT
16410 RETURN
16800 A$ = TB$(J - US%): IF MID$ (F$,AB + 2,1) = "S" THEN A$ = TS$(J - US%)
16810 X = 2
16820 IF MID$ (A$,X,1) = "L" THEN 16840
16830 X = X + 1: IF X < 11 THEN 16820
16832 STOP
16840 A$ = LEFT$ (A$,X - 1) + "F" + RIGHT$ (A$,11 - X)
16850 IF MID$ (F$,AB + 2,1) = "B" THEN TB$(J - US%) = A$: GOTO 16870
16860 IF MID$ (F$,AB + 2,1) = "S" THEN TS$(J - US%) = A$: GOTO 16870
16865 STOP
16870 RETURN
19000 REM CHAIN **
19010 TEXT : HOME :I = FRE (0)
19100 VTAB 12: HTAB 10: INVERSE : PRINT " LOADING SEARCH PHASE "
19110 NORMAL
19200 & GOTO "P5"
20000 AB = WI% - 1: IF AB = - 1 THEN RETURN
20110 FOR U = 0 TO UT
20112 U$ = U$(U): IF XN(U) = 69000 THEN 20310
20120 FOR DC = 0 TO AB
20122 IF TU% < WT%(DC) THEN 20300
20124 IF WT%(DC) = 6969 THEN STOP 20300
20126 IF WZ(DC) = - 69 THEN WZ(DC) = 0:WT%(DC) = - 69
20130 X0 = XN(U):Y0 = YN(U):X1 = WX(DC):Y1 = WY(DC)
20132 D = SQR ((X0 - X1) ^ 2 + (Y0 - Y1) ^ 2)
20140 IF D > 75 THEN 20300
20142 IF QB% = 69 THEN 20200
20144 IF D > 50 THEN 20300
20200 I = VAL ( MID$ (U$(U),SM,3))
20210 D0 = ABS (I - WZ(DC)): IF D0 > 75 THEN 20300
20212 IF QB% = 69 THEN 20220
20214 IF D0 > 50 THEN 20300
20220 GOSUB 20500
20230 WT%(DC) = 6969: GOSUB 60000: GOSUB 58000
20300 NEXT DC
20310 NEXT U
24696 O FOR DC = 0 TO AB
20330 IF WT%(DC) = 6969 THEN 20360
20332 IF WT%(DC) < > - 69 THEN 20340
20334 WZ(DC) = WZ(DC) + 30: IF WZ(DC) > 999 THEN 20350
20336 GOTO 20360
20340 IF TU% < WT%(DC) THEN 20360
20350 WT%(DC) = 6969: GOSUB 60000: GOSUB 58000
20360 NEXT : RETURN
20500 IF D > 50 THEN D = 45: REM U/W CRT
20502 IF D0 > 50 THEN D0 = 45
20503 IF WT%(DC) = - 69 THEN D0 = 11
20504 I = 100 - D - D0:J = I / 100:K = VAL ( MID$ (U$,SX,1)) / 10:Q = RND (1) + .5
20510 X0 = J * 20 * K * Q:X1 = INT (X0 + .5)
20520 Y0 = VAL ( MID$ (U$,SV,2)):Y1 = Y0 - X1: IF Y1 < 1 THEN 20600
20530 A$ = "00" + STR$ (Y1):U$ = LEFT$ (U$,SV - 1) + RIGHT$ (A$,2) + RIGHT$ (U$,S9 - SV - 1)
20540 U$(U) = U$: RETURN
20600 FLASH : PRINT "SHIP SUNK BY DC":UP$ = "S": NORMAL
20610 GOSUB 50500: GOSUB 50600: GOTO 20540
21000 IF TI% = 0 THEN RETURN
21100 CC = TI% - 1:UU = US% - 1
21110 FOR AB = 0 TO CC
21112 IF TX(AB) = 69000 THEN 21410
21120 FOR U = 0 TO UU
21122 U$ = U$(U):UN$ = UN$(U): IF XN(U) = 69000 THEN 21400
21130 X0 = XN(U):Y0 = YN(U):X1 = TX(AB):Y1 = TY(AB)
21140 D = SQR ((X0 - X1) ^ 2 + (Y0 - Y1) ^ 2)
21150 IF D > 150 THEN 21400
21160 D0 = VAL ( RIGHT$ (UN$,3)):J = VAL ( MID$ (U$,SX,1)) / 10:I = ABS (D0 - TZ%(AB))
43643 R IF I > 90 THEN I = I - 90: GOTO 21162
21170 I = I + 10:K = I * J:Q = RND (1) * 100
21172 IF NU$ = "A" AND TP$ < > "3" THEN K = K / 2
21180 IF Q < = K THEN 21190
21182 I = Q - K: FLASH : IF I < 11 THEN PRINT "TORPEDO NARROWLY MISSED ";: GOTO 21185
21183 IF I < 34 THEN PRINT "TORPEDO CAME CLOSE TO ";: GOTO 21185
21184 PRINT "TORPEDO WENT WIDE OF ";
21185 PRINT MID$ (U$,SB,2): NORMAL
21186 Z = 450 - TZ%(AB):TX(AB) = TX(AB) + 400 * COS (Z * PI / 180):TY(AB) = TY(AB) + 400 * SIN (Z * PI / 180)
21188 GOTO 21400
21190 X0 = 30 * ( RND (1) + .5):X1 = INT (X0 + .5): GOSUB 60500
21200 Y0 = VAL ( MID$ (U$,SV,2)):Y1 = Y0 - X1: IF Y1 < 1 THEN 21300
21210 A$ = "00" + STR$ (Y1):U$ = LEFT$ (U$,SV - 1) + RIGHT$ (A$,2) + RIGHT$ (U$,S9 - SV - 1)
21212 TX(AB) = 69000: GOSUB 21800
21215 FLASH : PRINT "TORPEDO HIT "; MID$ (U$,SB,2): NORMAL
21220 U$(U) = U$: GOTO 21400
21300 FLASH : PRINT MID$ (U$,SB,2);" SUNK BY TORPEDO":UP$ = "U": NORMAL
21302 TX(AB) = 69000
21310 GOSUB 50500: GOSUB 50600: GOTO 21400
21400 NEXT U
21410 NEXT AB
21420 RETURN
21800 IF U > = NE% THEN RETURN
21810 I = INT ((X1 * RND (1)) + .5):J = VAL ( MID$ (U$,SH,2)):K = J - I: IF K < 1 THEN K = 0
21820 A$ = "00" + STR$ (K):U$ = LEFT$ (U$,SH - 1) + RIGHT$ (A$,2) + RIGHT$ (U$,S9 - SH - 1)
21830 J = VAL ( MID$ (UN$,2,2)): IF J < = K THEN RETURN
21840 U$ = LEFT$ (U$,SI - 1) + RIGHT$ (A$,2) + RIGHT$ (U$,S9 - SI - 1)
21850 UN$ = LEFT$ (UN$,1) + RIGHT$ (A$,2) + RIGHT$ (UN$,3):UN$(U) = UN$: RETURN
24000 CC = CO% - 1: IF RND (1) > .5 THEN 24010: REM FSS CRT **
24002 FOR O = CC TO 0 STEP - 1
24004 GOTO 24020
24010 FOR O = 0 TO CC
24020 F$ = FS$(O): IF F$ = "" THEN 24060
24030 A = LEN (F$):B = 1
24040 IF MID$ (F$,B,3) = "FSG" THEN 24100
24050 B = B + 10: IF B < = (A) THEN 24040
24060 NEXT O
24070 RETURN
24100 Z = VAL ( MID$ (F$,B + 3,3)):D = VAL ( MID$ (F$,B + 6,4))
24110 IF O < NE% THEN U = O: GOTO 24130
24120 I = O - NE%:U = US% + I
24130 U$ = U$(U):UN$ = UN$(U):X = UX(U):Y = UY(U): IF X = 69000 THEN 24060
24131 PRINT MID$ (U$,SB,2);" FIRING SURFACE GUNS": GOSUB 60500
24132 J = VAL ( MID$ (U$,SM,3)): IF J < > 0 THEN 24060
24140 Z2 = 450 - Z: IF Z2 > = 360 THEN Z2 = Z2 - 360
24150 X0 = X + D * COS (Z2 * PI / 180):Y0 = Y + D * SIN (Z2 * PI / 180)
24200 FOR I = 0 TO UT
24202 IF UX(I) = 69000 THEN 24310
24204 J = VAL ( MID$ (U$(I),SM,3)): IF J < > 0 THEN 24310
24210 IF ABS (UX(I) - X0) > 150 THEN 24310
24220 IF ABS (UY(I) - Y0) > 150 THEN 24310
24230 D0 = SQR ((UX(I) - X0) ^ 2 + (UY(I) - Y0) ^ 2)
24240 J = (150 - D0) / 500:Q = RND (1) + .5
24250 K = VAL ( MID$ (U$(U),SW,2)):C = J * K * Q
24260 L1 = INT (C + .5): IF L1 < 1 THEN 24310
24270 U$ = U$(I):K1 = VAL ( MID$ (U$,SV,2)):DC = K1 - L1: IF DC < 1 THEN 24400
24280 A$ = "00" + STR$ (DC):U$ = LEFT$ (U$,SV - 1) + RIGHT$ (A$,2) + RIGHT$ (U$,S9 - SV - 1)
24300 U$(I) = U$
24305 FLASH : PRINT "SURFACE GUN HIT "; MID$ (U$,SB,2): NORMAL
24310 NEXT I
24320 GOTO 24060
24400 PRINT MID$ (U$,SB,2);" SUNK BY SURFACE GUNS":UP$ = "U": IF I > = US% THEN UP$ = "S"
24405 REM
24410 J = U:U = I: GOSUB 50500:I = U:U = J: GOSUB 50600: GOTO 24310
28000 IF LEFT$ (M$,2) < > "MC" THEN RETURN
28010 C$ = LEFT$ (M$,5):A = LEN (M$): IF A = 5 THEN M$ = "": GOTO 28030
28020 M$ = RIGHT$ (M$,A - 5)
28030 D0 = VAL ( RIGHT$ (UN$,3)):D = VAL ( MID$ (C$,3,3))
28040 IF D0 > D THEN A$ = "P"
28050 IF D0 < D THEN A$ = "S"
28060 IF D0 = D THEN MO$(O) = M$: RETURN
28070 J = ABS (D0 - D): IF J < = 180 THEN 28100
28080 J = D0 + 360 - D: IF J < 180 THEN A$ = "P": GOTO 28100
28090 J = D + 360 - D0: IF J < 180 THEN A$ = "S": GOTO 28100
28095 STOP
28100 GOSUB 29000:K = 0:D$ = ""
28110 K = K + 10: IF K > = I THEN 28140
28120 IF K > = J THEN 28200
28130 GOTO 28110
28140 A = INT (K / 10):B$ = "00" + STR$ (A)
28150 D$ = D$ + "MD" + A$ + RIGHT$ (B$,2):K = 0:J = J - I: IF J = 0 THEN 28260
28160 K = 0: GOTO 28110
28200 A = INT (K / 10):B$ = "00" + STR$ (A)
28210 D$ = D$ + "MD" + A$ + RIGHT$ (B$,2)
28220 A = ABS (K - J): IF A = 0 THEN 28260
28230 B$ = "0" + STR$ (A)
28240 A$ = MID$ (D$,3,1)
28250 D$ = D$ + "MXX" + A$ + RIGHT$ (B$,1)
28260 M$ = D$ + M$:MO$(O) = M$: RETURN
29000 A = VAL ( MID$ (U$,SG,1)): IF A < 1 OR A > 9 THEN STOP
21125 q ON A GOTO 29011,29012,29013,29014,29015,29016,29017,29018,29019
29011 I = 6: GOTO 29020
29012 I = 18: GOTO 29020
29013 I = 30: GOTO 29020
29014 I = 60: GOTO 29020
29015 I = 90: GOTO 29020
29016 I = 120: GOTO 29020
29017 I = 180: GOTO 29020
29018 I = 360: GOTO 29020
29019 I = 720
29020 RETURN
32000 K0 = VAL ( MID$ (UN$(O),2,2)): REM CHANGE SPEED ORDER **
2573 }K1 = VAL ( MID$ (M$,4,2))
32020 IF MID$ (M$,3,1) = "P" THEN K = K0 + K1
32030 IF MID$ (M$,3,1) = "M" THEN K = K0 - K1
32040 IF K < 1 THEN K = 0
32050 K1 = VAL ( MID$ (U$(O),SH,2))
32060 IF K > K1 THEN K = K1
32070 B$ = STR$ (K): IF K < 1 THEN B$ = "000"
32080 UN$(O) = LEFT$ (UN$(O),1) + RIGHT$ (B$,2) + RIGHT$ (UN$(O),3)
32100 I = LEN (M$):MN$(O) = RIGHT$ (M$,I - 5)
32110 RETURN
34000 D0 = VAL ( RIGHT$ (UN$,3)):D = VAL ( MID$ (M$,5,1))
34010 IF MID$ (M$,4,1) = "P" THEN D0 = D0 + D
58503 INPUT IF MID$ (M$,4,1) = "S" THEN D0 = D0 - D
34030 A$ = "00" + STR$ (D0):UN$ = LEFT$ (UN$,3) + RIGHT$ (A$,3)
34040 A = LEN (M$):M$ = RIGHT$ (M$,A - 5)
34050 UN$(U) = UN$:MO$(O) = M$: RETURN
35000 UU = UT% + NT% + NF% - 1:CC = UT%
35070 FOR U = CC TO UU
35080 IF XN(U) = 69000 THEN 35100
2573 TEXT D0 = VAL ( RIGHT$ (UN$(U),3)):D = VAL ( MID$ (MO$(O),5,1)): IF MID$ (MO$(O),4,1) = "P" THEN K = D0 + D: GOTO 35086
35084 IF MID$ (MO$(O),4,1) = "S" THEN K = D0 - D: GOTO 35086
2573 TEXT STOP
35086 A$ = "00" + STR$ (K):UN$(U) = LEFT$ (UN$(U),3) + RIGHT$ (A$,3)
35100 NEXT
35110 MO$(O) = "MDC60MDC60": RETURN
36000 U = US%: REM FORCE SUB TO SURFACE **
36002 U$ = U$(U): IF UX(U) = 69000 THEN 36110
36010 J = VAL ( MID$ (U$,SU,2)):K = 2 * VAL ( MID$ (U$,SV,2)): IF K > J THEN 36110
36020 O = NE% + U - US%:M$ = "12345" + MO$(O) + "67890":M = LEN (M$):B = 1
36030 IF MID$ (M$,B,2) < > "MU" THEN 36050
36040 M$ = LEFT$ (M$,B - 1) + RIGHT$ (M$,M - B - 4):M = M - 5:B = B - 5
36050 B = B + 5: IF B < = M THEN 36030
36070 D0 = VAL ( MID$ (U$,SM,3)):D = VAL ( MID$ (U$,SP,3)):P = D0 - D: IF P < 0 THEN P = 0
36090 A$ = "000" + STR$ (P): IF M = 10 THEN MO$(O) = "MU" + RIGHT$ (A$,3) + "MDC60MDC60": GOTO 36110
36100 MO$(O) = "MU" + RIGHT$ (A$,3) + MID$ (M$,6,M - 10)
36110 U = U + 1: IF U < = UT THEN 36002
36120 M$ = "": RETURN
36500 FOR I = 0 TO UT: REM DEAD IN WATER **
36510 IF UX(I) = 69000 THEN 36550
36520 J = VAL ( MID$ (U$(I),SV,2)): IF J > 4 THEN 36550
36530 U$(I) = LEFT$ (U$(I),SH - 1) + "0000" + RIGHT$ (U$(I),S9 - SH - 3)
36532 UN$(I) = LEFT$ (UN$(I),1) + "00" + RIGHT$ (UN$(I),3)
36534 IF I < NE% THEN MO$(I) = "MDC60MDC60"
36536 IF I > = US% THEN MO$(I - US% + NE%) = "MDC60MDC60"
36540 IF I > = US% THEN U$(I) = LEFT$ (U$(I),SK - 1) + "00" + RIGHT$ (U$(I),S9 - SK - 1)
36550 NEXT
36560 RETURN
50500 PRINT MID$ (U$(U),2,2);" SUNK"
50510 UX(U) = 69000:UY(U) = 69000:XN(U) = 69000:YN(U) = 69000:U$ = U$(U)
50520 U$ = LEFT$ (U$,SV - 1) + "00" + RIGHT$ (U$,S9 - SV - 1): REM DP'S = 0
50530 V = VAL ( MID$ (U$,SF,2))
50540 U$(U) = U$: RETURN
50600 IF UP$ = "U" THEN 50620: REM ADD VP'S **
50610 VS% = VS% + V: GOTO 50630
50620 VU% = VU% + V
50630 PRINT V;" VP'S AWARDED TO ";
50640 IF UP$ = "U" THEN PRINT "UNDERWATER";: GOTO 50660
50650 PRINT "SURFACE";
50660 PRINT " SIDE"
50690 RETURN
57000 VTAB 24: PRINT "THIS WILL TAKE 1-5 MINUTES."
57002 I = FRE (0)
57010 PRINT : PRINT : RETURN
58000 FOR X1 = 0 TO UT
58010 IF UX(X1) = 69000 THEN 58100
58020 J = VAL ( MID$ (U$(X1),SM,3)): IF J < > 0 THEN 58100
58030 J = SQR ((XN(X1) - WX(DC)) ^ 2 + (YN(X1) - WY(DC)) ^ 2): IF J > 75 THEN 58100
58050 IF QB% = 69 THEN 58070
58060 IF J > 50 THEN 58100
58070 FLASH : PRINT MID$ (U$(X1),SB,2);" SUNK BY D.C. BACK-WASH!": NORMAL : PRINT "DIS=";J:UP$ = "U": IF X1 > = US% THEN UP$ = "S"
58080 X0 = U:U = X1:A$ = U$:U$ = U$(X1): GOSUB 50500: GOSUB 50600:U = X0:U$ = A$
58100 NEXT : RETURN
60000 GOSUB 60500
60020 PRINT "DC DETONATED AT "; INT (WX(DC));","; INT (WY(DC));" DEPTH="; INT (WZ(DC))
60030 J = US%
60040 FOR I = J TO UT
60042 K = SQR ((XN(I) - WX(DC)) ^ 2 + (YN(I) - WY(DC)) ^ 2)
60044 IF K > 251 THEN 60060
60046 U$(I) = LEFT$ (U$(I),SB% - 1) + "Y" + RIGHT$ (U$(I),S9 - SB%)
60048 IF QB% < > 69 THEN 60060
60052 K = SQR ((XN(I) - WX(DC)) ^ 2 + (YN(I) - WY(DC)) ^ 2)
60054 PRINT " DIS="; INT (K)
60060 NEXT
60099 POKE - 16301,0: RETURN
60500 CALL CLR%: HGR : POKE - 16302,0
60510 HCOLOR= 5: HPLOT 0,0 TO 0,0: CALL 62454
60520 FOR I = 0 TO 2: HCOLOR= 3: HPLOT 0,0 TO 0,0: CALL 62454: HCOLOR= 5: HPLOT 0,0 TO 0,0: CALL 62454: NEXT
60530 TEXT : RETURN
18255 = P4
4 I = FRE (0): HOME : GOSUB 57000
2573
21968 S%
20 FOR U = 0 TO UT:U$(U) = LEFT$ (U$(U),SB% - 1) + "N" + RIGHT$ (U$(U),S9 - SB%): NEXT
100 GOTO 10000
1000 UN$ = UN$(U):U$ = U$(U)
1010 Z = VAL ( MID$ (UN$,4,3)):K0 = VAL ( MID$ (UN$,2,2))
1020 IF MID$ (NO$,3,1) < > "C" THEN 1100
1030 T = VAL ( MID$ (NO$,4,2)): IF T > 10 THEN STOP
1040 GOTO 1200
1100 IF MID$ (NO$,3,1) < > "P" AND MID$ (NO$,3,1) < > "S" THEN STOP
1110 GOSUB 29000:A = I
1120 J = A / 60:T = 10 / J
1130 Z = Z + 10: IF MID$ (NO$,3,1) = "P" THEN Z = Z - 20
1140 IF Z > 360 THEN Z = Z - 360
1150 IF Z < 0 THEN Z = Z + 360
1200 L0 = K0 * .5555 * T:Z2 = 450 - Z: IF Z2 > = 360 THEN Z2 = Z2 - 360
1210 X0 = XN(U) + L0 * COS (Z2 * PI / 180)
1220 Y0 = YN(U) + L0 * SIN (Z2 * PI / 180)
1300 XN(U) = X0:YN(U) = Y0
7778 A$ = "000" + STR$ (Z)
1330 UN$ = LEFT$ (UN$,3) + RIGHT$ (A$,3)
1340 UN$(U) = UN$: RETURN
10000 IF MO$(CO%) = "" THEN MO$(CO%) = "MDC60"
10002 IF LEFT$ (MO$(CO%),3) < > "MDC" THEN CT% = QP% + 5:MO$(CO%) = MO$(CO%) + "MDC60"
10004 IF LEFT$ (MO$(CO%),3) = "MDC" THEN MO$(CO%) = "MDC60MDC60"
10010 FOR U = 0 TO UT
10012 U$ = U$(U):UN$(U) = LEFT$ (U$,1) + MID$ (U$,SI,2) + MID$ (U$,SN,3):XN(U) = UX(U):YN(U) = UY(U)
10013 IF U < US% THEN 10016
10014 IF MID$ (U$,SM,3) < > "000" THEN UN$(U) = LEFT$ (U$,1) + MID$ (U$,SK,2) + MID$ (U$,SN,3)
10016 NEXT
10020 J = CO% - 1
10030 FOR I = 0 TO J:MO$(I) = MO$(I) + "MDC60MDC60":TU%(I) = 0: NEXT
10032 TU%(CO%) = 0
10040 GOSUB 36500: GOSUB 36000: GOSUB 24000
10100 TU% = 3:TT% = 2
10110 GOSUB 11000
32868 ' GOSUB 11800: REM MOVE TORPEDOES
10120 GOSUB 12000
10130 GOSUB 15000
10132 GOSUB 16000: REM TORPEDO FIRE CHAEK
10140 GOSUB 20000: REM DEPTH CHARGE COMBAT
10150 GOSUB 21000: REM TORPEDO COMBAT
10200 TU% = TU% + 3: IF TU% < 61 THEN 10110
10202 HGR : POKE - 16302,0
10204 FOR I = 5 TO 7
10205 HCOLOR= I: HPLOT 0,0 TO 0,0: CALL 62454
10206 FOR J = 0 TO 100:X = PEEK ( - 16336): NEXT
10207 NEXT : TEXT
10220 PRINT : PRINT : PRINT "HIT 'RETURN' FOR SEARCH PHASE ";: INPUT A$
10999 GOTO 19000
11000 O = 0
11100 T = 0: IF TU%(O) < TU% THEN 11130
11110 O = O + 1: IF O > CO% THEN RETURN
11120 GOTO 11100
11130 IF O = CO% THEN 11200
11140 IF O < NE% THEN U = O: GOTO 11160
11150 I = O - NE%:U = US% + I
11160 U$ = U$(U):UN$ = UN$(U)
11170 IF XN(U) = 69000 THEN 11110
11180 GOSUB 11300
11199 TU%(O) = TU%(O) + T: GOTO 11100
11200 IF MID$ (MO$(O),3,1) = "C" THEN NO$ = "MDC10": GOTO 11220
11202 IF LEFT$ (MO$(O),2) = "MX" THEN GOSUB 35000: GOTO 11200
11210 NO$ = LEFT$ (MO$(O),3) + "01"
11220 UU = UT% + NT% + NF% - 1:CC = UT%
11230 FOR U = CC TO UU
11240 IF XN(U) = 69000 THEN 11250
11242 IF MID$ (UN$(U),2,2) < > "00" THEN UN$ = UN$(U): GOSUB 1000
11250 NEXT
11252 IF T = 0 THEN T = 2
11260 IF LEFT$ (MO$(O),3) = "MDC" THEN 11290
11270 M$ = MO$(O):J = LEN (M$):I = VAL ( MID$ (M$,4,2)):I = I - 1: IF I = 0 THEN M$ = RIGHT$ (M$,J - 5): GOTO 11288
11272 A$ = "00" + STR$ (I):M$ = LEFT$ (M$,3) + RIGHT$ (A$,2) + RIGHT$ (M$,J - 5)
11288 MO$(O) = M$: IF LEFT$ (M$,2) = "MX" THEN 11202
11290 GOTO 11199
11300 M$ = MO$(O)
11310 IF LEFT$ (M$,3) = "MSS" THEN GOSUB 14000: GOTO 11300
11312 IF LEFT$ (M$,3) = "MXX" THEN GOSUB 34000: GOTO 11300
11314 IF LEFT$ (M$,2) = "MC" THEN GOSUB 28000: GOTO 11300
11320 IF LEFT$ (M$,2) = "MU" THEN GOSUB 14200: GOTO 11300
11330 IF LEFT$ (M$,3) < > "MDC" THEN 11500
11340 TL = VAL ( MID$ (M$,4,2))
11350 IF TL = 1 THEN NO$ = "MDC01": GOTO 11370
11360 NO$ = "MDC02"
11370 GOSUB 1000
11380 I = VAL ( MID$ (NO$,4,2)):TL = TL - I
11390 J = LEN (M$): IF TL = 0 THEN M$ = RIGHT$ (M$,J - 5): GOTO 11420
11400 A$ = STR$ (TL): IF TL < 10 THEN A$ = "0" + A$
11410 M$ = "MDC" + A$ + RIGHT$ (M$,J - 5)
11420 MO$(O) = M$: RETURN
11500 NO$ = LEFT$ (M$,3) + "01"
11510 GOSUB 1000:T = INT (T + .5)
11520 J = LEN (M$):I = VAL ( MID$ (M$,4,2)):I = I - 1
2573 - IF I = 0 THEN M$ = RIGHT$ (M$,J - 5): GOTO 11560
11540 A$ = STR$ (I): IF I < 10 THEN A$ = "0" + A$
11550 M$ = LEFT$ (M$,3) + A$ + RIGHT$ (M$,J - 5)
11560 MO$(O) = M$: RETURN
11800 IF TT% > TU% THEN RETURN
11810 UU = TI% - 1: IF TI% = 0 THEN 11910
11820 FOR U = 0 TO UU
11822 IF TX(U) = 69000 THEN 11900
11830 Z = TZ%(U)
11840 Z2 = 450 - Z
11850 L0 = 30 * .5555 * 6
11860 X = TX(U) + L0 * COS (Z2 * PI / 180)
11870 Y = TY(U) + L0 * SIN (Z2 * PI / 180)
11880 TX(U) = X:TY(U) = Y
11900 NEXT
11910 TT% = TT% + 6: GOTO 11800
12000 PRINT "COLLISION CHECK TIME=";TU% - 3
12010 UU = NE% - 1
12100 FOR U = 0 TO UU
12110 IF XN(U) = 69000 THEN 12130
12120 CC = 0: GOSUB 12700
25195 / NEXT
12200 UU = US%
12210 FOR U = UU TO UT
12220 IF XN(U) = 69000 THEN 12240
12230 CC = NE%: GOSUB 12700
12240 NEXT
12299 RETURN
12700 FOR C = CC TO UT: REM CHECK SHIPS **
12710 IF C = U THEN 12900
12720 IF XN(C) = 69000 THEN 12900
12730 IF ABS (XN(U) - XN(C)) > 150 THEN 12900
12740 IF ABS (YN(U) - YN(C)) > 150 THEN 12900
12748 J = VAL ( MID$ (U$(C),SM,3))
12750 I = VAL ( MID$ (U$(U),SM,3)): IF I = 0 THEN 12800
12760 IF J = 0 THEN 12900
12770 IF ABS (I - J) > 100 THEN 12900
12780 U$ = U$(U): GOSUB 50510:VS% = VS% + V
12781 FLASH : PRINT "SUBS COLLIDED U/W": NORMAL
12782 A = U:U = C
12784 U$ = U$(U): GOSUB 50510:VS% = VS% + V:U = A: GOTO 12900
12800 IF J < > 0 THEN 12900
12802 FLASH : PRINT "SHIPS COLLIDED ON SURFACE": NORMAL :UP$ = "U": IF U > = US% THEN UP$ = "S"
2573 2 GOSUB 50500: GOSUB 50600
12812 A = U:U = C:UP$ = "U": IF U > = US% THEN UP$ = "S"
12814 GOSUB 50500: GOSUB 50600:U = A
12900 NEXT
12910 RETURN
14000 UN$(U) = LEFT$ (UN$(U),1) + MID$ (M$,4,2) + RIGHT$ (UN$(U),3)
14010 I = LEN (M$):MO$(O) = RIGHT$ (MO$(O),I - 5): RETURN
14200 D = VAL ( MID$ (U$,SM,3)): IF D < > 0 THEN 14300
14210 I = VAL ( MID$ (U$,SI,2)):J = VAL ( MID$ (U$,SJ,2)):K = I: IF I > J THEN K = J
14230 A$ = "00" + STR$ (K):UN$(U) = "3" + RIGHT$ (A$,2) + RIGHT$ (UN$(U),3)
14300 U$(U) = LEFT$ (U$(U),SM - 1) + MID$ (M$,3,3) + RIGHT$ (U$(U),S9 - SM - 2)
14310 I = LEN (M$):MO$(O) = RIGHT$ (MO$(O),I - 5): RETURN
15000 UU = NE% - 1
15100 FOR O = 0 TO UU
15102 IF UX(O) = 69000 THEN 15900
15110 IF FO$(O) = "" THEN 15900
15120 F$ = FO$(O):AB = 1
15130 K = VAL ( MID$ (F$,AB + 3,1)) * 10
15140 IF K > TU% THEN 15160
15150 GOTO 15200
15160 J = LEN (F$):AB = AB + 7: IF AB < J THEN 15130
15170 GOTO 15900
15200 Z = VAL ( MID$ (UN$(O),4,3)):NO$ = MID$ (F$,AB,7)
15210 IF LEFT$ (NO$,2) < > "FD" THEN 15300
15220 Z1 = Z + 180: IF Z1 > 360 THEN Z1 = Z1 - 360
15230 Z2 = 450 - Z1
15240 J = 60: GOSUB 15700
15250 GOTO 15800
15300 IF LEFT$ (NO$,2) < > "FA" THEN 15400
15310 J = VAL ( MID$ (NO$,5,3)) + 50
15320 Z2 = 450 - Z
15330 GOSUB 15700
15340 GOTO 15800
15400 IF LEFT$ (NO$,2) < > "FK" THEN STOP
15410 J = Z + 90: IF J > 360 THEN J = J - 360
15420 Z2 = 450 - J
15430 J = 100: GOSUB 15700
15440 J = Z - 90: IF J < 0 THEN J = J + 360
15450 Z2 = 450 - J
15460 J = 100: GOSUB 15700
15470 GOTO 15800
15700 X = XN(O) + J * COS (Z2 * PI / 180): REM EXPLODE & UPDATE ******
15710 Y = YN(O) + J * SIN (Z2 * PI / 180)
15720 WX(WI%) = X:WY(WI%) = Y
15730 D = VAL ( MID$ (NO$,5,3)):WZ(WI%) = D
15740 IF LEFT$ (NO$,2) = "FA" THEN WZ(WI%) = - 69:WT%(WI%) = TU% + 7: GOTO 15760
15750 I = INT (D / 10):WT%(WI%) = I + TU% + 7
15760 WI% = WI% + 1: IF WI% > 19 THEN WI% = 19
15770 RETURN
15800 I = LEN (F$):F$ = LEFT$ (F$,AB + 2) + "9" + RIGHT$ (F$,I - AB - 3): REM UPDATE ORDER
15810 FO$(O) = F$: GOTO 15160
15900 NEXT
15910 RETURN
16000 CC = NE%:UU = CO% - 1
16100 FOR O = CC TO UU
16110 IF FO$(O) = "" THEN 16400
16120 F$ = FO$(O):AB = 1
16130 K = VAL ( MID$ (F$,AB + 6,2))
16140 IF K + 10 > TU% THEN 16160
16150 GOTO 16200
16160 J = LEN (F$):AB = AB + 8: IF AB < J THEN 16130
16170 GOTO 16400
16200 J = O + NF% + NT%:Z = VAL ( RIGHT$ (UN$(J),3))
16210 D = 150: IF MID$ (F$,AB + 2,1) = "B" THEN 16230
16220 D = - 150:Z = Z + 180: IF Z > 360 THEN Z = Z - 360
16230 Z2 = 450 - Z: IF Z2 = 360 OR Z2 = 180 THEN Z2 = 0
16232 IF XN(J) = 69000 THEN 16400
16234 VS% = VS% + 1: FLASH : PRINT "TORPEDO AWAY": NORMAL : GOSUB 16800: IF TI% > = 19 THEN 16300
16236 Z0 = VAL ( RIGHT$ (UN$(J),3)): IF MID$ (F$,AB + 2,1) = "S" THEN Z0 = Z0 + 180
16237 I = ABS (Z0 - Z): IF I > 180 THEN I = 360 - I
16238 IF I > 120 THEN 16300
16240 X = XN(J) + D * COS (Z2 * PI / 180)
16250 Y = YN(J) + D * SIN (Z2 * PI / 180)
16260 TX(TI%) = X:TY(TI%) = Y:TZ%(TI%) = VAL ( MID$ (F$,AB + 3,3))
16270 TI% = TI% + 1: IF TI% > = 19 THEN TI% = 19
16272 A$ = LEFT$ (TA$,TI%) + "8000000000000000000000":TA$ = LEFT$ (A$,22)
16300 I = LEN (F$): IF I = AB + 7 THEN 16304
16302 F$ = LEFT$ (F$,AB + 5) + "99" + RIGHT$ (F$,I - AB - 7): GOTO 16310
16304 F$ = LEFT$ (F$,AB + 5) + "99"
16310 FO$(O) = F$: GOTO 16160
16400 NEXT
16410 RETURN
16800 A$ = TB$(J - US%): IF MID$ (F$,AB + 2,1) = "S" THEN A$ = TS$(J - US%)
16810 X = 2
16820 IF MID$ (A$,X,1) = "L" THEN 16840
16830 X = X + 1: IF X < 11 THEN 16820
16832 STOP
16840 A$ = LEFT$ (A$,X - 1) + "F" + RIGHT$ (A$,11 - X)
16850 IF MID$ (F$,AB + 2,1) = "B" THEN TB$(J - US%) = A$: GOTO 16870
16860 IF MID$ (F$,AB + 2,1) = "S" THEN TS$(J - US%) = A$: GOTO 16870
16865 STOP
16870 RETURN
19000 REM CHAIN **
19010 TEXT : HOME :I = FRE (0)
19100 VTAB 12: HTAB 10: INVERSE : PRINT " LOADING SEARCH PHASE "
19110 NORMAL
19200 & GOTO "P5"
20000 AB = WI% - 1: IF AB = - 1 THEN RETURN
20110 FOR U = 0 TO UT
20112 U$ = U$(U): IF XN(U) = 69000 THEN 20310
20120 FOR DC = 0 TO AB
20122 IF TU% < WT%(DC) THEN 20300
20124 IF WT%(DC) = 6969 THEN STOP 20300
20126 IF WZ(DC) = - 69 THEN WZ(DC) = 0:WT%(DC) = - 69
20130 X0 = XN(U):Y0 = YN(U):X1 = WX(DC):Y1 = WY(DC)
20132 D = SQR ((X0 - X1) ^ 2 + (Y0 - Y1) ^ 2)
20140 IF D > 75 THEN 20300
20142 IF QB% = 69 THEN 20200
20144 IF D > 50 THEN 20300
20200 I = VAL ( MID$ (U$(U),SM,3))
20210 D0 = ABS (I - WZ(DC)): IF D0 > 75 THEN 20300
20212 IF QB% = 69 THEN 20220
20214 IF D0 > 50 THEN 20300
20220 GOSUB 20500
20230 WT%(DC) = 6969: GOSUB 60000: GOSUB 58000
20300 NEXT DC
20310 NEXT U
24696 O FOR DC = 0 TO AB
20330 IF WT%(DC) = 6969 THEN 20360
20332 IF WT%(DC) < > - 69 THEN 20340
20334 WZ(DC) = WZ(DC) + 30: IF WZ(DC) > 999 THEN 20350
20336 GOTO 20360
20340 IF TU% < WT%(DC) THEN 20360
20350 WT%(DC) = 6969: GOSUB 60000: GOSUB 58000
20360 NEXT : RETURN
20500 IF D > 50 THEN D = 45: REM U/W CRT
20502 IF D0 > 50 THEN D0 = 45
20503 IF WT%(DC) = - 69 THEN D0 = 11
20504 I = 100 - D - D0:J = I / 100:K = VAL ( MID$ (U$,SX,1)) / 10:Q = RND (1) + .5
20510 X0 = J * 20 * K * Q:X1 = INT (X0 + .5)
20520 Y0 = VAL ( MID$ (U$,SV,2)):Y1 = Y0 - X1: IF Y1 < 1 THEN 20600
20530 A$ = "00" + STR$ (Y1):U$ = LEFT$ (U$,SV - 1) + RIGHT$ (A$,2) + RIGHT$ (U$,S9 - SV - 1)
20540 U$(U) = U$: RETURN
20600 FLASH : PRINT "SHIP SUNK BY DC":UP$ = "S": NORMAL
20610 GOSUB 50500: GOSUB 50600: GOTO 20540
21000 IF TI% = 0 THEN RETURN
21100 CC = TI% - 1:UU = US% - 1
21110 FOR AB = 0 TO CC
21112 IF TX(AB) = 69000 THEN 21410
21120 FOR U = 0 TO UU
21122 U$ = U$(U):UN$ = UN$(U): IF XN(U) = 69000 THEN 21400
21130 X0 = XN(U):Y0 = YN(U):X1 = TX(AB):Y1 = TY(AB)
21140 D = SQR ((X0 - X1) ^ 2 + (Y0 - Y1) ^ 2)
21150 IF D > 150 THEN 21400
21160 D0 = VAL ( RIGHT$ (UN$,3)):J = VAL ( MID$ (U$,SX,1)) / 10:I = ABS (D0 - TZ%(AB))
43643 R IF I > 90 THEN I = I - 90: GOTO 21162
21170 I = I + 10:K = I * J:Q = RND (1) * 100
21172 IF NU$ = "A" AND TP$ < > "3" THEN K = K / 2
21180 IF Q < = K THEN 21190
21182 I = Q - K: FLASH : IF I < 11 THEN PRINT "TORPEDO NARROWLY MISSED ";: GOTO 21185
21183 IF I < 34 THEN PRINT "TORPEDO CAME CLOSE TO ";: GOTO 21185
21184 PRINT "TORPEDO WENT WIDE OF ";
21185 PRINT MID$ (U$,SB,2): NORMAL
21186 Z = 450 - TZ%(AB):TX(AB) = TX(AB) + 400 * COS (Z * PI / 180):TY(AB) = TY(AB) + 400 * SIN (Z * PI / 180)
21188 GOTO 21400
21190 X0 = 30 * ( RND (1) + .5):X1 = INT (X0 + .5): GOSUB 60500
21200 Y0 = VAL ( MID$ (U$,SV,2)):Y1 = Y0 - X1: IF Y1 < 1 THEN 21300
21210 A$ = "00" + STR$ (Y1):U$ = LEFT$ (U$,SV - 1) + RIGHT$ (A$,2) + RIGHT$ (U$,S9 - SV - 1)
21212 TX(AB) = 69000: GOSUB 21800
21215 FLASH : PRINT "TORPEDO HIT "; MID$ (U$,SB,2): NORMAL
21220 U$(U) = U$: GOTO 21400
21300 FLASH : PRINT MID$ (U$,SB,2);" SUNK BY TORPEDO":UP$ = "U": NORMAL
21302 TX(AB) = 69000
21310 GOSUB 50500: GOSUB 50600: GOTO 21400
21400 NEXT U
21410 NEXT AB
21420 RETURN
21800 IF U > = NE% THEN RETURN
21810 I = INT ((X1 * RND (1)) + .5):J = VAL ( MID$ (U$,SH,2)):K = J - I: IF K < 1 THEN K = 0
21820 A$ = "00" + STR$ (K):U$ = LEFT$ (U$,SH - 1) + RIGHT$ (A$,2) + RIGHT$ (U$,S9 - SH - 1)
21830 J = VAL ( MID$ (UN$,2,2)): IF J < = K THEN RETURN
21840 U$ = LEFT$ (U$,SI - 1) + RIGHT$ (A$,2) + RIGHT$ (U$,S9 - SI - 1)
21850 UN$ = LEFT$ (UN$,1) + RIGHT$ (A$,2) + RIGHT$ (UN$,3):UN$(U) = UN$: RETURN
24000 CC = CO% - 1: IF RND (1) > .5 THEN 24010: REM FSS CRT **
24002 FOR O = CC TO 0 STEP - 1
24004 GOTO 24020
24010 FOR O = 0 TO CC
24020 F$ = FS$(O): IF F$ = "" THEN 24060
24030 A = LEN (F$):B = 1
24040 IF MID$ (F$,B,3) = "FSG" THEN 24100
24050 B = B + 10: IF B < = (A) THEN 24040
24060 NEXT O
24070 RETURN
24100 Z = VAL ( MID$ (F$,B + 3,3)):D = VAL ( MID$ (F$,B + 6,4))
24110 IF O < NE% THEN U = O: GOTO 24130
24120 I = O - NE%:U = US% + I
24130 U$ = U$(U):UN$ = UN$(U):X = UX(U):Y = UY(U): IF X = 69000 THEN 24060
24131 PRINT MID$ (U$,SB,2);" FIRING SURFACE GUNS": GOSUB 60500
24132 J = VAL ( MID$ (U$,SM,3)): IF J < > 0 THEN 24060
24140 Z2 = 450 - Z: IF Z2 > = 360 THEN Z2 = Z2 - 360
24150 X0 = X + D * COS (Z2 * PI / 180):Y0 = Y + D * SIN (Z2 * PI / 180)
24200 FOR I = 0 TO UT
24202 IF UX(I) = 69000 THEN 24310
24204 J = VAL ( MID$ (U$(I),SM,3)): IF J < > 0 THEN 24310
24210 IF ABS (UX(I) - X0) > 150 THEN 24310
24220 IF ABS (UY(I) - Y0) > 150 THEN 24310
24230 D0 = SQR ((UX(I) - X0) ^ 2 + (UY(I) - Y0) ^ 2)
24240 J = (150 - D0) / 500:Q = RND (1) + .5
24250 K = VAL ( MID$ (U$(U),SW,2)):C = J * K * Q
24260 L1 = INT (C + .5): IF L1 < 1 THEN 24310
24270 U$ = U$(I):K1 = VAL ( MID$ (U$,SV,2)):DC = K1 - L1: IF DC < 1 THEN 24400
24280 A$ = "00" + STR$ (DC):U$ = LEFT$ (U$,SV - 1) + RIGHT$ (A$,2) + RIGHT$ (U$,S9 - SV - 1)
24300 U$(I) = U$
24305 FLASH : PRINT "SURFACE GUN HIT "; MID$ (U$,SB,2): NORMAL
24310 NEXT I
24320 GOTO 24060
24400 PRINT MID$ (U$,SB,2);" SUNK BY SURFACE GUNS":UP$ = "U": IF I > = US% THEN UP$ = "S"
24405 REM
24410 J = U:U = I: GOSUB 50500:I = U:U = J: GOSUB 50600: GOTO 24310
28000 IF LEFT$ (M$,2) < > "MC" THEN RETURN
28010 C$ = LEFT$ (M$,5):A = LEN (M$): IF A = 5 THEN M$ = "": GOTO 28030
28020 M$ = RIGHT$ (M$,A - 5)
28030 D0 = VAL ( RIGHT$ (UN$,3)):D = VAL ( MID$ (C$,3,3))
28040 IF D0 > D THEN A$ = "P"
28050 IF D0 < D THEN A$ = "S"
28060 IF D0 = D THEN MO$(O) = M$: RETURN
28070 J = ABS (D0 - D): IF J < = 180 THEN 28100
28080 J = D0 + 360 - D: IF J < 180 THEN A$ = "P": GOTO 28100
28090 J = D + 360 - D0: IF J < 180 THEN A$ = "S": GOTO 28100
28095 STOP
28100 GOSUB 29000:K = 0:D$ = ""
28110 K = K + 10: IF K > = I THEN 28140
28120 IF K > = J THEN 28200
28130 GOTO 28110
28140 A = INT (K / 10):B$ = "00" + STR$ (A)
28150 D$ = D$ + "MD" + A$ + RIGHT$ (B$,2):K = 0:J = J - I: IF J = 0 THEN 28260
28160 K = 0: GOTO 28110
28200 A = INT (K / 10):B$ = "00" + STR$ (A)
28210 D$ = D$ + "MD" + A$ + RIGHT$ (B$,2)
28220 A = ABS (K - J): IF A = 0 THEN 28260
28230 B$ = "0" + STR$ (A)
28240 A$ = MID$ (D$,3,1)
28250 D$ = D$ + "MXX" + A$ + RIGHT$ (B$,1)
28260 M$ = D$ + M$:MO$(O) = M$: RETURN
29000 A = VAL ( MID$ (U$,SG,1)): IF A < 1 OR A > 9 THEN STOP
21125 q ON A GOTO 29011,29012,29013,29014,29015,29016,29017,29018,29019
29011 I = 6: GOTO 29020
29012 I = 18: GOTO 29020
29013 I = 30: GOTO 29020
29014 I = 60: GOTO 29020
29015 I = 90: GOTO 29020
29016 I = 120: GOTO 29020
29017 I = 180: GOTO 29020
29018 I = 360: GOTO 29020
29019 I = 720
29020 RETURN
32000 K0 = VAL ( MID$ (UN$(O),2,2)): REM CHANGE SPEED ORDER **
2573 }K1 = VAL ( MID$ (M$,4,2))
32020 IF MID$ (M$,3,1) = "P" THEN K = K0 + K1
32030 IF MID$ (M$,3,1) = "M" THEN K = K0 - K1
32040 IF K < 1 THEN K = 0
32050 K1 = VAL ( MID$ (U$(O),SH,2))
32060 IF K > K1 THEN K = K1
32070 B$ = STR$ (K): IF K < 1 THEN B$ = "000"
32080 UN$(O) = LEFT$ (UN$(O),1) + RIGHT$ (B$,2) + RIGHT$ (UN$(O),3)
32100 I = LEN (M$):MN$(O) = RIGHT$ (M$,I - 5)
32110 RETURN
34000 D0 = VAL ( RIGHT$ (UN$,3)):D = VAL ( MID$ (M$,5,1))
34010 IF MID$ (M$,4,1) = "P" THEN D0 = D0 + D
58503 INPUT IF MID$ (M$,4,1) = "S" THEN D0 = D0 - D
34030 A$ = "00" + STR$ (D0):UN$ = LEFT$ (UN$,3) + RIGHT$ (A$,3)
34040 A = LEN (M$):M$ = RIGHT$ (M$,A - 5)
34050 UN$(U) = UN$:MO$(O) = M$: RETURN
35000 UU = UT% + NT% + NF% - 1:CC = UT%
35070 FOR U = CC TO UU
35080 IF XN(U) = 69000 THEN 35100
2573 TEXT D0 = VAL ( RIGHT$ (UN$(U),3)):D = VAL ( MID$ (MO$(O),5,1)): IF MID$ (MO$(O),4,1) = "P" THEN K = D0 + D: GOTO 35086
35084 IF MID$ (MO$(O),4,1) = "S" THEN K = D0 - D: GOTO 35086
2573 TEXT STOP
35086 A$ = "00" + STR$ (K):UN$(U) = LEFT$ (UN$(U),3) + RIGHT$ (A$,3)
35100 NEXT
35110 MO$(O) = "MDC60MDC60": RETURN
36000 U = US%: REM FORCE SUB TO SURFACE **
36002 U$ = U$(U): IF UX(U) = 69000 THEN 36110
36010 J = VAL ( MID$ (U$,SU,2)):K = 2 * VAL ( MID$ (U$,SV,2)): IF K > J THEN 36110
36020 O = NE% + U - US%:M$ = "12345" + MO$(O) + "67890":M = LEN (M$):B = 1
36030 IF MID$ (M$,B,2) < > "MU" THEN 36050
36040 M$ = LEFT$ (M$,B - 1) + RIGHT$ (M$,M - B - 4):M = M - 5:B = B - 5
36050 B = B + 5: IF B < = M THEN 36030
36070 D0 = VAL ( MID$ (U$,SM,3)):D = VAL ( MID$ (U$,SP,3)):P = D0 - D: IF P < 0 THEN P = 0
36090 A$ = "000" + STR$ (P): IF M = 10 THEN MO$(O) = "MU" + RIGHT$ (A$,3) + "MDC60MDC60": GOTO 36110
36100 MO$(O) = "MU" + RIGHT$ (A$,3) + MID$ (M$,6,M - 10)
36110 U = U + 1: IF U < = UT THEN 36002
36120 M$ = "": RETURN
36500 FOR I = 0 TO UT: REM DEAD IN WATER **
36510 IF UX(I) = 69000 THEN 36550
36520 J = VAL ( MID$ (U$(I),SV,2)): IF J > 4 THEN 36550
36530 U$(I) = LEFT$ (U$(I),SH - 1) + "0000" + RIGHT$ (U$(I),S9 - SH - 3)
36532 UN$(I) = LEFT$ (UN$(I),1) + "00" + RIGHT$ (UN$(I),3)
36534 IF I < NE% THEN MO$(I) = "MDC60MDC60"
36536 IF I > = US% THEN MO$(I - US% + NE%) = "MDC60MDC60"
36540 IF I > = US% THEN U$(I) = LEFT$ (U$(I),SK - 1) + "00" + RIGHT$ (U$(I),S9 - SK - 1)
36550 NEXT
36560 RETURN
50500 PRINT MID$ (U$(U),2,2);" SUNK"
50510 UX(U) = 69000:UY(U) = 69000:XN(U) = 69000:YN(U) = 69000:U$ = U$(U)
50520 U$ = LEFT$ (U$,SV - 1) + "00" + RIGHT$ (U$,S9 - SV - 1): REM DP'S = 0
50530 V = VAL ( MID$ (U$,SF,2))
50540 U$(U) = U$: RETURN
50600 IF UP$ = "U" THEN 50620: REM ADD VP'S **
50610 VS% = VS% + V: GOTO 50630
50620 VU% = VU% + V
50630 PRINT V;" VP'S AWARDED TO ";
50640 IF UP$ = "U" THEN PRINT "UNDERWATER";: GOTO 50660
50650 PRINT "SURFACE";
50660 PRINT " SIDE"
50690 RETURN
57000 VTAB 24: PRINT "THIS WILL TAKE 1-5 MINUTES."
57002 I = FRE (0)
57010 PRINT : PRINT : RETURN
58000 FOR X1 = 0 TO UT
58010 IF UX(X1) = 69000 THEN 58100
58020 J = VAL ( MID$ (U$(X1),SM,3)): IF J < > 0 THEN 58100
58030 J = SQR ((XN(X1) - WX(DC)) ^ 2 + (YN(X1) - WY(DC)) ^ 2): IF J > 75 THEN 58100
58050 IF QB% = 69 THEN 58070
58060 IF J > 50 THEN 58100
58070 FLASH : PRINT MID$ (U$(X1),SB,2);" SUNK BY D.C. BACK-WASH!": NORMAL : PRINT "DIS=";J:UP$ = "U": IF X1 > = US% THEN UP$ = "S"
58080 X0 = U:U = X1:A$ = U$:U$ = U$(X1): GOSUB 50500: GOSUB 50600:U = X0:U$ = A$
58100 NEXT : RETURN
60000 GOSUB 60500
60020 PRINT "DC DETONATED AT "; INT (WX(DC));","; INT (WY(DC));" DEPTH="; INT (WZ(DC))
60030 J = US%
60040 FOR I = J TO UT
60042 K = SQR ((XN(I) - WX(DC)) ^ 2 + (YN(I) - WY(DC)) ^ 2)
60044 IF K > 251 THEN 60060
60046 U$(I) = LEFT$ (U$(I),SB% - 1) + "Y" + RIGHT$ (U$(I),S9 - SB%)
60048 IF QB% < > 69 THEN 60060
60052 K = SQR ((XN(I) - WX(DC)) ^ 2 + (YN(I) - WY(DC)) ^ 2)
60054 PRINT " DIS="; INT (K)
60060 NEXT
60099 POKE - 16301,0: RETURN
60500 CALL CLR%: HGR : POKE - 16302,0
60510 HCOLOR= 5: HPLOT 0,0 TO 0,0: CALL 62454
60520 FOR I = 0 TO 2: HCOLOR= 3: HPLOT 0,0 TO 0,0: CALL 62454: HCOLOR= 5: HPLOT 0,0 TO 0,0: CALL 62454: NEXT
60530 TEXT : RETURN
45568 PROG = PGA
50 I = FRE (0)
60 & RECALL "HT": CALL 3072
1000 PRINT CHR$ (3);"0": PRINT CHR$ (2);"0": PRINT CHR$ (12)
1010 PRINT CHR$ (3);"2": PRINT CHR$ (5): VTAB 4
1020 FOR I = 0 TO 3: PRINT CHR$ (9);: NEXT
1030 PRINT "TORPEDO FIRE"
1040 PRINT CHR$ (20): VTAB 10: HTAB 11
1050 PRINT "FINAL VICTORY POINTS"
1060 PRINT CHR$ (18)
1070 GOSUB 2000
1080 INVERSE : VTAB 14: HTAB 12: PRINT "SUBMARINE";: HTAB 23: PRINT "SURFACE"
1090 HTAB 14: PRINT "SIDE";: HTAB 24: PRINT "SIDE": NORMAL
1100 HTAB 15: PRINT VU%;: HTAB 25: PRINT VS%
1200 VTAB 22: PRINT "HIT 'RETURN' FOR A NEW GAME ";: INPUT A$
1210 GOTO 19000
2000 FOR U = 0 TO UT
2010 U$ = U$(U): IF UX(U) = 69000 THEN 2100
2020 I = VAL ( MID$ (U$,SU,2)):J = VAL ( MID$ (U$,SV,2)): IF I = J THEN 2100
2030 K = VAL ( MID$ (U$,SF,2)):V = INT (K * .5 * ((I - J) / I) + .5)
2040 IF U > = US% THEN VS% = VS% + V
2050 IF U < US% THEN VU% = VU% + V
2100 NEXT
2110 RETURN
19000 PRINT : PR# 0: IN# 0
19100 TEXT : HOME :I = FRE (0): PRINT "MEM=";I
19200 VTAB 12: HTAB 11: INVERSE : PRINT " NEW GAME COMING UP ": NORMAL
19300 POKE 2048,0: & RUN "P0",2049
45568 PROG = SOL
4 I = FRE (0)
100 GOSUB 60000
110 IF QP% < > 0 THEN GOSUB 51000: GOTO 10000
200 PI = 3.14159
680 TEXT : HOME : PRINT "READING DATA"
700 A$ = "SOL-TEST"
710 PRINT : PRINT CHR$ (4);"OPEN";A$
720 PRINT CHR$ (4);"READ";A$
730 INPUT SA: INPUT SB: INPUT SC: INPUT SD: INPUT SE: INPUT SF: INPUT SG
740 INPUT SH: INPUT SI: INPUT SJ: INPUT SK: INPUT SL: INPUT SM: INPUT SN: INPUT SO
750 INPUT SP: INPUT SQ: INPUT SR: INPUT SS: INPUT ST: INPUT SU: INPUT SV: INPUT SW
760 INPUT SX: INPUT SY: INPUT SZ: INPUT SA%: INPUT SB%: INPUT SC%: INPUT SD%: INPUT SE%: INPUT SF%: INPUT S9
770 INPUT UT: INPUT NE%: INPUT NT%: INPUT NF%: INPUT NS%
780 FOR I = 0 TO UT: INPUT U$(I): NEXT
790 FOR I = 0 TO UT: INPUT UX(I): NEXT
800 FOR I = 0 TO UT: INPUT UY(I): NEXT
810 INPUT B$
890 PRINT CHR$ (4);"CLOSE";A$
900 UE% = 0:UT% = NE%:UF% = UT% + NT%:US% = NE% + NT% + NF%:CO% = NE% + NS%
910 FOR I = 0 TO UT
920 U$(I) = LEFT$ (U$(I),SQ - 1) + "D" + RIGHT$ (U$(I),S9 - SQ)
930 NEXT
940 TB$(0) = "XL23456789X":TS$(0) = "X123456789X"
942 UX(5) = 0:UY(2) = 1000
949 GOTO 960
950 UX(5) = 500:UY(5) = - 1522:U$(5) = LEFT$ (U$(5),SB% - 1) + "Y" + RIGHT$ (U$(5),S9 - SB%)
960 U$(0) = LEFT$ (U$(0),SI - 1) + "60" + RIGHT$ (U$(5),S9 - SI - 1)
999 GOTO 10000
10000 UU = US%: REM MAIN LOOP **
10010 FOR U = UU TO UT
10020 U$ = U$(U): IF UX(U) = 69000 THEN 10500
10030 GOSUB 40000: REM INIT
10040 P = VAL ( MID$ (U$,SM,3)): REM ON SURFACE ?
10042 IF TD$ = "D" THEN 10050
10044 IF P > VAL ( MID$ (U$,SP,3)) THEN 10050
10046 IF RND (1) > .25 THEN 10050
10048 MO$(O) = "MU000"
10050 IF P < > 0 THEN 10100: REM NO
10060 GOSUB 43000: REM FSG
10080 GOSUB 45000: REM MC(RND)
10090 MO$(O) = "MU031" + MO$(O): GOTO 10500:DUCK - IF POS SIBLE
10100 I = VAL ( MID$ (U$,SV,2)):J = VAL ( MID$ (U$,SU,2)): REM FORCED UP ?
10110 IF 2 * I > J THEN 10200: REM NO
10120 GOSUB 44000: REM FIRE ALL TUBES
10130 GOSUB 45000: REM MC(RND)
10140 GOTO 10500
10200 IF MID$ (U$,SY,1) < > "D" THEN 10240: REM MODE=D ?
10210 GOSUB 20000: REM YES-DEFENSE
10220 GOTO 10400: REM JMP TO FIRE DRILL
10240 IF MID$ (U$,SB%,1) < > "Y" THEN 10260: REM WATER DISTURBED ?
2573 ( GOTO 10210: REM YES-DEFEND
10260 IF MID$ (U$,SY,1) < > "I" THEN 10290: REM MODE=I ?
10270 GOSUB 50000: REM COUNT DOWN I MODE
10280 GOTO 10500
10290 IF P < 31 THEN 10400: REM PERISCOPE DEPTH?
10300 GOSUB 46000: REM MU(PER)
10310 GOTO 10500: REM (?10410?)
10400 GOSUB 42000: REM FIRE DRILL
10410 IF B = 0 AND S = 0 THEN GOSUB 48000: GOTO 10500: REM MC(INT)
10412 IF F0% = 1 THEN 10500
10420 GOSUB 47000: REM MC(VP+)
10500 NEXT U
10501 GOTO 19000
10510 PRINT "ORDERS ARE":J = NE% + NS%
10512 FOR I = 0 TO J
10520 PRINT I;" MO$=";MO$(I);" FO$=";FO$(I);" FS$=";FS$(I)
10530 NEXT
10540 PRINT U$
10999 PRINT "'RETURN' TO CHAIN ";: INPUT AA$
19000 REM CHAIN **
19010 TEXT : HOME :I = FRE (0)
19100 VTAB 12: HTAB 10: INVERSE : PRINT " LOADING ORDERS PHASE ": HTAB 14: PRINT " SURFACE SIDE ": NORMAL
19200 & GOTO "P2"
20000 C = VAL ( MID$ (U$,SZ,1)): REM PRINT "** DEFENSE !!": REM
20002 IF MID$ (U$,SY,1) < > "D" THEN C = 0
20010 IF C = 0 THEN 20100: REM JIF COUNT = 0
20020 GOSUB 49000: REM MU(RND)
20030 GOSUB 45000: REM MC(RND)
20040 C = C - 1:A$ = STR$ (C): REM DECREMENT COUNT
20050 U$ = LEFT$ (U$,SZ - 1) + A$ + RIGHT$ (U$,S9 - SZ):U$(U) = U$
20060 GOTO 20500
20100 IF MID$ (U$,SB%,1) = "Y" THEN 20200: REM JIF DC'S FALLING
20102 REM INT "THEY'VE GONE ** RISE !!"
20110 GOSUB 46000: REM MU(PER)
20120 U$ = LEFT$ (U$,SY - 1) + "A" + RIGHT$ (U$,S9 - SY):U$(U) = U$
20130 GOTO 20500
20200 IF MID$ (U$,SY,1) < > "D" THEN 20300
60009 N REM RINT "DANGER! STAY U/W"
20210 C = 2: GOTO 20020
20300 U$ = LEFT$ (U$,SY - 1) + "D2" + RIGHT$ (U$,S9 - SY - 1):U$(U) = U$
20302 REM RINT "PREPARE TO DIVE"
20500 RETURN
30000 REM TDC *********************************
30002 REM RINT "*** TDC ***"
30010 X0 = UX(U):Y0 = UY(U):K0 = VAL ( MID$ (U$,SK,2)):Z0 = VAL ( MID$ (U$,SN,3))
30020 XT = UX(T):YT = UY(T):Z1 = VAL ( MID$ (U$(T),SN,3)):K1 = VAL ( MID$ (U$(T),SI,2))
30028 REM RINT "BOW/STERN CHECK"
30030 X2 = XT:Y2 = YT: GOSUB 30900
30040 B$ = "B": IF B = 0 THEN 30100
30050 I = ABS (Z0 - A): IF I > 180 THEN I = 360 - I
30060 IF I < 120 THEN 30160
30100 B$ = "S": IF S = 0 THEN A = 0:Z2 = 0: RETURN : REM ?NO SHOT POSSIBLE
30110 Z0 = Z0 + 180: IF Z0 > 360 THEN Z0 = Z0 - 360
30120 J = ABS (Z0 - A): IF J > 180 THEN J = 360 - J
30130 IF J < 120 THEN 30160
30140 A = 0:Z2 = 0: RETURN
30141 A = 0:Z2 = 0: PRINT "STERN SHOT IMPOSSIBLE": RETURN
30160 I = 450 - Z0: REM INT "SHOT=";B$: PRINT : PRINT
30162 X2 = X0 + (100 + 10 * K0 * .5555) * COS (I * PI / 180):X0 = X2
30170 Y2 = Y0 + (100 + 10 * K0 * .5555) * SIN (I * PI / 180):Y0 = Y2
30200 X1 = XT:Y1 = YT:TT = 0:L1 = 3 * K1 * .5555:L0 = 30 * .5555:Z2 = 450 - Z1
30210 GOTO 30240
30211 VTAB 23: HTAB 1: PRINT "WORKING ";: INVERSE : PRINT " *";:I = I + 1: IF I > 1 THEN I = 0: GOTO 30230
30220 HTAB 9: PRINT "* ";
30230 NORMAL
30240 X2 = X1 + L1 * COS (Z2 * PI / 180):Y2 = Y1 + L1 * SIN (Z2 * PI / 180):TT = TT + 3
30250 D = SQR ((X0 - X2) ^ 2 + (Y0 - Y2) ^ 2):X1 = X2:Y1 = Y2
30255 REM RINT "30255 DIS="; INT (D)
30260 T0 = D / L0: IF T0 > (TT) AND D < 10000 THEN 30210
30270 GOSUB 30900
30280 Z2 = ABS (A - Z1): IF Z2 > 180 THEN Z2 = Z2 - 180
30300 RETURN
30900 IF Y0 = Y2 THEN Y0 = Y0 + 1: REM GET ANGLE $$WHEEL $$
30902 AA = ATN ((X0 - X2) / (Y0 - Y2)) * 180 / PI
30904 X = INT (X2 - X0 + .5):Y = INT (Y2 - Y0 + .5)
30910 AA = INT (AA): IF AA > 0 THEN 30940
30912 IF AA = 0 AND X = 0 THEN A = 0: GOTO 30960
30920 IF X > = 0 THEN A = 180 + AA: GOTO 30960
30922 A = 360 + AA: GOTO 30960
30940 IF X > = 0 AND Y > = 0 THEN A = AA: GOTO 30960
30942 REM F X < = 0 AND Y < = 0 THEN A = AA: GOTO 30960
30943 REM CHECK WITH P3 #####!!!!!!!!3333
30950 A = 180 + AA
30960 GOTO 30962
30961 PRINT "ANGLE FROM "; INT (X0);","; INT (Y0);" TO "; INT (X2);","; INT (Y2): PRINT " = ";A
30962 A = INT (A + .5)
30970 A = INT (A + .5): RETURN
40000 AB = US% - 1: REM INIT **
40010 FOR D = 0 TO AB
40020 IF UX(D) = 69000 THEN XN(D) = 69000:YN(D) = 0: GOTO 40050
40022 A$ = MID$ (U$(D),SQ,1): IF A$ = "X" OR A$ = "S" THEN XN(D) = 69000:YN(D) = 0: GOTO 40050
40030 XN(D) = SQR ((UX(U) - UX(D)) ^ 2 + (UY(U) - UY(D)) ^ 2): REM CALC DIS
40040 YN(D) = VAL ( MID$ (U$(D),SF,2)): REM VP'S
40050 NEXT D
40100 A = 1:B = 0: REM BOW TUBES LOADED
40110 IF MID$ (TB$(U - US%),A,1) = "L" THEN B = B + 1
40120 A = A + 1: IF A < = 10 THEN 40110
40130 A = 1:S = 0: REM S=STERN TUBES LOADED
40140 IF MID$ (TS$(U - US%),A,1) = "L" THEN S = S + 1
40150 A = A + 1: IF A < = 10 THEN 40140
40160 F0% = 0
40200 O = NE% + U - US%: REM BLANK OLD ORDERS
40210 MO$(O) = "":FO$(O) = "":FS$(O) = ""
40250 IF MID$ (U$,SJ,2) = MID$ (U$,SK,2) THEN 40299: REM SET SPEED TO MAX
40260 IF VAL ( MID$ (U$,SV,2)) < 5 THEN 40299: REM JIF STOPPED
40270 A$ = MID$ (U$,SJ,2):U$ = LEFT$ (U$,SK - 1) + A$ + RIGHT$ (U$,S9 - SK - 1):U$(U) = U$: REM SPEED=MAX U/W
40299 RETURN
40300 FOR I = 0 TO UT - 1: PRINT XN(I),YN(I): NEXT
40310 J = NE%:K = J + NS% - 1: FOR I = J TO K: PRINT MO$(I),FO$(I),FS$(I): NEXT
40320 PRINT U$
40322 PRINT "X="; INT (UX(U));" Y="; INT (UY(U))
40330 PRINT "B=";B;" S=";S
40400 PRINT "INIT DONE";: INPUT AA$: RETURN
41000 Z = VAL ( MID$ (U$(T),SN,3)): REM MOVE TO INTERCEPT **
41010 Z0 = Z + 90: IF Z0 > 360 THEN Z0 = Z0 - 360
41020 X0 = UX(T) + 1200 * COS ((450 - Z0) * PI / 180): REM CALC 1ST PT
41030 Y0 = UY(T) + 1200 * SIN ((450 - Z0) * PI / 180)
41040 D0 = SQR ((UX(U) - X0) ^ 2 + (UY(U) - Y0) ^ 2)
41050 Z1 = Z - 90: IF Z1 < 0 THEN Z1 = 360 + Z1: REM CALC 2ND PT
41060 X1 = UX(T) + 1200 * COS ((450 - Z1) * PI / 180)
41070 Y1 = UY(T) + 1200 * SIN ((450 - Z1) * PI / 180)
41080 D1 = SQR ((UX(U) - X1) ^ 2 + (UY(U) - Y1) ^ 2)
41100 X2 = X0:Y2 = Y0: IF D1 < D0 THEN X2 = X1:Y2 = Y1
41110 X0 = UX(U):Y0 = UY(U): GOSUB 30900
41112 A = INT (A)
41120 A$ = "000" + STR$ (A):MO$(O) = MO$(O) + "MC" + RIGHT$ (A$,3): REM MC(INT)
41200 RETURN
42000 AB = US% - 1:T = 0: IF B = 0 AND S = 0 THEN 42080: REM FIRE DRILL **
42010 D = 600: IF MID$ (U$(T),SB,1) < > "E" THEN D = 1500
42020 IF XN(T) > D THEN 42070: REM JIF O.O.R.
42030 GOSUB 30000: REM TDC
42040 IF Z2 < 45 OR Z2 > 135 THEN 42070: REM ??BAD ANGLE
42050 A = INT (A):A$ = "000" + STR$ (A):FO$(O) = FO$(O) + "FT" + B$ + RIGHT$ (A$,3) + "00"
42052 REM RINT "TORPEDO FIRE=";FO$(O)
42054 IF B$ = "B" THEN B = B - 1
42056 IF B$ = "S" THEN S = S - 1
42060 IF B = 0 AND S = 0 THEN 42080
42070 T = T + 1: IF T < = AB THEN 42010
42080 RETURN : REM PRINT "FIRE DRILL OVER": RETURN
43000 T = 0: REM FIRE SURFACE GUN **********
43010 IF UX(T) = 69000 THEN T = T + 1: GOTO 43010
43020 X0 = UX(U):Y0 = UY(U):X2 = UX(T):Y2 = UY(T)
43030 D = INT (XN(T))
43040 GOSUB 30900: REM GET ANGLE
43050 A$ = "000" + STR$ (A):B$ = "0000" + STR$ (D)
43060 FS$(O) = "FSG" + RIGHT$ (A$,3) + RIGHT$ (B$,4)
43070 RETURN
44000 IF B = 0 AND S = 0 THEN 44060: REM FIRE ALL TUBES *******
44010 T = US% - 1:AB = - 69
44020 IF UX(T) = 69000 THEN 44050
44030 GOSUB 42030:T = T - 1: REM FIRE TORP
44040 IF B = 0 AND S = 0 THEN 44060
44050 T = T - 1: IF T > = 0 THEN 44020
44060 RETURN : REM PRINT "ALL SHIPS FIRED AT": RETURN
45000 Z = VAL ( MID$ (U$,SN,3)): REM MC(RND) *****
45010 I = INT (120 * RND (1)): IF RND (1) > .5 THEN I = - I
45020 Z1 = Z + I: IF Z1 > 360 THEN Z1 = Z1 - 360
45030 IF Z1 < 0 THEN Z1 = 360 + Z1
45040 A$ = "000" + STR$ (Z1):MO$(O) = MO$(O) + "MC" + RIGHT$ (A$,3)
45042 REM RINT "MC(RND)=";Z1;" FROM ";Z
45050 F0% = 1: RETURN
46000 I = VAL ( MID$ (U$,SP,3)): REM I=MRR ** MU(PER) ******
46010 J = P - I: IF J < 0 THEN J = 28
46020 A$ = "000" + STR$ (J):MO$(O) = "MU" + RIGHT$ (A$,3) + MO$(O)
46022 REM RINT "MU(PER) NEW DEPTH=" ;J
46030 RETURN
47000 AB = US% - 1:T = 0:I = 0:V = YN(0): REM MC(VP+) ********
47010 IF UX(T) = 69000 THEN 47030
47020 IF YN(T) > V THEN I = T:V = YN(T): REM T=MOST VP'S
47030 T = T + 1: IF T < = AB THEN 47010
47032 REM RINT MID$ (U$,SB,2);" MC(VP+) TO "; MID$ (U$(I),SB,2)
47034 IF V = 0 THEN RETURN
47039 REM SET XT&YT TO SHIPS POSITION 1 TURN FROM NOW ??????
47040 T = I: GOSUB 41000: REM MOVE TO INTERCEPT
47050 RETURN
48000 U$ = LEFT$ (U$,SY - 1) + "I" + RIGHT$ (U$,S9 - SY):U$(U) = U$: REM MODE=INTERCEPT
48010 T = 0:AB = US% - 1: REM ANYBODY STOPPED ?
48020 IF UX(T) = 69000 THEN 48040
48030 I = VAL ( MID$ (U$(T),SV,2)): IF I < 5 THEN 48060: REM YES !
48040 T = T + 1: IF T < = AB THEN 48020
48050 GOTO 48200: REM NOBODY STOPPED
48060 XT = UX(T):YT = UY(T): GOSUB 41000: REM MOVE TO INTERCEPT
48062 REM RINT MID$ (U$,SB,2);" INTERCEPTING STOPPED "; MID$ (U$(T),SB,2)
48070 IF XN(T) > 1500 THEN A$ = "3": GOTO 48100
48080 IF XN(T) > 1000 THEN A$ = "2": GOTO 48100
48090 A$ = "1"
48100 U$ = LEFT$ (U$,SZ - 1) + A$ + RIGHT$ (U$,S9 - SZ):U$(U) = U$: REM MODE COUNT=1 TO 3
48110 MO$(O) = "MU033" + MO$(O)
48120 GOTO 48299
48200 GOSUB 47000: REM MC(VP+)
48202 REM RINT MID$ (U$,SB,2);" MODE=INTERCEPTING VP+ "; MID$(U$(T),SB,2)
48210 GOTO 48070
48299 RETURN
49000 I = VAL ( MID$ (U$,SP,3)): REM I=MRR ** MU(RND) **
49010 J = INT (I * ( RND (1) + .2)): REM EXPECTED DIVE=70% OF MRR
49020 K = P + J:A$ = "000" + STR$ (K): IF K < 31 THEN K = 32:A$ = "0032"
49030 MO$(O) = "MU" + RIGHT$ (A$,3) + MO$(O)
49032 REM RINT "MU(RND) OLD=";P;" NEW=";K;" MRR=";I;" MDR="; MID$(U$,SO,3)
49040 RETURN
50000 C = VAL ( MID$ (U$,SZ,1)): REM COUNT DOWN I MODE ****
50010 C = C - 1: IF C < 1 THEN 50100
50020 A$ = "0" + STR$ (C):U$ = LEFT$ (U$,SZ - 1) + RIGHT$ (A$,1) + RIGHT$ (U$,S9 - SZ):U$(U) = U$
50022 REM RINT "INTERCEPT MODE CONTINUING"
50030 RETURN
50100 GOSUB 46000: REM MU(PER)
50110 U$ = LEFT$ (U$,SY - 1) + "A0" + RIGHT$ (U$,S9 - SY - 1):U$(U) = U$
50112 REM RINT "INTERCEPT MODE OVER"
50120 RETURN
51000 J = NE%:K = CO% - 1: REM BLANK ORDERS **
51010 FOR I = J TO K:MO$(I) = "":FO$(I) = "": NEXT : RETURN
60000 TEXT : REM SOLITAIRE **
60002 HOME : VTAB 12: HTAB 12: PRINT "OTTO VON COMPUTER": PRINT
60004 HTAB 6: PRINT "SIMULATED SUBMARINE COMMANDER": PRINT
60006 HTAB 6: PRINT "IS CRAFTILY MOVING HIS FLEET"
27263 MID$ RETURN
63001 REM PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
63002 REM PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment