/*
 ******************************************************************************
 *
 *	サブメニュー（オーバーレイ）
 *	$Id: m_submenu_ovl.h,v 1.2 2004/02/21 02:12:16 tong Exp $
 ******************************************************************************
 */
/*
 * $Log: m_submenu_ovl.h,v $
 * Revision 1.2  2004/02/21 02:12:16  tong
 * additional source related to 1M flash
 *
 * Revision 1.72  2001-02-03 17:03:39+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.71  2000-12-14 22:49:06+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.70  2000-12-11 22:22:21+09  umemiya
 * カタログウインドウ追加
 *
 * Revision 1.69  2000-11-06 14:55:29+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.68  2000-11-01 19:35:23+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.67  2000-10-30 17:08:41+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.66  2000-10-26 21:36:55+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.65  2000-10-24 14:47:38+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.64  2000-10-11 20:14:48+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.63  2000-10-07 20:33:07+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.62  2000-10-07 16:12:52+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.61  2000-10-03 22:55:12+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.60  2000-10-03 19:17:36+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.59  2000-09-26 22:27:33+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.58  2000-09-25 21:54:26+09  umemiya
 * コントローラパック手紙対応
 *
 * Revision 1.57  2000-09-25 15:23:12+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.56  2000-09-20 16:52:27+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.55  2000-09-14 18:45:44+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.54  2000-09-13 20:45:13+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.53  2000-09-13 17:42:44+09  umemiya
 * 自動メニュー閉じ追加
 *
 * Revision 1.52  2000-09-12 13:39:12+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.51  2000-09-11 17:42:39+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.50  2000-09-06 18:16:00+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.49  2000-09-06 11:52:16+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.48  2000-09-05 18:25:04+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.47  2000-09-04 18:11:48+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.46  2000-09-01 16:39:30+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.45  2000-08-31 16:57:54+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.44  2000-08-30 18:11:04+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.43  2000-08-25 13:52:50+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.42  2000-08-24 15:17:19+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.41  2000-08-11 14:27:14+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.40  2000-08-01 17:08:03+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.39  2000-07-27 16:45:31+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.38  2000-07-12 20:40:31+09  umemiya
 * 文字列編集操作関係の変更
 *
 * Revision 1.37  2000-07-03 16:22:38+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.36  2000-07-03 13:40:24+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.35  2000-06-20 17:13:44+09  matutani
 * mSM_PRERENDER_SIZE_TYPE2を追加、サブメニューのキャラ表示を128x128に
 * 変更に伴う対応
 *
 * Revision 1.34  2000-06-15 18:09:31+09  umemiya
 * プレイヤーアニメを合成
 *
 * Revision 1.33  2000-06-14 20:13:32+09  umemiya
 * 装備変更時のプレイヤーアニメ対応
 *
 * Revision 1.32  2000-06-14 13:53:18+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.31  2000-06-13 20:44:51+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.30  2000-06-09 16:01:15+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.29  2000-06-08 17:20:58+09  umemiya
 * プレイヤーにアイテム持たせる
 *
 * Revision 1.28  2000-05-29 18:06:56+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.27  2000-05-25 17:39:33+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.26  2000-05-25 14:41:57+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.25  2000-05-23 15:40:10+09  umemiya
 * 外部変数削除
 *
 * Revision 1.24  2000-05-17 19:19:15+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.23  2000-05-16 17:16:58+09  umemiya
 * *** empty log message ***
 *
 * Revision 1.22  2000-05-10 18:06:04+09  umemiya
 * 楽譜メニュー追加
 *
 */

#ifndef	INCLUDE_M_SUBMENU_OVL_H
#define	INCLUDE_M_SUBMENU_OVL_H

