/*
 ******************************************************************************
 *	File :		m_immig.h
 * 	Programer :	Gentaro Takaki
 *
 *	$Id: m_immig.h,v 1.3 2004/03/02 01:30:26 tong Exp $
 ******************************************************************************
 */

#ifndef	M_IMMIG_H_INCLUDED
#define M_IMMIG_H_INCLUDED

#if	defined(LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)

#ifdef	_LANGUAGE_C_PLUS_PLUS
extern "C" {
#endif

#include "ultra64.h"
#include "m_types.h"
#include "os.h"
#include "lb_rtc.h"
#include "m_private_id.h"

/*
 *	セーブ・ロードモードカテゴリー
 */
enum	save_load_mode_category {
    mImm_SAVE_LOAD_MODE_CATEGORY_START_e,
    
    mImm_SVLD_CT_NOT_e = mImm_SAVE_LOAD_MODE_CATEGORY_START_e,	/** エラー */
    mImm_SVLD_CT_FLASH_e,	/** フラッシュロムにセーブ */
    mImm_SVLD_CT_GB_e,		/** GBパックにセーブ(フラッシュロムにも) */
    mImm_SVLD_CT_CPAK_e,	/** コントローラパックに( から ) */
    
    mImm_SAVE_LOAD_MODE_CATEGORY_END_e
};

/*
 *	セーブ・ロードモード
 */
enum	save_load_mode_kind {
    mImm_SAVE_LOAD_MODE_KIND_START_e,

    mImm_SVLDMD_NOT_e = mImm_SAVE_LOAD_MODE_KIND_START_e,	/** エラー */
    mImm_SVLDMD_PLAYER_e,		/** プレーヤーのデータのみ */
    mImm_SVLDMD_LAND_e,		/** 村のデータも含めて */

    mImm_SAVE_LOAD_MODE_KIND_END_e
};

/*
 *	データの組み合わせテーブル
 */
enum	start_data_combination {
    mImm_START_DATA_COMBINATION_START_e,
    
    mImm_DATA_COMB_0_e = mImm_START_DATA_COMBINATION_START_e,
    mImm_DATA_COMB_1_e,
    mImm_DATA_COMB_2_e,
    mImm_DATA_COMB_3_e,
    mImm_DATA_COMB_4_e,
    mImm_DATA_COMB_5_e,
    mImm_DATA_COMB_6_e,
    
    mImm_START_DATA_COMBINATION_END_e
};

/** GBパックデータの状態 */
enum	gbpak_data_status {
    mImm_GB_DATA_STATUS_START_e,

    mImm_GB_SAME_e = mImm_GB_DATA_STATUS_START_e,	/* 開始時の GBと同じ */
    mImm_GB_OTHER_e,					/* 開始時の GBと違う */
    mImm_NO_GB_e,					/* GBパック無し */
    
    mImm_GB_DATA_STATUS_END_e
};

/*
 *	GBパックの村とカートリッジの村の整合性
 */
enum	gb_rom_comp_status {
    mImm_GB_ROM_COMP_STATUS_START_e,
    
    mImm_GBROM_CMP_SAME_e = mImm_GB_ROM_COMP_STATUS_START_e,	/** カートリッジの村と GBの村が一致 */
    mImm_GBROM_CMP_OTHER_e,	/** ほかの村 */
    mImm_GB_NO_LAND_DATA_e,	/** GBパックに村のデータ無し */
    
    mImm_GB_ROM_COMP_STATUS_END_e
};


/*
 ****************************************************************
 *	最後の登録プレーヤーの名前取得
 *
 *	in	:	なし
 *
 *	out	:	最後の登録プレーヤーの名前取得
 *			PERSON_NAME_NUM分のサイズが必要
 *
 *	返り値	:	なし
 ****************************************************************
 */
extern void mImm_GetLastRegistPlayerName(
    unchar	*last_player_name_p
    );


/*
 ****************************************************************
 *	開始時のデータのロード & 初期化 & セーブモード初期化
 ****************************************************************
 */
extern void mImm_InitGameStart_init( void );

/*
 ******************************************************************************
 *	ゲーム開始時のデータのロード & 初期化
 *
 *	in	:	ロードカテゴリー (save_load_mode_category参照)
 *			ロードモード (save_load_mode_kind参照)
 *			組み合わせパターン(start_data_combination参照)
 *			プレーヤー番号( 0 〜 5 )
 *
 *	out	:	なし
 *
 *	返り値	:	ロード初期化の成功	TRUE
 *			処理中			FALSE
 *			異常終了		-1
 *-----------------------------------------------------------------------------
 *	備考	今まで player_select.cの中で初期化していた処理が
 *		ここに入ります
 *
 *		引数で渡すプレーヤー番号はプレーヤー選択処理を通った場合
 *		そこで選ばれた番号を渡してください. それ以外の場合は
 *		必ず 0を渡してください.
 ******************************************************************************
 */
extern int mImm_InitGameStart(
    int		mode_category,	/** ロードカテゴリー */
    int		mode,		/** ロードモード */
    int		start_comb,	/** 組み合わせパターン */
    int		player_no	/** プレーヤー番号 */
    );

/*
 ****************************************************************
 *	セーブ処理のモード初期化
 ****************************************************************
 */
extern void mImm_SaveMode_init( void );

/*
 ******************************************************************************
 *	セーブ
 *	
 *	in	:	セーブモードカテゴリー(save_load_mode_category)
 *			セーブモード (save_load_mode_kind)
 *			コンティニューフラグ( やめる OFF / 続ける ON )
 *
 *	out	:	なし
 *
 *	返り値	:	正常終了	1
 *			セーブ中	0
 *			異常終了	-1
 ******************************************************************************
 */
extern int mImm_Save_common(
    int		mode_category,
    int		mode,
    int		continue_flag
    );

#define mImm_Save( mc, md )	mImm_Save_common((mc), (md), OFF)















/*
 ******************************************************************************
 *	ここの関数は コントローラパック, Flashromセーブ実験用です
 *	セーブ画面の仕様が決まり次第そちらに移ります.
 ******************************************************************************
 */
extern void mImm_SaveTest( void );



/*
 ------------------------------------------------------------------------------
 *		コントローラパックによる出入国
 ------------------------------------------------------------------------------
 */
/*
 ****************************************************************
 *	ゲーム開始したのがコントローラパックからかチェック
 *
 *	パックでゲーム開始	TRUE
 *	カートリッジで開始	FALSE
 ****************************************************************
 */
extern int mImm_CheckStartDataCategory( void );

#ifdef	_LANGUAGE_C_PLUS_PLUS
}
#endif

#endif	/** defined(LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */
#endif	/** M_IMMIG_H_INCLUDED */
