Instill energy will turn any ordinary screen enemy into a regenerating killing machine, and rapid fire statue, well, um, it's a statue that fires rapidly...or not, it's up to you.

Uses:

Give the Instill Energy to an otherwise boring enemy, such as the Digdogger, or Aquamentus, maybe the digdogger kids too.

You can use the statue script for, well, a statue... Maybe place it on an unwalkable combo?
Actually, You might want to link it to another ffc for something really sick. Perhaps a few rapid fire scripts linked to an enemy with Instill energy? Yep...they're both in the same thread for a reason.


Code:
//=============================================================
// 		FFC SCRIPT INSTILL ENERGY
// D0 - the first of four ffc's to use as projectiles
// D1 - new enemy HP amount
// D2 - delay between rapid fire attack (in ticks) /default is 300
// D3 - combo to use as projectiles
// D4 - CSet of projectiles
// D5 - speed of projectiles
// D6 - screen enemy number to instill energy to
// D7 - the HP regeneration of the instilled enemy :O
//=============================================================

ffc script Instill_Energy{

	void run(int fireball_number, int enemyHP, int max_delay, int cdata, int cset, int speed, int screen_enemy_number, int regen){

		int fire = fireball_number;
		
		if(max_delay == 0){max_delay = 300;}

		int enemy_number = 0;
		npc enemy;
		ffc shoot;

		int delay = 0;

		Waitframes(4);

		npc fire_master = Screen->LoadNPC(screen_enemy_number);
		npc firestorm;
		fire_master->HP = enemyHP;

		while(true){

			if(fire_master->isValid()){
		
				if(fire >= fireball_number+4){fire = fireball_number;}
	
				this->X = fire_master->X; this->Y = fire_master->Y;
				if(delay > max_delay){
					delay = 0;
					fire_master->HP = fire_master->HP + regen;
				}
				if(delay==20||delay==40||delay==60||delay==80){

					shoot = Screen->LoadFFC(fire);
					shoot->Data = cdata;
					shoot->CSet = cset;
					shoot->X = this->X; shoot->Y = this->Y;					

					int dx = Link->X - this->X;
					int dy = Link->Y - this->Y;
					float norm = Sqrt(dx*dx+dy*dy);
					if(norm > 0)
					{
 						shoot->Vx = dx/norm*speed;
 						shoot->Vy = dy/norm*speed;
					}
					fire++;
				}
			delay++;
			}
			else{
				this->X = 0; this->Y = 0; this->Data = 0;
			}
		Waitframe();
		}
	}
}

Code:
//===================================================================================
//			FFC SCRIPT RAPID FIRE STATUE
// D0 - the first ffc to use as projectiles
// D1 - the amount of ffc's to use for fireballs. Ex D0; 2, and D1 5, will use ffc's 2-7. 
// D2 - speed of projectile
// D3 - combo of projectile
// D4 - Cset of projectile
// D5 - Max delay in ticks before the firing sequence restarts
// D6 - Delay between shots     *Note* It will fire five shots
// during the max delay sequence. If you want non-stop firing divide max delay by five.
// ex: Delay - 20, max delay 100. -for crazy statues try delay 8, max 50.
// if the combo of the statue changes the shooting will stop.
// D7 - the ffc to link this ffc to.
//====================================================================================


ffc script Rapid_fire_statue{

	void run(int fireball_number, int fireball_amount, int speed, int cdata, int cset, int max_delay, int fireball_delay, int linked_ffc){

		int fire = fireball_number;
		int swap = fireball_amount;
		int armed = fireball_delay;
		ffc shoot;
		int delay = 0;
		int original_combo = this->Data;
		ffc linked = Screen->LoadFFC(linked_ffc);

		if(max_delay == 0){max_delay = 300;}

		while(true){

			if(linked_ffc != 0){ this->X = linked->X; this->Y = linked->Y;}
			if(fire > fireball_number+swap){ fire = fireball_number;}
			if(delay > max_delay){delay = 0;}

			if(this->Data == original_combo){

				if(delay==armed||delay==armed+armed||delay==armed+armed+armed||
					delay==armed+armed+armed+armed||delay==armed+armed+armed+armed+armed){

					shoot = Screen->LoadFFC(fire);
					shoot->Data = cdata;
					shoot->CSet = cset;
					shoot->X = this->X; shoot->Y = this->Y;					

					int dx = Link->X - this->X;
					int dy = Link->Y - this->Y;
					float norm = Sqrt(dx*dx+dy*dy);
					if(norm > 0)
					{
 						shoot->Vx = dx/norm*speed;
 						shoot->Vy = dy/norm*speed;
					}
					fire++;
				}
			delay++;
			}
		Waitframe();
		}
	}
}
Thanks DD for the distance routine.


-Have fun!