function param1() return "num", 2, 100, 2 end function param2() return "interval", 1, 100, 20 end function param3() return "vertical", 0, 1, 0 end 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 i for i=0,bs_param1()-1 do local dx,dy = bs_dir() local vx,vy = bs_rotate( dx, dy, 3.14159/2 ) local x2 = x local y2 = y if bs_param3() == 0 then y2 = y2 + bs_param2()*i*2 end if bs_param3() == 1 then x2 = x2 + bs_param2()*i*2 end sr0 = 1.0 + 0.2*math.random() - 0.1 sr1 = 1.0 + 0.2*math.random() - 0.1 local r1 = w*sr0 local vx1 = vx * w * (0.5 - math.random()) / 3 local vy1 = vy * w * (0.5 - math.random()) / 3 bs_ellipse( x2 + vx1, y2 + vy1, r1, r1, 0, r,g,b,255 ) local r2 = w*sr1 local vx2 = vx * w * (0.5 - math.random()) / 3 local vy2 = vy * w * (0.5 - math.random()) / 3 bs_ellipse( x2 + vx2, y2 + vy2, r2, r2, 0, r,g,b,255 ) end lastDrawX = x lastDrawY = y firstDraw = false return 1 end lastDrawX = 0 lastDrawY = 0 firstDraw = true math.randomseed( bs_ms() )