/* *****************************************************************************
	Title   : game.h
	Comment : 当然、テスタロッサ専用のため、汎用性はありません。
***************************************************************************** */


#define		GM_ASPROBJ_MAX					12			/* 最大12個のｵﾌﾞｼﾞｪｸﾄ			*/
#define		GM_REG_PLAYER_CHR				1			/* 自ｷｬﾗの格納先ｷｬﾗｸﾀ番号		*/

#define		GM_FLOOR_NUM					20			/* ﾌﾛｱ総数						*/
#define		GM_FLOOR_IDX_NUM				6			/* ﾌﾛｱ部屋数					*/
#define		GM_FLOOR_ENEMY_MAX				8			/* ﾌﾛｱ部屋内 敵最大数 : = 4		*/

#define		GM_BLOCK_TYPE_MAX				16			/* 判定用ﾌﾞﾛｯｸ登録最大数		*/
#define		GM_BLOCK_DAMAGE_MAX				8			/* ﾀﾞﾒｰｼﾞ判定用ﾌﾞﾛｯｸ登録数		*/
#define		GM_BLOCK_ATTACK_MAX				64			/* 攻撃  判定用ﾌﾞﾛｯｸ登録数		*/

#define		GM_HIT_POINT_NUM				7			/* HP 最大桁数					*/
#define		GM_CHR_TYPE_MAX					16			/* ｷｬﾗｸﾀ種類数					*/

#define		GM_MUSIC_NUM					6			/* 全 6 曲						*/
#define		GM_SE_NUM						32			/* 全 32 SE						*/
#define		GM_SEL_START					0			/* START						*/
#define		GM_SEL_CONTINUE					1			/* CONTINUE						*/
#define		GM_SEL_MUSIC_MODE				2			/* MUSIC MODE					*/
#define		GM_SEL_EXIT						3			/* EXIT							*/



/* ///  ●ゲーム部関連●  /// */
#define		GM_SCREEN_AREA_SX				0			/* 画面領域 : sx				*/
#define		GM_SCREEN_AREA_SY				0			/* 画面領域 : sy				*/
#define		GM_SCREEN_AREA_EX				208			/* 画面領域 : ex				*/
#define		GM_SCREEN_AREA_EY				144			/* 画面領域 : ey				*/
#define		GM_SCREEN_AREA_EXC				28			/* 画面領域 : ex ｾﾙ数			*/
#define		GM_SCREEN_AREA_EYC				18			/* 画面領域 : ey ｾﾙ数			*/

#define		GM_MOVE_AREA_SX					8			/* 移動可能領域 : sx			*/
#define		GM_MOVE_AREA_SY					8			/* 移動可能領域 : sy			*/
#define		GM_MOVE_AREA_EX					200			/* 移動可能領域 : ex			*/
#define		GM_MOVE_AREA_EY					136			/* 移動可能領域 : ey			*/

#define		GM_WALLCG_WIDTH					20			/* 壁画							*/
#define		GM_WALLCG_HEIGHT				18

#define		GM_DOOR_CLOSE					0			/* 扉：閉						*/
#define		GM_DOOR_OPEN					1			/* 扉：開						*/

#define		GM_ENEMY_OBJMAX					4			/* 敵は最大４体					*/



/* ///  ●プレイヤー特性関連●  /// */
#define		GM_PL_WALK_STEP					0x08		/* ﾌﾟﾚｲﾔｰ基本移動ﾄﾞｯﾄ			*/
#define		GM_PL_WALK_STEP_JB				0x0c		/* ﾌﾟﾚｲﾔｰ DB装備後移動ﾄﾞｯﾄ		*/
#define		GM_PL_WALK_STEP_MASK			0x0f		/* ﾌﾟﾚｲﾔｰ移動量MASK				*/
#define		GM_PL_ISSWORD_TIME				18			/* ﾀﾞﾌﾞﾙｸﾘｯｸ速度 = 18V			*/

