Compucolor.org – Virtual Media

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