Listing of file='STARTREK' on disk='vmedia/more_games.wvd.zip'
# Sector 1371, program filename = 'STARTREK' 0010 LOAD DC T#6,"GAMES" 0020 PRINT HEX(030A);,"*** STARTREK ***" : DIM Z$(2)38,R$(2)38,Q$(2)38,S$50,D$(2)39 : INIT(20)Z$(),R$(),Q$(),S$ : DIM G(8,8),C(9,2),K(3,3),N(3),Z(8,8) : T0,T=INT(RND(1)*20+20)*100 : T9=30 : D0=0 : E0,E=3000 : P0,P=10 : S9=200 : S,H8=0 0030 DEFFND(D)=SQR((K(I,1)-S1)^2+(K(I,2)-S2)^2) : Q1=INT(RND(1)*8+1) : Q2=INT(RND(1)*8+1) : S1=INT(RND(1)*8+1) : S2=INT(RND(1)*8+1) : T7=0 : C(2,1),C(3,1),C(4,1),C(4,2),C(5,2),C(6,2)=-1 : C(1,1),C(3,2),C(5,1),C(7,2),C(9,1)=0 : C(1,2),C(2,2),C(6,1),C(7,1),C(8,1),C(8,2),C(9,2)=1 : DIM D(10) 0040 FOR I=1TO 10 : D(I)=0 : NEXT I : D$(1)="WARPENGNS SR-SENSRS LR-SENSRS PHSRCNTRL" : D$(2)="PHTNTUBES DMGECNTRL SHLDCNTRL COMPUTER " : B9,K9=0 : FOR I=1TO 8 : FOR J=1TO 8 : R1=RND(1) : IF R1>.98THEN 50 : IF R1>.95THEN 60 : IF R1>.8THEN 70 : K3=0 : GOTO 80 0050 K3=3 : K9=K9+3 : GOTO 80 0060 K3=2 : K9=K9+2 : GOTO 80 0070 K3=1 : K9=K9+1 0080 R1=RND(1) : IF R1>.96THEN 90 : B3=0 : GOTO 100 0090 B3=1 : B9=B9+1 0100 S3=INT(RND(1)*8+1) : G(I,J)=K3*100+B3*10+S3 : Z(I,J)=0 : NEXT J : NEXT I : K7=K9 : IF B9>0THEN 110 : G(6,3)=114 : B9=1 0110 PRINT HEX(0A);"YOUR MISSION:";HEX(0A); : GOSUB 1510 : PRINT "DESTROY";K9;"KLINGONS IN ";T9;"STARDATES WITH";B9;"STARBASES" : GOSUB 1510 0120 K3,B3,S3=0 : IF Q1<1THEN 130 : IF Q1>8THEN 130 : IF Q2<1THEN 130 : IF Q2>8THEN 130 : X=G(Q1,Q2)*.01 : K3=INT(X) : B3=INT((X-K3)*10) : S3=G(Q1,Q2)-INT(G(Q1,Q2)*.1)*10 : IF K3=0THEN 130 : IF S>200THEN 130 : PRINT : PRINT "COMBAT AREA-CONDITION RED" : PRINT "SHIELDS VERY LOW" : FOR H=1TO 500 : NEXT H 0130 FOR I=1TO 3 : FOR J=1TO 3 : K(I,J)=0 : NEXT J : NEXT I : Q$(1)=Z$(1) : Q$(2)=Z$(2) : R$(1)=Z$(1) : R$(2)=Z$(2) : STR(S$,1,36)=STR(Z$(1),1,36) : STR(S$,37,12)=STR(Z$(2),1,12) : A$="<*>" : Z1=S1 : Z2=S2 : GOSUB 1340 : IF K3=0THEN 140 : FOR I=1TO K3 : GOSUB 1330 : A$="+++" : Z1=R1 : Z2=R2 : GOSUB 1340 : K(I,1)=R1 : K(I,2)=R2 : K(I,3)=S9 : NEXT I 0140 IF B3=0THEN 150 : FOR I=1TO B3 : GOSUB 1330 : A$=">!<" : Z1=R1 : Z2=R2 : GOSUB 1340 : NEXT I 0150 IF S3=0THEN 160 : FOR I=1TO S3 : GOSUB 1330 : A$=" * " : Z1=R1 : Z2=R2 : GOSUB 1340 : NEXT I 0160 GOSUB 830 0170 PRINT "0=NAVIGATE 1=SR-SNSR SCAN 2=LR-SNSR SCAN 3=FIRE PHSRS" : PRINT "4=FIRE TRPDS 5=SHLDS CNTRL 6=DMG CNTRL RPT 7=COMPUTER" : INPUT "COMMAND:",A : ON A+1GOTO 180,160,400,470,520,650,670,1110 0180 INPUT "COURSE (1-9):",C1 : IF C1=0THEN 170 : IF C1<1THEN 180 : IF C1>9THEN 180 : INPUT "WARP (0-8):",W1 : IF W1<0THEN 180 : IF W1>8THEN 180 : IF D(1)=0THEN 190 : IF W1<=.2THEN 190 : PRINT "WARPENGINES ARE DAMAGED--MAXIMUM SPEED IS WARP .2" : GOTO 180 0190 IF K3<=0THEN 200 : GOSUB 720 : IF K3<=0THEN 200 : IF S<0THEN 800 : GOTO 230 0200 IF E>=5THEN 230 0210 IF E+S<5THEN 770 0220 PRINT HEX(0A);"ENERGY INADEQUATE (";E;"UNITS )" : PRINT "SUGGEST LOAN FROM SHIELDS (";S;"UNITS LEFT )";HEX(0A); : GOTO 170 0230 FOR I=1TO 8 : IF D(I)<0THEN 240 : GOTO 250 0240 D(I)=D(I)+RND(1)*3 : IF D(I)<0THEN 250 : D(I)=0 : GOSUB 360 : R1=I : PRINT : GOSUB 1400 : PRINT "OPERATIONAL";HEX(0A); : GOSUB 1510 0250 NEXT I : IF RND(1)>.3THEN 260 : R1=INT(RND(1)*8+1) : D(R1)=D(R1)-RND(1)*7 : GOSUB 360 : GOSUB 1400 : PRINT "DAMAGED";HEX(0A); : GOSUB 1510 : GOTO 260 0260 N=INT(W1*8) : IF E<N*5THEN 220 : A$=" " : Z1=S1 : Z2=S2 : GOSUB 1340 : X1=C(C1,1)+(C(C1+1,1)-C(C1,1))*(C1-INT(C1)) : X=S1 : Y=S2 : X1=C(C1,1)+(C(C1+1,1)-C(C1,1))*(C1-INT(C1)) : X2=C(C1,2)+(C(C1+1,2)-C(C1,2))*(C1-INT(C1)) : IF N=0THEN 340 : I=1 0270 S1=S1+X1 : S2=S2+X2 : IF S1<1THEN 370 : IF S1>=9THEN 370 : IF S2<1THEN 370 : IF S2>=9THEN 370 : S8=INT(S1*24+S2*3-26) : IF S8>191THEN 270 : IF S8>72THEN 290 : IF S8>36THEN 280 : IF STR(Q$(1),S8,3)=" "THEN 330 : GOTO 320 0280 IF STR(Q$(2),S8-36,3)=" "THEN 330 : GOTO 320 0290 IF S8>144THEN 310 : IF S8>108THEN 300 : IF STR(R$(1),S8-72,3)=" "THEN 330 : GOTO 320 0300 IF STR(R$(2),S8-108,3)=" "THEN 330 : GOTO 320 0310 IF STR(S$,S8-144,3)=" "THEN 330 0320 PRINT HEX(0A);"WARPENGINES STOP AT SECTOR";S1;",";S2;"DUE TO BAD NAVIGATI ON" : GOSUB 1510 : S1=S1-X1 : S2=S2-X2 : GOTO 340 0330 I=I+1 : IF I<=NTHEN 270 0340 A$="<*>" : Z1=S1 : Z2=S2 : GOSUB 1340 : E=E-N*5 : IF W1<1THEN 350 : T=T+1 0350 IF T>T0+T9THEN 790 : GOTO 160 0360 PRINT HEX(0A);"DAMAGE CONTROL REPORT:"; : RETURN 0370 X=Q1*8+X+X1*N : Y=Q2*8+Y+X2*N : Q1=INT(X/8) : Q2=INT(Y/8) : S1=INT(X-Q1*8) : S2=INT(Y-Q2*8) : IF S1<>0THEN 380 : Q1=Q1-1 : S1=8 0380 IF S2<>0THEN 390 : Q2=Q2-1 : S2=8 0390 T=T+1 : E=E-N*5 : IF T>T0+T9THEN 790 : GOTO 120 0400 IF D(3)=0THEN 410 : PRINT "LR-SENSORS OUT" : GOTO 170 0410 PRINT HEX(030A);"LR-SENSOR SCAN FOR QUADRANT";Q1;",";Q2 : GOSUB 450 : FOR I=Q1-1TO Q1+1 : FOR U=1TO 3 : N(U)=O : NEXT U : FOR J=Q2-1TO Q2+1 : IF I<1THEN 420 : IF I>8THEN 420 : IF J<1THEN 420 : IF J>8THEN 420 : N(J-Q2+2)=G(I,J) : IF D(7)<0THEN 420 : Z(I,J)=G(I,J) 0420 NEXT J 0430 %### ### ### 0440 PRINTUSING 430,N(1),N(2),N(3) : GOSUB 450 : NEXT I : GOTO 460 0450 PRINT "-------------------" : RETURN 0460 GOTO 170 0470 IF K3<=0THEN 700 : IF D(4)=0THEN 480 : PRINT "PHASERS OUT" : GOTO 170 0480 IF D(7)=0THEN 490 : PRINT "COMPUTER FAILURE IMPAIRS ACCURACY" 0490 PRINT "PHASERS LOCKED ON TARGET-ENERGY AVAILABLE=";E : INPUT "UNITS TO FIRE",X : IF X<=0THEN 170 : IF E-X<0THEN 210 : E=E-X : GOSUB 720 : IF D(7)>=0THEN 500 : X=X*RND(1) 0500 FOR I=1TO 3 : IF K(I,3)<=0THEN 510 : H=INT((X/K3/FND(0))*(2*RND(1))) : K(I,3)=K(I,3)-H : PRINT H;"UNIT HIT ON KLINGON AT SECTOR";K(I,1);",";K(I,2); : PRINT " (";K(I,3);"LEFT)" : IF K(I,3)>0THEN 510 : GOSUB 710 : IF K9<=0THEN 820 0510 NEXT I : IF E<0THEN 800 : GOTO 170 0520 IF D(5)>=0THEN 530 : PRINT " PHOTON TUBES OUT" : GOTO 170 0530 IF P>0THEN 540 : PRINT "PHOTON TORPEDOES GONE" : GOTO 170 0540 INPUT "TORPEDO COURSE (1-9)",C1 : IF C1=0THEN 170 : IF C1<1THEN 540 : IF C1>9THEN 540 : X1=C(C1,1)+(C(C1+1,1)-C(C1,1))*(C1-INT(C1)) : X2=C(C1,2)+(C(C1+1,2)-C(C1,2))*(C1-INT(C1)) : X=S1 : Y=S2 : P=P-1 : PRINT "TORPEDO TRACK" 0550 X=X+X1 : Y=Y+X2 : IF X<1THEN 630 : IF X>=9THEN 630 : IF Y<1THEN 630 : IF Y>=9THEN 630 : PRINT " ";X;",";Y : A$=" " : Z1=X : Z2=Y : GOSUB 1420 : IF Z3=0THEN 560 : GOTO 550 0560 A$="+++" : Z1=X : Z2=Y : GOSUB 1420 : IF Z3=0THEN 600 : PRINT "*KLINGON DESTROYED*";HEX(0A); : K3=K3-1 : K9=K9-1 : IF K9<=0THEN 820 : I=1 0570 IF INT(X)<>K(I,1)THEN 580 : IF INT(Y)=K(I,2)THEN 590 0580 I=I+1 : IF I<=3THEN 570 : I=I-1 0590 K(I,3)=0 : GOTO 620 0600 A$=" * " : Z1=X : Z2=Y : GOSUB 1420 : IF Z3=0THEN 610 : PRINT "YOU CAN'T DESTROY STARS, SILLY!!";HEX(0A); : GOTO 630 0610 A$=">!<" : Z1=X : Z2=Y : GOSUB 1420 : IF Z3=0THEN 550 : PRINT "*STARBASE DESTROYED*..GREAT JOB DUM DUM!!";HEX(0A); : B3=B3-1 0620 A$=" " : Z1=X : Z2=Y : GOSUB 1340 : G(Q1,Q2)=K3*100+B3*10+S3 : GOTO 640 0630 PRINT "TORPEDO MISSED";HEX(0A); 0640 GOSUB 720 : IF E<0THEN 800 : GOTO 170 0650 PRINT : IF D(7)=0THEN 660 : PRINT "SHIELD CONTROL OUT";HEX(0A); : GOTO 170 0660 PRINT HEX(0A);"ENERGY AVAILABLE=";E+S : INPUT "UNITS TO SHIELDS",X : PRINT : IF X<0THEN 660 : IF E+S-X<0THEN 660 : E=E+S-X : S=X : GOTO 170 0670 PRINT HEX(03) 0680 PRINT : IF D(6)=0THEN 690 : PRINT "DAMAGE REPORT NOT AVAILABLE" : PRINT : GOTO 170 0690 PRINT "DEVICE CONDITION" : FOR R1=1TO 8 : GOSUB 1400 : PRINT D(R1) : NEXT R1 : PRINT : GOTO 170 0700 PRINT "SR-SENSORS REPORT NO KLINGONS THIS QUADRANT" : GOTO 170 0710 PRINT "*KLINGON AT SECTOR";K(I,1);",";K(I,2);"DESTROYED*" : K3=K3-1 : K9=K9-1 : A$=" " : Z1=K(I,1) : Z2=K(I,2) : GOSUB 1340 : G(Q1,Q2)=K3*100+B3*10+S3 : RETURN 0720 IF C$<>"DOCKED"THEN 730 : PRINT HEX(0A);"STARBASE SHIELDS ENTERPRISE";HEX(0A); : RETURN 0730 IF K3<=0THEN 760 : I=1 0740 IF K(I,3)<=0THEN 750 : H=INT((K(I,3)/FND(0))*(2+RND(1))) : S=S-H : PRINT H;"UNIT HIT ON ENTERPRISE (";S;"LEFT)" : IF S<0THEN 800 0750 I=I+1 : IF I<=3THEN 740 0760 RETURN 0770 PRINT HEX(0A);"ENTERPRISE DEAD IN SPACE!" : PRINT "IF YOU LIVE-YOU'LL BE BUSTED TO PRIVATE!" 0780 IF K3<=0THEN 810 : GOSUB 720 : GOTO 780 0790 PRINT HEX(0A);"IT IS STARDATE";T : GOTO 810 0800 PRINT HEX(0A);"*ENTERPRISE DESTROYED*" : PRINT "THE FEDERATION WILL BE CONQUERED!" 0810 PRINT "KLINGON BATTLE CRUISERS LEFT=";K9 : GOTO 1500 0820 PRINT HEX(0A);"ALL KLINGON BATTLE CRUISERS DESTROYED!" : PRINT "THE FEDERATION HAS BEEN SAVED!!" : E5=((K7/(T-T0))*1000) : PRINT HEX(0A);"YOUR EFFICIENCY RATING=";E5 : GOTO 1500 0830 PRINT HEX(03) : I=S1-1 0840 J=S2-1 0850 IF I<1THEN 860 : IF I>8THEN 860 : IF J<1THEN 860 : IF J>8THEN 860 : A$=">!<" : Z1=I : Z2=J : GOSUB 1420 : IF Z3=1THEN 870 0860 J=J+1 : IF J<=S2+1THEN 850 : I=I+1 : IF I<=S1+1THEN 840 : D0=0 : GOTO 880 0870 D0=1 : C$="DOCKED" : E=3000 : P=10 : PRINT "DOCKED-SHIELDS DOWN" : S=0 : GOTO 910 0880 IF K3>0THEN 890 : IF E<E0*.1THEN 900 : C$="GREEN" : GOTO 910 0890 C$="RED" : GOTO 910 0900 C$="YELLOW" 0910 IF D(2)=0THEN 920 : PRINT HEX(0A);"SR SENSORS ARE OUT";HEX(0A); : RETURN 0920 GOSUB 1100 0930 % ### ### ### ### 0940 PRINTUSING 930,STR(Q$(1),1,3),STR(Q$(1),4,3),STR(Q$(1),7,3),STR(Q$(1),10, 3); : PRINTUSING 930,STR(Q$(1),13,3),STR(Q$(1),16,3),STR(Q$(1),19,3),STR(Q$(1), 22,3) 0950 % ### ### ### ### 0960 % ### ### ### ### STRDT #### 0970 PRINTUSING 950,STR(Q$(1),25,3),STR(Q$(1),28,3),STR(Q$(1),31,3),STR(Q$(1), 34,3); : PRINTUSING 960,STR(Q$(2),1,3),STR(Q$(2),4,3),STR(Q$(2),7,3),STR(Q$(2),10, 3),T 0980 % ### ### ### ### COND ###### 0990 PRINTUSING 950,STR(Q$(2),13,3),STR(Q$(2),16,3),STR(Q$(2),19,3),STR(Q$(2), 22,3); : PRINTUSING 980,STR(Q$(2),25,3),STR(Q$(2),28,3),STR(Q$(2),31,3),STR(Q$(2), 34,3),C$ 1000 % ### ### ### ### QUAD # 1010 PRINTUSING 950,STR(R$(1),1,3),STR(R$(1),4,3),STR(R$(1),7,3),STR(R$(1),10, 3); : PRINTUSING 1000,STR(R$(1),13,3),STR(R$(1),16,3),STR(R$(1),19,3),STR(R$(1) ,22,3),Q1; : PRINT ",";Q2 1020 % ### ### ### ### SECT # 1030 PRINTUSING 950,STR(R$(1),25,3),STR(R$(1),28,3),STR(R$(1),31,3),STR(R$(1), 34,3); : PRINTUSING 1020,STR(R$(2),1,3),STR(R$(2),4,3),STR(R$(2),7,3),STR(R$(2),10 ,3),S1; : PRINT ",";S2 1040 % ### ### ### ### ENRGY #### 1050 PRINTUSING 950,STR(R$(2),13,3),STR(R$(2),16,3),STR(R$(2),19,3),STR(R$(2), 22,3); : PRINTUSING 1040,STR(R$(2),25,3),STR(R$(2),28,3),STR(R$(2),31,3),STR(R$(2) ,34,3),E 1060 % ### ### ### ### TRPDS ## 1070 PRINTUSING 950,STR(S$,1,3),STR(S$,4,3),STR(S$,7,3),STR(S$,10,3); : PRINTUSING 1060,STR(S$,13,3),STR(S$,16,3),STR(S$,19,3),STR(S$,22,3),P 1080 % ### ### ### ### SHLDS #### 1090 PRINTUSING 950,STR(S$,25,3),STR(S$,28,3),STR(S$,31,3),STR(S$,34,3); : PRINTUSING 1080,STR(S$,37,3),STR(S$,40,3),STR(S$,43,3),STR(S$,46,3),S 1100 PRINT "---------------------------------" : RETURN 1110 IF D(8)=0THEN 1120 : PRINT "COMPUTER IS OUT" : GOTO 170 1120 PRINT HEX(030A0A0A0A);"COMPUTER FUNCTIONS AVAILABLE" : GOSUB 1100 : PRINT "0=CUMULATIVE GALACTIC RECORD" : PRINT "1=STATUS REPORT" : PRINT "2=PHOTON TORPEDO DATA";HEX(0A); : INPUT "COMPUTER COMMAND:",A : IF A=0THEN 1130 : IF A=1THEN 1180 : IF A=2THEN 1190 1130 PRINT " COMPUTER RECORD OF GALAXY FOR QUADRANT";Q1;",";Q2 : PRINT " 1 2 3 4 5 6 7 8" : GOSUB 1160 : FOR I=1TO 8 1140 % # ### ### ### ### ### ### ### ### 1150 PRINTUSING 1140,I,Z(I,1),Z(I,2),Z(I,3),Z(I,4),Z(I,5),Z(I,6),Z(I,7),Z(I,8) : NEXT I : GOSUB 1160 : GOTO 1170 1160 PRINT " ----- ----- ----- ----- ----- ----- ----- -----" : RETURN 1170 GOTO 170 1180 PRINT HEX(030A);"STATUS REPORT--" : V5=(T0+T9)-T : PRINT "KLNGNS LEFT=";K9;" STRDTS LEFT=";V5;" STRBS LEFT=";B9 : GOTO 680 1190 PRINT : H8=0 : FOR I=1TO 3 : IF K(I,3)<=0THEN 1310 : C1=S1 : A=S2 : W1=K(I,1) : X=K(I,2) : GOTO 1200 1200 X=X-A : A=C1-W1 : IF X<0THEN 1240 : IF A<0THEN 1270 : IF X>0THEN 1210 : IF A=0THEN 1250 1210 C1=1 1220 IF ABS(A)<=ABS(X)THEN 1230 : V5=C1+(((ABS(A)-ABS(X))+ABS(A))/ABS(A)) : PRINT "COURSE=";V5 : GOTO 1300 1230 PRINT "COURSE=";C1+(ABS(A)/ABS(X)) : GOTO 1300 1240 IF A>0THEN 1260 : IF X=0THEN 1270 1250 C1=5 : GOTO 1220 1260 C1=3 : GOTO 1280 1270 C1=7 1280 IF ABS(A)>=ABS(X)THEN 1290 : PRINT "COURSE=";C1+(((ABS(X)-ABS(A))+ABS(X))/ABS(X)) : GOTO 1300 1290 PRINT "COURSE=";C1+(ABS(X)/ABS(A)) 1300 PRINT "DISTANCE=";SQR(X^2+A^2) : IF H8=1THEN 1320 1310 NEXT I 1320 GOTO 170 1330 R1=INT(RND(1)*8+1) : R2=INT(RND(1)*8+1) : A$=" " : Z1=R1 : Z2=R2 : GOSUB 1420 : IF Z3=0THEN 1330 : RETURN 1340 S8=INT(Z1*24+Z2*3-26) : IF S8>72THEN 1360 : IF S8>36THEN 1350 : STR(Q$(1),S8,3)=STR(A$,1) : RETURN 1350 STR(Q$(2),S8-36,3)=STR(A$,1) : RETURN 1360 IF S8>144THEN 1380 : IF S8>108THEN 1370 : STR(R$(1),(S8-72),3)=STR(A$,1) : GOTO 1390 1370 STR(R$(2),(S8-72-36),3)=STR(A$,1) : RETURN 1380 STR(S$,S8-144,3)=STR(A$,1) 1390 RETURN 1400 S8=INT(R1*10-9) : IF S8>31THEN 1410 : PRINT STR(D$(1),S8,9); : RETURN 1410 PRINT STR(D$(2),S8-40,9); : RETURN 1420 S8=INT(Z1*24+Z2*3-26) : Z3=0 : IF S8>72THEN 1450 : IF S8>36THEN 1430 : IF STR(Q$(1),S8,3)<>A$THEN 1490 : GOTO 1440 1430 IF STR(Q$(2),S8-36,3)<>A$THEN 1490 1440 Z3=1 : RETURN 1450 IF S8>144THEN 1480 : IF S8>108THEN 1460 : IF STR(R$(1),S8-72,3)<>A$THEN 1490 : GOTO 1470 1460 IF STR(R$(2),S8-108,3)<>A$THEN 1490 1470 Z3=1 : RETURN 1480 IF STR(S$,S8-144,3)<>A$THEN 1490 : Z3=1 1490 RETURN 1500 PRINT HEX(0A0A0A);"END OF MISSION" : STOP 1510 FOR H=1TO 500 : NEXT H : RETURN