//**************************************************************
//
//						gmap.h
//
//**************************************************************


//++++++++++++++++++++++++++++++
#ifndef	GAME_H_INCLUDED
#define	GAME_H_INCLUDED
//++++++++++++++++++++++++++++++

#define		BGVRAM_CHR	(BG_VRAM+0x4000)

#define		BGWARSWIM	(Wario.ucReact==W_SWIM)	//わりおが水中か？ No:0 Yes:1
#define		BGTBOXGAP	(-8*4)					//ボス部屋、宝箱(BG2)の位置調整値


//---gmap.c---
extern void DMACOPY_Interval_Wait();
//---Kaki_main.c---
extern void BgkakiMain(void);
extern void BgkakiInit(void);
//---atari.c----
extern void PanelPartWork_ReBlock_operate(u8 mode);		//復活壊れブロック	0:復元 1:破壊
extern void PanelPartWork_HitBlock_operate(u16 num);	//あたり後付け		num:ﾊﾟﾈﾙ番号

//---GameGate_Window.c----
extern int	GateWindow_TimeUp(void);

// 追加
extern void GmapInit_Priority_Blend(void);
extern void	BgScrollReady(void);

//++++++++++++++++++++++++++++++
#ifdef	GLOBAL_VALUE_DEFINE		//定義と外部宣言を使い分けて
#define	GLOBAL					//複数のファイルへのincludeを可能にする
//++++++++++++++++++++++++++++++

//++++++++++++++++++++++++++++++
#else
#define	GLOBAL	extern
#endif					//end
//++++++++++++++++++++++++++++++


//-----------------------------------------------------
//	定義
//-----------------------------------------------------

#define	GATE_DOOR_HOSEI_Y	(4*16*1)	//ドアを通る場合の、WINDOW集散位置補正

///// ＢＧ構成 /////
enum	PanelBuildNUM {
	BuNO,				//無し（BG-PUT,あたり等を無視）
	//---PANEL---
	BuPANEL = 0x10,		//パネル
	  //BG0専用
	BuPANELS,			//パネルスゴロク(OBJｺﾏから指定)
	BuPANELXh,			//横(1/2)
	  //BG2専用
	BuPANELB,			//ボス戦用(宝箱対応)

	//---SCR---
	BuSCR	= 0x20,		//ASC
	  //BG0専用
	BuSCRB,				//仮ASC-BOSS(BG0)
	BuSCRFOG,			//霧専用
};

#define	BUILD_SPECIAL	0x0F		//特殊構築


///// ＢＧ０−スクロール追従パターン /////
enum	Bg0AutoScrollType		//(Bg0As.Type)  ｽｸﾛｰﾙﾀｲﾌﾟから再設定を行う
{
	BG0AS_STP,					//無し
	BG0AS_Left_A,				//左へ（1dot/8ﾌﾚｰﾑ）
	BG0AS_Left_B,				//左へ（1dot/4ﾌﾚｰﾑ）
};

///// ＢＧ３−スクロール追従パターン /////
enum	Bg3ScrollType
{
	BG3S_STP,					 		//停止
  	BG3S_Xf, BG3S_Yf, BG3S_ALLf,		//横のみ、縦のみ、全方向	（SP BG1の1/2）
  	BG3S_Xs, BG3S_Ys, BG3S_ALLs,		//横のみ、縦のみ、全方向	（SP BG1と同期、指定無し方向は1/2）
  	BG3S_Xf_La,							//横(1/2)のみ、左(1/8)流れ
};
enum	Bg3AutoScrollType		//(Bg3As.Type)  ｽｸﾛｰﾙﾀｲﾌﾟから再設定を行う
{
	BG3AS_STP,					 		//無し
	BG3AS_Left_A,					 	//左へ（1dot/8ﾌﾚｰﾑ）
};


/// ＧＡＴＥ種類 /////	(ucGateType)
enum GateType {		//GATE-DATA
	GATE_DEND,
	GATE_DOOR,		//扉
	GATE_WARP,		//ワープ
	GATE_TUBE,		//土管
	GATE_BOSS,		//ボス
	GATE_SHOP,		//お店
};

/// 書替えの種類 /////
enum BgIntKakiKindEnum
{
	BGINTKAKI_NO,
	BGINTKAKI_LOOP,			//ループ
	BGINTKAKI_STOP_MIN,		//MINで停止
	BGINTKAKI_MAX_STOP,		//MIN→MAX停止
	BGINTKAKI_RETURN,		//往復
	BGINTKAKI_MIN_STOP,		//MAX→MIN停止
	BGINTKAKI_R_LOOP,		//逆ループ
};