#ifdef _LANGUAGE_C_PLUS_PLUS
extern "C" {
#endif	/* _LANGUAGE_C_PLUS_PLUS */

#include "m_submenu.h"
#include "m_submenu_h.h"

#include "m_submenu_ovl_h.h"

#include "m_basic.h"
#include "m_printfcolor.h"
#include "assert64.h"		/* assert	*/
#include "sleep.h"		/* msleep */
#include "m_play.h"
#include "m_player_shape.h"
#include "m_player_lib.h"	/* get_player_actor */
#include "m_malloc.h"		/* zelda_malloc zelda_free */
#include "m_item_name.h"
#include "c_keyframe.h"
#include "m_font.h"
#include "m_name_table.h"
#include "m_mail.h"
#include "m_field_info.h"
#include "ac_haniwa.h"


#include "m_tag_ovl_h.h"
#include "m_hand_ovl_h.h"
#include "m_haniwaPortrait_ovl_h.h"
#include "m_inventory_ovl_h.h"
#include "m_editor_ovl_h.h"
#include "m_board_ovl_h.h"
#include "m_address_ovl_h.h"
#include "m_mailbox_ovl_h.h"
#include "m_haniwa_ovl_h.h"
#include "m_timeIn_ovl_h.h"
#include "m_editEndChk_ovl_h.h"
#include "m_warning_ovl_h.h"
#include "m_repay_ovl_h.h"
#include "m_mscore_ovl_h.h"
#include "m_map_ovl_h.h"
#include "m_notice_ovl_h.h"
#include "m_birthday_ovl_h.h"
#include "m_cpmail_ovl_h.h"
#include "m_cpwarning_ovl_h.h"
#include "m_cpedit_ovl_h.h"
#include "m_catalog_ovl_h.h"

/*
 ************************************************
 *						*
 *		定数宣言			*
 *						*
 ************************************************
 */
/*
 *	メニュー処理
 */
enum {
    mSM_ovl_Move_e,		/* メニュー移動		*/
    mSM_ovl_Play_e,		/* メニュー処理		*/
    mSM_ovl_Wait_e,		/* 待ち処理		*/
    mSM_ovl_Obey_e,		/* 従属処理		*/
    mSM_ovl_End_e,		/* 終わり		*/

    mSM_ovl_ProcStatus_Num
};

/*
 *	メニューの移動方向
 *	（１ビット目:出ていくタイプか入ってくるタイプかみる）
 *	（２ビット目:座標の正負方向）
 *	（３ビット目:XYの区別）
 *	この順番を変更する場合は
 *	mSM_move_Move, mSM_move_chg_base の変更が必要
 */
enum {
    mSM_Right_Out_mv_e,
    mSM_Right_In_mv_e,
    mSM_Left_Out_mv_e,
    mSM_Left_In_mv_e,
    mSM_Head_Out_mv_e,
    mSM_Head_In_mv_e,
    mSM_Foot_Out_mv_e,
    mSM_Foot_In_mv_e,
    mSM_Move_drt_Num
};

/*
 *	絵を等倍で出す時のＺ座標
 */
#define	mSM_DISP_NORM_Z		(140.0f)

/*
 *	絵を等倍で表示するためのスケール
 */
#define	mSM_DISP_SCALE		M_FONT_SCALE_COORDINATE

#define mSM_AUTO_CLOSE_TIME	(15 * 60 * 30)


/*
 *	文字コード
 */
#define	MOJI_SP		MOJI_SPACE1
#define	MOJI_QQ		MOJI_QUESTION
#define	MOJI_OK		MOJI_OWARIYAMAKAKKO
#define	MOJI_RT		MOJI_RETURN
#define	MOJI_CL		MOJI_COLON
#define	MOJI_xyu	MOJI_LITTLEyu
#define	MOJI_xyo	MOJI_LITTLEyo
#define	MOJI_xtu	MOJI_LITTLEtu
#define	MOJI_XII	MOJI_LITTLEII
#define	MOJI_XTU	MOJI_LITTLETU
#define	MOJI_HY		MOJI_HYPHEN
#define	MOJI_RT		MOJI_RETURN
#define	MOJI_00		MOJI_0
#define	MOJI_11		MOJI_1
#define	MOJI_33		MOJI_3

/*
 *	プリレンダーサイズタイプ
 */
enum {
    mSM_PRERENDER_SIZE_HAND,		/* ハンド用（32*32） */
    mSM_PRERENDER_SIZE_HANIWA,		/* ハニワ用（64*64） */
    mSM_PRERENDER_SIZE_PLAYER,		/* プレイヤ用（128*128） */
    mSM_PRERENDER_SIZE_ALL_TYPES
};

/*
 *	プリレンダー描画タイプ
 */
enum {
    mSM_PRERENDER_SHAPE_DRAW,
    mSM_PRERENDER_SHADOW_DRAW,

    mSM_PRERENDER_DRAW_ALL_TYPES
};

/*
 *	読み込んだプログラムセグメントの情報
 *
 *	inventory tag hand board editor
 *	editEndChk warning address
 */
#define	mSM_PG_DLFTBL_MAX	(8)

/* エディタの入力項目数 */
#define	mSM_EDIT_CONTENTS_NUM		(3)

/* データ長を得る */
#define mSM_GET_DATA_LENGTH(data, type)	(sizeof(data) / sizeof(type))
/* コントローラパック手紙時のアイテムウインドウ位置 */
#define mSM_IV_CPMAIL_OFFSET_X		(-120.0f - 35.0f)

/*
 ************************************************
 *						*
 *		構造体宣言			*
 *						*
 ************************************************
 */
/*
 *	文字列基本構造体
 */
typedef struct {
    unchar	*str_data;
    int		str_len;
} mSM_Basic_Word_c;

/*
 *	カラーデータ構造体
 */
typedef struct {
    int	r;
    int	g;
    int	b;

} mSM_Col_c;

/*
 *	データＤＭＡ転送用データ
 */
typedef struct {
    u32		SegmentRomStart;
    u32		SegmentRomEnd;

} mSM_DT_DLFTBL_c;

/*
 *	プログラムセグメントオーバーレイ用
 */
typedef struct {
    u32		SegmentRomStart;
    u32		SegmentRomEnd;
    char	*SegmentStart;
    char	*SegmentEnd;
    SMENU_CTFC	ct_proc;
    SMENU_DTFC	dt_proc;
    SMENU_SPFC	sp_proc;
    int		ovl_flg;

} mSM_PG_DLFTBL_c;

enum {
    mIV_PL_MAIN_ANM_WALK_e,
    mIV_PL_MAIN_ANM_TOOL_CHANGE_e,
    mIV_PL_MAIN_ANM_CLOTH_CHANGE_e,
    mIV_PL_MAIN_ANM_EAT_e,
    mIV_PL_MAIN_ANM_END
};

/*
 *	セグメント関係
 */
typedef struct {
    char	*start_segment;		/* ＤＭＡ転送の先頭 */

    /* アイテム */
    int		item_flg;		/* ＤＭＡ終了フラグ */
    char	*item_segment;		/* セグメントアドレス */

    /* タグ */
    char	*tag_segment;		/* セグメントアドレス */

    /* ハンド君 */
    char	*hand_segment;		/* セグメントアドレス */

    /* プレイヤー */
    short	pl_main_anime_id;	/* アニメＩＤ */
    short	pl_item_anime_id;	/* アイテム用アニメＩＤ（合成にも使う） */
    short	change_pl_anime;	/* アニメ変更を通達 */
    short	pl_anime_wait_time;	/* 変更アニメ終了までの待機時間 */
    short	pl_item_seg_num;	/* 現在使用中のセグメントナンバー */
    char	*pl_shape_segment;	/* シェイプ用Ｓアドレス */
    char	*pl_main_anime_segment;	/* アニメ用Ｓアドレス */
    char	*pl_com_anime_segment;	/* アニメ用Ｓアドレス */
    char	*pl_item_anime_segment;	/* アイテムアニメ用Ｓアドレス */
    char	*pl_item_shape_segment[2];	/* アイテムシェイプ用Ｓアドレス */
    short	umbrella_num[2];		/* 傘ナンバー */
    char	*pl_eff_segment;	/* 効果Ｓアドレス */
    u32		pl_eff_offset;
    signed char pl_part_tbl[M_PLAYER_BOY_TOTAL_JOINT_NUM+1];

    /* ハニワ君 */
    char	*haniwaPortrait_segment;/* セグメントアドレス */

    /* 読み込んだプログラムセグメントの情報 */
    int		pg_dlftbl_sum;
    mSM_PG_DLFTBL_c	*pg_dlftbl[mSM_PG_DLFTBL_MAX];

} mSM_Seg_c;

/*
 *	オフセットアドレス関係
 */
typedef struct {
    u32		sub;			/* m_submenu_ovl.c用 */
    u32		iv;			/* m_inventory_ovl.c用 */

} mSM_Offset_c;

/*
 *	各種メニュー用クラス設定
 */
typedef struct {
    int		type;			/* メニュータイプ */

    int		proc_status;		/* 処理状態 */
    int		before_menu_type;	/* 前のメニュータイプ */
    SMENU_MVFC	before_move_func;	/* 動作処理 */
    SMENU_DRFC	before_draw_func;	/* 描画処理 */
    int		next_menu_type;		/* 次のメニュータイプ */
#if 0
    SMENU_MVFC	next_move_func;		/* 動作処理 */
    SMENU_DRFC	next_draw_func;		/* 描画処理 */
#endif
    float	pos[XY];		/* ポジション */
    float	spd[XY];		/* 移動スピード */

    char	*segment;		/* データセグメント */

    int		open_flg;		/* メニュー開いてるかフラグ */
    int		next_proc_status;	/* 次の処理状態 */
    int		mv_drt;			/* メニューの移動する方向 */
    int		work0;			/* 開いた理由（主にInventoryで使用） */
    int		work1;			/* その他（詳しくは m_submenu.h に記載） */
    void	*work2;			/* その他（詳しくは m_submenu.h に記載） */
    int		work3;			/* その他（詳しくは m_submenu.h に記載） */

} mSM_Menu_c;

/*
 *	制御用クラス設定
 */
typedef	void	(*HAND_MVFC)(Submenu_c *);
typedef	void	(*HAND_DRFC)(Submenu_c *, GAME *);
typedef void	(*TAG_MVFC)(Submenu_c *, mSM_Menu_c *);
typedef void	(*TAG_DRFC)(Submenu_c *, GAME *, int);

typedef struct {
    SMENU_MVFC	move_func;		/* 動作処理 */
    SMENU_DRFC	draw_func;		/* 描画処理 */
    HAND_MVFC	hand_move_func;
    HAND_DRFC	hand_draw_func;
    TAG_MVFC	tag_move_func;
    TAG_DRFC	tag_draw_func;

    int		stick_release;		/* スティックによる入力リリース */
    unint	trigger;
    unint	old_trigger;
    short	repeat_tim;
    short	tex_mv_angl;		/* 下地テクスチャの移動角度 */
    float	tex_pos[XY];		/* 下地テクスチャの追加座標 */

    int		anime_flg;		/* アニメーションフラグ */

} mSM_Ctrl_c;

/*
 *	外部参照関数クラス
 */
/* 前のメニューに戻す設定処理 */
typedef void    (*mSM_RETURN_FUNC_t)(Submenu_c *submenu, mSM_Menu_c *menu);
#define mSM_RETURN_FUNC_GET(submenu)                    ((submenu)->ovl_variable->proc.proc00)
#define mSM_RETURN_FUNC_CALL(submenu, menu)  ((mSM_RETURN_FUNC_GET(submenu))(submenu, menu))

/* メニュー移動処理 */
typedef void    (*mSM_MOVE_MOVE_t)(Submenu_c *submenu, mSM_Menu_c *menu);
#define mSM_MOVE_MOVE_GET(submenu)		((submenu)->ovl_variable->proc.proc02)
#define mSM_MOVE_MOVE_CALL(submenu, menu)	((mSM_MOVE_MOVE_GET(submenu))(submenu, menu))

/* メニュー終了処理 */
typedef void    (*mSM_MOVE_END_t)(Submenu_c *submenu, mSM_Menu_c *menu);
#define mSM_MOVE_END_GET(submenu)		((submenu)->ovl_variable->proc.proc03)
#define mSM_MOVE_END_CALL(submenu, menu)	((mSM_MOVE_END_GET(submenu))(submenu, menu))

/* メニュー基本移動切替処理 */
typedef void	(*mSM_MOVE_CHG_BASE_t)(mSM_Menu_c *menu, int mv_drt);
#define mSM_MOVE_CHG_BASE_GET(submenu)		((submenu)->ovl_variable->proc.proc04)
#define mSM_MOVE_CHG_BASE_CALL(submenu, menu, mv_drt)	((mSM_MOVE_CHG_BASE_GET(submenu))(menu, mv_drt))

/* 文字用マトリックス設定 */
typedef void    (*mSM_SET_CHAR_MATRIX_t)(GRAPH *graph);
#define mSM_SET_CHAR_MATRIX_GET(submenu)                ((submenu)->ovl_variable->proc.proc10)
#define mSM_SET_CHAR_MATRIX_CALL(submenu, graph)        ((mSM_SET_CHAR_MATRIX_GET(submenu))(graph))

#if 0
/* プリレンダ準備 */
typedef void    (*mSM_PRERENDER_INIT_t)(Submenu_c *submenu, GRAPH *graph, PreRender_t *prerender, void *cbuf, int type);
#define mSM_PRERENDER_INIT_GET(submenu)           ((submenu)->ovl_variable->proc.proc11)
#define mSM_PRERENDER_INIT_CALL(submenu, graph, prerender, cbuf, type)   ((mSM_PRERENDER_INIT_GET(submenu))(submenu, graph, prerender, cbuf, type))
#endif
/* フレームバッファ内容を別領域にコピー、またはその逆 */
typedef void	(*mSM_CBUF_COPY_t)(GRAPH *graph, PreRender_t *this, int pos_x, int pos_y, int type);
#define mSM_CBUF_COPY_GET(submenu)		((submenu)->ovl_variable->proc.proc11)
#define mSM_CBUF_COPY_CALL(submenu, graph, this, pos_x, pos_y, type)	((mSM_CBUF_COPY_GET(submenu))(graph, this, pos_x, pos_y, type))

#if 0
/* 出来上がったプリレンダーをテクスチャーとして張る */
typedef void    (*mSM_DISPLAY_RGBA16B_t)(GRAPH *graph, void *addr, xyz_t *pos, int type, int draw);
#define mSM_DISPLAY_RGBA16B_GET(submenu)        ((submenu)->ovl_variable->proc.proc12)
#define mSM_DISPLAY_RGBA16B_CALL(submenu, graph, addr, pos, type, draw)   ((mSM_DISPLAY_RGBA16B_GET(submenu))(graph, addr, pos, type, draw))
#endif

/* にせバッファへの描画モード設定 */
typedef void    (*mSM_SET_DRAWMODE_t)(GRAPH *graph, PreRender_t *this, float eye_dist, float eye_height, short eye_angle);
#define mSM_SET_DRAWMODE_GET(submenu)   ((submenu)->ovl_variable->proc.proc13)
#define mSM_SET_DRAWMODE_CALL(submenu, graph, this, eye_dist, eye_height, eye_angle)   ((mSM_SET_DRAWMODE_GET(submenu))(graph, this, eye_dist, eye_height, eye_angle))

/* アイテム描画 */
typedef void    (*mSM_DRAW_ITEM_t)(GRAPH *graph, float posX, float posY, float scale, mAc_nfs_t itemNo, int present_flg, int color_flg, int anm_frame, int shadow_flg);
#define mSM_DRAW_ITEM_GET(submenu)      ((submenu)->ovl_variable->proc.proc14)
#define mSM_DRAW_ITEM_CALL(submenu, graph, posX, posY, scale, itemNo, present_flg, color_flg, anm_frame, shadow_flg)     ((mSM_DRAW_ITEM_GET(submenu))(graph, posX, posY, scale, itemNo, present_flg, color_flg, anm_frame, shadow_flg))

/* 手紙描画 */
typedef void	(*mSM_DRAW_MAIL_t)(GRAPH *graph, float posX, float posY, float scale, Mail_c *mail, int color_flg, int shadow_flg);
#define	mSM_DRAW_MAIL_GET(submenu)	((submenu)->ovl_variable->proc.proc15)
#define	mSM_DRAW_MAIL_CALL(submenu, graph, posX, posY, scale, mail, color_flg, shadow_flg)	((mSM_DRAW_MAIL_GET(submenu))(graph, posX, posY, scale, mail, color_flg, shadow_flg))

/* ビュー設定 */
typedef void	(*mSM_SETUP_VIEW_t)(Submenu_c *submenu, GRAPH *graph, int first_flg);
#define mSM_SETUP_VIEW_GET(submenu)	((submenu)->ovl_variable->proc.proc16)
#define mSM_SETUP_VIEW_CALL(submenu, graph, first_flg)	((mSM_SETUP_VIEW_GET(submenu))(submenu, graph, first_flg))

/*
 *	m_submenu_ovl_dma.c
 */
/* データＤＭＡ転送処理 */
typedef void	(*mSM_DMA_DATA_t)(Submenu_c *submenu, char **segment, mSM_DT_DLFTBL_c *tbl);
#define	mSM_DMA_DATA_GET(submenu)	((submenu)->ovl_variable->proc.proc20)
#define	mSM_DMA_DATA_CALL(submenu, segment, tbl)	((mSM_DMA_DATA_GET(submenu))(submenu, segment,tbl))


typedef struct {
    mSM_RETURN_FUNC_t		proc00;	/* mSM_return_func		*/
    mSM_MOVE_MOVE_t		proc02;	/* mSM_move_Move		*/
    mSM_MOVE_END_t		proc03;	/* mSM_move_End			*/
    mSM_MOVE_CHG_BASE_t		proc04;	/* mSM_move_chg_base		*/
    mSM_SET_CHAR_MATRIX_t	proc10;	/* mSM_set_char_matrix		*/
    mSM_CBUF_COPY_t		proc11;	/* mSM_cbuf_copy		*/
#if 0
    mSM_DISPLAY_RGBA16B_t	proc12;	/* mSM_display_rgba16b		*/
#endif
    mSM_SET_DRAWMODE_t		proc13;	/* mSM_set_drawMode		*/
    mSM_DRAW_ITEM_t		proc14;	/* mSM_draw_item		*/
    mSM_DRAW_MAIL_t		proc15;	/* mSM_draw_mail		*/
    mSM_SETUP_VIEW_t		proc16;	/* mSM_setup_view		*/
    mSM_DMA_DATA_t		proc20;	/* mSM_dma_data			*/

} mSM_Proc_c;

/*
 *	プリレンダー描画サイズ
 */
#define mSM_PRE_BUF_WD	(128)
#define mSM_PRE_BUF_HT	(128)

#define mSM_PLAYER_WD	(128)
#define mSM_PLAYER_HT	(128)

#define	mSM_HANIWA_WD	(64)
#define	mSM_HANIWA_HT	(64)

#define	mSM_HAND_WD	(32)
#define	mSM_HAND_HT	(32)

/*
 *
 *	オーバーレイ情報クラス設定
 *
 */
struct mSM_Ovl_s {
    unshort		pre_cbuf[mSM_PRE_BUF_WD * mSM_PRE_BUF_HT];
    unshort		pre_zbuf[mSM_PRE_BUF_WD * mSM_PRE_BUF_HT];

    mSM_Seg_c		seg;			/* セグメント関係 */

    mSM_Menu_c		menu[mSM_MenuType_Num];	/* それぞれのメニュー情報 */
    mSM_Ctrl_c		ctrl;			/* 制御関係 */

    mSM_Proc_c		proc;			/* 外部参照関数 */

    mTG_Ovl_c		*tag_ovl;
    mHD_Ovl_c		*hand_ovl;
    mHP_Ovl_c		*hp_ovl;
    mIV_Ovl_c		*inv_ovl;
    mED_Ovl_c		*edit_ovl;
    mBD_Ovl_c		*board_ovl;
    mAD_Ovl_c		*adrs_ovl;
    mMB_Ovl_c		*mail_ovl;
    mHW_Ovl_c		*haniwa_ovl;
    mTI_Ovl_c		*ti_ovl;
    mEE_Ovl_c		*ee_ovl;
    mWR_Ovl_c		*wr_ovl;
    mRP_Ovl_c		*rp_ovl;
    mMS_Ovl_c		*mscore_ovl;
    mMP_Ovl_c		*map_ovl;
    mNT_Ovl_c		*notice_ovl;
    mBR_Ovl_c		*birthday_ovl;
    mCM_Ovl_c		*cpmail_ovl;
    mCW_Ovl_c		*cpwarning_ovl;
    mCE_Ovl_c		*cpedit_ovl;
    mCL_Ovl_c		*catalog_ovl;

    unchar		hb_flg;
    unchar		le_flg;
    unchar		pad_c;
    unchar		pad_c2;

    int			auto_close_timer;

    Mtx			*projection;
};



/*
 ************************************************
 *						*
 *		外部参照関数			*
 *						*
 ************************************************
 */
/*
 *	初期設定処理
 */
extern void mSM_menu_ovl_init(Submenu_c *submenu);


#define mSM_FIX_AMB_R		(105)
#define mSM_FIX_AMB_G		(90)
#define mSM_FIX_AMB_B		(90)
#define mSM_FIX_DIF_R		(255)
#define mSM_FIX_DIF_G		(255)
#define mSM_FIX_DIF_B		(245)
#define mSM_FIX_DIF_X		(0)
#define mSM_FIX_DIF_Y		(60)
#define mSM_FIX_DIF_Z		(60)


#ifdef _LANGUAGE_C_PLUS_PLUS
} /* extern "C" */
#endif	/* _LANGUAGE_C_PLUS_PLUS */

#endif	/* INCLUDE_M_SUBMENU_OVL_H */


/*** m_submenu_ovl.h ***/

