REM Acorn Invaders REM Packed by MH's BASCrunch v1.31c 30/1/08 On 31 Mar 2008 ONERRORREPORT:PRINT" at line ";ERL: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$=".":IFFNj(c$+"Resources.Gfx0")<>1THENaa%=TRUE IFFNj(c$+"Resources.Gfx1")<>1THENaa%=TRUE IFFNj(c$+"Resources.Intro")<>1THENaa%=TRUE IFaa%THENERROR255,"File Missing!!" OSCLI"Playmod "+c$+"Resources.Intro":aa%=FALSE:ba%=0:ca%=1:da%=TRUE:DIMa$(10),c%(10):DIMd%(10):SYS"OS_SWINumberFromString",,"OS_SpriteOp"TOea%:fa%=FNn(c$+"Resources.Gfx0"):ga%=FNn(c$+"Resources.Gfx1"):ha%=fa% f$=c$+"Resources.HiTable":IFFNj(f$)<>1THEN IFNOTFNo(0,c$)THENda%=FALSE PROCs(da%) ELSE:IFNOTFNo(1,f$)THENda%=FALSE PROCt ENDIF b%=0:a%=4:h%=8:k%=12:I%=16:J%=20:q%=24:V%=28:ia%=32:ja%=36:ka%=40:la%=44:ma%=48:na%=52:oa%=56:pa%=60:qa%=16:ra%=20:sa%=24:W%=28:K%=32:ta%=16:ua%=20:DIMf% 36,L% 24,E% 16:CLS:PROCk:f%!W%=FNa(8,1):f%!K%=FNa(8,2)+7 L%!h%=FNa(6,1):L%!k%=FNa(6,2):L%!ta%=f%!k%-50:L%!ua%=30:REPEAT:CLS:aa%=FNq:IFNOTaa%THENCLS:PROCu UNTILaa%:CLS:E%!h%=220:E%!k%=40:E%=FNl(E%,f%):E%!a%-=3:PROCg(E%):PROCl("GOODBYE!!!",10):IFca%=1THEN FORi%=127TO1STEP-2:OSCLI"PlayVolume "+STR$(i%):PROCd(4):NEXTi%:OSCLI"PlayStop":OSCLI"PlayVolume 127" ENDIF END DEFFNq:LOCALi%,F%,G%,w%,R%,d%,S%,va%:LOCALwa%,N%,xa%,ya%,za%,x%,y%,T%,s$,a$:DIMF% 16,G% 16,w% 16:DIMd% 16,S% 16,N% 16:F%!h%=FNa(100,1):F%!k%=FNa(40,2):F%!b%=FNc(F%,f%):F%!a%=800:G%!h%=FNa(150,1):G%!k%=FNa(40,2):G%!b%=FNc(G%,f%) G%!a%=F%!a%-G%!k%:w%!h%=640:w%!k%=500:w%!b%=FNc(w%,f%):w%!a%=200:d%!h%=FNa(40,1):d%!k%=FNa(20,2):d%!b%=w%!b%+150:d%!a%=(w%!a%+w%!k%)-160:S%!h%=FNa(20,1):S%!k%=FNa(20,2):S%!b%=w%!b%+150+FNc(S%,d%) va%=FNd(S%,16):wa%=FNd(S%,16):S%!a%=w%!a%+100:va%!a%=S%!a%+S%!k%+40:wa%!a%=va%!a%+va%!k%+40:N%!h%=FNa(20,1):N%!k%=FNa(20,2):N%!b%=w%!b%+150+FNc(N%,d%):xa%=FNd(N%,16):ya%=FNd(N%,16):Aa%=FNd(N%,16):za%=FNd(N%,16) :N%!a%=(w%!a%+w%!k%)-160:xa%!a%=N%!a%-60:ya%!a%=xa%!a%-60:Aa%!a%=ya%!a%-100:za%!a%=Aa%!a%-60:PROCe(L%!ta%):PROCe(L%!ua%):FORi%=0-F%!h%TOF%!b%STEP5:WAIT:PROCa("space",i%,F%!a%):PROCd(1):NEXTi%:FORi%=f%!h%TOG%!b%STEP-5:WAIT:PROCa("invaders",i%,G%!a%):PROCd(1):NEXTi% a$="PRESS SPACE TO PLAY":R%=LEN(a$)*f%!W%:y%=170:PROCb(FNf(R%,f%!h%),y%,a$,11):a$="OR Q TO QUIT":R%=LEN(a$)*f%!W%:y%-=f%!K%:PROCb(FNf(R%,f%!h%),y%,a$,11):WHILENOTINKEY(-99)ANDNOTINKEY(-17)ANDNOTINKEY(-82):PROCc(w%):a$="GAME CREDITS":x%=FNb(a$):y%=w%!a%+w%!k%-20 PROCb(x%,y%,a$,0):a$="Code & GFX : Gareth Lock ":x%=FNb(a$):y%-=60:PROCb(x%,y%,a$,0):a$=" Tracker : Hugo Fiennes":x%=FNb(a$):y%-=f%!K%:PROCb(x%,y%,a$,0):a$="Many thanks to those of you on the Acorn":x%=FNb(a$):y%-=100:PROCb(x%,y%,a$,0) a$="Newsgroups who gave me a nudge in the":x%=FNb(a$):y%-=f%!K%:PROCb(x%,y%,a$,0):a$="right direction when things didn't quite":x%=FNb(a$):y%-=f%!K%:PROCb(x%,y%,a$,0):a$="go according to plan.":x%=FNb(a$):y%-=f%!K%:PROCb(x%,y%,a$,0) a$="Thanks also go out to Jamie's Computer":x%=FNb(a$):y%-=(2*f%!K%):PROCb(x%,y%,a$,0):a$="Club, who have let me spend so much time":x%=FNb(a$):y%-=f%!K%:PROCb(x%,y%,a$,0):a$=" on this project.":x%=FNb(a$):y%-=f%!K%:PROCb(x%,y%,a$,0) T%=FNk:IFT%=1THEN=TRUE IFT%=2THEN=FALSE PROCc(w%):a$="SCORE ADVANCE":x%=FNb(a$):y%=w%!a%+w%!k%-20:PROCb(x%,y%,a$,0):a$="TABLE":y%-=f%!K%:x%=FNb(a$):PROCb(x%,y%,a$,0):x%=d%!b%+d%!h%+10:PROCa("saucer_0",d%!b%,d%!a%):PROCb(x%,d%!a%+10,"= 500 POINTS !",0):PROCa("inv_3",wa%!b%,wa%!a%) PROCb(x%,wa%!a%+12,"= 100 POINTS !",0):PROCa("inv_2",va%!b%,va%!a%):PROCb(x%,va%!a%+12,"= 75 POINTS !",0):PROCa("inv_1",S%!b%,S%!a%):PROCb(x%,S%!a%+12,"= 50 POINTS !",0):T%=FNk:IFT%=1THEN=TRUE IFT%=2THEN=FALSE PROCc(w%):a$="KEYBOARD CONTROLS":x%=FNb(a$):y%=w%!a%+w%!k%-20:PROCb(x%,y%,a$,0):x%=N%!b%+N%!h%+10:PROCa("key_z",N%!b%,N%!a%):PROCb(x%,N%!a%+12,": MOVE LEFT",0):PROCa("key_x",xa%!b%,xa%!a%):PROCb(x%,xa%!a%+12,": MOVE RIGHT",0) PROCa("key_enter",ya%!b%,ya%!a%):PROCb(x%,ya%!a%+12,": FIRE SHELL",0):PROCa("key_m",Aa%!b%,Aa%!a%):PROCb(x%,Aa%!a%,": MUSIC ON/OFF",0):PROCa("key_q",za%!b%,za%!a%):PROCb(x%,za%!a%+12,": END GAME",0):T%=FNk:IFT%=1THEN=TRUE IFT%=2THEN=FALSE PROCc(w%):a$="TODAY'S":IFda%THENa$="ALL TIME" x%=FNb(a$):y%=w%!a%+w%!k%-20:PROCb(x%,y%,a$,0):a$="HI SCORES":y%-=f%!K%:x%=FNb(a$):PROCb(x%,y%,a$,0):y%=(w%!a%+w%!k%)-100:a$=" POS."+" PLAYER."+STRING$(12," ")+"SCORE.":a$+=STRING$(3," ")+"RACK.":x%=FNb(a$):PROCb(x%,y%,a$,0):y%-=2*f%!K%:FORi%=1TO10:IFi%<10THEN a$=" "+STR$(i%)+". " ELSE:a$=" "+STR$(i%)+". " ENDIF s$=FNm(a$(i%)):a$+=FNe(s$,8," ",FALSE):a$+=" .... ":a$+=FNp(STR$(c%(i%)),10):a$+=" ... "+FNp(STR$(d%(i%)),3):x%=FNb(a$):PROCb(x%,y%-(i%*(f%!K%+5)),a$,0):NEXTi%:T%=FNk:IFT%=1THEN=TRUE IFT%=2THEN=FALSE ENDWHILE:IFINKEY(-17)THEN=TRUE =FALSE DEFFNk:LOCALt%:t%=TIME+750:REPEAT:IFINKEY(-82)THENPROCm IFINKEY(-102)THENPROCn UNTILTIME=t%ORINKEY(-17)ORINKEY(-99):IFINKEY(-17)THEN=1 IFINKEY(-99)THEN=2 =0 DEFFNb(a$):LOCALx%,R%:R%=LEN(a$)*f%!W%:=w%!b%+FNf(R%,w%!h%) DEFPROCu:LOCALm%,o%,d%,e%,A%:LOCALD%:LOCALb%(),a%():LOCALX%,Y%,O%,Ba%:LOCALC%,Ca%,Da%,Ea%,Fa%,Ga%:LOCALHa%,R%,a$,x%,y%,i%:DIMm% 52,o% 52,d% 52,e% 64,D% 16,b%(10,6):DIMA% 16,a%(7):X%=0:Z%=4:Y%=8:Ia%=12:O%=ia%:Ba%=ja%:C%=ka%:Ca%=la%:Da%=ma%:Ea%=na% Fa%=oa%:Ga%=pa%:m%!h%=FNa(30,1):m%!k%=FNa(15,2):m%!b%=FNc(m%,f%):m%!a%=50:m%!J%=6:m%!I%=m%!J%:D%!h%=FNa(20,1):D%!k%=FNa(20,2):d%!h%=FNa(40,1):d%!k%=FNa(20,2):d%!a%=L%!ta%-(10+d%!k%):d%!J%=5:d%!q%=FALSE:d%!la%=1 o%!h%=FNa(5,1):o%!k%=FNa(20,2):o%!q%=FALSE:o%!J%=10:A%!Y%=1:A%!Z%=0:A%!X%=3:A%!Ia%=FALSE:e%!Ba%=FNa(20,1):e%!Ca%=10:e%!Da%=6:e%!q%=TRUE:PROCe(L%!ta%):PROCe(L%!ua%):PROCv(0,c%(1),A%!X%,A%!Y%):FORi%=1TO7:a%(i%)=FNr(52):NEXTi% PROCo:PROCh:PROCa("base",m%!b%,m%!a%):REPEAT:Ha%=FALSE:IFINKEY(-74)THENPROCw(m%!b%,m%!a%) IFINKEY(-98)THENPROCx:Ha%=TRUE IFINKEY(-67)THENPROCy:Ha%=TRUE IFINKEY(-102)THENPROCn IFINKEY(-82)THENPROCm IFINKEY(-17)THENPROCz IFINKEY(-34)THENPROCA IFINKEY(-35)THENPROCp IFHa%THEN m%!b%+=m%!I%:PROCa("base",m%!b%,m%!a%) ENDIF IFA%!X%>0THEN PROCB:PROCC:PROCD ENDIF WAIT:UNTILA%!X%=0:E%!h%=240:E%!k%=40:E%=FNl(E%,f%):E%!a%-=3:PROCg(E%):PROCl("GAME OVER!!!",11):PROCd(750):IFNOTA%!Ia%THEN IFA%!Z%>=c%(10)THEN PROCE(A%) ENDIF ENDIF ENDPROC DEFPROCx:IFm%!b%<=0THEN m%!b%=0 ELSE:m%!I%=0-m%!J% ENDIF ENDPROC DEFPROCy:IFm%!b%>=f%!h%-m%!h%THEN m%!b%=f%!h%-m%!h% ELSE:m%!I%=0+m%!J% ENDIF ENDPROC DEFPROCw(x%,y%):IFNOTo%!q%THEN o%!q%=TRUE:o%!b%=x%+(m%!h%/2):o%!a%=y%+m%!k% ENDIF ENDPROC DEFPROCm:REPEAT:UNTILNOTINKEY(-82):OSCLI"ScreenSave .Dump"+STR$(ba%):ba%+=1:ENDPROC DEFPROCz:A%!X%=0:A%!Ia%=TRUE:ENDPROC DEFPROCn:REPEAT:UNTILNOTINKEY(-102):ca%=FNg(ca%):IFca%=1THENOSCLI"PlayStart"ELSEOSCLI"PlayPause" ENDPROC DEFPROCA:IFd%!q%THEN IFNOTd%!V%THEN d%!V%=TRUE:d%!ia%=d%!ja%:PROCa("saucer_2",d%!b%,d%!a%) ENDIF ENDIF ENDPROC DEFPROCB:LOCALJa%,Ka%:Ja%=ia%:IFo%!q%THEN o%!Ja%=FALSE:IFo%!a%>=L%!ta%-o%!k%THEN o%!q%=FALSE:o%!Ja%=TRUE ENDIF IFo%!Ja%THEN Ka%=FNd(o%,52):Ka%!a%-=2:PROCc(Ka%) ELSE:PROCa("shell",o%!b%,o%!a%) ENDIF o%!a%+=o%!J% ENDIF ENDPROC DEFPROCC:LOCAL_%,C%,La%,Ma%:_%=ia%:C%=ja%:La%=ka%:Ma%=la%:IFNOTd%!q%THEN IFFNh(4)ANDFNh(5)THEN d%!q%=TRUE:d%!V%=FALSE:d%!La%=0:d%!Ma%=0:IFFNh(50)THEN d%!I%=0-d%!J%:d%!b%=f%!h% ELSE:d%!I%=0+d%!J%:d%!b%=0-d%!h% ENDIF ENDIF ELSE:d%!La%+=1:d%!C%+=1:IFd%!b%<=0-d%!h%ANDSGN(d%!I%)=-1THEN d%!_%=FALSE:d%!q%=FALSE:d%!C%=0:ENDPROC ENDIF IFd%!b%>f%!h%ANDSGN(d%!I%)=1THEN d%!_%=FALSE:d%!q%=FALSE:d%!C%=0:ENDPROC ENDIF IFNOTd%!V%THEN IFFNi(o%,d%)THEN PROCc(o%):PROCa("saucer_2",d%!b%,d%!a%):d%!_%=d%!C%:d%!V%=TRUE:o%!q%=FALSE:PROCf(500) ENDIF ELSE:IFFNi(o%,d%)THEN PROCc(o%):o%!q%=FALSE ENDIF ENDIF IFNOTd%!V%THEN IFd%!La%>=100THENd%!La%=0 IFd%!La%MOD10=0THEN d%!Ma%=FNg(d%!Ma%) ENDIF IFd%!Ma%=0THEN PROCa("saucer_0",d%!b%,d%!a%) ELSE:PROCa("saucer_1",d%!b%,d%!a%) ENDIF d%!b%+=d%!I% ELSE:IFd%!C%>=d%!_%+80THEN PROCc(d%):d%!q%=FALSE:d%!_%=FALSE:d%!C%=0:d%!Ma%=TRUE ELSE:IFd%!C%>=d%!_%+60THEN PROCa("saucer_5",d%!b%,d%!a%) ELSE:IFd%!C%>=d%!_%+40THEN PROCa("saucer_4",d%!b%,d%!a%) ELSE:IFd%!C%>=d%!_%+20THEN PROCa("saucer_3",d%!b%,d%!a%) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDPROC DEFPROCD:LOCALNa%,z%,B%,H%,Oa%,Pa%,Qa%,`%:e%!C%+=1:IFe%!C%MOD5=0THENe%!O%=FNg(e%!O%) IFe%!C%>10000THENe%!C%=0 Na%=e%!b%+e%!h%:`%=0-((e%!Ea%-1)*(D%!h%+e%!Ba%)):IFNa%>=f%!h%THEN e%!I%=0-e%!J%:PROCq ENDIF IFe%!b%<=`%THEN e%!I%=0+e%!J%:PROCq ENDIF `%=e%!a%+((e%!Ga%-1)*D%!k%):IF`%<=m%!a%+m%!k%THEN PROCp:ENDPROC ENDIF IFFNi(o%,e%)THEN z%=D%!h%+e%!Ba%:IF(o%!b%-e%!b%)MODz%<=D%!h%THEN B%=((o%!a%-e%!a%)DIVD%!k%)+1:H%=((o%!b%-e%!b%)DIVz%)+1:IFSGN(b%(H%,B%))=1THEN b%(H%,B%)=-5:PROCc(o%):o%!q%=FALSE:e%!V%+=1:CASEB%OF WHEN1,2:PROCf(50) WHEN3,4:PROCf(75) WHEN5,6:PROCf(100) ENDCASE ENDIF ENDIF ENDIF IFe%!V%>=e%!Ca%*e%!Da%THEN A%!Y%+=1:PROCc(e%):PROCe(L%!ua%):PROCi(A%!X%):PROCj(A%!Y%):PROCo ENDIF Oa%=TRUE:Pa%=TRUE:FORB%=1TOe%!Da%:IFb%(e%!Fa%,B%)<>0THENOa%=FALSE IFb%(e%!Ea%,B%)<>0THENPa%=FALSE NEXTB%:Qa%=TRUE:FORH%=1TOe%!Ca%:IFb%(H%,e%!Ga%)<>0THENQa%=FALSE NEXTH%:IFPa%THENe%!Ea%+=1 IFOa%THEN e%!h%-=(D%!h%+e%!Ba%):e%!Fa%-=1 ENDIF IFQa%THENe%!Ga%+=1 e%!b%+=e%!I%:PROCh:ENDPROC DEFPROCs(Ra%):LOCALi%,M%,n$:FORi%=1TO10:IFi%MOD2=0THENn$="Software"ELSEn$="DynaByte" a$(i%)=FNm(n$):c%(i%)=(11-i%)*1000:d%(i%)=0:NEXTi%:IFRa%THENPROCr ENDPROC DEFPROCt:LOCALi%,M%:M%=OPENIN".Resources.HiTable":FORi%=1TO10:INPUT#M%,a$(i%),c%(i%):INPUT#M%,d%(i%):NEXTi%:CLOSE#M%:ENDPROC DEFPROCr:LOCALi%,M%:M%=OPENOUT".Resources.HiTable":FORi%=1TO10:PRINT#M%,a$(i%),c%(i%):PRINT#M%,d%(i%):NEXTi%:CLOSE#M%:ENDPROC DEFPROCE(A%):LOCALi%,Sa%,Y%,Z%,F%,G%,R%,x%,y%,g%,Ta%:LOCALE%,a$:DIMF% 16,G% 16,E% 16:Z%=4:Y%=8:F%!h%=FNa(100,1):F%!k%=FNa(40,2):F%!b%=FNc(F%,f%):F%!a%=800:G%!h%=FNa(150,1):G%!k%=FNa(40,2):G%!b%=FNc(G%,f%):G%!a%=F%!a%-G%!k% Sa%=0:FORi%=10TO1STEP-1:IFA%!Z%>=c%(i%)THENSa%=i% NEXTi%:FORi%=9TOSa%STEP-1:a$(i%+1)=a$(i%):c%(i%+1)=c%(i%):d%(i%+1)=d%(i%):NEXTi%:c%(Sa%)=A%!Z%:d%(Sa%)=A%!Y%:CLS:PROCe(L%!ta%):PROCe(L%!ua%):PROCa("space",F%!b%,F%!a%):PROCa("invaders",G%!b%,G%!a%):a$="Congratulations!!! You have earned the rank of " a$+=STR$(Sa%)+FNs(Sa%):R%=LEN(a$)*f%!W%:x%=FNf(R%,f%!h%):y%=G%!a%-170:PROCb(x%,y%,a$,0):E%!h%=165:E%!k%=40:E%=FNl(E%,f%):PROCg(E%):x%=E%!b%+20:y%=E%!a%+12:a$="":i%=1:Ta%=FALSE:OSCLI"FX 21,0":REPEAT:g%=GET:CASEg%OF WHEN13:Ta%=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 UNTILTa%:IFa$=""ORa$=" "THENa$="Anon ..." a$(Sa%)=FNm(a$):IFda%THENPROCr ENDPROC DEFFNt(Ua%):LOCALJa%:Ja%=FALSE:IFUa%>=32ANDUa%<=126THENJa%=TRUE =Ja% DEFPROCv(Va%,Wa%,l%,r%):LOCALx%,a$:a$="SCORE :-"+FNe(STR$(Va%),10," ",TRUE):PROCb(0,f%!k%-f%!K%,a$,0):a$="HI SCORE :-":a$+=FNe(STR$(Wa%),10," ",TRUE):x%=f%!h%-LEN(a$)*f%!W%:PROCb(x%,f%!k%-f%!K%,a$,0):PROCi(l%):PROCj(r%):ENDPROC DEFPROCi(Xa%):LOCALa$:PROCa("base",0,0):a$=" = "+STR$(Xa%):PROCb(m%!h%,0,a$,0):ENDPROC DEFPROCj(Xa%):LOCALx%,a$:a$="RACK :-"+FNe(STR$(Xa%),3,"0",TRUE):x%=f%!h%-LEN(a$)*f%!W%:PROCb(x%,0,a$,0):ENDPROC DEFPROCf(Ya%):LOCALx%,a$:A%!Z%+=Ya%:a$="SCORE :-"+FNe(STR$(A%!Z%),10," ",TRUE):PROCb(0,f%!k%-f%!K%,a$,0):IFA%!Z%>c%(1)THEN a$="HI SCORE :-":a$+=FNe(STR$(A%!Z%),10," ",TRUE):x%=f%!h%-LEN(a$)*f%!W%:PROCb(x%,f%!k%-f%!K%,a$,0) ENDIF ENDPROC DEFPROCo:LOCALB%,H%,s%:e%!b%=50:e%!a%=550:e%!O%=0:e%!V%=0:e%!J%=3:e%!I%=e%!J%:e%!Ea%=1:e%!Fa%=e%!Ca%:e%!Ga%=1:s%=(e%!Ca%*D%!h%)+((e%!Ca%-1)*e%!Ba%):e%!h%=s%:e%!k%=e%!Da%*D%!k%:FORH%=1TOe%!Ca%:FORB%=1TOe%!Da% b%(H%,B%)=((B%+1)/2)+(e%!O%*10):NEXTB%:NEXTH%:ENDPROC DEFPROCh:LOCALB%,H%,x%,y%,v%:DIMv% 16:FORH%=e%!Ea%TOe%!Fa%:x%=e%!b%+((H%-1)*(D%!h%+e%!Ba%)):FORB%=e%!Ga%TOe%!Da%:y%=e%!a%+((B%-1)*D%!k%):IFb%(H%,B%)>0THEN b%(H%,B%)=((B%+1)/2)+(e%!O%*10) ENDIF IFb%(H%,B%)<>0THEN CASESGN(b%(H%,B%))OF WHEN-1:PROCF(x%,y%,H%,B%) WHEN1:PROCa("inv_"+STR$(b%(H%,B%)),x%,y%) ENDCASE ELSE:v%!b%=x%:v%!a%=y%:v%!h%=D%!h%:v%!k%=D%!k%:PROCc(v%) ENDIF NEXTB%:NEXTH%:ENDPROC DEFPROCF(x%,y%,r%,c%):LOCALZa%:DIMZa% 16:b%(r%,c%)+=1:PROCa("inv_4",x%,y%):IFb%(r%,c%)=0THEN Za%!b%=x%:Za%!a%=y%:Za%!h%=D%!h%:Za%!k%=D%!k%:PROCc(Za%) ENDIF ENDPROC DEFPROCq:LOCALv%,i%:DIMv% 16:FORi%=1TO3:e%!a%-=D%!k%/3:PROCh:NEXTi%:v%!b%=e%!b%:v%!a%=e%!a%+e%!k%:v%!h%=e%!h%:v%!k%=D%!k%:PROCc(v%):ENDPROC DEFPROCG:LOCALC%,O%,_a%,`a%,i%,j%,g$:C%=ia%:O%=ja%:_a%=ka%:FORi%=1TO7:IFNOTa%(i%)!q%THEN IFFNh(A%!Y%)ANDFNh(4)THEN a%(i%)!a%=e%!a%+((e%!Ga%-1)*D%!k%):a%(i%)!q%=TRUE:a%(i%)!V%=FALSE:a%(i%)!C%=0:a%(i%)!_a%=RND(2):`a%=4:IFa%(i%)!O%=2THEN`a%=`a%/2 a%(i%)!J%=`a%:a%(i%)!I%=0-a%(i%)!J% ENDIF ELSE:a%(i%)!C%+=1:IFa%(i%)!C%MOD5=0THEN a%(i%)!O%=FNg(a%(i%)!O%) ENDIF IFa%(i%)!C%>10000THENa%(i%)!C%=0 a%(i%)!a%-=a%(i%)!I%:g$="miss_"+STR$(a%(i%)!_a%)+STR$(a%(i%)!O%):PROCa(g$,a%(i%)!b%,a%(i%)!a%):IFa%(i%)!b%>=L%!ua%+10THEN PROCc(a%(i%)):a%(i%)!q%=FALSE ENDIF IFFNi(a%(i%),m%)THEN FORj%=1TO3:PROCa("base_"+STR$(j%),m%!b%,m%!a%):PROCd(20):WAIT:NEXTj%:PROCc(m%):IFo%!q%THEN PROCc(o%):o%!q%=FALSE ENDIF m%!b%=FNc(m%,f%):A%!X%-=1:PROCa("base",x%,y%) ENDIF IFFNi(o%,a%(i%))THEN IFa%(i%)!_a%=1THEN PROCc(a%(i%)):a%(i%)!q%=FALSE:PROCf(5) ENDIF PROCc(o%):o%!q%=FALSE ENDIF ENDIF NEXTi%:ENDPROC DEFPROCp:LOCALQ%,U%,O%,ab%,J%,i%,e$:J%=1:bb%=24:DIMQ% 28,U% 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%,f%):Q%!b%=0-D%!h%:Q%!a%=m%!a%:Q%!I%=J%:U%!b%=f%!h%:U%!a%=m%!a%:U%!I%=0-J%:A%!X%=0:PROCe(L%!ua%):PROCi(A%!X%):PROCj(A%!Y%):PROCa("base",m%!b%,m%!a%):O%=0:ab%=FALSE:REPEAT:Q%!b%+=Q%!I%:Q%!bb%=Q%!b%+D%!h%:U%!b%+=U%!I%:O%+=1 IFO%MOD20=0THENab%=FNg(ab%) IFab%THENe$="inv_11"ELSEe$="inv_1" PROCa(e$,Q%!b%,Q%!a%):PROCa(e$,U%!b%,U%!a%):PROCd(2):WAIT:UNTILQ%!bb%>=m%!b%:FORi%=1TO10:PROCa("inv_1",Q%!b%,Q%!a%):PROCa("inv_1",U%!b%,U%!a%):PROCd(20):PROCa("inv_11",Q%!b%,Q%!a%):PROCa("inv_11",U%!b%,U%!a%):PROCd(20):WAIT:NEXTi%:FORi%=1TO3 PROCa("base_"+STR$(i%),m%!b%,m%!a%):PROCd(20):WAIT:NEXTi%:PROCd(20):PROCc(m%):ENDPROC DEFFNn(h$):LOCALcb%,P%:P%=FNu(h$)+256:DIMcb% P%:!cb%=P%:cb%!4=0:cb%!8=16:cb%!12=16:SYSea%,256+10,cb%,h$:SYSea%,256+17,cb%:=cb% DEFPROCb(x%,y%,a$,db%):LOCALi%,eb%:ha%=ga%:eb%=f%!W%:FORi%=1TOLEN(a$):PROCa(STR$(ASC(MID$(a$,i%,1))),x%+((i%-1)*eb%),y%):IFdb%>0THENPROCd(db%) NEXTi%:ha%=fa%:ENDPROC DEFPROCa(k$,x%,y%):LOCALfb%:SYSea%,256+24,ha%,k$TO,,fb%:SYSea%,512+34,ha%,fb%,x%,y%,0:ENDPROC DEFPROCc(p%):GCOL0,0TINT0:RECTANGLEFILLp%!b%,p%!a%,p%!h%,p%!k%:ENDPROC DEFFNf(gb%,f%):=(f%/2)-(gb%/2) DEFPROCl(a$,hb%):LOCALR%,y%:R%=LEN(a$)*f%!W%:y%=(f%!k%/2)-(f%!K%/2):PROCb(FNf(R%,f%!h%),y%,a$,hb%):ENDPROC DEFFNc(ib%,jb%):=(jb%!h%/2)-(ib%!h%/2) DEFFNl(ib%,jb%):LOCALx%,y%:ib%!b%=(jb%!h%/2)-(ib%!h%/2):ib%!a%=(jb%!k%/2)-(ib%!k%/2):=ib% DEFPROCe(a%):LOCALi%,kb%:kb%=f%!h%/L%!h%:FORi%=1TOkb%+1:PROCa("rail",(i%-1)*L%!h%,a%):NEXTi%:ENDPROC DEFPROCg(p%):LOCALx%,y%,lb%,mb%,nb%,ob%,i%:lb%=FNa(3,1):mb%=FNa(3,2):nb%=1:ob%=3:FORi%=1TOp%!h%:x%=p%!b%+((i%-1)*nb%):PROCa("box_x",x%,p%!a%):PROCa("box_x",x%,p%!a%+(p%!k%-(2*ob%))):NEXTi%:x%=p%!b%+(p%!h%-lb%):FORi%=1TOp%!k%-1 PROCa("box_y",p%!b%,p%!a%+((i%-1)*nb%)):PROCa("box_y",x%,p%!a%+((i%-1)*nb%)):NEXTi%:PROCa("box_bl",p%!b%,p%!a%):PROCa("box_tl",p%!b%,(p%!a%+p%!k%)-mb%):PROCa("box_br",p%!b%+(p%!h%-lb%),p%!a%):x%=(p%!b%+p%!h%)-lb%:y%=(p%!a%+p%!k%)-mb%:PROCa("box_tr",x%,y%):ENDPROC DEFPROCk:LOCALv%:DIMv% 20:v%!0=4:v%!4=5:v%!8=11:v%!12=12:v%!16=-1:SYS"OS_ReadVduVariables",v%,v%:f%!qa%=v%!0:f%!ra%=v%!4:f%!h%=(v%!8)+1<f%!sa%THENPROCk CASEpb%OF WHEN1:qb%=P%<>f%!qa% WHEN4:qb%=P%>>f%!ra% OTHERWISE:ERROR255,"Unknown FNconv_units() operation : "+STR$(pb%) ENDCASE =qb% DEFFNi(p%,sb%):LOCALtb%,ub%,vb%,wb%:vb%=FALSE:wb%=FALSE:IFp%!q%ANDsb%!q%THEN tb%=sb%!b%+sb%!h%:ub%=sb%!a%+sb%!k%:IFp%!b%>=sb%!b%ANDp%!b%=sb%!a%ANDp%!a%=t%:ENDPROC DEFFNg(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$ DEFFNr(P%):LOCALv%:DIMv% P%:=v% DEFFNe(a$,zb%,j$,Ab%):LOCALBb%,b$:Bb%=zb%-LEN(a$):IFBb%<=0THEN b$=LEFT$(a$,zb%) ELSE:IFAb%THEN b$=STRING$(zb%,j$):RIGHT$(b$,LEN(a$))=a$ ELSE:b$=a$+STRING$(Bb%,j$) ENDIF ENDIF =b$ DEFFNp(a$,zb%):LOCALb$:b$=STRING$(zb%," "):RIGHT$(b$,LEN(a$))=a$:=b$ DEFFNj(d$):LOCALCb%:SYS"XOS_File",17,d$TOCb%:=Cb% DEFFNu(d$):LOCALP%:SYS"XOS_File",5,d$TO,,,,P%:=P% DEFFNo(pb%,d$):LOCALM%,Db%,Eb%,Fb%:Fb%=FALSE:CASEpb%OF WHEN0:M%=OPENUP(d$+"chkfile") WHEN1:M%=OPENUP(d$) OTHERWISE:ERROR255,"Unknown FNfs_writeable op :"+STR$(pb%) ENDCASE IFM%<>0THEN SYS"XOS_Args",254,M%TOEb%;Db%:IF(Db%AND1)THEN CLOSE#M%:ERROR255,"Unknown FNfs_writeable fault." ENDIF IF((Eb%AND(1<<7))<>0)THENFb%=TRUE CLOSE#M% ENDIF =Fb%