i have some enemies in a level and for some reason the engine freezes when they are hit by the player characters scancone and stops responding.

the scancone is used for attacks, so when the player attacks, the player entity uses c_scan around it so the enemy can detect if it has been hit. if an enemy is hit they lose health.

sometimes it takes like 10 hits by c_scan, other times it takes like 2 so i tried to find out what caused it and it turns out that if i remove the vec_to_angle from the following code from the enemy entities' action, then the engine wont freeze:

Code:
action enemy()
{
	wait(-1);
	enemycount = enemycount + 1;
	VECTOR diffen;
	ANGLE angleen;
	c_setminmax(me);
	my.health = 2 + random(4);
	vec_set(my.scale_x, vector(1 + random(1), 1 + random(1), 1 + random(1)));
	//attacking();	
	my.group = 3;
	my.pan = random(360);
	my.emask = ENABLE_SCAN;
	my.event = hit_me;
	set(my, SHADOW);
	while(my.health > 0)
	{
		c_ignore(2, 0);
		c_move(me, vector(my.speed * time_step, 0, 0), nullvector, GLIDE);
		if (my.z < - 1024)
		{
			my.health = 0;
		}
		if (my.speed < 0)
		{
			my.speed = my.speed + 5 * time_step;
		}
		if (vec_dist(my.x, player.x) >= 500) if (my.speed > 0)
		{
			my.speed = my.speed - 5 * time_step;
		}
		if(vec_dist(my.x, player.x) < 500)
		{
			c_trace(vector(my.x, my.y, my.z + 20), player.x, IGNORE_ME);
			if(you)
			{
				vec_diff(diffen, player.x, my.x);
	vec_to_angle------>	vec_to_angle(angleen, diffen);            <-----vec_to_angle
				c_ignore(2, 0);
				c_rotate(me, vector(angleen.pan - my.pan, 0, 0), GLIDE);
				if(my.speed < 20)
				{
					my.speed = my.speed + 5 * time_step;
				}
			}
		}
		wait(1);
	}
	combo = combo + 0.1;
	effect(bloodex, 100, my.x, vector(0, 0, 40));
	enemycount = enemycount - 1;
	ent_remove(me);
}



enemies event function:
Code:
function hit_me()
{
	my.health = my.health - 1;
	my.speed = - 20 * player.strength;
	effect(blood, 30, my.x, vector(0, 0, 40));
}


Last edited by Denn15; 02/03/15 21:44.