/*
 ****************************************************************************
 *
 *	プレイヤーのヘッダーファイル
 * 	$Id: m_player.h,v 1.1 2003/06/06 00:15:12 tong Exp $
 *
 ****************************************************************************
 */

#ifndef INCLUDE_M_PLAYER_H
#define INCLUDE_M_PLAYER_H

#ifdef _LANGUAGE_C_PLUS_PLUS
extern "C" {
#endif

#include "m_basic.h"
#include "m_collision_obj.h"
#include "m_player_request.h"
#include "m_player_shape.h"
#include "m_player_decl.h"

#if DEBUG
#include "process_profile.h" /* process_profile_t */
#endif    
    
#if DEBUG    
#define LOCAL_PLAYERREG_TRUE(n)		(PLAYERREG((n)))
#define LOCAL_PLAYERREG_FALSE(n)	(0)
#define LOCAL_PL2REG_TRUE(n)		(PL2REG((n)))
#define LOCAL_PL2REG_FALSE(n)		(0)
#else
#define LOCAL_PLAYERREG_TRUE(n)		(0)
#define LOCAL_PLAYERREG_FALSE(n)	(0)
#define LOCAL_PL2REG_TRUE(n)		(0)
#define LOCAL_PL2REG_FALSE(n)		(0)
#endif
    
/*-----------------------------------------------------------------------
 *
 *	 個別領域型定義
 *
 *----------------------------------------------------------------------*/

#define	M_PLAYER_ITEM_NET_CATCH_TOTAL_TABLES	8
#define	M_PLAYER_SHAKE_TREE_TOTAL_TABLES	3

    
struct PLAYER_ACTOR {
    ACTOR		actor_cl;			/* 基底クラス */

    /* ここからは小松オリジナルのメンバーとなります
       (変更するには専用の"m_player_lib.h"のマクロ又は関数を使って下さい) */
    cKF_SkeletonInfo_R_c 	kf_si0;			/* 本来用スケルトン構造作業領域 */
    cKF_SkeletonInfo_R_c 	kf_si1;			/* 合成用スケルトン構造作業領域 */
    s_xyz		joint[M_PLAYER_BOY_TOTAL_JOINT_NUM+1];	/* アニメーションデータ作業領域 */
    s_xyz		morph[M_PLAYER_BOY_TOTAL_JOINT_NUM+1];	/* アニメーションデータ作業領域 */
    Mtx			mtx[2][M_PLAYER_BOY_MODEL_NUM];		/* アニメーションデータ作業領域 */

    cKF_SkeletonInfo_R_c 	item_kf_si;			/* アイテム用スケルトン構造作業領域 */
    s_xyz		item_joint[M_PLAYER_ITEM_JOINT_NUM+1];	/* アニメーションデータ作業領域 */
    s_xyz		item_morph[M_PLAYER_ITEM_JOINT_NUM+1];	/* アニメーションデータ作業領域 */
    Mtx			item_mtx[2][M_PLAYER_ITEM_MODEL_NUM];	/* アニメーションデータ作業領域 */
    
    Eye_Anime		eye_anime_normal;	/* 通常用の目アニメーションクラス */
    int			eye_count;		/* 瞬きを連続してさせる変数 */
    int			eye_tex_index;		/* 目のテクスチャパターンインデックス */

    int			mouth_tex_index;	/* 口のテクスチャパターンインデックス */

    int	now_main_index;	/* メイン処理の配列テーブルへの現在のインデックス */
//    int	now_draw_index;	/* Gfx作成処理の配列テーブルへの現在のインデックス */
    int	old_main_index;	/* メイン処理の配列テーブルへの前回のインデックス */
//    int	old_draw_index;	/* Gfx作成処理の配列テーブルへの前回のインデックス */
    int	change_main_index;	/* メイン処理の配列テーブルへのインデックスが変更されたか */
    
    int	now_item_main_index;	/* アイテムのメイン処理の配列テーブルへの現在のインデックス */
    
    int	request_main_index;	/* メイン処理の配列テーブルへのインデックス変更予定 */
    int	request_main_index_priority;	/* メイン処理の配列テーブルへのインデックス変更順位 */
    int	request_main_set;	/* メイン処理の配列テーブルへのインデックスが変更要求がセットされたか */
    int end_settle_request_main_index_priority;		/* メイン処理の配列テーブルへのインデックス変更順位後始末が終了したか */

    M_PLAYER_MAIN_DATA main_data;			/* メイン処理のデータ格納領域 */
    M_PLAYER_REQUEST_MAIN_DATA request_main_data;/* メイン処理変更要求の際のデータ格納領域 */

    Object_Bank anime0_bank_ID;		/* 本来用アニメデータ格納バンク番号  */
    Object_Bank anime1_bank_ID;		/* 合成用アニメデータ格納バンク番号  */
    MemPtr anime0_SegmentAddress;	/* 本来用アニメデータセグメントテーブル値 */
    MemPtr anime1_SegmentAddress;	/* 合成用アニメデータセグメントテーブル値 */
    int anime0_index;			/* 現在ロードされている本来用アニメデータ番号 */
    int anime1_index;			/* 現在ロードされている合成用アニメデータ番号 */
    int part_tbl_index;			/* 現在ロードされている上半身下半身分類テーブルへのデータ番号 */
    
//    Object_Bank cloth_bank_ID_index;	/* 布データ格納バンクインデックス  */
//    Object_Bank tex0_bank_ID;		/* テクスチャデータ0格納バンク番号  */
//    Object_Bank tex1_bank_ID;		/* テクスチャデータ1格納バンク番号  */
//    Object_Bank pallet0_bank_ID;	/* パレットデータ0格納バンク番号  */
//    Object_Bank pallet1_bank_ID;	/* パレットデータ1格納バンク番号  */
    
    Object_Bank item_bank_ID[2];		/* アイテムデータ格納バンク番号  */
    MemPtr item_shape_Address[2];		/* アイテムシェイプデータ格納領域 */
    MemPtr item_anime_Address[2];		/* アイテムアニメデータ格納領域 */
    MemPtr item_shape_SegmentAddress[2];	/* アイテムシェイプデータセグメントテーブル値 */
    MemPtr item_anime_SegmentAddress[2];	/* アイテムアニメデータセグメントテーブル値 */
    int item_shape_index[2];		/* 現在ロードされているアイテムシェイプデータ番号 */
    int item_anime_index[2];		/* 現在ロードされているアイテムアニメデータ番号 */
    int item_now_use_bank_index;	/* 現在０番と１番どちらの領域を使用しているか */
    float item_scale;			/* アイテム出し入れの際のスケール */

//    Object_Bank face_bank_ID;		/* 顔データ格納バンク番号  */
    
    xyz_t shape_angle_speed;		/* 表示方向の変化速度 */
    xyz_t world_angle_speed;		/* 移動方向の変化速度 */
    s_xyz old_shape_angle;		/* １フレーム前の表示方向 */
    s_xyz old_world_angle;		/* １フレーム前の移動方向 */

    xyz_t shadow_pos;			/* "world.position"と別に影の位置を変更する際に使用する領域 */
    
    xyz_t item_axe_center_pos;		/* 斧の中心座標 */
    
    xyz_t item_net_center_pos;		/* 網の中心座標 */
    xyz_t item_net_collision_pos_head;	/* 網のオブジェ当りの頭 */
    xyz_t item_net_collision_pos_tail;	/* 網のオブジェ当りの尻 */
    s_xyz item_net_angle;	/* 網用作業領域 */
    
    ACTOR *umbrella_actor_p;	/* "傘"のアクターポインター */
    int umbrella_set_mode;	/* "傘"にセットするモード */
    signed char	unable_hand_item_in_demo;	/* 傘も持てないデモ中か？ */
    signed char able_hand_all_item_in_demo;	/* デモ中でもアイテムが持てるモードか？ */
#if 1
    /* 消去予定 */
    signed char cancel_force_talk_in_demo;	/* 強制会話を受け付けないデモ中か？ */
#endif
    
    
//    ClObjJntSph item_net_sphere;	/* 網のオブジェ当り用データ領域 */
    u32		item_net_catch_label;	/* 網が捕まえた物のラベル(ACTORや作業領域へのポインタ) */
    signed char item_net_catch_type;	/* 網が捕まえた物のタイプ */
//    float	item_net_catch_r;	/* 網が捕まえた物の半径 */
    u32		item_net_catch_label_request_table[M_PLAYER_ITEM_NET_CATCH_TOTAL_TABLES];	/* 網が捕まえる物のラベル登録テーブル */
    signed char	item_net_catch_type_request_table[M_PLAYER_ITEM_NET_CATCH_TOTAL_TABLES];	/* 網が捕まえる物のタイプ登録テーブル */
    xyz_t	item_net_catch_pos_request_table[M_PLAYER_ITEM_NET_CATCH_TOTAL_TABLES];		/* 網が捕まえる物の位置登録テーブル */
    float	item_net_catch_r_request_table[M_PLAYER_ITEM_NET_CATCH_TOTAL_TABLES];		/* 網が捕まえる物の半径登録テーブル */
    int		total_item_net_catch_request_now;	/* 網が捕まえる物の登録テーブルにいくつあるか */
    u32	item_net_catch_label_request_force;		/* 網が捕まえる物のラベル強制登録テーブル */
    signed char	item_net_catch_type_request_force;	/* 網が捕まえる物のタイプ強制登録テーブル */
    int	item_net_catch_insect_type;		/* 網が捕まえた物が昆虫だった時のタイプ */

    ACTOR *uki_actor_p;			/* "釣竿の浮き"のアクターポインター */
    xyz_t item_rod_top_pos;		/* 釣竿の先(描画の位置と一致) */
    xyz_t item_rod_virtual_top_pos;	/* 釣竿の先(真っ直ぐな状態の竿の先の位置) */
    int set_item_rod_top_pos;		/* 釣竿の先座標は今回セットされたか */
//    xyz_t item_rod_top_init_pos;	/* 釣竿の先の初期位置(毎フレーム計算) */
    short item_rod_angleZ;		/* 釣竿表示のＺ軸回転 */
    
    ClObjTris item_axe_tris;			/* アイテム(斧)とオブジェクトの当りを取る為の領域 */
    ClObjTrisElem item_axe_tris_area[1];	/* アイテム(斧)とオブジェクトの当りを取る為の領域 */
    ClObjTris item_net_tris;			/* アイテム(網)とオブジェクトの当りを取る為の領域 */
    ClObjTrisElem item_net_tris_area[1];	/* アイテム(網)とオブジェクトの当りを取る為の領域 */

    xyz_t item_scoop_center_pos;	/* スコップの中心座標 */

    ClObjPipe stand_pipe;	/* オブジェ補正用データ領域(立っている時) */

    xyz_t head_pos;		/* 頭ワールド座標 */
    xyz_t feel_pos;		/* 心(エフェクト中心)座標 */
    
    xyz_t right_hand_pos;	/* 右手のワールド座標値 */
    xyz_t left_hand_pos;	/* 左手のワールド座標値 */

    MtxF right_hand_matrix;	/* 右手のマトリックスをコピー */
    MtxF left_hand_matrix;	/* 左手のマトリックスをコピー */
    
    xyz_t right_back_foot_wpos;		/* 右足の裏ワールド座標値 */
    xyz_t left_back_foot_wpos;		/* 左足の裏ワールド座標値 */
    s_xyz right_back_foot_wangle;	/* 右足の裏ワールドアングル */
    s_xyz left_back_foot_wangle;	/* 左足の裏ワールドアングル */
    
//    int ef_shock_draw;		/* "ビックリ"描画指令 */
//    int ef_muka_draw;		/* "ムカ"描画指令 */
    int ef_draw;		/* "漫符"描画指令 */

//    signed char *player_part_tbl;	/* パーツ分類テーブルへのポインタ */
    signed char player_part_tbl[M_PLAYER_BOY_TOTAL_JOINT_NUM+1];	/* パーツ分類テーブルへのポインタ */
    
    signed char item_kind;		/* アイテム種類("斧"とか"盾"とか) */
//    int item_mode;		/* アイテムモード("取出し中"とか"片ずけ中"とか) */
    int item_matrix_set;	/* 左手アイテムのマトリックスをセットさせる */
    

    xyz_t net_start_pos;	/* ネットの手元 */
    xyz_t net_end_pos;		/* ネットの先端 */

    signed char address_able_display;	/* プレイヤーの状態が番地表示出来るか */
    
    s_xyz add_head_angle;		/* 頭の方向を制御するための変数 */
    
    xyz_t	force_position;			/* 強制的に座標を再セット */
    s_xyz	force_angle;			/* 強制的に角度を再セット */
    unchar	set_force_position_angle;	/* 何の要素を強制的に再セットしたか */

    signed char now_demo;		/* 現在デモ中か？ */
    
    float shake_tree_timer[M_PLAYER_SHAKE_TREE_TOTAL_TABLES];		/* 木を揺らすタイマー */
    int	  shake_tree_unit_numX[M_PLAYER_SHAKE_TREE_TOTAL_TABLES];	/* 揺れている木のユニット番号Ｘ */
    int	  shake_tree_unit_numZ[M_PLAYER_SHAKE_TREE_TOTAL_TABLES];	/* 揺れている木のユニット番号Ｚ */
    int	  shake_tree_little[M_PLAYER_SHAKE_TREE_TOTAL_TABLES];		/* 少し揺れている木か？ */

    xyz_t changed_pitfall_fg_pos;	/* 書き換えた落とし穴ＦＧの位置（Ｙ座標は入れません） */
    int changed_pitfall_fg;		/* 落とし穴ＦＧを一旦書き換えたか？ */

    float ripple_timer;			/* 水際の波紋の発生タイマー */
    signed char ripple_right;		/* 水際の波紋の発生が右足か？ */
    signed char bgm_volume_mode;	/* プレイヤーからＢＧＭのボリュームを設定するモード */

    int		crash_snowball_for_wade;		/* "渡る（雪玉用）"中に雪玉が砕けたフラグ */
    xyz_t	distance_snowball;			/* 雪玉とプレイヤーの距離 */

    int		request_scroll;				/* スクロールの方向 */
    unshort	cancel_wade_player_frame_counter;	/* "渡る"のキャンセルが実行されたプレイヤーのフレームカウンター */
    int		excute_cancel_wade;			/* "渡る"のキャンセルが実行された */

    unshort	player_frame_counter;			/* プレイヤーのフレームカウンター */

    signed char set_bgm_for_bee_chase_player;		/* プレイヤーが追われているBGMをセットしたか */

    signed char status_for_bee;				/* プレイヤーの蜂に対する状態を得る */
    
//    ACTOR *talk_actor_p;	/* 会話相手 */

//    float move_lean_angle;	/* 移動速度によって体を傾ける角度 */
    
    /* "m_player.c"の関数を他のファイルから操作するためのポインタ
       		(使用する為のマクロは"m_player_lib.h"にある) */
    int (*func_request_main_invade_all)(GAME *, int );					/* メイン処理を"侵入"へ変更要求 */
    int (*func_request_main_refuse_all)(GAME *, int );					/* メイン処理を"受け付けない"へ変更要求 */
    int (*func_request_main_return_demo_all)(GAME *, int, float, int);			/* メイン処理を"デモからの復帰"へ変更要求 */
    int (*func_request_main_wait_all)(GAME *, float, s32 , int );			/* メイン処理を"棒立ち"へ変更要求 */
//    int (*func_request_main_put_all)(GAME *, int );					/* メイン処理を"置く"へ変更要求 */
//    int (*func_request_main_talk_wait_all)(GAME *, s32, int );			/* メイン処理を"会話待ち"へ変更要求 */
    int (*func_request_main_talk_all)(GAME *, ACTOR *, int, float, int, int );		/* メイン処理を"会話"へ変更要求 */
//    int (*func_Setup_main_Talk_byDirectDemo)(GAME *, ACTOR *, int, float, int );	/* 変更要求せずにプレーヤーの状態を"会話"にする
//											   (デモのシステムのみが使用するべき) */
    int (*func_request_main_hold_all)(GAME *, int, int, const xyz_t *, float, s32 ,int);/* メイン処理を"家具つかみ"へ変更要求 */
    int (*func_request_main_recieve_wait_all)(GAME *, ACTOR *, int, int, mAc_nfs_t, int, int );	/* メイン処理を"アイテム受取り待ち"へ変更要求 */
    int (*func_request_main_give_all)(GAME *, ACTOR *, int, int, mAc_nfs_t, int, int, int, int);	/* メイン処理を"アイテム譲渡"へ変更要求 */
//    int (*func_request_main_sitdown_correct_all)(GAME *, int, const xyz_t *, int);	/* メイン処理を"座るために補正"へ変更要求 */
    int (*func_request_main_sitdown_all)(GAME *, int, const xyz_t *, int, int);		/* メイン処理を"腰を降ろす"へ変更要求 */
    int (*func_request_main_close_furniture_all)(GAME *, int);				/* メイン処理を"家具閉じる"へ変更要求 */
    int (*func_request_main_lie_bed_all)(GAME *, int, const xyz_t *, int, int, int);	/* メイン処理を"ベッドに寝る"へ変更要求 */
    int (*func_request_main_hide_all)(GAME *, int);					/* メイン処理を"表示もしないし受け付けない"へ変更要求 */
    int (*func_request_main_door_all)(GAME *, const xyz_t *, short, int, void *, int);	/* メイン処理を"ドア開け"へ変更要求 */
    int (*func_request_main_outdoor_all)(GAME *, int, int, int);			/* メイン処理を"ドアから出る"へ変更要求 */
    int (*func_request_main_wash_car_all)(GAME *, const xyz_t *, const xyz_t *, short, ACTOR *, int);	/* メイン処理を"車を洗う"へ変更要求 */
    /* メイン処理を"八角台を回す"へ変更要求 */
    int (*func_request_main_rotate_octagon_all)(GAME *,	ACTOR *, int, int, const xyz_t *, short, int);
    int (*func_request_main_throw_money_all)(GAME *, const xyz_t *, short, int);
    int (*func_request_main_pray_all)(GAME *, const xyz_t *, short, int);
    int (*func_request_main_mail_jump_all)(GAME *, const xyz_t *, short, int request_priority);	/* メイン処理を"手紙を取るためにジャンプ"へ変更要求 */
    int (*func_request_main_demo_wait_all)(GAME *, int, void *, int);			/* メイン処理を"棒立ち(デモ用)"へ変更要求 */
    int (*func_request_main_demo_walk_all)(GAME *, float, float, float, int, int);	/* メイン処理を"歩き(デモ用)"へ変更要求 */
    int (*func_request_main_demo_geton_train_all)(GAME *, const xyz_t *, short, int);	/* メイン処理を"汽車に乗る(デモ用)"へ変更要求 */
    int (*func_request_main_demo_getoff_train_all)(GAME *, const xyz_t *, short, int);	/* メイン処理を"汽車から降りる(デモ用)"へ変更要求 */
    int (*func_request_main_demo_standing_train_all)(GAME *, int);	/* 汽車で立っている(デモ用) */
    int (*func_request_main_stung_bee_all)(GAME *, int);				/* メイン処理を"蜂に刺されている"へ変更要求 */
    int (*func_request_main_shock_all)(GAME *, float, short, signed char, int, int);	/* メイン処理を"ショックを受ける"へ変更要求 */
    int (*func_request_main_change_cloth_forNPC)(GAME *, mAc_nfs_t, int);	/* メイン処理を"服を着替える"へ変更要求(ＮＰＣから) */
    int (*func_request_main_push_snowball_all)(GAME *, void *, int, int);	/* メイン処理を"雪玉押し"へ変更要求 */

    int (*func_check_request_main_priority)(GAME *, int );				/* メイン処理が変更可能かを調べる */
//    int (*func_CheckAbleMoveWadeBlock)(GAME *, const xyz_t *, short, float, int, int);	/* プレーヤーが"渡る"為のコマンド */
//    int (*func_check_open_furniture_end)(GAME *);					/* メイン処理の"家具開く"が終了したか */
    void *(*func_get_door_label)(GAME *);						/* "ドア開け"をしているもののラベルをゲット */
    /* プレイヤーの網が捕まえる物の登録テーブルへのセット */
    int (*func_Set_Item_net_catch_request_table)(ACTOR *, GAME *, u32, signed char, const xyz_t *, float);
    float (*func_Get_Item_net_catch_swing_timer)(ACTOR *, GAME *);		/* プレイヤーの網が振られている状態か(返り値が0.0Fなら振っていない) */
    int (*func_Set_Item_net_catch_request_force)(ACTOR *, GAME *, u32, signed char);    /* プレイヤーの網が捕まえる物の強制登録へのセット */
    void (*func_Set_force_position_angle)(GAME *, const xyz_t *, const s_xyz *, unchar);	/* 強制的に座標を再セット */
    unchar (*func_Get_force_position_angle)(GAME *, xyz_t *, s_xyz *);	/* 強制的に座標を再セットする要素が何なのかを得る */
    int (*func_Get_WadeEndPos)(GAME *, xyz_t *);	/* プレイヤーが"渡る"の場合に渡り終わる位置を得る */
    int (*func_Check_Label_main_push_snowball)(GAME *, void *);				/* プレイヤーが自分を雪玉として押しているか？ */
    int (*func_SetParam_for_push_snowball)(GAME *, const xyz_t *, short, float);	/* プレイヤーが雪玉として押している時にパラメーターをセット */
    int (*func_able_submenu_request_main_index)(GAME *);	/* サブメニューを出せないようなプレイヤーの変更要求が来ていないか？ */
    int (*func_check_able_change_camera_normal_index)(ACTOR *);	/* Ｃボタンで通常カメラの距離や角度を変える事の出来るモードか */

    int (*func_check_cancel_request_change_proc_index)(int);
    u32 (*func_Get_item_net_catch_label)(ACTOR *);
    int (*func_Change_item_net_catch_label)(ACTOR *, u32, signed char);	/* 捕まっている物を変える(返り値がFALSEなら失敗) */
    int (*func_Check_StopNet)(ACTOR *, xyz_t *);
    int (*func_Check_HitAxe)(ACTOR *, xyz_t *);		/* 振った斧が当たったか */
    int (*func_Check_VibUnit_OneFrame)(ACTOR *, const xyz_t *);
    int (*func_Check_HitScoop)(ACTOR *, xyz_t *);
    int (*func_Check_DigScoop)(ACTOR *, xyz_t *);
    int (*func_check_request_change_item)(GAME *);
    int (*func_Check_RotateOctagon)(GAME *);						/* プレイヤーが八角台を回しているか */
    int (*func_Check_end_stung_bee)(ACTOR *);						/* プレイヤーが蜂に刺され終わったか */
    int (*func_Get_status_for_bee)(ACTOR *);						/* プレイヤーの蜂に対する状態を得る */
    /* スクロールデモ要請"渡る(雪玉用)"(PART_OBJが呼び出すように) */
    int (*func_Set_ScrollDemo_forWade_snowball)(ACTOR *, int, const xyz_t *);
    int (*func_Check_tree_shaken)(ACTOR *, const xyz_t *);		/* 指定した座標のユニットの木が揺れているか大きい・少し兼用） */
    int (*func_Check_tree_shaken_little)(ACTOR *, const xyz_t *);	/* 指定した座標のユニットの木が少し揺れているか */
    int (*func_Check_tree_shaken_big)(ACTOR *, const xyz_t *);		/* 指定した座標のユニットの木が大きく揺れているか */
    int (*func_Check_Label_main_wade_snowball)(GAME *, void *);		/* プレイヤーが自分を雪玉としてゼルダスクロールしているか？ */
    /* プレイヤーのメイン処理が"渡る(雪玉用)"ならプレイヤーの相対位置から雪玉の位置を得る */
    int (*func_GetSnowballPos_forWadeSnowball)(ACTOR *, xyz_t *pos_p);
    /* 雪玉を押している状態でプレイヤーがゼルダスクロールエリアに入った */
    int (*func_CheckCondition_forWadeSnowball)(GAME *, const xyz_t *, short);
    mAc_nfs_t (*func_Get_itemNo_forWindow)(ACTOR *);	/* プレイヤーが拾える位置のアイテム番号を取得（棒立ちの時のみ調べる） */
//    int (*func_check_able_event_without_priority)(GAME *);	/* 処理の優先順位に関係なくイベントに行けるモードか */
    int (*func_check_cancel_event_without_priority)(GAME *);	/* 処理の優先順位に関係なくイベントに行けないモードか */
    int (*func_CheckScene_AbleSubmenu)(void);	/* シーン番号からボタンを押してサブメニュー出せるかをチェック */
	 
    

    
#if DEBUG
    process_profile_t debug_time;
#endif
    
#if DEBUG
    void (*func_dummy0)(ACTOR *, GAME *);
    void (*func_dummy1)(ACTOR *, GAME *);
    void (*func_dummy2)(ACTOR *, GAME *);
    void (*func_dummy3)(ACTOR *, GAME *);
    void (*func_dummy4)(ACTOR *, GAME *);
    void (*func_dummy5)(ACTOR *, GAME *);
    void (*func_dummy6)(ACTOR *, GAME *);
    void (*func_dummy7)(ACTOR *, GAME *);
    void (*func_dummy8)(ACTOR *, GAME *);
    void (*func_dummy9)(ACTOR *, GAME *);
    void (*func_dummy10)(ACTOR *, GAME *);
    void (*func_dummy11)(ACTOR *, GAME *);
#endif

    int (*func_Check_able_force_speak_label)(GAME *, void *label);	/* 強制会話をこれ以外受け付けないラベルチェック */

#if DEBUG
    u64	value_dummy;
    int value_dummy0;
    int value_dummy1;
    int value_dummy2;
    int value_dummy3;
    int value_dummy4;
    int value_dummy5;
    int value_dummy6;
    int value_dummy7;
    int value_dummy8;
    int value_dummy9;
    int value_dummy10;
    int value_dummy11;
    int value_dummy12;
    int value_dummy13;
    int value_dummy14;

#endif

    void *able_force_speak_label;	/* 強制会話をこれ以外受け付けないラベル */

#if DEBUG
    u64	value_dummy100;
#endif
    

    /*
     *	ここからは小松以外の人が管理するメンバーとなります
     */
    int		action_btn;			/* Ａボタンを押したフラグ */
    int		open_submenu_by_action_btn;	/* Ａボタンを押してサブメニューが出た */
    mAc_nfs_t	fg_no;	/* 目の前のＦＧナンバー（Ａボタンを押したとき） */
    xyz_t	fg_chkPos;
    signed char set_bgm_scene_mode_for_structure;	/* 建物から出るときのＢＧＭの設定変更をプレイヤーにして欲しい */

};

#define	M_PLAYER_MISC_P(actor_p)	((Player_actor *)(actor_p))
#define mP_get_misc_p_fromGAME(game_p) \
	(M_PLAYER_MISC_P(get_player_actor((GAME_PLAY *)(game_p))))
#define mP_get_misc_p_forFunction_fromGAME(game_p) \
	(M_PLAYER_MISC_P(get_player_actor_forFunction_fromGAME(game_p)))
#define mP_get_misc_p_fromGAME_PLAY(game_play_p) \
	(M_PLAYER_MISC_P(get_player_actor(game_play_p)))
#define mP_get_misc_p_forFunction_fromGAME_PLAY(game_play_p) \
	(M_PLAYER_MISC_P(get_player_actor_forFunction(game_play_p)))

	    
/*-----------------------------------------------------------------------
 *
 *	サブメニューからプレイヤーの処理の変更するためのデータ型定義
 *
 *----------------------------------------------------------------------*/
struct PLAYER_CHANGE_DATA_FROM_SUBMENU {
    int	request_main_index;	/* メイン処理の配列テーブルへのインデックス変更予定 */
    int	request_main_set;	/* メイン処理の配列テーブルへのインデックスが変更されたか */

    M_PLAYER_REQUEST_MAIN_DATA request_main_data;	/* メイン処理変更要求の際のデータ格納領域 */
};

	    
/*-----------------------------------------------------------------------
 *
 *	 プレイヤー外部参照宣言
 *
 *----------------------------------------------------------------------*/
extern void Player_actor_ct(ACTOR *thisx, GAME *game);
extern void Player_actor_dt(ACTOR *thisx, GAME *game);
extern void Player_actor_move(ACTOR *thisx, GAME *game);
extern void Player_actor_draw(ACTOR *thisx, GAME *game);


/*-----------------------------------------------------------------------
 *
 *	 レジスターを使わないプレーヤー初期値
 *
 *----------------------------------------------------------------------*/
/*-----------------------------------------------------------------------
 *
 *	 レジスターを使ったプレーヤー初期値
 *
 *----------------------------------------------------------------------*/
#define PLAYER_INIT_MAX_SPEEDY_DEFAULT	(-8.00F*M_SPD_SPEED_MUL_F)	/* 落下最大速度初期値 */
#define PLAYER_INIT_GRAVITY_DEFAULT	(-1.00F*M_SPD_SPEED_MUL_F)	/* 重力加速度初期値 */
#define PLAYER_MAX_SPEED_PARALLEL_DEFAULT (7.50F*M_SPD_SPEED_MUL_F)	/* 水平方向最大速度 */
#define PLAYER_MAX_ACCEL_PARALLEL_DEFAULT (1.40F*M_SPD_SPEED_MUL_F)	/* 水平方向最大加速度 */
#define PLAYER_MAX_BRAKE_PARALLEL_DEFAULT (0.75F*M_SPD_SPEED_MUL_F)	/* 水平方向最大ブレーキ */
#define PLAYER_BG_COLLISION_RADIUS_DEFAULT	(18.0F)		/* 水平方向BGチェック半径 */
#define PLAYER_TIME_WADE_DEFAULT (0.60F*M_SPD_1SEC_FRAME_F)	/* ブロック間移動タイム */
#define PLAYER_TIME_WADE_ACCEL_DEFAULT (0.02F*M_SPD_1SEC_FRAME_F)/* ブロック間移動加速タイム */
#define PLAYER_TIME_WADE_BRAKE_DEFAULT (0.58F*M_SPD_1SEC_FRAME_F)/* ブロック間移動減速タイム */
#define PLAYER_WADE_CAMERA_RADIUS_DEFAULT	(110.0F)	/* ブロックカメラ移動しない半径 */
#define PLAYER_MTX_TRANSX_DEFAULT	(0.0F)	/* プレイヤーの表示行列位置平行移動X */
#define PLAYER_MTX_TRANSY_DEFAULT	(0.0F)	/* プレイヤーの表示行列位置平行移動Y */
#define PLAYER_MTX_TRANSZ_DEFAULT	(0.0F)	/* プレイヤーの表示行列位置平行移動Z */
#define PLAYER_MTX_SCALE_DEFAULT	(1.0F)	/* プレイヤーの表示行列スケール */
#define PLAYER_MTX_ROTATEX_DEFAULT	(0)	/* プレイヤーの表示行列X軸回転 */
#define PLAYER_MTX_ROTATEY_DEFAULT	(0)	/* プレイヤーの表示行列Y軸回転 */
#define PLAYER_MTX_ROTATEZ_DEFAULT	(0)	/* プレイヤーの表示行列Z軸回転 */
#define PLAYER_WADE_CAMERA_HEIGHT_DEFAULT	(10.0F)	/* ブロックカメラ移動しない高さ */
#define PLAYER_STICK_PERCENT_WADE_DEFAULT 	(0.65F)	/* ブロック間移動開始スティック量 */
/* プレイヤ─のアニメ再生基本速度 */
#define PLAYER_BASIC_SPEED_PLAY_ANIME_DEFAULT	(1.0F*M_SPD_SPEED_MUL_F)
/* プレイヤ─の歩きアニメ再生速度をスティック量から変換 */
#define PLAYER_WALK_SPEEDF_TO_SPEED_PLAY_ANIME_DEFAULT	(0.16F)
/* プレイヤ─のアニメモ─フィング基本速度 */
#define PLAYER_BASIC_MORPHING_SPEED_PLAY_ANIME_DEFAULT	(5.0F)
/* プレイヤ─のデバックモード時速度 */
#define PLAYER_SPEED_IN_DEBUG_DEFAULT	(10.0F*M_SPD_SPEED_MUL_F)
/* プレイヤ─の目の位置 */
#define PLAYER_EYE_OFFSETY_DEFAULT		(33.0F)
/* プレイヤ─の"歩き"と"走り"を切り替える水平方向の境界値用比例定数 */
#define PLAYER_WALK_TO_RUN_SPEED_PARALLEL_M_DEFAULT 	(0.47F)
/* プレイヤ─の"走り"と"ダッシュ"を切り替える水平方向の境界値用比例定数 */
#define PLAYER_RUN_TO_DASH_SPEED_PARALLEL_M_DEFAULT 	(0.65F)
/* プレイヤ─の水平方向移動速度によって体を傾ける最大値 */
#define PLAYER_MAX_LEAN_ANGLE_DEFAULT 	(ANGLE_MINUS180 / 9)
#define PLAYER_SCALE_DEFAULT	(0.010F)	/* プレイヤーのスケール */
/* プレイヤーの方向転換変数(歩き・走り用) */
#define PLAYER_TURN_ANGLE_DIV_DEFAULT	(0.35F/M_SPD_SPEED_MUL_F)
/* プレイヤーの方向転換最大速度 */
#define PLAYER_TURN_ANGLE_MAX_DEFAULT	((((float)ANGLE_90)/6.0F)*M_SPD_SPEED_MUL_F)
/* プレイヤーの方向転換最小速度 */
#define PLAYER_TURN_ANGLE_MIN_DEFAULT	(0.0F*M_SPD_SPEED_MUL_F)
/* プレイヤーのアニメーション再生最小速度 */
#define PLAYER_SPEED_PLAY_ANIME_MINIMAM_DEFAULT		(0.44F * M_SPD_SPEED_MUL_F)
/* 水平方向ブレーキ(ターン用) */       
#define PLAYER_MAX_BRAKE_PARALLEL_TURN_DEFAULT (0.60F*M_SPD_SPEED_MUL_F)
/* プレイヤーの方向転換変数(ターン用) */
#define PLAYER_TURN_ANGLE_DIV_FOR_TURN_DEFAULT	(0.50F/M_SPD_SPEED_MUL_F)
/* プレイヤーの方向転換最大速度(ターン用) */
#define PLAYER_TURN_MAX_ANGLE_SPEED_FOR_TURN_DEFAULT	(5000.0F*M_SPD_SPEED_MUL_F)
/* プレイヤーの方向転換最小速度(ターン用) */
#define PLAYER_TURN_MIN_ANGLE_SPEED_FOR_TURN_DEFAULT	(100.0F*M_SPD_SPEED_MUL_F)
/* プレイヤーの方向転換時減速定数最大値 */
#define PLAYER_TURN_BRAKE_MAX_SPEED_M_FOR_TURN_DEFAULT		(0.65F)
/* プレイヤーの方向転換最大速度(歩き用) */
#define PLAYER_TURN_ANGLE_MAX_DIV_FOR_WALK_DEFAULT	(0.5F*M_SPD_SPEED_MUL_F)
/* プレイヤーの方向転換最小速度(歩き用) */
#define PLAYER_TURN_ANGLE_MIN_DIV_FOR_WALK_DEFAULT	(0.01F*M_SPD_SPEED_MUL_F)
/* プレイヤーの方向転換最大レバー量(歩き用) */
#define PLAYER_TURN_ANGLE_MAX_PERCENT_FOR_WALK_DEFAULT	(1.0F)
/* プレイヤーの方向転換最小レバー量(歩き用) */
#define PLAYER_TURN_ANGLE_MIN_PERCENT_FOR_WALK_DEFAULT	(0.05F)
/* プレイヤーの方向転換最大速度(歩き用) */
#define PLAYER_TURN_ANGLE_MAX_FOR_WALK_DEFAULT	((5000.0F)*M_SPD_SPEED_MUL_F)
/* プレイヤーの方向転換最大速度(歩き用) */
#define PLAYER_TURN_ANGLE_MIN_FOR_WALK_DEFAULT	((100.0F)*M_SPD_SPEED_MUL_F)
/* 物を拾う手の距離 */
#define PLAYER_DISTANCE_PICKUP_HAND_DEFAULT	(20.0F)
/* 物を拾う体の距離 */
#define PLAYER_DISTANCE_PICKUP_BODY_DEFAULT	(10.0F)
/* 手で拾う場合の物の半径 */
#define PLAYER_RADIUS_PICKUP_HAND_DEFAULT	(15.0F)
/* 体で拾う場合の物の半径 */
#define PLAYER_RADIUS_PICKUP_BODY_DEFAULT	(15.0F)
/* 水平方向ブレーキ(転ぶ用) */       
#define PLAYER_MAX_BRAKE_PARALLEL_TUMBLE_DEFAULT (0.35F*M_SPD_SPEED_MUL_F)
/* 転ぶの出現する頻度の調整する定数(１だと必ず転ぶ) */       
#define PLAYER_FREQUENCY_TUMBLE_DEFAULT (300)
/* シェイプのオフセットＹ値 */       
#define PLAYER_SHAPE_OFFSETY_DEFAULT (200.0F)
/* 水平方向最大速度("網を構えながら歩く"用) */
#define PLAYER_MAX_SPEED_PARALLEL_FOR_READY_WALK_NET_DEFAULT (1.80F*M_SPD_SPEED_MUL_F)
/* プレイヤ─の歩きアニメ再生速度をスティック量から変換("網を構えながら歩く"用) */
#define PLAYER_WALK_SPEEDF_TO_SPEED_PLAY_ANIME_FOR_READY_WALK_NET_DEFAULT	(0.28F)
/* 水平方向ブレーキ(網を構える為にスリップ用) */       
#define PLAYER_MAX_BRAKE_PARALLEL_SLIP_NET_DEFAULT (0.55F*M_SPD_SPEED_MUL_F)
/* プレイヤーの方向転換変数(補正用) */
#define PLAYER_CORRECT_TURN_ANGLE_DIV_DEFAULT	(0.5F/M_SPD_SPEED_MUL_F)
/* プレイヤーの方向転換最大速度(補正用) */
#define PLAYER_CORRECT_TURN_ANGLE_MAX_DEFAULT	(((float)ANGLE_90) * M_SPD_SPEED_MUL_F)
/* プレイヤーの方向転換最小速度(補正用) */
#define PLAYER_CORRECT_TURN_ANGLE_MIN_DEFAULT	(100.0F * M_SPD_SPEED_MUL_F)
/* プレイヤーの移動変数(補正用) */
#define PLAYER_CORRECT_MOVE_DIV_DEFAULT	(0.1F / M_SPD_SPEED_MUL_F)
/* プレイヤーの移動最大速度(補正用) */
#define PLAYER_CORRECT_MOVE_MAX_DEFAULT	(1000.0F * M_SPD_SPEED_MUL_F)
/* プレイヤーの移動最小速度(補正用) */
#define PLAYER_CORRECT_MOVE_MIN_DEFAULT	(1.0F * M_SPD_SPEED_MUL_F)
/* プレイヤーの"腰を降ろす"時の影を消すタイマー */
#define PLAYER_SITDOWN_SHADOW_TIMER_DEFAULT	(15.0F / M_SPD_SPEED_MUL_F)
/* プレイヤーの"立ち上がる"時の影を出すタイマー */
#define PLAYER_STANDUP_SHADOW_TIMER_DEFAULT	(12.0F / M_SPD_SPEED_MUL_F)
/* プレイヤーの"立ち上がる"時の影を出し終わるタイマー */
#define PLAYER_STANDUP_SHADOW_END_TIMER_DEFAULT	(8.0F / M_SPD_SPEED_MUL_F)
/* プレイヤー網の当りの加算値 */
#define PLAYER_SWING_NET_ADD_ANGLE_DEFAULT	((int)(3000.0F * M_SPD_SPEED_MUL_F))
/* プレイヤー網の角度を変える速度比例定数 */
#define PLAYER_ITEM_NET_ANGLE_DIV_DEFAULT	(0.20F/M_SPD_SPEED_MUL_F)
/* プレイヤー網の角度を変える速度最大値 */
#define PLAYER_ITEM_NET_ANGLE_MAX_DEFAULT	((((float)ANGLE_90)/6.0F)*M_SPD_SPEED_MUL_F)
/* プレイヤー網の角度を変える速度最小値 */
#define PLAYER_ITEM_NET_ANGLE_MIN_DEFAULT	(100.0F*M_SPD_SPEED_MUL_F)
/* プレイヤー網の横振れ角度を変える為の定数 */
#define PLAYER_ITEM_NET_ANGLE_SPEEDY_TO_TURN_ANGLE_DEFAULT	(ANGLE_90 / 18)
/* プレイヤー網の半径 */
#define PLAYER_ITEM_NET_R_DEFAULT	(15.0F)
/* プレイヤー網の深さ */
#define PLAYER_ITEM_NET_DEPTH_DEFAULT	(50.0F)
/* プレイヤー網の前方向の深さ */
#define PLAYER_ITEM_NET_HEAD_ADD_DEFAULT	(20.0F)
/* プレイヤー網の捕まえた物をしまう時の縮小速度（1.0に近いほどゆっくりになる） */
#define PLAYER_ITEM_NET_PUTAWAY_SCALE_SPEED_DEFAULT	(0.750F)
/* プレイヤー網を引き寄せる時に出すメッセージのタイミング */
#define PLAYER_PULL_NET_MESSAGE_TIME_DEFAULT	(43.0F/M_SPD_SPEED_MUL_F)
/* プレイヤー網を引き寄せる時にカメラの寄るのタイミング */
#define PLAYER_PULL_NET_CAMERA_TIME_DEFAULT	(25.0F/M_SPD_SPEED_MUL_F)
/* プレイヤー木を切る半径 */
#define PLAYER_SWING_AXE_CUT_TREE_R_DEFAULT	(60.0F)
/* プレイヤー木を切る角度 */
#define PLAYER_SWING_AXE_CUT_TREE_ANGLE_DEFAULT	(5 * ANGLE_90 / 6)
/* プレイヤーを斧で弾く初期速度 */
#define PLAYER_REFLECT_AXE_PARALLEL_SPEED_DEFAULT	(4.8F*M_SPD_SPEED_MUL_F)
/* プレイヤーがNPCを切る半径 */
#define PLAYER_SWING_AXE_CUT_NPC_R_DEFAULT	(35.0F)
/* プレイヤーがNPCを切る角度 */
#define PLAYER_SWING_AXE_CUT_NPC_ANGLE_DEFAULT	(ANGLE_90 / 3 - 4000)
/* プレイヤーが家具を押し引きする際の補正が始まる時間 */
#define PLAYER_PULL_CORRECT_START_TIME_DEFAULT	(3.0F / M_SPD_SPEED_MUL_F)
/* プレイヤーが家具を押し引きする際の補正が終わる時間 */
#define PLAYER_PULL_CORRECT_END_TIME_DEFAULT	(17.0F / M_SPD_SPEED_MUL_F)

/* 穴を掘る場合に穴を置くアニメフレーム(通常) */
#define PLAYER_DIG_SCOOP_PUT_HOLE_ANIME_FRAME_DEFAULT		(20.0F)
/* 穴の拡大タイム */
#define PLAYER_DIG_SCOOP_PUT_HOLE_SCALE_TIME_DEFAULT		(6)
/* アイテムを埋める際にアイテムを出すアニメフレーム */
#define PLAYER_PUTIN_SCOOP_SET_ITEM_ANIME_FRAME_DEFAULT		(20.0F)
/* 穴を掘る場合に穴を置くアニメフレーム(切株) */
#define PLAYER_DIG_SCOOP_PUT_HOLE_FOR_STUMP_ANIME_FRAME_DEFAULT	(40.0F)
/* 穴を埋める場合に穴を埋めるアニメフレーム */
#define PLAYER_FILL_SCOOP_RESET_HOLE_ANIME_FRAME_DEFAULT	(18.0F)
/* 穴の縮小タイム */
#define PLAYER_FILL_SCOOP_RESET_HOLE_SCALE_TIME_DEFAULT		(23)
/* 生き物を逃がす際の見つめている時間 */
#define PLAYER_RELEASE_CREATURE_LOOK_END_TIME_DEFAULT		(30.0F / M_SPD_SPEED_MUL_F)
/* 生き物を逃がす際の硬直時間 */
#define PLAYER_RELEASE_CREATURE_END_TIME_DEFAULT		(42.0F / M_SPD_SPEED_MUL_F)
/* 生き物を逃がす際の振り向く最大速度 */
#define PLAYER_RELEASE_CREATURE_LOOK_MAX_ANGLE_DEFAULT		(1000)
/* 車を洗う際に何回同じアニメーションを繰り返すか */
#define PLAYER_WASH_CAR_REPEAT_ANIMATION_MAX_DEFAULT	(3)
/* 木を揺らす際にサーチする半径の加算値 */
#define PLAYER_SHAKE_TREE_SEARCH_RADIUS_ADD_DEFAULT		(3.0F)
/* 木を揺らす際にサーチする角度の絶対値 */
#define PLAYER_SHAKE_TREE_SEARCH_ANGLE_DEFAULT			(ANGLE_MINUS180 / 4)
/* 穴から抜けるまでの総ボタン押し量(ＰＡＬ版で変えなくて良いかも) */
#define PLAYER_STRUGGLE_PITFALL_END_TOTAL_PUSH_BUTTON_DEFAULT	(20.0F)
/* 落とし穴でもがく際のアニメーション再生速度の最小値 */
#define PLAYER_STRUGGLE_PITFALL_MINIMAM_ANIMATION_SPEED_DEFAULT	(1.0F * M_SPD_SPEED_MUL_F)
/* 落とし穴でもがく際のアニメーション再生速度の最大値 */
#define PLAYER_STRUGGLE_PITFALL_MAXIMAM_ANIMATION_SPEED_DEFAULT	(2.0F * M_SPD_SPEED_MUL_F)
/* 落とし穴でもがく際のレバーの角度変化をボタン押しの回数に変換するための変数 */
#define PLAYER_STRUGGLE_PITFALL_LEVER_ANGLE_TO_BUTTON_M_DEFAULT	(0.00002F)
/* 落とし穴でもがく際のレバーの位置変化をボタン押しの回数に変換するための変数 */
#define PLAYER_STRUGGLE_PITFALL_LEVER_SPEED_TO_BUTTON_M_DEFAULT	(0.50F)
/* 落とし穴でもがく際のボタン押しの回数をアニメーション再生速度に変換するための変数 */
#define PLAYER_STRUGGLE_PITFALL_BUTTON_TO_ANIME_SPEED_M_DEFAULT	(0.2500F)
/* 落とし穴でもがく際のアニメーション再生速度ブレーキ */
#define PLAYER_STRUGGLE_PITFALL_BRAKE_ANIME_SPEED_DEFAULT	(0.0100F)
/* 落とし穴でもがく際のアニメーション再生速度加算定数 */
#define PLAYER_STRUGGLE_PITFALL_ANIME_SPEED_ACCEL_M_DEFAULT	(0.25F * M_SPD_SPEED_MUL_F)
/* 水際の波紋を発生させるタイマー */
#define PLAYER_SET_RIPPLE_TIME_DEFAULT			(4.0F / M_SPD_SPEED_MUL_F)
/* 木から蜂の巣が発生してからショックを受けるまでの時間 */
#define PLAYER_SHOCK_FOR_BIRTH_BEE_WAIT_TIME_DEFAULT	(12.0F / M_SPD_SPEED_MUL_F)
/* 蜂に刺されたときにメッセージウインドウを開き始める時間 */
#define PLAYER_NOTICE_BEE_START_MSG_DEFAULT		(0.0F / M_SPD_SPEED_MUL_F)
/* 傘を回せる */
#define PLAYER_ROTATE_UMBRELLA_CHANGE_MAX_ANIME_SPEED_DEFAULT			(1.0F)
/* ブロック間移動開始スティック量(雪玉用) */
#define PLAYER_STICK_PERCENT_WADE_SNOWBALL_DEFAULT 	(0.65F)
/* プレイヤ─の右へ"渡る(雪玉用)"体の向きの幅 */
#define PLAYER_WADE_SNOWBALL_MAX_ANGLE_WIDTH_DEFAULT	((ANGLE_90) / 18)
/* プレイヤ─の浮きを投げる際のサーチ位置  */
#define PLAYER_READY_ROD_GOAL_DISTANCE_DEFAULT	(100.0F)
/* プレイヤ─の足音を付け足すアニメーションフレーム数  */
#define PLAYER_ADD_FOOTSTEP_ANIME_FRAME_DEFAULT	(2.0F)
/* 釣竿の先端位置と浮きの距離を釣竿のしなりに変換する定数  */
#define PLAYER_ITEM_ROD_VIB_DISTANCE_TO_ANIME_FRAME_M_DEFAULT	(0.010F)
/* 釣竿のしなりのアニメフレームを計算する定数  */
#define PLAYER_ITEM_ROD_ANIME_FRAME_M_DEFAULT			(0.75F)
/* 浮きの水面からの距離を釣竿のしなりに変換する定数  */
#define PLAYER_ITEM_ROD_RELAX_DISTANCE_TO_ANIME_FRAME_M_DEFAULT	(9.10F)
/* 釣竿の当り待ち状態での基本アニメフレーム */
#define PLAYER_ITEM_ROD_RELAX_BASIC_ANIME_FRAME_DEFAULT		(180.0F + 20.0F)
/* プレイヤ─の右へ"渡る"体の向きの幅 */
#define PLAYER_WADE_MAX_ANGLE_WIDTH_DEFAULT	((ANGLE_90 * 4) / 9)




#define PLAYER_INIT_MAX_SPEEDY()	\
		(PLAYER_INIT_MAX_SPEEDY_DEFAULT + ((float)(LOCAL_PLAYERREG_FALSE(0)))/100.0F)
#define PLAYER_INIT_GRAVITY()	\
		(PLAYER_INIT_GRAVITY_DEFAULT + ((float)(LOCAL_PLAYERREG_FALSE(1)))/100.0F)
#define PLAYER_MAX_SPEED_PARALLEL()	\
		(PLAYER_MAX_SPEED_PARALLEL_DEFAULT + ((float)(LOCAL_PLAYERREG_FALSE(2)))/100.0F)
#define PLAYER_MAX_ACCEL_PARALLEL()	\
		(PLAYER_MAX_ACCEL_PARALLEL_DEFAULT + ((float)(LOCAL_PLAYERREG_FALSE(3)))/100.0F)
#define PLAYER_MAX_BRAKE_PARALLEL()	\
		(PLAYER_MAX_BRAKE_PARALLEL_DEFAULT + ((float)(LOCAL_PLAYERREG_FALSE(4)))/100.0F)
#define PLAYER_BG_COLLISION_RADIUS()	\
		(PLAYER_BG_COLLISION_RADIUS_DEFAULT + ((float)(LOCAL_PLAYERREG_FALSE(5)))/10.0F)
#define PLAYER_TIME_WADE() 	\
		(PLAYER_TIME_WADE_DEFAULT + ((float)(LOCAL_PLAYERREG_FALSE(6)))*M_SPD_1SEC_FRAME_F/100.0F)
#define PLAYER_TIME_WADE_ACCEL() \
	(PLAYER_TIME_WADE_ACCEL_DEFAULT + ((float)(LOCAL_PLAYERREG_FALSE(7)))*M_SPD_1SEC_FRAME_F/100.0F)
#define PLAYER_TIME_WADE_BRAKE() \
	(PLAYER_TIME_WADE_BRAKE_DEFAULT + ((float)(LOCAL_PLAYERREG_FALSE(8)))*M_SPD_1SEC_FRAME_F/100.0F)
#define PLAYER_WADE_CAMERA_RADIUS() \
		(PLAYER_WADE_CAMERA_RADIUS_DEFAULT + (float)(LOCAL_PLAYERREG_FALSE(9)))
#define PLAYER_MTX_TRANSX()	\
		(PLAYER_MTX_TRANSX_DEFAULT + (float)(LOCAL_PLAYERREG_FALSE(10)))
#define PLAYER_MTX_TRANSY()	\
		(PLAYER_MTX_TRANSY_DEFAULT + (float)(LOCAL_PLAYERREG_FALSE(11)))
#define PLAYER_MTX_TRANSZ()	\
		(PLAYER_MTX_TRANSZ_DEFAULT + (float)(LOCAL_PLAYERREG_FALSE(12)))
#define PLAYER_MTX_SCALE()	\
		(PLAYER_MTX_SCALE_DEFAULT + (float)(LOCAL_PLAYERREG_FALSE(13))*0.01F)
#define PLAYER_MTX_ROTATEX()	\
		((short)(PLAYER_MTX_ROTATEX_DEFAULT + (int)(LOCAL_PLAYERREG_FALSE(14))))
#define PLAYER_MTX_ROTATEY()	\
		((short)(PLAYER_MTX_ROTATEY_DEFAULT + (int)(LOCAL_PLAYERREG_FALSE(15))))
#define PLAYER_MTX_ROTATEZ()	\
		((short)(PLAYER_MTX_ROTATEZ_DEFAULT + (int)(LOCAL_PLAYERREG_FALSE(16))))
#define PLAYER_WADE_CAMERA_HEIGHT()	\
		(PLAYER_WADE_CAMERA_HEIGHT_DEFAULT + (float)(LOCAL_PLAYERREG_FALSE(17)))
#define PLAYER_STICK_PERCENT_WADE()	\
		(PLAYER_STICK_PERCENT_WADE_DEFAULT + (float)(LOCAL_PLAYERREG_FALSE(18))*0.001F)
#define PLAYER_BASIC_SPEED_PLAY_ANIME()	\
		(PLAYER_BASIC_SPEED_PLAY_ANIME_DEFAULT + (float)(LOCAL_PLAYERREG_FALSE(19))*0.01F)
#define PLAYER_WALK_SPEEDF_TO_SPEED_PLAY_ANIME()	\
		(PLAYER_WALK_SPEEDF_TO_SPEED_PLAY_ANIME_DEFAULT + (float)(LOCAL_PLAYERREG_FALSE(20))*0.01F)
#define PLAYER_BASIC_MORPHING_SPEED_PLAY_ANIME()	\
		(PLAYER_BASIC_MORPHING_SPEED_PLAY_ANIME_DEFAULT + (float)(LOCAL_PLAYERREG_FALSE(21))*0.01F)
#define PLAYER_SPEED_IN_DEBUG()	\
		(PLAYER_SPEED_IN_DEBUG_DEFAULT + (float)(LOCAL_PLAYERREG_FALSE(22))*0.01F)
#define PLAYER_EYE_OFFSETY() \
		((PLAYER_EYE_OFFSETY_DEFAULT + ((float)LOCAL_PLAYERREG_FALSE(23))*0.01F)*PLAYER_MTX_SCALE())
#define PLAYER_WALK_TO_RUN_SPEED_PARALLEL_M() \
		(PLAYER_WALK_TO_RUN_SPEED_PARALLEL_M_DEFAULT + ((float)LOCAL_PLAYERREG_FALSE(24))*0.01F)
#define PLAYER_RUN_TO_DASH_SPEED_PARALLEL_M() \
		(PLAYER_RUN_TO_DASH_SPEED_PARALLEL_M_DEFAULT + ((float)LOCAL_PLAYERREG_FALSE(25))*0.01F)
#define PLAYER_MAX_LEAN_ANGLE() \
		((float)(PLAYER_MAX_LEAN_ANGLE_DEFAULT + (int)LOCAL_PLAYERREG_FALSE(26)))
#define PLAYER_SCALE() \
		(PLAYER_SCALE_DEFAULT + ((float)LOCAL_PLAYERREG_FALSE(27))*0.0001F)
#define PLAYER_TURN_ANGLE_DIV() \
		(PLAYER_TURN_ANGLE_DIV_DEFAULT + (((float)LOCAL_PLAYERREG_FALSE(28))*0.01F)/M_SPD_SPEED_MUL_F)
#define PLAYER_TURN_ANGLE_MAX() \
    		((short)(PLAYER_TURN_ANGLE_MAX_DEFAULT + ((float)LOCAL_PLAYERREG_FALSE(29))*M_SPD_SPEED_MUL_F))
#define PLAYER_TURN_ANGLE_MIN() \
    		((short)(PLAYER_TURN_ANGLE_MIN_DEFAULT + ((float)LOCAL_PLAYERREG_FALSE(30))*M_SPD_SPEED_MUL_F))
#define PLAYER_SPEED_PLAY_ANIME_MINIMAM() \
		(PLAYER_SPEED_PLAY_ANIME_MINIMAM_DEFAULT + (((float)(int)LOCAL_PLAYERREG_FALSE(31))*0.01F*M_SPD_SPEED_MUL_F))   
#define PLAYER_MAX_BRAKE_PARALLEL_TURN()	\
		(PLAYER_MAX_BRAKE_PARALLEL_TURN_DEFAULT + ((float)(LOCAL_PLAYERREG_FALSE(32)))/100.0F)
#define PLAYER_TURN_ANGLE_DIV_FOR_TURN() \
		(PLAYER_TURN_ANGLE_DIV_FOR_TURN_DEFAULT + (((float)LOCAL_PLAYERREG_FALSE(33))*0.01F)/M_SPD_SPEED_MUL_F)
#define PLAYER_TURN_MAX_ANGLE_SPEED_FOR_TURN() \
		(PLAYER_TURN_MAX_ANGLE_SPEED_FOR_TURN_DEFAULT + ((float)LOCAL_PLAYERREG_FALSE(34)*M_SPD_SPEED_MUL_F))
#define PLAYER_TURN_MIN_ANGLE_SPEED_FOR_TURN() \
		(PLAYER_TURN_MIN_ANGLE_SPEED_FOR_TURN_DEFAULT + ((float)LOCAL_PLAYERREG_FALSE(35)*M_SPD_SPEED_MUL_F))
#define PLAYER_TURN_BRAKE_MAX_SPEED_M_FOR_TURN() \
		(PLAYER_TURN_BRAKE_MAX_SPEED_M_FOR_TURN_DEFAULT + ((float)LOCAL_PLAYERREG_FALSE(36)*0.01F))
#define PLAYER_TURN_ANGLE_MAX_DIV_FOR_WALK() \
		(PLAYER_TURN_ANGLE_MAX_DIV_FOR_WALK_DEFAULT + ((float)LOCAL_PLAYERREG_FALSE(37))*0.01F*M_SPD_SPEED_MUL_F)
#define PLAYER_TURN_ANGLE_MIN_DIV_FOR_WALK() \
		(PLAYER_TURN_ANGLE_MIN_DIV_FOR_WALK_DEFAULT + ((float)LOCAL_PLAYERREG_FALSE(38))*0.01F*M_SPD_SPEED_MUL_F)
#define PLAYER_TURN_ANGLE_MAX_PERCENT_FOR_WALK() \
		(PLAYER_TURN_ANGLE_MAX_PERCENT_FOR_WALK_DEFAULT + ((float)LOCAL_PLAYERREG_FALSE(39))*0.01F)
#define PLAYER_TURN_ANGLE_MIN_PERCENT_FOR_WALK() \
		(PLAYER_TURN_ANGLE_MIN_PERCENT_FOR_WALK_DEFAULT + ((float)LOCAL_PLAYERREG_FALSE(40))*0.01F)
#define PLAYER_TURN_ANGLE_MAX_FOR_WALK() \
	(PLAYER_TURN_ANGLE_MAX_FOR_WALK_DEFAULT	+ ((float)LOCAL_PLAYERREG_FALSE(41))*M_SPD_SPEED_MUL_F)
#define PLAYER_TURN_ANGLE_MIN_FOR_WALK() \
	(PLAYER_TURN_ANGLE_MIN_FOR_WALK_DEFAULT	+ ((float)LOCAL_PLAYERREG_FALSE(42))*M_SPD_SPEED_MUL_F)
#define PLAYER_DISTANCE_PICKUP_HAND()	\
		(PLAYER_DISTANCE_PICKUP_HAND_DEFAULT + (float)(LOCAL_PLAYERREG_FALSE(43)))
#define PLAYER_DISTANCE_PICKUP_BODY()	\
		(PLAYER_DISTANCE_PICKUP_BODY_DEFAULT + (float)(LOCAL_PLAYERREG_FALSE(44)))
#define PLAYER_RADIUS_PICKUP_HAND()	\
		(PLAYER_RADIUS_PICKUP_HAND_DEFAULT + (float)(LOCAL_PLAYERREG_FALSE(45)))
#define PLAYER_RADIUS_PICKUP_BODY()	\
		(PLAYER_RADIUS_PICKUP_BODY_DEFAULT + (float)(LOCAL_PLAYERREG_FALSE(46)))
#define PLAYER_MAX_BRAKE_PARALLEL_TUMBLE()	\
		(PLAYER_MAX_BRAKE_PARALLEL_TUMBLE_DEFAULT + ((float)(LOCAL_PLAYERREG_FALSE(47)))*0.01F)
#define PLAYER_FREQUENCY_TUMBLE()	\
		(PLAYER_FREQUENCY_TUMBLE_DEFAULT + (int)LOCAL_PLAYERREG_FALSE(48))
#define PLAYER_SHAPE_OFFSETY()	\
		(PLAYER_SHAPE_OFFSETY_DEFAULT + (float)LOCAL_PLAYERREG_FALSE(49))
#define PLAYER_MAX_SPEED_PARALLEL_FOR_READY_WALK_NET()	\
		(PLAYER_MAX_SPEED_PARALLEL_FOR_READY_WALK_NET_DEFAULT + ((float)(LOCAL_PLAYERREG_FALSE(50)))*0.01F)
#define PLAYER_WALK_SPEEDF_TO_SPEED_PLAY_ANIME_FOR_READY_WALK_NET()	\
		(PLAYER_WALK_SPEEDF_TO_SPEED_PLAY_ANIME_FOR_READY_WALK_NET_DEFAULT + ((float)(LOCAL_PLAYERREG_FALSE(51)))*0.001F)
#define PLAYER_MAX_BRAKE_PARALLEL_SLIP_NET()	\
		(PLAYER_MAX_BRAKE_PARALLEL_SLIP_NET_DEFAULT + ((float)(LOCAL_PLAYERREG_FALSE(52)))*0.01F)
#define PLAYER_CORRECT_TURN_ANGLE_DIV()	\
		(PLAYER_CORRECT_TURN_ANGLE_DIV_DEFAULT + ((float)LOCAL_PLAYERREG_FALSE(53))*0.01F)
#define PLAYER_CORRECT_TURN_ANGLE_MAX()	\
		((short)(int)(PLAYER_CORRECT_TURN_ANGLE_MAX_DEFAULT + (float)LOCAL_PLAYERREG_FALSE(54)))
#define PLAYER_CORRECT_TURN_ANGLE_MIN()	\
		((short)(int)(PLAYER_CORRECT_TURN_ANGLE_MIN_DEFAULT + (float)LOCAL_PLAYERREG_FALSE(55)))
#define PLAYER_CORRECT_MOVE_DIV()	\
		(PLAYER_CORRECT_MOVE_DIV_DEFAULT + ((float)LOCAL_PLAYERREG_FALSE(56))*0.01F)
#define PLAYER_CORRECT_MOVE_MAX()	\
		(PLAYER_CORRECT_MOVE_MAX_DEFAULT + (float)LOCAL_PLAYERREG_FALSE(57))
#define PLAYER_CORRECT_MOVE_MIN()	\
		(PLAYER_CORRECT_MOVE_MIN_DEFAULT + (float)LOCAL_PLAYERREG_FALSE(58))
#define PLAYER_SITDOWN_SHADOW_TIMER()	\
		(PLAYER_SITDOWN_SHADOW_TIMER_DEFAULT + (float)LOCAL_PLAYERREG_FALSE(59))
#define PLAYER_STANDUP_SHADOW_TIMER()	\
		(PLAYER_STANDUP_SHADOW_TIMER_DEFAULT + (float)LOCAL_PLAYERREG_FALSE(60))
#define PLAYER_STANDUP_SHADOW_END_TIMER()	\
		(PLAYER_STANDUP_SHADOW_END_TIMER_DEFAULT + (float)LOCAL_PLAYERREG_FALSE(61))
#define PLAYER_SWING_NET_ADD_ANGLE()	\
		((short)(PLAYER_SWING_NET_ADD_ANGLE_DEFAULT + (int)LOCAL_PLAYERREG_FALSE(62)))
#define PLAYER_ITEM_NET_ANGLE_DIV()	\
		(PLAYER_ITEM_NET_ANGLE_DIV_DEFAULT + ((float)LOCAL_PLAYERREG_FALSE(63)) * 0.01F)
#define PLAYER_ITEM_NET_ANGLE_MAX()	\
		(PLAYER_ITEM_NET_ANGLE_MAX_DEFAULT + (float)LOCAL_PLAYERREG_FALSE(64))
#define PLAYER_ITEM_NET_ANGLE_MIN()	\
		(PLAYER_ITEM_NET_ANGLE_MIN_DEFAULT + (float)LOCAL_PLAYERREG_FALSE(65))
#define PLAYER_ITEM_NET_ANGLE_SPEEDY_TO_TURN_ANGLE()	\
		((float)(PLAYER_ITEM_NET_ANGLE_SPEEDY_TO_TURN_ANGLE_DEFAULT + (int)LOCAL_PLAYERREG_FALSE(66)))
#define PLAYER_ITEM_NET_R()	\
		(PLAYER_ITEM_NET_R_DEFAULT + (float)LOCAL_PLAYERREG_FALSE(67))
#define PLAYER_ITEM_NET_DEPTH()	\
		(PLAYER_ITEM_NET_DEPTH_DEFAULT + (float)LOCAL_PLAYERREG_FALSE(68))
#define PLAYER_ITEM_NET_HEAD_ADD() \
		(PLAYER_ITEM_NET_HEAD_ADD_DEFAULT + (float)LOCAL_PLAYERREG_FALSE(69))
#define PLAYER_ITEM_NET_PUTAWAY_SCALE_SPEED()	\
		(PLAYER_ITEM_NET_PUTAWAY_SCALE_SPEED_DEFAULT + (float)LOCAL_PLAYERREG_FALSE(70) * 0.001F)
#define PLAYER_PULL_NET_MESSAGE_TIME() \
		(PLAYER_PULL_NET_MESSAGE_TIME_DEFAULT + (float)LOCAL_PLAYERREG_FALSE(71))
#define PLAYER_PULL_NET_CAMERA_TIME() \
		(PLAYER_PULL_NET_CAMERA_TIME_DEFAULT + (float)LOCAL_PLAYERREG_FALSE(72))
#define PLAYER_PULL_NET_MORPHING_SPEED_PLAY_ANIME() \
		(PLAYER_PULL_NET_MORPHING_SPEED_PLAY_ANIME_DEFAULT + (float)LOCAL_PLAYERREG_FALSE(73))
#define PLAYER_SWING_AXE_CUT_TREE_R()	\
		(PLAYER_SWING_AXE_CUT_TREE_R_DEFAULT + (float)LOCAL_PLAYERREG_FALSE(74))	
#define PLAYER_SWING_AXE_CUT_TREE_ANGLE() \
		(PLAYER_SWING_AXE_CUT_TREE_ANGLE_DEFAULT + (int)LOCAL_PLAYERREG_FALSE(75))
#define PLAYER_REFLECT_AXE_PARALLEL_SPEED()	\
		(PLAYER_REFLECT_AXE_PARALLEL_SPEED_DEFAULT + ((float)LOCAL_PLAYERREG_FALSE(76)) * 0.01F)
#define PLAYER_SWING_AXE_CUT_NPC_R()	\
		(PLAYER_SWING_AXE_CUT_NPC_R_DEFAULT + (float)LOCAL_PLAYERREG_FALSE(77))
#define PLAYER_SWING_AXE_CUT_NPC_ANGLE()	\
		(PLAYER_SWING_AXE_CUT_NPC_ANGLE_DEFAULT	+ (int)LOCAL_PLAYERREG_FALSE(78))
#define PLAYER_PULL_CORRECT_START_TIME()	\
		(PLAYER_PULL_CORRECT_START_TIME_DEFAULT + (float)LOCAL_PLAYERREG_FALSE(79))
#define PLAYER_PULL_CORRECT_END_TIME()	\
		(PLAYER_PULL_CORRECT_END_TIME_DEFAULT + (float)LOCAL_PLAYERREG_FALSE(80))

#define PLAYER_DIG_SCOOP_PUT_HOLE_ANIME_FRAME() \
		(PLAYER_DIG_SCOOP_PUT_HOLE_ANIME_FRAME_DEFAULT + (float)LOCAL_PL2REG_FALSE(0))
#define PLAYER_DIG_SCOOP_PUT_HOLE_SCALE_TIME() \
		((unshort)(PLAYER_DIG_SCOOP_PUT_HOLE_SCALE_TIME_DEFAULT + (int)LOCAL_PL2REG_FALSE(1)))
#define PLAYER_PUTIN_SCOOP_SET_ITEM_ANIME_FRAME() \
		(PLAYER_PUTIN_SCOOP_SET_ITEM_ANIME_FRAME_DEFAULT + (float)LOCAL_PL2REG_FALSE(2))
#define PLAYER_DIG_SCOOP_PUT_HOLE_FOR_STUMP_ANIME_FRAME() \
		(PLAYER_DIG_SCOOP_PUT_HOLE_FOR_STUMP_ANIME_FRAME_DEFAULT + (float)LOCAL_PL2REG_FALSE(3))
#define PLAYER_FILL_SCOOP_RESET_HOLE_ANIME_FRAME() \
		(PLAYER_FILL_SCOOP_RESET_HOLE_ANIME_FRAME_DEFAULT + (float)LOCAL_PL2REG_FALSE(4))
#define PLAYER_FILL_SCOOP_RESET_HOLE_SCALE_TIME() \
		((unshort)(PLAYER_FILL_SCOOP_RESET_HOLE_SCALE_TIME_DEFAULT + (int)LOCAL_PL2REG_FALSE(5)))
#define PLAYER_RELEASE_CREATURE_LOOK_END_TIME()	\
		(PLAYER_RELEASE_CREATURE_LOOK_END_TIME_DEFAULT + (float)LOCAL_PL2REG_FALSE(6))
#define PLAYER_RELEASE_CREATURE_END_TIME() \
		(PLAYER_RELEASE_CREATURE_END_TIME_DEFAULT + (float)LOCAL_PL2REG_FALSE(7))
#define PLAYER_RELEASE_CREATURE_LOOK_MAX_ANGLE() \
		((short)(PLAYER_RELEASE_CREATURE_LOOK_MAX_ANGLE_DEFAULT + (int)LOCAL_PL2REG_FALSE(8)))
#define PLAYER_WASH_CAR_REPEAT_ANIMATION_MAX() \
		(PLAYER_WASH_CAR_REPEAT_ANIMATION_MAX_DEFAULT + (int)LOCAL_PL2REG_FALSE(9))
#define PLAYER_SHAKE_TREE_SEARCH_RADIUS_ADD() \
		(PLAYER_SHAKE_TREE_SEARCH_RADIUS_ADD_DEFAULT + (float)LOCAL_PL2REG_FALSE(10))
#define PLAYER_SHAKE_TREE_SEARCH_ANGLE() \
		(PLAYER_SHAKE_TREE_SEARCH_ANGLE_DEFAULT + (int)LOCAL_PL2REG_FALSE(11))
#define PLAYER_STRUGGLE_PITFALL_END_TOTAL_PUSH_BUTTON() \
		(PLAYER_STRUGGLE_PITFALL_END_TOTAL_PUSH_BUTTON_DEFAULT + (float)LOCAL_PL2REG_FALSE(12))
#define PLAYER_STRUGGLE_PITFALL_MINIMAM_ANIMATION_SPEED() \
		(PLAYER_STRUGGLE_PITFALL_MINIMAM_ANIMATION_SPEED_DEFAULT + (float)LOCAL_PL2REG_FALSE(13))
#define PLAYER_STRUGGLE_PITFALL_MAXIMAM_ANIMATION_SPEED() \
		(PLAYER_STRUGGLE_PITFALL_MAXIMAM_ANIMATION_SPEED_DEFAULT + (float)LOCAL_PL2REG_FALSE(14))
#define PLAYER_STRUGGLE_PITFALL_LEVER_ANGLE_TO_BUTTON_M() \
		(PLAYER_STRUGGLE_PITFALL_LEVER_ANGLE_TO_BUTTON_M_DEFAULT + (0.00001F) * (float)LOCAL_PL2REG_FALSE(15))
#define PLAYER_STRUGGLE_PITFALL_LEVER_SPEED_TO_BUTTON_M() \
		(PLAYER_STRUGGLE_PITFALL_LEVER_SPEED_TO_BUTTON_M_DEFAULT + (0.01F) * (float)LOCAL_PL2REG_FALSE(16))
#define PLAYER_STRUGGLE_PITFALL_BUTTON_TO_ANIME_SPEED_M() \
		(PLAYER_STRUGGLE_PITFALL_BUTTON_TO_ANIME_SPEED_M_DEFAULT + (0.01F) * (float)LOCAL_PL2REG_FALSE(17))
#define PLAYER_STRUGGLE_PITFALL_BRAKE_ANIME_SPEED() \
		(PLAYER_STRUGGLE_PITFALL_BRAKE_ANIME_SPEED_DEFAULT + (0.0001F) * (float)LOCAL_PL2REG_FALSE(18))
#define PLAYER_STRUGGLE_PITFALL_ANIME_SPEED_ACCEL_M() \
		(PLAYER_STRUGGLE_PITFALL_ANIME_SPEED_ACCEL_M_DEFAULT + 0.01F * (float)LOCAL_PL2REG_FALSE(19))
#define PLAYER_SET_RIPPLE_TIME() \
		(PLAYER_SET_RIPPLE_TIME_DEFAULT + (float)LOCAL_PL2REG_FALSE(20))
#define PLAYER_SHOCK_FOR_BIRTH_BEE_WAIT_TIME() \
		(PLAYER_SHOCK_FOR_BIRTH_BEE_WAIT_TIME_DEFAULT + (float)LOCAL_PL2REG_FALSE(21))
#define PLAYER_NOTICE_BEE_START_MSG_TIME() \
		(PLAYER_NOTICE_BEE_START_MSG_DEFAULT + (float)LOCAL_PL2REG_FALSE(22))
#define PLAYER_ROTATE_UMBRELLA_CHANGE_MAX_ANIME_SPEED()	\
		(PLAYER_ROTATE_UMBRELLA_CHANGE_MAX_ANIME_SPEED_DEFAULT + 0.001F * (float)LOCAL_PL2REG_FALSE(23))
#define PLAYER_STICK_PERCENT_WADE_SNOWBALL()	\
		(PLAYER_STICK_PERCENT_WADE_SNOWBALL_DEFAULT + (float)(LOCAL_PL2REG_FALSE(24))*0.001F)
#define PLAYER_WADE_SNOWBALL_MAX_ANGLE_WIDTH()	\
		(PLAYER_WADE_SNOWBALL_MAX_ANGLE_WIDTH_DEFAULT + (int)LOCAL_PL2REG_FALSE(25))
#define PLAYER_READY_ROD_GOAL_DISTANCE() \
		(PLAYER_READY_ROD_GOAL_DISTANCE_DEFAULT + (float)LOCAL_PL2REG_FALSE(26))
#define PLAYER_ADD_FOOTSTEP_ANIME_FRAME()	\
		(PLAYER_ADD_FOOTSTEP_ANIME_FRAME_DEFAULT + (float)LOCAL_PL2REG_FALSE(27))
#define PLAYER_ITEM_ROD_VIB_DISTANCE_TO_ANIME_FRAME_M()	\
		(PLAYER_ITEM_ROD_VIB_DISTANCE_TO_ANIME_FRAME_M_DEFAULT + ((float)LOCAL_PL2REG_FALSE(28)) * 0.001F)
#define PLAYER_ITEM_ROD_ANIME_FRAME_M()	\
		(PLAYER_ITEM_ROD_ANIME_FRAME_M_DEFAULT + ((float)LOCAL_PL2REG_FALSE(29)) * 0.01F)
#define PLAYER_ITEM_ROD_RELAX_DISTANCE_TO_ANIME_FRAME_M() \
		(PLAYER_ITEM_ROD_RELAX_DISTANCE_TO_ANIME_FRAME_M_DEFAULT + ((float)LOCAL_PL2REG_FALSE(30)) * 0.01F)
#define PLAYER_ITEM_ROD_RELAX_BASIC_ANIME_FRAME() \
		(PLAYER_ITEM_ROD_RELAX_BASIC_ANIME_FRAME_DEFAULT + (float)LOCAL_PL2REG_FALSE(31))
#define PLAYER_WADE_MAX_ANGLE_WIDTH() \
		((short)(PLAYER_WADE_MAX_ANGLE_WIDTH_DEFAULT + (int)LOCAL_PL2REG_FALSE(32)))



/* デバックをしやすくする情報の待避（製品版にも入れます） */


/* プレイヤー＆サブメニューのプログラム領域の大きさの上位ビットをレジスターに待避(u32型と仮定) */
#define PLAYER_SET_SIZE1_FOR_PLAYER_AND_SUBMENU_OVL(size)	(PLAYERREG(81) = (short)((((u32)(size)) >> 16) & 0x0000ffff))
/* プレイヤー＆サブメニューのプログラム領域の大きさの下位ビットをレジスターに待避 */
#define PLAYER_SET_SIZE2_FOR_PLAYER_AND_SUBMENU_OVL(size)	(PLAYERREG(82) = (short)(((u32)(size)) & 0x0000ffff))
/* プレイヤーのプログラム領域の大きさの上位ビットをレジスターに待避(u32型と仮定) */
#define PLAYER_SET_SIZE1_FOR_PLAYER_OVL(size)			(PLAYERREG(83) = (short)((((u32)(size)) >> 16) & 0x0000ffff))
/* プレイヤーのプログラム領域の大きさの下位ビットをレジスターに待避 */
#define PLAYER_SET_SIZE2_FOR_PLAYER_OVL(size)			(PLAYERREG(84) = (short)(((u32)(size)) & 0x0000ffff))
/* サブメニューのプログラム領域の大きさの上位ビットをレジスターに待避 */
#define PLAYER_SET_SIZE1_FOR_SUBMENU_OVL(size)			(PLAYERREG(85) = (short)((((u32)(size)) >> 16) & 0x0000ffff))
/* サブメニューのプログラム領域の大きさの下位ビットをレジスターに待避 */
#define PLAYER_SET_SIZE2_FOR_SUBMENU_OVL(size)			(PLAYERREG(86) = (short)(((u32)(size)) & 0x0000ffff))

/* プレイヤープログラムとサブメニュープログラムの大きさの差を求める
  
#define SYS_CFB_PLAYERREG_83_F	(3)			ROM_Fゲーム中のPLAYERREG(83)の値
#define SYS_CFB_PLAYERREG_84_F	(65536+(-17152))	ROM_Fゲーム中のPLAYERREG(84)の値(負の場合は65536を足す)
#define SYS_CFB_PLAYERREG_85_F	(3)			ROM_Fゲーム中のPLAYERREG(85)の値
#define SYS_CFB_PLAYERREG_86_F	(13120)			ROM_Fゲーム中のPLAYERREG(86)の値(負の場合は65536を足す)
#define SYS_CFB_PLAYER_MARGIN	\
	((65536 * SYS_CFB_PLAYERREG_85_F + (SYS_CFB_PLAYERREG_86_F)) \
	 - ((65536 * SYS_CFB_PLAYERREG_83_F) + (SYS_CFB_PLAYERREG_84_F)))
 */


/* プレイヤーのメイン処理のインデックスをレジスターに待避 */
#define PLAYER_SET_NOW_MAIN_INDEX(index)		(PLAYERREG(87) = (short)(index))
/* プレイヤーのメイン処理の変更優先順位をレジスターに待避 */
#define PLAYER_SET_REQUEST_MAIN_PRIORITY(priority)	(PLAYERREG(88) = (short)(priority))
/* プレイヤーの角度をレジスターに待避 */
#define PLAYER_SET_WORLD_ANGLE_Y(angle)		(PLAYERREG(89) = (angle))
#define PLAYER_SET_SHAPE_ANGLE_Y(angle)		(PLAYERREG(90) = (angle))
/* プレイヤーの位置をレジスターに待避 */
#define PLAYER_SET_POSITION_X(posX)		(PLAYERREG(91) = (short)(posX))
#define PLAYER_SET_POSITION_Y(posY)		(PLAYERREG(92) = (short)(posY))
#define PLAYER_SET_POSITION_Z(posZ)		(PLAYERREG(93) = (short)(posZ))



/* プレイヤーのメイン通すか */
#define PLAYER_UNSET_MOVE()			(LOCAL_PLAYERREG_TRUE(94))
/* プレイヤーの表示をするか */
#define PLAYER_UNSET_DISPLAY()			(LOCAL_PLAYERREG_TRUE(95))

#if DEBUG
/* 図鑑完成フラグを強制的にセットするか */
#define PLAYER_GET_FORCE_COMPLETE_BOOK()		(LOCAL_PL2REG_TRUE(92))
/* プレイヤーの借金返済完了フラグをセットするか */
#define PLAYER_GET_CHECK_FORCE_COMPLETE_PAYMENT()		(LOCAL_PL2REG_TRUE(93))
#define PLAYER_SET_CHECK_FORCE_COMPLETE_PAYMENT(value)		(PL2REG(93) = (value))
/* プレイヤーの借金返済完了フラグにセットする値 */
#define PLAYER_GET_VALUE_FORCE_COMPLETE_PAYMENT()		(LOCAL_PL2REG_TRUE(94))
/* プレイヤーを強制的にこけさせるフラグの値をゲット */
#define PLAYER_GET_FORCE_TUMBLE_FLAG()		(LOCAL_PL2REG_TRUE(95))
/* プレイヤーを強制的にこけさせるフラグの値をセット */
#define PLAYER_SET_FORCE_TUMBLE_FLAG(value)	(PL2REG(95) = (short)(value))
#endif



/* プレイヤ─のブロック移動検出半径 */
#define PLAYER_BG_SEARCH_BORDER_RADIUS()	\
		    (PLAYER_BG_COLLISION_RADIUS() + mCoBG_SEPARATE_DIST)
/* プレイヤ─の"歩き"と"走り"を切り替える水平方向境界速度 */
#define PLAYER_WALK_TO_RUN_SPEED_PARALLEL() \
		(PLAYER_WALK_TO_RUN_SPEED_PARALLEL_M() * PLAYER_MAX_SPEED_PARALLEL())
/* プレイヤ─の"走り"と"ダッシュ"を切り替える水平方向境界速度 */
#define PLAYER_RUN_TO_DASH_SPEED_PARALLEL() \
		(PLAYER_RUN_TO_DASH_SPEED_PARALLEL_M() * PLAYER_MAX_SPEED_PARALLEL())
///* プレイヤーの"歩き"から"スリップ"に切り替える水平方向境界速度 */
//#define PLAYER_WALK_TO_SLIP_SPEED_PARALLEL() 
//		(PLAYER_WALK_TO_SLIP_SPEED_PARALLEL_M() * PLAYER_MAX_SPEED_PARALLEL())

/* プレイヤーの体が右へ向いている */    
#define PLAYER_WADE_ANGLE_RIGHT_CHECK(angle, angle_range) \
		(((ANGLE_90 - (angle_range)) < ((int)(angle))) &&\
		 (((int)(angle)) < (ANGLE_90 + (angle_range))))

/* プレイヤーの体が左へ向いている */    
#define PLAYER_WADE_ANGLE_LEFT_CHECK(angle, angle_range) \
		(((-ANGLE_90 - (angle_range)) < ((int)(angle))) &&\
		 (((int)(angle)) < (-ANGLE_90 + (angle_range))))

/* プレイヤーの体が上へ向いている */    
#define PLAYER_WADE_ANGLE_UP_CHECK(angle, angle_range) \
		(((ANGLE_MINUS180 - (angle_range)) < ((int)(angle))) ||\
		 (((int)(angle)) < (-ANGLE_MINUS180 + (angle_range))))

/* プレイヤーの体が下へ向いている */    
#define PLAYER_WADE_ANGLE_DOWN_CHECK(angle, angle_range) \
		((((-(angle_range)) < ((int)(angle))) &&\
		  (((int)(angle)) <= 0)) \
		  ||\
		 ((0 <= ((int)(angle))) &&\
		  (((int)(angle)) < (angle_range))))

/* プレイヤーのアニメーション再生最小速度からの移動最小速度 */
#define PLAYER_SPEED_MINIMAM()	(PLAYER_SPEED_PLAY_ANIME_MINIMAM() / PLAYER_WALK_SPEEDF_TO_SPEED_PLAY_ANIME())


/* プレイヤ─のアニメモ─フィング基本速度２  */
#define PLAYER_BASIC_MORPHING_SPEED2_PLAY_ANIME()	\
		(6.0F)
/* プレイヤ─のアニメモ─フィング基本速度３  */
#define PLAYER_BASIC_MORPHING_SPEED3_PLAY_ANIME()	\
		(12.0F)
/* プレイヤ─のアニメモ─フィング基本速度４  */
#define PLAYER_BASIC_MORPHING_SPEED4_PLAY_ANIME()	\
		(3.0F)
/* プレイヤ─のアニメモ─フィング基本速度５  */
#define PLAYER_BASIC_MORPHING_SPEED5_PLAY_ANIME()	\
		(10.0F)
/* プレイヤ─のアニメモ─フィング基本速度６  */
#define PLAYER_BASIC_MORPHING_SPEED6_PLAY_ANIME()	\
		(17.0F)
/* プレイヤ─のアニメモ─フィング基本速度７  */
#define PLAYER_BASIC_MORPHING_SPEED7_PLAY_ANIME()	\
		(4.0F)
/* プレイヤ─のアニメモ─フィング基本速度８  */
#define PLAYER_BASIC_MORPHING_SPEED8_PLAY_ANIME()	\
		(5.0F)
/* プレイヤ─のアニメモ─フィング基本速度９  */
#define PLAYER_BASIC_MORPHING_SPEED9_PLAY_ANIME()	\
		(9.0F)
/* プレイヤ─のアニメモ─フィング基本速度１０  */
#define PLAYER_BASIC_MORPHING_SPEED10_PLAY_ANIME()	\
		(18.0F)
/* プレイヤ─のアニメモ─フィング基本速度１１  */
#define PLAYER_BASIC_MORPHING_SPEED11_PLAY_ANIME()	\
		(8.0F)


/* 斜めに穴を掘る限界距離 */
#define PLAYER_DIG_SCOOP_MAX_DISTANCE	(F_SQRT_OF_2 * F_SQRT_OF_5 * 20.0F)
//#define PLAYER_DIG_SCOOP_MIN_DISTANCE	(PLAYER_BG_COLLISION_RADIUS() + mCoBG_HOLE_RADIUS)



/*-----------------------------------------------------------------------
 *
 *	 プレーヤ処理関数の制御のための定義
 *
 *----------------------------------------------------------------------*/
/* メイン処理の配列テーブルへのインデックス */
/* "Player_actor_move"と"Player_actor_change_main_index"の
   配列と一致させてください */
enum {

#define	m_player_decl    m_player_decl_enum
    
#include "m_player.decl"
    
#undef	m_player_decl

    TOTAL_M_PLAYER_MAIN_INDEX
};

/* Gfx作成処理の配列テーブルへのインデックス */
/* "Player_actor_draw"の配列と一致させてください */
enum {
    M_PLAYER_DRAW_NONE,		/* 何も描かない */
    M_PLAYER_DRAW_NORMAL,	/* 通常 */
    
    TOTAL_M_PLAYER_DRAW_INDEX
};

/*
 ***********************************************************************
 * 	プレイヤーの顔のタイプ(実際には"男女・刺され"で４倍ある)
 ***********************************************************************
 */
/* 顔のパターン数 */
enum {
    M_PLAYER_FACE_TYPE1,
    M_PLAYER_FACE_TYPE2,
    M_PLAYER_FACE_TYPE3,
    M_PLAYER_FACE_TYPE4,
    M_PLAYER_FACE_TYPE5,
    M_PLAYER_FACE_TYPE6,
    M_PLAYER_FACE_TYPE7,
    M_PLAYER_FACE_TYPE8,

    TOTAL_FACE_TYPE_M_PLAYER
};

/*
 ***********************************************************************
 * 	プレイヤーの虫刺されタイプ
 ***********************************************************************
 */
enum {
    M_PLAYER_FACE_TYPE_SWELL_FALSE,
    M_PLAYER_FACE_TYPE_SWELL_TRUE,

    TOTAL_FACE_TYPE_SWELL_M_PLAYER
};

/*
 ***********************************************************************
 * 	プレイヤーの影武者タイプ
 ***********************************************************************
 */
enum {
    M_PLAYER_FACE_TYPE_DECOY_FALSE,
    M_PLAYER_FACE_TYPE_DECOY_TRUE,

    TOTAL_FACE_TYPE_DECOY_M_PLAYER
};

/*
 ***********************************************************************
 * 	目のアニメパターン
 ***********************************************************************
 */
/* 全体の目のパターン数 */
enum {
    M_PLAYER_EYE_TX_PATTERN1,
    M_PLAYER_EYE_TX_PATTERN2,
    M_PLAYER_EYE_TX_PATTERN3,
    M_PLAYER_EYE_TX_PATTERN4,
    M_PLAYER_EYE_TX_PATTERN5,
    M_PLAYER_EYE_TX_PATTERN6,
    M_PLAYER_EYE_TX_PATTERN7,
    M_PLAYER_EYE_TX_PATTERN8,

    TOTAL_EYE_TX_PATTERN_M_PLAYER
};

/* 通常時の目のパターン数 */
enum {
    M_PLAYER_EYE_TX_NORMAL_PATTERN1,
    M_PLAYER_EYE_TX_NORMAL_PATTERN2,
    M_PLAYER_EYE_TX_NORMAL_PATTERN3,
    M_PLAYER_EYE_TX_NORMAL_PATTERN4,
    M_PLAYER_EYE_TX_NORMAL_PATTERN5,
    M_PLAYER_EYE_TX_NORMAL_PATTERN6,
    M_PLAYER_EYE_TX_NORMAL_PATTERN7,
    M_PLAYER_EYE_TX_NORMAL_PATTERN8,

    TOTAL_EYE_TX_NORMAL_PATTERN_M_PLAYER
};


/* まばたきのタイミング制御 */
#define M_PLAYER_WINK_MAX_CONTINUE		(3)
#define M_PLAYER_WINK_MIN_FRAME_I		(1*M_SPD_1SEC_FRAME)
#define M_PLAYER_WINK_BETWEEN_FRAME_I		(2*M_SPD_1SEC_FRAME)

/* 目のパターン別名 */
#define M_PLAYER_EYE_TX_PATTERN_NORMAL		M_PLAYER_EYE_TX_PATTERN1
#define M_PLAYER_EYE_TX_PATTERN_ANGRY 		M_PLAYER_EYE_TX_PATTERN4
#define M_PLAYER_EYE_TX_PATTERN_TROUBLE		M_PLAYER_EYE_TX_PATTERN4

/*
 ***********************************************************************
 * 	口のアニメパターン
 ***********************************************************************
 */
/* 口のパターン数 */
enum {
    M_PLAYER_MOUTH_TX_PATTERN1,
    M_PLAYER_MOUTH_TX_PATTERN2,
    M_PLAYER_MOUTH_TX_PATTERN3,
    M_PLAYER_MOUTH_TX_PATTERN4,
    M_PLAYER_MOUTH_TX_PATTERN5,
    M_PLAYER_MOUTH_TX_PATTERN6,

    TOTAL_MOUTH_TX_PATTERN_M_PLAYER
};

/* 口のパターン別名 */
#define M_PLAYER_MOUTH_TX_PATTERN_NORMAL	M_PLAYER_MOUTH_TX_PATTERN1
#define M_PLAYER_MOUTH_TX_PATTERN_ANGRY		M_PLAYER_MOUTH_TX_PATTERN4

/*
 *******************************************************************
 *	服のテクスチャに関するマクロ
 *******************************************************************
 */

/*
 *******************************************************************
 *	アイテムに関するマクロ
 *******************************************************************
 */
/* アイテム種類 */
enum {
    PLAYER_ITEM_KIND_AXE,						/* "斧" */
    PLAYER_ITEM_KIND_NET,						/* "網" */
    
    PLAYER_ITEM_KIND_UMBRELLA_START,
    PLAYER_ITEM_KIND_UMBRELLA00 = PLAYER_ITEM_KIND_UMBRELLA_START,	/* "傘" */
    PLAYER_ITEM_KIND_UMBRELLA01,					/* "傘" */
    PLAYER_ITEM_KIND_UMBRELLA02,					/* "傘" */
    PLAYER_ITEM_KIND_UMBRELLA03,					/* "傘" */
    PLAYER_ITEM_KIND_UMBRELLA04,					/* "傘" */
    PLAYER_ITEM_KIND_UMBRELLA05,					/* "傘" */
    PLAYER_ITEM_KIND_UMBRELLA06,					/* "傘" */
    PLAYER_ITEM_KIND_UMBRELLA07,					/* "傘" */
    PLAYER_ITEM_KIND_UMBRELLA08,					/* "傘" */
    PLAYER_ITEM_KIND_UMBRELLA09,					/* "傘" */
    PLAYER_ITEM_KIND_UMBRELLA10,					/* "傘" */
    PLAYER_ITEM_KIND_UMBRELLA11,					/* "傘" */
    PLAYER_ITEM_KIND_UMBRELLA12,					/* "傘" */
    PLAYER_ITEM_KIND_UMBRELLA13,					/* "傘" */
    PLAYER_ITEM_KIND_UMBRELLA14,					/* "傘" */
    PLAYER_ITEM_KIND_UMBRELLA15,					/* "傘" */
    PLAYER_ITEM_KIND_UMBRELLA16,					/* "傘" */
    PLAYER_ITEM_KIND_UMBRELLA17,					/* "傘" */
    PLAYER_ITEM_KIND_UMBRELLA18,					/* "傘" */
    PLAYER_ITEM_KIND_UMBRELLA19,					/* "傘" */
    PLAYER_ITEM_KIND_UMBRELLA20,					/* "傘" */
    PLAYER_ITEM_KIND_UMBRELLA21,					/* "傘" */
    PLAYER_ITEM_KIND_UMBRELLA22,					/* "傘" */
    PLAYER_ITEM_KIND_UMBRELLA23,					/* "傘" */
    PLAYER_ITEM_KIND_UMBRELLA24,					/* "傘" */
    PLAYER_ITEM_KIND_UMBRELLA25,					/* "傘" */
    PLAYER_ITEM_KIND_UMBRELLA26,					/* "傘" */
    PLAYER_ITEM_KIND_UMBRELLA27,					/* "傘" */
    PLAYER_ITEM_KIND_UMBRELLA28,					/* "傘" */
    PLAYER_ITEM_KIND_UMBRELLA29,					/* "傘" */
    PLAYER_ITEM_KIND_UMBRELLA30,					/* "傘" */
    PLAYER_ITEM_KIND_UMBRELLA31,					/* "傘" */
    PLAYER_ITEM_KIND_UMBRELLA_END,
    
    PLAYER_ITEM_KIND_ROD = PLAYER_ITEM_KIND_UMBRELLA_END,		/* "釣竿" */
    PLAYER_ITEM_KIND_SCOOP,						/* "スコップ" */
    
    TOTAL_PLAYER_ITEM_KIND
};

/* 傘の種類合計 */
#define TOTAL_ITEM_KIND_UMBRELLA_PLAYER	(PLAYER_ITEM_KIND_UMBRELLA_END - PLAYER_ITEM_KIND_UMBRELLA_START)
/* アイテムの種類が傘か？ */
#define M_PLAYER_CHECK_ITEM_KIND_UMBRELLA(item_kind)	\
	((PLAYER_ITEM_KIND_UMBRELLA_START <= (item_kind)) && ((item_kind) < PLAYER_ITEM_KIND_UMBRELLA_END))


/* アイテムメインモード */
enum {
    PLAYER_ITEM_MAIN_NONE,		/* 何も持ってない */
    PLAYER_ITEM_MAIN_AXE_NORMAL,	/* 斧通常 */
    PLAYER_ITEM_MAIN_NET_NORMAL,	/* 網通常 */
    PLAYER_ITEM_MAIN_NET_SWING,		/* 網振り中 */
    PLAYER_ITEM_MAIN_NET_STOP,		/* 網止め中 */
    PLAYER_ITEM_MAIN_NET_TUMBLE,	/* 網転ぶ */
    PLAYER_ITEM_MAIN_NET_TUMBLE_GETUP,	/* 網起き上がる(転ぶから) */
    PLAYER_ITEM_MAIN_NET_PULL,		/* 網引き寄せる */
    PLAYER_ITEM_MAIN_NET_PUTAWAY,	/* 網捕まえた物をしまう */
    PLAYER_ITEM_MAIN_NET_COMPLETE_BOOK,	/* 網虫図鑑完成 */
    PLAYER_ITEM_MAIN_UMBRELLA_NORMAL,	/* 傘通常 */
    PLAYER_ITEM_MAIN_ROD_NORMAL,	/* 釣竿通常 */
    PLAYER_ITEM_MAIN_ROD_READY,		/* 釣竿構え */
    PLAYER_ITEM_MAIN_ROD_CAST,		/* 釣竿投げる */
    PLAYER_ITEM_MAIN_ROD_AIR,		/* 釣竿素振り */
    PLAYER_ITEM_MAIN_ROD_RELAX,		/* 釣竿当り待ち */
    PLAYER_ITEM_MAIN_ROD_COLLECT,	/* 釣竿回収 */
    PLAYER_ITEM_MAIN_ROD_VIB,		/* 釣竿当り */
    PLAYER_ITEM_MAIN_ROD_FLY,		/* 釣竿つり上げ */
    PLAYER_ITEM_MAIN_ROD_PUTAWAY,	/* 釣った獲物をしまう */
    PLAYER_ITEM_MAIN_SCOOP_NORMAL,	/* スコップ通常 */
    
    TOTAL_PLAYER_ITEM_MAIN
};

/*
 *******************************************************************
 *	家具移動に関するマクロ
 *******************************************************************
 */
enum {
    M_PLAYER_HOLD_ORDER_CANCEL,
    M_PLAYER_HOLD_ORDER_KEEP,
    M_PLAYER_HOLD_ORDER_PUSH,
    M_PLAYER_HOLD_ORDER_PULL,
    M_PLAYER_HOLD_ORDER_RIGHT_ROTATE,
    M_PLAYER_HOLD_ORDER_LEFT_ROTATE,
    M_PLAYER_HOLD_ORDER_DOUBLE_OPEN,
    M_PLAYER_HOLD_ORDER_SINGLE_OPEN,
    M_PLAYER_HOLD_ORDER_DRAWER_OPEN,
    M_PLAYER_HOLD_ORDER_LITTLE_PUSH,
    M_PLAYER_HOLD_ORDER_LITTLE_PULL,
    
    TOTAL_HOLD_ORDER_M_PLAYER
};

/*
 *******************************************************************
 *	ベッド移動に関するマクロ
 *******************************************************************
 */
enum {
    M_PLAYER_BED_ORDER_NONE,	/* 移動不可 */
    M_PLAYER_BED_ORDER_ROLL,	/* 寝返り移動可能 */
    M_PLAYER_BED_ORDER_OUT,	/* 脱出可能 */
    
    TOTAL_BED_ORDER_M_PLAYER
};

/*
 *******************************************************************
 *	プレイヤーの運命に関するマクロ
 *******************************************************************
 */
enum {
    M_PLAYER_DESTINY_NORMAL,	/* 普通 */
    M_PLAYER_DESTINY_POPULAR,	/* ラブラブ */
    M_PLAYER_DESTINY_UNPOPULAR,	/* 不人気 */
    M_PLAYER_DESTINY_UNLUCKY,	/* アンラッキー */
    M_PLAYER_DESTINY_LUCKY_FOR_MONEY,	/* 金運アップ */
    M_PLAYER_DESTINY_LUCKY_FOR_GOODS,	/* 物運アップ */
    
    TOTAL_DESTINY_M_PLAYER
};

/*
 *******************************************************************
 *	プレイヤーのデモの命令
 *******************************************************************
 */
enum {
    M_PLAYER_DEMO_ORDER_WAIT,			/* 棒立ち */
    M_PLAYER_DEMO_ORDER_MOVE,			/* 移動 */
    M_PLAYER_DEMO_ORDER_GETON_TRAIN,		/* 汽車に乗る(デモ用) */
    M_PLAYER_DEMO_ORDER_GETOFF_TRAIN,		/* 汽車から降りる(デモ用) */
    
    TOTAL_DEMO_ORDER_M_PLAYER
};

/*
 *******************************************************************
 *	デモの命令配列の何番を何に使用するか
 *******************************************************************
 */
enum {
    M_PLAYER_DEMO_ORDER_INDEX_EFFECT_ORDER,		/* デモからの感情エフェクト命令 */
    M_PLAYER_DEMO_ORDER_INDEX_ORDER,			/* デモからの命令 */
    M_PLAYER_DEMO_ORDER_INDEX_POSITION_X,		/* デモからの位置命令Ｘ */
    M_PLAYER_DEMO_ORDER_INDEX_POSITION_Y,		/* デモからの位置命令Ｙ */
    M_PLAYER_DEMO_ORDER_INDEX_POSITION_Z,		/* デモからの位置命令Ｚ */
    M_PLAYER_DEMO_ORDER_INDEX_CHANGE_ANGLE_Y,		/* デモからのＹ角度変更命令 */
    M_PLAYER_DEMO_ORDER_INDEX_ANGLE_Y,			/* デモからのＹ角度命令 */
    M_PLAYER_DEMO_ORDER_INDEX_MOVE_SPEEDF,		/* 移動速度命令 */
    M_PLAYER_DEMO_ORDER_INDEX_CONTINUE_WALK,		/* 歩きで目的地に着いても棒立ちにならない */
    M_PLAYER_DEMO_ORDER_INDEX_GOAL_WALK,		/* 歩きで目的地に着いた */
    
    TOTAL_DEMO_ORDER_INDEX_M_PLAYER
};


/*
 *******************************************************************
 *	プレイヤーが網で捕まえる物のタイプ
 *******************************************************************
 */
enum {
    M_PLAYER_NET_CATCH_TYPE_INSECT,	/* 昆虫("ACTOR"タイプの領域は持ってない) */
    M_PLAYER_NET_CATCH_TYPE_DUMMY,	/* ダミー(後からすり替える) */
    
    TOTAL_NET_CATCH_TYPE_M_PLAYER
};

/*
 *******************************************************************
 *	プレイヤーが逃がす物のタイプ
 *******************************************************************
 */
enum {
    M_PLAYER_RELEASE_CREATURE_TYPE_INSECT,	/* 昆虫("ACTOR"タイプの領域は持ってない) */
    M_PLAYER_RELEASE_CREATURE_TYPE_GYOEI,	/* 魚("ACTOR"タイプの領域は持ってない) */
    
    TOTAL_RELEASE_CREATURE_TYPE_M_PLAYER
};

/*
 *******************************************************************
 *	プレイヤーが開くドアのタイプ
 *******************************************************************
 */
enum {
    M_PLAYER_OPEN_DOOR_TYPE_SINGLE_OPEN,	/* 片開き */
    M_PLAYER_OPEN_DOOR_TYPE_AUTO_OPEN,		/* 自動ドア */
    
    TOTAL_OPEN_DOOR_TYPE_M_PLAYER
};

/*
 *******************************************************************
 *	プレイヤーが影のタイプ
 *******************************************************************
 */
enum {
    M_PLAYER_SHADOW_TYPE_NORMAL,		/* 通常 */
    M_PLAYER_SHADOW_TYPE_SET_WORLD_POS_XYZ,	/* ＸＹＺ座標を"world.position"に指定 */
    M_PLAYER_SHADOW_TYPE_SET_ANIME_POS_XYZ,	/* ＸＹＺ座標をアニメーションの位置に指定 */
    M_PLAYER_SHADOW_TYPE_NONE,			/* 影無し */
    
    TOTAL_SHADOW_TYPE_M_PLAYER
};

/*
 *******************************************************************
 *	プレイヤーが斧を振った時の結果
 *******************************************************************
 */
enum {
    M_PLAYER_AXE_RESULT_TYPE_AIR,	/* 空振り */
    M_PLAYER_AXE_RESULT_TYPE_REFLECT,	/* 弾き返す */
    M_PLAYER_AXE_RESULT_TYPE_CUT,	/* 切る */
    
    TOTAL_AXE_RESULT_TYPE_M_PLAYER
};

/*
 *******************************************************************
 *	プレイヤーの状態によって番地を表示出来る出来ないの種類
 *******************************************************************
 */
enum {
    M_PLAYER_ABLE_ADDRESS_TYPE1,	/* 立ち止まっている等	*/
    M_PLAYER_UNABLE_ADDRESS_TYPE1,	/* 移動している等	*/
    M_PLAYER_UNABLE_ADDRESS_TYPE2,	/* 会話している等	*/
    M_PLAYER_UNABLE_ADDRESS_TYPE3,	/* 網をかまえる		*/

    TOTAL_DISPLAY_ADDRESS_M_PLAYER
};

/*
 *******************************************************************
 *	プレイヤーのアイテム装備可能状態
 *******************************************************************
 */
enum {
    M_PLAYER_ALL_ABLE_ITEM_HAND,	/* 全て装備可能 */
    M_PLAYER_UMBRELLA_ABLE_ITEM_HAND,	/* 傘のみ装備可能 */
    M_PLAYER_NONE1_ABLE_ITEM_HAND,	/* 場合によっては装備可能 */
    M_PLAYER_NONE2_ABLE_ITEM_HAND,	/* 絶対に装備不可能 */
    
    TOTAL_ABLE_ITEM_HAND_M_PLAYER
};

/*
 *******************************************************************
 *	プレイヤーからＢＧＭのボリュームを設定するモード
 *******************************************************************
 */
enum {
    M_PLAYER_BGM_VOLUME_MODE_RESET,	/* 通常状態 */
    M_PLAYER_BGM_VOLUME_MODE_INSECT,	/* 虫取り状態 */
    
    TOTAL_BGM_VOLUME_MODE_M_PLAYER
};

/*
 *******************************************************************
 *	プレイヤーの蜂に対する状態
 *******************************************************************
 */
enum {
    M_PLAYER_STATUS_FOR_BEE_WAIT,		/* プレイヤーを刺してはいけない */
    M_PLAYER_STATUS_FOR_BEE_ABLE_ATTACK,	/* プレイヤーを攻撃可能 */
    M_PLAYER_STATUS_FOR_BEE_ENTER,		/* プレイヤーが建物に入った */
    
    TOTAL_STATUS_FOR_BEE_M_PLAYER
};

/*
 *******************************************************************
 *	プレイヤーの借金返済完了デモタイプ
 *******************************************************************
 */
enum {
    M_PLAYER_COMPLETE_PAYMENT_DEMO_NONE,	/* なし */

    M_PLAYER_COMPLETE_PAYMENT_DEMO_ARBEIT,	/* アルバイト終了 */
    M_PLAYER_COMPLETE_PAYMENT_DEMO_HOUSE0,	/* 家のローン支払い終了 */
    
    TOTAL_COMPLETE_PAYMENT_DEMO_TYPE_M_PLAYER
};

/*
 *******************************************************************
 *	エミュレターの読み込み失敗メッセージ表示命令
 *******************************************************************
 */
enum {
    M_PLAYER_SET_MSG_FAIL_EMU_NONE,	/* なし */
    M_PLAYER_SET_MSG_FAIL_EMU_TYPE0,	/* タイプ０ */
    
    TOTAL_SET_MSG_FAIL_EMU_TYPE_M_PLAYER
};

/*
 *******************************************************************
 *	プレイヤーが"開くドアのタイプ"と"ゲーム再開時"かの判別する値
 *******************************************************************
 */
/* 使用するビット */
#define M_PLAYER_ARG_TYPE_BIT_OPEN				7

/* 単に出てくるだけ用 */
#define M_PLAYER_ARG_TYPE_NO_OPEN				0
#define M_PLAYER_GET_ARG_TYPE_NO_OPEN(arg_data)			\
		(((arg_data) & (~M_PLAYER_ARG_TYPE_BIT_OPEN)) | M_PLAYER_ARG_TYPE_NO_OPEN)

/* ゲーム再開時に自分の家から出てくるデモ用 */
#define M_PLAYER_ARG_TYPE_SINGLE_OPEN_AND_STARTDEMO		1
#define M_PLAYER_GET_ARG_TYPE_SINGLE_OPEN_AND_STARTDEMO(arg_data)	\
		(((arg_data) & (~M_PLAYER_ARG_TYPE_BIT_OPEN)) | M_PLAYER_ARG_TYPE_SINGLE_OPEN_AND_STARTDEMO)
#define M_PLAYER_CHECK_ARG_TYPE_SINGLE_OPEN_AND_STARTDEMO(arg_data)	\
		((((int)(arg_data)) & M_PLAYER_ARG_TYPE_BIT_OPEN) == M_PLAYER_ARG_TYPE_SINGLE_OPEN_AND_STARTDEMO)
/* 型開きのドアから出てくる用 */
#define M_PLAYER_ARG_TYPE_SINGLE_OPEN_AND_NO_STARTDEMO		2
#define M_PLAYER_GET_ARG_TYPE_SINGLE_OPEN_AND_NO_STARTDEMO(arg_data)	\
		(((arg_data) & (~M_PLAYER_ARG_TYPE_BIT_OPEN)) | M_PLAYER_ARG_TYPE_SINGLE_OPEN_AND_NO_STARTDEMO)
#define M_PLAYER_CHECK_ARG_TYPE_SINGLE_OPEN_AND_NO_STARTDEMO(arg_data)	\
		((((int)(arg_data)) & M_PLAYER_ARG_TYPE_BIT_OPEN) == M_PLAYER_ARG_TYPE_SINGLE_OPEN_AND_NO_STARTDEMO)
/* 自動のドアから出てくる用 */
#define M_PLAYER_ARG_TYPE_AUTO_OPEN				3
#define M_PLAYER_GET_ARG_TYPE_AUTO_OPEN(arg_data)			\
		(((arg_data) & (~M_PLAYER_ARG_TYPE_BIT_OPEN)) | M_PLAYER_ARG_TYPE_AUTO_OPEN)
#define M_PLAYER_CHECK_ARG_TYPE_AUTO_OPEN(arg_data)			\
		((((int)(arg_data)) & M_PLAYER_ARG_TYPE_BIT_OPEN) == M_PLAYER_ARG_TYPE_AUTO_OPEN)

/* 表示しない用 */
#define M_PLAYER_ARG_TYPE_HIDE					4
#define M_PLAYER_GET_ARG_TYPE_HIDE(arg_data)			\
		(((arg_data) & (~M_PLAYER_ARG_TYPE_BIT_OPEN)) | M_PLAYER_ARG_TYPE_HIDE)
#define M_PLAYER_CHECK_ARG_TYPE_HIDE(arg_data)			\
		((((int)(arg_data)) & M_PLAYER_ARG_TYPE_BIT_OPEN) == M_PLAYER_ARG_TYPE_HIDE)


/*
 *******************************************************************
 *	何の要素を強制的にセットしたか（プレイヤーの角度と座標）
 *******************************************************************
 */
#define M_PLAYER_SET_FORCE_POSITION_ANGLE_NONE	(0)	/* 強制移動無し */
#define M_PLAYER_SET_FORCE_POSITION_X		(1<<1)	/* 強制移動位置Ｘ */
#define M_PLAYER_SET_FORCE_POSITION_Y		(1<<2)	/* 強制移動位置Ｙ */
#define M_PLAYER_SET_FORCE_POSITION_Z		(1<<3)	/* 強制移動位置Ｚ */
#define M_PLAYER_SET_FORCE_ANGLE_X		(1<<4)	/* 強制移動角度Ｘ */
#define M_PLAYER_SET_FORCE_ANGLE_Y		(1<<5)	/* 強制移動角度Ｙ */
#define M_PLAYER_SET_FORCE_ANGLE_Z		(1<<6)	/* 強制移動角度Ｚ */

/*
 *******************************************************************
 *	プレイヤーのテクスチャーアニメーションの何を初期化するか
 *******************************************************************
 */
#define M_PLAYER_SETUP_TEXTURE_ANIMATION_NONE	(0)	/* 初期化無し（もしくは各メインで） */
#define M_PLAYER_SETUP_TEXTURE_ANIMATION_EYE	(1<<1)	/* 目を初期化（もしくは各メインで） */
#define M_PLAYER_SETUP_TEXTURE_ANIMATION_MOUTH	(1<<2)	/* 口を初期化（もしくは各メインで） */


#ifdef _LANGUAGE_C_PLUS_PLUS
} /* extern "C" */
#endif

#endif

/*** m_player.h end ***/
