Fly through the tunnel and shoot at the targets, but don't run into a blue block. Use the mouse to aim and click to shoot. You can have 10 shots on the screen at a time. The number of shots available appears on the bottom of the screen. The targets and blocks appear more rapidly as you progress through the levels.
ORIGINAL VERSION:
set display mode 640,480,32: dim boxes(10,2): dim bullets(10,2): dim blocks(20,2): dim targets(20,2): dim walls(80,2): randomize timer(): sync on: sync rate 30: hide mouse: autocam off: set text font "arial": set text size 20: set ambient light 50: color backdrop 0: set point light 0,0,0,0: set light range 0,10000: fog on: fog distance 1500
ink rgb(0,0,128),0: box 0,0,16,16: ink rgb(0,0,255),0: box 7,0,9,16: get image 1,1,1,16,16
ink 0,0: box 0,0,32,32: t=0: for i = 16 to 4 step -4: for q = i to i-3 step -1: ink rgb(255,t*255,t*255),0: ELLIPSE 16,16,q,q: next q: if t=0: t=1: else t=0: endif: next i: get image 2,1,1,32,32
for i = 1 to 20: make object plain i,100,100: walls(i,0)=0: walls(i,1)=-50: walls(i,2)=i*100: rotate object i,270,90,0: texture object i,1: next i: for i = 1 to 20: make object plain i+20,100,100: walls(i+20,0)=0: walls(i+20,1)=50: walls(i+20,2)=i*100: rotate object i+20,90,90,0: texture object i+20,1: next i
for i = 1 to 20: make object plain i+40,100,100: walls(i+40,0)=-50: walls(i+40,1)=0: walls(i+40,2)=i*100: rotate object i+40,0,90,0: texture object i+40,1: next i: for i = 1 to 20: make object plain i+60,100,100: walls(i+60,0)=50: walls(i+60,1)=0: walls(i+60,2)=i*100: rotate object i+60,0,270,0: texture object i+60,1: next i
for i = 1 to 10: make object box i+80,2,2,50: boxes(i,0)=rnd(100)-50: boxes(i,1)=rnd(100)-50: boxes(i,2)=i*200: color object i+80,rgb(255,255,0): set object cull i+80,0:next i: for i = 1 to 10: make object sphere i+90,10: bullets(i,1)=200: color object i+90,rgb(0,255,0): next i
for i = 1 to 20: make object plain i+100,15,15: set object transparency i+100,4: targets(i,0)=0: targets(i,1)=200: targets(i,2)=0: texture object i+100,2: make object box i+150,100,100,100: color object i+150,rgb(0,0,255): blocks(i,0)=0: blocks(i,1)=200: blocks(i,2)=0: next i: score=0: nextlevel=500: level=1: maxtarget#=200: nexttarget=rnd(maxtarget#)+maxtarget#: maxblock#=200: nextblock=rnd(maxblock#)+maxblock#: posx#=0: posy#=0
do: posx#=posx#+mousemovex(): posy#=posy#-mousemovey(): if posx#>45: posx#=45: endif: if posx#<-45: posx#=-45: endif: if posy#>45: posy#=45: endif: if posy#<-45: posy#=-45: endif:
if mouseclick(): m=m+1: else: m=0: endif: canshoot=0: numshots=0: for i = 91 to 100: if bullets(i-90,1)=200: canshoot=i: numshots=numshots+1: endif: next i
if m=1 and canshoot>0: bullets(canshoot-90,0)=posx#: bullets(canshoot-90,1)=posy#: bullets(canshoot-90,2)=50: endif: for i = 91 to 100: if bullets(i-90,1)<200: bullets(i-90,2)=bullets(i-90,2)+5: if bullets(i-90,2)>1000: bullets(i-90,1)=200: endif: endif: next i
for i = 1 to 80: walls(i,2)=walls(i,2)-10: if walls(i,2)<-100: walls(i,2)=walls(i,2)+2000: endif: next i
for i = 1 to 10: boxes(i,2)=boxes(i,2)-10: if boxes(i,2)<-100: boxes(i,2)=boxes(i,2)+2000: endif: next i
for i = 1 to 20: targets(i,2)=targets(i,2)-15: if targets(i,2)<-100: targets(i,1)=200: endif: blocks(i,2)=blocks(i,2)-25: if blocks(i,2)<-100: blocks(i,1)=200: endif: next i
cantarget=0: for i = 101 to 120: if targets(i-100,1) = 200: cantarget=i: endif: next i: nexttarget=nexttarget-1: if nexttarget<0 and cantarget>0: targets(cantarget-100,0)=rnd(90)-45:targets(cantarget-100,1)=rnd(90)-45:targets(cantarget-100,2)=2000: nexttarget=rnd(maxtarget#)+maxtarget#: endif
canblock=0: for i = 151 to 170: if blocks(i-150,1) = 200: canblock=i: endif: next i: nextblock=nextblock-1: if nextblock<0 and canblock>0: blocks(canblock-150,0)=rnd(90)-45:blocks(canblock-150,1)=rnd(90)-45:blocks(canblock-150,2)=2000: scale object canblock,rnd(90)+1,rnd(90)+1,rnd(100)+1:nextblock=rnd(maxblock#)+maxblock#: endif
for i = 1 to 80: position object i,walls(i,0),walls(i,1),walls(i,2): next i: for i = 1 to 10: position object i+80,boxes(i,0),boxes(i,1),boxes(i,2): next i: for i = 1 to 10: position object i+90,bullets(i,0),bullets(i,1),bullets(i,2): next i: for i = 1 to 20: position object i+100,targets(i,0),targets(i,1),targets(i,2): next i: for i = 1 to 20: position object i+150,blocks(i,0),blocks(i,1),blocks(i,2): next i
for b = 1 to 10: if bullets(b,1)<200: for t = 1 to 20: if targets(t,0)>bullets(b,0)-10 and targets(t,0)<bullets(b,0)+10 and targets(t,1)>bullets(b,1)-10 and targets(t,1)<bullets(b,1)+10 and targets(t,2)>bullets(b,2)-10 and targets(t,2)<bullets(b,2)+10: targets(t,1)=200: bullets(b,1)=200: score=score+100: endif: next t: endif: next b
for b = 1 to 20: if blocks(b,2)<200: if blocks(b,2)-(object size z(b+150,1)/2)<20 and posx# > blocks(b,0)-(object size x(b+150,1)/2) and posx# < blocks(b,0)+(object size x(b+150,1)/2) and posy# > blocks(b,1)-(object size y(b+150,1)/2) and posy# < blocks(b,1)+(object size y(b+150,1)/2): gosub gameover: endif: endif: next b
if score=>nextlevel: level=level+1: nextlevel=nextlevel*2: maxtarget#=maxtarget#/1.4: maxblock#=maxblock#/1.4: endif: ammo$ = "AMMO: ": for i = 1 to numshots: ammo$=ammo$+" O ": next i: center text 160,10,"SCORE: "+str$(score): center text 480,10,"LEVEL: "+str$(level): center text 320,440,ammo$: position camera posx#,posy#,50: position mouse 320,240: sync: loop
gameover: cls: set text size 50: do: center text 320,240,"GAME OVER": center text 320,300,str$(score): if spacekey(): end: endif: sync: loop
NEW VERSION:
I've added a few things:
---> The blue blocks are now see-through
---> The blue blocks move faster as you get farther in
---> You now only need 200 points to reach level 2 instead of the original 500. The score you need to get to the next level doubles every time.
---> Press space at game over to restart the game
---> There is now a sight in the center of the screen
---> If there is something in the center of your sight, a red dot appears on it.
start: :set display mode 640,480,32: dim boxes(10,2): dim bullets(10,2): dim blocks(20,2): dim targets(20,2): dim walls(80,2): randomize timer(): sync on: sync rate 30: hide mouse: autocam off: set text font "arial": set text size 20: set ambient light 50: color backdrop 0: set point light 0,0,0,0: set light range 0,10000: fog on: fog distance 1500
ink rgb(0,0,128),0: box 0,0,16,16: ink rgb(0,0,255),0: box 7,0,9,16: get image 1,1,1,16,16
ink 0,0: box 0,0,32,32: t=0: for i = 16 to 4 step -4: for q = i to i-3 step -1: ink rgb(255,t*255,t*255),0: ELLIPSE 16,16,q,q: next q: if t=0: t=1: else t=0: endif: next i: get image 2,1,1,32,32
for i = 1 to 20: make object plain i,100,100: walls(i,0)=0: walls(i,1)=-50: walls(i,2)=i*100: rotate object i,270,90,0: texture object i,1: next i: for i = 1 to 20: make object plain i+20,100,100: walls(i+20,0)=0: walls(i+20,1)=50: walls(i+20,2)=i*100: rotate object i+20,90,90,0: texture object i+20,1: next i
for i = 1 to 20: make object plain i+40,100,100: walls(i+40,0)=-50: walls(i+40,1)=0: walls(i+40,2)=i*100: rotate object i+40,0,90,0: texture object i+40,1: next i: for i = 1 to 20: make object plain i+60,100,100: walls(i+60,0)=50: walls(i+60,1)=0: walls(i+60,2)=i*100: rotate object i+60,0,270,0: texture object i+60,1: next i
for i = 1 to 10: make object box i+80,2,2,50: boxes(i,0)=rnd(100)-50: boxes(i,1)=rnd(100)-50: boxes(i,2)=i*200: color object i+80,rgb(255,255,0): set object cull i+80,0:next i: for i = 1 to 10: make object sphere i+90,10: bullets(i,1)=200: color object i+90,rgb(0,255,0): next i
for i = 1 to 20: make object plain i+100,15,15: set object transparency i+100,4: targets(i,0)=0: targets(i,1)=200: targets(i,2)=0: texture object i+100,2: make object box i+150,100,100,100: ghost object on i+150: color object i+150,rgb(0,0,255): blocks(i,0)=0: blocks(i,1)=200: blocks(i,2)=0: next i: score=0: nextlevel=200: level=1: maxtarget#=200: nexttarget=rnd(maxtarget#)+maxtarget#: maxblock#=200: nextblock=rnd(maxblock#)+maxblock#: posx#=0: posy#=0: ts#=15
do: posx#=posx#+mousemovex(): posy#=posy#-mousemovey(): if posx#>45: posx#=45: endif: if posx#<-45: posx#=-45: endif: if posy#>45: posy#=45: endif: if posy#<-45: posy#=-45: endif:
if mouseclick(): m=m+1: else: m=0: endif: canshoot=0: numshots=0: for i = 91 to 100: if bullets(i-90,1)=200: canshoot=i: numshots=numshots+1: endif: next i
if m=1 and canshoot>0: bullets(canshoot-90,0)=posx#: bullets(canshoot-90,1)=posy#: bullets(canshoot-90,2)=50: endif: for i = 91 to 100: if bullets(i-90,1)<200: bullets(i-90,2)=bullets(i-90,2)+5: if bullets(i-90,2)>1000: bullets(i-90,1)=200: endif: endif: next i
for i = 1 to 80: walls(i,2)=walls(i,2)-10: if walls(i,2)<-100: walls(i,2)=walls(i,2)+2000: endif: next i
for i = 1 to 10: boxes(i,2)=boxes(i,2)-10: if boxes(i,2)<-100: boxes(i,2)=boxes(i,2)+2000: endif: next i
for i = 1 to 20: targets(i,2)=targets(i,2)-15: if targets(i,2)<-100: targets(i,1)=200: endif: blocks(i,2)=blocks(i,2)-ts#: if blocks(i,2)<-100: blocks(i,1)=200: endif: next i
cantarget=0: for i = 101 to 120: if targets(i-100,1) = 200: cantarget=i: endif: next i: nexttarget=nexttarget-1: if nexttarget<0 and cantarget>0: targets(cantarget-100,0)=rnd(90)-45:targets(cantarget-100,1)=rnd(90)-45:targets(cantarget-100,2)=2000: nexttarget=rnd(maxtarget#)+maxtarget#: endif
canblock=0: for i = 151 to 170: if blocks(i-150,1) = 200: canblock=i: endif: next i: nextblock=nextblock-1: if nextblock<0 and canblock>0: blocks(canblock-150,0)=rnd(90)-45:blocks(canblock-150,1)=rnd(90)-45:blocks(canblock-150,2)=2000: scale object canblock,rnd(90)+1,rnd(90)+1,rnd(100)+1:nextblock=rnd(maxblock#)+maxblock#: endif
for i = 1 to 80: position object i,walls(i,0),walls(i,1),walls(i,2): next i: for i = 1 to 10: position object i+80,boxes(i,0),boxes(i,1),boxes(i,2): next i: for i = 1 to 10: position object i+90,bullets(i,0),bullets(i,1),bullets(i,2): next i: for i = 1 to 20: position object i+100,targets(i,0),targets(i,1),targets(i,2): next i: for i = 1 to 20: position object i+150,blocks(i,0),blocks(i,1),blocks(i,2): next i
for b = 1 to 10: if bullets(b,1)<200: for t = 1 to 20: if targets(t,0)>bullets(b,0)-10 and targets(t,0)<bullets(b,0)+10 and targets(t,1)>bullets(b,1)-10 and targets(t,1)<bullets(b,1)+10 and targets(t,2)<bullets(b,2)+10: targets(t,1)=200: bullets(b,1)=200: score=score+100: endif: next t: endif: next b
for b = 1 to 20: if blocks(b,2)<200: if blocks(b,2)-(object size z(b+150,1)/2)<20 and posx# > blocks(b,0)-(object size x(b+150,1)/2) and posx# < blocks(b,0)+(object size x(b+150,1)/2) and posy# > blocks(b,1)-(object size y(b+150,1)/2) and posy# < blocks(b,1)+(object size y(b+150,1)/2): gosub gameover: endif: endif: next b: ink rgb(50,50,50),0: circle 320,240,30
ink rgb(255,255,255),0: if score=>nextlevel: level=level+1: ts#=ts#+0.3: nextlevel=nextlevel*2: maxtarget#=maxtarget#/1.4: maxblock#=maxblock#/1.4: endif: ammo$ = "AMMO: ": for i = 1 to numshots: ammo$=ammo$+" O ": next i: center text 160,10,"SCORE: "+str$(score): center text 480,10,"LEVEL: "+str$(level): center text 320,440,ammo$: position camera posx#,posy#,50: position mouse 320,240: ink rgb(255,0,0),0: if point(320,240)>0: box 318,238,322,242: endif: sync: loop
gameover: cls: set text size 50: do: center text 320,240,"GAME OVER": center text 320,300,str$(score): if spacekey(): gosub start: endif: sync: loop
