Versuchs mal auf der Basis, natürlich müssen Deine Explosion
usw. wieder eingefügt werden, aber die Bewegung der Kiste sollte so hinhauen. Wenn in der Kiste_Schaden nur noch
Test-Variablen gesteuert werden ... ist die überflüssig.

Code:
var staerke=0;
var entfernung=20; //wie weit sie sich bewegt
var laenge = 0;
var Player_hit_enemy;
var atk_once = 0;

DEFINE health, skill20;

entity* target_enemy;
var boom_var;
var animdist;

function Kiste_Schaden;

function Kiste_gravity() 
{
	trace_mode = ignore_me+ignore_passable+use_box;
	result = trace(vector(my.x,my.y,my.z),vector(my.x,my.y,my.z - 4000));
	IF (result > 0) {	my.z -= 1 * time_step; }
}

action Kiste
{

	my.gravity = 6;
	my.polygon = ON;
	your = target_enemy;
	my.skill80==1;
	you = player;
	my.shadow = on;
	my.health = 500;
	//	enemy_NR = 2;
	my.entity_type = 2;
	my.enable_scan = on;
	my.FLAG1 = on;
	//Lebensanzeige_verschwindet();
	Kiste_Schaden();
	
	while(player == NULL){wait(1);}
	
	while(1)
	{
		Kiste_gravity();
		
		IF (my.hit_by_player == 1) 
		{
			my.move_x = player.move_x;
			my.move_y = player.move_y;
			my.z+=2*time_step; //lass Kiste in die Luft fliegen	
			
			
			c_move(my,nullvector,my.move_x,use_polygon | ignore_passable | glide);
			IF (player.animblend == blend || player.animblend < attack_a) { my.health-=240; my.hit_by_player = 0; }
		}
		IF (player.animblend >= stand && target_enemy == my && player_lock_on == 0) && (player.animblend < attack_a || player.animblend > attack_f) { target_enemy = null; }
		IF (target_enemy == my && vec_dist(my.x,player.x) > 300) { target_enemy = null; }

		if(my.health < 0)
		{
			//			not_visiert();	
			my.TRANSLUCENT = on;
			my.alpha = 100;
			my.enable_scan = off;
			my.passable = on;
			target_enemy = null;
			while(animdist < 100)
			{
				
				animdist += 5.5 * time_step; //gewünschte geschwindigkeit
				ent_cycle("explo",animdist);
				if(animdist > 15)
				{

					my.alpha -= 8;

				}
				wait(1);
			}

		}
		wait(1);
	}
	if(animdist > 100)
	{
		my.invisible = on;
		//		animdist == 0;
		//Lade_c3();
	}
}

function Kiste_Schaden
{
	while(1)
	{
		if(my.health > 0)
		{
			laenge += 3*time_step;
			atk_once = 1;
		}
		else
		{
			Player_hit_enemy = 0;
			laenge = 0;
			atk_once = 0;
		}
		wait(1);
	}
}