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
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.







