REM Acorn Invaders REM Packed by MH's BASCrunch v1.31c 30/1/08 On 02 May 2008 ONERRORPROCu:END MODE28:OFF:a$="Acorn Invaders. (c)2008 DynaByte Software":PRINTa$:PRINTSTRING$(LEN(a$),"-"):PRINT:aa%=FALSE:c$=".":PRINT"Checking files...":IFNOTFNl(c$+"Resources.Gfx0","Sprites")THENaa%=TRUE IFNOTFNl(c$+"Resources.Gfx1","Charset")THENaa%=TRUE IFNOTFNl(c$+"Resources.Intro","Music")THENaa%=TRUE IFNOTFNl(c$+"Resources.Creds","Credits")THENaa%=TRUE IFaa%THENERROR255,"File Missing!!" PRINT:PRINT"Initialising Music Daemon...":OSCLI"PlayVolume 0":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)..." PROCv:SYS"OS_SWINumberFromString",,"OS_SpriteOp"TOfa%:PRINT"Loading Sprites...":ga%=FNp(c$+"Resources.Gfx0"):PRINT"Loading Charset...":ha%=FNp(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":IFFNq(i$)<>1THEN IFNOTFNr(0,c$)THEN da%=FALSE:PRINT"Created Read-only HiScore table." ELSE:PRINT"Created Read/Write HiScore table." ENDIF PROCw(da%) ELSE:IFNOTFNr(1,i$)THEN da%=FALSE:PRINT"Loaded Read-only HiScore table." ELSE:PRINT"Loaded Read/Write HiScore table." ENDIF PROCx ENDIF PRINT"Setting up...":PROCe(150):b%=0:a%=4:f%=8:k%=12:M%=16:N%=20:q%=24:`%=28:E%=32:ka%=36:la%=40:ma%=44:na%=48:oa%=52:pa%=56:qa%=60:ra%=64:sa%=68:ta%=16:ua%=20:va%=24:Z%=28:T%=32:wa%=16:xa%=20 h%=FNb(36):O%=FNb(24):K%=FNb(16):CLS:PROCl:h%!Z%=FNa(8,1):h%!T%=FNa(8,2)+7:O%!f%=FNa(6,1):O%!k%=FNa(6,2):O%!wa%=h%!k%-50:O%!xa%=30:OSCLI"PlayVolume 127":OSCLI"PlayStart":REPEAT:CLS:aa%=FNu:IFNOTaa%THENCLS:PROCy UNTILaa%:CLS:K%!f%=220:K%!k%=40:K%=FNo(K%,h%):K%!a%-=3:PROCi(K%):PROCm("GOODBYE!!!",10):IFca%=1THEN FORi%=127TO1STEP-2:OSCLI"PlayVolume "+STR$(i%):PROCe(4):NEXTi%:OSCLI"PlayStop":OSCLI"PlayVolume 127" ENDIF PROCn:END DEFFNu:LOCALi%,H%,I%,A%,Q%,d%,U%,ya%:LOCALza%,P%,Aa%,Ba%,Ca%,Da%,x%,y%,J%,s$,a$:H%=FNf(FNb(16),0):I%=FNf(FNb(16),0):A%=FNf(FNb(16),0):d%=FNf(FNb(16),0):U%=FNf(FNb(16),0):P%=FNf(FNb(16),0):H%!f%=FNa(100,1):H%!k%=FNa(40,2):H%!b%=FNc(H%,h%):H%!a%=800 I%!f%=FNa(150,1):I%!k%=FNa(40,2):I%!b%=FNc(I%,h%):I%!a%=H%!a%-I%!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:U%!f%=FNa(20,1):U%!k%=FNa(20,2) U%!b%=A%!b%+150+FNc(U%,d%):ya%=FNd(U%):za%=FNd(U%):U%!a%=A%!a%+100:ya%!a%=U%!a%+U%!k%+40:za%!a%=ya%!a%+ya%!k%+40:P%!f%=FNa(20,1):P%!k%=FNa(20,2):P%!b%=A%!b%+150+FNc(P%,d%):Aa%=FNd(P%):Ba%=FNd(P%):Da%=FNd(P%):Ca%=FNd(P%):Ea%=FNd(P%) :P%!a%=(A%!a%+A%!k%)-120:Aa%!a%=P%!a%-60:Ba%!a%=Aa%!a%-60:Da%!a%=Ba%!a%-90:Ea%!a%=Da%!a%-60:Ca%!a%=Ea%!a%-60:PROCf(O%!wa%):PROCf(O%!xa%):FORi%=0-H%!f%TOH%!b%STEP5:WAIT:PROCa("space",i%,H%!a%):PROCe(1):NEXTi%:FORi%=h%!f%TOI%!b%STEP-5:WAIT:PROCa("invaders",i%,I%!a%):PROCe(1):NEXTi% a$="PRESS SPACE TO PLAY":Q%=LEN(a$)*h%!Z%:y%=170:PROCb(FNh(Q%,h%!f%),y%,a$,11):a$="OR Q TO QUIT":Q%=LEN(a$)*h%!Z%:y%-=h%!T%:PROCb(FNh(Q%,h%!f%),y%,a$,11):WHILENOTINKEY(-99)ANDNOTINKEY(-17)ANDNOTINKEY(-82):y%=A%!a%+A%!k%:FORi%=1TOea%:a$=FNm(b$(i%)):x%=FNe(a$):CASEe%(i%)OF WHEN-1:y%-=h%!T% WHEN-2:y%-=(2*h%!T%) OTHERWISE:y%-=e%(i%) ENDCASE PROCb(x%,y%,a$,0):NEXTi%:J%=FNn:IFJ%=1THEN=TRUE IFJ%=2THEN=FALSE PROCd(A%):a$="SCORE ADVANCE":x%=FNe(a$):y%=A%!a%+A%!k%-20:PROCb(x%,y%,a$,0):a$="TABLE":y%-=h%!T%:x%=FNe(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",U%!b%,U%!a%):PROCb(x%,U%!a%+12,"= 50 POINTS !",0):J%=FNn:IFJ%=1THEN=TRUE IFJ%=2THEN=FALSE PROCd(A%):a$="KEYBOARD CONTROLS":x%=FNe(a$):y%=A%!a%+A%!k%-20:PROCb(x%,y%,a$,0):x%=P%!b%+P%!f%+10:PROCa("key_z",P%!b%,P%!a%):PROCb(x%,P%!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_p",Ea%!b%,Ea%!a%):PROCb(x%,Ea%!a%+12,": PAUSE GAME",0):PROCa("key_m",Da%!b%,Da%!a%):PROCb(x%,Da%!a%+12,": MUSIC ON/OFF",0):PROCa("key_q",Ca%!b%,Ca%!a%) PROCb(x%,Ca%!a%+12,": END GAME",0):J%=FNn:IFJ%=1THEN=TRUE IFJ%=2THEN=FALSE PROCd(A%):a$="TODAY'S":IFda%THENa$="ALL TIME" x%=FNe(a$):y%=A%!a%+A%!k%-20:PROCb(x%,y%,a$,0):a$="HI SCORES":y%-=h%!T%:x%=FNe(a$):PROCb(x%,y%,a$,0):y%=(A%!a%+A%!k%)-100:a$=" POS."+" PLAYER."+STRING$(12," ")+"SCORE.":a$+=STRING$(3," ")+"RACK.":x%=FNe(a$):PROCb(x%,y%,a$,0):y%-=2*h%!T%:FORi%=1TO10:IFi%<10THEN a$=" "+STR$(i%)+". " ELSE:a$=" "+STR$(i%)+". " ENDIF s$=FNm(a$(i%)):a$+=FNi(s$,8," ",FALSE):a$+=" .... ":a$+=FNs(STR$(c%(i%)),10):a$+=" ... "+FNs(STR$(d%(i%)),3):x%=FNe(a$):PROCb(x%,y%-(i%*(h%!T%+5)),a$,0):NEXTi%:J%=FNn:IFJ%=1THEN=TRUE IFJ%=2THEN=FALSE PROCd(A%):ENDWHILE:ERROR255,"Ran off the end of title loop!!":=FALSE DEFFNn:LOCALt%,J%:t%=TIME+750:J%=FALSE:REPEAT:IFINKEY(-82)THENPROCo IFINKEY(-102)THENPROCp UNTILTIME>=t%ORINKEY(-17)ORINKEY(-99):IFINKEY(-17)THENJ%=1 IFINKEY(-99)THENJ%=2 IFJ%THEN PROCc(H%):PROCc(I%):PROCc(A%):PROCc(d%):PROCc(U%):PROCc(ya%):PROCc(za%):PROCc(P%):PROCc(Aa%):PROCc(Ba%):PROCc(Ca%):PROCc(Da%):PROCc(Ea%) ENDIF =J% DEFFNe(a$):LOCALQ%:Q%=LEN(a$)*h%!Z%:=A%!b%+FNh(Q%,A%!f%) DEFPROCy:LOCALm%,p%,d%,e%,o%:LOCALD%:LOCALb%(),a%():LOCAL_%,Fa%,Ga%,Ha%:LOCALIa%:LOCALJa%,Ka%,La%,Ma%,Na%:LOCALOa%,Q%,a$,x%,y%,i%,j%:m%=FNb(32):p%=FNb(40):d%=FNb(48):e%=FNb(68):D%=FNb(16):o%=FNb(36):DIMb%(10,6),a%(7):_%=0:Ha%=4:Fa%=8:Ga%=12:Ia%=16:Pa%=20 Ja%=la%:Ka%=ma%:La%=na%:Ma%=qa%:Na%=ra%:m%!f%=FNa(30,1):m%!k%=FNa(15,2):m%!b%=FNc(m%,h%):m%!a%=50:m%!N%=6:m%!M%=m%!N%:D%!f%=FNa(20,1):D%!k%=FNa(20,2):d%!f%=FNa(40,1):d%!k%=FNa(20,2):d%!a%=O%!wa%-(10+d%!k%):d%!N%=5:d%!q%=FALSE:d%!ma%=1 p%!f%=FNa(5,1):p%!k%=FNa(20,2):p%!q%=FALSE:p%!N%=10:o%!Fa%=1:o%!Ha%=0:o%!_%=3:o%!Ga%=FALSE:o%!Ia%=0:o%!E%=0:e%!Ja%=FNa(20,1):e%!Ka%=10:e%!La%=6:e%!q%=TRUE:e%!Na%=4:FORi%=1TO7:a%(i%)=FNb(44):a%(i%)=FNf(a%(i%),0):a%(i%)!f%=FNa(5,1) a%(i%)!k%=FNa(20,2):NEXTi%:PROCf(O%!wa%):PROCf(O%!xa%):PROCz(0,c%(1),o%!_%,o%!Fa%):PROCA:PROCa("base",m%!b%,m%!a%):REPEAT:Oa%=FALSE:IFo%!Ia%=0THEN IFINKEY(-74)THENPROCB(m%!b%,m%!a%) IFINKEY(-98)THENPROCC:Oa%=TRUE IFINKEY(-67)THENPROCD:Oa%=TRUE IFINKEY(-17)THENPROCE ENDIF IFINKEY(-102)THENPROCp IFINKEY(-82)THENPROCo IFINKEY(-56)THENPROCF IFo%!Ia%=0 IFOa%THEN m%!b%+=m%!M%:PROCa("base",m%!b%,m%!a%) ENDIF ENDIF IFo%!_%>0THEN IFo%!Ia%=0THEN PROCG:PROCH:PROCI:PROCJ ELSE:PROCK ENDIF ENDIF WAIT:UNTILo%!_%=0:K%!f%=240:K%!k%=40:K%=FNo(K%,h%):K%!a%-=3:PROCd(K%):PROCi(K%):PROCm("GAME OVER!!!",11):PROCe(750):IFNOTo%!Ga%THEN IFo%!Ha%>=c%(10)THEN PROCL(o%) ENDIF ENDIF PROCc(m%):PROCc(e%):PROCc(d%):PROCc(p%):PROCc(o%):PROCc(D%):FORi%=1TO7:PROCc(a%(i%)):NEXTi%:ENDPROC DEFPROCC:IFm%!b%<=0THEN m%!b%=0 ELSE:m%!M%=0-m%!N% ENDIF ENDPROC DEFPROCD:IFm%!b%>=h%!f%-m%!f%THEN m%!b%=h%!f%-m%!f% ELSE:m%!M%=0+m%!N% ENDIF ENDPROC DEFPROCB(x%,y%):IFNOTp%!q%THEN p%!q%=TRUE:p%!b%=x%+(m%!f%/2):p%!a%=y%+m%!k% ENDIF ENDPROC DEFPROCo:REPEAT:UNTILNOTINKEY(-82):OSCLI"ScreenSave .Dump"+STR$(ba%):ba%+=1:ENDPROC DEFPROCE:LOCALi%:FORi%=1TO7:a%(i%)!q%=FALSE:NEXTi%:o%!_%=0:o%!Ga%=TRUE:ENDPROC DEFPROCp:REPEAT:UNTILNOTINKEY(-102):ca%=FNg(ca%):IFca%=1THENOSCLI"PlayStart"ELSEOSCLI"PlayPause" ENDPROC DEFPROCF:REPEATUNTILNOTINKEY(-56):o%!Ia%=FNg(o%!Ia%):o%!Pa%=o%!Ia%:PROCq(o%!Pa%):ENDPROC DEFPROCQ:IFd%!q%THEN IFNOTd%!`%THEN d%!`%=TRUE:d%!ka%=d%!E%:PROCa("saucer_2",d%!b%,d%!a%) ENDIF ENDIF ENDPROC DEFPROCG:LOCALQa%,Ra%:Qa%=ka%:IFp%!q%THEN p%!Qa%=FALSE:IFp%!a%>=O%!wa%-p%!k%THEN p%!q%=FALSE:p%!Qa%=TRUE ENDIF IFp%!Qa%THEN Ra%=FNd(p%):Ra%!a%-=2:PROCd(Ra%):PROCc(Ra%) ELSE:PROCa("shell",p%!b%,p%!a%) ENDIF p%!a%+=p%!N% ENDIF ENDPROC DEFPROCH:LOCALSa%,Ta%,Ua%,f$:Sa%=ka%:Ta%=la%:Ua%=ma%:IFNOTd%!q%THEN IFFNj(4)ANDFNj(5)THEN d%!q%=TRUE:d%!`%=FALSE:d%!Ta%=0:d%!Ua%=0:IFFNj(50)THEN d%!M%=0-d%!N%:d%!b%=h%!f% ELSE:d%!M%=0+d%!N%:d%!b%=0-d%!f% ENDIF ENDIF ELSE:d%!Ta%+=1:d%!E%+=1:IFd%!b%<=0-d%!f%ANDSGN(d%!M%)=-1THEN d%!Sa%=FALSE:d%!q%=FALSE:d%!E%=0:ENDPROC ENDIF IFd%!b%>h%!f%ANDSGN(d%!M%)=1THEN d%!Sa%=FALSE:d%!q%=FALSE:d%!E%=0:ENDPROC ENDIF IFNOTd%!`%THEN IFFNk(p%,d%)THEN PROCd(p%):PROCa("saucer_2",d%!b%,d%!a%):d%!Sa%=d%!E%:d%!`%=TRUE:p%!q%=FALSE:PROCg(500) ENDIF ELSE:IFFNk(p%,d%)THEN PROCd(p%):p%!q%=FALSE ENDIF ENDIF IFNOTd%!`%THEN IFd%!Ta%>=1000THENd%!Ta%=0 IFd%!Ta%MOD10=0THEN d%!Ua%=FNg(d%!Ua%) ENDIF f$="saucer_"+STR$(d%!Ua%):PROCa(f$,d%!b%,d%!a%):d%!b%+=d%!M% ELSE:IFd%!E%>=d%!Sa%+80THEN PROCd(d%):d%!q%=FALSE:d%!Sa%=FALSE:d%!E%=0:d%!Ua%=TRUE ELSE:IFd%!E%>=d%!Sa%+60THEN PROCa("saucer_5",d%!b%,d%!a%) ELSE:IFd%!E%>=d%!Sa%+40THEN PROCa("saucer_4",d%!b%,d%!a%) ELSE:IFd%!E%>=d%!Sa%+20THEN PROCa("saucer_3",d%!b%,d%!a%) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDPROC DEFPROCI:LOCALVa%,z%,F%,L%,Wa%,Xa%,Ya%,W%:LOCALG%,Za%,_a%:G%=ka%:Za%=oa%:_a%=pa%:e%!E%+=1:IFe%!E%MOD5=0THENe%!G%=FNg(e%!G%) IFe%!E%>1000THENe%!E%=0 Va%=e%!b%+e%!f%:W%=0-((e%!Za%-1)*(D%!f%+e%!Ja%)):IFVa%>=h%!f%THEN e%!M%=0-e%!N%:PROCr ENDIF IFe%!b%<=W%THEN e%!M%=0+e%!N%:PROCr ENDIF W%=e%!a%+((e%!Ma%-1)*D%!k%):IFW%<=m%!a%+m%!k%THEN PROCM:ENDPROC ENDIF IFFNk(p%,e%)THEN z%=D%!f%+e%!Ja%:IF(p%!b%-e%!b%)MODz%<=D%!f%THEN F%=((p%!a%-e%!a%)DIVD%!k%)+1:L%=((p%!b%-e%!b%)DIVz%)+1:IFSGN(b%(L%,F%))=1THEN b%(L%,F%)=-5:PROCd(p%):p%!q%=FALSE:e%!`%+=1:CASEF%OF WHEN1,2:PROCg(50) WHEN3,4:PROCg(75) WHEN5,6:PROCg(100) ENDCASE ENDIF ENDIF ENDIF IFe%!`%>=e%!Ka%*e%!La%THEN o%!Fa%+=1:PROCd(e%):PROCf(O%!xa%):PROCh(o%!_%):PROCj(o%!Fa%):PROCs ENDIF Wa%=TRUE:Xa%=TRUE:FORF%=1TOe%!La%:IFb%(e%!_a%,F%)<>0THENWa%=FALSE IFb%(e%!Za%,F%)<>0THENXa%=FALSE NEXTF%:Ya%=TRUE:FORL%=1TOe%!Ka%:IFb%(L%,e%!Ma%)<>0THENYa%=FALSE NEXTL%:IFXa%THENe%!Za%+=1 IFWa%THEN e%!f%-=(D%!f%+e%!Ja%):e%!_a%-=1 ENDIF IFYa%THENe%!Ma%+=1 e%!b%+=e%!M%:PROCk:ENDPROC DEFPROCJ:LOCALG%,`a%,ab%,i%,j%,x%,y%,bb%,cb%,f$,g$:G%=ka%:`a%=la%:FORi%=1TO7:IFNOTa%(i%)!q%THEN bb%=RND(10):cb%=o%!Fa%+5:IFcb%>100THENcb%=100:e%!Na%+=1 IFFNj(cb%)ANDFNj(e%!Na%)THEN IFb%(bb%,e%!Ma%)>0THEN x%=e%!b%+(bb%-1)*(D%!f%+e%!Ja%):y%=e%!a%+(e%!Ma%-1)*D%!k%:a%(i%)!b%=x%+D%!f%/2:a%(i%)!a%=y%:a%(i%)!q%=TRUE:a%(i%)!`%=FALSE:a%(i%)!E%=0:a%(i%)!`a%=1:a%(i%)!G%=0:ab%=4:IFFNj(25)THENa%(i%)!`a%=2:ab%=ab%/2 a%(i%)!N%=ab%:a%(i%)!M%=a%(i%)!N% ENDIF ENDIF ELSE:a%(i%)!E%+=1:IFa%(i%)!E%MOD5=0THEN a%(i%)!G%=FNg(a%(i%)!G%) ENDIF IFa%(i%)!E%>1000THENa%(i%)!E%=0 a%(i%)!a%-=a%(i%)!M%:f$="miss_"+STR$(a%(i%)!`a%)+STR$(a%(i%)!G%):IFa%(i%)!`a%<1ORa%(i%)!`a%>2THEN g$="Invalid missile type : "+STR$(a%(i%)!`a%):ERROR255,g$ ENDIF IFa%(i%)!G%<0ORa%(i%)!G%>1THEN g$="Invalid missile frame : "+STR$(a%(i%)!G%):ERROR255,g$ ENDIF PROCa(f$,a%(i%)!b%,a%(i%)!a%):IFa%(i%)!a%<=O%!xa%+(O%!k%+5)THEN a%(i%)!q%=FALSE:PROCd(a%(i%)) ENDIF IFFNk(a%(i%),m%)ANDa%(i%)!q%THEN FORj%=1TO3:PROCa("base_"+STR$(j%),m%!b%,m%!a%):PROCe(20):WAIT:NEXTj%:PROCd(m%):IFp%!q%THEN PROCd(p%):p%!q%=FALSE ENDIF m%!b%=FNc(m%,h%):o%!_%-=1:PROCh(o%!_%):PROCd(a%(i%)):a%(i%)!q%=FALSE:PROCa("base",m%!b%,m%!a%) ENDIF IFFNk(p%,a%(i%))ANDa%(i%)!q%THEN IFa%(i%)!`a%=1THEN a%(i%)!q%=FALSE:PROCg(5):PROCd(a%(i%)) ENDIF PROCd(p%):p%!q%=FALSE ENDIF ENDIF NEXTi%:ENDPROC DEFPROCK:o%!E%+=1:IFo%!E%=1000THENo%!E%=0 IFo%!E%MOD50=0THEN o%!Pa%=FNg(o%!Pa%) ENDIF PROCq(o%!Pa%):ENDPROC DEFPROCw(db%):LOCALi%,n$:FORi%=1TO10:IFi%MOD2=0THENn$="Software"ELSEn$="DynaByte" a$(i%)=FNm(n$):c%(i%)=(11-i%)*1000:d%(i%)=0:NEXTi%:IFdb%THENPROCt ENDPROC DEFPROCx:LOCALi%,R%:R%=OPENIN".Resources.HiTable":FORi%=1TO10:INPUT#R%,a$(i%),c%(i%):INPUT#R%,d%(i%):NEXTi%:CLOSE#R%:ENDPROC DEFPROCt:LOCALi%,R%:R%=OPENOUT".Resources.HiTable":FORi%=1TO10:PRINT#R%,a$(i%),c%(i%):PRINT#R%,d%(i%):NEXTi%:CLOSE#R%:ENDPROC DEFPROCL(o%):LOCALI%,H%,eb%,g%,i%,fb%,Q%,x%,y%,a$:H%=FNb(16):I%=FNb(16):H%!f%=FNa(100,1):H%!k%=FNa(40,2):H%!b%=FNc(H%,h%):H%!a%=800:I%!f%=FNa(150,1):I%!k%=FNa(40,2):I%!b%=FNc(I%,h%):I%!a%=H%!a%-I%!k%:fb%=0:FORi%=10TO1STEP-1 IFo%!Ha%>=c%(i%)THENfb%=i% NEXTi%:FORi%=9TOfb%STEP-1:a$(i%+1)=a$(i%):c%(i%+1)=c%(i%):d%(i%+1)=d%(i%):NEXTi%:c%(fb%)=o%!Ha%:d%(fb%)=o%!Fa%:CLS:PROCf(O%!wa%):PROCf(O%!xa%):PROCa("space",H%!b%,H%!a%):PROCa("invaders",I%!b%,I%!a%):a$="Congratulations!!! Your score of "+STR$(o%!Ha%) a$+=" has earned the rank of "+STR$(fb%)+FNv(fb%):Q%=LEN(a$)*h%!Z%:x%=FNh(Q%,h%!f%):y%=I%!a%-170:PROCb(x%,y%,a$,0):PROCc(H%):PROCc(I%):K%!f%=165:K%!k%=40:K%=FNo(K%,h%):PROCi(K%):x%=K%!b%+20:y%=K%!a%+12:a$="":i%=1:eb%=FALSE OSCLI"FX 21,0":REPEAT:g%=GET:CASEg%OF WHEN13:eb%=TRUE WHEN8:i%-=1:a$=LEFT$(a$,i%-1) OTHERWISE:IFi%<9ANDFNw(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 UNTILeb%:IFa$=""ORa$=" "THENa$="Anon ..." a$(fb%)=FNm(a$):IFda%THENPROCt ENDPROC DEFFNw(gb%):LOCALQa%:Qa%=FALSE:IFgb%>=32ANDgb%<=126THENQa%=TRUE =Qa% DEFPROCz(hb%,ib%,l%,r%):LOCALx%,a$:a$="SCORE :-"+FNi(STR$(hb%),10," ",TRUE):PROCb(0,h%!k%-h%!T%,a$,0):a$="HI SCORE :-":a$+=FNi(STR$(ib%),10," ",TRUE):x%=h%!f%-LEN(a$)*h%!Z%:PROCb(x%,h%!k%-h%!T%,a$,0):PROCh(l%):PROCj(r%):ENDPROC DEFPROCh(jb%):LOCALa$:PROCa("base",0,0):a$=" = "+STR$(jb%):PROCb(m%!f%,0,a$,0):ENDPROC DEFPROCj(jb%):LOCALx%,a$:a$="RACK :-"+FNi(STR$(jb%),3,"0",TRUE):x%=h%!f%-LEN(a$)*h%!Z%:PROCb(x%,0,a$,0):ENDPROC DEFPROCq(kb%):LOCALx%,y%,Q%,a$:a$="GAME PAUSED":IFkb%=0ORo%!Ia%=0THEN a$=STRING$(LEN(a$)," ") ENDIF Q%=LEN(a$)*h%!Z%:x%=FNh(Q%,h%!f%):y%=h%!k%-h%!T%:PROCb(x%,y%,a$,0):ENDPROC DEFPROCg(lb%):LOCALx%,a$:o%!Ha%+=lb%:a$="SCORE :-"+FNi(STR$(o%!Ha%),10," ",TRUE):PROCb(0,h%!k%-h%!T%,a$,0):IFo%!Ha%>c%(1)THEN a$="HI SCORE :-":a$+=FNi(STR$(o%!Ha%),10," ",TRUE):x%=h%!f%-LEN(a$)*h%!Z%:PROCb(x%,h%!k%-h%!T%,a$,0) ENDIF ENDPROC DEFPROCA:LOCALG%,Za%,_a%,Ma%:G%=ka%:Za%=oa%:_a%=pa%:Ma%=qa%:PROCs:PROCk:ENDPROC DEFPROCs:LOCALF%,L%,s%:e%!b%=50:e%!a%=550:e%!G%=0:e%!`%=0:e%!N%=3:e%!M%=e%!N%:e%!Za%=1:e%!_a%=e%!Ka%:e%!Ma%=1:s%=(e%!Ka%*D%!f%)+((e%!Ka%-1)*e%!Ja%):e%!f%=s%:e%!k%=e%!La%*D%!k%:FORL%=1TOe%!Ka%:FORF%=1TOe%!La% b%(L%,F%)=((F%+1)/2)+(e%!G%*10):NEXTF%:NEXTL%:ENDPROC DEFPROCk:LOCALF%,L%,x%,y%,v%:v%=FNb(16):FORL%=e%!Za%TOe%!_a%:x%=e%!b%+((L%-1)*(D%!f%+e%!Ja%)):FORF%=e%!Ma%TOe%!La%:y%=e%!a%+((F%-1)*D%!k%):IFb%(L%,F%)>0THEN b%(L%,F%)=((F%+1)/2)+(e%!G%*10) ENDIF IFb%(L%,F%)<>0THEN CASESGN(b%(L%,F%))OF WHEN-1:PROCN(x%,y%,L%,F%) WHEN1:PROCa("inv_"+STR$(b%(L%,F%)),x%,y%) ENDCASE ELSE:v%!b%=x%:v%!a%=y%:v%!f%=D%!f%:v%!k%=D%!k%:PROCd(v%) ENDIF NEXTF%:NEXTL%:PROCc(v%):ENDPROC DEFPROCN(x%,y%,r%,c%):LOCALmb%:mb%=FNb(16):b%(r%,c%)+=1:PROCa("inv_4",x%,y%):IFb%(r%,c%)=0THEN mb%!b%=x%:mb%!a%=y%:mb%!f%=D%!f%:mb%!k%=D%!k%:PROCd(mb%) ENDIF PROCc(mb%):ENDPROC DEFPROCr:LOCALv%,i%:v%=FNb(16):FORi%=1TO3:e%!a%-=D%!k%/3:PROCk:NEXTi%:v%!b%=e%!b%:v%!a%=e%!a%+e%!k%:v%!f%=e%!f%:v%!k%=D%!k%:PROCd(v%):PROCc(v%):ENDPROC DEFPROCM:LOCALS%,X%,G%,nb%,N%,i%,h$:N%=1:ob%=24:S%=FNb(28):X%=FNb(28):PROCd(e%):PROCd(m%):IFp%!q%THEN PROCd(p%):p%!q%=FALSE ENDIF IFd%!q%THEN PROCd(d%):d%!q%=FALSE ENDIF FORi%=1TO7:IFa%(i%)!q%THEN PROCd(a%(i%)):a%(i%)!q%=FALSE ENDIF NEXTi%:m%!b%=FNc(m%,h%):S%!b%=0-D%!f%:S%!a%=m%!a%:S%!M%=N%:X%!b%=h%!f%:X%!a%=m%!a%:X%!M%=0-N%:o%!_%=0:PROCf(O%!xa%):PROCh(o%!_%):PROCj(o%!Fa%):PROCa("base",m%!b%,m%!a%):G%=0:nb%=FALSE:REPEAT:S%!b%+=S%!M%:S%!ob%=S%!b%+D%!f%:X%!b%+=X%!M%:G%+=1 IFG%MOD20=0THENnb%=FNg(nb%) IFG%>1000THENG%=0 IFnb%THENh$="inv_11"ELSEh$="inv_1" PROCa(h$,S%!b%,S%!a%):PROCa(h$,X%!b%,X%!a%):PROCe(2):WAIT:UNTILS%!ob%>=m%!b%:FORi%=1TO10:PROCa("inv_1",S%!b%,S%!a%):PROCa("inv_1",X%!b%,X%!a%):PROCe(20):PROCa("inv_11",S%!b%,S%!a%):PROCa("inv_11",X%!b%,X%!a%):PROCe(20):WAIT:NEXTi%:FORi%=1TO3 PROCa("base_"+STR$(i%),m%!b%,m%!a%):PROCe(20):WAIT:NEXTi%:PROCe(20):PROCd(m%):PROCc(S%):PROCc(X%):ENDPROC DEFFNp(j$):LOCALpb%,C%:C%=FNx(j$)+256:pb%=FNb(C%):!pb%=C%:pb%!4=0:pb%!8=16:pb%!12=16:SYSfa%,256+10,pb%,j$:SYSfa%,256+17,pb%:=pb% DEFPROCb(x%,y%,a$,qb%):LOCALi%,rb%:ia%=ha%:rb%=h%!Z%:FORi%=1TOLEN(a$):PROCa(STR$(ASC(MID$(a$,i%,1))),x%+((i%-1)*rb%),y%):IFqb%>0THENPROCe(qb%) NEXTi%:ia%=ga%:ENDPROC DEFPROCa(q$,x%,y%):LOCALsb%:SYSfa%,256+24,ia%,q$TO,,sb%:SYSfa%,512+34,ia%,sb%,x%,y%,0:ENDPROC DEFPROCd(w%):GCOL0,0TINT0:RECTANGLEFILLw%!b%,w%!a%,w%!f%,w%!k%:ENDPROC DEFFNh(tb%,h%):=(h%/2)-(tb%/2) DEFPROCm(a$,ub%):LOCALQ%,y%:Q%=LEN(a$)*h%!Z%:y%=(h%!k%/2)-(h%!T%/2):PROCb(FNh(Q%,h%!f%),y%,a$,ub%):ENDPROC DEFFNc(vb%,wb%):=(wb%!f%/2)-(vb%!f%/2) DEFFNo(vb%,wb%):LOCALx%,y%:vb%!b%=(wb%!f%/2)-(vb%!f%/2):vb%!a%=(wb%!k%/2)-(vb%!k%/2):=vb% DEFPROCf(a%):LOCALi%,xb%:xb%=h%!f%/O%!f%:FORi%=1TOxb%+1:PROCa("rail",(i%-1)*O%!f%,a%):NEXTi%:ENDPROC DEFPROCi(w%):LOCALx%,y%,yb%,zb%,Ab%,Bb%,i%:yb%=FNa(3,1):zb%=FNa(3,2):Ab%=1:Bb%=3:FORi%=1TOw%!f%:x%=w%!b%+((i%-1)*Ab%):PROCa("box_x",x%,w%!a%):PROCa("box_x",x%,w%!a%+(w%!k%-(2*Bb%))):NEXTi%:x%=w%!b%+(w%!f%-yb%):FORi%=1TOw%!k%-1 PROCa("box_y",w%!b%,w%!a%+((i%-1)*Ab%)):PROCa("box_y",x%,w%!a%+((i%-1)*Ab%)):NEXTi%:PROCa("box_bl",w%!b%,w%!a%):PROCa("box_tl",w%!b%,(w%!a%+w%!k%)-zb%):PROCa("box_br",w%!b%+(w%!f%-yb%),w%!a%):x%=(w%!b%+w%!f%)-yb%:y%=(w%!a%+w%!k%)-zb%:PROCa("box_tr",x%,y%):ENDPROC DEFPROCl: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%THENPROCl CASECb%OF WHEN1:Db%=C%<>h%!ta% WHEN4:Db%=C%>>h%!ua% OTHERWISE:ERROR255,"Unknown FNconv_units() operation : "+STR$(Cb%) ENDCASE =Db% DEFFNk(w%,Fb%):LOCALGb%,Hb%,Ib%,Jb%:Ib%=FALSE:Jb%=FALSE:IFw%!q%ANDFb%!q%THEN Gb%=Fb%!b%+Fb%!f%:Hb%=Fb%!a%+Fb%!k%:IFw%!b%>=Fb%!b%ANDw%!b%=Fb%!a%ANDw%!a%=t%:ENDPROC DEFFNg(n%):=n%EOR1 DEFFNv(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$ DEFFNi(a$,Mb%,o$,Nb%):LOCALOb%,b$:Ob%=Mb%-LEN(a$):IFOb%<=0THEN b$=LEFT$(a$,Mb%) ELSE:IFNb%THEN b$=STRING$(Mb%,o$):RIGHT$(b$,LEN(a$))=a$ ELSE:b$=a$+STRING$(Ob%,o$) ENDIF ENDIF =b$ DEFFNs(a$,Mb%):LOCALb$:b$=STRING$(Mb%," "):RIGHT$(b$,LEN(a$))=a$:=b$ DEFFNq(e$):LOCALKb%:SYS"XOS_File",17,e$TOKb%:=Kb% DEFFNx(e$):LOCALC%:SYS"XOS_File",5,e$TO,,,,C%:=C% DEFFNr(Cb%,e$):LOCALR%,Pb%,Qb%,Rb%:Rb%=FALSE:CASECb%OF WHEN0:R%=OPENUP(e$+"chkfile") WHEN1:R%=OPENUP(e$) OTHERWISE:ERROR255,"Unknown FNfs_writeable op :"+STR$(Cb%) ENDCASE IFR%<>0THEN SYS"XOS_Args",254,R%TOQb%;Pb%:IF(Pb%AND1)THEN CLOSE#R%:ERROR255,"Unknown FNfs_writeable fault." ENDIF IF((Qb%AND(1<<7))<>0)THENRb%=TRUE CLOSE#R% ENDIF =Rb% DEFPROCv:LOCALSb%:V%=0:Tb%=0:SYS"Wimp_SlotSize",-1,-1TOUb%:SYS"XOS_ReadMemMapInfo"TOVb%;Sb%:IFSb%AND1THENVb%=16384 PROCO(Vb%):ENDPROC DEFPROCn:IFV%THEN SYS"Wimp_SlotSize",V%-32768,-1TOUb%:V%=0:Tb%=0 ENDIF ENDPROC DEFFNb(Y%):LOCALB%,C%:C%=(Y%+15)AND-4:B%=FNy(C%):IFB%ELSEERROR254,"Heap claim failed: no room" B%!0=&DEADDEAD:B%!4=Y%:!(B%-8+(B%!-4))=&DEADDEAD:=B%+8 DEFPROCc(RETURNB%):B%-=8:IFB%!0<>&DEADDEADTHEN ERROR254,"Memory written below block low boundary!" ENDIF IF!(B%-8+(B%!-4))<>&DEADDEADTHEN ERROR254,"Memory written above block high boundary!" ENDIF Tb%-=B%!-4:SYS"OS_Heap",3,V%,B%:B%=0:ENDPROC DEFFNz:=Tb% DEFFNA:LOCALWb%:Wb%=(Ub%+32768-V%)-Tb%:IFWb%<0THENERROR254,"Heap overflow!" =Wb% DEFFNB:=Ub%+32768-V% DEFFNt(B%):LOCALv%:v%=B%-4:=v%!0 DEFFNf(B%,lb%):LOCALW%,C%:C%=FNt(B%):FORW%=0TOC%-4STEP4:B%!W%=lb%:NEXTW%:=B% DEFFNd(B%):LOCALXb%,W%,C%:C%=FNt(B%):Xb%=FNb(C%):FORW%=0TOC%-4STEP4:Xb%!W%=B%!W%:NEXTW%:=Xb% DEFPROCO(C%):IFV%THENERROR254,"You cannot have multiple heaps" C%=(C%+Vb%-1)ANDNOT(Vb%-1):V%=HIMEM:SYS"Wimp_SlotSize",Ub%+C%,-1TOUb%:C%=Ub%+32768-V%:IFC%<1THEN V%=0:ERROR254,"Could not extend WimpSlot for heap" ELSE:SYS"OS_Heap",0,V%,,C% ENDIF Tb%=0:ENDPROC DEFPROCP(Y%):LOCALYb%:Yb%=Ub%:SYS"Wimp_SlotSize",Ub%+Y%,-1TOUb%:Y%=Ub%-Yb%:IFY%THENSYS"OS_Heap",5,V%,,Y%TO,,,Y% ENDPROC DEFFNy(Y%):LOCALB%,Sb%:SYS"XOS_Heap",2,V%,,Y%TO,,B%;Sb%:IFSb%AND1THEN PROCP((Y%+Vb%)ANDNOT(Vb%-1)):SYS"XOS_Heap",2,V%,,Y%TO,,B%;Sb%:IFSb%AND1THEN=0 ENDIF Tb%+=B%!-4:=B%