/// 指定ラスター(MapState.RasterKind) /////
enum
{
	RKxx_NASHI,
	RKBG3_WATER1,			//水1ラスタ（Ｙ方向の指定パネル番号必要）
	RKBG3_WATER2,			//水2ラスタ（Ｙ方向の指定パネル番号必要）
	RKBG0_FOG1,				//霧ラスタ
	RKBG3_FIRE1,			//炎1
	RKBG3_FIRE2,			//炎2

	DSBG3_UP_A,				//DOUBLE-SCR(A)		↑AUTO(1/8),↓(non)
	DSBG3_UN_A,				//DOUBLE-SCR(A)		↑(non),↓AUTO(1/8)

	RKBGA_FIRE1,			//炎1
	RKBGA_FIRE2,			//炎2

};


//------------------------------------------------------
//  変数
//------------------------------------------------------
/*_____画面部品_____*/		// 新規
typedef struct
{
	const u8	*pPchr;		//P-CHR
	u16			Psize;		//
	const u16	*PCol;		//

	const u8	*Schr;		//S-CHR
	u16			Ssize;

	const u16	*Panel;		//PANEL-chr
	const u8	*Hit;		//PANEL-hit
	const u16	*Prt;		//PANEL-part

	const u16	*BobjCol;	//BREAK-OBJ-COLOR

}MapPartsDef;
GLOBAL MapPartsDef	MapParts;

//------------------------------------------------------
//------------------------------------------------------
/*_____パネル_____*/
typedef struct
{
	const u16	*pData;		//PANEL-chr
	const u8	*pHit;		//PANEL-hit
	const u16	*pPrt;		//PANEL-part
}PanelDef;
GLOBAL PanelDef Panel;

//------------------------------------------------------
//------------------------------------------------------
/*_____ＢＧＭ_____*/
typedef struct
{
	u8	ucSwSeq;		//書替えSW(0:off,以降SEQに使用)
	u8	ucTiming;		//書替えタイミング（0or1反転）
	u16	usNextNum;		//次の曲番号
	u16	usNowNum;		//今の曲番号
	u8	usPlyNum;		//今のプレイヤー番号

	u16	usCDNum;		//ＣＤ再生  曲番号
	u8	ucCDSeq; 		//ＣＤ再生  seq-num
	u8	usCDPlyNum;		//ＣＤ  プレイヤー番号
}BgmMapDef;
GLOBAL  BgmMapDef BgmMap;


//------------------------------------------------------
//------------------------------------------------------
/*_____ＧＡＴＥ_____*/
typedef struct
{
	u8  ucType;			//
	u8  ucHeya;			//
	u8  ucPX1;			//
	u8  ucPX2;			//
	u8  ucPY1;			//
	u8  ucPY2;			//
	u8  ucNext;			//
	s8  cOfsx;			//
	s8  cOfsy;			//
	u8  ucTekiGrp;		//
	u16 usBgm;			//
}GateDef;

//------------------------------------------------------
//------------------------------------------------------
/*_____SCROLL-STOP-FLAG_____*/
typedef struct
{
	u16	R;		//
	u16	L;		//
	u16	U;		//
	u16	D;		//
}ScStopOffsetDef;
GLOBAL ScStopOffsetDef	ScrStop;

///// ＢＧＸ流す /////
typedef struct {
	u8	Type;
	u8	Cnt;
	u16	Move;
}BgASDef;
GLOBAL BgASDef	Bg3As;
GLOBAL BgASDef	Bg0As;



///// ｸﾞﾗﾃﾞｰｼｮﾝ /////
typedef struct {
	u16	usOrg;		//元色
	u16	usWork;		//作業用（vblkでBG_PLTTへ転送）
	u16	usTarget;	//目標
}GradeDef;
GLOBAL GradeDef	Bgpltt00;


///// スクロール目標値、移動量 /////
typedef struct {
	u16	usH;	//
	u16	usV;	//
	s8	cHm;	//
	s8	cVm;	//
}BgOfsTargetDef;
GLOBAL BgOfsTargetDef	OfsTrg;

//------------------------------------------------------
//------------------------------------------------------
GLOBAL	u32	IntrHblkPrg[0x80];	//割り込みプログラム用バッファ

//------------------------------------------------------
//------------------------------------------------------
GLOBAL	u8	ReBlockSw;		//憶えておく情報	パネル位置、番号
GLOBAL	u8	HitBlockSw;		//憶えておく情報	パネル位置、番号

