Listing of file='TREK32.BAS;01' on disk='vmedia/final_frontier_startrek-sector.ccvf'
10 REM THE FINAL FRONTIER-- NON-ADVENTURE VERSION 15 PLOT 12,15,6,2 20 POKE 32940,255:POKE 32941,239 25 CLEAR 300:N= 33283:POKE N,0:POKE 33284,251 30 PLOT 27,4:PRINT "LOAD MACH32.PRG":PLOT 27,27 35 CC= 6:A$= CHR$ (CC+ 16):GOSUB 270:GOTO 2945 40 REM SCROLL 45 LN= LN+ 1:IF LN< 31THEN PLOT 3,8,LN:RETURN 50 Y= CALL (0):PLOT 3,8,30:PRINT SPC( 41)"":PLOT 3,8,30:RETURN 55 REM FIND OPEN SECTOR 60 X1= FN R(10):X2= FN R(10) 65 IF Q(X1,X2)< > 1THEN 60 70 RETURN 75 REM SHIP TO NEW SECTOR 80 S1= FN R(10):S2= FN R(10) 85 IF Q(S1,S2)< > 1THEN 80 90 RETURN 95 REM VIEW 100 TF= 0 105 POKE N,0:IF VFTHEN VF= 0:RETURN 110 GOSUB 45:INPUT "VIEW DIRECTION (0 TO EXIT): ";X$:VC= C 115 C= VAL (X$):IF C= 0THEN C= VC:GOTO 785 120 IF C< 1OR C> = 9THEN GOSUB 45:PRINT "INVALID ENTRY":GOTO 110 125 TF= TF+ .02:IF TF> .1THEN GOSUB 2285:GOTO 785 130 GOSUB 450:X= S1:Y= S2:REM VIEW SR ENTRY 135 X= X+ X1:Y= Y+ X2 140 IF X< .5OR X> 10.5THEN GOSUB 240:GOTO 105 145 IF Y< .5OR Y> 10.5THEN GOSUB 240:GOTO 105 150 X3= INT (X+ .5):X4= INT (Y+ .5):V= Q(X3,X4) 155 IF V= 1GOTO 135 160 DX= SQR ((X4- S2)^ 2+ (X3- S1)^ 2):DX= INT ((DX+ 2)/ 3) 165 V1= X3:V2= X4 170 VV= V- 2:POKE N,32 175 IF VV= 5AND DX= 1THEN K= 63060:Z= CALL (K):GOTO 190 180 IF VV= 5THEN GOSUB 240:GOTO 105 185 ON DXGOSUB 235,230,200,195 190 PLOT 6,CC:GOTO 105 195 GOSUB 240:PLOT 6,CV(VV),3,31,8,2,254,12,255:RETURN 200 GOSUB 240:PLOT 3,31,8 205 IF VV= 1THEN PRINT "d":RETURN 210 IF VV= 2THEN PRINT "j":RETURN 215 IF VV= 3THEN PRINT "s":RETURN 220 IF VV= 4THEN PRINT "p" 225 RETURN 230 K= 61440+ (VV- 1)* 180:Z= CALL (K):RETURN 235 K= 61440+ (VV+ 3)* 180:Z= CALL (K):RETURN 240 POKE N,32:K= 62880:Z= CALL (K):POKE N,0:RETURN :REM STARS 245 REM PHASER EXPLOSION 250 IF V1< > V3OR V2< > V4OR PFTHEN RETURN 255 V3= 0:V4= 0:EX= 49:GOSUB 460 260 RETURN 265 REM PRINT SCREEN 270 PLOT 6,CC:L$= "ggggggggggggg":M$= "ggggggggggggggg" 275 PLOT 3,48,0:PRINT M$ 280 PLOT 3,50,2:PRINT "ggggggggggg" 285 PLOT 3,51,4:PRINT "gggggggggg" 290 PLOT 3,51,15:PRINT "eeeeeeeeee" 295 PLOT 3,48,17:PRINT "QUADRANT:" 300 PLOT 3,48,18:PRINT M$ 305 PLOT 3,48,19:PRINT "L.R.SENSOR SCAN":PRINT M$ 310 PLOT 3,48,20:PRINT M$ 315 PLOT 3,0,24:PRINT " 4 3 2":PLOT 3,49,24:PRINT L$ 320 PRINT " |n~" 325 PRINT " 5g`g1":PLOT 3,49,26:PRINT L$ 330 PRINT " ~n|" 335 PRINT " 6 7 8":PLOT 3,49,28:PRINT L$ 340 PRINT :PRINT "COURSE":PLOT 3,49,30:PRINT L$ 345 PLOT 27,10,3,6,21:PRINT "nnnnnnnnnn":PLOT 27,11 350 PLOT 3,48,1:PRINT "S.R.SENSOR SCAN" 355 FOR I= 0TO 2STEP 2:PLOT 3,48,I:PRINT M$:NEXT I 360 PLOT 2,32,50,242,32,117,93,117,93,50,32,50,255 365 PLOT 3,51,3:PRINT "1234567890" 370 PLOT 27,10,3,49,5:PRINT "1234567890" 375 PLOT 3,50,3:PRINT "nnnnnnnnnnnn":PLOT 3,61,3:PRINT "mmmmmmmmmmmm":PLOT 27,11,27,24 380 FOR I= 24TO 30STEP 2:FOR J= 49TO 61STEP 4:PLOT 3,J,I,110:NEXT J,I 385 PLOT 3,0,31:PRINT "" 390 RETURN 395 REM FORMAT 400 PRINT 405 Y$= " ":X= L- LEN (Z$):IF X< = 0THEN X$= "":Z$= X$+ Z$:RETURN 410 X$= LEFT$ (Y$,X):Z$= X$+ Z$:RETURN 415 REM SET DISPLAY COLOR 420 IF CD< > 1AND CC< > 6THEN CC= 6:A$= CHR$ (CC+ 16):B$= CHR$ (19):GOSUB 270 425 C$= "````":IF CD= 1THEN C$= "````":CC= 4:A$= CHR$ (CC+ 16):B$= CHR$ (17):GOSUB 270 430 IF CD= - 1THEN C$= "" 435 IF CD= 0THEN C$= "DOCK" 440 RETURN 445 REM TRIG SECTION 450 X1= - SIN ((C- 1)* .785398):X2= COS ((C- 1)* .785398):RETURN 455 REM EXPLOSION 460 PLOT 6,EX:X= 63:Y= 63:Z= 91:XX= 91 465 FOR K= 1TO 12 470 PLOT 2,X,Z,242,Y,Z,Y,XX,X,XX,X,Z,255 475 X= X- 1:Z= Z+ 1:Y= Y+ 1:XX= XX- 1 480 NEXT K:PLOT 6,CC:GOSUB 240:V= 1:RETURN 485 REM FLASH 490 POKE N,128:Z= CALL (0) 495 POKE N,176:FOR K= 1TO 5:Z= CALL (0):NEXT K 500 POKE N,80:Z= CALL (0):POKE N,0:RETURN 505 REM ERASE VIEW 510 Z$= " " 515 FOR K= 3TO 18:PLOT 3,17,K:PRINT Z$:NEXT K:RETURN 520 REM ERASE SCROLL 525 FOR K= 21TO 30:PLOT 3,7,K:PRINT TAB( 42)"":NEXT K:LN= 20:RETURN 530 REM ERASE SR 535 Z$= " " 540 FOR K= 5TO 14:PLOT 3,51,K:PRINT Z$:NEXT K:RETURN 545 REM TEST BASE CURRENT QUAD 550 FOR X3= 1TO 10:FOR X4= 1TO 10:IF Q(X3,X4)= 4THEN BF= 1:GOSUB 2050:RETURN 555 NEXT X4,X3:RETURN 560 REM SET QUAD. 565 IF WF= 1THEN WF= 0:GOSUB 2885 570 IF N2= 0THEN 2560 575 N6= INT (INT (G(Q1,Q2))/ 1000) 580 N5= INT (INT (G(Q1,Q2))/ 100)- N6* 10 585 N4= INT (INT (G(Q1,Q2))/ 10)- N6* 100- N5* 10 590 N7= INT (G(Q1,Q2))- N6* 1000- N5* 100- N4* 10 595 B8= - 1:B9= - 1:F9= - 1 600 FOR I= 1TO 10:FOR J= 1TO 10:Q(I,J)= 1:NEXT J:NEXT I 605 Q(S1,S2)= 2:IF WF= 1THEN WF= 0:GOSUB 2885 610 IF N5+ N6= 0THEN 675 615 GOSUB 45:PRINT "DEFLECTORS ACTIVATING RED ALERT":CD= 1:GOSUB 420:REM 620 IF N5= 0THEN 650 625 GOSUB 45:PRINT "SENSORS SHOW";N5;" KLINGON(S)." 630 FOR I= 1TO N5 635 GOSUB 60 640 K(I,1)= X1:K(I,2)= X2:K(I,3)= 175+ RND (1)* 51:Q(X1,X2)= 5 645 NEXT I 650 IF N6= 0THEN 675 655 FOR I= 1TO N6 660 GOSUB 60 665 R(I,1)= X1:R(I,2)= X2:R(I,3)= 175+ RND (1)* 51:Q(X1,X2)= 6 670 NEXT I 675 IF N7= 0THEN 685 680 FOR I= 1TO N7:GOSUB 60:Q(X1,X2)= 3:NEXT I 685 IF N4= 0THEN 705 690 IF CD= 0THEN 705 695 GOSUB 60 700 Q(X1,X2)= 4:B9= X1:B8= X2 705 IF G(Q1,Q2)- INT (G(Q1,Q2))< .09THEN 720 710 GOSUB 60 715 Q(X1,X2)= 7 720 Q8= E4:Q9= E3 725 VF= 1:GOSUB 130:GOSUB 2285 730 REM S.R. SCAN 735 CD= 2 740 IF INT (G(Q1,Q2)/ 100)> 0THEN CD= 1 745 IF N4= 0OR F9< > 1THEN 760 750 CD= 0:P= G0+ 3:E2= 300 755 REM PRINT QUAD. MAP 760 GOSUB 420:IF H(2)< = 0THEN 775 765 GOSUB 45:PRINT B$+ "S.R. SCAN DOWN"+ A$:GOSUB 535 770 GOTO 785 775 FOR I= 1TO 10:PLOT 6,CC- 3,3,51,I+ 4 780 FOR J= 1TO 10:PRINT Q$(Q(I,J));:NEXT J:PRINT "":NEXT I 785 PLOT 6,CC,3,16,1:PRINT TAB( 31)"" 790 PLOT 3,16,1:PRINT "STARDATE";INT (T* 100)/ 100 795 PLOT 3,32,1:PRINT "/YRS LEFT";INT ((T0- T)* 10)/ 10 800 PLOT 3,57,17:PRINT " ":PLOT 3,57,17:PRINT Q1;" -";Q2 805 PLOT 8:FOR K= 0TO 19:PRINT TAB( 16)"":NEXT K 810 XX= CD:IF CD< 1THEN XX= 6 815 PLOT 14,8:PRINT " CONDITION:";:PLOT 6,XX:PRINT C$:PRINT 820 L= 7:Z$= STR$ (INT (E4)):GOSUB 405:PRINT A$+ " SHIELDS"+ B$;Z$ 825 Z$= STR$ (INT (E3)):GOSUB 400:PRINT A$+ " PHASERS"+ B$;Z$ 830 L= 3:Z$= STR$ (P):GOSUB 400:PRINT A$+ " PHOTON TORP"+ B$;Z$ 835 L= 6:Z$= STR$ (INT (E1)):GOSUB 400:PRINT A$+ " WARP PWR"+ B$;Z$ 840 L= 7:Z$= STR$ (INT (E2)):GOSUB 400:PRINT A$+ " IMPULSE"+ B$;Z$ 845 L= 6:Z$= STR$ (N2):GOSUB 400:PRINT A$+ " KLINGONS"+ B$;Z$ 850 Z$= STR$ (N3):GOSUB 400:PRINT A$+ " ROMULANS"+ B$;Z$ 855 L= 4:Z$= STR$ (N1):GOSUB 400:PRINT A$+ " STAR BASES"+ B$;Z$ 860 L= 7:Z$= STR$ (INT (P4/ (T- T8)* 100)):GOSUB 400:PRINT A$+ " RATING "+ B$;Z$:PLOT 6,CC 865 IF E1< 300THEN GOSUB 45:PRINT "WARP ENERGY LOW!":PLOT 6,CC:CD= 3 870 T8= T9 875 IF T- T9> 0THEN 885 880 T8= T- 1 885 T= T+ TF:H(5)= H(5)- TF/ 2:IF H(5)< 0THEN H(5)= 0 890 IF T> T0THEN 2520 895 IF T2= TTHEN 955 900 R9= RND (1) 905 E1= E1+ 225* (T- T2) 910 T2= T 915 FOR H2= 1TO 4:H1= H(H2)- R9:H(H2)= H1* ((SGN (H1)+ 1)/ 2):NEXT H2 920 H1= FN R(20) 925 IF H1> = 5THEN 935 930 H(H1)= H(H1)+ RND (1) 935 IF B0> 0THEN 950 940 IF RND (1)< .88THEN 955 945 B0= FN R(3) 950 GOSUB 2745:IF BF= 1THEN BF= 0:GOTO 735 955 TF= 0:GOSUB 45:INPUT "COMMAND: ";Y$ 960 FOR I= 1TO 13:IF D$(I)= Y$THEN 975 965 NEXT I 970 GOSUB 45:PRINT "INVALID COMMAND":GOTO 955 975 ON IGOTO 990,1055,1460,1850,2645,1350,735,3350,2175,2675,100,2690,3445 980 REM CMDS:W I P T G L S C A D V Q SAVE 985 REM WARP 990 GOSUB 45:INPUT "COURSE: ";X$:C= VAL (X$) 995 IF C< 1OR C> = 9THEN 885 1000 GOSUB 45:INPUT "WARP FACTOR: ";X$:W= VAL (X$) 1005 IF W< 1OR W> 8THEN 885 1010 W0= W/ 8 1015 IF H(5)> 0THEN GOSUB 45:PRINT "WARP ENGINES OVERHEATED":GOTO 885 1020 GOSUB 2850:WF= 1:X5= INT (W* 10) 1025 IF E1< = 10* X5THEN 1085 1030 E1= E1- 10* X5 1035 TF= SQR (W) 1040 H(5)= H(5)+ W0* RND (1)* 5 1045 GOTO 1105 1050 REM IMPULSE 1055 GOSUB 45:INPUT "COURSE: ";X$:C= VAL (X$) 1060 IF C< 1OR C> = 9THEN 885 1065 GOSUB 45:INPUT "IMPULSE FACTOR: ";X$:W= VAL (X$) 1070 IF W< 1OR W> 9THEN 885 1075 X5= INT (W):W= W/ 10 1080 IF E2> = 5* X5THEN 1095 1085 GOSUB 45:PRINT "INSUFFICIENT POWER TO MOVE":IF WF= 1THEN GOSUB 2900 1090 GOTO 885 1095 E2= E2- 5* X5:TF= SQR (W)/ 1.5 1100 REM COMMON MOVE MODULE 1105 W0= 0 1110 Q(S1,S2)= 1:F9= - 1 1115 CD= - 1 1120 IF T> T0THEN 2520 1125 X= S1:Y= S2 1130 GOSUB 450 1135 FOR I= 1TO X5 1140 S1= S1+ X1:S2= S2+ X2 1145 IF S1< .5OR S1> 10.5THEN 1255 1150 IF S2< .5OR S2> 10.5THEN 1255 1155 X6= INT (S1+ .5):X7= INT (S2+ .5) 1160 IF Q(X6,X7)< > 7THEN 1195 1165 GOSUB 45:PRINT "ENTERPRISE WARPED INTO A BLACK HOLE" 1170 REM MOVE SHIP TO NEW SPOT 1175 Q1= FN R(G0):Q2= FN R(G0) 1180 IF G(Q1,Q2)- INT (G(Q1,Q2))< .09THEN 1175 1185 S1= FN R(10):S2= FN R(10) 1190 GOTO 565 1195 IF Q(X6,X7)< > 1THEN 1240 1200 IF INT (ABS (X6- B9)+ .5)> 1THEN 1255 1205 IF INT (ABS (X7- B8)+ .5)> 1THEN 1255 1210 GOSUB 45:INPUT "DO YOU WISH TO DOCK? ";X$:X$= LEFT$ (X$,1) 1215 IF X$= "Y"AND WF= 1THEN GOSUB 2900:GOTO 1235 1220 IF X$= "Y"THEN 1235 1225 IF X$= "N"THEN 1255 1230 GOTO 1210 1235 CD= 0:F9= 1:S1= X6:S2= X7:FOR K= 1TO 5:H(K)= 0:NEXT :GOTO 1275 1240 GOSUB 45:PRINT "ENTERPRISE BLOCKED BY OBJECT AT";X6;" -";X7 1245 IF WFTHEN W= 0:GOSUB 2885:GOSUB 80:GOTO 1260 1250 S1= S1- X1:S2= S2- X2:GOTO 1260 1255 NEXT I 1260 S1= INT (S1+ .5):S2= INT (S2+ .5) 1265 I9= 0 1270 IF W> .9THEN 1285 1275 I9= 1 1280 REM SECTOR ADJUST 1285 IF S1< = 0THEN S1= S1+ 10:I9= 0:Q1= Q1- 1:GOTO 1285 1290 IF S1> = 11THEN S1= S1- 10:I9= 0:Q1= Q1+ 1:GOTO 1290 1295 IF S2< = 0THEN S2= S2+ 10:I9= 0:Q2= Q2- 1:GOTO 1295 1300 IF S2> = 11THEN S2= S2- 10:I9= 0:Q2= Q2+ 1:GOTO 1300 1305 REM QUAD. ADJUST 1310 IF Q1< = 0THEN Q1= Q1+ G0:I9= 0:GOTO 1310 1315 IF Q1> = G1THEN I9= 0:Q1= Q1- G0:GOTO 1315 1320 IF Q2< = 0THEN Q2= Q2+ G0:I9= 0:GOTO 1320 1325 IF Q2> = G1THEN I9= 0:Q2= Q2- G0:GOTO 1325 1330 IF I9= 0THEN 565 1335 Q(S1,S2)= 2 1340 GOTO 720 1345 REM L.R. SCAN 1350 PLOT 3,49,21:PRINT SPC( 15)"":PLOT 3,49,23:PRINT SPC( 15)"" 1355 IF H(3)> 0THEN PLOT 3,51,21:PRINT "ION STORM":PLOT 3,49,23:PRINT "PREVENTS SCAN"+ A$:GOTO 1440:REM 1360 PLOT 3,57,17:PRINT " ":PLOT 3,57,17:PRINT Q1;" -";Q2 1365 TF= .4:K= 25 1370 FOR I= Q1- 1TO Q1+ 1:X1= I 1375 FOR J= Q2- 1TO Q2+ 1:X2= J 1380 IF X1< = 0THEN X1= X1+ G0 1385 IF X1> = G1THEN X1= X1- G0 1390 IF X2< = 0THEN X2= X2+ G0 1395 IF X2> = G1THEN X2= X2- G0 1400 X3= INT (G(X1,X2)/ 1000) 1405 Z= INT (G(X1,X2))- X3* 1000 1410 X= INT (Z/ 100):Z= Z- 100* X 1415 Y= INT (Z/ 10):Z= Z- 10* Y 1420 N$(J- Q2+ 2)= ""+ STR$ (X)+ RIGHT$ (STR$ (Y),1)+ RIGHT$ (STR$ (Z),1)+ A$:REM 1425 NEXT J 1430 PLOT 3,49,K:PRINT N$(1);N$(2);N$(3):PRINT 1435 K= K+ 2:NEXT I 1440 IF CD< > 1THEN 735 1445 GOSUB 2285 1450 GOTO 785 1455 REM PHASERS 1460 TF= .25:PF= 0:IF H(4)> 0THEN GOSUB 45:PRINT "PHASER CONTROL DAMAGED":GOTO 2105 1465 IF N5+ N6> 0THEN 1480 1470 GOSUB 45:PRINT "TARGETS UNAVAILABLE" 1475 GOTO 885 1480 GOSUB 45:PRINT "LOCKED ON--ENERGY AVAILABLE:";E3:PLOT 6,CC:REM 1485 GOSUB 45:INPUT "UNITS TO FIRE: ";X$:XA= VAL (X$) 1490 IF E3> = XATHEN 1505 1495 GOSUB 45:PRINT "INSUFFICIENT POWER" 1500 GOTO 1830 1505 IF XA< 1THEN 885 1510 GOSUB 45:PRINT "PHASERS FIRING":IF V< 5OR V> 6THEN PF= 1:GOTO 1540 1515 POKE N,128:Z= CALL (0) 1520 FOR J= 1TO 6:PLOT 6,6 1525 PLOT 2,34,66,242,62,94,255,2,91,66,242,63,94,255 1530 PLOT 6,0,2,34,66,242,62,94,255,2,91,66,242,63,94,255 1535 NEXT J:POKE N,80:Z= CALL (0):POKE N,0:PLOT 6,CC 1540 E3= E3- XA 1545 L= 1 1550 IF N5= 0THEN 1690 1555 FOR I= 1TO N5 1560 IF K(I,3)< = 0THEN 1685 1565 IF SQR ((S1- K(I,1))^ 2+ (S2- K(I,2))^ 2)> 3THEN 1650 1570 REM DISTANCE <=3 1575 IF XA< K(I,3)THEN 1625 1580 XA= XA- K(I,3) 1585 V3= K(I,1):V4= K(I,2):GOSUB 250:GOSUB 45:PRINT "KLINGON: SECTOR";K(I,1);" -";K(I,2);" DESTROYED" 1590 P4= P4+ 1.25 1595 K(I,3)= 0 1600 Q(K(I,1),K(I,2))= 1:VF= 1:GOSUB 130 1605 N2= N2- 1 1610 IF N2= 0THEN 2560 1615 G(Q1,Q2)= G(Q1,Q2)- 100 1620 GOTO 1685 1625 GOSUB 45:PRINT INT (XA);" UNIT HIT ON KLINGON: SECTOR";K(I,1);" -";K(I,2) 1630 K(I,3)= K(I,3)- XA 1635 XA= 0 1640 GOTO 1830 1645 REM >3 1650 IF L= 1THEN 1685 1655 XB= K(I,3)* (SQR ((S1- K(I,1))^ 2+ (S2- K(I,2))^ 2)/ 3)^ 2 1660 IF XA< XBTHEN 1675 1665 XA= XA- XB 1670 GOTO 1585 1675 XA= XA/ (SQR ((S1- K(I,1))^ 2+ (S2- K(I,2))^ 2)/ 3)^ 2 1680 GOTO 1625 1685 NEXT I 1690 IF XA< = 0THEN 1830 1695 IF N6= 0THEN 1815 1700 FOR I= 1TO N6 1705 IF R(I,3)< = 0THEN 1810 1710 IF SQR ((S1- R(I,1))^ 2+ (S2- R(I,2))^ 2)> 3THEN 1775 1715 REM <=3 1720 IF XA< R(I,3)THEN 1755 1725 XA= XA- R(I,3) 1730 V3= R(I,1):V4= R(I,2):GOSUB 250:GOSUB 45:PRINT "ROMULAN: SECTOR";R(I,1);" -";R(I,2);" DESTROYED" 1735 P4= P4+ .75 1740 R(I,3)= 0:Q(R(I,1),R(I,2))= 1:N3= N3- 1:VF= 1:GOSUB 130 1745 G(Q1,Q2)= G(Q1,Q2)- 1000 1750 GOTO 1810 1755 GOSUB 45:PRINT INT (XA);" UNIT HIT ON ROMULAN: SECTOR";R(I,1);" -";R(I,2) 1760 R(I,3)= R(I,3)- XA:XA= 0 1765 GOTO 1830 1770 REM >3 1775 IF L= 1THEN 1810 1780 XB= R(I,3)* ((SQR ((S1- R(I,1))^ 2+ (S2- R(I,2))^ 2))/ 3)^ 2 1785 IF XA< XBTHEN 1800 1790 XA= XA- XB 1795 GOTO 1730 1800 XA= XA/ ((SQR ((S1- R(I,1))^ 2+ (S2- R(I,2))^ 2))/ 3)^ 2 1805 GOTO 1755 1810 NEXT I 1815 L= L+ 1:IF L< = 2GOTO 1550 1820 IF XA< 10THEN 1830 1825 GOSUB 45:PRINT "SPOCK REPORTS";INT (XA);" ENERGY UNITS WASTED" 1830 IF INT (G(Q1,Q2)/ 100)< = 0THEN 735 1835 GOSUB 2285 1840 GOTO 735 1845 REM TORPEDOS 1850 EX= 7:IF H(1)> 0THEN GOSUB 45:PRINT "TORPEDO TUBES DAMAGED":GOTO 2105 1855 TF= .25 1860 IF P< = 0THEN GOSUB 45:PRINT "TORPEDOES EXPENDED":GOTO 2105 1865 GOSUB 45:INPUT "COURSE: ";X$:C= VAL (X$) 1870 IF C< 1OR C> = 9THEN 885 1875 VF= 1:GOSUB 130:GOSUB 450 1880 X= S1:Y= S2:P= P- 1 1885 GOSUB 525:GOSUB 45:PRINT "TORPEDO AWAY--" 1890 POKE N,128:Z= CALL (0) 1895 XX= 21:FOR K= 18TO 8STEP - 1 1900 PLOT 3,127,XX,K,7,100:FOR Z= 1TO 20:NEXT Z 1905 PLOT 3,127,XX,K,0,100:PLOT 27,27 1910 XX= XX+ 1:NEXT K 1915 POKE N,80:Z= CALL (0):POKE N,0 1920 X= X+ X1:Y= Y+ X2 1925 IF X< .5OR X> 10.5THEN 2120 1930 IF Y< .5OR Y> 10.5THEN 2120 1935 X3= INT (X+ .5):X4= INT (Y+ .5) 1940 ON Q(X3,X4)GOTO 1920,2135,1950,2025,1970,2060 1945 GOSUB 45:PRINT "TORPEDO ABSORBED BY BLACK HOLE":GOTO 2105 1950 GOSUB 45:PRINT "TORPEDO DEFLECTED BY STAR" 1955 C= C+ FN R(9) 1960 GOSUB 450 1965 GOTO 1920 1970 GOSUB 460:GOSUB 45:PRINT "KLINGON: SECTOR";X3;" -";X4;" DESTROYED" 1975 P4= P4+ 1.25 1980 FOR I= 1TO N5 1985 IF K(I,1)< > X3THEN 2015 1990 IF K(I,2)< > X4THEN 2015 1995 K(I,3)= 0 2000 G(Q1,Q2)= G(Q1,Q2)- 100 2005 N2= N2- 1:IF N2= 0THEN 2560 2010 GOTO 2100 2015 NEXT I 2020 GOTO 2120 2025 GOSUB 45:PRINT "SIR, WHAT HAVE YOU DONE?!" 2030 P4= P4- 30 2035 IF V= 4THEN EX= 7:GOSUB 460 2040 GOSUB 45:PRINT "STARBASE: SECTOR";X3;" -";X4;" DESTROYED" 2045 G(Q1,Q2)= G(Q1,Q2)- 10 2050 N4= 0:F9= - 1:B8= - 1:B9= - 1:IF BF= 0THEN N1= N1- 1 2055 GOTO 2100 2060 GOSUB 460:GOSUB 45:PRINT "ROMULAN: SECTOR";X3;" -";X4;" DESTROYED" 2065 P4= P4+ .75 2070 FOR I= 1TO N6 2075 IF R(I,1)< > X3THEN 2095 2080 IF R(I,2)< > X4THEN 2095 2085 R(I,3)= 0:G(Q1,Q2)= G(Q1,Q2)- 1000:N3= N3- 1 2090 GOTO 2100 2095 NEXT I 2100 Q(X3,X4)= 1:VF= 1:GOSUB 130:IF BF= 1THEN RETURN 2105 IF INT (G(Q1,Q2)/ 100)< = 0THEN 735 2110 GOSUB 2285 2115 GOTO 735 2120 GOSUB 45:PRINT "TORPEDO MISSED" 2125 GOTO 2105 2130 REM TORPEDO CURVED BACK 2135 GOSUB 45:PRINT "CAPTAIN!! IT'S COMING BACK AT US!" 2140 PLOT 6,7:X= 62:Y= 62:Z= 84:XX= 84 2145 FOR K= 1TO 29 2150 PLOT 2,X,Z,242,Y,Z,Y,XX,X,XX,X,Z,255 2155 X= X- 1:Z= Z+ 1:Y= Y+ 1:XX= XX- 1 2160 NEXT K:PLOT 6,56,12,3,22,15:PRINT "YOU LOST THAT ONE" 2165 PLOT 6,2:FOR I= 1TO 1000:NEXT I:GOTO 2925 2170 REM ALLOCATE PWR 2175 GOSUB 45:INPUT "TAKE POWER FROM DEVICE: ";X$:X1= VAL (X$) 2180 GOSUB 45:INPUT "AND ALLOCATE TO DEVICE: ";X$:X2= VAL (X$) 2185 IF X2> X1THEN 2200 2190 GOSUB 45:PRINT "IMPOSSIBLE, CAPTAIN" 2195 GOTO 885 2200 IF X2> 3THEN 2190 2205 GOSUB 45:INPUT "UNITS TO TRANSFER: ";X$:X3= VAL (X$) 2210 ON X1GOTO 2215,2240 2215 IF E1> X3THEN 2230 2220 GOSUB 45:PRINT "INSUFFICIENT POWER" 2225 GOTO 885 2230 E1= E1- X3 2235 GOTO 2250 2240 IF X3> E3THEN 2220 2245 E3= E3- X3 2250 ON X2- 1GOTO 2255,2265 2255 E3= E3+ X3:Q9= Q9+ X3 2260 GOTO 2270 2265 E4= E4+ X3:Q8= Q8+ X3 2270 GOSUB 45:PRINT "TRANSFER COMPLETE" 2275 GOTO 785 2280 REM ENEMY ATTACK 2285 IF G(Q1,Q2)< = 99THEN 2510 2290 IF CD< > 0THEN 2345 2295 FOR I= 1TO 3 2300 IF B(I,1)< > B9THEN 2330 2305 IF B(I,2)< > B8THEN 2330 2310 IF B(I,3)> 200THEN 2330 2315 GOSUB 45:PRINT "STARBASE SHIELDS TOO WEAK" 2320 GOSUB 45:PRINT "TO PROTECT THE ENTERPRISE." 2325 GOTO 2345 2330 NEXT I 2335 GOSUB 45:PRINT "STARBASE SHIELDS PROTECT ENTERPRISE" 2340 GOTO 2510 2345 IF G(Q1,Q2)< = 99THEN 2510 2350 IF N5= 0THEN 2420 2355 POKE 64447,113:FOR I= 1TO N5 2360 IF K(I,3)< = 0THEN 2415 2365 IF SQR ((S1- K(I,1))^ 2+ (S2- K(I,2))^ 2)> 3THEN 2395 2370 E4= E4- K(I,3) 2375 GOSUB 490:GOSUB 45:PRINT INT (K(I,3));" UNIT HIT FROM"; 2380 PRINT " KLINGON: SECTOR";K(I,1);" -";K(I,2) 2385 IF E4< = 0THEN 2550 2390 GOTO 2415 2395 X1= K(I,3)/ ((SQR ((S1- K(I,1))^ 2+ (S2- K(I,2))^ 2))/ 3)^ 2 2400 E4= E4- X1 2405 GOSUB 490:GOSUB 45:PRINT INT (X1);" UNIT HIT FROM"; 2410 GOTO 2380 2415 NEXT I 2420 IF N6= 0THEN 2490 2425 POKE 64447,121:FOR I= 1TO N6 2430 IF R(I,3)< = 0THEN 2485 2435 IF SQR ((S1- R(I,1))^ 2+ (S2- R(I,2))^ 2)> 3THEN 2465 2440 E4= E4- R(I,3) 2445 GOSUB 490:GOSUB 45:PRINT INT (R(I,3));" UNIT HIT FROM"; 2450 PRINT " ROMULAN: SECTOR";R(I,1);" -";R(I,2) 2455 IF E4< = 0THEN 2550 2460 GOTO 2485 2465 X1= R(I,3)/ ((SQR ((S1- R(I,1))^ 2+ (S2- R(I,2))^ 2))/ 3)^ 2 2470 E4= E4- X1 2475 GOSUB 490:GOSUB 45:PRINT INT (X1);" UNIT HIT FROM"; 2480 GOTO 2450 2485 NEXT I 2490 IF E1< = 0THEN 2520 2495 IF E4< 500THEN 2505 2500 GOSUB 45:PRINT "SHIELDS HOLDING" 2505 GOSUB 45:PRINT INT ((Q8- E4)/ Q8* 100);"% DAMAGE." 2510 RETURN 2515 REM LOSE 2520 GOSUB 525:GOSUB 240:PLOT 6,1:GOSUB 45:PRINT "** YOU HAVE BEEN DEFEATED ** " 2525 GOSUB 45:PRINT N2;" KLINGON";:IF N2< > 1THEN PRINT "S"; 2530 GOSUB 45:PRINT "AND";N3;" ROMULAN";:IF N3< > 1THEN PRINT "S"; 2535 PRINT " REMAIN." 2540 GOSUB 45:PRINT "THE FEDERATION WILL BE DESTROYED.":GOTO 2915 2545 REM SHIELDS 2550 PLOT 6,5:GOSUB 45:PRINT "INSUFFICIENT SHIELD POWER":GOTO 2525 2555 REM WIN 2560 GOSUB 525:GOSUB 240:PLOT 6,7:P4= INT (P4/ (T- T9)* 1000)/ 10:IF G0> 8THEN P4= P4* G0/ 9 2565 IF P4> 10THEN 2595 2570 GOSUB 45:PRINT "EVEN THOUGH THE KLINGONS HAVE BEEN" 2575 GOSUB 45:PRINT "DESTROYED, AND THE ROMULANS HAVE FLED," 2580 GOSUB 45:PRINT "YOU HAVE BEEN TOO DAMAGING TO" 2585 GOSUB 45:PRINT "THE FEDERATION TO WIN." 2590 GOTO 2635 2595 GOSUB 45:PRINT "CONGRATULATIONS, CAPTAIN!" 2600 GOSUB 45:PRINT "THE KLINGONS HAVE BEEN DESTROYED, AND" 2605 GOSUB 45:PRINT "THE ROMULANS HAVE FLED, MAKING THIS A" 2610 GOSUB 45:PRINT "GREAT VICTORY FOR THE FEDERATION!!" 2615 IF P4< 100THEN 2635 2620 GOSUB 45:PRINT "IN RECOGNITION OF YOUR EFFICIENT" 2625 GOSUB 45:PRINT "ACTION, YOU ARE HEREBY PROMOTED" 2630 GOSUB 45:PRINT "TO THE RANK OF STARFLEET ADMIRAL." 2635 GOSUB 45:PRINT "RATING:";P4:GOTO 2915:REM 2640 REM GENERATE PWR 2645 IF CD= 1THEN 2665 2650 E1= E1+ 500:TF= .5 2655 IF T> T0THEN 2520 2660 GOSUB 45:PRINT "POWER GENERATED":GOTO 785 2665 GOSUB 45:PRINT "IMPOSSIBLE UNDER RED ALERT":GOTO 885 2670 REM DAMAGE REPORT 2675 GOSUB 45:PRINT "DAMAGE CONTROL REPORT":GOSUB 45:PRINT 2680 FOR I= 1TO 5:GOSUB 45:PRINT H$(I),H(I):NEXT I:GOSUB 45:PRINT :GOTO 885 2685 REM QUIT 2690 GOSUB 45:INPUT "QUIT? REALLY? (Y/N) ";X$ 2695 IF X$< > "Y"GOTO 885 2700 PLOT 12,6,7,2,0,60,242,0,127,127,127,127,60,0,60,255 2705 PLOT 6,1,3,5,4:PRINT "SINCE YOU CHOSE TO SURRENDER TO YOUR ENEMIES," 2710 PLOT 3,5,6:PRINT "YOU DISGRACED THE FEDERATION AND YOUR CREW." 2715 PLOT 3,5,8:PRINT "YOU WERE FORCED TO SPEND SEVERAL YEARS AS A" 2720 PLOT 3,5,10:PRINT "PRISONER OF THE KLINGON EMPIRE. WHEN YOU" 2725 PLOT 3,5,12:PRINT "RETURNED, YOU WERE STRIPPED OF ALL RANK." 2730 FOR I= 1TO 2000:NEXT I:PLOT 6,5,3,15,21,14:PRINT "WRETCHED SCUM OF THE UNIVERSE!!!":REM 2735 GOTO 2930 2740 REM ROMULANS ATTACK BASE 2745 IF B(B0,3)< = 0THEN 2835 2750 B1= INT (G(B(B0,1),B(B0,2))/ 1000) 2755 IF B1= 0THEN 2835 2760 B3= 175* RND (1)+ 51 2765 FOR I= 1TO B1:B2= FN R(7) 2770 IF B2< = 3THEN 2780 2775 B3= B3/ B2 2780 B(B0,3)= B(B0,3)- B3 2785 NEXT I 2790 GOSUB 45:PRINT "ROMULANS AT QUADRANT";B(B0,1);" -";B(B0,2) 2795 GOSUB 45:PRINT "ATTACK STARBASE" 2800 IF B(B0,3)< = 0THEN 2815 2805 GOSUB 45:PRINT "STARBASE ENERGY LEVELS DROP TO";B(B0,3) 2810 RETURN 2815 GOSUB 45:PRINT "AND DESTROY IT" 2820 G(B(B0,1),B(B0,2))= G(B(B0,1),B(B0,2))- 10 2825 P4= P4- 15:N1= N1- 1 2830 BF= 0:IF B(B0,1)= Q1AND B(B0,2)= Q2THEN GOSUB 550 2835 B0= - 1 2840 RETURN 2845 REM WARP OUT 2850 GOSUB 240 2855 POKE N,128:Z= CALL (0):POKE N,240 2860 GOSUB 510:PLOT 14,6,5,3,18,11:PRINT "PREPARE TO ENTER HYPERSPACE":PLOT 15,6,CC:GOSUB 525:GOSUB 535 2865 PLOT 14,3,11,1:PRINT " " 2870 POKE 64508,198:Z= CALL (0) 2875 POKE N,0:RETURN 2880 REM WARP IN 2885 GOSUB 510:PLOT 6,1:FOR L= 1TO 2:FOR Z= 28TO 0STEP - 2 2890 PLOT 2,34+ Z,84,34+ Z,112- Z,62,112- Z,90- Z,112- Z,90- Z,84,90- Z,56+ Z,62,56+ Z,34+ Z,56+ Z,255 2895 NEXT Z:PLOT 6,0:NEXT L:PLOT 6,CC 2900 POKE N,240:POKE 64508,214:Z= CALL (0) 2905 POKE N,80:Z= CALL (0):POKE N,0 2910 WF= 0:RETURN 2915 GOSUB 45:INPUT "PLAY AGAIN? ";X$:X$= LEFT$ (X$,1) 2920 IF X$= "Y"THEN RUN 2925 PLOT 12 2930 PLOT 6,2,27,11,3,0,26:END 2935 REM INITIALIZE 2940 REM RND INTEGER FUNCT. 2945 DEF FN R(X1)= INT (RND (1)* X1)+ 1 2950 DIM Q(10,10),G(10,10),K(5,3),R(3,3),Q$(7),B(3,3),CV(4),H(5),H$(5),N$(3),D$(13) 2955 FOR I= 1TO 5:H(I)= 0:READ H$(I):NEXT I 2960 DATA "PHOTON TUBES","S.R. SENSORS","L.R. SENSORS","PHASERS ","WARP ENGINES" 2965 FOR I= 1TO 7:READ Q$(I):NEXT I 2970 DATA ".",E,"*",B,K,R,"." 2975 FOR I= 1TO 13:READ D$(I):NEXT I 2980 DATA W,I,P,T,G,L,S,C,A,D,V,Q,SAVE 2985 FOR I= 1TO 4:READ CV(I):NEXT I 2990 DATA 7,4,5,2 2995 LN= 20:C= 1 3000 GOSUB 45:INPUT "LOAD AN OLD GAME? (Y/N) ";X$ 3005 GOSUB 525 3010 IF LEFT$ (X$,1)= "Y"THEN GOSUB 3510:LN= 20:POKE N,80:Z= CALL (0):POKE N,0:GOTO 735 3015 GOSUB 45:PRINT "ENTER 1-999 FOR REPEATABLE GAME" 3020 GOSUB 45:PRINT "ENTER 0 FOR RANDOM GAME" 3025 GOSUB 45:INPUT X1 3030 IF X1< 0OR X1> 999THEN GOSUB 525:GOTO 3015 3035 IF X1> 0THEN T0= RND (- X1):GOTO 3055 3040 GOSUB 45:INPUT "ENTER A NUMBER FROM 1 TO 99: ";X 3045 IF X> 99OR X< 1GOTO 3040 3050 FOR I= 1TO PEEK (33209)+ X* PEEK (33208):Y= RND (1):NEXT I 3055 T0= INT (RND (1)* 20000)/ 10+ INT (RND (1)* 5000) 3060 IF T0< 1000THEN 3055 3065 R9= - 10:E1= 1500:E2= 300:E3= 2000:E4= 1500 3070 GOSUB 45:INPUT "ENTER GALAXY SIZE (3-10): ";X$:GOSUB 525 3075 G0= VAL (X$):G0= INT (G0):B$= CHR$ (19) 3080 IF G0> 10OR G0< 3THEN 3070 3085 PLOT 14:LN= 21:GOSUB 45:PRINT "ANTIMATTER REACTOR POWERING UP WARP PODS" 3090 LN= 25:GOSUB 45:PRINT " SHIELDS ENERGIZING" 3095 LN= 27:GOSUB 45:PRINT " PHASER BANKS CHARGING":REM 3100 P= G0+ 3:G1= G0+ 1:B8= - 1:B9= - 1 3105 CD= 2:GOSUB 420 3110 B0= - 1 3115 Q1= FN R(G0):Q2= FN R(G0):S1= FN R(10):S2= FN R(10) 3120 REM SET UP GALAXY 3125 X1= 50* (G0/ 10):FOR I= 1TO G0:FOR J= 1TO G0 3130 L= RND (1)* X1 3135 N4= 0:N5= 0:N6= 0 3140 IF L< .1THEN N5= 5:GOTO 3165 3145 IF L< .3THEN N5= 4:GOTO 3165 3150 IF L< 1.5THEN N5= 3:GOTO 3165 3155 IF L< 4.5THEN N5= 2:GOTO 3165 3160 IF L< 15THEN N5= 1 3165 IF N2> 41THEN N5= 0 3170 N2= N2+ N5 3175 IF N1> 2OR RND (1)< .97THEN 3195 3180 B(N1+ 1,1)= I:B(N1+ 1,2)= J 3185 B(N1+ 1,3)= 500* RND (1)+ 500 3190 N4= 1 3195 N7= FN R(10)- 1 3200 N1= N1+ N4 3205 L= RND (1)* 40* (G0/ 10) 3210 IF L< 2THEN N6= N6+ 1 3215 IF L< 6THEN N6= N6+ 1 3220 IF L< 18THEN N6= N6+ 1 3225 N3= N3+ N6:L= 0:IF RND (1)< .3THEN L= .1 3230 G(I,J)= G(I,J)+ N6* 1000+ N5* 100+ N4* 10+ N7+ L 3235 NEXT J,I 3240 IF N1> 0THEN 3265 3245 I= FN R(G0):J= FN R(G0) 3250 G(I,J)= G(I,J)+ 10 3255 B(N1+ 1,1)= I:B(N1+ 1,2)= J:B(N1+ 1,3)= 500* RND (1)+ 500 3260 N1= 1 3265 T9= T0- (2.4* N2- (FN R(10)- 5)):T= T9:T2= T9:GOSUB 525 3270 REM BEGIN 3275 PLOT 3,17,3:PRINT "STARFLEET COMMAND REPORTS" 3280 PLOT 3,17,4:PRINT "THAT";N2;" KLINGONS, AIDED" 3285 PLOT 3,17,5:PRINT "BY ROMULAN FORCES, HAVE" 3290 PLOT 3,17,6:PRINT "PENETRATED FEDERATION SPACE." 3295 PLOT 3,17,8:PRINT "ONLY";N1;" STARBASE";:IF N1= 1THEN PRINT " HAS":GOTO 3305 3300 PRINT "S HAVE" 3305 PLOT 3,17,9:PRINT "SURVIVED THE INITIAL ASSAULT." 3310 PLOT 3,17,10:PRINT "YOU MUST DEFEAT THE" 3315 PLOT 3,17,11:PRINT "INVADERS BY STARDATE";T0 3320 PLOT 3,17,13:PRINT "BEWARE OF BLACK HOLES!!!" 3325 PLOT 3,17,15:PRINT "COMMAND 'C' LISTS COMMANDS" 3330 PLOT 3,17,17:INPUT "HIT <RETURN> TO BEGIN ";X$:REM 3335 GOSUB 510:POKE N,80:Z= CALL (0):POKE N,0 3340 GOTO 565 3345 REM COMMANDS 3350 POKE N,128:Z= CALL (0):GOSUB 510 3355 PLOT 3,17,3:PRINT B$;"W -- WARP MOVE" 3360 PLOT 3,17,4:PRINT "I -- IMPULSE MOVE" 3365 PLOT 3,17,5:PRINT "L -- LONG RANGE SCAN" 3370 PLOT 3,17,6:PRINT "S -- SHORT RANGE SCAN" 3375 PLOT 3,17,7:PRINT "P -- FIRE PHASERS" 3380 PLOT 3,17,8:PRINT "T -- FIRE TORPEDOS" 3385 PLOT 3,17,9:PRINT "A -- ALLOCATE POWER" 3390 PLOT 3,17,10:PRINT "G -- GENERATE POWER" 3395 PLOT 3,17,11:PRINT "D -- DAMAGE REPORT" 3400 PLOT 3,17,12:PRINT "V -- VIEW SCREEN" 3405 PLOT 3,17,13:PRINT "Q -- QUIT & SURRENDER" 3410 PLOT 3,17,14:PRINT "SAVE -- SAVE GAME ON DISK" 3415 PLOT 3,17,16:PRINT "DEVICE NUMBERS-----" 3420 PLOT 3,17,17:PRINT "1=WARP 2=PHASERS 3=SHIELDS";A$ 3425 PLOT 3,17,18:INPUT "PRESS <RETURN> ";X$:GOSUB 510 3430 POKE N,80:Z= CALL (0):POKE N,0:GOTO 885 3435 REM SAVE 3440 REM PARAMETERS: FILE "N","TREK",1,1152,1 3445 FILE "R",1,"TREK",1:XX= 1 3450 FOR I= 1TO 10:FOR J= 1TO 10 3455 PUT 1,1,XX;Q(I,J),G(I,J):XX= XX+ 8:NEXT J,I 3460 FOR I= 1TO 3:PUT 1,1,XX;R(1,I),R(2,I):XX= XX+ 8 3465 FOR J= 1TO 5:PUT 1,1,XX;K(J,I):XX= XX+ 4:NEXT J 3470 FOR J= 1TO 3:PUT 1,1,XX;B(I,J):XX= XX+ 4:NEXT J,I 3475 PUT 1,1,XX;B8,B9,E1,E2,E3,E4,I9,N1,N2,N3,N4,N5:XX= XX+ 48 3480 PUT 1,1,XX;N6,N7,P,P4,Q1,Q2,Q8,Q9,R9,S1,S2,T:XX= XX+ 48 3485 PUT 1,1,XX;T0,T2,T8,T9,W,X,Y,X1,X2,X3,X4,X5,X6:XX= XX+ 52 3490 PUT 1,1,XX;X7,XA,XB,G0,G1,B0,F9,H1,H2,C$[6]:XX= XX+ 42 3495 FOR I= 1TO 5:PUT 1,1,XX;H(I):XX= XX+ 4:NEXT I:FILE "C",1 3500 PLOT 12,6,2:END 3505 REM RELOAD 3510 FILE "R",1,"TREK",1:XX= 1 3515 FOR I= 1TO 10:FOR J= 1TO 10 3520 GET 1,1,XX;Q(I,J),G(I,J):XX= XX+ 8:NEXT J,I 3525 FOR I= 1TO 3:GET 1,1,XX;R(1,I),R(2,I):XX= XX+ 8 3530 FOR J= 1TO 5:GET 1,1,XX;K(J,I):XX= XX+ 4:NEXT J 3535 FOR J= 1TO 3:GET 1,1,XX;B(I,J):XX= XX+ 4:NEXT J,I 3540 GET 1,1,XX;B8,B9,E1,E2,E3,E4,I9,N1,N2,N3,N4,N5:XX= XX+ 48 3545 GET 1,1,XX;N6,N7,P,P4,Q1,Q2,Q8,Q9,R9,S1,S2,T:XX= XX+ 48 3550 GET 1,1,XX;T0,T2,T8,T9,W,X,Y,X1,X2,X3,X4,X5,X6:XX= XX+ 52 3555 GET 1,1,XX;X7,XA,XB,G0,G1,B0,F9,H1,H2,C$[6]:XX= XX+ 42 3560 FOR I= 1TO 5:GET 1,1,XX;H(I):XX= XX+ 4:NEXT I 3565 RETURN