REM Acorn Invaders REM Packed by Make v1.40 15/5/08 On 25 May 2008 ONERRORPROCu:END MODE28:OFF:a$="Acorn Invaders. (c)2008 DynaByte Software":PRINTa$:PRINTSTRING$(LEN(a$),"-"):PRINT:aa%=FALSE:b$=".Resources.":PRINT"Checking files...":IFNOTFNl(b$+"Gfx0","Sprites")THENaa%=TRUE IFNOTFNl(b$+"Gfx1","Charset")THENaa%=TRUE IFNOTFNl(b$+"Intro","Music")THENaa%=TRUE IFNOTFNl(b$+"Creds","Credits")THENaa%=TRUE IFNOTFNl(b$+"Msg","Messages")THENaa%=TRUE IFaa%THENERROR255,"File Missing!!" PRINT:PRINT"Loading Messages...":ba%=FNv(b$+"Msg","SGSM"):DIMf%(ba%),b$(ba%):PROCv(b$+"Msg","SGSM",f%(),b$()):PRINTFNa(1):OSCLI"PlayVolume 0":OSCLI"Playmod "+b$+"Intro":OSCLI"PlayPause":aa%=FALSE:ca%=0:da%=1:ea%=TRUE:fa%=0:DIMa$(10),c%(10):DIMd%(10):PRINTFNa(2) PROCw:SYS"OS_SWINumberFromString",,"OS_SpriteOp"TOga%:PRINTFNa(4):ha%=FNq(b$+"Gfx0"):PRINTFNa(5):ia%=FNq(b$+"Gfx1"):ja%=ha%:PRINTFNa(6):ka%=OPENIN(b$+"Creds"):INPUT#ka%,g$:IFg$<>"DERC"THEN CLOSE#ka%:ERROR255,FNa(101):END ENDIF INPUT#ka%,fa%:DIMc$(fa%),e%(fa%):FORi%=1TOfa%:INPUT#ka%,e%(i%),c$(i%):NEXTi%:CLOSE#ka%:PRINTFNa(7);:l$=b$+"HiTable":IFFNr(l$)<>1THEN IFNOTFNs(0,b$)THEN ea%=FALSE:PRINTFNa(8) ELSE:PRINTFNa(9) ENDIF PROCx(ea%) ELSE:IFNOTFNs(1,l$)THEN ea%=FALSE:PRINTFNa(10) ELSE:PRINTFNa(11) ENDIF PROCy ENDIF PRINTFNa(12):PROCe(150):b%=0:a%=4:f%=8:k%=12:M%=16:N%=20:q%=24:la%=28:E%=32:ma%=36:na%=40:oa%=44:pa%=48:qa%=52:ra%=56:sa%=60:ta%=64:ua%=68:va%=16:wa%=20:xa%=24:W%=28:T%=32:ya%=16:za%=20:h%=FNc(36):P%=FNc(24):K%=FNc(16) CLS:PROCl:h%!W%=FNb(8,1):h%!T%=FNb(8,2)+7:P%!f%=FNb(6,1):P%!k%=FNb(6,2):P%!ya%=h%!k%-50:P%!za%=30:OSCLI"PlayVolume 127":OSCLI"PlayStart":REPEAT:CLS:aa%=FNw:IFNOTaa%THENCLS:PROCz UNTILaa%:CLS:K%!f%=220:K%!k%=40:K%=FNp(K%,h%):K%!a%-=3:PROCi(K%):PROCm(FNa(31),10):IFda%=1THEN FORi%=127TO1STEP-2:OSCLI"PlayVolume "+STR$(i%):PROCe(4):NEXTi%:OSCLI"PlayStop":OSCLI"PlayVolume 127" ENDIF PROCn:END DEFFNw:LOCALi%,H%,I%,B%,O%,d%,U%,Aa%,m%:LOCALBa%,Q%,Ca%,Da%,Ea%,Fa%,x%,y%,J%,s$,a$:H%=FNf(FNc(16),0):I%=FNf(FNc(16),0):B%=FNf(FNc(16),0):d%=FNf(FNc(16),0):U%=FNf(FNc(16),0):Q%=FNf(FNc(16),0):m%=FNf(FNc(16),0) H%!f%=FNb(100,1):H%!k%=FNb(40,2):H%!b%=FNd(H%,h%):H%!a%=800:I%!f%=FNb(150,1):I%!k%=FNb(40,2):I%!b%=FNd(I%,h%):I%!a%=H%!a%-I%!k%:B%!f%=640:B%!k%=500:B%!b%=FNd(B%,h%):B%!a%=200:d%!f%=FNb(40,1):d%!k%=FNb(20,2):d%!b%=B%!b%+150 d%!a%=(B%!a%+B%!k%)-125:m%!f%=FNb(30,1):m%!k%=FNb(15,2):U%!f%=FNb(20,1):U%!k%=FNb(20,2):U%!b%=B%!b%+150+FNd(U%,d%):Aa%=FNg(U%):Ba%=FNg(U%)::Ba%!a%=d%!a%-40-Ba%!k%:Aa%!a%=Ba%!a%-40-Aa%!k%:U%!a%=Aa%!a%-40-U%!k% Q%!f%=FNb(20,1):Q%!k%=FNb(20,2):Q%!b%=B%!b%+150+FNd(Q%,d%):Ca%=FNg(Q%):Da%=FNg(Q%):Fa%=FNg(Q%):Ea%=FNg(Q%):Ga%=FNg(Q%)::Q%!a%=(B%!a%+B%!k%)-120:Ca%!a%=Q%!a%-60:Da%!a%=Ca%!a%-60:Fa%!a%=Da%!a%-90:Ga%!a%=Fa%!a%-60:Ea%!a%=Ga%!a%-60 PROCf(P%!ya%):PROCf(P%!za%):FORi%=0-H%!f%TOH%!b%STEP5:WAIT:PROCa("space",i%,H%!a%):PROCe(1):NEXTi%:FORi%=h%!f%TOI%!b%STEP-5:WAIT:PROCa("invaders",i%,I%!a%):PROCe(1):NEXTi%:a$=FNa(32):O%=LEN(a$)*h%!W%:y%=170:PROCb(FNh(O%,h%!f%),y%,a$,11):a$=FNa(33) O%=LEN(a$)*h%!W%:y%-=h%!T%:PROCb(FNh(O%,h%!f%),y%,a$,11):WHILENOTINKEY(-99)ANDNOTINKEY(-17)ANDNOTINKEY(-82):y%=B%!a%+B%!k%:FORi%=1TOfa%:a$=FNm(c$(i%)):x%=FNe(a$):CASEe%(i%)OF WHEN-1:y%-=h%!T% WHEN-2:y%-=(2*h%!T%) OTHERWISE:y%-=e%(i%) ENDCASE PROCb(x%,y%,a$,0):NEXTi%:J%=FNo:IFJ%=1THEN=TRUE IFJ%=2THEN=FALSE PROCd(B%):a$=FNa(34):x%=FNe(a$):y%=B%!a%+B%!k%-20:PROCb(x%,y%,a$,0):a$=FNa(35):y%-=h%!T%:x%=FNe(a$):PROCb(x%,y%,a$,0):x%=d%!b%+d%!f%+10:PROCa("saucer_0",d%!b%,d%!a%):a$=FNa(36)+" "+FNa(40):PROCb(x%,d%!a%+10,a$,0):PROCa("inv_3",Ba%!b%,Ba%!a%) a$=FNa(37)+" "+FNa(40):PROCb(x%,Ba%!a%+12,a$,0):PROCa("inv_2",Aa%!b%,Aa%!a%):a$=FNa(38)+" "+FNa(40):PROCb(x%,Aa%!a%+12,a$,0):PROCa("inv_1",U%!b%,U%!a%):a$=FNa(39)+" "+FNa(40):PROCb(x%,U%!a%+12,a$,0):O%=m%!f%/h%!W%+2:s$=FNa(66) a$=s$+STRING$(O%," ")+FNa(67):x%=FNe(a$):y%=U%!a%-(3*h%!T%):PROCb(x%,y%,a$,0):m%!b%=x%+7+(LEN(s$)*h%!W%):m%!a%=y%:PROCa("base",m%!b%,m%!a%):J%=FNo:IFJ%=1THEN=TRUE IFJ%=2THEN=FALSE PROCd(B%):a$=FNa(41):x%=FNe(a$):y%=B%!a%+B%!k%-20:PROCb(x%,y%,a$,0):x%=Q%!b%+Q%!f%+10:PROCa("key_z",Q%!b%,Q%!a%):a$=FNa(42)+" "+FNa(43):PROCb(x%,Q%!a%+12,a$,0):PROCa("key_x",Ca%!b%,Ca%!a%):a$=FNa(42)+" "+FNa(44):PROCb(x%,Ca%!a%+12,a$,0) PROCa("key_enter",Da%!b%,Da%!a%):PROCb(x%,Da%!a%+12,FNa(45),0):PROCa("key_p",Ga%!b%,Ga%!a%):a$=FNa(46)+" "+FNa(49):PROCb(x%,Ga%!a%+12,a$,0):PROCa("key_m",Fa%!b%,Fa%!a%):PROCb(x%,Fa%!a%+12,FNa(47),0):PROCa("key_q",Ea%!b%,Ea%!a%) a$=FNa(48)+" "+FNa(49):PROCb(x%,Ea%!a%+12,a$,0):J%=FNo:IFJ%=1THEN=TRUE IFJ%=2THEN=FALSE PROCd(B%):a$=FNa(50):IFea%THENa$=FNa(51) x%=FNe(a$):y%=B%!a%+B%!k%-20:PROCb(x%,y%,a$,0):a$=FNa(58)+" "+FNa(52):x%=FNe(a$):y%-=h%!T%:PROCb(x%,y%,a$,0):y%=(B%!a%+B%!k%)-100:a$=" POS."+" PLAYER."+STRING$(12," ")+"SCORE.":a$+=STRING$(3," ")+"RACK.":x%=FNe(a$):PROCb(x%,y%,a$,0):y%-=2*h%!T%:FORi%=1TO10:IFi%<10THEN a$=" "+STR$(i%)+". " ELSE:a$=" "+STR$(i%)+". " ENDIF s$=FNm(a$(i%)):a$+=FNi(s$,8," ",FALSE):a$+=" .... ":a$+=FNt(STR$(c%(i%)),10):a$+=" ... "+FNt(STR$(d%(i%)),3):x%=FNe(a$):PROCb(x%,y%-(i%*(h%!T%+5)),a$,0):NEXTi%:J%=FNo:IFJ%=1THEN=TRUE IFJ%=2THEN=FALSE PROCd(B%):ENDWHILE:ERROR255,FNa(102):=FALSE DEFFNo:LOCALt%,J%:t%=TIME+750:J%=FALSE:REPEAT:IFINKEY(-82)THENPROCo IFINKEY(-102)THENPROCp UNTILTIME>=t%ORINKEY(-17)ORINKEY(-99):IFINKEY(-17)THENJ%=1 IFINKEY(-99)THENJ%=2 IFJ%THEN PROCc(H%):PROCc(I%):PROCc(B%):PROCc(d%):PROCc(U%):PROCc(Aa%):PROCc(Ba%):PROCc(Q%):PROCc(Ca%):PROCc(Da%):PROCc(Ea%):PROCc(Fa%):PROCc(Ga%):PROCc(m%) ENDIF =J% DEFFNe(a$):LOCALO%:O%=LEN(a$)*h%!W%:=B%!b%+FNh(O%,B%!f%) DEFPROCz:LOCALm%,p%,d%,e%,o%:LOCALD%:LOCALb%(),a%():LOCAL`%,Ha%,Ia%,Ja%:LOCALKa%,La%:LOCALMa%,Na%,Oa%,Pa%,Qa%:LOCALRa%,O%,a$,x%,y%,i%,j%:m%=FNc(32):p%=FNc(40):d%=FNc(48):e%=FNc(68):D%=FNc(16):o%=FNc(36):DIMb%(10,6),a%(7):`%=0:Ja%=4:Ha%=8:Ia%=12:Ka%=16:La%=20 Ma%=na%:Na%=oa%:Oa%=pa%:Pa%=sa%:Qa%=ta%:m%!f%=FNb(30,1):m%!k%=FNb(15,2):m%!b%=FNd(m%,h%):m%!a%=50:m%!N%=6:m%!M%=m%!N%:D%!f%=FNb(20,1):D%!k%=FNb(20,2):d%!f%=FNb(40,1):d%!k%=FNb(20,2):d%!a%=P%!ya%-(10+d%!k%):d%!N%=5:d%!q%=FALSE:d%!oa%=1 p%!f%=FNb(5,1):p%!k%=FNb(20,2):p%!q%=FALSE:p%!N%=10:o%!Ha%=1:o%!Ja%=0:o%!`%=3:o%!Ia%=FALSE:o%!Ka%=0:o%!E%=0:e%!Ma%=FNb(20,1):e%!Na%=10:e%!Oa%=6:e%!q%=TRUE:e%!Qa%=4:FORi%=1TO7:a%(i%)=FNc(44):a%(i%)=FNf(a%(i%),0):a%(i%)!f%=FNb(5,1) a%(i%)!k%=FNb(20,2):NEXTi%:PROCf(P%!ya%):PROCf(P%!za%):PROCA(0,c%(1),o%!`%,o%!Ha%):PROCB:PROCa("base",m%!b%,m%!a%):REPEAT:Ra%=FALSE:IFo%!Ka%=0THEN IFINKEY(-74)THENPROCC(m%!b%,m%!a%) IFINKEY(-98)THENPROCD:Ra%=TRUE IFINKEY(-67)THENPROCE:Ra%=TRUE IFINKEY(-17)THENPROCF ENDIF IFINKEY(-102)THENPROCp IFINKEY(-82)THENPROCo IFINKEY(-56)THENPROCG IFo%!Ka%=0 IFRa%THEN m%!b%+=m%!M%:PROCa("base",m%!b%,m%!a%) ENDIF ENDIF IFo%!`%>0THEN IFo%!Ka%=0THEN PROCH:PROCI:PROCJ:PROCK ELSE:PROCL ENDIF ENDIF WAIT:UNTILo%!`%=0:K%!f%=240:K%!k%=40:K%=FNp(K%,h%):K%!a%-=3:PROCd(K%):PROCi(K%):a$=FNa(49)+" "+FNa(53):PROCm(a$,11):PROCe(750):IFNOTo%!Ia%THEN IFo%!Ja%>=c%(10)THEN PROCM(o%) ENDIF ENDIF PROCc(m%):PROCc(e%):PROCc(d%):PROCc(p%):PROCc(o%):PROCc(D%):FORi%=1TO7:PROCc(a%(i%)):NEXTi%:ENDPROC DEFPROCD:IFm%!b%<=0THEN m%!b%=0 ELSE:m%!M%=0-m%!N% ENDIF ENDPROC DEFPROCE:IFm%!b%>=h%!f%-m%!f%THEN m%!b%=h%!f%-m%!f% ELSE:m%!M%=0+m%!N% ENDIF ENDPROC DEFPROCC(x%,y%):IFNOTp%!q%THEN p%!q%=TRUE:p%!b%=x%+(m%!f%/2):p%!a%=y%+m%!k% ENDIF ENDPROC DEFPROCo:REPEAT:UNTILNOTINKEY(-82):OSCLI"ScreenSave .Dump"+STR$(ca%):ca%+=1:ENDPROC DEFPROCF:LOCALi%:FORi%=1TO7:a%(i%)!q%=FALSE:NEXTi%:o%!`%=0:o%!Ia%=TRUE:ENDPROC DEFPROCp:REPEAT:UNTILNOTINKEY(-102):da%=FNj(da%):IFda%=1THENOSCLI"PlayStart"ELSEOSCLI"PlayPause" ENDPROC DEFPROCG:REPEATUNTILNOTINKEY(-56):o%!Ka%=FNj(o%!Ka%):o%!La%=o%!Ka%:PROCq(o%!La%):ENDPROC DEFPROCS:IFd%!q%THEN IFNOTd%!la%THEN d%!la%=TRUE:d%!ma%=d%!E%:PROCa("saucer_2",d%!b%,d%!a%) ENDIF ENDIF ENDPROC DEFPROCH:LOCALSa%,Ta%:Sa%=ma%:IFp%!q%THEN p%!Sa%=FALSE:IFp%!a%>=P%!ya%-p%!k%THEN p%!q%=FALSE:p%!Sa%=TRUE ENDIF IFp%!Sa%THEN Ta%=FNg(p%):Ta%!a%-=2:PROCd(Ta%):PROCc(Ta%) ELSE:PROCa("shell",p%!b%,p%!a%) ENDIF p%!a%+=p%!N% ENDIF ENDPROC DEFPROCI:LOCALUa%,Va%,Wa%,h$:Ua%=ma%:Va%=na%:Wa%=oa%:IFNOTd%!q%THEN IFFNk(4)ANDFNk(5)THEN d%!q%=TRUE:d%!la%=FALSE:d%!Va%=0:d%!Wa%=0:IFFNk(50)THEN d%!M%=0-d%!N%:d%!b%=h%!f% ELSE:d%!M%=0+d%!N%:d%!b%=0-d%!f% ENDIF ENDIF ELSE:d%!Va%+=1:d%!E%+=1:IFd%!b%<=0-d%!f%ANDSGN(d%!M%)=-1THEN d%!Ua%=FALSE:d%!q%=FALSE:d%!E%=0:ENDPROC ENDIF IFd%!b%>h%!f%ANDSGN(d%!M%)=1THEN d%!Ua%=FALSE:d%!q%=FALSE:d%!E%=0:ENDPROC ENDIF IFNOTd%!la%THEN IFFNn(p%,d%)THEN PROCd(p%):PROCa("saucer_2",d%!b%,d%!a%):d%!Ua%=d%!E%:d%!la%=TRUE:p%!q%=FALSE:PROCg(500) ENDIF ELSE:IFFNn(p%,d%)THEN PROCd(p%):p%!q%=FALSE ENDIF ENDIF IFNOTd%!la%THEN IFd%!Va%>=1000THENd%!Va%=0 IFd%!Va%MOD10=0THEN d%!Wa%=FNj(d%!Wa%) ENDIF h$="saucer_"+STR$(d%!Wa%):PROCa(h$,d%!b%,d%!a%):d%!b%+=d%!M% ELSE:IFd%!E%>=d%!Ua%+80THEN PROCd(d%):d%!q%=FALSE:d%!Ua%=FALSE:d%!E%=0:d%!Wa%=TRUE ELSE:IFd%!E%>=d%!Ua%+60THEN PROCa("saucer_5",d%!b%,d%!a%) ELSE:IFd%!E%>=d%!Ua%+40THEN PROCa("saucer_4",d%!b%,d%!a%) ELSE:IFd%!E%>=d%!Ua%+20THEN PROCa("saucer_3",d%!b%,d%!a%) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDPROC DEFPROCJ:LOCALXa%,z%,F%,L%,Ya%,Za%,_a%,X%:LOCALG%,`a%,ab%:G%=ma%:`a%=qa%:ab%=ra%:e%!E%+=1:IFe%!E%MOD5=0THENe%!G%=FNj(e%!G%) IFe%!E%>1000THENe%!E%=0 Xa%=e%!b%+e%!f%:X%=0-((e%!`a%-1)*(D%!f%+e%!Ma%)):IFXa%>=h%!f%THEN e%!M%=0-e%!N%:PROCr ENDIF IFe%!b%<=X%THEN e%!M%=0+e%!N%:PROCr ENDIF X%=e%!a%+((e%!Pa%-1)*D%!k%):IFX%<=m%!a%+m%!k%THEN PROCN:ENDPROC ENDIF IFFNn(p%,e%)THEN z%=D%!f%+e%!Ma%:IF(p%!b%-e%!b%)MODz%<=D%!f%THEN F%=((p%!a%-e%!a%)DIVD%!k%)+1:L%=((p%!b%-e%!b%)DIVz%)+1:IFSGN(b%(L%,F%))=1THEN b%(L%,F%)=-5:PROCd(p%):p%!q%=FALSE:e%!la%+=1:CASEF%OF WHEN1,2:PROCg(50) WHEN3,4:PROCg(75) WHEN5,6:PROCg(100) ENDCASE ENDIF ENDIF ENDIF IFe%!la%>=e%!Na%*e%!Oa%THEN o%!Ha%+=1:PROCd(e%):PROCf(P%!za%):PROCh(o%!`%):PROCj(o%!Ha%):PROCs ENDIF Ya%=TRUE:Za%=TRUE:FORF%=1TOe%!Oa%:IFb%(e%!ab%,F%)<>0THENYa%=FALSE IFb%(e%!`a%,F%)<>0THENZa%=FALSE NEXTF%:_a%=TRUE:FORL%=1TOe%!Na%:IFb%(L%,e%!Pa%)<>0THEN_a%=FALSE NEXTL%:IFZa%THENe%!`a%+=1 IFYa%THEN e%!f%-=(D%!f%+e%!Ma%):e%!ab%-=1 ENDIF IF_a%THENe%!Pa%+=1 e%!b%+=e%!M%:PROCk:ENDPROC DEFPROCK:LOCALG%,bb%,cb%,i%,j%,x%,y%,db%,eb%,h$,k$:G%=ma%:bb%=na%:FORi%=1TO7:IFNOTa%(i%)!q%THEN db%=RND(10):eb%=o%!Ha%+5:IFeb%>100THEN eb%=100:IFo%!Ha%MOD10=0THENe%!Qa%+=1 ENDIF IFFNk(eb%)ANDFNk(e%!Qa%)THEN IFb%(db%,e%!Pa%)>0THEN x%=e%!b%+(db%-1)*(D%!f%+e%!Ma%):y%=e%!a%+(e%!Pa%-1)*D%!k%:a%(i%)!b%=x%+D%!f%/2:a%(i%)!a%=y%:a%(i%)!q%=TRUE:a%(i%)!la%=FALSE:a%(i%)!E%=0:a%(i%)!bb%=1:a%(i%)!G%=0:cb%=4:IFFNk(25)THENa%(i%)!bb%=2:cb%=cb%/2 a%(i%)!N%=cb%:a%(i%)!M%=a%(i%)!N% ENDIF ENDIF ELSE:a%(i%)!E%+=1:IFa%(i%)!E%>1000THENa%(i%)!E%=0 IFa%(i%)!E%MOD5=0THEN a%(i%)!G%+=1 ENDIF IFa%(i%)!bb%=1ANDa%(i%)!G%>1THEN a%(i%)!G%=0 ENDIF IFa%(i%)!bb%=2ANDa%(i%)!G%>3THEN a%(i%)!G%=0 ENDIF a%(i%)!a%-=a%(i%)!M%:k$=STR$(a%(i%)!G%):IFa%(i%)!bb%=2ANDa%(i%)!G%=3THENk$="1" h$="miss_"+STR$(a%(i%)!bb%)+k$:PROCa(h$,a%(i%)!b%,a%(i%)!a%):IFa%(i%)!a%<=P%!za%+(P%!k%+5)THEN a%(i%)!q%=FALSE:PROCd(a%(i%)) ENDIF IFFNn(a%(i%),m%)ANDa%(i%)!q%THEN FORj%=1TO3:PROCa("base_"+STR$(j%),m%!b%,m%!a%):PROCe(20):WAIT:NEXTj%:PROCd(m%):IFp%!q%THEN PROCd(p%):p%!q%=FALSE ENDIF m%!b%=FNd(m%,h%):o%!`%-=1:PROCh(o%!`%):PROCd(a%(i%)):a%(i%)!q%=FALSE:PROCa("base",m%!b%,m%!a%) ENDIF IFFNn(p%,a%(i%))ANDa%(i%)!q%THEN IFa%(i%)!bb%=1THEN a%(i%)!q%=FALSE:PROCg(5):PROCd(a%(i%)) ENDIF PROCd(p%):p%!q%=FALSE ENDIF ENDIF NEXTi%:ENDPROC DEFPROCL:o%!E%+=1:IFo%!E%=1000THENo%!E%=0 IFo%!E%MOD50=0THEN o%!La%=FNj(o%!La%) ENDIF PROCq(o%!La%):ENDPROC DEFPROCx(fb%):LOCALi%,n$:FORi%=1TO10:IFi%MOD2=0THENn$="Software"ELSEn$="DynaByte" a$(i%)=FNm(n$):c%(i%)=(11-i%)*1000:d%(i%)=0:NEXTi%:IFfb%THENPROCt ENDPROC DEFPROCy:LOCALi%,R%:R%=OPENIN".Resources.HiTable":FORi%=1TO10:INPUT#R%,a$(i%),c%(i%):INPUT#R%,d%(i%):NEXTi%:CLOSE#R%:ENDPROC DEFPROCt:LOCALi%,R%:R%=OPENOUT".Resources.HiTable":FORi%=1TO10:PRINT#R%,a$(i%),c%(i%):PRINT#R%,d%(i%):NEXTi%:CLOSE#R%:ENDPROC DEFPROCM(o%):LOCALI%,H%,gb%,g%,i%,hb%,O%,x%,y%,a$:H%=FNc(16):I%=FNc(16):H%!f%=FNb(100,1):H%!k%=FNb(40,2):H%!b%=FNd(H%,h%):H%!a%=800:I%!f%=FNb(150,1):I%!k%=FNb(40,2):I%!b%=FNd(I%,h%):I%!a%=H%!a%-I%!k%:hb%=0:FORi%=10TO1STEP-1 IFo%!Ja%>=c%(i%)THENhb%=i% NEXTi%:FORi%=9TOhb%STEP-1:a$(i%+1)=a$(i%):c%(i%+1)=c%(i%):d%(i%+1)=d%(i%):NEXTi%:c%(hb%)=o%!Ja%:d%(hb%)=o%!Ha%:CLS:PROCf(P%!ya%):PROCf(P%!za%):PROCa("space",H%!b%,H%!a%):PROCa("invaders",I%!b%,I%!a%):a$=FNa(54)+" "+STR$(o%!Ja%) a$+=" "+FNa(55)+" "+STR$(hb%)+FNx(hb%):O%=LEN(a$)*h%!W%:x%=FNh(O%,h%!f%):y%=I%!a%-170:PROCb(x%,y%,a$,0):PROCc(H%):PROCc(I%):K%!f%=165:K%!k%=40:K%=FNp(K%,h%):PROCi(K%):x%=K%!b%+20:y%=K%!a%+12:a$="":i%=1:gb%=FALSE OSCLI"FX 21,0":REPEAT:g%=GET:CASEg%OF WHEN13:gb%=TRUE WHEN8:i%-=1:a$=LEFT$(a$,i%-1) OTHERWISE:IFi%<9ANDFNy(g%)THENi%+=1:a$+=CHR$(g%) ENDCASE IFi%<1THENi%=1 PROCb(x%,y%,STRING$(8," "),0):IFa$=""THEN PROCb(x%,y%," ",0) ELSE:PROCb(x%,y%,a$,0) ENDIF UNTILgb%:IFa$=""ORa$=" "THENa$=FNa(56) a$(hb%)=FNm(a$):IFea%THENPROCt ENDPROC DEFFNy(ib%):LOCALSa%:Sa%=FALSE:IFib%>=32ANDib%<=126THENSa%=TRUE =Sa% DEFPROCA(jb%,kb%,l%,r%):LOCALx%,a$:a$=FNa(57)+FNi(STR$(jb%),10," ",TRUE):PROCb(0,h%!k%-h%!T%,a$,0):a$=FNa(58)+" "+FNa(57):a$+=" "+FNa(59)+FNi(STR$(kb%),10," ",TRUE):x%=h%!f%-LEN(a$)*h%!W%:PROCb(x%,h%!k%-h%!T%,a$,0):PROCh(l%):PROCj(r%):ENDPROC DEFPROCh(lb%):LOCALa$:PROCa("base",0,0):a$=" = "+STR$(lb%):PROCb(m%!f%,0,a$,0):ENDPROC DEFPROCj(lb%):LOCALx%,a$:a$=FNa(60)+" "+FNa(59):a$+=FNi(STR$(lb%),3,"0",TRUE):x%=h%!f%-LEN(a$)*h%!W%:PROCb(x%,0,a$,0):ENDPROC DEFPROCq(mb%):LOCALx%,y%,O%,a$:a$=FNa(49)+" "+FNa(61):IFmb%=0ORo%!Ka%=0THEN a$=STRING$(LEN(a$)," ") ENDIF O%=LEN(a$)*h%!W%:x%=FNh(O%,h%!f%):y%=h%!k%-h%!T%:PROCb(x%,y%,a$,0):ENDPROC DEFPROCg(nb%):LOCALx%,a$:o%!Ja%+=nb%:a$=FNa(57)+" "+FNa(59):a$+=FNi(STR$(o%!Ja%),10," ",TRUE):PROCb(0,h%!k%-h%!T%,a$,0):IFo%!Ja%>c%(1)THEN a$=FNa(58)+" "+FNa(57)+" ":a$+=FNa(59):a$+=FNi(STR$(o%!Ja%),10," ",TRUE):x%=h%!f%-LEN(a$)*h%!W%:PROCb(x%,h%!k%-h%!T%,a$,0) ENDIF ENDPROC DEFPROCB:LOCALG%,`a%,ab%,Pa%:G%=ma%:`a%=qa%:ab%=ra%:Pa%=sa%:PROCs:PROCk:ENDPROC DEFPROCs:LOCALF%,L%,s%:e%!b%=50:e%!a%=550:e%!G%=0:e%!la%=0:e%!N%=3:e%!M%=e%!N%:e%!`a%=1:e%!ab%=e%!Na%:e%!Pa%=1:s%=(e%!Na%*D%!f%)+((e%!Na%-1)*e%!Ma%):e%!f%=s%:e%!k%=e%!Oa%*D%!k%:FORL%=1TOe%!Na%:FORF%=1TOe%!Oa% b%(L%,F%)=((F%+1)/2)+(e%!G%*10):NEXTF%:NEXTL%:ENDPROC DEFPROCk:LOCALF%,L%,x%,y%,v%:v%=FNc(16):FORL%=e%!`a%TOe%!ab%:x%=e%!b%+((L%-1)*(D%!f%+e%!Ma%)):FORF%=e%!Pa%TOe%!Oa%:y%=e%!a%+((F%-1)*D%!k%):IFb%(L%,F%)>0THEN b%(L%,F%)=((F%+1)/2)+(e%!G%*10) ENDIF IFb%(L%,F%)<>0THEN CASESGN(b%(L%,F%))OF WHEN-1:PROCO(x%,y%,L%,F%) WHEN1:PROCa("inv_"+STR$(b%(L%,F%)),x%,y%) ENDCASE ELSE:v%!b%=x%:v%!a%=y%:v%!f%=D%!f%:v%!k%=D%!k%:PROCd(v%) ENDIF NEXTF%:NEXTL%:PROCc(v%):ENDPROC DEFPROCO(x%,y%,r%,c%):LOCALob%:ob%=FNc(16):b%(r%,c%)+=1:PROCa("inv_4",x%,y%):IFb%(r%,c%)=0THEN ob%!b%=x%:ob%!a%=y%:ob%!f%=D%!f%:ob%!k%=D%!k%:PROCd(ob%) ENDIF PROCc(ob%):ENDPROC DEFPROCr:LOCALv%,i%:v%=FNc(16):FORi%=1TO3:e%!a%-=D%!k%/3:PROCk:NEXTi%:v%!b%=e%!b%:v%!a%=e%!a%+e%!k%:v%!f%=e%!f%:v%!k%=D%!k%:PROCd(v%):PROCc(v%):ENDPROC DEFPROCN:LOCALS%,Y%,G%,pb%,N%,i%,j$:N%=1:qb%=24:S%=FNc(28):Y%=FNc(28):PROCd(e%):PROCd(m%):IFp%!q%THEN PROCd(p%):p%!q%=FALSE ENDIF IFd%!q%THEN PROCd(d%):d%!q%=FALSE ENDIF FORi%=1TO7:IFa%(i%)!q%THEN PROCd(a%(i%)):a%(i%)!q%=FALSE ENDIF NEXTi%:m%!b%=FNd(m%,h%):S%!b%=0-D%!f%:S%!a%=m%!a%:S%!M%=N%:Y%!b%=h%!f%:Y%!a%=m%!a%:Y%!M%=0-N%:o%!`%=0:PROCf(P%!za%):PROCh(o%!`%):PROCj(o%!Ha%):PROCa("base",m%!b%,m%!a%):G%=0:pb%=FALSE:REPEAT:S%!b%+=S%!M%:S%!qb%=S%!b%+D%!f%:Y%!b%+=Y%!M%:G%+=1 IFG%MOD20=0THENpb%=FNj(pb%) IFG%>1000THENG%=0 IFpb%THENj$="inv_11"ELSEj$="inv_1" PROCa(j$,S%!b%,S%!a%):PROCa(j$,Y%!b%,Y%!a%):PROCe(2):WAIT:UNTILS%!qb%>=m%!b%:FORi%=1TO10:PROCa("inv_1",S%!b%,S%!a%):PROCa("inv_1",Y%!b%,Y%!a%):PROCe(20):PROCa("inv_11",S%!b%,S%!a%):PROCa("inv_11",Y%!b%,Y%!a%):PROCe(20):WAIT:NEXTi%:FORi%=1TO3 PROCa("base_"+STR$(i%),m%!b%,m%!a%):PROCe(20):WAIT:NEXTi%:PROCe(20):PROCd(m%):PROCc(S%):PROCc(Y%):ENDPROC DEFFNq(d$):LOCALrb%,C%:C%=FNz(d$)+256:rb%=FNc(C%):!rb%=C%:rb%!4=0:rb%!8=16:rb%!12=16:SYSga%,256+10,rb%,d$:SYSga%,256+17,rb%:=rb% DEFPROCb(x%,y%,a$,sb%):LOCALi%,tb%:ja%=ia%:tb%=h%!W%:FORi%=1TOLEN(a$):PROCa(STR$(ASC(MID$(a$,i%,1))),x%+((i%-1)*tb%),y%):IFsb%>0THENPROCe(sb%) NEXTi%:ja%=ha%:ENDPROC DEFPROCa(r$,x%,y%):LOCALub%:SYSga%,256+24,ja%,r$TO,,ub%:SYSga%,512+34,ja%,ub%,x%,y%,0:ENDPROC DEFPROCd(w%):GCOL0,0TINT0:RECTANGLEFILLw%!b%,w%!a%,w%!f%,w%!k%:ENDPROC DEFFNh(vb%,h%):=(h%/2)-(vb%/2) DEFPROCm(a$,wb%):LOCALO%,y%:O%=LEN(a$)*h%!W%:y%=(h%!k%/2)-(h%!T%/2):PROCb(FNh(O%,h%!f%),y%,a$,wb%):ENDPROC DEFFNd(xb%,yb%):=(yb%!f%/2)-(xb%!f%/2) DEFFNp(xb%,yb%):LOCALx%,y%:xb%!b%=(yb%!f%/2)-(xb%!f%/2):xb%!a%=(yb%!k%/2)-(xb%!k%/2):=xb% DEFPROCf(a%):LOCALi%,zb%:zb%=h%!f%/P%!f%:FORi%=1TOzb%+1:PROCa("rail",(i%-1)*P%!f%,a%):NEXTi%:ENDPROC DEFPROCi(w%):LOCALx%,y%,Ab%,Bb%,Cb%,Db%,i%:Ab%=FNb(3,1):Bb%=FNb(3,2):Cb%=1:Db%=3:FORi%=1TOw%!f%:x%=w%!b%+((i%-1)*Cb%):PROCa("box_x",x%,w%!a%):PROCa("box_x",x%,w%!a%+(w%!k%-(2*Db%))):NEXTi%:x%=w%!b%+(w%!f%-Ab%):FORi%=1TOw%!k%-1 PROCa("box_y",w%!b%,w%!a%+((i%-1)*Cb%)):PROCa("box_y",x%,w%!a%+((i%-1)*Cb%)):NEXTi%:PROCa("box_bl",w%!b%,w%!a%):PROCa("box_tl",w%!b%,(w%!a%+w%!k%)-Bb%):PROCa("box_br",w%!b%+(w%!f%-Ab%),w%!a%):x%=(w%!b%+w%!f%)-Ab%:y%=(w%!a%+w%!k%)-Bb%:PROCa("box_tr",x%,y%):ENDPROC DEFFNv(d$,g$):LOCALZ%,Eb%,i$:Z%=OPENIN(d$):INPUT#Z%,i$:IFi$<>g$THENCLOSE#Z%:ERROR255,"Bad Magic!" INPUT#Z%,Eb%:CLOSE#Z%:=Eb% DEFPROCv(d$,g$,RETURNg%(),RETURNd$()):LOCALZ%,i%,Eb%,i$:Z%=OPENIN(d$):INPUT#Z%,i$:IFi$<>g$THENCLOSE#Z%:ERROR255,"Bad Magic!" INPUT#Z%,Eb%:FORi%=1TOEb%:INPUT#Z%,g%(i%),d$(i%):NEXTi%:CLOSE#Z%:ENDPROC DEFFNa(Fb%):LOCALi%,Gb%:Gb%=0:FORi%=1TOba%:IFf%(i%)=Fb%THENGb%=i%:i%=ba% NEXTi%:IFGb%=0THENERROR255,FNa(106)+" "+STR$(Fb%) =FNm(b$(Gb%)) DEFPROCl:LOCALv%:v%=FNc(20):v%!0=4:v%!4=5:v%!8=11:v%!12=12:v%!16=-1:SYS"OS_ReadVduVariables",v%,v%:h%!va%=v%!0:h%!wa%=v%!4:h%!f%=(v%!8)+1<h%!xa%THENPROCl CASEHb%OF WHEN1:Ib%=C%<>h%!va% WHEN4:Ib%=C%>>h%!wa% OTHERWISE:ERROR255,FNa(103)+" "+STR$(Hb%) ENDCASE =Ib% DEFFNn(w%,Kb%):LOCALLb%,Mb%,Nb%,Ob%:Nb%=FALSE:Ob%=FALSE:IFw%!q%ANDKb%!q%THEN Lb%=Kb%!b%+Kb%!f%:Mb%=Kb%!a%+Kb%!k%:IFw%!b%>=Kb%!b%ANDw%!b%=Kb%!a%ANDw%!a%=t%:ENDPROC DEFFNj(n%):=n%EOR1 DEFFNx(n%):LOCALc$,u%:u%=VAL(RIGHT$(STR$(n%),1)):c$=FNa(65):IFu%>=1ANDu%<=3THENc$=FNa(u%+61) =c$ DEFFNi(a$,Qb%,q$,Rb%):LOCALSb%,c$:Sb%=Qb%-LEN(a$):IFSb%<=0THEN c$=LEFT$(a$,Qb%) ELSE:IFRb%THEN c$=STRING$(Qb%,q$):RIGHT$(c$,LEN(a$))=a$ ELSE:c$=a$+STRING$(Sb%,q$) ENDIF ENDIF =c$ DEFFNt(a$,Qb%):LOCALc$:c$=STRING$(Qb%," "):RIGHT$(c$,LEN(a$))=a$:=c$ DEFFNr(f$):LOCALGb%:SYS"XOS_File",17,f$TOGb%:=Gb% DEFFNz(f$):LOCALC%:SYS"XOS_File",5,f$TO,,,,C%:=C% DEFFNs(Hb%,f$):LOCALR%,Tb%,Ub%,Vb%:Vb%=FALSE:CASEHb%OF WHEN0:R%=OPENUP(f$+"chkfile") WHEN1:R%=OPENUP(f$) OTHERWISE:ERROR255,FNa(104)+" "+STR$(Hb%) ENDCASE IFR%<>0THEN SYS"XOS_Args",254,R%TOUb%;Tb%:IF(Tb%AND1)THEN CLOSE#R%:ERROR255,FNa(105) ENDIF IF((Ub%AND(1<<7))<>0)THENVb%=TRUE CLOSE#R% ENDIF =Vb% DEFPROCw:LOCALWb%:V%=0:Xb%=0:SYS"Wimp_SlotSize",-1,-1TOYb%:SYS"XOS_ReadMemMapInfo"TOZb%;Wb%:IFWb%AND1THENZb%=16384 PROCP(Zb%):ENDPROC DEFPROCn:IFV%THEN SYS"Wimp_SlotSize",V%-32768,-1TOYb%:V%=0:Xb%=0 ENDIF ENDPROC DEFFNc(_%):LOCALA%,C%:C%=(_%+15)AND-4:A%=FNA(C%):IFA%ELSEERROR254,FNa(111) A%!0=&DEADDEAD:A%!4=_%:!(A%-8+(A%!-4))=&DEADDEAD:=A%+8 DEFPROCc(RETURNA%):A%-=8:IFA%!0<>&DEADDEADTHENERROR254,FNa(112) IF!(A%-8+(A%!-4))<>&DEADDEADTHEN ERROR254,FNa(113) ENDIF Xb%-=A%!-4:SYS"OS_Heap",3,V%,A%:A%=0:ENDPROC DEFFNB:=Xb% DEFFNC:LOCAL_b%:_b%=(Yb%+32768-V%)-Xb%:IF_b%<0THENERROR254,FNa(114) =_b% DEFFND:=Yb%+32768-V% DEFFNu(A%):LOCALv%:v%=A%-4:=v%!0 DEFFNf(A%,nb%):PROCQ(A%,nb%):=A% DEFPROCQ(A%,nb%):LOCALX%,C%:C%=FNu(A%):FORX%=0TOC%-4STEP4:A%!X%=nb%:NEXTX%:ENDPROC DEFFNg(A%):LOCAL`b%,X%,C%:C%=FNu(A%):`b%=FNc(C%):FORX%=0TOC%-4STEP4:`b%!X%=A%!X%:NEXTX%:=`b% DEFPROCP(C%):IFV%THENERROR254,FNa(115) C%=(C%+Zb%-1)ANDNOT(Zb%-1):V%=HIMEM:SYS"Wimp_SlotSize",Yb%+C%,-1TOYb%:C%=Yb%+32768-V%:IFC%<1THEN V%=0:ERROR254,FNa(116) ELSE:SYS"OS_Heap",0,V%,,C% ENDIF Xb%=0:ENDPROC DEFPROCR(_%):LOCALac%:ac%=Yb%:SYS"Wimp_SlotSize",Yb%+_%,-1TOYb%:_%=Yb%-ac%:IF_%THENSYS"OS_Heap",5,V%,,_%TO,,,_% ENDPROC DEFFNA(_%):LOCALA%,Wb%:SYS"XOS_Heap",2,V%,,_%TO,,A%;Wb%:IFWb%AND1THEN PROCR((_%+Zb%)ANDNOT(Zb%-1)):SYS"XOS_Heap",2,V%,,_%TO,,A%;Wb%:IFWb%AND1THEN=0 ENDIF Xb%+=A%!-4:=A%