function main( x, y, p ) local w = bs_width() / 2 if w < 0.25 then w = 0.25 end local updateDist = w / 2 if w > 5 then updateDist = w/4 end if w > 20 then updateDist = w/10 end if w > 100 then updateDist = w/14 end if not firstDraw then local distance = bs_distance( lastDrawX - x, lastDrawY - y ) if distance < updateDist then return 0 end end local r,g,b = bs_fore() local dx,dy = bs_dir() local vx,vy = bs_rotate( dx, dy, 3.14159/2 ) local a = 255 * p * bs_opaque() local r1 = w*sr0 local vx1 = vx * w * (0.5 - math.random()) / 3 local vy1 = vy * w * (0.5 - math.random()) / 3 bs_ellipse( x + vx1, y + vy1, r1, r1, 0, r,g,b,a ) local r2 = w*sr1 local vx2 = vx * w * (0.5 - math.random()) / 3 local vy2 = vy * w * (0.5 - math.random()) / 3 bs_ellipse( x + vx2, y + vy2, r2, r2, 0, r,g,b,a ) lastDrawX = x lastDrawY = y firstDraw = false return 1 end bs_setmode( 1 ) lastDrawX = 0 lastDrawY = 0 firstDraw = true math.randomseed( bs_ms() ) sr0 = 1.0 + 0.2*math.random() - 0.1 sr1 = 1.0 + 0.2*math.random() - 0.1