
20 RANDOMIZE :DIM M%(400%),I%(4%,2%),K0%(1%),R0%(1%),Q(24%,8%),T7$(8%)=14%,P0(15%), D0(4%),G%(10%,10%),S0$(10%,10%)=1%,J%(1%),K%(1%),T8(10%),T$(10%)=1%,T(2%) !-------------------------------! ! MATRIX FUNCTION ! !-------------------------------! 30 DEF FNM%(Q1%,Q2%,T%)=(((Q2%-1%)*10%)+(Q1%-1%))*4%+T% !-------------------------------! ! RANDOM INTEGER FUNCTION ! !-------------------------------! 40 DEF FNR%(L,H)=INT((H-(L-1))*RND(0)+L) !-------------------------------! ! RANDOM FLOATING FUNCTION ! !-------------------------------! 50 DEF FNR(L,H,D%)=INT(((H-L)*RND(0)+L)*10.0^D%)/10.0^D% !-------------------------------! ! GALAXY MATRIX LOAD (FUNCTION) ! !-------------------------------! 60 DEF FNI%(N%) 70 L%=FNM%(FNR%(1,10),FNR%(1,10),I%(N%,1%)): IF M%(L%)=9% GOTO 70 ELSE M%(L%)=M%(L%)+1%: I%(N%,2%)=I%(N%,2%)-1%: IF I%(N%,2%)=0% THEN I%=I%+1% 80 FNEND 90 DATA '*',0.40, 'B',0.60, 'K',0.55, 'R',0.55, 'G',0.55, 'O',1.42, 'T',0.55, 'E',0.40 92 DATA 'STAR',BASE','KLINGON','ROMULAN','GHOSTSHIP', 'BLACK HOLE','PHOTON TORPEDO','ENTERPRISE','DESTROYED' 100 RESTORE:READ T$(I%),T8(I%) FOR I%=1% TO 8% : READ T7$(I%) FOR I%=1% TO 8%:READ D$ : U0$='':U0$=U0$+CHR$(45%) FOR I%=1% TO 40% !-------------------------------! ! RUN ENTERY POINT ! !-------------------------------! 110 OPEN 'KB:' AS FILE #2%:SLEEP FNR%(5,7) 120 %,CHR$(10%); FOR I%=1% TO 3%:%,'SPACE, THE'+ ' FINAL FRONTIER.':%,'THIS IS THE VOYAGE OF T'+ 'HE STARSHIP "ENTERPRISE".';" IT'S FIVE YEAR MISSION," 130 %,'TO EXPLORE STRANGE NEW WORLDS, TO SEEK OUT'+ ' NEW LIFE AND NEW CIVILIZATIONS,':%,'TO BOLD'+ 'LY GO WHERE NO MAN HAS GONE BEFORE.':%,CHR$(10%) 140 %,SPACE$(24%)+'S T A R T R E K':%,CHR$(10%);: %,SPACE$(25%)+'--------------': ! COMMENCE INITIALIZATION OF MATRICES ! 150 M%(J%)=0% FOR J%=1% TO 400% \ G%(J%,K%)=-1% FOR J%=1% TO 10% FOR K%=1% TO 10% \ ! GENERATE N0. OF TYPES BASES,KLINGONS,ROMULANS & STARS ! 160 I%(1%,1%)=2%:I%(1%,2%)=FNR%(3,5) \ I%(2%,1%)=3%:K0%(0%),K0%(1%),I%(2%,2%)=FNR%(5,14)\ I%(3%,1%)=4%:R0%(0%),R0%(1%),I%(3%,2%)=FNR%(5,14)\ I%(4%,1%)=1%:I%(4%,2%)=FNR%(170,220) \ ! SORT TYPES IN DESCENDING ORDER ! 170 M%=4% 180 M%=M%/2%: IF M%=0% GOTO 220 ELSE K%=4%-M%:J%=1% 190 I%=J% 200 L%=I%+M%: IF I%(I%,2%)>I%(L%,2%) THEN T%=I%(I%,1%):N%=I%(I%,2%): I%(I%,1%)=I%(L%,1%):I%(I%,2%)=I%(L%,2%): I%(L%,1%)=T%:I%(L%,2%)=N%: I%=I%-M%:IF I%>0% GOTO 200 210 J%=J%+1%: IF J%>K% GOTO 180 ELSE GOTO 190 ! LOAD GALAXY MATRIX ! 220 I%=1% 230 ON I% GOTO 240,250,260,270,280 240 L0%=FNI%(1%) 250 L0%=FNI%(2%) 260 L0%=FNI%(3%) 270 L0%=FNI%(4%):GOTO 230 280 N%=K0%(0%)+R0%(0%):T(2%)=0: T(0%)=FNR(634,1679,2%): T(1%)=FNR(N%-0.5,N%+1.5,2%) 290 SLEEP FNR%(9,12):%,CHR$(10%)+CHR$(10%):%,USING 'ORDERS: STARDATE ####.##',T(0%):%,CHR$(10%);: %,' AS COMMANDER OF THE FEDRATION STARSHIP '+ 'ENTERPRISE, YOUR MISSION':%,'SHOULD YOU DECIDE TO ACC'; 300 %,'EPT IT, IS TO DESTROY THE UNHOLY KLINGON-ROMULAN': %,USING'ALLIANCE. A FLEET OF ## KLINGONS AND ## ROMUL'+ 'ANS (## ALL TOGETHER )',K0%(0%),R0%(0%),N% 310 %,USING 'HAVE INVADED THIS PORTION OF THE GALAXY. Y'+ 'OU HAVE ###.## STARDATES',T(1%):%,USING 'TO COM'+ 'PLETE YOUR MISSION, UNTIL STARDATE ####.##',T(0%)+T(1%);: %,CHR$(46%):%:SLEEP FNR%(9,10) 320 ! INTILIZE SHIP'S VARIABLE ! 322 E0=5000.0 ! ENERGY 324 P0%=15% ! PHOTON TORPEDOES 326 M0%=500% ! CREW 328 D0(I%)=0.0 FOR I%=1% TO 4% ! DEFLECTOR SHIELDS 330 Q1%=FNR%(1,10) ! X QUADRANT COORDINATE 338 Q2%=FNR%(1,10) ! Y QUADRANT COORDINATE 339 Z9%,N0%,H%,H0%=0%:W=.53:I=.2:U=0! MAINTENANCE (VAR) ! INTILIZE ENTERPRISE PORTION OF QUADRANT MATRIX ! 340 Q(1%,0%)=8 : Q(1%,1%)=FNR(1,10,0%) : Q(1%,2%)=FNR(1,10,0%) : Q(1%,I%)=0 FOR I%=3% TO 8% ! MAIN MODULE SECTION II ! !-------------------------------! ! TOLERANCE (FUNCTION) ! !-------------------------------! 342 DEF FNT(T%,T0%,L%,L0%,O%) : O=T8(T%)+T8(T0%) : IF T%=10% AND O% AND(T0%=1% OR T0%=2% OR T0%=5%) THEN O=O+6.67*Q(1%,4%) : IF O>3.0 THEN O=3.0 344 IF T%=10% AND O% AND(T0%=3% OR T0%=4%) THEN O=0.0 346 IF (T%=6% OR T0%=6%) AND O% THEN O=0.0 348 X=Q(L%,1%)-Q(L0%,1%) : Y=Q(L%,2%)-Q(L0%,2%) : FNT=SQR(X*X+Y*Y)-O: FNEND !-------------------------------! ! ROUND INTEGER (FUNCTION) ! !-------------------------------! 352 DEF FNR0%(R) : FNR0%=INT(ABS(R)+.5) : IF R<.5 THEN FNR0%=1% ELSE IF R>10.5 THEN FNR0%=10% 354 FNEND !-------------------------------! ! CONDITION (FUNCTION) ! !-------------------------------! 356 DEF FNC0$ : C0$='GREEN' : IF E0<200.0 THEN C0$='YELLOW' ELSE IF Q(0%,3%)<>0 OR Q(0%,4%)<>0 THEN C0$='ORANGE' 357 IF Q(0%,7%)<>0 THEN C0$='RED' ELSE IF B% THEN C0$='' 358 FNC0$=C0$: FNEND !-------------------------------! ! BOUNDARY (FUNCTION) ! !-------------------------------! 360 DEF FNB0%(X0%,X1%) : IF X0%<>1% THEN J%(0%)=X0%-1% ELSE J%(0%)=X0% 362 IF X0%<>10% THEN J%(1%)=X0%+1% ELSE J%(1%)=X0% 364 IF X1%<>1% THEN K%(0%)=X1%-1% ELSE K%(0%)=X1% 366 IF X1%<>10% THEN K%(1%)=X1%+1% ELSE K%(1%)=X1% 368 FNEND !-------------------------------! ! POSITION ANALYSIS (FUNCTION) ! !-------------------------------! 370 DEF FNL%(L%) : FNL%=1024% : IF Q=1 OR Q=2 OR Q=4 GOTO 378 ELSE X=Q(L%,1%):Y=Q(L%,2%) : IF (X>=.5 AND X<=10.5) AND (Y>=.5 AND Y<=10.5) GOTO 378 372 J%=Q1%:K%=Q2% : IF X<.5 THEN J%=J%-1% ELSE IF X>10.5 THEN J%=J%+1% 374 IF Y<.5 THEN K%=K%-1% ELSE IF Y>10.5 THEN K%=K%+1% 376 IF J%=0% OR J%=11% OR K%=0% OR K%=11% THEN FNL%=32% ELSE FNL%=256% 378 FNEND !-------------------------------! ! CLEAR (FUNCTION) ! !-------------------------------! 380 DEF FNC7(O%,T%,T0) : IF (T% AND 1024%) THEN M%(FNM%(J%,K%,3%))= M%(FNM%(J%,K%,3%))+1% 382 M%=INT(Q(0%,0%))+1%:Q(0%,0%)=Q(0%,0%)-1 : IF T0<5 THEN M%(FNM%(Q1%,Q2%,T0 ))=M%(FNM%(Q1%,Q2%,T0))-1% : IF T%<>1024% AND T0=3 THEN K0%(1%)=K0%(1%)-1% ELSE IF T0=4 THEN R0%(1%)=R0%(1%)-1% 384 FOR L%=0% TO 8% : Q(O%,L%)=Q(M%,L%):Q(M%,L%)=0 : NEXT L%:Q(0%,T0)=Q(0%,T0)-1: FNEND !-------------------------------! ! SCAN LOADER (FUNCTION) ! !-------------------------------! 390 DEF FNL0$(L) : FOR I%=1% UNTIL Q(I%,0%)=0 : IF Q(I%,0%)=L THEN S0$(FNR0%(Q(I%,2%)),FNR0%(Q(I%,1%)))= T$(INT(Q(I%,0%))) 394 NEXT I%: FNEND !-------------------------------! ! RECTANGULAR - POLAR (FUNCTION)! !-------------------------------! 400 DEF FNA0(J,K,S): IF J=0 THEN IF K>0 THEN A=90 ELSE IF K<0 THEN A=270 ELSE IF K=0 THEN A=0 402 IF J<>0 THEN A=ATN(K/J)*57.29578 : IF J<0 THEN A=A+180 ELSE IF K=0 THEN A=360 ELSE IF K<0 THEN A=A+360 404 IF S=-1 THEN A=A-360. 406 FNA0=A 408 FNEND !-------------------------------! ! DAMAGE CONTROL (FUNCTION) ! !-------------------------------! 410 DEF FND$(D%)='NO DAMAGE!' !-------------------------------! ! COORDINATE UPDATE (FUNCTION) ! !-------------------------------! 412 DEF FNU%(Q%) : Q=Q(Q%,0%):IF Q=8 OR Q=3 OR Q=5 OR Q=6 OR Q=7 THEN A0=Q(Q%,3%):X0,X1,Y0,Y1=0 : A1=Q(Q%,5%):M0=Q(Q%,4%):M1=Q(Q%,6%):A%,M%=-1% : GOSUB 416:GOSUB 422:GOSUB 426:GOSUB 430 : GOSUB 434:GOTO 440 414 GOTO 442 416 IF ABS(A1-A0)>5. AND M0>.1 THEN A=A0+90*SGN(A1-A0):RETURN 418 A%=0%:IF A1<0 THEN A1,A0=A1+360 ELSE IF A1=360 THEN A1,A0=0 ELSE A0=A1 420 RETURN 422 IF ABS(M1-M0)<=.05 THEN M0=M1:M%=0%:RETURN 424 M=.15382*SGN(M1-M0)*I:RETURN 426 X=M0*COS(A0*.017453):Y=M0*SIN(A0*.017453) : IF A% THEN X0=W*COS(A*.017453)*M0*I : Y0=W*SIN(A*.017453)*M0*I 428 RETURN 430 IF M% THEN X1=M*COS(A0*.017453) : Y1=M*SIN(A0*.017453) 432 RETURN 434 X=X+X0+X1:Y=Y+Y0+Y1 : IF M% THEN M0=SQR(X*X+Y*Y) 436 IF A% THEN A0=FNA0(X,Y,SGN(A1)) 438 Q(Q%,1%)=Q(Q%,1%)+I*(X+.5*X0+.5*X1) : Q(Q%,2%)=Q(Q%,2%)-I*(Y+.5*Y0+.5*Y1): RETURN 440 Q(Q%,3%)=A0:Q(Q%,5%)=A1 : Q(Q%,4%)=M0:Q(Q%,6%)=M1 : IF Q=8 THEN E0=E0-100*(I*(ABS(A%*W)+ABS(M%*M))) 442 FNEND !-------------------------------! ! MESSAGE CONTROL (FUNCTION) ! !-------------------------------! 444 DEF FNC%(O%,J%):% : IF(J% AND 1024%) THEN T1%=T0%:T2%=C0%:T3%=T%:T4%=C% 446 IF(J% AND 2048%) THEN T1%=T%:T2%=C%:T3%=T0%:T4%=C0% 448 ON O% GOTO 450,452,454,456,458,460,462,464,466,468, 470,472,474,476,478,480,482,484 450 %,'KLINGON COLLIDED WITH STAR':%,'KLNGN '+D$ : J%=256%:GOTO 486 452 %,'GHOSTSHIP COLLIDED WITH STAR!':%,'GHOST'+ 'SHIP '+D$:J%=256%:GOTO 486 454 L$=FNL$(T1%,T2%,0%):%,D$:J%=256%:GOTO 486 456 %,'KLINGON COLLIDED WITH BASE!':%,'KLNGN '+D$ : %,'BASE '+D$:J%=256%:GOTO 486 458 %,'GHOSTSHIP COLLIDED WITH BASE!':%,'GHOST' +'SHIP '+D$:%,'BASE '+D$:J%=256%:GOTO 486 460 %,'PHOTON TORPEDO HIT ON BASE!':%,'BASE '+D$ : J%=256%:GOTO 486 462 %,'KLINGON COLLIDED WITH KLINGON!':%,'KLNGNS '+D$ : J%=256%:GOTO 486 464 %,'KLINGON COLLIDED WITH ROMULAN!':%,'KLNGN '+D$ : %,'ROMLN '+D$:J%=256%:GOTO 486 466 %,'KLINGON COLLIDED WITH GHOSTSHIP!':%,'KLNGN '+D$ : J%=256%:GOTO 486 468 %,'KLINGON ENTERING BLACK HOLE!':%,'KLNGN '+D$ : J%=128%:GOTO 486 470 %,'TORP HIT ON ';:L$=FNL$(T1%,T2%,0%):%:%,'KLNGN '+D$ : J%=256%:GOTO 486 472 %,'GHOSTSHIP COLLIDED WITH ROMULAN!':%,'GHOST'+ 'SHIP '+D$:%,'ROMLN '+D$:J%=256%:GOTO 486 474 %,'ROMULAN ENTERING BLACK HOLE!':%,'ROMLN '+D$ : J%=128%:GOTO 486 476 %,'TORP HIT ON ';:L$=FNL$(T1%,T2%,0%):%:%,'ROMLN '+D$ : J%=256%:GOTO 486 478 %,'GHOSTSHIP ENTERING BLACK HOLE!':%,'GHOST'+ 'SHIP '+D$:J%=256%:GOTO 486 480 %,'TORP HIT ON ';:L$=FNL$(T1%,T2%,0%):%:%,'GHOSTSHIP '+D$ : J%=256%:GOTO 486 482 J%=128%:GOTO 486 484 %,'TORPEDO COLLISION WITH TOREDO !' : J%=256%:GOTO 486 486 C7=FNC7(T2%,256%,T1%):C%=C%-1% : IF (J% AND 256%) THEN C7=FNC7(T4%,256%,T3%) 488 FNEND !-------------------------------! ! CONTROL MAIN (PARA ENDING) ! !-------------------------------! 590 ON ERROR GOTO 30000:C6%=0% 600 GOSUB 800: GOSUB 2000:%:O0=0 601 T(2%)=T(2%)+O0*.0087 : IF (K0%(1%)=0% AND R0%(1%)=0%) OR E0<=0 OR (T(1%)-T(2%))<=0 OR M0%<=0% OR Z9% THEN GOSUB 20000 ELSE IF (C6%=2% OR C6%=3% OR C6%=15% OR C6%=16%) THEN % 602 C6%=0%:GOSUB 700 603 FOR O0=I TO U STEP I : IF Q(1%,4%)<1 THEN F%=INT(Q(0%,0%))+1% ELSE F%=1% 605 FOR O0%=1% TO F% : U%=FNU%(O0%) : IF(FNL%(O0%) AND 256%) GOTO 740 ELSE IF(FNL%(O0%) AND 32%) GOTO 724 606 NEXT O0% : IF FNS5%(O0) GOTO 609 ELSE IF(H% OR H0% OR N0%) THEN GOSUB 1040 607 IF Q(1%,4%)<1. GOTO 624 608 IF P7% THEN GOSUB 5200 609 NEXT O0 : GOTO 601 !-------------------------------! ! ***************************** ! !-------------------------------! 610 DEF FNS5%(G) : C=(G-INT(G))*10 : IF C=2 OR C=4 OR C=6 OR C=8 THEN FNS5%=0% ELSE FNS5%=-1% 612 FNEND 614 DEF FNL$(A%,M%,S%) : %,USING T7$(A%)+' AT ##.#',Q(M%,1%); : %,CHR$(44%);:%,USING '##.# ',Q(M%,2%); : IF S% THEN %,USING '- SPEED: #.####'+ ' BEARING: ####',Q(M%,4%),Q(M%,3%); 618 FNEND 624 FOR C%=1% TO INT(Q(0%,0%)) : T%=INT(Q(C%,0%)) : FOR C0%=C%+1% UNTIL Q(C0%,0%)=0 : T0%=INT(Q(C0%,0%)) : ON T0% GOTO 626,632,638,646,652, 658,664 626 IF (T%=1% OR T%=2% OR T%=4% OR T%=6%) OR FNT(T%,T0%,C%,C0%,O%)>=0 GOTO 672 ELSE IF T%=8% THEN Z9%=-1%:GOTO 601 628 IF T%=3% THEN S%=FNC%(1%,1024%) ELSE IF T%=5% THEN S%=FNC%(2%,1024%) ELSE S%=FNC%(3%,1024%) 630 GOTO 674 632 IF (T%=1% OR T%=2% OR T%=4% OR T%=6%) OR FNT(T%,T0%,C%,C0%,0%)>=0 THEN GOTO 672 ELSE IF T%=8% GOTO 1500 634 IF T%=3% THEN S%=FNC%(4%,1024%) ELSE IF T%=5% THEN S%=FNC%(5%,1024%) ELSE S%=FNC%(6%,1024%) 636 GOTO 674 638 IF FNT(T%,0%,C%,C0%,0%)>=0 GOTO 672 ELSE IF T%=8% THEN %:%,'ENTERPRISE COLLISION WITH'+ ' KLINGON!':D0(I%)=0FOR I%=1%TO4% : C=FNC7(C0%,256%,3):%,'SHEILDS DESTROYED' : Q(1%,4%),Q(1%,6%)=0:H%,H0%=0%:GOSUB 2000:%:GOTO 601 640 IF T%=1% THEN S%=FNC%(1%,2048%) ELSE IF T%=2% THEN S%=FNC%(4%,2048%) ELSE IF T%=3% THEN S%=FNC%(7%,1024%) ELSE IF T%=4% THEN S%=FNC%(8%,1024%) ELSE IF T%=5% THEN S%=FNC%(9%,1024%) 642 IF T%=6% THEN S%=FNC%(10%,1024%) ELSE IF T%=7% THEN S%=FNC%(11%,1024%) 644 GOTO 674 646 IF(T%=1%ORT%=2%ORT%=4%)OR FNT(T%,T0%,C%,C0%,0%)>=0 GOTO672ELSEIFT%=8%THEN%,'ENTERPRISE COLLISION'+ ' WITH ROMULAN!':D0(I%)=0FORI%=1%TO4%:C=FNC7(C0%,256%,4) : %,'SHEILDS '+D$:Q(1%,4%),Q(1%,6%)=0:H%,H0%=0%:GOSUB 2000:%:GOTO 601 648 IF T%=3% THEN S%=FNC%(8%,2048%) ELSE IF T%=5% THEN S%=FNC%(12%,1024%) ELSE IF T%=6% THEN S%=FNC%(13%,1024%) ELSE IF T%=7% THEN S%=FNC%(14%,1024%) 650 GOTO 674 652 IF T%=5% OR FNT(T%,T0%,C%,C0%,0%)>=0 GOTO 672 ELSE IF T%=8% GOTO 1700 654 IF T%=1% THEN S%=FNC%(2%,2048%) ELSE IF T%=2% THEN S%=FNC%(5%,2048%) ELSE IF T%=3% THEN S%=FNC%(9%,2048%) ELSE IF T%=4% THEN S%=FNC%(12%,2048%) ELSE IF T%=6% THEN S%=FNC%(15%,1024%) ELSE S%=FNC%(17%,1024%) 656 GOTO 674 658 IF (T%=1% OR T%=2% OR T%=6% OR T%=8%) OR FNT(T%,T0%, C%,C0%,0%)>=0 GOTO 672 660 IF T%=3% THEN S%=FNC%(10%,2048%) ELSE IF T%=4% THEN S%=FNC%(13%,2048%) ELSE IF T%=5% THEN S%=FNC%(15%,2048%) ELSE S%=FNC%(16%,1024%) 662 GOTO 674 664 IF FNT(T%,T0%,C%,C0%,0%)>=0 GOTO 672 ELSE IF T%=8% THEN %:%,'PHOTON TORPEDO HIT ON' +' ENTERPRISE':GOSUB 2500:GOTO 672 666 IF T%=1% THEN S%=FNC%(3%,2048%) ELSE IF T%=2% THEN S%=FNC%(6%,2048%) ELSE IF T%=3% THEN S%=FNC%(11%,2048%) ELSE IF T%=4% THEN S%=FNC%(14%,2048%) ELSE IF T%=5% THEN S%=FNC%(16%,2048%) ELSE IF T%=6% THEN S%=FNC%(17%,2048%) 668 IF T%=7% THEN S%=FNC%(18%,1024%) 670 GOTO 674 672 NEXT C0% 674 NEXT C% 676 GOTO 608 !-------------------------------! ! COMMAND (SUBROUTINE) ! !-------------------------------! 700 WAIT(1%):W0$=SYS(CHR$(3%)):INPUT #2%,C6% : W0$=SYS(CHR$(2%)):WAIT(0%) 704 U=TIME(0%):%,'COMMAND ? ';:IF C6%<>0% THEN U=2:GOTO 716 708 INPUT #2%,C6% 712 U=TIME(0%)-U 716 V0=TIME(0%): ON C6% GOSUB 1000,2000,3000,4000,5000, 6000,7000,8000,9000,10000,11000,12000, 13000,14000,15000,16000,17000,18000 720 U=U+(TIME(0%)-V0)*.272: RETURN ! NEW QUADRANT (SUBROUTINE) ! 724 IF Q=3 OR Q=5 THEN %:%,T7$(Q)+' EXCEEDS GALACTIC BOUNDRIES!' : %,T7$(Q)+' DESTORYED!':O=FNC7(O0%,256%,Q):GOTO 606 728 IF Q=6 OR Q=7 THEN O=FNC7(O0%,256%,Q):GOTO 606 732 %:%,'GALACTIC LIMITS EXCEEDED!' : %,'SPACE-TIME WRINKLE!' : Q1%=FNR%(1,10):Q2%=FNR%(1,10) : Q(1%,1%)=FNR(1,10,1%):Q(1%,2%)=FNR(1,10,1%) : Q(1%,4%),Q(1%,6%)=.05:Q(1%,3%),Q(1%,5%)= FNR(0,360,0%):H%,H0%,N0%=0% 736 %,FND$(16%):%,USING 'NOW IN QUADRANT ##',Q1%; : %,CHR$(44%);:%,USING '##',Q2%:GOTO 752 ! CHANGING QUADRANTS ! 740 IF Q=5 OR Q=6 OR Q=7 THEN O=FNC7(O0%,256%,Q):GOTO 606 744 IF Q=3 THEN %:%,USING 'KLINGON AT ##.#',Q(O0%,1%); : %,CHR$(44%);:%,USING '##.# ESCAPED!',Q(O0%,2%) : O=FNC7(O0%,1024%,Q):GOTO 606 748 %:%,USING 'LEAVING QUADRANT ##',Q1%;:%,CHR$(44%); : %,USING '##',Q2%:Q1%=J%:Q2%=K% : %,USING 'ENTERING QUADRANT ##',Q1%;:%,CHR$(44%); : %,USING '##',Q2% 752 GOSUB 800:IF Q(1%,4%)<1.0 THEN GOSUB 2000:% 756 GOTO 601 ! CLEAR & LOAD QUADRANT (Q1%,Q2%) ! 800 X=Q(1%,1%) : Y=Q(1%,2%):P7%,P8%=0% : IF X>10.5 THEN Q(1%,1%)=X-10.0 ELSE IF X<.5 THEN Q(1%,1%)=X+10.0 820 IF Y>10.5 THEN Q(1%,2%)=Y-10.0 ELSE IF Y<.5 THEN Q(1%,2%)=Y+10.0 ! ENTERPRISE POSTION REORDERED ! 830 FOR L%=0% TO 24% : IF L%=1% GOTO 840 ELSE Q(L%,L0%)=0 FOR L0%=0% TO 8% 840 NEXT L% ! LOAD STATUS MATIX ! 850 Q(0%,1%)=M%(FNM%(Q1%,Q2%,1%)) : Q(0%,2%)=M%(FNM%(Q1%,Q2%,2%)) : Q(0%,3%)=M%(FNM%(Q1%,Q2%,3%)) : Q(0%,4%)=M%(FNM%(Q1%,Q2%,4%)) 860 IF FNR%(1,10)=5% THEN Q(0%,5%)=1 870 IF FNR%(1,12)=6% THEN Q(0%,6%)=1 880 Q(0%,0%)=Q(0%,0%)+Q(0%,L%) FOR L%=1% TO 6% ! SUM OF ALL OBJECTS ! ! LOAD QUADRANT MATRIX ! 890 C%=1% : FOR L%=1% TO 6% : IF Q(0%,L%)<>0 THEN GOSUB 910 FOR L0%=1% TO INT(Q(0%,L%)) 900 NEXT L%:IF Q(0%,6%)<>0 THEN I%=INT(Q(0%,0%))+1% : Q(I%,4%),Q(I%,6%)=FNR(.15,.3,2%):Q(I%,3%),Q(I%,5%)=FNR(0,360,0%) 902 RETURN 910 C%=C%+1% : Q(C%,0%)=L% 920 Q(C%,1%)=FNR(1,10,0%) : Q(C%,2%)=FNR(1,10,0%) : FOR L2%=1% TO C%-1% : T=FNT(L%,INT(Q(L2%,0%)),C%,L2%,-1%) : IF T<0.0 GOTO 920 930 NEXT L2% : RETURN ! COURSE SET (SUBROUTINE) ! 1000 INPUT #2%,'NEW BEARING?? ';Q(1%,5%) : INPUT #2%,'WARP FACTOR?? ';Q(1%,6%) : IF Q(1%,5%)<>Q(1%,3%) THEN H%=-1% 1005 IF Q(1%,6%)<>Q(1%,4%) THEN H0%=-1% 1010 IF (Q(1%,4%)<1 AND Q(1%,6%)>=1) THEN N0%=128% ELSE IF (Q(1%,6%)<1 AND Q(1%,4%)>=1) THEN N0%=256% ELSE N0%=0% 1020 RETURN 1040 IF Q(1%,3%)=Q(1%,5%) AND H% THEN %,USING 'A DESIRED BEARING OF #### HAS BEEN OBTAINED', Q(1%,5%):H%=0% 1060 IF Q(1%,4%)=Q(1%,6%) AND H0% THEN %,USING 'A DESIRED SPEED OF ##.### HAS BEEN OBTAINED', Q(1%,6%):H0%=0% 1080 IF(N0% AND 128% AND Q(1%,4%)>=1) THEN %,'ENTERING HYPERSPACE!':N0%=0% 1100 IF(N0% AND 256% AND Q(1%,4%)<1) THEN GOSUB 2000:%:N0%=0% 1120 RETURN ! BASE DOCKING (SUBROUTINE) ! 1500 IF Q(1%,4%)<=.22 GOTO 1600 ELSE %,'ENTERPRISE COLLISION WITH BASE!' : D0(I%)=0 FOR I%=1% TO 4% : %,'SHEILDS '+D$:%,FND$(16%) : Q(1%,4%),Q(1%,6%)=0:C7=FNC7(C0%,256%,2%) : GOSUB 2000:%:GOTO 601 1600 %,'DOCKED!!':E0=5000:P0%=15% : IF M0%<500% THEN %,'NO REENFORCEMENTS' ELSE %,'TEMPORARY MAINTANENCE CREW BOARDED!' 1620 Q(1%,4%),Q(1%,6%)=0 : Q(1%,1%)=Q(C0%,1%)-COS(Q(1%,3%)*.017453) : Q(1%,2%)=Q(C0%,2%)+SIN(Q(1%,3%)*.017453) : GOSUB 2000:%:GOTO 601 2000 IF Q(1%,4%)>=1 THEN %,'IMPOSSIBLE - HYPERSPACE!':RETURN 2010 S0$(S%,S0%)=CHR$(46%) FOR S0%=1% TO 10% FOR S%=1% TO 10%:L$=FNL0$(1):L$=FNL0$(7) : L$=FNL0$(5):L$=FNL0$(2):L$=FNL0$(3) : L$=FNL0$(4):L$=FNL0$(8):B%=0% : IF Q(0%,6%)<>0 THEN GOSUB 2360 2060 IF B% THEN %,'SHORT RANGE SENSOR SCAN'+ ' FOR QUADRANT **,**' ELSE %,USING 'S'+ 'HORT RANGE SENSOR SCAN FOR QUADRANT ##', Q1%;:%,CHR$(44%);:%,USING '##',Q2% 2080 %,U0$ : FOR Y%=1% TO 10% : %,USING '! ',S0$(Y%,X%); FOR X%=1% TO 10% : ON Y% GOSUB 2140,2160,2180,2220,2240,2260,2280, 2300,2320,2340 : NEXT Y%:%,U0$; ! UPDATE GALATIC MAP ! 2120 G%(Q2%,Q1%)=M%(FNM%(Q1%,Q2%,1%))+M%(FNM%( Q1%,Q2%,2%))*10%+M%(FNM%(Q1%,Q2%,3%))*100%+ M%(FNM%(Q1%,Q2%,4%))*1000%:B%=0%:RETURN 2140 %,USING ' STARDATE ####.## LEFT'+ ' ##.##',T(0%)+T(2%),T(1%)-T(2%):RETURN 2160 %,' CONDITION: '+FNC0$:RETURN 2180 IF B% THEN %,' SHIP POSTION **.*,**.*' ELSE %,USING ' SHIP POSTION ##.#',Q(1%,1%); : %,CHR$(44%);:%,USING '##.#',Q(1%,2%) 2200 RETURN 2220 %,USING ' ENERGY: ####.#',E0:RETURN 2240 %,USING ' PHOTON TORPEDOES: ##',P0%:RETURN 2260 %,USING ' KLINGONS LEFT: ##',K0%(1%):RETURN 2280 %,USING ' ROMULANS LEFT: ##',R0%(1%):RETURN 2300 %,' DFLCTR POWER:';:%,USING ' ####.', D0(I%); FOR I%=1% TO 4%:%:RETURN 2320 IF B% THEN %,' BEARING: ****' ELSE %,USING ' BEARING: ####',INT(Q(1%,3%)) 2325 RETURN 2340 IF B% THEN %,' SPEED: *.** PARSECS'+ '/STARMINUTE' ELSE %,USING ' SPEED: #.## PARSECS/STAR'+ 'MINUTE',Q(1%,4%) 2345 RETURN ! BLACK HOLE ! 2360 IF FNT(10%,6%,1%,L0%,0%)>=1.42 GOTO 2400 2380 S0$(S%,S0%)=CHR$(79%) FOR S0%=1% TO 10% FOR S%=1% TO 10%:B%=-1%:RETURN 2400 B0%=FNB0%(FNR0%(Q(L0%,1%)),FNR0%(Q(L0%,2%))) : S0$(S%,S0%)=CHR$(79%) FOR S0%=J%(0%) TO J%(1%) FOR S%=K%(0%) TO K%(1%):S0$(FNR0%(Q(1%,2%)), FNR0%(Q(1%,1%)))=T$(8%):RETURN ! LONG RANGE SCANNER (SUBROUTINE) ! 3000 %,USING ' LONG RANGE SENSOR SCAN AROUND'+ ' QUADRANT ##',Q1%;:%,CHR$(44%);:%,USING '##',Q2%:B0%=FNB0%(Q1%,Q2%):U$=SPACE$(13%)+LEFT( U0$,(J%(1%)-(J%(0%)-1%))*8%):%,U$:%,SPACE$(13%); 3020 FOR L%=K%(0%) TO K%(1%): FOR L0%=J%(0%) TO J%(1%): G%(L%,L0%)=M%(FNM%(L0%,L%,1%))+M%( FNM%(L0%,L%,2%))*10%+M%(FNM%(L0%,L%, 3%))*100%+M%(FNM%(L0%,L%,4%))*1000% 3040 %,USING ' #### :',G%(L%,L0%);: NEXT L0%:%:%,U$;: IF L%<>K%(1%) THEN %:%,SPACE$(13%); 3060 NEXT L%: RETURN ! PHASERS (SUBROUTINE) ! 4000 RETURN ! PHOTON TORPEDOE (SUBROUTINE) ! 5000 IF P0%=0% THEN %,'PHOTON TORPEDOES EXPENDED' : RETURN 5010 %,'PHOTON TORPEDOES' : INPUT #2%,'HOW MANY TO FIRE?? (3 MAX): ';N% : IF N%<1% OR N%>3% THEN N%=3% 5020 FOR I%=1% TO N% : IF P0%=0% GOTO 5000 ELSE P8%=P8%+1%:P7%=P7%+1% : %,USING 'BEARING FOR TORPEDO ## ? ',P8%; 5030 INPUT #2%,P0(P8%):P0%=P0%-1% : NEXT I%: RETURN ! PHOTON TORPEDO CALLING ROUTINE ! 5200 P7%=P7%-1%:L%=INT(Q(0%,0%))+2%:Q(0%,0%)=Q(0%,0%)+1 : Q(0%,7%)=Q(0%,7%)+1:Q(L%,0%)=7 : %,USING 'TORPEDO DECK: TORPEDO ## LAUNCHED', P8%-P7%:M=Q(1%,4%):A=Q(1%,3%) 5210 X=M*COS(A*.017453)+.4*COS(P0(P8%-P7%)*.017453) : Y=M*SIN(A*.017453)+.4*SIN(P0(P8%-P7%)*.017453) : Q(L%,4%),Q(L%,6%)=SQR(X*X+Y*Y) : A,Q(L%,3%),Q(L%,5%)=FNA0(X,Y,0%) 5220 Q(L%,1%)=Q(1%,1%)+COS(A*.017453)*.951 : Q(L%,2%)=Q(1%,2%)-SIN(A*.017453)*.951: RETURN ! PULSOR BEAM (SUBROUTINE) ! 6000 RETURN ! TRAVEL (SUBROUTINE) ! 7000 RETURN ! STATUS REPORT (SUBROUTINE) ! 8000 %,'STATUS REPORT-' : %,USING 'DAYS LEFT: ####.### ENERGY: ####.###', T(1%)-T(2%),E0 : %,USING 'SPEED: ####.### BEARING: #####', Q(1%,4%),Q(1%,3%);: RETURN ! DAMAGE CONTROL REPORT (SUBROUTINE) ! 9000 RETURN ! EVASIVE MANEUVER (SUBROUTINE) ! 10000 RETURN ! EMERGENCY EVASIVE MANEUVER (SUBROUTINE) ! 11000 RETURN ! RAISE DEFLECTORS (SUBROUTINE) ! 12000 %,'RAISE DEFLECTOR SHIELDS' : FOR D%=1% TO 4% : %,USING 'ENERGY FOR DEFLECTORS # ='+ ' ####. ADD?? ',D%,D0(D%); : INPUT #2%,D0:D0(D%)=D0(D%)+ABS(2.*D0) : E0=E0-D0:NEXT D%: RETURN ! LOWER SHIELDS (SUBROUTINE) ! 13000 %,'DROP DEFLECTORS' : D0=0. : FOR D%=1% TO 4% : D0=D0+D0(D%):D0(D%)=0. : NEXT D% : E0=E0+(D0/2.0): RETURN ! OPEN COMMUNICATIONS (SUBROUTINE) 14000 RETURN ! SHORT RNAGE TRACK (SUBROUTINE) ! 15000 %,'SHORT RANGE TRACK' : FOR I%=2% TO INT(Q(0%,0%))+1% : N%=INT(Q(I%,0%)) : IF(N%=3% OR N%=5% OR N%=6% OR N%=7%) THEN L$=FNL$(N%,I%,-1%):% 15020 NEXT I% : L$=FNL$(8%,1%,-1%): RETURN ! GALACTIC UPDATE (SUBROUTINE) ! 16000 %,'GALACTIC UPDATE' : FOR G%=1% TO 10% : IF G%=Q2% AND Q1%=1% THEN %,USING '####E',G%(G%,1%); ELSE %,USING '#### ',G%(G%,1%); 16060 FOR G0%=2% TO 10% : IF Q1%=G0% AND Q2%=G% THEN %,USING ' ####E',G%(G%,G0%); ELSE %,USING ' #### ',G%(G%,G0%); 16080 NEXT G0% : IF G%<>10% THEN % 16090 NEXT G%: RETURN 17000 ! LOAD MAP OF QUADRANT ! 17020 %,USING 'LOAD MAP OF QUADRANT ##',Q1%;: %,CHR$(44%);:%,USING '##',Q2% 17040 FOR Y%=0% TO 8%: %,USING '## ',Y%;: FOR X%=0% UNTIL X%<>0% AND Q(X%,0%)=0: %,USING ' ####.## ',Q(X%,Y%);: NEXT X%:%:NEXT Y% 17060 RETURN 18000 INPUT #2%,'ACCEL, INTERVAL? ';W,I:RETURN ! ERROR SUBROUTINE ! 20000 J%=K0%(1%):K%=R0%(1%):L%=K0%(0%):M%=R0%(0%) : T0=T(1%)-T(2%):IF (J%=0% AND K%=0%) THEN %, 'VICTORY!!' ELSE IF Z9% THEN %,'COLLISION WITH STAR!' ELSE IF E0<=0 THEN %,'OUT OF ENEGRY! SHIP DESTROYED' 20010 IF T0<=0 THEN %,'TIME UP!' ELSE IF M0%<=0% THEN %, 'CREW WIPED OUT!' 20020 %,CHR$(10%):%,USING 'IT IS STARDATE #####.##',T(0%)+ T(2%);:%,CHR$(46%):R%=((L%+M%-(J%+K%))/(L%+M%))*1000% : IF R%<360% THEN GOSUB 20100 ELSE IF R%<667% THEN GOSUB 20200 ELSE IF R%<1000% THEN GOSUB 20300 ELSE GOSUB 20400 20030 %,CHR$(10%)+CHR$(10%);:%,USING 'YOU STARTED WITH'+ ' ## ENEMIES, DESTROYED ALL BUT ##',L%+M%,J%+K% : %,USING '## ROMULANS AND ## KLINGONS REMAIN',K%,J% : %,USING 'RATING = #####',R%:%,'LAST UPDATE 03/18/77' 20040 %,CHR$(10%)+'END OF EXECUTION' : %,'CPU TIME: 25.30 ELAPSED TIME: 14:36.85' : %,'EXIT':%,CHR$(10%)+CHR$(46%):D$= SYS(CHR$(5%)):GOTO 32767 20100 %,'DEFEAT!':%,'THE ENEMY FLEET WILL CONQUER THE FED'+ 'ERATION. YOUR DEMISE SIGNALS':%,'THE END OF THE FEDERATION AND'+ ' THE CIVILIZED FREE WORLD! POSTERITY WILL' 20110 %,'CURSE YOUR NAME AS THEY SLAVE UNDER THE WHIP OF THE ROMULAN'+ ' SLIME DEMONS!':RETURN 20200 %,"IT'S BEEN A HARD BATTLE WITH INCONCLUSIVE RESULTS." : %,'YOUR SACRIFICE HAS BEEN WORTHY BUT BY NO MEANS DEFINITIVE.':RETURN 20300 %,'THE ENEMY RANKS HAVE BEEN DECIMATED, LESS THAN' : %,"A THIRD REMAIN. YOU WILL BE GIVEN A HERO'S BURIAL.":RETURN 20400 %,'THE ENEMY IS TOTALLY DESTROYED, THE FEDERATION IS SAVED.' : %,'CONGRATULATIONS, YOU HAVE BEEN ELECTED FEDRATION PRESIDENT!' : %,CHR$(12%)+SPACE$(14%)+"D. L. H. SBVC '77":RETURN 30000 IF ERR=15 THEN W0$=SYS(CHR$(2%)):WAIT(0%):RESUME 704 30010 IF ERR=28 GOTO 32767 ELSE %,'WHAT?? ' : IF ERL=700 THEN U=2 ELSE IF ERL=708 THEN U=TIME(0%)-U ELSE U=U+(TIME(0%)-V0)*.272 30020 RESUME 603 32767 END
Unless otherwise noted, all photos and text is Copyright © Richard G Lowe, Jr.