home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / mbug / mbug044.arc / STARTREK.BAS < prev    next >
BASIC Source File  |  1979-12-31  |  20KB  |  389 lines

  1. 10 REM        SUPER STARTREK
  2. 11 REM    ENTERED BY S.GERRATY FROM 101 BASIC GAMES
  3. 12 REM  REQUIRES 20K     V1.8   22-JAN-85
  4. 260 CLEAR 600
  5. 270 Z$="                         "
  6. 271 INV$=CHR$(27)+CHR$(41):NORM$=CHR$(27)+CHR$(40)
  7. 272 PRINT CHR$(26):PRINT:PRINT:INPUT "What is today's DATE  ";DATE$
  8. 273 SEED = VAL(DATE$)
  9. 275 RANDOMIZE SEED
  10. 330 DIM G(8,8),C(9,2),K(3,3),N(3),Z(8,8),D(8)
  11. 370 T=INT(RND(1)*20+20)*100:T0=T:T9=25+INT(RND(1)*10):D0=0:E=3000:E0=E
  12. 440 P=10:P0=P:S9=200:S=0:B9=0:K9=0:X$="":X0$=" IS "
  13. 470 DEF FND(D)=SQR((K(I,1)-S1)^2+(K(I,2)-S2)^2)
  14. 475 DEF FNR(R)=INT(RND(R)*7.98+1.01)
  15. 480 REM  INITIALIZE ENTERPRISE'S POSITION
  16. 490 Q1=FNR(1):Q2=FNR(1):S1=FNR(1):S2=FNR(1)
  17. 530 FOR I=1 TO 9:C(I,1)=0:C(I,2)=0:NEXT I
  18. 540 C(3,1)=-1:C(2,1)=-1:C(4,1)=-1:C(4,2)=-1:C(5,2)=-1:C(6,2)=-1
  19. 600 C(1,2)=1:C(2,2)=1:C(6,1)=1:C(7,1)=1:C(8,1)=1:C(8,2)=1:C(9,2)=1
  20. 670 FOR I=1 TO 8:D(I)=0:NEXT I
  21. 710 A1$="NAVSRSLRSPHATORSHEDAMCOMXXX"
  22. 810 REM --- SETUP WHAT EXISTS IN GALAXY ---
  23. 815 REM K3=# KLINGONS    B3=# STARBASES   S3=# STARS
  24. 820 FOR I=1 TO 8:FOR J=1 TO 8:K3=0:Z(I,J)=0:R1=RND(1)
  25. 850 IF R1>.98 THEN K3=3:K9=K9+3:GOTO 980
  26. 860 IF R1>.95 THEN K3=2:K9=K9+2:GOTO 980
  27. 870 IF R1>.8 THEN K3=1:K9=K9+1
  28. 980 B3=0:IF RND(1)>.96 THEN B3=1:B9=B9+1
  29. 1040 G(I,J)=K3*100+B3*10+FNR(1):NEXT J,I:IF K9>T9 THEN T9=K9+5
  30. 1100 IF B9<>0 THEN 1200
  31. 1150 IF G(Q1,Q2)<200 THEN G(Q1,Q2)=G(Q1,Q2)+100:K9=K9+1
  32. 1160 B9=1:G(Q1,Q2)=G(Q1,Q2)+10:Q1=FNR(1):Q2=FNR(1)
  33. 1200 K7=K9:IF B9<>1 THEN X$="S":X0$=" ARE "
  34. 1210 PRINT CHR$(26)
  35. 1230 PRINT "YOUR ORDERS ARE AS FOLLOWS:"
  36. 1235 PRINT
  37. 1240 PRINT "     DESTROY THE";K9;"KLINGON BATTLE CRUISERS WHICH HAVE INVADED"
  38. 1250 PRINT "     THIS GALAXY; BEFORE THEY REACH FEDERATION HEADQUARTERS ON"
  39. 1260 PRINT "     STARDATE";T0+T9;" THIS GIVES YOU";T9;"DAYS. THERE";X0$
  40. 1270 PRINT "    ";B9;"STARBASE";X$;" STILL OPERATIONAL FOR RESUPPLYING YOUR SHIP"
  41. 1280 I=RND(1):PRINT:INPUT "HIT RETURN WHEN READY TO ACCEPT COMMAND";ANS$:PRINT CHR$(26)
  42. 1310 REM --- HERE ANY TIME NEW QUADRENT ENTERED ---
  43. 1320 Z4=Q1:Z5=Q2:K3=0:B3=0:S3=0:G5=0:D4=.5*RND(1):Z(Q1,Q2)=G(Q1,Q2)
  44. 1390 IF Q1<1 OR Q1>8 OR Q2<1 OR Q2>8 THEN 1600
  45. 1430 GOSUB 9030:PRINT:IF T0<>T THEN 1490
  46. 1460 PRINT "YOUR MISSION BEGINS WITH YOUR STARSHIP LOCATED"
  47. 1470 PRINT "IN THE GALACTIC QUADRANT, '";G2$;"'.":GOTO 1500
  48. 1490 PRINT "NOW ENTERING ";G2$;" QUADRANT...."
  49. 1500 PRINT:K3=INT(G(Q1,Q2)*.01):B3=INT(G(Q1,Q2)*.1)-10*K3
  50. 1540 S3=G(Q1,Q2)-100*K3-10*B3:IF K3=0 THEN 1590
  51. 1560 PRINT CHR$(7);INV$;" COMBAT AREA      CONDITION RED ";NORM$:IF S>200 THEN 1590
  52. 1580 PRINT CHR$(7);"    SHIELDS DANGEROUSLY LOW     "
  53. 1590 FOR I=1 TO 3:K(I,1)=0:K(I,2)=0:NEXT I
  54. 1600 FOR I=1 TO 3:K(I,3)=0:NEXT I:Q$=Z$+Z$+Z$+Z$+Z$+Z$+Z$+LEFT$(Z$,17)
  55. 1660 REM --- POSITION ENTERPRISE IN QUADRANT, THEN 'K3' KLINGONS & 
  56. 1670 REM                      'B3' STARBASES & 'S3' STARS ELSWHERE ---
  57. 1680 A$="<*>":Z1=S1:Z2=S2:GOSUB 8670:IF K3<1 THEN 1820
  58. 1720 FOR I=1 TO K3:GOSUB 8590:A$="+K+":Z1=R1:Z2=R2
  59. 1780 GOSUB 8670:K(I,1)=R1:K(I,2)=R2:K(I,3)=S9*(.5+RND(1)):NEXT I
  60. 1820 IF B3<1 THEN 1910
  61. 1880 GOSUB 8590:A$=">!<":Z1=R1:B4=R1:Z2=R2:GOSUB 8670
  62. 1910 FOR I=1 TO S3:GOSUB 8590:A$=" * ":Z1=R1:Z2=R2:GOSUB 8670:NEXT I
  63. 1980 GOSUB 6430
  64. 1990 IF S+E>10 THEN IF E>10 OR D(7)=0 THEN 2060
  65. 2020 PRINT:PRINT CHR$(7);INV$;"** FATAL ERROR **";NORM$;" YOU'VE JUST STRANDED YOUR SHIP IN SPACE."
  66. 2030 PRINT "YOU HAVE INSUFFICIENT MANEUVERING ENERGY, AND SHIELD CONTROL IS"
  67. 2040 PRINT "PRESENTLY INCAPABLE OF CROSS-CIRCUITING TO ENGINE ROOM!!":GOTO 6220
  68. 2060 INPUT "COMMAND";A$
  69. 2080 FOR I=1 TO 9:IF LEFT$(A$,3)<>MID$(A1$,3*I-2,3) THEN 2160
  70. 2140 ON I GOTO 2300,1980,4000,4260,4700,5530,5690,7290,6270
  71. 2160 NEXT I:PRINT "THAT DOES NOT COMPUTE CAPTAIN!":PRINT "ENTER ON OF THE FOLLOWING:"
  72. 2180 PRINT " NAV  (TO SET COURSE)"
  73. 2190 PRINT " SRS  (FOR SHORT RANGE SENSOR SCAN)"
  74. 2200 PRINT " LRS  (FOR LONG  RANGE SENSOR SCAN)"
  75. 2210 PRINT " PHA  (TO FIRE PHASERS)"
  76. 2220 PRINT " TOR  (TO FIRE PHOTON TORPEDOES)"
  77. 2230 PRINT " SHE  (TO RAISE OR LOWER SHIELDS)"
  78. 2240 PRINT " DAM  (FOR DAMAGE CONTROL REPORTS)"
  79. 2250 PRINT " COM  (TO CALL ON SHIP'S COMPUTER)"
  80. 2260 PRINT " XXX  (TO RESIGN YOUR COMMAND)":PRINT:PRINT:GOTO 1990
  81. 2290 REM --- COURSE CONTROL BEGINS HERE ---
  82. 2300 INPUT "COURSE (1-9) ";C1:IF C1=9 THEN C1=1
  83. 2310 IF C1>=1 AND C1<9 THEN 2350
  84. 2330 PRINT:PRINT "  Lt. SULU REPORTS, 'INCORRECT COURSE DATA, SIR!'":GOTO 1990
  85. 2350 X$="8":IF D(1)<0 THEN X$="0.5"
  86. 2360 PRINT "WARP FACTOR (0-";X$;")";:INPUT W1:IF D(1)<0 AND W1>.5 THEN 2470
  87. 2380 IF W1>=0 AND W1<=8 THEN 2490
  88. 2390 IF W1=0 THEN 1990
  89. 2420 PRINT "  CHIEF ENGINEER SCOTT REPORTS 'THE ENGINES WON'T TAKE WARP ";W1;"!'":GOTO 1990
  90. 2470 PRINT "WARP ENGINES ARE DAMAGED. MAXIMUM SPEED = WARP 0.5":GOTO 1990
  91. 2490 N=INT(W1*8+.5):IF E-N>0 THEN 2590
  92. 2500 PRINT "ENGINEERING REPORTS  'INSUFFICIENT ENERGY AVAILABLE"
  93. 2510 PRINT "                      FOR MANUVERING AT WARP";W1;"!'"
  94. 2530 IF S<N-E OR D(7)<0 THEN 1990
  95. 2560 PRINT "                      PRESENTLY DEPLOYED TO SHIELDS."
  96. 2570 GOTO 1990
  97. 2580 REM --- KLINGONS MOVE/FIRE ON MOVING STARSHIP ---
  98. 2590 FOR I=1 TO K3:IF K(I,3)=0 THEN 2700
  99. 2610 A$="   ":Z1=K(I,1):Z2=K(I,2):GOSUB 8670:GOSUB 8590
  100. 2660 K(I,1)=Z1:K(I,2)=Z2:A$="+K+":GOSUB 8670
  101. 2700 NEXT I:GOSUB 6000:D1=0:D6=W1:IF W1>=1 THEN D6=1
  102. 2770 FOR I=1 TO 8:IF D(I)>=0 THEN 2880
  103. 2790 D(I)=D(I)+D6:IF D(I)>-.1 AND D(I)<0 THEN D(I)=-.1:GOTO 2880
  104. 2800 IF D(I)<0 THEN 2880
  105. 2810 IF D1<>1 THEN D1=1:PRINT "DAMAGE CONTROL REPORT:  ";
  106. 2840 PRINT TAB(8);:R1=I:GOSUB 8790:PRINT G2$;" REPAIR COMPLETED."
  107. 2880 NEXT I:IF RND(1)>.2 THEN 3070
  108. 2910 R1=FNR(1):IF RND(1)>=.6 THEN 3000
  109. 2930 D(R1)=D(R1)-(RND(1)*5+1):PRINT "DAMAGE CONTROL REPORT:  ";
  110. 2960 GOSUB 8790:PRINT G2$;" DAMAGED":PRINT:GOTO 3070
  111. 3000 D(R1)=D(R1)+(RND(1)*3+1):PRINT "DAMAGE CONTROL REPORT:  ";
  112. 3030 GOSUB 8790:PRINT G2$;" STATE OF REPAIR IMPROVED":PRINT
  113. 3060 REM --- BEGIN MOVING STARSHIP ---
  114. 3070 A$="   ":Z1=INT(S1):Z2=INT(S2):GOSUB 8670
  115. 3110 X1=C(C1,1)+(C(C1+1,1)-C(C1,1))*(C1-INT(C1)):X=S1:Y=S2
  116. 3140 X2=C(C1,2)+(C(C1+1,2)-C(C1,2))*(C1-INT(C1)):Q4=Q1:Q5=Q2
  117. 3170 FOR I=1 TO N:S1=S1+X1:S2=S2+X2:IF S1<1 OR S1>=9 OR S2<1 OR S2>=9 THEN 3500
  118. 3240 S8=INT(S1)*24+INT(S2)*3-26:IF MID$(Q$,S8,2)="  " THEN 3360
  119. 3320 S1=INT(S1-X1):S2=INT(S2-X2):PRINT "WARP ENGINES SHUT DOWN AT SECTOR";S1;",";S2;"DUE TO BAD NAVIGATION":GOTO 3370
  120. 3360 NEXT I:S1=INT(S1):S2=INT(S2)
  121. 3370 A$="<*>":Z1=INT(S1):Z2=INT(S2):GOSUB 8670:GOSUB 3910:T8=1
  122. 3430 IF W1<1 THEN T8=.1*INT(10*W1)
  123. 3450 T=T+T8:IF T>T0+T9 THEN 6220
  124. 3470 REM --- SEE IF DOCKED, THEN GET COMMAND ---
  125. 3480 GOTO 1980
  126. 3490 REM --- EXCEEDED QUADRANT LIMITS ? ---
  127. 3500 X=8*Q1+X+N*X1:Y=8*Q2+Y+N*X2:Q1=INT(X/8):Q2=INT(Y/8):S1=INT(X-Q1*8):S2=INT(Y-Q2*8):IF S1=0 THEN Q1=Q1-1:S1=8
  128. 3590 IF S2=0 THEN Q2=Q2-1:S2=8
  129. 3620 X5=0:IF Q1<1 THEN X5=1:Q1=1:S1=1
  130. 3670 IF Q1>8 THEN X5=1:Q1=8:S1=8
  131. 3710 IF Q2<1 THEN X5=1:Q2=1:S2=1
  132. 3750 IF Q2>8 THEN X5=1:Q2=8:S2=8
  133. 3790 IF X5=0 THEN 3860
  134. 3800 PRINT "Lt. UHURA REPORTS MESSAGE FROM STARFLEET COMMAND:"
  135. 3810 PRINT "    'PERMISSION TO ATTEMPT CROSSING OF GALACTIC PERIMETER"
  136. 3820 PRINT "     IS HEREBY ";INV$;" DENIED ";NORM$;". SHUT DOWN YOUR ENGINES.'"
  137. 3830 PRINT "CHIEF ENGINEER SCOTT REPORTS:  'WARP ENGINES SHUT DOWN"
  138. 3840 PRINT "  AT SECTOR";S1;",";S2;"OF QUADRANT";Q1;",";Q2;".'"
  139. 3850 IF T>T0+T9 THEN 6220
  140. 3860 IF 8*Q1+Q2=8*Q4+Q5 THEN 3370
  141. 3870 T=T+1:GOSUB 3910:GOTO 1320
  142. 3900 REM --- MANUVER ENERGY S/R ---
  143. 3910 E=E-N-10:IF E>=0 THEN RETURN
  144. 3930 PRINT "SHIELD CONTROL SUPPLIES ENERGY TO COMPLETE THE MANUVER."
  145. 3940 S=S+E:E=0:IF S<=0 THEN S=0
  146. 3980 RETURN
  147. 3990 REM --- LONG RANGE SENSOR SCAN CODE ---
  148. 4000 IF D(3)<0 THEN PRINT "LONG RANGE SENSORS ARE INOPERABLE":GOTO 1990
  149. 4030 PRINT "LONG RANGE SCAN FOR QUADRANT";Q1;",";Q2
  150. 4040 O1$="-------------------":PRINT O1$
  151. 4060 FOR I=Q1-1 TO Q1+1:N(1)=-1:N(2)=-2:N(3)=-3:FOR J=Q2-1 TO Q2+1
  152. 4120 IF I>0 AND I<9 AND J>0 AND J<9 THEN N(J-Q2+2)=G(I,J):Z(I,J)=G(I,J)
  153. 4180 NEXT J:FOR L=1 TO 3:PRINT ": ";:IF N(L)<0 THEN PRINT "*** ";:GOTO 4230
  154. 4210 PRINT RIGHT$(STR$(N(L)+1000),3);" ";
  155. 4230 NEXT L:PRINT ":":PRINT O1$:NEXT I:GOTO 1990
  156. 4250 REM --- PHASER CONTROL CODE BEGINS HERE ---
  157. 4260 IF D(4)<0 THEN PRINT "PHASERS INOPERATIVE":GOTO 1990
  158. 4265 IF K3>0 THEN 4330
  159. 4270 PRINT "SCIENCE OFFICER SPOCK REPORTS  'SENSORS SHOW NO ENEMY SHIPS"
  160. 4280 PRINT "                                IN THIS QUADRANT'":GOTO 1990
  161. 4330 IF D(8)<0 THEN PRINT "COMPUTER FAILURE HAMPERS ACCURACY"
  162. 4350 PRINT "PASHORS LOCKED ON TARGET;  ENERGY AVAILABLE =";E;"UNITS"
  163. 4370 INPUT "NUMBER OF UNITS TO FIRE";X:IF X<=0 THEN 1990
  164. 4400 E=E-X:IF D(7)<0 THEN X=X*RND(1)
  165. 4450 H1=INT(X/K3):FOR I=1 TO 3:IF K(I,3)<=0 THEN 4670
  166. 4480 H=INT((H1/FND(0))*(RND(1)+2)):IF H>.15*K(I,3) THEN 4530
  167. 4500 PRINT "SENSORS SHOW NO DAMAGE TO ENEMY AT ";K(I,1);",";K(I,2):GOTO 4670
  168. 4530 K(I,3)=K(I,3)-H:PRINT H;"UNIT HIT ON KLINGON AT SECTOR";K(I,1);",";K(I,2)
  169. 4550 IF K(I,3)<=0 THEN PRINT INV$;"*** KLINGON DESTROYED ***";NORM$:GOTO 4580
  170. 4560 PRINT "   (SENSORS SHOW";K(I,3);"UNITS REMAINING)":GOTO 4670
  171. 4580 K3=K3-1:K9=K9-1:Z1=K(I,1):Z2=K(I,2):A$="   ":GOSUB 8670
  172. 4650 K(I,3)=0:G(Q1,Q2)=G(Q1,Q2)-100:Z(Q1,Q2)=G(Q1,Q2):IF K9<=0 THEN 6370
  173. 4670 NEXT I:GOSUB 6000:GOTO 1990
  174. 4690 REM --- PHOTON TORPEDO CODE BEGINS HERE ---
  175. 4700 IF P<=0 THEN PRINT "SORRY CAPTAIN! ALL PHOTON TORPEDOES EXPENDED":GOTO 1990
  176. 4730 IF D(5)<0 THEN PRINT "PHOTON TUBES ARE NOT OPERATIONAL, SIR!":GOTO 1990
  177. 4760 INPUT "PHOTON TORPEDO COURSE (1-9)";C1:IF C1=9 THEN C1=1
  178. 4780 IF C1>=1 AND C1<9 THEN 4850
  179. 4790 PRINT "ENSIGN CHEKOV REPORTS,   'INCORRECT COURSE DATA, SIR!'":GOTO 1990
  180. 4850 X1=C(C1,1)+(C(C1+1,1)-C(C1,1))*(C1-INT(C1)):E=E-2:P=P-1
  181. 4860 X2=C(C1,2)+(C(C1+1,2)-C(C1,2))*(C1-INT(C1)):X=S1:Y=S2
  182. 4910 PRINT "TORPEDO TRACK:"
  183. 4920 X=X+X1:Y=Y+X2:X3=INT(X+.5):Y3=INT(Y+.5)
  184. 4960 IF X3<1 OR X3>8 OR Y3<1 OR Y3>8 THEN 5490
  185. 5000 PRINT "                 ";X3;",";Y3:A$="   ":Z1=X:Z2=Y:GOSUB 8830
  186. 5050 IF Z3<>0 THEN 4920
  187. 5060 A$="+K+":Z1=X:Z2=Y:GOSUB 8830:IF Z3=0 THEN 5210
  188. 5110 PRINT INV$;"*** KLINGON DESTROYED ***";NORM$:K3=K3-1:K9=K9-1:IF K9<=0 THEN 6370
  189. 5150 FOR I=1 TO 3:IF X3=K(I,1) AND Y3=K(I,2) THEN 5190
  190. 5180 NEXT I:I=3
  191. 5190 K(I,3)=0:GOTO 5430
  192. 5210 A$=" * ":Z1=X:Z2=Y:GOSUB 8830:IF Z3=0 THEN 5280
  193. 5260 PRINT "STAR AT";X3;",";Y3;"ABSORBED TORPEDO ENERGY.":GOSUB 6000:GOTO 1990
  194. 5280 A$=">!<":Z1=X:Z2=Y:GOSUB 8830:IF Z3=0 THEN 4760
  195. 5330 PRINT INV$;"*** STARBASE DESTROYED ***";NORM$:B3=B3-1:B9=B9-1
  196. 5360 IF B9>0 OR K9>T-T0-T9 THEN 5400
  197. 5370 PRINT "JUST WHO'S SIDE ARE YOU ON ?! YOU ARE HEREBY RELIEVED OF COMMAND."
  198. 5380 PRINT "MR. SPOCK WILL TAKE COMMAND. YOU WILL BE SENT TO CYGNUS 12 TO ROT!":GOTO 6270
  199. 5400 PRINT "STARFLEET COMMAND REVIEWING YOU RECORD, TO CONSIDER COURT MARTIAL!":D0=0
  200. 5430 Z1=X:Z2=Y:A$="   ":GOSUB 8670:G(Q1,Q2)=K3*100+B3*10+S3:Z(Q1,Q2)=G(Q1,Q2):GOSUB 6000:GOTO 1990 
  201. 5490 PRINT "TORPEDO MISSED":GOSUB 6000:GOTO 1990
  202. 5520 REM --- SHIELD CONTROL ---
  203. 5530 IF D(7)<0 THEN PRINT "SHIELD CONTROL INOPERABLE":GOTO 1990
  204. 5560 PRINT "ENERGY AVAILABLE =";E+S;:INPUT "NUMBER OF UNITS TO SHIELDS";X
  205. 5580 IF X<0 OR S=X THEN PRINT "<SHIELDS UNCHANGED>":GOTO 1990
  206. 5590 IF X<=E+S THEN 5630
  207. 5600 PRINT "SHIELD CONTROL REPORTS:   'THIS IS NOT THE FEDERATION TREASURY!'"
  208. 5610 PRINT "<SHIELDS UNCHANGED>":GOTO 1990
  209. 5630 E=E+S-X:S=X:PRINT "DEFLECTOR CONTROL ROOM REPORT:"
  210. 5660 PRINT "  'SHIELDS NOW AT";INT(S);"UNITS PER YOUR COMMAND.'":GOTO 1990
  211. 5680 REM --- DAMAGE CONTROL ---
  212. 5690 IF D(6)>=0 THEN 5910
  213. 5700 PRINT "DAMAGE CONTROL REPORT NOT AVAILABLE":IF D0=0 THEN 1990
  214. 5720 D3=0:FOR I=1 TO 6:IF D(I)<0 THEN D3=D3+.1:NEXT I:IF D3=0 THEN 1990
  215. 5780 PRINT:D3=D3+D4:IF D3>=1 THEN D3=.9
  216. 5810 PRINT "TECHNICIANS STANDING BY TO EFFECT REPAIRS TO YOUR SHIP;"
  217. 5820 PRINT "ESTIMATED TIME TO REPAIR:";.01*INT(100*D3);"STARDATES."
  218. 5830 INPUT "WILL YOU AUTHORIZE THE REPAIR ORDER (Y/N)";A$
  219. 5860 IF A$<>"Y" THEN 1990
  220. 5870 FOR I=1 TO 8:IF D(I)<0 THEN D(I)=0:NEXT I:T=T+D3+.01
  221. 5910 PRINT:PRINT "DEVICE             STATE OF REPAIR":FOR R1=1 TO 8
  222. 5920 GOSUB 8790:PRINT G2$;LEFT$(Z$,25-LEN(G2$));INT(D(R1)*100)*.01
  223. 5950 NEXT R1:PRINT:IF D0<>0 THEN 5720
  224. 5980 GOTO 1990
  225. 5990 REM --- KLINGONS SHOOTING ---
  226. 6000 IF K3<=0 THEN RETURN
  227. 6010 IF D0<>0 THEN PRINT "STARBASE SHIELDS PROTECT THE ENTERPRISE":RETURN
  228. 6040 FOR I=1 TO 3:IF K(I,3)<=0 THEN 6200
  229. 6060 H=INT((K(I,3)/FND(1))*(2+RND(1))):S=S-H:K(I,3)=K(I,3)/(3+RND(0))
  230. 6080 PRINT H;"UNIT HIT ON ENTERPRISE FROM SECTOR";K(I,1);",";K(I,2)
  231. 6090 IF S<=0 THEN 6240
  232. 6100 PRINT "<SHIELDS DOWN TO";S;"UNITS>":IF H<20 THEN 6200
  233. 6120 IF RND(1)>.6 OR H/S<=.02 THEN 6200
  234. 6140 R1=FNR(1):D(R1)=D(R1)-H/S-.5*RND(1):GOSUB 8790
  235. 6170 PRINT "DAMAGE CONTROL REPORTS '";G2$;" DAMAGED BY THE HIT'"
  236. 6200 NEXT I:RETURN
  237. 6210 REM --- END OF GAME ---
  238. 6220 PRINT CHR$(7):PRINT "IT IS STARDATE";T:GOTO 6270
  239. 6240 PRINT:PRINT "THE ENTERPRISE HAS BEEN DESTROYED. THE FEDERATION WILL BE CONQUERED":FOR I=1 TO 1000:NEXT I:GOTO 6220
  240. 6270 PRINT "THERE WERE";K9;"KLINGON BATTLE CRUISERS LEFT AT THE END OF YOUR MISSION."
  241. 6290 PRINT:PRINT:IF B9=0 THEN 6360
  242. 6310 PRINT "THE FEDERATION IS IN NEED OF A NEW STARSHIP COMMANDER."
  243. 6320 PRINT "FOR A SIMILAR MISSION --- ";:INPUT "DO YOU VOLUNTEER ";A$
  244. 6330 IF LEFT$(A$,1)="Y" THEN 10
  245. 6360 END
  246. 6370 PRINT "CONGRADULATIONS CAPTAIN! THE LAST KLINGON BATTLE CRUISER"
  247. 6380 PRINT "MENACING THE FEDERATION HAS BEEN DESTROYED.":PRINT
  248. 6400 PRINT "YOUR EFFICIENCY RATING IS";(1000*(K7/T-T0))^2:GOTO 6290
  249. 6420 REM --- SHORT RANGE SCAN AND STARTUP SUBROUTINE ---
  250. 6430 FOR I=S1-1 TO S1+1:FOR J=S2-1 TO S2+1
  251. 6450 IF INT(I+.5)<1 OR INT(I+.5)>8 OR INT(J+.5)<1 OR INT(J+.5)>8 THEN 6540
  252. 6490 A$=">!<":Z1=I:Z2=J:GOSUB 8830:IF Z3=1 THEN 6580
  253. 6540 NEXT J,I:D0=0:GOTO 6650
  254. 6580 D0=1:C$="DOCKED":E=E0:P=P0
  255. 6620 PRINT "SHIELDS DROPPED FOR DOCKING PURPOSES":S=0:GOTO 6720
  256. 6650 IF K3>0 THEN C$="*RED*":GOTO 6720
  257. 6660 C$="GREEN":IF E<E0*.1 THEN C$="YELLOW"
  258. 6720 IF D(2)>=0 THEN 6770
  259. 6730 PRINT:PRINT "*** SHORT RANGE SENSORS ARE OUT ***":PRINT:RETURN
  260. 6770 O1$="---------------------------------":PRINT O1$: FOR I=1 TO 8
  261. 6820 FOR J=(I-1)*24+1 TO (I-1)*24+22 STEP 3:PRINT " ";MID$(Q$,J,3);:NEXT J
  262. 6830 ON I GOTO 6850,6900,6960,7020,7070,7120,7180,7240
  263. 6850 PRINT "         STARDATE           ";INT(T*10)*.1:GOTO 7260
  264. 6900 PRINT "         CONDITION           ";:IF C$="*RED*" THEN PRINT INV$;C$;NORM$ ELSE PRINT C$
  265. 6910 GOTO 7260
  266. 6960 PRINT "         QUADRANT           ";Q1;",";Q2:GOTO 7260
  267. 7020 PRINT "         SECTOR             ";S1;",";S2:GOTO 7260
  268. 7070 PRINT "         PHOTON TORPEDOS    ";INT(P):GOTO 7260
  269. 7120 PRINT "         TOTAL ENERGY       ";INT(E+S):GOTO 7260
  270. 7180 PRINT "         SHIELDS            ";INT(S):GOTO 7260
  271. 7240 PRINT "         KLINGONS REMAINING ";INT(K9)
  272. 7260 NEXT I:PRINT O1$:RETURN
  273. 7280 REM --- LIBRARY COMPUTER CODE ---
  274. 7290 IF D(8)<0 THEN PRINT "COMPUTER DISABLED":GOTO 1990
  275. 7320 INPUT "COMPUTER ACTIVE AND AWAITING COMMAND (0-5)";A:IF A<0 THEN 1990
  276. 7350 PRINT:H8=1:ON A+1 GOTO 7540,7900,8070,8500,8150,7400
  277. 7360 PRINT "FUNCTIONS AVAILABLE FROM LIBRARY-COMPUTER:"
  278. 7370 PRINT "   0 = CUMULATIVE GALACTIC RECORD"
  279. 7371 PRINT "   1 = STATUS REPORT"
  280. 7372 PRINT "   2 = PHOTON TORPEDO DATA"
  281. 7373 PRINT "   3 = STARBASE NAV. DATA"
  282. 7374 PRINT "   4 = SPACE WARP NAV. CALCULATOR"
  283. 7375 PRINT "   5 = GALAXY 'REGION NAME' MAP":PRINT:GOTO 7320
  284. 7390 REM --- SETUP TO CHANGE CUM. GAL. RECORD TO GALAXY MAP ---
  285. 7400 H8=0:G5=1:PRINT "                            THE GALAXY":GOTO 7550
  286. 7530 REM --- CUM. GALACTIC RECORD ---
  287. 7540 REM INPUT "DO YOU WANT A HARDCOPY ? IS 'LST:' ONLINE (Y/N)";A$
  288. 7542 REM IF A$="Y" THEN ????
  289. 7543 PRINT CHR$(26):PRINT "     COMPUTER RECORD OF GALAXY FOR QUADRANT";Q1;",";Q2:PRINT
  290. 7550 PRINT "       1     2     3     4     5     6     7     8"
  291. 7560 O1$="    ----- ----- ----- ----- ----- ----- ----- -----"
  292. 7570 PRINT O1$:FOR I=1 TO 8:PRINT I;:IF H8=0 THEN 7740
  293. 7630 FOR J=1 TO 8:PRINT "   ";:IF Z(I,J)=0 THEN PRINT "***";:GOTO 7720
  294. 7640 IF I=Q1 AND J=Q2 THEN PRINT INV$;
  295. 7700 PRINT RIGHT$(STR$(Z(I,J)+1000),3);
  296. 7710 IF I=Q1 AND J=Q2 THEN PRINT NORM$;
  297. 7720 NEXT J:GOTO 7850
  298. 7740 Z4=I:Z5=1:GOSUB 9030:J0=INT(15-.5*LEN(G2$)):PRINT TAB(J0);G2$;
  299. 7800 Z5=5:GOSUB 9030:J0=INT(39-.5*LEN(G2$)):PRINT TAB(0);G2$;
  300. 7850 PRINT:PRINT O1$:NEXT I:PRINT:GOTO 1990:REM HAD POKE 1229,0:POKE 1237,1:NULL 0
  301. 7890 REM --- STATUS REPORT ---
  302. 7900 PRINT "   STATUS REPORT:"
  303. 7940 PRINT "KLINGONS LEFT: ";K9
  304. 7960 PRINT "MISSION MUST BE COMPLETED IN";.1*INT((T0+T9-T)*10);"STARDATES."
  305. 7970 X$="S":IF B9<2 THEN X$="":IF B9<1 THEN 8010
  306. 7980 PRINT "THE FEDERATION IS MAINTAINING";B9;"STARBASE";X$;" IN THE GALAXY."
  307. 7990 GOTO 5690
  308. 8010 PRINT "YOUR STUPIDITY HAS LEFT YOU ON YOUR OWN IN THE GALAXY...."
  309. 8020 PRINT "     YOU HAVE NO STARBASES LEFT!":GOTO 5690
  310. 8060 REM --- TORPEDO, BASE NAV. D/D CALCULATOR ---
  311. 8070 IF K3<=0 THEN 4270
  312. 8080 X$="":IF K3>1 THEN X$="S"
  313. 8090 PRINT "FROM ENTERPRISE TO KLINGON BATTLE CRUISER";X$
  314. 8100 H8=0:FOR I=1 TO 3: IF K(I,3)<=0 THEN 8480
  315. 8110 W1=K(I,1):X=K(I,2)
  316. 8120 C1=S1:A=S2:GOTO 8220
  317. 8150 PRINT "SPACE WARP NAV. CALCULATOR:"    
  318. 8160 PRINT "YOU ARE AT QUADRANT ";Q1;",";Q2;" SECTOR ";S1;",";S2
  319. 8170 PRINT "PLEASE ENTER":INPUT "  INITIAL CO-ORDS (X,Y)";C1,A
  320. 8200 INPUT "  FINAL CO-ORDS (X,Y)";W1,X
  321. 8220 X=X-A:A=C1-W1:IF X<0 THEN 8350
  322. 8250 IF A<0 THEN 8410
  323. 8260 IF X>0 THEN 8280
  324. 8270 IF A=0 THEN C1=5:GOTO 8290
  325. 8280 C1=1
  326. 8290 IF ABS(A)<=ABS(X) THEN 8330
  327. 8310 PRINT "DIRECTION =";C1+(((ABS(A)-ABS(X))+ABS(A))/ABS(A)):GOTO 8460
  328. 8330 PRINT "DIRECTION =";C1+(ABS(A)/ABS(X)):GOTO 8460
  329. 8350 IF A>0 THEN C1=3:GOTO 8420
  330. 8360 IF X<>0 THEN C1=5:GOTO 8290
  331. 8410 C1=7
  332. 8420 IF ABS(A)>=ABS(X) THEN 8450
  333. 8430 PRINT "DIRECTION =";C1+(((ABS(X)-ABS(A))+ABS(X))/ABS(X)):GOTO 8460
  334. 8450 PRINT "DIRECTION =";C1+(ABS(X)/ABS(A))
  335. 8460 PRINT "DISTANCE  =";SQR(X^2+A^2):IF H8=1 THEN 1990
  336. 8480 NEXT I:GOTO 1990
  337. 8500 IF B3<>0 THEN PRINT "FROM ENTERPRISE TO STARBASE:"W1=B4:X=B5:GOTO 8120
  338. 8510 PRINT "MR. SPOCK REPORTS,  'SENSORS SHOW NO STARBASES IN THIS QUADRANT.'":GOTO 1990
  339. 8580 REM --- FIND EMPTY SPACE IN QUADRANT (FOR THINGS) ---
  340. 8590 R1=FNR(1):R2=FNR(1):A$="   ":Z1=R1:Z2=R2:GOSUB 8830:IF Z3=0 THEN 8590
  341. 8600 RETURN
  342. 8660 REM --- INSERT STRING IN ARRAY FOR QUAD. ---
  343. 8670 S8=INT(Z2-.5)*3+INT(Z1-.5)*24+1
  344. 8675 IF LEN(A$)<>3 THEN PRINT CHR$(7);"ERROR LEN(A$)<>3":STOP
  345. 8680 IF S8=1 THEN Q$=A$+RIGHT$(Q$,189):RETURN
  346. 8690 IF S8=190 THEN Q$=LEFT$(Q$,189)+A$:RETURN
  347. 8700 Q$=LEFT$(Q$,S8-1)+A$+RIGHT$(Q$,190-S8):RETURN
  348. 8780 REM --- PRINTS DEVICE NAME ---
  349. 8790 ON R1 GOTO 8792,8794,8796,8798,8800,8802,8804,8806
  350. 8792 G2$="WARP ENGINES":RETURN
  351. 8794 G2$="SHORT RANGE SENSORS":RETURN
  352. 8796 G2$="LONG RANGE SENSORS":RETURN
  353. 8798 G2$="PHASER CONTROL":RETURN
  354. 8800 G2$="PHOTON TUBES":RETURN
  355. 8802 G2$="DAMAGE CONTROL":RETURN
  356. 8804 G2$="SHIELD CONTROL":RETURN
  357. 8806 G2$="LIBRARY-COMPUTER":RETURN
  358. 8820 REM --- STRING COMPARISON IN QUAD ARRAY ---
  359. 8830 Z1=INT(Z1+.5):Z2=INT(Z2+.5):S8=(Z2-1)*3+(Z1-1)*24+1:Z3=0
  360. 8890 IF MID$(Q$,S8,3)<>A$ THEN RETURN
  361. 8900 Z3=1:RETURN
  362. 9010 REM --- QUADRANT NAME IN G2$ FROM Z4,Z5 (=Q1,Q2) ---
  363. 9020 REM     CALL WITH G5=1 TO GET REGION NAME ONLY
  364. 9030 IF Z5<=4 THEN ON Z4 GOTO 9040,9050,9060,9070,9080,9090,9100,9110
  365. 9035 GOTO 9120
  366. 9040 G2$="ANTARES":GOTO 9210  
  367. 9050 G2$="RIGEL":GOTO 9210
  368. 9060 G2$="PROCYON":GOTO 9210
  369. 9070 G2$="VEGA":GOTO 9210
  370. 9080 G2$="CANOPUS":GOTO 9210
  371. 9090 G2$="ALTAIR":GOTO 9210
  372. 9100 G2$="SAGITTARIUS":GOTO 9210
  373. 9110 G2$="POLLUX":GOTO 9210
  374. 9120 ON Z4 GOTO 9130,9140,9150,9160,9170,9180,9190,9200
  375. 9130 G2$="SIRIUS":GOTO 9210
  376. 9140 G2$="DENEB":GOTO 9210
  377. 9150 G2$="CAPELLA":GOTO 9210
  378. 9160 G2$="BETELGEUSE":GOTO 9210
  379. 9170 G2$="ALDERBARAN":GOTO 9210
  380. 9180 G2$="REGULUS":GOTO 9210
  381. 9190 G2$="ARCTURUS":GOTO 9210
  382. 9200 G2$="SPICA"
  383. 9210 IF G5<>1 THEN ON Z5 GOTO 9230,9240,9250,9260,9230,9240,9250,9260
  384. 9220 RETURN
  385. 9230 G2$=G2$+" I":RETURN
  386. 9240 G2$=G2$+" II":RETURN
  387. 9250 G2$=G2$+" III":RETURN
  388. 9260 G2$=G2$+" IV":RETURN
  389.