home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-11-11 | 26.9 KB | 1,436 lines |
- '
- ' ***** DEFENDER *****
- '
-
- DIM mh(1279),mo(1),mx(1),my(1),mxs(1),md(1),ms(1),xo(1),x2(1),xo2(1)
- DIM ax(99),ay(99),axs(99),ays(99),at(99),as(99),ae(99),ac(99)
- DIM ad1(99),ad2(99)
- DIM lf(1),mx2(1),lives(1),killme(1),score(1),smart(1),bang(1),smarts(1)
- DIM bx(2,1),by(2,1),ba(2,1),bs(2,1),sx(1)
- DIM hinames$(8,1,23),hiscores(1,23)
- DMA 0:kk2=1
- sl0=44-(NTSC*12)
- p$=""
- FLOAD p$+"font.def"
- GOSUB loadhis
- QUEUE 0,512:QUEUE 1,512
- QUEUE 2,32
- POINTER 0:SPRITE 0
- GOSUB loadbl:GOSUB loadsp
- a=1 TO 8:SLOAD p$+"sound"+STR$(a)+".def",a+9:NEXT
-
- .intro:VWAIT:DMA 0:SLICE END:SLICE 0,sl0:COLOUR 1,0
- k=0 TO 6:FREE SCREEN k:NEXT
- SCREEN 0,320,224,3:SCREEN 1,320,224,3
- SCREEN 2,320,224,3
- DISPLAY 320,224,0,1,1,0,2:SHOWF 0:SHOWB 2
- c=8:a=1:y=0 TO 63
- RGB 1,c,15,0,y:c=c+a
- IF c=15 THEN a=-a
- IF c=8 THEN a=-a
- NEXT:RGB 1,15,15,15,y:c=2:a=1
- y=96 TO 130
- RGB 0,c,c,c,y:c=c+a
- IF c=8 THEN a=-a
- IF c=2 THEN a=-a
- NEXT:RGB 0,0,0,0,y:c=8:a=1
- y=23*8 TO 28*8-1
- RGB 1,c,c,15,y:c=c+a
- IF c=15 THEN a=-a
- IF c=8 THEN a=-a
- NEXT
- BLOAD "titlecols.def",99,0,0
- BLOAD "gamecols.def",99,0,8
- db=0:VWAIT:DMA 1
- LOCATE 0,0:t$="MARK SIBLY":GOSUB text
- t$="PROUDLY PRESENTS":GOSUB text
- t$="A BLITZ BASIC PROGRAM.....":GOSUB text
- SCREEN TO 1
- intloop
- SOUND 11,0:a=7 TO -1 STEP -1
- b=1 TO 5:VWAIT:NEXT:SHOWF db:db=1-db:UNQUEUE db:USE SCREEN db
- c=66+a:IF c<66 THEN c=66
- QBLIT db,c,72,80
- IF JOYB(1)>0 THEN a=-1
- NEXT:SOUND 16,0
- USE SCREEN 1-db
- LOCATE 4,23:PRINT "LANDER 150 MUTANT 150 POD 1000";
- LOCATE 3,27:PRINT "SWARMER 100 BOMBER 250 BAITER 200";
- USE SCREEN 2:j=0
- a=1 TO 250:b=1 TO 3:VWAIT:NEXT:UNQUEUE 2
- y=0 TO 1:x=0 TO 2
- c=y*3+x*5:IF c>0 THEN c=c+5
- QBLIT 2,c+j,x *96+60,y ASL 5+172
- j=j+1:IF j=5 THEN j=0
- NEXT:NEXT
- IF JOYB(1)>0 THEN a=251
- NEXT:IF a=252 THEN GOTO gameon
-
- .hiscores
- GOSUB hishow
- a=1 TO 500:VWAIT
- IF JOYB(1)>0 THEN a=501
- NEXT:IF a=501 THEN GOTO intro
-
- .gameon:VWAIT:DMA 0:SLICE END:SLICE 0,sl0
- SCREEN 0,320,224,3
- DISPLAY 320,224,0,0,0,0:SHOW 0:USE SCREEN 0
- BLOAD "modecols.def",99,0,0
- y=0 TO 3:BLIT y+74,135,y*40+24:NEXT
- c=8:a=1:y=192 TO 199
- RGB 1,c,c,0,y:c=c+a:IF c=15 THEN a=-a
- IF c=8 THEN a=-a
- NEXT
- COLOUR 1,0:LOCATE 12,24:PRINT "SELECT GAME MODE"
- gmode=1
- jw2:IF JOYB(1)<>0 THEN GOTO jw2
- VWAIT:DMA 1
- gonl:BLIT 78,131,gmode*40+20
- jw:IF JOYB(1)<>0 THEN GOTO allgo
- jy=JOYY(1)
- IF jy<>0
- BMODE 3:BLIT 78,131,gmode*40+20:BMODE 0
- gmode=gmode+jy & 3
- joywait:VWAIT
- IF JOYY(1)<>0 THEN GOTO joywait
- GOTO gonl
- ENDIF
- GOTO jw
-
- .allgo:VWAIT:DMA 0:SLICE END:SLICE 0,sl0
- BLOAD "gamecols.def",99,0,32
- SCREEN 0,288+64,96+32,3
- SCREEN 1,288+64,96+32,3
- SCREEN 2,288+64,96+32,3
- SCREEN 3,288+64,96+32,3
- SCREEN 4,320,28,3
- SCREEN 5,320+16,28,3
- SCREEN 6,1280+320,96,3
-
- smart(0)=10:smart(1)=32:' smart bomb ascii's
- 'gmode=2:' game MODe. 0=solo, 1=team, 2=mean, 3=evil
- swave=1:' start wave
- wave=0
-
- .newgame:
- gameova=0
- score(0)=0:score(1)=0
- lives(0)=-1:lives(1)=2
- IF gmode>0 THEN lives(0)=2
- smarts(0)=3:smarts(1)=3
- diff1=.5:diff2=.1:diff3=.999:diff4=.998
- diff5=2:diff6=1:diff7=8:diff8=256
- diff9=.995:diff10=.5:diff11=1:diff12=.96
- diff13=6:diff14=.99:diff15=10:diff16=5120:diff17=1024
- sl1=96+sl0+2:sl2=sl0+96+32
- SLICE 0,sl0
- USE SLICE 0:SPRITE 0:GOSUB colrmnts
- DISPLAY 288,96,0,1,1,0,6
- SHOWF 0,32,16:SHOWB 6
- SLICE 1,sl1:USE SLICE 1
- RGB 9,0,2,9
- DISPLAY 320,28,0,1,0,4,5
- SHOWF 4:SHOWB 5
- PLOAD "scancols.def",0,0,0
- USE SCREEN 4
- USE SCREEN 5:PLOAD "scorebar.def",0,0,8
- SLICE 2,sl2:USE SLICE 2:SPRITE 0:GOSUB colrmnts
- DISPLAY 288,96,0,1,1,2,6
- SHOWB 6:SHOWF 2,32,16
- GOSUB makemnts
- j=0 TO 2 STEP 2
- USE SLICE j
- IF j=2 OR gmode>0
- a=0 TO 12 STEP2:RGB 15,15-a,15-a,15-a,a/2+16:NEXT:RGB 15,0,0,0,16+7
- IF j=0
- a=0 TO 12 STEP2:RGB 15,15,15-a,0,a/2+24:NEXT:RGB 15,0,0,0,24+7
- ENDIF
- a=0 TO 12 STEP2:RGB 15,15-a,15-a,15-a,a/2+32:NEXT:RGB 15,0,0,0,32+7
- IF j=2
- a=0 TO 12 STEP2:RGB 15,0,15-a,15,a/2+40:NEXT:RGB 15,0,0,0,40+7
- ENDIF
- ENDIF
- a=0 TO 31:RGB a,0,0,0:NEXT
- NEXT:COLOUR 7:RGB 0,0,0,0,96
- USE SLICE 1
- j=0 TO 12 STEP 2:RGB 15,15,15-j,0,j/2:NEXT
- j=0 TO 12 STEP 2:RGB 15,0,15-j,15,j/2+16:NEXT
- humes=10
-
- .newwave:
- VBLANK
- VWAIT:DMA 0:USE SCREEN 4:CLS
- a=0 TO 1
- md(a)=0:IF lives(a)>=0 THEN GOSUB newman
- NEXT
- GOSUB lshow
- '
- gowave:wave=wave+1
-
- IF wave MOD5=0 THEN humes=10:GOSUB colrmnts
- '
- 'lander settings
- diff1=LIMIT(diff1+.125,0,12):diff2=LIMIT(diff2+.125,0,4)
- diff3=LIMIT(diff3-.001,.5,10)
- diff4=LIMIT(diff4-.001,.5,10):diff8=LIMIT(diff8-32,64,1024)
- diff7=LIMIT(diff7+4,0,25)
- '
- 'bomber settings
- diff10=LIMIT(diff10+.125,0,4):diff11=LIMIT(diff11+.25,0,6)
- diff12=LIMIT(diff12-.001,.5,10)
- '
- 'swarmer settings
- diff5=LIMIT(diff5+.25,0,6)
- diff6=LIMIT(diff6+.125,0,4)
- diff9=LIMIT(diff9-.001,.5,10)
- '
- 'baiter settings
- diff13=LIMIT(diff13+.25,0,12)
- diff14=LIMIT(diff14-.001,.5,10)
- diff15=LIMIT(diff15-.5,2,10)
- diff16=LIMIT(diff16-16,512,512)
- diff17=LIMIT(diff17-8,128,512)
-
- IF wave<swave THEN GOTO gowave
- '
- GOSUB clraliens:aliens=diff7
- '
- IF humes=0
- n=diff7:GOSUB addmutants:landleft=0
- ELSE
- n=humes:GOSUB addhumes:landleft=diff7
- ENDIF
- n=wave-1:IF n>3 THEN n=3
- IF n>0 THEN GOSUB addpods
- n=wave-1 ASL1:IF n>5 THEN n=5
- IF n>0 THEN GOSUB addbomber
- '
- wt=0:bwait=diff16
- frame=1:anim1=0:anim1a=1:landin=diff8
- aland=0:pflag=1:space=0:mutants=0
- GOSUB drawmnts:GOSUB scoreup
- VWAIT:DMA 1
- VBLANK vrout
- IF gmode>0 THEN VWAIT:USE SLICE 0:FADEIN 0
- VWAIT:USE SLICE 2:FADEIN 0
-
- .main:
- main2:IF frame>1 THEN GOTO main
- fref=1:VWAIT:frame=3
- '
- j=0 TO 1
- IF bang(j)>0
- IF bang(j)=1
- IF smarts(j)>0
- USE SLICE j ASL1
- RGB 0,15,15,15
- bang(j)=2
- smarts(j)=smarts(j)-1:pflag=1
- ELSE
- bang(j)=0
- ENDIF
- ELSE
- USE SLICE j ASL1
- RGB 0,0,0,0
- bang(j)=0
- ENDIF
- ENDIF
- NEXT
- '
- UNQUEUE db
- '
- IF landleft>0
- IF aland=0 THEN GOTO runout
- landin=landin-1
- IF landin=0
- runout
- landin=diff8
- n=landleft:IF n>4 THEN n=4
- landleft=landleft-n
- aland=aland+n
- GOSUB addlanders
- ENDIF
- ENDIF
- bwait=bwait-1
- IF bwait=0
- bwait=diff17
- GOSUB addbait
- ENDIF
- anim1=anim1+anim1a
- IF anim1=4 THEN anim1a=-anim1a
- IF anim1=0 THEN anim1a=-anim1a
- j=0 TO 78
- IF at(j)>0
- IF at(j)<1024
- IF at(j)<128
- IF at(j)>4
- l=0 TO 1
- IF md(l)<>0
- k=x2(l)+mx2(l):m=my(l)+16
- IF ax(j)>k-9
- IF ax(j)<k+16
- IF ay(j)>m-4
- IF ay(j)<m+7
- IF at(j)>4
- IF at(j)<9
- ouch:lshot=1-l
- aliens=aliens-1
- IF at(j)=5 THEN aland=aland-1
- ENDIF
- ENDIF
- SOUND 16,1
- k=j:GOSUB blowup
- ENDIF
- ENDIF
- ENDIF
- ENDIF
- ENDIF
- NEXT
- ENDIF
- osx=ax(j)ASR3+80:osy=LIMIT(ay(j)-16ASR2,0,23)+2
- GOSUB alientab(at(j))
- USE SCREEN 4
- IF at(j)>127 THEN GOTO unplot
- IF at(j)>0
- k=ax(j)ASR3+80:l=LIMIT(ay(j)-16ASR2,0,23)+2
- PLOT k,l,ac(j)
- IF INT(k)<>INT(osx)
- unplot
- PLOT osx,osy,0
- GOTO pdone
- ENDIF
- IF INT(l)<>INT(osy) THEN GOTO unplot
- ELSE
- GOTO unplot
- ENDIF
- pdone
- ELSE
- GOSUB sxget
- s=ae(j):s2=s ASL1:n=as(j):GOSUB sxget:oay=ay(j)
- GOSUB aline
- ay(j)=LIMIT(oay-s,0,120)
- GOSUB aline2
- ay(j)=LIMIT(oay+s,0,120)
- GOSUB aline2
- ay(j)=oay
- IF at(j)<256
- ae(j)=s+2:IF ae(j)=64 THEN at(j)=0
- ELSE
- ae(j)=s-2:IF ae(j)=0 THEN at(j)=at(j) & 127
- ENDIF
- ENDIF
- ENDIF
- ENDIF
- NEXT
- '
- IF pflag=1 THEN pflag=0:GOSUB lshow
- IF pscore=1 THEN pscore=0:GOSUB scoreup
- IF space>0
- IF space=1
- space=2:GOSUB gospace
- ELSE
- IF at(0)=0
- space=0
- k=0 TO 78:IF at(k)>1023 THEN at(k)=at(k)-1024
- NEXT
- n=mutants:GOSUB addmutants
- ENDIF
- ENDIF
- ENDIF
- IF space=1 THEN space=0:GOSUB gospace
- IF gmode>1
- l=0 TO 1
- IF killme(l)>0
- IF gmode=2 THEN lives(l)=lives(l)+1
- killme(l)=0:k=77+l:GOSUB blowup
- ax(k)=x2(l)+mx2(l):ay(k)=my(l)+16
- ENDIF
- NEXT
- ENDIF
- IF JOYB(0)=2 THEN END
- IF aliens>0 THEN GOTO main
- wt=wt+1:IF wt<20 THEN GOTO main
- IF gameova=1 THEN GOTO gover
- IF wt=20 THEN lot=lshot:x2lot=x2(lot)
- k=74 TO 76:at(k)=0:NEXT
- USE SCREEN 6
- bon=wave*100:IF bon>500 THEN bon=500
- LOCATE x2lot LSR3+6,2
- PRINT "ATTACK WAVE ";wave;" COMPLETED"
- IF humes>0
- LOCATE x2lot LSR3+12,4
- PRINT "BONUS X ";bon
- j=0:k=25 TO 34
- ax(k)=j+x2lot+80:IF ax(k)>=1280 THEN ax(k)=ax(k)-1280
- IF ax(k)<0 THEN ax(k)=ax(k)+1280
- ay(k)=64
- IF at(k)=2 THEN j=j+12:ad1(k)=0
- NEXT
- ENDIF
- IF wt<80 THEN GOTO main
- sa=INT(bon/100)*humes:k=0 TO 1
- IF lives(k)>=0 THEN GOSUB addscore
- NEXT
- '
- gover:IF gmode>0 THEN VWAIT:USE SLICE 0:FADEOUT 0
- VWAIT:USE SLICE 2:FADEOUT 0:UNQUEUE 0:UNQUEUE 1:UNQUEUE 2
- IF gameova=0 THEN GOTO newwave
- VBLANK
- k=0 TO 6:FREE SCREEN k:NEXT:lshot=0
- j=1-SGN(gmode) TO 1
- m=0 TO 1
- k=0 TO 23
- IF score(j)>hiscores(m,k)
- VWAIT:DMA 0
- SLICE END:SLICE 0,sl0:SCREEN 0,320,224,3:DISPLAY 320,224,0,0,0,0:SHOW 0:USE SCREEN 0
- RGB 2,0,0,8:RGB 5,15,15,15:RGB 6,15,15,15
- c=8:a=1:y=56 TO 18*8
- RGB 1,c,c,15,y:c=c+a
- IF c=15 THEN a=-a
- IF c=8 THEN a=-a
- NEXT:COLOUR 1,0
- LOCATE 16,7:PRINT "PLAYER ";j+1;
- LOCATE 13,9:PRINT "CONGRATULATIONS";
- LOCATE 9,11:PRINT "YOU HAVE QUALIFIED FOR";
- IF m=0
- LOCATE 9,13:PRINT "!THE BEST OF THE BEST!";
- ELSE
- LOCATE 13,13:PRINT "!TODAY!S BEST!";
- ENDIF
- LOCATE 9,15
- PRINT "PLEASE ENTER YOUR NAME";
- LOCATE 18,17:COLOUR 1,2:PRINT " ";
- LOCATE 16,17:VWAIT:DMA 1
- n$=EDIT$("",8)
- l=22
- insloop
- IF l>=k
- hinames$(m,l+1)=hinames$(m,l):hiscores(m,l+1)=hiscores(m,l)
- l=l-1:GOTO insloop
- ENDIF
- hinames$(m,k)=n$:hiscores(m,k)=score(j)
- IF m=0 THEN lshot=1
- k=23
- ENDIF
- NEXT
- NEXT
- NEXT
- IF lshot=1 THEN GOSUB savehis
- GOTO hiscores
-
- clraliens
- j=0 TO 78:at(j)=0:NEXT:RETURN
-
- lshow:' SHOW lives left
- pflag=0:USE SCREEN 5:UNQUEUE 2
- j=1-SGN(gmode) TO 1
- k=lives(j)
- IF k>0
- ax=0:y=20:IF j=1 THEN ax=272:y=0
- x=ax:IF k>12 THEN k=12
- l=1 TO k
- QBLIT 2,55,x,y:x=x+8
- IF l=6 THEN x=ax:y=y+4
- NEXT
- ENDIF
- k=smarts(j)
- IF k>0
- IF k>6 THEN k=6
- x=0:y=14:IF j=1 THEN x=272:y=10
- l=1 TO k:QBLIT 2,56,x,y:x=x+8
- NEXT
- ENDIF
- NEXT
- RETURN
-
- .gospace:mutants=aland+landleft+mutants:landleft=0
- k=40 TO 47:IF at(k)<>4 THEN at(k)=0
- NEXT
- j=66 TO 73:IF at(k)<>4 THEN at(k)=0
- NEXT
- USE SCREEN 4:k=0 TO 76
- IF at(k)>0
- IF at(k)<128
- IF at(k)=5 THEN at(k)=0
- PLOT ax(k)LSR 3+80,LIMIT(ay(k)-16LSR 2,0,23)+2,0
- at(k)=at(k)| 1024
- ENDIF
- ENDIF
- NEXT
- l=0 TO 1
- k=0 TO 9
- m=l*12+k
- ax(m)=k ASL 5+x2(l):IF ax(m)>=1280 THEN ax(m)=ax(m)-1280
- ay(m)=mh(ax(m))+16:at(m)=128:ae(m)=0:as(m)=INT(RND*7+37)
- ac(m)=0
- NEXT
- NEXT
- USE SCREEN 5:k=2 TO 25
- LINE 80,k,239,k,0:NEXT
- VBLANK:k=0 TO 2 STEP 2
- USE SLICE k:RGB 9,0,0,0:RGB 10,0,0,0:RGB 11,0,0,0
- NEXT:RGB 9+32,0,0,0:RGB 10+32,0,0,0:RGB 11+32,0,0,0
- VBLANK vrout:RETURN
-
- blowup:
- ae(k)=x2(l)+144
- ac(k)=0:as(k)=l
- md(l)=0:mx(l)=320
- at(k)=4:ad1(k)=0:ad2(k)=0
- RETURN
-
- scoreup:USE SCREEN 5
- IF gmode>0
- LOCATE 0,0
- PRINT INT(score(0));
- ssk=score(0)-INT(score(0))
- IF ssk=0
- PRINT "00";
- ELSE
- PRINT ssk*100;
- ENDIF
- ENDIF
- '
- LOCATE 33,2
- PRINT INT(score(1));
- ssk=score(1)-INT(score(1))
- IF ssk=0
- PRINT "00";
- ELSE
- PRINT ssk*100;
- ENDIF
- RETURN
-
- aline2
- sx(0)=sx(0)-s2:sx(1)=sx(1)-s2
- aline
- GOSUB blim2
- sx(0)=sx(0)-s2:sx(1)=sx(1)-s2:GOSUB blim2
- sx(0)=s2 ASL1+sx(0):sx(1)=s2 ASL1+sx(1):GOTO blim2
-
- sxget:k=0 TO 1:sx(k)=ax(j)-x2(k)
- IF sx(k)>=1280 THEN sx(k)=sx(k)-1280
- IF sx(k)<0 THEN sx(k)=sx(k)+1280
- NEXT:RETURN
-
- alientab:TABLE dead,dead,humanoid,bonus,youdie,lander
- TABLE pod,swarmer,bomber,bullet,bomb,baiter
-
- dead:RETURN
-
- .youdie:
- GOSUB sxget
- IF ad2(j)=0
- s=ad1(j)
- k=0 TO 340 STEP 22.5
- l=QSIN(k)*s:ay=LIMIT(QCOS(k)*s+ay(j),0,120)
- n=0 TO 1
- ax=sx(n)+l
- IF ax>=0
- IF ax<288
- USE SCREEN n ASL1+db
- QBLIT db,54,ax+32,ay
- ENDIF
- ENDIF
- NEXT
- NEXT
- ad1(j)=s+4
- IF s>90
- l=as(j)
- IF lives(l)=0
- lives(l)=-1
- IF lives(0)+lives(1)=-2
- aliens=0:gameova=1
- ENDIF
- at(j)=0:USE SCREEN 6
- LOCATE x2(l)LSR 3+10,l ASL 1+3
- PRINT "GAME OVER PLAYER "l+1:RETURN
- ELSE
- ad2(j)=1:ax(j)=ae(j):ad1(j)=0:ay(j)=56
- RETURN
- ENDIF
- ENDIF
- RETURN
- ENDIF
- l=as(j)
- IF aliens=0
- IF lives(l)>0 THEN GOTO reborn
- at(j)=0:RETURN
- ENDIF
- '
- n=10-INT(ad1(j) LSR 4)
- IF n=0
- reborn
- killme(l)=0
- USE SCREEN 6
- LOCATE x2(l)LSR3+18,l ASL1+3:PRINT " ";
- pflag=1
- lives(l)=lives(l)-1
- at(j)=0:md(l)=1:mx(l)=144:mxs(l)=0:my(l)=40
- mx2(l)=144
- RETURN
- ENDIF
- IF JOYB(l)>0 THEN lf(l)=1:GOTO reborn
- USE SCREEN 6
- LOCATE x2(l)LSR3+18,l ASL1+3:PRINT n;" ";
- ad1(j)=ad1(j)+1:RETURN
-
- .swarmer:
- GOSUB addx:GOSUB sxget
- ay(j)=ays(j)*ad2(j)+ay(j)
- GOSUB revchk
- ad2(j)=ad2(j)+ae(j)
- IF ABS(ad2(j))>2.5
- ae(j)=-ae(j)
- ELSE
- IF ABS(ad2(j))<-2.5
- ae(j)=-ae(j)
- ENDIF
- ENDIF
- IF ad1(j)=0
- 'should i go angry
- k=0 TO 1
- IF md(k)<>0
- IF SGN(axs(j))<>md(k)
- l=x2(k)+mx2(k)
- IF l>ax(j)
- IF md(k)=-1
- IF l-ax(j)<80
- angry:ad1(j)=20
- axs(j)=axs(j)ASL1
- SOUND 13,3
- k=1
- ENDIF
- ENDIF
- ELSE
- IF md(k)=1
- IF ax(j)-l<80 THEN GOTO angry
- ENDIF
- ENDIF
- ENDIF
- ENDIF
- NEXT
- ELSE
- ad1(j)=ad1(j)-1
- IF ad1(j)=0
- axs(j)=axs(j)ASR 1
- ENDIF
- IF RND>diff9 THEN GOSUB tryfire
- ENDIF
- swdone:
- n=20+anim1:GOSUB blim
- sa=1.00:GOSUB hitme
- n=41:GOTO killme
-
- .bomb:ad1(j)=ad1(j)-1:IF ad1(j)=0 THEN at(j)=0:RETURN
- GOSUB sxget
- n=36:GOTO blim
-
- baithome
- m=x2(l)+mx2(l)
- IF ax(k)<m
- axs(k)=ABS(axs(k))
- ELSE
- axs(k)=-ABS(axs(k))
- ENDIF
- IF ay(k)-16<my(l)
- ays(k)=ABS(ays(k))
- ELSE
- ays(k)=-ABS(ays(k))
- ENDIF
- RETURN
-
- .baiter:
- GOSUB addx:GOSUB sxget
- ay(j)=ay(j)+ays(j):GOSUB revchk
- ad1(j)=ad1(j)-1
- IF ad1(j)=0
- ad1(j)=diff15
- l=ad2(j)
- IF sx(l)<320
- m=axs(j):axs(j)=ays(j):ays(j)=m
- ENDIF
- k=j:GOSUB baithome
- ENDIF
- IF RND>diff14 THEN GOSUB tryfire
- n=30+anim1:GOSUB blim
- sa=2.00:GOSUB hitme:n=43:GOTO killme2
-
- .bomber:
- GOSUB addx:GOSUB sxget
- ay(j)=ays(j)*ad2(j)+ay(j)
- GOSUB revchk
- ad2(j)=ad2(j)+ad1(j)
- IF ABS(ad2(j))>diff11
- ad1(j)=-ad1(j)
- ELSE
- IF ABS(ad2(j))<-diff11
- ad1(j)=-ad1(j)
- ENDIF
- ENDIF
- bodone:
- IF RND>diff12 THEN GOSUB trybomb
- n=25+anim1:GOSUB blim
- sa=2.50:GOSUB hitme
- n=42:GOTO killme
-
- revchk:IF ay(j)<16 THEN ay(j)=16:ays(j)=-ays(j)
- IF ay(j)>102 THEN ay(j)=102:ays(j)=-ays(j)
- RETURN
-
- .pod:
- GOSUB addx:ay(j)=ay(j)+ays(j)
- GOSUB revchk
- GOSUB sxget
- n=15+anim1:GOSUB blim
- sa=10.00:GOSUB hitme
- n=INT(RND ASL 2)+1:GOSUB addswarm
- n=40:GOTO killme
-
- .lander:
- l=ad2(j)
- IF ad1(j)=0:' cruising
-
- GOSUB addx
- IF ABS(ax-ax(l))<4
- ad1(j)=1
- GOTO ldone
- ENDIF
- IF INT(ay(j))<mh(ax)-16 THEN ay(j)=ay(j)+ays(j)
- IF INT(ay(j))>mh(ax)-16 THEN ay(j)=ay(j)-ays(j)
- GOSUB humestill
- GOTO ldone
- ENDIF
- IF ad1(j)=1:' going down...
-
- GOSUB humestill
- IF ay(j)>ay(l)-12
- SOUND 11,1
- ad1(j)=2
- ad2(l)=j
- ad1(l)=1
- GOTO ldone
- ENDIF
- ay(j)=ay(j)+ays(j)
- GOTO ldone
- ENDIF
- IF ad1(j)=2:'picking up...
-
- IF at(l)<>2 THEN ad1(j)=0:GOTO ldone
- ay(j)=ay(j)-ays(j)
- IF ay(j)<8
- ad1(j)=3:GOSUB pickman:ad2(j)=pgo4:ac(j)=3:' make mutant
- aland=aland-1:mutants=mutants+1
- axs(j)=ABS(axs(j)ASL1)
- ENDIF
- GOTO ldone
- ENDIF
- IF ad1(j)=3
- IF ax(j)<x2(l)+mx2(l)
- ax(j)=ax(j)+axs(j):m=-1
- ELSE
- ax(j)=ax(j)-axs(j):m=1
- ENDIF
- k=my(l)+16
- IF m=md(l)
- IF ABS(x2(l)+mx2(l)-ax(j))>ABS(k-ay(j))
- goaway
- ay(j)=LIMIT(ay(j)-(SGN(k-ay(j))*ays(j)),16,104)
- GOTO mdone
- ELSE
- homein
- ay(j)=LIMIT(SGN(k-ay(j))*ays(j)+ay(j),16,104)
- GOTO mdone
- ENDIF
- ENDIF
- GOTO homein
- mdone:
- IF ax(j)>=1280
- ax(j)=ax(j)-1280
- ELSE
- IF ax(j)<0
- ax(j)=ax(j)+1280
- ENDIF
- ENDIF
- GOSUB sxget
- IF RND>diff4 THEN GOSUB tryfire
- n=10+anim1:GOSUB blim
- sa=1.50:GOSUB hitme
- n=39:GOTO killme
- ENDIF
-
- ldone:GOSUB sxget
- IF RND>diff3 THEN GOSUB tryfire
-
- n=anim1:GOSUB blim
-
- sa=1.50:GOSUB hitme:aland=aland-1
- IF ad1(j)=2
- ae(ad2(j))=lshot
- ENDIF
- n=37:GOTO killme
-
- pickman:pgo4=1-pgo4
- IF lives(pgo4)<0 THEN pgo4=1-pgo4
- RETURN
-
- humestill:IF at(l)<>2 THEN GOTO newhume
- IF ad1(l)<>0 THEN GOTO newhume
- RETURN
-
- newhume:POP RETURN:ad1(j)=0:k=j:GOSUB findhume
- GOTO ldone
-
- addx:ax=ax(j)+axs(j):IF ax<0 THEN ax=ax+1280
- IF ax>=1280 THEN ax=ax-1280
- ax(j)=ax:RETURN
-
- .humanoid:
- IF ad1(j)=1
- l=ad2(j):IF at(l)<>5 THEN ad1(j)=2:ays(j)=0:SOUND 15,2:GOTO hdone
- IF ad1(l)=3 THEN GOTO hdie
- ay(j)=ay(j)-ays(l)
- GOTO hdone
- ENDIF
- IF ad1(j)=2
- ay(j)=ay(j)+ays(j)
- IF ay(j)>=mh(ax(j))-HBLIT(5)+16
- SOUND 17,2
- n=44:GOSUB addbonus:sa=2.50:k=ae(j):GOSUB addscore
- ad1(j)=0:GOTO hdone
- ENDIF
- k=0 TO 1
- IF md(k)<>0
- l=mo(k)+mx(k):IF l>=1280 THEN l=l-1280
- IF ax(j)>=l-9
- IF ax(j)<l+16
- IF ay(j)>my(k)+7
- IF ay(j)<my(k)+25
- SOUND 17,2
- n=49:GOSUB addbonus:sa=5.00:GOSUB addscore
- ad1(j)=3:ad2(j)=k:k=1
- ENDIF
- ENDIF
- ENDIF
- ENDIF
- ENDIF
- NEXT
- ays(j)=ays(j)+.05
- GOTO hdone
- ENDIF
- IF ad1(j)=3
- l=ad2(j):IF md(l)=0 THEN ad1(j)=2:ays(j)=0:GOTO hdone
- ax(j)=x2(l)+mx2(l)+6
- IF ax(j)>=1280
- ax(j)=ax(j)-1280
- ELSE
- IF ax(j)<0
- ax(j)=ax(j)+1280
- ENDIF
- ENDIF
- ay(j)=my(l)+24
- IF ay(j)>mh(ax(j))-HBLIT(5)+24
- SOUND 17,2
- n=49:GOSUB addbonus:sa=5.00:k=l:GOSUB addscore
- ad1(j)=0:GOTO hdone
- ENDIF
- GOSUB sxget:n=5+anim1:GOTO blim
- ENDIF
- hdone:GOSUB sxget:n=5+anim1
- GOSUB blim
- sa=0:GOSUB hitme
- hdie:n=38:humes=humes-1:IF humes=0 THEN space=1
- GOTO killme2
- '
- killme:aliens=aliens-1
- killme2: 'set me TO exploding with pixel n
- at(j)=128:as(j)=n:ae(j)=0
- RETURN
-
- bullet:
- ad1(j)=ad1(j)-1:IF ad1(j)=0 THEN at(j)=0:RETURN
- GOSUB addx
- ay(j)=LIMIT(ay(j)+ays(j),0,120)
- GOSUB sxget:n=35:GOTO blim
-
- .bonus:
- ad1(j)=ad1(j)-1:IF ad1(j)=0 THEN at(j)=0:RETURN
- GOSUB addx
- ay(j)=LIMIT(ay(j)+ays(j),0,120)
- GOSUB sxget:n=ad2(j)+anim1:GOTO blim
-
- .blim:' BLIT em (n)
- k=0 TO 1
- IF sx(k)<288
- USE SCREEN k ASL1+db
- QBLIT db,n,sx(k)+32,ay(j)
- ENDIF
- NEXT:RETURN
-
- blim2
- k=0 TO 1
- IF sx(k)>=0
- IF sx(k)<288
- USE SCREEN k ASL1+db
- QBLIT db,n,sx(k)+32,ay(j)
- ENDIF
- ENDIF
- NEXT:RETURN
-
- hitme:' POP me IF i'm not shot
- IF sx(0)>=288 THEN IF sx(1)>=288 THEN POP RETURN:RETURN
- kf=0:k=0 TO 1
- IF bang(k)=2
- IF at(j)<>2
- IF sx(k)<288
- GOSUB kablam
- GOTO nxt2
- ENDIF
- ENDIF
- ENDIF
- l=0 TO 2:bx2=bx(l,k):by2=by(l,k)+16
- IF ba(l,k)<>0
- IF by2>=ay(j)
- IF by2<ay(j)+10
- IF bx2<sx(k)+10
- IF bx2+16>sx(k)
- GOSUB kablam
- bx(l,k)=320
- ba(l,k)=1
- ENDIF
- ENDIF
- ENDIF
- ENDIF
- ENDIF
- NEXT
- nxt2:NEXT:IF kf=0 THEN POP RETURN
- RETURN
-
- kablam:GOSUB addscore
- lshot=k:kf=1:SOUND 14,2
- RETURN
-
- addscore:'add sa TO score of player k
- oldt=INT(score(k)/100)
- pscore=1:score(k)=score(k)+sa
- IF INT(score(k)/100)>oldt
- lives(k)=lives(k)+1:smarts(k)=smarts(k)+1
- pflag=1
- ENDIF
- RETURN
-
- .addbait:
- k=74 TO 76
- IF at(k)=0
- at(k)=256+11
- ax(k)=RND*1280
- ay(k)=RND*48+40
- axs(k)=RND+diff13
- ays(k)=RND+diff13 ASR 1
- ac(k)=3
- ae(k)=64
- as(k)=43
- GOSUB pickman
- ad2(k)=pgo4:l=pgo4
- GOSUB baithome
- ad1(k)=diff15
- k=76
- ENDIF
- NEXT:RETURN
-
- .addswarm:' add n swarmers
- kk2=-kk2
- k=51 TO 60
- IF at(k)=0
- aliens=aliens+1
- ac(k)=5
- ax(k)=ax(j)
- ay(k)=ay(j)
- axs(k)=diff5+RND*kk2
- ays(k)=diff6+RND
- at(k)=7
- ad1(k)=0
- ad2(k)=1
- ae(k)=.125
- n=n-1:IF n=0 THEN k=60
- ENDIF
- NEXT:RETURN
-
- .addbomber:' add n bombers
- kk=RND*1280:k2=RND ASL 1+2
- IF RND>.5 THEN k2=-k2
- k=61 TO 65
- IF at(k)=0
- aliens=aliens+1
- ac(k)=6
- ax(k)=kk
- kk=kk+32:IF kk>=1280 THEN kk=kk-1280
- ay(k)=RND*48+40
- axs(k)=k2
- ays(k)=diff10+RND
- at(k)=256+8
- ae(k)=64
- as(k)=42
- ad2(k)=1
- ad1(k)=.125
- n=n-1:IF n=0 THEN k=65
- ENDIF
- NEXT:RETURN
-
- .addpods:' add n pods
- k=48 TO 50
- IF at(k)=0
- aliens=aliens+1
- ac(k)=4
- ax(k)=480+(RND*160)
- ay(k)=RND*32+32
- axs(k)=RND ASR1
- IF RND>.5 THEN axs(k)=-axs(k)
- ays(k)=RND ASR1
- IF RND>.5 THEN ays(k)=-ays(k)
- at(k)=256+6
- ad1(k)=0
- ad2(k)=0
- ae(k)=64
- as(k)=40
- n=n-1:IF n=0 THEN k=50
- ENDIF
- NEXT:RETURN
-
- .addmutants
- k=0 TO 24
- IF at(k)=0
- ac(k)=3
- ax(k)=RND*1280
- ay(k)=32
- axs(k)=RND+diff1 ASL 1
- ays(k)=RND+diff2
- at(k)=256+5
- ad1(k)=3
- GOSUB pickman
- ad2(k)=pgo4
- ae(k)=64
- as(k)=39
- n=n-1:IF n=0 THEN k=24
- ENDIF
- NEXT:RETURN
-
- .addlanders:' add n landers
- k=0 TO 24
- IF at(k)=0
- ac(k)=1
- ax(k)=RND*1280
- ay(k)=32
- axs(k)=RND+diff1
- IF RND>.5 THEN axs(k)=-axs(k)
- ays(k)=RND+diff2
- at(k)=256+5
- ad1(k)=0
- ad2(k)=0
- ae(k)=64
- as(k)=37
- GOSUB findhume
- n=n-1:IF n=0 THEN k=24
- ENDIF
- NEXT:RETURN
-
- tryfire:'try TO fire a bullet at player
- GOSUB pickman:IF sx(pgo4)>=288 THEN RETURN
- '
- addbullet:' add a bullet - pgo4 is player TO go FOR
- k=40 TO 47
- IF at(k)=0
- ax(k)=ax(j)
- ay(k)=ay(j)
- h=x2(pgo4)+mx2(pgo4)-ax(j)
- v=my(pgo4)+16-ay(j)
- IF ABS(v)>ABS(h)
- ays(k)=SGN(v)ASL3:axs(k)=ABS(h)/ABS(v)*SGN(h)ASL3
- ELSE
- axs(k)=SGN(h)ASL3:ays(k)=ABS(v)/ABS(h)*SGN(v)ASL3
- ENDIF
- ad1(k)=32
- at(k)=9
- k=47
- SOUND 12,3
- ENDIF
- NEXT:RETURN
-
- trybomb
- IF sx(0)<288 THEN GOTO addbomb
- IF sx(1)>=288 THEN RETURN
-
- addbomb
- k=66 TO 73
- IF at(k)=0
- ax(k)=ax(j)
- ay(k)=ay(j)
- ad1(k)=64
- at(k)=10
- k=73
- ENDIF
- NEXT:RETURN
-
- findhume:' find a humanoid FOR lander k TO home in on.
- ad2(k)=25:m=25 TO 34
- IF at(m)=2
- IF ad1(m)=0
- ad2(k)=m:m=34
- ENDIF
- ENDIF
- NEXT
- RETURN
-
- addhumes:' add n humanoids
- k=25 TO 34
- IF at(k)=0
- ac(k)=2
- ax(k)=RND*1280
- ay(k)=mh(ax(k))-HBLIT(5)+16
- axs(k)=0
- ays(k)=0
- ad1(k)=0
- ad2(k)=0
- at(k)=2
- n=n-1
- IF n=0 THEN k=34
- ENDIF
- NEXT:RETURN
-
- addbonus:' add a bonus
- m=35 TO 39
- IF at(m)=0
- at(m)=3
- ax(m)=ax(j)
- ay(m)=ay(j)
- axs(m)=RND ASL 1
- ays(m)=-RND
- ad1(m)=40
- ad2(m)=n
- m=39
- ENDIF
- NEXT
- RETURN
-
- newman:' start off man a
- mo(a)=1280ASR1-144:mx(a)=80:my(a)=a ASL 5+32:mxs(a)=0:md(a)=1:ms(a)=1
- RETURN
-
- vrout
-
- 'all the follwing happens in the vertical blank!
- '
- 'graphic intensive stuff below!
-
- frame=frame-1
- IF fref=1
- fref=0
- db=1-db
- x2(0)=mo(0):x2(1)=mo(1)
- xo2(0)=xo(0):xo2(1)=xo(1)
- xo(0)=0:xo(1)=0:mx2(0)=mx(0):mx2(1)=mx(1)
- ENDIF
- db2=1-db
- USE SLICE 0:SPRITE ms(0),mx(0),my(0),0
- SPRITE 4
- IF md(1)<>0
- a=mo(1)+mx(1)-mo(0):IF a>=1280 THEN a=a-1280
- IF a<0 THEN a=a+1280
- IF a<320 THEN SPRITE ms(1),a,my(1),4
- ENDIF
- SHOWB 6,mo(0),0
- SHOWF db2,xo2(0)+32,16
- USE SLICE 2:SPRITE ms(1),mx(1),my(1),4
- SPRITE 0
- IF md(0)<>0
- a=mo(0)+mx(0)-mo(1):IF a>=1280 THEN a=a-1280
- IF a<0 THEN a=a+1280
- IF a<320 THEN SPRITE ms(0),a,my(0),0
- ENDIF
- SHOWB 6,mo(1),0
- SHOWF db2+2,xo2(1)+32,16
- a=0 TO 1:b=0 TO 2
- IF ba(b,a)<>0
- jx=bx(b,a):jb=a ASL2+1+b
- USE SLICE a ASL1:SPRITE bs(b,a),jx,by(b,a),jb
- jx=mo(a)+jx-mo(1-a)
- IF jx>=1280
- jx=jx-1280
- ELSE
- IF jx<0 THEN jx=jx+1280
- ENDIF
- USE SLICE 1-a ASL1
- IF jx<288
- SPRITE bs(b,a),jx,by(b,a),jb
- ELSE
- SPRITE jb
- ENDIF
- ENDIF
- NEXT:NEXT
- '
- 'END of graphics
- '
- co=co+.5:asc=ASC(INKEY$)
- a=0 TO 1
- jb=JOYB(a):IF md(a)=0 THEN jb=0
- IF jb>0
- IF lf(a)=1 THEN jb=0
- lf(a)=1
- ELSE
- lf(a)=0
- ENDIF
- fl=0:ma=1-a
- b=0 TO 2
- IF ba(b,a)<>0
- bx=bx(b,a)+ba(b,a)
- IF bx<-15
- killbull
- bx=a ASL2+1+b:USE SLICE a ASL1:SPRITE bx
- USE SLICE ma ASL1:SPRITE bx
- ba(b,a)=0:GOTO morebull
- ENDIF
- IF bx>=288 THEN GOTO killbull
- IF gmode>1
- IF md(ma)<>0
- IF bx+16+mo(a)>mx(ma)+mo(ma)
- IF bx+mo(a)<mx(ma)+16+mo(ma)
- by=by(b,a)
- IF by>=my(ma)
- IF by<my(ma)+9
- killme(ma)=1:GOTO killbull
- ENDIF
- ENDIF
- ENDIF
- ENDIF
- ENDIF
- ENDIF
- bx(b,a)=bx
- ba(b,a)=ba(b,a)*1.05
- ELSE
- IF jb>0
- SOUND 10,0
- bs(b,a)=17:IF md(a)<0 THEN bs(b,a)=18
- ba(b,a)=md(a)ASL 2
- bx(b,a)=mx(a)
- by(b,a)=my(a)+4
- jb=0
- ENDIF
- ENDIF
- morebull:NEXT
- IF md(a)<>0
- ma=0:ms(a)=a ASL2+2-md(a)
- my(a)=LIMIT(JOYY(a)ASL 1+my(a),0,89)
- jx=JOYX(a)
- IF jx<>0
- IF jx=md(a)
- ms(a)=co &1+ms(a)+8
- IF md(a)>0
- IF mx(a)<>136
- ma=SGN(mx(a)-136)
- mx(a)=mx(a)-ma
- ENDIF
- ELSE
- IF mx(a)<>136
- ma=SGN(mx(a)-136)
- mx(a)=mx(a)-ma
- ENDIF
- ENDIF
- IF ABS(mxs(a))<7
- mxs(a)=md(a)ASR3+mxs(a)
- IF ABS(mxs(a))>6
- mxs(a)=mxs(a)-SGN(mxs(a))
- ENDIF
- ENDIF
- ELSE
- md(a)=jx
- ENDIF
- ELSE
- mxs(a)=SGN(mxs(a))*LIMIT(ABS(mxs(a))-.05,0,32767)
- IF md(a)>0
- IF mx(a)>80
- mx(a)=mx(a)-2:ma=2
- ENDIF
- ELSE
- IF mx(a)<192
- mx(a)=mx(a)+2:ma=-2
- ENDIF
- ENDIF
- ENDIF
- ma=ma+mxs(a):mo=mo(a)+ma
- xo(a)=xo(a)+ma
- xo2(a)=xo2(a)+ma
- IF mo>=1280 THEN mo=mo-1280
- IF mo<0 THEN mo=mo+1280
- mo(a)=mo
- USE SLICE 1
- ma=mo+mx(a):IF ma>=1280 THEN ma=ma-1280
- SPRITE 19+a,ma ASR3+79,my(a)ASR2+1,a ASL1
- IF asc=smart(a) THEN bang(a)=1
- ELSE
- USE SLICE 1
- SPRITE a ASL1
- ENDIF
- NEXT
- RETURN
-
- colrmnts:'set mountain AND star COLOURs
- RGB 9+32,9,9,0
- RGB 10+32,6,6,0
- RGB 11+32,3,3,0
- RETURN
-
- drawmnts:'draw mountains
- USE SCREEN 6:CLS:IF humes=0 THEN RETURN
- x=0 TO 1279
- USE SCREEN 6
- PLOT x,mh(x),1:PLOT x,mh(x)+1,2:PLOT x,mh(x)+2,3
- IF x<320
- PLOT x+1280,mh(x),1
- PLOT x+1280,mh(x)+1,2
- PLOT x+1280,mh(x)+2,3
- ENDIF
- IF x & 7=0
- IF x=0
- osx=80:osy=mh(x) LSR2
- ELSE
- USE SCREEN 5
- LINE osx,osy,x LSR3+80,mh(x) LSR2,4
- osx=x LSR3+80:osy=mh(x) LSR2
- ENDIF
- ENDIF
- NEXT:RETURN
-
- makemnts:'make up some random mountains
- y=93:a=-2:t=1
- x=0 TO 1279
- mh(x)=y:IF x>1250 THEN y=LIMIT(y+2,0,93):GOTO mmdone
- y=LIMIT(y+a,59,93)
- t=t-1
- IF t<=0
- t=RND*10:a=-a
- ENDIF
- mmdone
- NEXT:RETURN
-
- loadbl
- RESTORE dblit
- llp:READ a$:IF a$="" THEN RETURN
- READ a:BLOAD p$+a$,a,1
- GOTO llp
-
- *dblit
- DATA "lander.def",0
- DATA "humanoid.def",5
- DATA "mutant.def",10
- DATA "pod.def",15
- DATA "swarmer.def",20
- DATA "bomber.def",25
- DATA "baiter.def",30
- DATA "bullet.def",35
- DATA "bomb.def",36
- DATA "landerpix.def",37
- DATA "humanoidpix.def",38
- DATA "mutantpix.def",39
- DATA "podpix.def",40
- DATA "swarmerpix.def",41
- DATA "bomberpix.def",42
- DATA "baiterpix.def",43
- DATA "250.def",44
- DATA "500.def",49
- DATA "youpix.def",54
- DATA "littleman.def",55
- DATA "littlesmart.def",56
- DATA "hi1.def",57
- DATA "hi2.def",58
- DATA "hi3.def",59
- DATA "hi4.def",60
- DATA "hi5.def",61
- DATA "hi6.def",62
- DATA "hi7.def",63
- DATA "hi8.def",64
- DATA "hi9.def",65
- DATA "title.def",66
- DATA "solo.def",74
- DATA "team.def",75
- DATA "mean.def",76
- DATA "evil.def",77
- DATA "cursor.def",78
- DATA ""
-
- loadsp
- SPLOAD p$+"youright.def",1,16+32
- SPLOAD p$+"youleft.def",3,20+32
- SPLOAD p$+"you2right.def",5,24+32
- SPLOAD p$+"you2left.def",7,28+32
- SPLOAD p$+"yourightfire1.def",9,16+32
- SPLOAD p$+"yourightfire2.def",10,20+32
- SPLOAD p$+"youleftfire1.def",11
- SPLOAD p$+"youleftfire2.def",12
- SPLOAD p$+"you2rightfire1.def",13,24+32
- SPLOAD p$+"you2rightfire2.def",14,28+32
- SPLOAD p$+"you2leftfire1.def",15
- SPLOAD p$+"you2leftfire2.def",16
- SPLOAD p$+"yourfireright.def",17
- SPLOAD p$+"yourfireleft.def",18
- SPLOAD p$+"youscan.def",19
- SPLOAD p$+"you2scan.def",20
- RETURN
-
- text:LOCATE 20-(LEN(t$)/2),CURSY:PRINT t$:PRINT:PRINT
- SOUND 12,0:a=1 TO 100:VWAIT
- IF JOYB(1)>0 THEN a=101
- NEXT:IF a=101 THEN RETURN
- POP RETURN:GOTO gameon
-
- hishow:VWAIT:DMA 0:SLICE END:SLICE 0,sl0:COLOUR 7,5
- SCREEN 0,320+16,224,3:DISPLAY 320,224,0,0,0,0:SHOW 0:USE SCREEN 0
- c=8:a=1:y=0 TO 223 STEP 2
- IF y<16
- RGB 7,15,c,0,y
- ELSE
- RGB 7,0,c,15,y
- ENDIF
- c=c+a
- IF c=15 THEN a=-a
- IF c=8 THEN a=-a
- NEXT
- BLOAD "hicols.def",99,0,0
- x=0 TO 1
- k=x*20
- BLIT 57,k ASL3,16:BLIT 59,k+19 ASL3,16
- BLIT 63,k ASL3,27 ASL3:BLIT 65,k+19 ASL3,27 ASL3
- a=1 TO 18
- BLIT 58,k+a ASL3,16:BLIT 64,k+a ASL3,27 ASL3
- NEXT
- a=3 TO 26:BLIT 60,k ASL3,a ASL3
- j=1 TO 18:BLIT 61,k+j ASL3,a ASL3:NEXT
- BLIT 62,k+19 ASL3,a ASL3
- NEXT
- a=0 TO 23
- LOCATE k+1,a+3:PRINT hinames$(x,a);
- n$=STR$(INT(hiscores(x,a)))
- n=hiscores(x,a)-INT(hiscores(x,a))*100
- n$=n$+STR$(n):IF n=0 THEN n$=n$+"0"
- LOCATE k+19-LEN(n$),a+3:PRINT n$;
- NEXT
- NEXT:COLOUR 7,0
- LOCATE 2,0:PRINT "BEST OF THE BEST";
- LOCATE 24,0:PRINT "TODAY!S BEST";
- VWAIT:DMA 1:SOUND 16,0:RETURN
-
- savehis:ERROR nowrite
- OPEN p$+"hiscores.def",0,OUTPUT
- OUTPUT 0
- k=0 TO 23:PRINT hinames$(0,k):PRINT hiscores(0,k):NEXT
- CLOSE
- nowrite:RETURN
-
- loadhis:ERROR there
- OPEN p$+"hiscores.def",0,INPUT:INPUT 0
- OPEN "nil:",1,OUTPUT:OUTPUT 1
- k=0 TO 23
- hinames$(0,k)=EDIT$("",8)
- hiscores(0,k)=EDIT(0,8):NEXT
- there:ERROR:CLOSE:RETURN
- opts10,100,5,5,100,20,2048,80,1,0,0,0,1,
-