#define	CAMDEBUGSW	0	// 0: debug mode OFF

#define	ENDING_VER2	0

#define	CAMPERS		45.0f

#define	CAMPAD	0

#define SPNUM	32
#define CDNUM	10

#define	endWINDOW_CENTER	98
#define	endWINDOW_WIDTH	52.0f
#define	endWINDOW_FRAME	12.0f

#define	resWINDOW_CENTER	(SCREEN_HEIGHT/2)
#define	resWINDOW_WIDTH		(SCREEN_HEIGHT/2)
#define	resWINDOW_FRAME		12.0f

#define	_AX	0
#define	_AY	1
#define	_AZ	2
#define	_E	3

#define	CAM_DEMO_VIEWTEST	1
#define	CAM_DEMO_1st		2
#define	CAM_DEMO_2nd		3
#define	CAM_DEMO_3rd		4
#define	CAM_DEMO_4th		5
#define	CAM_DEMO_CREDITS	6

/*      credits color
	  0 : blue
	  1 : green
	  2 : red
	  3 : yellow
	  4 : cycle 1
	  5 : cycle 2
*/


 #define	CAM_DEMO_TEST1		128+1
 #define	CAM_DEMO_TEST2		128+2
 #define	CAM_DEMO_TEST3		128+3
 #define	CAM_DEMO_TEST4		128+4


#if	CAMDEBUGSW
 #define	CAM_DEMO_SPTEST		128+5
#endif				

#define	VE_BOMB	1

#define	ushort	unsigned short
#define	uchar	unsigned char

extern float sint(ushort);
extern float cost(ushort);
extern ushort atan2t(float,float);

/*                                  
	 Vector                           
*/                                  

typedef float qFVector[4];	/* 3D float vector */

/*                                  
// camera information record buffer 
*/

typedef struct {
	FVector	lookat;	  /* look at    */
	FVector	position; /* position   */
	float	z;	  /* rotation z */
	uchar	demomode; /* camera mode*/
	float	pers;	  /* screen_view_angle */
	
	FVector	lookat_old;	  /* look at    */
	FVector	position_old; /* position   */
	FVector	up_old; /* position   */

	SVector	shakeang;	/* shake value */
	SVector	shakefreq;	/* shake frequency */
	SVector	shakefreqvel;	/* shake velocity */
	SVector	shakeangdec;	/* shake decriment value */
	/* zoom */

//	float	camera_fov;
//	float	camera_fov_bak;	/* buffer*/

	short	shakeang_Z;	/* shake value */
	float	shakefreq_Z;	/* shake frequency */
	float	shakefreqvel_Z;	/* shake velocity */
	short	shakeangdec_Z;	/* shake decriment value */
	short	shakeofs_Z;

	//float	hit_power ;	/*mono ni atattatoki no tuyosa*/
	//uchar	jump_delay ;	/*mono ni atattatoki no tuyosa*/

} camDemoBuffer, *camDemoBufferPtr;

/*                     
// camera inbetweener  
*/                     

//typedef struct {
//	FVector	lookat;	  /* look at    */
//	FVector	position; /* position   */
//	FVector	up;       /* up vector   */
//
//	FVector	lookat_D;	  /* look at    */
//	FVector	position_D; /* position   */
//	FVector	up_D;       /* up vector   */
//
//} camInbetBuffer, *camInbetBufferPtr;

/*                     
// controller  
*/                     

typedef struct {

	ushort	trig;
	ushort	offtrig;
	ushort	hold;

	short	x;
	short	y;

} camcont, *camcontPtr;

/*                                  
// spline data                      
*/                                  

typedef struct	{
	char	code;	/* Code                    */
	ushort	T;	/* T no sokudo (0<Tvel<1.0)*/
	char	z;	/* Rotation Z */
	SVector	pos;
	}SplinedatZ , *SplinedatPtrZ;

/*                                  
// demo sequence data               
*/                                  

typedef struct {
	void 	(*prog)(camDemoBufferPtr camera);
	short	time;
	} DemoData ;




/*                                  
// Data structure for Demo(work)    
*/                                  

typedef struct	{

	FVector		position;
	SVector		angle;

}Demodata;

/*                                  
// Data structure for credit spline    
*/                                  

typedef struct	{
	uchar	code;
	uchar	mapNo;
	SplinedatPtrZ P;
	SplinedatPtrZ L;
	ushort	time;
}creditsp;

/*                                  
// Controller                       
*/                                  

extern	void	DoDemoCamera(camDemoBufferPtr camera);
extern	int	Grou_camdemo_main(CAMERA   *Camera);
extern	void	Grou_camdemo_init(void);

extern	void	camdemodraw(void);

extern	creditsp	credittab[];

extern	DemoData DemoHonor[];

extern int	DoDemoRou(void (*prog)(camDemoBufferPtr camera) ,camDemoBufferPtr camera,short StartTime ,short EndTime);

extern void	Initspline(void);

extern	short	DemoCameraCounter;	/* Demo no counter */

