-
Notifications
You must be signed in to change notification settings - Fork 2
/
startrek.bas
317 lines (317 loc) · 18.5 KB
/
startrek.bas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
50 GOTO 18900
100 X2=X/2000:Y2=Y/2000:N7=Y2:N8=(X-500)/1000
110 S5=X2-Z+Y2*Z:F4=X2<9 AND X2>0 AND Y2<9 AND Y2>0: RETURN
150 GOSUB 410:X=B9:Y=10: GOSUB 420
160 FOR I=1 TO K9: IF I>1 AND RND (900)>S(J) THEN 180
170 J= RND (64)+1: IF S(J) MOD 100>9 OR S(J)>800 THEN 170
180 S(J)=S(J)+100: NEXT I
185 FOR I=1 TO 64:Q(I)=-S(I)-2- RND (4)- RND (4): NEXT I
190 Q3= RND (64)+1:S3= RND (64)+1:Q(Q3)=-Q(Q3): GOSUB 600: GOTO 3200
200 Q(Q3)= ABS (Q(Q3)): GOSUB 410:N=Q(Q3):S4=N MOD 10:K=N/100:B=N/10-K*10
210 S(S3)=1:X=B:Y=2: GOSUB 420:X=S4:Y=3: GOSUB 420:X=K:Y=-S9: GOSUB 420
230 S6=S3: RETURN
300 NA= PEEK (34): POKE 34,11: INPUT "COURSE",C: POKE 34,NA
305 C= ABS (C) MOD 360:C1=C/90:C2=C MOD 90
310 IF C1 MOD 2=0 THEN 330:C2=90-C2
330 GOSUB 370:X1=C3:C2=90-C2: GOSUB 370:Y1=C3
340 IF C1 MOD 3=0 THEN Y1=-Y1: IF C1>1 THEN X1=-X1: RETURN
370 C3=167*C2-26*(C2-30)*(C2>30)-38*(C2-45)*(C2>45)-58*(C2-60)*(C2>60)
375 C3=(C3+5)/10: RETURN
410 FOR I=1 TO 64:S(I)=0: NEXT I: RETURN
420 IF X=0 THEN RETURN : FOR I=1 TO X
430 J= RND (64)+1: IF S(J)#0 THEN 430:S(J)=Y: NEXT I: RETURN
450 GOSUB 480:X=S1-J1:Y=S2-J2
460 X1=X*X+Y*Y: IF X1>9 THEN H=(9*H)/X1
470 PRINT H;" UNIT HIT ON";: RETURN
480 J1=1+(J-1)/8:J2=1+(J-1) MOD 8
490 S1=1+(S3-1)/8:S2=1+(S3-1) MOD 8
495 Q1=1+(Q3-1)/8:Q2=1+(Q3-1) MOD 8: RETURN
500 IF K=0 THEN RETURN : IF NOT N6 THEN N4=0: GOSUB 630
505 S7=1+(S6-1)/8:S8=1+(S6-1) MOD 8
510 FOR J=1 TO 64:J4=J: IF S(J)<0 THEN 520: NEXT J:S6=S3: RETURN
520 GOSUB 480:C5=S7-J1:C6=S8-J2: GOSUB 2030: IF S(J) MOD 100=0 OR ( ABS (C5)+ ABS (C6))< RND (5) THEN 575
530 GOSUB 1520: IF V3=0 THEN 570
540 T$="#":P1=0:W=R: GOSUB 1200: IF S(S5)#0 AND S(S5)#1 THEN 570
550 PRINT " < ";: GOSUB 1450: PRINT " FIRING ";D$(41,47);" >"
560 PRINT : GOSUB 2400:J=J4: GOSUB 2030:V3=V3-1: GOTO 580
570 IF R+ RND (3)<6 THEN 575: NEXT J:S6=S3: RETURN
575 GOSUB 1105:N1=S1:N2=2*S2: GOSUB 1175: GOSUB 1420:H=(V1* RND (10))/20:V1=V1-H
577 GOSUB 450: PRINT A$;"FROM": GOSUB 1450: PRINT : GOSUB 817:J=J4
580 GOSUB 2050: GOSUB 1100: NEXT J:S6=S3: RETURN
600 POKE 34,0: POKE 35,24: GOSUB 640: CALL -936: RETURN
610 POKE 32,18: POKE 33,23
620 POKE 34,13: POKE 35,24: CALL -936: RETURN
630 POKE 34,N4: POKE 35,13
640 POKE 32,0: POKE 33,40: VTAB 13: TAB 1: RETURN
660 N4=0: GOSUB 630: CALL -936: RETURN
670 POKE 32,0: POKE 33,40: VTAB Q1: TAB (4*Q2+1): PRINT " ";: TAB (4*Q2+1): PRINT Q(Q3): GOTO 630
680 POKE 32,1: POKE 33,16: GOSUB 620: VTAB 14: RETURN
690 CALL -384: GOSUB 670: CALL -380: RETURN
695 GOSUB 690: IF Q(Q7)<0 THEN RETURN : TAB (4*Q6+1): VTAB Q5: PRINT Q(Q7): GOTO 630
800 E=E0:P=P0:E1=(E/100)*E2: FOR D1=1 TO 9:D(D1)=0: NEXT D1: RETURN
815 GOSUB 7020:H=200+ RND (400): PRINT "SPACE STORM!!": GOSUB 1420: GOSUB 470: PRINT A$: GOSUB 490
817 E=E-H:E1=E1-H: IF E1<0 THEN E1=0: GOSUB 1030: IF H<10 THEN RETURN : IF E1>= RND (H/10)* RND (20) THEN RETURN
820 GOSUB 1030:E1=5:D1= RND (8+(D(9)=0))+1: IF D1=6 THEN 840:D(D1)=D(D1)+5+ RND (30): IF D1=9 THEN 845
825 IF D1=2 THEN GOSUB 1000
830 GOSUB 1440: PRINT A$;" DAMAGED ";D(D1)/100;".";D(D1) MOD 100;" YRS TO REPAIR"
835 IF D1=7 THEN 843: RETURN
840 GOSUB 1440: GOSUB 1470:D(6)=0: FOR I=1 TO 64:Q(I)=- ABS (Q(I)): NEXT I:Q(Q3)=-Q(Q3): IF NOT N6 THEN RETURN :N6=0: GOTO 3200
843 A1=0:A2=4: GOSUB 1620:A2=5: GOSUB 1620: RETURN
845 PRINT "DILITHIUM CRYSTALS DESTROYED!": RETURN
850 IF D(9)=0 THEN E=E+50*T3:E3=E0+5000-P*500: IF E>E3 THEN E=E3: FOR T2=1 TO T3
852 E3=((E/10)*(E2/10)+(E/100)*E2 MOD 10-E1)/4:E1=E1+E3: NEXT T2
860 T1=T1+T3:T=T+T1/100:T1=T1 MOD 100: GOSUB 1030: IF RND (150)<T3 THEN GOSUB 815
870 FOR D1=1 TO Z: IF D(D1)>0 AND D(D1)-T3<1 THEN GOSUB 990
890 IF D(D1)>0 THEN D(D1)=D(D1)-T3: NEXT D1
900 D1= RND (Z)+1: IF RND (100)>25 OR D(D1)=0 THEN RETURN
910 PRINT "** SPOCK USED A NEW REPAIR TECHNIQUE **"
990 D(D1)=0: GOSUB 1440: PRINT A$;" REPAIRED!": IF D1=2 THEN 1000: IF D1=3 AND N6 THEN GOSUB 3205: RETURN
1000 IF N6 THEN GOSUB 3205: GOSUB 680: PRINT " QUADRANT ";Q1;"-";Q2: IF D(2) THEN 1010: FOR I=1 TO 64:G=S(I)+2: IF G<2 THEN G=1
1005 D$(2*I-1)=Q$(G,G):D$(2*I)=" ": NEXT I: CALL -384: PRINT D$: GOTO 1020
1010 GOSUB 490: POKE 32,0: FOR N1=S1-1 TO S1+1: FOR N2=2*(S2-1) TO 2*(S2+1): GOSUB 1120: NEXT N2: NEXT N1: POKE 32,1
1020 CALL -384: VTAB 23: TAB 1: PRINT "1 2 3 4 5 6 7 8";: VTAB 15: POKE 32,16: POKE 33,1
1025 CALL -380: PRINT "12345678";: GOSUB 630
1030 GOSUB 610:N5=0: PRINT "SECTOR","",S1;"-";: CALL -384: PRINT S2: CALL -380
1035 IF T1=0 THEN 1040:T2=T9-T-1:T4=100-T1: GOTO 1045
1040 T2=T9-T:T4=0
1045 PRINT "YEARS","",T2;".";T4: PRINT "STARDATE",T;".";T1/10
1047 A$="GREEN": IF E1<(E0/10) OR E-E1<(E0/10) THEN A$="YELLOW": IF K THEN A$="RED"
1050 IF A$#"GREEN" THEN POKE 50,127: PRINT "CONDITION",A$: CALL -380: PRINT "SHIELDS ",E2;"%": GOSUB 1430: PRINT A$,E1
1060 GOSUB 1400: PRINT "AVAIL ENERGY",E-E1: PRINT D$(41,50),P
1070 PRINT "KLINGONS",K9: PRINT "BASES","",B9
1075 PRINT "COURSE ";: IF A1=0 THEN PRINT "NOT SET.";
1080 IF NOT A1 THEN 630: PRINT "SET FOR ";V5;"-";: CALL -384: PRINT V6;: CALL -380: GOTO 630
1100 N1=J1:N2=2*J2: GOTO 1120
1102 N1=S1:N2=2*S2: GOTO 1120
1105 N1=J1:N2=2*J2: GOTO 1125
1107 N1=S1:N2=2*S2: GOTO 1125
1110 GOSUB 1180
1115 IF T$#"E" THEN CALL R5-95
1116 CALL -384: VTAB (N1+14): TAB N2: PRINT T$;: GOTO 1145
1120 CALL -384
1125 GOSUB 1180: VTAB (N1+14): TAB N2
1130 G=2: IF N2 MOD 2 THEN 1140
1135 N3=N2/2-Z+Z*N1:G=S(N3)+2: IF G<2 THEN G=1
1140 PRINT Q$(G,G);
1145 CALL -380: VTAB 13: TAB 1: RETURN
1170 T$="#": POKE R5-94,6: POKE R5-80,200: GOSUB 1110: GOTO 1120
1175 T$="#": POKE R5-94,7: POKE R5-80,140: GOSUB 1110: GOTO 1120
1180 IF N2<2 OR N2>16 OR N1<1 OR N1>8 THEN 1190: IF NOT D(2) THEN RETURN : IF ABS (N1-S1)<2 AND ABS (N2-2*S2)<3 THEN RETURN
1190 CALL -380: POP : RETURN
1200 POKE R5-94,1: POKE R5-80,180: GOSUB 480:F1=0
1202 IF T$="E" THEN S(S3)=0
1205 N1=J1:N2=2*J2:X=2000*J2+1000:Y=2000*J1+1000
1210 FOR I=1 TO 2*W:F2=(I+1)/2
1220 X=X+X1:Y=Y+Y1: GOSUB 100: IF N1=N7 AND N2=N8 THEN 1250
1225 IF P1 THEN GOSUB 1120:N1=N7:N2=N8: IF NOT F4 THEN 1290: IF P1 THEN GOSUB 1110
1230 IF X2=J2 AND Y2=J1 THEN 1250: IF S(S5)#0 THEN 1252
1250 NEXT I: IF P1 THEN 1120: RETURN
1252 IF S(S5)<0 THEN GOSUB 1410: IF S(S5)=1 THEN GOSUB 1420: IF S(S5)=2 THEN 1280: IF S(S5)=3 THEN A$="STAR"
1260 F1=2:I=W*2: NEXT I:W=F2: GOTO 1120
1280 GOSUB 800:S(S5)=0:B9=B9-1: PRINT "":Q(Q3)=Q(Q3)-10: GOSUB 1030: IF N6 THEN GOSUB 690: GOTO 1250
1290 F1=1:I=2*W: NEXT I:W=W-F2: RETURN
1320 Q5=Q1+(Y2>8)-(Y2<1):Q6=Q2+(X2>8)-(X2<1)
1330 Q5=(Q5+7) MOD Z+1:Q6=(Q6+7) MOD Z+1
1340 Q7=Q6-Z+Z*Q5: RETURN
1350 Y2=(Y2+15) MOD Z+1:X2=(X2+15) MOD Z+1: GOTO 110
1400 D$="WARP DRIVESR SENSORSLR SENSORSPHASERS PH TORPS GAL RECORDCOMPUTER PROBE ": RETURN
1410 A$=" KLINGON ": RETURN
1420 A$=" ENTERPRISE ": RETURN
1430 A$="SHIELD ENERGY ": RETURN
1440 GOSUB 1400:A$=D$(10*D1-9,10*D1): RETURN
1450 GOSUB 1410: PRINT A$;"AT ";
1455 PRINT J1;"-";: CALL -384: PRINT J2;: CALL -380: PRINT " ";: RETURN
1460 PRINT "( ";V1;" LEFT )": RETURN
1470 PRINT A$;" DESTROYED!!!": RETURN
1510 IF ABS (C5)>4 THEN C5=C5-Z* SGN (C5): IF ABS (C6)>4 THEN C6=C6-Z* SGN (C6)
1520 C= PEEK ( ABS (C5)+Z*( ABS (C6))+R5-65)
1530 IF C5<0 THEN C=180-C
1540 IF C6<0 THEN C=360-C
1550 GOSUB 305:X=1000* SGN (X1):Y=1000* SGN (Y1)
1560 FOR I=1 TO 30:X=X+X1:Y=Y+Y1:R=I/2: IF I MOD 2 THEN 1580
1570 IF Y/2000#C5 OR X/2000#C6 THEN 1580:I=30
1580 NEXT I: RETURN
1600 VTAB 13: TAB 1: CALL -868: PRINT "COORDINATE ?-";: CALL -384: PRINT " ";: CALL -380
1605 GOSUB 2510: IF KB<1 OR KB>8 THEN 1605: TAB 12: PRINT KB;:Y2=KB: CALL -384: TAB 14: PRINT "?";
1610 GOSUB 2510: IF KB<1 OR KB>8 THEN 1610:X2=KB: TAB 14: PRINT KB;: CALL -380: TAB 1: CALL -868: RETURN
1620 FOR I=1 TO 64: IF 3-A2=S(I)/10000 THEN S(I)=S(I) MOD 10000: NEXT I: RETURN
1640 PRINT :D1=A2: GOSUB 1440
1650 B1=0: FOR J=1 TO 64: IF S(J)/10000=(3-A2) THEN 1660: NEXT J: GOTO 1680
1660 B1=B1+1: GOSUB 480: IF B1=1 THEN PRINT A$;" LOCKED ON ": GOSUB 1455: NEXT J
1680 IF B1=0 THEN PRINT A$;" NOT LOCKED";: PRINT : RETURN
1685 A2=4: GOSUB 1640:A2=5: GOTO 1640
1800 IF K=0 THEN RETURN :K4= NOT K4
1810 FOR J=1 TO 64: IF S(J) MOD 1000>-40 OR S(J) MOD 2#-K4 THEN 1900
1840 GOSUB 2030: GOSUB 480:C5=J1-S1:C6=J2-S2
1845 IF (V1> RND (400))-(K=1)+(K>3) THEN 1850:C5=-C5:C6=-C6
1850 Y2=J1-(C5>0)* RND (2):X2=J2-(C6>0)* RND (2): GOSUB 110
1860 IF F4=1 THEN 1880: IF V1> RND (400) OR (K<4 AND RND (5)#0) THEN 1900
1870 GOSUB 1320:K=K-1:S(J)=0:Q(Q3)=Q(Q3)-100:Q(Q7)=Q(Q7)+100* SGN (Q(Q7)): GOSUB 1100
1875 IF N6 THEN GOSUB 695: NEXT J: RETURN
1880 IF S(S5)#0 THEN 1900
1890 V1=V1-20: GOSUB 2050:S(S5)=S(J):S(J)=0:N1=J1:N2=2*J2: GOSUB 1120:N1=Y2:N2=2*X2: GOSUB 1120
1900 NEXT J: RETURN
2030 V1=-S(J) MOD 1000:V2=-S(J)/10000:V3=-(S(J)/1000) MOD 10: RETURN
2050 IF V1<=0 THEN 2060: IF V1<20 THEN V3=0:S(J)=-V1-1000*V3-10000*V2:S(J)=S(J)+(S(J) MOD 2=-K4): RETURN
2060 GOSUB 1410: GOSUB 1470:S(J)=0:K=K-1:K9=K9-1:Q(Q3)=Q(Q3)-100: GOSUB 1100
2065 N1=Y2:N2=2*X2: GOSUB 1120: IF N6 THEN GOSUB 690: GOTO 1030
2200 T3=1: GOSUB 850: IF A1=0 THEN RETURN
2210 C5=V5-S1:C6=V6-S2: IF C5=0 AND C6=0 THEN 2240: GOSUB 1520
2220 W=1: GOSUB 5267: GOSUB 490:E=E-30: GOSUB 1030: IF V5#S1 OR V6#S2 THEN RETURN
2240 A1=0: RETURN
2400 W=15:P1=1:T$="#": GOSUB 1200: IF F1=2 THEN 2420: PRINT "MISSED!!": RETURN
2420 N1=Y2:N2=2*X2: GOSUB 1170: PRINT D$(41,47);" HIT ON ";A$;" AT ";Y2;"-";: CALL -384: PRINT X2: CALL -380
2430 IF S(S5)=2 THEN RETURN : IF S(S5)>0 THEN 2460:J=S5: GOSUB 2030:V1=V1-500: GOSUB 1460: GOTO 2050
2460 IF S(S5)#1 THEN 2470:H=500: GOTO 817
2470 GOSUB 1470:Q(Q3)=Q(Q3)-1:S(S5)=0:N1=Y2:N2=2*X2: IF N6 THEN GOSUB 690: GOTO 1120
2500 KB= PEEK (-16384): IF KB<128 THEN 2500: POKE -16368,0: RETURN
2510 GOSUB 2500: IF KB<176 OR KB>185 THEN KB=-1:KB=KB MOD 16: RETURN
3200 IF N6 THEN RETURN : GOSUB 490
3202 GOSUB 660:N6=1: FOR Q6=1 TO Z: TAB 4: PRINT ": : : : : : : : :": NEXT Q6:N4=9: GOSUB 630: GOSUB 690
3205 X=Q7: IF D(3) THEN 3220
3210 FOR I=-1 TO 1: FOR Y=-1 TO 1:Q5=Q1+I:Q6=Q2+Y: GOSUB 1330:Q(Q7)= ABS (Q(Q7)): NEXT Y,I
3220 FOR Q7=1 TO 64: IF Q(Q7)<0 THEN 3230:I=1+(Q7-1)/8:Y=1+(Q7-1) MOD 8: TAB (4*Y+1): VTAB I
3225 PRINT " ";: TAB (4*Y+1): PRINT Q(Q7);: IF Q7=Q3 THEN GOSUB 690
3230 NEXT Q7:Q7=X: GOTO 630
5200 A1=0: GOSUB 3200: IF NOT D(1) THEN 5220: PRINT "ION DRIVE ONLY": GOTO 5250
5220 PRINT "WARP OR ION DRIVE (W OR I)?";: GOSUB 2500: TAB 1: CALL -868: IF KB=201 THEN 5250: IF KB#215 THEN RETURN
5240 PRINT "WARP FACTOR(1-6)?";: GOSUB 2510:W=KB: TAB 1: CALL -868: IF W<1 OR W>6 THEN RETURN : IF E-E1>=12*W ^ 3 THEN 5360: PRINT "NOT ENOUGH ENERGY": GOTO 5240
5250 PRINT "DURATION(1-9)?";: GOSUB 2510: TAB 1: CALL -868:W=KB: IF W<1 THEN RETURN : IF E-E1>=20*(1+W) THEN 5260: PRINT "NOT ENOUGH ENERGY": GOTO 5250
5260 GOSUB 300
5265 GOSUB 1800
5267 W1=0
5270 IF W=0 THEN 5340:P1=1:T$="E":J=S3: GOSUB 1200
5280 W1=W1+F2: IF F1=0 THEN 5340
5290 IF F1=1 THEN 5350: IF S(S5)=1 THEN 5270
5320 PRINT "STOPPED BY ";A$;" AT ";Y2;"-";: CALL -384: PRINT X2: CALL -380
5330 X=X-X1:Y=Y-Y1: GOSUB 100
5340 S(S3)=0:S(S5)=1:S3=S5: GOSUB 1102: GOSUB 490: GOSUB 1102
5342 IF D(2) THEN GOSUB 1000: IF A1 THEN RETURN
5345 E=E-20*(1+W1):T3=W1: GOSUB 850: GOTO 500
5350 GOSUB 1320: GOSUB 670:Q3=Q7: GOSUB 1350:S3=S5: GOSUB 490: GOSUB 200: GOSUB 1000: GOTO 5270
5360 GOSUB 300: GOSUB 490
5365 Q5=Q1+((W*Y1)+500*( SGN (Y1)))/1000:Q6=Q2+((W*X1)+500*( SGN (X1)))/1000
5367 GOSUB 1330:Q9=Q7:Q7=Q3:W9=W:A1=1:W=3: GOSUB 5265:A1=0: IF F1=2 THEN 5340
5368 IF Q7#Q9 THEN GOSUB 670:Q3=Q9:W=W9: IF Q7=Q9 THEN 5380:S3= RND (64)+1
5375 GOSUB 200: GOSUB 490: GOSUB 1000
5380 E=E-12*W ^ 3:T3=10: GOSUB 850: GOTO 500
5400 GOSUB 1430: PRINT "SET ";A$;"%";: INPUT E2: GOTO 1030
5600 GOSUB 660:N6=0: FOR D1=1 TO Z: IF D1=6 THEN NEXT D1: IF D(D1)>0 THEN 5605: GOSUB 1440: PRINT A$,"OK": GOTO 5610
5605 GOSUB 830
5610 NEXT D1:N4=8: IF D(9)<=0 THEN 630: GOSUB 845:N4=9: GOTO 630
5800 IF NOT D(4) THEN 5805:D1=A: GOTO 830
5805 IF NOT N6 THEN N4=0:A2=A: GOSUB 1640: GOSUB 6140: IF IB#193 AND B1 THEN RETURN : IF A=4 THEN 5830
5810 IF P>=B1 AND P#0 THEN 5820: PRINT "EXCUSE ME SIR, WE HAVE ";P;" LEFT.": PRINT : RETURN
5820 IF B1>0 THEN 5850: INPUT "TRAJECTORY",C9: IF C9>359 THEN RETURN : GOTO 5850
5830 PRINT : INPUT "PHASERS READY: ENERGY TO FIRE",H1: IF H1<1 THEN RETURN
5840 IF H1<=E-E1 THEN 5850: PRINT "EXCUSE ME SIR, WE ONLY HAVE ";E-E1;".": GOTO 5830
5850 IF K=0 AND A=4 THEN RETURN :K7=K: IF B1=0 THEN 5867
5860 K7=B1: GOSUB 1800: GOSUB 2200: GOSUB 500:A2=A: GOSUB 1640
5865 IF D(A)>0 OR B1=0 THEN RETURN
5867 IF A=5 THEN 6080
5870 IF H1>E-E1 THEN H1=E-E1: FOR J=1 TO 64: IF S(J)>=0 THEN 5895: GOSUB 2030: IF V2#1 AND B1>0 THEN 5895
5875 GOSUB 480: GOSUB 1107
5880 N1=J1:N2=2*J2: GOSUB 1175:H=H1/K7:E=E-H: GOSUB 2030: GOSUB 450:V1=V1-H
5890 GOSUB 1450: PRINT : GOSUB 1460: GOSUB 2050: GOSUB 1102: NEXT J: GOTO 6100
5895 NEXT J: GOTO 6100
6000 IF NOT D(5) THEN 5805:D1=A: GOTO 830
6080 IF B1#0 THEN 6090:C=C9: GOSUB 6130: GOTO 6100
6090 FOR J=1 TO 64: IF S(J)/10000=-2 THEN GOSUB 6120: NEXT J
6100 GOSUB 1030: IF B1#0 THEN RETURN : GOSUB 1800: GOSUB 2200: GOTO 500
6120 GOSUB 480:C5=J1-S1:C6=J2-S2: GOSUB 1520
6130 GOSUB 305: GOSUB 1420: PRINT " < ";A$;"FIRING ";D$(41,47);" >":J9=J:J=S3: GOSUB 2400:J=J9:P=P-1: RETURN
6140 IF B1=0 THEN RETURN : PRINT "AUTO OR MANUAL (A OR M)?";: GOSUB 2500: TAB 1: CALL -868:IB=KB: IF IB=205 THEN B1=0: RETURN
6200 INPUT "# TO LOAD (+) OR UNLOAD (-)",N: IF N<-P OR N>10-P THEN 1030:E=E-(500+100* SGN (N))*N:P=P+N: GOTO 1030
6400 IF NOT D(7) THEN 6402:D1=7: GOTO 830
6402 E=E-20: GOSUB 640
6405 PRINT : PRINT "APPLE-81 HERE-"
6410 N5=1: GOSUB 610: PRINT "1 *COMPUTE QUADRANT": PRINT "2 *LOCK PHASERS": PRINT "3 *LOCK PH TORPS"
6430 PRINT "4 *LOCK COURSE": PRINT "5 *COMPUTE TRAJECTORY": PRINT "6 *RETURN": GOSUB 630
6440 PRINT "WHAT IS YOUR INSTRUCTION?";: GOSUB 2510:B=KB: TAB 1: CALL -868: IF B<1 OR B>6 THEN 6410: IF N5 THEN GOSUB 1030: IF B>1 THEN 6530
6460 GOSUB 1600:C5=Y2-Q1:C6=X2-Q2: GOSUB 1510: GOSUB 6695: PRINT "COURSE - ";C,"WARP - ";R: GOSUB 630: GOTO 6440
6530 IF B>3 THEN GOTO 6610+10*B
6540 A2=B+2: GOSUB 1620
6550 PRINT "# OF TARGETS?";: GOSUB 2510: TAB 1: CALL -868:B1=KB: IF B1=0 THEN 6440: IF B1<K+1 AND B1>0 THEN 6570: GOSUB 6690: GOTO 6640
6570 FOR I=1 TO B1: GOSUB 1600: GOSUB 1350: IF S(S5)<0 THEN 6620: GOSUB 6690: GOTO 6630
6620 J=S5: GOSUB 2030:V2=B-1: GOSUB 2050
6630 NEXT I
6640 E=E-20: GOTO 6440
6650 A1=1: GOSUB 1600:V5=Y2:V6=X2: GOSUB 1030: GOTO 6640
6660 GOSUB 1600:C5=Y2-S1:C6=X2-S2: GOSUB 1520: GOSUB 6695: PRINT "TRAJECTORY - ";C,"RANGE - ";R: GOSUB 630: GOTO 6440
6670 CALL -936: RETURN
6690 CALL -384: PRINT "<DATA ERROR>";: CALL -380: TAB 1: RETURN
6691 CALL -936: VTAB 13: PRINT "APPLE-81 HERE-": RETURN
6695 IF N4=0 THEN N4=1: POKE 34,N4-1: VTAB N4: TAB 1: CALL -868: RETURN
6800 IF NOT D(8) THEN 6805:D1=8: GOTO 830
6805 E=E-30: GOSUB 1030: PRINT : IF K#0 THEN 6810: TAB 10: PRINT "> NO KLINGONS <": RETURN
6810 GOSUB 660: CALL -384: PRINT "COORD","ENERGY","TORPS","LOCK": CALL -380
6820 FOR J=1 TO 64: IF S(J)<0 THEN 6830: GOTO 6860
6830 GOSUB 480: GOSUB 2030: TAB 2: PRINT J1;"-";: CALL -384: PRINT J2;: CALL -380: PRINT " ",V1,V3;
6840 IF V2 THEN 6850: PRINT : GOTO 6860
6850 D1=V2+3: GOSUB 1440: TAB 24: PRINT A$
6860 NEXT J:N4=K+2:N6=0: GOTO 630
7000 GOSUB 9800: INPUT SD1$: IF SD$#SD1$ THEN RETURN
7005 FOR I=1 TO 4: GOSUB 7020: NEXT I
7010 A=4:A2=4:H1=E+500*P+1000: GOSUB 1620:K7=K:B1=-1: GOSUB 5870:E=0:P=0: POP : GOTO 9400
7020 POKE R5-89,105: POKE R5-94,1: POKE R5-80,255
7030 POKE -16304,0: POKE -16302,0: CALL R5-95
7040 POKE -16303,0: FOR J=1 TO 50: NEXT J: POKE R5-89,233: RETURN
9005 TEXT :J=I=S3=S5: DIM S(64),Q$(5),D$(128),Q(64):Q$="K EB*"
9010 Z=8:X=Y=X2=Y2=K4=V1=V2=V3: DIM I$(8),D(9),A$(14)
9015 DIM SD$(10),SD1$(10)
9020 R5=16384
9030 GOSUB 600:N6=0
9051 VTAB 9: TAB 12: PRINT ",";: TAB 28: PRINT ","
9052 TAB 12: CALL -384: PRINT "A";: CALL -380: PRINT " APPLE II TREK ";: CALL -384: PRINT "A": CALL -380: VTAB 16
9055 B9=2+ RND (2)+ RND (2):K9=25+ RND (15)+ RND (15)
9060 S9=3800:T9=3427:T0=3424:T=T0:E0=5000:P0=10:T1=0:E2=50
9065 A1=0: GOSUB 800:K0=K9:B0=B9
9070 PRINT "CAPTAIN'S LOG - STARDATE ";T0;".";T1: PRINT
9075 PRINT "WE HAVE BEEN ASSIGNED A ";T9-T0;" YEAR MISSION"
9080 GOSUB 1410: PRINT "TO SEEK AND DESTROY ";K9;A$;"BATTLE"
9085 PRINT "CRUISERS. WE WILL HAVE ";B9;" BASES AVAILABLE"
9090 IF IB=217 THEN 9200: POKE R5-89,233: PRINT "DIFFERENT SET-UP?";: GOSUB 2500: TAB 1: CALL -868
9110 IF KB#217 THEN 9200: POKE 34,12: CALL -936: VTAB 23
9120 PRINT "SET UP YOUR OWN?";: GOSUB 2500: TAB 1: CALL -868:IB=KB: IF IB#217 THEN 9055
9135 INPUT "KLINGONS(200 MAX)",K9: IF K9>200 OR K9<1 THEN 9135
9140 INPUT "BASES(20 MAX)",B9: IF B9>20 OR B9<1 THEN 9140: GOTO 9065
9200 GOSUB 9800: INPUT SD$: GOSUB 150: GOSUB 200: GOSUB 1000: GOSUB 500
9220 GOSUB 490: GOSUB 630:N5=0
9225 POKE R5-80,3: POKE R5-94,50: CALL R5-95: PRINT " COMMAND?";: GOSUB 2510:A=KB: TAB 1: CALL -936: VTAB 13
9230 IF N5 THEN GOSUB 1030: IF A>0 AND A<10 THEN 9310:N5=1: GOSUB 610
9245 PRINT "1 NAVIGATION": GOSUB 1430: PRINT "2 ";A$
9250 PRINT "3 DAMAGE RPT": PRINT "4 ";D$(31,40): PRINT "5 ";D$(41,50): PRINT "6 LOAD ";D$(41,50)
9260 PRINT "7 ";D$(61,70): PRINT "8 ";D$(71,80): PRINT "9 SELF-DESTRUCT"
9275 GOSUB 630: GOTO 9225
9310 GOSUB 5000+A*200+(A>7)*200
9320 IF K9>0 AND E>0 AND E>E1 AND T9>T THEN 9220
9400 X1=(K0-K9)*100:Y1=(B0-B9)*50+E/200: IF NOT Y1 THEN Y1=1:X=2*(X1/Y1+X1/((T-T0)*100+1+T1))-K9-4*B0
9405 GOSUB 600: VTAB 3: TAB 12: PRINT "< BULLETIN >": PRINT
9410 PRINT "STARDATE ";T;".";T1/10: PRINT : PRINT "TO: ALL UNITS": PRINT "FROM: STARFLEET COMMAND": PRINT
9420 D$="SUCCESSFUL": IF K9 THEN D$="UNSUCCESSFUL": IF E<=0 OR E<=E1 THEN D$="DESTROYED": GOSUB 1420
9430 PRINT "WE HAVE BEEN NOTIFIED THAT THE STARSHIP": PRINT A$;"HAS BEEN ";D$;" AFTER"
9440 D$="ALL ": IF K9 THEN D$="ONLY "
9450 PRINT T-T0;".";T1/10;" YEARS OF ITS ";T9-T0;" YEAR MISSION. THE": PRINT A$;"DESTROYED ";D$;K0-K9;: GOSUB 1410: PRINT A$
9470 PRINT "BATTLE CRUISERS";: IF K9 THEN PRINT " OF ";K0;: PRINT " IN ITS MISSION.": PRINT
9480 D$="DISASTROUS": IF X>30 THEN D$="LACKLUSTER": IF K9 THEN 9490:D$="EXCELLENT": IF X>60 THEN D$="BRILLIANT"
9490 PRINT "THIS ";D$;" PERFORMANCE MEANS"
9500 IF K9 AND X<30 THEN 9520: IF K9 THEN 9530
9510 PRINT "VICTORY FOR";: GOTO 9540
9520 PRINT "DESTRUCTION OF";: GOTO 9540
9530 PRINT "DIFFICULT TIMES FOR";
9540 PRINT " THE FEDERATION.": PRINT
9550 PRINT "STARFLEET COMMAND HEREBY ISSUES ORDERS": PRINT "FOR ";
9555 IF K9 AND X<30 THEN 9570: IF K9 THEN 9580: IF X>60 THEN 9590
9560 PRINT "THE MEDAL OF VALOR";: GOTO 9600
9570 PRINT "DISMISSAL FOR INCOMPETENCE";: GOTO 9600
9580 PRINT "REMOVAL FROM COMMAND";: GOTO 9600
9590 PRINT "PROMOTION TO ADMIRAL";
9600 PRINT " FOR THE": GOSUB 1420: PRINT "CAPTAIN OF THE";A$;"FOR A"
9610 PRINT "BATTLE FACTOR OF ";X;" IN THIS MISSION."
9700 IB=0: PRINT : PRINT "TRY AGAIN?";: GOSUB 2500: PRINT : IF KB=217 THEN 9030
9710 END
9800 PRINT : PRINT "ENTER SELF-DESTRUCT PASSW0RD-";: RETURN
10000 REM W SANDER 1/11/78
18900 REM HIMEM:16384
19000 GOTO 9005
19900 REM