Starfire

Products: Starfire
Type: Program
Platform(s): TS 2068
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.


Content

Appears On

Related Products

Rid the galaxy of the Xtardan Cruisers. A game of strategy and skill. You are the commander of the only...

Related Articles

Related Content

Image Gallery

Starfire

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 *

Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.

People

No people associated with this content.

Scroll to Top