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"