/* キャラクター状態フラグ */
#define		GM_PL_ACT_NORMAL				0x0000		/* ﾌﾟﾚｲﾔｰ静止					*/
#define		GM_PL_ACT_WALK					0x0001		/* 		 歩行					*/
#define		GM_PL_ACT_SWORD					0x0004		/* 		 剣						*/
#define		GM_PL_ACT_ATTACK				0x0004		/* 		 攻撃					*/
#define		GM_PL_ACT_APPEAR				0x0008		/* 		 出現					*/
#define		GM_PL_ACT_DISAPPEAR				0x0009		/* 		 隠滅					*/
#define		GM_PL_ACT_NODISP				0x0009		/* 		 消え状態				*/
#define		GM_PL_ACT_SPELL					0x000c		/* 		 呪文					*/
#define		GM_PL_ACT_SNAKE					0x000d		/* 		 蛇						*/
#define		GM_PL_ACT_HOLEIN				0x000e		/* 		 穴です					*/
#define		GM_PL_ACT_ST_MASK				0x000f		/* 状態ﾏｽｸ						*/
/* ------------------------------------------------------------------------------------ */
#define		GM_PL_ACT_SPAUSE				0x0010		/* 		 構え状態				*/
#define		GM_PL_ACT_CANCEL				0x0020		/* 		 ｷｬﾝｾﾙ可能状態			*/
#define		GM_PL_ACT_ST2_MASK				0x00f0		/* 状態ﾏｽｸ						*/
/* ------------------------------------------------------------------------------------ */
#define		GM_PL_ACT_SWING_S				0x0100		/* 剣振り  ｻｲﾄﾞSWING			*/
#define		GM_PL_ACT_SWING_IS				0x0200		/* 		 逆ｻｲﾄﾞSWING			*/
#define		GM_PL_ACT_SWING_VS				0x0400		/* 		 縦    SWING			*/
#define		GM_PL_ACT_SWING_HM				0x0800		/* 		 ﾊﾝﾏｰ  SWING			*/
#define		GM_PL_ACT_SWD_MASK				0x0f00		/* 状態ﾏｽｸ						*/
/* ------------------------------------------------------------------------------------ */
#define		GM_PL_ACT_DAMAGE				0x4000		/* ﾀﾞﾒｰｼﾞ状態					*/
#define		GM_PL_ACT_DEAD					0x8000		/* 死亡状態						*/

#define		GM_PL_ACT_MASK_03				0x0fff		/* 状態ﾏｽｸ ALL					*/
#define		GM_PL_ACT_MASK_ALL				0xffff		/* 状態ﾏｽｸ ALL					*/

/* プレイヤー・アニメ・フラグ */
#define		GM_ANM_FLAG_AT_MASK				0x3f00		/* 攻撃判定ﾌﾗｸﾞﾏｽｸ				*/
#define		GM_ANM_FLAG_DM_MASK				0x0007		/* ﾀﾞﾒｰｼﾞ判定ﾌﾗｸﾞﾏｽｸ			*/

/* プレイヤー PLINFO 関連 */
#define		GM_PLINFO_MHP					12			/* base MAX HP					*/
#define		GM_PLINFO_AP					1			/* base AP						*/
#define		GM_PLINFO_DP					2			/* base DP						*/
#define		GM_SHIELD_POINT					2			/* 盾： base 防御力(for ENEMY)	*/

#define		GM_PIFLAG_HGLASS				0x0001		/* ｱﾜｰｸﾞﾗｽ使用状態				*/
#define		GM_HGLASS_USE_MAX				3			/* ｱﾜｰｸﾞﾗｽ使用可能回数			*/


/* ///  ●ＥＮＥＭＹ思考関連●  /// */
#define		GM_EMYTH_THINK					0x00		/* 思考を選択					*/
#define		GM_EMYTH_WALK					0x10		/* 移動を選択					*/
#define		GM_EMYTH_ATTACK					0x20		/* 攻撃を選択					*/
#define		GM_EMYTH_APPEAR					0x30		/* 魔法使い出現					*/
#define		GM_EMYTH_DISAPP					0x40		/*         消去					*/
#define		GM_EMYTH_DAMAGE					0x50		/* ﾀﾞﾒｰｼﾞ中						*/
#define		GM_EMYTH_SLEEP					0x60		/* 寝てる						*/
#define		GM_EMYTH_ACT_MASK				0xf0		/* 行動ﾏｽｸ						*/

#define		GM_EMYTH_AT00					0x00		/* 通常攻撃						*/
#define		GM_EMYTH_AT01					0x01		/* 攻撃２（横斬り）				*/
#define		GM_EMYTH_ACT_MASK2				0x0f		/* 行動内容ﾏｽｸ					*/


