--- title: "Starfleet 2068" type: "article" slug: "starfleet-2068" url: "http://localhost/article/starfleet-2068/" markdown_url: "http://localhost/article/starfleet-2068.md" published_at: "2024-01-07T21:45:19+00:00" modified_at: "2026-06-21T23:23:12+00:00" featured_image: url: "http://localhost/wp-content/uploads/2022/04/20230809-041332.jpg" excerpt: "STARFLEET 2068 is an all BASIC, low-resolution graphics, shoot 'em up space wars game for the Timex Sinclair 2068. Scenerio: In the late 1990s, NASA finally perfected the first WARP DRIVE engine. Earth Federation, a joint US-Canada-European space agency quickly arose to control deep space exploration. Over the first several decades, 9 major STAR BASES…" category: - name: "Time Designs Magazine" slug: "time-designs" taxonomy: "category" url: "http://localhost/category/periodicals/time-designs/" post_tag: - name: "Downloadable" slug: "downloadable" taxonomy: "post_tag" url: "http://localhost/tag/downloadable/" - name: "Full Text" slug: "fulltext" taxonomy: "post_tag" url: "http://localhost/tag/fulltext/" - name: "TS 2068" slug: "ts2068" taxonomy: "post_tag" url: "http://localhost/tag/ts2068/" - name: "Type-in program" slug: "type-in-program" taxonomy: "post_tag" url: "http://localhost/tag/type-in-program/" model: - name: "Timex/Sinclair 2068" slug: "ts-2068" taxonomy: "model" url: "http://localhost/model/ts-2068/" indiv: - name: "Stan Lemke" slug: "stan-lemke" taxonomy: "indiv" url: "http://localhost/indiv/stan-lemke/" publication_r: id: 10277 title: "Time Designs Magazine" type: "periodical" url: "http://localhost/periodical/time-designs-magazine/" authors: "Stan Lemke" volume: "3" issue: "5" issues_articles: - id: 36803 title: "Time Designs Magazine v3 n5" type: "issue" url: "http://localhost/issue/time-designs-magazine-v3-n5/" pages: "8-13" pubdate: "July/August 1987" archive_link: false article_media: - id: 52665 title: "Starfleet 2068" type: "computer_media" url: "http://localhost/computer_media/starfleet-2068/" --- # Starfleet 2068 STARFLEET 2068 is an all BASIC, low-resolution graphics, shoot ’em up space wars game for the Timex Sinclair 2068. **Scenerio:**In the late 1990s, NASA finally perfected the first WARP DRIVE engine. Earth Federation, a joint US-Canada-European space agency quickly arose to control deep space exploration. Over the first several decades, 9 major STAR BASES were constructed; 1 at the edge of our solar system, and 8 others nearly equidistant from this home base. The year is now 2068 AD. After nearly 70 years of exploration, it was beginning to look like we were alone in the galaxy…until THEY appeared. They made no effort to answer our communications, gave no sign of peaceful intent–and as far as we know, might be purely mechanical (computerized) devices. They simply came, destroying everything in their paths. They caught us by surprise. After 70 years of uninterrupted peace in space, Earth Federation had only 1 armed Star Ship left in space active service–the STRATA-GEM. The ship was hastily fueled, its crew briefed, and as the aliens were about to attack Star Bases 1 and 8, the STRATA-GEM was launched to meet the attackers. YOU are the CAPTAIN. Battle Stations are sounding. Good Luck! **Armaments:** The Strata-Gem has Electro-Magnet “shields” to repel the enemy weapons. Full strength is 10. If they go to zero, good bye! **Weapons:** You have Photon Torpedos (for longer range shots) and Phasor weapons.(for closer range shots). The number of each depends on the level of difficulty. **Sensors:** Sensor range is 3 parsecs, at full strength, but will vary on shield strength (ship damage). **Engines:** You have WARP Speed capability (Warp 1 to 3). You have 20 units of fuel. (Note: the faster you go, the more fuel you use!!) WARP 1 moves you 1 parsec (row and/or column) per move, WARP 2 moves you 2 rows and/or columns per move, etc. If you run out of fuel, good bye! **Docking:** You must DOCK to refuel, repair, restock armament, etc. The Star Base will not lower its shields (necessary for you to dock) if there are enemy ships in the quadrant. **Surprises:**Yes, there are a few. If a Base refuses to lower its shields, try-try again. You may have just been a “Bad Captain” and need to pay penance! There are 6 levels of difficulty! ## How to Play STARFLEET 2068 has 2 screens, the navigation screen and the weapons/tactical screen. The navigation screen shows you a map of the galaxy: stars, bases, your ship, the enemy ships. The weapon/tactical screen shows you a “close-up” view around your ship, also the range of your sensors (a circle). Anything inside this circle is “fair game” for your weapons. On the Navigation screen, “HELM AT YOUR CONTROL” will flash, telling you that it is your turn to make a move. Use the joystick to command your ship to make a move. You can change the WARP SPEED by pressing numbers 1 to 3. Press “D” to DOCK, press “W” to go to the WEAPONS screen. NOTE: to DOCK, you must “fly” your ship into the STAR BASE User Defined Graphic you wish to dock with. Then on the next turn you command “D” (dock). DON’T try to fly thru stars or other ships! Press “0” (zero) for no move, as in station keeping. On the Weapons screen, you will see the map “closeup”. Here you will see that Docking really places you just beside a STAR BASE. “WORKING!” will flash when you first go to this screen. The program is calculating the range, distance, position of everything for this new display. When the screen is completed, you will see your ship (center of the circle) with a User Defined Graphic flashing on it. This is your weapons “cross-hairs” for aiming at a specific target. Use your joystick to position this on the target of your choice. When ready, press fire. At any point prior to pressing fire, you can select your weapon: press “T” for torpedo, “P” for phaser weapon. If you shoot at yourself, this is a signal to abort the shot. Press “N” to go to the Navigation screen. ## Note The program abounds with REM statements. These are quite helpful for programming/debugging purposes, but if you remove these from your “working” copy, you will increase the program speed by at least 25%. ## Source Code: Starfleet 2068 ``` 1 REM Time Designs Magazine 2 REM archive.org/details/TimeDesigns/Time%20Designs%20v3%20n5 10 REM *********************** 20 REM S T A R F L E E T 2068 AD 30 REM *********************** 40 REM S D Lemke 50 REM *********************** 60 DEF FN a(r)=INT (r/32) 70 DEF FN b(c)=c-FN a(c)*32 80 DEF FN c(r,c)=INT (r*32+c) 90 DEF FN d(x)=FN b(x)*8-4 100 DEF FN e(x)=171-FN a(x)*8 110 DEF FN f(x)=INT ((176-x)/8) 120 DEF FN g(x)=INT (x/8) 130 DEF FN h()=INT ((PEEK 23674*65536+PEEK 23673*256+PEEK 23672)/60) 140 GO TO 3510: REM START 150 REM 160 REM *** Clear Messages *** 170 REM 180 PRINT AT 19,0;TAB 31;" ";TAB 31;" ";TAB 31;" ": RETURN 190 PRINT AT 17,0;TAB 31;" ";TAB 31;" ";TAB 31;" ": RETURN 200 PRINT AT 19,0;TAB 31;" ";TAB 31;" ";TAB 31;" ": PRINT #0;AT 0,0;TAB 31;" ";TAB 31;" ": RETURN 210 PRINT AT 0,10;"Time = ";FN h(): RETURN 220 PRINT AT 16,10;"Time = ";FN h();TAB 31;" ": RETURN 230 SOUND 0,t(1);1,t(2);2,t(3);3,t(4);4,t(5);5,t(6);6,t(7);7,t(8);8,t(9);9,t(10);10,t(11);11,t(12);12,t(13);13,t(14): PAUSE 15: SOUND 8,0;9,0;10,0: RETURN 240 REM 250 REM *** Fuel Status *** 260 REM 270 LET i=INT (fuel+.99): IF fuel<0 THEN CLS : PRINT "******************************** You have run out of fuel! The Federation is doomed. Your ship is lost. *******************************": GO TO 3940 280 FOR j=1 TO i: GO SUB 210: LET f$(j)="\::": NEXT J: FOR j=(i+1) TO 20: LET f$(j)=" ": NEXT j: PRINT AT 18,0;" " 290 IF i>=10 THEN PRINT AT 18,0;"FUEL = "; INK 4;f$;TAB 28; INK 9;fuel 300 IF i>5 AND i<10 THEN PRINT AT 18,0;"FUEL = "; INK 6;f$;TAB 28; INK 9;fuel 310 IF i<=5 THEN PRINT AT 18,0;"FUEL = "; INK 2;f$;TAB 26; INK 9;fuel 320 REM 330 REM *** Weapons Status *** 340 REM 350 PRINT #0;AT 0,0;"Torpedo= ";pt;TAB 18;"Phaser= ";ph;TAB 31;" " 360 PRINT #0;AT 1,0;"Shields = ";INT (sh*10)/10;TAB 18;"Sensors = ";INT (sn*10)/10;TAB 31;" ": RETURN 370 REM 380 REM 390 FOR i=1 TO 10: GO SUB 210: LET b(i,1)=FN a(l(i)): LET b(i,2)=FN b(l(i))-1: NEXT i: FOR i=1 TO 9: LET c(i,1)=FN a(l(i+10)): LET c(i,2)=FN b(l(i+10))-1: NEXT i: LET d(1)=FN a(l(31)): LET d(2)=FN b(l(31))-1: LET c(21,1)=d(1): LET c(21,2)=d(2) 400 PRINT AT 0,0; INK ik7;a$ 410 LET je=0: FOR i=1 TO 10: GO SUB 210: IF l(i)>0 AND l(i)<704 THEN PRINT AT b(i,1),b(i,2); INK ik5;"\f": LET je=je+1: LET g(je)=i 420 NEXT i 430 FOR i=1 TO 9: GO SUB 210: IF l(i+10)>0 AND l(i+10)<704 THEN PRINT AT c(i,1),c(i,2); INK ik1;"\e" 440 NEXT i 450 PRINT AT d(1),d(2); INK ik0;"\a" 460 GO TO 270 470 REM 480 REM ******* Read Joystix **** 490 REM 500 OUT 245,14: LET stk=IN 5110: IF stk<128 THEN LET b$=CHR$ 13: LET stk=0: RETURN 510 LET stk=255-stk: RETURN 520 REM 530 REM *** Target Lock *** 540 REM 550 LET dlx=(x2-x1)/20: LET dly=(y2-y1)/20: IF ABS dlx<=1 AND ABS dly<=1 THEN RETURN 560 PRINT AT 18,0;TAB 31;" ";TAB 6; FLASH 1;"Locking onto Target!"; FLASH 0;TAB 31;" " 570 FOR k=5 TO 20: GO SUB 220: LET xp=x1+INT (dlx*k): LET yp=y1+INT (dly*k): IF POINT (xp,yp) THEN GO TO 590 580 NEXT k: GO SUB 180: RETURN 590 IF ABS (x2-xp)<=4 AND ABS (y2-yp)<=4 THEN GO SUB 180: RETURN 600 LET x2=xp: LET y2=yp: LET rx=FN f(y2): LET cx=FN g(x2): GO SUB 180: RETURN 610 REM 620 REM **** Nav Menu **** 630 REM 640 LET move=0: GO SUB 390: LET tim0=FN h() 650 GO SUB 180 660 LET timer=FN h()+20-rank*2: PRINT AT 21,0; FLASH 1;"NAVIGATION"; FLASH 0;" WEAPONS DOCK" 670 GO SUB 210 680 LET b$=INKEY$ 690 IF FN h()>timer THEN GO TO 1130 700 IF b$="w" OR b$="W" THEN GO TO 1580 710 IF b$="d" OR b$="D" THEN GO TO 1400 720 IF b$="n" OR b$="N" THEN GO TO 750 730 GO SUB 500: IF stk<>0 THEN GO TO 750 740 IF b$<>CHR$ 13 THEN GO TO 670 750 REM 760 REM *** Navigation *** 770 REM 780 IF wf>mwf THEN LET wf=mwf 790 GO SUB 180 800 LET tim0=FN h(): PRINT AT 20,0; FLASH 1;" Helm at your command ";AT 19,8; FLASH 0;"Warp Factor = ";wf: LET ist=0 810 GO SUB 210: LET b$=INKEY$: GO SUB 500: IF b$="0" OR stk<>0 THEN LET ist=1: PRINT AT d(1),d(2); PAPER ik3;" ": IF s(1)<>0 AND s(2)<>0 THEN PRINT AT s(1),s(2); INK ik1;"\e": LET s(1)=0: LET s(2)=0 820 IF b$>="1" AND b$<="3" THEN LET wf=(CODE b$)-48: PRINT AT 19,8;"Warp Factor = ";wf: GO TO 810 830 IF b$="w" OR b$="W" THEN GO TO 1580 840 IF b$="d" OR b$="D" THEN GO TO 1400 850 IF FN h()-tim0>=20-rank*2 THEN GO TO 1130 860 IF b$=CHR$ 13 THEN GO TO 650 870 IF ist=0 THEN GO TO 810 880 GO SUB 180 890 REM 900 REM *** Your move *** 910 REM 920 IF stk>=4 AND stk<=6 THEN LET d(2)=d(2)-(d(2)>0)*wf: LET qd=1 930 IF stk=6 OR stk=2 OR stk=10 THEN LET d(1)=d(1)+(d(1)<17)*wf: LET qd=2 940 IF stk=1 OR stk=5 OR stk=9 THEN LET d(1)=d(1)-(d(1)>0)*wf: LET qd=3 950 IF stk>=8 AND stk<=10 THEN LET d(2)=d(2)+(d(2)<31)*wf: LET qd=4 960 IF qd=4 THEN PRINT AT d(1),d(2); INK ik0;"\d" 970 IF qd=3 THEN PRINT AT d(1),d(2); INK ik0;"\a" 980 IF qd=2 THEN PRINT AT d(1),d(2); INK ik0;"\c" 990 IF qd=1 THEN PRINT AT d(1),d(2); INK ik0;"\b" 1000 GO SUB 210: LET c(21,1)=d(1): LET c(21,2)=d(2): LET move=0: LET fuel=fuel-wf*wf: GO SUB 270 1010 LET l(31)=FN c(d(1),d(2))+1 1020 REM 1030 REM *** ck collision *** 1040 REM 1050 FOR i=20 TO 30: GO SUB 210: IF l(31)=l(i) THEN CLS : PRINT "******************************** You have just run into a Star and were Vaporized! The Federation is doomed. ********************************": GO TO 3940 1060 NEXT i 1070 FOR j=1 TO je: LET i=g(j): IF l(31)=l(i) THEN GO TO 1090 1080 NEXT j: GO TO 1130 1090 GO SUB 2620: LET je=je-1: FOR k=i TO je: LET g(k)=g(k+1): NEXT k 1100 REM 1110 REM *** move aliens *** 1120 REM 1130 GO SUB 180: FOR j=1 TO je: LET i=g(j): IF i>=6 AND i<=10 THEN GO SUB 210: IF l(i)>0 THEN PRINT AT b(i,1),b(i,2); INK ik3;"\f": LET b(i,1)=b(i,1)+(c(b1,1)-b(i,1))*RND/2: LET b(i,2)=b(i,2)+(c(b1,2)-b(i,2))*RND/2: PRINT AT b(i,1),b(i,2); INK ik5;"\f": LET l(i)=FN c(INT (b(i,1)+0.5),INT b(i,2)+0.5)+1 1140 IF i>=1 AND i<=5 THEN GO SUB 210: IF l(i)>0 THEN PRINT AT b(i,1),b(i,2); INK ik3;"\f": LET b(i,1)=b(i,1)+(c(b2,1)-b(i,1))*RND/2: LET b(i,2)=b(i,2)+(c(b2,2)-b(i,2))*RND/2: PRINT AT b(i,1),b(i,2); INK ik5;"\f": LET l(i)=FN c(INT (b(i,1)+0.5),INT (b(i,2)+0.5)+1) 1150 REM 1160 REM *** ck collision 1170 REM 1180 IF l(i)=l(31) THEN GO SUB 2620: PRINT AT d(1),d(2); INK ik0;"\a": LET je=je-1: FOR k=i TO je: LET g(k)=g(k+1): NEXT k 1190 REM 1200 REM ** Star Base Stats *** 1210 REM 1220 IF i>=6 AND i<=10 THEN GO SUB 210: IF l(i)=l(b1+10) THEN LET l(b1+10)=0: PRINT AT 20,0;"Star Base ";b1;" has been destroyed.": PAUSE 60: LET b1=b1+1: LET s(1)=0: LET s(2)=0 1230 IF i>=1 AND i<=5 THEN GO SUB 210: IF l(i)=l(b2+10) THEN LET l(b2+10)=0: PRINT AT 20,0;"Star Base ";b2;" has been destroyed.": PAUSE 60: LET b2=b2-1: LET s(1)=0: LET s(2)=0 1240 NEXT j 1250 IF l(19)=0 THEN LET b1=21: LET b2=21 1260 IF b210 THEN LET b2=9: LET b1=9 1270 IF b1=10 THEN LET b2=21: LET b1=21 1280 IF b2=8 AND b1>=9 THEN LET b1=21: LET b2=21 1290 REM 1300 REM *** Alien Attack *** 1310 REM 1320 LET x2=FN d(l(31)): LET y2=FN e(l(31)): LET hit=0: LET dmg=0: FOR j=1 TO je: LET i=g(j): GO SUB 210: IF ABS (b(i,1)-d(1))<=(1+rank/6) AND ABS (b(i,2)-d(2))<=(1+rank/6) THEN LET hit=hit+1: LET dmg=dmg+RND*.5*hit: LET x1=FN d(l(i)): LET y1=FN e(l(i)): PLOT INK ik5;x1,y1: DRAW INK ik5;(x2-x1),(y2-y1): BEEP .3,45: PLOT INK ik3;x1,y1: DRAW INK ik3;(x2-x1),(y2-y1): PRINT AT b(i,1),b(i,2); INK ik5;"\f": PRINT AT d(1),d(2); INK ik0;"\a" 1330 NEXT j: IF hit>0 THEN GO SUB 180: PRINT AT 20,0;"Damage Control: ";hit;" hits on shield" 1340 LET sh=sh-dmg: IF sh<=0 THEN CLS : PRINT "******************************** Your shields have gone down. Emergency procedures are in effect. Abandon Ship !!! ********************************";''';"You successfully destroyed ";score;"enemy ships. Thankyou for a goodgame!";''';"********************************Total mission time: ";FN h();" seconds";';"********************************": PAUSE 0: GO TO 3510 1350 IF hit>0 AND sh<5 THEN LET sn=sh*.6 1360 IF hit>0 AND sh<5 THEN LET mwf=INT (sh*.4+1) 1370 GO SUB 350: IF hit>0 THEN PAUSE 200 1380 IF move THEN GO TO 650 1390 GO TO 750 1400 REM 1410 REM *** Star Base Dock *** 1420 REM 1430 GO SUB 180: LET move=1: GO SUB 210: FOR i=11 TO 19: IF l(31)=l(i) THEN GO TO 1450 1440 NEXT i: GO SUB 200: PRINT AT 20,0;"You are not in a Star Base orbit"; FLASH 1;AT 21,4;"Docking is not possible!": GO SUB 210: PAUSE 90: GO SUB 210: PAUSE 90: GO SUB 210: GO SUB 180: GO SUB 350: GO TO 1130 1450 GO SUB 210: LET s(1)=d(1): LET s(2)=d(2): FOR j=1 TO je: LET i=g(j): GO SUB 210: IF (ABS (b(i,1)-d(1))+ABS (b(i,2)-d(2)))<=(2+rank-1) THEN GO SUB 200: PRINT AT 20,0;"Star Base will not lower their shields because there are enemy": PRINT #0;AT 0,0;" ships in the quadrant !": GO SUB 210: PAUSE 90: GO SUB 210: PAUSE 90: GO SUB 200: GO SUB 350: GO TO 1130 1460 NEXT j: IF dock=1 THEN GO SUB 200: PRINT AT 20,3;"Docking orbit is verified.";TAB 6;"Supply is initiated.": LET fuel=fuel+INT (RND*40): LET sh=sh+INT (RND*20): LET sn=sn+INT (RND*6): LET pt=pt+INT (RND*10): LET ph=ph+INT (RND*10): GO SUB 210: GO SUB 1510: GO SUB 210: PAUSE 60: GO SUB 200: GO SUB 270: LET s(1)=d(1): LET s(2)=d(2): GO TO 1130 1470 IF dock<1 THEN LET dock=dock+1: GO SUB 200: PRINT AT 20,0;"Docking orbit is verified. Star Base refuses to lower its": PRINT #0;AT 0,0;"shields. Supply is impossible. ": GO SUB 210: PAUSE 60: GO SUB 210: PAUSE 60: GO SUB 210: GO SUB 180: GO SUB 350: GO TO 1130 1480 REM 1490 REM *** ck max load *** 1500 REM 1510 IF fuel>20 THEN LET fuel=20 1520 LET mwf=3 1530 IF sh>msh THEN LET sh=msh 1540 IF sn>msn THEN LET sn=msn 1550 IF pt>mpt THEN LET pt=mpt 1560 IF ph>mph THEN LET ph=mph 1570 RETURN 1580 REM 1590 REM *** Weapons *** 1600 REM 1610 GO SUB 200: GO SUB 210: PRINT AT 20,8;"Weapon Control:";TAB 1;"Prepare to select your target." 1620 LET wpn=1: IF ph>pt THEN LET wpn=2 1630 REM 1640 REM ** Tactical Scrn *** 1650 REM 1660 LET loc=FN c(9,16)+1: LET x1=FN d(loc): LET y1=FN e(loc): LET x2=x1: LET y2=y1 1670 LET js=0: LET d$=c$: FOR i=20 TO 30: GO SUB 210: LET f(i,1)=INT ((FN a(l(i))-d(1))*3+9): LET f(i,2)=INT ((FN b(l(i))-1-d(2))*3+16): IF f(i,1)>=0 AND f(i,1)<=18 AND f(i,2)>=0 AND f(i,2)<=30 THEN LET locs=FN c(f(i,1),f(i,2))+1: IF locs>0 AND locs<512 THEN LET d$(locs)="\g": IF js<10 THEN LET js=js+1: LET g(js+10)=i 1680 NEXT i 1690 PRINT AT 0,0; INK ik7;d$(1 TO 512);TAB 31;" ";TAB 31;" ";TAB 31;" " 1700 PRINT AT 9,16; INK ik0;"\a": LET rng=24*sn: CIRCLE INK 9;x1,y1,rng: GO SUB 190: PRINT AT 21,12; FLASH 1;"Working!": GO SUB 220 1710 REM 1720 REM *** count aliens *** 1730 REM 1740 LET move=1: LET irng=0: FOR i=1 TO 10: GO SUB 220: LET f(i,1)=INT ((FN a(l(i))-d(1))*3+9): LET f(i,2)=INT ((FN b(l(i))-1-d(2))*3+16): IF f(i,1)>0 AND f(i,1)<18 AND f(i,2)>0 AND f(i,2)<32 THEN LET irng=irng+1: LET g(irng)=i 1750 NEXT i 1760 REM 1770 REM *** Bases & Stars *** 1780 REM 1790 LET jb=0: FOR i=11 TO 19: GO SUB 220: LET f(i,1)=INT ((FN a(l(i))-d(1))*3+9): LET f(i,2)=INT ((FN b(l(i))-1-d(2))*3+16)-1: IF f(i,1)>0 AND f(i,1)<18 AND f(i,2)>0 AND f(i,2)<32 THEN LET jb=jb+1: LET g(jb+20)=i 1800 NEXT i 1810 LET loc=FN c(9,16)+1 1820 LET x1=FN d(loc): LET y1=FN e(loc): LET x2=x1: LET y2=y1: PRINT AT 9,16; INK ik0;"\a" 1830 GO SUB 220: GO SUB 190: PRINT AT 17,1;"Tactical: ";irng;" ships on screen.": GO SUB 350: LET tim0=FN h(): GO SUB 2090 1840 CIRCLE INK ik0;x2,y2,1: LET rx=FN f(y2): LET cx=FN g(x2): PRINT AT rx,cx; PAPER ik3;" ": PRINT AT 9,16; INK ik0;"\a": IF FN h()-tim0>=20-rank*2 THEN GO SUB 2940: GO TO 2900 1850 FOR j=1 TO irng: GO SUB 220: PRINT AT f(g(j),1),f(g(j),2); INK ik5;"\f": NEXT j: FOR j=1 TO js: GO SUB 220: PRINT AT f(g(j+10),1),f(g(j+10),2); INK ik7;"\g": NEXT j: FOR j=1 TO jb: GO SUB 220: PRINT AT f(g(j+20),1),f(g(j+20),2); INK ik1;"\e": NEXT j 1860 REM 1870 REM *** Select Target *** 1880 REM 1890 LET timer=FN h()+20-2*rank 1900 RANDOMIZE USR 61241: PRINT AT FN f(y2),FN g(x2); OVER 1;"\m" 1910 GO SUB 220: IF FN h()>timer THEN LET b$="N": GO TO 2070 1920 RANDOMIZE USR 61253: LET b$=INKEY$: IF b$<>CHR$ 32 THEN GO SUB 2050: GO SUB 2090: GO TO 1920 1930 GO SUB 500: IF b$<>CHR$ 32 AND stk=0 THEN PRINT AT FN f(y2),FN g(x2); OVER 1;"\m": PAUSE 10: GO TO 1910 1940 IF stk>=4 AND stk<=5 THEN LET x2=x2-8*(x2>4) 1950 IF stk=2 OR stk=6 OR stk=10 THEN LET y2=y2-8*(y2>57) 1960 IF stk=1 OR stk=5 OR stk=9 THEN LET y2=y2+8*(y2<171) 1970 IF stk>=8 AND stk<=10 THEN LET x2=x2+8*(x2<250) 1980 PRINT AT FN f(y2),FN g(x2); OVER 1;"\m" 1990 IF b$<>CHR$ 13 THEN GO TO 1920 2000 RANDOMIZE USR 61253: LET rx=FN f(y2): LET cx=FN g(x2): IF x1=x2 AND y1=y2 THEN GO SUB 180: GO SUB 2940: GO TO 2900 2010 GO SUB 200: GO SUB 550: GO TO 2150 2020 REM 2030 REM *** Select Weapon *** 2040 REM 2050 IF b$="T" OR b$="t" THEN LET wpn=1 2060 IF b$="P" OR b$="p" THEN LET wpn=2 2070 IF b$="N" OR b$="n" THEN GO SUB 190: PRINT AT 19,0;"Engineering: Prepare Warp Drive": GO SUB 390: GO TO 750 2080 RETURN 2090 IF wpn=1 THEN PRINT AT 18,5; INVERSE 1;"Arming Photon Torpedo " 2100 IF wpn=2 THEN PRINT AT 18,5; INVERSE 1;"Charging Phaser Weapon"; INVERSE 0;TAB 31;" " 2110 RETURN 2120 REM 2130 REM *** fire weapon *** 2140 REM 2150 LET fuel=fuel-.2: IF fuel<=0 THEN GO TO 270 2160 LET range=SQR ((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))/24-RND*.5 2170 GO SUB 220: IF range>sn THEN GO SUB 190: PRINT AT 19,0;"Weapons can not lock onto target Target is out of range.": GO SUB 220: PAUSE 90: GO SUB 220: PAUSE 60: GO SUB 2940: GO TO 2900 2180 IF wpn=2 THEN GO TO 2260 2190 REM 2200 REM *** photon torpedo 2210 REM 2220 GO SUB 220: LET rx0=2*RND: IF pt<=0 THEN GO SUB 190: PRINT AT 18,4;"Torpedo bank is expended!": GO SUB 220: PAUSE 60: GO SUB 220: GO SUB 2940: GO TO 2900 2230 LET pt=pt-1: LET npts=INT (range*5): IF npts<=0 THEN LET npts=1 2240 GO SUB 190: LET ptr=1/npts: LET dlx=(x2-x1)/npts: LET dly=(y2-y1)/npts: FOR i=1 TO npts: GO SUB 220: LET px=x1+INT (dlx*i): LET py=INT (dly*i): PLOT INK 9;px,py: BEEP .02,50-i*2: INVERSE 1: PLOT px,py: INVERSE 0: PRINT AT 9,16; INK ik0;"\a": NEXT i 2250 GO TO 2370 2260 REM 2270 REM *** Phaser Weapon *** 2280 REM 2290 GO SUB 220: LET rx0=1: IF ph<=0 THEN GO SUB 190: PRINT AT 18,5;"Phaser bank expended!": GO SUB 220: PAUSE 60: GO SUB 220: GO SUB 2940: GO TO 2900 2300 LET ph=ph-1 2310 GO SUB 190: PLOT INK ik0;x1,y1: DRAW INK 9;(x2-x1),(y2-y1): BEEP 1,30 2320 GO SUB 220: INVERSE 1: PLOT x1,y1: DRAW (x2-x1),(y2-y1): INVERSE 0 2330 PRINT AT 9,16; INK ik0;"\a" 2340 REM 2350 REM *** hit something? *** 2360 REM 2370 LET rx=FN f(y2): LET cx=FN g(x2): LET dmg=0: LET hit=0: FOR j=1 TO (irng+js+jb): GO SUB 220: LET i=g(j): IF j>irng THEN LET i=g(10+j-irng) 2380 IF j>(irng+js) THEN LET i=g(20+j-irng-j2) 2390 IF ABS (rx-f(i,1))<1 AND ABS (cx-f(i,2))<1 THEN LET hit=1: GO TO 2410 2400 NEXT j 2410 GO SUB 190: IF hit=0 THEN PRINT AT 18,8;"Target was missed!": GO SUB 220: PAUSE 60: GO SUB 220: PAUSE 60: GO SUB 2940: GO TO 2900 2420 IF i<=10 THEN PRINT AT 18,8;"Target was hit!": LET dmg=15+200*RND-(range-rx0*RND)*30-score/2: IF dmg<0 THEN LET dmg=0 2430 IF dmg>=100 THEN LET dmg=100 2440 LET f(i,3)=f(i,3)+dmg: IF f(i,3)<100 THEN GO TO 2510 2450 PRINT AT f(i,1),f(i,2); PAPER ik3;" ": LET f(i,3)=100: GO SUB 230: IF score=9 OR score=19 OR score=29 OR score=39 OR score=49 OR score=59 THEN GO TO 2710 2460 LET score=score+1: LET b(i,1)=0: LET b(i,2)=0: LET l(i)=0: IF i<=10 THEN LET j1=1: FOR j=1 TO irng: IF g(j)<>i THEN LET g(j1)=g(j): LET j1=j1+1 2470 GO SUB 220: NEXT j: LET irng=irng-1 2480 REM 2490 REM *** Hit Star Base *** 2500 REM 2510 IF i>=11 AND i<=19 THEN PRINT AT 19,1;" You just shot a Star Base! ": LET dock=-rank: PAUSE 100: LET l(i)=0: LET b(i-10,1)=0: LET b(i-10,2)=0: PRINT AT f(i,1),f(i,2);" ": GO SUB 2940: LET b1=21: LET b2=21: GO TO 2900 2520 REM 2530 REM *** Hit a Star *** 2540 REM 2550 IF i>=20 AND i<=30 THEN PRINT AT f(i,1),f(i,2); INK ik7;"\g": PRINT AT 19,0;"You just shot a star. The solar flare destroyed your sensors! ": GO SUB 220: CIRCLE INVERSE 1;x1,y1,24*sn: PAUSE 60: GO SUB 220: PAUSE 60: LET sn=0: GO SUB 2940: GO TO 2900 2560 REM 2570 REM *** Hit Alien Ship *** 2580 REM 2590 PRINT AT 19,6;"Target Damage: ";INT (f(i,3)*10)/10;" %": IF f(i,3)<100 THEN PRINT AT rx,cx; INK ik5;"\f": PAUSE 120: GO SUB 2940: GO TO 2900 2600 PRINT FLASH 1;AT 20,6;"Target was destroyed. ": LET l(i)=0: LET f(i,1)=0: LET f(i,2)=0: PAUSE 200: GO SUB 200: GO SUB 2940 2610 GO TO 2900 2620 REM 2630 REM *** Collision Dmg *** 2640 REM 2650 GO SUB 180: PRINT AT 19,9; FLASH 1;"Collision!"; FLASH 0;TAB 31;" You were hit by an enemy ship!": PAUSE 120: GO SUB 180: LET sh=sh-10*RND: IF sh<=5 AND sn<>0 THEN LET sn=.6*sh 2660 IF sh<0 THEN LET sh=0 2670 IF sn<0 THEN LET sn=0 2680 GO SUB 350: IF sh<=10 THEN GO TO 3930 2690 IF score=9 OR score=19 OR score=29 OR score=39 OR score=49 OR score=59 THEN GO TO 2710 2700 LET score=score+1: LET b(i,1)=0: LET b(i,2)=0: LET l(i)=0: RETURN 2710 REM 2720 REM *** Got 10 more *** 2730 REM 2740 FOR i=1 TO 10: LET f(i,3)=0: NEXT i: LET rank=rank+1: CLS : IF score>=59 THEN GO TO 2890 2750 CLS : PRINT AT 2,0;"******************************** Congratulations! You have successfully defended the Federation against 10 enemy Star Ships. ";'';" For your great victory over the enemy, the Federation Council has promoted you to the rank of";'';TAB 10;r$(((rank-1)*15+1) TO (rank*15));'';" Keep up the good work! The next wave of ships has already been spotted on the long range sensors. ********************************" 2760 PRINT AT 21,10; PAPER 0; INK 7; FLASH 1;"Press Enter": PAUSE 0: CLS 2770 REM 2780 REM *** Next Wave *** 2790 REM 2800 PRINT AT 5,0;"******************************** The Federation Council would like to inform you that your ship will recieve new shields at your next Star Base stop. The last information received shows that the next wave of invading ships have improved their weapon range. Be Careful! ********************************": PRINT AT 21,10; PAPER 0; INK 7; FLASH 1;"Press Enter": PAUSE 0: CLS 2810 RESTORE 3630: IF b1>10 OR b2>10 THEN LET b1=5: LET b2=5 2820 FOR i=1 TO 19: READ a: LET l(i)=a: NEXT i: LET b1=b1-(rank-1): LET b2=b2+(rank-1): IF b1<1 THEN LET b1=1 2830 IF b2>8 THEN LET b2=8 2840 FOR i=1 TO (b1-1): LET l(i+10)=0: NEXT i: FOR i=(b2+1) TO 8: LET l(i+10)=0: NEXT i: LET msh=10+(rank-1)*2: LET mpt=5+rank-1: LET mph=5+rank-1 2850 LET score=score+1: GO TO 640 2860 REM 2870 REM *** All Done!*** 2880 REM 2890 CLS : PRINT AT 2,0;"******************************** Congratulations! You have successfully defended the Federation against all of the invaders! Way to go hot shot! ********************************Total mission time: ";FN h();" seconds";';"********************************": PAUSE 0: GO TO 3510 2900 GO SUB 190: PRINT AT 16,0;TAB 31;" ": GO TO 1790 2910 REM 2920 REM *** Alien Weapons *** 2930 REM 2940 GO SUB 190: LET hit=0: LET dmg=0: FOR j=1 TO irng: GO SUB 220: LET i=g(j): IF ABS (f(i,2)-9)<=(3.85+rank) AND ABS (f(i,2)-16)<=(3.85+rank) THEN LET hit=hit+1: LET dmg=dmg+RND*rank/6+(hit-1)*rank/30: LET locx=FN c(f(i,1),f(i,2))+1: LET x3=FN d(locx): LET y3=FN e(locx): PLOT INK ik5;x3,y3: DRAW INK ik5;(x1-x3),(y1-y3): BEEP .3,45: INVERSE 1: PLOT x3,y3: DRAW (x1-x3),(y1-y3): INVERSE 0: PRINT AT f(i,1),f(i,2); INK ik5;"\f": PRINT AT 9,16; INK ik0;SCREEN$ (9,16) 2950 NEXT j: IF hit>0 THEN GO SUB 180: PRINT AT 19,0;"Damage Control: ";hit;" hits on shield": GO SUB 350 2960 LET sh=sh-dmg: IF sh<=0 THEN CLS : PRINT AT 10,0;"******************************** Your shields have gone down. Emergency procedures are in effect. Abandon ship!!! ********************************": GO TO 3940 2970 REM 2980 REM *** Alien Tactical *** 2990 REM 3000 IF hit>0 AND sh<5 AND sn<>0 THEN CIRCLE INVERSE 1;x1,y1,24*sn: IF sn<>0 THEN LET sn=sh*.6: GO SUB 360: CIRCLE x1,y1,24*sn 3010 LET ir1=1 3020 REM 3030 REM *** Ships 1 & 6 3040 REM 3050 FOR j=ir1 TO irng: GO SUB 220: LET i=g(j): IF l(i)>0 AND (i=1 OR i=6) AND (f(i,1)>=0 AND f(i,1)<=18) AND (f(i,2)>=0 AND f(i,2)<=30) THEN PRINT AT f(i,1),f(i,2); PAPER ik3;" ": LET f(i,1)=INT (f(i,1)+(7-SGN (RND-.5)*1-rank/2-f(i,1))/2): LET f(i,2)=INT (f(i,2)+(14-SGN (RND-.5)*1-rank/2-f(i,2))/2): PRINT AT f(i,1),f(i,2); INK ik5;"\f": LET xr=INT ((f(i,1)-9)/3)+d(1): LET xc=INT ((f(i,2)-16)/3)+d(2): LET l(i)=FN c(xr,xc)+1 3060 REM 3070 REM *** Ships 2 & 7 *** 3080 REM 3090 IF l(i)>0 AND (i=2 OR i=7) AND (f(i,1)>=0 AND f(i,1)<=18) AND (f(i,2)>=0 AND f(i,2)<=30) THEN PRINT AT f(i,1),f(i,2); PAPER ik3;" ": LET f(i,1)=INT (f(i,1)+(7-SGN (RND-.5)*1-rank/2-f(i,1))/2): LET f(i,2)=INT (f(i,2)+(18+SGN (RND-.5)*1+rank/2-f(i,2))/2): PRINT AT f(i,1),f(i,2); INK ik5;"\f": LET xr=INT ((f(i,1)-9)/3)+d(1): LET xc=INT ((f(i,2)-16)/3)+d(2): LET l(i)=FN c(xr,xc)+1 3100 REM 3110 REM *** Ships 3 & 8 *** 3120 REM 3130 IF l(i)>0 AND (i=3 OR i=8) AND (f(i,1)>=0 AND f(i,1)<=18) AND (f(i,2)>=0 AND f(i,2)<=30) THEN PRINT AT f(i,1),f(i,2); PAPER ik3;" ": LET f(i,1)=INT (f(i,1)+(13+SGN (RND-.5)*1+rank/2-f(i,1))/2): LET f(i,2)=INT (f(i,2)+(14+SGN (RND-.5)*1+rank/2-f(i,2))/2): PRINT AT f(i,1),f(i,2); INK ik5;"\f": LET xr=INT ((f(i,1)-9)/3)+d(1): LET xc=INT ((f(i,2)-16)/3)+d(2): LET l(i)=FN c(xr,xc)+1 3140 REM 3150 REM *** Ships 4 & 9 *** 3160 REM 3170 IF l(i)>0 AND (i=4 OR i=9) AND (f(i,1)>=0 AND f(i,1)<=18) AND (f(i,2)>=0 AND f(i,2)<=30) THEN PRINT AT f(i,1),f(i,2); PAPER ik3;" ": LET f(i,1)=INT (f(i,1)+(13+SGN (RND-.5)*1+rank/2-f(i,1))/2): LET f(i,2)=INT (f(i,2)+(18+SGN (RND-.5)*1+rank/2-f(i,2))/2): PRINT AT f(i,1),f(i,2); INK ik5;"\f": LET xr=INT ((f(i,1)-9)/3)+d(1): LET xc=INT ((f(i,2)-16)/3)+d(2): LET l(i)=FN c(xr,xc)+1 3180 REM 3190 REM *** Ships 5 & 10 *** 3200 REM 3210 IF l(i)>0 AND (i=5 OR i=10) AND (f(i,1)>=0 AND f(i,1)<=18) AND (f(i,2)>=0 AND f(i,2)<=30) THEN PRINT AT f(i,1),f(i,2); PAPER ik3;" ": LET f(i,1)=INT (f(i,1)+(9-SGN (RND-.5)*(3+rank/2)*RND-f(i,1))/2): LET f(i,2)=INT (f(i,2)+(16+(3+rank/2)*RND*SGN (RND-.5)-f(i,2))/2): PRINT AT f(i,1),f(i,2); INK ik5;"\f": LET xr=INT ((f(i,1)-9)/3)+d(1): LET xc=INT ((f(i,2)-16)/3)+d(2): LET l(i)=FN c(xr,xc)+1 3220 IF f(i,1)<>9 OR f(i,2)<>16 THEN GO TO 3280 3230 GO SUB 220: GO SUB 2650: LET f(i,1)=0: LET f(i,2)=0: LET f(i,3)=100: PRINT AT 9,16; INK ik0;"\a": LET j1=1: FOR k=1 TO irng: GO SUB 210: IF g(k)<>i THEN LET g(j1)=g(k): LET j1=j1+1 3240 NEXT k: LET irng=irng-1: LET ir1=j+1: GO SUB 180: GO TO 3050 3250 REM 3260 REM *** Ck Collision *** 3270 REM 3280 FOR k=1 TO js: GO SUB 220: LET k10=k+10: IF f(i,1)=f(g(k10),1) AND f(i,2)=f(g(k10),2) THEN GO TO 3350 3290 NEXT k 3300 REM 3310 REM *** Star Base Stats *** 3320 REM 3330 FOR k=1 TO jb: GO SUB 220: LET k10=k+20: IF f(i,1)=f(g(k10),1) AND f(i,2)=f(g(k10),2) THEN GO TO 3370 3340 NEXT k: GO TO 3430 3350 GO SUB 180: PRINT AT 19,0;"An enemy ship just flew into a star and was vaporized!": PRINT AT f(i,1),f(i,2); INK ik7;"\g": GO SUB 230: PAUSE 120: IF score=9 OR score=19 OR score=29 OR score=39 OR score=49 OR score=59 THEN PAUSE 60: GO TO 2710 3360 GO TO 3440 3370 GO SUB 180: IF g(k10)>=11 AND g(k10)<=15 THEN GO SUB 210: LET l(b1+10)=0: PRINT AT 20,0;"Star Base ";b1;" has been destroyed.": LET s(1)=0: LET s(2)=0: PAUSE 60: LET b1=b1+1 3380 IF g(k10)>=16 AND g(k10)<=20 THEN GO SUB 220: LET l(b2+10)=0: PRINT AT 20,0;"Star Base ";b2;" has been destroyed.": LET s(1)=0: LET s(2)=0: PAUSE 60: LET b2=b2-1 3390 LET jb=jb-1: IF l(19)=0 THEN LET b1=21: LET b2=21 3400 IF b210 THEN LET b2=9: LET b1=9 3410 IF b1=10 THEN LET b2=21: LET b1=21 3420 IF b2=8 AND b1>=9 THEN LET b1=21: LET b2=21 3430 NEXT j: GO TO 3460 3440 LET score=score+1: LET b(i,1)=0: LET b(i,2)=0: LET f(i,1)=0: LET f(i,2)=0: LET l(i)=0: LET j1=1: FOR k=1 TO irng: IF g(k)<>i THEN LET g(j1)=g(k): LET j1=j1+1 3450 NEXT k: LET irng=irng-1: LET ir1=j+1: GO SUB 180: GO TO 3050 3460 RETURN 3470 STOP 3480 REM 3490 REM *** S T A R T *** 3500 REM 3510 CLEAR 61240: DIM t(15): DIM a$(704): DIM b$(1): DIM b(10,2): DIM c(21,2): DIM c$(512): DIM d(2): DIM d$(512): DIM e(10,2): DIM f$(20): DIM f(30,3): DIM g(30): DIM l(31): DIM p(10): DIM r$(90): DIM s(2): DIM s$(132): RESTORE 3520 REM 3530 REM *** M/C Routines *** 3540 REM 3550 DATA INT 17,81,239,33,0,64,1,0,16,237,176,201,17,0,64,33,81,239,1,0,16,237,176,201: FOR i=61241 TO 61264: READ j: POKE i,j: NEXT i 3560 REM 3570 REM *** UDG Data *** 3580 REM 3590 DATA INT 0,12,0,48,128,66,16,255,1,0,128,0,24,24,0,24,70,126,16,0,1,0,128,0,60,48,129,12,42,126,24,0,1,0,128,66,126,120,219,30,20,90,63,0,1,0,128,129,219,120,126,30,40,90,252,0,1,0,128,129,129,48,60,12,84,24,24,0,1,0,128,66,0,24,24,24,98,24,8,0,1,0,128,0,0,12,0,48,1,0,8,0,1,255,128,0 3600 REM 3610 REM *** Init Position *** 3620 REM 3630 DATA INT 7,7,7,7,7,25,25,25,25,25,80,150,282,406,464,394,262,138,272 3640 RANDOMIZE 3650 REM 3660 REM *** Init Variables *** 3670 REM 3680 LET qd=1: LET score=0: LET ik0=7: LET ik1=6: LET ik2=2: LET ik3=1: LET ik4=4: LET ik5=5: LET ik6=6: LET ik7=7: LET r$(1 TO 90)="Captain Commodore Rear Admiral Vice Admiral Admiral Fleet Admiral ": BORDER 1: PAPER 1: INK 7 3690 CLS : LET t(1)=0: LET t(2)=0: LET t(3)=0: LET t(4)=0: LET t(5)=0: LET t(6)=0: LET t(7)=15: LET t(8)=7: LET t(9)=16: LET t(10)=16: LET t(11)=16: LET t(12)=10: LET t(13)=16: LET t(14)=13 3700 REM 3710 REM *** Poke UDG *** 3720 REM 3730 FOR i=0 TO 7 3740 READ g: POKE USR "a"+i,g 3750 READ g: POKE USR "b"+i,g 3760 READ g: POKE USR "c"+i,g 3770 READ g: POKE USR "d"+i,g 3780 READ g: POKE USR "e"+i,g 3790 READ g: POKE USR "f"+i,g 3800 READ g: POKE USR "g"+i,g 3810 READ g: POKE USR "h"+i,g 3820 READ g: POKE USR "i"+i,g 3830 READ g: POKE USR "j"+i,g 3840 READ g: POKE USR "k"+i,g 3850 READ g: POKE USR "m"+i,g 3860 NEXT i 3870 INK 9: PRINT AT 21,13; PAPER 0; INK 7; FLASH 1;"Working": LET rank=1: PRINT AT 5,0;" Alert! Alert! Alert! Alert! ";''';" Star Cruisers have invaded the Federation's territory. You are Captain of the Star ship Strata-Gem. You must protect all of theFederation Star Bases. You are our last hope!";'';" Good Luck!" 3880 FOR i=1 TO 19: READ a: LET l(i)=a: NEXT i: FOR i=20 TO 30: LET cx=14+22*(RND-.5): LET rx=9+13*(RND-.5): LET l(i)=FN c(rx,cx)+1: NEXT i: LET l(31)=271: LET fuel=20: LET msh=10: LET sh=msh: LET msn=3: LET sn=msn: LET mpt=5: LET pt=mpt: LET mph=5: LET ph=mph: LET mwf=3 3890 LET wf=1: FOR i=11 TO 19: FOR j=20 TO 30: IF l(j)=l(i) THEN LET l(j)=l(j)+1 3900 NEXT j: NEXT i 3910 FOR i=1 TO 32: LET a$(i)="\h": NEXT i: FOR i=545 TO 576: LET a$(i)="\j": NEXT i: FOR i=0 TO 17: LET a$(FN c(i,0)+1)="\k": LET a$(FN c(i,31)+1)="\i": NEXT i: LET c$(1 TO 480)=a$(1 TO 480): FOR i=481 TO 512: LET c$(i)="\j": NEXT i: FOR i=20 TO 30: LET a$(l(i))="\g": NEXT i 3920 FOR i=1 TO 30: LET f(i,1)=0: LET f(i,2)=0: LET f(i,3)=0: NEXT i: LET move=1: LET dock=1: LET s(1)=0: LET s(2)=0: LET b1=1: LET b2=8: BEEP .25,30: POKE 23674,0: POKE 23673,0: POKE 23672,0: GO TO 3960 3930 CLS 3940 PRINT AT 0,0;"******************************** You have successfully destroyed";INT score;" enemy ships!";';"Thankyou for a good game! Press Enter to continue. ********************************Total mission time: ";FN h();" seconds";';"********************************": PAUSE 0: IF INKEY$=CHR$ 13 THEN CLS : GO TO 3510 3950 REM *** get ready *** 3960 CLS : PRINT AT 10,12; PAPER 2; INK 7; FLASH 1;"Alert!" 3970 SOUND 7,62;8,15 3980 FOR j=1 TO 3: FOR i=250 TO 120 STEP -5: SOUND 0,i: NEXT i: PAUSE 4: NEXT j 3990 PRINT AT 13,7; PAPER 2; INK 7; FLASH 1;"Battle Stations!" 4000 FOR j=1 TO 3: FOR i=250 TO 120 STEP -5: SOUND 0,i: NEXT i: PAUSE 4: NEXT j 4010 SOUND 8,0;9,0;10,0 4020 POKE 23674,0: POKE 23673,0: POKE 23672,0 4030 GO TO 640 4040 SAVE "Star Fleet" ```