Highly modified & improved SUPER STAR TREK.
Content
Source Code
10 REM Highly modified & improved SUPER STARTREK
20 GO SUB 3440
30 DEF FN d(d)=SQR (((k(i,SGN PI)-s1)*(k(i,SGN PI)-s1))+((k(i,2)-s2)*(k(i,2)-s2)))
40 DEF FN w(w)=INT (RND*7.98+1.01)
50 LET q1=FN w(SGN PI): LET q2=FN w(SGN PI): LET s1=FN w(SGN PI): LET s2=FN w(SGN PI)
60 FOR i=SGN PI TO 9: LET c(i,SGN PI)=NOT PI: LET c(i,2)=NOT PI: NEXT i
70 LET c(3,SGN PI)=-1: LET c(2,SGN PI)=-1: LET c(4,SGN PI)=-1: LET c(4,2)=-1: LET c(5,2)=-1: LET c(6,2)=-1
80 LET c(1,2)=SGN PI: LET c(2,2)=SGN PI: LET c(6,SGN PI)=SGN PI: LET c(7,SGN PI)=SGN PI: LET c(a8,SGN PI)=SGN PI: LET c(a8,2)=SGN PI: LET c(9,2)=1
90 LET a$="navsrslrsphatorshedamcomxxx"
100 REM position everything inthe galaxy
110 FOR i=SGN PI TO a8: LET d(i)=NOT PI: FOR j=SGN PI TO a8: LET z(i,j)=NOT PI: LET r1=INT (RND*100): LET r2=INT (RND*10+.3): LET b3=NOT PI: LET k3=b3: LET r3=b3
120 IF r1>50 AND r2>0 AND r2<4 AND k9<15 THEN LET k3=r2: LET k9=k9+r2: GO TO 140
130 IF r1<50 AND r2>1 AND r2<4 AND k3<3 AND r9<15 THEN LET r3=r2: LET r9=r9+r2: GO TO 140
140 IF r1>19 AND r1<90 AND (r2=0 OR r2=3 OR r2=7) AND b9<7 THEN LET b3=SGN PI: LET b9=b9+1
150 LET g(i,j)=(k3+r3)*100+b3*10+FN w(SGN PI): NEXT j: NEXT i: IF t9<(k9+r9) THEN LET t9=k9+r9+3
160 REM set up 1 star base & 1Klingon
170 IF b9 THEN GO TO 200
180 IF g(q1,q2)<200 THEN LET g(q1,q2)=g(q1,q2)+100: LET k9=k9+1
190 LET b9=SGN PI: LET g(q1,q2)=g(q1,q2)+10: LET q1=FN w(SGN PI): LET q2=FN w(SGN PI)
200 REM display the assignment
210 CLS : BEEP .07,17: PRINT TAB 10;"ATTENTION!": PRINT ': LET kk=0
220 LET k7=k9: LET r7=r9: IF b9<>1 THEN LET x$="s": LET y$=" are "
230 PRINT "Your orders are as follows:"''"Destroy the ";k9;" Klingon warships"
240 PRINT "and the ";r9;" Romulan warships": PRINT "which have invaded Confederation"
250 PRINT "space before they can attack","Federation headquarters on star","date ";t0+t9;".": PRINT : PRINT "This gives you ";t9;" days."
260 PRINT '"There";y$;b9;" starbase";x$;" in the"
270 PRINT "galaxy for resupplying your"'"spacecraft."
280 PRINT #1;"Press any key to accept command"
290 PAUSE NOT PI: CLS
300 REM start first play, onlydone once
310 LET z4=q1: LET z5=q2: LET k3=NOT PI: LET b3=k3: LET s3=k3: LET g5=k3: LET d4=.5*RND: LET z(q1,q2)=g(q1,q2)
320 IF q1<1 OR q1>a8 OR q2<1 OR q2>a8 THEN GO TO 440
330 GO SUB 3360: IF t0=t THEN PRINT "Your mission begins with your starship located in the galacticquadrant ";g$;".": GO TO 380
360 REM logic for start of gamecycle
370 PRINT "Now entering ";g$'" quadrant"
380 PRINT : LET k3=INT (g(q1,q2)*.01): LET r3=INT (g(q1,q2)*.01): LET b3=INT (g(q1,q2)*.1)-10*k3
390 LET s3=g(q1,q2)-100*k3-10*b3: IF k3=0 AND r3=0 THEN GO TO 430
400 FOR w=SGN PI TO 5: BEEP .5,5: BEEP .2,20: PAUSE 15: NEXT w
410 PRINT "Combat area "; PAPER 2; INK 7;"CONDITION RED": IF s>200 THEN GO TO 430
420 PRINT " Shields dangerously low!!!"
430 FOR i=SGN PI TO PI: LET k(i,SGN PI)=NOT PI: LET k(i,2)=NOT PI: NEXT i
440 FOR i=SGN PI TO 4: LET k(i,PI)=NOT PI: NEXT i: LET q$=z$+z$+z$+z$+z$+z$+z$+z$
450 LET a$="\e\f\g": LET z1=s1: LET z2=s2: GO SUB 3270: IF k3<1 AND r3<1 THEN GO TO 520
460 IF k3<1 THEN GO TO 490
470 FOR i=SGN PI TO k3: GO SUB 3250: LET a$="\k\l\m": LET z1=r1: LET z2=r2
480 GO SUB 3270: LET k(i,SGN PI)=r1: LET k(i,2)=r2: LET k(i,PI)=s9*(.5+RND): NEXT i
490 IF r3<1 THEN GO TO 520
500 FOR i=SGN PI TO r3: GO SUB 3250: LET a$="\r\s\t": LET z1=r1: LET z2=r2
510 GO SUB 3270: LET r(i,SGN PI)=r1: LET r(i,2)=r2: LET r(i,PI)=s9*(.5+RND): NEXT i
520 IF b3<1 THEN GO TO 540
530 GO SUB 3250: LET a$="\b\c\d": LET z1=r1: LET b4=r1: LET z2=r2: LET b5=r2: GO SUB 3270
540 FOR i=SGN PI TO s3: GO SUB 3250: LET a$=" \n ": LET z1=r1: LET z2=r2: GO SUB 3270: NEXT i
550 REM srs=i=2
560 GO SUB 2440
565 REM movs
570 IF s+e>10 THEN IF e>10 OR d(7)=0 THEN GO TO 610
580 PRINT '"**Fatal error ** You've just stranded your ship in space. you"
590 PRINT "have insufficient maneuvering energy, and shield control is"
600 PRINT "incapable of crosscircuiting to engine room!": GO TO 2290
610 INPUT "Command? "; LINE l$: CLS
620 RESTORE 630: FOR i=SGN PI TO 9: READ c$,i1: IF l$=c$ THEN GO TO i1: NEXT i
630 DATA "nav",750,"srs",550,"lrs",1340,"pha",1430,"tor",1620,"she",1930,"dam",2010,"com",2630,"xxx",2320
640 PRINT '"Enter one of the following:"
650 PRINT "NAV (to set course)"
660 PRINT "SRS (short range sensor scan)"
670 PRINT "LRS (long range sensor scan)"
680 PRINT "PHA (to fire phasers)"
690 PRINT "TOR (to fire torpedoes)"
700 PRINT "SHE (raise or lower shields)"
710 PRINT "DAM (damage control reports)"
720 PRINT "COM (call on library-computer)"
730 PRINT "XXX (to resign your command)"
740 GO TO movs
750 REM nav=i=1
760 PRINT " 4 3 2"'" . . ."'" ..."'"5 ---*--- 1"'" ..."'" . . ."'" 6 7 8"'"Navigation course"
770 INPUT "Course (0-9)? ";c1: IF c1=9 THEN LET c1=1
780 IF c1<1 OR c1>9 THEN PRINT "Lt. Sulu reports: ""Incorrect"'"course data, Sir!""": GO TO movs
790 LET x$="8": IF d(SGN PI)<NOT PI THEN LET x$="0.2"
800 PRINT "Warp factor (0-";x$;")": INPUT "Warp? ";w1: CLS : IF d(SGN PI)<0 AND w1>.2 THEN GO TO 840
810 IF w1>0 AND w1<=8 THEN GO TO 850
820 IF NOT w1 THEN GO TO movs
830 PRINT "Chief engineer Scott reports: 'The engines won't take warp ";w1: GO TO movs
840 PRINT "Warp engines are damaged.","Maximum speed= warp .2": GO TO movs
850 LET n=INT (w1*8+.5): IF e-n>=0 THEN GO TO 890
860 PRINT "Engineering reports: "'"'Insufficient energy available for maneuvering at warp ";w1;"!"
870 IF s<n-e OR d(7)<NOT PI THEN GO TO movs
880 PRINT "Deflector control room acknow- -ledges ";s;" units of energy"'"presently deployed to shields.": GO TO movs
890 FOR i=SGN PI TO k3: IF k(i,PI)=0 THEN GO TO 920
900 LET a$=" ": LET z1=k(i,SGN PI): LET z2=k(i,2): GO SUB 3270: GO SUB 3250
910 LET k(i,SGN PI)=z1: LET k(i,2)=z2: LET a$="\k\l\m": GO SUB 3270
920 NEXT i: GO SUB 2170: LET d1=NOT PI: LET d6=w1: IF d1>=1 THEN LET d6=1
930 FOR i=SGN PI TO 8: IF d(i)>=0 THEN GO TO 980
940 LET d(i)=d(i)+d6: IF d(i)>-.1 AND d(i)<NOT PI THEN LET d(i)=-.1: GO TO 980
950 IF d(i)<NOT PI THEN GO TO 980
960 IF d1<>1 THEN LET d1=SGN PI: PRINT "Damage control report:"
970 LET r1=i: GO SUB 3310: PRINT g$;" repair completed."
980 NEXT i: IF RND>.2 THEN GO TO 1040
990 LET r1=FN w(SGN PI): IF RND>=.6 THEN GO TO 1020
1000 LET d(r1)=d(r1)-(RND*5+1): PRINT "Damage control report:"
1010 GO SUB 3310: PRINT g$;" damaged": GO TO 1040
1020 LET d(r1)=d(r1)+RND*3+SGN PI: PRINT "Damage control report:"
1030 GO SUB 3310: PRINT g$'"state of repair improved"
1040 LET a$=" ": LET z1=INT (s1): LET z2=INT (s2): GO SUB 3270
1050 LET x1=c(c1,SGN PI)+(c(c1+1,SGN PI)-c(c1,SGN PI))*(c1-INT (c1)): LET x=s1: LET y=s2
1060 LET x2=c(c1,2)+(c(c1+1,2)-c(c1,2))*(c1-INT (c1)): LET q4=q1: LET q5=q2
1070 FOR i=SGN PI TO n: LET s1=s1+x1: LET s2=s2+x2: IF s1<1 OR s1>=9 OR s2<1 OR s2>=9 THEN GO TO 1160
1080 LET s8=INT (s1)*24+INT (s2)*3-26: IF q$(s8 TO s8+2)=" " THEN GO TO 1110
1090 LET s1=INT (s1-x1): LET s2=INT (s2-x2): PRINT "Warp engines shut down at sector"
1100 PRINT s2;",";s1;" due to bad navigation": GO TO 1120
1110 NEXT i: LET s1=INT (s1): LET s2=INT (s2)
1120 LET a$="\e\f\g": LET z1=INT (s1): LET z2=INT (s2): GO SUB 3270: GO SUB 1300: LET t8=1
1130 IF w1<1 THEN LET t8=.1*INT (10*w1)
1140 LET t=t+t8: IF t>t0+t9 THEN GO TO 2290
1150 GO TO 560
1160 LET x=a8*q1+x+n*x1: LET y=a8*q2+y+n*x2: LET q1=INT (x/a8): LET q2=INT (y/a8): LET s1=INT (x-q1*a8)
1170 LET s2=INT (y-q2*a8): IF s1=0 THEN LET q1=q1-1: LET s1=a8
1180 IF NOT s2 THEN LET q2=q2-1: LET s2=a8
1190 LET x5=NOT PI: IF q1<1 THEN LET x5=SGN PI: LET q1=x5: LET s1=x5
1200 IF q1>a8 THEN LET x5=SGN PI: LET q1=a8: LET s1=q1
1210 IF q2<1 THEN LET x5=SGN PI: LET q2=SGN PI: LET s2=q2
1220 IF q2>a8 THEN LET x5=SGN PI: LET q2=a8: LET s2=q2
1230 IF NOT x5 THEN GO TO 1280
1240 PRINT "Lt. Uhura reports message from Starfleet Command:"'"'Permission to attempt crossing "
1250 PRINT "of galactic perimeter is hereby *DENIED*. Shut down your engines"
1260 PRINT "Chief engineer Scott reports: Warp engines shut down at sector";s1;",";s2;" of quadrant ";q1;",";q2;"."
1270 IF t>t0+t9 THEN GO TO 2290
1280 IF a8*q1+q2=a8*q4+q5 THEN GO TO 1120
1290 LET t=t+SGN PI: GO SUB 1300: GO TO 310
1300 LET e=e-n-10: IF e>=0 THEN RETURN
1310 PRINT "Shield control supplies energy to complete the maneuver."
1320 LET s=s+e: LET e=NOT PI: IF s<=e THEN LET s=e
1330 RETURN
1340 REM lrs=i=3
1350 IF d(PI)<NOT PI THEN PRINT "Long range sensors are inoper- -able.": GO TO movs
1360 PRINT "Long range sensor scan for"'"quadrant ";q1;",";q2;"."
1370 LET o$="███████████████████": PRINT o$
1380 FOR i=q1-1 TO q1+SGN PI: LET n(SGN PI)=-1: LET n(2)=-2: LET n(PI)=-3: FOR j=q2-1 TO q2+1
1390 IF i>0 AND i<9 AND j>0 AND j<9 THEN LET n(j-q2+2)=g(i,j): LET z(i,j)=g(i,j)
1400 NEXT j: FOR l=SGN PI TO PI: PRINT "██";: IF n(l)<NOT PI THEN PRINT "████";: GO TO 1420
1410 LET p$=STR$ ((n(l)+1000)): PRINT p$((LEN p$)-2 TO );" ";
1420 NEXT l: PRINT "█": PRINT o$: NEXT i: GO TO movs
1430 REM pha=i=4
1440 IF d(4)<NOT PI THEN PRINT "Phasers inoperative": GO TO movs
1450 IF k3<=0 THEN PRINT "Science officer Spock reports: ""Sensors show no enemy ships in this quadrant!""": GO TO movs
1460 IF d(a8)<NOT PI THEN PRINT "Computer failure hamper accur- -acy"
1470 PRINT "Phasers locked on target:"
1480 PRINT "Energy available= ";e;" units."
1490 INPUT "Number of units to fire? ";x: IF x<=NOT PI THEN GO TO movs
1500 IF e-x<NOT PI THEN GO TO 1480
1510 LET e=e-x: IF d(7)<NOT PI THEN LET x=x*RND
1520 LET h1=INT (x/k3): FOR i=SGN PI TO PI: IF k(i,PI)<=NOT PI THEN GO TO 1610
1530 LET h=INT ((h1/FN d(0))*(RND+2)): IF h>.15*k(i,PI) THEN GO TO 1550
1540 PRINT "Sensors show no damage to enemy at ";k(i,SGN PI);",";k(i,2): GO TO 1610
1550 GO SUB 3420
1560 LET k(i,PI)=k(i,PI)-h: PRINT h;" unit hit on klingon at "'"sector ";k(i,SGN PI);",";k(i,2)
1570 IF k(i,PI)<=NOT PI THEN PRINT "*** Klingon Destroyed ***": GO TO 1590
1580 PRINT "(Sensors show ";k(i,PI);" units"'"remaining)": GO TO 1610
1590 LET kk=kk+SGN PI: LET k3=k3-1: LET k9=k9-1: LET z1=k(i,SGN PI): LET z2=k(i,2): LET a$=" ": GO SUB 3270
1600 LET k(i,PI)=NOT PI: LET g(q1,q2)=g(q1,q2)-100: LET z(q1,q2)=g(q1,q2): IF k9<=NOT PI THEN GO TO 2410
1610 NEXT i: GO SUB 2170: GO TO movs
1620 REM tor=i=5
1630 IF p<=NOT PI THEN PRINT "All photon torpedoes expended": GO TO movs
1640 IF d(5)<NOT PI THEN PRINT "Photon tubes are not operational": GO TO movs
1650 INPUT "Photon torpedo course (0-9)? ";c1: IF c1=9 THEN LET c1=1
1660 IF c1>=1 AND c1<9 THEN GO TO 1680
1670 PRINT "Ensign Chekov reports:"'"""Incorrect course data, Sir!""": GO TO movs
1680 LET x1=c(c1,SGN PI)+(c(c1+1,SGN PI)-c(c1,SGN PI))*(c1-INT (c1)): LET e=e-2: LET p=p-1
1690 LET x2=c(c1,2)+(c(c1+1,2)-c(c1,2))*(c1-INT (c1)): LET x=s1: LET y=s2
1700 PRINT "Torpedo track:"
1710 LET x=x+x1: LET y=y+x2: LET x3=INT (x+.5): LET y3=INT (y+.5)
1720 IF x3<1 OR x3>8 OR y3<1 OR y3>8 THEN GO TO 1920
1730 BEEP x3/100,y3: PRINT TAB 15;x3;",";y3: LET a$=" ": LET z1=x: LET z2=y: GO SUB 3320
1740 IF z3 THEN GO TO 1710
1750 LET a$="\k\l\m": LET z1=x: LET z2=y: GO SUB 3320: IF NOT z3 THEN GO TO 1800
1760 GO SUB 3420: PRINT "** Klingon destroyed **": LET k3=k3-1: LET k9=k9-1: LET kk=kk+SGN PI: IF k9<=NOT PI THEN GO TO 2410
1770 FOR i=SGN PI TO PI: IF x3=k(i,SGN PI) AND y3=k(i,2) THEN GO TO 1790
1780 NEXT i: LET i=3
1790 LET k(i,PI)=NOT PI: GO TO 1900
1800 LET a$=" \n ": LET z1=x: LET z2=y: GO SUB 3320: IF NOT z3 THEN GO TO 1820
1810 PRINT "Star at ";x3;",";y3;" absorbed "'"torpedo energy.": GO SUB 2170: GO TO movs
1820 LET a$="\b\c\d": LET z1=x: LET z2=y: GO SUB 3320: IF NOT z3 THEN GO TO 1650
1830 GO SUB 3420: GO SUB 3420: PRINT "*** STARBASE DESTROYED***": LET b3=b3-1: LET b9=b9-1: LET t9=t9-3: PRINT "*** KLINGON CONQUEST ADVANCES BY THREE DAYS ***"
1840 IF b9>0 OR k9>t-t0-t9 THEN GO TO 1880
1850 PRINT "That does it, Captain!! You are hereby relieved of command and"
1860 PRINT "sentenced to 99 stardates at hard labor on Cygnus 12!!"
1870 GO TO 2330
1880 PRINT "Starfleet Command reviewing yourrecord to consider court martial"
1890 LET d0=0
1900 LET z1=x: LET z2=y: LET a$=" ": GO SUB 3270
1910 LET g(q1,q2)=k3*100+b3*10+s3: LET z(q1,q2)=g(q1,q2): GO SUB 2170: GO TO movs
1920 PRINT "Torpedo missed!": GO SUB 2170: GO TO movs
1930 REM she=i=6
1940 IF d(7)<NOT PI THEN PRINT "Shield control inoperable": GO TO movs
1950 PRINT "Energy available= ";e+s: INPUT "Number of units to shields? ";x
1960 IF x<NOT x OR s=x THEN PRINT "<Shields unchanged>": GO TO movs
1970 IF x<=e+s THEN GO TO 2000
1980 PRINT "Shield control reports:"'"This is not the Federation"'"treasury!!!'"
1990 PRINT ">Shields unchanged>": GO TO movs
2000 LET e=e+s-x: LET s=x: PRINT "Deflector control room report: Shields now at ";INT s;" units per"'"your command.": GO TO movs
2010 REM dam=i=7
2020 IF d(6)>=0 THEN GO TO 2130
2030 PRINT "Damage control report not avail--able.": IF NOT d0 THEN GO TO movs
2040 LET d3=NOT PI: FOR i=SGN PI TO 8: IF d(i)<NOT PI THEN LET d3=d3+.1
2050 NEXT i: IF NOT d3 THEN GO TO movs
2060 PRINT : LET d3=d3+d4: IF d3>=1 THEN LET d3=.9
2070 PRINT "Technicians standing by to","effect repairs to your ship."
2080 PRINT "Estimated time to repair: ";.01*INT (100*d3);" stardates."
2090 INPUT "Will you authorize the repair order? (y/n) "; LINE a$
2100 IF a$<>"y" THEN GO TO movs
2110 FOR i=SGN PI TO 8: IF d(i)<NOT PI THEN LET d(i)=0
2120 NEXT i: LET t=t+d3+.1
2130 PRINT '"Device"," State of repair": FOR w=SGN PI TO 8: LET r1=w
2140 GO SUB 3310: PRINT g$;z$(1 TO 25-(LEN g$));INT (d(w)*100)*.01
2150 NEXT w: PRINT : IF d0 THEN GO TO 2040
2160 GO TO movs
2170 IF k3<=NOT PI THEN RETURN
2180 IF d0<>0 THEN PRINT "Starbase shields protect the Enterprise.": RETURN
2190 FOR i=SGN PI TO PI: IF k(i,PI)<=NOT PI THEN GO TO 2270
2200 LET h=INT ((k(i,PI)/FN d(SGN PI))*(2+RND)): LET s=s-h: LET k(i,PI)=k(i,PI)/(3+RND)
2210 GO SUB 3420: PRINT h;" unit hit on Enterprise "'"from sector ";k(i,SGN PI);",";k(i,2)
2220 IF s<=NOT PI THEN GO TO 2300
2230 PRINT "<Shields down to ";s;" units>": IF h<20 THEN GO TO 2270
2240 IF RND>.6 OR h/s<=.02 THEN GO TO 2270
2250 LET r1=FN w(SGN PI): LET d(r1)=d(r1)-h/s-.5*RND: GO SUB 3310
2260 PRINT "Damage control reports:"'g$;" damaged"'"by the hit."
2270 NEXT i: RETURN
2280 REM end: CLS
2290 PRINT "It is stardate ";t: GO TO 2330
2300 CLS : PRINT "The Enterprise has been destroy--ed. The Federation will be"
2310 PRINT "conquered": GO TO 2290
2320 REM xxx=i=9
2330 PRINT "There were ";k9;" Klingin battle"'"cruisers left at the end of your"
2350 PRINT "mission"''': IF NOT b9 THEN GO TO 2400
2360 PRINT "The Federation is in need of a"
2370 PRINT "new starship commander for a "
2380 PRINT "similar mission -- If there is a"'"a volunteer, let him step"
2390 PRINT "forward and enter 'aye'": INPUT LINE a$: IF a$="aye" THEN GO TO 10
2400 STOP
2410 PRINT "Congratulations, Captain! The"'"last battle cruiser menacing the"
2420 PRINT "the Federation has been destroy--ed.": PRINT
2430 PRINT "Your efficiency rating is ";1000*(k7/(t-t0))^2: GO TO 2350
2440 FOR i=s1-1 TO s1+SGN PI: FOR j=s2-1 TO s2+1
2450 IF INT (i+.5)<1 OR INT (i+.5)>8 OR INT (j+.5)<1 OR INT (j+.5)>8 THEN GO TO 2470
2460 LET a$="\b\c\d": LET z1=i: LET z2=j: GO SUB 3320: IF z3=1 THEN GO TO 2480
2470 NEXT j: NEXT i: LET d0=NOT PI: GO TO 2500
2480 LET d0=SGN PI: LET c$="DOCKED": LET e=e0: LET p=p0
2490 PRINT "Shields dropped for docking","purposes.": LET s=NOT PI: GO TO 2520
2500 IF k3>0 THEN LET c$=CHR$ VAL "16"+CHR$ VAL "9"+CHR$ VAL "17"+CHR$ VAL "2"+" RED ": GO TO 2520
2510 LET c$=CHR$ VAL "16"+CHR$ VAL "9"+CHR$ VAL "17"+CHR$ VAL "4"+" GREEN ": IF e<e0*.1 THEN LET c$=CHR$ VAL "17"+CHR$ VAL "6"+"YELLOW "
2520 IF d(2)>=0 THEN CLS : PRINT ,,: PAPER 0: INK 7: GO TO 2540
2530 PRINT '"**Short range sensors are out **"'': RETURN
2540 LET o$=" ": PRINT TAB 6;o$: FOR i=SGN PI TO 8: LET j=(i-1)*24+SGN PI: PRINT TAB 6;" ";q$(j TO j+23);" ": NEXT i
2550 PRINT TAB 6;o$: PAPER 7: INK NOT PI: PRINT AT 12,NOT PI;
2560 IF kk>3 THEN LET kk=NOT PI: LET t9=t9+3: PRINT "Defeat of KLINGON wave sets"'"KLINGON plan back three days"
2570 PRINT AT 0,1;"STARDATE ";INT (t*10)*.1;AT 0,19;"CODE ";c$;AT 14,0;
2580 PRINT "QUADRANT ";q1;",";q2;TAB 15;"SECTOR ";s1;",";s2
2590 PRINT "PHOTON TORPODOES ";INT (p)
2600 PRINT "TOTAL ENERGY ";INT (e+s);TAB 20;"SHIELDS ";INT (s)
2610 PRINT "KLINGONS REMAINING ";INT (k9)
2620 RETURN
2630 REM com=i=8
2640 IF d(a8)<NOT PI THEN PRINT "Computer disabled": GO TO movs
2650 INPUT "Computer active and awaiting"'"command (0-5, 6=Index) ";a: CLS : IF a<NOT PI THEN GO TO movs
2660 IF a=0 THEN GO TO 2800
2670 IF a=1 THEN GO TO 2910
2680 IF a=2 THEN GO TO 2970
2690 IF a=3 THEN GO TO 3230
2700 IF a=4 THEN GO TO 3030
2710 IF a=5 THEN GO TO 2790
2720 PRINT "Functions available:"
2730 PRINT "0- Cumulative galactic record"
2740 PRINT "1- Status report"
2750 PRINT "2- Photon torpedo data"
2760 PRINT "3- Starbase nav. data"
2770 PRINT "4- Direction/distance calculator"
2780 PRINT "5- Galaxy region name map": GO TO 2650
2790 LET h8=NOT PI: LET g5=SGN PI: PRINT TAB 10;"The Galaxy"
2800 IF a THEN LET h8=1
2810 PRINT "Computer record of galaxy for quadrant ";q1;",";q2
2820 PRINT " 1 2 3 4 5 6 7 8"
2830 LET o$="███ ███ ███ ███ ███ ███ ███ ███"
2840 PRINT o$: FOR i=SGN PI TO 8: IF NOT h8 THEN GO TO 2880
2850 FOR j=SGN PI TO 8: PRINT " ";: IF z(i,j)=0 THEN PRINT "███";: GO TO 2870
2860 LET p$=STR$ ((z(i,j)+1000)): PRINT p$(LEN p$-2 TO );
2870 NEXT j: GO TO 2900
2880 LET z4=i: LET z5=SGN PI: GO SUB 3360: PRINT TAB 0;g$;
2890 LET z5=5: GO SUB 3360: PRINT TAB 19;g$;
2900 PRINT 'o$: NEXT i: PRINT : GO TO movs
2910 PRINT "Status report:": LET x$="": IF k9>1 THEN LET x$="s"
2920 PRINT "Klingon ";x$;" left: ";k9
2930 PRINT "Mission must be completed in "'.1*INT ((t0+t9-t)*10);" stardates"
2940 LET x$="s": IF b9<2 THEN LET x$="": IF b9<1 THEN PRINT "Your stupidity has left you on your own in the galaxy -- You have no starbases left!": GO TO 2020
2950 PRINT "The Federation is maintaining"'b9;" starbase";x$;" in the galaxy."
2960 GO TO 2020
2970 IF k3<=NOT PI THEN GO TO 1450
2980 LET x$="": IF k3>1 THEN LET x$="s"
2990 PRINT "From Enterprise to Klingon"'"battle cruiser";x$
3000 LET h8=NOT PI: FOR i=SGN PI TO PI: IF k(i,PI)<=NOT PI THEN GO TO 3220
3010 LET w1=k(i,SGN PI): LET x=k(i,2)
3020 LET c1=s1: LET a=s2: GO TO 3070
3030 PRINT "Direction/distance calculator"
3040 PRINT "You are at quadrant ";q1;",";q2'"Sector ";s1;",";s2
3050 PRINT "Please enter initial coordinates": INPUT "(x,y) ";c1,a
3060 PRINT "Final coordinates ": INPUT "(x,y) ";w1,x
3070 LET x=x-a: LET a=c1-w1: IF x<NOT PI THEN GO TO 3150
3080 IF a<NOT PI THEN GO TO 3170
3090 IF x>0 THEN GO TO 3110
3100 IF NOT a THEN LET c1=5: GO TO 3120
3110 LET c1=1
3120 IF ABS a<=ABS x THEN GO TO 3140
3130 PRINT "Direction= ";c1+(((ABS (a)-ABS (x))+ABS (a))/ABS (a)): GO TO 3210
3140 PRINT "Direction= ";c1+(ABS (a)/ABS (x)): GO TO 3210
3150 IF a>0 THEN LET c1=3: GO TO 3180
3160 IF x THEN LET c1=5: GO TO 3120
3170 LET c1=7
3180 IF ABS a>=ABS x THEN GO TO 3200
3190 PRINT "Direction= ";c1+(((ABS (x)-ABS (a))+ABS (x))/ABS (x)): GO TO 3210
3200 PRINT "Direction= ";c1+(ABS (x)/ABS (a)): GO TO 3210
3210 PRINT "Distance= ";SQR ((x*x)+(a*a)): IF h8=1 THEN GO TO movs
3220 NEXT i: GO TO movs
3230 IF b3 THEN PRINT "From Enterprise to starbase:": LET w1=b4: LET x=b5: GO TO 3020
3240 PRINT "Mr. Spock reports: 'Sensors showno starbases in this quadrant.'": GO TO movs
3250 LET r1=FN w(SGN PI): LET r2=FN w(SGN PI): LET a$=" ": LET z1=r1: LET z2=r2: GO SUB 3320: IF NOT z3 THEN GO TO 3250
3260 RETURN
3270 LET s8=INT (z2-.5)*3+INT (z1-.5)*24+1
3280 IF LEN a$<>3 THEN PRINT "ERROR": STOP
3290 LET q$=(q$( TO 189)+a$ AND s8=190)+(a$+q$(4 TO ) AND s8=1): RETURN
3300 LET q$=q$(1 TO s8-1)+a$+q$(192-(190-s8)+1 TO ): RETURN
3310 LET g$=("warp engines" AND r1=1)+("short range sensors" AND r1=2)+("long range sensors" AND r1=3)+("phaser control" AND r1=4)+("photon tubes" AND r1=5)+("damage control" AND r1=6)+("shield control" AND r1=7)+("library-computer" AND r1=8): RETURN
3320 LET z1=INT (z1+.5): LET z2=INT (z2+.5): LET s8=(z2-1)*3+(z1-1)*24+SGN PI: LET z3=0
3330 IF q$(s8 TO s8+2)<>a$ THEN RETURN
3340 LET z3=SGN PI: RETURN
3350 STOP
3360 IF z5>4 THEN GO TO 3380
3370 LET g$=("Antares" AND z4=1)+("Rigel" AND z4=2)+("Procyon" AND z4=3)+("Vega" AND z4=4)+("Canopus" AND z4=5)+("Altair" AND z4=6)+("Sagittarius" AND z4=7)+("Pollux" AND z4=8): GO TO 3390
3380 LET G$=("Sirius" AND z4=1)+("Deneb" AND z4=2)+("Capella" AND z4=3)+("Betelgeuse" AND z4=4)+("Aldebaran" AND z4=5)+("Regulus" AND z4=6)+("Arcturus" AND z4=7)+("Spica" AND z4=8)
3390 IF g5=1 THEN RETURN
3400 LET g$=g$+(" I" AND (z5=1 OR z5=5))+(" II" AND (z5=2 OR z5=6))+(" III" AND (z5=3 OR z5=7))+(" IV" AND (z5=4 OR z5=8))
3410 RETURN
3420 SOUND 6,6;7,7;8,16;9,16;10,16;12,56;13,a8: PAUSE 90: SOUND 8,0;9,0;10,NOT PI: RETURN
3430 REM SCREEN$ setup
3440 BRIGHT NOT PI: BORDER 7: PAPER 7: INK 4: CLS : LET a8=8
3450 PRINT "********************************* * * SUPER STAR TREK * * *********************************": PRINT
3460 INK SGN PI
3470 PLOT 64,48: RESTORE 3470: FOR t=SGN PI TO 33: READ t0,t9: DRAW t0,t9: NEXT t
3480 DATA 40,NOT PI,a8,a8,24,NOT PI,a8,a8,32,NOT PI,12,a8,NOT PI,a8,-26,NOT PI,24,24,54,NOT PI,a8,a8,-106,NOT PI,a8,-8
3490 DATA 18,NOT PI,-24,-24,-58,NOT PI,-16,16,26,NOT PI,a8,a8,-16,NOT PI,-a8,a8,-a8,NOT PI,-a8,a8,-24,NOT PI,-a8,-a8,-a8,NOT PI,-a8,-a8,-16,NOT PI,a8,-a8,46,NOT PI,16,-16,-40,NOT PI,32,-32
3500 INK 4: CIRCLE 52,123,2: CIRCLE 52,123,PI: INK 2
3510 FOR t=60 TO 90 STEP 10: CIRCLE t,67,2: NEXT t
3520 BEEP .7,NOT PI: BEEP .3,20: PRINT AT 20,11; PAPER 0; INK 6; BRIGHT 1;"STANDBY!"
3530 PRINT AT 4,1;"THE USS ENTERPRISE --- NCC-1701"
3540 PRINT AT 17,PI;"MISSION BEING TRANSMITTED";AT 18,7;"BY STAR BASE ALPHA"
3550 REM set game variables
3560 LET z$=" ": LET movs=570
3570 DIM g(a8,a8): DIM c(9,2): DIM k(4,4): DIM r(4,4): DIM n(PI): DIM z(a8,a8): DIM d(a8)
3580 RESTORE 3640: FOR t=NOT PI TO 47: READ s: POKE USR "\b"+t,s: NEXT t
3590 FOR t=NOT PI TO 31: READ s: POKE USR "\k"+t,s: NEXT t
3600 FOR t=NOT PI TO 23: READ s: POKE USR "\r"+t,s: NEXT t
3610 LET t=INT (RND*27+23)*101: LET t0=t: LET t9=33+INT (RND*10): LET d0=NOT PI: LET e=5000: LET e0=e
3620 LET b9=NOT PI: LET k9=b9: LET r9=b9
3630 LET p=10: LET p0=p: LET s9=200: LET s=NOT PI: LET x$="": LET y$=" is "
3640 DATA 63,108,252,252,252,108,61,40
3650 DATA 255,NOT PI,255,137,238,41,239,0
3660 DATA 252,54,63,63,63,54,60,20
3670 DATA 255,127,1,1,15,7,NOT PI,0
3680 DATA PI,31,6,28,254,252,120,0
3690 DATA 192,248,NOT PI,7,4,6,4,7
3700 DATA NOT PI,7,15,6,NOT PI,NOT PI,7,0
3710 DATA 14,63,255,31,63,126,252,24
3720 DATA NOT PI,128,192,137,10,12,10,9
3730 DATA 118,145,149,31,248,169,137,110
3740 DATA 3,7,15,95,127,127,65,64
3750 DATA 248,252,254,255,255,255,240,224
3760 DATA NOT PI,NOT PI,NOT PI,79,201,207,74,73
3770 PRINT #1; PAPER 7; INK 4;"(HIT ENTER)": PAUSE NOT PI: CLS : RETURN
3790 CLEAR : SAVE "supertrek" LINE PI
Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.
