--- title: "Starfire" id: 52140 type: "computer_media" slug: "starfire" url: "http://localhost/computer_media/starfire/" markdown_url: "http://localhost/computer_media/starfire.md" published_at: "2023-09-08T17:58:22+00:00" modified_at: "2026-03-31T22:19:04+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2023/09/SCR-20260331-pywe.png" excerpt: "Command the destroyer Starfire across a 10×10 galaxy, hunting Xtardan enemies through combat, docking, time portals, and asteroid fields in this full-featured space strategy game." category: - name: "Archived Media" slug: "archived-media" taxonomy: "category" url: "http://localhost/category/archived-media/" post_tag: - name: "Downloadable" slug: "downloadable" taxonomy: "post_tag" url: "http://localhost/tag/downloadable/" - name: "Knighted Computers" slug: "knighted-computers" taxonomy: "post_tag" url: "http://localhost/tag/knighted-computers/" - name: "TS 2068" slug: "ts2068" taxonomy: "post_tag" url: "http://localhost/tag/ts2068/" model: - name: "Timex/Sinclair 2068" slug: "ts-2068" taxonomy: "model" url: "http://localhost/model/ts-2068/" genre: - name: "Game" slug: "game" taxonomy: "genre" url: "http://localhost/type/game/" media_type: "Program" download_url: "https://archive.org/download/timex-sinclair-software-archive/Starfire%20%281983%29%28Knighted%20Computing%29%28US%29%28TS2068%29%28Cassette%29.zip" producer_company: - id: 11024 title: "Knighted Computers" type: "company" url: "http://localhost/company/knighted-computers/" images: - url: "http://localhost/wp-content/uploads/2023/09/SCR-20260331-pywe.png" - url: "http://localhost/wp-content/uploads/2023/09/SCR-20260331-pymh.png" - url: "http://localhost/wp-content/uploads/2023/09/SCR-20260331-pzch.png" - url: "http://localhost/wp-content/uploads/2023/09/SCR-20260331-pyti.png" - url: "http://localhost/wp-content/uploads/2023/09/SCR-20260331-pyoh.png" - url: "http://localhost/wp-content/uploads/2023/09/Starfire-cassette.jpg" - url: "http://localhost/wp-content/uploads/2023/09/Starfire-j-card-inside-scaled.jpg" - url: "http://localhost/wp-content/uploads/2023/09/Starfire-j-card-outside-scaled.jpg" related_products: - id: 37148 title: "Starfire" type: "product" url: "http://localhost/product/starfire/" media_type_tags: "Game" --- Starfire is a text-and-graphics space combat game in the Star Trek tradition, casting the player as captain of the destroyer “Starfire” tasked with eliminating all Xtardan enemies from a 10×10 quadrant galaxy map. The program uses a three-dimensional array `g(10,10,2)` to store enemy ship counts and starbase data for each quadrant, and calls machine code routines via `USR` at fixed addresses (65000, 65030, 65070) for sound effects and explosion visuals. Ten custom UDG characters are defined at initialization using POKEd data — including ship sprites, asteroids, and explosion glyphs — stored via `POKE USR` and referenced throughout gameplay. Navigation, combat (torpedo fire with crosshair targeting), docking, smart bombs, time portals, asteroid fields, and a self-destruct sequence are all implemented, with difficulty scaling affecting starting time, enemy count, and energy reserves. The loader section (lines 0–140 of the first program block) chains a SCREEN$ load, a CODE block, and a final BASIC program load in sequence. *** ## Source Code ````````` 10 REM program VLOADER 20 REM created 25TH NOVEMBER 1983 30 REM version 1.0 40 REM author S. S. DOSANJ (BITTERNE SOFTWARE) 50 REM 55 BORDER 0: INK 5: PAPER 5: CLS : REM 57 PRINT #0;AT 0,12; INK 7; FLASH 1;"LOADING"; FLASH 0; INK 0: REM 60 LOAD ""SCREEN$ : REM 65 PRINT #0;AT 0,12; FLASH 1;"LOADING"; FLASH 0: REM 100 PRINT AT 1,0;: REM 110 LOAD ""CODE : REM 125 PRINT AT 1,0;: REM 130 LOAD "": REM 140 STOP 9000 FOR F=(PEEK 23635+256*PEEK 23636) TO 9999999 STEP 2: BORDER 0: BORDER 2: REM 9005 IF PEEK F=88 AND PEEK (F-1)=88 THEN POKE F-1,16: BEEP .1,1: REM 9010 IF (PEEK F=88 AND PEEK (F+1)=88) THEN POKE F,16: BEEP .1,0: REM 9015 IF PEEK F=96 AND PEEK (F+1)=96 THEN STOP : REM 9017 IF PEEK F=88 AND PEEK (F-1)=88 THEN POKE F-1,16: BEEP .1,1: REM 9020 NEXT F: REM 9999 REM ```````` 0 REM -- VIRGIN GAMES -- 1 REM 2 REM 3 REM 4 REM presents 5 REM 6 REM 7 REM 8 REM 9 REM S T A R F I R E 10 REM 11 REM 12 REM 13 REM 14 REM \* 1982 15 REM virgin 16 REM 17 REM 18 REM 19 REM 20 REM 21 REM -by martyn c. davis- 22 REM 23 OVER 0: BORDER 7: PAPER 7: INK 0: CLS 25 BEEP .2,30: RANDOMIZE : GO TO 40 30 PRINT AT 20,14; INVERSE 1;"Torps: ";torp;AT 21,14;"Power: ";AT 21,21;pow 33 PRINT AT 20,4; INVERSE 1;"Quad:";qx;",";qy;" ";AT 21,4;"Sect:";sx;",";sy;" " 35 RETURN 36 IF (LEN g$/2)=INT (LEN g$/2) THEN LET g$=g$+" " 37 FOR f=1 TO LEN g$ STEP step: PRINT AT 21,0;g$( TO f); BRIGHT 1;"\::": NEXT f 38 PRINT AT 21,LEN g$;" ": POKE 23692,255: LET l=USR 1988: IF LEN g$<=29 THEN LET l=USR 1988 39 RETURN 40 PAPER 7: INK 0: BORDER 7 50 GO SUB 9000: REM init 60 CLS 70 GO SUB 100 80 GO TO 130 100 PRINT AT 0,0;: FOR f=1 TO 19 110 PRINT TAB 5;"\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::" 120 NEXT f 122 PRINT AT 20,4;"\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::" 123 PRINT AT 21,4;"\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::" 124 PLOT 32,16: DRAW 8,8: PLOT 199,16: DRAW -8,8 125 RETURN 130 OVER 0: POKE 23607,249: OVER 0: PRINT AT 20,4; INVERSE 1;"QUAD: ";AT 20,9;qx-1;",";qy-1;AT 21,4;"TORP: ";AT 21,9;torp 131 PRINT AT 20,15; INVERSE 1;"TIME : ";AT 20,21;INT (time+.5);AT 21,15;"POWER: ";AT 21,21;INT pow 132 IF seds>=1 THEN LET g(qx,qy,1)=g(qx,qy,1)-1: LET kli=kli-1: GO SUB 4500: LET seds=0: BORDER 2: POKE 65071,3: POKE 65075,5: POKE 65090,2: POKE 65031,1: POKE 65034,15: POKE 65037,250: LET l=USR 65070+USR 65030: BORDER 7: GO SUB 100: PRINT AT 13,10; INK 7; PAPER 0; BRIGHT 1;"XTARDAN";AT 14,11;"SELF-";AT 15,9;"DESTRUCTED": GO TO 4002 133 IF g(qx,qy,1)>0 THEN PRINT AT 1,27; BRIGHT 1; FLASH 1; INK 7; PAPER 2;" RED ";AT 2,27;"ALERT" 134 IF edam=100 THEN GO TO 6500 135 IF kli=0 THEN GO TO 7000 136 LET c$=INKEY$: IF c$="" THEN GO TO 136 137 BEEP .01,21: IF shen<0 THEN LET shen=0 138 IF shen>6000 THEN LET shen=6000 139 PRINT AT 1,27;" ";AT 2,27;" " 140 IF c$="n" THEN GO TO 700 160 IF c$="c" THEN GO TO 1500 170 IF c$="r" THEN GO TO 2000 180 IF c$="b" THEN GO TO 2500 185 IF c$="s" THEN GO TO 4510 186 IF c$="NOT " THEN GO TO 7950 190 IF c$="d" THEN GO TO 500 210 IF c$="l" THEN GO TO 4000 211 BEEP .1,-37 220 GO TO 130 500 REM DOCK 510 IF g(qx,qy,2)=0 THEN LET g$="starbases": GO TO 5000 511 IF try=1 THEN GO TO 5700 512 LET time=time-2 515 BORDER 1: PAPER 0: INK 7: CLS : LET ink=7: GO SUB 7900 516 FOR f=1 TO 25: PLOT RND*255,RND*175: NEXT f 520 PRINT AT 8,0; INK 3;"\:."'"\::"'"."'"\::\:."; INK 7;"/"; INK 3;'".\::"'"\::\::"; INK 7;"__"; INK 2;'"\::\::"; INK 3;'"\::\::"'".\::"'"\::\:'"; INK 7;"\\"; INK 3'"."'"\::"'"\:'" 521 PLOT 16,55: DRAW 15,0 522 LET try=1: LET timetry=time 530 PRINT AT 2,2;"\::\::\::\::\::\::\::\:: \::\::\::\::\::\::\::\:: \::\::\::\::\::\::\::\::" 540 PRINT AT 1,2;"DISTANCE RET FUEL VELOCITY" 550 LET dist=2100+INT (RND*400): LET oldist=dist 560 LET vel=INT (RND*35)+15 570 LET fuel=INT (RND*30)+170-dr*3 575 LET odist=dist 580 PRINT AT 14,INT (odist/100)+2; OVER 0;" ";AT 14,INT (dist/100)+2; INK 6; BRIGHT 1;"\s\d": PRINT AT 2,3; INVERSE 1;dist;" ";AT 2,14;fuel;" ";AT 2,25;vel;" " 581 IF vel<-30 THEN PRINT AT 10,4; BRIGHT 1; INVERSE 1;"ESCAPE VELOCITY ATTAINED": BEEP 3,-25: GO TO 1999. 590 BEEP .1,30: INPUT "Thrust? (0-100%) "; LINE t$: IF t$="" THEN LET t$="0" 600 IF t$="a" THEN GO TO 3700 601 IF CODE t$<48 OR CODE t$>57 AND t$<>"a" THEN LET t$="0" 602 IF VAL t$>100 OR VAL t$<0 THEN BEEP .5,-37: GO TO 590 603 IF t$="a" THEN BORDER 7: PAPER 7: CLS : INK 0: GO SUB 100: GO TO 130 604 LET thr=((VAL t$)/100)*fuel 605 LET odist=dist: LET dist=dist-vel: LET vel=INT (vel+vel/10+5-thr) 606 LET fuel=INT (fuel-thr/3) 607 IF dist>0 THEN GO TO 580 608 IF vel>25 THEN GO TO 620 609 IF vel>10 THEN GO TO 5500 610 POKE 65001,1: POKE 65004,20: POKE 65007,255: LET l=USR 65000: PRINT AT 10,10;"Well Done.": BEEP 1,40 615 INK 0: PAPER 7: GO TO 6000 620 BEEP 1,-40 630 CLS : PRINT AT 8,0;"You have crashed into a starbase"''"You have lost our only chance ofwinning the galactic war: the 'Starfire' is ruined": FOR f=-20 TO -45 STEP -1: BEEP .1,f: NEXT f 640 PAUSE 100: GO TO 6500 699 STOP 700 REM new quad 701 PRINT AT 13,10; PAPER 0;" ";AT 14,11;" ";AT 15,9;" " 710 PRINT AT 14,8; BRIGHT 1; PAPER 0; INK 7;"NEW QUADRANT:": POKE 23607,60: PRINT AT 16,8; INVERSE 1;"X="; BRIGHT 1; FLASH 1;" " 711 LET i$=INKEY$: IF i$="" THEN GO TO 711 712 IF i$<"0" OR i$>"9" THEN GO TO 711 713 PRINT AT 16,10; INVERSE 1;i$: BEEP .002,30 714 LET nqx=(VAL i$)+1: IF INKEY$<>"" THEN GO TO 714 715 PRINT AT 16,18; INVERSE 1;"Y="; BRIGHT 1; FLASH 1;" ": LET i$=INKEY$: IF i$="" THEN GO TO 715 717 IF i$<"0" OR i$>"9" THEN GO TO 715 718 PRINT AT 16,20; INVERSE 1;i$: BEEP .002,30: LET nqy=(VAL i$)+1 719 POKE 23607,249: GO SUB 100 720 LET down=ABS (nqx-qx): LET along=ABS (nqy-qy) 730 LET dist=SQR (along^2+down^2) 740 LET pow=pow-INT dist*100 750 IF pow<1 THEN LET pow=0: GO TO 6500 760 LET qx=nqx: LET qy=nqy: LET sx=INT (RND*10)+1: LET sy=INT (RND*10)+1 765 LET time=time-dist/4: IF time<1 THEN LET time=0: GO TO 6500 770 LET skli=g(qx,qy,1) 771 IF time<=timetry-2 THEN LET try=0 772 BEEP .1,35+(-55 AND skli>0): INPUT "" 773 IF g(qx,qy,2)=-1 THEN GO TO 7700 774 IF g(qx,qy,1)=-1 THEN GO TO 4600 775 IF RND<.04 THEN GO TO 7500 780 GO TO 130 1000 REM destruction 1001 BORDER 7: PRINT AT okx,oky; OVER 0; PAPER 0; INK 7; BRIGHT 1;"\e" AND edam<>100: POKE 65071,3: POKE 65075,6: POKE 65090,1: LET l=USR 65070: BORDER 1 1010 INK 7 1020 PLOT 127,87: DRAW -100,-15 1021 PLOT 127,87: DRAW -10,-80 1022 PLOT 127,87: DRAW -30,16 1023 PLOT 127,87: DRAW 120,70 1025 PLOT 127,87: DRAW 10,30 1026 PLOT 127,87: DRAW 126,-35 1027 PLOT 127,87: DRAW -10,86 1028 PLOT 170,112: DRAW 80,20 1030 PLOT 127,87: DRAW 5,-24 1499 FOR f=1 TO 200: NEXT f: GO TO 6500 1500 REM computer 1501 LET step=4 1502 BORDER 0: PAPER 0: INK 7: CLS 1510 PRINT AT 2,0;"ENTERPRISE COMPUTER " 1550 PRINT '"FUNCTIONS:" 1560 PRINT '"1) COMMANDS AVAILABLE" 1570 PRINT '"2) ENERGY ALLOCATION" 1580 PRINT '"3) DAMAGE" 1610 BEEP .1,25: PRINT #0;AT 1,0;"Which Choice, ";n$;"? " 1611 LET i$=INKEY$: IF i$="" THEN GO TO 1611 1612 IF i$<"1" OR i$>"4" THEN GO TO 1611 1613 LET choice=VAL i$ 1620 IF choice<>INT choice OR NOT (choice>0 AND choice<5) THEN GO TO 1610 1630 GO TO 1600+50*choice 1650 REM commands available 1655 CLS : LET g$="COMMANDS": GO SUB 36 1660 LET g$="": GO SUB 36 1665 LET g$="'N'- Navigate": GO SUB 36 1670 LET g$="'B'- Battlestations ": GO SUB 36 1680 LET g$="'R'- Galactic War Report": GO SUB 36 1690 LET g$="'C'- Computer call ": GO SUB 36 1691 LET g$="'L'- L.R. Scan ": GO SUB 36 1692 LET g$="'S'- Smart Bomb Release " 1693 GO SUB 36: LET g$="": GO SUB 36 1694 LET g$="press any key to continue": GO SUB 36 1695 IF INKEY$="" THEN GO TO 1695 1696 BEEP .1,20: INK 0: BORDER 7: PAPER 7: CLS : GO SUB 100: GO TO 130 1700 CLS : INK 7 1701 IF pow>9999 THEN LET pow=9999 1710 PRINT AT 0,0;" ENERGY ALLOCATION REPORT" 1711 PRINT AT 5,0;"[1] shields:",shen 1712 PRINT AT 8,0;"[2] reactors:",pow 1713 PRINT AT 12,0;"[3] smart:",smart*smen 1715 POKE 23607,60 1716 PRINT AT 16,0;"Press the number of the energy field you wish to alter, or 'n' to return to command mode." 1717 IF INKEY$<>"" THEN GO TO 1717 1718 IF INKEY$="" THEN GO TO 1718 1719 LET i$=INKEY$ 1720 IF (i$<"1" OR i$>"3") AND i$<>"n" AND i$<>"N" THEN GO TO 1717 1721 IF i$="n" OR i$="N" THEN INK 0: PAPER 7: BORDER 7: CLS : GO SUB 100: GO TO 130 1722 IF i$="1" THEN LET pow=pow+shen: INPUT "New shield value? ";shen: LET shen=INT shen: LET pow=pow-shen: IF pow<=0 THEN BEEP 1,-35: GO TO 1722 1723 IF i$="2" THEN PRINT #0;AT 0,0;"NO NEED TO ALTER THAT": BEEP 1,-30 1724 IF i$<>"3" THEN GO TO 1727 1725 IF smart=0 THEN BEEP .5,-30: GO TO 1700 1726 IF i$="3" THEN PRINT #0;AT 0,0;"SMART BOMBS NOW BEING CONVERTED TO ENERGY. ": FOR f=1 TO 10: BEEP .01,65: PAUSE 10: NEXT f: LET smart=0: LET pow=pow+smen: IF pow>9999 THEN LET pow=9999 1727 GO TO 1700 1749 STOP 1751 CLS 1752 INK 7: CIRCLE 55,120,40: CIRCLE 55,120,4 1753 PLOT 94,112: DRAW 116,0: PLOT 94,128: DRAW 116,0: DRAW 0,-16 1754 PLOT 110,128: DRAW 8,30: DRAW -20,0: DRAW 0,16: DRAW 136,0: DRAW 0,-16: DRAW -108,0: DRAW -8,-30 1755 PLOT 110,112: DRAW 8,-30: DRAW -20,0: DRAW 0,-16: DRAW 136,0: DRAW 0,16: DRAW -108,0: DRAW -8,30 1756 PRINT AT 14,0; INK 6;" PLAN VIEW OF ""STARFIRE""" 1757 POKE 23607,60: PRINT AT 16,0;"At present we have ";edam;"% SDF." 1758 IF edam=0 THEN FOR f=1 TO 200: NEXT f: GO TO 1999 1759 FOR f=1 TO (edam+5)/10: PRINT AT z(1,f),z(2,f); INK 2; PAPER 7; BRIGHT 1; FLASH 1;"X": BEEP .1,0: PAUSE 20: NEXT f 1760 PRINT AT 18,0;"This will require ";edam*50;" units"'"to repair." 1765 PRINT AT 21,0;"Do you authorise this? (y/n)" 1766 LET i$=INKEY$: IF i$="" THEN GO TO 1766 1767 IF i$="y" OR i$="Y" THEN GO TO 1770 1768 IF i$="N" OR i$="n" THEN INK 0: PAPER 7: BORDER 7: CLS : GO SUB 100: GO TO 130 1769 GO TO 1766 1770 IF pow-50*edam<=0 THEN PRINT #0;AT 0,0;" WE HAVEN'T ENOUGH ENERGY": BEEP 1,-35: LET i$="n": GO TO 1768 1771 FOR f=1 TO (edam+5)/10: PRINT AT z(1,f),z(2,f); PAPER 1; BRIGHT 1;" ": BEEP .1,0: FOR g=1 TO 40: NEXT g: NEXT f 1772 BEEP 1,20: LET pow=pow-50*edam: LET edam=0: LET i$="n": GO TO 1768 1998 PAUSE 0 1999 INK 0: PAPER 7: BORDER 7: CLS : GO SUB 100: GO TO 130 2000 REM report 2001 CLS 2002 PRINT '' BRIGHT 1;" GALACTIC WAR STATUS REPORT " 2003 POKE 23607,60 2010 PRINT "________________________________" 2020 PRINT '"Active Xtardans Remaining:";kli 2030 PRINT '"Stardates Left: ";INT time 2040 PRINT '"Energy Bank Reserves: ";INT pow 2045 PRINT '"Ship Damage Factor: ";EDAM;"%" 2050 PRINT "________________________________" 2055 IF INKEY$<>"" THEN GO TO 2055 2060 PRINT AT 21,0; INK 3;"Press any key to continue-": IF INKEY$="" THEN GO TO 2060 2070 CLS : GO SUB 100: GO TO 130 2500 LET seds=0: LET klcon=80: OVER 1: IF skli<1 THEN LET g$="xtardans": OVER 0: GO TO 5000 2501 BORDER 1: PAPER 0: INK 7: CLS : PLOT 0,0: DRAW 255,0: DRAW 0,175: DRAW -255,0: DRAW 0,-175 2502 LET cux=112: LET cuy=83 2503 LET kx=10+INT (RND*8)-4: LET ky=15+INT (RND*10)-5 2504 LET okx=kx: LET oky=ky 2505 PRINT AT kx,ky;"\k" 2506 PRINT AT 2,9; OVER 0; INK 7; FLASH 1; BRIGHT 1; PAPER 2;"BATTLESTATIONS" 2510 PRINT #0;AT 0,0; INK 7;" SD TORP SDF ENERGY TIME XTA " 2520 FOR F=1 TO 20: PLOT RND*255,RND*175: NEXT F 2521 POKE 65001,3: POKE 65004,4: POKE 65007,220: LET l=USR 65000: PRINT AT 2,9; OVER 0;" " 2530 PRINT #0;AT 1,1; FLASH 1; INK 2; PAPER 7;" " 2540 PRINT #0;AT 1,5;TORP;TAB 10;"0" AND edam<10;edam;"%";TAB 16;pow;" ";TAB 24;INT (TIME+.5);TAB 29;SKLI 2550 PLOT cux,cuy: DRAW 24,0: DRAW 0,18: DRAW -24,0: DRAW 0,-17 2555 IF INKEY$="4" THEN LET lasers=1 2556 LET ocux=cux: LET ocuy=cuy 2560 LET cux=cux+(8 AND INKEY$="h")-(8 AND INKEY$="f") 2565 LET cuy=cuy+(8 AND INKEY$="t")-(8 AND INKEY$="b") 2566 IF cux<0 OR cux>230 THEN LET cux=ocux 2567 IF cuy<0 OR cuy>156 THEN LET cuy=ocuy 2568 PRINT AT okx,oky;"\k";AT kx,ky;"\k" 2580 PLOT ocux,ocuy: DRAW 24,0: DRAW 0,18: DRAW -24,0: DRAW 0,-17 2590 PLOT cux,cuy: DRAW 24,0: DRAW 0,18: DRAW -24,0: DRAW 0,-17 2601 IF INKEY$="4" OR lasers=1 THEN GO TO 2700 2602 LET oky=ky: LET okx=kx 2609 IF kli>1 THEN IF RND>dr/10 THEN GO TO 2620 2610 LET kx=kx+INT (RND*3)-1 2611 LET ky=ky+INT (RND*3)-1 2612 IF kx<0 OR kx>21 OR ky<0 OR ky>31 THEN LET kx=10: LET ky=15 2620 IF klcon<30 THEN IF RND<.1 THEN LET seds=5: PRINT #0;AT 1,1; INK 7; BRIGHT 1;"\::\::" 2630 IF seds>1 THEN LET seds=seds-1 2631 IF seds=1 THEN GO TO 1000 2640 IF INKEY$="a" THEN OVER 0: INK 0: BORDER 7: PAPER 7: CLS : GO SUB 100: GO TO 130 2645 LET pow=pow-(dr*15+23): IF pow<=0 THEN LET pow=0: GO TO 6500 2650 LET time=time-.05: IF time<=0 THEN LET time=0: GO TO 6500 2655 PRINT #0;AT 1,16;pow;" ";AT 1,24;INT (time+.5);" " 2660 IF RND>.075*(skli+(3 AND kli=1)) THEN GO TO 2670 2661 POKE 65031,5: POKE 65034,2: POKE 65037,120: POKE 65071,2: POKE 65075,6: POKE 65090,1 2663 BORDER 2: LET l=USR 65030+USR 65070: BORDER 1 2664 LET pow=pow-INT (RND*(dr*50))+100 2665 IF pow<=0 THEN LET pow=0: GO TO 6500 2666 IF shen<0 THEN LET shen=0 2667 LET EDAM=EDAM+INT ((6001-shen)/6000*(RND*100+30))+INT (RND*7): PRINT #0;AT 1,10;"0" AND edam<10;edam;"% ": LET shen=shen-10*edam: IF edam>=100 THEN LET edam=100: PRINT #0;AT 1,10;"100%": GO TO 1000 2690 GO TO 2555 2699 REM fire torpedoes 2700 LET lasers=0: IF torp=0 THEN BEEP .2,-40: GO TO 2799 2701 POKE 65031,3: POKE 65034,7: POKE 65037,50 2702 LET l=USR 65030 2703 POKE 65031,1: POKE 65034,15: POKE 65037,200: LET l=USR 65030 2704 LET torp=torp-1: PRINT #0;AT 1,5;torp;" " 2705 LET oocux=cux: LET oocuy=cuy: LET cux=cux+(8 AND INKEY$="h")-(8 AND INKEY$="f"): LET cuy=cuy+(8 AND INKEY$="t")-(8 AND INKEY$="b") 2710 LET xx=cux+9: LET yy=cuy+12 2720 FOR f=1 TO 2: PLOT 0,80: DRAW xx,yy-80 2722 PLOT 255,80: DRAW xx-255,yy-80 2730 PLOT 0,77: DRAW xx,yy-77 2731 PLOT 255,77: DRAW xx-255,yy-77: NEXT f 2740 IF INT (1+cux/8)=ky AND 21-INT (1+cuy/8)=kx THEN POKE 65071,2: POKE 65075,5: POKE 65090,3: POKE 65031,1: POKE 65034,3: POKE 65037,175: LET l=USR 65070+USR 65030: LET cux=oocux: LET cuy=oocuy: GO TO 2760 2750 LET cux=oocux: LET cuy=oocuy 2751 GO TO 2602 2760 LET klcon=klcon-INT (RND*100) 2761 IF klcon>0 THEN GO TO 2799 2762 LET klcon=klcon-INT (RND*100): IF klcon<=0 THEN LET seds=0: LET kli=kli-1: LET g(qx,qy,1)=g(qx,qy,1)-1: LET skli=skli-1: LET pow=pow+INT (RND*(750))+400: PRINT AT kx,ky; PAPER 0; OVER 0; INK 6; BRIGHT 1;"\e": POKE 65031,1: POKE 65034,10: POKE 65037,255: LET l=USR 65030 2763 IF pow>9999 THEN LET pow=9999 2764 IF skli=0 THEN BORDER 7: OVER 0: INK 0: PAPER 7: CLS : GO SUB 100: GO TO 130 2765 IF klcon<=0 THEN LET klcon=80: GO TO 2500 2799 GO TO 2602 3000 REM specific damage 3060 RETURN 3699 REM escape from dock proc 3700 LET pow=pow-(ABS vel)*12: IF pow<0 THEN LET pow=0: GO TO 6500 3710 GO TO 5030 4000 REM L.R. scan 4001 GO SUB 100 4002 LET qw=5 4003 PRINT AT qw,9; 4010 FOR f=qx-1 TO qx+1 4020 FOR g=qy-1 TO qy+1 4030 IF g<1 OR g>10 OR f<1 OR f>10 THEN PRINT "-- ";: GO TO 4050 4035 IF g(f,g,1)<0 OR g(f,g,2)<0 OR g(f,g,2)>100 THEN GO TO 4100 4040 PRINT INVERSE 1;g(f,g,1);g(f,g,2);" "; 4050 NEXT g 4060 LET qw=qw+2: PRINT AT qw,9; 4070 NEXT f 4080 GO TO 130 4100 IF g(f,g,1)=-1 THEN PRINT INVERSE 1;"0"; FLASH 1; BRIGHT 1; INK 2; PAPER 6;"\j"; BRIGHT 0; FLASH 0; INK 0;" ";: GO TO 4050 4110 IF g(f,g,2)>100 THEN PRINT INVERSE 1;g(f,g,1);g(f,g,2)-100;" ";: GO TO 4050 4130 GO TO 4050 4500 LET skli=g(qx,qy,1): RETURN 4509 REM SMART BOMB RELEASE 4510 IF smart=0 THEN BEEP .5,-45: GO TO 130 4511 PRINT AT 12,8; INK 7; PAPER 0; BRIGHT 1;" SMART BOMBS";AT 14,10;"RELEASED" 4512 LET bigskli=0 4520 FOR f=1 TO INT (RND*2)+2 4521 POKE 65001,10: POKE 65004,5: POKE 65007,100 4522 POKE 65071,1: POKE 65075,INT (RND*2)+5: POKE 65090,INT (RND*15)+1 4523 LET l=USR 65000+USR 65070: NEXT f 4530 FOR f=qx-1 TO qx+1: FOR g=qy-1 TO qy+1 4540 IF g<1 OR g>10 OR f<1 OR f>10 THEN GO TO 4580 4550 LET oneskli=g(f,g,1): IF g(f,g,1)<1 THEN LET oneskli=0 4560 LET bigskli=bigskli+oneskli 4570 IF g(f,g,1)>0 THEN LET g(f,g,1)=0 4571 LET g(f,g,2)=0 4580 BEEP .001,30: NEXT g: NEXT f 4590 LET powused=(bigskli*1000+INT (RND*1000))+INT (RND*1000) 4593 LET kli=kli-bigskli: IF kli=0 THEN GO TO 7000 4594 LET pow=pow-powused: IF pow<1 THEN LET pow=0: GO TO 6500 4599 LET smart=smart-1: GO TO 4000 4600 REM T I M E P O R T A L 4601 LET g(qx,qy,1)=0 4602 LET step=2 4605 BORDER 0: BRIGHT 1: PAPER 0: INK 7: CLS 4610 FOR g=1 TO 5: BEEP .1,25: FOR f=1 TO 4: NEXT f: NEXT g 4611 LET g$="A warning from the computer:": GO SUB 36: LET g$="": GO SUB 36: LET g$="The time portal we have entered": GO SUB 36 4612 LET g$="will be hazardous to navigate.": GO SUB 36 4613 LET g$="If the ship touches the walls ": GO SUB 36: LET g$="of the portal, a time vortex ": GO SUB 36: LET g$="will be produced, and we will ": GO SUB 36: LET g$="be trapped forever." 4614 GO SUB 36: BRIGHT 0: LET g$="": GO SUB 36: BEEP .1,35: LET g$="Press a key": GO SUB 36 4615 IF INKEY$="" THEN GO TO 4615 4620 BEEP .5,0 4630 BORDER 1: CLS : FOR f=1 TO 25: PLOT RND*255,RND*175: NEXT f 4635 LET ink=7: GO SUB 7900 4640 FOR f=34 TO 218 STEP 8 4650 PLOT f,175: LET aa=INT (RND*7)+1: DRAW PAPER aa; INK aa; BRIGHT 1;0,-175: NEXT f 4660 LET down=10: FOR f=25 TO 3 STEP -3 4680 IF down<0 THEN LET down=0 4690 PRINT AT down,f; PAPER 0;" ";AT down+1,f;" " 4691 LET down=down+SGN (RND-.5): IF down>20 THEN LET down=20 4700 NEXT f 4710 PRINT AT 10,29; INK 4;"\s\d" 4712 BEEP .1,20: BEEP .05,25: BEEP .07,22 4713 FOR f=20 TO 10 STEP -.5: BEEP .01,f: NEXT f 4750 LET ed=10: LET ea=29 4760 LET oed=ed: LET oea=ea 4766 LET ed=ed+(INKEY$="6")-(INKEY$="7"): LET ea=ea-1 4767 IF ATTR (ed,ea)>63 THEN GO TO 4950 4770 PRINT AT oed,oea; PAPER 0;" ";AT ed,ea; INK 4;"\s\d" 4781 IF ea=1 THEN GO TO 4900 4820 GO TO 4760 4900 REM A SAFE PASSAGE 4901 PRINT AT ed,ea; PAPER 0;" ": FOR f=10 TO 30 STEP .5: BEEP .005,f: NEXT f 4910 BORDER 1: INK 7: PAPER 1: CLS 4920 PRINT AT 1,0;" Good manoeuvering,";AT 3,6;" Captain ";n$;"!" 4930 PRINT AT 5,0;"By your skill, we've gained" 4940 LET tipl=INT (RND*10)+10: PRINT '"an extra ";tipl;" stardates." 4941 LET time=time+tipl: PRINT AT 12,0;"New time is ";INT (time+.5) 4942 LET qx=INT (RND*10)+1: LET qy=INT (RND*10)+1: IF g(qx,qy,1)<>0 AND g(qx,qy,2)<>0 THEN GO TO 4942 4943 PRINT AT 16,0;"Our new coordinates are ";qx-1;",";qy-1;"." 4944 GO SUB 4500 4945 INPUT "Press 'ENTER' to continue "; LINE g$: INK 0: PAPER 7: BORDER 7: CLS : GO SUB 100: GO TO 130 4950 REM CRASH 4951 PRINT AT oed,oea; PAPER 0;" ";AT ed,ea; BRIGHT 1; INK 9; PAPER 8;"\s\d": BEEP .2,-35 4952 FOR f=10 TO -10 STEP -1: BEEP .01,f: BORDER 7: BORDER 0: NEXT f: GO TO 6500 4999 STOP 5000 BORDER 4: CLS : PRINT AT 5,0;" Captain ";n$;"-"'''" There are no ";g$;" in"''" quadrant ";qx-1;",";qy-1;"." 5001 LET ink=0: GO SUB 7900 5010 BEEP .2,30 5020 PAUSE 200 5030 BORDER 7: PAPER 7: INK 0: CLS : GO SUB 100: GO TO 130 5500 REM Bump into Starbase 5510 BORDER 2: PAPER 0: INK 7: CLS : PRINT AT 3,3;n$;":" 5511 LET upow=INT (RND*1000)+200 5512 LET mendtime=INT (RND*2)+1 5520 PRINT '''" You have crashed the 'STARFIRE'-the resultant damage repairs will use up ";upow;" energy units,"'"and will take ";mendtime;" stardate";"s" AND mendtime<>1;" to "'" repair." 5521 LET ink=7: GO SUB 7900 5530 BEEP .4,-22: LET pow=pow-upow: IF pow<=0 THEN LET pow=0: GO TO 6500 5540 LET time=time-mendtime: IF time<=0 THEN LET time=0: GO TO 6500 5550 PAUSE 300: BORDER 7: PAPER 7: INK 0: CLS : GO SUB 100: GO TO 130 5700 BORDER 2: INK 7: PAPER 0: CLS : PRINT AT 3,4;"Captain ";n$;"-" 5702 PRINT AT 6,0;" We cannot attempt to dock againso soon after the last attempt, as the ret fuel tanks must be replenished." 5704 PRINT AT 15,0;" TIME REQUIRED:";INT ((2-(timetry-time))*100)/100;" STD" 5705 LET ink=7: GO SUB 7900 5710 BEEP .1,-20: PAUSE 300: GO TO 5030 6000 REM STARBASE DOCK UP 6001 IF g(qx,qy,2)>100 THEN GO TO 6400 6002 OVER 0 6003 IF shen>=2000 THEN GO TO 7700 6004 CLS 6010 BORDER 2: CLS : DRAW 255,0: DRAW 0,175: DRAW -255,0: DRAW 0,-175 6011 LET c$="" 6012 LET time=time-1 6013 LET retime=INT (RND*3)+2 6015 IF edam<50 THEN LET edam=0 6016 IF edam>=50 THEN GO SUB 6210 6021 LET torp=torp+INT (RND*15)+15: IF torp>30 THEN LET torp=30 6022 POKE 23607,60: PRINT AT 4,10;"We have now docked,";AT 7,13;"Captain ";n$;"." 6023 POKE 23607,249: PRINT AT 1,3; BRIGHT 1;"MAX";AT 19,3;"MIN";AT 9,4; PAPER 2; INK 7;"POWER";AT 10,4;"LEVEL" 6030 PLOT 7,168: DRAW 0,-153: DRAW 9,0: DRAW 0,153: DRAW -9,0 6031 PLOT 8,16: DRAW INK 5; PAPER 5;0,150 6038 PLOT 120,56: DRAW PAPER 6;71,0: DRAW PAPER 6;0,23: DRAW PAPER 6;-71,0: DRAW PAPER 6;0,-23 6039 PRINT AT 13,16; PAPER 6;" ";AT 13,16; PAPER 2;" ";AT 13,18; PAPER 4; INK 1; FLASH 1;" "; FLASH 0; INK 6;AT 13,20; PAPER 3;" ";AT 13,22; PAPER 6; INK 0;"\b" 6040 LET lev=19-(pow/555.555) 6050 LET pow=pow+INT (RND*2000)+4000: IF pow>9999 THEN LET pow=9999 6060 LET lup=19-(pow/555.555) 6070 FOR f=lev TO lup STEP -.5: PRINT AT f,1; PAPER 1; INK 7;">": BEEP .05,30-f: BEEP .04,28: PRINT AT f,1; PAPER 5;" ": NEXT f 6080 PRINT AT lup,1; INK 2; PAPER 7; BRIGHT 1; FLASH 1;">" 6190 BEEP 2,30-f 6200 BORDER 7: PAPER 7: INK 0: CLS : GO SUB 100: GO TO 130 6210 REM Damage Repairs 6211 PRINT AT 1,1;"MESSAGE FROM STARBASE:" 6215 POKE 23607,60 6220 PRINT AT 3,1;"Captain ";n$;"-" 6230 PRINT AT 7,1;"We have ";edam;"% damage,";AT 9,1;"which will require ";retime;" STD";AT 11,1;"to repair." 6240 PRINT AT 16,1;"Do you authorise this? (Y/N)" 6250 LET i$=INKEY$: IF i$="" OR (i$<>"y" AND i$<>"Y" AND i$<>"n" AND i$<>"N") THEN GO TO 6250 6260 IF i$="N" OR i$="n" THEN GO TO 6280 6270 LET edam=0: LET time=time-retime 6280 BEEP .1,30: CLS : LET ink=0: GO SUB 7900: RETURN 6399 STOP 6400 BORDER 3: PAPER 7: BRIGHT 1: CLS : INK 0: LET ink=0: GO SUB 7900 6410 PRINT AT 2,1; OVER 1;"A MESSAGE FROM THE XTARDANS:": POKE 23607,60: PRINT AT 5,1; OVER 1;"You've just docked successfully";AT 6,1;"into OUR starbase: (We captured";AT 7,1;"it!).";AT 9,1;"You & your ship are now our";AT 10,1;"prisoners.": BEEP .3,-20: PRINT AT 20,1;"Press a key" 6420 IF INKEY$<>"" THEN GO TO 6420 6430 IF INKEY$="" THEN GO TO 6430 6500 BRIGHT 0: BORDER 7: PAPER 7: INK 0: CLS : BORDER 1 6501 IF pow<1 THEN LET pow=0 6502 IF time<1 THEN LET time=0 6510 PRINT ''" Time = ";INT time''" Power = ";INT pow''" S.D.F.= ";edam;"%" 6520 PRINT ''' INK 2;"MESSAGE FROM STARFLEET COMMAND:" 6530 PRINT ''" YOU'VE FAILED YOUR MISSION, THEXTARDANS HAVE CONQUERED THE GALAXY. I AM..." 6535 FOR f=1 TO 70: IF INKEY$="s" THEN RUN 25 6536 NEXT f 6540 POKE 65031,10: POKE 65034,10: POKE 65037,60: LET l=USR 65030: POKE 65071,4: POKE 65075,5: POKE 65090,10: LET l=USR 65070: PRINT INK 2;'" AAARRRRGGGGHHHH!" 6541 IF INKEY$="s" THEN RUN 25 6550 PAUSE 200 6551 IF INKEY$="s" THEN RUN 25 6560 FOR f=1 TO 60: BORDER 2: LET l=23: BORDER 0: IF INKEY$="s" THEN RUN 25 6561 NEXT f 6570 POKE 23607,60: PAPER 0: INK 7: BORDER 0: CLS 6580 PRINT AT 1,7;"""We, the Xtardans, have" 6590 PRINT AT 2,7;"just shot your commander." 6600 PRINT AT 4,11;"We are a nasty bunch," 6610 PRINT AT 5,2; INK 4;"\.." 6620 PRINT AT 6,1; INK 4;"\.' \'."; INK 7;" and we do horrible" 6630 PRINT AT 7,3; INK 4;"\ :\. \ .\''\.." 6640 PRINT AT 8,2; INK 4;"\..\::\::\::\:.\. \ \'."; INK 7;" things." 6650 PRINT AT 9,2; INK 4;"\::@\::\::@\:." 6660 PRINT AT 10,2; INK 4;"\':\::''\::\::" 6670 PRINT AT 11,2; INK 4;"\ '\::\..\..\::\' ";TAB 14; INK 7;"LIKE THIS," 6680 PRINT AT 12,2; INK 4;"\ .\..\::\::\..\:." 6690 PRINT AT 13,1; INK 4;"\ .\::\::\::\::\:'\':\: ";TAB 18; INK 7;"FOR INSTANCE:" 6700 PRINT AT 14,1; INK 4;"\::\ '\::\::\::\: \ '\::" 6710 PRINT AT 15,0; INK 4;"\ :\: \ \::\::\::\: \ \':\: ";TAB 19; INK 7;"(bye!)""" 6720 PRINT INK 4;AT 16,0;"\ :\: \ \::\::\::\: \ \ :\::" 6730 PRINT INK 4;AT 17,0;"\ '\:.\..\''\'.\.'\' \ .\::\: " 6740 PRINT INK 4;AT 18,0;"\..\.:\::\::\::\::\::\::\::\..\.." 6750 POKE 23607,249: PRINT AT 20,0; BRIGHT 1; INK 7;" A XTARDAN"'"REPRESENTATIVE" 6751 IF INKEY$="s" THEN RUN 25 6770 POKE 65001,1: POKE 65004,110: POKE 65007,255: LET l=USR 65000 6995 BORDER 7: PAUSE 20: PAPER 0: CLS : PAUSE 50: INK 0: PAPER 7: CLS 6996 POKE 23607,60: POKE 23659,0: PRINT AT 22,0'" \* 1982 Sinclair Research Ltd": POKE 23659,2 6997 PAUSE 0: PRINT AT 10,2;"Ho ho! Bet that scared you!" 6998 POKE 65001,10: POKE 65004,10: POKE 65007,50: LET l=USR 65000: DIM i$(1): INPUT "Another go? ";i$: IF i$<>"n" THEN RUN 25 6999 GO TO 9999 7000 REM WIN WIN WIN WIN 7001 POKE 23607,60 7010 OVER 1: BRIGHT 1: PAPER 7: CLS : BORDER 2: INPUT "" 7011 LET ink=0: GO SUB 7900 7020 INK 6: PRINT AT 1,3;"\ .\..\..\. "; INK 0;"""Well done indeed." 7030 PRINT AT 2,2;"\ .\::\::\::\::\:." 7040 PRINT AT 3,1;"\ .\::"; PAPER 0;"-\::\::\::-"; PAPER 7;"\: ";TAB 13; INK 0;"You, ";n$;"," 7050 PRINT AT 4,1;"\ :"; PAPER 0;"\::@\::\::\::@\::" 7060 PRINT AT 5,1; PAPER 0;"\::\::\::\::U\::\::\::"; PAPER 7;TAB 14; INK 0;"have freed the" 7070 PRINT AT 6,1;"\':\::"; PAPER 0;"\:.\''\''\''\.:\::" 7080 PRINT AT 7,2;"\ '\::\::\::\::\::\: ";TAB 15; INK 0;"galaxy from the" 7090 INK 6: PRINT AT 8,3; PAPER 0;"\''\''\''\''"; PAPER 7;"\' " 7100 INK 1: PRINT AT 9,3;"\::\::\::\::\..";TAB 13; INK 0;"Xtardan menace." 7110 PRINT AT 10,0;"\ .\.:\::\::\::\::\::\::\::\:." 7120 PRINT PAPER 7;"\::\::\::\::\::\.'\''\::\::\::"; PAPER 7;"\: ";TAB 15; INK 0;"You deserve a" 7130 PRINT PAPER 7;"\::\::\::\::\::\:'\.:\::\::\::\: " 7140 PRINT "\::\::\::\::\::\::\::\: \::\::\::\ "; INK 0;"medal.""" 7150 PRINT "\::\::\::\::\::\::\::\: \':\::\::\. " 7160 PRINT "\::\::\::\::\::\::\::\:.\ \':\::\:.\. " 7170 PRINT "\::\::\::\::\::\::\::\::\ \ :\::\::\::\::\:.\.. "; INK 6;"\ .\.." 7180 PRINT "\::\::\::\::\::\::\::\::\ \ \':\::\::\::\::\::\::"; PAPER 0; INK 6;"\ :\::"; PAPER 7;"\' " 7190 PRINT INK 4;"\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::" 7200 POKE 23607,249: PRINT AT 20,2; INK 0;"^ SUPREME COMMANDER" 7201 FOR f=20 TO 40: BEEP .005,f: BEEP .005,70-f: NEXT f: FOR f=50 TO 30 STEP -1: BEEP .005,f: BEEP .005,40-f: NEXT f 7202 FOR f=1 TO 4: BEEP .01,10: BEEP .05,12: NEXT f: BEEP .04,5: BEEP .04,7: BEEP .04,10: BEEP .04,15: BEEP .04,26 7210 DIM l$(1): INPUT INK 7;"Another go? (y/n) ";l$ 7211 BRIGHT 0 7212 OVER 0 7220 IF l$<>"n" AND l$<>"N" THEN RUN 25 7230 GO TO 9999 7500 REM *** asteroid storm 7510 BORDER 0: PAPER 0: INK 7: CLS 7515 PRINT AT 3,0; INK 2; PAPER 7; BRIGHT 1; FLASH 1;"RED ALERT - ASTEROID FIELD AHEAD" 7520 POKE 65001,3: POKE 65004,8: POKE 65007,220: LET l=USR 65000 7525 LET go=0: CLS : FOR f=1 TO 16: LET lll=RND: PRINT AT 21,INT (RND*22)+2; BRIGHT 1; INK 7;"\h" AND lll<.5;"\g" AND lll>=.5: LET l=USR 3209: NEXT f 7530 LET alo=0 7540 PRINT AT 0,alo; INK 5;"\o\l": IF go=0 THEN IF INKEY$<>"" THEN LET go=1: BEEP .1,32 7541 LET alo=alo+(go=1) 7542 IF alo=31 THEN POKE 65001,1: POKE 65004,10: POKE 65007,255: POKE 65031,1: POKE 65034,10: POKE 65037,255: LET l=USR 65000+USR 65030: BORDER 7: PAPER 7: INK 0: CLS : GO SUB 100: GO TO 130 7543 IF go=1 THEN BEEP .0075,70-alo 7550 IF ATTR (1,alo)>63 OR ATTR (1,alo+1)>63 THEN GO TO 7600 7560 LET lll=RND: IF lll>.5 THEN PRINT AT 21,INT (RND*22)+2; BRIGHT 1; INK 7;"\g" AND lll<.75;"\h" AND lll>=.75 7570 LET l=USR 1988: GO TO 7540 7601 LET l=USR 1988: PRINT OVER 1;AT 0,alo-1; INK 5;" \o\l " 7602 BORDER 7: POKE 65071,3: POKE 65075,7: POKE 65090,6: LET l=USR 65070: BORDER 0: INK 0: CLS : GO TO 6500 7700 REM STBASE BLOW- UP 7710 BORDER 2: INPUT "": POKE 65071,4: POKE 65075,5: POKE 65090,10: LET l=USR 65070: BORDER 7: PAPER 7: CLS : INK 0 7720 POKE 23607,249: PRINT AT 0,0;"MESSAGE FROM STARFLEET COMMAND-" 7730 PRINT ''"YOUR SHIELDS, WHICH YOU LEFT UP WHILE DOCKING, HAVE JUST VAPOR- IZED ONE OF OUR MOST EXPENSIVE STARBASES." 7740 PRINT ''"THERE'LL BE A COURT MARTIAL FOR YOU IF YOU GET BACK TO EARTH!" 7750 PRINT ''"FROM"''"the supreme commander " 7760 LET g(qx,qy,2)=g(qx,qy,2)-1: IF g(qx,qy,2)<0 THEN LET g(qx,qy,2)=0 7770 PRINT #0;AT 1,0;"Press a key": IF INKEY$="" THEN GO TO 7770 7780 BEEP .1,32: CLS : GO SUB 100: GO TO 130 7899 STOP 7900 PLOT 0,0: DRAW INK ink;255,0: DRAW INK ink;0,175: DRAW INK ink;-255,0: DRAW INK ink;0,-175: RETURN 7950 REM SELF DESTRUCT 7960 POKE 65001,4: POKE 65004,20: POKE 65007,100: LET l=USR 65000 7970 BORDER 2: PAPER 2: CLS : INK 7 7980 PRINT AT 0,0;"CONFIRMATION REQUIRED:" 7990 PRINT ''"IS THE SELF-DESTRUCT SEQUENCE ACTIVATED?" 7991 PRINT ''"(Y/N)" 7992 LET i$=INKEY$: IF i$="" THEN GO TO 7992 7993 IF i$<>"y" AND i$<>"Y" THEN GO TO 1999 7994 BEEP 1,0: CLS 7995 POKE 23607,60: PRINT AT 2,0;"Captain ";n$;"-";''" I hope your excuse for giving up & blowing up USS 'Starfire' is a valid one..." 7996 FOR f=1 TO 150: NEXT f: 7997 POKE 65071,2: POKE 65075,7: POKE 65090,1: BORDER 7: LET l=USR 65070+USR 0: 8999 STOP 9000 RANDOMIZE : POKE 23607,249: REM INIT 9001 CLS : BORDER 2: PRINT AT 1,1;"VIRGIN GAMES" 9002 LET seds=0: PRINT ''" presents" 9003 PRINT ''" S T A R F I R E"'' 9004 LET col=0: FOR g=67 TO 179 STEP 16: PLOT g,103: DRAW INK col; PAPER col; BRIGHT 1;0,-80: LET col=col+1: NEXT g 9006 POKE 23609,25 9010 DIM s$(10,10) 9011 LET try=0 9012 LET lasers=0 9015 LET EDAM=0 9016 RESTORE 9017: DIM z(2,10): FOR f=1 TO 10: READ z(1,f): READ z(2,f): NEXT f 9017 DATA 0,12,5,2,6,12,6,25,12,20,12,28,6,5,3,14,8,2,2,6 9020 LET time=INT (RND*10)+50 9021 LET torp=15+INT (RND*10) 9022 LET pow=5000+INT (RND*2000) 9023 LET retflag=0 9024 LET timetry=time 9025 LET shen=3000 9026 LET smart=INT (RND*3)+1: LET smen=INT (1000*RND) 9027 LET star=20 9028 LET kli=INT (RND*15)+5 9029 LET sta=INT (RND*4)+2 9030 REM LET qx=INT (RND*10)+1 9031 RESTORE 9032: FOR x=1 TO 10: READ q$: FOR f=0 TO 7: READ cha: POKE USR q$+f,cha: NEXT f: NEXT x 9032 DATA "k",0,66,90,126,90,66,0,0 9034 DATA "e",146,84,0,198,0,84,146,0 9035 DATA "s",255,16,8,4,2,7,3,0,"d",128,0,255,32,64,254,252,0 9036 DATA "g",0,16,56,62,62,62,126,52 9037 DATA "h",24,56,252,255,126,38,4,0 9038 DATA "o",255,2,1,127,127,1,2,255 9039 DATA "l",128,24,60,254,254,60,24,128 9040 DATA "j",24,24,36,195,195,36,24,24 9041 DATA "b",0,60,126,126,126,126,60,0 9060 GO SUB 9240 9070 DIM g(10,10,2): REM galaxy 9080 FOR f=1 TO kli 9081 BEEP .01,f*2-20 9090 LET x=INT (RND*10)+1 9100 LET y=INT (RND*10)+1 9120 LET g(x,y,1)=g(x,y,1)+1 9130 NEXT f 9131 LET x=INT (RND*10)+1 9132 LET y=INT (RND*10)+1 9133 IF g(x,y,1)<>0 OR g(x,y,2)<>0 THEN GO TO 9131 9134 LET g(x,y,1)=-1 9140 FOR f=1 TO sta 9150 LET x=INT (RND*10)+1 9160 LET y=INT (RND*10)+1 9170 LET g(x,y,2)=g(x,y,2)+1 9171 IF g(x,y,1)>0 THEN LET g(x,y,2)=100+g(x,y,2) 9180 NEXT f 9190 LET qx=INT (RND*10)+1: LET qy=INT (RND*10)+1 9191 IF g(qx,qy,2)=-1 OR g(qx,qy,1)=-1 THEN GO TO 9190 9200 BORDER 7 9210 LET skli=g(qx,qy,1) 9220 GO TO 9250 9221 DATA "1 Android (ZX80 brain)","2 Android (ZX81 brain)" 9222 DATA "3 Barely Humanoid","4 Junior Captain","5 Senior Captain" 9223 DATA "6 Sub-Lieutenant","7 Lieutenant","8 Fleet Commander" 9224 DATA "9 Super Hero","10 Impossible" 9240 CLS 9241 BORDER 6: INPUT "": PRINT AT 3,0;" S T A R F I R E" 9242 POKE 23607,60: PRINT ''" Please enter your name,Captain."''"(standard Federation procedure)": LET ink=0: GO SUB 7900 9243 BEEP .1,30: INPUT "Your name: "; LINE n$: IF LEN n$<1 OR LEN n$>9 THEN PRINT AT 15,1; OVER 0;"That's no good:";AT 17,1;"A maximum of 9 letters, and a";AT 18,1;"minimum of 1, if you please.": BEEP .2,-35: GO TO 9243 9244 CLS : PRINT AT 1,0;" Which degree of difficulty do"''" you require?": GO SUB 7900 9245 DIM v$(25): FOR f=1 TO 10: READ v$: PRINT AT f+6,3; PAPER 1; INK 7; BRIGHT 1;v$: NEXT f 9246 PLOT 20,35: DRAW 208,0: DRAW 0,88: DRAW -208,0: DRAW 0,-88 9247 BEEP .05,0: BEEP .05,10: INPUT "Difficulty: ";dr 9248 IF dr<>INT dr OR dr<1 OR dr>10 THEN GO TO 9247 9249 LET time=time-dr: LET timetry=timetry-dr: LET kli=kli+dr: RETURN 9250 CLS : PRINT " Welcome aboard the destroyer ""Starfire"", "; 9270 PRINT "Captain ";n$;"." 9280 PRINT 9290 PRINT "STARDATE ";INT (RND*1000)+3000;":" 9300 POKE 23607,249: PRINT AT 5,2; BRIGHT 1;"GALACTIC WAR STATUS REPORT:" 9301 PRINT "________________________________" 9302 POKE 23607,60 9310 PRINT '"Federation ships left: "; BRIGHT 1;"01"; BRIGHT 0;"(yours)" 9320 PRINT '"Xtardans still active: "; BRIGHT 1;"0" AND kli<10;kli 9330 PRINT '"Functional Starbases : "; BRIGHT 1;0;sta 9335 PRINT '"Stardates left : "; BRIGHT 1;time 9340 PRINT "________________________________" 9350 PRINT ''" It's now up to you, ";n$;","'"to save the galaxy." 9360 BEEP .1,10: PRINT '"GOOD LUCK! [ you'll need it ]" 9370 PRINT #0; INK 2;" -Press any key to continue-" 9374 IF INKEY$<>"" THEN GO TO 9374 9375 IF INKEY$="" THEN GO TO 9375 9380 RETURN 9400 REM escape from BHol 9401 FOR f=0 TO 20: BEEP .005,f: BEEP .01,f*3: BEEP .01,-30: NEXT f 9402 FOR f=1 TO 20: NEXT f 9403 LET pow=INT (pow*.25) 9410 FOR f=1 TO 4: BEEP .1,24: NEXT f 9411 BORDER 2 9420 CLS : LET ink=7: GO SUB 7900: PRINT AT 2,1;"Captain ";n$;"-" 9421 LET qx=INT (RND*10)+1: LET qy=INT (RND*10)+1: IF g(qx,qy,1)<>0 OR g(qx,qy,2)<>0 THEN GO TO 9421 9430 PRINT AT 4,1;"Black hole evaded. Wanton use";AT 6,1;"of hyperspace results in our";AT 8,1;"now being at quadrant ";qx;",";qy;"." 9450 IF INKEY$<>"" THEN GO TO 9450 9460 PRINT AT 20,1;"press a key" 9470 IF INKEY$="" THEN GO TO 9470 9475 GO SUB 4500 9480 BORDER 7: INK 0: PAPER 7: CLS : GO SUB 100: GO TO 130 9999 REM That's all, folks! \* 1982 Virgin Games * dedicated to Caroline * `````````