/*	=================================================================================================
		プリンメーカー	for WonderSwan

					Programed By K.Tadamori		2000/12/23 - 

	-------------------------------------------------------------------------------------------------
		MainTitle.c		<メイン>
			ゲーム全体の流れを制御します。
			グローバル変数もここで宣言します。

	=================================================================================================	*/


/*	-------------------------------------------------------------------------------------------------
 *		構築
	-------------------------------------------------------------------------------------------------	*/
#include <sys/bios.h>
#include <stdio.h>

#include "key.h"
#include "common.h"
#include "ChrData.h"
#include "main.h"
#include "Title.h"
#include "Game.h"
#include "sprite.h"
#include "bg.h"
/*#include "sound.h"			*/


#define SETTING_FILE	"Pudding.dat"

/*	-------------------------------------------------------------------------------------------------
 *		グローバル変数
	-------------------------------------------------------------------------------------------------	*/
MAIN_REG	g_Reg;										/*	ゲーム全体で使うグローバルな変数			*/
void	(*g_GameProc)(void);							/*	ゲームの進行状況を制御します。				*/
char	g_Buf[256];										/*	グローバル文字列用汎用変数					*/

/*	-------------------------------------------------------------------------------------------------
 *		ローカル構造体宣言
	-------------------------------------------------------------------------------------------------	*/

/*	-------------------------------------------------------------------------------------------------
 *		ローカル変数
	-------------------------------------------------------------------------------------------------	*/

/*	-------------------------------------------------------------------------------------------------
 *		ローカル関数
	-------------------------------------------------------------------------------------------------	*/
void	main_Init();
void	main_Term();
void saveSetting();
void loadSetting();

/*	-------------------------------------------------------------------------------------------------
 *		メイン
	-------------------------------------------------------------------------------------------------	*/
void main()
{
	/*	初期化	-----------------	*/
	key_Init();
	sprite_Init();
	bg_Init();
	Title_Init();
	main_Init();

	/*	メインループ	---------	*/
	while( g_Reg.iGameLoop ){
		key_Sense();
		g_GameProc();
		sprite_Draw();
		sys_wait(1);
	}

	/*	終了処理	-------------	*/
	main_Term();
	bg_Term();
	sprite_Term();
}

/*	-------------------------------------------------------------------------------------------------
 *		[概要]
 *			ゲーム全体の初期化を行います
 *	-------------------------------------------------------------------------------------------------	*/
void	main_Init()
{
	int i;

	/*	初期設定			*/
    srand(sys_get_tick_count() & 0x7fff);
	g_Reg.iPickUpLine = -1;

	/*	ゲームの設定		*/
	g_Reg.iGameLoop = TRUE;								/*	ゲームループ設定							*/
	Title_Start();										/*	タイトルから開始する						*/

	/*	ハイスコアー等の復旧	*/
	loadSetting();

	/*	パレットの設定		*/
	lcd_set_color(uiLCDColorL, uiLCDColorH);			/* パレット設定 */
	for( i = 0; i < PALLET_NUMBER; i++ ){
		palette_set_color(i, uiPallet[i]);
	}

	/*	スプライトの設定	*/
	sprite_SetCharacter( BG_TEXT_BASE, 128, ucChrFont );
	sprite_SetImagePatternTable( pImageTbl );			/*	イメージテーブルの設定						*/
}

/*	-------------------------------------------------------------------------------------------------
 *		[概要]
 *
 *		[IN]
 *
 *		[OUT]
 *
 *		[RETURN]
 *
	-------------------------------------------------------------------------------------------------	*/
void	main_Term()
{
	/*	ハイスコアー等を保存	*/
	saveSetting();
}

/*	-------------------------------------------------------------------------------------------------
 *
	-------------------------------------------------------------------------------------------------	*/
void loadSetting()
{
	int i;
	FILE far * hFile;

	hFile = fopen( SETTING_FILE, "r" );
	if( hFile ){
		fread( g_Reg.iHiScore, sizeof( int ), RANKER_NUMBER, hFile );
		fread( g_Reg.ucRankerName[0], sizeof(char), RANKER_NUMBER*3, hFile );
		fclose( hFile );
	} else {
		for( i = 0; i < RANKER_NUMBER; i++ ){
			g_Reg.iHiScore[i] = 0;
			g_Reg.ucRankerName[i][0] = 'H';
			g_Reg.ucRankerName[i][1] = 'A';
			g_Reg.ucRankerName[i][2] = 'M';
		}
	}
}

/*	-------------------------------------------------------------------------------------------------
 *
	-------------------------------------------------------------------------------------------------	*/
void saveSetting()
{
	FILE far * hFile;

	remove( SETTING_FILE );
	hFile = fopen( SETTING_FILE, "w" );
	if( hFile ){
		fwrite( g_Reg.iHiScore, sizeof( int ), RANKER_NUMBER, hFile );
		fwrite( g_Reg.ucRankerName[0], sizeof(char), RANKER_NUMBER*3, hFile );
		fclose( hFile );
	}
}

