10  REM A PT-BASIC CONVERSION OF A STARTREK PROGRAM - 4/21 WTN
11  REM PROG I STARTED WITH WAS STARTREK.BAS AND STINSTR.TXT
12  REM FOR QBASIC, FILES DATED 11/26/2000 AND 11/22/2000
13  REM STRING ARRAY USAGE REPLACED WITH INDEXED PRINT SUBS
14  REM PTBASIC HAS 1 LETTER ARRAYS, CHANGED K1->K K2->L K3->M
15  REM BUMPED ALL ARRAY DIMENSIONS BY +1 (BY ADDING +1)
16  REM MODIFIED TEXT FORMATTING, ADDED >< MAP INDICATOR
17  REM CHANGED THE WORDINGS OF SOME THINGS (MORE MEMORY!)
18  REM ADDED STATUS REPORT, CHANGED HOW TIME IS SCORED
100  DIM D[6],K[8],L[8],M[8],S[8,8],Q[8,8]
110  PRINT 
120  PRINT "ENTER 1 TO PRINT INSTRUCTIONS, 2 TO PAUSE INSTRUCTIONS,"
121  PRINT "OR ENTER A NUMBER TO SEED THE GALAXY...   ";
122  INPUT I
125  IF I<1 OR I>2 THEN 140
130  GOSUB 2000
140  LET I=ABS(I)
150  IF I<10000 THEN 160
151  LET I=I/5
152  GOTO 150
160  LET I=INT(I)
161  IF I>0 THEN 170
162  LET I=1
170  PRINT "SETTING UP GALAXY NUMBER ";
171  LET Z9=I
172  GOSUB 9400
173  PRINT "..."
174  FOR J=0 TO I
175  LET K=RND(1)
176  NEXT J
179  PRINT 
180  DEF FND(N)=SQR((K[I+1]-S1)^2+(L[I+1]-S2)^2)
190  GOSUB 690
191  GOSUB 530
192  LET Q1=X
193  LET Q2=Y
194  LET X=8
195  LET Y=1
196  LET X1=.2075
197  LET Y1=6.28
198  LET X2=3.28
200  LET Y2=1.8
201  LET A=.96
202  LET C=100
203  LET W=10
204  LET K9=B9=0
206  LET S9=400
207  LET T9=3451
208  GOTO 220
209  REM MOD FOR HPBASIC TRUE=1 INSTEAD OF -1 HERE AND ELSEWHERE
210  LET K=K-(N<X2)-(N<Y2)-(N<.28)-(N<8.00000E-02)
211  LET K=K-(N<3.00000E-02)-(N<1.00000E-02)
212  LET K9=K9-K
213  GOTO 240
220  LET T0=3421
221  LET T=T0
222  LET E0=E=4000
223  LET P0=P=10
224  FOR I=0 TO 7
230  FOR J=0 TO 7
231  LET K=0
232  LET N=RND(1)
233  IF N >= X1 THEN 240
234  LET N=N*64
235  LET K=-(N<Y1)-Y
236  GOTO 210
240  LET B=-(RND(1)>A)
241  LET B9=B9-B
242  LET Q[I+1,J+1]=K*C+B*W-INT(RND(1)*X+Y)
243  NEXT J
244  NEXT I
250  IF K9 <= (T9-T0) THEN 260
251  LET T9=T0+K9
260  IF B9>0 THEN 280
270  GOSUB 530
271  LET Q[X+1,Y+1]=Q[X+1,Y+1]-10
272  LET B9=1
280  PRINT "STARTREK"
281  REM PRINT LEFT$("STARTREK ADAPTED BY L.E. COCHRAN 2/29/76",8)
282  LET K0=K9
285  PRINT "========"
286  PRINT 
290  PRINT "OBJECTIVE: DESTROY ";
291  LET Z9=K9
292  GOSUB 9400
293  PRINT " KLINGON BATTLE CRUISERS IN ";
294  LET Z9=T9-T0
295  GOSUB 9400
296  PRINT " YEARS."
297  PRINT "THIS GIVES YOU UNTIL STARDATE ";
298  LET Z9=T9
299  GOSUB 9400
300  PRINT " TO COMPLETE YOUR MISSION."
301  PRINT "YOU HAVE ";
302  LET Z9=B9
303  GOSUB 9400
304  PRINT " STARBASE";
305  IF B9=1 THEN 307
306  PRINT "S";
307  PRINT " FOR RESUPPLYING YOUR STARSHIP."
309  PRINT 
310  LET A=0
311  IF Q1<0 OR Q1>7 OR Q2<0 OR Q2>7 THEN 313
312  GOTO 320
313  LET N=S=K=0
314  GOTO 330
320  LET N=ABS(Q[Q1+1,Q2+1])
321  LET Q[Q1+1,Q2+1]=N
322  LET S=N-INT(N/10)*10
323  LET K=INT(N/100)
330  LET B=INT(N/10-K*10)
331  GOSUB 530
332  LET S1=X
333  LET S2=Y
340  FOR I=0 TO 7
341  FOR J=0 TO 7
342  LET S[I+1,J+1]=1
343  NEXT J
344  NEXT I
345  LET S[S1+1,S2+1]=2
350  FOR I=0 TO 7
351  LET M[I+1]=0
352  LET X=8
353  IF I >= K THEN 360
354  GOSUB 540
355  LET S[X+1,Y+1]=3
356  LET M[I+1]=S9
360  LET K[I+1]=X
361  LET L[I+1]=Y
362  NEXT I
363  LET I=S
370  IF B <= 0 THEN 380
371  GOSUB 540
372  LET S[X+1,Y+1]=4
380  IF I <= 0 THEN 390
381  GOSUB 540
382  LET S[X+1,Y+1]=5
383  LET I=I-1
384  GOTO 380
390  GOSUB 630
391  IF A#0 THEN 400
392  GOSUB 560
400  IF E <= 0 THEN 1450
410  LET I=1
411  IF D[I+1]>0 THEN 700
420  FOR I=0 TO 7
421  FOR J=0 TO 7
422  LET I9=S[I+1,J+1]
423  IF I9#1 THEN 425
424  PRINT ". ";
425  IF I9#2 THEN 427
426  PRINT "E ";
427  IF I9#3 THEN 429
428  PRINT "K ";
429  IF I9#4 THEN 431
430  PRINT "B ";
431  IF I9#5 THEN 433
432  PRINT "* ";
433  NEXT J
436  IF I=1 THEN 460
437  IF I=2 THEN 470
438  IF I=3 THEN 480
439  IF I=4 THEN 490
440  IF I=5 THEN 500
441  IF I=6 THEN 510
442  IF I=7 THEN 520
443  PRINT 
450  NEXT I
451  GOTO 730
460  PRINT "  STARDATE  ";T
461  GOTO 450
470  PRINT "  CONDITION  ";
471  IF C9#1 THEN 473
472  PRINT "GREEN"
473  IF C9#2 THEN 475
474  PRINT "YELLOW"
475  IF C9#3 THEN 477
476  PRINT "RED"
477  IF C9#4 THEN 479
478  PRINT "DOCKED"
479  GOTO 450
480  PRINT "  QUADRANT   ";
481  LET Z9=Q1+1
482  GOSUB 9400
483  PRINT "-";
484  LET Z9=Q2+1
485  GOSUB 9400
486  PRINT 
489  GOTO 450
490  PRINT "  SECTOR     ";
491  LET Z9=S1+1
492  GOSUB 9400
493  PRINT "-";
494  LET Z9=S2+1
495  GOSUB 9400
496  PRINT 
499  GOTO 450
500  PRINT "  ENERGY    ";E
501  GOTO 450
510  PRINT "  TORPEDOS LEFT =";P
513  GOTO 450
520  PRINT "  KLINGONS LEFT =";K9
521  GOTO 450
530  LET X=INT(RND(1)*8)
531  LET Y=INT(RND(1)*8)
532  RETURN 
540  GOSUB 530
541  IF S[X+1,Y+1]>1 THEN 540
550  RETURN 
560  IF K >= 1 THEN 570
561  RETURN 
570  IF C9#4 THEN 580
571  PRINT "STARBASE PROTECTS ENTERPRISE"
572  RETURN 
580  FOR I=0 TO 7
581  IF M[I+1] <= 0 THEN 605
590  LET H=M[I+1]*.4*RND(1)
591  LET M[I+1]=M[I+1]-H
592  LET H=H/(FND(0)^.4)
593  LET E=E-H
600  LET Z6=6
601  LET N=E
602  GOSUB 610
605  NEXT I
606  RETURN 
610  LET Z9=H
612  GOSUB 9400
614  PRINT " UNIT HIT ON ";
615  GOSUB 1600
616  PRINT " SECTOR ";
617  LET Z9=K[I+1]+1
618  GOSUB 9400
619  PRINT "-";
620  LET Z9=L[I+1]+1
621  GOSUB 9400
622  PRINT " (";
623  LET Z9=N
624  GOSUB 9400
625  PRINT " LEFT)"
626  RETURN 
630  FOR I=S1-1 TO S1+1
631  FOR J=S2-1 TO S2+1
640  IF I<0 OR I>7 OR J<0 OR J>7 THEN 660
650  IF S[I+1,J+1]#4 THEN 660
651  LET C9=4
652  LET E=E0
653  LET P=P0
654  GOSUB 690
655  RETURN 
660  NEXT J
661  NEXT I
662  IF K <= 0 THEN 670
663  LET C9=3
664  RETURN 
670  IF E >= E0*.1 THEN 680
671  LET C9=2
672  RETURN 
680  LET C9=1
681  RETURN 
690  FOR N=0 TO 5
691  LET D[N+1]=0
692  NEXT N
693  RETURN 
700  LET Z6=I
701  GOSUB 1600
702  PRINT " DAMAGED. ";
710  LET Z9=D[I+1]
711  GOSUB 9400
712  PRINT " YEARS ESTIMATED FOR REPAIR."
715  PRINT 
720  IF A#1 THEN 730
721  RETURN 
730  PRINT "COMMAND ";
731  INPUT A
735  IF A<-98 THEN 1520
740  IF A<1 OR A>7 THEN 760
750  IF A=1 THEN 790
751  IF A=2 THEN 390
753  IF A=3 THEN 1330
754  IF A=4 THEN 1220
755  IF A=5 THEN 770
756  IF A=6 THEN 1380
757  GOTO 1700
760  FOR I=0 TO 5
761  LET Z9=I+1
762  GOSUB 9400
763  PRINT " = ";
764  LET Z6=I
765  GOSUB 1600
766  PRINT 
767  NEXT I
768  PRINT "7 - STATUS REPORT"
769  GOTO 730
770  IF D[4+1] <= 0 THEN 780
771  PRINT "SPACE CRUD BLOCKING TUBES."
772  LET I=4
773  GOTO 710
780  LET N=15
781  IF P >= 1 THEN 790
782  PRINT "NO TORPEDOES LEFT."
783  GOTO 730
790  IF A#5 THEN 800
791  PRINT "TORPEDO ";
800  PRINT "COURSE (1-8.9) ";
801  INPUT C
802  IF C<1 THEN 730
810  IF C >= 9 THEN 790
820  IF A#5 THEN 830
821  LET P=P-1
822  PRINT "TRACK: ";
823  GOTO 980
830  PRINT "WARP (0-12)    ";
831  INPUT W
832  IF W <= 0 OR W>12 THEN 790
840  IF W <= .2 OR D[0+1] <= 0 THEN 860
850  LET Z6=I=0
851  GOSUB 1600
852  PRINT " DAMAGED, MAX IS .2 ";
853  GOSUB 710
854  GOTO 830
860  GOSUB 560
861  IF E <= 0 THEN 1450
870  IF RND(1)>.25 THEN 950
880  LET X=INT(RND(1)*6)
881  IF RND(1)>.5 THEN 910
890  LET D[X+1]=D[X+1]+INT(6-RND(1)*5)
891  PRINT "**SPACE STORM, ";
900  LET Z6=X
901  GOSUB 1600
902  PRINT " DAMAGED**"
903  LET I=X
904  GOSUB 710
905  LET D[X+1]=D[X+1]+1
906  GOTO 950
910  FOR I=X TO 5
911  IF D[I+1]>0 THEN 940
920  NEXT I
930  FOR I=0 TO X
931  IF D[I+1]>0 THEN 940
935  NEXT I
936  GOTO 950
940  LET D[I+1]=.5
941  PRINT "**SPOCK USED A NEW REPAIR TECHNIQUE**"
950  FOR I=0 TO 5
951  IF D[I+1]=0 THEN 970
960  LET D[I+1]=D[I+1]-1
961  IF D[I+1]>0 THEN 970
962  LET D[I+1]=0
963  LET Z6=I
964  GOSUB 1600
965  PRINT " ARE FIXED!"
970  NEXT I
971  LET N=INT(W*8+.5)
972  LET E=E-N-N+.5
973  LET T=T+(W >= 1)+(N/8)*(W<1)+(W-1)*.1*(W>2)
974  LET S[S1+1,S2+1]=1
975  REM ADDED .5 TO N CALC, WAS FUNNY UNDER .125
976  REM ADJUSTED T CALC TO ADJUST FOR DISTANCE
977  REM UPDATED DOCS TO EXPLAIN FORMULA
980  LET Y1=S1+.5
981  LET X1=S2+.5
982  IF T>T9 THEN 1450
990  LET Y=(C-1)*.785398
991  LET X=COS(Y)
992  LET Y=-SIN(Y)
1000  FOR I=1 TO N
1001  LET Y1=Y1+Y
1002  LET X1=X1+X
1003  LET Y2=INT(Y1)
1004  LET X2=INT(X1)
1010  IF X2<0 OR X2>7 OR Y2<0 OR Y2>7 THEN 1190
1020  IF A#5 THEN 1030
1021  LET Z9=Y2+1
1022  GOSUB 9400
1023  PRINT "-";
1024  LET Z9=X2+1
1025  GOSUB 9400
1026  PRINT "  ";
1030  IF S[Y2+1,X2+1]#1 THEN 1040
1035  NEXT I
1036  GOTO 1140
1040  PRINT 
1041  IF A#1 THEN 1050
1042  PRINT "BLOCKED BY ";
1050  LET Z9=S[Y2+1,X2+1]-3
1051  IF Z9=1 THEN 1120
1052  IF Z9=2 THEN 1100
1060  PRINT "KLINGON";
1061  IF A=1 THEN 1130
1070  FOR I=0 TO 7
1071  IF Y2#K[I+1] THEN 1090
1080  IF X2#L[I+1] THEN 1090
1081  LET M[I+1]=0
1090  NEXT I
1091  LET K=K-1
1092  LET K9=K9-1
1093  GOTO 1150
1100  PRINT "STAR";
1101  IF A#5 THEN 1110
1102  LET S=S-1
1103  GOTO 1150
1110  GOTO 1130
1120  PRINT "STARBASE";
1121  IF A#5 THEN 1130
1122  LET B=2
1123  GOTO 1150
1130  PRINT " AT SECTOR";
1131  LET Z9=Y2+1
1132  GOSUB 9400
1133  PRINT "-";
1134  LET Z9=X2+1
1135  GOSUB 9400
1136  PRINT 
1137  LET Y2=INT(Y1-Y)
1138  LET X2=INT(X1-X)
1140  LET S1=Y2
1141  LET S2=X2
1142  LET S[S1+1,S2+1]=2
1143  LET A=2
1144  GOTO 390
1150  PRINT " DESTROYED!";
1151  IF B#2 THEN 1160
1152  LET B=0
1153  PRINT ". . .GOOD WORK!";
1154  LET B9=B9-1
1160  PRINT 
1161  LET S[Y2+1,X2+1]=1
1162  LET Q[Q1+1,Q2+1]=K*100+B*10+S
1163  IF K9<1 THEN 1480
1170  GOSUB 560
1171  IF E <= 0 THEN 1450
1180  GOSUB 630
1181  GOTO 730
1190  IF A#5 THEN 1200
1191  PRINT "MISSED!"
1192  GOTO 1170
1200  LET Q1=INT(Q1+W*Y+(S1+.5)/8)
1201  LET Q2=INT(Q2+W*X+(S2+.5)/8)
1210  LET Q1=Q1+(Q1<0)-(Q1>7)
1211  LET Q2=Q2+(Q2<0)-(Q2>7)
1212  GOTO 310
1220  LET I=3
1221  IF D[I+1]>0 THEN 700
1230  PRINT "PHASERS READY: ENERGY UNITS TO FIRE ";
1231  INPUT X
1232  IF X <= 0 THEN 730
1240  IF X <= E THEN 1250
1241  PRINT "ONLY GOT";E
1242  GOTO 1230
1250  LET E=E-X
1251  LET Y=K
1252  FOR I=0 TO 7
1253  IF M[I+1] <= 0 THEN 1310
1260  LET H=X/(Y*(FND(0)^.4))
1261  LET M[I+1]=M[I+1]-H
1270  LET Z6=7
1271  LET N=M[I+1]
1272  GOSUB 610
1280  IF M[I+1]>0 THEN 1310
1290  PRINT "**KLINGON DESTROYED**"
1300  LET K=K-1
1301  LET K9=K9-1
1302  LET S[K[I+1]+1,L[I+1]+1]=1
1303  LET Q[Q1+1,Q2+1]=Q[Q1+1,Q2+1]-100
1310  NEXT I
1311  IF K9<1 THEN 1480
1320  GOTO 1170
1330  LET I=2
1331  IF D[I+1]>0 THEN 700
1340  LET Z6=I
1341  GOSUB 1600
1342  PRINT " FOR QUADRANT ";
1343  LET Z9=Q1+1
1344  GOSUB 9400
1345  PRINT "-";
1346  LET Z9=Q2+1
1347  GOSUB 9400
1348  PRINT 
1350  FOR I=Q1-1 TO Q1+1
1351  FOR J=Q2-1 TO Q2+1
1352  PRINT "   ";
1360  IF I<0 OR I>7 OR J<0 OR J>7 THEN 1362
1361  GOTO 1370
1362  PRINT "***";
1363  GOTO 1375
1370  LET Q[I+1,J+1]=ABS(Q[I+1,J+1])
1371  LET Z9=Q[I+1,J+1]
1372  GOSUB 9300
1375  NEXT J
1376  PRINT 
1377  NEXT I
1378  GOTO 730
1380  LET I=5
1381  IF D[I+1]>0 THEN 700
1390  PRINT "CUMULATIVE GALACTIC MAP FOR STARDATE:";T
1400  FOR I=0 TO 7
1401  FOR J=0 TO 7
1402  IF I=Q1 AND J=Q2 THEN 1406
1403  IF I=Q1 AND J=Q2+1 THEN 1408
1404  PRINT "  ";
1405  GOTO 1410
1406  PRINT " >";
1407  GOTO 1410
1408  PRINT "< ";
1410  IF Q[I+1,J+1] >= 0 THEN 1420
1411  PRINT "***";
1412  GOTO 1430
1420  LET Z9=Q[I+1,J+1]
1421  GOSUB 9300
1430  NEXT J
1431  PRINT 
1432  NEXT I
1433  GOTO 730
1440  PRINT 
1441  PRINT "IT IS STARDATE";T
1442  RETURN 
1450  GOSUB 1440
1451  PRINT "THANKS TO YOUR BUNGLING, THE FEDERATION WILL BE"
1460  PRINT "CONQUERED BY THE REMAINING ";
1461  LET Z9=K9
1462  GOSUB 9400
1463  PRINT " KLINGON CRUISER";
1464  IF K9=1 THEN 1466
1465  PRINT "S";
1466  PRINT "!"
1470  PRINT "YOU ARE DEMOTED TO CABIN BOY!"
1471  GOTO 1510
1480  GOSUB 1440
1481  PRINT "THE FEDERATION HAS BEEN SAVED!"
1490  PRINT "YOU ARE PROMOTED TO ADMIRAL."
1491  LET Z9=K0
1492  GOSUB 9400
1493  PRINT " KLINGONS IN ";
1500  LET Z9=T-T0
1501  GOSUB 9400
1502  PRINT " YEARS.  RATING =";INT(K0/(T-T0)*1000)
1510  PRINT "TRY AGAIN? (0=NO 1=YES)  ";
1511  INPUT A
1512  IF A=1 THEN 190
1515  GOTO 1530
1520  PRINT 
1530  END 
1599  REM D$ DEVICE PRINTS DEVICE IN Z6 ADDED SOME
1600  IF Z6#0 THEN 1610
1605  PRINT "WARP ENGINES";
1610  IF Z6#1 THEN 1620
1615  PRINT "SHORT RANGE SENSORS";
1620  IF Z6#2 THEN 1630
1625  PRINT "LONG RANGE SENSORS";
1630  IF Z6#3 THEN 1640
1635  PRINT "PHASORS";
1640  IF Z6#4 THEN 1650
1645  PRINT "PHOTON TORPEDOES";
1650  IF Z6#5 THEN 1660
1655  PRINT "GALACTIC RECORDS";
1660  IF Z6#6 THEN 1670
1665  PRINT "ENTERPRISE FROM";
1670  IF Z6#7 THEN 1680
1675  PRINT "KLINGON AT";
1680  RETURN 
1699  REM STATUS COMMAND
1700  PRINT "QUADRANT/SECTOR/SCAN ";
1702  LET Z9=Q1+1
1703  GOSUB 9400
1704  PRINT "-";
1705  LET Z9=Q2+1
1706  GOSUB 9400
1707  PRINT " ";
1710  LET Z9=S1+1
1711  GOSUB 9400
1712  PRINT "-";
1713  LET Z9=S2+1
1714  GOSUB 9400
1715  PRINT " ";
1720  LET Z9=ABS(Q[Q1+1,Q2+1])
1721  GOSUB 9300
1722  PRINT 
1730  PRINT "ENERGY LEVEL        ";E
1735  PRINT "TORPEDO STOCK       ";P
1737  PRINT "NUMBER OF STARBASES ";B9
1740  PRINT "KLINGONS REMAINING  ";K9
1745  PRINT "YEARS REMAINING     ";T9-T
1750  FOR I=0 TO 5
1760  LET Z6=I
1770  GOSUB 1600
1780  PRINT TAB(21);
1790  LET Z6=D[I+1]
1800  IF Z6>0 THEN 1830
1810  PRINT "OK"
1820  GOTO 1880
1830  PRINT "DAMAGED (EST ";
1835  LET Z9=Z6
1840  GOSUB 9400
1850  PRINT " YEARS)"
1880  NEXT I
1890  GOTO 730
1999  REM INSTRUCTIONS SUB
2000  PRINT 
2005  PRINT 
2006  PRINT 
2007  PRINT "  IT IS STARDATE 3421 AND THE FEDERATION IS BEING INVADED"
2010  PRINT "BY A BAND OF KLINGON 'PIRATES' WHOSE OBJECTIVE IS TO TEST"
2020  PRINT "OUR DEFENSES.  IF EVEN ONE SURVIVES THE TRIAL PERIOD,"
2030  PRINT "KLINGON HEADQUARTERS WILL LAUNCH AN ALL-OUT ATTACK."
2040  PRINT "AS CAPTAIN OF THE FEDERATION STARSHIP 'ENTERPRISE', YOUR"
2050  PRINT "MISSION IS TO FIND AND DESTROY THE INVADERS BEFORE THE"
2060  PRINT "TIME RUNS OUT."
2070  PRINT 
2080  PRINT "  THE KNOWN GALAXY IS DIVIDED INTO 64 QUADRANTS ARRANGED"
2090  PRINT "LIKE A SQUARE CHECKERBOARD, 8 ON A SIDE.  EACH QUADRANT"
2100  PRINT "IS LIKEWISE DIVIDED INTO 64 SECTORS ARRANGED AS AN 8 BY 8"
2110  PRINT "SQUARE.  EACH SECTOR CAN CONTAIN A KLINGON (K), STAR (*),"
2120  PRINT "STARBASE (B), THE ENTERPRISE HERSELF (E), OR EMPTY SPACE"
2130  PRINT "(.).  EACH SECTOR IS ALSO NUMBERED; A STARBASE IN SECTOR"
2140  PRINT "3-5 IS 3 ROWS DOWN FROM THE TOP OF THE SHORT RANGE SCAN"
2150  PRINT "PRINT-OUT, AND 5 SECTORS TO THE RIGHT.  DOCKING AT A"
2160  PRINT "STARBASE IS DONE BY OCCUPYING AN ADJACENT SECTOR, AND"
2170  PRINT "REPROVISIONS YOUR STARSHIP WITH ENERGY AND PHOTON"
2180  PRINT "TORPEDOES, AS WELL AS REPAIRING ALL DAMAGES."
2190  PRINT 
2191  GOSUB 3000
2200  PRINT "YOUR STARSHIP WILL ACT ON THE FOLLOWING COMMANDS:"
2210  PRINT "COMMAND 1  WARP ENGINE CONTROL IS USED TO MOVE THE"
2220  PRINT "           ENTERPRISE.  YOU WILL BE ASKED TO SET THE"
2230  PRINT "           DISTANCE (MEASURED IN WARPS), AND THE COURSE"
2240  PRINT "           FOR THE MOVE.  THE AMOUNT OF TIME (IN YEARS)"
2250  PRINT "           REQUIRED FOR THE MOVE DEPENDS ON THE WARP"
2260  PRINT "           FACTOR - UNDER WARP 1 IS EQUAL TO THE WARP,"
2270  PRINT "           FROM WARP 1 TO 2 REQUIRES ONE YEAR, AND EACH"
2280  PRINT "           WARP EXCEEDING WARP 2 ADDS ANOTHER 0.1 YEAR."
2290  PRINT 
2300  PRINT "           COURSE - A NUMBER FROM 1 TO 8.999    4   3   2"
2310  PRINT "           INDICATING A DIRECTION (STARTING       \ ' /"
2320  PRINT "           WITH 1 TO THE RIGHT AND INCREASING   5 - * - 1"
2330  PRINT "           COUNTERCLOCKWISE).  TO MOVE TO THE     / ' \"
2340  PRINT "           LEFT, USE A COURSE OF 5.  (A COURSE  6   7   8"
2350  PRINT "           OF 3.5 IS HALFWAY BETWEEN 3 AND 4;"
2370  PRINT "           A COURSE OF 8.75 IS THREE-QUARTERS OF"
2380  PRINT "           THE WAY FROM 8 TO 1.)"
2390  PRINT 
2391  GOSUB 3000
2400  PRINT "           WARP - ONE WARP MOVES YOU THE WIDTH OF A"
2410  PRINT "           QUADRANT. A WARP OF .5 WILL MOVE YOU HALFWAY"
2420  PRINT "           THROUGH A QUADRANT; MOVING DIAGONALLY ACROSS A"
2430  PRINT "           QUADRANT TO THE NEXT WILL REQUIRE 1.414 WARPS."
2440  PRINT "           WARP 3 WILL MOVE YOU 3 QUADRANTS PROVIDING"
2450  PRINT "           NOTHING IN YOUR PRESENT QUADRANT BLOCKS YOUR"
2460  PRINT "           EXIT.  ONCE YOU LEAVE THE QUADRANT THAT YOU"
2470  PRINT "           WERE IN, YOU WILL ENTER HYPERSPACE; COMING OUT"
2480  PRINT "           OF HYPERSPACE WILL PLACE YOU RANDOMLY IN THE"
2490  PRINT "           NEW QUADRANT.  KLINGONS IN A GIVEN QUADRANT"
2500  PRINT "           WILL FIRE AT YOU WHENEVER YOU LEAVE, ENTER,"
2510  PRINT "           OR MOVE WITHIN THE QUADRANT.  ENTERING A"
2520  PRINT "           COURSE OR WARP OF ZERO CAN BE USED TO RETURN"
2530  PRINT "           TO THE COMMAND MODE."
2540  PRINT 
2550  PRINT "COMMAND 2  A SHORT RANGE SENSOR SCAN WILL PRINT OUT THE"
2560  PRINT "           QUADRANT YOU PRESENTLY OCCUPY SHOWING THE"
2570  PRINT "           CONTENT OF EACH OF THE 64 SECTORS, AS WELL"
2580  PRINT "           AS OTHER PERTINENT INFORMATION."
2590  PRINT 
2591  GOSUB 3000
2600  PRINT "COMMAND 3  THE LONG RANGE SENSOR SCAN SUMMARIZES THE"
2610  PRINT "           QUADRANT YOU ARE IN, AND THE ADJOINING ONES."
2620  PRINT "           EACH QUADRANT IS REPRESENTED AS A 3-DIGIT"
2630  PRINT "           NUMBER; THE FIRST (HUNDREDS) DIGIT IS THE"
2640  PRINT "           NUMBER OF KLINGONS IN THAT QUADRANT WHILE THE"
2650  PRINT "           MIDDLE DIGIT IS THE NUMBER OF STARBASES, AND"
2660  PRINT "           THE UNITS DIGIT IS THE NUMBER OF STARS.  AN"
2670  PRINT "           ENTRY OF 305 MEANS 3 KLINGONS, NO STARBASES,"
2680  PRINT "           AND 5 STARS."
2690  PRINT 
2700  PRINT "COMMAND 4  FIRE PHASERS; THE PORTION OF THE ENTERPRISE'S"
2710  PRINT "           ENERGY THAT YOU SPECIFY WILL BE DIVIDED EVENLY"
2720  PRINT "           AMONG THE KLINGONS IN THE QUADRANT AND FIRED"
2730  PRINT "           AT THEM.  SURVIVING KLINGONS WILL RETALIATE."
2740  PRINT "           PHASER FIRE BYPASSES STARS AND STARBASES, BUT"
2750  PRINT "           IS ATTENUATED BY THE DISTANCE IT TRAVELS."
2760  PRINT "           THE ARRIVING ENERGY DEPLETES THE SHIELD POWER"
2770  PRINT "           OF ITS TARGET.  ENERGY IS AUTOMATICALLY"
2780  PRINT "           DIVERTED TO THE SHIELDS AS NEEDED, BUT IF YOU"
2790  PRINT "           RUN OUT OF ENERGY YOU'LL GET FRIED."
2800  PRINT 
2801  GOSUB 3000
2810  PRINT "COMMAND 5  PHOTON TORPEDO CONTROL WILL LAUNCH A TORPEDO"
2820  PRINT "           ON A COURSE YOU SPECIFY WHICH WILL DESTROY"
2830  PRINT "           ANY OBJECT IN ITS PATH.  RANGE IS LIMITED TO"
2840  PRINT "           THE LOCAL QUADRANT.  EXPECT RETURN FIRE FROM"
2850  PRINT "           SURVIVING KLINGONS."
2860  PRINT 
2870  PRINT "COMMAND 6  THE GALACTIC RECORDS SECTION OF THE SHIP'S"
2880  PRINT "           COMPUTER RESPONDS TO THIS COMMAND BY PRINTING"
2890  PRINT "           OUT A GALACTIC MAP SHOWING THE RESULTS OF ALL"
2900  PRINT "           PREVIOUS SENSOR SCANS."
2910  PRINT 
2920  PRINT "COMMAND 7  THE STATUS SECTION OF THE SHIP'S COMPUTER"
2930  PRINT "           RESPONDS TO THIS COMMAND BY PRINTING OUT THE"
2940  PRINT "           SHIP'S LOCATION AND A 3-DIGIT SCAN, ENERGY AND"
2941  PRINT "           TORPEDO SUPPLIES, KLINGONS AND YEARS REMAINING"
2942  PRINT "           AND THE STATUS OF YOUR SHIP'S VITAL SYSTEMS."
2950  PRINT 
2960  PRINT "ENTER A NUMBER TO SEED THE GALAXY  ";
2970  INPUT I
2980  RETURN 
3000  IF I<2 THEN 3060
3010  PRINT "---- ENTER A NUMBER TO CONTINUE ---- ";
3020  INPUT Z9
3030  FOR J=1 TO 8
3040  PRINT 
3050  NEXT J
3060  RETURN 
9299  REM 3-DIGIT PRINT SUB WITH LEADING ZEROS, NUMBER IN Z9
9300  IF Z9 >= 100 THEN 9320
9310  PRINT "0";
9320  IF Z9 >= 10 THEN 9340
9330  PRINT "0";
9340  GOTO 9400
9395  REM *** INTEGER PRINT SUBROUTINE ***
9396  REM UP TO 6 DIGITS -999999 TO 999999, NO SPACES PRINTED
9397  REM NUMBER TO PRINT IN Z9, Z8 AND Z7 USED FOR TEMPS
9398  REM IF OUT OF RANGE JUST PRINTS
9399  REM IF NOT INTEGER JUST PRINTS
9400  IF ABS(Z9) <= 999999. THEN 9405
9401  IF Z9=INT(Z9) THEN 9405
9402  PRINT Z9
9403  RETURN 
9405  IF Z9 >= 0 THEN 9420
9410  PRINT "-";
9420  LET Z8=ABS(Z9)
9430  LET Z8=INT(Z8)
9440  IF Z8<10 THEN 9560
9450  IF Z8<100 THEN 9530
9460  IF Z8<1000 THEN 9500
9461  IF Z8<10000 THEN 9470
9462  IF Z8<100000. THEN 9466
9463  LET Z7=INT(Z8/100000.)
9464  LET Z8=Z8-Z7*100000.
9465  GOSUB 9700
9466  LET Z7=INT(Z8/10000)
9467  LET Z8=Z8-Z7*10000
9468  GOSUB 9700
9470  LET Z7=INT(Z8/1000)
9480  LET Z8=Z8-Z7*1000
9490  GOSUB 9700
9500  LET Z7=INT(Z8/100)
9510  LET Z8=Z8-Z7*100
9520  GOSUB 9700
9530  LET Z7=INT(Z8/10)
9540  LET Z8=Z8-Z7*10
9550  GOSUB 9700
9560  LET Z7=Z8
9570  GOSUB 9700
9580  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 

