REM Acorn Invaders REM Packed by MH's BASCrunch v1.31c 30/1/08 On 24 Apr 2008 ONERRORPROCv:END MODE28:OFF:a$="Acorn Invaders. (c)2008 DynaByte Software":PRINTa$:PRINTSTRING$(LEN(a$),"-"):PRINT:PRINT:PRINT:PRINT:aa%=FALSE:c$=".":PRINT"Checking files...":IFNOTFNk(c$+"Resources.Gfx0","Sprites")THENaa%=TRUE IFNOTFNk(c$+"Resources.Gfx1","Charset")THENaa%=TRUE IFNOTFNk(c$+"Resources.Intro","Music")THENaa%=TRUE IFNOTFNk(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)...":PROCw:SYS"OS_SWINumberFromString",,"OS_SpriteOp"TOfa% PRINT"Loading Sprites...":ga%=FNo(c$+"Resources.Gfx0"):PRINT"Loading Charset...":ha%=FNo(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":IFFNp(i$)<>1THEN IFNOTFNq(0,c$)THEN da%=FALSE:PRINT"Created Read-only HiScore table." ELSE:PRINT"Created Read/Write HiScore table." ENDIF PROCx(da%) ELSE:IFNOTFNq(1,i$)THEN da%=FALSE:PRINT"Loaded Read-only HiScore table." ELSE:PRINT"Loaded Read/Write HiScore table." ENDIF PROCy ENDIF PRINT"Setting up...":PROCe(150):b%=0:a%=4:f%=8:k%=12:L%=16:M%=20:q%=24:_%=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):N%=FNb(24):G%=FNb(16):CLS:PROCm:h%!`%=FNa(8,1):h%!V%=FNa(8,2)+7:N%!f%=FNa(6,1):N%!k%=FNa(6,2):N%!wa%=h%!k%-50:N%!xa%=30:OSCLI"PlayStart":REPEAT:CLS:aa%=FNs:IFNOTaa%THENCLS:PROCz UNTILaa%:CLS:G%!f%=220:G%!k%=40:G%=FNn(G%,h%):G%!a%-=3:PROCj(G%):PROCn("GOODBYE!!!",10):IFca%=1THEN FORi%=127TO1STEP-2:OSCLI"PlayVolume "+STR$(i%):PROCe(4):NEXTi%:OSCLI"PlayStop":OSCLI"PlayVolume 127" ENDIF PROCo:END DEFFNs:LOCALi%,I%,J%,A%,S%,d%,T%,ya%:LOCALza%,O%,Aa%,Ba%,Ca%,Da%,x%,y%,R%,s$,a$:I%=FNb(16):J%=FNb(16):A%=FNb(16):d%=FNb(16):T%=FNb(16):O%=FNb(16):I%!f%=FNa(100,1):I%!k%=FNa(40,2):I%!b%=FNc(I%,h%):I%!a%=800 J%!f%=FNa(150,1):J%!k%=FNa(40,2):J%!b%=FNc(J%,h%):J%!a%=I%!a%-J%!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%=FNe(T%,16):za%=FNe(T%,16):T%!a%=A%!a%+100:ya%!a%=T%!a%+T%!k%+40:za%!a%=ya%!a%+ya%!k%+40:O%!f%=FNa(20,1):O%!k%=FNa(20,2):O%!b%=A%!b%+150+FNc(O%,d%):Aa%=FNe(O%,16) Ba%=FNe(O%,16):Da%=FNe(O%,16):Ca%=FNe(O%,16)::O%!a%=(A%!a%+A%!k%)-160:Aa%!a%=O%!a%-60:Ba%!a%=Aa%!a%-60:Da%!a%=Ba%!a%-100:Ca%!a%=Da%!a%-60:PROCg(N%!wa%):PROCg(N%!xa%):FORi%=0-I%!f%TOI%!b%STEP5:WAIT:PROCa("space",i%,I%!a%):PROCe(1):NEXTi% FORi%=h%!f%TOJ%!b%STEP-5:WAIT:PROCa("invaders",i%,J%!a%):PROCe(1):NEXTi%:a$="PRESS SPACE TO PLAY":S%=LEN(a$)*h%!`%:y%=170:PROCb(FNh(S%,h%!f%),y%,a$,11):a$="OR Q TO QUIT":S%=LEN(a$)*h%!`%:y%-=h%!V%:PROCb(FNh(S%,h%!f%),y%,a$,11):WHILENOTINKEY(-99)ANDNOTINKEY(-17)ANDNOTINKEY(-82) y%=A%!a%+A%!k%:FORi%=1TOea%:a$=FNl(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%:R%=FNm:IFR%=1THENPROCf:=TRUE IFR%=2THENPROCf:=FALSE PROCc(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):R%=FNm:IFR%=1THENPROCf:=TRUE IFR%=2THENPROCf:=FALSE PROCc(A%):a$="KEYBOARD CONTROLS":x%=FNd(a$):y%=A%!a%+A%!k%-20:PROCb(x%,y%,a$,0):x%=O%!b%+O%!f%+10:PROCa("key_z",O%!b%,O%!a%):PROCb(x%,O%!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):R%=FNm:IFR%=1THENPROCf:=TRUE IFR%=2THENPROCf:=FALSE PROCc(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$=FNl(a$(i%)):a$+=FNf(s$,8," ",FALSE):a$+=" .... ":a$+=FNr(STR$(c%(i%)),10):a$+=" ... "+FNr(STR$(d%(i%)),3):x%=FNd(a$):PROCb(x%,y%-(i%*(h%!V%+5)),a$,0):NEXTi%:R%=FNm:IFR%=1THENPROCf:=TRUE IFR%=2THENPROCf:=FALSE PROCc(A%):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$):LOCALS%:S%=LEN(a$)*h%!`%:=A%!b%+FNh(S%,A%!f%) DEFPROCf:PROCd(I%):PRINT"space% :Freed":PROCd(J%):PRINT"invt% :Freed":PROCd(A%):PRINT"hwind% :Freed":PROCd(d%):PRINT"saucer% :Freed":PROCd(T%):PRINT"inv1% :Freed":PROCd(ya%):PRINT"inv2% :Freed":PROCd(za%):PRINT"inv3% :Freed":PROCd(O%):PRINT"keyz% :Freed" PROCd(Aa%):PRINT"keyx% :Freed":PROCd(Ba%):PRINT"keye% :Freed":PROCd(Ca%):PRINT"keyq% :Freed":PROCd(Da%):PRINT"keym% :Freed":g%=GET:ENDPROC DEFPROCz:LOCALm%,o%,d%,e%,w%:LOCALB%:LOCALb%(),a%():LOCALY%,Ea%,Fa%,Ga%:LOCALHa%,Ia%,Ja%,Ka%:LOCALLa%,S%,a$,x%,y%,i%:m%=FNb(32):o%=FNb(36):d%=FNb(48):e%=FNb(68):B%=FNb(16):w%=FNb(16):DIMb%(10,6),a%(7):Y%=0:Z%=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%!M%=6:m%!L%=m%!M%:B%!f%=FNa(20,1):B%!k%=FNa(20,2):d%!f%=FNa(40,1):d%!k%=FNa(20,2):d%!a%=N%!wa%-(10+d%!k%):d%!M%=5:d%!q%=FALSE:d%!na%=1 o%!f%=FNa(5,1):o%!k%=FNa(20,2):o%!q%=FALSE:o%!M%=10:w%!Ea%=1:w%!Z%=0:w%!Y%=3:w%!Fa%=FALSE:e%!Ga%=FNa(20,1):e%!Ha%=10:e%!Ia%=6:e%!q%=TRUE:e%!Ka%=4:FORi%=1TO7:a%(i%)=FNb(44):a%(i%)!f%=FNa(5,1):a%(i%)!k%=FNa(20,2):NEXTi% PROCg(N%!wa%):PROCg(N%!xa%):PROCA(0,c%(1),w%!Y%,w%!Ea%):PROCB:PROCa("base",m%!b%,m%!a%):REPEAT:La%=FALSE:IFINKEY(-74)THENPROCC(m%!b%,m%!a%) IFINKEY(-98)THENPROCD:La%=TRUE IFINKEY(-67)THENPROCE:La%=TRUE IFINKEY(-102)THENPROCq IFINKEY(-82)THENPROCp IFINKEY(-17)THENPROCF IFINKEY(-34)THENPROCG IFINKEY(-35)THENPROCr IFLa%THEN m%!b%+=m%!L%:PROCa("base",m%!b%,m%!a%) ENDIF IFw%!Y%>0THEN PROCH:PROCI:PROCJ:PROCK ENDIF WAIT:UNTILw%!Y%=0:G%!f%=240:G%!k%=40:G%=FNn(G%,h%):G%!a%-=3:PROCc(G%):PROCj(G%):PROCn("GAME OVER!!!",11):PROCe(750):IFNOTw%!Fa%THEN IFw%!Z%>=c%(10)THEN PROCL(w%) ENDIF ENDIF PROCd(m%):PROCd(e%):PROCd(d%):PROCd(o%):PROCd(w%):PROCd(B%):FORi%=1TO7:PROCd(a%(i%)):NEXTi%:ENDPROC DEFPROCD:IFm%!b%<=0THEN m%!b%=0 ELSE:m%!L%=0-m%!M% ENDIF ENDPROC DEFPROCE:IFm%!b%>=h%!f%-m%!f%THEN m%!b%=h%!f%-m%!f% ELSE:m%!L%=0+m%!M% 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:w%!Y%=0:w%!Fa%=TRUE:ENDPROC DEFPROCq:REPEAT:UNTILNOTINKEY(-102):ca%=FNi(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:LOCALMa%,Na%:Ma%=ka%:IFo%!q%THEN o%!Ma%=FALSE:IFo%!a%>=N%!wa%-o%!k%THEN o%!q%=FALSE:o%!Ma%=TRUE ENDIF IFo%!Ma%THEN Na%=FNe(o%,36):Na%!a%-=2:PROCc(Na%):PROCd(Na%) ELSE:PROCa("shell",o%!b%,o%!a%) ENDIF o%!a%+=o%!M% ENDIF ENDPROC DEFPROCI:LOCALOa%,E%,Pa%,Qa%,f$:Oa%=ka%:E%=la%:Pa%=ma%:Qa%=na%:IFNOTd%!q%THEN IFFNg(4)ANDFNg(5)THEN d%!q%=TRUE:d%!_%=FALSE:d%!Pa%=0:d%!Qa%=0:IFFNg(50)THEN d%!L%=0-d%!M%:d%!b%=h%!f% ELSE:d%!L%=0+d%!M%:d%!b%=0-d%!f% ENDIF ENDIF ELSE:d%!Pa%+=1:d%!E%+=1:IFd%!b%<=0-d%!f%ANDSGN(d%!L%)=-1THEN d%!Oa%=FALSE:d%!q%=FALSE:d%!E%=0:ENDPROC ENDIF IFd%!b%>h%!f%ANDSGN(d%!L%)=1THEN d%!Oa%=FALSE:d%!q%=FALSE:d%!E%=0:ENDPROC ENDIF IFNOTd%!_%THEN IFFNj(o%,d%)THEN PROCc(o%):PROCa("saucer_2",d%!b%,d%!a%):d%!Oa%=d%!E%:d%!_%=TRUE:o%!q%=FALSE:PROCh(500) ENDIF ELSE:IFFNj(o%,d%)THEN PROCc(o%):o%!q%=FALSE ENDIF ENDIF IFNOTd%!_%THEN IFd%!Pa%>=1000THENd%!Pa%=0 IFd%!Pa%MOD10=0THEN d%!Qa%=FNi(d%!Qa%) ENDIF f$="saucer_"+STR$(d%!Qa%):PROCa(f$,d%!b%,d%!a%):d%!b%+=d%!L% ELSE:IFd%!E%>=d%!Oa%+80THEN PROCc(d%):d%!q%=FALSE:d%!Oa%=FALSE:d%!E%=0:d%!Qa%=TRUE ELSE:IFd%!E%>=d%!Oa%+60THEN PROCa("saucer_5",d%!b%,d%!a%) ELSE:IFd%!E%>=d%!Oa%+40THEN PROCa("saucer_4",d%!b%,d%!a%) ELSE:IFd%!E%>=d%!Oa%+20THEN PROCa("saucer_3",d%!b%,d%!a%) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDPROC DEFPROCJ:LOCALRa%,z%,C%,K%,Sa%,Ta%,Ua%,Va%:LOCALF%,E%,Wa%,Xa%:F%=ka%:E%=ma%:Wa%=pa%:Xa%=qa%:e%!E%+=1:IFe%!E%MOD5=0THENe%!F%=FNi(e%!F%) IFe%!E%>1000THENe%!E%=0 Ra%=e%!b%+e%!f%:Va%=0-((e%!Wa%-1)*(B%!f%+e%!Ga%)):IFRa%>=h%!f%THEN e%!L%=0-e%!M%:PROCs ENDIF IFe%!b%<=Va%THEN e%!L%=0+e%!M%:PROCs ENDIF Va%=e%!a%+((e%!Ja%-1)*B%!k%):IFVa%<=m%!a%+m%!k%THEN PROCr:ENDPROC ENDIF IFFNj(o%,e%)THEN z%=B%!f%+e%!Ga%:IF(o%!b%-e%!b%)MODz%<=B%!f%THEN C%=((o%!a%-e%!a%)DIVB%!k%)+1:K%=((o%!b%-e%!b%)DIVz%)+1:IFSGN(b%(K%,C%))=1THEN b%(K%,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%!Ha%*e%!Ia%THEN w%!Ea%+=1:PROCc(e%):PROCg(N%!xa%):PROCi(w%!Y%):PROCk(w%!Ea%):PROCt ENDIF Sa%=TRUE:Ta%=TRUE:FORC%=1TOe%!Ia%:IFb%(e%!Xa%,C%)<>0THENSa%=FALSE IFb%(e%!Wa%,C%)<>0THENTa%=FALSE NEXTC%:Ua%=TRUE:FORK%=1TOe%!Ha%:IFb%(K%,e%!Ja%)<>0THENUa%=FALSE NEXTK%:IFTa%THENe%!Wa%+=1 IFSa%THEN e%!f%-=(B%!f%+e%!Ga%):e%!Xa%-=1 ENDIF IFUa%THENe%!Ja%+=1 e%!b%+=e%!L%:PROCl:ENDPROC DEFPROCK:LOCALE%,F%,Ya%,Za%,i%,j%,x%,y%,_a%,`a%,f$,g$:E%=ka%:F%=la%:Ya%=ma%:FORi%=1TO7:IFNOTa%(i%)!q%THEN _a%=RND(10):`a%=w%!Ea%+5:IF`a%>100THEN`a%=100:e%!Ka%+=1 IFFNg(`a%)ANDFNg(e%!Ka%)THEN IFb%(_a%,e%!Ja%)>0THEN x%=e%!b%+(_a%-1)*(B%!f%+e%!Ga%):y%=e%!a%+(e%!Ja%-1)*B%!k%:a%(i%)!b%=x%+B%!f%/2:a%(i%)!a%=y%:a%(i%)!q%=TRUE:a%(i%)!_%=FALSE:a%(i%)!E%=0:a%(i%)!Ya%=1:a%(i%)!F%=0:Za%=4:IFFNg(25)THENa%(i%)!Ya%=2:Za%=Za%/2 a%(i%)!M%=Za%:a%(i%)!L%=a%(i%)!M% ENDIF ENDIF ELSE:a%(i%)!E%+=1:IFa%(i%)!E%MOD5=0THEN a%(i%)!F%=FNi(a%(i%)!F%) ENDIF IFa%(i%)!E%>1000THENa%(i%)!E%=0 a%(i%)!a%-=a%(i%)!L%:f$="miss_"+STR$(a%(i%)!Ya%)+STR$(a%(i%)!F%):IFa%(i%)!Ya%<1ORa%(i%)!Ya%>2THEN g$="Invalid missile type : "+STR$(a%(i%)!Ya%):ERROR255,g$ ENDIF IFa%(i%)!F%<0ORa%(i%)!F%>1THEN g$="Invalid missile frame : "+STR$(a%(i%)!F%):ERROR255,g$ ENDIF PROCa(f$,a%(i%)!b%,a%(i%)!a%):IFa%(i%)!a%<=N%!xa%+(N%!k%+5)THEN a%(i%)!q%=FALSE:PROCc(a%(i%)) ENDIF IFFNj(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%):w%!Y%-=1:PROCi(w%!Y%):PROCc(a%(i%)):a%(i%)!q%=FALSE:PROCa("base",m%!b%,m%!a%) ENDIF IFFNj(o%,a%(i%))ANDa%(i%)!q%THEN IFa%(i%)!Ya%=1THEN a%(i%)!q%=FALSE:PROCh(5):PROCc(a%(i%)) ENDIF PROCc(o%):o%!q%=FALSE ENDIF ENDIF NEXTi%:ENDPROC DEFPROCx(ab%):LOCALi%,n$:FORi%=1TO10:IFi%MOD2=0THENn$="Software"ELSEn$="DynaByte" a$(i%)=FNl(n$):c%(i%)=(11-i%)*1000:d%(i%)=0:NEXTi%:IFab%THENPROCu ENDPROC DEFPROCy:LOCALi%,P%:P%=OPENIN".Resources.HiTable":FORi%=1TO10:INPUT#P%,a$(i%),c%(i%):INPUT#P%,d%(i%):NEXTi%:CLOSE#P%:ENDPROC DEFPROCu:LOCALi%,P%:P%=OPENOUT".Resources.HiTable":FORi%=1TO10:PRINT#P%,a$(i%),c%(i%):PRINT#P%,d%(i%):NEXTi%:CLOSE#P%:ENDPROC DEFPROCL(w%):LOCALi%,bb%,Ea%,Z%,I%,J%,S%,x%,y%,g%,cb%:LOCALG%,a$:DIMI% 16,J% 16,G% 16:Z%=4:Ea%=8:I%!f%=FNa(100,1):I%!k%=FNa(40,2):I%!b%=FNc(I%,h%):I%!a%=800:J%!f%=FNa(150,1):J%!k%=FNa(40,2):J%!b%=FNc(J%,h%):J%!a%=I%!a%-J%!k% bb%=0:FORi%=10TO1STEP-1:IFw%!Z%>=c%(i%)THENbb%=i% NEXTi%:FORi%=9TObb%STEP-1:a$(i%+1)=a$(i%):c%(i%+1)=c%(i%):d%(i%+1)=d%(i%):NEXTi%:c%(bb%)=w%!Z%:d%(bb%)=w%!Ea%:CLS:PROCg(N%!wa%):PROCg(N%!xa%):PROCa("space",I%!b%,I%!a%):PROCa("invaders",J%!b%,J%!a%):a$="Congratulations!!! Your score of "+STR$(w%!Z%) a$+=" has earned the rank of "+STR$(bb%)+FNt(bb%):S%=LEN(a$)*h%!`%:x%=FNh(S%,h%!f%):y%=J%!a%-170:PROCb(x%,y%,a$,0):G%!f%=165:G%!k%=40:G%=FNn(G%,h%):PROCj(G%):x%=G%!b%+20:y%=G%!a%+12:a$="":i%=1:cb%=FALSE OSCLI"FX 21,0":REPEAT:g%=GET:CASEg%OF WHEN13:cb%=TRUE WHEN8:i%-=1:a$=LEFT$(a$,i%-1) OTHERWISE:IFi%<9ANDFNu(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 UNTILcb%:IFa$=""ORa$=" "THENa$="Anon ..." a$(bb%)=FNl(a$):IFda%THENPROCu ENDPROC DEFFNu(db%):LOCALMa%:Ma%=FALSE:IFdb%>=32ANDdb%<=126THENMa%=TRUE =Ma% DEFPROCA(eb%,fb%,l%,r%):LOCALx%,a$:a$="SCORE :-"+FNf(STR$(eb%),10," ",TRUE):PROCb(0,h%!k%-h%!V%,a$,0):a$="HI SCORE :-":a$+=FNf(STR$(fb%),10," ",TRUE):x%=h%!f%-LEN(a$)*h%!`%:PROCb(x%,h%!k%-h%!V%,a$,0):PROCi(l%):PROCk(r%):ENDPROC DEFPROCi(gb%):LOCALa$:PROCa("base",0,0):a$=" = "+STR$(gb%):PROCb(m%!f%,0,a$,0):ENDPROC DEFPROCk(gb%):LOCALx%,a$:a$="RACK :-"+FNf(STR$(gb%),3,"0",TRUE):x%=h%!f%-LEN(a$)*h%!`%:PROCb(x%,0,a$,0):ENDPROC DEFPROCh(hb%):LOCALx%,a$:w%!Z%+=hb%:a$="SCORE :-"+FNf(STR$(w%!Z%),10," ",TRUE):PROCb(0,h%!k%-h%!V%,a$,0):IFw%!Z%>c%(1)THEN a$="HI SCORE :-":a$+=FNf(STR$(w%!Z%),10," ",TRUE):x%=h%!f%-LEN(a$)*h%!`%:PROCb(x%,h%!k%-h%!V%,a$,0) ENDIF ENDPROC DEFPROCB:LOCALF%,Wa%,Xa%,Ja%:F%=ka%:Wa%=pa%:Xa%=qa%:Ja%=ra%:PROCt:PROCl:ENDPROC DEFPROCt:LOCALC%,K%,s%:e%!b%=50:e%!a%=550:e%!F%=0:e%!_%=0:e%!M%=3:e%!L%=e%!M%:e%!Wa%=1:e%!Xa%=e%!Ha%:e%!Ja%=1:s%=(e%!Ha%*B%!f%)+((e%!Ha%-1)*e%!Ga%):e%!f%=s%:e%!k%=e%!Ia%*B%!k%:FORK%=1TOe%!Ha%:FORC%=1TOe%!Ia% b%(K%,C%)=((C%+1)/2)+(e%!F%*10):NEXTC%:NEXTK%:ENDPROC DEFPROCl:LOCALC%,K%,x%,y%,v%:v%=FNb(16):FORK%=e%!Wa%TOe%!Xa%:x%=e%!b%+((K%-1)*(B%!f%+e%!Ga%)):FORC%=e%!Ja%TOe%!Ia%:y%=e%!a%+((C%-1)*B%!k%):IFb%(K%,C%)>0THEN b%(K%,C%)=((C%+1)/2)+(e%!F%*10) ENDIF IFb%(K%,C%)<>0THEN CASESGN(b%(K%,C%))OF WHEN-1:PROCM(x%,y%,K%,C%) WHEN1:PROCa("inv_"+STR$(b%(K%,C%)),x%,y%) ENDCASE ELSE:v%!b%=x%:v%!a%=y%:v%!f%=B%!f%:v%!k%=B%!k%:PROCc(v%) ENDIF NEXTC%:NEXTK%:PROCd(v%):ENDPROC DEFPROCM(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%=B%!f%:ib%!k%=B%!k%:PROCc(ib%) ENDIF PROCd(ib%):ENDPROC DEFPROCs:LOCALv%,i%:v%=FNb(16):FORi%=1TO3:e%!a%-=B%!k%/3:PROCl:NEXTi%:v%!b%=e%!b%:v%!a%=e%!a%+e%!k%:v%!f%=e%!f%:v%!k%=B%!k%:PROCc(v%):PROCd(v%):ENDPROC DEFPROCr:LOCALQ%,W%,F%,jb%,M%,i%,h$:M%=1:kb%=24:Q%=FNb(28):W%=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%):Q%!b%=0-B%!f%:Q%!a%=m%!a%:Q%!L%=M%:W%!b%=h%!f%:W%!a%=m%!a%:W%!L%=0-M%:w%!Y%=0:PROCg(N%!xa%):PROCi(w%!Y%):PROCk(w%!Ea%):PROCa("base",m%!b%,m%!a%):F%=0:jb%=FALSE:REPEAT:Q%!b%+=Q%!L%:Q%!kb%=Q%!b%+B%!f%:W%!b%+=W%!L%:F%+=1 IFF%MOD20=0THENjb%=FNi(jb%) IFF%>1000THENF%=0 IFjb%THENh$="inv_11"ELSEh$="inv_1" PROCa(h$,Q%!b%,Q%!a%):PROCa(h$,W%!b%,W%!a%):PROCe(2):WAIT:UNTILQ%!kb%>=m%!b%:FORi%=1TO10:PROCa("inv_1",Q%!b%,Q%!a%):PROCa("inv_1",W%!b%,W%!a%):PROCe(20):PROCa("inv_11",Q%!b%,Q%!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):PROCc(m%):PROCd(Q%):PROCd(W%):ENDPROC DEFFNo(j$):LOCALlb%,D%:D%=FNv(j$)+256:lb%=FNb(D%):!lb%=D%: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 DEFPROCc(p%):GCOL0,0TINT0:RECTANGLEFILLp%!b%,p%!a%,p%!f%,p%!k%:ENDPROC DEFFNh(pb%,h%):=(h%/2)-(pb%/2) DEFPROCn(a$,qb%):LOCALS%,y%:S%=LEN(a$)*h%!`%:y%=(h%!k%/2)-(h%!V%/2):PROCb(FNh(S%,h%!f%),y%,a$,qb%):ENDPROC DEFFNc(rb%,sb%):=(sb%!f%/2)-(rb%!f%/2) DEFFNn(rb%,sb%):LOCALx%,y%:rb%!b%=(sb%!f%/2)-(rb%!f%/2):rb%!a%=(sb%!k%/2)-(rb%!k%/2):=rb% DEFPROCg(a%):LOCALi%,tb%:tb%=h%!f%/N%!f%:FORi%=1TOtb%+1:PROCa("rail",(i%-1)*N%!f%,a%):NEXTi%:ENDPROC DEFPROCj(p%):LOCALx%,y%,ub%,vb%,wb%,xb%,i%:ub%=FNa(3,1):vb%=FNa(3,2):wb%=1:xb%=3:FORi%=1TOp%!f%:x%=p%!b%+((i%-1)*wb%):PROCa("box_x",x%,p%!a%):PROCa("box_x",x%,p%!a%+(p%!k%-(2*xb%))):NEXTi%:x%=p%!b%+(p%!f%-ub%):FORi%=1TOp%!k%-1 PROCa("box_y",p%!b%,p%!a%+((i%-1)*wb%)):PROCa("box_y",x%,p%!a%+((i%-1)*wb%)):NEXTi%:PROCa("box_bl",p%!b%,p%!a%):PROCa("box_tl",p%!b%,(p%!a%+p%!k%)-vb%):PROCa("box_br",p%!b%+(p%!f%-ub%),p%!a%):x%=(p%!b%+p%!f%)-ub%:y%=(p%!a%+p%!k%)-vb%:PROCa("box_tr",x%,y%):ENDPROC DEFPROCm:LOCALv%:v%=FNb(20):v%!0=4:v%!4=5:v%!8=11:v%!12=12:v%!16=-1:SYS"OS_ReadVduVariables",v%,v%:h%!ta%=v%!0:h%!ua%=v%!4:h%!f%=(v%!8)+1<h%!va%THENPROCm CASEyb%OF WHEN1:zb%=D%<>h%!ta% WHEN4:zb%=D%>>h%!ua% OTHERWISE:ERROR255,"Unknown FNconv_units() operation : "+STR$(yb%) ENDCASE =zb% DEFFNj(p%,Bb%):LOCALCb%,Db%,Eb%,Fb%:Eb%=FALSE:Fb%=FALSE:IFp%!q%ANDBb%!q%THEN Cb%=Bb%!b%+Bb%!f%:Db%=Bb%!a%+Bb%!k%:IFp%!b%>=Bb%!b%ANDp%!b%=Bb%!a%ANDp%!a%=t%:ENDPROC DEFFNi(n%):=n%EOR1 DEFFNt(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$,Jb%,o$,Kb%):LOCALLb%,b$:Lb%=Jb%-LEN(a$):IFLb%<=0THEN b$=LEFT$(a$,Jb%) ELSE:IFKb%THEN b$=STRING$(Jb%,o$):RIGHT$(b$,LEN(a$))=a$ ELSE:b$=a$+STRING$(Lb%,o$) ENDIF ENDIF =b$ DEFFNr(a$,Jb%):LOCALb$:b$=STRING$(Jb%," "):RIGHT$(b$,LEN(a$))=a$:=b$ DEFFNp(e$):LOCALHb%:SYS"XOS_File",17,e$TOHb%:=Hb% DEFFNv(e$):LOCALD%:SYS"XOS_File",5,e$TO,,,,D%:=D% DEFFNq(yb%,e$):LOCALP%,Mb%,Nb%,Ob%:Ob%=FALSE:CASEyb%OF WHEN0:P%=OPENUP(e$+"chkfile") WHEN1:P%=OPENUP(e$) OTHERWISE:ERROR255,"Unknown FNfs_writeable op :"+STR$(yb%) ENDCASE IFP%<>0THEN SYS"XOS_Args",254,P%TONb%;Mb%:IF(Mb%AND1)THEN CLOSE#P%:ERROR255,"Unknown FNfs_writeable fault." ENDIF IF((Nb%AND(1<<7))<>0)THENOb%=TRUE CLOSE#P% ENDIF =Ob% DEFPROCw:LOCALPb%:U%=0:Qb%=0:SYS"Wimp_SlotSize",-1,-1TORb%:SYS"XOS_ReadMemMapInfo"TOSb%;Pb%:IFPb%AND1THENSb%=16384 PROCN(Sb%):ENDPROC DEFPROCo:IFU%THEN SYS"Wimp_SlotSize",U%-32768,-1TORb%:U%=0:Qb%=0 ENDIF ENDPROC DEFFNb(X%):LOCALH%,D%:D%=(X%+15)ANDNOT3:H%=FNw(D%):IFH%ELSEERROR254,"Heap claim failed: no room" H%!0=&DEADDEAD:H%!4=X%:!(H%-4+(H%!-4))=&DEADDEAD:=H%+8 DEFPROCd(RETURNH%):H%-=4:IFH%!0<>&DEADDEADTHEN ERROR254,"Block allocation under-run!" ENDIF IF!(H%-4+(H%!-4))<>&DEADDEADTHEN ERROR254,"Block allocation over-run!" ENDIF Qb%-=H%!-4:SYS"OS_Heap",3,U%,H%:H%=0:ENDPROC DEFFNx:=Qb% DEFFNy:LOCALTb%:Tb%=(Rb%+32768-U%)-Qb%:IFTb%<0THENERROR254,"Heap overflow!" =Tb% DEFFNz:=Rb%+32768-U% DEFFNA(H%):LOCALv%:v%=H%-4:=v%!0 DEFPROCN(D%):IFU%THENERROR254,"You cannot have multiple heaps" D%=(D%+Sb%-1)ANDNOT(Sb%-1):U%=HIMEM:SYS"Wimp_SlotSize",Rb%+D%,-1TORb%:D%=Rb%+32768-U%:IFD%<1THEN U%=0:ERROR254,"Could not extend WimpSlot for heap" ELSE:SYS"OS_Heap",0,U%,,D% ENDIF Qb%=0:ENDPROC DEFPROCO(X%):LOCALUb%:Ub%=Rb%:SYS"Wimp_SlotSize",Rb%+X%,-1TORb%:X%=Rb%-Ub%:IFX%THENSYS"OS_Heap",5,U%,,X%TO,,,X% ENDPROC DEFFNw(X%):LOCALH%,Pb%:SYS"XOS_Heap",2,U%,,X%TO,,H%;Pb%:IFPb%AND1THEN PROCO((X%+Sb%)ANDNOT(Sb%-1)):SYS"XOS_Heap",2,U%,,X%TO,,H%;Pb%:IFPb%AND1THEN=0 ENDIF Qb%+=H%!-4:=H%