5 DEF SEG:POKE 106,0
10 KEY OFF:CLS:DEFINT A-Z
15 ON ERROR GOTO 65100
20 CURY1=1:CURX1=1:LEVEL=8
147 '
800 CLS:STAR=1:LOCATE 2,1:PRINT"                                                               Ϳ"
801 SOND=SOND+1
810 PRINT"                   ͻ                   "
820 PRINT"               ͼ"
830 PRINT"           "
840 PRINT"             ͼ             "
850 PRINT"                                           "
860 PRINT"                                           "
870 PRINT"                               ۻ"
880 PRINT"                               "
890 PRINT"                               "
900 LOCATE 17,40:COLOR 15,0:PRINT "V I D E O   T R E K    8 8":COLOR 7,0
990 GOTO 50000
993 '
995 PRINT
997 FOR A=1 TO 3:NEXT A:FOR A=1 TO 200:NEXT A:RETURN
1000 PLAY "MB":PLAY "L64MST255":GOSUB 20035:GOSUB 20100
1005 IF KL+RM=0 THEN DEAD=0:GOTO 61000
1006 IF EDATE!-SDATE!<.1 THEN DEAD=12:GOTO 61000
1008 IF SHP<100 THEN GOSUB 20300:COLOR 16,7:PRINT"  SHIELDS CRITICAL !!!   Redistribute power immediately  ";:COLOR 7,0:GOSUB 45700
1010 GOSUB 23600:GOSUB 23600
1015 'Allow enemy fire
1020 FIRE=2:GOSUB 40100
1025 ' Update clock
1030 GOSUB 23600:FIRE=0:GOSUB 40100
1035 ' Fire phasers
1040  W=8:C=6:GOSUB 27025
1045 ' Update clock
1050 GOSUB 23600:GOSUB 40100
1055 ' Fire phasers
1060  W=8:C=4:GOSUB 27025
1075 ' Fire photon trps
1080  W=8:C=4:GOSUB 28030
1085 ' Update clock
1090 GOSUB 23600:GOSUB 40100
1095 ' Fire photon trps
2000  W=8:C=2:GOSUB 28030
2005 ' Fire photon trps
2010  W=8:C=2:GOSUB 28030
2015 ' Update clock
2020 GOSUB 23600:FIRE=2:GOSUB 40100
2025 ' Fire phasers
2030  W=8:C=7:GOSUB 27025
2035 ' Update clock
2040 GOSUB 23600:FIRE=2:GOSUB 40100
2045 ' Fire phasers
2050  W=8:C=7:GOSUB 27025
2055 ' Update clock
2060 GOSUB 23600:FIRE=0:GOSUB 40100
2065 ' Fire photon trps
2070  W=8:C=7:GOSUB 28030
2075 ' Update clock
2080 GOSUB 23600:FIRE=1:GOSUB 40100
2085 ' Fire photon trps30
2090  W=8:C=5:GOSUB 28030
2095 ' Update clock
3000 GOSUB 23600:FIRE=2:GOSUB 40100
3005 ' Fire A.M.P.
3010  W=8:C=2:GOSUB 30030
3015 ' Update clock
3020 GOSUB 23600:FIRE=2:GOSUB 40100
3030 GOTO 2030
19000 STOP
19995 '
19997 '
19998 ' Draw screen
19999 '
20000 CLS:LOCATE 3,1:PRINT"ͻ  ͻ"
20001 PRINT"                                          "
20002 PRINT"Ķ  Ķ"
20003 PRINT"                                          "
20004 PRINT"Ķ  Ķ"
20005 PRINT"                                          "
20006 PRINT"Ķ  Ķ"
20007 PRINT"                                          "
20008 PRINT"Ķ  Ķ"
20009 PRINT"                                          "
20010 PRINT"Ķ  Ķ"
20011 PRINT"                                          "
20012 PRINT"Ķ  Ķ"
20013 PRINT"                                          "
20014 PRINT"Ķ  Ķ"
20015 PRINT"                                          "
20016 PRINT"Ķ  Ķ"
20017 PRINT"                                          "
20018 PRINT"Ķ  Ķ"
20019 PRINT"                                          "
20020 PRINT"ͼ  ͼ"
20023 LOCATE 1,20:COLOR 15,0:PRINT "V I D E O   T R E K    8 8";:COLOR 7,0
20025 LOCATE 2,42:PRINT "   Sector Map";:LOCATE 2,9:PRINT " Galactic Chart";:LOCATE 1,56:PRINT "Stardates Remaining";:LOCATE 3,66:PRINT "Condition";:LOCATE 4,66:PRINT "Life supt.";:LOCATE 5,66:PRINT "Enemies";:LOCATE 6,66:PRINT "Reserve";
20030 LOCATE 8,66:PRINT "1 ";LR$:LOCATE 9,66:PRINT "2 ";SR$;:LOCATE 10,66:PRINT "3 ";CP$;:LOCATE 11,66:PRINT "4 ";SH$;:LOCATE 12,66:PRINT "5 ";WD$;:LOCATE 13,66:PRINT "6 ";IP$;:LOCATE 14,66:PRINT "7 ";PH$;:LOCATE 15,66:PRINT "8 ";PT$;
20032 '
20033 ' Display long command list
20034 '
20035 MENU=-1:GOSUB 20045:LOCATE 17,66:PRINT AM$;:LOCATE 18,66:PRINT "Repair Stat.";:LOCATE 19,66:PRINT "Dock at Base";:LOCATE 21,66:PRINT SD$;:RETURN
20037 '
20038 ' Display direction indicator
20039 '
20040 MENU=0:GOSUB 20045:A$=CHR$(196):LOCATE 17,72:PRINT "6";:LOCATE 19,72:PRINT CHR$(179);:LOCATE 20,67:PRINT "4 ";A$;A$;A$;CHR$(197);A$;A$;A$;" 8";:LOCATE 21,72:PRINT CHR$(179);:LOCATE 23,72:PRINT "2";:LOCATE 18,69:PRINT "5     7";
20042 LOCATE 22,69:PRINT "3     1";:RETURN
20045 FOR X=17 TO 23:LOCATE X,66:PRINT "               ";:NEXT X:RETURN
20047 '
20048 ' Subroutines for draw screen
20049 '
20097 '
20098 ' Update status info.
20099 '
20100 LOCATE 3,76:PRINT CND$;:LOCATE 6,75:PRINT "    ";:LOCATE 8,78:PRINT USING "###";LRP;:LOCATE 9,78:PRINT USING "###";SRP;:LOCATE 10,78:PRINT USING "###";CPP;:LOCATE 11,78:PRINT USING "###";SHP;:IF RSP<1000 THEN COLOR 23,0
20105 LOCATE 6,75:PRINT RSP;:COLOR 7,0
20110 LOCATE 12,78:PRINT USING "###";WDP;:LOCATE 13,78:PRINT USING "###";IPP;:LOCATE 14,78:PRINT USING "###";PHP;:LOCATE 15,80:PRINT USING "#";PTP;:LOCATE 5,75:PRINT USING "##";KL;:LOCATE 5,79:PRINT USING "##";RM;
20115 IF MENU THEN LOCATE 17,80:PRINT USING "#";AMP;
20120 LOCATE 1,76:PRINT USING "###.#";EDATE!-SDATE!;:LOCATE 4,77:IF LSA=0 THEN PRINT "ON  "; ELSE PRINT USING "##.#";LSP/10;
20130 IF (QT(NQTX,NQTY) AND &HEF)>0 THEN CND$=CRD$ ELSE CND$=CGR$
20140 RETURN
20197 '
20198 ' Clear text output area ( line 24 ) & LOCATE 24,4
20199 '
20200 LOCATE 24,1:PRINT "                                                                               ";:LOCATE 24,4:RETURN
20297 '
20298 ' Clear text input area ( line 25 ) & LOCATE 25,4
20299 '
20300 LOCATE 25,1:PRINT "                                                                               ";:LOCATE 25,4:RETURN
20397 '
20398 ' Blank L.R. scan
20399 '
20400 FOR Y=0 TO 9:FOR X=0 TO 9:LOCATE 4+Y*2,2+X*3:PRINT "  ";:NEXT X:NEXT Y:RETURN
20597 '
20598 ' Blank S.R. scan
20599 '
20600 FOR Y=0 TO 9:FOR X=0 TO 9:LOCATE 4+Y*2,35+X*3:PRINT "  ";:NEXT X:NEXT Y:RETURN
20697 '
20698 ' Update S.R. scan
20699 '
20700 IF (FNRAND(SRP)*4+SRP)<50 THEN GOSUB 20600:RETURN ELSE FOR Y=0 TO 9:FOR X=0 TO 9:LOCATE 4+Y*2,35+X*3:ON ((ST(X,Y)+1) AND 15) GOSUB 20780,20781,20782,20783,20784,20785,20786,20787,20788,20789
20710 NEXT X:NEXT Y:RETURN
20779 '
20780 PRINT "  ";:RETURN
20781 PRINT RM$;:RETURN
20782 PRINT KL$;:RETURN
20783 PRINT BS$;:RETURN
20784 PRINT BH$;:RETURN
20785 PRINT ST$;:RETURN
20786 COLOR 23,0:PRINT KL$;:COLOR 7,0:RETURN
20787 PRINT PL$;:RETURN
20788 PRINT TH$;:RETURN
20789 PRINT THW$;:RETURN
20797 '
20798 ' Update enterprise sector
20799 '
20800 LOCATE 4+OSTY*2,35+OSTX*3:PRINT "  ";:LOCATE 4+NSTY*2,35+NSTX*3:COLOR 15,0:PRINT ET$;:COLOR 7,0:RETURN
20897 '
20898 'Update quadrent marker
20899 '
20900 LR(OQTX,OQTY)=QT(OQTX,OQTY):LOCATE 4+OQTY*2,2+OQTX*3:IF (LR(OQTX,OQTY) AND 128) THEN COLOR 0,7:PRINT ST$;:COLOR 7,0:GOTO 20920
20905 IF (LR(OQTX,OQTY) AND 16) THEN PRINT CHR$(157); ELSE PRINT " ";
20910 A=(LR(OQTX,OQTY) AND 12)/4+(LR(OQTX,OQTY) AND 3):IF A THEN PRINT USING "#";A;:ELSE PRINT ".";
20920 LOCATE 4+NQTY*2,2+NQTX*3:COLOR 15,0:PRINT ET$;:COLOR 7,0:IF LRP>5 THEN LRP=LRP-1
20930 RETURN
20995 '
20997 '
20998 '
20999 '
21000 GOSUB 20300:PRINT CK$;:IF LRP<20 OR LRA>0 THEN PRINT LRG$;NA$;:GOSUB 20400:GOSUB 20900:RETURN
21010 PRINT "Long range scan activated";:LRP=LRP-5:IF LRP<1 THEN LRP=0
21015 IF LEVEL<5 THEN GOSUB 20200:PRINT CHR$(157);" = Star base       ";:COLOR 0,7:PRINT ST$;:COLOR 7,0:PRINT " = Super nova       #1 - #9 = Number of enemies";
21020 X=NQTX:Y=NQTY:GOSUB 21900:X=X+1:Y=Y+1:GOSUB 21900:X=X-1:GOSUB 21900:X=X-1:GOSUB 21900:Y=Y-1:GOSUB 21900:Y=Y-1:GOSUB 21900:X=X+1:GOSUB 21900:X=X+1:GOSUB 21900:Y=Y+1:GOSUB 21900
21030 GOSUB 20900:RETURN
21900 GOSUB 26900:LR(X,Y)=QT(X,Y):LOCATE 4+Y*2,2+X*3:IF (LR(X,Y) AND 128) THEN COLOR 0,7:PRINT ST$;:COLOR 7,0:RETURN
21905 IF (LR(X,Y) AND 16) THEN PRINT CHR$(157); ELSE PRINT " ";
21910 A=(LR(X,Y) AND 12)/4+(LR(X,Y) AND 3)+(LR(X,Y) AND 32)/32+(LR(X,Y) AND 64)/64:IF A THEN PRINT USING "#";A; ELSE PRINT ".";
21920 RETURN
21995 '
21997 '
21998 '
21999 '
22000 GOSUB 20300:PRINT CK$;:IF SRA>0 THEN PRINT SRG$;NA$;:GOSUB 20600:GOSUB 20800:RETURN
22010 PRINT "Short range scan activated";:SRP=SRP-2:IF SRP<1 THEN SRP=0
22020 GOSUB 20200:PRINT "Romulan  ";RM$;"     Klingon ";KL$;"   Tholean   ";TH$;"   Commander  ";:COLOR 23,0:PRINT KL$;:COLOR 7,0:PRINT "   Enterprise ";:COLOR 15,0:PRINT ET$;:COLOR 7,0
22025 GOSUB 20300:PRINT "Star     ";ST$;"     Planet  ";PL$;"   Star base ";BS$;"   Black hole ";BH$;
22030 GOSUB 20700:GOSUB 20800:RETURN
22995 '
22997 '
22998 ' Re-distribute ships energy
22999 '
23000 GOSUB 20300:IF CPP<3 OR CPA>0 THEN PRINT SP$;CP$;NA$;:GOSUB 23600:RETURN
23010 PRINT "COMPUTER ON: To redistribute energy, enter section # ( 1-7 ) ";:CPP=CPP-2:IF CPP<1 THEN CPP=0
23050 GOSUB 23700:IF A=0 OR A=8 THEN GOSUB 20300:PRINT "That function is";NA$;:GOSUB 23600:RETURN ELSE ON A GOSUB 23901,23902,23903,23904,23905,23906,23907
23055 DEV=A:RSP=RSP+B:IF B>0 AND C=0 THEN 23060 ELSE GOSUB 20300:PRINT A$;" not avalable sir !";:FOR X=1 TO 1000:NEXT X:RETURN
23060 GOSUB 20300:PRINT "Energy to ";A$;" ( 1-100 ) ?";:GOSUB 23800:IF B=0 THEN B=1
23080 IF (RSP-B) <0 THEN  GOTO 23200
23090 RSP=RSP-B:ON DEV GOSUB 23951,23952,23953,23954,23955,23956,23957,23958
23100 RETURN
23200 GOSUB 20300:PRINT "Insufficient energy available";:GOSUB 23600:RETURN
23597 '
23598 ' Wait 2 seconds
23599 '
23600 FOR X=1 TO 1000:NEXT X:RETURN
23697 '
23698 '  GET VALUE FOR "A". IF A <1 OR >8 THEN A=0
23699 '
23700 GOSUB 40000:A=VAL (A$):IF A<1 OR A>8 THEN A=0:RETURN ELSE RETURN
23797 '
23798 ' Get % value into B (0-100)
23799 '
23800 XCUR=POS(0):YCUR=CSRLIN
23810 B$="":CNT=0:LOCATE YCUR,XCUR:PRINT "   ";:LOCATE YCUR,XCUR
23820 GOSUB 40000:IF A$=CHR$(8) THEN 23810
23830 IF A$=CHR$(13) OR A$=" " THEN 23860 ELSE IF CNT=3 THEN 23860 ELSE PRINT A$;:B$=B$+A$:CNT=CNT+1:GOTO 23820
23850 '
23860 B=INT(VAL (B$)):IF B>100 OR B<0 THEN B=0
23870 RETURN
23900 '
23901 A$=LR$:B=LRP:C=LRA:RETURN
23902 A$=SR$:B=SRP:C=SRA:RETURN
23903 A$=CP$:B=CPP:C=CPA:RETURN
23904 A$=SH$:B=SHP:C=SHA:RETURN
23905 A$=WD$:B=WDP:C=WDA:RETURN
23906 A$=IP$:B=IPP:C=IPA:RETURN
23907 A$=PH$:B=PHP:C=PHA:RETURN
23908 A$=PT$:B=PTP:C=PTA:RETURN
23950 '
23951 LRP=B:RETURN
23952 SRP=B:RETURN
23953 CPP=B:RETURN
23954 SHP=B:RETURN
23955 WDP=B:RETURN
23956 IPP=B:RETURN
23957 PHP=B:RETURN
23958 PTP=B:RETURN
23995 '
23997 '
23998 '
23999 '
24000 GOSUB 20300:IF SHA>0 THEN PRINT SH$;NA$;:SHL=1:GOSUB 23600:RETURN
24005 IF RSP<6 AND SHP<6 THEN 23200
24010 PRINT SH$;" presently at force";SHL;"---  Enter new force ( 1-8 ) ?";:GOSUB 23700:IF A=0 THEN GOSUB 20300:PRINT "Enter a force from 1 to 8 !";:GOSUB 23600:GOTO 24000
24020 GOSUB 20300:PRINT SH$;" at force ";A;:SHL=A:A=5:GOSUB 24100
24030 GOSUB 23600:RETURN
24097 '
24098 ' Hit shields with "A" energy
24099 '
24100 IF SHP<100 THEN IF SHP>(A\SHL) THEN SHP=SHP-A\SHL ELSE RSP=RSP-A\SHL
24110 IF SHP=100 THEN IF RSP>=(A\SHL) THEN RSP=RSP-A\SHL ELSE SHP=SHP-A\SHL
24115 IF SHP<2 THEN SHP=1
24120 IF SHP<2 AND RSP<1 THEN DEAD=4:GOTO 61000
24150 RETURN
24995 '
24997 '
24998 ' Get warp speed & course
24999 '
25000 EXIT=0:GOSUB 20300:IF WDP<2 OR WDA>0 THEN PRINT WD$;NA$;:GOSUB 23600:RETURN
25010 PRINT "WARP READY: Enter warp factor ( 1-8 ) :-";:GOSUB 23700:W=A:IF A=0 THEN GOTO 25800
25020 PRINT A;" Enter course ( 1-8 ) :-";:GOSUB 23700:C=A:IF A=0 THEN GOTO 25800
25030 B$=A$:FIRE=1:GOSUB 20300:PRINT "Warp drive engaged:  Warp factor :-";W;" Course :-";C;:IF SHL>1 THEN B=2 ELSE B=1
25100 IF EXIT=1 THEN 25200
25110 A=VAL(B$):IF A>0 AND A<9 THEN C=A:LOCATE 25,52:PRINT C;
25115 IF W>7 AND RND(1)>.9000001 THEN GOSUB 20200:PRINT SP$;"We are entering a time warp";:IF FNL(1)>14 THEN DEAD=5:GOTO 61000 ELSE GOTO 28700
25120 ON C GOSUB 25701,25702,25703,25704,25705,25706,25707,25708
25130 SWAP NQTX,OQTX:NQTX=OQTX+X:SWAP NQTY,OQTY:NQTY=OQTY+Y:IF NQTX=10 THEN NQTX=0
25140 IF NQTX=-1 THEN NQTX=9
25150 IF NQTY=10 THEN NQTY=0
25160 IF NQTY=-1 THEN NQTY=9
25170 GOSUB 20900:FOR X=1 TO (9-W)*30:A$=INKEY$:IF A$=" " THEN EXIT=1:X=1000 ELSE IF A$>"" THEN B$=A$
25175 NEXT X:SDATE!=SDATE!+(8-W):WDP=WDP-B*W:IF WDP>2 THEN A=0:GOSUB 40950:GOSUB 20100:GOTO 25100
25180 GOSUB 20200:PRINT SC$;"Losing power to warp drive";
25200 IF WDP<1 THEN WDP=1
25210 GOSUB 25900:GOSUB 22000:GOSUB 40800:TIMES=TIME:IF CND$=CRD$ THEN GOSUB 45000
25220 RETURN
25701 X=1:Y=1:RETURN
25702 X=0:Y=1:RETURN
25703 X=-1:Y=1:RETURN
25704 X=-1:Y=0:RETURN
25705 X=-1:Y=-1:RETURN
25706 X=0:Y=-1:RETURN
25707 X=1:Y=-1:RETURN
25708 X=1:Y=0:RETURN
25800 GOSUB 20300:PRINT SC$;"Those poor engines can't take that";:GOSUB 23600:RETURN
25897 '
25898 ' Create sector matrix
25899 '
25900 FOR X=0 TO 9:FOR Y=0 TO 9:ST(X,Y)=0:NEXT Y:NEXT X
25910 ST(2,0)=5:ST(8,0)=5:ST(4,1)=4:ST(0,2)=5:ST(5,2)=5:ST(8,2)=&HF2:ST(3,3)=&HF1:ST(2,5)=5:ST(6,5)=5:ST(8,5)=&HF1:ST(0,6)=&HF1:ST(4,6)=10:ST(7,7)=3:ST(1,8)=5:ST(9,8)=5:ST(4,9)=&H16:NSTX=4:NSTY=6:OSTX=4:OSTY=6
25920 RM(1,0)=3:RM(1,1)=3:RM(2,0)=8:RM(2,1)=5:RM(3,0)=0:RM(3,1)=6:CKC=1:KLC=1:RMC=3
25989 RETURN
25990 X=FNRAND0(10):Y=FNRAND0(10):RETURN
25995 '
25997 '
25998 '
25999 '
26000 EXIT=0:GOSUB 20300:IF IPP<2 OR IPA>0 THEN PRINT IP$;NA$;:GOSUB 23600:RETURN
26010 PRINT "IMPULSE READY: Enter impulse factor ( 1-8 ) :-";:GOSUB 23700:W=A:IF A=0 THEN GOTO 25800
26020 PRINT A;" Enter course ( 1-8 ) :-";:GOSUB 23700:C=A:IF A=0 THEN GOTO 25800
26030 B$=A$:FIRE=2:GOSUB 20300:PRINT "Impulse drive engaged:  Impulse factor :-";W;" Course :-";C;:ST(NSTX,NSTY)=0:IPP=IPP-W:IF IPP<1 THEN IPP=1
26100 IF EXIT=1 THEN ST(NSTX,NSTY)=10:RETURN
26110 A=VAL(B$):IF A>0 AND A<9 THEN C=A:LOCATE 25,58:PRINT C;
26120 ON C GOSUB 25701,25702,25703,25704,25705,25706,25707,25708
26130 XD=X+NSTX:YD=Y+NSTY:GOSUB 26900
26165 IF ST(XD,YD)>0 THEN 26170 ELSE SDATE!=SDATE!+(9-W)*.2:OSTX=NSTX:OSTY=NSTY:NSTX=XD:NSTY=YD:GOSUB 20800:A=0:GOSUB 40950:GOSUB 20100:FOR X=1 TO (9-W)*30:A$=INKEY$:IF A$=" " THEN EXIT=1:X=1000 ELSE IF A$>"" THEN B$=A$
26167 NEXT X:GOTO 26100
26170 ST(NSTX,NSTY)=10:ON (ST(XD,YD) AND 15) GOSUB 26200,26250,27300,26400,28500,26250,26600,26700,26700
26180 RETURN
26197 '
26198 ' Hit a Romulan
26199 '
26200 A$=RMS$:RM=RM-1:GOTO 26270
26250 A$=KLS$:KL=KL-1
26270 GOSUB 20200:PRINT "Your kamakazi run has destroyed only one ";A$;:DEAD=2:GOSUB 23600:GOTO 61000
26397 '
26398 ' Enter a black hole
26399 '
26400 GOSUB 20200:PRINT SP$;"We are entering a black hole";:GOSUB 23600:GOSUB 28700:RETURN
26597 '
26598 ' Hit a planet
26599 '
26600 DEAD=3:GOTO 61000
26697 '
26698 ' Hit a Tholean
26699 '
26700 GOSUB 20200:PRINT SP$;"We appear to have encountered a strong force field";:RETURN
26897 '
26898 ' Make X & Y & XD & YD on screen
26899 '
26900 IF X=10 THEN X=0
26910 IF X=-1 THEN X=9
26920 IF Y=10 THEN Y=0
26930 IF Y=-1 THEN Y=9
26935 IF XD=10 THEN XD=0
26940 IF XD=-1 THEN XD=9
26950 IF YD=10 THEN YD=0
26960 IF YD=-1 THEN YD=9
26970 RETURN
26995 '
26997 '
26998 '
26999 '
27000 GOSUB 20300:IF PHP<1 OR PHA>0 THEN PRINT PH$;NA$;:GOSUB 23600:RETURN
27010 PRINT "PHASERS READY: Enter energy level ( 1-8 ) :-";:GOSUB 23700:W=A:IF A=0 THEN GOTO 27990
27020 PRINT A;" Enter direction ( 1-8 ) :-";:GOSUB 23700:C=A:IF A=0 THEN GOTO 27990
27025 FIRE=2:PHP=PHP-W*2:IF PHP<0 THEN PHP=0
27030 XD=NSTX:YD=NSTY:D=0:XO=XD:YO=YD
27040 GOSUB 45100:D=D+1:ON C GOSUB 25701,25702,25703,25704,25705,25706,25707,25708
27050 XD=XD+X:YD=YD+Y:IF XD<10 AND XD>=0 AND YD<10 AND YD>=0 THEN IF ST(XD,YD)=0 THEN LOCATE 4+YD*2,35+XD*3:COLOR 15,0:PRINT PHS$;:COLOR 7,0:GOTO 27040 ELSE 27058
27055 GOSUB 45200:GOSUB 27400:GOTO 27070
27058 GOSUB 45200:LOCATE 4+YO*2,35+XO*3:PRINT "  ";:GOSUB 20800:S$=CHR$(SCREEN(4+YD*2,35+XD*3))+CHR$(SCREEN(4+YD*2,36+XD*3)):LOCATE 4+YD*2,35+XD*3:COLOR 0,7:PRINT S$;:COLOR 7,0:FOR X=1 TO 30:NEXT X:LOCATE 4+YD*2,35+XD*3:PRINT S$;
27060 GOSUB 45200:ON (ST(XD,YD) AND 15) GOSUB 27100,27200,27300,27400,27400,27400,27400,27400,27400
27070 SOUND 50,0:XD=NSTX:YD=NSTY
27080 ON C GOSUB 25701,25702,25703,25704,25705,25706,25707,25708
27090 XD=XD+X:YD=YD+Y:IF XD<10 AND XD>=0 AND YD<10 AND YD>=0 THEN IF ST(XD,YD)=0 THEN LOCATE 4+YD*2,35+XD*3:PRINT "  ";:GOTO 27080
27095 RETURN
27097 '
27098 ' Hit Romulan
27099 '
27100 GOSUB 45900:GOSUB 27160:P=INT(P-E/3):ST(XD,YD)=P*16 OR 1:IF P<0 THEN GOSUB 27180 ELSE GOSUB 27170
27110 RETURN
27157 '
27158 ' Get power levels P=enemy E=enterprise
27159 '
27160 E=INT((W*2-1)/INT(D/2+1)):P=(ST(XD,YD) AND 240)/16:RETURN
27167 '
27168 ' Romulan damaged
27169 '
27170 GOSUB 20200:PRINT RMS$;DMS$;:RETURN
27177 '
27178 ' Romulan destroyed
27179 '
27180 LOCATE 4+YD*2,35+XD*3:COLOR 16,7:PRINT RM$:COLOR 15,0:GOSUB 20200:PRINT SP$;RMS$;DST$;:COLOR 7,0:A=(QT(NQTX,NQTY) AND 12)/4:A=A-1:QT(NQTX,NQTY)=(QT(NQTX,NQTY) AND &HF3)+A*4:RM=RM-1:RMC=RMC-1:IF RM(1,0)=XD AND RM(1,1)=YD THEN RM(1,0)=10
27182 IF RM(2,0)=XD AND RM(2,1)=YD THEN RM(2,0)=10
27184 IF RM(3,0)=XD AND RM(3,1)=YD THEN RM(3,0)=10
27186 GOSUB 23600:GOTO 27190
27187 '
27188 ' Erase sector
27189 '
27190 LOCATE 4+YD*2,35+XD*3:PRINT "  ";:ST(XD,YD)=0:RETURN
27197 '
27198 ' Hit Klingon
27199 '
27200 GOSUB 45900:GOSUB 27160:P=INT(P-E):ST(XD,YD)=P*16 OR 2:IF P<0 THEN GOSUB 27280 ELSE GOSUB 27270
27210 RETURN
27267 '
27268 ' Klingon damaged
27269 '
27270 GOSUB 20200:PRINT KLS$;DMS$;:RETURN
27277 '
27278 ' Klingon destroyed
27279 '
27280 LOCATE 4+YD*2,35+XD*3:COLOR 16,7:PRINT KL$;:COLOR 15,0:GOSUB 20200:PRINT SP$;KLS$;DST$;:COLOR 7,0:A=(QT(NQTX,NQTY) AND 3):A=A-1:QT(NQTX,NQTY)=(QT(NQTX,NQTY) AND &HFC)+A:KL=KL-1:KLC=KLC-1:GOSUB 23600:GOTO 27190
27297 '
27298 ' Hit Star base
27299 '
27300 LOCATE 4+YD*2,35+XD*3:COLOR 16,7:PRINT BS$;:COLOR 15,0:GOSUB 20200:PRINT "You have killed thousands of your own people, but the microdrone escaped";:COLOR 7,0:GOSUB 23600:QT(NQTX,NQTY)=(QT(NQTX,NQTY) AND &HEF):GOSUB 27190:RETURN
27397 '
27398 ' No effect hit
27399 '
27400 GOSUB 20300:PRINT SP$;"Phasers have no effect";:GOSUB 23600:RETURN
27989 '
27990 GOSUB 20300:PRINT ZL$;"The phasers aren't up to that";:GOSUB 23600:RETURN
27995 '
27997 '
27998 '
27999 '
28000 GOSUB 20300:IF PTP=0 OR PTA>0 THEN PRINT PT$;NA$;:GOSUB 23600:RETURN
28010 PRINT "PHOTON TORPS. READY: Enter direction ( 1-8 ) :-";:GOSUB 23700:C=A:IF A=0 THEN GOTO 28990
28030 FIRE=2:PTP=PTP-1:XD=NSTX:YD=NSTY:XO=XD:YO=YD:GOSUB 20300:PRINT SC$;"Torpedo launched";
28040 RMMV=27+FNRAND(4):GOSUB 42000:ON C GOSUB 25701,25702,25703,25704,25705,25706,25707,25708
28050 XD=XD+X:YD=YD+Y:IF XD<10 AND XD>=0 AND YD<10 AND YD>=0 THEN IF ST(XD,YD)=0 THEN LOCATE 4+YO*2,35+XO*3:PRINT "  ";:GOSUB 20800:XO=XD:YO=YD:LOCATE 4+YD*2,35+XD*3:PRINT TRP$;:GOSUB 45600:FOR X=1 TO 500:NEXT X:GOTO 28040 ELSE GOTO 28055
28053 GOSUB 28400:GOTO 28060
28055 LOCATE 4+YO*2,35+XO*3:PRINT "  ";:GOSUB 20800:A$=CHR$(SCREEN(4+YD*2,35+XD*3))+CHR$(SCREEN(4+YD*2,36+XD*3)):LOCATE 4+YD*2,35+XD*3:COLOR 0,7:PRINT A$;:COLOR 7,0:D=1:GOSUB 27160:E=10
28057 LOCATE 4+YD*2,35+XD*3:PRINT A$;:ON (ST(XD,YD) AND 15) GOSUB 28100,28200,27300,28400,28500,28600,28400,28400,28400
28060 LOCATE 4+YO*2,35+XO*3:PRINT "  ";:GOSUB 20800
28070 RETURN
28097 '
28098 ' Hit Romulan
28099 '
28100 GOSUB 45900:P=INT(P-E):ST(XD,YD)=P*16 OR 1:IF P<0 THEN GOSUB 27180 ELSE GOSUB 27170
28110 RETURN
28197 '
28198 ' Hit Klingon
28199 '
28200 GOSUB 45900:P=INT(P-E):ST(XD,YD)=P*16 OR 2:IF P<0 THEN GOSUB 27280 ELSE GOSUB 27270
28210 RETURN
28397 '
28398 ' No effect hit
28399 '
28400 GOSUB 20300:PRINT SP$;"Photon torpedo had no effect";:GOSUB 23600:RETURN
28497 '
28498 ' Hit Star
28499 '
28500 QT(NQTX,NQTY)=(QT(NQTX,NQTY) AND &HEF):GOSUB 20200:PRINT SP$;"A star is going nova";:FC=16:BC=7:GOSUB 28530:GOSUB 23600:FC=7:BC=0:IF S=1 THEN GOTO 28510 ELSE GOSUB 28530:RETURN 28070
28507 '
28508 ' Super nova
28509 '
28510 COLOR 7,0:GOSUB 20200:PRINT SP$;"This quadrant is becoming a super nova";:KL=KL-(QT(NQTX,NQTY) AND 3):RM=RM-(QT(NQTX,NQTY) AND 12)/4:IF (QT(NQTX,NQTY) AND 32)=32 THEN GOSUB 28680
28515 IF (QT(NQTX,NQTY) AND 64)=64 THEN GOSUB 28690
28517 IF FNL(1)>12 THEN DEAD=1:GOTO 61000
28520 QT(NQTX,NQTY)=128:COLOR 7,0:GOSUB 21000:GOSUB 28700:RETURN
28525 '
28530 GOSUB 28550:S=0:XD=XD+1:YD=YD+1:GOSUB 28550:XD=XD-1:GOSUB 28550:XD=XD-1:GOSUB 28550:YD=YD-1:GOSUB 28550:YD=YD-1:GOSUB 28550:XD=XD+1:GOSUB 28550:XD=XD+1:GOSUB 28550:YD=YD+1:GOSUB 28550:XD=XD-1:RETURN
28550 GOSUB 26900:IF XD=NSTX AND YD=NSTY THEN DEAD=1:GOTO 61000
28560 COLOR 7,0:B=(ST(XD,YD) AND 15):ON B GOSUB 27180,27280,27300,28590,28580,28680,28590,28690,28590
28562 IF (ST(XD,YD) AND 15) <> 1 THEN 28570
28564 IF RM(1,0)=XD AND RM(1,1)=YD THEN RM(1,0)=10
28566 IF RM(2,0)=XD AND RM(2,1)=YD THEN RM(2,0)=10
28568 IF RM(3,0)=XD AND RM(3,1)=YD THEN RM(3,0)=10
28570 COLOR FC,BC:LOCATE 4+YD*2,35+XD*3:PRINT ST$;:ST(XD,YD)=5:RETURN
28580 S=1
28590 RETURN
28597 '
28598 ' Hit Super klingon
28599 '
28600 D=1:GOSUB 27160:IF P=0 THEN GOTO 28630 ELSE P=P-1:ST(XD,YD)=P*16 OR 6:IF P=0 THEN GOSUB 28640 ELSE GOTO 28650
28610 RETURN
28630 GOSUB 20300:PRINT "Photon torpedo ";DST$;" by radiation";:GOSUB 23600:RETURN
28640 LOCATE 4+YD*2,35+XD*3:COLOR 23,0:PRINT KL$;:COLOR 7,0:GOSUB 45900:GOSUB 20200:PRINT SP$;"Klingon Commander ship disabled";:RETURN
28650 GOSUB 45900:GOSUB 20200:PRINT SP$;"Klingon Commander ";DMS$;:GOSUB 28660:RETURN
28657 '
28658 ' Re-locate C. Klingon in same quadrant
28659 '
28660 GOSUB 27190:B=1:WHILE B=1:GOSUB 25990:IF ST(X,Y)=0 THEN ST(X,Y)=6+P*16:B=0
28670 WEND:COLOR 23,0:LOCATE 4+Y*2,35+X*3:PRINT KL$;:COLOR 7,0:RETURN
28677 '
28678 ' Re-locate C. Klingon in diferent quadrent
28679 '
28680 QT(NQTX,NQTY)=(QT(NQTX,NQTY) AND &HDF):GOSUB 25990:QT(X,Y)=(QT(X,Y) OR 32):CKC=0:KLX=X:KLY=Y:RETURN
28687 '
28688 ' Re-locate Tholean in diferent quadrent
28689 '
28690 QT(NQTX,NQTY)=(QT(NQTX,NQTY) AND &HBF):GOSUB 25990:QT(X,Y)=(QT(X,Y) OR 64):RETURN
28697 '
28698 ' Re-locate Enterprise in diferent quadrent
28699 '
28700 OQTX=NQTX:OQTY=NQTY:GOSUB 25990:NQTX=X:NQTY=Y:GOSUB 20900:GOSUB 25900:GOTO 22000
28989 '
28990 GOSUB 20300:PRINT SC$;"The tubes won't take that";:GOSUB 23600:RETURN
28995 '
28997 '
28998 '
28999 '
29000 B=0:X=NSTX+1:Y=NSTY+1:GOSUB 29050:X=X-1:GOSUB 29050::X=X-1:GOSUB 29050:Y=Y-1:GOSUB 29050:Y=Y-1:GOSUB 29050:X=X+1:GOSUB 29050:X=X+1:GOSUB 29050:Y=Y+1:GOSUB 29050
29010 IF B=0 THEN GOSUB 20200:PRINT SP$;" We can't dock without a Star Base !";:RETURN ELSE 29080
29050 GOSUB 26900:IF ST(X,Y)=3 THEN B=1
29060 RETURN
29070 '
29080 GOSUB 20300:PRINT "STARBASE to ENTERPRISE:- Orbit established ";:FOR X=500 TO 1100 STEP 20:NEXT X:FOR X=1 TO 2000:NEXT X
29097 '
29098 ' Replenish energy
29099 '
29100 RSP=2000:LRP=100:SRP=100:CPP=100:SHP=100:WDP=100:IPP=100:PHP=100:PTP=9:AMP=3
29197 '
29198 ' Reset status flags & shields
29199 '
29200 LRA=0:SRA=0:CPA=0:SHA=0:WDA=0:IPA=0:PHA=0:PTA=0:AMA=0:LSA=0:CND$=CGR$:SHL=2:CNA=0:SDA=0
29300 RETURN
29797 '
29799 '
29995 '
29997 '
29998 '
29999 '
30000 GOSUB 20300:IF AMP=0 OR AMA>0 THEN PRINT AM$;NA$;:GOSUB 23600:RETURN
30010 PRINT "ANTI-MATTER POD READY: Enter direction ( 1-8 ) :-";:GOSUB 23700:C=A:IF A=0 THEN GOTO 30990
30030 EXIT=0:FIRE=2:AMP=AMP-1:XD=NSTX:YD=NSTY:XO=XD:YO=YD:GOSUB 20300:PRINT SC$;" Anti-matter pod launched";:GOSUB 45600
30040 RMMV=27+FNRAND(4):GOSUB 42000:IF EXIT=1 THEN 30055 ELSE ON C GOSUB 25701,25702,25703,25704,25705,25706,25707,25708
30050 X=XD+X:Y=YD+Y:IF X<10 AND X>=0 AND Y<10 AND Y>=0 THEN IF ST(X,Y)=0 THEN GOTO 30052
30051 GOTO 30055
30052 XD=X:YD=Y:LOCATE 4+YO*2,35+XO*3:PRINT "  ";:GOSUB 20800:XO=XD:YO=YD:LOCATE 4+YD*2,35+XD*3:PRINT AMP$;:FOR X=1 TO 500:IF INKEY$<>"" THEN X=16000:EXIT=1
30053 NEXT X:GOTO 30040
30055 GOSUB 30100:XD=XD+1:YD=YD+1:GOSUB 30100:XD=XD-1:GOSUB 30100:XD=XD-1:GOSUB 30100:YD=YD-1:GOSUB 30100:YD=YD-1:GOSUB 30100:XD=XD+1:GOSUB 30100:XD=XD+1:GOSUB 30100:YD=YD+1:GOSUB 30100:XD=XD-1:GOSUB 26900:GOSUB 30800:RETURN
30097 '
30100 GOSUB 26900:B=(ST(XD,YD) AND 15):ON B GOSUB 30400,30300,27300,30800,30800,30500,30800,30600,30800,30700
30110 GOSUB 30800:RETURN
30297 '
30298 ' Hit Klingon with A.M.
30299 '
30300 GOSUB 45900:GOTO 27280
30397 '
30398 ' Hit Romulan with A.M.
30399 '
30400 GOSUB 45900:IF RM(1,0)=XD AND RM(1,1)=YD THEN RM(1,0)=10
30410 IF RM(2,0)=XD AND RM(2,1)=YD THEN RM(2,0)=10
30420 IF RM(3,0)=XD AND RM(3,1)=YD THEN RM(3,0)=10
30430 GOTO 27180
30497 '
30498 ' Hit Commander Klingon with A.M.
30499 '
30500 IF ST(XD,YD)=6 THEN GOSUB 45900:GOSUB 20200:COLOR 15:PRINT SP$;"Klingon Commander ";DST$;:COLOR 7:QT(NQTX,NQTY)=(QT(NQTX,NQTY) AND &HDF):KL=KL-1:KLQ=0:CKC=0:GOTO 30800
30510 GOSUB 28680:GOTO 30800
30597 '
30598 ' Hit Tholean with A.M.
30599 '
30600 GOSUB 45900:GOSUB 20200:COLOR 15:PRINT SP$;THS$;DST$;:COLOR 7:QT(NQTX,NQTY)=(QT(NQTX,NQTY) AND &HBF):GOTO 30800
30697 '
30698 ' Hit Enterprise with A.M.
30699 '
30700 DEAD=6:GOTO 61000
30797 '
30798 ' Make sector a black hole
30799 '
30800 LOCATE 4+YD*2,35+XD*3:PRINT BH$;:ST(XD,YD)=4:RETURN
30990 GOSUB 20300:PRINT SP$;"That would disrupt the entire galaxy !";:GOSUB 23600:RETURN
36995 '
37995 '
37997 '
37998 '
37999 '
38000 GOSUB 20300:IF CNA>0 THEN PRINT CPT$;"Condition report ";NA$;:GOSUB 23600:RETURN
38010 PRINT CPT$;"Damage report available on status display";:GOSUB 20200:LOCATE 25,57:PRINT "-- Shields at force ";SHL;
38020 FOR X=1 TO 14:LOCATE 7+X,78:ON X GOSUB 38101,38102,38103,38104,38105,38106,38107,38108,38109,38110,38111,38112,38113,38114,38115,38116,38117,38118
38030 PRINT " ";:IF A>-1 THEN PRINT USING "##";A;
38035 NEXT X:FOR X=1 TO 3000:NEXT X:FOR X=1 TO 14:LOCATE 7+X,79:PRINT "  ";:NEXT X:RETURN
38100 '
38101 A=LRA:RETURN
38102 A=SRA:RETURN
38103 A=CPA:RETURN
38104 A=SHA:RETURN
38105 A=WDA:RETURN
38106 A=IPA:RETURN
38107 A=PHA:RETURN
38108 A=PTA:RETURN
38109 A=-1:RETURN
38110 A=AMA:RETURN
38111 A=CNA:RETURN
38112 A=-1:RETURN
38113 A=-1:RETURN
38114 A=SDA:RETURN
39995 '
39997 '
39998 ' Keyboard input
39999 '
40000 A$=INKEY$:IF A$="" THEN GOSUB 40100:GOTO 40000 ELSE RETURN
40095 '
40096 ' *** Background functions ***
40097 '
40098 ' Save cursor & allow enemy to attack
40099 '
40100 GOSUB 20300:CURX1=POS(0):CURY1=CSRLIN:ON FIRE GOSUB 41800,41000
40107 '
40108 ' Move Romulan
40109 '
40110 GOSUB 42000
40197 '
40198 ' Increment date & Repair ship
40199 '
40200 IF TIME < (TIMES+(10-LEVEL)*2) THEN 40800 ELSE TIMES=TIME:A=1:GOSUB 40950:GOSUB 20200:FIRE=2:GOSUB 43000
40297 '
40298 ' Maybe move Enterprise to Commander Klingon
40299 '
40300 ' Removed for demo
40397 '
40398 ' Problem generation
40399 '
40400 GOSUB 44000
40697 '
40698 ' Update status
40699 '
40700 GOSUB 20100
40797 '
40798 ' Get new time
40799 '
40800 TIME=VAL(MID$(TIME$,7,2))+VAL(MID$(TIME$,4,2))*60+VAL(MID$(TIME$,1,2))*60*60
40900 LOCATE CURY1,CURX1:RETURN
40947 '
40948 ' Increment date & do life support
40949 '
40950 SDATE!=SDATE!+A/10:IF LSA>0 THEN LSP=INT((LSPD!-SDATE!)*10):IF LSP<1 THEN DEAD=9:GOTO 61000
40960 RSP=RSP-(SHL-1)*A*8:IF RSP<10 THEN DEAD=7
40980 RETURN
40995 '
40997 '
40998 ' Klingon fire
40999 '
41000 A=(20+FNRAND(LEVEL*3))*KLC:GOSUB 24100:IF KLC THEN GOSUB 41880:GOSUB 45300
41047 '
41048 ' Commander Klingon fire
41049 '
41050 IF CKC THEN IF SHP<100 THEN SHP=50:RSP=0 ELSE A=70+FNRAND(20)+KL*5:GOSUB 24100:GOSUB 41880:GOSUB 44600:GOSUB 45500
41097 '
41098 ' Tholean fire
41099 '
41100 IF (QT(NQTX,NQTY) AND 64)<>64 THEN 41800
41110 IF SHL<2 THEN DEAD=8:GOTO 61000 ELSE FOR N=0 TO 6:Y=N:FOR X=N TO 9-N:GOSUB 41150:NEXT X:X=9-N:FOR Y=N+1 TO 9-N:GOSUB 41150:NEXT Y:Y=9-N:FOR X=8-N TO N STEP -1:GOSUB 41150:NEXT X:X=N:FOR Y=8-N TO N+1 STEP -1:GOSUB 41150:NEXT Y:NEXT N:DEAD=10
41120 GOTO 61000
41140 '
41150 LOCATE 4+Y*2,35+X*3:PRINT TH$;:FOR A=1 TO 100:NEXT A:LOCATE 4+Y*2,35+X*3:PRINT THW$;:RETURN
41797 '
41798 ' Romulan fire
41799 '
41800 A=(50+FNRAND(LEVEL*5))*RMC:GOSUB 24100:IF RMC THEN GOSUB 41880:GOSUB 45400:GOSUB 44600
41860 FIRE=0:RETURN
41880 GOSUB 20200:PRINT "DAMAGE CONTROL: Enemy attacking - Shields still holding";:RETURN
41995 '
41996 '*************** Routines called after a date change ********************
41997 '
41998 ' Random move of romulan
41999 '
42000 IF FNRAND(LEVEL)<4 THEN RETURN ELSE IF RMMV<30 THEN RMMV=RMMV+1:RETURN
42010 CURX=POS(1):CURY=CSRLIN:RMMV=0:R=1:IF RM(1,0)<10 THEN GOSUB 42100
42020 R=2:IF RM(2,0)<10 THEN GOSUB 42100
42030 R=3:IF RM(3,0)<10 THEN GOSUB 42100
42035 LOCATE CURY,CURX
42040 RETURN
42100 ON FNRAND(8) GOSUB 25701,25702,25703,25704,25705,25706,25707,25708
42110 RX=RM(R,0):X=RX+X:RX=RM(R,0):RY=RM(R,1):Y=RY+Y:RY=RM(R,1):GOSUB 26900:IF ST(X,Y)=0 THEN ST(X,Y)=ST(RX,RY):RM(R,0)=X:RM(R,1)=Y:ST(RX,RY)=0:LOCATE 4+RY*2,35+RX*3:PRINT "  ";:IF FNRAND(100)<97 THEN LOCATE 4+Y*2,35+X*3:PRINT RM$;
42120 RETURN
42995 '
42997 '
42999 '
43000 RSP=RSP-INT(LEVEL/2)
43100 '
43110 IF LRA THEN LRA=LRA-1:RSP=RSP-2
43120 IF SRA THEN SRA=SRA-1:RSP=RSP-2
43130 IF CPA THEN CPA=CPA-1:RSP=RSP-2
43140 IF SHA THEN SHA=SHA-1:RSP=RSP-2
43150 IF WDA THEN WDA=WDA-1:RSP=RSP-2
43160 IF IPA THEN IPA=IPA-1:RSP=RSP-2
43170 IF PHA THEN PHA=PHA-1:RSP=RSP-2
43180 IF PTA THEN PTA=PTA-1:RSP=RSP-2
43190 IF AMA THEN AMA=AMA-1:RSP=RSP-2
43200 IF CNA THEN CNA=CNA-1:RSP=RSP-2
43210 IF SDA THEN SDA=SDA-1:RSP=RSP-2
43280 IF RSP<2 THEN DEAD=7:GOTO 61000
43900 RETURN
43995 '
43997 '
43998 ' Create super nova
43999 '
44000 IF FNRAND(10000)>9997 THEN GOSUB 25990:IF X<>NSTX THEN 44010
44005 GOTO 44100
44010 GOSUB 20200:PRINT SP$;"Quadrant";X;Y;"is becoming a super nova";:LOCATE 4+Y*2,2+X*3:COLOR 0,7:PRINT ST$;:COLOR 7,0
44020 KL=KL-(QT(X,Y) AND 3):RM=RM-(QT(X,Y) AND 12)/4:IF (QT(X,Y) AND 32)=32 THEN KLQ=0:KL=KL-1
44097 '
44098 ' Damage ship
44099 '
44100 IF FNRAND(100)>(100-LEVEL*2) THEN GOSUB 44600
44197 '
44198 ' Terminate life support
44199 '
44200 IF (RSP<1000 AND LSA=0 AND FNRAND(LEVEL)>4 AND FNRAND(1000)>995) THEN LSA=1000:LSPD!=SDATE!+18:LSP=180:COLOR 16,7:GOSUB 20200:PRINT "                LIFE SUPPORT SYSTEM FAILING ";:COLOR 7,0:GOSUB 45700
44500 RETURN
44597 '
44598 ' Subroutine to damage a part of ship
44599 '
44600 IF RSP>1000 THEN RETURN ELSE A=FNRAND(9):B=FNRAND(LEVEL\2+1):GOSUB 45800:ON A GOSUB 44710,44720,44730,44740,44750,44760,44770,44780,44790
44610 GOSUB 20200:PRINT "DAMAGE CONTROL: ";A$;" inoperative, repair time ";B/10;"star dates";:GOSUB 23600:RETURN
44710 LRA=LRA+B:B=LRA:A$=LR$:IF LRA>15 THEN LRA=15:RETURN ELSE RETURN
44720 SRA=SRA+B:B=SRA:A$=SR$:IF SRA>15 THEN SRA=15:RETURN ELSE RETURN
44730 CPA=CPA+B:B=CPA:A$=CP$:IF CPA>15 THEN CPA=15:RETURN ELSE RETURN
44740 SHA=SHA+B:B=SHA:A$=SH$:IF SHA>15 THEN SHA=15:RETURN ELSE RETURN
44750 WDA=WDA+B:B=WDA:A$=WD$:IF WDA>15 THEN WDA=15:RETURN ELSE RETURN
44760 IPA=IPA+B:B=IPA:A$=IP$:IF IPA>15 THEN IPA=15:RETURN ELSE RETURN
44770 PHA=PHA+B:B=PHA:A$=PH$:IF PHA>15 THEN PHA=15:RETURN ELSE RETURN
44780 PTA=PTA+B:B=PTA:A$=PT$:IF PTA>15 THEN PTA=15:RETURN ELSE RETURN
44790 AMA=AMA+B:B=AMA:A$=AM$:IF AMA>15 THEN AMA=15:RETURN ELSE RETURN
44900 RETURN
44910 '
44997 '
44998 ' Red allert
44999 '
45000 IF SOND THEN FOR S=1 TO 5:SOUND 1000,3:SOUND 600,3:NEXT S:SOUND 32000,2:RETURN ELSE RETURN
45097 '
45098 ' Phasers
45099 '
45100 IF SOND THEN PLAY "L25N62P35":RETURN ELSE RETURN
45200 IF SOND THEN A$="L35N62P35N62P35":FOR X=1 TO 8:PLAY "XA$;":NEXT X:RETURN ELSE RETURN
45297 '
45298 ' Small ship fires
45299 '
45300 IF SOND THEN PLAY "L64N72N70N68N66N64N62N60N58N56N54N52N50N48N46N44N42N40":RETURN ELSE RETURN
45397 '
45398 ' Large ship fires
45399 '
45400 IF SOND THEN PLAY "L50N82N62N78N56N74N52N70N48N66N44N62N30N58N36N54N32N50":RETURN ELSE RETURN
45497 '
45498 ' Commander Klingon ship fires
45499 '
45500 IF SOND THEN X=1000:WHILE X>100:A=FNRAND(100):SOUND A+X,1:X=X-X\21:SOUND 38,0:WEND:RETURN ELSE RETURN
45597 '
45598 ' Photon torp. launch
45599 '
45600 IF SOND THEN FOR A=1 TO 10:SOUND RND(1)*1000+38,1:FOR X=1 TO 1:NEXT X:SOUND 38,0:NEXT A:RETURN ELSE RETURN
45697 '
45698 ' Close to dead warning
45699 '
45700 IF SOND THEN SOUND 32000,0:PLAY"L3N48N36N48N36N48N36N48N36":RETURN ELSE RETURN
45797 '
45798 ' Device damaged
45799 '
45800 IF SOND THEN PLAY "L64MST64N77P60N77P60N77P60N77T255":RETURN ELSE RETURN
45897 '
45898 ' Enemy being hit
45899 '
45900 IF SOND THEN FOR A=1 TO 20:SOUND RND(1)*(400-A*20)+38,A:FOR X=1 TO RND(1)*A:NEXT X:SOUND 38,0:NEXT A:RETURN ELSE RETURN
49995 '
49997 '
49998 ' Initialize entry point
49999 '
50000 DEFINT A-Z:PLAY "MB":D$="MLT180O3L2CT60L4BT180L4AL7GL4FL7ET50L2E-T180L4DL2CT60L4O4CO3T180L4B-L7AL4GL7FT50L2ET180L4D#T60L4DT180L4E"
50002 B$="L4F#G#L7A#L4BO4L7CL2C#T50L2DO3T60L4DT180L4EF#G#L7A#L4BL7O4CL2DT50L2E-T180O3"
50004 C$="L4F#G#L7A#L4BL7O4CL2DL1E-L4DL2CO3L1FL2B-T50L2A-"
50006 DEF SEG=0:IF PEEK(&H109)=&H54 THEN SOND=-1 ELSE SOND=0
50007 ON KEY(1) GOSUB 65000
50008 KEY (1) ON
50010 CND$="GREEN":LR$="L.R. Scan":SR$="S.R. Scan":CP$="Computer":SH$="Shields":WD$="Warp":IP$="Impulse":PH$="Phasers":PT$="Photon Trp.":AM$="Anti-matter":CGR$="Green":CRD$="RED  ":NA$=" not available":LRG$="Long range scan":SRG$="Short range scan"
50011 THS$="Tholean ship ":SD$="Self destroy":CPT$="COMPUTER: ":SP$="SCIENCE OFFICER: ":SC$="ENGINEERING OFFICER: ":ZL$="WEAPONS OFFICER: ":CK$="NAVIGATION OFFICER: "
50012 RMS$="Romulan ship ":KLS$="Klingon ship ":DMS$="damaged":DST$="destroyed"
50015 RM$=CHR$(204)+CHR$(185):KL$=CHR$(198)+CHR$(181):ET$=CHR$(195)+CHR$(180):TRP$=CHR$(232)+CHR$(232):BH$=CHR$(176)+CHR$(176):ST$="**":PHS$=CHR$(219)+CHR$(219):BS$=CHR$(157)+CHR$(157)
50020 TH$=CHR$(213)+CHR$(184):PL$=CHR$(174)+CHR$(175):THW$="##":AMP$=CHR$(233)+CHR$(233)
50040 LOCATE 19,30:COLOR 23,0:PRINT "T r a n s p o r t e r    A c t i v a t e d";:COLOR 7,0
50043 FOR X=0 TO 16 STEP 2
50045 LOCATE X+7,20-X\2:PRINT " ";
50050 LOCATE X+8,20-X\2:PRINT "";
50060 NEXT X
50085 LOCATE 25,1:PRINT "           ";
50090 FOR Y=1 TO 3:FOR A=0 TO 18 :LOCATE 25-A,13+INT(A/2):PRINT "";:FOR X=1 TO 50:NEXT X:LOCATE 25-A,13+INT(A/2):PRINT "";:NEXT A:NEXT Y
50095 FOR A=1 TO 19:LOCATE 26-A,11+INT(A\2):PRINT "     ";:NEXT A:LOCATE 19,30:PRINT "                                          ";
50097 '
50098 ' Define FN's & DIM's
50099 '
50100 DEF FNRAND (X)=INT(RND(1)*X+1):DEF FNRAND0 (X)=INT(RND(1)*X):DEF FNL (X)=LEVEL+FNRAND(LEVEL)
50150 DIM QT(9,9),LR(9,9),ST(9,9)
50197 '
50198 ' Randomize AFTER matrix dims
50199 '
50200 A$=TIME$:X$=MID$(A$,4,2)+MID$(A$,7,2):X=VAL(X$) MOD 1000:RANDOMIZE X
50297 '
50330 KL=0:RM=0:FOR A=9 TO LEVEL STEP -1:GOSUB 25990:QT(X,Y)=16:NEXT A:A=(FNRAND(LEVEL)+5)*7:WHILE A>0
50335 GOSUB 25990:IF QT(X,Y) > 0 THEN 50335 ELSE X1=FNRAND(LEVEL):X2=X1 AND 3:X3=INT(X1/4):QT(X,Y)=QT(X,Y)+X2
50340 QT(X,Y)=QT(X,Y)+X3*4:A=A-X2-X3:KL=KL+X2:RM=RM+X3:WEND
50350 KLQ=0:IF FNL(9)>8 THEN KL=KL+1:GOSUB 25990:QT(X,Y)=QT(X,Y)+32:KLQ=1:KLX=X:KLY=Y
50360 IF FNL(9)<9 THEN 50400 ELSE GOSUB 25990:IF (QT(X,Y) AND 32)=32 THEN KLQ=0:KL=KL-1
50370 KL=KL-(QT(X,Y) AND 3):RM=RM-(QT(X,Y) AND 12)/4:QT(X,Y)=64
50397 '
50398 ' Initialize game variables
50399 '
50400 SDATE!=1049.3:TIME$="00:00:00":TIMES=0:TIME=0:EDATE!=SDATE!+RM*9+KL*7
50500 NQTX=5:NQTY=5:OQTX=5:OQTY=5:QT(5,5)=&H3D
50697 '
50997 '
50998 ' Draw screen, initialize secter mat & replenish energy
50999 '
51000 GOSUB 20000:GOSUB 29100:GOSUB 25900:IF (QT(NQTX,NQTY) AND &HEF)>0 THEN GOSUB 45000
51010 GOSUB 21000:GOSUB 22000
51998 ' Initialize Interupt keys
51999 '
60000 GOTO 1000
60995 '
60998 '
61000 IF DEAD=0 THEN GOTO 62000
61100 COLOR 15,0
61110 FOR A=1 TO 50:X=FNRAND(70):Y=FNRAND(20)
61120 LOCATE Y,X+4:PRINT " ";:LOCATE Y+1,X+2:PRINT "     ";:LOCATE Y+2,X:PRINT "         ";:LOCATE Y+3,X+2:PRINT "     ";:LOCATE Y+4,X+4:PRINT " ";:NEXT A
62000 CHAIN "TREK89",61000!,ALL
64995 '
64997 '
64998 ' Toggle sound
64999 '
65000 SOUND 32000,0:SOND=NOT SOND:IF SOND THEN DEF SEG=0:POKE &H109,&H54 ELSE DEF SEG=0:POKE &H109,0
65010 RETURN
65097 '
65098 ' Faital error trap
65099 '
65100 CLS:IF ERR=71 OR ERR=53 THEN 65200 ELSE PRINT "ERROR ";ERR;"  AT";ERL;" in module TREKDEMO  VER 1.2":PRINT "Please notify Windmill Software"
65110 GOTO 65110
65200 LOCATE 15,10:PRINT " VIDEO TREK 88 diskette must remain in drive during the game":LOCATE 17,10,0:PRINT " Please insert diskette and press any key to RESTART game ... "
65210 IF INKEY$="" THEN 65220 ELSE 65210
65220 IF INKEY$="" THEN 65220
65230 CLS:RESUME 65240
65240 ON ERROR GOTO 65100:CHAIN"trek89"
