
#ifndef __H_BOSSES
#define __H_BOSSES


void Update_Joff(ENEMYPOS *enemy);
void Update_Cancer(ENEMYPOS *enemy);
void Update_Kirk(ENEMYPOS *enemy);

void Update_Willy(ENEMYPOS *enemy);

void Update_Spank(ENEMYPOS *enemy);
void Update_BabySpank(ENEMYPOS *enemy);

void Update_Frank(ENEMYPOS *enemy);
void Update_EvilBot(ENEMYPOS *enemy);
void Update_Kloset(ENEMYPOS *enemy);

void Update_Claw(ENEMYPOS *enemy);
void Update_Spray(ENEMYPOS *nme);
void Update_Bubble1(ENEMYPOS *nme);
void Update_Bubble2(ENEMYPOS *nme);
void Update_FireBall(ENEMYPOS *nme);
void Update_Missile(ENEMYPOS *nme);
void Update_Laser(ENEMYPOS *nme);
void Update_Spiderbomb(ENEMYPOS *nme);
void Update_Fragment(ENEMYPOS *nme);


void Update_CaPie(ENEMYPOS *nme);
void Update_CaBomb(ENEMYPOS *nme);
void Update_CaGlove(ENEMYPOS *nme);
void Update_CaPiano(ENEMYPOS *nme);


extern NME_SPHERE JoffSpheres[];
extern NME_SPHERE CancerSpheres[];
extern NME_SPHERE KirkSpheres[];

extern NME_SPHERE WillySpheres[];

extern NME_SPHERE FrankSpheres[];
extern NME_SPHERE EvilRSpheres[];
extern NME_SPHERE KlosSpheres[];

extern NME_SPHERE SpankRefSpheres[];
extern NME_SPHERE SpankSpheres[];
extern NME_SPHERE BabySpankSpheres[];
extern NME_SPHERE MissSpheres[];

void bosses_Panel();
void bosses_Update();
void bosses_BeginFile();
void bosses_Endfile();

void enemy_ShootSpray(VECTOR *org, VECTOR *vel);
void enemy_ShootClaw(VECTOR *org, VECTOR *vel, int ya, int za);
void enemy_ShootBubble(VECTOR *org, VECTOR *vel, int type);
void enemy_ShootFireBall(VECTOR *org, VECTOR *vel);

void dirtyFlames(VECTOR *vec, int flames, int shifts, int size);


void SprayIntRou(int with, ENEMYPOS *nme, VECTOR *dvec, int sphererad);
void ClawIntRou(int with, ENEMYPOS *nme, VECTOR *dvec, int sphererad);
void Bub1IntRou(int with, ENEMYPOS *nme, VECTOR *dvec, int sphererad);
void Bub2IntRou(int with, ENEMYPOS *nme, VECTOR *dvec, int sphererad);
void FireBIntRou(int with, ENEMYPOS *nme, VECTOR *dvec, int sphererad);

void SBombIntRou(int with, ENEMYPOS *nme, VECTOR *dvec, int sphererad);
void MissIntRou(int with, ENEMYPOS *nme, VECTOR *dvec, int sphererad);
void PieIntRou(int with, ENEMYPOS *nme, VECTOR *dvec, int sphererad);


extern BEHAVIOUR_PHYSICS	KirkBehaviour;
//extern BEHAVIOUR_PHYSICS	CancerBehaviour;
//extern BEHAVIOUR_PHYSICS	WillyBehaviour;

void boss_FlipCancerOver(ENEMYPOS *nme);
void BabyPushOffBall(ENEMYPOS *nme);

extern NEWMODEL *cancer_claw_psa;
extern NEWMODEL *kirk_bubble1_psa;
extern NEWMODEL *kirk_bubble2_psa;
extern NEWMODEL *willy_fireball_psa;
extern NEWMODEL *robot_missile_psa;
extern NEWMODEL *robot_laser_psa;
//extern NEWMODEL *robot_spider_psa;
extern LOADEDMODEL *robot_spider_model;
extern LOADEDMODEL *robot_lsho_model;
extern LOADEDMODEL *robot_lgun_model;
extern LOADEDMODEL *robot_rsho_model;
extern LOADEDMODEL *robot_rgun_model;
extern LOADEDMODEL *robot_model;

extern LOADEDMODEL *spboss_panel_model;


//extern LOADEDMODEL *ca_pie_model;
//extern LOADEDMODEL *ca_bomb_model;
//extern LOADEDMODEL *ca_glove_model;
//extern LOADEDMODEL *ca_piano_model;

//extern ENEMYPOS *ca_pie_enemy;
//extern ENEMYPOS *ca_bomb_enemy;
//extern ENEMYPOS *ca_glove_enemy;
//extern ENEMYPOS *ca_piano_enemy;

extern NEWTMD *bot_original_meshes[4];

int CaveHubDecide();
int CaveCrystalsGot();

//#define WILLY_COLL_RAD 120
#define WILLY_COLL_RAD 104



typedef struct SpBossCtrl
{
	SHORT ya;
	SHORT ya_cam;
	SHORT xa;
	SHORT xa_cam;

	int panel_z;

	int ball_disable;
	int shield;
	int pan_cols[12];
	int pan_vels[12];
}SPBOSSCTRL;

extern SPBOSSCTRL SpBossCtrl;




//#define EVIL_SCALE 2048
#define EVIL_SCALE 1500

// both the cameo and ingame camera positions
#define ER_FINAL_X (-300)
#define ER_FINAL_Y (-300)
#define ER_FINAL_Z (-400)

#define BABY_GROWTIME 20


#define FEAR_CROSS_LECCYTIME 40
extern int  FearCrossLeccyTimer;

#define FEAR_PLAT_CAMTIME 50
extern int  FearCrossPlatTimer;
extern int FearCrossPlatDurn;

extern int caboss_spin;

extern char FearSnapFlag;

#endif
