/* ******************************************************************************
	Filename : screen.c
	Contents : ファイル操作関連 for WonderWitch

	History  : Ver 1.00		2000/12/15		K.Kimura

****************************************************************************** */

#include	"main.h"

#define		SCR_DEBUG		FALSE



/* |||■ グローバル変数定義 ■||| */
static unsigned char space[] = {						/* 抜けﾃﾞｰﾀ				*/
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

static	SCRMNG	ScrMng[ SCR_SCREEN_NUM];
extern	char	tbuf[ 32];


/* ******************************************************************************
　関　　数：
　内　　容：
　表　　記：
　引　　数：
　返　　値：
　コメント：
　履　　歴：Ver 1.00	1999/00/00		K.Kimura		初版
****************************************************************************** */
/* ******************************************************************************
　関　　数	：ScrInit
　内　　容	：初期化
　表　　記	：void	ScrInit( void)
　引　　数	：−
　返　　値	：−
　コメント	：−
　履　　歴	：Ver 1.00	2000/12/15		K.Kimura		初版
****************************************************************************** */
void	ScrInit( void)
{
	char		i;


	/* ///  ■管理構造体の初期化■  /// */
	memset( ScrMng, 0, sizeof( ScrMng) * SCR_SCREEN_NUM);
	ScrMng[ 0].data = NULL;
	ScrMng[ 1].data = NULL;

	/* ///  抜けキャラクタの設定（不変） /// */
	font_set_colordata( 0, 1, space); 					/* ｷｬﾗｸﾀ0 = 空白：強制	*/

	/* ///  スクリーンの初期化  /// */
	screen_fill_char( 0, 0, 0, 32, 32, (4 << 9));		/* 抜けのため 4			*/
	screen_fill_char( 1, 0, 0, 32, 32, (4 << 9));		/* 抜けのため 4			*/
	screen_set_scroll( 0, 0, 0);
	screen_set_scroll( 1, 0, 0);

	screen2_set_window( 0, 0, 224, 144); 

	/* /// 基本パレットの登録  /// */
	for (i = 0; i < SYS_SYSPAL_NUM; i++)
		palette_set_color( i, SysPal[ i]);

}


/* ******************************************************************************
　関　　数	：ScrInit
　内　　容	：初期化
　表　　記	：void	ScrInit( void)
　引　　数	：−
　返　　値	：−
　コメント	：インデックスのエラーチェックなんてしないよ。
　			：
　履　　歴	：Ver 1.00	2000/12/15		K.Kimura		初版
****************************************************************************** */
SCRMNG	*ScrGetBGInfo( u_char idx)
{
	return ( &ScrMng[ idx]);
}

/* ******************************************************************************
　関　　数	：ScrDispScreen
　内　　容	：
　表　　記	：
　引　　数	：−
　返　　値	：−
　コメント	：ＢＧの表示。
　			：表示するためのデータアドレスを ScrMng[].data に設定して
　			：おいてください。
　			：
　履　　歴	：Ver 1.00	2000/12/15		K.Kimura		初版
****************************************************************************** */
void	ScrDispScreen( u_char idx)
{
	static	SCRMNG		*p;

	/* ///  ＢＧの表示  /// */
	p = &ScrMng[ idx];
	screen_set_char( idx, p->regX, p->regY, p->w, p->h, p->data);
}

/* ******************************************************************************
　関　　数	：ScrLoadMapData
　内　　容	：
　表　　記	：
　引　　数	：−
　返　　値	：読み込み先ｱﾄﾞﾚｽ
　コメント	：マップデータ読み込み
　			：
　履　　歴	：Ver 1.00	2000/12/15		K.Kimura		初版
****************************************************************************** */
u_short		ScrLoadMapData( u_char idx, u_short pal, u_short ofs, char near *ptr)
{
	static	u_short			i;
	static	u_short near	*tmp;
	static	char far		*p;
	static	u_short			size;


	/* ///  ＭＡＰデータをテンポラリに展開  /// */
	p = FileGetPointer( TFD_DATA, BIN_MAP_FAR);			/* MAP.far ｱﾄﾞﾚｽ取得	*/
	p = p + (( FILEFAT far *)p)[ idx].sectPos;			/* 対象MAPﾃﾞｰﾀｱﾄﾞﾚｽ取得	*/
	size = ExpExpand( p, ptr);							/* ﾃﾞｰﾀ展開				*/

	/* ///  パレットデータ書き換え  /// */
	tmp = ( u_short near *)( ptr + 16);

	for (i = 0; i < (( size - 16) >> 2); i++)			/* data area のみ		*/
	{
		*tmp &= ~0x0e00;								/* ﾊﾟﾚｯﾄ部ｸﾘｱ			*/
		*tmp |= ( pal << 9);							/* ﾊﾟﾚｯﾄ番号上書き		*/
		*tmp += ofs;									/* ｷｬﾗｸﾀ番号加算		*/

		tmp++;											/* ｱﾄﾞﾚｽ加算			*/
	}

	return ( size);
}

/* ******************************************************************************
　関　　数	：ScrScreenFlush
　内　　容	：
　表　　記	：
　引　　数	：−
　返　　値	：−
　コメント	：画面フラッシュ（使いづらいし、ＳＣＲ０限定・・）
　			：
　履　　歴	：Ver 1.00	2001/01/27		K.Kimura		初版
****************************************************************************** */
void	ScrScreenFlush( void *func)
{
	static	SCRMNG		*p;
	u_short		pal;


	p = &ScrMng[ 0];

	if (p->cnt & 0x04) {
/*		pal = SysPal[ GMPAL_HGLASS];
*/		pal = 0x0077;
	} else {
		pal = SysPal[ GMPAL_BG];
	}

	palette_set_color( GMPAL_BG, pal);

	if (p->cnt)
	{
		p->cnt --;
	}
	else
	{
		*(u_short *)func = NULL;
	}

}








