REM Acorn Invaders REM Packed by MH's BASCrunch v1.31c 30/1/08 On 30 Apr 2008 ONERRORPROCu:END MODE28:OFF:a$="Acorn Invaders. (c)2008 DynaByte Software":PRINTa$:PRINTSTRING$(LEN(a$),"-"):PRINT:PRINT:PRINT:PRINT:aa%=FALSE:c$=".":PRINT"Checking files...":IFNOTFNl(c$+"Resources.Gfx0","Sprites")THENaa%=TRUE IFNOTFNl(c$+"Resources.Gfx1","Charset")THENaa%=TRUE IFNOTFNl(c$+"Resources.Intro","Music")THENaa%=TRUE IFNOTFNl(c$+"Resources.Creds","Credits")THENaa%=TRUE IFaa%THENERROR255,"File Missing!!" PRINT:PRINT"Initialising Tracker Daemon...":OSCLI"Playmod "+c$+"Resources.Intro":OSCLI"PlayPause":aa%=FALSE:ba%=0:ca%=1:da%=TRUE:ea%=0:DIMa$(10),c%(10):DIMd%(10):PRINT"Initialising Heap Manager (ASH)...":PROCv:SYS"OS_SWINumberFromString",,"OS_SpriteOp"TOfa% PRINT"Loading Sprites...":ga%=FNp(c$+"Resources.Gfx0"):PRINT"Loading Charset...":ha%=FNp(c$+"Resources.Gfx1"):ia%=ga%:PRINT"Loading Credits...":ja%=OPENIN(c$+"Resources.Creds"):INPUT#ja%,p$:IFp$<>"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%:PRINT"Processing HiTable... ";:i$=c$+"Resources.HiTable":IFFNq(i$)<>1THEN IFNOTFNr(0,c$)THEN da%=FALSE:PRINT"Created Read-only HiScore table." ELSE:PRINT"Created Read/Write HiScore table." ENDIF PROCw(da%) ELSE:IFNOTFNr(1,i$)THEN da%=FALSE:PRINT"Loaded Read-only HiScore table." ELSE:PRINT"Loaded Read/Write HiScore table." ENDIF PROCx ENDIF PRINT"Setting up...":PROCe(150):b%=0:a%=4:f%=8:k%=12:M%=16:N%=20:p%=24:Z%=28:ka%=32:la%=36:ma%=40:na%=44:oa%=48:pa%=52:qa%=56:ra%=60:sa%=64:ta%=16:ua%=20:va%=24:_%=28:V%=32:wa%=16:xa%=20 h%=FNb(36):O%=FNb(24):K%=FNb(16):CLS:PROCl:h%!_%=FNa(8,1):h%!V%=FNa(8,2)+7:O%!f%=FNa(6,1):O%!k%=FNa(6,2):O%!wa%=h%!k%-50:O%!xa%=30:OSCLI"PlayStart":REPEAT:CLS:aa%=FNu:IFNOTaa%THENCLS:PROCy UNTILaa%:CLS:K%!f%=220:K%!k%=40:K%=FNo(K%,h%):K%!a%-=3:PROCi(K%):PROCm("GOODBYE!!!",10):IFca%=1THEN FORi%=127TO1STEP-2:OSCLI"PlayVolume "+STR$(i%):PROCe(4):NEXTi%:OSCLI"PlayStop":OSCLI"PlayVolume 127" ENDIF PROCn:END DEFFNu:LOCALi%,H%,I%,A%,S%,d%,T%,ya%:LOCALza%,P%,Aa%,Ba%,Ca%,Da%,x%,y%,J%,s$,a$:H%=FNe(FNb(16),0):I%=FNe(FNb(16),0):A%=FNe(FNb(16),0):d%=FNe(FNb(16),0):T%=FNe(FNb(16),0):P%=FNe(FNb(16),0):H%!f%=FNa(100,1):H%!k%=FNa(40,2):H%!b%=FNc(H%,h%):H%!a%=800 I%!f%=FNa(150,1):I%!k%=FNa(40,2):I%!b%=FNc(I%,h%):I%!a%=H%!a%-I%!k%:A%!f%=640:A%!k%=500:A%!b%=FNc(A%,h%):A%!a%=200:d%!f%=FNa(40,1):d%!k%=FNa(20,2):d%!b%=A%!b%+150:d%!a%=(A%!a%+A%!k%)-160:T%!f%=FNa(20,1):T%!k%=FNa(20,2) T%!b%=A%!b%+150+FNc(T%,d%):ya%=FNf(T%):za%=FNf(T%):T%!a%=A%!a%+100:ya%!a%=T%!a%+T%!k%+40:za%!a%=ya%!a%+ya%!k%+40:P%!f%=FNa(20,1):P%!k%=FNa(20,2):P%!b%=A%!b%+150+FNc(P%,d%):Aa%=FNf(P%):Ba%=FNf(P%):Da%=FNf(P%):Ca%=FNf(P%) :P%!a%=(A%!a%+A%!k%)-160:Aa%!a%=P%!a%-60:Ba%!a%=Aa%!a%-60:Da%!a%=Ba%!a%-100:Ca%!a%=Da%!a%-60:PROCf(O%!wa%):PROCf(O%!xa%):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$="PRESS SPACE TO PLAY":S%=LEN(a$)*h%!_%:y%=170:PROCb(FNi(S%,h%!f%),y%,a$,11):a$="OR Q TO QUIT":S%=LEN(a$)*h%!_%:y%-=h%!V%:PROCb(FNi(S%,h%!f%),y%,a$,11):WHILENOTINKEY(-99)ANDNOTINKEY(-17)ANDNOTINKEY(-82):y%=A%!a%+A%!k%:FORi%=1TOea%:a$=FNm(b$(i%)):x%=FNd(a$):CASEe%(i%)OF WHEN-1:y%-=h%!V% WHEN-2:y%-=(2*h%!V%) OTHERWISE:y%-=e%(i%) ENDCASE PROCb(x%,y%,a$,0):NEXTi%:J%=FNn:IFJ%=1THEN=TRUE IFJ%=2THEN=FALSE PROCd(A%):a$="SCORE ADVANCE":x%=FNd(a$):y%=A%!a%+A%!k%-20:PROCb(x%,y%,a$,0):a$="TABLE":y%-=h%!V%: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",za%!b%,za%!a%) PROCb(x%,za%!a%+12,"= 100 POINTS !",0):PROCa("inv_2",ya%!b%,ya%!a%):PROCb(x%,ya%!a%+12,"= 75 POINTS !",0):PROCa("inv_1",T%!b%,T%!a%):PROCb(x%,T%!a%+12,"= 50 POINTS !",0):J%=FNn:IFJ%=1THEN=TRUE IFJ%=2THEN=FALSE PROCd(A%):a$="KEYBOARD CONTROLS":x%=FNd(a$):y%=A%!a%+A%!k%-20:PROCb(x%,y%,a$,0):x%=P%!b%+P%!f%+10:PROCa("key_z",P%!b%,P%!a%):PROCb(x%,P%!a%+12,": MOVE LEFT",0):PROCa("key_x",Aa%!b%,Aa%!a%):PROCb(x%,Aa%!a%+12,": MOVE RIGHT",0) PROCa("key_enter",Ba%!b%,Ba%!a%):PROCb(x%,Ba%!a%+12,": FIRE SHELL",0):PROCa("key_m",Da%!b%,Da%!a%):PROCb(x%,Da%!a%,": MUSIC ON/OFF",0):PROCa("key_q",Ca%!b%,Ca%!a%):PROCb(x%,Ca%!a%+12,": END GAME",0):J%=FNn:IFJ%=1THEN=TRUE IFJ%=2THEN=FALSE PROCd(A%):a$="TODAY'S":IFda%THENa$="ALL TIME" x%=FNd(a$):y%=A%!a%+A%!k%-20:PROCb(x%,y%,a$,0):a$="HI SCORES":y%-=h%!V%:x%=FNd(a$):PROCb(x%,y%,a$,0):y%=(A%!a%+A%!k%)-100:a$=" POS."+" PLAYER."+STRING$(12," ")+"SCORE.":a$+=STRING$(3," ")+"RACK.":x%=FNd(a$):PROCb(x%,y%,a$,0):y%-=2*h%!V%:FORi%=1TO10:IFi%<10THEN a$=" "+STR$(i%)+". " ELSE:a$=" "+STR$(i%)+". " ENDIF s$=FNm(a$(i%)):a$+=FNg(s$,8," ",FALSE):a$+=" .... ":a$+=FNs(STR$(c%(i%)),10):a$+=" ... "+FNs(STR$(d%(i%)),3):x%=FNd(a$):PROCb(x%,y%-(i%*(h%!V%+5)),a$,0):NEXTi%:J%=FNn:IFJ%=1THEN=TRUE IFJ%=2THEN=FALSE PROCd(A%):ENDWHILE:PROCO:IFINKEY(-17)THEN=TRUE =FALSE DEFFNn:LOCALt%,J%:t%=TIME+750:J%=0:REPEAT:IFINKEY(-82)THENPROCo IFINKEY(-102)THENPROCp UNTILTIME>=t%ORINKEY(-17)ORINKEY(-99):IFINKEY(-17)THENJ%=1 IFINKEY(-99)THENJ%=2 IFJ%>0THEN PROCc(H%):PROCc(I%):PROCc(A%):PROCc(d%):PROCc(T%):PROCc(ya%):PROCc(za%):PROCc(P%):PROCc(Aa%):PROCc(Ba%):PROCc(Ca%):PROCc(Da%) ENDIF =J% DEFFNd(a$):LOCALS%:S%=LEN(a$)*h%!_%:=A%!b%+FNi(S%,A%!f%) DEFPROCy:LOCALm%,o%,d%,e%,w%:LOCALD%:LOCALb%(),a%():LOCALY%,Ea%,Fa%,`%:LOCALGa%,Ha%,Ia%,Ja%,Ka%:LOCALLa%,S%,a$,x%,y%,i%,j%:m%=FNb(32):o%=FNb(36):d%=FNb(48):e%=FNb(68):D%=FNb(16):w%=FNb(16):DIMb%(10,6),a%(7):Y%=0:`%=4:Ea%=8:Fa%=12 Ga%=la%:Ha%=na%:Ia%=oa%:Ja%=ra%:Ka%=sa%:m%!f%=FNa(30,1):m%!k%=FNa(15,2):m%!b%=FNc(m%,h%):m%!a%=50:m%!N%=6:m%!M%=m%!N%:D%!f%=FNa(20,1):D%!k%=FNa(20,2):d%!f%=FNa(40,1):d%!k%=FNa(20,2):d%!a%=O%!wa%-(10+d%!k%):d%!N%=5:d%!p%=FALSE:d%!na%=1 o%!f%=FNa(5,1):o%!k%=FNa(20,2):o%!p%=FALSE:o%!N%=10:w%!Ea%=1:w%!`%=0:w%!Y%=3:w%!Fa%=FALSE:e%!Ga%=FNa(20,1):e%!Ha%=10:e%!Ia%=6:e%!p%=TRUE:e%!Ka%=4:FORi%=1TO7:a%(i%)=FNb(44):a%(i%)=FNe(a%(i%),0):a%(i%)!f%=FNa(5,1):a%(i%)!k%=FNa(20,2):NEXTi% PROCf(O%!wa%):PROCf(O%!xa%):PROCz(0,c%(1),w%!Y%,w%!Ea%):PROCA:PROCa("base",m%!b%,m%!a%):REPEAT:La%=FALSE:IFINKEY(-74)THENPROCB(m%!b%,m%!a%) IFINKEY(-98)THENPROCC:La%=TRUE IFINKEY(-67)THENPROCD:La%=TRUE IFINKEY(-102)THENPROCp IFINKEY(-82)THENPROCo IFINKEY(-17)THENPROCE IFINKEY(-34)THENPROCF IFINKEY(-35)THENPROCq IFLa%THEN m%!b%+=m%!M%:PROCa("base",m%!b%,m%!a%) ENDIF IFw%!Y%>0THEN PROCG:PROCH:PROCI:PROCJ ENDIF WAIT:UNTILw%!Y%=0:K%!f%=240:K%!k%=40:K%=FNo(K%,h%):K%!a%-=3:PROCd(K%):PROCi(K%):PROCm("GAME OVER!!!",11):PROCe(750):IFNOTw%!Fa%THEN IFw%!`%>=c%(10)THEN PROCK(w%) ENDIF ENDIF PROCc(m%):PROCc(e%):PROCc(d%):PROCc(o%):PROCc(w%):PROCc(D%):FORi%=1TO7:PROCc(a%(i%)):NEXTi%:ENDPROC DEFPROCC:IFm%!b%<=0THEN m%!b%=0 ELSE:m%!M%=0-m%!N% ENDIF ENDPROC DEFPROCD:IFm%!b%>=h%!f%-m%!f%THEN m%!b%=h%!f%-m%!f% ELSE:m%!M%=0+m%!N% ENDIF ENDPROC DEFPROCB(x%,y%):IFNOTo%!p%THEN o%!p%=TRUE:o%!b%=x%+(m%!f%/2):o%!a%=y%+m%!k% ENDIF ENDPROC DEFPROCo:REPEAT:UNTILNOTINKEY(-82):OSCLI"ScreenSave .Dump"+STR$(ba%):ba%+=1:ENDPROC DEFPROCE:LOCALi%:FORi%=1TO7:a%(i%)!p%=FALSE:NEXTi%:w%!Y%=0:w%!Fa%=TRUE:ENDPROC DEFPROCp:REPEAT:UNTILNOTINKEY(-102):ca%=FNj(ca%):IFca%=1THENOSCLI"PlayStart"ELSEOSCLI"PlayPause" ENDPROC DEFPROCF:IFd%!p%THEN IFNOTd%!Z%THEN d%!Z%=TRUE:d%!ka%=d%!la%:PROCa("saucer_2",d%!b%,d%!a%) ENDIF ENDIF ENDPROC DEFPROCG:LOCALMa%,Na%:Ma%=ka%:IFo%!p%THEN o%!Ma%=FALSE:IFo%!a%>=O%!wa%-o%!k%THEN o%!p%=FALSE:o%!Ma%=TRUE ENDIF IFo%!Ma%THEN Na%=FNf(o%):Na%!a%-=2:PROCd(Na%):PROCc(Na%) ELSE:PROCa("shell",o%!b%,o%!a%) ENDIF o%!a%+=o%!N% ENDIF ENDPROC DEFPROCH:LOCALOa%,F%,Pa%,Qa%,f$:Oa%=ka%:F%=la%:Pa%=ma%:Qa%=na%:IFNOTd%!p%THEN IFFNh(4)ANDFNh(5)THEN d%!p%=TRUE:d%!Z%=FALSE:d%!Pa%=0:d%!Qa%=0:IFFNh(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%!Pa%+=1:d%!F%+=1:IFd%!b%<=0-d%!f%ANDSGN(d%!M%)=-1THEN d%!Oa%=FALSE:d%!p%=FALSE:d%!F%=0:ENDPROC ENDIF IFd%!b%>h%!f%ANDSGN(d%!M%)=1THEN d%!Oa%=FALSE:d%!p%=FALSE:d%!F%=0:ENDPROC ENDIF IFNOTd%!Z%THEN IFFNk(o%,d%)THEN PROCd(o%):PROCa("saucer_2",d%!b%,d%!a%):d%!Oa%=d%!F%:d%!Z%=TRUE:o%!p%=FALSE:PROCg(500) ENDIF ELSE:IFFNk(o%,d%)THEN PROCd(o%):o%!p%=FALSE ENDIF ENDIF IFNOTd%!Z%THEN IFd%!Pa%>=1000THENd%!Pa%=0 IFd%!Pa%MOD10=0THEN d%!Qa%=FNj(d%!Qa%) ENDIF f$="saucer_"+STR$(d%!Qa%):PROCa(f$,d%!b%,d%!a%):d%!b%+=d%!M% ELSE:IFd%!F%>=d%!Oa%+80THEN PROCd(d%):d%!p%=FALSE:d%!Oa%=FALSE:d%!F%=0:d%!Qa%=TRUE ELSE:IFd%!F%>=d%!Oa%+60THEN PROCa("saucer_5",d%!b%,d%!a%) ELSE:IFd%!F%>=d%!Oa%+40THEN PROCa("saucer_4",d%!b%,d%!a%) ELSE:IFd%!F%>=d%!Oa%+20THEN PROCa("saucer_3",d%!b%,d%!a%) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDPROC DEFPROCI:LOCALRa%,z%,E%,L%,Sa%,Ta%,Ua%,Va%:LOCALG%,F%,Wa%,Xa%:G%=ka%:F%=ma%:Wa%=pa%:Xa%=qa%:e%!F%+=1:IFe%!F%MOD5=0THENe%!G%=FNj(e%!G%) IFe%!F%>1000THENe%!F%=0 Ra%=e%!b%+e%!f%:Va%=0-((e%!Wa%-1)*(D%!f%+e%!Ga%)):IFRa%>=h%!f%THEN e%!M%=0-e%!N%:PROCr ENDIF IFe%!b%<=Va%THEN e%!M%=0+e%!N%:PROCr ENDIF Va%=e%!a%+((e%!Ja%-1)*D%!k%):IFVa%<=m%!a%+m%!k%THEN PROCq:ENDPROC ENDIF IFFNk(o%,e%)THEN z%=D%!f%+e%!Ga%:IF(o%!b%-e%!b%)MODz%<=D%!f%THEN E%=((o%!a%-e%!a%)DIVD%!k%)+1:L%=((o%!b%-e%!b%)DIVz%)+1:IFSGN(b%(L%,E%))=1THEN b%(L%,E%)=-5:PROCd(o%):o%!p%=FALSE:e%!Z%+=1:CASEE%OF WHEN1,2:PROCg(50) WHEN3,4:PROCg(75) WHEN5,6:PROCg(100) ENDCASE ENDIF ENDIF ENDIF IFe%!Z%>=e%!Ha%*e%!Ia%THEN w%!Ea%+=1:PROCd(e%):PROCf(O%!xa%):PROCh(w%!Y%):PROCj(w%!Ea%):PROCs ENDIF Sa%=TRUE:Ta%=TRUE:FORE%=1TOe%!Ia%:IFb%(e%!Xa%,E%)<>0THENSa%=FALSE IFb%(e%!Wa%,E%)<>0THENTa%=FALSE NEXTE%:Ua%=TRUE:FORL%=1TOe%!Ha%:IFb%(L%,e%!Ja%)<>0THENUa%=FALSE NEXTL%:IFTa%THENe%!Wa%+=1 IFSa%THEN e%!f%-=(D%!f%+e%!Ga%):e%!Xa%-=1 ENDIF IFUa%THENe%!Ja%+=1 e%!b%+=e%!M%:PROCk:ENDPROC DEFPROCJ:LOCALF%,G%,Ya%,Za%,i%,j%,x%,y%,_a%,`a%,f$,g$:F%=ka%:G%=la%:Ya%=ma%:FORi%=1TO7:IFNOTa%(i%)!p%THEN _a%=RND(10):`a%=w%!Ea%+5:IF`a%>100THEN`a%=100:e%!Ka%+=1 IFFNh(`a%)ANDFNh(e%!Ka%)THEN IFb%(_a%,e%!Ja%)>0THEN x%=e%!b%+(_a%-1)*(D%!f%+e%!Ga%):y%=e%!a%+(e%!Ja%-1)*D%!k%:a%(i%)!b%=x%+D%!f%/2:a%(i%)!a%=y%:a%(i%)!p%=TRUE:a%(i%)!Z%=FALSE:a%(i%)!F%=0:a%(i%)!Ya%=1:a%(i%)!G%=0:Za%=4:IFFNh(25)THENa%(i%)!Ya%=2:Za%=Za%/2 a%(i%)!N%=Za%:a%(i%)!M%=a%(i%)!N% ENDIF ENDIF ELSE:a%(i%)!F%+=1:IFa%(i%)!F%MOD5=0THEN a%(i%)!G%=FNj(a%(i%)!G%) ENDIF IFa%(i%)!F%>1000THENa%(i%)!F%=0 a%(i%)!a%-=a%(i%)!M%:f$="miss_"+STR$(a%(i%)!Ya%)+STR$(a%(i%)!G%):IFa%(i%)!Ya%<1ORa%(i%)!Ya%>2THEN g$="Invalid missile type : "+STR$(a%(i%)!Ya%):ERROR255,g$ ENDIF IFa%(i%)!G%<0ORa%(i%)!G%>1THEN g$="Invalid missile frame : "+STR$(a%(i%)!G%):ERROR255,g$ ENDIF PROCa(f$,a%(i%)!b%,a%(i%)!a%):IFa%(i%)!a%<=O%!xa%+(O%!k%+5)THEN a%(i%)!p%=FALSE:PROCd(a%(i%)) ENDIF IFFNk(a%(i%),m%)ANDa%(i%)!p%THEN FORj%=1TO3:PROCa("base_"+STR$(j%),m%!b%,m%!a%):PROCe(20):WAIT:NEXTj%:PROCd(m%):IFo%!p%THEN PROCd(o%):o%!p%=FALSE ENDIF m%!b%=FNc(m%,h%):w%!Y%-=1:PROCh(w%!Y%):PROCd(a%(i%)):a%(i%)!p%=FALSE:PROCa("base",m%!b%,m%!a%) ENDIF IFFNk(o%,a%(i%))ANDa%(i%)!p%THEN IFa%(i%)!Ya%=1THEN a%(i%)!p%=FALSE:PROCg(5):PROCd(a%(i%)) ENDIF PROCd(o%):o%!p%=FALSE ENDIF ENDIF NEXTi%:ENDPROC DEFPROCw(ab%):LOCALi%,n$:FORi%=1TO10:IFi%MOD2=0THENn$="Software"ELSEn$="DynaByte" a$(i%)=FNm(n$):c%(i%)=(11-i%)*1000:d%(i%)=0:NEXTi%:IFab%THENPROCt ENDPROC DEFPROCx:LOCALi%,Q%:Q%=OPENIN".Resources.HiTable":FORi%=1TO10:INPUT#Q%,a$(i%),c%(i%):INPUT#Q%,d%(i%):NEXTi%:CLOSE#Q%:ENDPROC DEFPROCt:LOCALi%,Q%:Q%=OPENOUT".Resources.HiTable":FORi%=1TO10:PRINT#Q%,a$(i%),c%(i%):PRINT#Q%,d%(i%):NEXTi%:CLOSE#Q%:ENDPROC DEFPROCK(w%):LOCALI%,H%,bb%,g%,i%,cb%,S%,x%,y%,a$:H%=FNb(16):I%=FNb(16):H%!f%=FNa(100,1):H%!k%=FNa(40,2):H%!b%=FNc(H%,h%):H%!a%=800:I%!f%=FNa(150,1):I%!k%=FNa(40,2):I%!b%=FNc(I%,h%):I%!a%=H%!a%-I%!k%:cb%=0:FORi%=10TO1STEP-1 IFw%!`%>=c%(i%)THENcb%=i% NEXTi%:FORi%=9TOcb%STEP-1:a$(i%+1)=a$(i%):c%(i%+1)=c%(i%):d%(i%+1)=d%(i%):NEXTi%:c%(cb%)=w%!`%:d%(cb%)=w%!Ea%:CLS:PROCf(O%!wa%):PROCf(O%!xa%):PROCa("space",H%!b%,H%!a%):PROCa("invaders",I%!b%,I%!a%):a$="Congratulations!!! Your score of "+STR$(w%!`%) a$+=" has earned the rank of "+STR$(cb%)+FNv(cb%):S%=LEN(a$)*h%!_%:x%=FNi(S%,h%!f%):y%=I%!a%-170:PROCb(x%,y%,a$,0):PROCc(H%):PROCc(I%):K%!f%=165:K%!k%=40:K%=FNo(K%,h%):PROCi(K%):x%=K%!b%+20:y%=K%!a%+12:a$="":i%=1:bb%=FALSE OSCLI"FX 21,0":REPEAT:g%=GET:CASEg%OF WHEN13:bb%=TRUE WHEN8:i%-=1:a$=LEFT$(a$,i%-1) OTHERWISE:IFi%<9ANDFNw(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 UNTILbb%:IFa$=""ORa$=" "THENa$="Anon ..." a$(cb%)=FNm(a$):IFda%THENPROCt ENDPROC DEFFNw(db%):LOCALMa%:Ma%=FALSE:IFdb%>=32ANDdb%<=126THENMa%=TRUE =Ma% DEFPROCz(eb%,fb%,l%,r%):LOCALx%,a$:a$="SCORE :-"+FNg(STR$(eb%),10," ",TRUE):PROCb(0,h%!k%-h%!V%,a$,0):a$="HI SCORE :-":a$+=FNg(STR$(fb%),10," ",TRUE):x%=h%!f%-LEN(a$)*h%!_%:PROCb(x%,h%!k%-h%!V%,a$,0):PROCh(l%):PROCj(r%):ENDPROC DEFPROCh(gb%):LOCALa$:PROCa("base",0,0):a$=" = "+STR$(gb%):PROCb(m%!f%,0,a$,0):ENDPROC DEFPROCj(gb%):LOCALx%,a$:a$="RACK :-"+FNg(STR$(gb%),3,"0",TRUE):x%=h%!f%-LEN(a$)*h%!_%:PROCb(x%,0,a$,0):ENDPROC DEFPROCg(hb%):LOCALx%,a$:w%!`%+=hb%:a$="SCORE :-"+FNg(STR$(w%!`%),10," ",TRUE):PROCb(0,h%!k%-h%!V%,a$,0):IFw%!`%>c%(1)THEN a$="HI SCORE :-":a$+=FNg(STR$(w%!`%),10," ",TRUE):x%=h%!f%-LEN(a$)*h%!_%:PROCb(x%,h%!k%-h%!V%,a$,0) ENDIF ENDPROC DEFPROCA:LOCALG%,Wa%,Xa%,Ja%:G%=ka%:Wa%=pa%:Xa%=qa%:Ja%=ra%:PROCs:PROCk:ENDPROC DEFPROCs:LOCALE%,L%,s%:e%!b%=50:e%!a%=550:e%!G%=0:e%!Z%=0:e%!N%=3:e%!M%=e%!N%:e%!Wa%=1:e%!Xa%=e%!Ha%:e%!Ja%=1:s%=(e%!Ha%*D%!f%)+((e%!Ha%-1)*e%!Ga%):e%!f%=s%:e%!k%=e%!Ia%*D%!k%:FORL%=1TOe%!Ha%:FORE%=1TOe%!Ia% b%(L%,E%)=((E%+1)/2)+(e%!G%*10):NEXTE%:NEXTL%:ENDPROC DEFPROCk:LOCALE%,L%,x%,y%,q%:q%=FNb(16):FORL%=e%!Wa%TOe%!Xa%:x%=e%!b%+((L%-1)*(D%!f%+e%!Ga%)):FORE%=e%!Ja%TOe%!Ia%:y%=e%!a%+((E%-1)*D%!k%):IFb%(L%,E%)>0THEN b%(L%,E%)=((E%+1)/2)+(e%!G%*10) ENDIF IFb%(L%,E%)<>0THEN CASESGN(b%(L%,E%))OF WHEN-1:PROCL(x%,y%,L%,E%) WHEN1:PROCa("inv_"+STR$(b%(L%,E%)),x%,y%) ENDCASE ELSE:q%!b%=x%:q%!a%=y%:q%!f%=D%!f%:q%!k%=D%!k%:PROCd(q%) ENDIF NEXTE%:NEXTL%:PROCc(q%):ENDPROC DEFPROCL(x%,y%,r%,c%):LOCALib%:ib%=FNb(16):b%(r%,c%)+=1:PROCa("inv_4",x%,y%):IFb%(r%,c%)=0THEN ib%!b%=x%:ib%!a%=y%:ib%!f%=D%!f%:ib%!k%=D%!k%:PROCd(ib%) ENDIF PROCc(ib%):ENDPROC DEFPROCr:LOCALq%,i%:q%=FNb(16):FORi%=1TO3:e%!a%-=D%!k%/3:PROCk:NEXTi%:q%!b%=e%!b%:q%!a%=e%!a%+e%!k%:q%!f%=e%!f%:q%!k%=D%!k%:PROCd(q%):PROCc(q%):ENDPROC DEFPROCq:LOCALR%,W%,G%,jb%,N%,i%,h$:N%=1:kb%=24:R%=FNb(28):W%=FNb(28):PROCd(e%):PROCd(m%):IFo%!p%THEN PROCd(o%):o%!p%=FALSE ENDIF IFd%!p%THEN PROCd(d%):d%!p%=FALSE ENDIF FORi%=1TO7:IFa%(i%)!p%THEN PROCd(a%(i%)):a%(i%)!p%=FALSE ENDIF NEXTi%:m%!b%=FNc(m%,h%):R%!b%=0-D%!f%:R%!a%=m%!a%:R%!M%=N%:W%!b%=h%!f%:W%!a%=m%!a%:W%!M%=0-N%:w%!Y%=0:PROCf(O%!xa%):PROCh(w%!Y%):PROCj(w%!Ea%):PROCa("base",m%!b%,m%!a%):G%=0:jb%=FALSE:REPEAT:R%!b%+=R%!M%:R%!kb%=R%!b%+D%!f%:W%!b%+=W%!M%:G%+=1 IFG%MOD20=0THENjb%=FNj(jb%) IFG%>1000THENG%=0 IFjb%THENh$="inv_11"ELSEh$="inv_1" PROCa(h$,R%!b%,R%!a%):PROCa(h$,W%!b%,W%!a%):PROCe(2):WAIT:UNTILR%!kb%>=m%!b%:FORi%=1TO10:PROCa("inv_1",R%!b%,R%!a%):PROCa("inv_1",W%!b%,W%!a%):PROCe(20):PROCa("inv_11",R%!b%,R%!a%):PROCa("inv_11",W%!b%,W%!a%):PROCe(20):WAIT:NEXTi%:FORi%=1TO3 PROCa("base_"+STR$(i%),m%!b%,m%!a%):PROCe(20):WAIT:NEXTi%:PROCe(20):PROCd(m%):PROCc(R%):PROCc(W%):ENDPROC DEFFNp(j$):LOCALlb%,C%:C%=FNx(j$)+256:lb%=FNb(C%):!lb%=C%:lb%!4=0:lb%!8=16:lb%!12=16:SYSfa%,256+10,lb%,j$:SYSfa%,256+17,lb%:=lb% DEFPROCb(x%,y%,a$,mb%):LOCALi%,nb%:ia%=ha%:nb%=h%!_%:FORi%=1TOLEN(a$):PROCa(STR$(ASC(MID$(a$,i%,1))),x%+((i%-1)*nb%),y%):IFmb%>0THENPROCe(mb%) NEXTi%:ia%=ga%:ENDPROC DEFPROCa(q$,x%,y%):LOCALob%:SYSfa%,256+24,ia%,q$TO,,ob%:SYSfa%,512+34,ia%,ob%,x%,y%,0:ENDPROC DEFPROCd(v%):GCOL0,0TINT0:RECTANGLEFILLv%!b%,v%!a%,v%!f%,v%!k%:ENDPROC DEFFNi(pb%,h%):=(h%/2)-(pb%/2) DEFPROCm(a$,qb%):LOCALS%,y%:S%=LEN(a$)*h%!_%:y%=(h%!k%/2)-(h%!V%/2):PROCb(FNi(S%,h%!f%),y%,a$,qb%):ENDPROC DEFFNc(rb%,sb%):=(sb%!f%/2)-(rb%!f%/2) DEFFNo(rb%,sb%):LOCALx%,y%:rb%!b%=(sb%!f%/2)-(rb%!f%/2):rb%!a%=(sb%!k%/2)-(rb%!k%/2):=rb% DEFPROCf(a%):LOCALi%,tb%:tb%=h%!f%/O%!f%:FORi%=1TOtb%+1:PROCa("rail",(i%-1)*O%!f%,a%):NEXTi%:ENDPROC DEFPROCi(v%):LOCALx%,y%,ub%,vb%,wb%,xb%,i%:ub%=FNa(3,1):vb%=FNa(3,2):wb%=1:xb%=3:FORi%=1TOv%!f%:x%=v%!b%+((i%-1)*wb%):PROCa("box_x",x%,v%!a%):PROCa("box_x",x%,v%!a%+(v%!k%-(2*xb%))):NEXTi%:x%=v%!b%+(v%!f%-ub%):FORi%=1TOv%!k%-1 PROCa("box_y",v%!b%,v%!a%+((i%-1)*wb%)):PROCa("box_y",x%,v%!a%+((i%-1)*wb%)):NEXTi%:PROCa("box_bl",v%!b%,v%!a%):PROCa("box_tl",v%!b%,(v%!a%+v%!k%)-vb%):PROCa("box_br",v%!b%+(v%!f%-ub%),v%!a%):x%=(v%!b%+v%!f%)-ub%:y%=(v%!a%+v%!k%)-vb%:PROCa("box_tr",x%,y%):ENDPROC DEFPROCl:LOCALq%:q%=FNb(20):q%!0=4:q%!4=5:q%!8=11:q%!12=12:q%!16=-1:SYS"OS_ReadVduVariables",q%,q%:h%!ta%=q%!0:h%!ua%=q%!4:h%!f%=(q%!8)+1<h%!va%THENPROCl CASEyb%OF WHEN1:zb%=C%<>h%!ta% WHEN4:zb%=C%>>h%!ua% OTHERWISE:ERROR255,"Unknown FNconv_units() operation : "+STR$(yb%) ENDCASE =zb% DEFFNk(v%,Bb%):LOCALCb%,Db%,Eb%,Fb%:Eb%=FALSE:Fb%=FALSE:IFv%!p%ANDBb%!p%THEN Cb%=Bb%!b%+Bb%!f%:Db%=Bb%!a%+Bb%!k%:IFv%!b%>=Bb%!b%ANDv%!b%=Bb%!a%ANDv%!a%=t%:ENDPROC DEFFNj(n%):=n%EOR1 DEFFNv(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$ DEFFNg(a$,Ib%,o$,Jb%):LOCALKb%,b$:Kb%=Ib%-LEN(a$):IFKb%<=0THEN b$=LEFT$(a$,Ib%) ELSE:IFJb%THEN b$=STRING$(Ib%,o$):RIGHT$(b$,LEN(a$))=a$ ELSE:b$=a$+STRING$(Kb%,o$) ENDIF ENDIF =b$ DEFFNs(a$,Ib%):LOCALb$:b$=STRING$(Ib%," "):RIGHT$(b$,LEN(a$))=a$:=b$ DEFFNq(e$):LOCALGb%:SYS"XOS_File",17,e$TOGb%:=Gb% DEFFNx(e$):LOCALC%:SYS"XOS_File",5,e$TO,,,,C%:=C% DEFFNr(yb%,e$):LOCALQ%,Lb%,Mb%,Nb%:Nb%=FALSE:CASEyb%OF WHEN0:Q%=OPENUP(e$+"chkfile") WHEN1:Q%=OPENUP(e$) OTHERWISE:ERROR255,"Unknown FNfs_writeable op :"+STR$(yb%) ENDCASE IFQ%<>0THEN SYS"XOS_Args",254,Q%TOMb%;Lb%:IF(Lb%AND1)THEN CLOSE#Q%:ERROR255,"Unknown FNfs_writeable fault." ENDIF IF((Mb%AND(1<<7))<>0)THENNb%=TRUE CLOSE#Q% ENDIF =Nb% DEFPROCv:LOCALOb%:U%=0:Pb%=0:SYS"Wimp_SlotSize",-1,-1TOQb%:SYS"XOS_ReadMemMapInfo"TORb%;Ob%:IFOb%AND1THENRb%=16384 PROCM(Rb%):ENDPROC DEFPROCn:IFU%THEN SYS"Wimp_SlotSize",U%-32768,-1TOQb%:U%=0:Pb%=0 ENDIF ENDPROC DEFFNb(X%):LOCALB%,C%:C%=(X%+15)AND-4:B%=FNy(C%):IFB%ELSEERROR254,"Heap claim failed: no room" B%!0=&DEADDEAD:B%!4=X%:!(B%-8+(B%!-4))=&DEADDEAD:=B%+8 DEFPROCc(RETURNB%):B%-=8:IFB%!0<>&DEADDEADTHEN ERROR254,"Memory written below block low boundary!" ENDIF IF!(B%-8+(B%!-4))<>&DEADDEADTHEN ERROR254,"Memory written above block high boundary!" ENDIF Pb%-=B%!-4:SYS"OS_Heap",3,U%,B%:B%=0:ENDPROC DEFFNz:=Pb% DEFFNA:LOCALSb%:Sb%=(Qb%+32768-U%)-Pb%:IFSb%<0THENERROR254,"Heap overflow!" =Sb% DEFFNB:=Qb%+32768-U% DEFFNt(B%):LOCALq%:q%=B%-4:=q%!0 DEFFNe(B%,hb%):LOCALi%,C%:C%=FNt(B%):FORi%=0TOC%-4STEP4:B%!i%=hb%:NEXTi%:=B% DEFFNf(B%):LOCALi%,Tb%,C%:C%=FNt(B%):Tb%=FNb(C%):FORi%=0TOC%-4STEP4:Tb%!i%=B%!i%:NEXTi%:=Tb% DEFPROCM(C%):IFU%THENERROR254,"You cannot have multiple heaps" C%=(C%+Rb%-1)ANDNOT(Rb%-1):U%=HIMEM:SYS"Wimp_SlotSize",Qb%+C%,-1TOQb%:C%=Qb%+32768-U%:IFC%<1THEN U%=0:ERROR254,"Could not extend WimpSlot for heap" ELSE:SYS"OS_Heap",0,U%,,C% ENDIF Pb%=0:ENDPROC DEFPROCN(X%):LOCALUb%:Ub%=Qb%:SYS"Wimp_SlotSize",Qb%+X%,-1TOQb%:X%=Qb%-Ub%:IFX%THENSYS"OS_Heap",5,U%,,X%TO,,,X% ENDPROC DEFFNy(X%):LOCALB%,Ob%:SYS"XOS_Heap",2,U%,,X%TO,,B%;Ob%:IFOb%AND1THEN PROCN((X%+Rb%)ANDNOT(Rb%-1)):SYS"XOS_Heap",2,U%,,X%TO,,B%;Ob%:IFOb%AND1THEN=0 ENDIF Pb%+=B%!-4:=B%