Compucolor.org – Virtual Media

Listing of file='TREK.BAS;01' on disk='vmedia/ncc_22-sector.ccvf'

70 REM  RON CAPPADONA PRODUCTIONS 1980.
72 REM  820 MANGO AVE. SUNNYVALE , CA. 94087   (408) 733-2382
73 REM  NOT FOR SALE . FOR FUN -- NOT PROFIT.
74 REM  ILLEGAL TO USE AND/OR SELL FOR PROFIT !!!!!
75 REM  ADAPTED FROM AHL'S BASIC COMPUTER GAMES , CREATIVE COMPUTING
80 REM   AHL'S BASIC COMPUTER GAMES THIRD PRINTING FEBRUARY 1979.
85 REM  DEBUGGING ASSISTANCE FROM RICHARD VAN DIJK. THANKS DICK !!!
87 REM  ADAPTATION BY RON "CAPPY" CAPPADONA 1980.
90 PLOT 12: REM  BEGIN ACTUAL GAME  "SUPER STAR TREK"
100 PRINT :PRINT :PRINT :PRINT :PRINT TAB( 22)"WELCOME ABOARD CAPTAIN."
101 PRINT :PRINT :PRINT :PRINT TAB( 8)"PLEASE STANDBY;  STARFLEET COMMAND IS TRANSMITTING "
105 PRINT :PRINT TAB( 8)"YOUR ORDERS IN CODE AND THE COMPUTER IS DECIPHERING"
106 PRINT :PRINT TAB( 8)"THEM NOW.":PRINT :PRINT :PRINT :PRINT
260 CLEAR 800
270 Z$= "                    "
330 DIM G(8,8),C(9,2),K(3,3),N(3),Z(8,8),D(8)
370 T= INT (RND (1)* 20+ 20)* 100:T0= T:T9= 25+ INT (RND (1)* 10):D0= 0:E= 3000:E0= E
440 P= 10:P0= P:S9= 200:S= 0:B9= 0:K9= 0:X$= "":X0$= " IS "
470 DEF FN D(D)= SQR ((K(I,1)- S1)^ 2+ (K(I,2)- S2)^ 2)
475 DEF FN R(R)= INT (RND (R)* 7.98+ 1.01)
480 REM " INITIALIZE ENTERPRISE POSITION"
490 Q1= FN R(1):Q2= FN R(1):S1= FN R(1):S2= FN R(1)
530 FOR I= 1TO 9:C(I,1)= 0:C(I,2)= 0:NEXT I
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
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
670 FOR I= 1TO 8:D(I)= 0:NEXT I
710 A1$= "NAVSRSLRSPHATORSHEDAMCOMXXX"
810 REM  "SET-UP WHAT EXISTS IN THE GALAXY"
815 REM  K3="# KLINGONS  B3="# STARBASES  S3="# STARS
820 FOR I= 1TO 8:FOR J= 1TO 8:K3= 0:Z(I,J)= 0:R1= RND (1)
850 IF R1> .98THEN K3= 3:K9= K9+ 3:GOTO 980
860 IF R1> .95THEN K3= 2:K9= K9+ 2:GOTO 980
870 IF R1> .80THEN K3= 1:K9= K9+ 1
980 B3= 0:IF RND (1)> .96THEN B3= 1:B9= B9+ 1
1040 G(I,J)= K3* 100+ B3* 10+ FN R(1):NEXT J:NEXT I:IF K9> T9THEN T9= K9+ 1
1100 IF B9< > 0THEN 1200
1150 IF G(Q1,Q2)< 200THEN G(Q1,Q2)= G(Q1,Q2)+ 100:K9= K9+ 1
1160 B9= 1:G(Q1,Q2)= G(Q1,Q2)+ 10:Q1= FN R(1):Q2= FN R(1)
1200 K7= K9:IF B9< > 1THEN X$= "S":X0$= " ARE "
1230 PLOT 12:PRINT :PRINT :PRINT "  YOUR ORDERS ARE AS FOLLOWS:"
1240 PRINT :PRINT "       SEARCH OUT & DESTROY THE ";K9;" KLINGON BATTLE CRUISERS "
1245 PRINT "       WHICH HAVE INVADED THE GALAXY BEFORE THEY CAN ATTACK""
1250 PRINT "       FEDERATION HEADQUARTERS ON STARDATE";T0+ T9;". THIS GIVES"
1260 PRINT "       YOU";T9;" STARDATES. THERE";X0$;"A TOTAL OF ";B9;" STARBASE";X$;"
1270 PRINT "       IN THE GALAXY FOR REPAIRING, REFUELING & RESUPPLYING"
1275 PRINT "       YOUR STARSHIP.":PRINT :PRINT
1300 I= RND (1):IF INP (1)= 13THEN 1300
1310 REM "  HERE: ENTERING A NEW QUADRANT"
1320 Z4= Q1:Z5= Q2:K3= 0:B3= 0:S3= 0:G5= 0:D4= .5* RND (1):Z(Q1,Q2)= G(Q1,Q2)
1390 IF Q1< 1OR Q1> 8OR Q2< 1OR Q2> 8THEN 1600
1430 GOSUB 9030:PRINT :IF T0< > TTHEN 1490
1460 PRINT SPC( 6)"YOUR MISSION BEGINS WITH YOUR STARSHIP LOCATED"
1470 PRINT :PRINT SPC( 6)"IN THE GALATIC QUADRANT, ";G2$;" .":GOTO 1500
1490 PRINT "NOW ENTERING ";G2$;" QUADRANT. . ."
1500 PRINT :PRINT :PRINT :K3= INT (G(Q1,Q2)* .01):B3= INT (G(Q1,Q2)* .1)- 10* K3
1540 S3= G(Q1,Q2)- 100* K3- 10* B3:IF K3= 0THEN 1590
1560 PRINT :PRINT "COMBAT AREA - - CONDITION RED  ":PRINT :IF S> 200THEN 1590
1580 PRINT :PRINT "   SHIELDS DANGEROUSLY LOW !!! ":PRINT
1590 FOR I= 1TO 3:K(I,1)= 0:K(I,2)= 0:NEXT I
1600 FOR I= 1TO 3:K(I,3)= 0:NEXT I:Q$= Z$+ Z$+ Z$+ Z$+ Z$+ Z$+ Z$+ LEFT$ (Z$,17)
1660 REM  "POSITION ENTERPRISE IN QUADRANT.PLACE KLINGONS, STARBASES, STARS.
1680 A$= "(=<":Z1= S1:Z2= S2:GOSUB 8670:IF K3< 1THEN 1820
1720 FOR I= 1TO K3:GOSUB 8590:A$= "-+<":Z1= R1:Z2= R2
1780 GOSUB 8670:K(I,1)= R1:K(I,2)= R2:K(I,3)= S9* (0.5+ RND (1)):NEXT I
1820 IF B3< 1THEN 1910
1880 GOSUB 8590:A$= "[*]":Z1= R1:B4= R1:Z2= R2:B5= R2:GOSUB 8670
1910 FOR I= 1TO S3:GOSUB 8590:A$= " * ":Z1= R1:Z2= R2:GOSUB 8670:NEXT I
1980 GOSUB 6430
1990 IF S+ E> 10THEN IF E> 10OR D(7)= 0THEN 2060
2020 PRINT :PLOT 12:PLOT 3,20,4:PRINT "* * FATAL ERROR * * ":PRINT
2025 PRINT :PRINT SPC( 4)"YOU HAVE JUST STRANDED YOUR SHIP IN SPACE."
2030 PRINT :PRINT SPC( 4)"YOU HAVE INSUFFICIENT MANEUVERING ENERGY; AND YOUR"
2040 PRINT SPC( 4)"SHIELD CONTROL IS PRESENTLY INCAPABLE OF CROSS-CIRCUITING"
2050 PRINT SPC( 4)"TO THE ENGINE ROOM !!!":GOTO 6220
2060 PRINT :INPUT " COMMAND ?   ";A$:PLOT 12
2080 FOR I= 1TO 9:IF LEFT$ (A$,3)< > MID$ (A1$,3* I- 2,3)THEN 2160
2140 ON IGOTO 2300,1980,4000,4260,4700,5530,5690,7290,6270
2160 NEXT I:PRINT "ENTER ONE OF THE FOLLOWING:":PRINT :PRINT
2180 PRINT SPC( 6)"NAV    ( TO SET COURSE )":PRINT
2190 PRINT SPC( 6)"SRS    ( FOR SHORT RANGE SENSOR SCAN )":PRINT
2200 PRINT SPC( 6)"LRS    ( FOR LONG RANGE SENSOR SCAN )":PRINT
2210 PRINT SPC( 6)"PHA    ( TO FIRE PHASERS )":PRINT
2220 PRINT SPC( 6)"TOR    ( TO FIRE PHOTON TORPEDOES )":PRINT
2230 PRINT SPC( 6)"SHE    ( TO DIVERT ENERGY TO OR FROM SHIELDS )":PRINT
2240 PRINT SPC( 6)"DAM    ( FOR DAMAGE CONTROL REPORTS )":PRINT
2250 PRINT SPC( 6)"COM    ( TO CALL ON LIBRARY - COMPUTER )":PRINT
2260 PRINT SPC( 6)"XXX    ( TO RESIGN YOUR COMMAND )":PRINT :GOTO 1990
2290 REM  "COURSE CONTROL BEGINS HERE"
2300 PRINT :PRINT :INPUT " COURSE  ( 1-9 ) ?    ";C1:PRINT :PRINT :PRINT :IF C1= 9THEN C1= 1
2310 IF C1> = 1AND C1< 9THEN 2350
2330 PRINT :PRINT "LT. SULU REPORTS, 'INCORRECT COURSE DATA', SIR !":PRINT :GOTO 1990
2350 X$= "8":IF D(1)< 0THEN X$= "0.2"
2360 PRINT "WARP FACTOR ( 0 - ";X$;" ) ?  ";:INPUT " ";W1:PRINT :PRINT :IF D(1)< 0AND W1> .2THEN 2470
2380 IF W1> 0AND W1< = 8THEN 2490
2390 IF W1= 0THEN 1990
2420 PRINT :PRINT "CHIEF ENGINEER SCOTT REPORTS:":PRINT
2421 PRINT "' THE WARP DRIVES WON'T TAKE WARP FACTOR ";W1;" !!!! '":PRINT :GOTO 1990
2470 PRINT "WARP ENGINES DAMAGED.   MAXIMUM SPEED = WARP .2":GOTO 1990
2490 N= INT (W1* 8+ .5):IF E- N> = 0THEN 2590
2500 PRINT SPC( 2)"ENGINEERING REPORTS :INSUFFICIENT ENERGY AVAILABLE FOR"
2510 PRINT :PRINT SPC( 23)"MANEUVERING AT WARP ";W1;" !!!":PRINT :PRINT :PRINT
2530 IF S< N- EOR D(7)< 0THEN 1990
2550 PRINT :PRINT "  DEFLECTOR CONTROL ROOM ACKNOWLEDGES ";S;" UNITS OF ENERGY"
2560 PRINT :PRINT "  PRESENTLY DEPLOYED TO THE SHIELDS.":PRINT :PRINT :PRINT
2570 GOTO 1990
2580 REM " KLINGONS MOVE/FIRE ON MOVING ENTERPRISE.
2590 FOR I= 1TO K3:IF K(I,3)= 0THEN 2700
2610 A$= "   ":Z1= K(I,1):Z2= K(I,2):GOSUB 8670:GOSUB 8590
2660 K(I,1)= Z1:K(I,2)= Z2:A$= "-+<":GOSUB 8670
2700 NEXT I:GOSUB 6000:D1= 0:D6= W1:IF W1> = 1THEN D6= 1
2770 FOR I= 1TO 8:IF D(I)> = 0THEN 2880
2790 D(I)= D(I)+ D6:IF D(I)> - .1AND D(I)< 0THEN D(I)= - .1:GOTO 2880
2800 IF D(I)< 0THEN 2880
2810 IF D1< > 1THEN D1= 1:PRINT SPC( 4)"DAMAGE CONTROL REPORT:  ";
2840 PRINT :PRINT TAB( 8);:R1= I:GOSUB 8790:PRINT :PRINT G2$;" REPAIR COMPLETED.":PRINT
2880 NEXT I:IF RND (1)> .2THEN 3070
2910 R1= FN R(1):IF RND (1)> = .6THEN 3000
2930 D(R1)= D(R1)- (RND (1)* 5+ 1):PRINT SPC( 4)"DAMAGE CONTROL REPORT:  ";
2960 GOSUB 8790:PRINT G2$;" DAMAGED":PRINT :GOTO 3070
3000 D(R1)= D(R1)+ RND (1)* 3+ 1:PRINT :PRINT SPC( 4)"DAMAGE CONTROL REPORT:  ":PRINT
3030 GOSUB 8790:PRINT :PRINT G2$;" STATE OF REPAIR ( IMPROVED ) ":PRINT
3060 REM  "BEGIN MOVING ENTERPRISE"
3070 A$= "    ":Z1= INT (S1):Z2= INT (S2):GOSUB 8670
3110 X1= C(C1,1)+ (C(C1+ 1,1)- C(C1,1))* (C1- INT (C1)):X= S1:Y= S2
3140 X2= C(C1,2)+ (C(C1+ 1,2)- C(C1,2))* (C1- INT (C1)):Q4= Q1:Q5= Q2
3170 FOR I= 1TO N:S1= S1+ X1:S2= S2+ X2:IF S1< 1OR S1> = 9OR S2< 1OR S2> = 9THEN 3500
3240 S8= INT (S1)* 24+ INT (S2)* 3- 26:IF MID$ (Q$,S8,2)= "  "THEN 3360
3320 S1= INT (S1- X1):S2= INT (S2- X2):PRINT :PRINT "WARP ENGINES SHUT DOWN AT";
3350 PRINT " SECTOR ";S1;",";S2;" DUE TO BAD NAVIGATION.":PRINT :GOTO 3370
3360 NEXT I:S1= INT (S1):S2= INT (S2)
3370 A$= "(=<":Z1= INT (S1):Z2= INT (S2):GOSUB 8670:GOSUB 3910:T8= 1
3430 IF W1< 1THEN T8= .1* INT (10* W1)
3450 T= T+ T8:IF T> T0+ T9THEN 6620
3470 REM " SEE IF DOCKED ,THEN GET COMMAND"
3480 GOTO 1980
3490 REM  "EXCEEDED QUADRANT LIMITS"
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)
3550 S2= INT (Y- Q2* 8):IF S1= 0THEN Q1= Q1- 1:S1= 8
3590 IF S2= 0THEN Q2= Q2- 1:S2= 8
3620 X5= 0:IF Q1< 1THEN X5= 1:Q1= 1:S1= 1
3670 IF Q1> 8THEN X= 1:Q1= 8:S1= 8
3710 IF Q2< 1THEN X5= 1:Q2= 1:S2= 1
3750 IF Q2> 8THEN X5= 1:Q2= 8:S2= 8
3790 IF X5= 0THEN 3860
3800 PLOT 12:PRINT SPC( 2)"LT. UHURA REPORTS MESSAGE FROM STARFLEET COMMAND:":PRINT
3810 PRINT SPC( 2)"PERMISSION TO ATTEMPT CROSSING OF A GALACTIC PERIMETER IS"
3820 PRINT SPC( 2)"HEREBY *DENIED* SHUT DOWN YOUR ENGINES."
3830 PRINT :PRINT :PRINT SPC( 2)"CHIEF ENGINEER SCOTT REPORTS: WARP ENGINES SHUT DOWN"
3840 PRINT SPC( 2)"AT SECTOR ";S1;",";S2;" OF QUADRANT ";Q1;",";Q2;".":PRINT :PRINT
3850 IF T> T0THEN 6220
3860 IF 8* Q1+ Q2= 8* Q4+ Q5THEN 3370
3870 T= T+ 1:GOSUB 3910:GOTO 1320
3900 REM  "MANEUVER ENERGY S/R **"
3910 E= E- N- 10:IF E> = 0THEN RETURN
3930 PRINT :PRINT SPC( 2)"SHIELD CONTROL SUPPLIES ENERGY TO COMPLETE THE MANEUVER.":PRINT
3940 S= S+ E:E= 0:IF S< = 0THEN S= 0
3980 RETURN
3990 REM  "LONG RANGE SENSOR SCAN CODE"
4000 IF D(3)< 0THEN PLOT 3,6,6:PRINT " LONG RANGE SENSORS ARE INOPERABLE":PRINT :PRINT :PRINT :GOTO 1990
4030 PRINT :PRINT :PRINT "LONG RANGE SCAN FOR QUADRANT";Q1;",";Q2:PRINT :PRINT :PRINT
4040 O1$= "--------------------":PRINT O1$
4060 FOR I= Q1- 1TO Q1+ 1:N(1)= - 1:N(2)= - 2:N(3)= - 3:FOR J= Q2- 1TO Q2+ 1
4120 IF I> 0AND I< 9AND J> 0AND J< 9THEN N(J- Q2+ 2)= G(I,J):Z(I,J)= G(I,J)
4180 NEXT J:FOR L= 1TO 3:PRINT ": ";:IF N(L)< 0THEN PRINT "*** ";:GOTO 4230
4210 PRINT RIGHT$ (STR$ (N(L)+ 1000),3);" ";
4230 NEXT L:PRINT ":":PRINT O1$:NEXT I:GOTO 1990
4250 REM  "PHASER CONTROL CODE BEGINS HERE"
4260 IF D(4)< 0THEN PLOT 3,6,6:PRINT "PHASERS INOPERATIVE":PRINT :PRINT :PRINT :PRINT :GOTO 1990
4265 IF K3> 0THEN 4330
4270 PRINT :PRINT SPC( 2)"SCIENCE OFFICER SPOCK REPORTS: SENSORS SHOW NO ENEMY SHIPS"
4280 PRINT :PRINT SPC( 33)"IN THIS QUADRANT":PRINT :PRINT :PRINT :PRINT :GOTO 1990
4330 IF D(8)< 0THEN PRINT "COMPUTER FAILURE HAMPERS ACCURACY."
4350 PRINT :PRINT :PRINT :PRINT SPC( 4)"PHASERS LOCKED ON TARGET:  ":PRINT
4360 PRINT :PRINT "    ENERGY AVAILABLE=";E;" UNITS ":PRINT
4370 PRINT :PRINT :INPUT "    NUMBER OF UNITS TO FIRE ? ";X:PRINT :IF X< = 0THEN 1990
4400 IF E- X< 0THEN 4360
4410 E= E- X:IF D(7)< 0THEN X= X* RND (1)
4450 H1= INT (X/ K3):FOR I= 1TO 3:IF K(I,3)< = 0THEN 4670
4480 H= INT ((H1/ FN D(0))* (RND (1)+ 2)):IF H> .15* K(I,3)THEN 4530
4500 PRINT :PRINT SPC( 6)"SENSORS SHOW NO DAMAGE TO ENEMY AT ";K(I,1);",";K(I,2):PRINT :PRINT :GOTO 4670
4530 K(I,3)= K(I,3)- H:PRINT :PRINT SPC( 10)H" UNIT HIT ON KLINGON AT SECTOR ";K(I,1)",";K(I,2):PRINT :FOR V= 1TO 150:PLOT 3,1,30
4531 NEXT V
4540 IF K(I,3)< = 0THEN 4541
4541 FOR J= 1TO 10:PLOT 6,8,12,6,0,12,6,16,12,6,0,12:NEXT J
4542 PLOT 3,14,10:PRINT "      ***  KLINGON DESTROYED  ***":PRINT :PRINT :PRINT :GOTO 4580
4551 FOR M= 1TO 10:PLOT 6,8,12,6,0,12,6,14,12,6,0,12
4552 NEXT M
4555 PLOT 3,14,10:PRINT "      ***  KLINGON DESTROYED  ***":PRINT :PRINT :PRINT :GOTO  4580
4560 PRINT " ( SENSORS SHOW ";K(I,3);" UNITS REMAINING )":PRINT :GOTO 4670
4580 K3= K3- 1:K9= K9- 1:Z1= K(I,1):Z2= K(I,2):A$= "   ":GOSUB 8670
4650 K(I,3)= 0:G(Q1,Q2)= G(Q1,Q2)- 100:Z(Q1,Q2)= G(Q1,Q2):IF K9< = 0THEN 6370
4670 NEXT I:GOSUB 6000:GOTO 1990
4690 REM  "PHOTON TORPEDO CODE BEGINS HERE"
4700 IF P< = 0THEN PLOT 3,6,6:PRINT "          ALL PHOTON TORPEDOES EXPENDED":PRINT :PRINT :PRINT :PRINT :GOTO 1990
4730 IF D(5)< 0THEN PLOT 3,6,6:PRINT :PRINT "         PHOTON TORPEDO TUBES ARE NOT OPERATIONAL":PRINT :PRINT :PRINT :GOTO 1990
4760 PRINT :INPUT "    PHOTON TORPEDO COURSE ( 1-9 )  ";C1:IF C1= 9THEN C1= 1
4780 IF C1> = 1AND C1< 9THEN 4850
4790 PRINT :PRINT :PRINT "  ENSIGN CHEKOV REPORTS: INCORRECT COURSE DATA ,SIR !!!":PRINT :PRINT
4800 GOTO 1990
4850 X1= C(C1,1)+ (C(C1+ 1,1)- C(C1,1))* (C1- INT (C1)):E= E- 2:P= P- 1
4860 X2= C(C1,2)+ (C(C1+ 1,2)- C(C1,2))* (C1- INT (C1)):X= S1:Y= S2
4910 PRINT :PRINT :PRINT "    TORPEDO TRACK:":PRINT
4920 X= X+ X1:Y= Y+ X2:X3= INT (X+ .5):Y3= INT (Y+ .5)
4960 IF X3< 1OR X3> 8OR Y3< 1OR Y3> 8THEN 5490
5000 PRINT "   "; X3 ;","; Y3 ;:A$= "   ":Z1= X:Z2= Y:PRINT :PRINT :PRINT :GOSUB 8830
5050 IF Z3< > 0THEN 4920
5060 A$= "-+<":Z1= X:Z2= Y:FOR F= 1TO 100:PLOT 3,1,30:NEXT F:PLOT 12:GOSUB 8830:IF Z3= 0THEN 5210
5100 FOR M= 1TO 10:PLOT 6,8,12,6,0,12,6,16,12,6,0,12
5105 NEXT M
5110 PLOT 3,14,10:PRINT "      ***  KLINGON DESTROYED  ***":PRINT :PRINT :PRINT :K3= K3- 1:K9= K9- 1:IF K9< = 0THEN 6370
5150 FOR I= 1TO 3:IF X3= K(I,1)AND Y3= K(I,2)THEN 5190
5180 NEXT I:I= 3
5190 K(I,3)= 0:GOTO 5430
5210 A$= " * ":Z1= X:Z2= Y:GOSUB 8830:IF Z3= 0THEN 5280
5260 PLOT 3,6,8:PRINT "          STAR AT";X3;",";Y3;" ABSORBED TORPEDO ENERGY.":PRINT :PRINT :PRINT :PRINT :PRINT :GOSUB 6000:GOTO 1990
5280 A$= "[*]":Z1= X:Z2= Y:GOSUB 8830:IF Z3= 0THEN 4760
5290 FOR M= 1TO 10:PLOT 6,10,12,6,24,12,6,10,12,6,24,12,6,0,12
5295 NEXT M
5330 PLOT 3,14,10:PRINT "         *** STARBASE DESTROYED ***":PRINT :PRINT :PRINT :B3= B3- 1:B9= B9- 1
5360 IF B9> 0OR K9> T- T0- T9THEN 5400
5370 PRINT :PRINT :PRINT :PRINT "  THAT DOES IT, CAPTAIN!!! YOU ARE HEREBY RELIEVED OF COMMAND"
5380 PRINT "  AND SENTENCED TO 99 STARDATES AT HARD LABOR 0N CYGNUS 12 !!!":PRINT :PRINT :PRINT
5390 GOTO 6270
5400 PRINT :PRINT :PRINT "    STARFLEET COMMAND IS REVEIWING YOUR SERVICE RECORD AND "
5410 PRINT "    OFFICER SPOCK'S REPORT ON THE DESTRUCTION OF THE STARBASE"
5420 PRINT "    TO CONSIDER HAVING YOU  COURT MARTIALED !!!!":PRINT :PRINT :PRINT :D0= 0
5430 Z1= X:Z2= Y:A$= "   ":GOSUB 8670
5470 G(Q1,Q2)= K3* 100+ B3* 10+ S3:Z(Q1,Q2)= G(Q1,Q2):GOSUB 6000:GOTO 1990
5490 PLOT 12:PLOT 3,20,8:PRINT "TORPEDO MISSED":PRINT :PRINT :GOSUB 6000:GOTO 1990
5520 REM  "SHIELD CONTROL HERE"
5530 IF D(7)< 0THEN PLOT 3,6,6:PRINT "SHIELD CONTROL INOPERABLE":PRINT :PRINT :PRINT :PRINT :GOTO 1990
5560 PRINT :PRINT " ENERGY AVAILABLE= ";E+ S
5570 PRINT :INPUT " NUMBER OF UNITS TO SHIELDS ? ";X
5580 IF X< 0OR S= XTHEN PRINT :PRINT :PRINT " SHIELDS UNCHANGED":PRINT :PRINT :PRINT :GOTO 1990
5590 IF X< = E+ STHEN 5630
5600 PRINT :PRINT :PRINT "SHIELD CONTROL REPORTS: THIS IS NOT THE FEDERATION TREASURY!!!"
5610 PRINT :PRINT :PRINT " SHIELDS UNCHANGED":PRINT :PRINT :PRINT :GOTO 1990
5630 E= E+ S- X:S= X:PRINT :PRINT :PRINT " DEFLECTOR CONTROL REPORT: SHIELDS NOW AT";INT (S);" UNITS"
5660 PRINT SPC( 26)" AS PER YOUR COMMAND.":PRINT :PRINT :GOTO 1990
5680 REM  "DAMAGE CONTROL HERE"
5690 IF D(6)> = 0THEN 5910
5700 PLOT 3,6,10:PRINT "DAMAGE CONTROL REPORT NOT AVAILABLE":PRINT :PRINT :PRINT :PRINT :IF D0= 0THEN 1990
5720 D3= 0:FOR I= 1TO 8:IF D(I)< 0THEN D3= D3+ .1
5760 NEXT I:IF D3= 0THEN 1990
5780 PRINT :D3= D3+ D3:IF D3> = 1THEN D3= .9
5810 PRINT " TECHNICIANS STANDING BY TO REPAIR DAMAGE TO YOUR SHIP;"
5820 PRINT " ESTIMATED TIME TO REPAIR:";.01* INT (100* D3);" STARDATES.":PRINT
5840 INPUT "   WILL YOU AUTHORIZE THE REPAIR ORDER ? ( Y/N )  ";A$:PLOT 12:PRINT
5860 IF A$< > "Y"THEN 1990
5870 FOR I= 1TO 8:IF D(I)< 0THEN D(I)= 0
5890 NEXT I:T= T+ D3+ .1
5910 PRINT :PRINT "   DEVICE:         STATE OF REPAIR:":FOR R1= 1TO 8:PRINT
5920 GOSUB 8790:PRINT G2$;LEFT$ (Z$,25- LEN (G2$));INT (D(R1)* 100)* .01
5950 NEXT R1:PRINT :IF D0< > 0THEN 5720
5980 GOTO 1990
5990 REM  "KLINGONS SHOOTING"
6000 IF K3< = 0THEN RETURN
6010 IF D0< > 0THEN PRINT :PRINT "STARBASE SHIELDS PROTECT THE ENTERPRISE":RETURN
6040 FOR I= 1TO 3:IF K(I,3)< = 0THEN 6200
6060 H= INT ((K(I,3)/ FN D(1))* (2+ RND (1))):S= S- H:K(I,3)= K(I,3)/ (3+ RND (0))
6080 PRINT :PRINT :PRINT :PRINT SPC( 10)H;" UNIT HIT ON ENTERPRISE FROM SECTOR ";K(I,1);" ,";K(I,2) :PRINT :PRINT
6085 PRINT :FOR  V= 1TO 250:PLOT 3,1,30:NEXT V:PRINT :PLOT 12
6090 IF S< = 0THEN FOR M= 1TO 10:PLOT 6,8,12,6,0,12,6,8,12,6,0,12:NEXT M:GOTO 6240
6100 PLOT 3,20,4:PRINT " SHIELDS DOWN TO ";S;" UNITS ":PRINT :PRINT :PRINT :IF H< 20THEN 6200
6120 IF RND (1)> .6OR H/ S< = .02THEN 6200
6140 R1= FN R(1):D(R1)= D(R1)- H/ S- .5* RND (1):GOSUB 8790
6170 PRINT :PRINT :PRINT SPC( 4)"DAMAGE CONTROL REPORTS:";G2$;" DAMAGED BY THE HIT":PRINT :PRINT :PRINT
6200 NEXT I:RETURN
6210 REM  "END OF GAME!!!"
6220 PRINT :PRINT "        IT IS STARDATE ";T:PRINT :GOTO 6270
6240 PLOT 3,6,6:PRINT "    THE ENTERPRISE HAS BEEN DESTROYED."
6250 PRINT :PRINT :PRINT "        THE FEDERATION WILL BE CONQUERED!!!":GOTO 6220
6270 PRINT :PRINT "        THERE WERE";K9;" KLINGON BATTLE CRUISERS LEFT AT THE END"
6280 PRINT "        OF YOUR MISSION.":PRINT
6290 PRINT :PRINT :IF B9= 0THEN 6360
6310 PRINT :PRINT "        THE FEDERATION IS IN NEED OF A NEW STARSHIP COMMANDER "
6320 PRINT :PRINT "        FOR A SIMILAR MISSION - IF THERE IS A VOLUNTEER,"
6330 PRINT :INPUT "        LET HIM STEP FORWARD & ENTER 'AYE'   ";A$:IF A$= "AYE"THEN 90
6360 END
6370 PRINT :PRINT :PRINT "CONGRATULATIONS , CAPTAIN !!!  THE LAST KLINGON SHIP HAS"
6380 PRINT :PRINT "BEEN DESTROYED & THE FEDERATION IS SAFE.":PRINT
6400 PRINT :PRINT "YOUR EFFECIENCY RATING IS";1000* (K7/ (T- T0))^ 2:GOTO 6290
6420 REM  "SHORT RANGE SENSOR SCAN & STARTUP SUBROUTINE"
6430 FOR I= S1- 1TO S1+ 1:FOR J= S2- 1TO S2+ 1
6450 IF INT (I+ .5)< 1OR INT (I+ .5)> 8OR INT (J+ .5)< 1OR INT (J+ .5)> 8THEN 6540
6490 A$= "[*]":Z1= I:Z2= J:GOSUB 8830:IF Z3= 1THEN 6580
6540 NEXT J:NEXT I:D0= 0:GOTO 6650
6580 D0= 1:C$= "DOCKED":E= E0:P= P0
6620 PRINT :PRINT " SHIELDS DROPPED FOR DOCKING PURPOSES":S= 0:PRINT :GOTO 6720
6650 IF K3> 0THEN C$= "*RED*":GOTO 6720
6660 C$= "GREEN":IF E< E0* .1THEN C$= "YELLOW"
6720 IF D(2)> = 0THEN 6770
6730 PRINT :PRINT :PRINT SPC( 4)"SHORT RANGE SENSORS DOWN":PRINT :PRINT :RETURN
6770 O1$= "--------------------------------":PRINT O1$:FOR I= 1TO 8
6820 FOR J= (I- 1)* 24+ 1TO (I- 1)* 24+ 22STEP 3:PRINT " ";MID$ (Q$,J,3);:NEXT J
6830 ON IGOTO 6850,6900,6960,7020,7070,7120,7180,7240
6850 PRINT "      STARDATE          ";INT (T* 10)* .1:GOTO 7260
6900 PRINT "      CONDITION          ";C$:GOTO 7260
6960 PRINT "      QUADRANT          ";Q1;",";Q2:GOTO 7260
7020 PRINT "      SECTOR            ";S1;",";S2:GOTO 7260
7070 PRINT "      PHOTON TORPEDOES  ";INT (P):GOTO 7260
7120 PRINT "      TOTAL ENERGY      ";INT (E+ S):GOTO 7260
7180 PRINT "      SHIELDS           ";INT (S):GOTO 7260
7240 PRINT "      KLINGONS REMAINING";INT (K9)
7260 NEXT I:PRINT O1$:GOTO 1990
7280 REM " LIBRARY COMPUTER CODE "
7290 IF D(8)< 0THEN PLOT 3,6,6:PRINT "COMPUTER DISABLED":PRINT :PRINT :PRINT :PRINT :PRINT :GOTO 1990
7320 PRINT :PRINT :PRINT :INPUT "COMPUTER ACTIVE AND AWAITING COMMAND  ";A:PRINT "":PLOT 12:IF A< 0 OR  A > 6 THEN 1990
7350 PLOT 27,11:PRINT :H8= 1:ON A+ 1GOTO 7360,7540,7900,8070,8500,8150,7400
7360 PRINT :PRINT :PRINT "FUNCTIONS AVAILABLE FROM LIBRARY-COMPUTER:":PRINT :PRINT
7370 PRINT :PRINT "   1 = CUMULATIVE GALACTIC RECORD":PRINT
7372 PRINT "   2 = STATUS REPORT":PRINT
7374 PRINT "   3 = PHOTON TORPEDO DATA":PRINT
7376 PRINT "   4 = STARBASE NAV DATA":PRINT
7378 PRINT "   5 = DIRECTION/DISTANCE CALCULATOR":PRINT
7380 PRINT "   6 = GALAXY 'REGION NAME' MAP":PRINT :GOTO 7320:PRINT
7390 REM "SET-UP TO CHANGE CUM GALACTIC RECORD TO GALAXY MAP"
7400 H8= 0:G5= 1:PRINT TAB( 25)"THE GALAXY":PRINT :GOTO 7550
7530 REM "CUMULATIVE GALATIC RECORD"
7540 GOTO 7543
7543 PRINT :PRINT "        ";
7544 PRINT "   COMPUTER RECORD OF GALAXY FOR QUADRANT";Q1;",";Q2:PRINT
7546 PRINT
7550 PRINT "           1     2     3     4     5     6     7     8     "
7560 O1$= "         ----- ----- ----- ----- ----- ----- ----- ----- "
7570 PRINT O1$:FOR I= 1TO 8:PRINT SPC( 5)I;:IF H8= 0THEN 7740
7630 FOR J= 1TO 8:PRINT "   ";:IF Z(I,J)= 0THEN PRINT "***";:GOTO 7720
7700 PRINT RIGHT$ (STR$ (Z(I,J)+ 1000),3);
7720 NEXT J:GOTO 7850
7740 Z4= I:Z5= 1:GOSUB 9030:J0= INT (15- .5* LEN (G2$)):PRINT TAB( J0);G2$:
7800 Z5= 5:GOSUB 9030:J0= INT (39- .5* LEN (G2$)):PRINT TAB( J0);G2$;
7850 PRINT :PRINT O1$:NEXT I:PRINT :GOTO 1990
7890 REM  "STATUS REPORT"
7900 PLOT 12:PRINT "STATUS REPORT: ":X$= " ":IF K9> 1THEN X$= "S"
7940 PRINT "KLINGON";X$;" LEFT:  ";K9
7960 PRINT :PRINT "MISSION MUST BE COMPLETED IN ";.1* INT ((T0+ T9- T)* 10);" STARDATES":PRINT
7970 X$= "S":IF B9< 2THEN X$= "":IF B9< 1THEN 8010
7980 PRINT "THE FEDERATION IS MAINTAINING ";B9;" STARBASE";X$;" IN THE GALAXY.":PRINT
7990 GOTO 5690
8010 PRINT :PRINT :PRINT "    YOUR STUPIDITY HAS LEFT YOU ON YOUR OWN IN THE GALAXY"
8020 PRINT "    YOU HAVE NO STARBASES LEFT!!!":GOTO 5690
8060 REM  "DIRECTION/DISTANCE CALCULATOR; TORPEDO, STARBASE NAV."
8070 IF K3< = 0THEN 4270
8080 X$= "":IF K3> 1THEN X$= "S"
8090 PRINT "FROM ENTERPRISE TO KLINGON BATTLE CRUISER";X$
8100 H8= 0:FOR I= 1TO 3:IF K(I,3)< = 0THEN 8480
8110 W1= K(I,1):X= K(I,2)
8120 C1= S1:A= S2:GOTO 8220
8150 PRINT "DIRECTION/DISTANCE CALCULATOR:":PRINT :PRINT
8160 PRINT "YOU ARE AT QUADRANT ";Q1;",";Q2;"  SECTOR ";S1;",";S2
8170 PRINT :PRINT "PLEASE ENTER:":PRINT :PRINT :PRINT :INPUT "INITIAL COORDINATES (X,Y)  ";C1,A
8200 PRINT :INPUT "FINAL COORDINATES   (X,Y)  ";W1,X
8220 X= X- A:A= C1- W1:IF X< 0THEN 8350
8250 IF A< 0THEN 8410
8260 IF X> 0THEN 8280
8270 IF A= 0THEN C1= 5:GOTO 8290
8280 C1= 1
8290 IF ABS (A)< = ABS (X)THEN 8330
8310 PRINT :PRINT :PRINT "DIRECTION = ";C1+ (((ABS (A)- ABS (X))+ ABS (A))/ ABS (A)):GOTO 8460
8330 PRINT :PRINT :PRINT "DIRECTION = ";C1+ (ABS (A)/ ABS (X)):GOTO 8460
8350 IF A> 0THEN C1= 3:GOTO 8420
8360 IF X< > 0THEN C1= 5:GOTO 8290
8410 C1= 7
8420 IF ABS (A)> = ABS (X)THEN 8450
8430 PRINT :PRINT "DIRECTION = ";C1+ (((ABS (X)- ABS (A))+ ABS (X))/ ABS (X)):GOTO 8460
8450 PRINT :PRINT :PRINT "DIRECTION = ";C1+ (ABS (X)/ ABS (A))
8460 PRINT :PRINT "DISTANCE =  ";SQR (X^ 2+ A^ 2):IF H8= 1THEN 1990:PRINT
8480 NEXT I:GOTO 1990
8500 IF B3< > 0THEN PRINT "FROM ENTERPRISE TO STARBASE:":W1= B4:X= B5:GOTO 8120
8510 PRINT :PRINT "SPOCK REPORTS: SENSORS SHOW NO STARBASES IN THIS QUADRANT":PRINT :GOTO 1990
8580 REM  "FIND EMPTY PLACE IN QUADRANT ( FOR MISC. THINGS )
8590 R1= FN R(1):R2= FN R(1):A$= "   ":Z1= R1:Z2= R2:GOSUB 8830:IF Z3= 0THEN 8590
8600 RETURN
8670 S8= INT (Z2- .5)* 3+ INT (Z1- .5)* 24+ 1
8675 IF LEN (A$)> 5THEN PRINT "ERROR":END
8680 IF S8= 1THEN Q$= A$+ RIGHT$ (Q$,189):RETURN
8690 IF S8= 190THEN Q$= LEFT$ (Q$,189)+ A$:RETURN
8700 Q$= LEFT$ (Q$,S8- 1)+ A$+ RIGHT$ (Q$,190- S8):RETURN
8780 REM  "PRINTS DEVICE NAME "
8790 ON R1GOTO 8792,8794,8796,8798,8800,8802,8804,8806
8792 G2$= "   WARP ENGINES":RETURN
8794 G2$= "   SRS  ":RETURN
8796 G2$= "   LRS  ":RETURN
8798 G2$= "   PHASERS":RETURN
8800 G2$= "   TORPEDOES":RETURN
8802 G2$= "   DAMAGE CONTROL":RETURN
8804 G2$= "   SHIELD CONTROL":RETURN
8806 G2$= "   COMPUTER":RETURN
8820 REM  "STRING COMPARISON IN QUADRANT ARRAY"
8830 Z1= INT (Z1+ .5):Z2= INT (Z2+ .5):S8= (Z2- 1)* 3+ (Z1- 1)* 24+ 1:Z3= 0
8890 IF MID$ (Q$,S8,3)< > A$THEN  RETURN
8900 Z3= 1:RETURN
9010 REM  "QUADRANT NAME IN G2$ FROM Z4,Z5 (=Q1,Q2)"
9020 REM  "CALL WITH G5=1 TO GET REGION NAME ONLY"
9030 IF Z5< = 4THEN ON Z4GOTO 9040,9050,9060,9070,9080,9090,9100,9110
9035 GOTO 9120
9040 G2$= "ANTARES":GOTO 9210
9050 G2$= "RIGEL":GOTO 9210
9060 G2$= "PROCYON":GOTO 9210
9070 G2$= "VEGA":GOTO 9210
9080 G2$= "CANOPUS":GOTO 9210
9090 G2$= "ALTAIR":GOTO 9210
9100 G2$= "SAGITTARIUS":GOTO 9210
9110 G2$= "POLLUX":GOTO 9210
9120 ON Z4GOTO 9130,9140,9150,9160,9170,9180,9190,9200
9130 G2$= "SIRIUS":GOTO 9210
9140 G2$= "DENEB":GOTO 9210
9150 G2$= "CAPELLA":GOTO 9210
9160 G2$= "OCTAVIA":GOTO 9210
9170 G2$= "ALDEBARAN":GOTO 9210
9180 G2$= "REGULUS":GOTO 9210
9190 G2$= "ARCTURUS":GOTO 9210
9200 G2$= "SPICA":GOTO 9210
9210 IF G5< > 1THEN ON Z5GOTO 9230,9240,9250,9260,9230,9240,9250,9260
9220 RETURN
9230 G2$= G2$+ " I":RETURN
9240 G2$= G2$+ " II":RETURN
9250 G2$= G2$+ " III":RETURN
9260 G2$= G2$+ " IV":RETURN