/* ///  ●キャラクタ全般特性関連●  /// */
#define		GM_DAMAGE_TIME					23			/* ﾀﾞﾒｰｼﾞ反転時間 		23V		*/
#define		GM_DEAD_TIME					40			/* 死亡点滅時間 		40V		*/
#define		GM_CANCEL_TIME					30			/* ｷｬﾝｾﾙ受け付け時間 	30V		*/
#define		GM_RIGOR_TIME					90			/* 硬直時間 			90V		*/
#define		GM_MAG_RIGOR_TIME				100			/* 魔法使い消滅時間 	100V	*/
#define		GM_SLM_RIGOR_TIME				120			/* ｽﾗｲﾑ消滅時間 		120V	*/

#define		GM_MAG_APPDIS					5			/* 魔法使い登場 基本距離		*/

#define		GM_FLAG_DARKROOM				0x01		/* 暗闇の部屋					*/


/* ///  ●ＭＡＰ判定フラグ関連●  /// */
#define		GM_MAPFLAG_BLOCK				0x0001		/* 当たり判定在り				*/
#define		GM_MAPFLAG_SAND					0x0002		/* 砂地							*/
#define		GM_MAPFLAG_CRFLOOR				0x0004		/* ひび床						*/
#define		GM_MAPFLAG_HOLE					0x0008		/* 穴							*/
#define		GM_MAPFLAG_DW_STAIRS			0x0018		/* 階段下り						*/
#define		GM_MAPFLAG_UP_STAIRS			0x0020		/* 階段登り						*/
#define		GM_MAPFLAG_WALL_CG				0x0080		/* 壁画							*/


/* ///  ●画面構成座標関連●  /// */
#define		GM_IWIN_SX						208			/* ITEM WINDOW  初期座標		*/
#define		GM_IWIN_EX						0			/* 				表示座標		*/


/* ///  ●データ関連●  /// */
#define		GM_DATA_STAGE_BOUND				64			/* ﾊﾞｳﾝﾀﾞﾘ･ｻｲｽﾞ					*/
#define		GM_DATA_STAGE_HDSIZE			4			/* ﾌﾛｱ･ﾍｯﾀﾞｻｲｽﾞ					*/
#define		GM_DATA_ENEMY_BOUND				10			/* 敵ｷｬﾗ ﾊﾞｳﾝﾀﾞﾘ･ｻｲｽﾞ			*/

#define		GM_DMGINFO_MAX					8			/* ﾀﾞﾒｰｼﾞ情報配列ｻｲｽﾞ			*/


/* ///  ● GameMngフラグ関連●  /// */
#define		GM_MNGFLAG_WHISTLE				0x0001		/* 笛を使用中					*/
#define		GM_MNGFLAG_CHG_FLOOR			0x0002		/* ﾌﾛｱを移動					*/
#define		GM_MNGFLAG_START				0x0004		/* START						*/
#define		GM_MNGFLAG_CONTINUE				0x0008		/* CONTINUE						*/
#define		GM_MNGFLAG_GAMEOVER				0x8000		/* GAME OVER					*/
#define		GM_MNGFLAG_ALLCLEAR				0x4000		/* ALL CLEAR					*/


/* ///  ● フェードタイム関連●  /// */
#define		GM_FIOT_FLOOR					0x06		/* ﾌﾛｱ移動						*/
#define		GM_FIOT_WALLCG					0x08		/* 壁画							*/



/* ///  ●アイテム関連●  /// */

/* item[ 0] */
#define		GM_ITEM_01_NUM					12			/* equipment number				*/

#define		GM_ITEM_SHIELD_S				0x0001		/* */
#define		GM_ITEM_POTION					0x0002		/* */
#define		GM_ITEM_SPECTACLE				0x0004		/* */
#define		GM_ITEM_JETBOOTS				0x0008		/* */
#define		GM_ITEM_SHIELD_L				0x0010		/* */
#define		GM_ITEM_CANDLE					0x0020		/* */
#define		GM_ITEM_SILVER_RING				0x0040		/* */
#define		GM_ITEM_GAUNTLET				0x0080		/* */
#define		GM_ITEM_ARMOR					0x0100		/* */
#define		GM_ITEM_HELMET					0x0200		/* */
#define		GM_ITEM_SOUND_DIC				0x0400		/* */
#define		GM_ITEM_GOLD_RING				0x0800		/* */

