Now the entities only use pan and do nothing other...
I post my currently action, which controls the enemies. All functions will describe in the comments:
Code:
action enemy_flight
{
wait(1);
var timer;
my.enable_entity = on;
my.enable_block = on;
var block_;
var my_pos[3];
my.moving = 1;
my.enemy_health = 2;
var you_pos[3];
var save_pos[3];
var save_id;
rolling_kind = int(random(3))+1;
if(int(random(2))+1 == 1) //set the rotating kind (pan or tilt)
{
rolling_dir = -1;
}
else
{
rolling_dir = 1;
}
if(enemy_nr[1] == 0) //set the pointer
{
enemy_nr[1] = my;
my.saving = 1;
}
else
{
if(enemy_nr[2] == 0)
{
enemy_nr[2] = my;
my.saving = 2;
}
else
{
if(enemy_nr[3] == 0)
{
enemy_nr[3] = my;
my.saving = 3;
}
else
{
if(enemy_nr[4] == 0)
{
enemy_nr[4] = my;
my.saving = 4;
}
else
{
if(enemy_nr[5] == 0)
{
enemy_nr[5] = my;
my.saving = 5;
}
}
}
}
}
npc_shoot_enemy(); //shooting function (the enemy shoots between 1 and 5 seconds)
while(me)
{
if(my.which_rocket == 1) //scan, which rocket has defeated him (the rocket set the skill)
{
str_cpy(scan_str,sc_8);
scan_.red = 255;
scan_.green = 0;
scan_.blue = 0;
my.which_rocket = 0;
}
while(my.klicked != 1) //random to choose the friend to kill
{
save_id = int(random(5))+1;
if(friend_nr[save_id] == 1)
{
break;
}
my.klicked = 1;
sleeper_();
wait(1);
}
friend1 = null;
friend1 = friend_nr[save_id]; //set the chosed friend in this pointer
if(block_ != 1)
{
if(friend1) //HERE IS THE PROBLEM (looking to the friend to kill him with the random shoots)
{
my.skill40 = 1;
vec_set(you_pos,friend1.x);
vec_set(temp,you_pos);
vec_sub(temp,my.x);
vec_to_angle(my.pan,temp);
}
else
{
my.skill40 = 0;
my.klicked = 0;
}
}
if(friend1) //if the enemy is too near at the friend, he rotating
{
if(vec_dist(my.x,friend1.x) < 200) || (block_ != 0) || (event_type == event_block) || (event_type == event_entity) //the same, but by objects
{
my.pan += 5 * time;
block_ = 1;
}
if(vec_dist(my.x,friend1.x) > 500) || (event_type == null)
{
block_ = 0;
}
}
my_pos.x = enemy_speed*time; //flying speed
timer += 1;
move_mode = ignore_passable + ignore_passents + glide;
ent_move(my_pos,nullvector); //moving
if(my.enemy_health <= 1) && (timer > 5) //if enemy is short before exploding, a smoke-effect is behind him
{
if(int(random(3)) == 0)
{
effect(effect_splitter,1,my.x,normal);
}
randomize();
if(int(random(3)) == 0)
{
effect(effect_splitter2,1,my.x,normal);
}
randomize();
if(int(random(3)) == 0)
{
effect(effect_splitter3,1,my.x,normal);
}
randomize();
timer = 0;
}
else
{
if(my.enemy_health < 1) //exploding
{
effect(effect_splitter,350,my.x,normal);
effect(effect_splitter2,50,my.x,normal);
effect(effect_splitter3,50,my.x,normal);
effect(effect_explo,1000,my.x,normal);
ent_create("expl2+16.pcx",my.x,explo2);
ent_create("expl2+16.pcx",my.x,explo2);
ent_create("expl2+16.pcx",my.x,explo2);
ent_create("expl2+16.pcx",my.x,explo3);
//ent_create("ring.mdl",my.x,ring2);
wait(1);
str_cpy(scan_str,sc_9);
scan_.red = 255;
scan_.green = 0;
scan_.blue = 0;
enemy_nr[my.saving] = 0;
enemy_count -= 1;
ent_remove(me);
break;
}
}
wait(1);
}
}