This is my first 20-liner (actually 16 lines). It is a simple game but is very fun. It requires no media and the gameplay is endless. Play and enjoy. Here is a picture of the gameplay.
Here is the most recent update
`_______________METEOR_SWARM_______________
`____CONTROLS_____
`USE SLOW MOTION SPECIAL - DOWN ARROW KEY
`USE LASER SPECIAL - RIGHT MOUSE CLICK
`FIRE BASIC SHOT - LEFT MOUSE CLICK
`MOVE BASE - LEFT/RIGHT ARROW KEYS
`AIM BASE - LEFT/RIGHT MOUSE
`PAUSE GAME - P/CTRL
set display mode 640,480,16:set text size 18 :autocam off:move camera -25:hide mouse:make object sphere 1,1.5:move object down 1,10:make object cone 2,.5:move object down 2,9.5:scale object 2,150,200,100:c2 = rgb(100,100,100):color object 2,c2:color object 1,c2:randomize timer():leveldone = 1:sbn = 15:energy# = 100:level = 0:restart = 0:death=0:laserc#=50:points = 0:t2 = 1:cls:for t = 1 to 320:c1 = rgb(rnd(250),rnd(250),rnd(250)):c2 = rgb(rnd(250),rnd(250),rnd(250)): ink c1,c2:box t,t2,640-t,480-t2:t2 = t2 + 1:next t:get image 1,0,0,640,480:make object cube 14,150:texture object 14,1:set object cull 14,0:c1 = rgb(250,250,250):black=rgb(0,0,0): ink c1,black
sync on:sync rate 60:make object cylinder 13,.1:scale object 13,1000,100000,100:ghost object on 13:red = rgb(200,0,0):fade object 13,75:set object emissive 13,red:make object box 12,3,.5,.01:set object collision off 12:color object 12,rgb(10,200,10):set object emissive 12,rgb(10,200,10):make object box 11,3,.5,.01:set object collision off 11:color object 11,rgb(210,20,210)
do:grey=rgb(200-energy#,50+(energy#/2),50+(energy#/2)):color object 1,grey:color object 2,grey:xrotate object 14,object angle x(14)+speedm#:yrotate object 14,object angle y(14)+speedm#*1.5:if energy# > 100: energy# = 100:endif:set cursor 1,430:print " Level: ";level;" Energy Left: ";int(energy#);" Special: ";int((laserc#)*2);"% Points: ";points
if leveldone = 1:level = level + 1:leveldone = 0:sbn = 15:sne2 = 0:level# = level:make object sphere sbn,2+(level#/5):sne=level:tests = 1:sbnr = sbn:c1 = rgb(rnd(250),rnd(250),rnd(250)):color object sbn,c1:set object emissive sbn,c1:if sne > 4 and sne < 9: sne = 4:sne2=level-sne:tests = 2:endif:if sne > 8: sne = level-4:tests = 2:sne2=sne:endif
px# = rnd(640): py# = rnd(480):point object sbn,px#,py#,0:sbn = sbn + 1:endif:hml=0
for t = sbnr to sbn:if object exist (t) = 1: hml=1:move object t,speedm#*(1+(level#/19)):if object position x(t)< -10 or object position x(t) > 10 or object position y(t) < -10 or object position y(t) > 10: move object t,-speedm#*(1+(level#/19)):zrotate object t,object angle z(t)-rnd(90)-45:endif:endif
if object exist (t) = 1: if object collision(1,t) = 1 or object collision(2,t) = 1: energy# = energy# - speedm#*5:red=rgb(200,10,10):color object 1,red:color object 2,red:endif:endif:if energy# < 1: energy# = 0:endif:if energy# = 0 :ghost object on 1:ghost object on 2:spx# = 0:do:spx# = spx# + 30:scale object 1,spx#,spx#,spx#:scale object 2,spx#,spx#,spx#:if spx# > 900:exit:endif:sync
loop:spx# = 0:scale object 1,100,100,100:scale object 2,150,200,100:ghost object off 1:ghost object off 2:hide object 1:hide object 2:do:set cursor 185,300:print "Game Over-Press Space to play again":if escapekey() = 1:end:endif:if spacekey() = 1:exit:endif:sync
set cursor 1,430:print " Level: ";level;" Energy Left: ";int(energy#);" Special: ";int((laserc#)*2);"% Points: ";points:loop: level = 0:restart = 0:laserc# = 50:energy# = 100:death = 0:points = 0:leveldone = 1:show object 1:show object 2:for t2 = sbnr to sbn:if object exist (t2) = 1: delete object t2:endif:next t2:endif:next t:if hml = 0: leveldone = 1:endif
if death = 0:zrotate object 2,object angle z(2)-mousemovex():if object angle z(2) < -90: zrotate object 2,-90:endif:if object angle z(2) > 90: zrotate object 2,90:endif:lk#=leftkey():rk#=rightkey() :move object left 1,lk#/5:move object right 1,rk#/5:if object position x(1) <-10: move object right 1,.2: move object right 2,.2:endif
if object position x(1) >10: move object left 1,.2:endif:position object 2,object position x(1),-10,0:move object up 2,1:endif:if mouseclick() = 1 and death = 0: if object exist(3) = 0:mt=3:endif:if mt>0: make object sphere mt,.5:zrotate object mt,object angle z(2):position object mt,object position x(2),object position y(2),0:mt = 0:endif:endif
for t = 1 to 3*(1+(lasera*5)):if object exist(3) = 1: move object up 3,.5:if object position x(3) < -10 or object position x(3) > 10 or object position y(3) >10: delete object 3:endif:endif:rex = 0:if object exist(3) = 1:if object collision (3,0)>0:if object collision (3,0) = sbnr: explode = 1:rex = 3:endif:if object collision (3,0) > sbnr and object collision (3,0) < sbnr+sne+1: explode = 2:rex = 3:endif:if object collision (3,0) > sbnr + sne: delete object object collision (3,0):delete object 3:points = points + 1*level:endif:endif:endif
if object collision (13,0)>0 and lasera=1 and rex = 0:if object collision (13,0) = sbnr: explode = 1:rex = 13:endif:if object collision (13,0) > sbnr and object collision (13,0) < sbnr+sne+1 and object position x(object collision(13,0))<>0 and object position y(object collision(13,0))<> 0: explode = 2:rex = 13:endif:if object collision (13,0) > sbnr + sne: delete object object collision (13,0):points = points + 1*level:endif:endif
if explode = 1 and rex >0:rzz=0:energy# = energy# + (level#+.05):points = points + 10*level:for t = sbnr+1 to sbnr+sne:rzx=rnd(50)+rzx+23:make object sphere t,1+(level#/20):sbn = sbn + 1:position object t,object position x(sbnr),object position y(sbnr),0:yrotate object t,90:zrotate object t,rzx:c1 = rgb(rnd(250),rnd(250),rnd(250)):color object t,c1:set object emissive t,c1:next t:delete object sbnr:if rex = 3:delete object 3:endif:explode = 0:endif
if explode = 2 and rex >0:rzx=0:energy# = energy# + (level#*.05):points = points + 5*level:obc3 = object collision(rex,0):for t = sbnr+sbn+1 to sbnr+sne+sne2+sbn:rzx=rnd(50)+rzx+23:make object sphere t,.5+(level#/80):position object t,object position x(object collision(rex,0)),object position y(object collision(rex,0)),0:yrotate object t,90:zrotate object t,rzx:c1 = rgb(rnd(250),rnd(250),rnd(250)):color object t,c1:set object emissive t,c1:next t
sbn = sbn+1+sne2+sne+sbnr:delete object obc3:if rex = 3:delete object 3:endif:explode = 0:endif:next t:zrotate object 13,object angle z(2):position object 13,object position x(2),object position y(2),0:move object up 13,50:scale object 13,100+(laserc#*30),100000,100:lasera=0:hide object 13:if mouseclick()=2 and laserc#>0:show object 13:lasera = 1:laserc#=laserc#-.5:if laserc#<0:laserc#=-2:lasera=0:endif:endif:laserc#=laserc#+.02:if laserc#>50:laserc#=50:endif
if laserc#>0:set object emissive 11,rgb(110,20,210):else:set object emissive 11,rgb(210,20,10):endif:position object 11,object position x(1),-11.5,0:scale object 11,laserc#*2,100,100:position object 12,object position x(1),-11,0:scale object 12,energy#,100,100:if inkey$() = "p" OR CONTROLKEY() = 1 :if pressp = 0:pressp = 1:do:if inkey$()<>"p" and controlkey() = 0:pressp = 0:endif:if inkey$() = "p" or controlkey() = 1: if pressp = 0:pressp = 1:exit:endif:endif:loop:endif:endif:if inkey$()<>"p" AND CONTROLKEY() = 0:pressp = 0:endif:if downkey()=1 and laserc#>0 and mouseclick() <> 2:laserc#=laserc#-.1:if laserc#<0:laserc#=-2:lasera=0:endif: speedm# = .02:else:speedm# = .1:endif:sync
loop
`______HINTS______
`1.) The SLOW MOTION SPECIAL does not affect the speed of your
` base, use this to your advantage.
`2.) Try and use the LASER only when you can take out multiple
` meteors at once.
`3.) Move around! Don't let those meteors hit you.
Justin Cannizzaro