/* item[ 1] */
#define		GM_ITEM_02_NUM					8			/* sword, X4-item number		*/

#define		GM_ITEM_SWORD_00				0x0001		/* */
#define		GM_ITEM_SWORD_01				0x0002		/* */
#define		GM_ITEM_SWORD_02				0x0004		/* */
#define		GM_ITEM_SWORD_03				0x0008		/* */
#define		GM_ITEM_HOURGLASS				0x0010		/* */
#define		GM_ITEM_HAMMER					0x0020		/* */
#define		GM_ITEM_WHISTLE					0x0040		/* */
#define		GM_ITEM_WING					0x0080		/* */


/* ///  ●ゲーム初期設定数値関連●  /// */
#define		GM_HIGH_SCORE					500			/* HIGH-SCORE					*/




/* ///  ●列挙型定義●  /// */
enum	__tagCHRTYPE
{
	CHR_PLAYER = 0,			/* ﾌﾟﾚｲﾔｰ		*/
	CHR_KNIGHT1,			/* 剣士			*/
	CHR_KNIGHT2,			/* 戦士			*/
	CHR_KNIGHT3,			/* 獣騎			*/
	CHR_SLIME,				/* ｽﾗｲﾑ			*/
	CHR_WOOZ,				/* ｳｰｽﾞ			*/
	CHR_MAGICIAN,			/* 魔法使い		*/
	CHR_D07,
	CHR_KOMONO,				/* 小物			*/
	CHR_KNIGHT1_L,			/* 剣士：左		*/
	CHR_KNIGHT2_L,			/* 戦士：左		*/
	CHR_KNIGHT3_L,			/* 獣騎：左		*/
	CHR_D12,
	CHR_SNAKE,				/* 蛇			*/
	CHR_DRAGON,				/* ﾄﾞﾗｺﾞﾝ		*/
	CHR_TESTAROSSA,			/* ﾃｽﾀﾛｯｻ		*/
	CHR_ALLNUM
};

enum	__tagGMINDEX
{
	GMI_OPENING = 0,
	GMI_MAIN,
	GMI_SOUNDTEST,
	GMI_NAME,
	GMI_ENDING,
	GMI_RANKING,
	GMI_END
};

enum	__tagGMTRSINDEX
{
	GMI_TRS_SERACH = 0,
	GMI_TRS_GET,
	GMI_TRS_END
};

enum	__tagGMTESTA
{
	GMT_CONTINUE = 0,
	GMT_LOAD,
	GMT_CHANGE_MAP,
	GMT_GAME,
	GMT_STATUS,
	GMT_HINTWALL,
	GMT_GAMEOVER,
	GMT_GAMEEND,
	GMT_END
};

/* ///  優先順位  /// */
enum	__tagGMPRW
{
	GMPRW_SPELL1 = 10,
	GMPRW_PLAYER = 50,
	GMPRW_ENEMY  = 58,
	GMPRW_CURSOR_01 = 100,
	GMPRW_CURSOR_02 = GMPRW_CURSOR_01 + 5,
	GMPRW_KEY	    = 110,
	GMPRW_TRS	    = GMPRW_KEY + 5
};

/* ///  パレット・インデックス  /// */
enum	__tagGMPALETTE
{
	GMPAL_TITLE_01 = 0,
	GMPAL_BG,
	GMPAL_IWIN,
	GMPAL_FONT_W,				/* 裏ﾌｫﾝﾄ	*/
	GMPAL_TITLE_02,
	GMPAL_BOUT,
	GMPAL_WOUT,
	GMPAL_D07,
	GMPAL_FONT,					/* ﾌｫﾝﾄ		*/
	GMPAL_HGLASS,				/* ｱﾜｰｸﾞﾗｽ使用時	*/
	GMPAL_DARKROOM,				/* DARKROOM */
	GMPAL_WALLCG,				/* 壁画	*/
	GMPAL_PLAYER,
	GMPAL_ENEMY_01,				/* 明 		*/
	GMPAL_ENEMY_02,				/* 暗 		*/
	GMPAL_EFFECT
};

