0REM /// Galaxy /// V2 100REM Copyright Acornsoft 1982 200ONERRORRUN 300MODE7:VDU23;10,32,0;0;0;:FORI%=0TO&400STEP4:I%!&7C00=I%!TOP:NEXT:I%=TIME:REPEATUNTILTIME-I%>500 400OPENIN%=&96:GOTO%=9:GET%=99999:INT%=88888 500MODE 7:*FX4,1 600DIM SHAPE$(4),GCOL%(7,7),LIST%(7,7),LEN%(7,7):FORI=0TO4:READ SHAPE$(I):NEXT 700ONERRORGOTO800 800MODE7:PROCZWO:FORI%=1TO2:PRINTTAB(15,I%)CHR$&8D"Galaxy":NEXT:PRINT' 900IF%=7:PRINT''TAB(IF%)"Select difficulty of game"'''TAB(IF%)" 1"SPC(5)"Easy"''TAB(IF%)" 2"SPC(5)"Medium"''TAB(IF%)" 3"SPC(5)"Hard"''' 1000PRINT" Enter 1,2 or 3 then press RETURN:"; 1100PROCLGKGL 1200REPEATLN%=GETOR16:UNTILLN%>=ASC"1"ANDLN%<=ASC"3":VDULN% 1300REPEATON%=GET:UNTILON%=127ORON%=13:IFON%=127 VDU127:GOTO1200 1400LET%=LN%-ASC"0" 1500MODE7:PROCZWO:FORI%=1TO2:PRINTTAB(15,I%)CHR$&8D"Galaxy":NEXT:PRINT 1600KLING=0:Z%=0:LOG%=RND(200)+201:LINE%=FALSE:LOAD%=FALSE 1700ENG=2500:Tor=10:SHLD=1000:BASE=0 1800FORI%=0TO7:FORJ%=0TO7:LIST%(I%,J%)=50:X=0:Y=X 1900IFRND(9)<5 X=RND(LET%+1) 2000IFRND(99)>89 Y=1 2100GCOL%(I%,J%)=RND(5)+1+Y*10+X*100:KLING=KLING+X 2200BASE=BASE+Y:NEXT:NEXT 2300GOSUB%=KLING*12+RND(50)+LOG%:@%=1 2400PRINTTAB(7)"You are in command of"'TAB(7)"the Starship ENDEAVOUR."'TAB(7)"Your mission - to rid the"'TAB(7)"galaxy of the Kryon fleet"'TAB(7)"of ";KLING" ships before" 2500PRINTTAB(7)"Stardate ";GOSUB%/10" ."''TAB(14);:PROCQMWW:PRINTTAB(6)"Press SPACE BAR to continue":*FX15 2600REPEATUNTILGET$=" ":CLS 2700MODE%=RND(7):MOVE%=RND(7):QX=RND(7):QY=RND(7) 2800R%=GCOL%(QX,QY):X%=R%/100:R%=R% MOD 100 2900Y%=R%/10:R%=R% MOD 10 3000FORI%=0TO7:FORJ%=0TO7:LEN%(I%,J%)=0:NEXT:NEXT 3100LEN%(MODE%,MOVE%)=4 3200FORI%=1TO6 3300IFI%<=R% PROCJQRGHGLG(3) 3400IFI%<=Y% PROCJQRGHGLG(2) 3500IFI%<=X% PROCJQRGHGLG(-200) 3600NEXT 3700LEN%(MODE%,MOVE%)=4 3800ONERRORMODE7:PROCZHO:GOTO3900 3900PROCOHK 4000PROCLLUM 4100IF X%>0 AND RND(8)<5 POW=0:GOTO9700 4200IF KLING=0 PROCZHO:VDU28,0,11,39,0,12,31,11,3:PRINT"Congratulations !"''TAB(5)"You have saved the Federation"''TAB(12)"from the Kryons.":PROCVSIP:GOTO26800 4300IFLOG%>=GOSUB% THEN17300 4400B%=FNNOMGP(" Command (1-9) ") 4500IFB%=GET% PROCHUQ:GOTO26800 4600IFB%=INT% THEN 17300 4700LIST%(QX,QY)=GCOL%(QX,QY) 4800ON B% GOTO 4900,7700,9100,10100,12300,13000,13100,14500,14700 ELSE 15100 4900PROCKUXHVX:IFLINE% PROCHUQ:GOTO26800 5000IFLOAD%THEN17300 5100W%=FNNOMGP(" Warp (1-63) ") 5200IFW%=GET% PROCHUQ:GOTO26800 5300IFW%=INT%THEN17300 5400IFW%=0GOTO4400 5500IFW%<1ORW%>63GOTO5100 5600IFENGMODE% OR B%DIV400<>MOVE% 6100MODE%=P% DIV 400:MOVE%=B% DIV 400 6200IFMODE%<0ORMODE%>7ORMOVE%<0ORMOVE%>7 GOTO6400 6300IFLEN%(MODE%,MOVE%)<>0GOSUB22800:I%=W% 6400NEXT 6500MODE%=(P%-M%)/400:MOVE%=(B%-N%)/400 6600I%=QX+MODE%DIV 8:J%=QY+MOVE%DIV 8 6700MODE%=MODE% MOD 8:MOVE%=MOVE% MOD 8 6800IFMODE%<0MODE%=MODE%+8:I%=I%-1 6900IFMOVE%<0MOVE%=MOVE%+8:J%=J%-1 7000IFJ%<0J%=0:MOVE%=0:PROCUMW 7100IFJ%>7J%=7:MOVE%=7:PROCUMW 7200IFI%<0I%=0:MODE%=0:PROCUMW 7300IFI%>7I%=7:MODE%=7:PROCUMW 7400QX=I%:QY=J% 7500LEN%(MODE%,MOVE%)=4 7600IFQTX=QX AND QTY=QY GOTO3900ELSE GOTO2800 7700REM Long-range scan 7800PROCXJQMG:PRINTCHR$30TAB(39)'TAB(12)"Long range scan"TAB(39) 7900LOG%=LOG%+1:L%=2 8000PRINTTAB(GOTO%)CHR$OPENIN%"<,,,,,l,,,,,l,,,,,l"TAB(39) 8100PRINTTAB(GOTO%)CHR$OPENIN%+CHR$&35+CHR$&87;:FOROR%=0TO2:PRINT"KBS"CHR$OPENIN%+CHR$&6A+CHR$&87;:NEXT:PRINTTAB(39) 8200FORJ%=QY-1 TO QY+1:PROCIGL 8300PRINTTAB(GOTO%)CHR$OPENIN%+CHR$&35+CHR$&87; 8400FORI%=QX-1 TO QX+1 8500IFI%<0ORI%>7ORJ%<0ORJ%>7PRINT"***";:GOTO8900 8600IFGCOL%(I%,J%)<100PRINT"0"; 8700IFGCOL%(I%,J%)<10 PRINT"0"; 8800PRINTGCOL%(I%,J%);:LIST%(I%,J%)=GCOL%(I%,J%) 8900PRINTCHR$OPENIN%+CHR$&6A+CHR$&87;:NEXT:PRINTTAB(38):NEXT 9000PRINTTAB(GOTO%)CHR$OPENIN%"-,,,,,.,,,,,.,,,,,."TAB(39)'TAB(39):GOTO4100 9100IFENG<50 PROCZHO:PRINT" Insufficient energy":PROCLYKOP(1):PROCLKU:GOTO4100 9200LOG%=LOG%+1:REPEAT 9300POW=FNNOMGP(" Phaser energy "):UNTILPOW>0 9400IFPOW=GET% PROCHUQ:GOTO26800 9500IFPOW=INT%THEN17300 9600IFENG-POW<50 POW=ENG-50 9700PROCQWIVS 9800IFSHLD<0 PROCHUQ:GOTO26800 9900GCOL%(QX,QY)=GCOL%(QX,QY) MOD 100+100*X% 10000GOTO4200 10100LOG%=LOG%+1:PROCZHO 10200IFTor<1PRINT" No Torpedoes left":PROCLYKOP(1):PROCLKU:PROCXJQMG:GOTO4200 10300IFL%<>6 PROCOHK:PROCLLUM 10400PROCKUXHVX:IFLINE% PROCHUQ:GOTO26800 ELSE IFLOAD%THEN17300 ELSE PROCXJQMG 10500PRINTCHR$30:FORP%=0TOMOVE%:PRINT:NEXT:PRINTTAB(GOTO%-2)CHR$9CHR$9CHR$9;:FORP%=0TOMODE%:PRINTCHR$9CHR$9;:NEXT 10600PROCJKWKS:PRINT"E"CHR$8; 10700Tor=Tor-1:P%=MODE%*1000+500:B%=MOVE%*1000+500 10800FORI%=1TO16:REPEATP%=P%+M%:B%=B%+N%:UNTILP%DIV1000<>V% ORB%DIV1000<>H% 10900V%=P%DIV1000:H%=B%DIV1000 11000IFV%<0ORV%>7ORH%<0ORH%>7I%=20:GOTO11400 11100J%=(P%-M%)DIV 1000-V%:IFJ%<>0:J%=9-(J%+1)DIV2:PRINTCHR$J%CHR$J%; 11200J%=(B%-N%)DIV1000-H%:IFJ%<>0J%=10+(J%+1)DIV2:PRINTCHR$J%; 11300IFLEN%(V%,H%)<>0 I%=16 11400NEXT 11500P%=0 11600PROCZWO:IFI%=21GOTO12100 11700IFLEN%(V%,H%)=3:PRINT"*":GOTO12200 11800PRINTCHR$8" " 11900IFLEN%(V%,H%)=2:LEN%(V%,H%)=0:PROCZHO:PRINT" Star-Base destroyed":BASE=BASE-1:PROCLKU 12000IFLEN%(V%,H%)<0 PROCXNQJQ:LEN%(V%,H%)=0 12100POW=0:GOTO9700 12200PROCZHO:PRINT'" Torpedo absorbed by star":PROCLKU:POW=0:GOTO9700 12300TEMP=ENG+SHLD:LOG%=LOG%+1 12400REPEATSHLD=FNNOMGP(" Shield Level="):IFSHLD<0 SHLD=0 12500IFSHLD=GET% PROCHUQ:GOTO26800 12600IFSHLD=INT%THEN17300 12700UNTILTEMP>SHLD 12800ENG=TEMP-SHLD 12900GOTO4000 13000LOG%=LOG%+1:GOTO3900 13100PROCXJQMG:LOG%=LOG%+1:L%=7:PRINTCHR$30" Data available on Galaxy " 13200PRINT" 0 1 2 3 4 5 6 7" 13300FORI%=0TO7:PRINT" "I%":";:FORJ%=0TO7 13400U%=LIST%(J%,I%) 13500IFJ%=QX AND I%=QY THENPRINTCHR$127CHR$&88; 13600IFU%=50PRINT"***:";:GOTO14100 13700PRINTU%DIV 100;:U%=U%MOD 100 13800PRINTU%DIV 10;:U%=U%MOD 10 13900PRINTU%":"; 14000IFJ%=QX AND I%=QY THENPRINTCHR$127CHR$&89; 14100NEXT:PRINTI%:NEXT 14200PRINT" 0 1 2 3 4 5 6 7"'TAB(39) 14300GOTO4200 14400REM Freeze game 14500PROCZHO:PRINTTAB(13,0)"Game frozen";:LN%=GET:PROCZHO:GOTO3900 14600REM Relinquish command 14700MODE7:PRINTTAB(9,9)"Do you really want to"'TAB(9)"end the game (Y/N) "; 14800PROCJU:IFLN%=ASC"N" MODE7:PROCZHO:GOTO3900 14900MODE7:PRINTTAB(5,9)"Do you want another game (Y/N) "; 15000PROCJU:IFLN%=ASC"Y" THEN 700 ELSE CALL!-4 15100PROCXJQMG:CLS:PRINTTAB(13,4);:PROCQMWW:PRINT'TAB(6)"Press SPACE BAR to continue";:*FX15 15200REPEATUNTILGET$=" ":CLS 15300GOTO3900 15400DEF PROCHUQ 15500PROCZHO:VDU28,0,11,39,0,12,31,7,4:PRINT"Shield energy exhausted !"''" Starship ENDEAVOUR, Captain and crew"''TAB(7)"destroyed by Kryon fire ." 15600ENDPROC 15700DEF PROCJU 15800REPEATLN%=GETAND&DF:UNTILLN%=ASC"Y"ORLN%=ASC"N":VDULN% 15900REPEATON%=GET:UNTILON%=13ORON%=127:IFON%=127VDU127:GOTO15800 ELSE ENDPROC 16000DEF PROCXNQJQ 16100PROCZHO:PRINT'" Kryon destroyed":PROCLKU 16200X%=X%-1:KLING=KLING-1:ENDPROC 16300DEF PROCKUXHVX 16400B%=FNNOMGP(" Course (0-360) ") 16500IFB%=GET% LINE%=TRUE:ENDPROC 16600IFB%=INT% LOAD%=TRUE:ENDPROC 16700B%=(B%+270)MOD360 16800IFB%<-270GOTO16400 16900V%=MODE%:H%=MOVE% 17000N%=B%:IFB%>90N%=180-B%:IFB%>270N%=B%-360 17100M%=90-B%:IFB%>180M%=B%-270 17200ENDPROC 17300PROCZHO:VDU28,0,11,39,0,12,31,11,3:PRINT"Your time is up !"''" You have failed to save the Federation"''" from the Kryon menace and are relieved"''TAB(13)"of your duty." 17400GOTO26800 17500DEF PROCSHKW VDU28,0,24,39,21:ENDPROC 17600DEF PROCZHO PROCSHKW:CLS:ENDPROC 17700DEF PROCIGL 17800PRINTTAB(GOTO%)CHR$OPENIN%"=,,,,,n,,,,,n,,,,,n"TAB(39):ENDPROC 17900DEF PROCOHK 18000PROCXJQMG:PROCZWO 18100PRINTCHR$30TAB(GOTO%-1)CHR$OPENIN%CHR$&5F"ppppppppppppppppppppp0"TAB(39) 18200PRINTTAB(GOTO%-2)CHR$OPENIN%"j"CHR$&87" 0 1 2 3 4 5 6 7 "CHR$OPENIN%"5"TAB(39) 18300FORI%=0TO7 18400PRINTTAB(GOTO%-2)CHR$OPENIN%"j"CHR$&87; 18500PRINTI%;" ";:FORJ%=0TO7:U%=LEN%(J%,I%) 18600IFU%<0U%=1 18700PRINTSHAPE$(U%);:NEXT:PRINTI%CHR$OPENIN%"5"TAB(39):NEXT 18800PRINTTAB(GOTO%-2)CHR$OPENIN%"j"CHR$&87" 0 1 2 3 4 5 6 7 "CHR$OPENIN%"5"TAB(39) 18900PRINTTAB(GOTO%-2)CHR$OPENIN%CHR$&22"`````````````````````!"TAB(39) 19000ENDPROC 19100DEF PROCLLUM 19200PROCXJQMG:PRINTTAB(0,12);:COND=1 19300IFENG<300COND=4 19400IFX%<>0COND=2 19500FORI%=MODE%-1TOMODE%+1 19600FORJ%=MOVE%-1TOMOVE%+1 19700IFI%<0ORI%>7ORJ%<0ORJ%>7GOTO19900 19800IFLEN%(I%,J%)=2 COND=3 19900NEXT:NEXT 20000IFCOND=3 ENG=2500:SHLD=500:Tor=10 20100LIST%(QX,QY)=GCOL%(QX,QY) 20200PRINTCHR$OPENIN%;:FOROR%=0TO37:PRINTCHR$&70;:NEXT:PRINT 20300PROCWKVY:PRINT" Condition "; 20400IFCOND=1PRINTCHR$&82"Green "; 20500IFCOND=2PRINTCHR$&88+CHR$&9D+CHR$&81"Red "CHR$&9C+CHR$&89; 20600IFCOND=3PRINTCHR$&88+CHR$&82"Docked"CHR$&89; 20700IFCOND=4PRINTCHR$&83"Yellow"; 20800PROCOWYMX:PROCWKVY:PROCOWYMX 20900PROCWKVY:PRINT"Stardate "LOG%/10;TAB(20)"Sector "QX"-"QY;:PROCOWYMX 21000PROCWKVY:PRINT"Time left "(GOSUB%-LOG%)/10;TAB(20);"Bases "BASE;:PROCOWYMX 21100PROCWKVY:PRINT"Energy "ENG;TAB(20)"Shields "SHLD;:PROCOWYMX 21200PROCWKVY:PRINT"Torpedoes "Tor;TAB(20)"Kryons "KLING;:PROCOWYMX 21300PRINTCHR$OPENIN%;:FOROR%=0TO37:PRINTCHR$&60;:NEXT:PRINT 21400IFSHLD<100 PROCLYKOP(2) 21500ENDPROC 21600DEF PROCQMWW 21700PROCXJQMG:PROCZWO 21800PRINT"Commands:"''TAB(9)"1 - Warp Drive" 21900PRINTTAB(9)"2 - Long range scan" 22000PRINTTAB(9)"3 - Phasers" 22100PRINTTAB(9)"4 - Photon Torpedoes" 22200PRINTTAB(9)"5 - Shield control" 22300PRINTTAB(9)"6 - Short range scan" 22400PRINTTAB(9)"7 - Galactic Record" 22500PRINTTAB(9)"8 - Freeze game" 22600PRINTTAB(9)"9 - Relinquish command"' 22700ENDPROC 22800A%=LEN%(MODE%,MOVE%):IFI%=W% RETURN 22900IFA%<0PROCZHO:PRINT'" Collision with Kryon":PROCLKU 23000IFA%=3PROCZHO:PRINT'" Collision with star":PROCLKU 23100RETURN 23200DEF PROCUMW 23300PROCZHO:PRINT'" Attempt to leave Galaxy" 23400PROCLKU:ENDPROC 23500DEF PROCLKU 23600FORE%=0TO3000:NEXT:ENDPROC 23700DEF PROCJQRGHGLG(THING) 23800LOCAL X%,Y% 23900REPEAT X%=RND(8)-1:Y%=RND(8)-1 24000UNTILLEN%(X%,Y%)=0:LEN%(X%,Y%)=THING:ENDPROC 24100DEF PROCJKWKS VDU23;&000A;0;0;0;:ENDPROC 24200DEF PROCLGKGL VDU23;&720A;0;0;0;:ENDPROC 24300DEF PROCZWO VDU23;&200A;0;0;0;:ENDPROC 24400DATA " ","K ","B ","* ","E " 24500DEF PROCWKVY PRINTCHR$OPENIN%CHR$&35+CHR$&87;:ENDPROC 24600DEF PROCOWYMX PRINTTAB(37)CHR$OPENIN%CHR$&6A:ENDPROC 24700DEF PROCXJQMG LOCAL H%,V%:H%=POS:V%=VPOS:VDU26,31,H%,V%:ENDPROC 24800DEF FNNOMGP(B$) 24900A$="":n%=0 25000PROCLGKGL:PROCZHO:PRINTB$;A$; 25100NOW=TIME 25200IFSHLD<0:=GET% 25300IFLOG%>=GOSUB%:=INT% 25400REPEAT 25500IFTIME-NOW>2000 LOG%=LOG%+1:IFRND(2)=2 POW=0:PROCZWO:PROCQWIVS:UNTILTRUE:GOTO25000 25600A%=INKEY0:IFA%=-1 UNTIL0 25700IFA%<>127 THEN 25900 25800IFn%=0 UNTILFALSE ELSE n%=n%-1:PRINTCHR$127;:A$=LEFT$(A$,n%):UNTILFALSE 25900IFA%=13:PRINT:UNTILTRUE:PROCZWO:=VAL(A$) 26000IFn%=4 UNTILFALSE 26100IF(A%AND&EF)<>45 THEN 26300 26200IFn%>0 UNTILFALSE ELSE A$=CHR$45:n%=n%+1:PRINTCHR$45;:UNTILFALSE 26300IFA%=32UNTILFALSE ELSEA%=A%OR16:IFA%>=48 IF A%<=57 A$=A$+CHR$A%:PRINTCHR$A%;:n%=n%+1:UNTILFALSE 26400UNTILFALSE 26500DEF PROCVSIP 26600ENVELOPE1,3,0,0,0,1,1,1,126,-4,0,-4,126,80 26700Q%=0:R%=0:FORN%=0TO60STEP4:P%=48+(N%+(N%MOD12=8))MOD16*4:SOUND1,1,P%,5:SOUND2,1,Q%,5:SOUND3,1,R%,5:R%=Q%:Q%=P%:NEXT:ENDPROC 26800VDU26,31,6,13:PROCZWO:PRINTCHR$&88"Press SPACE BAR to restart"CHR$&89;:REPEATUNTILGET$=" ":GOTO800 26900DEF PROCQWIVS 27000PROCXJQMG:ENG=ENG-POW:IFX%=0GOTO28600 27100POW=POW/X% 27200FORI%=0TO7:FORJ%=0TO7:IFLEN%(I%,J%)>=0 THEN 28400 27300Z%=SQR((MODE%-I%)^2+(MOVE%-J%)^2):IFPOW=0THEN27700 27400PROCZHO 27500G%=POW/Z%:LEN%(I%,J%)=LEN%(I%,J%)+G%:PRINT'" "G%" Units hit on Kryon":PROCLKU 27600IFLEN%(I%,J%)>=0PROCXNQJQ:LEN%(I%,J%)=0:GOTO28400 27700G%=-LEN%(I%,J%) 27800G%=G%DIV(RND(4)+2) 27900LEN%(I%,J%)=LEN%(I%,J%)+G% 28000G%=G%*6/Z% 28100IFLEN%(I%,J%)>=0PROCXNQJQ:LEN%(I%,J%)=0:GOTO28400 28200PROCZHO 28300IFCOND<>3 SHLD=SHLD-G%:PRINT'" "G%" Units hit on shields":PROCLKU 28400NEXT, 28500IFPOW<>0 PROCOHK 28600PROCLLUM 28700ENDPROC 28800DEF PROCLYKOP(HIMEM%) SOUNDHIMEM%,1,48*(HIMEM%+1),10:ENDPROC