REM Acorn Invaders REM Packed by MH's BASCrunch v1.31c 30/1/08 On 23 Apr 2008 ONERRORPROCv:END MODE28:OFF:a$="Acorn Invaders. (c)2008 DynaByte Software":PRINTa$:PRINTSTRING$(LEN(a$),"-"):PRINT:PRINT:PRINT:PRINT:T%=FALSE:c$=".":PRINT"Checking files...":IFFNk(c$+"Resources.Gfx0","Sprites")THENT%=TRUE IFFNk(c$+"Resources.Gfx1","Charset")THENT%=TRUE IFFNk(c$+"Resources.Intro","Music")THENT%=TRUE IFFNk(c$+"Resources.Creds","Credits")THENT%=TRUE IFT%THENERROR255,"File Missing!!" PRINT"Initialising Tracker Daemon...":OSCLI"Playmod "+c$+"Resources.Intro":OSCLI"PlayPause":T%=FALSE:aa%=0:ba%=1:ca%=TRUE:da%=0:DIMa$(10),c%(10):DIMd%(10):PRINT"Initialising Heap Manager (ASH)...":PROCw:SYS"OS_SWINumberFromString",,"OS_SpriteOp"TOea%:PRINT"Loading Sprites..." fa%=FNo(c$+"Resources.Gfx0"):PRINT"Loading Charset...":ga%=FNo(c$+"Resources.Gfx1"):ha%=fa%:PRINT"Loading Strings...":ia%=OPENIN(c$+"Resources.Creds"):INPUT#ia%,p$:IFp$<>"DERC"THEN CLOSE#ia%:ERROR255,"Credit screen has been tampered with!!":END ENDIF INPUT#ia%,da%:DIMb$(da%),e%(da%):FORi%=1TOda%:INPUT#ia%,e%(i%),b$(i%):NEXTi%:CLOSE#ia%:PRINT"Processing HiTable... ";:i$=c$+"Resources.HiTable":IFFNp(i$)<>1THEN IFNOTFNq(0,c$)THEN ca%=FALSE:PRINT"Created Read-only HiScore table." ELSE:PRINT"Created Read/Write HiScore table." ENDIF PROCx(ca%) ELSE:IFNOTFNq(1,i$)THEN ca%=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:K%=16:L%=20:q%=24:`%=28:ja%=32:ka%=36:la%=40:ma%=44:na%=48:oa%=52:pa%=56:qa%=60:ra%=64:sa%=16:ta%=20:ua%=24:va%=28:U%=32:wa%=16:xa%=20 h%=FNb(36):M%=FNb(24):F%=FNb(16):CLS:PROCm:h%!va%=FNa(8,1):h%!U%=FNa(8,2)+7:M%!f%=FNa(6,1):M%!k%=FNa(6,2):M%!wa%=h%!k%-50:M%!xa%=30:OSCLI"PlayStart":REPEAT:CLS:T%=FNs:IFNOTT%THENCLS:PROCz UNTILT%:CLS:F%!f%=220:F%!k%=40:F%=FNn(F%,h%):F%!a%-=3:PROCj(F%):PROCn("GOODBYE!!!",10):IFba%=1THEN FORi%=127TO1STEP-2:OSCLI"PlayVolume "+STR$(i%):PROCe(4):NEXTi%:OSCLI"PlayStop":OSCLI"PlayVolume 127" ENDIF PROCo:END DEFFNs:LOCALi%,G%,H%,w%,R%,d%,S%,ya%:LOCALza%,N%,Aa%,Ba%,Ca%,Da%,x%,y%,Q%,s$,a$:G%=FNb(16):H%=FNb(16):w%=FNb(16):d%=FNb(16):S%=FNb(16):N%=FNb(16):G%!f%=FNa(100,1):G%!k%=FNa(40,2):G%!b%=FNc(G%,h%):G%!a%=800 H%!f%=FNa(150,1):H%!k%=FNa(40,2):H%!b%=FNc(H%,h%):H%!a%=G%!a%-H%!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:S%!f%=FNa(20,1):S%!k%=FNa(20,2) S%!b%=w%!b%+150+FNc(S%,d%):ya%=FNe(S%,16):za%=FNe(S%,16):S%!a%=w%!a%+100:ya%!a%=S%!a%+S%!k%+40:za%!a%=ya%!a%+ya%!k%+40:N%!f%=FNa(20,1):N%!k%=FNa(20,2):N%!b%=w%!b%+150+FNc(N%,d%):Aa%=FNe(N%,16) Ba%=FNe(N%,16):Da%=FNe(N%,16):Ca%=FNe(N%,16)::N%!a%=(w%!a%+w%!k%)-160:Aa%!a%=N%!a%-60:Ba%!a%=Aa%!a%-60:Da%!a%=Ba%!a%-100:Ca%!a%=Da%!a%-60:PROCg(M%!wa%):PROCg(M%!xa%):FORi%=0-G%!f%TOG%!b%STEP5:WAIT:PROCa("space",i%,G%!a%):PROCe(1):NEXTi% FORi%=h%!f%TOH%!b%STEP-5:WAIT:PROCa("invaders",i%,H%!a%):PROCe(1):NEXTi%:a$="PRESS SPACE TO PLAY":R%=LEN(a$)*h%!va%:y%=170:PROCb(FNh(R%,h%!f%),y%,a$,11):a$="OR Q TO QUIT":R%=LEN(a$)*h%!va%:y%-=h%!U%:PROCb(FNh(R%,h%!f%),y%,a$,11) WHILENOTINKEY(-99)ANDNOTINKEY(-17)ANDNOTINKEY(-82):y%=w%!a%+w%!k%:FORi%=1TOda%:a$=FNl(b$(i%)):x%=FNd(a$):CASEe%(i%)OF WHEN-1:y%-=h%!U% WHEN-2:y%-=(2*h%!U%) OTHERWISE:y%-=e%(i%) ENDCASE PROCb(x%,y%,a$,0):NEXTi%:Q%=FNm:IFQ%=1THENPROCf:=TRUE IFQ%=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%!U%: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",S%!b%,S%!a%):PROCb(x%,S%!a%+12,"= 50 POINTS !",0):Q%=FNm:IFQ%=1THENPROCf:=TRUE IFQ%=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",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):Q%=FNm:IFQ%=1THENPROCf:=TRUE IFQ%=2THENPROCf:=FALSE PROCc(w%):a$="TODAY'S":IFca%THENa$="ALL TIME" x%=FNd(a$):y%=w%!a%+w%!k%-20:PROCb(x%,y%,a$,0):a$="HI SCORES":y%-=h%!U%: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%!U%: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%!U%+5)),a$,0):NEXTi%:Q%=FNm:IFQ%=1THENPROCf:=TRUE IFQ%=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$):LOCALR%:R%=LEN(a$)*h%!va%:=w%!b%+FNh(R%,w%!f%) DEFPROCf:PROCd(G%):PROCd(H%):PROCd(w%):PROCd(d%):PROCd(S%):PROCd(ya%):PROCd(za%):PROCd(N%):PROCd(Aa%):PROCd(Ba%):PROCd(Ca%):PROCd(Da%):ENDPROC DEFPROCz:LOCALm%,o%,d%,e%,v%:LOCALB%:LOCALb%(),a%():LOCALY%,Ea%,Fa%,Ga%:LOCALHa%,Ia%,Ja%,Ka%:LOCALLa%,R%,a$,x%,y%,i%:m%=FNb(32):o%=FNb(36):d%=FNb(48):e%=FNb(68):B%=FNb(16):v%=FNb(16):DIMb%(10,6),a%(7):Y%=0:Z%=4:Ea%=8:Fa%=12 Ga%=ka%:Ha%=ma%:Ia%=na%:Ja%=qa%:Ka%=ra%:m%!f%=FNa(30,1):m%!k%=FNa(15,2):m%!b%=FNc(m%,h%):m%!a%=50:m%!L%=6:m%!K%=m%!L%:B%!f%=FNa(20,1):B%!k%=FNa(20,2):d%!f%=FNa(40,1):d%!k%=FNa(20,2):d%!a%=M%!wa%-(10+d%!k%):d%!L%=5:d%!q%=FALSE:d%!ma%=1 o%!f%=FNa(5,1):o%!k%=FNa(20,2):o%!q%=FALSE:o%!L%=10:v%!Ea%=1:v%!Z%=0:v%!Y%=3:v%!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(M%!wa%):PROCg(M%!xa%):PROCA(0,c%(1),v%!Y%,v%!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%!K%:PROCa("base",m%!b%,m%!a%) ENDIF IFv%!Y%>0THEN PROCH:PROCI:PROCJ:PROCK ENDIF WAIT:UNTILv%!Y%=0:F%!f%=240:F%!k%=40:F%=FNn(F%,h%):F%!a%-=3:PROCc(F%):PROCj(F%):PROCn("GAME OVER!!!",11):PROCe(750):IFNOTv%!Fa%THEN IFv%!Z%>=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%!K%=0-m%!L% ENDIF ENDPROC DEFPROCE:IFm%!b%>=h%!f%-m%!f%THEN m%!b%=h%!f%-m%!f% ELSE:m%!K%=0+m%!L% 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$(aa%):aa%+=1:ENDPROC DEFPROCF:v%!Y%=0:v%!Fa%=TRUE:ENDPROC DEFPROCq:REPEAT:UNTILNOTINKEY(-102):ba%=FNi(ba%):IFba%=1THENOSCLI"PlayStart"ELSEOSCLI"PlayPause" ENDPROC DEFPROCG:IFd%!q%THEN IFNOTd%!`%THEN d%!`%=TRUE:d%!ja%=d%!ka%:PROCa("saucer_2",d%!b%,d%!a%) ENDIF ENDIF ENDPROC DEFPROCH:LOCALMa%,Na%:Ma%=ja%:IFo%!q%THEN o%!Ma%=FALSE:IFo%!a%>=M%!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%!L% ENDIF ENDPROC DEFPROCI:LOCALOa%,D%,Pa%,Qa%,f$:Oa%=ja%:D%=ka%:Pa%=la%:Qa%=ma%:IFNOTd%!q%THEN IFFNg(4)ANDFNg(5)THEN d%!q%=TRUE:d%!`%=FALSE:d%!Pa%=0:d%!Qa%=0:IFFNg(50)THEN d%!K%=0-d%!L%:d%!b%=h%!f% ELSE:d%!K%=0+d%!L%:d%!b%=0-d%!f% ENDIF ENDIF ELSE:d%!Pa%+=1:d%!D%+=1:IFd%!b%<=0-d%!f%ANDSGN(d%!K%)=-1THEN d%!Oa%=FALSE:d%!q%=FALSE:d%!D%=0:ENDPROC ENDIF IFd%!b%>h%!f%ANDSGN(d%!K%)=1THEN d%!Oa%=FALSE:d%!q%=FALSE:d%!D%=0:ENDPROC ENDIF IFNOTd%!`%THEN IFFNj(o%,d%)THEN PROCc(o%):PROCa("saucer_2",d%!b%,d%!a%):d%!Oa%=d%!D%: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%!K% ELSE:IFd%!D%>=d%!Oa%+80THEN PROCc(d%):d%!q%=FALSE:d%!Oa%=FALSE:d%!D%=0:d%!Qa%=TRUE ELSE:IFd%!D%>=d%!Oa%+60THEN PROCa("saucer_5",d%!b%,d%!a%) ELSE:IFd%!D%>=d%!Oa%+40THEN PROCa("saucer_4",d%!b%,d%!a%) ELSE:IFd%!D%>=d%!Oa%+20THEN PROCa("saucer_3",d%!b%,d%!a%) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDPROC DEFPROCJ:LOCALRa%,z%,C%,J%,Sa%,Ta%,Ua%,Va%:LOCALE%,D%,Wa%,Xa%:E%=ja%:D%=la%:Wa%=oa%:Xa%=pa%:e%!D%+=1:IFe%!D%MOD5=0THENe%!E%=FNi(e%!E%) IFe%!D%>1000THENe%!D%=0 Ra%=e%!b%+e%!f%:Va%=0-((e%!Wa%-1)*(B%!f%+e%!Ga%)):IFRa%>=h%!f%THEN e%!K%=0-e%!L%:PROCs ENDIF IFe%!b%<=Va%THEN e%!K%=0+e%!L%: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:J%=((o%!b%-e%!b%)DIVz%)+1:IFSGN(b%(J%,C%))=1THEN b%(J%,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 v%!Ea%+=1:PROCc(e%):PROCg(M%!xa%):PROCi(v%!Y%):PROCk(v%!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:FORJ%=1TOe%!Ha%:IFb%(J%,e%!Ja%)<>0THENUa%=FALSE NEXTJ%:IFTa%THENe%!Wa%+=1 IFSa%THEN e%!f%-=(B%!f%+e%!Ga%):e%!Xa%-=1 ENDIF IFUa%THENe%!Ja%+=1 e%!b%+=e%!K%:PROCl:ENDPROC DEFPROCK:LOCALD%,E%,Ya%,Za%,i%,j%,x%,y%,_a%,`a%,f$,g$:D%=ja%:E%=ka%:Ya%=la%:FORi%=1TO7:IFNOTa%(i%)!q%THEN _a%=RND(10):`a%=v%!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%)!D%=0:a%(i%)!Ya%=1:a%(i%)!E%=0:Za%=4:IFFNg(25)THENa%(i%)!Ya%=2:Za%=Za%/2 a%(i%)!L%=Za%:a%(i%)!K%=a%(i%)!L% ENDIF ENDIF ELSE:a%(i%)!D%+=1:IFa%(i%)!D%MOD5=0THEN a%(i%)!E%=FNi(a%(i%)!E%) ENDIF IFa%(i%)!D%>1000THENa%(i%)!D%=0 a%(i%)!a%-=a%(i%)!K%:f$="miss_"+STR$(a%(i%)!Ya%)+STR$(a%(i%)!E%):IFa%(i%)!Ya%<1ORa%(i%)!Ya%>2THEN g$="Invalid missile type : "+STR$(a%(i%)!Ya%):ERROR255,g$ ENDIF IFa%(i%)!E%<0ORa%(i%)!E%>1THEN g$="Invalid missile frame : "+STR$(a%(i%)!E%):ERROR255,g$ ENDIF PROCa(f$,a%(i%)!b%,a%(i%)!a%):IFa%(i%)!a%<=M%!xa%+(M%!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%):v%!Y%-=1:PROCi(v%!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%,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%,bb%,Ea%,Z%,G%,H%,R%,x%,y%,g%,cb%:LOCALF%,a$:DIMG% 16,H% 16,F% 16:Z%=4:Ea%=8:G%!f%=FNa(100,1):G%!k%=FNa(40,2):G%!b%=FNc(G%,h%):G%!a%=800:H%!f%=FNa(150,1):H%!k%=FNa(40,2):H%!b%=FNc(H%,h%):H%!a%=G%!a%-H%!k% bb%=0:FORi%=10TO1STEP-1:IFv%!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%)=v%!Z%:d%(bb%)=v%!Ea%:CLS:PROCg(M%!wa%):PROCg(M%!xa%):PROCa("space",G%!b%,G%!a%):PROCa("invaders",H%!b%,H%!a%):a$="Congratulations!!! Your score of "+STR$(v%!Z%) a$+=" has earned the rank of "+STR$(bb%)+FNt(bb%):R%=LEN(a$)*h%!va%:x%=FNh(R%,h%!f%):y%=H%!a%-170:PROCb(x%,y%,a$,0):F%!f%=165:F%!k%=40:F%=FNn(F%,h%):PROCj(F%):x%=F%!b%+20:y%=F%!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$):IFca%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%!U%,a$,0):a$="HI SCORE :-":a$+=FNf(STR$(fb%),10," ",TRUE):x%=h%!f%-LEN(a$)*h%!va%:PROCb(x%,h%!k%-h%!U%,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%!va%:PROCb(x%,0,a$,0):ENDPROC DEFPROCh(hb%):LOCALx%,a$:v%!Z%+=hb%:a$="SCORE :-"+FNf(STR$(v%!Z%),10," ",TRUE):PROCb(0,h%!k%-h%!U%,a$,0):IFv%!Z%>c%(1)THEN a$="HI SCORE :-":a$+=FNf(STR$(v%!Z%),10," ",TRUE):x%=h%!f%-LEN(a$)*h%!va%:PROCb(x%,h%!k%-h%!U%,a$,0) ENDIF ENDPROC DEFPROCB:LOCALE%,Wa%,Xa%,Ja%:E%=ja%:Wa%=oa%:Xa%=pa%:Ja%=qa%:PROCt:PROCl:ENDPROC DEFPROCt:LOCALC%,J%,s%:e%!b%=50:e%!a%=550:e%!E%=0:e%!`%=0:e%!L%=3:e%!K%=e%!L%: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%:FORJ%=1TOe%!Ha%:FORC%=1TOe%!Ia% b%(J%,C%)=((C%+1)/2)+(e%!E%*10):NEXTC%:NEXTJ%:ENDPROC DEFPROCl:LOCALC%,J%,x%,y%,A%:A%=FNb(16):FORJ%=e%!Wa%TOe%!Xa%:x%=e%!b%+((J%-1)*(B%!f%+e%!Ga%)):FORC%=e%!Ja%TOe%!Ia%:y%=e%!a%+((C%-1)*B%!k%):IFb%(J%,C%)>0THEN b%(J%,C%)=((C%+1)/2)+(e%!E%*10) ENDIF IFb%(J%,C%)<>0THEN CASESGN(b%(J%,C%))OF WHEN-1:PROCM(x%,y%,J%,C%) WHEN1:PROCa("inv_"+STR$(b%(J%,C%)),x%,y%) ENDCASE ELSE:A%!b%=x%:A%!a%=y%:A%!f%=B%!f%:A%!k%=B%!k%:PROCc(A%) ENDIF NEXTC%:NEXTJ%:PROCd(A%):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: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%,V%,E%,jb%,L%,i%,h$:L%=1:kb%=24:P%=FNb(28):V%=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%!K%=L%:V%!b%=h%!f%:V%!a%=m%!a%:V%!K%=0-L%:v%!Y%=0:PROCg(M%!xa%):PROCi(v%!Y%):PROCk(v%!Ea%):PROCa("base",m%!b%,m%!a%):E%=0:jb%=FALSE:REPEAT:P%!b%+=P%!K%:P%!kb%=P%!b%+B%!f%:V%!b%+=V%!K%:E%+=1 IFE%MOD20=0THENjb%=FNi(jb%) IFE%>1000THENE%=0 IFjb%THENh$="inv_11"ELSEh$="inv_1" PROCa(h$,P%!b%,P%!a%):PROCa(h$,V%!b%,V%!a%):PROCe(2):WAIT:UNTILP%!kb%>=m%!b%:FORi%=1TO10:PROCa("inv_1",P%!b%,P%!a%):PROCa("inv_1",V%!b%,V%!a%):PROCe(20):PROCa("inv_11",P%!b%,P%!a%):PROCa("inv_11",V%!b%,V%!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(V%):ENDPROC DEFFNo(j$):LOCALlb%,I%:I%=FNv(j$)+256:lb%=FNb(I%):!lb%=I%:lb%!4=0:lb%!8=16:lb%!12=16:SYSea%,256+10,lb%,j$:SYSea%,256+17,lb%:=lb% DEFPROCb(x%,y%,a$,mb%):LOCALi%,nb%:ha%=ga%:nb%=h%!va%:FORi%=1TOLEN(a$):PROCa(STR$(ASC(MID$(a$,i%,1))),x%+((i%-1)*nb%),y%):IFmb%>0THENPROCe(mb%) NEXTi%:ha%=fa%:ENDPROC DEFPROCa(q$,x%,y%):LOCALob%:SYSea%,256+24,ha%,q$TO,,ob%:SYSea%,512+34,ha%,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%):LOCALR%,y%:R%=LEN(a$)*h%!va%:y%=(h%!k%/2)-(h%!U%/2):PROCb(FNh(R%,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%/M%!f%:FORi%=1TOtb%+1:PROCa("rail",(i%-1)*M%!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: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 CASEyb%OF WHEN1:zb%=I%<>h%!sa% WHEN4:zb%=I%>>h%!ta% 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%1THEN d$+=CHR$(132):T%=TRUE ELSE:d$+=CHR$(128):T%=FALSE ENDIF PRINTd$:=T% DEFFNg(n%):LOCALHb%:Hb%=RND(100):=Hb%<=n% DEFFNl(a$):LOCALi%,l$:FORi%=1TOLEN(a$):l$+=CHR$(ASC(MID$(a$,i%,1))EOR131):NEXTi%:=l$ DEFPROCe(n%):LOCALt%:t%=TIME+n%:REPEAT:UNTILTIME>=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$,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$ DEFFNr(a$,Ib%):LOCALb$:b$=STRING$(Ib%," "):RIGHT$(b$,LEN(a$))=a$:=b$ DEFFNp(e$):LOCALLb%:SYS"XOS_File",17,e$TOLb%:=Lb% DEFFNv(e$):LOCALI%:SYS"XOS_File",5,e$TO,,,,I%:=I% DEFFNq(yb%,e$):LOCALO%,Mb%,Nb%,Ob%:Ob%=FALSE:CASEyb%OF WHEN0:O%=OPENUP(e$+"chkfile") WHEN1:O%=OPENUP(e$) OTHERWISE:ERROR255,"Unknown FNfs_writeable op :"+STR$(yb%) ENDCASE IFO%<>0THEN SYS"XOS_Args",254,O%TONb%;Mb%:IF(Mb%AND1)THEN CLOSE#O%:ERROR255,"Unknown FNfs_writeable fault." ENDIF IF((Nb%AND(1<<7))<>0)THENOb%=TRUE CLOSE#O% ENDIF =Ob% DEFPROCw:LOCALPb%:W%=0:Qb%=0:SYS"Wimp_SlotSize",-1,-1TORb%:SYS"XOS_ReadMemMapInfo"TOSb%;Pb%:IFPb%AND1THENSb%=16384 PROCN(Sb%):ENDPROC DEFPROCN(I%):IFW%THENERROR254,"You cannot have multiple heaps" I%=(I%+Sb%-1)ANDNOT(Sb%-1):W%=HIMEM:SYS"Wimp_SlotSize",Rb%+I%,-1TORb%:I%=Rb%+32768-W%:IFI%<1THEN W%=0:ERROR254,"Could not extend WimpSlot for heap" ELSE:SYS"OS_Heap",0,W%,,I% ENDIF Qb%=0:ENDPROC DEFPROCo:IFW%THEN SYS"Wimp_SlotSize",W%-32768,-1TORb%:W%=0:Qb%=0 ENDIF ENDPROC DEFPROCO(_%):LOCALTb%:Tb%=Rb%:SYS"Wimp_SlotSize",Rb%+_%,-1TORb%:_%=Rb%-Tb%:IF_%THENSYS"OS_Heap",5,W%,,_%TO,,,_% ENDPROC DEFFNw(_%):LOCALX%,Pb%:SYS"XOS_Heap",2,W%,,_%TO,,X%;Pb%:IFPb%AND1THEN PROCO((_%+Sb%)ANDNOT(Sb%-1)):SYS"XOS_Heap",2,W%,,_%TO,,X%;Pb%:IFPb%AND1THEN=0 ENDIF Qb%+=X%!-4:=X% DEFFNb(_%):LOCALX%:X%=FNw(_%):IFX%ELSEERROR254,"Heap claim failed: no room" =X% DEFPROCd(RETURNX%):Qb%-=X%!-4:SYS"OS_Heap",3,W%,X%:X%=0:ENDPROC DEFFNx:=Qb%