/*
	kn_font.h
*/

#ifndef _KN_FONT_H_
#define _KN_FONT_H_

/* ================================================ */
/*
	DEFINE
*/

/* Font Type */
#define FONT_TYPE_NONE		100
#define FONT_TYPE_MAIN		0
#define FONT_TYPE_SMALL		1
#define FONT_TYPE_SELECT	2
#define FONT_TYPE_MIDDLE	3
#define FONT_TYPE_RANK		4
#define FONT_TYPE_SPEED		5
#define FONT_TYPE_GOAL		6

/* Font Max Number */
#ifdef CHINA
#define FONT_MAX_NUM_MAIN	55
#else
#define FONT_MAX_NUM_MAIN	40
#endif
#define FONT_MAX_NUM_SMALL	42
#ifdef CHINA
#define FONT_MAX_NUM_SELECT	52
#else
#define FONT_MAX_NUM_SELECT	46
#endif
#define FONT_MAX_NUM_MIDDLE	12
#define FONT_MAX_NUM_RANK	10
#define FONT_MAX_NUM_SPEED	11
#define FONT_MAX_NUM_GOAL	10

/* Font Min Size */
#define FONT_MIN_WD_SELECT	5
/* Font Size */
#define FONT_WD_MAIN	24
#define FONT_HT_MAIN	20
#define FONT_WD_SMALL	8
#define FONT_HT_SMALL	8
#define FONT_WD_SELECT	16
#define FONT_HT_SELECT	12
#define FONT_WD_MIDDLE	12
#define FONT_HT_MIDDLE	16
#define FONT_WD_RANK	12
#define FONT_HT_RANK	16
#define FONT_WD_SPEED	16
#define FONT_HT_SPEED	20
#define FONT_WD_GOAL	40
#define FONT_HT_GOAL	40

/* Special Font Code */
#define FONT_CODE_SPACE	255

/* SPACE WD */
#define FONT_SPACE_WD_MAIN		(FONT_WD_MAIN)
#define FONT_SPACE_WD_SMALL		(FONT_WD_SMALL)
#define FONT_SPACE_WD_SELECT	(12)
#define FONT_SPACE_WD_MIDDLE	(FONT_WD_MIDDLE)
#define FONT_SPACE_WD_RANK		(FONT_WD_RANK)
#define FONT_SPACE_WD_SPEED		(FONT_WD_SPEED)
#define FONT_SPACE_WD_GOAL		(FONT_WD_GOAL)

/* Font Flag */
#define FONT_FLAG_NORMAL	0
#define FONT_FLAG_FLASH		1
#define FONT_FLAG_SHADE		2
#define FONT_FLAG_FLASH_0	3		/* R->Y->W->Y->R */
#define FONT_FLAG_FLASH_1	4		/* B->R->Y->R->B */
#define FONT_FLAG_FLASH_2	5		/* G->Y->W->Y->G */
#define FONT_FLAG_FLASH_3	6		/* B->G->Y->G->B */
#define FONT_FLAG_COLOR		7
#define FONT_FLAG_FLASH_4	8		/* P->R->P->R->P */
#define FONT_FLAG_FLASH_5	9		/* G->W->G->W->G */
#define FONT_FLAG_ALPHA		10
#define FONT_FLAG_SHADE_S	11

/* FLASH COUNT */
#define FONT_FLASH_COUNT	5		/* COUNT2 / COUNT [game frame] */
#define FONT_FLASH_COUNT2	2

/* FLASH COLOR */
#define FONT_COLOR_TURN_OFF	128
/* ================================================ */
/*
	STRUCT
*/
/* フォントフラッシュ用パラメータ */
typedef struct {
	short	moveFlag;
	short	stat;
	int		count0, count1;
	short	r, g, b;
} sFontFlash;

/* ================================================ */
/*
	VARIABLE
*/

/* Font Width Table */
extern uchar	fontWidthMain[];
extern uchar 	fontWidthSmall[];
extern uchar 	fontWidthSelect[];
extern uchar 	fontWidthMiddle[];
extern uchar 	fontWidthRank[];
extern uchar	fontWidthSpeed[];
extern uchar	fontWidthGoal[];

/* font Number */
extern int 	fontVtxNum;
extern char 	dxSelectNumber[];

/* ================================================ */
/*
	FUNCTION
*/
extern void initKnFont( void );
extern void moveKnFont( void );
extern Gfx	*makeFontVtxGlist( Gfx *gp, uint wd, uint ht, int sx, int sy,
							   uchar r0, uchar g0, uchar b0,
							   uchar r1, uchar g1, uchar b1,
							   uchar r2, uchar g2, uchar b2,
							   uchar r3, uchar g3, uchar b3, float scale );
extern Gfx	*makeTimeGlist( Gfx *gp, uint font_type, int ctime, int sx, int sy,
							uint flag,
						    uchar r0, uchar g0, uchar b0,
							uchar r1, uchar g1, uchar b1,
							uchar r2, uchar g2, uchar b2,
							uchar r3, uchar g3, uchar b3 );
extern Gfx	*makeStrGlist( Gfx *gp, uint font_type, char *str, int sx, int sy,
						   uint flag,
						   uchar r0, uchar g0, uchar b0,
						   uchar r1, uchar g1, uchar b1,
						   uchar r2, uchar g2, uchar b2,
						   uchar r3, uchar g3, uchar b3 );
extern Gfx	*makeStrGlistS( Gfx *gp, uint font_type, char *str, int sx, int sy,
						   uint flag,
						   uchar r0, uchar g0, uchar b0,
						   uchar r1, uchar g1, uchar b1,
						   uchar r2, uchar g2, uchar b2,
						   uchar r3, uchar g3, uchar b3, float scale );
extern Gfx	*makeInitStrGlist( Gfx *gp, uint flag,
				   uchar r0, uchar g0, uchar b0,
				   uchar r1, uchar g1, uchar b1,
				   uchar r2, uchar g2, uchar b2,
				   uchar r3, uchar g3, uchar b3 );
extern Gfx	*makeStrGlistSub( Gfx *gp, uint font_type, char *str, int sx, int sy );
extern Gfx	*makeNumberGlistSub( Gfx *gp, uint font_type, int value, int sx, int sy );
extern Gfx	*makeTimeGlistSub( Gfx *gp, uint font_type, int ctime, int sx, int sy );
extern unsigned int codeConvAsc2Font( uint font_type, char asc_code );

#endif
