home *** CD-ROM | disk | FTP | other *** search
-
- 10 Rem Version 09/20/81
- 20 Set 0,-1 : Deg
- 30 I=2.5 : If I=2.5 Then Imode : Run
- 40 Long Stardate,Time'left,Damage
- 50 Dim Plot$(5),Device$(152)
- 60 Device$="Short range sensorsLong range sensors Warp engines Impulse engines"
- 70 Device$(76)="Phasers Photon torpedoes Shields Ship computer"
- 80 Warp=6 : Stardate=2500 : Shield'status=1 : Shield'strength=95
- 90 Quadx=4 : Quady=3 : Sectorx=4 : Sectory=6
- 100 Torpedoes=7 : Energy=3679 : Time'left=3.97 : Klingons=78
- 110 Plot$=".*KCBE"
- 120 *Title
- 130 Gosub Screen'erase
- 140 Call .Cursor (20,4)
- 150 @"STARTREK HELP"
- 160 Call .Cursor (20,6)
- 170 @"copyright 1980"
- 180 Call .Cursor (20,8)
- 190 @"by"
- 200 Call .Cursor (20,10)
- 210 @"David E. Trachtenbarg."
- 220 Call .Erase'line (28,18)
- 230 Call .Cursor (24,18)
- 240 Input"Press RETURN for the main index.",Command$
- 250 *Help'index
- 260 Gosub Screen'erase
- 270 @ : @ Tab(32);"HELP INDEX" : @
- 280 @ Tab(28);"A. Introduction"
- 290 @ Tab(28);"B. The galaxy"
- 300 @ Tab(28);"C. Long range scanner"
- 310 @ Tab(28);"D. Short range sensors"
- 320 @ Tab(28);"E. Ship status"
- 330 @ Tab(28);"F. Warp Drive"
- 340 @ Tab(28);"G. Impulse Drive"
- 350 @ Tab(28);"H. Phasers"
- 360 @ Tab(28);"I. Photon torpedoes"
- 370 @ Tab(28);"J. Shields"
- 380 @ Tab(28);"K. Klingons"
- 390 @ Tab(28);"L. Damage and repairs"
- 400 @ Tab(28);"M. Starbases"
- 410 @ Tab(28);"N. Surrendering"
- 420 @ Tab(28);"O. Lesson help"
- 430 @ Tab(28);"P. Taking command"
- 440 Call .Erase'bottom (22,20)
- 450 @"Enter the letter of your choice. ";
- 460 Gosub Enter'letter
- 470 On(Asc(Command$)-64) Goto Intro,Ch,Lr,Sr,Score,Wa,Im,Ph,Pt,Su,Klingons,Da,Base,Qg,He,Command
- 480 Goto 440
- 490 *Intro
- 500 Gosub Screen'erase
- 510 @"Introduction" : @
- 520 @"After 50 years of peace between the Federation and the Klingon empire"
- 530 @"open war has been declared. As the commander of the starship Enterprise,"
- 540 @"your mission is to eliminate the Klingon threat and restore peace to the"
- 550 @"Federation. To ensure peace every Klingon ship must be destroyed. You"
- 560 @"currently have five stardates to accomplish your mission. More time may"
- 570 @"be allowed if you are successful. Good luck commander. The fate of the"
- 580 @"Federation depends on you."
- 590 Gosub Query
- 600 *Ch
- 610 Gosub Galaxy
- 620 Call .Cursor (0,6)
- 630 @"This display is a chart of the galaxy. The galaxy is divided up"
- 640 @"into a 10x10 grid of one-hundred different quadrants. If the"
- 650 @"number of Klingons in a quadrant is not known, the quadrant will"
- 660 @"as 3 dots (...) on the chart. If the number of Klingons in"
- 670 @"a quadrant is known, a 3 digit number will appear on the chart"
- 680 @"instead. The first digit is the number of Klingons, the second"
- 690 @"digit is the number of Federation bases, and the third digit is the"
- 700 @"number of stars in the quadrant. The position of the Enterprise is"
- 710 @"indicated by a box around its position. Since the information for"
- 720 @"the chart is stored in the ship's computer, it may not be displayed "
- 730 @"the computer is damaged. The chart command is 'CH'."
- 740 Gosub Query
- 750 *Lr
- 760 Gosub Long'range
- 770 Call .Cursor (0,14)
- 780 @"This is a long range scan. The position of the Enterprise is"
- 790 @"in the middle of the 3x3 grid. The same 3 digit system is"
- 800 @"used for representing the number of Klingons, bases, and stars"
- 810 @"in a quadrant as in the map of the galaxy. The quadrant numbers"
- 820 @"to the left and at the below the grid. If the Enterprise"
- 830 @"is near the edge of the galaxy a ``` will appear instead of the"
- 840 @"normal display. The long range sensor command is 'LR'."
- 850 Gosub Query
- 860 *Sr
- 870 Gosub Screen'erase
- 880 @ : Call .Cursor (0,5)
- 890 @ Tab(44);"This is a short range scan of"
- 900 @ Tab(44);"a quadrant. Each quadrant is"
- 910 @ Tab(44);"divided up into a 10x10 grid of"
- 920 @ Tab(44);"one-hundred sectors. If a sector"
- 930 @ Tab(44);"is empty you will see a dot on the"
- 940 @ Tab(44);"display. Other symbols are E for"
- 950 @ Tab(44);"Enterprise, B for Base, * for star,"
- 960 @ Tab(44);"K for Klingon, and C for a Klingon"
- 970 @ Tab(44);"commander. The short range sensor"
- 980 @ Tab(44);"command is 'SR'."
- 990 Gosub Short'range
- 1000 Gosub Query
- 1010 *Score
- 1020 Gosub Score'board
- 1030 Call .Cursor (0,6)
- 1040 @"This is Enterprise's status display."
- 1050 @"The time remaining is the total number of"
- 1060 @"Stardates left that you have to eliminate"
- 1070 @"the Klingon threat. You initially have"
- 1080 @"5 stardates, but may be given more time"
- 1090 @"as the number of Klingons decreases."
- 1100 @"The number of Klingons listed is the"
- 1110 @"total number of Klingons remaining."
- 1120 @"There will be a condition RED if the"
- 1130 @"Enterprise is under attack, otherwise"
- 1140 @"there will be condition GREEN."
- 1150 Gosub Query
- 1170 *Wa
- 1180 Gosub Score'board
- 1190 Call .Cursor (0,4)
- 1200 @"The command to change the warp speed is 'WA'."
- 1210 @"A warp speed above 6 may damage the warp drive."
- 1220 @"The command to move using warp drive is 'MO'."
- 1230 @"After typing 'MO' you will be asked to specify"
- 1240 @"A direction and distance. The entered should"
- 1250 @"be like the numbers on a clock."
- 1260 @ Tab(33);" 12"
- 1270 @ Tab(33);"9 1"
- 1280 @ Tab(33);" 6"
- 1290 @ : @"The distance is the number of quadrants."
- 1300 @"Therfore the distance between two adjacent points"
- 1310 @"is .1, not 1. The direction and distance should"
- 1320 @"be entered on one line separated by commas. For"
- 1330 @"example 1.5,.1 is one possible combination."
- 1340 Gosub Query
- 1350 *Im
- 1360 Gosub Screen'erase
- 1370 Call .Cursor (0,6)
- 1380 @"The command for impulse drive is 'IM'. Impulse drive is"
- 1390 @"slower than warp drive, but uses less energy for short"
- 1400 @"distances. You must enter a direction and distance"
- 1410 @"for impulse travel in the same way as they are entered"
- 1420 @"for warp travel."
- 1440 Gosub Query
- 1450 *Ph
- 1460 Gosub Score'board
- 1470 Call .Cursor (0,6)
- 1480 @"The command for phasers is 'PH'. Phasers use"
- 1490 @"pure energy. After entering the phaser"
- 1500 @"command you will be asked to enter the direction"
- 1505 @"of phaser fire and the amount of energy to use."
- 1510 @"to use. The direction and energy should be"
- 1520 @"entered on one line separated by commas. "
- 1530 @"Your remaining energy level is printed on the"
- 1531 @"status display."
- 1540 Gosub Query
- 1550 *Pt
- 1560 Gosub Score'board
- 1570 Call .Cursor (0,6)
- 1580 @"The command to fire photon torpedoes is 'PT'."
- 1590 @"Up to 3 photon torpedoes may be fired at once."
- 1600 @"After the 'PT' command the direction of"
- 1610 @"torpedoe travel must be entered. Enter"
- 1620 @"up to 3 directions separated by commas"
- 1630 @"to fire more than one torpedoe. The "
- 1640 @"number of torpedoes you have left is"
- 1650 @"printed in the status display."
- 1660 Gosub Query
- 1670 *Su
- 1680 Gosub Score'board
- 1690 Call .Cursor (0,6)
- 1700 @"The command to bring up the shields is 'SU'."
- 1710 @"The command to bring down the shields is 'SD'."
- 1720 @"The current status of the shields is printed"
- 1730 @"on the status display."
- 1740 Gosub Query
- 1750 *Klingons
- 1760 Gosub Screen'erase
- 1761 Call .Cursor (0,8)
- 1770 @"There are two types of Klingons. Regular and Klingon commanders."
- 1790 @"The Klingon commanders are more powerful. When you start a tour of"
- 1800 @"command on the Enterprise you are asked to enter your skill level."
- 1810 @"A higher skill level will entitle you to a more dangerous mission."
- 1820 @"During these more dangerous missions the Klingons are much more"
- 1830 @"aggresive and will attempt to move as close as possible to your"
- 1840 @"your ship to attack."
- 1850 Gosub Query
- 1860 *Da
- 1870 Gosub Screen'erase
- 1879 @
- 1880 Call .Cursor (0,6)
- 1890 @ Tab(50);"The damage report command is"
- 1900 @ Tab(50);"'DA'. Repairs are 10 times"
- 1910 @ Tab(50);"faster while docked at a "
- 1920 @ Tab(50);"starbase. "
- 1940 Gosub Damage'report
- 1950 Gosub Query
- 1970 *Base
- 1980 Gosub Screen'erase
- 1981 Call .Cursor (0,10)
- 1990 @"If you are adjacent to a starbase type 'DO' to dock. Your supply"
- 2000 @"of energy and photon torpedoes will then be replenished."
- 2010 Gosub Query
- 2020 *Qg
- 2030 Gosub Screen'erase
- 2040 Call .Cursor (0,10)
- 2050 @"The command to surrender is 'QG' (for quit game). Of course the"
- 2060 @"Federation will be lost if you do this."
- 2070 Gosub Query
- 2080 *He
- 2090 Gosub Screen'erase
- 2100 Call .Cursor (0,6)
- 2110 @"The command for help is 'HE'. After typing this the short"
- 2120 @"list of commands displayed below will be printed."
- 2121 Gosub Help
- 2130 Gosub Query
- 2140 *Command
- 2150 Gosub Screen'erase
- 2160 Call .Cursor (0,6)
- 2170 Repeat
- 2180 @"Do you wish to take command of the Enterprise now (Y/N)? ";
- 2190 Gosub Enter'letter
- 2200 Until Command$(0,0)="Y" Or Command$(0,0)="N"
- 2210 If Command$(0,0)="Y" Then Run"TREK.SAV"
- 2220 Goto Help'index
- 2230 *Query
- 2240 Call .Erase'bottom (28,22)
- 2250 @"Press RETURN to go on."
- 2260 Call .Cursor (25,23) : @"Press I for the HELP INDEX. ";
- 2270 Gosub Enter'letter
- 2280 If Command$(0,0)="I" Then Goto Help'index
- 2290 If Command$(0,0)<>Chr$(13) Then Goto Query
- 2300 Return
- 2310 *Enter'letter
- 2320 Open\1\"$SY"
- 2330 Get\1\Command$(0,0)
- 2340 Close\1\
- 2350 If Command$(0,0)=Chr$(27) Then Stop
- 2360 Call .Capitalize (Command$)
- 2370 Return
- 2380 *Grid
- 2390 For J=1 To 10
- 2400 Print Using"## ",J;
- 2410 For I=1 To 10
- 2420 K=Rnd(0)*100
- 2430 L=0
- 2440 If K>90 Then L=1
- 2450 If K<5 Then L=2
- 2460 If I=Sectorx And J=Sectory Then L=5
- 2470 If I=4 And J=9 Then L=4
- 2480 If I=6 And J=3 Then L=3
- 2490 @" ";Plot$(L,L);" ";
- 2500 Next I
- 2510 @ : @
- 2520 Next J
- 2530 @" 1 2 3 4 5 6 7 8 9 10"
- 2540 Return
- 2550 *Score'board
- 2560 Gosub Screen'erase
- 2570 Call .Cursor (52,0) : @ Using"STARDATE: ####.##",Stardate;
- 2580 Call .Cursor (52,2) : @"POSITION";
- 2590 Call .Cursor (53,3) : @" QUADRANT ";Quadx;",";Quady;
- 2600 Call .Cursor (53,4) : @" SECTOR ";Sectorx;",";Sectory;
- 2610 Call .Cursor (52,6) : @ Using"TIME REMAINING: ##.##",Time'left
- 2620 Call .Cursor (52,8) : @"KLINGONS: ";Klingons;" ";
- 2630 Call .Cursor (52,10) : @"ENERGY: ";Energy;" ";
- 2640 Call .Cursor (52,12) : If Shield'status=0 Then @"SHIELDS DOWN";
- 2650 If Shield'status=1 Then @"SHIELDS UP ";
- 2660 Call .Cursor (52,13) : @ Using" SHIELD STRENGTH: ###%",Shield'strength;
- 2670 Call .Cursor (52,15) : @"TORPEDOES: ";Torpedoes;" ";
- 2680 Call .Cursor (52,17) : @"WARP: ";Warp;
- 2690 Call .Cursor (52,19)
- 2700 @"CONDITION: RED ";
- 2710 Return
- 2810 *Short'range
- 2820 Call .Cursor (0,0)
- 2830 Gosub Grid
- 2840 Return
- 2850 *Galaxy
- 2860 Gosub Screen'erase
- 2870 For J=1 To 10
- 2880 Print Using"##",J;
- 2890 For I=1 To 10
- 2900 K=Rnd(0)*100
- 2910 If I=Quadx And J=Quady Then K=6
- 2920 If K<5 Then @" .1. "; : Goto 2950
- 2930 If K>50 Then @" ... "; : Goto 2950
- 2940 @" ";Int(Rnd(0)*9);(K>5 And K<10);Int(Rnd(0)*9);" ";
- 2950 Next I
- 2960 @ : @
- 2970 Next J
- 2980 @" 1 2 3 4 5 6 7 8 9 10"
- 2990 X=4*6-1 : Y=3*2-2 : Call .Cursor (X,Y+1) : @"=";
- 3000 If Y>1 Then Call .Cursor (X,Y-1) : @"=";
- 3010 Call .Cursor (X-2,Y) : @"|";
- 3020 Call .Cursor (X+2,Y) : @"|";
- 3030 Return
- 3040 *Long'range
- 3050 Gosub Screen'erase
- 3060 @"LONG RANGE SCAN FROM QUADRANT ";Quadx;",";Quady;"." : @ : @
- 3070 For J=(Quady-1) To(Quady+1)
- 3080 Print Using" ##",J;
- 3090 For I=(Quadx-1) To(Quadx+1)
- 3100 If I<1 Or J<1 Or I>10 Or J>10 Then @ Spc(5);"```"; : Goto 3120
- 3110 @ Spc(5);Int(Rnd(0)*5)*(Rnd(0)>0.3);Int(Rnd(0)*1);Int(Rnd(0)*9);
- 3120 Next I
- 3130 @ : @ : @
- 3140 Next J
- 3150 @ Tab(9);Quadx-1;Tab(17);Quadx;Tab(25);Quadx+1
- 3160 Return
- 3170 *Damage'report
- 3171 Call .Cursor (0,0)
- 3190 @
- 3200 @ Tab(13);"DAMAGE REPORT" : @
- 3210 @ Tab(10);"System";Tab(28);"Repair Time" : @
- 3220 For I=0 To 7
- 3230 @ Tab(10);Device$(I*19,I*19+18) : @
- 3240 Next I
- 3260 *Damage'numbers
- 3270 For I=0 To 7
- 3280 Y=I*2+5
- 3290 Call .Cursor (30,Y)
- 3300 J=Rnd(0)*100
- 3310 Damage=0
- 3320 If J<25 Then Damage=Rnd(0)*2
- 3330 If Damage>0 Then @ Using"##&.&&&",Damage
- 3340 If Damage=0 Then @" OK "
- 3350 Next I
- 3360 Return
- 3370 *Help
- 3380 @ : @
- 3390 @"SR=Short range scan MO=Warp drive PH=Phasers RE=Repair DO=Dock"
- 3400 @"LR=Long range scan WA=Warp speed PT=Torpedoes SU=Shields up"
- 3410 @"CH=Chart of Galaxy IM=Impulse drive DA=Damage report SD=Shields down";
- 3460 Return
- 3470 *Screen'erase
- 3480 Out 1,126 : Out 1,28
- 3490 Return
- 3500 Procedure .Cursor (X1,Y1)
- 3510 Out 1,126 : Out 1,17
- 3520 Out 1,X1 : Out 1,Y1
- 3530 Endproc
- 3540 Procedure .Get'numbers
- 3550 Mat Number=-1
- 3560 I=0
- 3570 For J=1 To 3
- 3580 K=Asc(Command2$(I))
- 3590 If K=47 Or K<46 Or K>57 Then 3630
- 3600 Number(J)=Val(Command2$(I))
- 3610 I=Pos(Command2$,",",I)+1
- 3620 If I=0 Then J=3
- 3630 Next J
- 3640 Endproc (Number(1),Number(2),Number(3))
- 3650 Endproc
- 3660 Procedure .Erase'line (X1,Y1)
- 3670 Out 1,126 : Out 1,17 : Out 1,X1 : Out 1,Y1
- 3680 Out 1,126 : Out 1,15
- 3690 Endproc
- 3700 Procedure .Erase'bottom (X1,Y1)
- 3710 Out 1,126 : Out 1,17 : Out 1,X1 : Out 1,Y1
- 3720 Out 1,126 : Out 1,24
- 3730 Endproc
- 3740 Procedure .Capitalize (Command$)
- 3750 Local I
- 3760 For I=0 To Len(Command$)-1
- 3770 If Command$(I,I)>="a" And Command$(I,I)<="z" Then Do
- 3780 Command$(I,I)=Chr$(Asc(Command$(I,I))-32)
- 3790 Enddo
- 3800 Next I
- 3810 Endproc
-