/* ///  ＳＥインデックス  /// */
enum	__tagGMSENO
{
	GMSE_DECIDE = 0,			/* 決定音		*/
	GMSE_CANSEL,				/* ｷｬﾝｾﾙ音		*/
	GMSE_CURSOR,				/* ｶｰｿﾙ音		*/
	GMSE_D03,
	GMSE_D04,
	GMSE_D05,
	GMSE_D06,
	GMSE_D07,
	GMSE_SWD_01,				/* 横斬り1				*/
	GMSE_SWD_02,				/* 横斬り2				*/
	GMSE_SWD_03,				/* 縦斬り				*/
	GMSE_SWD_01G,				/* 横斬り1 ｶﾞﾝﾄﾚｯﾄ装備	*/
	GMSE_SWD_02G,				/* 横斬り2 ｶﾞﾝﾄﾚｯﾄ装備	*/
	GMSE_SWD_03G,				/* 縦斬り  ｶﾞﾝﾄﾚｯﾄ装備	*/
	GMSE_DAMAGE,				/* ﾀﾞﾒｰｼﾞ音		*/
	GMSE_DEAD,					/* 死亡音		*/
	GMSE_NODAMAGE,				/* 弾き音		*/
	GMSE_SWDCOLLI,				/* 剣 衝突音	*/
	GMSE_HEAL,					/* HP回復		*/
	GMSE_SPELL01,				/* 呪文			*/
	GMSE_SPELL02,				/* 蛇			*/
	GMSE_TRSGET,				/* 宝箱 GET!!	*/
	GMSE_KEYGET,				/* 鍵   GET!!	*/
	GMSE_TRSAPP,				/* 宝箱出現		*/
	GMSE_DOOR,					/* 扉 OPEN		*/
	GMSE_WHISTLE,				/* 笛の音		*/
	GMSE_POWER,					/* ﾃｽﾀﾛｯｻ溜め		*/
	GMSE_DAMAGE_T01,			/*       ﾀﾞﾒｰｼﾞ01	*/
	GMSE_DAMAGE_T02,			/*       ﾀﾞﾒｰｼﾞ02	*/
	GMSE_DASH,					/*       ﾀﾞｯｼｭ		*/

	GMSE_END
};


/* ///  ●構造体宣言●  /// */

/* 
	各オブジェクト（キャラクタ）の情報
*/
typedef struct __tagGMOBJ								/* ｱﾆﾒ･ｽﾌﾟﾗｲﾄ管理構造体			*/
{
	/* ///  並び 不変で！！（敵データ読み込みの都合） /// */
	u_char	chr;											/* ｷｬﾗｸﾀ･ﾀｲﾌﾟ（0..PLAYER）	*/
	u_char	dmy;

	/* ///  並び可変  /// */
	u_short	act;											/* 行動内容 : ﾌﾗｸﾞ ?		*/
	SPRANM	*aspr;											/* ｱﾆﾒ用構造体へのﾎﾟｲﾝﾀ		*/

	u_char	mStep;											/* 移動量					*/
	u_char	direct;											/* 方向						*/

} GMOBJ;

typedef struct __tagENMINFO								/* ENEMY 情報構造体				*/
{
	u_char	algo;											/* ｱﾙｺﾞﾘｽﾞﾑ			*/
	u_char	sx, sy;											/* 初期配置座標		*/
	char	hp;												/* Hit Point		*/
	u_char	ap;												/* Attack Point		*/
	u_char	mv;												/* Move				*/
	u_char	flag;											/* flag				*/
	u_short	point;											/* Point			*/

	u_char	dcnt;											/* ﾀﾞﾒｰｼﾞ･ｶｳﾝﾀ		*/
	u_char	ccnt;											/* ｷｬﾝｾﾙ ･ｶｳﾝﾀ		*/
	u_char	nscnt;											/* 行動硬化 think	*/
	u_char	nswd;											/* 剣禁止ｶｳﾝﾀ		*/

	u_char	think;											/* 思考部分			*/
	u_char	cancel;											/* ｷｬﾝｾﾙ回数		*/

	u_char	ddir;											/* ﾃｽﾀﾛｯｻ用			*/

} ENMINFO;

