10 REM SHIP SYSTEM MANAGER BY D10D3 2020 20 SCREEN 0,0:CLS:LOCATE 10,3:PRINT"INITIALIZING"; 30 GOSUB 1590 'LOAD SYSTEM ARRAY 40 LCHK = PEEK(64082!)'REM CHECK LINE 50 IF LCHK=187 THEN GOTO 90 60 CLEAR256,62138! 70 FORX=62139!TO62335!:READA:POKEX,A:NEXTX 80 POKE 64082!,187:POKE 64083!,242 90 'FILL CARGO ARRAY 100 OPEN "CARGO.DO" FOR INPUT AS #1 110 DIM CN$(30) 120 DIM CT%(30) 130 DIM CC%(30) 160 FOR I=1TO30 180 IF NOT EOF(1) THEN INPUT#1,A$ ELSE GOTO 500 190 CN$(I)=A$ 191 IF NOT EOF(1) THEN INPUT#1,A$ ELSE GOTO 500 192 CT%(I)=VAL(A$) 193 IF NOT EOF(1) THEN INPUT#1,A$ ELSE GOTO 500 194 CC%(I)=VAL(A$) 210 NEXT I 220 CLOSE #1 230 FUEL% = CT%(1) 500 '*** MAIN MENU *** 510 CLS 520 LINE (111,2)-(118,31),1,B 530 LINE (118,11)-(209,11) 540 LINE (209,2)-(216,31),1,B 550 LINE (118,24)-(133,33) 560 LINE (209,24)-(194,33) 570 LINE (133,33)-(150,51) 580 LINE (194,33)-(177,51) 590 LINE (148,11)-(148,49) 600 LINE (178,11)-(178,49) 610 LINE (150,51)-(157,51) 620 LINE (177,51)-(170,51) 630 LINE (157,51)-(159,54) 640 LINE (170,51)-(168,54) 650 LINE (159,7)-(168,62),1,B 660 LINE (133,11)-(133,33) 670 LINE (194,11)-(194,33) 680 LINE (161,52)-(166,58),1,B 690 LINE (159,22)-(168,31),1,B 700 LOCATE 0,0:PRINT"SYSTEMS ONLINE" 710 LOCATE 0,4:PRINT"N: NAVIGATION"; 720 LOCATE 0,5:PRINT"C: CARGO MANAGER"; 730 LOCATE 0,6:PRINT"Q: QUIT"; 740 I$=INPUT$(1) 750 IF I$="N" THEN GOTO 1080 760 IF I$="C" THEN GOTO 2000 770 IF I$="Q" THEN GOTO 11000 780 GOTO 500 1080 ' *** NAVIGATION SYSTEM *** 1090 S$ = "A" 1100 GOSUB 1320 :REM SYSTEM LIST S$ 1110 PRINT"A(SHOW A-L) M(SHOW M-Z) #(SELECTION)" 1120 INPUT"ENTER ORIGIN";B$ 1130 GOSUB 1930 :REM SOUND 1140 IF B$ = "A" THEN S$ = "A" 1150 IF B$ = "M" THEN S$ = "M" 1160 IF B$ = "A" OR B$ = "M" THEN GOTO 1100 1170 ELSE 1180 GOSUB 1540 :REM SYSTEM COORDS 1190 OX=IX:OY=IY:OZ=IZ 1200 S$ = "A" 1210 GOSUB 1320 :REM SYSTEM LIST S$ 1220 PRINT"A(SHOW A-L) M(SHOW M-Z) #(SELECTION)" 1230 INPUT"ENTER DESTINATION";B$ 1240 GOSUB 1930 :REM SOUND 1250 IF B$ = "A" THEN S$ = "A" 1260 IF B$ = "M" THEN S$ = "M" 1270 IF B$ = "A" OR B$ = "M" THEN GOTO 1210 1280 ELSE 1290 GOSUB 1540 :REM SYSTEM COORDS 1300 DX=IX:DY=IY:DZ=IZ 1310 GOTO 1680 :REM TRAVEL CALC 1320 REM SYSTEM LIST S$ 1330 IF S$ = "A" THEN GOSUB 1360 1340 IF S$ = "M" THEN GOSUB 1450 1350 RETURN 1360 PRINT CHR$(12) 1370 LOCATE 0,0 1380 PRINT"1.Abbadon 7.Chelsea 13.Lungold" 1390 PRINT"2.Achamandra 8.Colossus" 1400 PRINT"3.Avatar 9.Cornwall" 1410 PRINT"4.Azrael 10.Enlas-Dhu" 1420 PRINT"5.Beehive 11.Estremerine" 1430 PRINT"6.Cenotaph 12.Fiobrachne" 1440 RETURN 1450 PRINT CHR$(12) 1460 LOCATE 0,0 1470 PRINT"14.Medusa 20.Shiva" 1480 PRINT"15.Monolith 21.Sunrise" 1490 PRINT"16.Moonjam 22.Tara" 1500 PRINT"17.Phoenix Nebula 23.Timos" 1510 PRINT"18.Rhad 24.Videga" 1520 PRINT"19.Sheol 25.Winterjewel" 1530 RETURN 1540 REM SYSTEM COORDS 1550 IX=SYSTEMS%(VAL(B$),1) 1560 IY=SYSTEMS%(VAL(B$),2) 1570 IZ=SYSTEMS%(VAL(B$),3) 1580 RETURN 1590 REM LOAD SYSTEM ARRAY 1600 DIM SYSTEMS%(25,3) 1610 FOR I=1 TO 25: 1620 FOR J=1 TO 3 1630 READ D 1640 SYSTEMS%(I,J)=D 1650 NEXT J 1660 NEXT I 1670 RETURN 1680 REM TRAVEL CALC 1690 DIST = SQR(ABS(OX-DX)^2 + ABS(OY-DY)^2 + ABS(OZ-DZ)^2 ) 1700 GOSUB 1800 :REM DISPLAY MAP 1710 A$ = "##.#" 1720 LOCATE 20,0:PRINT"DISTANCE:"; 1730 PRINT USING A$; DIST; 1740 LOCATE 20,1:PRINT"DAYS:";:PRINT USING A$; DIST; 1750 GOSUB 1930 :REM Sound 1760 LOCATE 20,2:PRINT"FUEL USED:";:PRINT USING A$; DIST*2; 1762 LOCATE 20,4:PRINT"Execute Flight";:LOCATE 20,5:INPUT"Plan?(Y/N)";B$ 1764 IF B$="Y" THEN GOSUB 2510 1770 LOCATE 20,5:INPUT"ANOTHER(Y/N) ";B$ 1780 IF B$="Y" THEN GOTO 1080 1790 GOTO 500 :REM END 1800 REM DISPLAY MAP 1810 PRINT CHR$(12) 1820 LINE(0,0)-(81,0) 1830 LINE(0,63)-(81,63) 1840 LINE(0,0)-(0,63) 1850 LINE(81,0)-(81,63) 1860 FOR I = 1 TO 25 1870 PSET(SYSTEMS%(I,1)*2,SYSTEMS%(I,2)*2) 1880 NEXT I 1890 P1=OX*2:P2=OY*2 1900 P3=DX*2:P4=DY*2 1910 LINE(P1,P2)-(P3,P4) 1920 RETURN 1930 REM SOUND 1940 FOR I=1TO4 1950 P=900+(RND(1)*10000) 1960 T=5 1970 SOUND P,T 1980 NEXT I 1990 RETURN 2000 '*** CARGO MANAGER *** 2160 PG=1:RW=7:SE=1 'PAGE,ROW,SELECT 2170 L=1:NS=1 'LINE,NEW SCREEN 2180 'MAIN LOOP 2190 IF NS=0 THEN GOTO 2290 2200 CLS 2210 LOCATE 0,0:PRINT"NAME TON COST" 2220 FOR I=PG TO PG+5 2230 LOCATE 1,L:PRINT CN$(I);: 2240 LOCATE 30,L:PRINT CT%(I); 2250 LOCATE 35,L:PRINT CC%(I); 2260 L=L+1:IF L>6 THEN L=1 2270 NEXT I 2280 LOCATE 0,7:PRINT"SELECT:U/D PAGE:L/R EDIT:ENT QUIT:ESC"; 2290 LINE (0,0+RW)-(175,8+RW),1,B 2300 I$=INPUT$(1) 2310 LINE (0,0+RW)-(175,8+RW),C,B 2320 IF I$=CHR$(27) OR I$="Q" OR I$="q" THEN GOTO 2500'ESCAPE 2330 IF I$=CHR$(28) THEN PG=PG+6:SE=SE+6:NS=1'RIGHT 2340 IF I$=CHR$(29) THEN PG=PG-6:SE=SE-6:NS=1'LEFT 2350 IF I$=CHR$(30) THEN RW=RW-8:NS=0:SE=SE-1'UP 2360 IF I$=CHR$(31) THEN RW=RW+8:NS=0:SE=SE+1'DOWN 2370 'IF I$=CHR$(32) THEN 'SPACE 2380 IF I$<>CHR$(13) THEN GOTO 2430'ENTER 2390 NS=1: IF SE=1 THEN GOTO 2410 2400 GOSUB 2480:INPUT"NAME";A$:CN$(SE)=A$ 2410 GOSUB 2480:INPUT"TONS:";A$:CT%(SE)=VAL(A$):FUEL%=VAL(A$) 2420 GOSUB 2480:INPUT"COST:";A$:CC%(SE)=VAL(A$) 2430 IF SE>30 THEN SE=30!SLE IF SE<1 THE SE=1 2440 IF PG>25 THEN PG=25 ELSE IF PG<1 THEN PG=1 2450 IF RW>47 THEN RW=47 ELSE IF RW<7 THEN RW=7 2460 IF SE>PG+5 THEN SE=PG+5 2470 GOTO 2180 2480 LOCATE 0,7:PRINT" "; 2490 LOCATE 0,7:RETURN 2500 GOTO 500 2510 IF DIST*2 > FUEL% THEN LOCATE 20,4:PRINT"INSUFFICIENT FUEL";:LOCATE 20,5:INPUT"";B$ 2520 IF DIST*2 < FUEL% THEN FUEL% = FUEL% - (DIST*2):CT%(1)=FUEL% 2530 RETURN 10000 REM SYSTEM COORDS 10010 DATA 21,20,17,13,18,10,15,24,15,12,5,8 10020 DATA 19,4,8,36,17,7,15,27,12,5,17,13 10030 DATA 4,25,6,32,15,11,22,6,10,21,1,14 10040 DATA 7,19,7,8,14,12,20,16,10,19,12,13 10050 DATA 24,17,20,18,20,13,5,4,6,20,29,9 10060 DATA 7,11,10,29,11,13,24,22,9,21,15,16,26,13,15 10070 REM LINE ROUTINE DATA 10080 DATA 193,254,244,235,42,250,243,235,196,118 10090 DATA 31,213,207,244,205,118,31,213,17,208 10100 DATA 116,202,234,242,213,207,44,254,44,209 10110 DATA 202,232,242,213,205,227,19,209,15,218 10120 DATA 232,242,17,209,116,43,215,235,34,102 10130 DATA 243,235,202,40,243,207,44,207,66,202 10140 DATA 18,243,207,70,209,227,123,149,210,5 10150 DATA 243,47,60,107,71,4,93,205,47,243 10160 DATA 44,5,194,7,243,225,201,209,227,213 10170 DATA 93,205,47,243,209,213,84,205,47,243 10180 DATA 209,229,98,205,47,243,225,107,1,209 10190 DATA 227,205,47,243,225,201,229,213,197,125 10200 DATA 147,210,58,243,235,47,60,71,14,20 10210 DATA 124,146,210,69,243,47,60,12,184,218 10220 DATA 80,243,103,104,62,28,195,85,243,111 10230 DATA 96,121,14,28,50,120,243,121,50,107 10240 DATA 243,68,4,124,167,31,79,229,213,197 10250 DATA 205,209,116,193,209,225,20,121,133,79 10260 DATA 218,118,243,188,218,121,243,148,79,28 10270 DATA 5,194,98,243,195,94,25 11000 CLS 11010 INPUT "SAVE? (Y/N)";A$ 11020 IF A$<>"Y" AND A$<>"y" THEN GOTO 11110 11030 PRINT "SAVING..." 11040 OPEN "CARGO.DO" FOR OUTPUT AS #1 11050 FOR I=1TO30 11060 PRINT#1,CN$(I) 11070 PRINT#1,CT%(I) 11080 PRINT#1,CC%(I) 11090 NEXT I 11100 CLOSE 11110 END