Quick revision, add one line to the fireball script:

Code:
ffc script boss_fball {
void run (int tnum, int spd) {
//setup vars
npc boss = Screen->LoadNPC(1);
this->CSet = 0;
this->Data = 0;
int shoot = 0;
int dx = 0;
int dy = 0;
int dist = 0;
int rnd_x = 0;
int rnd_y = 0;
while (true) {
///**Add the folling line to the script and see if it fixes the problem***\\\
if (fire_boss_alive == 0) {this->CSet = 0;}
if (this->CSet == 0) {
	this->X = boss->X;
	this->Y = boss->Y;
	}
if (this->CSet != 0 && shoot == 0) {
	this->Data = tnum;
	shoot = 1;
	dx = (Link->X+8) - (this->X+8);
	dy = (Link->Y+8) - (this->Y+8);			 
	dist = Sqrt(dx*dx + dy*dy);
	rnd_x = Rand(4)-2;
	rnd_y = Rand(4)-2;
	}
if (this->CSet != 0 && shoot == 1) {
	this->X += rnd_x + (dx / dist) * spd;
	this->Y += rnd_y + (dy / dist) * spd;
	
	}
if(this->X <0 || this->X > 240 || this->Y <0 || this->Y >160) {
	this->CSet = 0;
	this->Data = 0;
	shoot = 0;
	}
Waitframe();
}
}
}
try that out, let me know if it fixes the problem