sync on sync rate 25 hide mouse autocam off position camera 0,5,0 color backdrop rgb(0,0,35) set camera to image 0,100,256,256 sprite 100,0,0,100 size sprite 100,screen width(),screen height() set sprite 100,0,1 set sprite alpha 100,50 hide light 0 make light 1 position light 1,10,10,5 fog on fog color rgb(0,0,35) fog distance 2000 `grass for x=1 to 10 for y=1 to 10 ink rgb(rnd(40),rnd(55)+100,0),0 dot x,y next y next x get image 1000,1,1,10,10 make object plain 1000,2000,2000 xrotate object 1000,-90 texture object 1000,1000 scale object texture 1000,10,10 set object texture 1000,2,0 `particle properties numberofparticles=10000 dim x#(numberofparticles) dim y#(numberofparticles) dim xspeed#(numberofparticles) dim yspeed#(numberofparticles) dim brightness(numberofparticles) dim a#(numberofparticles) dim e#(numberofparticles) `phase angle for particle=1 to numberofparticles x#(particle)=rnd(screen width()) y#(particle)=rnd(screen height()) xspeed#(particle)=(rnd(3000)/1000.0) e#(particle)=rnd(360) brightness(particle)=rnd(50)+30 a#(particle)=gaussian(2.5*screen width())-screen width() `amplitude gravitya#=.01 gravityb#=1.0 omega#=0.0006 `primary angular velocity phi#=2.0 `secondary angular velocity next particle do inc counter if counter>1000 then counter=0 if counter=100 or counter=110 or counter=400 color backdrop rgb(255,255,255) else color backdrop rgb(0,0,35) endif gosub particles control camera using arrowkeys 0,1,1 if counter/2.0=int(counter/2.0) then sync loop particles: text 0,0,str$(screen fps()) lock pixels `tornado particles for particle=1 to numberofparticles step 2 inc y#(particle),gravityb# if y#(particle)>0 and y#(particle)<screen height() and x#(particle)>0 and x#(particle)<screen width() then set_locked_pixel(x#(particle),y#(particle),rgb(brightness(particle),brightness(particle),brightness(particle))) x#(particle)=(500/y#(particle)^1.5)*a#(particle)*sin(theta#+e#(particle))+screen width()/2+(20*sin(y#(particle)+psi#)) theta#=wrapvalue(theta#)+omega# if y#(particle)>=screen height()/1.5 then dec y#(particle),screen height() next particle psi#=wrapvalue(psi#)+phi# `background particles `for particle=2 to numberofparticles step 2 `inc y#(particle),gravityb# `if y#(particle)>screen height()-1 then y#(particle)=1 `if y#(particle)>0 and y#(particle)<screen height() and x#(particle)>0 and x#(particle)<screen width() then set_locked_pixel(x#(particle),y#(particle),rgb(brightness(particle),brightness(particle),brightness(particle))) `inc x#(particle),xspeed#(particle) `if x#(particle)>screen width()-1 then x#(particle)=1 `next particle unlock pixels return `Function borrowed from Coding Fodder's Rain code function set_locked_pixel(x,y,color_value) start=get pixels pointer() repeat_number=get pixels pitch() bits_per_pixel=bitmap depth(num)/8 pointer=start+y*repeat_number+x*bits_per_pixel *pointer=color_value endfunction function gaussian(range#) r=0 for a = 1 to range#/10 inc r, rnd(range#) next a r=int(10*r/range#) endFunction r