I've quickly knocked something up that may be similar to what you are looking for:
`Standard setup
sync on
sync rate 30
hide mouse
autocam off
`Make something to view the smoke on
make matrix 1,1000,1000,5,5
`Load the smoke image
load image "smoke.bmp",1
`Dim an array to hold all the smoke info
dim smoke#(20,8)
`0 = x pos
`1 = y pos
`2 = z pos
`3 = x vel
`4 = y vel
`5 = z vel
`6 = size
`7 = rotation
`Make the objects, texture them and make black parts transparent
for i=1 to 20
make object plain i,100,100
texture object i,1
`Ghosted plains appear very transparent against the blue backdrop
`so I've turned it off, but you can uncomment it if you want
`ghost object on i
set object transparency i,1
reset_smoke(i-1,500,0,500)
next i
do
a#=wrapvalue(a#+1)
`Update the smoke using the functions
for i=0 to 19
move_smoke(i,500,0,500)
draw_smoke(i)
next i
`Position the camera
position camera 500+(cos(a#)*500),200,500+(sin(a#)*500)
point camera 500,0,500
`End the loop
sync
loop
`This function sets the position of the smoke particles to
`the starting point (x#,y#,z#) and sets random velocities
function reset_smoke(x,x#,y#,z#)
smoke#(x,0)=x#
smoke#(x,1)=y#
smoke#(x,2)=z#
smoke#(x,3)=int(rnd(4))-2
smoke#(x,4)=int(rnd(2))
smoke#(x,5)=int(rnd(4))-2
smoke#(x,6)=int(rnd(50))+50
smoke#(x,7)=int(rnd(360))
endfunction
`This function updates the smoke particle positions based on the
`velocities held in the array, and also resets the smoke if needed
function move_smoke(x,x#,y#,z#)
smoke#(x,4)=smoke#(x,4)+0.2
smoke#(x,6)=smoke#(x,6)-1
if smoke#(x,6)<=1 then reset_smoke(x,x#,y#,z#)
smoke#(x,7)=wrapvalue(smoke#(x,7)+1)
smoke#(x,0)=smoke#(x,0)+smoke#(x,3)
smoke#(x,1)=smoke#(x,1)+smoke#(x,4)
smoke#(x,2)=smoke#(x,2)+smoke#(x,5)
endfunction
`This function puts the smoke in the relevant place, orients it
`to the camera and scales it. Rotation doesn't work.
function draw_smoke(x)
position object x+1,smoke#(x,0),smoke#(x,1),smoke#(x,2)
point object x+1,camera position x(),camera position y(),camera position z()
scale object x+1,smoke#(x,6),smoke#(x,6),smoke#(x,6)
`zrotate object x+1,smoke#(x,7)
endfunction
Once I was but the learner,
now, I am the Master.