ffc script Acheman{
void run(int enemyID){
npc n = Ghost_InitAutoGhost(this,enemyID);
Ghost_TileWidth = 4;
Ghost_TileHeight = 3;
int combo = n->Attributes[10];
Ghost_Transform(this,n,combo,-1,4,3);
Ghost_X = 100;
Ghost_Y = 50;
float counter = -1;
int speed = n->Step;
int turncombo;
int fire_timer = Choose(60,120,180,240);
int shield_timer = Choose(90,150,210,240);
int mode = 1;
Ghost_SetFlag(GHF_FLYING_ENEMY);
eweapon fireball[4];
int stop = 60;
while(n->HP> 0){
if(mode ==1){
n->Step = speed;
counter = Ghost_ConstantWalk4(counter, n->Step, n->Rate, n->Homing, n->Hunger);
Ghost_SetAllDefenses(n, NPCDT_NONE);
n->Defense[NPCD_REFMAGIC] = NPCDT_IGNORE;
n->Defense[NPCD_REFFIREBALL] = NPCDT_IGNORE;
if(n->Dir == DIR_LEFT || n->Dir == DIR_UP){
Ghost_SetHitOffsets(n, 0, 4, 10, 6);
turncombo = combo+2;
}
else{
Ghost_SetHitOffsets(n, 0, 4, 6, 10);
turncombo = combo+3;
}
}
else{
n->Step = 0;
Ghost_SetAllDefenses(n, NPCDT_IGNORE);
if(n->Dir == DIR_LEFT || n->Dir == DIR_UP){
Ghost_SetHitOffsets(n, 0, 6, 0, 12);
turncombo = combo+4;
}
else{
Ghost_SetHitOffsets(n, 0, 6, 12, 0);
turncombo = combo+5;
}
}
if(fire_timer <0 && mode == 1){
if(n->Dir == DIR_LEFT || n->Dir == DIR_UP){
turncombo = combo;
fireball[0] = FireAimedEWeapon(n->Weapon, n->X, n->Y, DegtoRad(247), 100, n->WeaponDamage, 40, 40, 0);
fireball[1] = FireAimedEWeapon(n->Weapon, n->X, n->Y+16, DegtoRad(203), 100, n->WeaponDamage, 40, 40, 0);
fireball[2] = FireAimedEWeapon(n->Weapon, n->X, n->Y+48, DegtoRad(157), 100, n->WeaponDamage, 40, 40, 0);
fireball[3] = FireAimedEWeapon(n->Weapon, n->X, n->Y+48, DegtoRad(113), 100, n->WeaponDamage, 40, 40, 0);
SetEWeaponLifespan(fireball[0],EWL_TIMER, 200);
SetEWeaponMovement(fireball[0], EWM_HOMING, DegtoRad(22), 200);
SetEWeaponDeathEffect(fireball[0],EWD_VANISH, 0);
SetEWeaponLifespan(fireball[1],EWL_TIMER, 200);
SetEWeaponMovement(fireball[1], EWM_HOMING, DegtoRad(22), 200);
SetEWeaponDeathEffect(fireball[1],EWD_VANISH, 0);
SetEWeaponLifespan(fireball[2],EWL_TIMER, 200);
SetEWeaponMovement(fireball[2], EWM_HOMING, DegtoRad(22), 200);
SetEWeaponDeathEffect(fireball[2],EWD_VANISH, 0);
SetEWeaponLifespan(fireball[3],EWL_TIMER, 200);
SetEWeaponMovement(fireball[3], EWM_HOMING, DegtoRad(22), 200);
SetEWeaponDeathEffect(fireball[3],EWD_VANISH, 0);
}
else{
turncombo = combo+1;
fireball[0] = FireAimedEWeapon(n->Weapon, n->X, n->Y, DegtoRad(293), 100, n->WeaponDamage, 40, 40, 0);
fireball[1] = FireAimedEWeapon(n->Weapon, n->X, n->Y+16, DegtoRad(337), 100, n->WeaponDamage, 40, 40, 0);
fireball[2] = FireAimedEWeapon(n->Weapon, n->X, n->Y+48, DegtoRad(23), 100, n->WeaponDamage, 40, 40, 0);
fireball[3] = FireAimedEWeapon(n->Weapon, n->X, n->Y+48, DegtoRad(67), 100, n->WeaponDamage, 40, 40, 0);
SetEWeaponLifespan(fireball[0],EWL_TIMER, 200);
SetEWeaponMovement(fireball[0], EWM_HOMING, DegtoRad(22), 200);
SetEWeaponDeathEffect(fireball[0],EWD_VANISH, 0);
SetEWeaponLifespan(fireball[1],EWL_TIMER, 200);
SetEWeaponMovement(fireball[1], EWM_HOMING, DegtoRad(22), 200);
SetEWeaponDeathEffect(fireball[1],EWD_VANISH, 0);
SetEWeaponLifespan(fireball[2],EWL_TIMER, 200);
SetEWeaponMovement(fireball[2], EWM_HOMING, DegtoRad(22), 200);
SetEWeaponDeathEffect(fireball[2],EWD_VANISH, 0);
SetEWeaponLifespan(fireball[3],EWL_TIMER, 200);
SetEWeaponMovement(fireball[3], EWM_HOMING, DegtoRad(22), 200);
SetEWeaponDeathEffect(fireball[3],EWD_VANISH, 0);
}
fire_timer = Choose(60,120,180,240);
while(stop >0){
n->Step = 0;
Ghost_SetHitOffsets(n, 0, 3, 4, 4);
Ghost_Data = turncombo;
stop--;
Gen_Explode_Waitframe(this,n);
}
stop = 60;
n->Step = speed;
}
if(shield_timer <=0 && mode ==1){
mode = 2;
shield_timer = Choose(90,150,210,240);
}
else if(shield_timer <=0 && mode ==2){
mode = 1;
shield_timer = Choose(90,150,210,240);
}
shield_timer--;
fire_timer--;
Ghost_Data = turncombo;
Gen_Explode_Waitframe(this,n);
}
}
}
void Gen_Explode_Waitframe(ffc this, npc ghost){
if(!Ghost_Waitframe(this, ghost, false, false)){
Ghost_DeathAnimation(this, ghost, 2);
Quit();
}
}