typedef struct __tagDMGINFO								/* DAMAGE 用情報構造体			*/
{
	u_char		chr;										/* 攻撃ｷｬﾗ					*/
	u_char		dchr;										/* 受けｷｬﾗ･ｲﾝﾃﾞｯｸｽ			*/
	u_char		dir;										/* 方向						*/
	u_short		acta, actd;									/* 行動内容 : ﾌﾗｸﾞ ?		*/
	u_char		idx;										/* GmEmy ｲﾝﾃﾞｯｸｽ			*/
} DMGINFO;

/* 
	現在表示されている部屋の情報
*/
typedef struct __tagSTAGEMNG							/* BG管理構造体					*/
{
	/* 並び不動！！ */
	u_char	bgm;											/* 演奏 BGM番号				*/
	u_char	ennum;											/* ﾙｰﾑ内敵総数				*/
	u_char	flag;											/* ﾌﾗｸﾞ						*/
	u_char	type;											/* BGﾀｲﾌﾟ					*/

	SCRMNG	*scr;											/* ｽｸﾘｰﾝ構造体へのﾎﾟｲﾝﾀ		*/
} STAGEMNG;

/* 
	プレイヤー用情報構造体
*/
typedef struct __tagPLINFO								/* ﾌﾟﾚｲﾔｰ情報構造体				*/
{
	u_short		item[ 2];									/* itemﾌﾗｸﾞ：32個			*/
	char		selItem[ 2];								/* item選択番号	0-3			*/
	char		useItem[ 4];								/* item2 使用回数			*/
	char		hp, mhp;									/* HP, MHP					*/
	u_char		ap, dp, dp2;								/* AP,DP					*/

	u_char		dmy;

	u_short		score;										/* SCORE					*/
	char		cnt1, cnt2;									/* ｶｳﾝﾄ						*/
	u_char		dcnt;										/* ﾀﾞﾒｰｼﾞ･ｶｳﾝﾀ				*/
	u_char		ccnt;										/* ｷｬﾝｾﾙ ･ｶｳﾝﾀ				*/

	u_char		key;										/* 鍵所持ﾌﾗｸﾞ				*/
	u_char		trs;										/* 宝箱取得ﾌﾗｸﾞ				*/
	u_short		flag;										/* 状態ﾌﾗｸﾞ					*/

} PLINFO;

/* 
	当たり判定タイプ情報構造体
*/
typedef struct __tagGMBLKTYPE							/* 当たり判定ﾀｲﾌﾟ情報構造体		*/
{
	u_char		cidx;										/* ｷｬﾗｸﾀ衝突用				*/
	SYSRECT		rect;										/* 矩形領域					*/
} GMBLKTYPE;

/* 
	魔法使い出現テーブル構造体
*/
typedef struct __tagGMAPPTABLE							/* 魔法使い出現テーブル情報		*/
{
	char	dx, dy;
} GMAPPTABLE;

typedef struct __tagGMPOS								/* 単純な座標保持				*/
{
	u_char	x, y;
} GMPOS;


/* 
	フロア用「鍵」「扉」「宝箱」出現位置 構造体
*/
typedef struct __tagGMKDTPOINT							/* 鍵・扉・宝箱位置情報			*/
{
	u_char	tx, ty, tidx;									/* 宝箱	*/
	u_char	kx, ky, kidx;									/* 鍵	*/
	u_char	dx, dy, didx;									/* 扉	*/
	char	ddir;
} GMKDTPOINT;

typedef struct __tagGMHEAL								/* HEAL POTION用				*/
{
	u_char	thp, hp, cnt, flag;
} GMHEAL;

typedef struct __tagGMTRSFLAG							/* 宝箱情報						*/
{
	u_char		idx, flag;									/* idx, ﾊﾟﾗﾒｰﾀ再設定		*/
	u_short		trs;										/* 宝						*/
} GMTRSFLAG;

/* 
	宝物出現チェック情報 構造体
*/
typedef struct __tagGMTRSINFO							/* 宝箱情報：構造体				*/
{
	u_char	deadNum;										/* 倒した敵の数				*/
	u_short	deadChr[ GM_CHR_TYPE_MAX];						/* 倒した敵の分類			*/
	u_char	lastSwd[ 4];									/* 敵を倒した時の攻撃方法	*/
	u_char	cclNum;											/* ｷｬﾝｾﾙ回数				*/
	u_char	ldEidx;											/* 最後に倒した敵ｲﾝﾃﾞｯｸｽ	*/
	u_char	lsEidx;											/* 最後に剣を交えた敵		*/
	u_char	doChr[ 4];										/* 倒した敵の順番			*/
	u_char	defNum;											/* 盾防御回数				*/
	u_char	defSwdNum;										/* 盾防御回数：剣			*/
	u_char	defSplNum;										/* 盾防御回数：呪文			*/
	u_char	swordNum;										/* 剣振り回数（部屋初期化）	*/
	u_char	swordNumFloor;									/* 剣振り回数（階層初期化）	*/
	u_char	holeNum;										/* 穴に落とした敵の数		*/
	u_char	whistle;										/* 笛吹きﾌﾗｸﾞ				*/

	u_char	st;												/* 状態変数					*/

} GMTRSINFO;