GLOBAL	s16	sHblkBuf1[228];		//
GLOBAL	s16	sHblkBuf2[228];		//

//-----------------------------------------------------
/// ＢＧ特殊処理種類
//-----------------------------------------------------
enum {
	BLD_NO,			//00:
	BLD_NO1,		//01:
	BLD_NO2,		//02:
	BLD_NO3,		//03:
	BLD_0,			//04: 最手前
	BLD_1,			//05: BG２枚目
	BLD_2,			//06: BG２枚目
	BLD_3,			//07: BG３枚目				//判定に使用

	//---透明度(16)固定		BLD_ALPHA_MAP = 8
	BLD_0ALFAA7,	//08:最手前・透明(16)有り
	BLD_1ALFAA7,	//09:BG２枚目・透明(16)有り
	BLD_2ALFAA7,	//0A:BG２枚目・透明(16)有り・OBJの後ろ
	BLD_3ALFAA7,	//0B:BG３枚目・透明(16)有り
	BLD_0ALFAA10,	//0C:最手前・透明(16)有り
	BLD_1ALFAA10,	//0D:BG２枚目・透明(16)有り
	BLD_2ALFAA10,	//0E:BG２枚目・透明(16)有り・OBJの後ろ
	BLD_3ALFAA10,	//0F:BG３枚目・透明(16)有り
	BLD_0ALFAA13,	//10:最手前・透明(16)有り
	BLD_1ALFAA13,	//11:BG２枚目・透明(16)有り
	BLD_2ALFAA13,	//12:BG２枚目・透明(16)有り・OBJの後ろ
	BLD_3ALFAA13,	//13:BG３枚目・透明(16)有り
	BLD_0ALFAA16,	//14:最手前・透明(16)有り
	BLD_1ALFAA16,	//15:BG２枚目・透明(16)有り
	BLD_2ALFAA16,	//16:BG２枚目・透明(16)有り・OBJの後ろ
	BLD_3ALFAA16,	//17:BG３枚目・透明(16)有り

	//---透明
	BLD_0ALFA1,		//18:最手前・半透明有り		//判定に使用
	BLD_1ALFA1,		//19:BG２枚目・半透明有り
	BLD_2ALFA1,		//1A:BG２枚目・半透明有り・OBJの後ろ
	BLD_3ALFA1,		//1B:BG３枚目・半透明有り
	BLD_0ALFA4,		//1C:最手前・半透明有り
	BLD_1ALFA4,		//1D:BG２枚目・半透明有り
	BLD_2ALFA4,		//1E:BG２枚目・半透明有り・OBJの後ろ
	BLD_3ALFA4,		//1F:BG３枚目・半透明有り
	BLD_0ALFA7,		//10:最手前・半透明有り
	BLD_1ALFA7,		//11:BG２枚目・半透明有り
	BLD_2ALFA7,		//12:BG２枚目・半透明有り・OBJの後ろ
	BLD_3ALFA7,		//13:BG３枚目・半透明有り
	BLD_0ALFA10,	//14:最手前・半透明有り
	BLD_1ALFA10,	//15:BG２枚目・半透明有り
	BLD_2ALFA10,	//16:BG２枚目・半透明有り・OBJの後ろ
	BLD_3ALFA10,	//17:BG３枚目・半透明有り
	BLD_0ALFA12,	//18:最手前・半透明有り
	BLD_1ALFA12,	//19:BG２枚目・半透明有り
	BLD_2ALFA12,	//1A:BG２枚目・半透明有り・OBJの後ろ
	BLD_3ALFA12,	//1B:BG３枚目・半透明有り
	BLD_0ALFA14,	//1C:最手前・半透明有り
	BLD_1ALFA14,	//1D:BG２枚目・半透明有り
	BLD_2ALFA14,	//1E:BG２枚目・半透明有り・OBJの後ろ
	BLD_3ALFA14,	//1F:BG３枚目・半透明有り
	BLD_0ALFA16,	//20:最手前・半透明有り
	BLD_1ALFA16,	//21:BG２枚目・半透明有り
	BLD_2ALFA16,	//22:BG２枚目・半透明有り・OBJの後ろ
	BLD_3ALFA16,	//23:BG３枚目・半透明有り


};



//++++++++++++++++++++++++++++++
#undef	GLOBAL
#endif					//end
//++++++++++++++++++++++++++++++




//**************************************************************
//end
