/*
	kn_def.h
*/
#ifndef _KN_DEF_H_
#define _KN_DEF_H_

/*******************************************************
	SWITCH
*******************************************************/
/* ROM Version ( 0:OFF 1:ON ) */
#ifdef ROM_FLAG
#define SW_KN_ROM		1
#define SW_KN_EDIT		0	/* COURSE EDIT ( 0:OFF 1:ON ) */
#define SW_KN_RESET		0	/* FOUR BUTTONS RESET ( 0:OFF 1:ON ) */
#define SW_KN_6M		0	/* 6MB Development Boad */
#define SW_KN_SPECIAL	0	/* SPECIAL MODE */
#define SW_KN_DEBUG		0
#define SW_KN_FAULT		0	/* Fault Thread */
#else
#define SW_KN_ROM		0
#define SW_KN_EDIT		1	/* COURSE EDIT ( 0:OFF 1:ON ) */
#define SW_KN_RESET		1	/* FOUR BUTTONS RESET ( 0:OFF 1:ON ) */
#define SW_KN_6M		1	/* 6MB Development Boad */
#define SW_KN_SPECIAL	1	/* SPECIAL MODE */
#define SW_KN_DEBUG		1
#define SW_KN_FAULT		0
#endif

#define SW_KN_3DLX	0

#if SW_KN_3DLX
#else
/* #define G_CLIPPING	0 */
#endif


/* DEBUG */
/* 言語 */
#define JAPAN   0
#define CHINA   1

#define KN_JP		0
#define KN_US		1
#define KN_EU		2
#define KN_ZH		3

#if LOCALE==JAPAN
#define SW_KN_LANGUAGE	KN_JP
#elif LOCALE==CHINA
#define SW_KN_LANGUAGE	KN_ZH
#endif

/* -------------------------------------------------- */
#ifndef _SPEC_

/*******************************************************
	SYSTEM
*******************************************************/
#define	SCREEN_WD_HI	640
#define	SCREEN_HT_HI	480

/*******************************************************
	WAKU
*******************************************************/
/* KIND */
#define WAKU_KIND_256x32	0
#define WAKU_KIND_64x32		1
#define WAKU_KIND_256x32_Y	2
/*******************************************************
	CONDITION
*******************************************************/
/* WAVE */
#define WAVE_AMP_CALM		10
#define WAVE_AMP_ROUGH		40
#define WAVE_AMP_RANDOM_MIN	10
#define WAVE_AMP_RANDOM_WIDTH	(30+1)		/* 30 */
/*******************************************************
	COURSE NUM ALIAS
*******************************************************/
/* COURSE NUM RACE  */
#define COURSE_NUM_DOLPHIN	0
#define COURSE_NUM_SANDY	1
#define COURSE_NUM_SUNSET	2
#define COURSE_NUM_MARIN	3
#define COURSE_NUM_MILKY	4
#define COURSE_NUM_PORT		5
#define COURSE_NUM_CASTLE	6
#define COURSE_NUM_SOUTHERN	7
#define COURSE_NUM_COOL		8

/*******************************************************
	DEFINE
*******************************************************/
/* 全コース数 */
#define MAX_NUM_KN_COURSE	9	/* 0-8 */
/* Max number RECORD   */
#define RECORD_MAX_NUM		5
/* ボートの数 */
#define KN_HOVER_MAX_TOUR	4		/* ツアーモード */

/* ツアーモードのコース数 */
#define TOUR_COURSE_MAX_NUM		8
/* ツアーモードのレース数 */
#define MAX_NUM_TOUR_RACE_NUM_NORMAL	7
#define MAX_NUM_TOUR_RACE_NUM_HARD	7
#define MAX_NUM_TOUR_RACE_NUM_EXPERT	8
#define MAX_NUM_TOUR_RACE_NUM		MAX_NUM_TOUR_RACE_NUM_EXPERT
/* レース番号 */
#define TOUR_START_RACE_NUM_NORMAL	(1)
#define TOUR_START_RACE_NUM_HARD	(0)
#define TOUR_START_RACE_NUM_EXPERT	(0)
#define TOUR_END_RACE_NUM_NORMAL	(MAX_NUM_TOUR_RACE_NUM_NORMAL-1)
#define TOUR_END_RACE_NUM_HARD		(MAX_NUM_TOUR_RACE_NUM_HARD-1)
#define TOUR_END_RACE_NUM_EXPERT	(MAX_NUM_TOUR_RACE_NUM_EXPERT-1)

/* 緑枠のアルファ */
#define COMMON_WAKU_ALPHA				170

/* ツアーの難易度（データ配列のインデックスにも使用しているので変更に注意） */
#define TOUR_DIF_NORMAL		0
#define TOUR_DIF_HARD		1
#define TOUR_DIF_EXPERT		2
#define TOUR_DIF_MAX_NUM	3

