1  REM ADAPTED FROM INTEREX 2730_L074 FILE TREK1
2  REM RENAMED TO TREK3 BECAUSE THAT'S WHAT THE COMMENT SAYS
3  REM MODIFIED FOR PTBASIC BY WTN 1/23 - REPLACED TIM STUFF
4  REM WITH PROMPT FOR SEEDING RNG, ADDED NUMBER PRINT CODE
5  REM TO IMPROVE FORMATTING, OTHER MINOR TWEAKS
10  REM  **************** TREK3 ********************* 
50  REM  GEN DATE  OCT 19 1979    UPDATED               DK
100  PRINT 
102  PRINT "*** TREK3 ***"
110  LET P=H=M=K=W0=0
120  REM LET T=60*TIM(0)+3600*TIM(1)+TIM(-1)
121  PRINT "ENTER A NUMBER TO SEED THE GALAXY ";
122  INPUT T
124  IF T<20000 THEN 131
125  LET T=T/10
126  GOTO 124
130  REM FOR I=1TO INT(T)/100 
131  FOR I=0 TO ABS(T)
140  LET R=RND(0)
150  NEXT I
151  PRINT 
1000  PRINT "WELCOME TO..."
1010  PRINT TAB(30);"S T A R  T R E K"
1020  PRINT 
1030  PRINT 
1040  PRINT TAB(10)"DO YOU WANT A PICTURE DISPLAY  ";
1050  GOSUB 5160
1060  IF G <= 0 THEN 1200
1070  PRINT 
1080  PRINT 
1090  PRINT TAB(5)"                               *"
1100  PRINT TAB(5)"                      ''''''''' '''''''''"
1110  PRINT TAB(5)"    \'''''''''''']    '-----..  ..------'"
1120  PRINT TAB(5)"     '----------'            '  '"
1130  PRINT TAB(5)"               \ \          '..'"
1140  PRINT TAB(5)"                 /----------'. '--."
1150  PRINT TAB(5)"                 ' .  ...  .. .. >/"
1160  PRINT TAB(5)"                  \---...   .. . >\"
1170  PRINT TAB(5)"                         '''---.-'"
1180  PRINT 
1190  PRINT 
1200  PRINT TAB(10)"DO YOU WANT THE INTRODUCTION  ";
1210  GOSUB 5160
1220  IF G <= 0 THEN 1330
1230  PRINT 
1240  PRINT TAB(10)"CAPTAIN'S LOG, STAR DATE  "123456.*RND(1)
1250  PRINT TAB(10)"THE USS ENTERPRISE, ON A FIVE-YEAR MISSION"
1260  PRINT TAB(10)"THROUGH THE GALAXY"
1270  PRINT TAB(10)"IS ON PATROL IN THE ARCTURUS SECTOR"
1280  PRINT TAB(10)"NEAR GAMMA-TRISKELLION 7"
1290  PRINT TAB(10)"WHEN IT IS CONFRONTED BY"
1300  PRINT 
1310  PRINT TAB(10);". . .  A KLINGON BATTLE CRUISER !"
1320  PRINT 
1330  PRINT TAB(10)"DO YOU WANT A WEAPONRY-RANGE BRIEFING ";
1340  GOSUB 5160
1350  IF G <= 0 THEN 1500
1360  REM OUTPUT DEVICE STUFF REMOVED
1390  PRINT 
1400  PRINT 
1410  PRINT TAB(12);"WEAPONRY";TAB(46);"RANGE"
1420  PRINT 
1430  PRINT "FORWARD PHASERS";TAB(43);"300,000 KM"
1440  PRINT "REAR PHASERS";TAB(43);"300,000 KM"
1450  PRINT "FWD PHOTON TORPEDO PROJECTORS          ";
1460  PRINT "200,000-600,000 KM"
1470  PRINT "REAR PHOTON TORPEDO PROJECTORS         ";
1480  PRINT "200,000-600,000 KM"
1490  PRINT 
1500  PRINT TAB(10)"DO YOU WANT A MANEUVERS BRIEFING  ";
1510  GOSUB 5160
1520  IF G <= 0 THEN 1710
1530  REM OUTPUT DEVICE STUFF REMOVED
1560  PRINT 
1570  PRINT 
1580  PRINT TAB(15);"M A N E U V E R S"
1590  PRINT 
1600  PRINT "0. END PROGRAM"
1610  PRINT "1. FIRE FORWARD PHASERS"
1620  PRINT "2. FIRE REAR PHASERS"
1630  PRINT "3. FIRE FORWARD PHOTON TORPEDO"
1640  PRINT "4. FIRE REAR PHOTON TORPEDO"
1650  PRINT "5. ACTIVATE AUTO DESTRUCT"
1660  PRINT "6. OFFER SURRENDER"
1670  PRINT "7. ATTEMPT TO BREAK CONTACT -- GO INTO WARP DRIVE"
1680  PRINT "8. MOVE CLOSER TO KLINGON"
1690  PRINT "9. TURN OVER CONTROL TO MR. SPOCK"
1700  PRINT "10. ASK MR. SPOCK TO RECOMMEND A MOVE"
1710  PRINT 
1720  PRINT TAB(10)"KLINGON COMING INTO RANGE -- SHIELDS ON"
1730  PRINT TAB(10)"BATTLE STATIONS -- RED ALERT"
1740  LET R=300000.*RND(0)
1750  LET A=360*RND(0)
1760  GOSUB 2570
1770  PRINT TAB(10)"THE RANGE = ";
1771  LET Z9=R
1772  GOSUB 9500
1773  PRINT "KM AT A VECTOR HEADING OF ";
1774  LET Z9=A
1775  GOSUB 9500
1776  PRINT " DEGREES"
1780  GOSUB 1870
1790  IF H>8 THEN 3570
1800  IF E=6 THEN 3740
1810  IF E=5 THEN 3640
1820  IF R>1.00000E+06 THEN 3720
1830  GOSUB 2290
1840  IF P>8 THEN 3640
1850  IF R>1.00000E+06 THEN 3720
1860  GOTO 1760
1870  REM  **   INPUT TREE (ENTERPRISE)   **  
1880  LET W=2
1890  GOTO 3900
1900  IF (E+1)=1 THEN 5200
1910  IF (E+1)=6 THEN 2020
1920  IF (E+1)=7 THEN 2110
1930  IF (E+1)=8 THEN 2230
1940  IF (E+1)=9 THEN 2260
1950  GOTO 4890
1960  LET B=RND(0)
1970  IF B>.4 THEN 2000
1980  PRINT TAB(10)"MISS, BAD AIM"
1990  RETURN 
2000  GOSUB 2970
2010  RETURN 
2020  PRINT 
2030  PRINT TAB(10);"A C T I V A T E D"
2040  PRINT 
2050  FOR K=1 TO 10
2060  WAIT (1100-100*K)
2070  PRINT TAB(5*K);11-K
2080  NEXT K
2090  PRINT 
2100  GOTO 3640
2110  LET B=RND(0)
2120  IF B<.5 THEN 2190
2130  PRINT 
2140  PRINT "ON BEHALF OF THE KLINGON EMPIRE, I ACCEPT YOUR SURRENDER"
2150  PRINT 
2160  PRINT TAB(10);"PREPARE TO BE BOARDED"
2170  LET Q=1
2180  GOTO 4990
2190  PRINT TAB(10)"YOUR SURRENDER IS REJECTED"
2200  PRINT TAB(10)"FIGHT ON, COWARD!"
2210  LET Q=0
2220  RETURN 
2230  LET R=R+(200000.*RND(0))
2240  IF R<1.00000E+06 THEN 2270
2250  RETURN 
2260  LET R=R*RND(0)
2270  PRINT TAB(10)"NEW RANGE = ";
2271  LET Z9=R
2272  GOSUB 9500
2273  PRINT "KM."
2280  RETURN 
2290  REM  **   RANDOM SELECTION TREE (KLINGON)   **  
2300  PRINT 
2310  LET W=1
2320  LET K=INT((7*RND(0))+1)
2330  GOSUB 2780
2340  IF N>0 THEN 2320
2350  IF K=1 OR K=2 THEN 2390
2360  IF K=3 OR K=4 OR K=5 THEN 2420
2370  IF K=6 THEN 2470
2380  IF K=7 THEN 2530
2390  PRINT TAB(10)"KLINGON FIRES PHOTON TORPEDO"
2400  GOSUB 2970
2410  RETURN 
2420  PRINT TAB(10)"KLINGON FIRES PHASERS AT ENTERPRISE"
2430  LET B=RND(0)
2440  IF B>.2 THEN 2400
2450  PRINT TAB(10)"YOU OUTMANEUVERED HIM, MISS"
2460  RETURN 
2470  PRINT TAB(10)"KLINGON ATTEMPTING TO BREAK CONTACT"
2480  LET R=R+(200000.*RND(0))
2490  IF R<1.00000E+06 THEN 2510
2500  RETURN 
2510  PRINT TAB(10)"CONTACT NOT BROKEN"
2520  RETURN 
2530  PRINT TAB(10)"KLINGON APPROACHING"
2540  LET R=R*RND(0)
2550  RETURN 
2560  REM   **  RANGE AND ANGLE CALCULATOR  **  
2570  PRINT 
2580  IF K>5 THEN 2600
2590  LET R=ABS(R+15000*(RND(0)-RND(0)))
2600  LET A=ABS(A+(RND(0)-RND(0))*2.00000E+06/R)
2610  LET A=A-360*INT(A/360)
2620  RETURN 
2630  REM       **  ERROR CALCULATOR   ** 
2640  IF E<0 THEN 2710
2650  IF E>4 THEN 1900
2660  IF E<3 THEN 2740
2670  IF R>600000. THEN 2710
2680  IF P>7 THEN 2710
2690  IF R<200000. THEN 2710
2700  GOTO 1900
2710  PRINT TAB(10)"SIR . . . YOUR MOVE IS IMPOSSIBLE"
2720  PRINT TAB(10)"I SUGGEST YOU TRY AGAIN"
2730  GOTO 3910
2740  IF R>300000. THEN 2710
2750  IF P>6 THEN 2710
2760  GOTO 1900
2770  REM           **  KLINGON LOGIC TREE  **  
2780  IF K>5 THEN 2900
2790  IF K>2 THEN 2870
2800  IF R>600000. THEN 2850
2810  IF R<200000. THEN 2850
2820  IF H>7 THEN 2850
2830  LET N=0
2840  RETURN 
2850  LET N=1
2860  RETURN 
2870  IF R>300000. THEN 2850
2880  IF H>6 THEN 2850
2890  GOTO 2830
2900  IF P>H+1 THEN 2950
2910  IF P+1<H THEN 2930
2920  GOTO 2830
2930  IF K=7 THEN 2850
2940  GOTO 2830
2950  IF K=6 THEN 2850
2960  GOTO 2830
2970  REM        **   HIT CALCULATOR   ** 
2980  LET B=RND(0)
2990  IF B>.75 THEN 3100
3000  IF B>.4 THEN 3030
3010  PRINT TAB(10)"NEAR MISS"
3020  RETURN 
3030  IF W=1 THEN 3070
3040  PRINT TAB(10)"HIT ON KLINGON BATTLE CRUISER, DAMAGE REPORT-"
3050  LET H=H+1
3060  GOTO 3370
3070  PRINT TAB(10)"HIT ON USS ENTERPRISE, DAMAGE REPORT-"
3080  LET P=P+1
3090  GOTO 3160
3100  IF W=1 THEN 3140
3110  PRINT TAB(10)"DIRECT HIT ON KLINGON VESSEL, DAMAGE REPORT-"
3120  LET H=H+1
3130  GOTO 3370
3140  PRINT TAB(10)"DIRECT HIT ON ENTERPRISE, DAMAGE REPORT-"
3150  LET P=P+1
3160  IF P=1 OR P=2 OR P=3 THEN 3240
3170  IF P=4 OR P=5 THEN 3260
3180  IF P=6 THEN 3280
3190  IF P=7 THEN 3300
3200  IF P=8 THEN 3330
3210  IF P=9 THEN 3220
3220  LET D=1
3230  RETURN 
3240  PRINT TAB(25)"SHIELDS HOLDING, NO DAMAGE"
3250  RETURN 
3260  PRINT TAB(25)"SHIELDS WEAKENING, MINOR DAMAGE IN MIDSHIPS"
3270  RETURN 
3280  PRINT TAB(25)"ALL SHIELDS DESTROYED, DAMAGE TO OUTER HULL"
3290  RETURN 
3300  LET D=4
3310  PRINT TAB(25)"PHASERS DEACTIVATED, LITHIUM CELLS OVERHEATING"
3320  RETURN 
3330  LET D=5
3340  PRINT TAB(25)"ALL WEAPONS DESTROYED, POWER DROPPING"
3350  PRINT TAB(25)"CRACK IN WARP ENGINE CASING"
3360  RETURN 
3370  IF H=1 OR H=2 OR H=3 THEN 3450
3380  IF H=4 OR H=5 THEN 3470
3390  IF H=6 THEN 3490
3400  IF H=7 THEN 3510
3410  IF H=8 THEN 3530
3420  IF H=9 OR H=10 THEN 3430
3430  LET D=8
3440  RETURN 
3450  PRINT TAB(25)"SHIELDS HOLDING, NO DAMAGE"
3460  RETURN 
3470  PRINT TAB(25)"SHIELDS WEAKENING, MINOR DAMAGE"
3480  RETURN 
3490  PRINT TAB(25)"ALL SHIELDS DESTROYED, HULL DAMAGE"
3500  RETURN 
3510  PRINT TAB(25)"PHASER BANKS DESTROYED, ";
3511  PRINT "MAJOR DAMAGE IN FORE AND AFT"
3520  RETURN 
3530  LET D=7
3540  PRINT TAB(25)"ALL WEAPONS ON KLINGON VESSEL DEACTIVATED,";
3550  PRINT "POWER DROPPING"
3560  RETURN 
3570  PRINT 
3580  PRINT TAB(12);"*** C O N G R A T U L A T I O N S ***"
3590  PRINT 
3600  PRINT TAB(25)"KLINGON VESSEL DESTROYED!"
3610  PRINT 
3620  PRINT TAB(25)"SECURE FROM RED ALERT"
3630  GOTO 3750
3640  PRINT TAB(10)"ENTERPRISE DESTROYED"
3650  PRINT 
3660  IF E=5 THEN 3680
3670  GOTO 3750
3680  LET D=9800*RND(0)+200
3690  PRINT TAB(10)"RADIUS OF MATTER-ANTIMATTER EXPLOSION=";
3691  LET Z9=D
3692  GOSUB 9500
3693  PRINT "KM."
3700  IF R <= D THEN 3600
3710  GOTO 3750
3720  PRINT TAB(10)"CONTACT BROKEN, SECURE FROM RED ALERT."
3730  GOTO 3750
3740  IF Q=0 THEN 1830
3750  PRINT TAB(10)"DO YOU WANT ANOTHER BATTLE  ";
3760  GOSUB 5160
3770  LET Z=G
3780  IF Z<0 THEN 5200
3790  LET W0=0
3800  LET K=0
3810  IF P=0 THEN 3840
3820  LET P=0
3830  PRINT TAB(10)"REPAIRS COMPLETED"
3840  LET H=0
3850  IF M=0 THEN 1320
3860  PRINT "KIRK RESTORED"
3870  LET M=0
3880  GOTO 1320
3890  REM   ***   ENTERPRISE CONTROL TREE   *** 
3900  IF W0=2 THEN 4250
3910  PRINT 
3920  PRINT TAB(10)"WHAT IS YOUR MOVE . . . ";
3930  INPUT E
3940  LET E=INT(E)
3950  IF RND(0)>.15 THEN 4560
3960  LET E=INT(E)
3970  PRINT 
3980  PRINT TAB(10)"ARE YOU SURE, CAPTAIN ?"
3990  PRINT TAB(10)"SHUT UP, SCOTTY"
4000  GOTO 4560
4010  WAIT (1500)
4020  PRINT 
4030  PRINT 
4040  PRINT TAB(10)"THIS IS MR. SPOCK TAKING THE CONTROLS"
4050  PRINT 
4060  WAIT (1000)
4070  LET W0=2
4080  LET K0=0
4090  PRINT TAB(10)"ENTERPRISE ";
4100  IF P<7 THEN 4360
4110  IF P=7 THEN 4190
4120  IF H<7 THEN 4170
4130  IF H=8 THEN 4520
4140  IF R<5000 THEN 4500
4150  IF R<400000. THEN 4540
4160  GOTO 4520
4170  IF R<8750 THEN 4500
4180  IF R>50000. THEN 4520
4190  IF R<200000. THEN 4220
4200  IF R>600000. THEN 4520
4210  GOTO 4440
4220  IF H=7 THEN 4540
4230  IF R<50000. THEN 4540
4240  GOTO 4520
4250  LET K0=K0+1
4260  IF K0<8*RND(0) THEN 4300
4270  LET W0=1
4280  PRINT TAB(10)"MR. SCOTT, TAKE OVER -- I FIND MYSELF TIRING"
4290  GOTO 3910
4300  IF M>0 THEN 4090
4310  PRINT TAB(10)"SPOCK PHASERS KIRK"
4320  PRINT TAB(10)"HELP !  BONES !"
4330  PRINT TAB(10)"TO COIN A PHRASE -- FASCINATING !"
4340  LET M=1
4350  GOTO 4090
4360  IF R>600000. THEN 4540
4370  IF R>200000. THEN 4440
4380  IF A<90 THEN 4420
4390  IF A>270 THEN 4420
4400  LET E=2
4410  GOTO 4610
4420  LET E=1
4430  GOTO 4610
4440  IF A<90 THEN 4480
4450  IF A>270 THEN 4480
4460  LET E=4
4470  GOTO 4610
4480  LET E=3
4490  GOTO 4610
4500  LET E=5
4510  GOTO 4610
4520  LET E=7
4530  GOTO 4610
4540  LET E=8
4550  GOTO 4610
4560  IF E<9 THEN 2640
4570  IF E>9 THEN 4590
4580  GOTO 4010
4590  IF E#10 THEN 2710
4600  GOTO 4100
4610  IF W0#2 THEN 4800
4620  IF E=1 OR E=2 THEN 4680
4630  IF E=3 OR E=4 THEN 4700
4640  IF E=5 THEN 4720
4650  IF E=6 THEN 4740
4660  IF E=7 THEN 4760
4670  IF E=8 THEN 4780
4680  PRINT "FIRES PHASERS"
4690  GOTO 1900
4700  PRINT "FIRES PHOTON TORPEDO"
4710  GOTO 1900
4720  PRINT "ACTIVATES AUTO DESTRUCT"
4730  GOTO 1900
4740  REM:  THIS WOULD NOT HAPPEN 
4750  GOTO 1900
4760  PRINT "ATTEMPTS TO BREAK CONTACT"
4770  GOTO 1900
4780  PRINT "MOVES CLOSER TO KLINGON"
4790  GOTO 1900
4800  PRINT 
4810  PRINT 
4820  PRINT TAB(10)"FASCINATING !"
4830  PRINT TAB(10)"I RECOMMEND MOVE"E
4840  IF RND(0)>.2 THEN 3910
4850  PRINT TAB(10)"ARE YOU TRYING TO BE FUNNY SPOCK ?"
4860  PRINT TAB(10)"IT WOULD NEVER OCCUR TO ME, SIR."
4870  GOTO 3910
4880  REM          **  ENTERPRISE ANGLE CHECK  ** 
4890  IF E/2=INT(E/2) THEN 4960
4900  IF A<90 THEN 4940
4910  IF A>270 THEN 4940
4920  PRINT TAB(10)"MISS, INCORRECT VECTOR ANGLE"
4930  RETURN 
4940  IF E<3 THEN 1960
4950  GOTO 2000
4960  IF A<90 THEN 4920
4970  IF A>270 THEN 4920
4980  GOTO 4940
4990  PRINT TAB(16)"( THE KLINGONS TAKE NO PRISONERS )"
5000  LET R=R+(200000.*RND(0))
5010  FOR K=1 TO 4
5020  PRINT 
5030  WAIT (2000)
5040  PRINT TAB(10)"KLINGON APPROACHING"
5050  PRINT TAB(10)"RANGE = ";
5051  LET Z9=R-(R-5000)*K/4
5052  GOSUB 9500
5053  PRINT "KM"
5060  NEXT K
5070  WAIT (3000)
5080  PRINT 
5090  PRINT TAB(5)"PHASERS LOCKED ON TARGET -- ENTERPRISE SHIELDS DOWN"
5100  PRINT 
5110  PRINT TAB(5)"FULL PHASER FIRE AT POINT-BLANK RANGE, DIRECT HIT"
5120  WAIT (3000)
5130  PRINT 
5140  WAIT (3000)
5150  GOTO 3640
5160  PRINT "YES = 1    NO = 0 ";
5170  INPUT G
5180  IF G#0 THEN 5190
5181  LET G=-1
5190  RETURN 
5200  PRINT TAB(30)"ENTERPRISE RETURNING TO BASE"
5210  REM CHAIN "MENU"
5211  STOP 
9495  REM *** INTEGER PRINT SUBROUTINE ***
9496  REM UP TO 6 DIGITS -999999 TO 999999, NO SPACES PRINTED
9497  REM NUMBER TO PRINT IN Z9, Z8 AND Z7 USED FOR TEMPS
9498  REM IF OUT OF RANGE JUST PRINTS
9499  REM IF NOT INTEGER JUST PRINTS
9500  IF ABS(Z9) <= 999999. THEN 9505
9501  IF Z9=INT(Z9) THEN 9505
9502  PRINT Z9;
9503  RETURN 
9505  IF Z9 >= 0 THEN 9520
9510  PRINT "-";
9520  LET Z8=ABS(Z9)
9530  LET Z8=INT(Z8)
9540  IF Z8<10 THEN 9660
9550  IF Z8<100 THEN 9630
9560  IF Z8<1000 THEN 9600
9561  IF Z8<10000 THEN 9570
9562  IF Z8<100000. THEN 9566
9563  LET Z7=INT(Z8/100000.)
9564  LET Z8=Z8-Z7*100000.
9565  GOSUB 9700
9566  LET Z7=INT(Z8/10000)
9567  LET Z8=Z8-Z7*10000
9568  GOSUB 9700
9570  LET Z7=INT(Z8/1000)
9580  LET Z8=Z8-Z7*1000
9590  GOSUB 9700
9600  LET Z7=INT(Z8/100)
9610  LET Z8=Z8-Z7*100
9620  GOSUB 9700
9630  LET Z7=INT(Z8/10)
9640  LET Z8=Z8-Z7*10
9650  GOSUB 9700
9660  LET Z7=Z8
9670  GOSUB 9700
9680  RETURN 
9695  REM DIGIT PRINT SUBROUTINE, DIGIT IN Z7
9700  IF Z7=1 THEN 9810
9710  IF Z7=2 THEN 9830
9720  IF Z7=3 THEN 9850
9730  IF Z7=4 THEN 9870
9740  IF Z7=5 THEN 9890
9750  IF Z7=6 THEN 9910
9760  IF Z7=7 THEN 9930
9770  IF Z7=8 THEN 9950
9780  IF Z7=9 THEN 9970
9790  PRINT "0";
9800  RETURN 
9810  PRINT "1";
9820  RETURN 
9830  PRINT "2";
9840  RETURN 
9850  PRINT "3";
9860  RETURN 
9870  PRINT "4";
9880  RETURN 
9890  PRINT "5";
9900  RETURN 
9910  PRINT "6";
9920  RETURN 
9930  PRINT "7";
9940  RETURN 
9950  PRINT "8";
9960  RETURN 
9970  PRINT "9";
9980  RETURN 
9999  END 