typedef struct __tagGMRANKING
{
	u_short		score;
	u_char		floor;
	u_char		skill;
	u_char		rank;
	u_char		name[ 3];

} GMRANKING;


typedef struct __tagGMTITLE
{
	char	cx, cex;										/* ｶｰｿﾙ X座標				*/
	u_char	sel;											/* ｾﾚｸﾄ項目ｲﾝﾃﾞｯｸｽ			*/
	u_char	sndNum;											/* 演奏ｻｳﾝﾄﾞ番号			*/
	char	select[ 4];										/* ｾﾚｸﾄ項目内容				*/
} GMTITLE;


/* 
	ゲーム通しての全情報
*/
typedef struct __tagGAMEMNG								/* ｹﾞｰﾑ管理構造体				*/
{
	u_char	bgm;											/* 演奏BGM番号				*/
	u_char	type;											/* BGﾀｲﾌﾟ					*/

	u_char	floor, fidx;									/* 現在のﾌﾛｱとｲﾝﾃﾞｯｸｽ		*/
	u_char	hfloor[ 4];										/* ﾌﾛｱ移動履歴				*/
	u_short	hscore;											/* HIGH-SCORE				*/

	u_char	enemyDF[ GM_FLOOR_IDX_NUM];						/* 敵死亡ﾌﾗｸﾞ（1ﾌﾛｱ）		*/
	u_char	enemyF[ GM_FLOOR_NUM * GM_FLOOR_IDX_NUM];		/* 敵死亡ﾌﾗｸﾞ（全ﾌﾛｱ）		*/
	u_char	trsF[(GM_FLOOR_NUM + 7) / 8];					/* 宝箱ﾌﾗｸﾞ					*/
	u_char	secondF[ (GM_FLOOR_NUM + 7) / 8];				/* 宝箱2回目ﾌﾗｸﾞ			*/
	u_char	healF[ GM_FLOOR_NUM];							/* 回復ﾌﾗｸﾞ					*/
	u_char	visitF[ GM_FLOOR_NUM];							/* ﾌﾛｱ訪れﾌﾗｸﾞ				*/
	u_char	openF[ GM_FLOOR_NUM];							/* 扉ｵｰﾌﾟﾝ･ﾌﾗｸﾞ				*/

	char near	*iwin;										/* ITEM WINDOW 配列ﾃﾞｰﾀ		*/

	u_short	flag;											/* ｽﾃｰｼﾞﾚﾍﾞﾙのﾌﾗｸﾞ			*/
	u_char	splIdx;											/* 呪文開始ｲﾝﾃﾞｯｸｽ			*/

	u_char	floor7;											/* ﾌﾛｱ7での剣振り回数		*/
	u_char	floor19;										/* ﾌﾛｱ19でのﾘﾝｸﾞ設置		*/

	u_char	playNum;										/* ﾌﾟﾚｲ回数					*/

} GAMEMNG;


/* ///  ●外部関数宣言●  /// */
void	GmInit( void);
void	GmInitData( void);
void	GmInitData2( u_char	mode);
void	GmMain( void);
void	GmTitle( void);
void	GmMoveTitle( void *);
void	GmMainTestarossa( void);
void	GmSetStageData( u_char floor, u_char idx);
void	GmLoadStage( u_char mode);
void	GmMoveMain( void *);
char	GmMovePlayer( void);
u_char	GmCheckPosition( u_char *tx, u_char *ty, u_char ox, u_char oy, u_char type, u_char flag);
char	GmCheckBlock( u_short idx, u_char w, u_char h);
u_short	GmGetFlagMAP( u_char x, u_char y);
char	GmCheckRange( SYSRECT *blk, SYSRECT *pl);
void	GmChangeBGMain( void *);
u_char	GmCheckSword( u_char ano);
u_char	GmSetSwordMotion( u_char ba, u_short flag);

