void Use_Shooter( gentity_t *ent, gentity_t *other, gentity_t *activator ) { vec3_t dir; float deg; vec3_t up, right; // see if we have a target if ( ent->enemy ) { VectorSubtract( ent->enemy->r.currentOrigin, ent->s.origin, dir ); VectorNormalize( dir ); } else { VectorCopy( ent->movedir, dir ); } // randomize a bit PerpendicularVector( up, dir ); CrossProduct( up, dir, right ); deg = crandom() * ent->random; VectorMA( dir, deg, up, dir ); deg = crandom() * ent->random; VectorMA( dir, deg, right, dir ); VectorNormalize( dir ); switch ( ent->s.weapon ) { case WP_BLASTER: WP_FireBlasterMissile( ent, ent->s.origin, dir, qfalse ); break; } G_AddEvent( ent, EV_FIRE_WEAPON, 0 ); }
void WP_FireBlaster( gentity_t *ent, qboolean altFire ) { WP_FireBlasterMissile( ent, muzzle, forward, altFire ); }