/****************************************************************************
*
* EFFECTS.H
*
* PROGRAMMER : Chris
*    VERSION : 00.00
*    CREATED : 01/06/98
*   MODIFIED : 01/06/98
*       TABS : 5
*
* DESCRIPTION
*	Header file for EFFECTS.C
*
*****************************************************************************/

#ifndef _EFFECTS_H
#define _EFFECTS_H

#ifdef __cplusplus
extern "C" {
#endif

/*---------------------------------------------------------------------------
 *	Import Headers
\*--------------------------------------------------------------------------*/

#ifdef PSX_VERSION
#include "../spec_psx/typedefs.h"
#include "../spec_psx/3d_gen.h"
#else
#include "..\specific\stypes.h"
#endif

#include "items.h"
#include "anim.h"

/*---------------------------------------------------------------------------
 *	Constants
\*--------------------------------------------------------------------------*/

#define NUM_EFFECTS 50

/*---------------------------------------------------------------------------
 *	Type Definitions
\*--------------------------------------------------------------------------*/

typedef struct {
	PHD_3DPOS	pos;
	sint16 room_number;
	sint16 object_number;
	sint16 next_fx;
	sint16 next_active;
	sint16 speed;
	sint16 fallspeed;
	sint16 frame_number;
	sint16 counter;
	sint16 shade;
	sint16 flag1;
	sint16 flag2;
}FX_INFO;

typedef struct {
	sint32 x;
	sint32 y;
	sint32 z;
	sint32 mesh_num;
}BITE_INFO;

/*---------------------------------------------------------------------------
 *	Prototypes
\*--------------------------------------------------------------------------*/

extern int number_sound_effects;
extern OBJECT_VECTOR *sound_effects;

extern FX_INFO *effects;
extern sint16 next_fx_free;
extern sint16 next_fx_active;

extern int assault_timer_display;
extern int assault_timer_active;
extern int assault_timer_best;

extern void SoundEffects();

extern sint16 DoBloodSplat( sint32 x, sint32 y, sint32 z, sint16 speed, PHD_ANGLE direction, sint16 room_num );
extern void DoLotsOfBlood(sint32 x, sint32 y, sint32 z, sint16 speed, PHD_ANGLE direction, sint16 room_num, int number);
extern void DoLotsOfBloodD(sint32 x, sint32 y, sint32 z, sint16 speed, PHD_ANGLE direction, sint16 room_num, int number);
extern void ControlBlood1( sint16 item_num );
extern void move_explosion( sint16 fx_num );
extern void CreateBubble(PHD_3DPOS *pos, sint16 room_number, long size, long sizerange);
extern void ControlBubble1( sint16 item_num );
extern void ControlExplosion1( sint16 item_num );
extern void InitialiseBubbleEmitter( sint16 item_num );
extern void ControlBubbleEmitter( sint16 item_num );
extern void Richochet( GAME_VECTOR *pos );
extern void ControlRichochet1( sint16 fx_num );
extern void Twinkle( GAME_VECTOR *pos );
extern void ControlTwinkle( sint16 fx_num );
extern void LaraBubbles( ITEM_INFO *item );
extern void Splash( ITEM_INFO *item );
extern void WadeSplash( ITEM_INFO *item, int waterheight, int waterdepth );
extern void ControlSplash1( sint16 fx_num );
extern void ControlSnowSprite(sint16 fx_num);
extern void ControlWaterSprite(sint16 fx_num);
extern void ControlHotLiquid(sint16 fx_num);
extern void floor_shake_effect( ITEM_INFO *item );
extern void silly_effect( ITEM_INFO *item );
extern void ItemSparkle( ITEM_INFO *item, int meshmask );
extern void BaddieBiteEffect(ITEM_INFO *item, BITE_INFO *bite);

extern void (*effect_routines[])( ITEM_INFO *item );


#ifdef __cplusplus
}
#endif

#endif

