Here is my realistic (I think so) missile code
that I've made sometimes ago.
Code:
bmap mslTrailBmp = <mslTrail02.tga>; // use your own bmap
action mslLaunch
{
while(my!=NULL)
{
c_move(my,vector(65*time_step,0,0),nullvector,glide);
vec_for_vertex(my.skill1,my,145); // play with 145
effect(mslTrail,30*time_step,my.skill1,nullvector);
// View Missile (option)
camera.x = my.x + 15;
camera.y = my.y + 15;
camera.z = my.z + 2;
vec_diff(temp,my.x,camera.x);
vec_to_angle(camera.pan,temp);
my.pan += (key_a - key_d) * 5 * time_step;
my.tilt += (key_w - key_s) * 5 * time_step;
wait(1);
}
}
function mslTrailPty()
{
my.skill_d = my.size/2; // velocity
my.vel_x = random(my.skill_d) - my.skill_d/2;
my.vel_y = random(my.skill_d) - my.skill_d/2;
my.vel_z = random(my.skill_d) - my.skill_d/2;
my.x -= (my.skill_x - you.skill1);
my.y -= (my.skill_y - you.skill2);
my.z -= (my.skill_z - you.skill3);
vec_set(my.skill_x,you.skill1);
vec_normalize(my.skill_a,min(my.skill_d,1)); // set speed
vec_add(my.x, my.skill_a);
my.size += 0.01 * time_step;
my.alpha -= 3 * time_step;
if (my.alpha <= 0 || my.size > 2)
{
my.lifespan = 0;
}
}
function mslTrail()
{
if (my.lifespan == 80)
{
my.move = on;
my.size = random(0.6)+0.6;
my.bmap = mslTrailBmp;
my.flare = on;
my.bright = on;
my.alpha = random(70) + 30;
my.lifespan = random(200) + 150;
}
vec_set(my.skill_x,you.skill1);
vec_set(my.skill_a,vector(-0.1,0,0));
vec_rotate(my.skill_a,you.pan);
vec_add(my.vel_x,my.skill_a);
my.function = mslTrailPty;
}
There are no gaps between particle trail when the missile
is flying.
Hope you find it useful.