Category : Science and Education
Archive   : BOOKTREK.ZIP
Filename : REALTIME.BAS

 
Output of file : REALTIME.BAS contained in archive : BOOKTREK.ZIP
10 CLS : PRINT " REAL TIME STARTREK VERSION 85-05-23" : ON ERROR GOTO 6000
15 C3 = 1 : C4 = 15 : C7 = 56 :C6 = 10
20 PRINT : PRINT "By Joe Kasser" : PRINT : GOSUB 4500 : GOSUB 4660
30 PRINT : PRINT K9/100;"Klingons have invaded Federation territory" : PRINT
40 PRINT "Your mission is to destroy them in";T;"Stardates" : GOTO 3000
50 REM SUBROUTINE TO SET UP 2 RANDOM CO-ORDINATES
60 X=INT(RND(Z)*8) : Y=INT(RND(Z)*8) : RETURN
70 REM SUB TO PRINT HEADING
80 PRINT : PRINT D$(I);"AT QUADRANT";Q1+Z;",";Q2+Z : PRINT : RETURN
90 REM SUBROUTINE TO SET UP ENTERPRISE PARAMETERS
100 E=E0 : E1=0 : P=10 : RETURN
110 REM SUBROUTINE TO DAMAGE SOMETHING
120 Y=Z+RND(Z)*W : X=INT((C1-C2)*RND(Z)) : D(X)=Y+D(X) : PRINT D$(X); "DAMAGED" : RETURN
130 REM ENERGY HIT SUBROUTINE
140 E1=E1-H : E=E-H : IF E1=<0 THEN F9=2 : GOTO 160
150 IF H>E1/2 THEN PRINT "SHIELD OVERLOAD ....."; : GOSUB 110
160 RETURN
170 REM SUBROUTINE TO PRINT SCORE
180 N=INT(((K8-K9)/100)*(K5/2.5+K4+Z)^2*100/(T9-T)) : IF N<0 THEN N=0
190 PRINT "SCORE";TAB(38);N : RETURN
200 REM MAP (COMPUTER) ROUTINE
210 I=5 : LOCATE C4,C3 : IF D(I)>0 THEN PRINT "COMPUTER DOWN AT THIS TIME " : GOTO 280
220 FOR I=0 TO 7 : PRINT TAB(C3+(Z+I)*5);I+Z; : NEXT : PRINT : FOR I=0 TO 7 : LOCATE C4+I+1,C3 : PRINT I+Z ;
230 FOR J=0 TO 7 : PRINT " "; : IF I=Q1 AND J=Q2 AND Q(I,J)<0 THEN PRINT CHR$(8);"+***+"; : GOTO 270
240 IF Q(I,J)<0 THEN PRINT "*** "; : GOTO 270
250 E$=STR$(Q(I,J)) : E$=" 00"+MID$(E$,2) : : IF I=Q1 AND J=Q2 THEN PRINT CHR$(29);"+";RIGHT$(E$,3);"+"; : GOTO 270
260 PRINT RIGHT$(E$,3);" ";
270 NEXT J : PRINT : NEXT I
280 RETURN
300 REM LRS LONG RANGE SENSOR SCAN ROUTINE
310 LOCATE C2,C7 : IF D(I)>0 THEN PRINT D$(I); " DAMAGED" : GOTO 370
320 N=0 : FOR I=Q1-Z TO Q1+Z : LOCATE C2+N,C7 : N=N+Z : FOR J=Q2-Z TO Q2+Z: PRINT " ";
330 IF I<0 OR I>7 OR J<0 OR J>7 THEN PRINT "***" ; : GOTO 360
340 IF D(5)=0 THEN Q(I,J)=ABS(Q(I,J))
350 E$=STR$(Q(I,J)) : E$="00"+MID$(E$,2) : PRINT RIGHT$(E$,3);
360 NEXT J : PRINT : NEXT I
370 RETURN
390 REM
400 REM SRS SHORT RANGE SENSORS
410 IF D(I)>0 THEN PRINT D$(I); " DAMAGED" : RETURN
420 IF Q1<0 OR Q1>7 OR Q2<0 OR Q2>7 THEN 440
430 IF D(5)=0 THEN Q(Q1,Q2)=ABS(Q(Q1,Q2))
440 GOSUB 3400 : LOCATE 3,1 : PRINT " 1 2 3 4 5 6 7 8";TAB(20); : GOSUB 170 : FOR I=0 TO 7 : LOCATE I+4,1 : PRINT I+Z ;
450 FOR J=0 TO 7 : PRINT MID$(S$,S(I,J),Z); " ";: NEXT J : PRINT TAB(20) ;
460 ON I+Z GOTO 470,480,490,500,510,520,530,540
470 PRINT "DAYS LEFT"; TAB(38);T : GOTO 550
480 PRINT "CONDITION "; TAB(38);C$ : GOTO 550
490 PRINT "SHIELDS"; TAB(38);E1 : GOTO 550
500 PRINT "ENERGY" ; TAB(38);E : GOTO 550
510 PRINT "PHOTON TORPEDOES";TAB(38);P : GOTO 550
520 PRINT "STARBASES";TAB(38);B9/10 : GOTO 550
530 PRINT "KLINGONS LEFT";TAB(38);K9/100 : GOTO 550
540 PRINT "KLINGONS CAPTURED";TAB(38);K4 : GOTO 550
550 NEXT I : RETURN
600 REM SHOOTBACK SUBROUTINE
610 IF C$="DOCKED" THEN 680
620 FOR I=0 TO 7 : IF K3(I)<=0 OR RND(Z)<.1*(I+Z) THEN 670
630 IF RND(Z)>K3(I)/500 THEN PRINT "KLINGON TORPEDO"; : H=RND(Z)*E1 : E1=E1+H : E=E+H : GOTO 660
640 H=K3(I)*.4*RND(Z) : K3(I)=K3(I)-H : H=H/(SQR((K1(I)-S1)^2+(K2(I)-S2)^2))^.4
650 PRINT H;"Unit hit on Enterprise";
660 PRINT " from sector";K1(I)+Z;",";K2(I)+Z : GOSUB 130 : IF F9>0 THEN 680
670 NEXT : IF E1<100 THEN PRINT D$(6);" Dangerously low";CHR$(7)
680 RETURN
700 REM MOVE KLINGON ROUTINE
710 FOR I=0 TO 7 : IF K3(I)<=0 THEN 740
720 GOSUB 50 : IF S(X,Y)<>Z THEN 740
730 S(K1(I),K2(I))=Z : K1(I)=X : K2(I)=Y : S(X,Y)=4
740 NEXT : RETURN
800 REM PHA PHASERS
810 IF K=0 THEN PRINT "No targets in quadrant ....... sir " : GOTO 950
820 IF D(I)>0 THEN PRINT D$(I);"OUT OF ACTION SIR" : GOTO 950
830 IF D(1)>0 THEN PRINT D$(1);"are not working, will use best guess settings"
840 INPUT "READY- how much energy do you want to fire "; X : IF X<=0 THEN 950
850 IF X>(E-E1) THEN PRINT "We don't have that much energy available sir" : GOTO 840
860 E = E - X : Y = K : FOR I = 0 TO 7 : IF K3(I)<=0 THEN 940
870 IF D(1)>0 THEN X = X*RND(Z)
880 H = X/(Y*(SQR((K1(I)-S1)^2+(K2(I)-S2)^2)^.4)) : K3(I) = K3(I) - H
890 PRINT "Hit on KLINGON at";K1(I)+Z;",";K2(I)+Z; : IF D(1)=0 THEN PRINT "(";K3(I);"Units left)" ELSE PRINT
900 IF K3(I)<=0 THEN K3(I) = 0 : PRINT "KLINGON DESTROYED" : S(K1(I),K2(I)) = Z : GOSUB 1220 : GOTO 940
910 IF K>Z OR K3(I)>E1/100 OR RND(Z)>.4 THEN 940
920 K3(I)=0 : S(K1(I),K2(I))=Z : GOSUB 1220 : IF RND(Z)<.7 THEN PRINT "KLINGON EXPLODED" : K5=K5+Z : GOTO 940
930 PRINT "KLINGON SURRENDERS .....Boarding party away" : K4 = K4 + Z : T1 = T : T = T - .5 : GOSUB 1800
940 NEXT
950 RETURN
1000 REM TOR PHOTON TORPEDOES
1010 IF D(I) > 0 THEN PRINT "TUBES BLOCKED" : GOTO 1210
1020 IF P = 0 THEN PRINT "NO TORPEDOE's LEFT SIR !" : GOTO 1210
1030 LOCATE 25,16 : INPUT "DIRECTION (1-9) ";C : IF C<1 OR C>9 THEN 1030
1040 Y1=S1+.5 : X1=S2+.5 : Y=(C-Z)*.785398 : X=COS(Y) : Y=-SIN(Y)
1050 P=P-Z : FOR J1=0 TO E0 : Y1=Y1+Y : X1=X1+X : Y2=INT(Y1) : X2=INT(X1)
1060 IF X2<0 OR X2>7 OR Y2<0 OR Y2>7 THEN PRINT "MISSED" : GOTO 1210
1070 J2 = S(Y2,X2) : S(Y2,X2)=6 : GOSUB 400 : S(Y2,X2) = J2 : ON S(Y2,X2) GOTO 1200,1080,1190,1100,1150
1080 PRINT "STAR "; : IF RND(Z)<.5 THEN PRINT "ABSORBED TORPEDO" : GOTO 1210
1090 PRINT "DEFLECTED TORPEDO" : Y=Z+RND(Z)*8*.785398 : X=COS(Y) : Y=-SIN(Y) : GOTO 1200
1100 IF RND(Z)>.9 THEN 1200
1110 PRINT " KLINGON DESTROYED"
1120 FOR I=0 TO 7 : IF Y2=K1(I) AND X2=K2(I) THEN 1140
1130 NEXT I : PRINT "SENSOR MALFUNCTION";CHR$(7)
1140 K3(I)=0 : GOSUB 1220 : GOTO 1180
1150 PRINT " STARBASE DESTROYED, WELL DONE" : B=B-Z : B9=B9-10 : K8=K9 : T9=T+Z
1160 IF Q(Q1,Q2)<0 THEN Q(Q1,Q2)=Q(Q1,Q2)+10 ELSE Q(Q1,Q2)=Q(Q1,Q2)-10
1170 IF B9=0 THEN PRINT : PRINT "THAT WAS YOUR LAST STARBASE"
1180 S(Y2,X2)=Z : GOTO 1210
1190 PRINT CHR$(7);"EVASIVE ACTION ....missed us"
1200 NEXT J1
1210 RETURN
1220 REM SUBROUTINE TO CLEAR KLINGON FROM SIMULATION
1230 K=K-Z : K9=K9-100 : IF K9=0 THEN F9=5
1240 IF Q(Q1,Q2)<0 THEN Q(Q1,Q2)=Q(Q1,Q2)+100 ELSE Q(Q1,Q2)=Q(Q1,Q2)-100
1250 RETURN
1300 REM NAV/WARP ENGINES/NAVIGATION
1310 INPUT "DIRECTION PLEASE (1-9) ";C : IF C<1 OR C>9 THEN 1310

