You could give this a try (untested)

Code:
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
#define dist_x skill1
#define dist_y skill2
#define dist_z skill3
#define absdist_x skill4
#define absdist_y skill5
#define absdist_z skill6
#define force_x skill7
#define force_y skill8
#define force_z skill9
#define move_spd skill10
#define turn_spd skill11
#define armor skill99 // used for health
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
ENTITY* turret;
ENTITY* body;
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
function handle_size(ENTITY* ent,X,Y,Z)
{
	ent.scale_x = X;
	ent.scale_y = Y;
	ent.scale_z = Z;
}
function handle_gravity(ENTITY* ent)
{
	VECTOR temp;
	vec_set(temp.x,ent.x);
	temp.z -= 200;
	my.absdist_z = -c_trace(ent.x,temp.x,IGNORE_FLAG2|IGNORE_PASSABLE|USE_POLYGON|USE_BOX) - ent.min_z - 5;
}
function set_camera()
{
	camera.pan += ang(turret.pan - camera.pan) * time_step * 0.8; 
	camera.tilt = -90;
	camera.arc = 70;
	vec_set(camera.x,vector(my.x,my.y,my.z + 500));
}
function set_tank()
{
	VECTOR temp;
	proc_mode = PROC_LATE;
	body = ent_create("body.mdl",my.x,NULL); // body's model
	turret = ent_create("turret.mdl",my.x,NULL); // turret's model
	set(body,FLAG2);
	handle_size(body,1,1,1);
	set(turret,FLAG2);
	handle_size(turret,1,1,1);
	while(1)
	{
		vec_set(body.x,my.x);
////////////////////////////////////
//		vec_set(body.pan,my.pan);
////////////////////////////////////
		body.pan = my.pan;
////////////////////////////////////
//		body.tilt = 0;
////////////////////////////////////
		vec_for_bone(temp,body,"TURRET"); // bone's name
		vec_set(turret.x,temp.x);
		turret.pan -= 0.5 * mickey.x * time_step;
////////////////////////////////////
//		turret.tilt = 0;
////////////////////////////////////
		wait(1);
	}
}

////////////////////////////////////
#define SWING_UP 1
#define SWING_DOWN 2
#define SWING_ANGLE 5			// 5°
#define SWING_SPEED 0.12		// ~0.5 seconds (0.25 up + 0.25 down)
#define SwingPan skill30
#define SwingPercent skill31  // 0..1
int state_swing = 0;
////////////////////////////////////

action tank()
{
////////////////////////////////////
	var tilt, roll;
////////////////////////////////////
	
	player = my;
	set(my,TRANSLUCENT|FLAG2);
	my.alpha = 5;
	handle_size(my,1,1,1);
	my.armor = 200; // health 
	my.move_spd = 10; 
	my.turn_spd = 10;
	set_tank(); // create tank parts
	while(my.armor > 0)
	{
		my.force_x = my.move_spd * (key_w - 0.8 * key_s) * time_step;
		accelerate(my.dist_x,my.force_x,0.8);
		my.force_y = 0; 
		my.force_z = 0;
		my.dist_y = 0;
		my.dist_z = 0;
		handle_gravity(my); // apply gravity
		my.pan += my.turn_spd * (key_a - key_d) * time_step;
		c_move(my,my.dist_x,my.absdist_x,IGNORE_PASSABLE|IGNORE_FLAG2|USE_POLYGON|GLIDE);
		set_camera(); // set camera position

////////////////////////////////////		
		if (key_space) {		// fire
			my.SwingPan = turret.pan;
			state_swing = SWING_UP;
		}
		
		if (state_swing) {
			if (state_swing == SWING_UP) {
				my.SwingPercent += time_step * SWING_SPEED;
				if (my.SwingPercent >= 1) state_swing = SWING_DOWN;
			} else {
				my.SwingPercent -= time_step * SWING_SPEED;
				if (my.SwingPercent <= 0) state_swing = 0;
			}
			if (state_swing) {
  				tilt = cos(my.SwingPan)*my.SwingPercent*SWING_ANGLE;
  				roll = sin(my.SwingPan)*my.SwingPercent*SWING_ANGLE;  // or -sin(...)??
  				my.tilt = tilt;
  				my.roll = roll;
  				turret.tilt = tilt;
  				turret.roll = roll;
  				body.tilt = tilt;
  				body.roll = roll; 
  			} else {
  				my.tilt = 0;
  				my.roll = 0;
  				turret.tilt = 0;
  				turret.roll = 0;
  				body.tilt = 0;
  				body.roll = 0; 
			}
		}
////////////////////////////////////
		
		wait(1);
	}
}