/*
 *******************************************************************************
 *
 *	プレイヤーに関する常駐ライブラリーのヘッダー
 *	$Id: m_player_lib.h,v 1.2 2004/02/21 02:12:16 tong Exp $
 *
 *******************************************************************************
 */

#ifndef INCLUDE_M_PLAYER_LIB_H
#define INCLUDE_M_PLAYER_LIB_H

#ifdef _LANGUAGE_C_PLUS_PLUS
extern "C" {
#endif


#include "m_common_data.h"

    
/*-----------------------------------------------------------------------
 *
 *	プレイヤーの布に関するマクロ
 *
 *----------------------------------------------------------------------*/
#define M_PLAYER_LIB_CLOTH_TEX_SIZE	((32*32)/2)	/* テクスチャ領域１個の大きさ */
#define M_PLAYER_LIB_CLOTH_PALLET_SIZE	(16*2)		/* パレット領域１個の大きさ */

/* ここの値が変わる場合は以下のデータをコンパイルし直さないといけない	*/
/* $FORESY_ROOT/data/shape/BOY						*/
/* $FORESY_ROOT/data/shape/GIRL						*/
#define M_PLAYER_LIB_EYE_TEX_SIZE	((32*16)/2)	/* 目のテクスチャーパターン１個の大きさ */
#define M_PLAYER_LIB_MOUTH_TEX_SIZE	((32*16)/2)	/* 口のテクスチャーパターン１個の大きさ */
#define M_PLAYER_LIB_FACE_PALLET_SIZE	(16*2)		/* 顔のパレット領域１個の大きさ */


/*-----------------------------------------------------------------------
 *
 *	アニメーションデータのＲＯＭ転送のためのライブラリ
 *		(プレイヤー用)
 *
 *----------------------------------------------------------------------*/
/* インデックスで示されたアニメーションのサイズを返す */
extern u32 mPlib_Get_Size_Animation(int index);
/* 全アニメーションの中で最大サイズを返す */
extern u32 mPlib_Get_MaxSize_Animation(void);
#if 0
/* インデックスで示されたアニメーションデータの始まりをセグメント先頭からのオフセット値で返す
    (GAMEPLAY_OBJECT_EXCHANGE_SEGMENT番のセグメントテーブル値を変更するのでので注意) */
//extern u32 mPlib_Get_Offset_Animation(int index);
#else
/* インデックスで示されたアニメーションデータの始まりをセグメント先頭からのオフセット値で返す */
//extern u32 mPlib_Get_Offset_Animation(int index);
#endif

/* インデックスで示されたアニメーションデータを利用する際のセグメントテーブル値を返す */
extern MemPtr mPlib_Get_SegmentAddress_Animation(int index, MemPtr ram);


/*-----------------------------------------------------------------------
 *
 *	プレイヤー用アイテムデータのＲＯＭ転送のためのライブラリ
 *		
 *
 *----------------------------------------------------------------------*/
/* インデックスで示されたプレイヤー専用アイテムデータのポインターを返す */
extern void *mPlib_Get_Item_DataPointer(int index);
/* インデックスで示されたプレイヤー専用アイテムデータのポインターのタイプを返す */
extern char mPlib_Get_Item_DataPointerType(int index);
/* インデックスで示されたプレイヤー専用アイテムデータのサイズを返す */
extern u32 mPlib_Get_Size_Item(int index);
/* インデックスで示されたプレイヤー専用アイテムデータを利用する際のセグメントテーブル値を返す */
extern MemPtr mPlib_Get_SegmentAddress_Item(int index, MemPtr ram);
/* プレイヤーの使用する顔データのロムアドレスをゲット */
extern u32 mPlib_Get_UseFaceRom_p(void);

/*-----------------------------------------------------------------------
 *
 *	オブジェクト常駐入れ替えバンクデータ読み込み
 *		(プレイヤー用)
 *
 *----------------------------------------------------------------------*/
/* プレイヤーモデルデータ */
extern void mPlib_Object_Exchange_keep_new_PlayerMdl(GAME_PLAY *game_play_p);
/* プレイヤーアニメデータ */
extern void mPlib_Object_Exchange_keep_new_PlayerAnm(GAME_PLAY *game_play_p);
/* プレイヤーテクスチャデータ */
extern void mPlib_Object_Exchange_keep_new_PlayerTex(GAME_PLAY *game_play_p, int bank_ID_Index, int add);
/* プレイヤーパレットデータ */
extern void mPlib_Object_Exchange_keep_new_PlayerPallet(GAME_PLAY *game_play_p, int bank_ID_Index, int add);
/* プレイヤーアイテムデータ */
extern void mPlib_Object_Exchange_keep_new_PlayerItem(GAME_PLAY *game_play_p);
/* プレイヤー顔データ */
extern void mPlib_Object_Exchange_keep_new_PlayerFace(GAME_PLAY *game_play_p);

/*-----------------------------------------------------------------------
 *
 *	"GAME_PLAY"構造体からプレイヤーの"ACTOR *"を得る
 *
 *----------------------------------------------------------------------*/
/* プレイヤーがまだ発生していなくても"assert"でハングアップしない
   (プレイヤー発生チェックとしても使う) */
extern ACTOR *get_player_actor_withoutCheck(GAME_PLAY *game_play_p);

/* プレイヤーがまだ発生していないとき"assert"でハングアップ
   (通常はこちらを使ってください)*/
#if DEBUG    
extern ACTOR *get_player_actor(GAME_PLAY *game_play_p);
#else
#define get_player_actor(game_play_p)	get_player_actor_withoutCheck(game_play_p)
#endif    

/* "m_player.o"がリンクされていないとき"assert"でハングアップ	*/
/* 	("m_player.o"内関数使用)				*/
#if DEBUG    
extern ACTOR *get_player_actor_forFunction(GAME_PLAY *game_play_p);
#else
#define get_player_actor_forFunction(game_play_p)	\
	get_player_actor_withoutCheck(game_play_p)
#endif    
		    

/*-----------------------------------------------------------------------
 *
 *	"GAME"構造体からプレイヤーの"ACTOR *"を得る
 *
 *----------------------------------------------------------------------*/
/* プレイヤーがまだ発生していなくても"assert"でハングアップしない
   (プレイヤー発生チェックとしても使う) */
#define get_player_actor_withoutCheck_fromGAME(game_p) \
		get_player_actor_withoutCheck((GAME_PLAY *)(game_p))

/* プレイヤーがまだ発生していないとき"assert"でハングアップ
   (通常はこちらを使ってください)*/
#define get_player_actor_fromGAME(game_p) \
		get_player_actor((GAME_PLAY *)(game_p))

#define get_player_actor_forFunction_fromGAME(game_p) \
		get_player_actor_forFunction((GAME_PLAY *)(game_p))

/*-----------------------------------------------------------------------
 *
 *	プレイヤーのメイン処理の変更要求状態を得る
 *
 *----------------------------------------------------------------------*/
extern int mPlib_get_player_actor_request_main_index(GAME *game_p);

#define mPlib_check_player_actor_request_main_index(game_p, index) \
		(mPlib_get_player_actor_request_main_index((game_p)) == (index))

#if 0
/* プレイヤーのメイン処理の変更要求状態が"渡る(全般)"か？ */		    
#define mPlib_check_player_actor_request_main_index_AllWade() \
		    (mPlib_check_player_actor_request_main_index((gamePT), M_PLAYER_MAIN_WADE) || \
		     mPlib_check_player_actor_request_main_index((gamePT), M_PLAYER_MAIN_DEMO_WADE) || \
		     mPlib_check_player_actor_request_main_index((gamePT), M_PLAYER_MAIN_WADE_SNOWBALL))
#endif
		    
/*-----------------------------------------------------------------------
 *
 *	プレイヤーのメイン処理の状態を得る
 *
 *----------------------------------------------------------------------*/
extern int mPlib_get_player_actor_main_index(GAME *game_p);

#define mPlib_check_player_actor_main_index(game_p, index) \
		(mPlib_get_player_actor_main_index((game_p)) == (index))

/*-----------------------------------------------------------------------
 *
 *	プレイヤーのメイン処理の状態を調べる
 *		(増やしたい人は小松まで)
 *
 *----------------------------------------------------------------------*/
#if 0		    
/* プレイヤーのメイン処理の状態が"棒立ち"か？ */
#define mPlib_check_player_actor_main_index_Wait(game_p) \
		(mPlib_check_player_actor_main_index((game_p), M_PLAYER_MAIN_WAIT))
/* プレイヤーのメイン処理の状態が"歩き"か？ */
#define mPlib_check_player_actor_main_index_Walk(game_p) \
		(mPlib_check_player_actor_main_index((game_p), M_PLAYER_MAIN_WALK))
/* プレイヤーのメイン処理の状態が"落下"か？ */
#define mPlib_check_player_actor_main_index_Fall(game_p) \
		(mPlib_check_player_actor_main_index((game_p), M_PLAYER_MAIN_FALL))
/* プレイヤーのメイン処理の状態が"渡る"か？ */		    
#define mPlib_check_player_actor_main_index_Wade(game_p) \
		(mPlib_check_player_actor_main_index((game_p), M_PLAYER_MAIN_WADE))
/* プレイヤーのメイン処理の状態が"家具押し"か？ */		    
#define mPlib_check_player_actor_main_index_Push(game_p) \
		(mPlib_check_player_actor_main_index((game_p), M_PLAYER_MAIN_PUSH))
/* プレイヤーのメイン処理の状態が"家具引き"か？ */		    
#define mPlib_check_player_actor_main_index_Pull(game_p) \
		(mPlib_check_player_actor_main_index((game_p), M_PLAYER_MAIN_PULL))
/* プレイヤーのメイン処理の状態が"つかむ"か？ */		    
#define mPlib_check_player_actor_main_index_Hold(game_p) \
		(mPlib_check_player_actor_main_index((game_p), M_PLAYER_MAIN_HOLD))
#if 0
/* プレイヤーのメイン処理の状態が"会話待ち"か？ */		    
#define mPlib_check_player_actor_main_index_Talk_wait(game_p) \
		(mPlib_check_player_actor_main_index((game_p), M_PLAYER_MAIN_TALK_WAIT))
#endif
/* プレイヤーのメイン処理の状態が"家具開く"か？ */		    
#define mPlib_check_player_actor_main_index_Open_furniture(game_p) \
		(mPlib_check_player_actor_main_index((game_p), M_PLAYER_MAIN_OPEN_FURNITURE))
/* プレイヤーのメイン処理の状態が"家具閉じる"か？ */		    
#define mPlib_check_player_actor_main_index_Close_furniture(game_p) \
		(mPlib_check_player_actor_main_index((game_p), M_PLAYER_MAIN_CLOSE_FURNITURE))
#endif
		    
/*
 ************************************************************************************
 *	プレイヤーのメイン処理の状態チェック
 ************************************************************************************
 */
/* プレイヤーのメイン処理の状態が"家具を運んでいる"か？ */
extern int mPlib_check_player_actor_main_index_Furniture_Move(GAME *game_p);
/* プレイヤーのメイン処理の状態が"アイテム譲渡一連の動作中"か？ */
extern int mPlib_check_player_actor_main_index_GiveMove(GAME *game_p);
/* プレイヤーのメイン処理の状態が"アイテム受取り一連の動作中"か？ */
extern int mPlib_check_player_actor_main_index_RecieveMove(GAME *game_p);
/* プレイヤーのメイン処理の状態が"おとし穴に落ちる一連の動作中"か？ */
extern int mPlib_check_player_actor_main_index_Pitfall(GAME *game_p);

/* プレイヤーのメイン処理の状態が"家から出てくる一連の動作中"か？ */
/* 単にプレーヤーがドアを出たか見るだけ */		    
extern int mPlib_check_player_actor_main_index_OutDoorMove(GAME *game_p);
/* ドアを出た直後にプレーヤーに何かをさせたい場合(アイテムを持たせたい) */		    
extern int mPlib_check_player_actor_main_index_OutDoorMove2(GAME *game_p);
/* プレイヤーのメイン処理が"渡る(全般)"か？ */
extern int mPlib_check_player_actor_main_index_AllWade(GAME *game_p);

    
/*-----------------------------------------------------------------------
 *
 *	プレイヤーのメイン処理の変更を要求
 *		(増やしたい人は小松まで)
 *
 *----------------------------------------------------------------------*/
/* プレイヤーのメイン処理の状態を"侵入"に変更要求 */		    
extern int mPlib_request_main_invade_type1(GAME *game_p);
		    
/* プレイヤーのメイン処理の状態を"受け付けない"に変更要求 */		    
extern int mPlib_request_main_refuse_type1(GAME *game_p);

/* プレイヤーのメイン処理の状態を"棒立ち"に変更要求 */		    
//extern int mPlib_request_main_wait_type1(GAME *game_p);
extern int mPlib_request_main_wait_type3(GAME *game_p);
	
/* プレイヤーのメイン処理の状態を"棒立ち(会話解除)"に変更要求 */		    
extern int mPlib_request_main_talk_end_type1(GAME *game_p,
					     int return_demo_wait);

///* プレイヤーのメイン処理の状態を"置く"に変更要求 */		    
//extern int mPlib_request_main_put_type1(GAME *game_p);

/* プレイヤーのメイン処理の状態を"会話"に変更要求 */		    
extern int mPlib_request_main_talk_type1(GAME *game_p,
					 ACTOR *talk_actor_p,		/* 会話要求アクターのポインター */
					 int turn,			/* 会話の際プレイヤーを振り向かせるか */
					 int change_hand_in_umbrella);	/* 傘をしまうかフラグを変更 */

/* プレイヤーのメイン処理の状態を"家具つかみ"に変更要求 */
extern int mPlib_request_main_hold_type1(GAME *game_p,
					 int furniture_no,		/* 家具の番号 */
					 int player_direction,		/* プレーヤーを向かせる方向 */
					 const xyz_t *player_pos_p);	/* プレーヤーの理想位置	 */

/* プレイヤーのメイン処理の状態を"会話"から"アイテム受取り待ち"に変更要求 */		    
extern int mPlib_request_main_recieve_wait_type1(GAME *game_p, mAc_nfs_t itemNo, int on_counter);

/* プレイヤーのメイン処理の状態を"会話"から"アイテム譲渡"に変更要求 */		    
extern int mPlib_request_main_give_type1(GAME *game_p,
					 mAc_nfs_t itemNo,		/* アイテムの種類 */
					 int get_after_mode,		/* アイテムの始末の仕方 */
					 int present_flg,		/* アイテムがプレゼント用品かフラグ */
					 int on_counter);		/* カウンターの上でのやり取りか */

#if 0
/* プレイヤーのメイン処理の状態を"会話以外"から"アイテム受取り待ち"に変更要求 */		    
extern int mPlib_request_main_recieve_wait_type2(GAME *game_p);
#endif

/* プレイヤーのメイン処理の状態を"腰を降ろす"に変更要求 */
extern int mPlib_request_main_sitdown_type1(GAME *game_p,
					    int player_direction,	/* プレーヤーを向かせる方向 */
					    const xyz_t *player_pos_p,	/* プレーヤーの理想位置データへのポインター(Ｙ座標は使用せず) */
					    int furniture_id);		/* 家具のＩＤ */
		    
/* メイン処理を"家具閉じる"へ変更要求 */
extern int mPlib_request_main_close_furniture_type1(GAME *game_p);

/* メイン処理を"ベッドに寝る"へ変更要求 */
extern int mPlib_request_main_lie_bed_type1(GAME *game_p,
					    int player_direction,	/* プレーヤーを向かせる方向("m_field_info.h"の"enum move_table"を参照) */
					    const xyz_t *player_pos_p,	/* プレーヤーの理想位置(Ｙ座標は使用しない) */
					    int direction_pillow,	/* 頭が上下左右どちらを向いて欲しいか
									   ("m_field_info.h"の"enum move_table"を参照) */
					    int furniture_id);		/* 家具のＩＤ */

/* プレイヤーのメイン処理の状態を"表示もしないし受け付けない"に変更要求 */		    
extern int mPlib_request_main_hide_type1(GAME *game_p);

/* プレイヤーのメイン処理の状態を"ドア開け"に変更要求 */
extern int mPlib_request_main_door_type1(GAME *game_p,
					 const xyz_t *player_pos_p,	/* プレーヤーの理想位置(Ｙ座標は使用しない) */
					 short player_angleY,	/* プレーヤーを向かせる角度 */
					 int door_type,		/* 開けるドアのタイプ */
					 void *label);		/* 呼び出し側が自分を識別するラベル（通常個別領域のポインターを入れる） */

/* プレイヤーのメイン処理の状態を"ドア開け(デモから)"に変更要求 */
extern int mPlib_request_main_door_type2(GAME *game_p,
					 const xyz_t *player_pos_p,	/* プレーヤーの理想位置(Ｙ座標は使用しない) */
					 short player_angleY,	/* プレーヤーを向かせる角度 */
					 int door_type,		/* 開けるドアのタイプ */
					 void *label);		/* 呼び出し側が自分を識別するラベル（通常個別領域のポインターを入れる） */


/* プレイヤーのメイン処理の状態を"ドアから出る"に変更要求 */
extern int mPlib_request_main_outdoor_type1(GAME *game_p,
					    int start_demo,	/* 開始デモのドア開けか */
					    int door_type);	/* 開けるドアのタイプ */

/* プレイヤーのメイン処理を"会話"から""車を洗う"へ変更要求 */
extern int mPlib_request_main_wash_car_type1(GAME *game_p,
					     const xyz_t	*car_pos_p,		/* 車の位置 */
					     const xyz_t	*return_pos_p,		/* 車洗い後に戻る位置 */
					     short		return_angleY,		/* 車洗い後に戻るＹ軸角度 */
					     ACTOR *control_actor_p);			/* 車洗いを制御しているアクターへのポインター */

/* プレイヤーのメイン処理を"八角台を回す"へ変更要求 */
extern int mPlib_request_main_rotate_octagon_type1(GAME *game_p,
						   const xyz_t *idle_pos_p,		/* 理想位置 */
						   short idle_angleY);			/* 理想Ｙ軸角度 */

/* プレイヤーのメイン処理を"賽銭を投げる"へ変更要求 */
extern int mPlib_request_main_throw_money_type1(GAME *game_p,
						const xyz_t *idle_pos_p,	/* 理想位置 */
						short idle_angleY);		/* 理想Ｙ軸角度 */

/* プレイヤーのメイン処理を"お参り"へ変更要求 */
extern int mPlib_request_main_pray_type1(GAME *game_p,
					 const xyz_t *idle_pos_p,	/* 理想位置 */
					 short idle_angleY);		/* 理想Ｙ軸角度 */

/* プレイヤーのメイン処理を"手紙を取るためにジャンプ"へ変更要求 */
extern int mPlib_request_main_mail_jump_type1(GAME *game_p,
					      const xyz_t *idle_pos_p,		/* 理想位置 */
					      short idle_angleY);		/* 理想Ｙ軸角度 */

/* プレイヤーのメイン処理を"蜂に刺されている"へ変更要求 */
extern int mPlib_request_main_stung_bee_type1(GAME *game_p);

/* プレイヤーのメイン処理を"ショックを受ける"へ変更要求 */
extern int mPlib_request_main_shock_type1(GAME *game_p,
					  float start_time,		/* ビックリし始める時間 */
					  short goal_angleY,		/* 目的方向 */
					  int from_swing_axe);		/* "斧を振る"から来たか */

/* メイン処理を"服を着替える"へ変更要求(ＮＰＣから) */
extern int mPlib_request_main_change_cloth_forNPC_type1(GAME *game_p, mAc_nfs_t cloth_name, int test_wear);

/* メイン処理を"雪玉押し"へ変更要求 */
extern int mPlib_request_main_push_snowball_type1(GAME *game_p,
						  void *label);		/* 呼び出し側が自分を識別するラベル（通常個別領域のポインターを入れる） */

/* プレイヤーのメイン処理の状態を"雪玉押し"から解除要求 */		    
extern int mPlib_request_main_push_snowball_end_type1(GAME *game_p);

/* プレイヤーのメイン処理を"棒立ち(デモ用)"へ変更要求 */
extern int mPlib_request_main_demo_wait_type1(GAME *game_p,
					      int change_hand_in_umbrella,	/* 傘をしまうかフラグを変更 */
					      void *label			/* "棒立ち(デモ用)"状態にした物のラベル。NULLならチェックしない */
    );
#if 0
/* プレイヤーのメイン処理を"棒立ち(デモ用)"へ変更要求(デモ中以外から呼ぶ) */
extern int mPlib_request_main_demo_wait_type2(GAME *game_p,
					      int change_hand_in_umbrella,	/* 傘をしまうかフラグを変更 */
					      void *label			/* "棒立ち(デモ用)"状態にした物のラベル。NULLならチェックしない */
    );
#endif

/* プレイヤーのメイン処理を"歩き(デモ用)"へ変更要求 */
extern int mPlib_request_main_demo_walk_type1(GAME *game_p,
					      float goal_posX,			/* 目的位置Ｘ */
					      float goal_posZ,			/* 目的位置Ｚ */
					      float speedF,			/* 移動速度 */
					      int change_wait);			/* 移動終了の後に"棒立ち（デモ用）"になるか */

/* プレイヤーのメイン処理を"汽車に乗る(デモ用)"へ変更要求 */
extern int mPlib_request_main_demo_geton_train_type1(GAME *game_p,
						     const xyz_t *idle_pos_p);		/* プレーヤーの理想位置(ＸＹＺ座標全て入れてください) */

/* プレイヤーのメイン処理を"汽車に降りる(デモ用)"へ変更要求 */
extern int mPlib_request_main_demo_getoff_train_type1(GAME *game_p);

/* プレイヤーのメイン処理を"汽車で立っている(デモ用)"へ変更要求 */
extern int mPlib_request_main_demo_standing_train_type1(GAME *game_p);


/*
 ***************************************************************************************
 *	プレイヤーのメイン処理変更要求優先順位が変更可能かを見る（デモのシステムが使う）
 ***************************************************************************************
 */
/* "会話" */
extern int mPlib_check_request_main_talk_type1_priority(GAME *game_p);
/* "強制会話" */
extern int mPlib_check_request_main_speak_type1_priority(GAME *game_p);
/* "渡る" */
extern int mPlib_check_request_main_wade_priority(GAME *game_p);
/* "渡る(デモ用)" */
extern int mPlib_check_request_main_demo_wade_priority(GAME *game_p);
/* "ドア開け" */
extern int mPlib_check_request_main_door_type1_priority(GAME *game_p);
/* "ドア開け(デモ用)" */
extern int mPlib_check_request_main_door_type2_priority(GAME *game_p);
/* "ドアから出る" */
extern int mPlib_check_request_main_outdoor_priority(GAME *game_p);

/*
 ************************************************************************************
 *	プレイヤーのメイン処理変更要求優先順位強化する（デモのシステムが使う）
 ************************************************************************************
 */
/* "渡る" */
extern int mPlib_strength_request_main_wade_priority(GAME *game_p);
/* "渡る(雪玉)" */
extern int mPlib_strength_request_main_wade_snowball_priority(GAME *game_p);
/* "渡る(デモ用)" */
extern int mPlib_strength_request_main_demo_wade_priority(GAME *game_p);
/* "ドア開け" */
extern int mPlib_strength_request_main_door_priority(GAME *game_p);
///* "ドアから出る" */
//extern int mPlib_strength_request_main_outdoor_priority(GAME *game_p);


		    
/*-----------------------------------------------------------------------
 *
 *	プレイヤーのメイン処理がpriorityで変更可能かを調べる
 *		game_p:ゲーム構造体へのポインタ
 *		priority:変更優先順位
 * 			（"m_player.h"のTOTAL_M_PLAYER_REQUEST_PRIORITYを参照）
 *
 *----------------------------------------------------------------------*/
#define mPlib_check_request_main_priority(game_p, priority) \
		    ((mP_get_misc_p_forFunction_fromGAME(game_p)->func_check_request_main_priority)\
		     ((game_p), (priority)))

/*-----------------------------------------------------------------------
 *
 *	サブメニューを出せないようなプレイヤーの変更要求が来ていないか？
 *		game_p:ゲーム構造体へのポインタ
 *
 *----------------------------------------------------------------------*/
#define mPlib_able_submenu_request_main_index(game_p) \
			((mP_get_misc_p_forFunction_fromGAME(game_p)->func_able_submenu_request_main_index)\
			 ((game_p)))

			
#if 0
/*-----------------------------------------------------------------------
 *
 *	プレイヤーのメイン処理を"会話"から終了に変更出来る優先順位か？
 *
 *-----------------------------------------------------------------------*/
extern int mPlib_check_request_main_talk_end_priority_type1(GAME *game_p);
#endif

/*-----------------------------------------------------------------------
 *
 *	サブメニューからプレイヤーへの変更命令が来ているか
 *
 *-----------------------------------------------------------------------*/
extern int mPlib_Check_SetOrderSubmenu(void);
		    
/*-----------------------------------------------------------------------
 *
 *	プレイヤー的にはボタンを押してサブメニュー出せる状況か？
 *
 *-----------------------------------------------------------------------*/
extern int mPlib_able_submenu_type1(GAME *game_p);

#if 0
/*-----------------------------------------------------------------------
 *	プレーヤーが"渡る"為のコマンド
 *----------------------------------------------------------------------*/
#define mPlib_CheckAbleMoveWadeBlock(pos_p, angleY, check_npc) \
		    ((mP_get_misc_p_forFunction_fromGAME(gamePT)->func_CheckAbleMoveWadeBlock)\
		     ((gamePT), (pos_p), (angleY), FALSE, (check_npc)))
#endif

#if 0
/*-----------------------------------------------------------------------
 *	メイン処理の"家具開く"が終了したか(返り値がFALSEなら終了していない)
 *----------------------------------------------------------------------*/
#define mPlib_check_open_furniture_end() \
		    ((mP_get_misc_p_forFunction_fromGAME(gamePT)->func_check_open_furniture_end)\
		     (gamePT))
#endif

/*-----------------------------------------------------------------------
 *	"ドア開け"をしているもののラベルをゲット
 *----------------------------------------------------------------------*/
#define mPlib_actor_get_door_label() \
		    ((mP_get_misc_p_forFunction_fromGAME(gamePT)->func_get_door_label)\
		     (gamePT))

/*----------------------------------------------------------------------
 *
 *	プレイヤーの網が捕まえる物の登録テーブルへのセット
 *		u32 label		:網が捕まえた物のラベル(ACTORや作業領域へのポインタ)
 *		signed char type	:プレイヤーが網で捕まえる物のタイプ(TOTAL_NET_CATCH_TYPE_M_PLAYERを参照)
 *		const xyz_t *pos_p	:調べたいワールド位置(中身をシステムでコピーしています)
 *		float r			:調べたいワールド位置からの半径
 *
 *----------------------------------------------------------------------*/
#define mPlib_Set_Item_net_catch_request_table(label, type, pos_p, r)	\
		    ((mP_get_misc_p_forFunction_fromGAME(gamePT)->func_Set_Item_net_catch_request_table)\
		     (get_player_actor_fromGAME(gamePT), gamePT, (label), (type), (pos_p), (r)))

/*----------------------------------------------------------------------
 *
 *	プレイヤーの網が捕まえる物の強制登録へのセット
 *		u32 label		:網が捕まえた物のラベル(ACTORや作業領域へのポインタ)
 *		signed char type	:プレイヤーが網で捕まえる物のタイプ(TOTAL_NET_CATCH_TYPE_M_PLAYERを参照)
 *
 *---------------------------------------------------------------------- */
#define mPlib_Set_Item_net_catch_request_force(label, type) \
			((mP_get_misc_p_forFunction_fromGAME(gamePT)->func_Set_Item_net_catch_request_force)\
			 (get_player_actor_fromGAME(gamePT), gamePT, (label), (type)))

/*----------------------------------------------------------------------
 *
 *	プレイヤーの網が振られている状態か(返り値が0.0Fなら振っていない)
 *
 *----------------------------------------------------------------------*/
#define mPlib_Get_Item_net_catch_swing_timer() \
			((mP_get_misc_p_forFunction_fromGAME(gamePT)->func_Get_Item_net_catch_swing_timer)\
			 (get_player_actor_fromGAME(gamePT), gamePT))
			
/*----------------------------------------------------------------------
 *
 *	強制的にプレイヤーの座標を再セット
 *		force_pos_p:	強制的に入れたい位置
 *		force_angle_p:	強制的に入れたい角度
 *		flag:		強制的に入れたい要素(m_player.h: M_PLAYER_SET_FORCE_POSITION_ANGLE_NONE 参照)
 *
 *----------------------------------------------------------------------*/
#define mPlib_Set_force_position_angle(force_pos_p, force_angle_p, flag)	\
		((mP_get_misc_p_forFunction_fromGAME(gamePT)->func_Set_force_position_angle)\
		 (gamePT, (force_pos_p), (force_angle_p), (flag)))

/*----------------------------------------------------------------------
 *
 *	強制的にプレイヤーの座標を再セットする要素が何なのかを得る
 *		pos_p:		強制的に入れたい位置を代入するポインタ（NULLならしない）
 *		angle_p:	強制的に入れたい角度を代入するポインタ（NULLならしない）
 *		返り値(unchar):	強制的に入れたい要素(m_player.h: M_PLAYER_SET_FORCE_POSITION_ANGLE_NONE 参照)
 *
 *----------------------------------------------------------------------*/
#define mPlib_Get_force_position_angle(pos_p, angle_p)	\
		((mP_get_misc_p_forFunction_fromGAME(gamePT)->func_Get_force_position_angle)\
		 (gamePT, (pos_p), (angle_p)))

/*----------------------------------------------------------------------
 *
 *	プレイヤーが"渡る"の場合に渡り終わる位置を得る
 *		xyz_t *pos_p	:	位置を入れる領域(プレイヤーが"渡る"状態でないなら現在位置が入る)
 *		返り値(int)	:	"FALSE"ならプレイヤーは"渡る"状態でない
 *
 *----------------------------------------------------------------------*/
#define mPlib_Get_WadeEndPos(pos_p)	\
		((mP_get_misc_p_forFunction_fromGAME(gamePT)->func_Get_WadeEndPos)	\
		 (gamePT, (pos_p)))

/*----------------------------------------------------------------------
 *
 * プレイヤーのメイン処理の切り替え
 *
 *----------------------------------------------------------------------*/
#define mPlib_check_cancel_request_change_proc_index(index)	\
		((mP_get_misc_p_forFunction_fromGAME(game_p)->func_check_cancel_request_change_proc_index)(index))


/*-----------------------------------------------------------------------
 *
 *	プレイヤーの服の変更に関する関数
 *
 *----------------------------------------------------------------------*/
		    
/* プレイヤーの服のテクスチャポインタを得る(戻り値のNULLチェックをしてください) */
extern MemPtr mPlib_get_player_tex_p(GAME *game_p);
/* プレイヤーの服のパレットポインタを得る(戻り値のNULLチェックをしてください) */
extern MemPtr mPlib_get_player_pallet_p(GAME *game_p);
/* プレイヤーの顔データバンクのポインタを得る(戻り値のNULLチェックをしてください) */
extern MemPtr mPlib_get_player_face_p(GAME *game_p);
/* プレイヤーの顔のパレットポインタを得る(戻り値のNULLチェックをしてください) */
extern MemPtr mPlib_get_player_face_pallet_p(GAME *game_p);
		    
/* プレイヤーの着替処理（テクスチャ、パレット書き換え） */
extern void mPlib_change_player_cloth(GAME *game_p, unshort cloth_num);

/* プレイヤーテクスチャ・パレット領域の後始末 */
extern void mPlib_Object_Exchange_keep_Player_dt(GAME_PLAY *game_play_p);
    
#if 0
/*-----------------------------------------------------------------------
 *
 *	テント用のテクスチャとパレットに関する関数
 *
 *----------------------------------------------------------------------*/
/* テクスチャポインターを得る（NULLチェックをしてください） */
extern unchar *mPlib_get_tent_tex_p(GAME *game_p, unchar tent_id);
/* パレットポインターを得る（NULLチェックをしてください） */
extern unchar *mPlib_get_tent_pallet_p(GAME *game_p, unchar tent_id);

/* オブジェクト常駐入れ替えバンクデータ読み込み(テント用) */
extern void Object_Exchange_keep_new_Tent(GAME_PLAY *game_play_p);
/* オブジェクト常駐入れ替えバンクデータ後始末(テント用) */
extern void Object_Exchange_keep_Tent_dt(GAME_PLAY *game_play_p);
#endif

/*-----------------------------------------------------------------------
 *
 *	プレイヤーのスケルトンデータのポインターを得る（kSEG変換前）
 *
 *----------------------------------------------------------------------*/
extern cKF_BaseSkeleton_R_c *mPlib_get_player_mdl_p(void);

/*-----------------------------------------------------------------------
 *
 *	プレイヤーのオブジェクトバンク番号を得る
 *
 *----------------------------------------------------------------------*/
extern Object_Bank mPlib_get_player_Object_Bank(void);

/*-----------------------------------------------------------------------
 *
 *	指定したラムに,指定した番号のプレイヤーアニメーションを転送
 *
 *----------------------------------------------------------------------*/
extern void mPlib_DMA_player_Animation(MemPtr ram_p, int anime_index);

/*-----------------------------------------------------------------------
 *
 *	指定したラムに,指定した番号の上半身下半身分類テーブルを転送
 *
 *----------------------------------------------------------------------*/
extern void mPlib_DMA_player_Part_Table(signed char *ram_p, int table_index);

/*-----------------------------------------------------------------------
 *
 *	指定したラムに,指定した番号のプレイヤー専用アイテムデータを転送
 *
 *----------------------------------------------------------------------*/
extern void mPlib_DMA_player_Item(MemPtr ram_p, int index);

/*-----------------------------------------------------------------------
 *
 *	プレイヤーの服情報更新処理
 *
 *----------------------------------------------------------------------*/
extern void	mPlib_change_player_cloth_info(
    Cloth_c	*cloth,
    mAc_nfs_t	name
    );
extern void	mPlib_change_player_cloth_info_lv2(
    Private_c	*private_p,
    mAc_nfs_t	name
    );
#define	mPlib_change_player_cloth_info_lv3(n)	mPlib_change_player_cloth_info(&(ZCommonGet(now_private)->cloth), n)

/*-----------------------------------------------------------------------
 *
 *	プレーヤーのテクスチャとパレットデータ読み込み
 *		(tex_pとpallet_pは８バイトのアライメントが必要)
 *
 *----------------------------------------------------------------------*/
extern void mPlib_Load_PlayerTexAndPallet(void *tex_p, void *pallet_p, int num);


/*-----------------------------------------------------------------------
 *
 *	プレーヤーの目のテクスチャーアニメ─ションデータポインターをゲット
 *
 *----------------------------------------------------------------------*/
extern unsigned char *mPlib_Get_PlayerEyeTexAnimation_p(int anime_index);

/*-----------------------------------------------------------------------
 *
 *	プレーヤーの口のテクスチャーアニメ─ションデータポインターをゲット
 *
 *----------------------------------------------------------------------*/
extern unsigned char *mPlib_Get_PlayerMouthTexAnimation_p(int anime_index);

/*-----------------------------------------------------------------------
 *
 *	目のテクスチャポインターゲット
 *		index:		何パターン目か（"TOTAL_EYE_TX_PATTERN_M_PLAYER"を参照）
 *
 *----------------------------------------------------------------------*/
extern MemPtr mPlib_Get_eye_tex_p(int index);

/*-----------------------------------------------------------------------
 *
 *	口のテクスチャポインターゲット
 *		index:		何パターン目か（"TOTAL_MOUTH_TX_PATTERN_M_PLAYER"を参照）
 *
 *----------------------------------------------------------------------*/
extern MemPtr mPlib_Get_mouth_tex_p(int index);



/*-----------------------------------------------------------------------
 *
 *	サブメニューからプレイヤーの処理の変更を要請
 *
 *----------------------------------------------------------------------*/
/*
 ************************************************************************************
 *	サブメニューからプレイヤーの処理の変更するためのデータのポインターをゲット
 ************************************************************************************
 */
extern struct PLAYER_CHANGE_DATA_FROM_SUBMENU *mPlib_Get_change_data_from_submenu_p(void);

/*
 ************************************************************************************
 *	サブメニューからプレイヤーの処理の変更するためのデータのクリヤー
 ************************************************************************************
 */
extern void mPlib_Clear_change_data_from_submenu(void);

/*
 ************************************************************************************
 *	サブメニューからプレイヤーの処理を"アイテム譲渡"に変更する
 ************************************************************************************
 */
extern void mPlib_request_main_give_from_submenu(mAc_nfs_t itemNo,		/* アイテムの種類 */
						 int get_after_mode,		/* アイテムの始末の仕方 */
						 int present_flg,		/* アイテムがプレゼント用品かフラグ */
						 int on_counter);		/* カウンターの上でのやり取りか */

/*
 ************************************************************************************
 *	サブメニューからプレイヤーの処理を"アイテムを埋める"に変更する
 ************************************************************************************
 */
extern void mPlib_request_main_putin_scoop_from_submenu(const xyz_t *goal_pos_p,	/* アイテムを置くユニットの中心 */
							mAc_nfs_t itemNo);		/* アイテムの種類 */

/*
 ************************************************************************************
 *	サブメニューからプレイヤーの処理を"生き物を放す（魚）"に変更する
 ************************************************************************************
 */
extern void mPlib_request_main_release_creature_gyoei_from_submenu(
    short	release_angleY,	/* 魚が逃げていく方向 */
    short	mvaclist_no);	/* ム─ブアクターリストナンバー */

/*
 ************************************************************************************
 *	サブメニューからプレイヤーの処理を"生き物を放す（昆虫）"に変更する
 ************************************************************************************
 */
extern void mPlib_request_main_release_creature_insect_from_submenu(
    int		insect_type);	/* 昆虫のタイプ */

/*
 ************************************************************************************
 *	サブメニューからプレイヤーの処理を"棒立ち"に変更する
 ************************************************************************************
 */
extern void mPlib_request_main_wait_from_submenu(void);

/*
 ************************************************************************************
 *	サブメニューからプレイヤーの処理を"手紙を取るための着地"に変更する
 ************************************************************************************
 */
extern void mPlib_request_main_mail_land_from_submenu(void);

/*
 ************************************************************************************
 *	プレイヤーが渡るの処理に移行しないようにするフラグのセット
 ************************************************************************************
 */
extern void mPlib_Set_unable_wade(int value);

/*
 ************************************************************************************
 *	強制会話をこれ以外受け付けないラベルチェック(FALSEなら受けない)
 ************************************************************************************
 */
extern int mPlib_Check_able_force_speak_label(GAME *game_p, void *label);

/*
 ************************************************************************************
 *	強制会話をこれ以外受け付けないラベルをセット
 ************************************************************************************
 */
extern void mPlib_Set_able_force_speak_label(void *label);

/*
 ************************************************************************************
 *	強制会話をこれ以外受け付けないラベルをリセット
 ************************************************************************************
 */
extern void mPlib_Reset_able_force_speak_label(void);

/*
 ************************************************************************************
 *	プレイヤーが渡るの処理に移行しないようにするフラグの状態をゲット
 ************************************************************************************
 */
extern int mPlib_Get_unable_wade(void);

/*
 ************************************************************************************
 *	プレイヤーが傘を開いている状態かを調べる
 ************************************************************************************
 */
extern int mPlib_check_player_open_umbrella(GAME *game_p);

/*
 ************************************************************************************
 *	プレイヤーがプレイヤーが外に出るためにドアを開き始めたかを調べる
 ************************************************************************************
 */
extern int mPlib_check_player_outdoor_start(GAME *game_p);

/*
 ************************************************************************************
 *	プレイヤーが"棒立ち(デモ用)"したのが自分かを調べる
 ************************************************************************************
 */
extern int mPlib_check_label_player_demo_wait(GAME *game_p, void *label);

/*
 ****************************************************************
 *	プレイヤーの歩き(デモ用)の目的地を変更
 ****************************************************************
 */
extern void mPlib_Set_goal_player_demo_walk(float posX,		/* short型の整数範囲 */
					    float posZ,		/* short型の整数範囲 */
					    float speedF);	/* ０。０１単位 */

/*
 ****************************************************************
 *	プレイヤーの歩き(デモ用)の目的地を得る
 ****************************************************************
 */
extern void mPlib_Get_goal_player_demo_walk(float *posX_p,		/* short型の整数範囲 */
					    float *posZ_p,		/* short型の整数範囲 */
					    float *speedF_p);		/* ０。０１単位 */
/*
 ****************************************************************
 *	プレイヤーの歩き(デモ用)で目的地に着いた後,棒立ち(デモ用)にするかを変更
 ****************************************************************
 */
extern void mPlib_Set_continue_player_after_demo_walk(int continue_walk);	/* TRUEなら目的地に着いても歩きのまま */

/*
 ****************************************************************
 *	プレイヤーの歩き(デモ用)で目的地に着いた後,棒立ち(デモ用)にするかをゲット
 ****************************************************************
 */
extern int mPlib_Get_continue_player_after_demo_walk(void);	/* TRUEなら目的地に着いても歩きのまま */

/*
 ****************************************************************
 *	プレイヤーの歩き(デモ用)で目的地に着いたかをセット
 ****************************************************************
 */
extern void mPlib_Set_end_player_demo_walk(int end);

/*
 ****************************************************************
 *	プレイヤーの歩き(デモ用)で目的地に着いたかをゲット
 ****************************************************************
 */
extern int mPlib_Get_end_player_demo_walk(void);


/*
 ***********************************************************************
 *	アイテム袋に空きがあるかチェック
 ***********************************************************************
 */
/* 福引券を考慮しない */
extern int mPlib_Get_space_putin_item(void);
/* 福引券を考慮する */
extern int mPlib_Get_space_putin_item_forTICKET(mAc_nfs_t *itemNo_p);

/*
 ********************************************************************************
 *	プレイヤーがワープ可能状態かを調べる
 *		(イベントのメインルーチン内で見てください)
 *		(プレーヤーにワープが必要なら"ZCommonGet(request_warp, TRUE)"に
 *		 してから見てください)
 ********************************************************************************
 */
extern int mPlib_able_player_warp_forEvent(void);

/*
 ********************************************************************************
 *	プレイヤーにワープ要請する
 ********************************************************************************
 */
extern int mPlib_request_player_warp_forEvent(void);

/*
 ********************************************************************************
 *	プレイヤーにワープ要請を解除する
 ********************************************************************************
 */
extern int mPlib_cancel_player_warp_forEvent(void);

/*
 ********************************************************************************
 *	プレイヤーにワープ要請が来ているか
 ********************************************************************************
 */
extern int mPlib_check_player_warp_forEvent(void);

/*
 ********************************************************************************
 *	振った斧が当たったか
 ********************************************************************************
 */
extern int mPlib_Check_HitAxe(xyz_t *item_axe_center_pos_p);

/*
 ********************************************************************************
 *	自分のいるユニットが揺れたか
 ********************************************************************************
 */
extern int mPlib_Check_VibUnit_OneFrame(const xyz_t *check_pos_p);

/*
 ********************************************************************************
 *	振った網が着地したか
 *		item_net_center_pos_p:	網の中心点を代入する領域(NULLなら入れない)
 ********************************************************************************
 */
extern int mPlib_Check_StopNet(xyz_t *item_net_center_pos_p);

/*
 ********************************************************************************
 *	捕まっている物のラベルを返す(NULLなら捕まえてない)
 ********************************************************************************
 */
extern u32 mPlib_Get_item_net_catch_label(void);

/*
 ********************************************************************************
 *	捕まっている物を変える
 *		label	:網が捕まえた物のラベル(ACTORや作業領域へのポインタ)
 *		type	:プレイヤーが網で捕まえる物のタイプ(TOTAL_NET_CATCH_TYPE_M_PLAYERを参照)
 *		返り値がFALSEなら失敗
 ********************************************************************************
 */
extern int mPlib_Change_item_net_catch_label(u32 label, signed char type);

/*
 ********************************************************************************
 *	スコップが着地したか
 *		(主に掘った瞬間に虫や魚が逃げるため)
 *		item_scoop_center_pos_p:	網の中心点を代入する領域(NULLなら入れない)
 ********************************************************************************
 */
extern int mPlib_Check_HitScoop(xyz_t *item_scoop_center_pos_p);

/*
 ********************************************************************************
 *	スコップが穴を掘ったり埋めたりすることになったか
 *		(主に掘る先にいる虫などにあらかじめ退いて貰うため)
 *		item_scoop_center_pos_p:	スコップの中心点を代入する領域(NULLなら入れない)
 ********************************************************************************
 */
extern int mPlib_Check_DigScoop(xyz_t *item_scoop_center_pos_p);

/*
 ***********************************************************************
 *	プレイヤーが番地表示出来るかを得る
 *		(返り値は"TOTAL_DISPLAY_ADDRESS_M_PLAYER"を参照してください)
 ***********************************************************************
 */
extern int mPlib_Get_address_able_display(void);

/*
 ***********************************************************************************
 *	スコップの対象動作と位置を得る
 *		goal_pos_p:	プレイヤーが掘る位置を入れる領域
 *			(要らなくてもダミーで入れてください)
 *		fg_no_p:	プレイヤーが対象とする上物番号を入れる領域
 *			(要らなくてもダミーで入れてください)
 *		reflect_actor_pp:	反射する物がアクターだった場合のポインター
 *			(無い場合はNULL)
 ***********************************************************************************
 */
extern int mPlib_Check_scoop_after(GAME *game_p,
				   xyz_t *goal_pos_p,
				   mAc_nfs_t *fg_no_p,
				   ACTOR **reflect_actor_pp);

/*
 ***********************************************************************************
 *	カメラ位置を変更できるシーンか？("m_camear2.c"もみるのでここにある)
 ***********************************************************************************
 */
extern int mPlib_Check_scene_able_change_camera_pos(void);

/*
 ***********************************************************************************
 *	プレイヤーが八角台を回しているか
 ***********************************************************************************
 */
extern int mPlib_Check_RotateOctagon(void);

/*
 ***********************************************************************************
 *	プレイヤーの車洗い終了命令をセット
 *		(返り値が"FALSE"ならセット失敗)
 ***********************************************************************************
 */
extern int mPlib_Set_EndWashCar(void);

/*
 ***********************************************************************************
 *	プレイヤーの車洗い中にアニメーションの再生速度をセット
 *		(返り値が"FALSE"ならセット失敗)
 ***********************************************************************************
 */
extern int mPlib_Set_AnimeSpeedWashCar(float anime_speed);

/*
 ***********************************************************************************
 *	プレイヤーが会話中に傘を持っていたらしまう命令
 *		（フラグも立てますがプレイヤーがデモ中は保持し続けます）
 ***********************************************************************************
 */
extern void mPlib_Set_unable_hand_item_in_demo(void);

/*
 ***********************************************************************************
 *	プレイヤーが今アイテムを実際に持っているか
 ***********************************************************************************
 */
extern int mPlib_Check_now_handin_item(void);

/*
 ***********************************************************************************
 *	デモ中でもアイテムが持てるモードフラグをセット
 ***********************************************************************************
 */
extern void mPlib_Set_able_hand_all_item_in_demo(signed char value);

/*
 ***********************************************************************************
 *	プレイヤーの蜂に対する状態を得る
 ***********************************************************************************
 */
extern int mPlib_Get_status_for_bee(void);

/*
 ***********************************************************************************
 *	プレイヤーが蜂に刺され終わったか
 ***********************************************************************************
 */
extern int mPlib_Check_end_stung_bee(void);

/*
 ***********************************************************************************
 *	プレイヤーが自分を雪玉として押しているか？
 ***********************************************************************************
 */
extern int mPlib_Check_Label_main_push_snowball(void *label);

/*
 ***********************************************************************************
 *	プレイヤーが自分を雪玉としてゼルダスクロールしているか？
 ***********************************************************************************
 */
extern int mPlib_Check_Label_main_wade_snowball(void *label);

/*
 ****************************************************************
 *	スクロールデモ要請
 ****************************************************************
 */
/* "渡る(雪玉用)(PART_OBJが呼び出すように)" */
extern int mPlib_Set_ScrollDemo_forWade_snowball(int scroll_direction,			/* スクロールの方向("TOTAL_MV_e"を参照) */
						 const xyz_t *distance_snowball_p);	/* 雪玉とプレイヤーの距離 */

/*
 ***********************************************************************************
 *	プレイヤーのメイン処理が"渡る(雪玉用)"なら
 *	プレイヤーの相対位置から雪玉の位置を得る
 *	(返り値がFALSEなら*pos_pをいじってません)
 ***********************************************************************************
 */
extern int mPlib_GetSnowballPos_forWadeSnowball(xyz_t *pos_p);

/*
 ***********************************************************************************
 *	雪玉を押している状態でプレイヤーがゼルダスクロールエリアに入った
 *	返り値:	DONOT_MV_e	(スクロールしない)
 *		MV_RIGHT_e	(右方向スクロール)
 *		MV_LEFT_e	(左方向スクロール)
 *		MV_UP_e		(上方向スクロール)
 *		MV_DOWN_e	(下方向スクロール)
 ***********************************************************************************
 */
extern int mPlib_CheckCondition_forWadeSnowball(const xyz_t *player_pos_p, short player_angleY);

/*
 ***********************************************************************************
 *	プレイヤーが雪玉として押している時にパラメーターをセット
 *		(返り値は代入が成功したか)
 ***********************************************************************************
 */
extern int mPlib_SetParam_for_push_snowball(const xyz_t *player_pos_p,
					    short angleY,
					    float anime_speed);

/*
 ***********************************************************************************
 *	"渡る（雪玉用）"中に雪玉が砕けた事を連絡
 ***********************************************************************************
  */
extern void mPlib_Set_crash_snowball_for_wade(int value);

/*
 ***********************************************************************************
 *	"渡る"のキャンセルが実行された
 ***********************************************************************************
 */
#define mPlib_Get_excute_cancel_wade()	\
		((int)(mP_get_misc_p_forFunction_fromGAME(gamePT)->excute_cancel_wade))

/*
 ************************************************************************************
 *	客待ちデモ用コントローラライブラリー
 ************************************************************************************
 */
/* 客待ちデモ用コントローラ待避領域型宣言 */
typedef struct {
    MCON	mcon;					/* リミッタ─付コントローラ情報 */
    signed char triggerA;				/* Ａトリガー */
    signed char buttonA;				/* Ａボタン */
    signed char triggerZ;				/* Ｚトリガー */
    signed char buttonZ;				/* Ｚボタン */
    mAc_nfs_t item_kind;				/* アイテム種類("斧"とか"盾"とか) */
} PLAYER_CONTROLLER_DATA_FOR_TITLE_DEMO;


/* 客待ちデモ用コントローラ待避領域へのポインターをゲット */
extern PLAYER_CONTROLLER_DATA_FOR_TITLE_DEMO *mPlib_Get_controller_data_for_title_demo_p(void);
/* 客待ちデモ用コントローラ待避領域クリヤー */
extern void mPlib_Clear_controller_data_for_title_demo(void);

/* 客待ちデモ用コントローラ待避領域に値をセット("ボタン押し"と"レバー") */
extern void mPlib_SetData1_controller_data_for_title_demo(unshort data1);
/* 客待ちデモ用コントローラ待避領域に値をセット(装備アイテム) */
extern void mPlib_SetData2_controller_data_for_title_demo(unshort data2);

/*
 ************************************************************************************
 *	イベントにワープする際に戻ってくるプレイヤーの位置を
 *	入り口に戻さないといけない状態か
 ************************************************************************************
 */
extern int mPlib_Check_CorrectPlayerPos_forEvent(void);

/*
 ************************************************************************************
 *	浮きが戻ってきている途中の状態か
 ************************************************************************************
 */
extern int mPlib_Check_UKI_COMEBACK_STATUS(void);

/*
 ************************************************************************
 *	指定した座標のユニットの木が揺れているか（大きい・少し兼用）
 ************************************************************************
 */
extern int mPlib_Check_tree_shaken(const xyz_t *pos_p);

/*
 ************************************************************************
 *	指定した座標のユニットの木が少し揺れているか
 ************************************************************************
 */
extern int mPlib_Check_tree_shaken_little(const xyz_t *pos_p);

/*
 ************************************************************************
 *	指定した座標のユニットの木が大きく揺れているか
 ************************************************************************
 */
extern int mPlib_Check_tree_shaken_big(const xyz_t *pos_p);

/*
 ***********************************************************************************
 *	プレイヤーが拾える位置のアイテム番号を取得
 *		NULL_NO 以外なら表示するアイテムがある
 ***********************************************************************************
 */
extern mAc_nfs_t mPlib_Get_itemNo_forWindow(void);

/*
 ***********************************************************************************
 *	木を揺らして蜂の巣を出しても良いか（FALSEなら出してはいけない）
 ***********************************************************************************
 */
extern int mPlib_able_birth_bee(void);

/*
 ***********************************************************************************
 *	Ｃボタンで通常カメラの距離や角度を変える事の出来るモードか
 ***********************************************************************************
 */
extern int mPlib_check_able_change_camera_normal_index(void);

/*
 ***********************************************************************************
 *	引数のインデックスがプレイヤーのメイン処理の定義範囲にあるか
 ***********************************************************************************
 */
//extern int mPlib_check_main_index(int main_index);
#define mPlib_check_main_index(main_index)	((0 <= main_index) && (main_index < TOTAL_M_PLAYER_MAIN_INDEX))


#ifdef _LANGUAGE_C_PLUS_PLUS
} /* extern "C" */
#endif

#endif

/*** m_player_lib.h end ***/