1320 INPUT "WARP FACTOR ";W : IF W=<0 THEN 1750
1330 IF W>8 THEN PRINT " SIR WE CANNA GO THAT FAST" : GOTO 1320
1340 IF D(0)=0 THEN 1360
1350 IF W>=Z THEN PRINT D$(I);"DAMAGED (maximum allowable=.9) " : GOTO 1320
1360 REM MOVE ON
1370 S(S1,S2)=Z : T1=T : IF K>0 AND W>=Z THEN GOSUB 600 : IF F9>0 THEN 1750
1380 Y1=S1+.5 : X1=S2+.5 : Y=(C-Z)*.785398 : X=COS(Y) : Y=-SIN(Y)
1390 FOR I=0 TO INT(W*8) : T=T-.1 : Y1=Y1+Y : X1=X1+X : Y2=INT(Y1) : X2=INT(X1)
1400 IF X2<0 OR X2>7 OR Y2<0 OR Y2>7 THEN 1490
1410 ON S(Y2,X2) GOTO 1470,1420,1470,1440,1450
1420 PRINT "STAR DEAD AHEAD" : IF RND(Z)>.6 AND B=0 THEN 1640
1430 PRINT "EMERGENCY ENGINE SHUT DOWN" : D(0)=D(0)+.5 : GOSUB 1780 : GOTO 1720
1440 PRINT : PRINT "STAND BY FOR COLLISION WITH KLINGON" : GOSUB 1780 : GOSUB 110 : GOTO 1720
1450 GOSUB 1780 : PRINT : PRINT "MESSAGE FROM STARBASE" : IF K>0 THEN PRINT "CLUMSY" : GOTO 1720
1460 PRINT "ENTERPRISE CAUGHT IN TRACTOR BEAM BEFORE COLLISION" : GOTO 1720
1470 NEXT : S1=Y2 : S2=X2 : S(Y2,X2)=3 : GOTO 1580
1490 REM-OUT OF SECTOR
1500 Q1=INT(Q1+W*Y+(S1+.5)/8) : Q2=INT(Q2+W*X+(S2+.5)/8) : T=T-.6
1510 IF Q1<0 OR Q1>7 OR Q2<0 OR Q2>7 THEN 1550
1520 REM INSIDE GALAXY
1530 IF G9=Z THEN GOSUB 1760 : G9=0
1540 GOTO 1570
1550 IF G9=0 THEN GOSUB 1760 : G9=Z
1570 GOSUB 3200
1580 I=INT(RND(Z)*100) : IF I=0 OR I>4 THEN 1720
1590 IF G9=Z THEN 1680
1600 PRINT : IF B>0 THEN 1720
1610 ON I GOTO 1620,1640,1670,1680
1620 PRINT CHR$(7);"KLINGON SPACE MINE " : H=RND(Z)*400 : GOSUB 130 : IF F9>0 THEN 1750
1630 PRINT "SHIELDS DOWN TO"; E1; " UNITS" : GOTO 1720
1640 PRINT "SPACE WARP DUE TO GRAVITATIONAL ANOMALY" : GOSUB 50 : Q1=INT(X-P) : Q2=INT(Y-P)
1650 G9=0 : IF Q1<0 OR Q1>7 OR Q2<0 OR Q2>7 THEN G9=Z
1660 PRINT "SENSORS SHOW WE SEEM TO HAVE MOVED TO QUADRANT"; Q1+Z;",";Q2+Z : GOSUB 3200 : GOTO 1740
1670 PRINT CHR$(7);"ION STORM " : GOSUB 110 : GOTO 1720
1680 REM SPOCK DOES HIS FIXING HERE
1690 GOSUB 50 : FOR I=X TO C1-C2 : IF D(I)>0 THEN 1710
1700 NEXT : FOR I=0 TO X : IF D(I)<=0 THEN NEXT : GOTO 1720
1710 D(I)=0 : PRINT " Mr. SPOCK FIXED the ";D$(I)
1720 E=E-((INT(W*8))^2)/2 : IF E<0 THEN F9=3 : GOTO 1750
1730 GOSUB 1800 : IF E1>E THEN E1=E
1740 GOSUB 3400
1750 RETURN
1760 PRINT "CROSSING BARRIER at GALACTIC BOUNDARY" : GOSUB 110 : RETURN
1780 REM SUBROUTINE TO BACK UP ONE SECTOR
1790 S1=INT(Y1-Y) : S2=INT(X1-X) : S(S1,S2)=3 : RETURN
1800 REM SUBROUTINE FOR REPAIRS AFTER TIME (T1-T)
1810 IF T<0 THEN F9=4 : GOTO 1870
1820 N=0 :FOR I=0 TO C1-C2 : IF D(I)=<0 THEN 1860
1830 D(I)=D(I)-(T1-T) : IF D(I)>0 THEN 1860
1840 IF N=0 THEN PRINT : PRINT "DAMAGE CONTROL REPORTING " : N=Z
1850 D(I)=0 : PRINT D$(I);"REPAIRED"
1860 NEXT
1870 RETURN
1900 REM COMPUTER
1910 IF D(I)>0 THEN PRINT "COMPUTER DOWN AT THIS TIME " : GOTO 1970
1920 INPUT "Computer WORKING ";A$
1930 IF LEN(A$)<3 THEN PRINT "THAT DOES NOT COMPUTE (3 letters please) " : PRINT : GOTO 1920
1940 FOR I=0 TO LEN(C2$)/3-Z : IF A$=MID$(C2$,I*3+Z,3) THEN 1960
1950 NEXT : FOR I=0 TO LEN(C2$)/3-Z : PRINT MID$(C2$,I*3+Z,3); TAB(8); C3$(I) : NEXT : PRINT : GOTO 1920
1960 ON I+Z GOSUB 200,170,1980,2060,2360
1970 RETURN
1980 REM COMPUTER KLINGON STATUS
1990 IF D(5)>0 OR D(1)>0 THEN PRINT "COMPUTER/SENSOR MALFUNCTIONING AT THIS TIME " : GOTO 2050
2000 IF K=0 THEN PRINT "No KLINGONs in Quadrant" : GOTO 2050
2010 J=0 : X1=S1 : Y1=S2 :: FOR I=0 TO 7 : IF K3(I)=<0 THEN 2040
2020 IF J=0 THEN PRINT "KLINGON"," ENERGY";TAB(30);"DISTANCE";TAB(40);"DIRECTION" : J=Z
2030 PRINT K1(I)+Z;",";K2(I)+Z,K3(I); : X=K1(I) : Y=K2(I) : GOSUB 2210 : PRINT TAB(30);X2;TAB(40);Y2
2040 NEXT
2050 C9=Z : GOTO 1970
2060 REM DIRECTION/DISTANCE CALCULATOR
2070 INPUT "Quadrant, Sector or Other (Q/S/O) ";A$
2080 IF LEFT$(A$,Z)="Q" THEN 2120
2090 IF LEFT$(A$,Z)="S" THEN 2140
2100 IF LEFT$(A$,Z)="O" THEN 2160
2110 GOTO 2070
2120 X1=Q1 : Y1=Q2 : PRINT "YOU ARE IN QUADRANT";Q1+Z;",";Q2+Z
2130 INPUT "DESTINATION CO-ORDINATES (Row,Column) ";X,Y : X=X-Z : Y=Y-Z : GOTO 2190
2140 X1=S1 : Y1=S2 : PRINT "YOU ARE IN SECTOR"; S1+Z;",";S2+Z
2150 INPUT "DESTINATION/TARGET CO-ORDINATES (Row,Column) ";X,Y : X=X-Z : Y=Y-Z : GOTO 2190
2160 PRINT "YOU ARE IN QUADRANT";Q1+Z;",";Q2+Z,"SECTOR ";S1+Z;","S2+Z
2170 PRINT : INPUT "INITIAL CO-ORDINATES (Row,Column) ";X1,Y1
2180 INPUT "DESTINATION CO-ORDINATES (Row,Column) ";X,Y
2190 PRINT : GOSUB 2210 : PRINT "DISTANCE=";X2, "BEARING=",Y2
2200 RETURN
2210 REM DIRECTION/DISTANCE SUBROUTINE
2220 IF X=X1 AND Y=Y1 THEN X2=0 : Y2=10 : GOTO 2350
2230 X2=SQR((X1-X)^2+(Y1-Y)^2)
2240 X=X-X1 : Y=Y-Y1 : IF X=<0 THEN 2260
2250 IF Y<0 THEN 2280 ELSE 2320
2260 IF Y=<0 THEN 2310
2270 Y2=Z : IF X=0 THEN 2350 ELSE 2290
2280 Y2=5 : IF X=0 THEN 2350
2290 IF ABS(X)>ABS(Y) THEN Y2=Y2+Z+(Z-(ABS(Y)/ABS(X))) : GOTO 2350
2300 Y2=Y2+(ABS(X)/ABS(Y)) : GOTO 2350
2310 Y2=3 : IF Y=0 THEN 2350 ELSE 2330
2320 Y2=7 : IF Y=0 THEN 2350
2330 IF ABS(X) 2340 Y2=Y2+(ABS(Y)/ABS(X))
2350 RETURN
2360 IF D(1)>0 THEN PRINT D$(1);"are not working" : GOTO 2470
2370 IF S9=Z THEN 2410 : REM SECTOR/SYSTEM SCAN
2380 FOR I=0 TO 7 : FOR J=0 TO 7 : S8(I,J)=0 : IF S(I,J)<>2 OR RND(Z)>.05 THEN 2400
2390 IF RND(Z)<.5 THEN S8(I,J)=99 ELSE S8(I,J)=INT(RND(Z)*8)
2400 NEXT J : NEXT I : S9=Z
2410 PRINT : PRINT "SECTOR","SENSOR READING" : PRINT : FOR I=0 TO 7 : FOR J=0 TO 7
2420 IF S(I,J)<>2 THEN 2460
2430 PRINT I+Z;",";J+Z, : IF S8(I,J)=0 THEN PRINT "No significant data" : GOTO 2460
2440 IF S8(I,J)=99 THEN PRINT "Dilithium Crystal deposits" : GOTO 2460
2450 PRINT "Class M Planet, Culture level"; S8(I,J)
2460 NEXT J : NEXT I : PRINT
2470 RETURN
2500 REM VIS VISUAL
2510 LOCATE C6,C7 : N=0 : FOR I=S1-2 TO S1+2 : LOCATE C6+N,C7 : N=N+Z : FOR J=S2-2 TO S2+2
2520 IF I<0 OR I>7 OR J<0 OR J>7 THEN PRINT "$"; : GOTO 2540
2530 PRINT MID$(S$,S(I,J),Z);
2540 PRINT " "; : NEXT : PRINT : NEXT : C9=Z : RETURN
2600 REM RES RESIGN
2610 IF K>0 THEN PRINT : PRINT "YOUR SURRENDER WILL NOT BE ACCEPTED " : GOTO 2650
2620 INPUT "ARE YOU SURE (Yes/No) ";A$ : IF LEN(A$)=0 THEN 2620
2630 IF LEFT$(A$,Z)="N" THEN 2650
2640 IF LEFT$(A$,Z)="Y" THEN F9=Z
2650 RETURN
2700 REM SHE SHIELDS
2710 IF C$="DOCKED" THEN PRINT "Regulations forbid raising the shields when docked" : GOTO 2770
2720 IF D(I)>0 THEN PRINT D$(I)+"DAMAGED" : GOTO 2770
2730 PRINT D$(I);"currently at";E1;"Units"
2740 INPUT "How much energy to divert to the shields Sir ";N
2750 IF N>E THEN PRINT "WE DON'T HAVE THAT MUCH SIR" : GOTO 2740
2760 E1=N
2770 RETURN
2800 REM DAM DAMAGE CONTROL
2810 GOSUB 70 : D8=0
2820 FOR I=0 TO C1-C2 : IF D(I)>0 THEN D8=D8+Z
2830 NEXT: PRINT : IF D8=0 THEN PRINT : PRINT "ALL SYSTEMS A-OK !": GOTO 2910
2840 PRINT "SYSTEM";TAB(28);"ETR" : PRINT
2850 FOR I=0 TO C1-C2 : IF D(I)>0 THEN PRINT D$(I);TAB(28);INT(D(I)+Z)
2860 NEXT : IF K>0 THEN 2910
2870 PRINT :INPUT "HOW MANY DAYS TO SPEND ON REPAIRS SIR ";D8 : IF D8<0 THEN D8=0
2880 FOR I=0 TO C1-C2 : IF D(I)=0 THEN 2900
2890 D(I)=D(I)-D8 : IF D(I)=<0 THEN D(I)=0 : PRINT D$(I); "REPAIRED"
2900 NEXT : T=T-D8
2910 RETURN
3000 REM-MAIN LOOP
3010 CLS
3020 IF C9=0 THEN I=Z : IF D(Z)=0 THEN GOSUB 400 ELSE I=11 : GOSUB 2500
3025 IF D(Z)=0 THEN GOSUB 400 ELSE I=11 : GOSUB 2500
3030 GOSUB 300 : GOSUB 200 : GOSUB 2500
3040 LOCATE 24,1
3050 INPUT "COMMAND ";A$ : IF LEN(A$)<3 THEN PRINT "BEG PARDON CAPTAIN (3 letters please) " : GOTO 3050
3060 FOR I=0 TO LEN(C1$)/3-Z : IF A$=MID$(C1$,(I*3)+Z,3) THEN 3080
3070 NEXT : FOR I=0 TO C1 : PRINT MID$(C1$,(I*3)+Z,3); TAB(8);D$(I) : NEXT : C9=99 : GOTO 3000
3080 C9=I : ON I+Z GOSUB 1300,400,300,800,1000,1900,2700,4300,3600,3800,2800,2500,2600,5000,5500,200,1980,2360
3090 IF F9>0 THEN 9000 ELSE PRINT : IF C9=Z THEN 3110
3100 IF K>0 THEN GOSUB 700 : GOSUB 600
3110 IF F9>0 THEN 9000
3140 GOTO 3000
3200 REM SUBROUTINE TO SET UP QUADRANT
3210 FOR I=0 TO 7 : FOR J=0 TO 7 : S(I,J)=Z : NEXT J : NEXT I : S9=0
3220 IF Q1<0 OR Q1>7 OR Q2<0 OR Q2>7 THEN K=0 : B=0 : S=INT(RND(Z)*1.2) : GOTO 3250
3230 N=ABS(Q(Q1,Q2)) : K=INT(N/100) : N=N-K*100 : B=INT(N/10)
3240 S=ABS(Q(Q1,Q2))-(K*100+B*10)
3250 GOSUB 50 : S1=X : S2=Y : S(X,Y)=3 : IF B=0 THEN 3270
3260 GOSUB 50 : IF S(X,Y)<>Z THEN 3260 ELSE S(X,Y)=5
3270 FOR I=1 TO S : GOSUB 50 : IF S(X,Y)<>Z THEN 3290 ELSE S(X,Y)=2
3290 NEXT : FOR I=0 TO 7 : K3(I)=0 : NEXT : IF K=0 THEN 3340
3300 FOR I=1 TO K
3310 GOSUB 50 : IF S(X,Y)<>Z THEN 3310 ELSE S(X,Y)=4
3320 K1(I)=X : K2(I)=Y : K3(I)=RND(Z)*1000 : NEXT : PRINT : FOR I=Z TO 3 : PRINT "RED ALERT "; : NEXT
3330 PRINT CHR$(7) : IF E1=0 THEN PRINT "YOU FORGOT TO RAISE YOUR SHIELDS"
3340 RETURN
3400 REM SUBROUTINE TO SET UP CONDITION
3410 FOR I=S1-Z TO S1+Z : FOR J=S2-Z TO S2+Z
3420 IF I<0 OR I>7 OR J<0 OR J>7 THEN 3440
3430 IF S(I,J)=5 THEN 3450
3440 NEXT J : NEXT I : GOTO 3490
3450 IF C$="DOCKED" THEN GOSUB 90 : GOSUB 3550 : GOTO 3540
3460 IF K>0 AND RND(Z)<.5 THEN 3490
3470 PRINT : PRINT D$(6);"LOWERED FOR DOCKING" : GOSUB 3550 : PRINT : PRINT "REPAIRS and REFUELLING completed"
3480 GOSUB 90 : T=T-.5 : C$="DOCKED": GOTO 3540
3490 IF K>0 THEN C$="RED" : GOTO 3540
3500 FOR I=0 TO C1-C2 : IF D(I)>0 THEN C$="YELLOW" : GOTO 3540
3510 NEXT : IF E= 3540 RETURN
3550 REM SUBROUTINE TO REPAIR ALL SUB-SYSTEMS
3560 FOR I=0 TO C1-C2 : D(I)=0 : NEXT : RETURN
3600 REM TRANSPORTER
3610 IF D(I)>0 THEN PRINT D$(I);"INOPERATIVE AT THIS TIME" : GOTO 3730
3620 IF D(1)>0 THEN PRINT D$(1);"INOPERATIVE, CANNOT LOCK IN ANY CO-ORDINATES" : GOTO 3730
3630 IF S9=0 THEN PRINT "Quadrant is not scanned" : GOTO 3730
3640 IF E1>0 THEN PRINT "SHIELDS are up. Transporter will not beam through" : GOTO 3730
3650 IF K>0 THEN PRINT "KLINGONS will block the Transporter" : GOTO 3730
3660 INPUT "Destination co-ordinates ";X,Y : IF X<1 OR X>8 OR Y<1 OR Y>8 THEN 3660
3670 X=X-Z : Y=Y-Z : IF S8(X,Y)=0 THEN PRINT "THERE IS NOTHING AT THOSE CO-ORDINATES" : GOTO 3730
3680 H=SQR((S1-X)^2+(S2-Y)^2)*10 : IF (E-H)<0 THEN PRINT "We don't have the energy to beam them that far" : GOTO 3730
3690 E=E-H : IF E 3700 IF S8(X,Y)=99 THEN GOSUB 4000 ELSE GOSUB 4100
3710 E=E-H : IF E 3720 PRINT : PRINT "Landing Party beamed aboard"
3730 RETURN
3800 REM SHUTTLECRAFT
3810 IF D(I)>0 THEN PRINT D$(I);"INOPERATIVE AT THIS TIME" : GOTO 3920
3820 IF D(1)>0 THEN PRINT D$(1); "INOPERATIVE, CANNOT LOCATE ANY CO-ORDINATES" : GOTO 3920
3830 IF S9=0 THEN PRINT "Quadrant is not scanned" : GOTO 3920
3840 IF E1>0 THEN PRINT "SHIELDS are up. Shuttlecraft will not pass through" : GOTO 3920
3850 IF K>0 THEN PRINT "KLINGONS will destroy the Shuttlecraft" : GOTO 3920
3860 INPUT "Destination co-ordinates ";X,Y : IF X<1 OR X>8 OR Y<1 OR Y>8 THEN 3860
3870 X=X-Z : Y=Y-Z : IF S8(X,Y)=0 THEN PRINT "THERE IS NOTHING AT THOSE CO-ORDINATES" : GOTO 3920
3880 X1=(SQR((S1-X)^2+(S2-Y)^2))/10 : IF (T-X1*2)<0 THEN PRINT "We don't have that much time left": GOTO 3920
3890 T1=T : T=T-X1 : GOSUB 1800 : PRINT "Shuttlecraft Gallileo launched" : PRINT
3900 IF S8(X,Y)=99 THEN GOSUB 4000 ELSE GOSUB 4100
3910 T1=T : T=T-X1 : GOSUB 1800 : PRINT "Shuttlecraft Gallileo returned"
3920 RETURN
4000 REM MINING OPERATION
4010 PRINT : J=RND(Z)*E0 : PRINT "LANDING PARTY reports that cystals can be mined"
4020 PRINT "to supply us with";J;"Units per day down here"
4030 PRINT : INPUT "How many days do they stay down ";N : IF N<0 THEN N=0
4040 IF (T-N)<0 THEN PRINT "YOU DON'T HAVE THAT MUCH TIME" : GOTO 4060
4050 T1=T : T=T-N : E=E+N*J : GOSUB 1800
4060 RETURN
4100 REM SPARES/ETC
4110 J=RND(Z)*S8(X,Y) : PRINT "LANDING PARTY reports that they can locate"
4120 PRINT "materials to expedite repairs in";J;"Stardates"
4130 INPUT "How long should they stay there ";X : IF X>J THEN X=J
4140 IF (T-X)<0 THEN PRINT "YOU DON'T HAVE THAT MUCH TIME" : GOTO 4210
4150 IF J=X THEN J=E0
4160 J=X/J : T=T-X : N=0 : FOR I=0 TO C1-C2 : IF D(I)=<0 THEN 4200
4170 D(I)=D(I)*J : D(I)=D(I)-(T1-T) : IF D(I)>0 THEN 4200
4180 IF N=0 THEN PRINT : PRINT "DAMAGE CONTROL REPORTING " : N=Z
4190 D(I)=0 : PRINT D$(I);"REPAIRED"
4200 NEXT
4210 RETURN
4300 REM LONG RANGE PROBE
4310 IF D(I)>0 THEN PRINT "LAUNCH CONTROL INOPERATIVE AT THIS TIME" : GOTO 4470
4320 L3=L3+Z : IF L3>7 THEN PRINT " No Probes left... Sir " : GOTO 4470
4330 IF K>0 THEN PRINT "You are not allowed to launch a probe during a battle" : GOTO 4470
4340 PRINT "LRP";L3;"Direction (1-9) "; : INPUT C : IF C=0 THEN 4470
4350 IF C9 THEN 4340
4360 X1=Q1 : Y1=Q2 : X2=Q1+.5 : Y2=Q2+.5 : T1=T : FOR I=0 TO E0 : T=T-.1
4370 Y=(C-Z)*.785398 : X=COS(Y) : Y=-SIN(Y)
4380 X2=X2+Y : Y2=Y2+X : X1=INT(X2) : Y1=INT(Y2)
4390 IF SQR((X1-Q1)^2+(Y1-Q2)^2)>5 THEN PRINT "Probe out of range" : GOTO 4460
4400 PRINT X1+Z;",";Y1+Z;" =";
4410 IF X1<0 OR X1>7 OR Y1<0 OR Y1>7 THEN PRINT "***" : GOTO 4450
4420 E$=STR$(Q(X1,Y1)) : E$="00"+MID$(E$,2) : PRINT RIGHT$(E$,3)
4430 IF D(5)=0 THEN Q(X1,Y1)=ABS(Q(X1,Y1))
4440 IF RND(Z) 4450 NEXT
4460 GOSUB 1800
4470 RETURN
4500 REM INITIALISATION SEQUENCE
4510 Z=1 : S$=".*EKB+" : E0=4000 : C1=14 : C2=5
4520 DIM D(C1),D$(C1),Q(7,7),S(7,7),K1(7),K2(7),K3(7),S8(7,7)
4530 PRINT "Welcome to the Starfleet Academy Command Training"
4540 PRINT "Simulator. You are assigned the role of the captain"
4550 PRINT "of the Starship Enterprise."
4560 PRINT : PRINT "For assistance, type HELP or read the manual"
4570 D$(0)="WARP ENGINES " : D$(1)="SHORT RANGE SENSORS " : D$(2)="LONG RANGE SENSORS " : D$(3)="PHASERS "
4580 D$(4)="PHOTON TORPEDOES " : D$(5)="COMPUTER " : D$(6)="SHIELDS " : D$(7)="LONG RANGE PROBES "
4590 D$(8)="TRANSPORTER " :D$(9)="SHUTTLECRAFT " :D$(10)="DAMAGE CONTROL " :D$(11)="VISUAL " :D$(12)="RESIGN"
4600 D$(13)="SAVE THE STATE OF THE GAME" : D$(14)="LOAD A SAVED GAME"
4610 C1$="NAVSRSLRSPHATORCOMSHELRPTRASHUDAMVISRESSAVLSGMAPKSTSCA" : C2$="MAPSTAKSTDIRSCA"
4620 C3$(0)="MAP" : C3$(1)="STAtus (Score)" : C3$(2)="KLINGON STatus"
4630 C3$(3)="DIRECTION/DISTANCE calculator" : C3$(4)="Sector/System SCAn"
4650 RETURN
4660 C9=0 : K4=0 : K5=0 : F9=0 : G9=0 : K9=0 : B9=0 : L3=0 : GOSUB 3550
4670 FOR I=0 TO 7 : FOR J=0 TO 7 : GOSUB 4790 : Q(I,J)=-(K+B+S) : NEXT J : NEXT I
4710 IF K9>2000 THEN 4740
4720 GOSUB 50 : IF Q(X,Y)<-9 THEN 4720
4730 GOSUB 4790 : Q(X,Y)=-(K+B+S) : GOTO 4710
4740 IF K9/100<30 THEN T=30 ELSE T=K9/100
4750 T9=T+Z : IF B9=0 THEN GOSUB 50 : Q(X,Y)=Q(X,Y)-10 : B9=10
4760 GOSUB 50 : Q1=X : Q2=Y : GOSUB 3200 : GOSUB 90 : E1=E0/10 : GOSUB 3400 : RETURN
4790 S=INT(RND(Z)*7+Z)
4800 B=0 : IF RND(Z)<.02 THEN B=10 : B9=B9+B
4810 K=0 : IF RND(Z)>.06 THEN 4830
4820 K=INT(RND(Z)*8)*100 : K9=K9+K : K8=K9
4830 RETURN
5000 REM SAVE GAME
5010 PRINT : INPUT "What filename do you want to save the game in ";A$ : IF LEN(A$)=0 THEN 5010
5020 IF LEN(A$)>8 THEN A$=LEFT$(A$,8)
5030 A$=A$ +".TRK"
5040 OPEN "O",#1,A$
5050 WRITE#1,"G3ZCZ"
5100 FOR I=0 TO 7 : FOR J=0 TO 7 : WRITE#1, S(I,J),S8(I,J),Q(I,J) : NEXT J : NEXT I
5130 WRITE#1,E,E1,B,B9,K,K4,K5,K8,K9,Q1,Q2,S,S1,S2,T,T9,X,Y,W,H,N,C$,P,F9,C,G9,S9,C9,D8,L3,X1,X2,Y1,Y2
5160 FOR I=0 TO 7 : WRITE#1, K1(I),K2(I),K3(I) : NEXT
5180 FOR I=0 TO C1-C2 : WRITE#1, D(I) : NEXT
5200 CLOSE#1 : RETURN
5500 REM RESTORE A SAVED GAME
5510 PRINT : INPUT "What is the name of the file you saved the game on ";A$ : IF LEN(A$)=0 THEN 5510
5520 IF LEN(A$)>8 THEN A$=LEFT$(A$,8)
5530 A$=A$ +".TRK"
5540 OPEN "I",#1,A$
5560 INPUT#1, E$ : IF E$<>"G3ZCZ" THEN PRINT "WRONG DATA FILE " GOTO 5700
5600 FOR I=0 TO 7 : FOR J=0 TO 7 : INPUT#1, S(I,J),S8(I,J),Q(I,J) : NEXT J : NEXT I
5630 INPUT#1,E,E1,B,B9,K,K4,K5,K8,K9,Q1,Q2,S,S1,S2,T,T9,X,Y,W,H,N,C$,P,F9,C,G9,S9,C9,D8,L3,X1,X2,Y1,Y2
5660 FOR I=0 TO 7 : INPUT#1, K1(I),K2(I),K3(I) : NEXT
5680 FOR I=0 TO C1-C2 : INPUT#1, D(I) : NEXT
5700 CLOSE#1 : RETURN
6000 REM ERROR TRAPPING ROUTINES
6010 ON ERROR GOTO 6000
6020 IF ERR=58 THEN 6150
6030 IF ERR=61 THEN 6200
6040 IF ERR=62 THEN 6250
6050 IF ERR=67 THEN 6300
6060 IF ERR=53 THEN 6100
6070 PRINT "ERROR ";ERR;" AT LINE ";ERL
6090 GOTO 9230
6100 PRINT A$; " IS NOT ON THE DISK" : RESUME 5500
6150 PRINT "THAT FILE ALREADY EXISTS"
6160 INPUT "Do you wish to overwrite it (Y or N) ";E$ : IF LEN(E$)=0 THEN 6160
6170 IF LEFT$(E$,1)="Y" THEN RESUME 5040
6180 IF LEFT$(E$,1)="N" THEN RESUME 5000 ELSE 6160
6200 PRINT "DISK IS FULL"
6210 PRINT "I CAN'T SAVE ANYTHING ON THAT DISK" : RESUME 5000
6250 PRINT A$;" DOES NOT CONTAIN THE CORRECT FORM OF DATA" : CLOSE#1 : RESUME 5500
6300 PRINT "THERE ARE TOO MANY FILES ON THE DISK" : GOTO 6210
9000 REM ENDGAME
9010 PRINT : ON F9 GOTO 9020,9040,9080,9130,9160
9020 REM F9=1 RESIGNATION ENDING
9030 GOTO 9180
9040 REM F9=2 CREAMED BY KLINGON
9050 PRINT "THE ENTERPRISE HAS BEEN DESTROYED "
9060 PRINT "You did not make such a good Captain, did you ? "
9070 GOTO 9180
9080 REM F9=3 RAN OUT OF ENERGY
9090 PRINT "The Enterprise has run out of energy." : PRINT
9100 PRINT "You have just condemed yourself and your crew to"
9110 PRINT "a horrible and un-necessary death."
9120 GOTO 9180
9130 REM F9=4 RAN OUT OF TIME
9140 PRINT "You did not complete your mission in time"
9150 GOTO 9180
9160 REM F9=5 PLAYER WON
9170 PRINT "CONGRATULATIONS you passed your test"
9180 PRINT : GOSUB 170 : INPUT "Do you want to play again (Yes/No) "; A$ : IF LEN(A$)=0 THEN 9180
9190 IF LEFT$(A$,Z)="N" THEN 9230
9200 IF LEFT$(A$,Z)<>"Y" THEN 9180
9210 REM START NEW GAME
9220 PRINT CHR$(26): PRINT : PRINT "WAIT FOR IT" : GOSUB 4660 : GOTO 30
9230 END


  3 Responses to “Category : Science and Education
Archive   : BOOKTREK.ZIP
Filename : REALTIME.BAS

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/