///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
#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.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);
}
}
action tank()
{
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
wait(1);
}
}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////