REM Acorn Invaders REM Packed by MH's BASCrunch v1.31c 30/1/08 On 06 Feb 2008 ONERRORREPORT:PRINT" at line ";ERL:END aa%=FALSE:ba%=TRUE:ca%=0:DIMa$(10),b%(10):DIMc%(10):SYS"OS_SWINumberFromString",,"OS_SpriteOp"TOda%:ea%=FNl(".Resources.Gfx0"):ea%+=256:DIMO% ea%:!O%=ea%:O%!4=0:O%!8=16:O%!12=16:f$=".Resources.Gfx0" IFFNe(f$)<>1THENERROR255,"File Missing!!" SYSda%,256+10,O%,f$:SYSda%,256+17,O%:IFFNe(".Resources.HiTable")<>1THEN IFNOTFNmTHENba%=FALSE ELSE:PROCk ENDIF c%=0:d%=4:e%=8:h%=12:D%=16:E%=20:u%=24:Y%=28:fa%=32:ga%=36:ha%=40:ia%=44:ja%=48:ka%=16:la%=20:ma%=24:A%=28:J%=32:Z%=fa%:na%=ga%:DIMb% 36,G% 52:MODE28:OFF:PROCh:b%!A%=FNa(8,1):b%!J%=FNa(8,2)+7:G%!e%=FNa(6,1):G%!h%=FNa(6,2):G%!Z%=b%!h%-50:G%!na%=30 REPEAT:CLS:aa%=FNn:IFNOTaa%THENCLS:PROCl UNTILaa%:CLS:PROCi("GOODBYE!!!",10):END DEFFNn:LOCALi%,K%,L%,k%,p%,a$,x%,a%,F%,P%:LOCAL_%,t%,y%,s$:DIMK% 16,L% 16,k% 16:DIMa% 16,F% 16:K%!e%=FNa(100,1):K%!h%=FNa(40,2):K%!c%=FNd(K%,b%):K%!d%=800:L%!e%=FNa(150,1):L%!h%=FNa(40,2):L%!c%=FNd(L%,b%):L%!d%=K%!d%-L%!h% k%!e%=630:k%!h%=500:k%!c%=FNd(k%,b%):k%!d%=200:a%!e%=FNa(40,1):a%!h%=FNa(20,2):a%!c%=k%!c%+150:a%!d%=(k%!d%+k%!h%)-160:F%!e%=FNa(20,1):F%!h%=FNa(20,2):F%!c%=k%!c%+150+FNd(F%,a%):P%=FNf(F%,16):_%=FNf(F%,16) F%!d%=k%!d%+100:P%!d%=F%!d%+F%!h%+40:_%!d%=P%!d%+P%!h%+40:PROCd(G%!Z%):PROCd(G%!na%):FORi%=0-K%!e%TOK%!c%STEP5:PROCa("space",i%,K%!d%):PROCe(1):NEXTi%:FORi%=b%!e%TOL%!c%STEP-5:PROCa("invaders",i%,L%!d%):PROCe(1):NEXTi%:a$="PRESS SPACE TO PLAY" p%=LEN(a$)*b%!A%:y%=170:PROCb(FNb(p%,b%!e%),y%,a$,11):a$="OR Q TO QUIT":p%=LEN(a$)*b%!A%:y%-=b%!J%:PROCb(FNb(p%,b%!e%),y%,a$,11):WHILENOTINKEY(-99)ANDNOTINKEY(-17)ANDNOTINKEY(-82):PROCc(k%):a$="SCORE ADVANCE":p%=LEN(a$)*b%!A%:x%=k%!c%+FNb(p%,k%!e%):y%=k%!d%+k%!h%-20 PROCb(x%,y%,a$,0):a$="TABLE":y%-=b%!J%:p%=LEN(a$)*b%!A%:x%=k%!c%+FNb(p%,k%!e%):PROCb(x%,y%,a$,0):x%=a%!c%+a%!e%+10:PROCa("saucer_0",a%!c%,a%!d%):PROCb(x%,a%!d%+10,"= 500 POINTS !",0):PROCa("inv_3",_%!c%,_%!d%):PROCb(x%,_%!d%+20,"= 100 POINTS !",0) PROCa("inv_2",P%!c%,P%!d%):PROCb(x%,P%!d%+20,"= 75 POINTS !",0):PROCa("inv_1",F%!c%,F%!d%):PROCb(x%,F%!d%+20,"= 50 POINTS !",0):t%=TIME+750:REPEAT:IFINKEY(-82)THENPROCg UNTILTIME=t%ORINKEY(-17)ORINKEY(-99):IFINKEY(-17)THEN=TRUE IFINKEY(-99)THEN=FALSE PROCc(k%):a$="TODAY'S":IFba%THENa$="ALL TIME" p%=LEN(a$)*b%!A%:x%=k%!c%+FNb(p%,k%!e%):y%=k%!d%+k%!h%-20:PROCb(x%,y%,a$,0):a$="HI SCORES":y%-=b%!J%:p%=LEN(a$)*b%!A%:x%=k%!c%+FNb(p%,k%!e%):PROCb(x%,y%,a$,0):y%=(k%!d%+k%!h%)-100:a$=" POS."+STRING$(21," ")+"SCORE."+STRING$(3," ")+"RACK." p%=LEN(a$)*b%!A%:x%=k%!c%+FNb(p%,k%!e%):PROCb(x%,y%,a$,0):y%-=2*b%!J%:FORi%=1TO10:IFi%<10THEN a$=" "+STR$(i%)+". " ELSE:a$=" "+STR$(i%)+". " ENDIF s$=FNi(a$(i%)):a$+=FNc(s$,8," ",FALSE):a$+=" .... ":a$+=FNj(STR$(b%(i%)),10):a$+=" ... "+FNj(STR$(c%(i%)),3):p%=LEN(a$)*b%!A%:x%=k%!c%+FNb(p%,k%!e%):PROCb(x%,y%-(i%*(b%!J%+5)),a$,0):NEXTi%:t%=TIME+750:REPEAT:IFINKEY(-82)THENPROCg UNTILTIME=t%ORINKEY(-17)ORINKEY(-99):IFINKEY(-17)THEN=TRUE IFINKEY(-99)THEN=FALSE ENDWHILE:IFINKEY(-17)THEN=TRUE =FALSE DEFPROCl:LOCALm%,j%,a%,g%,B%:LOCALH%:LOCALa%():LOCAL`%,oa%,T%,pa%:LOCALqa%,p%,a$,x%,y%:DIMm% 52,j% 52,a% 52,g% 52,H% 16,a%(10,6):DIMB% 16:`%=0:ra%=4:oa%=8:sa%=12:T%=fa%:pa%=ga%:v%=ha%:Q%=ia%:U%=ja%:m%!e%=FNa(30,1):m%!h%=FNa(15,2):m%!c%=FNd(m%,b%) m%!d%=50:m%!E%=6:m%!D%=m%!E%:j%!e%=FNa(5,1):j%!h%=FNa(20,2):j%!u%=FALSE:j%!E%=10:a%!e%=FNa(40,1):a%!h%=FNa(20,2):a%!d%=G%!Z%-(10+a%!h%):a%!E%=5:a%!u%=FALSE:a%!ia%=TRUE:H%!e%=FNa(20,1):H%!h%=FNa(20,2) g%!pa%=FNa(20,1):g%!Q%=10:g%!U%=6:g%!u%=TRUE:B%!oa%=1:B%!ra%=0:B%!`%=3:B%!sa%=FALSE:PROCd(G%!Z%):PROCd(G%!na%):PROCm(0,b%(1),B%!`%,B%!oa%):PROCn:PROCj:PROCa("base",m%!c%,m%!d%):REPEAT:qa%=FALSE:IFINKEY(-74)THENPROCo(m%!c%,m%!d%) IFINKEY(-98)THENPROCp:qa%=TRUE IFINKEY(-67)THENPROCq:qa%=TRUE IFINKEY(-82)THENPROCg IFINKEY(-17)THENPROCr IFqa%THEN m%!c%+=m%!D%:PROCa("base",m%!c%,m%!d%) ENDIF PROCs:PROCt:PROCu:UNTILB%!`%=0:PROCi("GAME OVER!!!",11):PROCe(750):ENDPROC DEFPROCp:IFm%!c%<=0THEN m%!c%=0 ELSE:m%!D%=0-m%!E% ENDIF ENDPROC DEFPROCq:IFm%!c%>=b%!e%-m%!e%THEN m%!c%=b%!e%-m%!e% ELSE:m%!D%=0+m%!E% ENDIF ENDPROC DEFPROCo(x%,y%):IFNOTj%!u%THEN j%!u%=TRUE:j%!c%=x%+(m%!e%/2):j%!d%=y%+m%!h% ENDIF ENDPROC DEFPROCg:REPEAT:UNTILNOTINKEY(-82):OSCLI"ScreenSave .Dump"+STR$(ca%):ca%+=1:ENDPROC DEFPROCr:B%!`%=0:B%!sa%=TRUE:ENDPROC DEFPROCs:LOCALta%,ua%:ta%=fa%:IFj%!u%THEN j%!ta%=FALSE:IFj%!d%>=G%!Z%-j%!h%THEN j%!u%=FALSE:j%!ta%=TRUE ENDIF IFj%!ta%THEN ua%=FNf(j%,52):ua%!d%-=2:PROCc(ua%) ELSE:PROCa("shell",j%!c%,j%!d%) ENDIF j%!d%+=j%!E% ENDIF ENDPROC DEFPROCt:LOCALM%,v%,V%,W%:M%=fa%:v%=ga%:V%=ha%:W%=ia%:IFNOTa%!u%THEN IFFNg(4)ANDFNg(5)THEN a%!u%=TRUE:a%!Y%=FALSE:a%!V%=0:a%!W%=0:IFFNg(50)THEN a%!D%=0-a%!E%:a%!c%=b%!e% ELSE:a%!D%=0+a%!E%:a%!c%=0-a%!e% ENDIF ENDIF ELSE:a%!V%+=1:a%!v%+=1:IFa%!c%<=0-a%!e%ANDSGN(a%!D%)=-1THEN a%!M%=FALSE:a%!u%=FALSE:a%!v%=0:ENDPROC ENDIF IFa%!c%>b%!e%ANDSGN(a%!D%)=1THEN a%!M%=FALSE:a%!u%=FALSE:a%!v%=0:ENDPROC ENDIF IFNOTa%!Y%THEN IFFNh(j%,a%)THEN PROCc(j%):PROCa("saucer_2",a%!c%,a%!d%):a%!M%=a%!v%:a%!Y%=TRUE:j%!u%=FALSE:PROCf(500) ENDIF ELSE:IFFNh(j%,a%)THEN PROCc(j%):j%!u%=FALSE ENDIF ENDIF IFNOTa%!Y%THEN IFa%!V%>=100THENa%!V%=0 IFa%!V%MOD10=0THEN a%!W%=FNk(a%!W%) ENDIF IFa%!W%=0THEN PROCa("saucer_0",a%!c%,a%!d%) ELSE:PROCa("saucer_1",a%!c%,a%!d%) ENDIF a%!c%+=a%!D% ELSE:IFa%!v%>=a%!M%+125THEN PROCc(a%):a%!u%=FALSE:a%!M%=FALSE:a%!v%=0:a%!W%=TRUE ELSE:IFa%!v%>=a%!M%+100THEN PROCa("saucer_5",a%!c%,a%!d%) ELSE:IFa%!v%>=a%!M%+75THEN PROCa("saucer_4",a%!c%,a%!d%) ELSE:IFa%!v%>=a%!M%+50THEN PROCa("saucer_3",a%!c%,a%!d%) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDPROC DEFPROCu:LOCALv%,va%,z%,o%,q%:v%=ha%:g%!v%+=1:IFg%!v%MOD5=0THENg%!T%=FNk(g%!T%) IFg%!v%>10000THENg%!v%=0 va%=g%!c%+g%!e%:IFva%>=b%!e%THENg%!D%=0-g%!E% IFg%!c%<=0THENg%!D%=0+g%!E% IFFNh(j%,g%)THEN z%=H%!e%+g%!pa%:IF(j%!c%-g%!c%)MODz%<=H%!e%THEN o%=((j%!d%-g%!d%)DIVH%!h%)+1:q%=((j%!c%-g%!c%)DIVz%)+1:IFo%>g%!U%THENo%=g%!U% IFq%>g%!Q%THENq%=g%!Q% IFSGN(a%(q%,o%))=1THEN a%(q%,o%)=-5:PROCc(j%):j%!u%=FALSE:CASEo%OF WHEN1,2:PROCf(50) WHEN3,4:PROCf(75) WHEN5,6:PROCf(100) ENDCASE ENDIF ENDIF ENDIF g%!c%+=g%!D%:PROCj:ENDPROC DEFFNm:LOCALi%,w%,n$:FORi%=1TO10:IFi%MOD2=0THENn$="Software"ELSEn$="DynaByte" a$(i%)=FNi(n$):b%(i%)=(11-i%)*1000:c%(i%)=0:NEXTi%:w%=OPENOUT".Resources.HiTable":IFw%=0THEN=FALSE FORi%=1TO10:PRINT#w%,a$(i%),b%(i%):PRINT#w%,c%(i%):NEXTi%:CLOSE#w%:=TRUE DEFPROCk:LOCALi%,w%:w%=OPENIN".Resources.HiTable":FORi%=1TO10:INPUT#w%,a$(i%),b%(i%):INPUT#w%,c%(i%):NEXTi%:CLOSE#w%:ENDPROC DEFPROCz:LOCALi%,w%:w%=OPENOUT".Resources.HiTable":FORi%=1TO10:PRINT#w%,a$(i%),b%(i%):PRINT#w%,c%(i%):NEXTi%:CLOSE#w%:ENDPROC DEFPROCm(wa%,xa%,l%,r%):LOCALx%,a$:a$="SCORE :-"+FNc(STR$(wa%),10," ",TRUE):PROCb(0,b%!h%-b%!J%,a$,0):a$="HI SCORE :-":a$+=FNc(STR$(xa%),10," ",TRUE):x%=b%!e%-LEN(a$)*b%!A%:PROCb(x%,b%!h%-b%!J%,a$,0):PROCv(l%):PROCw(r%):ENDPROC DEFPROCv(ya%):LOCALa$:PROCa("base",0,0):a$=" = "+STR$(ya%):PROCb(m%!e%,0,a$,0):ENDPROC DEFPROCw(ya%):LOCALx%,a$:a$="RACK :-"+FNc(STR$(ya%),3,"0",TRUE):x%=b%!e%-LEN(a$)*b%!A%:PROCb(x%,0,a$,0):ENDPROC DEFPROCf(za%):LOCALx%,a$:B%!ra%+=za%:a$="SCORE :-"+FNc(STR$(B%!ra%),10," ",TRUE):PROCb(0,b%!h%-b%!J%,a$,0):IFB%!ra%>b%(1)THEN a$="HI SCORE :-":a$+=FNc(STR$(B%!ra%),10," ",TRUE):x%=b%!e%-LEN(a$)*b%!A%:PROCb(x%,b%!h%-b%!J%,a$,0) ENDIF ENDPROC DEFPROCn:LOCALo%,q%,s%:g%!c%=50:g%!d%=550:g%!T%=0:g%!Y%=0:g%!E%=3:g%!D%=g%!E%:s%=(g%!Q%*H%!e%)+((g%!Q%-1)*g%!pa%):g%!e%=s%:g%!h%=g%!U%*H%!h%:FORq%=1TOg%!Q%:FORo%=1TOg%!U%:a%(q%,o%)=((o%+1)/2)+(g%!T%*10):NEXTo%:NEXTq%:ENDPROC DEFPROCj:LOCALo%,q%,x%,y%:FORq%=1TOg%!Q%:x%=g%!c%+((q%-1)*(H%!e%+g%!pa%)):FORo%=1TOg%!U%:y%=g%!d%+((o%-1)*H%!h%):IFa%(q%,o%)>0THEN a%(q%,o%)=((o%+1)/2)+(g%!T%*10) ENDIF IFa%(q%,o%)<>0THEN CASESGN(a%(q%,o%))OF WHEN-1:PROCx(x%,y%) WHEN1:PROCa("inv_"+STR$(a%(q%,o%)),x%,y%) ENDCASE ENDIF NEXTo%:NEXTq%:ENDPROC DEFPROCx(x%,y%):LOCALX%:DIMX% 16:a%(q%,o%)+=1:PROCa("inv_4",x%,y%):IFa%(q%,o%)=0THEN X%!c%=x%:X%!d%=y%:X%!e%=H%!e%:X%!h%=H%!h%:PROCc(X%) ENDIF ENDPROC DEFPROCA:ENDPROC DEFPROCB:ENDPROC DEFPROCC:N%=OPENOUT".log":BPUT#N%,"Acorn Invaders Execution Log...":BPUT#N%,"Started at : "+TIME$:BPUT#N%,"************************************************":ENDPROC DEFPROCD(s$):PROCy("*** "+s$+" ***",0):ENDPROC DEFPROCy(c$,Aa%):LOCALt$:CASEAa%OF WHEN0:t$="Info : " WHEN1:t$="Warning : " WHEN2:t$="Error : " OTHERWISE:t$="Error : ":c$="Unknown message type." ENDCASE t$+=c$:BPUT#N%,t$:ENDPROC DEFPROCE:IFN%<>0THEN BPUT#N%,"************************************************":BPUT#N%,"Execution stopped at : "+TIME$:CLOSE#N%:N%=0 ENDIF ENDPROC DEFPROCd(d%):LOCALi%,Ba%:Ba%=b%!e%/G%!e%:FORi%=1TOBa%+1:PROCa("rail",(i%-1)*G%!e%,d%):NEXTi%:ENDPROC DEFPROCh:LOCALC%:DIMC% 20:C%!0=4:C%!4=5:C%!8=11:C%!12=12:C%!16=-1:SYS"OS_ReadVduVariables",C%,C%:b%!ka%=C%!0:b%!la%=C%!4:b%!e%=(C%!8)+1<b%!ma%THENPROCh CASECa%OF WHEN1:Da%=R%<>b%!ka% WHEN4:Da%=R%>>b%!la% OTHERWISE:ERROR255,"Unknown FNconv_units() operation : "+STR$(Ca%) ENDCASE =Da% DEFPROCb(x%,y%,a$,Fa%):LOCALi%,Ga%:Ga%=b%!A%:FORi%=1TOLEN(a$):PROCa(STR$(ASC(MID$(a$,i%,1))),x%+((i%-1)*Ga%),y%):IFFa%>0THENPROCe(Fa%) NEXTi%:ENDPROC DEFFNh(I%,S%):LOCALHa%,Ia%,Ja%,Ka%:Ja%=FALSE:Ka%=FALSE:IFI%!u%ANDS%!u%THEN Ha%=S%!c%+S%!e%:Ia%=S%!d%+S%!h%:IFI%!c%>=S%!c%ANDI%!c%<=Ha%THENJa%=TRUE IFI%!d%>=S%!d%ANDI%!d%<=Ia%THENKa%=TRUE ENDIF =Ja%ANDKa% DEFFNf(I%,R%):LOCALLa%,Ma%:DIMMa% R%:FORLa%=0TOR%-4STEP4:Ma%!La%=I%!La%:NEXTLa%:=Ma% DEFPROCc(I%):GCOL0,0TINT0:RECTANGLEFILLI%!c%,I%!d%,I%!e%,I%!h%:ENDPROC DEFFNb(Na%,b%):=(b%/2)-(Na%/2) DEFPROCi(a$,Oa%):LOCALp%,y%:p%=LEN(a$)*b%!A%:y%=(b%!h%/2)-(b%!J%/2):PROCb(FNb(p%,b%!e%),y%,a$,Oa%):ENDPROC DEFFNd(Pa%,Qa%):=(Qa%!e%/2)-(Pa%!e%/2) DEFPROCa(g$,x%,y%):LOCALRa%:SYSda%,256+24,O%,g$TO,,Ra%:SYSda%,512+34,O%,Ra%,x%,y%,0:ENDPROC DEFFNg(n%):LOCALSa%:Sa%=RND(100):=Sa%<=n% DEFFNi(a$):LOCALi%,d$:FORi%=1TOLEN(a$):d$+=CHR$(ASC(MID$(a$,i%,1))EOR131):NEXTi%:=d$ DEFPROCe(n%):LOCALt%:t%=TIME+n%:REPEAT:UNTILTIME>=t%:ENDPROC DEFFNk(n%):=n%EOR1 DEFFNc(a$,Ta%,e$,Ua%):LOCALVa%,b$:Va%=Ta%-LEN(a$):IFVa%<=0THEN b$=LEFT$(a$,Ta%) ELSE:IFUa%THEN b$=STRING$(Ta%,e$):RIGHT$(b$,LEN(a$))=a$ ELSE:b$=a$+STRING$(Va%,e$) ENDIF ENDIF =b$ DEFFNj(a$,Ta%):LOCALb$:b$=STRING$(Ta%," "):RIGHT$(b$,LEN(a$))=a$:=b$ DEFFNe(f$):LOCALf%:SYS"XOS_File",17,f$TOf%:=f% DEFFNl(f$):LOCALs%:IFFNe(f$)=0THEN=0 SYS"XOS_File",5,f$TO,,,,s%:=s%