Hypothetical and untested...
(edited)
Code:

define _tm1, skill29;
// world speed
define _wSpeed, skill30;
define _wSpeedX, skill30;
define _wSpeedY, skill31;
define _wSpeedZ, skill32;
// relative speed
define _rSpeed, skill33;
define _rSpeedX, skill33;
define _rSpeedY, skill34;
define _rSpeedZ, skill35;
define _prSpeedX, skill36; // parent speed (relative)
define _pwSpeedZ, skill37; // parent speed (world)

function create_balls() {
proc_kill(4);
vec_for_vertex (temp, weapon1, 1465);
ent_create (ball_mdl, temp, move_balls);
}

function move_balls() {
my.pan = camera.pan;
my.tilt = camera.tilt;
if (player != NULL) {
my._prSpeedX = player._rSpeedX;
my._pwSpeedZ = player._wSpeedZ;
}
while (me != null) {
my._tm1 += 0.0625 * time_step;
my._rSpeedX = max(0, (5 + my._prSpeedX) - my._tm1 * 0.25);
//tD: note: the ball may slow down too fast
my._wSpeedZ = (-5 + my._pwSpeedZ) * my._tm1;
//tD: the ball may start to fall too fast
if (c_move (my, my._rSpeed, my._wSpeed, ignore_passable) <= 0.01) {
break;
}
wait (1);
}
}