home *** CD-ROM | disk | FTP | other *** search
- 10 PRINT CHR$(26) : PRINT " STARTREK VERSION 85-05-05" : ON ERROR GOTO 6000
- 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 : IF D(I)>0 THEN PRINT "COMPUTER DOWN AT THIS TIME " : GOTO 280
- 220 GOSUB 70 : FOR I=0 TO 7 : PRINT TAB((Z+I)*5);I+Z; : NEXT : PRINT : FOR I=0 TO 7 : 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$(8);"+";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 IF D(I)>0 THEN PRINT D$(I); " DAMAGED" : GOTO 370
- 320 GOSUB 70 : FOR I=Q1-Z TO Q1+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 70 : GOSUB 3400 : PRINT " 1 2 3 4 5 6 7 8";TAB(20); : GOSUB 170 : FOR I=0 TO 7 : 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 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) : PRINT "TRACK"
- 1050 P=P-Z : FOR J=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 PRINT Y2+Z;",";X2+Z : 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 J
- 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)<ABS(Y) THEN Y2=Y2+Z+(Z-(ABS(X)/ABS(Y))) : GOTO 2350
- 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 GOSUB 70 : FOR I=S1-2 TO S1+2 : 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
- 3020 IF C9=0 THEN I=Z : IF D(Z)=0 THEN GOSUB 400 ELSE I=11 : GOSUB 2500
- 3040 PRINT
- 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=<E0/10 THEN C$="YELLOW" ELSE C$="GREEN"
- 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<E1 THEN E1=E
- 3700 IF S8(X,Y)=99 THEN GOSUB 4000 ELSE GOSUB 4100
- 3710 E=E-H : IF E<E1 THEN E1=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 C<Z OR C>9 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)<ABS(Q(X1,Y1)+Z)/1000 THEN PRINT "Contact lost with probe" : GOTO 4460
- 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
- 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