/* いるかパークに入った回数の最大数 */
#define MAX_NUM_DOLPHIN_PARK_IN_NUM		9999

/* ヨーロッパ版使用言語 */
#if (SW_KN_LANGUAGE == KN_EU)
#define EL_ENGLISH	0
#define EL_GERMAN	1
#define MAX_NUM_EL	2
#endif

/* ゴースト情報 */
#define MAX_NUM_GHOSTSAVE	2

/*******************************************************
	MACRO
*******************************************************/
/* Align */
#define	ALIGN2(number)	(( number + 1 ) & 0xfffffffe)
#define	ALIGN16(number)	(( number + 15 ) & 0xfffffff0)
#define	ALIGN64(number)	(( number + 63 ) & 0xffffffc0)
/* PAI */
#define PAI		3.14159265f
/*******************************************************
	STRUCT
*******************************************************/
/* パッド */
typedef struct {
	Controller	pad, padOld;
	int			countX, countY;
} sKnPad;

/* 文字列表示 */
typedef struct {
    short	dx;
    char	*str;
} sKnStr;

/* メッセージ表示 */
/* 構造体 */
typedef struct {
    short	dx;
    int		gmesgNum;
} sDispGMesg;

/* 海底の色 */
typedef struct {
    ushort	r;
    ushort	g;
    ushort	b;
} sSeaBottomColor;

/* 最大値,最小値*/
typedef struct {
	int		min,max;
} sKnMinMax;

/* みにマップしぇいぷ */
typedef struct {
	Gfx	*pModel;
	Gfx	*pModelT;
} sDlCMap;

/* ゴースト情報 */
struct knGhostInfo {
	int		fExist;
	int		nCourse;
	int		level;
};

typedef struct knGhostInfo knGhostInfo;

/*******************************************************
	BUTTON
*******************************************************/
/* パッド番号 */
#define KN_PAD_MAX 		3
#define KN_PAD_1P 		0
#define KN_PAD_2P 		1
#define KN_PAD_COMMON 	2	/* 番号は１番最後にすること */


/* ボタン配置 */
/* トリガー */
#define BUTTON_ARG_ANY		(START_BUTTON | A_BUTTON | Z_TRIG)	/* HIT ANY BUTTON */
#define BUTTON_ARG_CANCEL	(B_BUTTON)							/* CANCEL BUTTON */
#define BUTTON_ARG_PAUSE	(START_BUTTON)						/* PAUSE BUTTON */

#define BUTTON_ARG_NAME		(A_BUTTON | Z_TRIG)					/* INPUT NAME BUTTON */
#define BUTTON_ARG_NAME_END	(START_BUTTON)						/* NAME END BUTTON */

#define BUTTON_ARG_HEADPHONE	(U_CBUTTONS)					/* HEADPHONE MODE */

#ifndef ROM_FLAG
#define BUTTON_ARG_UP		(U_JPAD)					/* UP */
#define BUTTON_ARG_DOWN		(D_JPAD)					/* DOWN */
#define BUTTON_ARG_MACHINE	(U_CBUTTONS|D_CBUTTONS|L_CBUTTONS)				/* MACHINE DEFAULT BUTTON */
#else
#define BUTTON_ARG_UP		(U_JPAD)					/* UP */
#define BUTTON_ARG_DOWN		(D_JPAD)					/* DOWN */
#define BUTTON_ARG_MACHINE	(U_CBUTTONS|D_CBUTTONS|L_CBUTTONS|R_CBUTTONS)	/* MACHINE DEFAULT BUTTON */
#endif
#define BUTTON_ARG_LEFT		(L_JPAD)							/* LEFT */
#define BUTTON_ARG_RIGHT	(R_JPAD)							/* RIGHT */
/* ホールド*/
#define BUTTON_ARG_RESET	(START_BUTTON | Z_TRIG | A_BUTTON | B_BUTTON) /* RESET BUTTON */
#define BUTTON_ARG_2PCOLOR	(U_JPAD)			/* 2P COLOR BUTTON */

/* スティックをトリガーとして使う */
#define STICK_TRG_MAX_X		35
#define STICK_TRG_MIN_X		-35
#define STICK_TRG_MAX_X_NAME	50
#define STICK_TRG_MIN_X_NAME	-50
#define STICK_TRG_MAX_X_MACHINE	60
#define STICK_TRG_MIN_X_MACHINE	-60
#define STICK_TRG_MAX_Y		35
#define STICK_TRG_MIN_Y		-35
#define STICK_TRG_COUNT_X	5
#define STICK_TRG_COUNT_Y	5


#endif

#endif	/* _SPEC_ */
