00001 REM Source: Robert C. Leedom and David H. Ahl. "Super Star Trek". 00002 REM The Best of Creative Computing Volume I (published 1976). 00003 REM AtariArchives.org. 00004 REM accessed 2012/1/15. 00005 REM Ported to DEC BASIC-10 by David Meyer . 00009 REM (Version "STREKX", 1/17/12 jdm) 00010 REM (VERSION "STREK7", 1/12/75 RCL) 00020 REM 00030 REM 00040 REM *** *** STAR TREK *** *** 00050 REM *** SIMULATION OF A MISSION OF THE STARSHIP ENTERPRISE. 00060 REM *** AS SEEN ON THE STAR TREK TV SHOW. 00070 REM *** ORIGINAL PROGRAM BY MIKE MAYFIELD, MODIFIED VERSION 00080 REM *** PUBLISHED IN DEC'S "101 BASIC GAMES", BY DAVE AHL. 00090 REM *** MODIFICATIONS TO THE LATTER (PLUS DEBUGGING) BY 00100 REM *** BOB LEEDOM -- APRIL & DECEMBER 1974, 00110 REM *** WITH A LITTLE HELP FROM HIS FRIENDS . . . 00120 REM *** COMMENTS, EPITHETS, AND SUGGESTIONS SOLICITED -- 00130 REM *** ADDRESS TO: R.C.LEEDOM 00140 REM *** WESTINGHOUSE DEFENSE & ELECTRONIC SYSTEMS CNTR. 00150 REM *** BOX 745, M.S. 338 BALTIMORE, MD 21203 00160 RANDOMIZE 00170 PRINT TAB(15); "* * * STAR TREK * * *" 00180 PRINT 00190 PRINT " DO YOU NEED INSTRUCTIONS (YES/NO)"; 00200 DIM A$(20) 00210 INPUT A$ 00220 IF A$<>"YES" THEN GOTO 0240 00230 CHAIN "STINSTX" 00240 REM PROGRAM BEGINS HERE . . . . . 00250 DIM Z$(72),Q$(72),R$(72),S$(72) 00260 DIM G1$(150),G2$(16),G3$(3),G4$(3) 00270 FOR I=1 TO 72 00280 LET Z$(I,1)=" " 00290 LET Q$(I,1)=" " 00300 LET R$(I,1)=" " 00310 LET S$(I,1)=" " 00320 NEXT I 00330 DIM O(8,8),C(9,2),K(3,3),N(3),Z(8,8) 00340 DIM O1$(40),C$(10) 00350 DIM A1$(20),T$(6) 00360 DIM D$(96),O3$(60) 00370 LET T=INT(RND+20+20)*100 00380 LET T0=T 00390 LET T9=30 00400 LET D0=0 00410 LET E0=3000 00420 LET E=E0 00430 LET P=10 00440 LET P0=P 00450 LET S9=200 00460 LET S=0 00470 DEF FND(D)=SQR((K(I,1)-S1)^2+(K(I,2)-S2)^2) 00480 REM INITIALIZE ENTERPRISE'S POSITION 00490 LET Q1=INT(RND*8+1) 00500 LET Q2=INT(RND*8+1) 00510 LET S1=INT(RND*8+1) 00520 LET S2=INT(RND*8+1) 00530 MAT C=ZER 00540 LET C(3,1)=-1 00550 LET C(2,1)=-1 00560 LET C(4,1)=-1 00570 LET C(4,2)=-1 00580 LET C(5,2)=-1 00590 LET C(6,2)=-1 00600 LET C(1,2)=1 00610 LET C(2,2)=1 00620 LET C(6,1)=1 00630 LET C(7,1)=1 00640 LET C(8,1)=1 00650 LET C(8,2)=1 00660 LET C(9,2)=1 00670 DIM D(8) 00680 FOR I=1 TO 8 00690 LET D(1)=0 00700 NEXT I 00710 LET A1$="NSLPTSDCX" 00720 LET D$="WARP ENGINESS R. SENSORSL T SENSORSPHASER CNTRL" 00730 LET D$=D$+"PHOTON TUBESDAMAGE CNTRLSHIELD CNTRLCOMPUTER" 00740 LET G4$="III" 00750 LET G1$="ANTARES. SIRIUS.RIGEL.DENEB.PROCYON.CAPELLA.VEGA." 00760 LET G1$=G1$, "BETELGEUSE.CANOPUS.ALDEBARAN.ALTAIR.REGULUS." 00770 LET G1$=G1$,"SAGITTARIUS.ARCTURUS.POLLUX.SPICA." 00780 LET B9=0 00790 LET K9=0 00800 LET A1$="NSLPTSDCX" 00810 REM SET UP WHAT EXISTS IN GALAXY ... 00820 FOR I=1 TO 8 00830 FOR J=1 TO 8 00840 LET R1=RND 00850 IF R1>. 98 THEN GOTO 0900 00860 IF R1>. 95 THEN GOTO 0930 00870 IF R1>. 8 THEN GOTO 0960 00880 LET K3=0 00890 GOTO 0980 00900 LET K3=3 00910 LET K9=K9+3 00920 GOTO 0980 00930 LET K3=2 00940 LET K9=K9+2 00950 GOTO 0980 00960 LET K3=1 00970 LET K9=K9+1 00980 LET R1=RND 00990 OF R1>. 96 THEN GOTO 1020 01000 LET B3=0 01010 GOTO 1040 01020 LET B3=1 01030 LET B9=B9+1 01040 LET S3=INT(RND*8+1) 01050 LET G(I,J)=K3*100+B3*10+S3 01060 REM K3=#KLINGONS B3=#STARBASES S3=#STARS 01070 LET Z(I,J)=0 01080 NEXT J 01090 NEXT I 01100 LET K7=K9 01110 DIM X$(2),X0$(5) 01120 LET X$="" 01130 LET X0$=" IS" 01140 IF B9<>0 THEN GOTO 1200 01150 LET B9=1 01160 IF G(6,3)>200 THEN GOTO 1190 01170 LET G(6,3)=G(6,3)+100 01180 LET K9=K9+1 01190 LET G(6,3)=G(6,3)+10 01200 IF B9=1 THEN GOTO 1230 01210 LET X$="S" 01220 LET X0$="ARE" 01230 PRINT "YOUR ORDERS ARE AS FOLLOWS:" 01240 PRINT " DESTROY THE "K9" KLINGON WARSHIPS WHICH HAVE INVADED" 01250 PRINT " THE GALAXY BEFORE THEY CAN ATTACK FEDERATION HEADQUARTERS" 01260 PRINT " ON STARDATE"T0+T9"; THIS GIVES YOU"T9" DAYS. THERE"X0$ 01270 PRINT " "B9" STARBASE";X$" IN THE GALAXY FOR RESUPPLYING YOUR SHIP." 01280 PRINT 01290 PRINT "HIT 'RETURN' WHEN READY TO ASSUME COMMAND ---" 01300 INPUT AB 01310 REM HERE ANY TIME NEW QUADRANT ENTERED 01320 Z4=Q1 01330 Z5=Q2 01340 K3=0 01350 B3=0 01360 S3=0 01370 G5=0 01380 D4=.5*RND 01390 IF Q1<1 THEN GOTO 1600 01400 IF Q1>8 THEN GOTO 1600 01410 Q2<1 THEN GOTO 1600 01420 Q2>8 THEN GOTO 1600 01430 GOSUB 9030 01440 PRINT 01450 IF T<>T0 THEN 1490 01460 PRINT"YOUR MISSION BEGINS WITH YOUR STARSHIP LOCATED" 01470 PRINT"IN THE GALACTIC QUADRANT, '";G2$;"'." 01480 GOTO 1500 01490 PRINT"NOW ENTERING ";G2$;" QUADRANT . . ." 01500 PRINT 01510 X=G(Q1,Q2)*.01 01520 K3=INT(X) 01530 B3=INT((X-K3)*10) 01540 S3=G(Q1,Q2)-INT(G(Q1,Q20*.1)*10 01550 IF K3=0 THEN GOTO 1590 01560 PRINT "COMBAT AREA CONDITION RED" 01570 IF S>200 THEN GOTO 1590 01580 PRINT " SHIELDS DANGEROUSLY LOW" 01590 MAT K=2ER 01600 FOR I=1 TO 3 01610 LET R(I,J)=0 01620 NEXT I 01630 LET Q$=Z$ 01640 LET Q$=Z$ 01650 LET Q$=Z$(1,40) 01660 REM POSITION ENTERPRISE IN QUADRANT, THEN PLACE "K3" KLINGONS, 01670 REM "B3" STARBASES, & "S3" STARS ELSEWHERE. 01680 A$="<*>" 01690 Z1=S1 01700 Z2=S2 01710 GOSUB 8670 01720 FOR I=1 TO K3 01730 GOSUB 8590 01740 LET A$="+K+" 01750 LET Z1=R1 01760 LET Z2=R2 01770 GOSUB 8670 01780 LET K(I,1)=R1 01790 LET K(I,2)=R2 01800 LET K(I,3)=S9 01810 NEXT I 01820 FOR I=1 TO S3 01830 GOSUB 8590 01840 LET A$=">!<" 01850 LET Z1=R1 01860 LET B4=R1 01870 GOSUB 8670 01880 LET Z2=R2 01890 LET B5=R2 01900 NEXT I 01910 FOR I=1 TO S3 01920 GOSUB 8590 01930 LET A$=" * " 01940 LET Z1=R1 01950 LET Z2=R2 01960 GOSUB 8670 01970 NEXT I 01980 GOSUB 6430 01990 IF S+E>10 THEN GOTO 2020 02000 IF E>10 THEN GOTO 2060 02010 IF D(7)=0 THENGOTO 2060 02020 PRINT "** FATAL ERROR ** YOU'VE JUST STRANDED YOUR SHIP IN SPACE!!" 02030 PRINT "YOU HAVE INSUFFICIENT MANEUVERING ENERGY, AND SHIELD CONTROL," 02040 PRINT "IS PRESENTLY INCAPABLE OF CROSS-CIRCUITING TO ENGINE ROOM!!" 02050 GOTO 6220 02060 PRINT "COMMAND" 02070 INPUT A$ 02080 FOR I=1 TO 9 02090 IF A$(1,10)<>AL$(1,1) THEN GOTO 2160 02100 IF I<>2 THEN GOTO 2140 02110 IF LON<2 THEN GOTO 2140 02120 IF A$(2,2)="R" THEN GOTO 2140 02130 LET I-6 02140 ON I THEN GOTO 2300,1980,4000,4260,4700,5530,5690,7290 02150 IF A$="XXX" THEN GOTO 6270 02160 NEXT I 02170 PRINT "ENTER ONE OF THE FOLLOWING:" 02180 PRINT" NAV (TO SET COURSE)" 02190 PRINT" SRS (FOR SHORT RANGE SENSOR SCAN)" 02200 PRINT" LRS (FOR LONG RANGE SENSOR SCAN)" 02210 PRINT" PHA (TO FIRE PHASERS)" 02220 PRINT" TOR (TO FIRE PHOTON TORPEDOES)" 02230 PRINT" SHE (TO RAISE OR LOWER SHIELDS)" 02240 PRINT" DAM (FOR DAMAGE CONTROL REPORTS)" 02250 PRINT" COM (TO CALL ON LIBRARY-COMPUTER)" 02260 PRINT" XXX (TO RESIGN YOUR COMMAND)" 02270 PRINT 02280 GOTO 1990 02290 REM COURSE CONTROL BEGINS HERE 02300 PRINT "COURSE (0-9)"; 02310 INPUT C1 02320 IF C1>=1 THEN GOTO 2350 02330 PRINT" LT. SULU REPORTS, 'INCORRECT COURSE DATA, SIR!'" 02340 IF W1>0 THEN GOTO 2420 02350 IF C1<9 THEN GOTO 2380 02360 IF C1>9 THEN GOTO 2330 02370 LET C1=1 02380 PRINT "WARP FACTOR (0-0)", 02390 INPUT W1 02410 IF W1<=8 THENGOTO 2450 02420 PRINT " CHIEF ENGINEER SCOTT REPORTS 'THE ENGINES WON'T TAKE"; 02430 PRINT " WARP ";W1;"!'" 02440 GOTO 1990 02450 IF D(1)>=0 THEN GOTO 2490 02460 IF W1<=.2 THEN 2490 02470 PRINT "WARP ENGINES ARE DAMAGED. MAXIUM SPEED = WARP 0.2" 02480 GOTO 2300 02490 LET N=INT(W1*8+.5) 02500 IF E-N>=0 THEN GOTO 2590 02510 PRINT"ENGINEERING REPORTS 'INSUFFICIENT ENERGY AVAILABLE" 02520 PRINT" FOR MANEUVERING AT WARP";W1;"!'" 02530 IF S=1 THEN GOTO 2770 02750 LET D6=1 02760 REM MAKE REPAIRS TO SHIP 02770 FOR I=1 TO 8 02780 IF D(I)>=0 THEN GOTO 2880 02790 LET D(I)=D(I)+D6 02800 IF D(I)<0 THEN GOTO 2880 02810 IF D1=1 THEN GOTO 2840 02820 LET D1=1 02830 PRINT"DAMAGE CONTROL REPORT: "; 02840 PRINT TAB(8); 02850 R1=I 02860 GOSUB 8790 02870 PRINT " REPAIR COMPLETED." 02880 NEXT I 02890 REM DAMAGE/IMPROVEMENT DURING SOME YES 02900 IF RND>.2 THEN GOTO 3070 02910 LET R1=INT(RND+0=1) 02920 IF RND>=.6 THEN GOTO 3000 02930 LET D(R1)=D(R1)-(RND*5+1) 02940 PRINT 02950 PRINT "DAMAGE CONTROL REPORT: "; 02960 GOSUB 8790 02970 PRINT " DAMAGED" 02980 PRINT 02990 GOTO 3070 03000 LET D(R1)=D(R1)+RND*3+1 03010 PRINT 03020 PRINT "DAMAGE CONTROL REPORT: "; 03030 GOSUB 8790 03040 PRINT " STATE OF REPAIR IMPROVED" 03050 PRINT 03060 REM BEGIN MOVING STARSHIP 03070 LET A$=" " 03080 LET Z1=INT(S1) 03090 LET Z2=INT(S2) 03100 GOSUB 8670 03110 X1=C(C1,1)+(C(C1+1,1)-C(C1,1))*(C1-INT(C1)) 03120 X=S1 03130 Y=S2 03140 X2=C(C1,2)+(C(C1+1,2)-C(C1,2))*(C1-INT(C1)) 03150 Q4=Q1 03160 Q5=Q2 03170 FOR I=1 TO N 03180 LET S1=S1+X1 03190 LET S2=S2+X2 03200 IF S1<1 THEN GOTO 3500 03210 IF S1>=9 THEN GOTO 3500 03220 IF S2<1 THEN GOTO 3500 03230 IF S2>=9 THEN GOTO 3500 03240 LET S8=INT(S1)*24+INT(S2)*3-26 03250 IF S8>2 THEN GOTO 3200 03260 IF Q$(S0,S8+2)=" " THEN GOTO 3360 03270 GOTO 3320 03280 IF S$>144 THEN GOTO 3310 03290 IF R$(S0-72,S0-70)=" " THEN GOTO 3360 03300 GOTO 3320 03310 IF S$(S0-144,S0-142)=" " THEN GOTO 3360 03320 LET S1=S1-X1 03330 LET S2=S2-X2 03340 PRINT "WARP ENGINES SHUT DOWN AT SECTOR";S1;",";S2;"DUE TO BAD