REM Acorn Invaders REM Packed by MH's BASCrunch v1.31c 30/1/08 On 26 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...":_%=FALSE:c$=".":IFFNg(c$+"Resources.Gfx0")<>1THEN_%=TRUE IFFNg(c$+"Resources.Gfx1")<>1THEN_%=TRUE IFFNg(c$+"Resources.Intro")<>1THEN_%=TRUE IF_%THENERROR255,"File Missing!!" OSCLI"Playmod "+c$+"Resources.Intro":_%=FALSE:aa%=0:ba%=1:ca%=TRUE:DIMa$(10),b%(10):DIMc%(10):SYS"OS_SWINumberFromString",,"OS_SpriteOp"TOda%:ea%=FNn(c$+"Resources.Gfx0"):fa%=FNn(c$+"Resources.Gfx1"):ga%=ea% f$=c$+"Resources.HiTable":IFFNg(f$)<>1THEN IFNOTFNo(0,c$)THENca%=FALSE PROCs(ca%) ELSE:IFNOTFNo(1,f$)THENca%=FALSE PROCt ENDIF b%=0:a%=4:f%=8:j%=12:H%=16:I%=20:A%=24:ha%=28:ia%=32:ja%=36:ka%=40:la%=44:ma%=48:na%=52:oa%=56:pa%=60:qa%=16:ra%=20:sa%=24:T%=28:G%=32:ta%=16:ua%=20:DIMh% 36,K% 24,B% 16:CLS:PROCk:h%!T%=FNa(8,1):h%!G%=FNa(8,2)+7 K%!f%=FNa(6,1):K%!j%=FNa(6,2):K%!ta%=h%!j%-50:K%!ua%=30:REPEAT:CLS:_%=FNq:IFNOT_%THENCLS:PROCu UNTIL_%:CLS:B%!f%=220:B%!j%=40:B%=FNj(B%,h%):B%!a%-=3:PROCh(B%):PROCl("GOODBYE!!!",10):IFba%=1THEN FORi%=127TO1STEP-2:OSCLI"PlayVolume "+STR$(i%):PROCd(4):NEXTi%:OSCLI"PlayStop":OSCLI"PlayVolume 127" ENDIF END DEFFNq:LOCALi%,D%,E%,p%,O%,d%,Q%,va%:LOCALwa%,L%,xa%,ya%,za%,x%,y%,R%,s$,a$:DIMD% 16,E% 16,p% 16:DIMd% 16,Q% 16,L% 16:D%!f%=FNa(100,1):D%!j%=FNa(40,2):D%!b%=FNc(D%,h%):D%!a%=800:E%!f%=FNa(150,1):E%!j%=FNa(40,2):E%!b%=FNc(E%,h%) E%!a%=D%!a%-E%!j%:p%!f%=640:p%!j%=500:p%!b%=FNc(p%,h%):p%!a%=200:d%!f%=FNa(40,1):d%!j%=FNa(20,2):d%!b%=p%!b%+150:d%!a%=(p%!a%+p%!j%)-160:Q%!f%=FNa(20,1):Q%!j%=FNa(20,2):Q%!b%=p%!b%+150+FNc(Q%,d%) va%=FNd(Q%,16):wa%=FNd(Q%,16):Q%!a%=p%!a%+100:va%!a%=Q%!a%+Q%!j%+40:wa%!a%=va%!a%+va%!j%+40:L%!f%=FNa(20,1):L%!j%=FNa(20,2):L%!b%=p%!b%+150+FNc(L%,d%):xa%=FNd(L%,16):ya%=FNd(L%,16):Aa%=FNd(L%,16):za%=FNd(L%,16) :L%!a%=(p%!a%+p%!j%)-160:xa%!a%=L%!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-D%!f%TOD%!b%STEP5:WAIT:PROCa("space",i%,D%!a%):PROCd(1):NEXTi%:FORi%=h%!f%TOE%!b%STEP-5:WAIT:PROCa("invaders",i%,E%!a%):PROCd(1):NEXTi% a$="PRESS SPACE TO PLAY":O%=LEN(a$)*h%!T%:y%=170:PROCb(FNf(O%,h%!f%),y%,a$,11):a$="OR Q TO QUIT":O%=LEN(a$)*h%!T%:y%-=h%!G%:PROCb(FNf(O%,h%!f%),y%,a$,11):WHILENOTINKEY(-99)ANDNOTINKEY(-17)ANDNOTINKEY(-82):PROCc(p%):a$="GAME CREDITS":x%=FNb(a$):y%=p%!a%+p%!j%-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%-=h%!G%: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%-=h%!G%:PROCb(x%,y%,a$,0):a$="right direction when things didn't quite":x%=FNb(a$):y%-=h%!G%:PROCb(x%,y%,a$,0):a$="go according to plan.":x%=FNb(a$):y%-=h%!G%:PROCb(x%,y%,a$,0) a$="Thanks also go out to Jamie's Computer":x%=FNb(a$):y%-=(2*h%!G%):PROCb(x%,y%,a$,0):a$="Club, who have let me spend so much time":x%=FNb(a$):y%-=h%!G%:PROCb(x%,y%,a$,0):a$=" on this project.":x%=FNb(a$):y%-=h%!G%:PROCb(x%,y%,a$,0) R%=FNh:IFR%=1THEN=TRUE IFR%=2THEN=FALSE PROCc(p%):a$="SCORE ADVANCE":x%=FNb(a$):y%=p%!a%+p%!j%-20:PROCb(x%,y%,a$,0):a$="TABLE":y%-=h%!G%:x%=FNb(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",Q%!b%,Q%!a%):PROCb(x%,Q%!a%+12,"= 50 POINTS !",0):R%=FNh:IFR%=1THEN=TRUE IFR%=2THEN=FALSE PROCc(p%):a$="KEYBOARD CONTROLS":x%=FNb(a$):y%=p%!a%+p%!j%-20:PROCb(x%,y%,a$,0):x%=L%!b%+L%!f%+10:PROCa("key_z",L%!b%,L%!a%):PROCb(x%,L%!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):R%=FNh:IFR%=1THEN=TRUE IFR%=2THEN=FALSE PROCc(p%):a$="TODAY'S":IFca%THENa$="ALL TIME" x%=FNb(a$):y%=p%!a%+p%!j%-20:PROCb(x%,y%,a$,0):a$="HI SCORES":y%-=h%!G%:x%=FNb(a$):PROCb(x%,y%,a$,0):y%=(p%!a%+p%!j%)-100:a$=" POS."+" PLAYER."+STRING$(12," ")+"SCORE.":a$+=STRING$(3," ")+"RACK.":x%=FNb(a$):PROCb(x%,y%,a$,0):y%-=2*h%!G%: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$(b%(i%)),10):a$+=" ... "+FNp(STR$(c%(i%)),3):x%=FNb(a$):PROCb(x%,y%-(i%*(h%!G%+5)),a$,0):NEXTi%:R%=FNh:IFR%=1THEN=TRUE IFR%=2THEN=FALSE ENDWHILE:IFINKEY(-17)THEN=TRUE =FALSE DEFFNh: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%,O%:O%=LEN(a$)*h%!T%:=p%!b%+FNf(O%,p%!f%) DEFPROCu:LOCALk%,m%,d%,e%,q%:LOCALC%:LOCALa%():LOCALU%,X%,V%,Ba%:LOCALM%,`%,Ca%,Da%,Ea%,Fa%:LOCALGa%,O%,a$,x%,y%:DIMk% 52,m% 52,d% 52,e% 64,C% 16,a%(10,6):DIMq% 16:U%=0:W%=4:X%=8:Ha%=12:V%=ia%:Ba%=ja%:M%=ka%:`%=la%:Ca%=ma%:Da%=na%:Ea%=oa%:Fa%=pa% k%!f%=FNa(30,1):k%!j%=FNa(15,2):k%!b%=FNc(k%,h%):k%!a%=50:k%!I%=6:k%!H%=k%!I%:C%!f%=FNa(20,1):C%!j%=FNa(20,2):d%!f%=FNa(40,1):d%!j%=FNa(20,2):d%!a%=K%!ta%-(10+d%!j%):d%!I%=5:d%!A%=FALSE:d%!la%=1 m%!f%=FNa(5,1):m%!j%=FNa(20,2):m%!A%=FALSE:m%!I%=10:q%!X%=1:q%!W%=0:q%!U%=3:q%!Ha%=FALSE:e%!Ba%=FNa(20,1):e%!`%=10:e%!Ca%=6:e%!A%=TRUE:PROCe(K%!ta%):PROCe(K%!ua%):PROCv(0,b%(1),q%!U%,q%!X%):PROCo:PROCi:PROCa("base",k%!b%,k%!a%) REPEAT:Ga%=FALSE:IFINKEY(-74)THENPROCw(k%!b%,k%!a%) IFINKEY(-98)THENPROCx:Ga%=TRUE IFINKEY(-67)THENPROCy:Ga%=TRUE IFINKEY(-102)THENPROCn IFINKEY(-82)THENPROCm IFINKEY(-17)THENPROCz IFINKEY(-35)THENPROCp IFGa%THEN k%!b%+=k%!H%:PROCa("base",k%!b%,k%!a%) ENDIF IFq%!U%>0THEN PROCA:PROCB:PROCC ENDIF WAIT:UNTILq%!U%=0:B%!f%=240:B%!j%=40:B%=FNj(B%,h%):B%!a%-=3:PROCh(B%):PROCl("GAME OVER!!!",11):PROCd(750):IFNOTq%!Ha%THEN IFq%!W%>=b%(10)THEN PROCD(q%) ENDIF ENDIF ENDPROC DEFPROCx:IFk%!b%<=0THEN k%!b%=0 ELSE:k%!H%=0-k%!I% ENDIF ENDPROC DEFPROCy:IFk%!b%>=h%!f%-k%!f%THEN k%!b%=h%!f%-k%!f% ELSE:k%!H%=0+k%!I% ENDIF ENDPROC DEFPROCw(x%,y%):IFNOTm%!A%THEN m%!A%=TRUE:m%!b%=x%+(k%!f%/2):m%!a%=y%+k%!j% ENDIF ENDPROC DEFPROCm:REPEAT:UNTILNOTINKEY(-82):OSCLI"ScreenSave .Dump"+STR$(aa%):aa%+=1:ENDPROC DEFPROCz:q%!U%=0:q%!Ha%=TRUE:ENDPROC DEFPROCn:REPEAT:UNTILNOTINKEY(-102):ba%=FNi(ba%):IFba%=1THENOSCLI"PlayStart"ELSEOSCLI"PlayPause" ENDPROC DEFPROCA:LOCALIa%,Ja%:Ia%=ia%:IFm%!A%THEN m%!Ia%=FALSE:IFm%!a%>=K%!ta%-m%!j%THEN m%!A%=FALSE:m%!Ia%=TRUE ENDIF IFm%!Ia%THEN Ja%=FNd(m%,52):Ja%!a%-=2:PROCc(Ja%) ELSE:PROCa("shell",m%!b%,m%!a%) ENDIF m%!a%+=m%!I% ENDIF ENDPROC DEFPROCB:LOCALY%,M%,Ka%,La%:Y%=ia%:M%=ja%:Ka%=ka%:La%=la%:IFNOTd%!A%THEN IFFNl(4)ANDFNl(5)THEN d%!A%=TRUE:d%!ha%=FALSE:d%!Ka%=0:d%!La%=0:IFFNl(50)THEN d%!H%=0-d%!I%:d%!b%=h%!f% ELSE:d%!H%=0+d%!I%:d%!b%=0-d%!f% ENDIF ENDIF ELSE:d%!Ka%+=1:d%!M%+=1:IFd%!b%<=0-d%!f%ANDSGN(d%!H%)=-1THEN d%!Y%=FALSE:d%!A%=FALSE:d%!M%=0:ENDPROC ENDIF IFd%!b%>h%!f%ANDSGN(d%!H%)=1THEN d%!Y%=FALSE:d%!A%=FALSE:d%!M%=0:ENDPROC ENDIF IFNOTd%!ha%THEN IFFNm(m%,d%)THEN PROCc(m%):PROCa("saucer_2",d%!b%,d%!a%):d%!Y%=d%!M%:d%!ha%=TRUE:m%!A%=FALSE:PROCf(500) ENDIF ELSE:IFFNm(m%,d%)THEN PROCc(m%):m%!A%=FALSE ENDIF ENDIF IFNOTd%!ha%THEN IFd%!Ka%>=100THENd%!Ka%=0 IFd%!Ka%MOD10=0THEN d%!La%=FNi(d%!La%) ENDIF IFd%!La%=0THEN PROCa("saucer_0",d%!b%,d%!a%) ELSE:PROCa("saucer_1",d%!b%,d%!a%) ENDIF d%!b%+=d%!H% ELSE:IFd%!M%>=d%!Y%+125THEN PROCc(d%):d%!A%=FALSE:d%!Y%=FALSE:d%!M%=0:d%!La%=TRUE ELSE:IFd%!M%>=d%!Y%+100THEN PROCa("saucer_5",d%!b%,d%!a%) ELSE:IFd%!M%>=d%!Y%+75THEN PROCa("saucer_4",d%!b%,d%!a%) ELSE:IFd%!M%>=d%!Y%+50THEN PROCa("saucer_3",d%!b%,d%!a%) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDPROC DEFPROCC:LOCALMa%,z%,w%,F%,Na%,Oa%,Pa%,Z%:e%!M%+=1:IFe%!M%MOD5=0THENe%!V%=FNi(e%!V%) IFe%!M%>10000THENe%!M%=0 Ma%=e%!b%+e%!f%:Z%=0-((e%!Da%-1)*(C%!f%+e%!Ba%)):IFMa%>=h%!f%THEN e%!H%=0-e%!I%:PROCq ENDIF IFe%!b%<=Z%THEN e%!H%=0+e%!I%:PROCq ENDIF Z%=e%!a%+((e%!Fa%-1)*C%!j%):IFZ%<=k%!a%+k%!j%THEN PROCe(K%!ua%):PROCg(q%!U%):PROCj(q%!X%):PROCp:ENDPROC ENDIF IFFNm(m%,e%)THEN z%=C%!f%+e%!Ba%:IF(m%!b%-e%!b%)MODz%<=C%!f%THEN w%=((m%!a%-e%!a%)DIVC%!j%)+1:F%=((m%!b%-e%!b%)DIVz%)+1:IFSGN(a%(F%,w%))=1THEN a%(F%,w%)=-5:PROCc(m%):m%!A%=FALSE:e%!ha%+=1:CASEw%OF WHEN1,2:PROCf(50) WHEN3,4:PROCf(75) WHEN5,6:PROCf(100) ENDCASE ENDIF ENDIF ENDIF IFe%!ha%>=e%!`%*e%!Ca%THEN q%!X%+=1:PROCe(K%!ua%):PROCg(q%!U%):PROCj(q%!X%):PROCc(e%):PROCo ENDIF Na%=TRUE:Oa%=TRUE:FORw%=1TOe%!Ca%:IFa%(e%!Ea%,w%)<>0THENNa%=FALSE IFa%(e%!Da%,w%)<>0THENOa%=FALSE NEXTw%:Pa%=TRUE:FORF%=1TOe%!`%:IFa%(F%,e%!Fa%)<>0THENPa%=FALSE NEXTF%:IFOa%THENe%!Da%+=1 IFNa%THEN e%!f%-=(C%!f%+e%!Ba%):e%!Ea%-=1 ENDIF IFPa%THENe%!Fa%+=1 e%!b%+=e%!H%:PROCi:ENDPROC DEFPROCs(Qa%):LOCALi%,J%,n$:FORi%=1TO10:IFi%MOD2=0THENn$="Software"ELSEn$="DynaByte" a$(i%)=FNk(n$):b%(i%)=(11-i%)*1000:c%(i%)=0:NEXTi%:IFQa%THENPROCr ENDPROC DEFPROCt:LOCALi%,J%:J%=OPENIN".Resources.HiTable":FORi%=1TO10:INPUT#J%,a$(i%),b%(i%):INPUT#J%,c%(i%):NEXTi%:CLOSE#J%:ENDPROC DEFPROCr:LOCALi%,J%:J%=OPENOUT".Resources.HiTable":FORi%=1TO10:PRINT#J%,a$(i%),b%(i%):PRINT#J%,c%(i%):NEXTi%:CLOSE#J%:ENDPROC DEFPROCD(q%):LOCALi%,Ra%,X%,W%,D%,E%,O%,x%,y%,g%,Sa%:LOCALB%,a$:DIMD% 16,E% 16,B% 16:W%=4:X%=8:D%!f%=FNa(100,1):D%!j%=FNa(40,2):D%!b%=FNc(D%,h%):D%!a%=800:E%!f%=FNa(150,1):E%!j%=FNa(40,2):E%!b%=FNc(E%,h%):E%!a%=D%!a%-E%!j% Ra%=0:FORi%=10TO1STEP-1:IFq%!W%>=b%(i%)THENRa%=i% NEXTi%:FORi%=9TORa%STEP-1:a$(i%+1)=a$(i%):b%(i%+1)=b%(i%):c%(i%+1)=c%(i%):NEXTi%:b%(Ra%)=q%!W%:c%(Ra%)=q%!X%:CLS:PROCe(K%!ta%):PROCe(K%!ua%):PROCa("space",D%!b%,D%!a%):PROCa("invaders",E%!b%,E%!a%):a$="Congratulations!!! You have earned the rank of " a$+=STR$(Ra%)+FNr(Ra%):O%=LEN(a$)*h%!T%:x%=FNf(O%,h%!f%):y%=E%!a%-170:PROCb(x%,y%,a$,0):B%!f%=165:B%!j%=40:B%=FNj(B%,h%):PROCh(B%):x%=B%!b%+20:y%=B%!a%+12:a$="":i%=1:Sa%=FALSE:OSCLI"FX 21,0":REPEAT:g%=GET:CASEg%OF WHEN13:Sa%=TRUE WHEN8:i%-=1:a$=LEFT$(a$,i%-1) OTHERWISE:IFi%<9ANDFNs(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 UNTILSa%:IFa$=""ORa$=" "THENa$="Anon ..." a$(Ra%)=FNk(a$):IFca%THENPROCr ENDPROC DEFFNs(Ta%):LOCALIa%:Ia%=FALSE:IFTa%>=32ANDTa%<=126THENIa%=TRUE =Ia% DEFPROCv(Ua%,Va%,l%,r%):LOCALx%,a$:a$="SCORE :-"+FNe(STR$(Ua%),10," ",TRUE):PROCb(0,h%!j%-h%!G%,a$,0):a$="HI SCORE :-":a$+=FNe(STR$(Va%),10," ",TRUE):x%=h%!f%-LEN(a$)*h%!T%:PROCb(x%,h%!j%-h%!G%,a$,0):PROCg(l%):PROCj(r%):ENDPROC DEFPROCg(Wa%):LOCALa$:PROCa("base",0,0):a$=" = "+STR$(Wa%):PROCb(k%!f%,0,a$,0):ENDPROC DEFPROCj(Wa%):LOCALx%,a$:a$="RACK :-"+FNe(STR$(Wa%),3,"0",TRUE):x%=h%!f%-LEN(a$)*h%!T%:PROCb(x%,0,a$,0):ENDPROC DEFPROCf(Xa%):LOCALx%,a$:q%!W%+=Xa%:a$="SCORE :-"+FNe(STR$(q%!W%),10," ",TRUE):PROCb(0,h%!j%-h%!G%,a$,0):IFq%!W%>b%(1)THEN a$="HI SCORE :-":a$+=FNe(STR$(q%!W%),10," ",TRUE):x%=h%!f%-LEN(a$)*h%!T%:PROCb(x%,h%!j%-h%!G%,a$,0) ENDIF ENDPROC DEFPROCo:LOCALw%,F%,s%:e%!b%=50:e%!a%=550:e%!V%=0:e%!ha%=0:e%!I%=3:e%!H%=e%!I%:e%!Da%=1:e%!Ea%=e%!`%:e%!Fa%=1:s%=(e%!`%*C%!f%)+((e%!`%-1)*e%!Ba%):e%!f%=s%:e%!j%=e%!Ca%*C%!j%:FORF%=1TOe%!`%:FORw%=1TOe%!Ca% a%(F%,w%)=((w%+1)/2)+(e%!V%*10):NEXTw%:NEXTF%:ENDPROC DEFPROCi:LOCALw%,F%,x%,y%,v%:DIMv% 16:FORF%=e%!Da%TOe%!Ea%:x%=e%!b%+((F%-1)*(C%!f%+e%!Ba%)):FORw%=e%!Fa%TOe%!Ca%:y%=e%!a%+((w%-1)*C%!j%):IFa%(F%,w%)>0THEN a%(F%,w%)=((w%+1)/2)+(e%!V%*10) ENDIF IFa%(F%,w%)<>0THEN CASESGN(a%(F%,w%))OF WHEN-1:PROCE(x%,y%,F%,w%) WHEN1:PROCa("inv_"+STR$(a%(F%,w%)),x%,y%) ENDCASE ELSE:v%!b%=x%:v%!a%=y%:v%!f%=C%!f%:v%!j%=C%!j%:PROCc(v%) ENDIF NEXTw%:NEXTF%:ENDPROC DEFPROCE(x%,y%,r%,c%):LOCALYa%:DIMYa% 16:a%(r%,c%)+=1:PROCa("inv_4",x%,y%):IFa%(r%,c%)=0THEN Ya%!b%=x%:Ya%!a%=y%:Ya%!f%=C%!f%:Ya%!j%=C%!j%:PROCc(Ya%) ENDIF ENDPROC DEFPROCq:LOCALv%,i%:DIMv% 16:FORi%=1TO3:e%!a%-=C%!j%/3:PROCi:NEXTi%:v%!b%=e%!b%:v%!a%=e%!a%+e%!j%:v%!f%=e%!f%:v%!j%=C%!j%:PROCc(v%):ENDPROC DEFPROCp:LOCALN%,S%,V%,Za%,I%,i%,e$:I%=1:_a%=24:DIMN% 28,S% 28:PROCc(e%):PROCc(k%):IFm%!A%THEN PROCc(m%):m%!A%=FALSE ENDIF IFd%!A%THEN PROCc(d%):d%!A%=FALSE ENDIF k%!b%=FNc(k%,h%):N%!b%=0-C%!f%:N%!a%=k%!a%:N%!H%=I%:S%!b%=h%!f%:S%!a%=k%!a%:S%!H%=0-I%:q%!U%=0:PROCg(q%!U%):PROCa("base",k%!b%,k%!a%):V%=0:Za%=FALSE:REPEAT:N%!b%+=N%!H%:N%!_a%=N%!b%+C%!f%:S%!b%+=S%!H%:V%+=1:IFV%MOD20=0THENZa%=FNi(Za%) IFZa%THENe$="inv_11"ELSEe$="inv_1" PROCa(e$,N%!b%,N%!a%):PROCa(e$,S%!b%,S%!a%):PROCd(2):WAIT:UNTILN%!_a%>=k%!b%:FORi%=1TO10:PROCa("inv_1",N%!b%,N%!a%):PROCa("inv_1",S%!b%,S%!a%):PROCd(20):PROCa("inv_11",N%!b%,N%!a%):PROCa("inv_11",S%!b%,S%!a%):PROCd(20):WAIT:NEXTi%:FORi%=1TO3 PROCa("base_"+STR$(i%),k%!b%,k%!a%):PROCd(20):WAIT:NEXTi%:PROCd(20):PROCc(k%):ENDPROC DEFFNn(g$):LOCAL`a%,P%:P%=FNt(g$)+256:DIM`a% P%:!`a%=P%:`a%!4=0:`a%!8=16:`a%!12=16:SYSda%,256+10,`a%,g$:SYSda%,256+17,`a%:=`a% DEFPROCb(x%,y%,a$,ab%):LOCALi%,bb%:ga%=fa%:bb%=h%!T%:FORi%=1TOLEN(a$):PROCa(STR$(ASC(MID$(a$,i%,1))),x%+((i%-1)*bb%),y%):IFab%>0THENPROCd(ab%) NEXTi%:ga%=ea%:ENDPROC DEFPROCa(j$,x%,y%):LOCALcb%:SYSda%,256+24,ga%,j$TO,,cb%:SYSda%,512+34,ga%,cb%,x%,y%,0:ENDPROC DEFPROCc(o%):GCOL0,0TINT0:RECTANGLEFILLo%!b%,o%!a%,o%!f%,o%!j%:ENDPROC DEFFNf(db%,h%):=(h%/2)-(db%/2) DEFPROCl(a$,eb%):LOCALO%,y%:O%=LEN(a$)*h%!T%:y%=(h%!j%/2)-(h%!G%/2):PROCb(FNf(O%,h%!f%),y%,a$,eb%):ENDPROC DEFFNc(fb%,gb%):=(gb%!f%/2)-(fb%!f%/2) DEFFNj(fb%,gb%):LOCALx%,y%:fb%!b%=(gb%!f%/2)-(fb%!f%/2):fb%!a%=(gb%!j%/2)-(fb%!j%/2):=fb% DEFPROCe(a%):LOCALi%,hb%:hb%=h%!f%/K%!f%:FORi%=1TOhb%+1:PROCa("rail",(i%-1)*K%!f%,a%):NEXTi%:ENDPROC DEFPROCh(o%):LOCALx%,y%,ib%,jb%,kb%,lb%,i%:ib%=FNa(3,1):jb%=FNa(3,2):kb%=1:lb%=3:FORi%=1TOo%!f%:x%=o%!b%+((i%-1)*kb%):PROCa("box_x",x%,o%!a%):PROCa("box_x",x%,o%!a%+(o%!j%-(2*lb%))):NEXTi%:x%=o%!b%+(o%!f%-ib%):FORi%=1TOo%!j%-1 PROCa("box_y",o%!b%,o%!a%+((i%-1)*kb%)):PROCa("box_y",x%,o%!a%+((i%-1)*kb%)):NEXTi%:PROCa("box_bl",o%!b%,o%!a%):PROCa("box_tl",o%!b%,(o%!a%+o%!j%)-jb%):PROCa("box_br",o%!b%+(o%!f%-ib%),o%!a%):x%=(o%!b%+o%!f%)-ib%:y%=(o%!a%+o%!j%)-jb%: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%:h%!qa%=v%!0:h%!ra%=v%!4:h%!f%=(v%!8)+1<h%!sa%THENPROCk CASEmb%OF WHEN1:nb%=P%<>h%!qa% WHEN4:nb%=P%>>h%!ra% OTHERWISE:ERROR255,"Unknown FNconv_units() operation : "+STR$(mb%) ENDCASE =nb% DEFFNm(o%,pb%):LOCALqb%,rb%,sb%,tb%:sb%=FALSE:tb%=FALSE:IFo%!A%ANDpb%!A%THEN qb%=pb%!b%+pb%!f%:rb%=pb%!a%+pb%!j%:IFo%!b%>=pb%!b%ANDo%!b%=pb%!a%ANDo%!a%=t%:ENDPROC DEFFNi(n%):=n%EOR1 DEFFNr(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$ DEFFNe(a$,wb%,i$,xb%):LOCALyb%,b$:yb%=wb%-LEN(a$):IFyb%<=0THEN b$=LEFT$(a$,wb%) ELSE:IFxb%THEN b$=STRING$(wb%,i$):RIGHT$(b$,LEN(a$))=a$ ELSE:b$=a$+STRING$(yb%,i$) ENDIF ENDIF =b$ DEFFNp(a$,wb%):LOCALb$:b$=STRING$(wb%," "):RIGHT$(b$,LEN(a$))=a$:=b$ DEFFNg(d$):LOCALzb%:SYS"XOS_File",17,d$TOzb%:=zb% DEFFNt(d$):LOCALP%:SYS"XOS_File",5,d$TO,,,,P%:=P% DEFFNo(mb%,d$):LOCALJ%,Ab%,Bb%,Cb%:Cb%=FALSE:CASEmb%OF WHEN0:J%=OPENUP(d$+"chkfile") WHEN1:J%=OPENUP(d$) OTHERWISE:ERROR255,"Unknown FNfs_writeable op :"+STR$(mb%) ENDCASE IFJ%<>0THEN SYS"XOS_Args",254,J%TOBb%;Ab%:IF(Ab%AND1)THEN CLOSE#J%:ERROR255,"Unknown FNfs_writeable fault." ENDIF IF((Bb%AND(1<<7))<>0)THENCb%=TRUE CLOSE#J% ENDIF =Cb%