REM Acorn Invaders REM Packed by MH's BASCrunch v1.31c 30/1/08 On 12 Apr 2008 ONERRORPROCv:END MODE28:OFF:a$="Acorn Invaders. (c)2008 DynaByte Software":PRINTa$:PRINTSTRING$(LEN(a$),"-"):PRINT:PRINT:PRINT"Loading Game Data...":PRINT"Please Wait...":aa%=FALSE:c$=".":IFFNh(c$+"Resources.Gfx0")<>1THENaa%=TRUE IFFNh(c$+"Resources.Gfx1")<>1THENaa%=TRUE IFFNh(c$+"Resources.Intro")<>1THENaa%=TRUE IFFNh(c$+"Resources.Creds")<>1THENaa%=TRUE IFaa%THENERROR255,"File Missing!!" OSCLI"Playmod "+c$+"Resources.Intro":aa%=FALSE:ba%=0:ca%=1:da%=TRUE:ea%=0:DIMa$(10),c%(10):DIMd%(10):PROCw:SYS"OS_SWINumberFromString",,"OS_SpriteOp"TOfa%:ga%=FNo(c$+"Resources.Gfx0"):ha%=FNo(c$+"Resources.Gfx1"):ia%=ga% ja%=OPENIN(c$+"Resources.Creds"):INPUT#ja%,k$:IFk$<>"DERC"THEN CLOSE#ja%:ERROR255,"Credit screen has been tampered with!!":END ENDIF INPUT#ja%,ea%:DIMb$(ea%),e%(ea%):FORi%=1TOea%:INPUT#ja%,e%(i%),b$(i%):NEXTi%:CLOSE#ja%:g$=c$+"Resources.HiTable":IFFNh(g$)<>1THEN IFNOTFNp(0,c$)THENda%=FALSE PROCx(da%) ELSE:IFNOTFNp(1,g$)THENda%=FALSE PROCy ENDIF b%=0:a%=4:f%=8:k%=12:J%=16:K%=20:q%=24:_%=28:ka%=32:la%=36:ma%=40:na%=44:oa%=48:pa%=52:qa%=56:ra%=60:sa%=16:ta%=20:ua%=24:`%=28:S%=32:va%=16:wa%=20:h%=FNb(36):L%=FNb(24):E%=FNb(16):CLS:PROCm:h%!`%=FNa(8,1):h%!S%=FNa(8,2)+7 L%!f%=FNa(6,1):L%!k%=FNa(6,2):L%!va%=h%!k%-50:L%!wa%=30:REPEAT:CLS:aa%=FNr:IFNOTaa%THENCLS:PROCz UNTILaa%:CLS:E%!f%=220:E%!k%=40:E%=FNn(E%,h%):E%!a%-=3:PROCj(E%):PROCn("GOODBYE!!!",10):IFca%=1THEN FORi%=127TO1STEP-2:OSCLI"PlayVolume "+STR$(i%):PROCe(4):NEXTi%:OSCLI"PlayStop":OSCLI"PlayVolume 127" ENDIF PROCo:END DEFFNr:LOCALi%,F%,G%,w%,Q%,d%,R%,xa%:LOCALya%,N%,za%,Aa%,Ba%,Ca%,x%,y%,U%,s$,a$:F%=FNb(16):G%=FNb(16):w%=FNb(16):d%=FNb(16):R%=FNb(16):N%=FNb(16):F%!f%=FNa(100,1):F%!k%=FNa(40,2):F%!b%=FNc(F%,h%):F%!a%=800 G%!f%=FNa(150,1):G%!k%=FNa(40,2):G%!b%=FNc(G%,h%):G%!a%=F%!a%-G%!k%:w%!f%=640:w%!k%=500:w%!b%=FNc(w%,h%):w%!a%=200:d%!f%=FNa(40,1):d%!k%=FNa(20,2):d%!b%=w%!b%+150:d%!a%=(w%!a%+w%!k%)-160:R%!f%=FNa(20,1):R%!k%=FNa(20,2) R%!b%=w%!b%+150+FNc(R%,d%):xa%=FNe(R%,16):ya%=FNe(R%,16):R%!a%=w%!a%+100:xa%!a%=R%!a%+R%!k%+40:ya%!a%=xa%!a%+xa%!k%+40:N%!f%=FNa(20,1):N%!k%=FNa(20,2):N%!b%=w%!b%+150+FNc(N%,d%):za%=FNe(N%,16) Aa%=FNe(N%,16):Ca%=FNe(N%,16):Ba%=FNe(N%,16)::N%!a%=(w%!a%+w%!k%)-160:za%!a%=N%!a%-60:Aa%!a%=za%!a%-60:Ca%!a%=Aa%!a%-100:Ba%!a%=Ca%!a%-60:PROCg(L%!va%):PROCg(L%!wa%):FORi%=0-F%!f%TOF%!b%STEP5:WAIT:PROCa("space",i%,F%!a%):PROCe(1):NEXTi% FORi%=h%!f%TOG%!b%STEP-5:WAIT:PROCa("invaders",i%,G%!a%):PROCe(1):NEXTi%:a$="PRESS SPACE TO PLAY":Q%=LEN(a$)*h%!`%:y%=170:PROCb(FNi(Q%,h%!f%),y%,a$,11):a$="OR Q TO QUIT":Q%=LEN(a$)*h%!`%:y%-=h%!S%:PROCb(FNi(Q%,h%!f%),y%,a$,11):WHILENOTINKEY(-99)ANDNOTINKEY(-17)ANDNOTINKEY(-82) y%=w%!a%+w%!k%:FORi%=1TOea%:a$=FNl(b$(i%)):x%=FNd(a$):CASEe%(i%)OF WHEN-1:y%-=h%!S% WHEN-2:y%-=(2*h%!S%) OTHERWISE:y%-=e%(i%) ENDCASE PROCb(x%,y%,a$,0):NEXTi%:U%=FNm:IFU%=1THENPROCf:=TRUE IFU%=2THENPROCf:=FALSE PROCc(w%):a$="SCORE ADVANCE":x%=FNd(a$):y%=w%!a%+w%!k%-20:PROCb(x%,y%,a$,0):a$="TABLE":y%-=h%!S%:x%=FNd(a$):PROCb(x%,y%,a$,0):x%=d%!b%+d%!f%+10:PROCa("saucer_0",d%!b%,d%!a%):PROCb(x%,d%!a%+10,"= 500 POINTS !",0):PROCa("inv_3",ya%!b%,ya%!a%) PROCb(x%,ya%!a%+12,"= 100 POINTS !",0):PROCa("inv_2",xa%!b%,xa%!a%):PROCb(x%,xa%!a%+12,"= 75 POINTS !",0):PROCa("inv_1",R%!b%,R%!a%):PROCb(x%,R%!a%+12,"= 50 POINTS !",0):U%=FNm:IFU%=1THENPROCf:=TRUE IFU%=2THENPROCf:=FALSE PROCc(w%):a$="KEYBOARD CONTROLS":x%=FNd(a$):y%=w%!a%+w%!k%-20:PROCb(x%,y%,a$,0):x%=N%!b%+N%!f%+10:PROCa("key_z",N%!b%,N%!a%):PROCb(x%,N%!a%+12,": MOVE LEFT",0):PROCa("key_x",za%!b%,za%!a%):PROCb(x%,za%!a%+12,": MOVE RIGHT",0) PROCa("key_enter",Aa%!b%,Aa%!a%):PROCb(x%,Aa%!a%+12,": FIRE SHELL",0):PROCa("key_m",Ca%!b%,Ca%!a%):PROCb(x%,Ca%!a%,": MUSIC ON/OFF",0):PROCa("key_q",Ba%!b%,Ba%!a%):PROCb(x%,Ba%!a%+12,": END GAME",0):U%=FNm:IFU%=1THENPROCf:=TRUE IFU%=2THENPROCf:=FALSE PROCc(w%):a$="TODAY'S":IFda%THENa$="ALL TIME" x%=FNd(a$):y%=w%!a%+w%!k%-20:PROCb(x%,y%,a$,0):a$="HI SCORES":y%-=h%!S%:x%=FNd(a$):PROCb(x%,y%,a$,0):y%=(w%!a%+w%!k%)-100:a$=" POS."+" PLAYER."+STRING$(12," ")+"SCORE.":a$+=STRING$(3," ")+"RACK.":x%=FNd(a$):PROCb(x%,y%,a$,0):y%-=2*h%!S%:FORi%=1TO10:IFi%<10THEN a$=" "+STR$(i%)+". " ELSE:a$=" "+STR$(i%)+". " ENDIF s$=FNl(a$(i%)):a$+=FNf(s$,8," ",FALSE):a$+=" .... ":a$+=FNq(STR$(c%(i%)),10):a$+=" ... "+FNq(STR$(d%(i%)),3):x%=FNd(a$):PROCb(x%,y%-(i%*(h%!S%+5)),a$,0):NEXTi%:U%=FNm:IFU%=1THENPROCf:=TRUE IFU%=2THENPROCf:=FALSE PROCc(w%):ENDWHILE:PROCf:IFINKEY(-17)THEN=TRUE =FALSE DEFFNm:LOCALt%:t%=TIME+750:REPEAT:IFINKEY(-82)THENPROCp IFINKEY(-102)THENPROCq UNTILTIME=t%ORINKEY(-17)ORINKEY(-99):IFINKEY(-17)THEN=1 IFINKEY(-99)THEN=2 =0 DEFFNd(a$):LOCALQ%:Q%=LEN(a$)*h%!`%:=w%!b%+FNi(Q%,w%!f%) DEFPROCf:PROCd(F%):PROCd(G%):PROCd(w%):PROCd(d%):PROCd(R%):PROCd(xa%):PROCd(ya%):PROCd(N%):PROCd(za%):PROCd(Aa%):PROCd(Ba%):PROCd(Ca%):ENDPROC DEFPROCz:LOCALm%,o%,d%,e%,v%:LOCALB%:LOCALb%(),a%():LOCALX%,Da%,Ea%,Fa%:LOCALGa%,Ha%,Ia%:LOCALJa%,Q%,a$,x%,y%,i%:m%=FNb(32):o%=FNb(36):d%=FNb(48):e%=FNb(64):B%=FNb(16):v%=FNb(16):DIMb%(10,6),a%(7):X%=0:Y%=4:Da%=8:Ea%=12 Fa%=la%:Ga%=na%:Ha%=oa%:Ia%=ra%:m%!f%=FNa(30,1):m%!k%=FNa(15,2):m%!b%=FNc(m%,h%):m%!a%=50:m%!K%=6:m%!J%=m%!K%:B%!f%=FNa(20,1):B%!k%=FNa(20,2):d%!f%=FNa(40,1):d%!k%=FNa(20,2):d%!a%=L%!va%-(10+d%!k%):d%!K%=5:d%!q%=FALSE:d%!na%=1 o%!f%=FNa(5,1):o%!k%=FNa(20,2):o%!q%=FALSE:o%!K%=10:v%!Da%=1:v%!Y%=0:v%!X%=3:v%!Ea%=FALSE:e%!Fa%=FNa(20,1):e%!Ga%=10:e%!Ha%=6:e%!q%=TRUE:FORi%=1TO7:a%(i%)=FNb(44):a%(i%)!f%=FNa(5,1):a%(i%)!k%=FNa(20,2):NEXTi% PROCg(L%!va%):PROCg(L%!wa%):PROCA(0,c%(1),v%!X%,v%!Da%):PROCB:PROCa("base",m%!b%,m%!a%):REPEAT:Ja%=FALSE:IFINKEY(-74)THENPROCC(m%!b%,m%!a%) IFINKEY(-98)THENPROCD:Ja%=TRUE IFINKEY(-67)THENPROCE:Ja%=TRUE IFINKEY(-102)THENPROCq IFINKEY(-82)THENPROCp IFINKEY(-17)THENPROCF IFINKEY(-34)THENPROCG IFINKEY(-35)THENPROCr IFJa%THEN m%!b%+=m%!J%:PROCa("base",m%!b%,m%!a%) ENDIF IFv%!X%>0THEN PROCH:PROCI:PROCJ:PROCK ENDIF WAIT:UNTILv%!X%=0:E%!f%=240:E%!k%=40:E%=FNn(E%,h%):E%!a%-=3:PROCc(E%):PROCj(E%):PROCn("GAME OVER!!!",11):PROCe(750):IFNOTv%!Ea%THEN IFv%!Y%>=c%(10)THEN PROCL(v%) ENDIF ENDIF PROCd(m%):PROCd(e%):PROCd(d%):PROCd(o%):PROCd(v%):PROCd(B%):FORi%=1TO7:PROCd(a%(i%)):NEXTi%:ENDPROC DEFPROCD:IFm%!b%<=0THEN m%!b%=0 ELSE:m%!J%=0-m%!K% ENDIF ENDPROC DEFPROCE:IFm%!b%>=h%!f%-m%!f%THEN m%!b%=h%!f%-m%!f% ELSE:m%!J%=0+m%!K% ENDIF ENDPROC DEFPROCC(x%,y%):IFNOTo%!q%THEN o%!q%=TRUE:o%!b%=x%+(m%!f%/2):o%!a%=y%+m%!k% ENDIF ENDPROC DEFPROCp:REPEAT:UNTILNOTINKEY(-82):OSCLI"ScreenSave .Dump"+STR$(ba%):ba%+=1:ENDPROC DEFPROCF:v%!X%=0:v%!Ea%=TRUE:ENDPROC DEFPROCq:REPEAT:UNTILNOTINKEY(-102):ca%=FNj(ca%):IFca%=1THENOSCLI"PlayStart"ELSEOSCLI"PlayPause" ENDPROC DEFPROCG:IFd%!q%THEN IFNOTd%!_%THEN d%!_%=TRUE:d%!ka%=d%!la%:PROCa("saucer_2",d%!b%,d%!a%) ENDIF ENDIF ENDPROC DEFPROCH:LOCALKa%,La%:Ka%=ka%:IFo%!q%THEN o%!Ka%=FALSE:IFo%!a%>=L%!va%-o%!k%THEN o%!q%=FALSE:o%!Ka%=TRUE ENDIF IFo%!Ka%THEN La%=FNe(o%,36):La%!a%-=2:PROCc(La%):PROCd(La%) ELSE:PROCa("shell",o%!b%,o%!a%) ENDIF o%!a%+=o%!K% ENDIF ENDPROC DEFPROCI:LOCALMa%,D%,Na%,Oa%,e$:Ma%=ka%:D%=la%:Na%=ma%:Oa%=na%:IFNOTd%!q%THEN IFFNg(4)ANDFNg(5)THEN d%!q%=TRUE:d%!_%=FALSE:d%!Na%=0:d%!Oa%=0:IFFNg(50)THEN d%!J%=0-d%!K%:d%!b%=h%!f% ELSE:d%!J%=0+d%!K%:d%!b%=0-d%!f% ENDIF ENDIF ELSE:d%!Na%+=1:d%!D%+=1:IFd%!b%<=0-d%!f%ANDSGN(d%!J%)=-1THEN d%!Ma%=FALSE:d%!q%=FALSE:d%!D%=0:ENDPROC ENDIF IFd%!b%>h%!f%ANDSGN(d%!J%)=1THEN d%!Ma%=FALSE:d%!q%=FALSE:d%!D%=0:ENDPROC ENDIF IFNOTd%!_%THEN IFFNk(o%,d%)THEN PROCc(o%):PROCa("saucer_2",d%!b%,d%!a%):d%!Ma%=d%!D%:d%!_%=TRUE:o%!q%=FALSE:PROCh(500) ENDIF ELSE:IFFNk(o%,d%)THEN PROCc(o%):o%!q%=FALSE ENDIF ENDIF IFNOTd%!_%THEN IFd%!Na%>=100THENd%!Na%=0 IFd%!Na%MOD10=0THEN d%!Oa%=FNj(d%!Oa%) ENDIF e$="saucer_"+STR$(d%!Oa%):PROCa(e$,d%!b%,d%!a%):d%!b%+=d%!J% ELSE:IFd%!D%>=d%!Ma%+80THEN PROCc(d%):d%!q%=FALSE:d%!Ma%=FALSE:d%!D%=0:d%!Oa%=TRUE ELSE:IFd%!D%>=d%!Ma%+60THEN PROCa("saucer_5",d%!b%,d%!a%) ELSE:IFd%!D%>=d%!Ma%+40THEN PROCa("saucer_4",d%!b%,d%!a%) ELSE:IFd%!D%>=d%!Ma%+20THEN PROCa("saucer_3",d%!b%,d%!a%) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDPROC DEFPROCJ:LOCALPa%,z%,C%,I%,Qa%,Ra%,Sa%,Ta%:LOCALM%,D%,Ua%,Va%:M%=ka%:D%=ma%:Ua%=pa%:Va%=qa%:e%!D%+=1:IFe%!D%MOD5=0THENe%!M%=FNj(e%!M%) IFe%!D%>10000THENe%!D%=0 Pa%=e%!b%+e%!f%:Ta%=0-((e%!Ua%-1)*(B%!f%+e%!Fa%)):IFPa%>=h%!f%THEN e%!J%=0-e%!K%:PROCs ENDIF IFe%!b%<=Ta%THEN e%!J%=0+e%!K%:PROCs ENDIF Ta%=e%!a%+((e%!Ia%-1)*B%!k%):IFTa%<=m%!a%+m%!k%THEN PROCr:ENDPROC ENDIF IFFNk(o%,e%)THEN z%=B%!f%+e%!Fa%:IF(o%!b%-e%!b%)MODz%<=B%!f%THEN C%=((o%!a%-e%!a%)DIVB%!k%)+1:I%=((o%!b%-e%!b%)DIVz%)+1:IFSGN(b%(I%,C%))=1THEN b%(I%,C%)=-5:PROCc(o%):o%!q%=FALSE:e%!_%+=1:CASEC%OF WHEN1,2:PROCh(50) WHEN3,4:PROCh(75) WHEN5,6:PROCh(100) ENDCASE ENDIF ENDIF ENDIF IFe%!_%>=e%!Ga%*e%!Ha%THEN v%!Da%+=1:PROCc(e%):PROCg(L%!wa%):PROCi(v%!X%):PROCk(v%!Da%):PROCt ENDIF Qa%=TRUE:Ra%=TRUE:FORC%=1TOe%!Ha%:IFb%(e%!Va%,C%)<>0THENQa%=FALSE IFb%(e%!Ua%,C%)<>0THENRa%=FALSE NEXTC%:Sa%=TRUE:FORI%=1TOe%!Ga%:IFb%(I%,e%!Ia%)<>0THENSa%=FALSE NEXTI%:IFRa%THENe%!Ua%+=1 IFQa%THEN e%!f%-=(B%!f%+e%!Fa%):e%!Va%-=1 ENDIF IFSa%THENe%!Ia%+=1 e%!b%+=e%!J%:PROCl:ENDPROC DEFPROCK:LOCALD%,M%,Wa%,Xa%,i%,j%,x%,y%,Ya%,Za%,e$:D%=ka%:M%=la%:Wa%=ma%:FORi%=1TO7:IFNOTa%(i%)!q%THEN Ya%=RND(10):Za%=v%!Da%+5:IFZa%>100THENZa%=100 IFFNg(Za%)ANDFNg(4)THEN IFb%(Ya%,e%!Ia%)>0THEN x%=e%!b%+(Ya%-1)*(B%!f%+e%!Fa%):y%=e%!a%+(e%!Ia%-1)*B%!k%:a%(i%)!b%=x%+B%!f%/2:a%(i%)!a%=y%:a%(i%)!q%=TRUE:a%(i%)!_%=FALSE:a%(i%)!D%=0:a%(i%)!Wa%=1:a%(i%)!M%=0:Xa%=4:IFFNg(25)THENa%(i%)!Wa%=2:Xa%=Xa%/2 a%(i%)!K%=Xa%:a%(i%)!J%=a%(i%)!K% ENDIF ENDIF ELSE:a%(i%)!D%+=1:IFa%(i%)!D%MOD5=0THEN a%(i%)!M%=FNj(a%(i%)!M%) ENDIF IFa%(i%)!D%>10000THENa%(i%)!D%=0 a%(i%)!a%-=a%(i%)!J%:e$="miss_"+STR$(a%(i%)!Wa%)+STR$(a%(i%)!M%):PROCa(e$,a%(i%)!b%,a%(i%)!a%):IFa%(i%)!a%<=L%!wa%+(L%!k%+5)THEN a%(i%)!q%=FALSE:PROCc(a%(i%)) ENDIF IFFNk(a%(i%),m%)ANDa%(i%)!q%THEN FORj%=1TO3:PROCa("base_"+STR$(j%),m%!b%,m%!a%):PROCe(20):WAIT:NEXTj%:PROCc(m%):IFo%!q%THEN PROCc(o%):o%!q%=FALSE ENDIF m%!b%=FNc(m%,h%):v%!X%-=1:PROCi(v%!X%):PROCc(a%(i%)):a%(i%)!q%=FALSE:PROCa("base",m%!b%,m%!a%) ENDIF IFFNk(o%,a%(i%))ANDa%(i%)!q%THEN IFa%(i%)!Wa%=1THEN a%(i%)!q%=FALSE:PROCh(5):PROCc(a%(i%)) ENDIF PROCc(o%):o%!q%=FALSE ENDIF ENDIF NEXTi%:ENDPROC DEFPROCx(_a%):LOCALi%,O%,n$:FORi%=1TO10:IFi%MOD2=0THENn$="Software"ELSEn$="DynaByte" a$(i%)=FNl(n$):c%(i%)=(11-i%)*1000:d%(i%)=0:NEXTi%:IF_a%THENPROCu ENDPROC DEFPROCy:LOCALi%,O%:O%=OPENIN".Resources.HiTable":FORi%=1TO10:INPUT#O%,a$(i%),c%(i%):INPUT#O%,d%(i%):NEXTi%:CLOSE#O%:ENDPROC DEFPROCu:LOCALi%,O%:O%=OPENOUT".Resources.HiTable":FORi%=1TO10:PRINT#O%,a$(i%),c%(i%):PRINT#O%,d%(i%):NEXTi%:CLOSE#O%:ENDPROC DEFPROCL(v%):LOCALi%,`a%,Da%,Y%,F%,G%,Q%,x%,y%,g%,ab%:LOCALE%,a$:DIMF% 16,G% 16,E% 16:Y%=4:Da%=8:F%!f%=FNa(100,1):F%!k%=FNa(40,2):F%!b%=FNc(F%,h%):F%!a%=800:G%!f%=FNa(150,1):G%!k%=FNa(40,2):G%!b%=FNc(G%,h%):G%!a%=F%!a%-G%!k% `a%=0:FORi%=10TO1STEP-1:IFv%!Y%>=c%(i%)THEN`a%=i% NEXTi%:FORi%=9TO`a%STEP-1:a$(i%+1)=a$(i%):c%(i%+1)=c%(i%):d%(i%+1)=d%(i%):NEXTi%:c%(`a%)=v%!Y%:d%(`a%)=v%!Da%:CLS:PROCg(L%!va%):PROCg(L%!wa%):PROCa("space",F%!b%,F%!a%):PROCa("invaders",G%!b%,G%!a%):a$="Congratulations!!! Your score of "+STR$(v%!Y%) a$+=" has earned the rank of "+STR$(`a%)+FNs(`a%):Q%=LEN(a$)*h%!`%:x%=FNi(Q%,h%!f%):y%=G%!a%-170:PROCb(x%,y%,a$,0):E%!f%=165:E%!k%=40:E%=FNn(E%,h%):PROCj(E%):x%=E%!b%+20:y%=E%!a%+12:a$="":i%=1:ab%=FALSE OSCLI"FX 21,0":REPEAT:g%=GET:CASEg%OF WHEN13:ab%=TRUE WHEN8:i%-=1:a$=LEFT$(a$,i%-1) OTHERWISE:IFi%<9ANDFNt(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 UNTILab%:IFa$=""ORa$=" "THENa$="Anon ..." a$(`a%)=FNl(a$):IFda%THENPROCu ENDPROC DEFFNt(bb%):LOCALKa%:Ka%=FALSE:IFbb%>=32ANDbb%<=126THENKa%=TRUE =Ka% DEFPROCA(cb%,db%,l%,r%):LOCALx%,a$:a$="SCORE :-"+FNf(STR$(cb%),10," ",TRUE):PROCb(0,h%!k%-h%!S%,a$,0):a$="HI SCORE :-":a$+=FNf(STR$(db%),10," ",TRUE):x%=h%!f%-LEN(a$)*h%!`%:PROCb(x%,h%!k%-h%!S%,a$,0):PROCi(l%):PROCk(r%):ENDPROC DEFPROCi(eb%):LOCALa$:PROCa("base",0,0):a$=" = "+STR$(eb%):PROCb(m%!f%,0,a$,0):ENDPROC DEFPROCk(eb%):LOCALx%,a$:a$="RACK :-"+FNf(STR$(eb%),3,"0",TRUE):x%=h%!f%-LEN(a$)*h%!`%:PROCb(x%,0,a$,0):ENDPROC DEFPROCh(fb%):LOCALx%,a$:v%!Y%+=fb%:a$="SCORE :-"+FNf(STR$(v%!Y%),10," ",TRUE):PROCb(0,h%!k%-h%!S%,a$,0):IFv%!Y%>c%(1)THEN a$="HI SCORE :-":a$+=FNf(STR$(v%!Y%),10," ",TRUE):x%=h%!f%-LEN(a$)*h%!`%:PROCb(x%,h%!k%-h%!S%,a$,0) ENDIF ENDPROC DEFPROCB:LOCALM%,Ua%,Va%,Ia%:M%=ka%:Ua%=pa%:Va%=qa%:Ia%=ra%:PROCt:PROCl:ENDPROC DEFPROCt:LOCALC%,I%,s%:e%!b%=50:e%!a%=550:e%!M%=0:e%!_%=0:e%!K%=3:e%!J%=e%!K%:e%!Ua%=1:e%!Va%=e%!Ga%:e%!Ia%=1:s%=(e%!Ga%*B%!f%)+((e%!Ga%-1)*e%!Fa%):e%!f%=s%:e%!k%=e%!Ha%*B%!k%:FORI%=1TOe%!Ga%:FORC%=1TOe%!Ha% b%(I%,C%)=((C%+1)/2)+(e%!M%*10):NEXTC%:NEXTI%:ENDPROC DEFPROCl:LOCALC%,I%,x%,y%,A%:A%=FNb(16):FORI%=e%!Ua%TOe%!Va%:x%=e%!b%+((I%-1)*(B%!f%+e%!Fa%)):FORC%=e%!Ia%TOe%!Ha%:y%=e%!a%+((C%-1)*B%!k%):IFb%(I%,C%)>0THEN b%(I%,C%)=((C%+1)/2)+(e%!M%*10) ENDIF IFb%(I%,C%)<>0THEN CASESGN(b%(I%,C%))OF WHEN-1:PROCM(x%,y%,I%,C%) WHEN1:PROCa("inv_"+STR$(b%(I%,C%)),x%,y%) ENDCASE ELSE:A%!b%=x%:A%!a%=y%:A%!f%=B%!f%:A%!k%=B%!k%:PROCc(A%) ENDIF NEXTC%:NEXTI%:PROCd(A%):ENDPROC DEFPROCM(x%,y%,r%,c%):LOCALgb%:gb%=FNb(16):b%(r%,c%)+=1:PROCa("inv_4",x%,y%):IFb%(r%,c%)=0THEN gb%!b%=x%:gb%!a%=y%:gb%!f%=B%!f%:gb%!k%=B%!k%:PROCc(gb%) ENDIF PROCd(gb%):ENDPROC DEFPROCs:LOCALA%,i%:A%=FNb(16):FORi%=1TO3:e%!a%-=B%!k%/3:PROCl:NEXTi%:A%!b%=e%!b%:A%!a%=e%!a%+e%!k%:A%!f%=e%!f%:A%!k%=B%!k%:PROCc(A%):PROCd(A%):ENDPROC DEFPROCr:LOCALP%,T%,M%,hb%,K%,i%,f$:K%=1:ib%=24:P%=FNb(28):T%=FNb(28):PROCc(e%):PROCc(m%):IFo%!q%THEN PROCc(o%):o%!q%=FALSE ENDIF IFd%!q%THEN PROCc(d%):d%!q%=FALSE ENDIF FORi%=1TO7:IFa%(i%)!q%THEN PROCc(a%(i%)):a%(i%)!q%=FALSE ENDIF NEXTi%:m%!b%=FNc(m%,h%):P%!b%=0-B%!f%:P%!a%=m%!a%:P%!J%=K%:T%!b%=h%!f%:T%!a%=m%!a%:T%!J%=0-K%:v%!X%=0:PROCg(L%!wa%):PROCi(v%!X%):PROCk(v%!Da%):PROCa("base",m%!b%,m%!a%):M%=0:hb%=FALSE:REPEAT:P%!b%+=P%!J%:P%!ib%=P%!b%+B%!f%:T%!b%+=T%!J%:M%+=1 IFM%MOD20=0THENhb%=FNj(hb%) IFhb%THENf$="inv_11"ELSEf$="inv_1" PROCa(f$,P%!b%,P%!a%):PROCa(f$,T%!b%,T%!a%):PROCe(2):WAIT:UNTILP%!ib%>=m%!b%:FORi%=1TO10:PROCa("inv_1",P%!b%,P%!a%):PROCa("inv_1",T%!b%,T%!a%):PROCe(20):PROCa("inv_11",P%!b%,P%!a%):PROCa("inv_11",T%!b%,T%!a%):PROCe(20):WAIT:NEXTi%:FORi%=1TO3 PROCa("base_"+STR$(i%),m%!b%,m%!a%):PROCe(20):WAIT:NEXTi%:PROCe(20):PROCc(m%):PROCd(P%):PROCd(T%):ENDPROC DEFFNo(h$):LOCALjb%,H%:H%=FNu(h$)+256:jb%=FNb(H%):!jb%=H%:jb%!4=0:jb%!8=16:jb%!12=16:SYSfa%,256+10,jb%,h$:SYSfa%,256+17,jb%:=jb% DEFPROCb(x%,y%,a$,kb%):LOCALi%,lb%:ia%=ha%:lb%=h%!`%:FORi%=1TOLEN(a$):PROCa(STR$(ASC(MID$(a$,i%,1))),x%+((i%-1)*lb%),y%):IFkb%>0THENPROCe(kb%) NEXTi%:ia%=ga%:ENDPROC DEFPROCa(l$,x%,y%):LOCALmb%:SYSfa%,256+24,ia%,l$TO,,mb%:SYSfa%,512+34,ia%,mb%,x%,y%,0:ENDPROC DEFPROCc(p%):GCOL0,0TINT0:RECTANGLEFILLp%!b%,p%!a%,p%!f%,p%!k%:ENDPROC DEFFNi(nb%,h%):=(h%/2)-(nb%/2) DEFPROCn(a$,ob%):LOCALQ%,y%:Q%=LEN(a$)*h%!`%:y%=(h%!k%/2)-(h%!S%/2):PROCb(FNi(Q%,h%!f%),y%,a$,ob%):ENDPROC DEFFNc(pb%,qb%):=(qb%!f%/2)-(pb%!f%/2) DEFFNn(pb%,qb%):LOCALx%,y%:pb%!b%=(qb%!f%/2)-(pb%!f%/2):pb%!a%=(qb%!k%/2)-(pb%!k%/2):=pb% DEFPROCg(a%):LOCALi%,rb%:rb%=h%!f%/L%!f%:FORi%=1TOrb%+1:PROCa("rail",(i%-1)*L%!f%,a%):NEXTi%:ENDPROC DEFPROCj(p%):LOCALx%,y%,sb%,tb%,ub%,vb%,i%:sb%=FNa(3,1):tb%=FNa(3,2):ub%=1:vb%=3:FORi%=1TOp%!f%:x%=p%!b%+((i%-1)*ub%):PROCa("box_x",x%,p%!a%):PROCa("box_x",x%,p%!a%+(p%!k%-(2*vb%))):NEXTi%:x%=p%!b%+(p%!f%-sb%):FORi%=1TOp%!k%-1 PROCa("box_y",p%!b%,p%!a%+((i%-1)*ub%)):PROCa("box_y",x%,p%!a%+((i%-1)*ub%)):NEXTi%:PROCa("box_bl",p%!b%,p%!a%):PROCa("box_tl",p%!b%,(p%!a%+p%!k%)-tb%):PROCa("box_br",p%!b%+(p%!f%-sb%),p%!a%):x%=(p%!b%+p%!f%)-sb%:y%=(p%!a%+p%!k%)-tb%:PROCa("box_tr",x%,y%):ENDPROC DEFPROCm:LOCALA%:A%=FNb(20):A%!0=4:A%!4=5:A%!8=11:A%!12=12:A%!16=-1:SYS"OS_ReadVduVariables",A%,A%:h%!sa%=A%!0:h%!ta%=A%!4:h%!f%=(A%!8)+1<h%!ua%THENPROCm CASEwb%OF WHEN1:xb%=H%<>h%!sa% WHEN4:xb%=H%>>h%!ta% OTHERWISE:ERROR255,"Unknown FNconv_units() operation : "+STR$(wb%) ENDCASE =xb% DEFFNk(p%,zb%):LOCALAb%,Bb%,Cb%,Db%:Cb%=FALSE:Db%=FALSE:IFp%!q%ANDzb%!q%THEN Ab%=zb%!b%+zb%!f%:Bb%=zb%!a%+zb%!k%:IFp%!b%>=zb%!b%ANDp%!b%=zb%!a%ANDp%!a%=t%:ENDPROC DEFFNj(n%):=n%EOR1 DEFFNs(n%):LOCALb$,u%:u%=VAL(RIGHT$(STR$(n%),1)):CASEu%OF WHEN1:b$="st" WHEN2:b$="nd" WHEN3:b$="rd" OTHERWISE:b$="th" ENDCASE =b$ DEFFNf(a$,Gb%,j$,Hb%):LOCALIb%,b$:Ib%=Gb%-LEN(a$):IFIb%<=0THEN b$=LEFT$(a$,Gb%) ELSE:IFHb%THEN b$=STRING$(Gb%,j$):RIGHT$(b$,LEN(a$))=a$ ELSE:b$=a$+STRING$(Ib%,j$) ENDIF ENDIF =b$ DEFFNq(a$,Gb%):LOCALb$:b$=STRING$(Gb%," "):RIGHT$(b$,LEN(a$))=a$:=b$ DEFFNh(d$):LOCALJb%:SYS"XOS_File",17,d$TOJb%:=Jb% DEFFNu(d$):LOCALH%:SYS"XOS_File",5,d$TO,,,,H%:=H% DEFFNp(wb%,d$):LOCALO%,Kb%,Lb%,Mb%:Mb%=FALSE:CASEwb%OF WHEN0:O%=OPENUP(d$+"chkfile") WHEN1:O%=OPENUP(d$) OTHERWISE:ERROR255,"Unknown FNfs_writeable op :"+STR$(wb%) ENDCASE IFO%<>0THEN SYS"XOS_Args",254,O%TOLb%;Kb%:IF(Kb%AND1)THEN CLOSE#O%:ERROR255,"Unknown FNfs_writeable fault." ENDIF IF((Lb%AND(1<<7))<>0)THENMb%=TRUE CLOSE#O% ENDIF =Mb% DEFPROCw:LOCALNb%:V%=0:Ob%=0:SYS"Wimp_SlotSize",-1,-1TOPb%:SYS"XOS_ReadMemMapInfo"TOQb%;Nb%:IFNb%AND1THENQb%=16384 PROCN(Qb%):ENDPROC DEFPROCN(H%):IFV%THENERROR254,"You cannot have multiple heaps" H%=(H%+Qb%-1)ANDNOT(Qb%-1):V%=HIMEM:SYS"Wimp_SlotSize",Pb%+H%,-1TOPb%:H%=Pb%+32768-V%:IFH%<1THEN V%=0:ERROR254,"Could not extend WimpSlot for heap" ELSE:SYS"OS_Heap",0,V%,,H% ENDIF Ob%=0:ENDPROC DEFPROCo:IFV%THEN SYS"Wimp_SlotSize",V%-32768,-1TOPb%:V%=0:Ob%=0 ENDIF ENDPROC DEFPROCO(Z%):LOCALRb%:Rb%=Pb%:SYS"Wimp_SlotSize",Pb%+Z%,-1TOPb%:Z%=Pb%-Rb%:IFZ%THENSYS"OS_Heap",5,V%,,Z%TO,,,Z% ENDPROC DEFFNv(Z%):LOCALW%,Nb%:SYS"XOS_Heap",2,V%,,Z%TO,,W%;Nb%:IFNb%AND1THEN PROCO((Z%+Qb%)ANDNOT(Qb%-1)):SYS"XOS_Heap",2,V%,,Z%TO,,W%;Nb%:IFNb%AND1THEN=0 ENDIF Ob%+=W%!-4:=W% DEFFNb(Z%):LOCALW%:W%=FNv(Z%):IFW%ELSEERROR254,"Heap claim failed: no room" =W% DEFPROCd(RETURNW%):Ob%-=W%!-4:SYS"OS_Heap",3,V%,W%:W%=0:ENDPROC DEFFNw:=Ob%