#ifndef	_H_RESULT
#define	_H_RESULT

#define		RESULTDEBUG		1


/*****************************************************************************

	Ultra 64  MarioKart 64

	Result Program

*****************************************************************************/

/********************************************************************************
		Parameter Define
 ********************************************************************************/

#define		DSTART_X		190
#define		DSTART_Y		50
#define		DMAX			10

#define		MINIOBJ_MAX		200		/* OBJECT MAX !	*/
#define		MINIOBJ_ON		0x01	/* OBJECT ON !! */

#ifdef YAJIMA
#define 	rmonpf(params)  osSyncPrintf params
#else
#define 	rmonpf(params)		{}
#endif

/*****************************************************************************
		Structure
*****************************************************************************/

/*-----------------------------------------------------------------------------*/
typedef struct {
	short flag;		
	short cursor;		/* debug cursor				*/
	short dprintX;		/* debug print X position 	*/
	short dprintY;		/* debug print Y position 	*/
	short dwork[DMAX];	/* debug parameter work 	*/
	short keytimer;		/* key timer				*/
	short trigger;		/* key trigger				*/
	short objcount;		/* effect object count		*/
	Gfx   *graphcount;	/* graph list count 		*/
} YdebugRecord;

/*-----------------------------------------------------------------------------*/
typedef union {
	float			f;				/* float	work		*/
	long			d;				/* long		work		*/
	void			*pointer;		/* function	pointer		*/
	short			word[2];		/* short	work		*/
	unsigned char	status[4];		/* status				*/
} commonwork;

/*-----------------------------------------------------------------------------*/
typedef struct {
	short			name;			/* Object Name		*/
	short			worldX;   		/* Position X 		*/
	short			worldY;			/* Position Y 		*/
	short			worldZ;			/* Position Z 		*/
	char			angleX;			/* Angle X 			*/
	char			angleY;			/* Angle Y 			*/
	char			angleZ;			/* Angle Z 			*/
	char			parameter;		/* Object Parameter */
} MiniObjData;

/*-----------------------------------------------------------------------------*/
typedef struct {
	unsigned long 	flag;			/* Object Flag				*/
	short			name;			/* Object Name				*/
	short			mode;			/* Object Mode				*/
	short			timer;			/* Object Timer				*/
	short  			angleX;			/* Object Angle				*/
	short  			angleY;			/* Object Angle				*/
	short  			angleZ;			/* Object Angle				*/
	float  			worldX;			/* Object World Position	*/
	float  			worldY;			/* Object World Position	*/
	float  			worldZ;			/* Object World Position	*/
	float  			speedF;			/* Object Flat Speed		*/
	float  			speedY;			/* Object UpDown Speed		*/
	float  			scale;			/* Object Scale				*/
	MiniObjData		*initdata;		/* Initial Position & Angle */
	commonwork		s[8];			/* Object Common Work		*/
} MiniObj;

/*-----------------------------------------------------------------------------*/
typedef struct {
	void			*func[3];		/* Program */
} MiniObjTable;

/*****************************************************************************
		Structure
*****************************************************************************/

typedef struct {
	short mode;			/* result mode */
	long  timer;		/* result_timer */
	long  total_timer;	/* result_timer */
	long  timeend;		/* timeend 		*/
	long  pos[3];
	char  carmove;
	char  rank;			/* result rank 0,1,2,3 		   */
	char  driver;		/* result rank 0,1,2,3,4,5,6,7 */
} ResultRecord;

typedef struct {
	short px;
	short py;
	int	  data;
  	char  *message;
} DprintRecord;



/*****************************************************************************
		Work define
*****************************************************************************/

#define	db0		yd.dwork[0] 
#define	db1		yd.dwork[1] 
#define	db2		yd.dwork[2] 
#define	db3		yd.dwork[3] 
#define	db4		yd.dwork[4] 
#define	db5		yd.dwork[5] 
#define	db6		yd.dwork[6] 
#define	db7		yd.dwork[7] 
#define	db8		yd.dwork[8] 
#define	db9		yd.dwork[9] 

//#define 	CONT_A      0x8000 
//#define 	CONT_B      0x4000 
//#define 	CONT_G	  	0x2000 
//#define 	CONT_START  0x1000 
//#define 	CONT_UP     0x0800 
//#define 	CONT_DOWN   0x0400 
//#define 	CONT_LEFT   0x0200 
//#define 	CONT_RIGHT  0x0100 
//#define 	CONT_L      0x0020 
//#define 	CONT_R      0x0010 
//#define 	CONT_E      0x0008 
//#define 	CONT_D      0x0004 
//#define 	CONT_C      0x0002 
//#define 	CONT_F      0x0001 
#define		CONT_Vup		CONT_E
#define		CONT_Vdown		CONT_D
#define		CONT_Vleft		CONT_C
#define		CONT_Vright		CONT_F

/*****************************************************************************
		Work Extern
*****************************************************************************/

extern 		YdebugRecord	yd;
extern 		ResultRecord 	resultstat;
extern		int				result_flag;
extern 		int 			dprint_counter;
extern		int 			mapblack_flag;


extern void debugdisp(void);							/* debug display		*/
extern void dprint(int px,int py,char *a,int data);     /* call	dprint			*/
extern void draw_dprint(void);							/* draw dprint	 		*/
extern void mapchange(int mapNo);						/* mapchange function	*/
extern void event_kartmove(void);						/* event kartmove		*/
extern void event_balloon(long px,long py,long pz);		/* event balloon		*/

extern Gfx mcup_gold[];
extern Gfx mcup_silver[];
extern Gfx mcup_copper[];
extern Gfx mcup2_gold[];
extern Gfx mcup2_silver[];
extern Gfx mcup2_copper[];


/*****************************************************************************
		Parameter Define
*****************************************************************************/

#define		END_RESULT			0xff		/* End Of Result SEQ */

#define		NOCHANGE_SEQ		0xffff

extern int result_changeseq;
extern int result_changecount;

/*****************************************************************************
		Position Define
*****************************************************************************/

#define		INIT_PX				(-2823.0f-212.0f)
#define		INIT_PY       		 250.0f
#define		INIT_PZ      		-434.0f
#define		INIT_LX		 		(INIT_PX-345.0f)
#define		INIT_LY      		 INIT_PY
#define		INIT_LZ      		(INIT_PZ-61.0f)
#define		BALLOON_POS_X		(INIT_LX+200)
#define		BALLOON_POS_Y		((INIT_LY-40))
#define		BALLOON_POS_Z		  INIT_LZ

/*===========================================================================
		End End End
===========================================================================*/
#endif