void	GmLoadItemWindowData( void);
void	GmSetItemWindowBase( u_char scr, u_char x, u_char y, u_char xl, u_char w);
void	GmInitStatus( u_char mode);
void	GmMoveStatus( void *);
void	GmScrollIWIN( char mode);
void	GmDispScore( u_char x, u_char y, u_short sc);
void	GmDispFloor( u_char x, u_char y, u_short floor);
u_char	GmJudgeAtPlayer( void);
u_char	GmCheckDamage( void);
void	GmCheckEffAnm( void);
void	GmSetParamPlayer( void);

u_char	GmCheckCollisionEnemy( u_char *tx, u_char *ty, u_char ox, u_char oy);
u_char	GmCheckCollisionPlayer( u_char idx, u_char *tx, u_char *ty, u_char ox, u_char oy);

void	GmMoveEnemy( void);
void	GmMoveENEMY( u_char i);
void	GmMoveKnight( u_char i);
u_char	GmSetSwordMotionE( u_char idx);
void	GmJudgeAtEnemy( void);
u_char	GmCheckShield( DMGINFO	*p);
void	GmMoveMagician( u_char i);
u_char	GmSetAppPoint( u_char i, u_char *tx, u_char *ty);
void	GmMoveSpell( void);
void	GmMoveSlime( u_char i);
void	GmSetItemWindowData( void);
void	GmDispItemName( void);
void	GmDispHitPoint( u_char hp);
void	GmInitCursor( void);
void	GmDispDebug( void);
void	GmSetDoor( u_char mode, char dir);
void	GmInitKey( void);

char	GmTrsFloor01( u_char mode);
char	GmTrsFloor02( u_char mode);
char	GmTrsFloor03( u_char mode);
char	GmTrsFloor04( u_char mode);
char	GmTrsFloor05( u_char mode);
char	GmTrsFloor06( u_char mode);
char	GmTrsFloor07( u_char mode);
char	GmTrsFloor08( u_char mode);
char	GmTrsFloor09( u_char mode);
char	GmTrsFloor10( u_char mode);
char	GmTrsFloor11( u_char mode);
char	GmTrsFloor12( u_char mode);
char	GmTrsFloor13( u_char mode);
char	GmTrsFloor14( u_char mode);
char	GmTrsFloor15( u_char mode);
char	GmTrsFloor16( u_char mode);
char	GmTrsFloor17( u_char mode);
char	GmTrsFloor18( u_char mode);
char	GmTrsFloor19( u_char mode);
char	GmTrsFloor20( u_char mode);

void	GmInitTreasure( void);
void	GmDispTreasure( void);
void	GmHealPotion( void *);
void	GmDispItemX4( u_char mode);
u_char	GmUseItemX4( void);
void	GmCheckParamPlayer( void);
void	GmSetHole( u_char x, u_char y);
void	GmDeadEnemy( u_char idx, u_short acta);
void	GmChangeFloor( char lret);
void	GmMoveTestarossa( u_char i);
void	GmMoveSpell2( void);
u_char	GmGetSpellAtDir( short dx, short dy);
void	GmCheckRing( void);
void	GmMoveRing( void);
void	GmGetPoint( u_char idx);

void	GmInitHintWall( void);
void	GmMoveHintWall( void *func);
void	GmLoadEnemyCG( void);
void	GmDispHintWall( u_char scr, u_char sx);

char	GmFadeOutPal( u_char pal, u_char step);
char	GmFadeInPal( u_char pal, u_char pnum, u_char step);
void	GmTrsFloorBase( u_char mode);
void	GmChangePlayerCG( void);
void	GmDispTitleSelect( void);

void	GmInitGameOver( void);
void	GmMoveGameOver( void *func);
char	GmFadeOut( u_char step, u_char mode);
char	GmFadeIn( u_char step, u_char mode);

void	GmMoveDragon( u_char i);

void	GmInitGameEND( void);
void	GmMoveGameEND( void *func);
void	GmDispStatus( void);
void	GmInitOPEvent( void);
void	GmPutDorrCG( u_char scr, u_char x, u_char y, u_char dir, u_char mode);


