/*
 ******************************************************************************
 *
 *	プレーヤーの個人情報管理ヘッダファイル
 *	$Id: m_private.h,v 1.1 2003/06/06 00:15:12 tong Exp $
 ******************************************************************************
 */


#ifndef	M_PRIVATE_H_INCLUDED
#define	M_PRIVATE_H_INCLUDED

#if	defined(LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)

#ifdef	_LANGUAGE_C_PLUS_PLUS
extern "C" {
#endif

#include "m_common_data.h"
#include "m_cpak_h.h"
#if	defined(FDEBUG) || defined(U_gen_U)
#include "gfxprint.h"
#endif	/** defined(FDEBUG) || defined(U_gen_U) end */

/*
 * プレーヤーデータの種類
 * 	→ ゲーム開始時の媒体 = コントローラパック or Flashrom( Rom )
 */
enum	player_data_mode_table {
    mPr_PLAYER_DATA_MODE_e,
    mPr_START_DATA_e = mPr_PLAYER_DATA_MODE_e,	/** 初期データから */
    mPr_NEW_PLAYER_e,		/** セーブデータを使い新しいキャラで */
    mPr_FROM_DATA_e,		/** セーブデータを使い登録済のキャラで */
    mPr_PAK_DATA_e,		/** コントローラパックのデータで */
    mPr_START_ERR_e,		/** スタートエラー */
    mPr_PLAYER_DATA_MODE_END_e
};

/*
 *	プレーヤーナンバー( player_no )
 */
#define	mPr_FOREIGNER_PLAYER_NO		(PLAYER_NUM - 1)


/*
 **************************************************
 *	プレーヤーパーソナル IDの表示( デバッグ用 )
 **************************************************
 */
#if	DEBUG
extern void mPr_PrintPersonalID(
    PersonalID_c *pID_p
    );
#endif

/*
 -----------------------
 *	バッファのコピー
 -----------------------
 */
#define	mPr_copy_buf	mem_copy

/*
 -----------------------------
 *	バッファの一致チェック
 -----------------------------
 */
#define	mPr_cmp_buf	mem_cmp

/*
 ***********************
 *	バッファのクリア
 ***********************
 */
#define	mPr_clear_buf	mem_clear

/*
 **********************************
 *	■ プレーヤーネームのクリア
 **********************************
 */
extern void mPr_ClearPlayerName(
    unchar *player_name_p
    );

/*
 **********************************
 *	■ プレーヤーネームのコピー
 **********************************
 */
extern void mPr_CopyPlayerName(
    unchar *dst_player_name,	/** 出力 */
    unchar *src_player_name	/** 元データ */
    );

/*
 ****************************************
 *	■ プレーヤーネームの空きチェック
 ****************************************
 */
extern int mPr_NullCheckPlayerName(
    unchar	*name_p
    );


/*
 ****************************************
 *	■ プレーヤーネームの一致チェック
 ****************************************
 */
extern int mPr_CheckCmpPlayerName(
    unchar	*dst_player_name,
    unchar	*src_player_name
    );

/*
 ****************************************************************
 *	プレーヤー名の取得
 *
 *	取得成功	TRUE
 *	取得失敗	FALSE
 ****************************************************************
 */
extern int mPr_GetPlayerName(
    unchar	*player_name_p,	/** PERSON_NAME_NUM以上の領域が必要 */
    int		player_no
    );

/*
 *************************************
 *	■ パーソナル IDの空きチェック
 *************************************
 */
extern int mPr_NullCheckPersonalID(
    PersonalID_c	*personal_p
    );

/*
 *****************************
 *	■ パーソナル IDクリア
 *****************************
 */
extern void mPr_ClearPersonalID(
    PersonalID_c *personal
    );

/*
 ***************************************
 *	■ パーソナル IDクリア( 数指定 )
 ***************************************
 */
extern void mPr_ClearAnyPersonalID(
    PersonalID_c *personal,
    int num
    );

/*
 *******************************
 *	■ パーソナル IDのコピー
 *******************************
 */
extern void mPr_CopyPersonalID(
    PersonalID_c *dst_personal_p,
    PersonalID_c *src_personal_p
    );

/*
 *************************************
 *	■ パーソナル IDの一致チェック
 *************************************
 */
extern int mPr_CheckCmpPersonalID(
    PersonalID_c *dst_personal_p,
    PersonalID_c *src_personal_p
    );

/*
 ****************************************************************
 *	プレーヤー誕生日のクリア
 ****************************************************************
 */
extern void mPr_ClearPrivateBirthday(
    mPr_bth_c	*birthday_p
    );

/*
 ****************************************************************
 *	外国に置いてきた動物情報のクリア
 ****************************************************************
 */
extern void mPr_ClearAnimalMemory(
    mPr_ranm_c	*memory_p
    );

/*
 ****************************************************************
 *	プレーヤー情報のクリア
 ****************************************************************
 */
extern void mPr_ClearPrivateInfo(
    Private_c *private_p
    );

/*
 ****************************************************************
 *	現在のプレーヤーの服を再セット
 ****************************************************************
 */
extern void mPr_SetNowPrivateCloth( void );

/*
 *******************************************
 *	■ プレーヤー個人情報初期化( 1人分 )
 *******************************************
 */
extern void mPr_InitPrivateInfo(
    Private_c *private_p
    );

/*
 **********************************************************
 *	■ プレーヤー個人情報初期化( デフォルト値設定 )関数
 **********************************************************
 */
extern void mPr_InitAnyPrivates(
    Private_c *private_p,
    int num
    );

/*
 **********************************
 *	■ プレーヤーデータのコピー
 **********************************
 */
extern void mPr_CopyPrivateInfo(
    Private_c *dst_private_p,	/** 出力 */
    Private_c *src_private_p	/** 元になるプレーヤー情報 */
    );

/*
 **************************************
 *	■ プレーヤー情報有無のチェック
 **************************************
 */
extern int mPr_CheckPrivate(
    Private_c *private_p
    );
/*
 **************************************
 *	■ プレーヤー情報一致のチェック
 **************************************
 */
extern int mPr_CheckCmpPrivate(
    Private_c *dst_private_p,
    Private_c *src_private_p
    );

/*
 ****************************************************************
 *	国内でのプレーヤーの検索
 *
 *	発見		インデックス
 *	未発見		-1
 ****************************************************************
 */
extern int mPr_GetPrivateIdx(
    PersonalID_c	*pID_p	/** 検索するプレーヤー個人情報 */
    );

/*
 ***********************************
 *	■ プレーヤー持ち物チェック
 *
 *		発見	インデックス
 *		未発見	-1
 ***********************************
 */
extern int mPr_GetPossessionItemIdx(
    Private_c *private_p,
    mAc_nfs_t itemNo
    );

/*
 ****************************************************************
 *	■ プレーヤー持ち物 状態限定チェック
 *
 *		発見	インデックス
 *		未発見	-1
 ****************************************************************
 */
extern int mPr_GetPossessionItemIdxWithCond(
    Private_c *private_p,
    mAc_nfs_t itemNo,
    unint     cond
    );

/*
 ****************************************************************
 *	■ プレーヤー持ち物 FG_TYPEによるチェック
 *
 *		発見	インデックス
 *		未発見	-1
 *---------------------------------------------------------------
 *	FG_TYPEは m_name_table.hを参照
 ****************************************************************
 */
extern int mPr_GetPossessionItemIdxFGType(
    Private_c	*private_p,
    mAc_nfs_t	fg_type
    );

/*
 ****************************************************************
 *	プレーヤー持ち物 FG_TYPEと状態によるチェック
 *
 *		発見	インデックス
 *		未発見	-1
 *---------------------------------------------------------------
 *	FG_TYPEは m_name_table.hを参照
 ****************************************************************
 */
extern int mPr_GetPossessionItemIdxFGTypeWithCond(
    Private_c	*private_p,
    mAc_nfs_t	fg_type,
    unint	cond
    );

/*
 ****************************************************************
 *	プレーヤーの持ち物チェック ( アイテムカテゴリー種類別 )
 *
 *	発見	インデックス
 *	未発見	-1
 *---------------------------------------------------------------
 *	アイテムカテゴリーは m_name_table.hを参照
 ****************************************************************
 */
extern int mPr_GetPossessionItemIdxItem1Category(
    Private_c	*private_p,
    unchar	item1_category
    );

/*
 ****************************************************************
 *	プレーヤーの持ち物チェック
 *	( アイテムカテゴリー種類別 & アイテム状態 )
 *
 *	発見	インデックス
 *	未発見	-1
 *---------------------------------------------------------------
 *	アイテムカテゴリーは m_name_table.hを参照
 ****************************************************************
 */
extern int mPr_GetPossessionItemIdxItem1CategoryWithCond(
    Private_c	*private_p,
    unchar	item1_category,
    unint	cond
    );
    
/*
 ****************************************************************
 *	プレーヤーの持ち物チェック ( アイテム種類別 )
 *
 *	発見	インデックス
 *	未発見	-1
 *---------------------------------------------------------------
 *	kind_startから kind_endまでの間にあるアイテムのチェック
 *	kind_endは含みません
 ****************************************************************
 */
extern int mPr_GetPossessionItemIdxKind(
    Private_c	*private_p,
    mAc_nfs_t	kind_start,
    mAc_nfs_t	kind_end
    );

/*
 ****************************************************************
 *	プレーヤーの持ち物チェック
 *	( アイテム種類別 & アイテム状態 )
 *
 *	発見	インデックス
 *	未発見	-1
 *---------------------------------------------------------------
 *	kind_startから kind_endまでの間にあるアイテムのチェック
 *	kind_endは含みません
 ****************************************************************
 */
extern int mPr_GetPossessionItemIdxKindWithCond(
    Private_c	*private_p,
    mAc_nfs_t	kind_start,
    mAc_nfs_t	kind_end,
    unint	cond
    );

/*
 **************************************
 *	■ プレーヤー持ち物空きチェック
 *
 *		発見	インデックス
 *		未発見	-1
 **************************************
 */
#define	mPr_GetFreePossessionItem( p )	mPr_GetPossessionItemIdx( p, NULL_NO )
    
/*
 **************************************
 *	■ プレーヤー持ち物の数チェック
 **************************************
 */
extern unint mPr_GetPossessionItemSum(
    Private_c *private_p,
    mAc_nfs_t itemNo
    );

/*
 ****************************************************************
 *	プレーヤー持ち物の数チェック
 *	アイテム状態つき
 ****************************************************************
 */
extern unint mPr_GetPossessionItemSumWithCond(
    Private_c	*private_p,
    mAc_nfs_t	itemNo,
    unint	cond
    );

/*
 ****************************************************************
 *	プレーヤーの持ち物アイテム数取得
 *
 *	FG_TYPEによるチェック
 *	FG_TYPEは m_name_table.hを参照
 ****************************************************************
 */
extern unint mPr_GetPossessionItemSumFGType(
    Private_c	*private_p,
    mAc_nfs_t	fg_type
    );

/*
 ****************************************************************
 *	プレーヤーの持ち物アイテム数取得
 *
 *	FG_TYPEによるチェック
 *	アイテム状態によるチェック
 *	FG_TYPEは m_name_table.hを参照
 ****************************************************************
 */
extern unint mPr_GetPossessionItemSumFGTypeWithCond(
    Private_c	*private_p,
    mAc_nfs_t	fg_type,
    unint	cond
    );

/*
 ****************************************************************
 *	プレーヤーの持ち物アイテム数取得
 *
 *	アイテムカテゴリーによるチェック
 *	アイテムカテゴリーは m_name_table.hを参照
 ****************************************************************
 */
extern unint mPr_GetPossessionItemSumItemCategory(
    Private_c	*private_p,
    unchar	item1_category
    );

/*
 ****************************************************************
 *	プレーヤーの持ち物アイテム数取得
 *
 *	アイテムカテゴリーによるチェック
 *	アイテム状態によるチェック
 *	アイテムカテゴリーは m_name_table.hを参照
 ****************************************************************
 */
extern unint mPr_GetPossessionItemSumItemCategoryWithCond(
    Private_c	*private_p,
    unchar	item1_category,
    unint	cond
    );

/*
 ****************************************************************
 *	プレーヤーの持ち物アイテム数取得
 *
 *	アイテム種類によるチェック
 *	kind_startから kind_endまでの間にあるアイテムのチェック
 *	kind_endは含みません
 ****************************************************************
 */
extern unint mPr_GetPossessionItemSumKind(
    Private_c	*private_p,
    mAc_nfs_t	kind_start,
    mAc_nfs_t	kind_end
    );

/*
 ****************************************************************
 *	プレーヤーの持ち物アイテム数取得
 *
 *	アイテム種類によるチェック
 *	アイテム状態によるチェック
 *	kind_startから kind_endまでの間にあるアイテムのチェック
 *	kind_endは含みません
 ****************************************************************
 */
extern unint mPr_GetPossessionItemSumKindWithCond(
    Private_c	*private_p,
    mAc_nfs_t	kind_start,
    mAc_nfs_t	kind_end,
    unint	cond
    );

/*
 ****************************************************************
 *	プレイヤーにアイテム取った情報をセット
 *
 *	ただし、この関数で有効なものは
 *	家具、壁紙、絨毯、服、傘、便箋、ハニワ、化石
 *	に限る
 *	また、服、傘については家具として扱う
 ****************************************************************
 */
extern void mPr_SetItemCollectBit(mAc_nfs_t itemNo);

/*
 ****************************************************************
 *	ダミープレゼントを本当のプレゼントに変更
 *	（風船アイテム拾ったとき用）
 ****************************************************************
 */
extern mAc_nfs_t mPr_DummyPresentToTruePresent(void);

/*
 ****************************************************************
 *	プレーヤーの持ち物に追加
 *
 *	cond	アイテムの状態
 *
 *		ITEM_CD_NORMAL,		ノーマル
 *		ITEM_CD_PRESENT,	プレゼント
 *		ITEM_CD_QUEST,		クエスト用
 *		ITEM_CD_CHK_ALL		ビットチェック用
 ****************************************************************
 */
extern void mPr_SetPossessionItem(
    Private_c	*private_p,
    unint	idx,
    mAc_nfs_t	itemNo,
    unint	cond
    );

#define	mPr_SetNowPossessionItem(i,n,c)		mPr_SetPossessionItem(ZCommonGet(now_private),i,n,c)

/*
 ****************************************************************
 *	プレーヤーの持ち物の空きに追加
 ****************************************************************
 */
extern int mPr_SetFreePossessionItem(
    Private_c	*private_p,
    mAc_nfs_t	itemNo,
    unint	cond
    );

#define	mPr_SetNowFreePossessionItem(n,c)	mPr_SetFreePossessionItem(ZCommonGet(now_private),n,c)

/*
 ****************************************************************
 *	アルバイト中のヒント回数加算
 ****************************************************************
 */
extern void mPr_AddFirstJobHint(
    Private_c	*private_p 
    );

/*
 ****************************************************************
 *	アルバイトヒント会話 聞いた回数の取得
 ****************************************************************
 */
extern int mPr_GetFirstJobHintTime(
    Private_c	*private_p
    );

/*
 ****************************************************************
 *	アルバイト中の会話 10回以上聞いたかチェック
 *
 *	聞いた		TRUE
 *	聞いてない	FALSE
 ****************************************************************
 */
extern int mPr_CheckFirstJobHint(
    Private_c	*private_p
    );

/*
 ****************************************************************
 *	現在プレー中のプレーヤーの金運パワーを取得
 ****************************************************************
 */
extern short mPr_GetMoneyPower( void );

/*
 ****************************************************************
 *	現在プレー中のプレーヤーの物運パワーを取得
 ****************************************************************
 */
extern short mPr_GetGoodsPower( void );

/*
 ****************************************************************
 *	プレーヤーが博物館アドレスを持っているかチェック
 *
 *	持っている		TRUE
 *	持っていない		FALSE
 ****************************************************************
 */
extern int mPr_CheckMuseumAddress(
    Private_c	*private_p
    );
    
/*
 ****************************************************************
 *	プレーヤーに案内状を送るべきかチェック
 *
 *	送る		TRUE
 *	送らない	FALSE
 ****************************************************************
 */
extern int mPr_CheckMuseumInfoMail(
    Private_c	*private_p
    );

/*
 ********************************************************
 *	■ プレーヤー情報をパックから読み込み Ramにセット
 ********************************************************
 */
extern int mPr_LoadPak_and_SetPrivateInfo(
    unchar		player_no,
    mCPk_pkinfo_c	*pak_info_p
    );

/*
 ****************************************************************
 *	母からの手紙情報クリア
 ****************************************************************
 */
extern void mPr_ClearMotherMailInfo(
    mPr_pmm_c	*mail_p
    );

/*
 ****************************************************************
 *	ゲーム開始時に母からの手紙が送られてくる
 ****************************************************************
 */
extern void mPr_SendMailFromMother( void );

/*
 ****************************************************************
 *	外国に置いてきた動物からの手紙
 ****************************************************************
 */
extern void mPr_SendForeingerAnimalMail(
    Private_c	*private_p
    );

/*
 ------------------------------------------------------------------------------
 *		虫・魚コンプリート会話用
 ------------------------------------------------------------------------------
 */
/*
 ****************************************************************
 *	完成会話情報セット
 *
 *	ゲーム開始時に完成状況をセットする
 ****************************************************************
 */
extern void mPr_StartSetCompleteTalkInfo( void );

/*
 ****************************************************************
 *	魚完成会話経験セット
 ****************************************************************
 */
extern void mPr_SetFishCompleteTalk( void );

/*
 ****************************************************************
 *	魚完成会話経験チェック
 *
 *	会話経験あり	TRUE
 *	会話経験なし	FALSE
 ****************************************************************
 */
extern int mPr_CheckFishCompleteTalk(
    unchar	player_no
    );

/*
 ****************************************************************
 *	虫完成会話経験セット
 ****************************************************************
 */
extern void mPr_SetInsectCompleteTalk( void );

/*
 ****************************************************************
 *	虫完成会話経験チェック
 *
 *	会話経験あり	TRUE
 *	会話経験なし	FALSE
 ****************************************************************
 */
extern int mPr_CheckInsectCompleteTalk(
    unchar	player_no
    );

/*
 ****************************************************************
 *	魚完成会話許可
 ****************************************************************
 */
extern int mPr_GetFishCompTalkPermission( void );

/*
 ****************************************************************
 *	虫完成会話許可
 ****************************************************************
 */
extern int mPr_GetInsectCompTalkPermission( void );


/*
 ------------------------------------------------------------------------------
 *			マップ取得情報
 ------------------------------------------------------------------------------
 */
/*
 ****************************************************************
 *	マップ情報のクリア
 ****************************************************************
 */
extern void mPr_ClearMapInfo(
    mPr_map_c	*map_p,
    int		max
    );

/*
 ****************************************************************
 *	マップ情報空き領域インデックス取得
 *
 *	発見		インデックス
 *	未発見		-1
 ****************************************************************
 */
extern int mPr_GetMapFreeIdx(
    mPr_map_c	*map_p,
    int		max
    );

/*
 ****************************************************************
 *	マップ情報内に現在の国の情報があるかチェック
 *
 *	発見	インデックス
 *	未発見	-1
 ****************************************************************
 */
extern int mPr_GetThisLandMapIdx(
    mPr_map_c	*map_p,
    int		max
    );

/*
 ****************************************************************
 *	マップ情報にこの国の情報を新規登録
 ****************************************************************
 */
extern void mPr_SetNewMap(
    mPr_map_c	*map_p,
    int		max
    );

/*
 ****************************************************************
 *	マップ情報を検索しマップを使用可に
 ****************************************************************
 */
extern void mPr_SetUseMap(
    mPr_map_c	*map_p,
    int		max
    );

/*
 ****************************************************************
 *	現在の国のマップ情報を最新に
 ****************************************************************
 */
extern void mPr_RenewalMapInfo(
    mPr_map_c	*map_p,
    int		max,
    mLd_lnd_c	*land_p
    );

/*
 ------------------------------------------------------------------------------
 *			客待ちデモ用
 ------------------------------------------------------------------------------
 */
/*
 ****************************************************************
 *	プレーヤーのデータをランダムに設定
 ****************************************************************
 */
extern void mPr_RandomSetPlayerData_title_demo( void );


//#if	defined(SHOW_VERSION)
#if	DEBUG
/*
 ******************************************************************************
 *			ショーバージョン用関数
 ******************************************************************************
 */
/*
 ****************************************************************
 *	プレーヤー全員分のショー用データのセット
 ****************************************************************
 */
extern void mPr_SetAllPlayerData_show( void );

/*
 ****************************************************************
 *	プレーヤーのデフォルト値・プレーヤーナンバー
 *	現在のプレーヤーポインタをセットする
 *
 *	注意!!!
 *	この関数はショーバージョンのみ有効です
 *	使用するときは
 *	#ifdef	SHOW_VERSION
 *	でお願いします。
 *	この関数はセーブデータがあるときだけ有効です
 ****************************************************************
 */
extern void mPr_SetNowPrivateData_show(
    int		player_no
    );
#endif



/*
 ------------------------------------------------------------------------------
 *		ファイナルロムチェック
 ------------------------------------------------------------------------------
 */
#if	defined(FDEBUG) || defined(U_gen_U)
/*
 *	地図情報の表示
 */
extern void mPr_PrintMapInfo_debug(
    gfxprint_t	*gfxprint
    );
#endif	/** defined(FDEBUG) || defined(U_gen_U) end */




#ifdef	_LANGUAGE_C_PLUS_PLUS
}
#endif

#endif	/** defined(LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */
#endif	/** M_PRIVATE_H_INCLUDED */
