REM Acorn Invaders REM Packed by MH's BASCrunch v1.31c 30/1/08 On 20 Feb 2008 ONERRORREPORT:PRINT" at line ";ERL:END T%=FALSE:c$=".":IFFNe(c$+"Resources.Gfx0")<>1THENT%=TRUE IFFNe(c$+"Resources.Gfx1")<>1THENT%=TRUE IFT%THENERROR255,"File Missing!!" T%=FALSE:aa%=0:ba%=TRUE:DIMa$(10),b%(10):DIMc%(10):SYS"OS_SWINumberFromString",,"OS_SpriteOp"TOca%:da%=FNj(c$+"Resources.Gfx0"):ea%=FNj(c$+"Resources.Gfx1"):fa%=da%:IFFNe(c$+"Resources.HiTable")<>1THEN IFNOTFNnTHENba%=FALSE ELSE:PROCp ENDIF b%=0:c%=4:e%=8:g%=12:w%=16:A%=20:o%=24:U%=28:ga%=32:ha%=36:ia%=40:ja%=44:ka%=48:la%=16:ma%=20:na%=24:E%=28:M%=32:oa%=16:pa%=20:DIMd% 36,J% 24,K% 16:MODE28:OFF:PROCh:d%!E%=FNa(8,1):d%!M%=FNa(8,2)+7 J%!e%=FNa(6,1):J%!g%=FNa(6,2):J%!oa%=d%!g%-50:J%!pa%=30:REPEAT:CLS:T%=FNo:IFNOTT%THENCLS:PROCq UNTILT%:CLS:K%!e%=220:K%!g%=40:K%=FNk(K%,d%):K%!c%-=3:PROCi(K%):PROCj("GOODBYE!!!",10):END DEFFNo:LOCALi%,N%,P%,m%,q%,a$,x%,a%,I%,V%:LOCALqa%,t%,y%,s$:DIMN% 16,P% 16,m% 16:DIMa% 16,I% 16:m%!e%=630:m%!g%=500:m%!b%=FNc(m%,d%):m%!c%=200:I%!e%=FNa(20,1):I%!g%=FNa(20,2):I%!b%=m%!b%+150+FNc(I%,a%):V%=FNf(I%,16):qa%=FNf(I%,16) I%!c%=m%!c%+100:V%!c%=I%!c%+I%!g%+40:qa%!c%=V%!c%+V%!g%+40:a%!e%=FNa(40,1):a%!g%=FNa(20,2):a%!b%=m%!b%+150:a%!c%=(m%!c%+m%!g%)-160:N%!e%=FNa(100,1):N%!g%=FNa(40,2):N%!b%=FNc(N%,d%):N%!c%=800 P%!e%=FNa(150,1):P%!g%=FNa(40,2):P%!b%=FNc(P%,d%):P%!c%=N%!c%-P%!g%:PROCe(J%!oa%):PROCe(J%!pa%):FORi%=0-N%!e%TON%!b%STEP5:PROCa("space",i%,N%!c%):PROCd(1):WAIT:NEXTi%:FORi%=d%!e%TOP%!b%STEP-5:PROCa("invaders",i%,P%!c%):PROCd(1):WAIT:NEXTi%:a$="PRESS SPACE TO PLAY" q%=LEN(a$)*d%!E%:y%=170:PROCb(FNb(q%,d%!e%),y%,a$,11):a$="OR Q TO QUIT":q%=LEN(a$)*d%!E%:y%-=d%!M%:PROCb(FNb(q%,d%!e%),y%,a$,11):WHILENOTINKEY(-99)ANDNOTINKEY(-17)ANDNOTINKEY(-82):PROCc(m%):a$="SCORE ADVANCE":q%=LEN(a$)*d%!E%:x%=m%!b%+FNb(q%,m%!e%):y%=m%!c%+m%!g%-20 PROCb(x%,y%,a$,0):a$="TABLE":y%-=d%!M%:q%=LEN(a$)*d%!E%:x%=m%!b%+FNb(q%,m%!e%):PROCb(x%,y%,a$,0):x%=a%!b%+a%!e%+10:PROCa("saucer_0",a%!b%,a%!c%):PROCb(x%,a%!c%+10,"= 500 POINTS !",0):PROCa("inv_3",qa%!b%,qa%!c%):PROCb(x%,qa%!c%+12,"= 100 POINTS !",0) PROCa("inv_2",V%!b%,V%!c%):PROCb(x%,V%!c%+12,"= 75 POINTS !",0):PROCa("inv_1",I%!b%,I%!c%):PROCb(x%,I%!c%+12,"= 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(m%):a$="TODAY'S":IFba%THENa$="ALL TIME" q%=LEN(a$)*d%!E%:x%=m%!b%+FNb(q%,m%!e%):y%=m%!c%+m%!g%-20:PROCb(x%,y%,a$,0):a$="HI SCORES":y%-=d%!M%:q%=LEN(a$)*d%!E%:x%=m%!b%+FNb(q%,m%!e%):PROCb(x%,y%,a$,0):y%=(m%!c%+m%!g%)-100:a$=" POS."+STRING$(21," ")+"SCORE."+STRING$(3," ")+"RACK." q%=LEN(a$)*d%!E%:x%=m%!b%+FNb(q%,m%!e%):PROCb(x%,y%,a$,0):y%-=2*d%!M%:FORi%=1TO10:IFi%<10THEN a$=" "+STR$(i%)+". " ELSE:a$=" "+STR$(i%)+". " ENDIF s$=FNl(a$(i%)):a$+=FNd(s$,8," ",FALSE):a$+=" .... ":a$+=FNm(STR$(b%(i%)),10):a$+=" ... "+FNm(STR$(c%(i%)),3):q%=LEN(a$)*d%!E%:x%=m%!b%+FNb(q%,m%!e%):PROCb(x%,y%-(i%*(d%!M%+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 DEFPROCq:LOCALh%,j%,a%,f%,u%:LOCALF%:LOCALa%():LOCALR%,ra%,O%,sa%:LOCALta%,q%,a$,x%,y%:DIMh% 52,j% 52,a% 52,f% 52,F% 16,a%(10,6):DIMu% 16:R%=0:ua%=4:ra%=8:va%=12:O%=ga%:sa%=ha%:B%=ia%:Y%=ja%:wa%=ka%:h%!e%=FNa(30,1):h%!g%=FNa(15,2):h%!b%=FNc(h%,d%) h%!c%=50:h%!A%=6:h%!w%=h%!A%:F%!e%=FNa(20,1):F%!g%=FNa(20,2):a%!e%=FNa(40,1):a%!g%=FNa(20,2):a%!c%=J%!oa%-(10+a%!g%):a%!A%=5:a%!o%=FALSE:a%!ja%=TRUE:j%!e%=FNa(5,1):j%!g%=FNa(20,2):j%!o%=FALSE:j%!A%=10 u%!ra%=1:u%!ua%=0:u%!R%=3:u%!va%=FALSE:f%!sa%=FNa(20,1):f%!Y%=10:f%!wa%=6:f%!o%=TRUE:PROCe(J%!oa%):PROCe(J%!pa%):PROCr(0,b%(1),u%!R%,u%!ra%):PROCk:PROCl:PROCa("base",h%!b%,h%!c%):REPEAT:ta%=FALSE:IFINKEY(-74)THENPROCs(h%!b%,h%!c%) IFINKEY(-98)THENPROCt:ta%=TRUE IFINKEY(-67)THENPROCu:ta%=TRUE IFINKEY(-82)THENPROCg IFINKEY(-17)THENPROCv IFINKEY(-35)THENPROCm IFta%THEN h%!b%+=h%!w%:PROCa("base",h%!b%,h%!c%) ENDIF IFu%!R%>0THEN PROCw:PROCx:PROCy ENDIF WAIT:UNTILu%!R%=0:K%!e%=240:K%!g%=40:K%=FNk(K%,d%):K%!c%-=3:PROCi(K%):PROCj("GAME OVER!!!",11):PROCd(750):ENDPROC DEFPROCt:IFh%!b%<=0THEN h%!b%=0 ELSE:h%!w%=0-h%!A% ENDIF ENDPROC DEFPROCu:IFh%!b%>=d%!e%-h%!e%THEN h%!b%=d%!e%-h%!e% ELSE:h%!w%=0+h%!A% ENDIF ENDPROC DEFPROCs(x%,y%):IFNOTj%!o%THEN j%!o%=TRUE:j%!b%=x%+(h%!e%/2):j%!c%=y%+h%!g% ENDIF ENDPROC DEFPROCg:REPEAT:UNTILNOTINKEY(-82):OSCLI"ScreenSave .Dump"+STR$(aa%):aa%+=1:ENDPROC DEFPROCv:u%!R%=0:u%!va%=TRUE:ENDPROC DEFPROCw:LOCALxa%,ya%:xa%=ga%:IFj%!o%THEN j%!xa%=FALSE:IFj%!c%>=J%!oa%-j%!g%THEN j%!o%=FALSE:j%!xa%=TRUE ENDIF IFj%!xa%THEN ya%=FNf(j%,52):ya%!c%-=2:PROCc(ya%) ELSE:PROCa("shell",j%!b%,j%!c%) ENDIF j%!c%+=j%!A% ENDIF ENDPROC DEFPROCx:LOCALQ%,B%,Z%,_%:Q%=ga%:B%=ha%:Z%=ia%:_%=ja%:IFNOTa%!o%THEN IFFNg(4)ANDFNg(5)THEN a%!o%=TRUE:a%!U%=FALSE:a%!Z%=0:a%!_%=0:IFFNg(50)THEN a%!w%=0-a%!A%:a%!b%=d%!e% ELSE:a%!w%=0+a%!A%:a%!b%=0-a%!e% ENDIF ENDIF ELSE:a%!Z%+=1:a%!B%+=1:IFa%!b%<=0-a%!e%ANDSGN(a%!w%)=-1THEN a%!Q%=FALSE:a%!o%=FALSE:a%!B%=0:ENDPROC ENDIF IFa%!b%>d%!e%ANDSGN(a%!w%)=1THEN a%!Q%=FALSE:a%!o%=FALSE:a%!B%=0:ENDPROC ENDIF IFNOTa%!U%THEN IFFNh(j%,a%)THEN PROCc(j%):PROCa("saucer_2",a%!b%,a%!c%):a%!Q%=a%!B%:a%!U%=TRUE:j%!o%=FALSE:PROCf(500) ENDIF ELSE:IFFNh(j%,a%)THEN PROCc(j%):j%!o%=FALSE ENDIF ENDIF IFNOTa%!U%THEN IFa%!Z%>=100THENa%!Z%=0 IFa%!Z%MOD10=0THEN a%!_%=FNi(a%!_%) ENDIF IFa%!_%=0THEN PROCa("saucer_0",a%!b%,a%!c%) ELSE:PROCa("saucer_1",a%!b%,a%!c%) ENDIF a%!b%+=a%!w% ELSE:IFa%!B%>=a%!Q%+125THEN PROCc(a%):a%!o%=FALSE:a%!Q%=FALSE:a%!B%=0:a%!_%=TRUE ELSE:IFa%!B%>=a%!Q%+100THEN PROCa("saucer_5",a%!b%,a%!c%) ELSE:IFa%!B%>=a%!Q%+75THEN PROCa("saucer_4",a%!b%,a%!c%) ELSE:IFa%!B%>=a%!Q%+50THEN PROCa("saucer_3",a%!b%,a%!c%) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDPROC DEFPROCy:LOCALB%,za%,z%,p%,v%:B%=ia%:f%!B%+=1:IFf%!B%MOD5=0THENf%!O%=FNi(f%!O%) IFf%!B%>10000THENf%!B%=0 za%=f%!b%+f%!e%:IFza%>=d%!e%THEN f%!w%=0-f%!A%:f%!c%-=5 ENDIF IFf%!b%<=0THEN f%!w%=0+f%!A%:f%!c%-=5 ENDIF IFf%!c%=h%!c%+h%!g%THEN PROCm:ENDPROC ENDIF IFFNh(j%,f%)THEN z%=F%!e%+f%!sa%:IF(j%!b%-f%!b%)MODz%<=F%!e%THEN p%=((j%!c%-f%!c%)DIVF%!g%)+1:v%=((j%!b%-f%!b%)DIVz%)+1:IFSGN(a%(v%,p%))=1THEN a%(v%,p%)=-5:PROCc(j%):j%!o%=FALSE:f%!U%+=1:CASEp%OF WHEN1,2:PROCf(50) WHEN3,4:PROCf(75) WHEN5,6:PROCf(100) ENDCASE ENDIF ENDIF ENDIF IFf%!U%>=f%!Y%*f%!wa%THEN u%!ra%+=1:PROCn(u%!ra%):PROCc(f%):PROCk ENDIF f%!b%+=f%!w%:PROCl:ENDPROC DEFFNn:LOCALi%,C%,n$:FORi%=1TO10:IFi%MOD2=0THENn$="Software"ELSEn$="DynaByte" a$(i%)=FNl(n$):b%(i%)=(11-i%)*1000:c%(i%)=0:NEXTi%:C%=OPENOUT".Resources.HiTable":IFC%=0THEN=FALSE FORi%=1TO10:PRINT#C%,a$(i%),b%(i%):PRINT#C%,c%(i%):NEXTi%:CLOSE#C%:=TRUE DEFPROCp:LOCALi%,C%:C%=OPENIN".Resources.HiTable":FORi%=1TO10:INPUT#C%,a$(i%),b%(i%):INPUT#C%,c%(i%):NEXTi%:CLOSE#C%:ENDPROC DEFPROCA:LOCALi%,C%:C%=OPENOUT".Resources.HiTable":FORi%=1TO10:PRINT#C%,a$(i%),b%(i%):PRINT#C%,c%(i%):NEXTi%:CLOSE#C%:ENDPROC DEFPROCr(Aa%,Ba%,l%,r%):LOCALx%,a$:a$="SCORE :-"+FNd(STR$(Aa%),10," ",TRUE):PROCb(0,d%!g%-d%!M%,a$,0):a$="HI SCORE :-":a$+=FNd(STR$(Ba%),10," ",TRUE):x%=d%!e%-LEN(a$)*d%!E%:PROCb(x%,d%!g%-d%!M%,a$,0):PROCo(l%):PROCn(r%):ENDPROC DEFPROCo(Ca%):LOCALa$:PROCa("base",0,0):a$=" = "+STR$(Ca%):PROCb(h%!e%,0,a$,0):ENDPROC DEFPROCn(Ca%):LOCALx%,a$:a$="RACK :-"+FNd(STR$(Ca%),3,"0",TRUE):x%=d%!e%-LEN(a$)*d%!E%:PROCb(x%,0,a$,0):ENDPROC DEFPROCf(Da%):LOCALx%,a$:u%!ua%+=Da%:a$="SCORE :-"+FNd(STR$(u%!ua%),10," ",TRUE):PROCb(0,d%!g%-d%!M%,a$,0):IFu%!ua%>b%(1)THEN a$="HI SCORE :-":a$+=FNd(STR$(u%!ua%),10," ",TRUE):x%=d%!e%-LEN(a$)*d%!E%:PROCb(x%,d%!g%-d%!M%,a$,0) ENDIF ENDPROC DEFPROCk:LOCALp%,v%,s%:f%!b%=50:f%!c%=550:f%!O%=0:f%!U%=0:f%!A%=3:f%!w%=f%!A%:s%=(f%!Y%*F%!e%)+((f%!Y%-1)*f%!sa%):f%!e%=s%:f%!g%=f%!wa%*F%!g%:FORv%=1TOf%!Y%:FORp%=1TOf%!wa%:a%(v%,p%)=((p%+1)/2)+(f%!O%*10):NEXTp%:NEXTv%:ENDPROC DEFPROCl:LOCALp%,v%,x%,y%:FORv%=1TOf%!Y%:x%=f%!b%+((v%-1)*(F%!e%+f%!sa%)):FORp%=1TOf%!wa%:y%=f%!c%+((p%-1)*F%!g%):IFa%(v%,p%)>0THEN a%(v%,p%)=((p%+1)/2)+(f%!O%*10) ENDIF IFa%(v%,p%)<>0THEN CASESGN(a%(v%,p%))OF WHEN-1:PROCz(x%,y%) WHEN1:PROCa("inv_"+STR$(a%(v%,p%)),x%,y%) ENDCASE ENDIF NEXTp%:NEXTv%:ENDPROC DEFPROCz(x%,y%):LOCAL`%:DIM`% 16:a%(v%,p%)+=1:PROCa("inv_4",x%,y%):IFa%(v%,p%)=0THEN `%!b%=x%:`%!c%=y%:`%!e%=F%!e%:`%!g%=F%!g%:PROCc(`%) ENDIF ENDPROC DEFPROCB:ENDPROC DEFPROCC:ENDPROC DEFPROCm:LOCALD%,L%,O%,Ea%,A%,i%,d$:A%=1:Fa%=24:DIMD% 28,L% 28:PROCc(f%):PROCc(h%):IFj%!o%THEN PROCc(j%):j%!o%=FALSE ENDIF IFa%!o%THEN PROCc(a%):a%!o%=FALSE ENDIF h%!b%=FNc(h%,d%):D%!b%=0-F%!e%:D%!c%=h%!c%:D%!w%=A%:L%!b%=d%!e%:L%!c%=h%!c%:L%!w%=0-A%:u%!R%=0:PROCo(u%!R%):PROCa("base",h%!b%,h%!c%):O%=0:Ea%=FALSE:REPEAT:D%!b%+=D%!w%:D%!Fa%=D%!b%+F%!e%:L%!b%+=L%!w%:O%+=1:IFO%MOD20=0THENEa%=FNi(Ea%) IFEa%THENd$="inv_11"ELSEd$="inv_1" PROCa(d$,D%!b%,D%!c%):PROCa(d$,L%!b%,L%!c%):PROCd(2):WAIT:UNTILD%!Fa%>=h%!b%:FORi%=1TO10:PROCa("inv_1",D%!b%,D%!c%):PROCa("inv_1",L%!b%,L%!c%):PROCd(20):PROCa("inv_11",D%!b%,D%!c%):PROCa("inv_11",L%!b%,L%!c%):PROCd(20):WAIT:NEXTi%:FORi%=1TO3 PROCa("base_"+STR$(i%),h%!b%,h%!c%):PROCd(20):WAIT:NEXTi%:PROCd(20):PROCc(h%):ENDPROC DEFFNj(f$):LOCALS%,G%:G%=FNp(f$)+256:DIMS% G%:!S%=G%:S%!4=0:S%!8=16:S%!12=16:SYSca%,256+10,S%,f$:SYSca%,256+17,S%:=S% DEFPROCb(x%,y%,a$,Ga%):LOCALi%,Ha%:fa%=ea%:Ha%=d%!E%:FORi%=1TOLEN(a$):PROCa(STR$(ASC(MID$(a$,i%,1))),x%+((i%-1)*Ha%),y%):IFGa%>0THENPROCd(Ga%) NEXTi%:fa%=da%:ENDPROC DEFPROCa(i$,x%,y%):LOCALIa%:SYSca%,256+24,fa%,i$TO,,Ia%:SYSca%,512+34,fa%,Ia%,x%,y%,0:ENDPROC DEFPROCc(k%):GCOL0,0TINT0:RECTANGLEFILLk%!b%,k%!c%,k%!e%,k%!g%:ENDPROC DEFFNb(Ja%,d%):=(d%/2)-(Ja%/2) DEFPROCj(a$,Ka%):LOCALq%,y%:q%=LEN(a$)*d%!E%:y%=(d%!g%/2)-(d%!M%/2):PROCb(FNb(q%,d%!e%),y%,a$,Ka%):ENDPROC DEFFNc(W%,La%):=(La%!e%/2)-(W%!e%/2) DEFFNk(W%,La%):LOCALx%,y%:W%!b%=(La%!e%/2)-(W%!e%/2):W%!c%=(La%!g%/2)-(W%!g%/2):=W% DEFPROCe(c%):LOCALi%,Ma%:Ma%=d%!e%/J%!e%:FORi%=1TOMa%+1:PROCa("rail",(i%-1)*J%!e%,c%):NEXTi%:ENDPROC DEFPROCi(k%):LOCALx%,y%,Na%,Oa%,Pa%,Qa%,i%:Na%=FNa(3,1):Oa%=FNa(3,2):Pa%=1:Qa%=3:FORi%=1TOk%!e%:x%=k%!b%+((i%-1)*Pa%):PROCa("box_x",x%,k%!c%):PROCa("box_x",x%,k%!c%+(k%!g%-(2*Qa%))):NEXTi%:x%=k%!b%+(k%!e%-Na%):FORi%=1TOk%!g%-1 PROCa("box_y",k%!b%,k%!c%+((i%-1)*Pa%)):PROCa("box_y",x%,k%!c%+((i%-1)*Pa%)):NEXTi%:PROCa("box_bl",k%!b%,k%!c%):PROCa("box_tl",k%!b%,(k%!c%+k%!g%)-Oa%):PROCa("box_br",k%!b%+(k%!e%-Na%),k%!c%):x%=(k%!b%+k%!e%)-Na%:y%=(k%!c%+k%!g%)-Oa%:PROCa("box_tr",x%,y%):ENDPROC DEFPROCh:LOCALH%:DIMH% 20:H%!0=4:H%!4=5:H%!8=11:H%!12=12:H%!16=-1:SYS"OS_ReadVduVariables",H%,H%:d%!la%=H%!0:d%!ma%=H%!4:d%!e%=(H%!8)+1<d%!na%THENPROCh CASERa%OF WHEN1:Sa%=G%<>d%!la% WHEN4:Sa%=G%>>d%!ma% OTHERWISE:ERROR255,"Unknown FNconv_units() operation : "+STR$(Ra%) ENDCASE =Sa% DEFFNh(k%,X%):LOCALUa%,Va%,Wa%,Xa%:Wa%=FALSE:Xa%=FALSE:IFk%!o%ANDX%!o%THEN Ua%=X%!b%+X%!e%:Va%=X%!c%+X%!g%:IFk%!b%>=X%!b%ANDk%!b%=X%!c%ANDk%!c%=t%:ENDPROC DEFFNi(n%):=n%EOR1 DEFFNd(a$,`a%,h$,ab%):LOCALbb%,b$:bb%=`a%-LEN(a$):IFbb%<=0THEN b$=LEFT$(a$,`a%) ELSE:IFab%THEN b$=STRING$(`a%,h$):RIGHT$(b$,LEN(a$))=a$ ELSE:b$=a$+STRING$(bb%,h$) ENDIF ENDIF =b$ DEFFNm(a$,`a%):LOCALb$:b$=STRING$(`a%," "):RIGHT$(b$,LEN(a$))=a$:=b$ DEFFNe(e$):LOCALcb%:SYS"XOS_File",17,e$TOcb%:=cb% DEFFNp(e$):LOCALG%:SYS"XOS_File",5,e$TO,,,,G%:=G%