DEFINITION  
    xleft = 0; xright = 323;
    ylow  = 0; yhigh  = 242;
    up         = yaxis;
    startframe =   1.0;
    endframe   = 100.0;
    byframe    = 1;

	triple	CameraView(0.0, 1.8, 0.0);
    scalar return_value(0);
    scalar zangle(0);
    scalar ymaxcyl(0);
    scalar yc(0);
    scalar yangle(0);
    scalar xzlength(0);
    scalar xrand(0);
    scalar yrand(0);
    scalar zrand(0);
    scalar windx(0);
    scalar windy(0);
    scalar windz(0);
    scalar vc(0);
    scalar v(0);
    scalar radcyl(0);
    scalar radc2(0);
    scalar radc1(0);
    scalar rad1(0);
    scalar r2(0);
    scalar r(0);
    scalar length(0);
    scalar l(0);
    scalar gravity( -0.2 / 30.0 );
    scalar fram(0);
    scalar dz(0);
    scalar dx(0);
    scalar drag( 0.5/30.0 ); /*  the drag factor for the particles */

    scalar numpart( 300 );   /*  number of particles  */
    scalar part(0);          /*  index to particle number  */
    scalar psize( 0.02 );    /*  particle size  */
    scalar lifetime( 90.0 ); /*  particle duration (frames)   */
    array birth[301];        /*  frame # particle comes into existence  */
    array death[301];        /*  frame # particle ceases to exist       */
    array x    [301];        /*  particle position     */
    array y    [301];
    array z    [301];
    array vx   [301];        /*  particle velocity    */
    array vy   [301];
    array vz   [301];

parameter_curve wind (
    parameter_vertex(  0.0,0.0,(20.0, 1.0   ),(20.0, 1.0   ),type=AVERAGE_TAN),
    parameter_vertex( 20.0,1.0,( 1.0, 0.025 ),( 1.0, 0.025 ),type=AVERAGE_TAN),
    parameter_vertex( 40.0,1.0,( 1.0, 0.015 ),( 1.0, 0.015 ),type=AVERAGE_TAN),
    parameter_vertex( 60.0,1.6,( 1.0, 0.0   ),( 1.0, 0.0   ),type=AVERAGE_TAN),
    parameter_vertex( 80.0,1.0,( 1.0,-0.0275),( 1.0,-0.0275),type=AVERAGE_TAN),
    parameter_vertex(100.0,0.5,(20.0,-0.5   ),(20.0,-0.5   ),type=AVERAGE_TAN) 
);

shader Red( model = lambert, color = (255.0, 0.0, 0.0) );

shader Fire( model         = lambert,
             diffuse       = 0.7,
             color         = (128.0, 110.0, 50.0),
             incandescence = (128.0, 110.0, 50.0),
             transparency  = 1.0
           );

MODEL

{
    translate(0.0, 1.0, 3.5);
    light( model=ambient, color=(255.0, 255.0, 255.0), ambient_shade=0.7 );
}
{
    camera( pix      = "pix/roman",
            eye      = (0.0, 1.0, 3.5),
            view     = CameraView,
            fov      = (75.0),
            viewport = (xleft, xright, ylow, yhigh),
            aspect   = ((xright-xleft)+1)/((yhigh-ylow)+1)
    );
}

return_value = srand( 0.0 );

/* Define the wind velocity */
windx = ((animate("wind", frame) - 0.5) / 10.0);
windy = 0.0;
windz = 0.0;

ymaxcyl = 1.0;
radcyl  = 0.2;

if( frame == startframe )   fram = 1.0;
else                        fram = frame;
for( ; (fram <= frame); fram = (fram + 1.0); )
{
    for( part = 0.0; (part <= numpart); part = (part + 1.0); )
    {
        if( fram == 1.0 )
        {
            birth[part] = (rand() + 1.0) * 105.0;
            death[part] = birth[part] + lifetime;
            xrand = rand();
            yrand = rand();
            zrand = rand();
            v = ((xrand*xrand) + (yrand*yrand) + (zrand*zrand) + 0.001);
            v = sqrt( v );
            v = (((1.0 + (rand() * 0.2)) * 1.5) / (30.0 * v));
            vx[part] = ( xrand * v);
            vy[part] = ((yrand * v) + (4.5 / 30.0));
            vz[part] = ( zrand * v);
            x[part]  = (0.08 * xrand);
            y[part]  =  1.00;
            z[part]  = (0.08 * zrand);
        }
        if( fram >= birth[part] )
        {
            radc1 = sqrt( (( x[part]*x[part] )+( z[part]*z[part] )) );
            dx  = ( x[part] + vx[part] );
            dz  = ( z[part] + vz[part] );
            r2  = ((dx * dx) + (dz * dz));
            radc2 = sqrt( r2 );
            if( ((radc1 < radcyl) && ((y[part]) < ymaxcyl))
             || ((radc2 < radcyl) && ((y[part] + vy[part]) < ymaxcyl)))
            {
                yc = ((y[part])
                 + ((vy[part]*(radcyl - rad1))/(radc2 - radc1)));
                if ((yc < ymaxcyl))
                {
                    if( r2 < (radcyl*radcyl) )
                    {
                        if( r2 > 0.0001 )  r = sqrt( r2 );
                        else               r = 0.01;
                        dx = (dx / r);
                        dz = (dz / r);
                        l = ((radcyl * 2.0) - r);
                        x[part] = (dx * l);
                        z[part] = (dz * l);
                        vc = ((vx[part] * dz) - (vy[part] * dx));
                        vx[part] =  (vc * dz);
                        vz[part] = -(vc * dx);
                    }
                }
            }
            if( (y[part] + vy[part]) < 0.0 )
            {
                death[part] = (death[part] - 40.0);
                y    [part] = ((y[part] + vy[part]) * -0.3);
                vy   [part] = (-vy[part] * 0.3);
            }
            if( (fram <= death[part]) && (fram == frame) )
            {
                xzlength = ((vx[part]*vx[part]) + (vz[pa                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             