REM Acorn Invaders REM Packed by MH's BASCrunch v1.31c 30/1/08 On 05 Apr 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...":`%=FALSE:c$=".":IFFNf(c$+"Resources.Gfx0")<>1THEN`%=TRUE IFFNf(c$+"Resources.Gfx1")<>1THEN`%=TRUE IFFNf(c$+"Resources.Intro")<>1THEN`%=TRUE IFFNf(c$+"Resources.Creds")<>1THEN`%=TRUE IF`%THENERROR255,"File Missing!!" OSCLI"Playmod "+c$+"Resources.Intro":`%=FALSE:aa%=0:ba%=1:ca%=TRUE:DIMa$(10),c%(10):DIMd%(10):DIMb$(10),e%(10):SYS"OS_SWINumberFromString",,"OS_SpriteOp"TOda%:ea%=FNn(c$+"Resources.Gfx0"):fa%=FNn(c$+"Resources.Gfx1"):ga%=ea% ha%=OPENIN(c$+"Resources.Creds"):FORi%=1TO10:INPUT#ha%,e%(i%),b$(i%):NEXTi%:CLOSE#ha%:g$=c$+"Resources.HiTable":IFFNf(g$)<>1THEN IFNOTFNo(0,c$)THENca%=FALSE PROCs(ca%) ELSE:IFNOTFNo(1,g$)THENca%=FALSE PROCt ENDIF b%=0:a%=4:f%=8:k%=12:I%=16:J%=20:q%=24:W%=28:ia%=32:ja%=36:ka%=40:la%=44:ma%=48:na%=52:oa%=56:pa%=60:qa%=16:ra%=20:sa%=24:X%=28:R%=32:ta%=16:ua%=20:DIMh% 36,K% 24,E% 16:CLS:PROCk:h%!X%=FNa(8,1):h%!R%=FNa(8,2)+7 K%!f%=FNa(6,1):K%!k%=FNa(6,2):K%!ta%=h%!k%-50:K%!ua%=30:REPEAT:CLS:`%=FNq:IFNOT`%THENCLS:PROCu UNTIL`%:CLS:E%!f%=220:E%!k%=40:E%=FNm(E%,h%):E%!a%-=3:PROCh(E%):PROCl("GOODBYE!!!",10):IFba%=1THEN FORi%=127TO1STEP-2:OSCLI"PlayVolume "+STR$(i%):PROCd(4):NEXTi%:OSCLI"PlayStop":OSCLI"PlayVolume 127" ENDIF END DEFFNq:LOCALi%,F%,G%,A%,Q%,d%,S%,va%:LOCALwa%,N%,xa%,ya%,za%,x%,y%,T%,s$,a$:DIMF% 16,G% 16,A% 16:DIMd% 16,S% 16,N% 16:F%!f%=FNa(100,1):F%!k%=FNa(40,2):F%!b%=FNb(F%,h%):F%!a%=800:G%!f%=FNa(150,1):G%!k%=FNa(40,2):G%!b%=FNb(G%,h%) G%!a%=F%!a%-G%!k%:A%!f%=640:A%!k%=500:A%!b%=FNb(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:S%!f%=FNa(20,1):S%!k%=FNa(20,2):S%!b%=A%!b%+150+FNb(S%,d%) va%=FNd(S%,16):wa%=FNd(S%,16):S%!a%=A%!a%+100:va%!a%=S%!a%+S%!k%+40:wa%!a%=va%!a%+va%!k%+40:N%!f%=FNa(20,1):N%!k%=FNa(20,2):N%!b%=A%!b%+150+FNb(N%,d%):xa%=FNd(N%,16):ya%=FNd(N%,16):Aa%=FNd(N%,16):za%=FNd(N%,16) :N%!a%=(A%!a%+A%!k%)-160:xa%!a%=N%!a%-60:ya%!a%=xa%!a%-60:Aa%!a%=ya%!a%-100:za%!a%=Aa%!a%-60:PROCe(K%!ta%):PROCe(K%!ua%):FORi%=0-F%!f%TOF%!b%STEP5:WAIT:PROCa("space",i%,F%!a%):PROCd(1):NEXTi%:FORi%=h%!f%TOG%!b%STEP-5:WAIT:PROCa("invaders",i%,G%!a%):PROCd(1):NEXTi% a$="PRESS SPACE TO PLAY":Q%=LEN(a$)*h%!X%:y%=170:PROCb(FNg(Q%,h%!f%),y%,a$,11):a$="OR Q TO QUIT":Q%=LEN(a$)*h%!X%:y%-=h%!R%:PROCb(FNg(Q%,h%!f%),y%,a$,11):WHILENOTINKEY(-99)ANDNOTINKEY(-17)ANDNOTINKEY(-82):PROCc(A%):y%=A%!a%+A%!k%:FORi%=1TO10:a$=FNk(b$(i%)) x%=FNc(a$):CASEe%(i%)OF WHEN-1:y%-=h%!R% WHEN-2:y%-=(2*h%!R%) OTHERWISE:y%-=e%(i%) ENDCASE PROCb(x%,y%,a$,0):NEXTi%:T%=FNl:IFT%=1THEN=TRUE IFT%=2THEN=FALSE PROCc(A%):a$="SCORE ADVANCE":x%=FNc(a$):y%=A%!a%+A%!k%-20:PROCb(x%,y%,a$,0):a$="TABLE":y%-=h%!R%:x%=FNc(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",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%=FNl:IFT%=1THEN=TRUE IFT%=2THEN=FALSE PROCc(A%):a$="KEYBOARD CONTROLS":x%=FNc(a$):y%=A%!a%+A%!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",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%=FNl:IFT%=1THEN=TRUE IFT%=2THEN=FALSE PROCc(A%):a$="TODAY'S":IFca%THENa$="ALL TIME" x%=FNc(a$):y%=A%!a%+A%!k%-20:PROCb(x%,y%,a$,0):a$="HI SCORES":y%-=h%!R%:x%=FNc(a$):PROCb(x%,y%,a$,0):y%=(A%!a%+A%!k%)-100:a$=" POS."+" PLAYER."+STRING$(12," ")+"SCORE.":a$+=STRING$(3," ")+"RACK.":x%=FNc(a$):PROCb(x%,y%,a$,0):y%-=2*h%!R%:FORi%=1TO10:IFi%<10THEN a$=" "+STR$(i%)+". " ELSE:a$=" "+STR$(i%)+". " ENDIF s$=FNk(a$(i%)):a$+=FNe(s$,8," ",FALSE):a$+=" .... ":a$+=FNp(STR$(c%(i%)),10):a$+=" ... "+FNp(STR$(d%(i%)),3):x%=FNc(a$):PROCb(x%,y%-(i%*(h%!R%+5)),a$,0):NEXTi%:T%=FNl:IFT%=1THEN=TRUE IFT%=2THEN=FALSE ENDWHILE:IFINKEY(-17)THEN=TRUE =FALSE DEFFNl: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 DEFFNc(a$):LOCALQ%:Q%=LEN(a$)*h%!X%:=A%!b%+FNg(Q%,A%!f%) DEFPROCu:LOCALm%,o%,d%,e%,v%:LOCALB%:LOCALb%(),a%():LOCALV%,Y%,Ba%,Ca%:LOCALDa%,Ea%,Z%:LOCALFa%,Q%,a$,x%,y%,i%:DIMm% 52,o% 52,d% 52,e% 64,B% 16,b%(10,6):DIMv% 16,a%(7):V%=0:_%=4:Y%=8:Ba%=12:Ca%=ja%:Da%=la%:Ea%=ma%:Z%=pa% m%!f%=FNa(30,1):m%!k%=FNa(15,2):m%!b%=FNb(m%,h%):m%!a%=50:m%!J%=6:m%!I%=m%!J%:B%!f%=FNa(20,1):B%!k%=FNa(20,2):d%!f%=FNa(40,1):d%!k%=FNa(20,2):d%!a%=K%!ta%-(10+d%!k%):d%!J%=5:d%!q%=FALSE:d%!la%=1 o%!f%=FNa(5,1):o%!k%=FNa(20,2):o%!q%=FALSE:o%!J%=10:v%!Y%=1:v%!_%=0:v%!V%=3:v%!Ba%=FALSE:e%!Ca%=FNa(20,1):e%!Da%=10:e%!Ea%=6:e%!q%=TRUE:FORi%=1TO7:a%(i%)=FNr(52):a%(i%)!f%=FNa(5,1):a%(i%)!k%=FNa(20,2):NEXTi% PROCe(K%!ta%):PROCe(K%!ua%):PROCv(0,c%(1),v%!V%,v%!Y%):PROCw:PROCa("base",m%!b%,m%!a%):REPEAT:Fa%=FALSE:IFINKEY(-74)THENPROCx(m%!b%,m%!a%) IFINKEY(-98)THENPROCy:Fa%=TRUE IFINKEY(-67)THENPROCz:Fa%=TRUE IFINKEY(-102)THENPROCn IFINKEY(-82)THENPROCm IFINKEY(-17)THENPROCA IFINKEY(-34)THENPROCB IFINKEY(-35)THENPROCo IFFa%THEN m%!b%+=m%!I%:PROCa("base",m%!b%,m%!a%) ENDIF IFv%!V%>0THEN PROCC:PROCD:PROCE:PROCF ENDIF WAIT:UNTILv%!V%=0:E%!f%=240:E%!k%=40:E%=FNm(E%,h%):E%!a%-=3:PROCh(E%):PROCl("GAME OVER!!!",11):PROCd(750):IFNOTv%!Ba%THEN IFv%!_%>=c%(10)THEN PROCG(v%) ENDIF ENDIF ENDPROC DEFPROCy:IFm%!b%<=0THEN m%!b%=0 ELSE:m%!I%=0-m%!J% ENDIF ENDPROC DEFPROCz:IFm%!b%>=h%!f%-m%!f%THEN m%!b%=h%!f%-m%!f% ELSE:m%!I%=0+m%!J% ENDIF ENDPROC DEFPROCx(x%,y%):IFNOTo%!q%THEN o%!q%=TRUE:o%!b%=x%+(m%!f%/2):o%!a%=y%+m%!k% ENDIF ENDPROC DEFPROCm:REPEAT:UNTILNOTINKEY(-82):OSCLI"ScreenSave .Dump"+STR$(aa%):aa%+=1:ENDPROC DEFPROCA:v%!V%=0:v%!Ba%=TRUE:ENDPROC DEFPROCn:REPEAT:UNTILNOTINKEY(-102):ba%=FNh(ba%):IFba%=1THENOSCLI"PlayStart"ELSEOSCLI"PlayPause" ENDPROC DEFPROCB:IFd%!q%THEN IFNOTd%!W%THEN d%!W%=TRUE:d%!ia%=d%!ja%:PROCa("saucer_2",d%!b%,d%!a%) ENDIF ENDIF ENDPROC DEFPROCC:LOCALGa%,Ha%:Ga%=ia%:IFo%!q%THEN o%!Ga%=FALSE:IFo%!a%>=K%!ta%-o%!k%THEN o%!q%=FALSE:o%!Ga%=TRUE ENDIF IFo%!Ga%THEN Ha%=FNd(o%,52):Ha%!a%-=2:PROCc(Ha%) ELSE:PROCa("shell",o%!b%,o%!a%) ENDIF o%!a%+=o%!J% ENDIF ENDPROC DEFPROCD:LOCALIa%,D%,Ja%,Ka%,e$:Ia%=ia%:D%=ja%:Ja%=ka%:Ka%=la%:IFNOTd%!q%THEN IFFNi(4)ANDFNi(5)THEN d%!q%=TRUE:d%!W%=FALSE:d%!Ja%=0:d%!Ka%=0:IFFNi(50)THEN d%!I%=0-d%!J%:d%!b%=h%!f% ELSE:d%!I%=0+d%!J%:d%!b%=0-d%!f% ENDIF ENDIF ELSE:d%!Ja%+=1:d%!D%+=1:IFd%!b%<=0-d%!f%ANDSGN(d%!I%)=-1THEN d%!Ia%=FALSE:d%!q%=FALSE:d%!D%=0:ENDPROC ENDIF IFd%!b%>h%!f%ANDSGN(d%!I%)=1THEN d%!Ia%=FALSE:d%!q%=FALSE:d%!D%=0:ENDPROC ENDIF IFNOTd%!W%THEN IFFNj(o%,d%)THEN PROCc(o%):PROCa("saucer_2",d%!b%,d%!a%):d%!Ia%=d%!D%:d%!W%=TRUE:o%!q%=FALSE:PROCf(500) ENDIF ELSE:IFFNj(o%,d%)THEN PROCc(o%):o%!q%=FALSE ENDIF ENDIF IFNOTd%!W%THEN IFd%!Ja%>=100THENd%!Ja%=0 IFd%!Ja%MOD10=0THEN d%!Ka%=FNh(d%!Ka%) ENDIF e$="saucer_"+STR$(d%!Ka%):PROCa(e$,d%!b%,d%!a%):d%!b%+=d%!I% ELSE:IFd%!D%>=d%!Ia%+80THEN PROCc(d%):d%!q%=FALSE:d%!Ia%=FALSE:d%!D%=0:d%!Ka%=TRUE ELSE:IFd%!D%>=d%!Ia%+60THEN PROCa("saucer_5",d%!b%,d%!a%) ELSE:IFd%!D%>=d%!Ia%+40THEN PROCa("saucer_4",d%!b%,d%!a%) ELSE:IFd%!D%>=d%!Ia%+20THEN PROCa("saucer_3",d%!b%,d%!a%) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDPROC DEFPROCE:LOCALLa%,z%,C%,H%,Ma%,Na%,Oa%,Pa%:LOCALL%,D%,Qa%,Ra%:L%=ia%:D%=ka%:Qa%=na%:Ra%=oa%:e%!D%+=1:IFe%!D%MOD5=0THENe%!L%=FNh(e%!L%) IFe%!D%>10000THENe%!D%=0 La%=e%!b%+e%!f%:Pa%=0-((e%!Qa%-1)*(B%!f%+e%!Ca%)):IFLa%>=h%!f%THEN e%!I%=0-e%!J%:PROCp ENDIF IFe%!b%<=Pa%THEN e%!I%=0+e%!J%:PROCp ENDIF Pa%=e%!a%+((e%!Z%-1)*B%!k%):IFPa%<=m%!a%+m%!k%THEN PROCo:ENDPROC ENDIF IFFNj(o%,e%)THEN z%=B%!f%+e%!Ca%:IF(o%!b%-e%!b%)MODz%<=B%!f%THEN C%=((o%!a%-e%!a%)DIVB%!k%)+1:H%=((o%!b%-e%!b%)DIVz%)+1:IFSGN(b%(H%,C%))=1THEN b%(H%,C%)=-5:PROCc(o%):o%!q%=FALSE:e%!W%+=1:CASEC%OF WHEN1,2:PROCf(50) WHEN3,4:PROCf(75) WHEN5,6:PROCf(100) ENDCASE ENDIF ENDIF ENDIF IFe%!W%>=e%!Da%*e%!Ea%THEN v%!Y%+=1:PROCc(e%):PROCe(K%!ua%):PROCg(v%!V%):PROCi(v%!Y%):PROCq ENDIF Ma%=TRUE:Na%=TRUE:FORC%=1TOe%!Ea%:IFb%(e%!Ra%,C%)<>0THENMa%=FALSE IFb%(e%!Qa%,C%)<>0THENNa%=FALSE NEXTC%:Oa%=TRUE:FORH%=1TOe%!Da%:IFb%(H%,e%!Z%)<>0THENOa%=FALSE NEXTH%:IFNa%THENe%!Qa%+=1 IFMa%THEN e%!f%-=(B%!f%+e%!Ca%):e%!Ra%-=1 ENDIF IFOa%THENe%!Z%+=1 e%!b%+=e%!I%:PROCj:ENDPROC DEFPROCF:LOCALD%,L%,Sa%,Ta%,i%,j%,x%,y%,Ua%,Va%,e$:D%=ia%:L%=ja%:Sa%=ka%:FORi%=1TO7:IFNOTa%(i%)!q%THEN Ua%=RND(10):Va%=v%!Y%+5:IFVa%>100THENVa%=100 IFFNi(Va%)ANDFNi(4)THEN IFb%(Ua%,e%!Z%)>0THEN x%=e%!b%+(Ua%-1)*(B%!f%+e%!Ca%):y%=e%!a%+(e%!Z%-1)*B%!k%:a%(i%)!b%=x%+B%!f%/2:a%(i%)!a%=y%:a%(i%)!q%=TRUE:a%(i%)!W%=FALSE:a%(i%)!D%=0:a%(i%)!Sa%=RND(2):a%(i%)!L%=0:Ta%=4:IFa%(i%)!Sa%=2THENTa%=Ta%/2 a%(i%)!J%=Ta%:a%(i%)!I%=a%(i%)!J% ENDIF ENDIF ELSE:a%(i%)!D%+=1:IFa%(i%)!D%MOD5=0THEN a%(i%)!L%=FNh(a%(i%)!L%) ENDIF IFa%(i%)!D%>10000THENa%(i%)!D%=0 a%(i%)!a%-=a%(i%)!I%:e$="miss_"+STR$(a%(i%)!Sa%)+STR$(a%(i%)!L%):PROCa(e$,a%(i%)!b%,a%(i%)!a%):IFa%(i%)!a%<=K%!ua%+(K%!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%):PROCd(20):WAIT:NEXTj%:PROCc(m%):IFo%!q%THEN PROCc(o%):o%!q%=FALSE ENDIF m%!b%=FNb(m%,h%):v%!V%-=1:PROCg(v%!V%):PROCc(a%(i%)):a%(i%)!q%=FALSE:PROCa("base",m%!b%,m%!a%) ENDIF IFFNj(o%,a%(i%))ANDa%(i%)!q%THEN IFa%(i%)!Sa%=1THEN a%(i%)!q%=FALSE:PROCf(5):PROCc(a%(i%)) ENDIF PROCc(o%):o%!q%=FALSE ENDIF ENDIF NEXTi%:ENDPROC DEFPROCs(Wa%):LOCALi%,M%,n$:FORi%=1TO10:IFi%MOD2=0THENn$="Software"ELSEn$="DynaByte" a$(i%)=FNk(n$):c%(i%)=(11-i%)*1000:d%(i%)=0:NEXTi%:IFWa%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 DEFPROCG(v%):LOCALi%,Xa%,Y%,_%,F%,G%,Q%,x%,y%,g%,Ya%:LOCALE%,a$:DIMF% 16,G% 16,E% 16:_%=4:Y%=8:F%!f%=FNa(100,1):F%!k%=FNa(40,2):F%!b%=FNb(F%,h%):F%!a%=800:G%!f%=FNa(150,1):G%!k%=FNa(40,2):G%!b%=FNb(G%,h%):G%!a%=F%!a%-G%!k% Xa%=0:FORi%=10TO1STEP-1:IFv%!_%>=c%(i%)THENXa%=i% NEXTi%:FORi%=9TOXa%STEP-1:a$(i%+1)=a$(i%):c%(i%+1)=c%(i%):d%(i%+1)=d%(i%):NEXTi%:c%(Xa%)=v%!_%:d%(Xa%)=v%!Y%:CLS:PROCe(K%!ta%):PROCe(K%!ua%):PROCa("space",F%!b%,F%!a%):PROCa("invaders",G%!b%,G%!a%):a$="Congratulations!!! You have earned the rank of " a$+=STR$(Xa%)+FNs(Xa%):Q%=LEN(a$)*h%!X%:x%=FNg(Q%,h%!f%):y%=G%!a%-170:PROCb(x%,y%,a$,0):E%!f%=165:E%!k%=40:E%=FNm(E%,h%):PROCh(E%):x%=E%!b%+20:y%=E%!a%+12:a$="":i%=1:Ya%=FALSE:OSCLI"FX 21,0":REPEAT:g%=GET:CASEg%OF WHEN13:Ya%=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 UNTILYa%:IFa$=""ORa$=" "THENa$="Anon ..." a$(Xa%)=FNk(a$):IFca%THENPROCr ENDPROC DEFFNt(Za%):LOCALGa%:Ga%=FALSE:IFZa%>=32ANDZa%<=126THENGa%=TRUE =Ga% DEFPROCv(_a%,`a%,l%,r%):LOCALx%,a$:a$="SCORE :-"+FNe(STR$(_a%),10," ",TRUE):PROCb(0,h%!k%-h%!R%,a$,0):a$="HI SCORE :-":a$+=FNe(STR$(`a%),10," ",TRUE):x%=h%!f%-LEN(a$)*h%!X%:PROCb(x%,h%!k%-h%!R%,a$,0):PROCg(l%):PROCi(r%):ENDPROC DEFPROCg(ab%):LOCALa$:PROCa("base",0,0):a$=" = "+STR$(ab%):PROCb(m%!f%,0,a$,0):ENDPROC DEFPROCi(ab%):LOCALx%,a$:a$="RACK :-"+FNe(STR$(ab%),3,"0",TRUE):x%=h%!f%-LEN(a$)*h%!X%:PROCb(x%,0,a$,0):ENDPROC DEFPROCf(bb%):LOCALx%,a$:v%!_%+=bb%:a$="SCORE :-"+FNe(STR$(v%!_%),10," ",TRUE):PROCb(0,h%!k%-h%!R%,a$,0):IFv%!_%>c%(1)THEN a$="HI SCORE :-":a$+=FNe(STR$(v%!_%),10," ",TRUE):x%=h%!f%-LEN(a$)*h%!X%:PROCb(x%,h%!k%-h%!R%,a$,0) ENDIF ENDPROC DEFPROCw:LOCALL%,Qa%,Ra%,Z%:L%=ia%:Qa%=na%:Ra%=oa%:Z%=pa%:PROCq:PROCj:ENDPROC DEFPROCq:LOCALC%,H%,s%:e%!b%=50:e%!a%=550:e%!L%=0:e%!W%=0:e%!J%=3:e%!I%=e%!J%:e%!Qa%=1:e%!Ra%=e%!Da%:e%!Z%=1:s%=(e%!Da%*B%!f%)+((e%!Da%-1)*e%!Ca%):e%!f%=s%:e%!k%=e%!Ea%*B%!k%:FORH%=1TOe%!Da%:FORC%=1TOe%!Ea% b%(H%,C%)=((C%+1)/2)+(e%!L%*10):NEXTC%:NEXTH%:ENDPROC DEFPROCj:LOCALC%,H%,x%,y%,w%:DIMw% 16:FORH%=e%!Qa%TOe%!Ra%:x%=e%!b%+((H%-1)*(B%!f%+e%!Ca%)):FORC%=e%!Z%TOe%!Ea%:y%=e%!a%+((C%-1)*B%!k%):IFb%(H%,C%)>0THEN b%(H%,C%)=((C%+1)/2)+(e%!L%*10) ENDIF IFb%(H%,C%)<>0THEN CASESGN(b%(H%,C%))OF WHEN-1:PROCH(x%,y%,H%,C%) WHEN1:PROCa("inv_"+STR$(b%(H%,C%)),x%,y%) ENDCASE ELSE:w%!b%=x%:w%!a%=y%:w%!f%=B%!f%:w%!k%=B%!k%:PROCc(w%) ENDIF NEXTC%:NEXTH%:ENDPROC DEFPROCH(x%,y%,r%,c%):LOCALcb%:DIMcb% 16:b%(r%,c%)+=1:PROCa("inv_4",x%,y%):IFb%(r%,c%)=0THEN cb%!b%=x%:cb%!a%=y%:cb%!f%=B%!f%:cb%!k%=B%!k%:PROCc(cb%) ENDIF ENDPROC DEFPROCp:LOCALw%,i%:DIMw% 16:FORi%=1TO3:e%!a%-=B%!k%/3:PROCj:NEXTi%:w%!b%=e%!b%:w%!a%=e%!a%+e%!k%:w%!f%=e%!f%:w%!k%=B%!k%:PROCc(w%):ENDPROC DEFPROCo:LOCALP%,U%,L%,db%,J%,i%,f$:J%=1:eb%=24:DIMP% 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%=FNb(m%,h%):P%!b%=0-B%!f%:P%!a%=m%!a%:P%!I%=J%:U%!b%=h%!f%:U%!a%=m%!a%:U%!I%=0-J%:v%!V%=0:PROCe(K%!ua%):PROCg(v%!V%):PROCi(v%!Y%):PROCa("base",m%!b%,m%!a%):L%=0:db%=FALSE:REPEAT:P%!b%+=P%!I%:P%!eb%=P%!b%+B%!f%:U%!b%+=U%!I%:L%+=1 IFL%MOD20=0THENdb%=FNh(db%) IFdb%THENf$="inv_11"ELSEf$="inv_1" PROCa(f$,P%!b%,P%!a%):PROCa(f$,U%!b%,U%!a%):PROCd(2):WAIT:UNTILP%!eb%>=m%!b%:FORi%=1TO10:PROCa("inv_1",P%!b%,P%!a%):PROCa("inv_1",U%!b%,U%!a%):PROCd(20):PROCa("inv_11",P%!b%,P%!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$):LOCALfb%,O%:O%=FNu(h$)+256:DIMfb% O%:!fb%=O%:fb%!4=0:fb%!8=16:fb%!12=16:SYSda%,256+10,fb%,h$:SYSda%,256+17,fb%:=fb% DEFPROCb(x%,y%,a$,gb%):LOCALi%,hb%:ga%=fa%:hb%=h%!X%:FORi%=1TOLEN(a$):PROCa(STR$(ASC(MID$(a$,i%,1))),x%+((i%-1)*hb%),y%):IFgb%>0THENPROCd(gb%) NEXTi%:ga%=ea%:ENDPROC DEFPROCa(k$,x%,y%):LOCALib%:SYSda%,256+24,ga%,k$TO,,ib%:SYSda%,512+34,ga%,ib%,x%,y%,0:ENDPROC DEFPROCc(p%):GCOL0,0TINT0:RECTANGLEFILLp%!b%,p%!a%,p%!f%,p%!k%:ENDPROC DEFFNg(jb%,h%):=(h%/2)-(jb%/2) DEFPROCl(a$,kb%):LOCALQ%,y%:Q%=LEN(a$)*h%!X%:y%=(h%!k%/2)-(h%!R%/2):PROCb(FNg(Q%,h%!f%),y%,a$,kb%):ENDPROC DEFFNb(lb%,mb%):=(mb%!f%/2)-(lb%!f%/2) DEFFNm(lb%,mb%):LOCALx%,y%:lb%!b%=(mb%!f%/2)-(lb%!f%/2):lb%!a%=(mb%!k%/2)-(lb%!k%/2):=lb% DEFPROCe(a%):LOCALi%,nb%:nb%=h%!f%/K%!f%:FORi%=1TOnb%+1:PROCa("rail",(i%-1)*K%!f%,a%):NEXTi%:ENDPROC DEFPROCh(p%):LOCALx%,y%,ob%,pb%,qb%,rb%,i%:ob%=FNa(3,1):pb%=FNa(3,2):qb%=1:rb%=3:FORi%=1TOp%!f%:x%=p%!b%+((i%-1)*qb%):PROCa("box_x",x%,p%!a%):PROCa("box_x",x%,p%!a%+(p%!k%-(2*rb%))):NEXTi%:x%=p%!b%+(p%!f%-ob%):FORi%=1TOp%!k%-1 PROCa("box_y",p%!b%,p%!a%+((i%-1)*qb%)):PROCa("box_y",x%,p%!a%+((i%-1)*qb%)):NEXTi%:PROCa("box_bl",p%!b%,p%!a%):PROCa("box_tl",p%!b%,(p%!a%+p%!k%)-pb%):PROCa("box_br",p%!b%+(p%!f%-ob%),p%!a%):x%=(p%!b%+p%!f%)-ob%:y%=(p%!a%+p%!k%)-pb%:PROCa("box_tr",x%,y%):ENDPROC DEFPROCk:LOCALw%:DIMw% 20:w%!0=4:w%!4=5:w%!8=11:w%!12=12:w%!16=-1:SYS"OS_ReadVduVariables",w%,w%:h%!qa%=w%!0:h%!ra%=w%!4:h%!f%=(w%!8)+1<h%!sa%THENPROCk CASEsb%OF WHEN1:tb%=O%<>h%!qa% WHEN4:tb%=O%>>h%!ra% OTHERWISE:ERROR255,"Unknown FNconv_units() operation : "+STR$(sb%) ENDCASE =tb% DEFFNj(p%,vb%):LOCALwb%,xb%,yb%,zb%:yb%=FALSE:zb%=FALSE:IFp%!q%ANDvb%!q%THEN wb%=vb%!b%+vb%!f%:xb%=vb%!a%+vb%!k%:IFp%!b%>=vb%!b%ANDp%!b%=vb%!a%ANDp%!a%=t%:ENDPROC DEFFNh(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(O%):LOCALw%:DIMw% O%:=w% DEFFNe(a$,Cb%,j$,Db%):LOCALEb%,b$:Eb%=Cb%-LEN(a$):IFEb%<=0THEN b$=LEFT$(a$,Cb%) ELSE:IFDb%THEN b$=STRING$(Cb%,j$):RIGHT$(b$,LEN(a$))=a$ ELSE:b$=a$+STRING$(Eb%,j$) ENDIF ENDIF =b$ DEFFNp(a$,Cb%):LOCALb$:b$=STRING$(Cb%," "):RIGHT$(b$,LEN(a$))=a$:=b$ DEFFNf(d$):LOCALFb%:SYS"XOS_File",17,d$TOFb%:=Fb% DEFFNu(d$):LOCALO%:SYS"XOS_File",5,d$TO,,,,O%:=O% DEFFNo(sb%,d$):LOCALM%,Gb%,Hb%,Ib%:Ib%=FALSE:CASEsb%OF WHEN0:M%=OPENUP(d$+"chkfile") WHEN1:M%=OPENUP(d$) OTHERWISE:ERROR255,"Unknown FNfs_writeable op :"+STR$(sb%) ENDCASE IFM%<>0THEN SYS"XOS_Args",254,M%TOHb%;Gb%:IF(Gb%AND1)THEN CLOSE#M%:ERROR255,"Unknown FNfs_writeable fault." ENDIF IF((Hb%AND(1<<7))<>0)THENIb%=TRUE CLOSE#M% ENDIF =Ib%