1) Bullets fly very slowly. (I am modifying launch_spike function)
Here it is, check where I can be wrong :
void(vector org, vector dir) launch_spike =
{
newmis = spawn ();
newmis.owner = self;
newmis.movetype = MOVETYPE_FLYMISSILE;
newmis.solid = SOLID_BBOX;
newmis.angles = vectoangles(dir);
newmis.touch = spike_touch;
newmis.classname = "spike";
newmis.think = SUB_Remove;
newmis.nextthink = time + 6;
setmodel (newmis, "progs/bullet.mdl");
setsize (newmis, VEC_ORIGIN, VEC_ORIGIN);
setorigin (newmis, org);
newmis.velocity = dir * 1000000;
};
Here I just tried to set up more speed, and then :
void(float ox) W_FireSpikes =
{
local vector dir;
local entity old;
local float spreadx, spready, bulletspd;
spreadx = 0.04;
spready = 0.04;
makevectors (self.v_angle);
if (self.ammo_nails >= 2 && self.weapon == IT_SUPER_NAILGUN)
{
W_FireSuperSpikes ();
return;
}
if (self.ammo_nails < 1)
{
self.weapon = W_BestWeapon ();
W_SetCurrentAmmo ();
return;
}
sound (self, CHAN_WEAPON, "weapons/rocket1i.wav", 1, ATTN_NORM);
self.attack_finished = time + 0.2;
self.currentammo = self.ammo_nails = self.ammo_nails - 1;
//dir = aim (self, 1000); //OLD dir
bulletspd = 700000;
dir = (v_forward + crandom()*spreadx*v_right + crandom()*spready*v_up) * 1000000000000000000000;
launch_spike (self.origin + '0 0 17' + v_right*7 + v_forward * 20, dir*bulletspd);
launch_muzzle (self.origin + '0 0 17' + v_right*7 + v_forward * 40, dir*0);
self.punchangle_x = -2;
};
Here I tried to set up more speed too. But (for bullets) it moving very slowly.

2) I have muzzleflash, And there is some problems with it.
When I starting to shoot, my muzzleflash become very big. (Sprite is about 24x24 pixels)
And if I set up "Full lighting" in darkplaces, its not always appear.
For example, if I shoot 10 times, I see muzzleflash only 2-3.
Here is my qc of it :
void(vector org, vector dir) launch_muzzle =
{
newmis = spawn ();
newmis.owner = self;
newmis.movetype = MOVETYPE_NONE;
newmis.solid = SOLID_BBOX;
newmis.angles = vectoangles(dir);
newmis.classname = "muzzle";
newmis.think = SUB_Remove;
newmis.nextthink = time + 0.01;
setmodel (newmis, "progs/muzzle.spr");
setsize (newmis, VEC_ORIGIN, VEC_ORIGIN);
setorigin (newmis, org);
newmis.velocity = dir * 0;
};

(On image I just paste muzzle sprite in picture, because in-game I cannot catch it)
(Sorry for my english)