-
Notifications
You must be signed in to change notification settings - Fork 0
/
SGM100.DO
715 lines (367 loc) · 15.3 KB
/
SGM100.DO
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
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
10 REM Space Game by Lloyd Johnson
20 REM August 4,2023 - TRS80 M100 Version
40 DEFINTA-Z:DR!=1.74532E-2:RD!=1/DR!:P2!=1.570796
50 DIMXS(11),YS(11),ZS(11),XA(9),YA(9),ZA(9)
60 DIMRS(11),BS(11),MS(11),FC(2),EW(9),MC(9)
70 SCREEN0,0:CLS:PRINT"Space Game by Lloyd Johnson"
80 PRINT"Press any key to continue"
90 DV!=RND(1):IFINKEY$=""THEN90
110 XA(0)=RND(1)*6E3-3E3:YA(0)=RND(1)*6E3-3E3:ZA(0)=RND(1)*6E3-3E3
120 XS(0)=-XA(0):YS(0)=-YA(0):ZS(0)=-ZA(0)
130 XS(10)=XS(0)/100:YS(10)=YS(0)/100:ZS(10)=ZS(0)/100
140 I=10:GOSUB1930
150 FORI=0TO3:EB!(I)=15:NEXT
160 PRINT@120,"Entering normal space by the artifact.
170 PRINTUSING"Initial velocity is ## Mm/min towards";RS(10):PRINT"the artifact."
180 PRINT:PRINT"Standby...";
190 FORI=0TO9
200 IFI=0THEN250
210 IFRND(1)>.333THEND(I)=0ELSED(I)=1
220 XA(I)=RND(1)*2E3-1E3:YA(I)=RND(1)*2E3-1E3:ZA(I)=RND(1)*2E3-1E3
230 C1(I)=10:C2(I)=10
240 XS(I)=XA(I)-XA(0):YS(I)=YA(I)-YA(0):ZS(I)=ZA(I)-ZA(0):
250 GOSUB1930
260 NEXT
270 MN=1:FC(0)=10:TP=7:LE=0:EE=1:TR=45:A=65:MT!=0:E1=0
280 RS(11)=.5+RS(0)/100:BS(11)=BS(0):MS(11)=MS(0)
290 FORI=1TO3
300 J=1+RND(1)*8:IFEW(J)>0THEN300ELSEEW(J)=1:MC(J)=5+RND(1)*5
310 J=1+RND(1)*8:IFEW(J)>0THEN310ELSEEW(J)=2
320 NEXT
350 CLS:GOSUB2030
360 ONMNGOTO380,490,790,1160
380 PRINT@240,USING"VEL#### ### ###";RS(10),BS(10),MS(10);
390 IFCC=1THENPRINT" CC ";:ELSEPRINT" ";
400 PRINTUSING"FD:## EB:";FC(1);
410 FORJ=0TO3:PRINTUSING"## ";EB!(J);:NEXT
420 PRINT@280,USING"MT=###.# Enter Main Command(N,O,D,?):";MT!;
430 A$=INKEY$:IFA$="?"THENGOSUB2210:GOTO350
440 IFA$="N"THENMN=2:GOSUB2180:GOTO490
450 IFA$="O"THENMN=3:GOSUB2180:GOTO790
460 IFA$="D"THENMN=4:GOSUB2180:GOTO1160
470 GOTO430
490 PRINT@240,USING"VEL#### ### ###";RS(10),BS(10),MS(10);
500 IFCC=1THENPRINT" CC ";:ELSEPRINT" ";
510 PRINTUSING"VEL#### ### ###";RS(11),BS(11),MS(11);
520 IFET>0THENPRINT@280,USING"MT=###.# Cruise in Progress (X Cancels)";MT!;:GOTO1480
530 PRINT@280,USING"MT=###.# Enter Nav Command(SC,CR,M,?):";MT!;
540 A$=INKEY$:IFA$=""THEN540ELSEIFA$="?"THENGOSUB2300:GOTO350
550 IFA$="M"THENMN=1:GOSUB2180:GOTO360
570 IFA$<>"C"THEN640ELSEPRINT"C";
580 A$=INKEY$:IFA$=""THEN580ELSEIFA$<>"R"THENGOSUB2180:GOTO360
590 PRINT@280,SPACE$(39);:PRINT@280,"Enter Cruise Time (0-9):";
600 A$=INKEY$:IFA$=""THEN600
610 TV=ASC(A$)-48:IFTV<1ORTV>9THEN360
620 CT=2*TV:ET=1:GOTO360
640 IFA$<>"S"THEN360ELSEPRINT"S";
650 A$=INKEY$:IFA$=""THEN650ELSEIFA$<>"C"THENGOSUB2180:GOTO360
660 PRINT@280,SPACE$(39);:PRINT@280,"Enter velocity (0-999):";
670 CS(3)=999:GOSUB2730:IFCF=1THENCF=0:GOSUB2180:GOTO360ELSECS(0)=TV
680 PRINT@280,SPACE$(39);:PRINT@280,"Enter bearing (0-360):";
690 CS(3)=360:GOSUB2730:IFCF=1THENCF=0:GOSUB2180:GOTO360ELSECS(1)=TV
700 PRINT@280,SPACE$(39);:PRINT@280,"Enter mark (0-180):";
710 CS(3)=180:GOSUB2730:IFCF=1THENCF=0:GOSUB2180:GOTO360ELSECS(2)=TV
720 XS(11)=CS(0)*SIN(DR!*CS(2))*COS(DR!*CS(1))+.5
730 YS(11)=CS(0)*SIN(DR!*CS(2))*SIN(DR!*CS(1))+.5
740 ZS(11)=CS(0)*COS(DR!*CS(2))+.5
750 I=11:GOSUB1930
760 GOSUB2180:PRINT@240,"Course setting initiated...";:CC=1:GOTO1480
790 PRINT@240,USING"TA:##";TP;
800 IFTS>0THENPRINTUSING" TP:## LP:## ST:#";PT,PL,TS;
810 PRINT@263,USING"FO:## FD:## FX:##";FC(0),FC(1),FC(2);
820 IFET>0THENPRINT@280,USING"MT=###.# Neutralizing Artifact...";MT!;:GOTO1480
830 PRINT@280,"Enter Ord Cmd(ST,FL,FT,LF,RF,NA,M,?):";
840 A$=INKEY$:IFA$=""THEN840ELSEIFA$="?"THENGOSUB2390:GOTO350
850 IFA$="M"THENMN=1:GOSUB2180:GOTO360
870 IFA$<>"S"THEN940ELSEPRINT"S";
880 A$=INKEY$:IFA$=""THEN880ELSEIFA$<>"T"THENGOSUB2180:GOTO360
890 PRINT@280,SPACE$(39);:PRINT@280,"Enter Valid Target (1-9):";
900 A$=INKEY$:IFA$=""THEN900
910 TV=ASC(A$)-48:IFTV<1ORTV>9THEN360ELSEIFD(TV)=2THEN360
920 TS=TV:GOSUB2620:GOTO360
940 IFA$<>"L"ORFC(0)=0ORFC(1)>4THEN1000ELSEPRINT"L";
950 A$=INKEY$:IFA$=""THEN950ELSEIFA$<>"F"THENGOSUB2180:GOTO360
960 IFFC(0)>5THENFC(1)=FC(1)+5:FC(0)=FC(0)-5ELSEFC(1)=FC(1)+FC(0):FC(0)=0
970 IFFC(1)>5THENFC(0)=FC(0)+FC(1)-5:FC(1)=5
980 GOSUB2180:PRINT@240,"Launching fighters...";:GOTO1480
1000 IFA$<>"R"ORFC(1)=0THEN1040ELSEPRINT"R";
1010 A$=INKEY$:IFA$=""THEN1010ELSEIFA$<>"F"THENGOSUB2180:GOTO360
1020 FC(0)=FC(0)+FC(1):FC(1)=0:GOSUB2180:PRINT@240,"Recalling fighters...";:GOTO1480
1040 IFA$<>"F"ORTS=0THEN1110ELSEPRINT"F";
1050 A$=INKEY$:IFA$=""THEN1050ELSEIFA$<>"T"ANDA$<>"L"THENGOSUB2180:GOTO360
1060 IFA$="T"THEN1080ELSEIFEB!(LE)=0THENGOSUB2180:GOTO360
1070 LF=1:GOSUB2180:PRINT@240,"Getting lasers ready to fire...";:GOTO1480
1080 IFTP=0THENGOSUB2180:GOTO360
1090 TP=TP-1:TF=1:GOSUB2180:PRINT@240,"Preparing a torpedo now...";:GOTO1480
1110 IFA$<>"N"ORRS(0)>250ORRS(10)>3THEN360ELSEPRINT"N";
1120 A$=INKEY$:IFA$=""THEN1120ELSEIFA$<>"A"THENGOSUB2180:GOTO360
1130 NT=10:ET=1:GOSUB2180:PRINT@240,"Neutralizing Artifact (X Cancels)";:GOTO1480
1160 PRINT@240,"LEB:"CHR$(A+LE)" EEB:"CHR$(A+EE);
1170 PRINTUSING" TRU=##";TR;
1180 IFET>0THENPRINT" RP EB:";:ELSEPRINT" EB:";
1190 FORJ=0TO3:PRINTUSING"## ";EB!(J);:NEXT
1200 IFET>0THENPRINT@280,"Repair in Progress - Press X to Cancel";:GOTO1480
1210 PRINT@280,"Enter DMG CTL Cmd(PR,RL,RE,M,?):";
1220 A$=INKEY$:IFA$=""THEN1220ELSEIFA$="?"THENGOSUB2520:GOTO350
1230 IFA$="M"THENMN=1:GOSUB2180:GOTO360
1240 IFA$<>"R"THEN1350ELSEPRINT"R";
1250 A$=INKEY$:IFA$=""THEN1250ELSEIFA$<>"L"ANDA$<>"E"THENGOSUB2180:GOTO360
1260 IFA$="L"THEN1310
1280 PRINT@280,SPACE$(39);:PRINT@280,"Enter new Engine Energy Bank(A-D):";
1290 GOSUB2680:IFTV=-1THENGOSUB2180:GOTO360ELSEEE=TV:GOTO1330
1310 PRINT@280,SPACE$(39);:PRINT@280,"Enter new Laser Energy Bank(A-D):";
1320 GOSUB2680:IFTV=-1THENGOSUB2180:GOTO360ELSELE=TV
1330 GOSUB2180:PRINT@240,"Energy Bank reconfiguration":PRINT"in progress...";:GOTO1480
1350 IFA$<>"P"ORTR=0THEN360ELSEPRINT"P";
1360 A$=INKEY$:IFA$=""THEN1360ELSEIFA$<>"R"THENGOSUB2180:GOTO360
1370 IFTR>7THENRU=7ELSERU=TR
1380 FORJ=0TO3:BR(J)=0:NEXT:R1=0
1390 FORJ=0TO3:PRINT@280,SPACE$(39);
1400 PRINT@280,"Repair Energy Bank "CHR$(A+J);:PRINTUSING" allocation(0-#):";RU;:GOSUB2800
1410 IFCF=1THENJ=3:GOTO1430
1420 BR(J)=TV:RU=RU-TV:R1=R1+TV:IFRU=0THENJ=3
1430 NEXTJ:IFCF=1THENCF=0:GOSUB2180:GOTO360
1440 TR=TR-R1:RT=4:ET=1:GOSUB2180:PRINT@240,"Performing Repair (X Cancels)";:GOTO1480
1480 IFCC=1THENGOSUB3110
1490 GOSUB3220
1500 MR=850+300*RND(1):LP=0
1510 LR=1050+(RND(1)-.5)*200
1520 LR=LR*(EB!(LE)/15)+.5
1530 GOSUB3280
1540 GOSUB3430
1550 GOSUB3620
1560 IFFC(1)>0THENGOSUB3900
1570 GOSUB4130
1580 GOSUB4280
1590 GOSUB4380
1600 MT!=MT!+.5
1610 IFCT>0ANDCT=ETTHENET=0:CT=0
1620 IFNT>0ANDNT=ETTHENET=0:NT=0:GOTO1720
1630 IFRT>0ANDRT=ETTHENET=0:RT=0
1640 IFCT>0ORRT>0ORNT>0THENET=ET+1
1650 IFCF=1THENCF=0:ET=0:CT=0:NT=0:RT=0
1660 IFUV=1THENUV=0:I=10:GOSUB1930
1670 IFTS>0THENGOSUB2620
1680 GOTO350
1720 CLS:PRINT"Congratulations! You have successfully"
1730 PRINT"neutralized the artifact. Altera"
1740 PRINT"will now engage its warp drive to"
1750 PRINT"return to the Epsilon Eridani starbase."
1760 PRINT"Promotions and other rewards will"
1770 PRINT"be waiting for you. Nice job!"
1780 GOTO1870
1810 CLS:PRINT"With the loss of the second energy"
1820 PRINT"bank, Altera is no longer capable of"
1830 PRINT"completing the mission and will return"
1840 PRINT"to the Epsilon Eridani starbase for"
1850 PRINT"refurbishment. Perhaps the next"
1860 PRINT"attempt will be more successful."
1870 GOSUB2910:CLS:PRINT"Thank you for playing."
1880 END
1930 RS(I)=SQR(XS(I)^2+YS(I)^2+ZS(I)^2)
1940 IFXS(I)=0THENBS(I)=SGN(YS(I))*90:GOTO1960
1950 BS(I)=RD!*ATN(YS(I)/XS(I)):IFXS(I)<=0THENBS(I)=BS(I)+180
1960 IFBS(I)<0THENBS(I)=BS(I)+360
1970 IFBS(I)>360THENBS(I)=BS(I)-360
1980 IFRS(I)=0THENMS(I)=0:RETURN
1990 IFABS(ZS(I))>=RS(I)THENMS(I)=90*(1-SGN(ZS(I))):RETURN
2000 ZR!=ZS(I)/RS(I):MS(I)=RD!*(P2!-ATN(ZR!/SQR(1-ZR!^2))):RETURN
2030 PRINT@0,"OBJ RNG BRG MRK L E OBJ RNG BRG MRK L E"
2040 FORI=1TO9
2050 IFI=1THENSL=0:GOTO2070
2060 IFI=6THENSL=20:GOTO2070
2070 SL=SL+40
2080 IFD(I)=2THENPRINT@SL," ***DESTROYED***";:GOTO2120
2090 PRINT@SL,USING"S# #### ### ###";I;RS(I);BS(I);MS(I);
2100 IFC1(I)>5THENPRINT" A";ELSEIFC1(I)>0THENPRINT" D";ELSEPRINT" X";
2110 IFC2(I)>5THENPRINT" A";ELSEIFC2(I)>0THENPRINT" D";ELSEPRINT" X";
2120 NEXT
2130 SL=SL+40
2140 PRINT@SL,USING"AF #### ### ###";RS(0);BS(0);MS(0);
2150 RETURN
2180 PRINT@240,SPACE$(79);:RETURN
2210 CLS:PRINT"Main Commands":
2220 PRINT"N:Navigation"
2230 PRINT"O:Ordnance(Weapons)"
2240 PRINT"D:Damage Control"
2250 PRINT"?:This display"
2260 PRINT@280,"Press any key to continue";
2270 IFINKEY$=""THEN2270ELSERETURN
2300 CLS:PRINT"Navigation Commands":
2310 PRINT"SC:Set Course"
2320 PRINT"CR:Set Cruise Time":
2330 PRINT"M:Main"
2340 PRINT"?:This display"
2350 PRINT@280,"Press any key to continue";
2360 IFINKEY$=""THEN2360ELSERETURN
2390 CLS:PRINT"Ordnance Commands":
2400 PRINT"ST:Select Target"
2410 PRINT"FL:Fire Laser"
2420 PRINT@100,"FT:Fire Torpedo"
2430 PRINT"LF:Launch Fighters"
2440 PRINT@140,"RF:Recall Fighters"
2450 PRINT"NA:Neutralize Artifact"
2460 PRINT"M:Main"
2470 PRINT@220,"?:This display"
2480 PRINT@280,"Press any key to continue";
2490 IFINKEY$=""THEN2490ELSERETURN
2520 CLS:PRINT"Damage Control Comands":
2530 PRINT"PR:Perform Repair"
2540 PRINT"RL:Reassign Laser EB"
2550 PRINT"RE:Reassign Engine EB"
2560 PRINT"M:Main"
2570 PRINT"?:This display"
2580 PRINT@280,"Press any key to continue";
2590 IFINKEY$=""THEN2590ELSERETURN
2620 PT=100-(25*(2+LOG(RS(TS)/1000)/LOG(2)))
2630 IFPT>99THENPT=99ELSEIFPT<1THENPT=1
2640 PL=.667*(LR-RS(TS))+50:IFPL>99THENPL=99ELSEIFPL<1THENPL=1
2650 RETURN
2680 A$=INKEY$:IFA$=""THEN2680
2690 TV=ASC(A$)-65:IFTV<0ORTV>3THENTV=-1:RETURN
2700 IFTV=LEORTV=EEOREB!(TV)=0THENTV=-1:RETURNELSERETURN
2730 TV=0
2740 A$=INKEY$:IFA$=""THEN2740
2750 IFA$="X"THENCF=1:RETURN
2760 TN=ASC(A$):IFTN=13THENRETURNELSETN=TN-48
2770 IFTN<0ORTN>9OR(TV*10+TN)>CS(3)THEN2740ELSETV=TV*10+TN:PRINTA$;:GOTO2740
2800 TV=0
2810 A$=INKEY$:IFA$=""THEN2810
2820 IFA$="X"THENCF=1:RETURN
2830 TN=ASC(A$):IFTN=13THENRETURNELSETN=TN-48
2840 IFTN<0ORTN>RUTHEN2810ELSETV=TN:PRINTA$;
2850 RETURN
2880 CLS:PRINTUSING"*MT=###.# Status Notifications*";MT!:RETURN
2910 PRINT@280,"Press any key to continue...";
2920 A$=INKEY$:IFA$=""THEN2920ELSEPRINT@280,SPACE$(39);:PRINT@280,"Continuing...";
2930 IFCF=0ANDA$="X"THENCF=1
2940 RETURN
2970 IFRND(1)>.5THENC1(I)=C1(I)-2ELSEC2(I)=C2(I)-2
2980 IFC1(I)>0ORC2(I)>0THENRETURN
2990 D(I)=2:IFTS=ITHENTS=0
3000 RETURN
3030 FORJ=1TOD9:K=RND(1)*4:EB!(K)=EB!(K)-1:IFEB!(K)<0THENEB!(K)=0
3040 NEXT
3050 RETURN
3110 MV=3.333*EB!(EE)+.5:IFFC(1)>0ANDMV>20THENMV=20
3120 DV=SQR((XS(10)-XS(11))^2+(YS(10)-YS(11))^2+(ZS(10)-ZS(11))^2)+.5
3130 IFDV<2THENCC=0:RETURN
3140 IFDV<MVTHENVF!=1ELSEVF!=MV/DV
3150 XS(10)=XS(10)-VF!*(XS(10)-XS(11))+.5
3160 YS(10)=YS(10)-VF!*(YS(10)-YS(11))+.5
3170 ZS(10)=ZS(10)-VF!*(ZS(10)-ZS(11))+.5
3180 UV=1
3190 RETURN
3220 XS(0)=XS(0)-XS(10)/2:YS(0)=YS(0)-YS(10)/2:ZS(0)=ZS(0)-ZS(10)/2
3230 XA(0)=-XS(0):YA(0)=-YS(0):ZA(0)=-ZS(0)
3240 I=0:GOSUB1930
3250 RETURN
3280 FORI=1TO9:IFEW(I)<2ORD(I)=2THEN3400
3290 IFRS(I)>MRORRND(1)>.333THENEW(I)=2:GOTO3400
3300 IFLP=0THENGOSUB2880
3310 LP=LP+1
3320 PRINTUSING"Ship S# tractor beam detected.";I
3330 PRINT" Altera course has been altered."
3340 IFLP>2THENGOSUB2910:LP=0
3350 XS(10)=XS(10)+10*XS(I)/RS(I)+.5
3360 YS(10)=YS(10)+10*YS(I)/RS(I)+.5
3370 ZS(10)=ZS(10)+10*ZS(I)/RS(I)+.5
3380 UV=1
3390 EW(I)=3
3400 NEXT:RETURN
3430 IFLF=0ANDTF=0THENRETURN
3440 IFLP=0THENGOSUB2880
3450 LP=LP+1:I=TS
3460 IFTF=1THEN3540
3480 LF=0:PRINTUSING"Altera fires lasers at Ship S# - ";I;
3490 IF100*RND(1)>PLTHENPRINT"Miss!":PRINT:GOTO3580
3500 PRINT"Hit!":GOSUB2970
3510 IFTS=0THENPRINTUSING" Ship S# has been destroyed!";I:ELSEPRINT
3520 GOTO3580
3540 TF=0:PRINTUSING"Altera fires torpedo at Ship S# - ";I;
3550 IF(100*RND(1)>PT)AND(EW(I)<>3)THENPRINT"Miss!":PRINT:GOTO3580
3560 PRINT"Hit!":FORJ=1TO5:GOSUB2970:NEXT
3570 IFTS=0THENPRINTUSING" Ship S# has been destroyed!";I:ELSEPRINT
3580 IFLP>2THENGOSUB2910:LP=0
3590 RETURN
3620 FORI=1TO9:IFD(I)=2OREW(I)=3ORRS(I)>MRTHEN3870
3630 IFRS(I)>100ORRND(1)>.1THEN3690
3640 IFLP=0THENGOSUB2880
3650 PRINTUSING"Ship S# has self destructed!";I:LP=LP+1:D(I)=2:TS=0:C1(I)=0:C2(I)=0
3660 D9=10+RS(I)/10:GOSUB3030:FC(2)=FC(2)+FC(1):FC(1)=0:GOSUB4520
3670 GOTO3860
3690 IFMC(I)=0THEN3750
3700 IFLP=0THENGOSUB2880
3710 PRINTUSING"Ship S# fires missile at Altera -";I;:LP=LP+1
3720 MC(I)=MC(I)-1:IFRND(1)>.5THENPRINT"Miss!":PRINT:GOTO3860
3730 PRINT"Hit!":D9=5:GOSUB3030::GOSUB4520:GOTO3860
3750 IFC1(I)<6THEN3870
3760 IFRND(1)>.5ORFC(1)=0THEN3820
3770 IFLP=0THENGOSUB2880
3780 PRINTUSING"Ship S# attacks Altera fighter - ";I;:LP=LP+1
3790 IFRND(1)>.5THENPRINT"Miss!":PRINT:GOTO3860
3800 PRINT"Hit!":PRINT" Altera fighter destroyed."
3810 FC(1)=FC(1)-1:FC(2)=FC(2)+1:GOTO3860
3820 IFLP=0THENGOSUB2880
3830 PRINTUSING"Ship S# fires lasers at Altera - ";I;:LP=LP+1
3840 IFRND(1)>.8THENPRINT"Miss!":PRINT:GOTO3860
3850 PRINT"Hit!":D9=1:GOSUB3030:GOSUB4520
3860 IFLP>2THENGOSUB2910:LP=0
3870 NEXTI:RETURN
3900 MR=850+300*RND(1):GOSUB4070
3910 IFFT(0)=0THENRETURN
3920 FA=FC(1)
3930 J=RND(1)*FT(0)+1:I=FT(J):FA=FA-1
3940 IFLP=0THENGOSUB2880
3950 LP=LP+1
3960 PRINTUSING"Altera fighter attacks Ship S# - ";I;
3970 IFRND(1)>.5THENPRINT"Miss!":PRINT:GOTO4020
3980 PRINT"Hit!":GOSUB2970
3990 IFD(I)<2THENPRINT:GOTO4020
4000 PRINTUSING" Ship S# has been destroyed!";I
4010 GOSUB4070:IFFT(0)=0THENFA=0
4020 IFLP>2THENGOSUB2910:LP=0
4030 IFFA>0THEN3930
4040 RETURN
4070 FT(0)=0:J=1
4080 FORI=1TO9:IFRS(I)>MRORD(I)=2THEN4100
4090 FT(0)=J:FT(J)=I:J=J+1
4100 NEXT:RETURN
4130 FORI=1TO9:IFD(I)=2ORC2(I)<6ORRND(1)>.333THEN4240
4140 VF!=INT(RS(I)/1000)+.5:RA=SQR(XA(I)^2+YA(I)^2+ZA(I)^2):DV!=RND(1)
4150 X2(I)=(RND(1)-.5)*75*VF!:Y2(I)=(RND(1)-.5)*75*VF!:Z2(I)=(RND(1)-.5)*75*VF!
4160 IFRA>(3000*DV!+2000)THEN4210ELSEIF(RA>(1000*DV!+1000))ANDD(I)=1THEN4210
4170 IFABS(XS(I)+X2(I))>ABS(XS(I))THENX2(I)=-X2(I)
4180 IFABS(YS(I)+Y2(I))>ABS(YS(I))THENY2(I)=-Y2(I)
4190 IFABS(ZS(I)+Z2(I))>ABS(ZS(I))THENZ2(I)=-Z2(I)
4200 GOTO4240
4210 IFABS(XA(I)+X2(I))>ABS(XA(I))THENX2(I)=-X2(I)
4220 IFABS(YA(I)+Y2(I))>ABS(YA(I))THENY2(I)=-Y2(I)
4230 IFABS(ZA(I)+Z2(I))>ABS(ZA(I))THENZ2(I)=-Z2(I)
4240 NEXT
4250 RETURN
4280 FORI=1TO9:IFD(I)=2THEN4330
4290 XA(I)=XA(I)+X2(I):YA(I)=YA(I)+Y2(I):ZA(I)=ZA(I)+Z2(I)
4300 XS(I)=XA(I)-XA(0):YS(I)=YA(I)-YA(0):ZS(I)=ZA(I)-ZA(0)
4310 IFCF=0THENA$=INKEY$
4320 GOSUB1930
4330 IFA$="X"THENCF=1:PRINT@280,SPACE$(39);:PRINT@280,"Canceled...";:A$=""
4340 NEXTI
4350 RETURN
4380 IFRT=0THEN4440
4400 FORJ=0TO3:IFEB!(J)=0THEN4420
4410 EB!(J)=BR(J)/4+EB!(J):IFEB!(J)>15THENEB!(J)=15
4420 NEXT
4440 J=RND(1)*9+1
4450 IFC1(J)>0THENC1(J)=C1(J)+1
4460 IFC2(J)>0THENC2(J)=C2(J)+1
4470 IFC1(J)>10THENC1(J)=10
4480 IFC2(J)>10THENC2(J)=10
4490 RETURN
4520 K=0:E0=0:E2=0:FORJ=0TO3:
4530 IFEB!(J)=0THENE2=E2+1:E0=JELSEIFEB!(J)<4THENK=1
4540 NEXT
4550 IFE2=1ANDE1=0THENPRINT" Energy Bank "CHR$(A+E0)" destroyed!":GOTO4580
4560 IFE2>1THENPRINT" Another energy bank was destroyed!":GOSUB2910:GOTO1810
4570 IFK=1ANDE2=E1THENPRINT" Energy bank status is critical"ELSEPRINT
4580 E1=E2:RETURN