/*
 ******************************************************************************
 *
 *	イベント管理ヘッダ
 *	$Id: m_event.h,v 1.1 2003/06/06 00:15:12 tong Exp $
 *
 ******************************************************************************
 */

#ifndef	__M_EVENT_H__
#define	__M_EVENT_H__

#if	defined(LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)

#ifdef	_LANGUAGE_C_PLUS_PLUS
extern "C" {
#endif


#include "m_field_make.h"

#include "m_private_id.h"
#include "m_weather_type.h"
    

#include "gfxprint.h"

/*
** -----------------------
**   オブジェクト
** -----------------------
*/
#define EV_RUMOR_MAX  (10)
/* メイン */
typedef struct _mori_event_  EVENT;
struct _mori_event_ {
    unsigned char  day, hour;                 /* 時間の変り目チェック用 */
    unsigned char  flag, update;
    unsigned char  month, year;
    short chg;
    izix  block;
    int  tmp[5];
};

#define EV_SPECIAL_KIND_INTERVAL (3)
#define EV_SPECIAL_KIND_NUM      (6)

/* status */
#define EV_STAT_ACTIVE     (short)(0x0001)
#define EV_STAT_STOP       (short)(0x0002)
#define EV_STAT_SHOW       (short)(0x0004)
#define EV_STAT_SOUND      (short)(0x0008)
#define EV_STAT_RUN        (short)(0x0010)
#define EV_STAT_ERROR      (short)(0x0020)
#define EV_STAT_TALK       (short)(0x0040)
#define EV_STAT_CHECK      (short)(0x0080)

/* セーブ */
#define EV_SAVE_NO_BLOCK    (-1)

#define EV_SAVE_AREA_NUM    (5)
#define EV_SAVE_AREA_SIZE   (40)

#define EV_COMMON_AREA_NUM  (5)
#define EV_COMMON_AREA_SIZE (EV_SAVE_AREA_SIZE)
#define EV_COMMON_PLACE_NUM (10)

#define EV_TITLE_START     (1)
#define EV_TITLE_END       (9)
#define EV_TITLE_RUN       (2)
#define EV_TITLE_NONE      (0)

#define EV_STD_OBJ_NO      (81)

/* スペシャルイベントの状態 */
#define EV_SPSTAT_STOP      (0)   /* なし   */
#define EV_SPSTAT_RESERVED  (1)   /* 予約済 */
#define EV_SPSTAT_SOON      (2)   /* 予定日 */
#define EV_SPSTAT_RUN       (3)   /* 実施中 */

/* イベント情報用ヘッダ */
typedef struct event_save_header {
    char  type;            /* イベントタイプ */
    char  id;              /* 一つのイベントが複数のエリアを持つ場合用 */
    unsigned short  year;  /* 日付 */   	
    struct { char  month, day; }  from, to;
} mEv_Head;

/* イベント用位置情報 */
typedef struct event_place_data {
    izix  block, unit;    /* 位置情報 */
    mAc_nfs_t  name;      /* オーナー情報 */
    short  flg;
} mEv_Place;

#define EV_PLACE_SAVED     (1)
#define EV_PLACE_FIXED     (2)
#define EV_PLACE_KEEP      (4)

/* 各イベント用セーブエリア */
typedef struct event_save_place {
    mEv_Head  h;        /* ヘッダ */
    mEv_Place  data;    /* データ */
} mEv_SavePlace;

/* 各イベント用セーブエリア */
typedef struct event_save_area {
    mEv_Head  h;        /* ヘッダ */
    int  data[EV_SAVE_AREA_SIZE / sizeof(int)];
} mEv_SaveArea;

/* 各イベント用セーブエリア */
typedef struct event_save_data {
    /* スペシャルイベント用 */
    struct special_event_save_data {
	char  type;                         /* イベントタイプ   */
	char  flg;
    } special;
    /* ウィークリーイベント用 */
    struct weekly_event_save_data {
	char  type;                         /* イベントタイプ   */
	char  flg;
    } weekly;
    unsigned short  xday[8];                /* イベント日付     */
    /* 汎用 */
    int  area_alive;                        /* 有効or無効フラグ       */
    mEv_SaveArea  areas[EV_SAVE_AREA_NUM];  /* 各イベント用データ保存 */
    /* 最後に初期化した時間 */
    int  last_init;
    /* 売り切れフラグ */
    int  soldout;
    unsigned long  vt, wt;
} mEv_Save;

/* 2001.01.24	sasaki		*/
/* 各イベント用セーブエリア */
typedef struct event_save_data_old {
    /* スペシャルイベント用 */
    struct special_event_save_data_old {
	char  type;                         /* イベントタイプ   */
	char  flg;
    } special;
    /* ウィークリーイベント用 */
    struct weekly_event_save_data_old {
	char  type;                         /* イベントタイプ   */
	char  flg;
    } weekly;
    unsigned short  xday[8];                /* イベント日付     */
    /* 汎用 */
    int  area_alive;                        /* 有効or無効フラグ       */
    mEv_SaveArea  areas[EV_SAVE_AREA_NUM];  /* 各イベント用データ保存 */
    /* 最後に初期化した時間 */
    int  last_init;

    int  xxx[4];	/* 2001.1.24 4->3 数合わせ	*/
} mEv_Save_old;

/* 各イベント用コモンエリア */
typedef struct event_common_data {
    short  sp_init;
    short  area_alive;                           /* 有効or無効フラグ       */
    mEv_SaveArea  areas[EV_COMMON_AREA_NUM];     /* 各イベント用データ保存 */
    short  too_short;                            /* 短すぎたイベント       */
    short  place_alive;                          /* 有効or無効フラグ       */
    mEv_SavePlace  places[EV_COMMON_PLACE_NUM];  /* 位置情報               */
} mEv_Common;


/* メインシステム */
extern void  mEv_init(EVENT *event);
extern void  mEv_init_force(EVENT *event);
extern void  mEv_2nd_init(EVENT *event);
extern void  mEv_run(EVENT *event);
extern void  mEv_finish(EVENT *event);
/* イベントがおこる時間か？ */
extern int   mEv_check_schedule(int type);
extern int   mEv_check_run_today(int type);
/* スケジュールイベントの時間チェック */
extern int mEv_get_start_time(int type);
extern int mEv_get_end_time(int type);
/* シーン切り替えで消えないフラグ */
extern void  mEv_set_keep(int type);
extern void  mEv_clear_keep(int type);
extern int   mEv_check_keep(int type);
/* ステータス操作 */
extern void  mEv_set_status(int type, short stat);
extern void  mEv_clear_status(int type, short stat);
extern int   mEv_check_status(int type, short stat);
extern int   mEv_check_status_edge(short stat);
/* イベントがおこっているか？ */
#define mEv_set_active(type)    mEv_set_status(type, EV_STAT_ACTIVE)
#define mEv_clear_active(type)  mEv_clear_status(type, EV_STAT_ACTIVE)
#define mEv_check_active(type)  mEv_check_status(type, EV_STAT_ACTIVE)
#define mEv_check_active_edge() mEv_check_status_edge(EV_STAT_ACTIVE)
/* イベントがはしっているか？ */
#define mEv_set_run(type)    mEv_set_status(type, EV_STAT_RUN)
#define mEv_clear_run(type)  mEv_clear_status(type, EV_STAT_RUN)
#define mEv_check_run(type)  mEv_check_status(type, EV_STAT_RUN)
#define mEv_check_run_edge() mEv_check_status_edge(EV_STAT_RUN)
/* イベントキャラがでているか？（同じブロックにいるか？） */
#define mEv_set_show(type)    mEv_set_status(type, EV_STAT_SHOW)
#define mEv_clear_show(type)  mEv_clear_status(type, EV_STAT_SHOW)
#define mEv_check_show(type)  mEv_check_status(type, EV_STAT_SHOW)
#define mEv_check_show_edge() mEv_check_status_edge(EV_STAT_SHOW)
/* イベントキャラと会話したか？ */
#define mEv_set_talk(type)    mEv_set_status(type, EV_STAT_TALK)
#define mEv_clear_talk(type)  mEv_clear_status(type, EV_STAT_TALK)
#define mEv_check_talk(type)  mEv_check_status(type, EV_STAT_TALK)
#define mEv_check_talk_edge() mEv_check_status_edge(EV_STAT_TALK)
/* セーブエリアブロックイベント固有情報操作 */
/* ＩＤは勝手につけていいですが１００以上は使わないでください */
extern char *mEv_reserve_save_area(int type, char id);    /* イベント期間中 */
extern char *mEv_reserve_save_area_today(int type, char id);  /* その日だけ */
extern char *mEv_get_save_area(int type, char id);
extern int   mEv_clear_save_area(int type, char id);
/* コモンエリアブロックイベント固有情報操作 */
extern char *mEv_reserve_common_area(int type, char id);
extern char *mEv_get_common_area(int type, char id);
extern int   mEv_clear_common_area(int type, char id);
/* コモンエリアブロック位置情報操作 */
extern mEv_Place *mEv_reserve_common_place(int type, char id);
extern mEv_Place *mEv_get_common_place(int type, char id);
extern int   mEv_clear_common_place(int type, char id);
extern int   mEv_use_block_by_other_event(int type, izix b);
/* うわさ */
extern void  mEv_clear_rumor(void);
extern int   mEv_spread_rumor(int type);
extern int   mEv_get_rumor(void);     /* mEv_RMR_*_e を返す。無いときは０ */
/* イベント関連アクターからの「死ぬよ」メッセージ */
extern void  mEv_actor_dying_message(int type, ACTOR *actor);
/* セーブしないようにイベント関係のＦＧすべて消す */
extern void  mEv_erase_FG_all_in_common_place(void);
/* アルバイトなどを除いて通常イベントを受け入れられる状態かチェック */
#define mEv_NormalRnakPlayer(pid)  (mEv_LivePlayer(pid) && !mEv_ArbeitPlayer(pid))
extern int   mEv_LivePlayer(unsigned int);
extern int   mEv_ArbeitPlayer(unsigned int);
/* プレイヤーの準備はいいか？ */
extern int  mEv_PlayerOK(void);
/* 特殊イベントを新しいのにする */
extern void  mEv_make_new_special_event(void);
/* お店の特売日チェック */
extern unsigned short mEv_get_bargain_day(void);
#if defined(FDEBUG)
/* ＲＯＭ＿Ｆデバッグ情報 */
extern void  mEv_debug_print4f(gfxprint_t  *gfxprint);
extern void  mEv_sp_debug_print4f(gfxprint_t  *gfxprint);
#endif
/* 次の？曜日は何日か？ */
extern unsigned char  mEv_get_next_weekday(unsigned char  weekday);
/* イベントの時間とる */
extern int  mEv_GetMonth(EVENT *event);
extern int  mEv_GetDay(EVENT *event);
extern int  mEv_GetHour(EVENT *event);

extern int  mEv_change(EVENT *event);

/* スペシャルイベントチェック  */
extern unsigned short mEv_get_special_event_day(void);
extern unsigned short mEv_get_special_event_type(void);
extern int  mEv_get_event_place(int type, int *bx, int *bz);
extern int  mEv_set_special_event_save(void);
extern int  mEv_check_special_event_save(void);
extern int  mEv_get_special_event_state(void);
extern void  mEv_special_event_soldout(int type);

/* ゆきだるまのチェック */
extern int  mEv_snowman_born_check(void);

/* 誰かが死んだかチェック */
extern int  mEv_someone_died(void);

/** 雑貨屋イベントアイテム最大数 */
#define	mEv_SHOP_ITEM_MAX	(5)
/** デザイナーイベント顧客セーブ数 */
#define	mEv_DSN_SAVE_PLY_MAX	(3)	/* 2001.01.24 2->3 変更	*/
/** デザイナーイベント服セーブ数 */
#define	mEv_DSN_SAVE_CLOTH_MAX	(3)
/** デザイナーのミニゲームの最大ボタンカウンタ */
#define	mEv_DSN_MAX_BTN_CNT	(100)
/** 闇ブローカーイベント顧客セーブ数 */
#define	mEv_BRK_SAVE_PLY_MAX	(2)
/** 闇ブローカーイベントアイテム最大数 */
#define	mEv_BRK_ITEM_MAX	(3)
/** 画伯イベント顧客セーブ数 */
#define	mEv_ART_SAVE_PLY_MAX	(2)
/** カブ行商イベント顧客セーブ数 */
#define	mEv_KABU_SAVE_PLY_MAX	(5)
/** サンタさんイベントアイテム最大数 */
#define	mEv_SNT_ITEM_MAX	(2)
/** サンタさん服記憶最大数 */
#define	mEv_SNT_SAVE_CLOTH_MAX	(10)

/* event->flag 用 */
#define EV_SPECIAL_INIT         (0x01)

/*
 *	イベントカテゴリー
 *
 *		上位 3ビット
 */
enum	event_category {
    mEv_CATEGORY_START_e,

    mEv_SPECIAL_e = mEv_CATEGORY_START_e,	/** 特殊 NPC */
    mEv_FLAG_SAVE_e,				/** フラグのみセーブする */
    mEv_APPO_e,					/** 日時指定 */
    mEv_APPO_RUMOR_e,				/** 日時指定イベントの噂 */
    mEv_REACTION_e,				/** プレーヤーの行動に対応 */
    mEv_DAILY_e,				/** 日常 */
    mEv_OTHER_e,				/** その他 */

    mEv_NOTHING_e = 7,				/** イベント無し(エラー用) */
    mEv_CATEGORY_END_e = mEv_NOTHING_e
};

#define	mEv_CATEGORY_MASK		(0xe0000000u)
#define	mEv_NO_MASK			(0x1fffffffu)

#define	mEv_SET_CATEGORY( category )	(int)(((unint)(category) << 29)& mEv_CATEGORY_MASK)
#define	mEv_GET_CATEGORY( event )	(((event) & mEv_CATEGORY_MASK ) >> 29)
#define mEv_ADD_CATEGORY(category, no)	\
			(mEv_SET_CATEGORY( category ) | ((no) & mEv_NO_MASK))

#define	mEv_GET_EVENT_NO( event )	((event) & mEv_NO_MASK)

#define mEv_ERR_EVENT_NO		(unint)(0xffffffff)
			    
/*
 *	イベント名
 *
 *	※※※※ 注意 ※※※※
 *	各イベント用の種類は最大 29種類までです.
 *	それを越えるイベントが必要であれば
 *	イベントのカテゴリーを増やしてください
 */
enum	event_name_table {

    /** 特殊 NPCイベント */
    mEv_SPECIAL_NO_START_e = (int)mEv_SET_CATEGORY( mEv_SPECIAL_e ),
//    mEv_SPECIAL_NO_START_e = 0x00000000,
    mEv_SPC_SHOP_e = mEv_SPECIAL_NO_START_e,	/** 雑貨屋 (狸) */
    mEv_SPC_DESIGNER_e,				/** 服飾デザイナー (キリン) */
    mEv_SPC_BROKER_e,				/** 闇ブローカー (狐) */
    mEv_SPC_ARTIST_e,				/** 画伯 (海象) */
    mEv_SPC_SILK_e,				/** 絨毯売り (駱駝) */
    mEv_SPC_GYPSY_e,				/** 黒豹 */
//    mEv_SPC_SANTA_e,				/** サンタさん */
    mEv_SPECIAL_NO_END_e,

    /*
     *	フラグのみセーブするイベント
     *
     *	mEv_FS_FIRST_JOB0 - 3	: オープニングからアルバイト終了時まで ON
     *	mEv_FS_FIRST_INTRO0 - 3	: オープニングから家購入後まで ON
     */
    mEv_FLAG_SAVE_NO_START_e = mEv_SET_CATEGORY( mEv_FLAG_SAVE_e ),
//    mEv_FLAG_SAVE_NO_START_e = 0x20000000,
    mEv_FS_RENEWAL_SHOP_e = mEv_FLAG_SAVE_NO_START_e,	/** お店改装中 */
    mEv_FS_KABU_PEDDLER_e,				/** カブ売り */
    mEv_FS_FIRST_JOB0_e,	/** アルバイト中 (プレーヤー 1) */
    mEv_FS_FIRST_JOB1_e,	/** アルバイト中 (プレーヤー 2) */
    mEv_FS_FIRST_JOB2_e,	/** アルバイト中 (プレーヤー 3) */
    mEv_FS_FIRST_JOB3_e,	/** アルバイト中 (プレーヤー 4) */
    mEv_FS_FIRST_INTRO0_e,	/** オープニング導入部分中(プレーヤー 1) */
    mEv_FS_FIRST_INTRO1_e,	/** オープニング導入部分中(プレーヤー 2) */
    mEv_FS_FIRST_INTRO2_e,	/** オープニング導入部分中(プレーヤー 3) */
    mEv_FS_FIRST_INTRO3_e,	/** オープニング導入部分中(プレーヤー 4) */
    mEv_FS_FIRST_JOB10_e,	/** アルバイト中 第一段階終了 (プレーヤー 1) */
    mEv_FS_FIRST_JOB11_e,	/** アルバイト中 第一段階終了 (プレーヤー 2) */
    mEv_FS_FIRST_JOB12_e,	/** アルバイト中 第一段階終了 (プレーヤー 3) */
    mEv_FS_FIRST_JOB13_e,	/** アルバイト中 第一段階終了 (プレーヤー 4) */
    mEv_FS_FIRST_JOB20_e,	/** アルバイト中 第二段階終了 (プレーヤー 1) */
    mEv_FS_FIRST_JOB21_e,	/** アルバイト中 第二段階終了 (プレーヤー 2) */
    mEv_FS_FIRST_JOB22_e,	/** アルバイト中 第二段階終了 (プレーヤー 3) */
    mEv_FS_FIRST_JOB23_e,	/** アルバイト中 第二段階終了 (プレーヤー 4) */

    mEv_FS_QUEST_OK00_e,	/** 手伝い解禁フラグ (プレーヤー 1) */
    mEv_FS_QUEST_OK01_e,	/** 手伝い解禁フラグ (プレーヤー 2) */
    mEv_FS_QUEST_OK02_e,	/** 手伝い解禁フラグ (プレーヤー 3) */
    mEv_FS_QUEST_OK03_e,	/** 手伝い解禁フラグ (プレーヤー 4) */
    mEv_FS_GATEWAY00_e,		/** コントローラパックをつかった時の導入出部 */
    mEv_FS_GATEWAY01_e,		/** 同上  (プレーヤー 2) */
    mEv_FS_GATEWAY02_e,		/** 同上  (プレーヤー 3) */
    mEv_FS_GATEWAY03_e,		/** 同上  (プレーヤー 4) */
    mEv_FS_GATEWAY04_e,		/** 同上  (外国人) */
    mEv_FS_DUMMMY_26_e,
    mEv_FS_DUMMMY_27_e,
    mEv_FS_DUMMMY_28_e,
    mEv_FS_DUMMMY_29_e,
    mEv_FS_DUMMMY_30_e,
    mEv_FLAG_SAVE_NO_END_e,
    

    /** 日時指定イベント */
    mEv_APPO_NO_START_e = mEv_SET_CATEGORY( mEv_APPO_e ),
//    mEv_APPO_NO_START_e = 0x40000000,
    mEv_APP_A_HAPPY_NEW_YEAR_e = mEv_APPO_NO_START_e,	/** 初詣 */
    mEv_APP_KAMAKURA_e,					/** かまくら作り */
    mEv_APP_ST_VALENTINE_e,				/** バレンタイン */
    mEv_APP_WHITE_DAY_e,				/** ホワイトデー */
    mEv_APP_FLOWER_VIEWING_e,				/** お花見 */
    mEv_APP_SPRING_FIELD_DAY_e,				/** 春の運動会 */
    mEv_APP_CHILDRENS_DAY_e,				/** こどもの日 */
    mEv_APP_SUMMER_FISHING_e,				/** 初夏の釣り大会 */
    mEv_APP_RADIO_CALISTHENICS_e,			/** ラジオ体操 */
    mEv_APP_FIREWORKS_e,				/** 花火大会 */
    mEv_APP_ADMIRE_MOON_e,				/** お月見 */
    mEv_APP_AUTUMN_FIELD_DAY_e,				/** 秋の運動会 */
    mEv_APP_MATSUTAKE_e,				/** 松茸狩り*/
    mEv_APP_HALLOWEEN_e,				/** ハロウィン */
    mEv_APP_AUTUMN_FISHING_e,				/** 晩秋の釣り大会 */
    mEv_APP_CHRISTMAS_e,				/** クリスマス */
    mEv_APP_COUNT_DOWN_e,				/** カウントダウン */
    mEv_APPO_NO_END_e,

    /** 日時指定イベントの噂話 */
    mEv_RUMOR_NO_START_e = mEv_SET_CATEGORY( mEv_APPO_RUMOR_e ),
//    mEv_RUMOR_NO_START_e = 0x60000000,
    mEv_RMR_A_HAPPY_NEW_YEAR_e = mEv_RUMOR_NO_START_e,	/** 初詣 */
    mEv_RMR_KAMAKURA_e,					/** かまくら作り */
    mEv_RMR_ST_VALENTINE_e,				/** バレンタイン */
    mEv_RMR_WHITE_DAY_e,				/** ホワイトデー */
    mEv_RMR_FLOWER_VIEWING_0_e,				/** お花見 */
    mEv_RMR_FLOWER_VIEWING_1_e,				/** お花見 */
    mEv_RMR_SPRING_FIELD_DAY_e,				/** 春の運動会 */
    mEv_RMR_CHILDRENS_DAY_0_e,				/** こどもの日 */
    mEv_RMR_CHILDRENS_DAY_1_e,				/** こどもの日 */
    mEv_RMR_SUMMER_FISHING_0_e,				/** 初夏の釣り大会 */
    mEv_RMR_SUMMER_FISHING_1_e,				/** 初夏の釣り大会 */
    mEv_RMR_RADIO_CALISTHENICS_0_e,			/** ラジオ体操 */
    mEv_RMR_RADIO_CALISTHENICS_1_e,			/** ラジオ体操 */
    mEv_RMR_FIREWORKS_0_e,				/** 花火大会 */
    mEv_RMR_FIREWORKS_1_e,				/** 花火大会 */
    mEv_RMR_ADMIRE_MOON_0_e,				/** お月見 */
    mEv_RMR_ADMIRE_MOON_1_e,				/** お月見 */
    mEv_RMR_AUTUMN_FIELD_DAY_e,				/** 秋の運動会 */
    mEv_RMR_MATSUTAKE_0_e,				/** 松茸狩り*/
    mEv_RMR_MATSUTAKE_1_e,				/** 松茸狩り*/
    mEv_RMR_HALLOWEEN_e,				/** ハロウィン */
    mEv_RMR_AUTUMN_FISHING_0_e,				/** 晩秋の釣り大会 */
    mEv_RMR_AUTUMN_FISHING_1_e,				/** 晩秋の釣り大会 */
    mEv_RMR_CHRISTMAS_e,				/** クリスマス */
    mEv_RMR_COUNT_DOWN_e,				/** カウントダウン */
    mEv_RUMOR_NO_END_e,
    

    /** プレーヤーの行動に対応するイベント( プレゼント系 ) */
    mEv_REACTION_NO_START_e = mEv_SET_CATEGORY( mEv_REACTION_e ),
//    mEv_REACTION_NO_START_e = 0x80000000,
    mEv_RACT_BIRTHDAY_e = mEv_REACTION_NO_START_e,	/** 誕生日 */
    mEv_RACT_ST_VALENTINE_e,				/** バレンタイン */
    mEv_RACT_WHITE_DAY_e,				/** ホワイトデー */
    mEv_RACT_CHRISTMAS_e,				/** クリスマス */
    mEv_REACTION_NO_END_e,
    

    /** 日常のイベント */
    mEv_DAILY_NO_START_e = mEv_SET_CATEGORY( mEv_DAILY_e ),
//    mEv_DAILY_NO_START_e = 0xa0000000,
    mEv_DAY_SEND_MAIL_e = mEv_DAILY_NO_START_e,		/** 郵便配達 */
    mEv_DAY_DECIDE_ITEM_e,				/** 雑貨屋の商品決定 */
    mEv_DAY_SEND_FLIER_e,				/** チラシの配布 */
    mEv_DAY_OPEN_SHOP_e,				/** お店の開店 */
    mEv_DAY_WAKE_UP_e,					/** NPC起床 */
    mEv_DAY_GO_HOME_e,					/** 家に戻る */
    mEv_DAY_SLEEP_e,					/** 就寝 */
    mEv_DAY_GATHER_AROUND_SHRINE_e,			/** 社に集まる */
    mEv_DAY_BREAK_UP_MEETING_e,				/** 社から解散 */
    mEv_DAILY_NO_END_e,

    /** その他フラグのみのイベント用 */
    mEv_OTHER_NO_START_e = mEv_SET_CATEGORY( mEv_OTHER_e ),
//    mEv_OTHER_NO_START_e = 0xc0000000,
    mEv_OT_SWITCH0_e = mEv_OTHER_NO_START_e,	/** 特殊 EV用汎用フラグ */
    mEv_OTHER_NO_END_e,

    mEv_ALL_EVENT_KIND
};

/*
 ***********************
 *	各イベントの種類
 ***********************
 */
#define	mEv_SPECIAL_KIND_NUM	(mEv_SPECIAL_NO_END_e - mEv_SPECIAL_NO_START_e)
#define	mEv_APPO_KIND_NUM	(mEv_APPO_NO_END_e - mEv_APPO_NO_START_e)
#define	mEv_RUMOR_KIND_NUM	(mEv_RUMOR_NO_END_e - mEv_RUMOR_NO_START_e)
#define	mEv_REACTION_KIND_NUM	(mEv_REACTION_NO_END_e-mEv_REACTION_NO_START_e)
#define mEv_DAILY_KIND_NUM	(mEv_DAILY_NO_END_e - mEv_DAILY_NO_START_e)


/*
 *	通常イベント月毎の最大データ数
 */
#define	mEv_MONTHLY_EV_MAX		(12)
/*
 *	通常イベント発生チェック方法
 */
enum	normal_event_how_to_check {
    mEv_NORMAL_EV_HOW_TO_CHECK_START_e,

    mEv_EV_CHK_NO_e = mEv_NORMAL_EV_HOW_TO_CHECK_START_e,	/** 無条件 */
    mEv_EV_CHK_D_e,		/** ひにち越えチェック */
    mEv_EV_CHK_H_e,		/** 時間でチェック */
    mEv_EV_CHK_W_e,		/** 曜日でチェック */
    mEv_EV_CHK_D_H_e,		/** ひにちと時間でチェック */
    mEv_EV_CHK_W_H_e,		/** 曜日と時間でチェック */
    mEv_EV_CHK_WN_e,		/** 第 ?曜日チェック */
    mEv_EV_CHK_WN_H_e,		/** 第 ?曜日と時間チェック */
    mEv_EV_CHK_OC_e,		/** 旧暦チェック */
    
    mEv_NORMAL_EV_HOW_TO_CHECK_END_e
};

/*
 *	チェックモード
 */
enum	normal_event_itme_check_mode {
    mEv_NORMAL_EVENT_CHECK_MODE_START_e,
    
    mEv_TM_CHK_JUST_e = mEv_NORMAL_EVENT_CHECK_MODE_START_e,	/** 丁度 */
    mEv_TM_CHK_OVER_e,			/** 以上 ( 越え )チェック */
    mEv_TM_CHK_LESS_e,			/** 以下チェック */
    mEv_TM_CHK_OVER_NOT_JUST_e,		/** 含まず大きい */
    mEv_TM_CHK_LESS_NOT_JUST_e,		/** 含まず小さい( 未満 ) */
    
    mEv_NORMAL_EVENT_CHECK_MODE_END_e
};

/*
 *	第 ?曜日か
 */
enum	normal_event_week_number_table {
    mEv_NORMAL_EV_WEEK_NUMBER_TABLE_START_e,
    
    mEv_1W_e = mEv_NORMAL_EV_WEEK_NUMBER_TABLE_START_e,	/** 第 1 ?曜日 */
    mEv_2W_e,		/** 第 2 ?曜日 */
    mEv_3W_e,		/** 第 3 ?曜日 */
    mEv_4W_e,		/** 第 4 ?曜日 */
    mEv_5W_e,		/** 第 5 ?曜日 */
    mEv_LAST_WEEK_e = mEv_5W_e,	/** 最後の ?曜日 */
    
    mEv_NORMAL_EV_WEEK_NUMBER_TABLE_END_e
};

/** 無条件で発生 */
#define	mEv_ALL_OK( )	{ mEv_EV_CHK_NO_e }
/** 日にちでチェック */
#define	mEv_CHECK_DAY( day, dmode )	{ mEv_EV_CHK_D_e, day, dmode }
/** 時間でチェック */
#define	mEv_CHECK_HOUR( hour, hmode )	{ mEv_EV_CHK_H_e, 0, hour, hmode }
/** 曜日でチェック */
#define	mEv_CHECK_WEEK( week )		{ mEv_EV_CHK_W_e, week }
/** 第 ?曜日チェック */
#define	mEv_CHECK_WEEK_NO( week, no, wmode )	\
				{ mEv_EV_CHK_WN_e, week, no, wmode }
/** 日にちと時間でチェック */
#define	mEv_CHECK_DAY_HOUR( day, dmode,  hour, hmode )	\
				{ mEv_EV_CHK_D_H_e, day, dmode, hour, hmode }
/** 曜日と時間でチェック */
#define	mEv_CHECK_WEEK_HOUR( week, hour, hmode )	\
				{ mEv_EV_CHK_W_H_e, week, hour, hmode }	
/** 第 ?曜日と時間でチェック */
#define	mEv_CHECK_WEEK_NO_HOUR( week, no, wmode, hour, hmode )	\
		{ mEv_EV_CHK_WN_H_e, week, no, wmode, hour, hmode }
/** 通常イベント旧暦チェックデータ */
#define	mEv_CHECK_OLD_CALENDAR( month, mmode, day, dmode, hour, hmode )	\
		{ mEv_EV_CHK_OC_e, month, mmode, day, dmode, hour, hmode }
				
/*
 *	通常イベント日付チェックデータ
 */
typedef struct	event_check_day			mEv_dtd_c;
struct	event_check_day {
    unchar	code;		/** チェックコード */
    unchar	day;		/** 日付け */
    unchar	dmode;		/** 越え / 以下 / 丁度の選択 */
};

/*
 *	通常イベント時間チェックデータ
 */
typedef struct	event_check_hour		mEv_dth_c;
struct	event_check_hour {
    unchar	code;		/** チェックコード */
    unchar	hour;		/** 時間 */
    unchar	hmode;		/** 越え / 以下 / 丁度の選択 */
};

/*
 *	通常イベント曜日チェックデータ
 */
typedef struct	event_check_week		mEv_dtw_c;
struct	event_check_week {
    unchar	code;		/** チェックコード */
    unchar	week;		/** 曜日 */
};

/*
 *	通常イベント第 ?曜日チェックデータ
 */
typedef struct	event_check_week_number		mEv_dtwn_c;
struct	event_check_week_number {
    unchar	code;		/** チェックコード */
    unchar	week;		/** 曜日 */
    unchar	no;		/** 第 ?曜日のチェックか 1 〜 5 */
    unchar	wmode;
};

/*
 *	通常イベント日付け・時間チェックデータ
 */
typedef struct	event_check_day_hour			mEv_dtdh_c;
struct	event_check_day_hour {
    unchar	code;		/** チェックコード */
    unchar	day;		/** 日付け */
    unchar	dmode;		/** 越え / 以下 / 丁度の選択 */
    unchar	hour;		/** 時間 */
    unchar	hmode;		/** 越え / 以下 / 丁度の選択 */
};

/*
 *	通常イベント曜日・時間チェックデータ
 */
typedef struct	event_check_week_hour		mEv_dtwh_c;
struct	event_check_week_hour {
    unchar	code;		/** チェックコード */
    unchar	week;		/** 日付け */
    unchar	hour;		/** 時間 */
    unchar	hmode;		/** 越え / 以下 / 丁度の選択 */
};

/*
 *	通常イベント第 ?曜日チェックデータ
 */
typedef struct	event_check_week_number_hour	mEv_dtwnh_c;
struct	event_check_week_number_hour {
    unchar	code;		/** チェックコード */
    unchar	week;		/** 曜日 */
    unchar	no;		/** 第 ?曜日のチェックか 1 〜 5 */
    unchar	wmode;
    unchar	hour;
    unchar	hmode;
};

/*
 *	通常イベント旧暦チェックデータ
 */
typedef struct	event_check_old_calendar	mEv_dtoc_c;
struct	event_check_old_calendar {
    unchar	code;		/** チェックコード */
    unchar	month;		/** 旧暦での月 */
    unchar	mmode;		/** */
    unchar	day;		/** 旧暦での日にち */
    unchar	dmode;		/** */
    unchar	hour;		/** 時間 */
    unchar	hmode;		/** */
};

/*
 *	通常イベントチェックデータ共用体
 *
 *	注意	共用体の中の先頭は必ずメンバー中の一番サイズが大きいものを
 */
typedef union	normal_event_check_data		mEv_ckd_c;
union	normal_event_check_data {
    mEv_dtoc_c	old_calendar_check;
    mEv_dtwnh_c	week_no_hour_check;
    mEv_dtdh_c	day_hour_check;
    mEv_dtwh_c	week_hour_check;
    mEv_dtwn_c	week_no_check;
    mEv_dtd_c	day_check;
    mEv_dth_c	hour_check;
    mEv_dtw_c	week_check;
    unchar	code;			/** データ識別コード */
};

#if !defined(NEW_EVENT_MANAGING)
/*
 *	通常イベントデータ構造
 */
typedef struct	normal_event_data		mEv_nml_c;
struct	normal_event_data {
    unint	kind;		/** イベント種類 */
    mEv_ckd_c	occur;		/** 発生条件 */
    mEv_ckd_c	fin;		/** 終了条件 */
    signed char	weather;	/** 天気 : 設定なしなら -1 */
    signed char	weather_level;	/** 天気 量 */
    unchar	event_is;	/** イベント登録を行うか ON / OFF */
};
#endif

/*
 -----------------------------------------------------------------------------
 *			イベントセーブデータ
 -----------------------------------------------------------------------------
 */
/*
 *****************
 *	雑貨屋さん
 *****************
 */
typedef struct	ev_shop_data {
    lbRTC_time_c	open;				/** 開店時間 */
    lbRTC_time_c	close;				/** 閉店時間 */
    mAc_nfs_t		item[mEv_SHOP_ITEM_MAX];	/** 商品リスト */
    int			category;			/** 商品の種類 */
} mEv_shp_c;

/*
 *********************
 *	服飾デザイナー
 *********************
 */
typedef struct	ev_designer_data {
    PersonalID_c	pID[mEv_DSN_SAVE_PLY_MAX];	/** すでに売った顧客 */
    int			sum;
    mAc_nfs_t		cloth[mEv_DSN_SAVE_CLOTH_MAX];	/** すでに作った服 */
} mEv_dsn_c;

/* old struct	2001.1.24	sasaki	*/
typedef struct	ev_designer_data_old {
    PersonalID_c	pID[mEv_DSN_SAVE_PLY_MAX-1];	/** すでに売った顧客 */
    int			sum;
    mAc_nfs_t		cloth[mEv_DSN_SAVE_CLOTH_MAX];	/** すでに作った服 */
} mEv_dsn_c_old;

enum {
    mEv_DSN_EXCELLENT_RESULT_e,		/* ええかんじ	*/
    mEv_DSN_NORMAL_RESULT_e,		/* まあまあ	*/
    mEv_DSN_FAILURE_RESULT_e		/* あかんがな	*/
};

/** 非セーブ用 */
typedef struct {
    int			btn_cnt;		/** ボタン押した結果 */
    int			result;			/** 結果 */
} mEv_dsn2_c;

/*
 *********************
 *	闇のブローカー
 *********************
 */
/** セーブ用 */
typedef struct	ev_broker_data {
    PersonalID_c	pID[mEv_BRK_SAVE_PLY_MAX];	/** すでに売った顧客 */
    lbRTC_time_c	close;				/** 閉店時間 */
    int			sum;				/** すでに売った人数 */
    mAc_nfs_t		sold_item[mEv_BRK_SAVE_PLY_MAX];/** 売却済リスト */
    mAc_nfs_t		item[mEv_BRK_ITEM_MAX];		/** 商品リスト */
} mEv_brk_c;

/** 非セーブ用 */
typedef struct {
    PersonalID_c	pID;		/** 店内に入ったことのある顧客 */
    int			hide;		/** 店内に隠れた */
} mEv_brk2_c;

/*
 ***********
 *	画伯
 ***********
 */
typedef struct	ev_artist_data {
    PersonalID_c	pID[mEv_ART_SAVE_PLY_MAX];	/** すでに売った顧客 */
    int			sum;				/** すでに売った人数 */
    mAc_nfs_t		wall[mEv_ART_SAVE_PLY_MAX];	/** すでに作った壁紙 */
} mEv_art_c;

/*
 ***************
 *	絨毯売り
 ***************
 */
typedef struct	ev_silk_data {
    int		sum;					/** 下取り回数 */
    mAc_nfs_t	itemNo;					/** 商品 No */
} mEv_slk_c;
   
/*
 *****************
 *	サンタさん
 *****************
 */
typedef struct	ev_santa_data {
    PersonalID_c	pID;				/** */
    unchar		present_cnt;			/** プレゼント回数 */
    mAc_nfs_t		cloth[mEv_SNT_SAVE_CLOTH_MAX];	/** プレイヤ着てた服 */
} mEv_snt_c;

/** 非セーブ */
typedef struct	ev_santa_data2 {
    unchar		present;		/** プレゼント */
    unchar		talk_cnt;		/** 会話回数 */
    signed char		b_xnum;			/** 前回会話したブロック */
    signed char		b_znum;			/** 前回会話したブロック */
    mAc_nfs_t		memory_cloth;		/** 覚えておく服 */
} mEv_snt2_c;

/*
 ****************
 *	黒豹
 ****************
 */
typedef struct	ev_gypsy_data {
    int			work;
    izix  block, unit;    /* 位置情報 */
} mEv_gps_c;

/*
 ****************
 *	釣り大会
 ****************
 */
typedef struct	ev_fish_data {
    int			size;
    PersonalID_c	pID;				/** */
    unchar              talk_flag;
} mEv_fish_c;

/*
 ***************************
 *	イベントデータ共用体
 ***************************
 */

typedef union union_event_data		mEv_uev_c;
union	union_event_data {
    /** 特殊イベント情報 */
    mEv_shp_c	shop;		/** 雑貨屋さん */
    mEv_dsn_c	designer;	/** 服飾デザイナー */
    mEv_brk_c	broker;		/** 闇ブローカー */
    mEv_art_c	artist;		/** 画伯 */
    mEv_slk_c	silk;		/** 絨毯売り */
    mEv_gps_c	gypsy;		/** 黒豹 */
};

/* old struct	2001.1.24	sasaki	*/
typedef union union_event_data_old	mEv_uev_c_old;
union	union_event_data_old {
    /** 特殊イベント情報 */
    mEv_shp_c		shop;		/** 雑貨屋さん */
    mEv_dsn_c_old	designer;	/** 服飾デザイナー */
    mEv_brk_c		broker;		/** 闇ブローカー */
    mEv_art_c		artist;		/** 画伯 */
    mEv_slk_c		silk;		/** 絨毯売り */
    mEv_gps_c		gypsy;		/** 黒豹 */
};

typedef union {
    mEv_brk2_c	broker;		/** 闇ブローカー */
    mEv_snt2_c	santa;		/** サンタさん */
} mEv_uev2_c;


/*
 ------------------------------------------------------------------------------
 *			イベントセーブ情報用型定義
 ------------------------------------------------------------------------------
 */
/*
 *******************************
 *	特殊イベント発生予約情報
 *******************************
 */
typedef struct	reserve_special_event_class {
    lbRTC_time_c	xday;		/** 発生予定日 */
    unint		kind;		/** 特殊イベントの種類 */
    mEv_uev_c		data;		/** 特殊イベント用データ */
} mEv_rse_c;

/* old struct	2001.1.24	sasaki	*/
typedef struct	reserve_special_event_class_old {
    lbRTC_time_c	xday;		/** 発生予定日 */
    unint		kind;		/** 特殊イベントの種類 */
    mEv_uev_c_old	data;		/** 特殊イベント用データ */
} mEv_rse_c_old;

/*
 ***************************
 *	カブ売りイベント情報
 ***************************
 */
typedef struct	ev_kabu_peddler_info		mEv_kbpd_c;
struct	ev_kabu_peddler_info {
    PersonalID_c	pID[mEv_KABU_SAVE_PLY_MAX];	/** すでに売った顧客 */
};

/*
******************************
 *	どざえもんイベント情報
 *****************************
 */
typedef struct	ev_seagull_info		mEv_gull_c;
struct	ev_seagull_info {
    unsigned long   flag;
};

/*
************************
 *	週間イベント情報
 ***********************
 */
typedef union union_weekly_event_data		mEv_wky_c;
union	union_weekly_event_data {
    mEv_kbpd_c	kabuPeddler;		/** カブ行商人情報 */
    mEv_gull_c  dozaemon;		/** どざえもん情報 */
};


/*
 ******************************************************
 *		イベントセーブ情報クラス
 ******************************************************
 */
typedef struct	ev_save_info_class {

    mEv_rse_c	special;		/** 特殊イベント情報 */
    mEv_wky_c   weekly;  		/** 週間イベント情報 */
    
    unint	flag_save_event;	/** フラグのみセーブするイベント */
} mEv_sec_c;

/* old struct	2001.1.24	sasaki	*/
typedef struct	ev_save_info_class_old {

    mEv_rse_c_old	special;		/** 特殊イベント情報 */
    mEv_wky_c		weekly;  		/** 週間イベント情報 */

    unint	flag_save_event;	/** フラグのみセーブするイベント */
} mEv_sec_c_old;


/*
 ******************************************************
 *		イベント非セーブ情報クラス
 ******************************************************
 */
typedef struct {
    mEv_uev2_c	chk;
} mEv_nsc_c;

/*
 ------------------------------------------------------------------------------
 *			イベント非セーブ情報用型定義
 ------------------------------------------------------------------------------
 */
/*
 *********************************
 *	特殊イベント発生予定地情報
 *********************************
 */
typedef struct	special_event_set_block		mEv_sbk_c;
struct	special_event_set_block {
    int		set;		/** 情報の有無 */
    int		building;	/** 建築物の発生状況 ON / OFF */
    int		b_xnum;		/** 発生予定地 ブロック x番号 */
    int		b_znum;		/** 発生予定地 ブロック z番号 */
    int		ut_xnum;	/** 発生予定地 ユニット x番号 */
    int		ut_znum;	/** 発生予定地 ユニット z番号 */
};



/*
 ------------------------------------------------------------------------------
 *				関数群
 ------------------------------------------------------------------------------
 */
/*
 *****************************************
 *	イベントフラグの表示( デバッグ用 )
 *****************************************
 */
#if	DEBUG
extern void mEv_PrintEventFlag( void );
#endif


/*
 *******************************
 *	特殊イベント情報のクリア
 *******************************
 */
extern void mEv_ClearSpecialEvent( mEv_rse_c *special_p );

/*
 *********************************
 *	カブ売りイベント情報クリア
 *********************************
 */
extern void mEv_ClearEventKabuPeddler( mEv_kbpd_c *ev_kabu_p );

/*
 *********************************
 *	イベントセーブ情報のクリア
 *********************************
 */
extern void mEv_ClearEventSaveInfo( mEv_sec_c *event_save_p );

/*
 ***************************
 *	イベント情報のクリア
 ***************************
 */
extern void mEv_ClearEventInfo( void );

/*
 ************************
 *	イベントフラグ ON
 ************************
 */
extern void mEv_EventON( unint kind );

/*
 *************************
 *	イベントフラグ OFF
 *************************
 */
extern void mEv_EventOFF( unint kind );

/*
 **********************************
 *	イベントフラグチェック
 *		立っている	ON
 *		立っていない	OFF
 **********************************
 */
extern int mEv_CheckEvent( unint kind );

/*
 *****************************************
 *	カテゴリー毎のイベントフラグの取得
 *****************************************
 */
extern unint mEv_CategoryGetEventFlag( unint category );

/*
********************************
 *	イベント個人情報のクリア
 *******************************
 */
extern void mEv_ClearPersonalEventFlag( unint player_number );

/*
 ******************************************
 *	特殊イベントアクター発生フラグ取得
 ******************************************
 */
extern int mEv_GetSPAcIs( void );

/*
 *****************************************
 *	特殊イベントアクター発生フラグ ON
 *****************************************
 */
extern void mEv_SPAcIsON( void );

/*
 ******************************************
 *	特殊イベントアクター発生フラグ OFF
 ******************************************
 */
extern void mEv_SPAcIsOFF( void );

/*
 **************************************
 *	カブ売りアクター発生フラグ取得
 **************************************
 */
extern int mEv_GetKabuAcIs( void );

/*
 *************************************
 *	カブ売りアクター発生フラグ ON
 *************************************
 */
extern void mEv_KabuAcIsON( void );

/*
 **************************************
 *	カブ売りアクター発生フラグ OFF
 **************************************
 */
extern void mEv_KabuAcIsOFF( void );

/*
 ************************
 *	発生情報のクリア
 ************************
 */
extern void mEv_ClearSetInfo( mEv_sbk_c *set_info_p );

/*
 *****************************************
 *	特殊イベントの発生予約有無チェック
 *
 *	IN	:	イベント種類
 *	OUT	:	ON / OFF
 *
 *	発生予約あり	ON
 *	発生予約無し	OFF
 *****************************************
 */
extern int mEv_CheckSpecialReserve( unint sp_kind );

/*
 ***********************************
 *	特殊イベント発生情報のクリア
 ***********************************
 */
extern void mEv_ClearSPSetInfo( void );

/*
 **********************
 *	発生情報の有無
 **********************
 */
extern int mEv_CheckSetInfo( mEv_sbk_c *set_info_p );

/*
 *********************************
 *	特殊イベント発生情報の有無
 *********************************
 */
extern int mEv_CheckSPSetInfo( void );

/*
 ************************
 *	発生情報のセット
 ************************
 */
extern void mEv_CopySetInfo(
    mEv_sbk_c	*dst_info_p,
    mEv_sbk_c	*src_info_p
    );

/*
 ***********************************
 *	特殊イベント発生情報のセット
 ***********************************
 */
extern void mEv_SetSPSetInfo( mEv_sbk_c *src_info_p );

/*
 *********************************
 *	特殊イベント発生情報の取得
 *********************************
 */
extern void mEv_GetSPSetInfo( mEv_sbk_c *dst_info_p );

/*
 ****************************************************************
 *	特殊イベント用建築物発生登録
 *
 *	建築物のコンストラクトで呼んでください
 ****************************************************************
 */
extern void mEv_SetSPBuilding( void );

/*
 ****************************************************************
 *	特殊イベント用建築物発生登録抹消
 *
 *	建築物のデストラクトで呼んでください
 ****************************************************************
 */
extern void mEv_UnSetSPBuilding( void );

/*
 ****************************************************************
 *	現在のプレーヤーをアルバイト中にセット
 *
 *	ただし, 国内のプレーヤーのみ
 ****************************************************************
 */
extern void mEv_SetFirstJob( void );

/*
 ****************************************************************
 *	現在のプレーヤーがアルバイト（第１段階）中かチェック
 *
 *	アルバイト中	TRUE
 *	非アルバイト中	FALSE
 ****************************************************************
 */
extern int mEv_CheckFirstJob( void );

/*
 ****************************************************************
 *	現在のプレーヤーがアルバイト中かチェック
 *	ハッピールームアカデミーの会話前まで
 *
 *	アルバイト中	TRUE
 *	非アルバイト中	FALSE
 ****************************************************************
 */
extern int mEv_CheckRealArbeit( void );

/*
 ****************************************************************
 *	現在のプレーヤーがアルバイト中かチェック
 *
 *	アルバイト中	TRUE
 *	非アルバイト中	FALSE
 ****************************************************************
 */
extern int mEv_CheckArbeit( void );

/*
 ****************************************************************
 *	現在のプレーヤーをアルバイト中から解放
 *
 *	ただし, 国内のプレーヤーのみ
 ****************************************************************
 */
extern void mEv_UnSetFirstJob( void );

/*
 ****************************************************************
 *	現在のプレーヤーを導入中にセット
 *
 *	ただし, 国内のプレーヤーのみ
 ****************************************************************
 */
extern void mEv_SetFirstIntro( void );

/*
 ****************************************************************
 *	現在のプレーヤーが導入中かチェック
 *
 *	導入中		TRUE
 *	非導入中	FALSE
 ****************************************************************
 */
extern int mEv_CheckFirstIntro( void );

/*
 ****************************************************************
 *	現在のプレーヤーを導入中から解放
 *
 *	ただし, 国内のプレーヤーのみ
 ****************************************************************
 */
extern void mEv_UnSetFirstIntro( void );

/*
 ****************************************************************
 *	
 *     外人プレイヤー導入（出）中
 *	
 ****************************************************************
 */
extern void mEv_SetGateway( void );
extern void mEv_UnSetGateway( void );
extern int  mEv_CheckGateway( void );

/*
 ****************************************************************
 *	現在タイトル（客待ち）デモ中かチェック
 *
 *      0        タイトルデモは走っていない
 *      -1       Ｎキューブ（又は初期状態）
 *      それ以外 走っているタイトルデモの番号
 ****************************************************************
 */
extern int  mEv_CheckTitleDemo( void );

/*
 ****************************************************************
 *	タイトル（客待ち）デモの番号をセット
 ****************************************************************
 */
extern int  mEv_SetTitleDemo( int number );
#define mEv_UnSetTitleDemo()  mEv_SetTitleDemo(0)

#define EV_TITLEDEMO_NONE        ( 0)
#define EV_TITLEDEMO_NCUBE       (-1)
#define EV_TITLEDEMO_START1      ( 1)
#define EV_TITLEDEMO_START2      ( 2)
#define EV_TITLEDEMO_START3      ( 3)
#define EV_TITLEDEMO_START4      ( 4)
#define EV_TITLEDEMO_STAFFROLL   (-9)

/*
 ****************************************************************
 *	オープニングで家購入後から狸との再開までの間チェック
 *
 *	まだ狸と再開していない	TRUE
 *	もう狸と再開した	FALSE
 ****************************************************************
 */
extern int mEv_CheckBeforeReunionShopMaster( void );

/*
 ****************************************************************
 *	日付変更の際の更新処理
 *
 *	前回更新を行ったときから日付が変わっていれば処理を行う
 ****************************************************************
 */
extern void mEv_RenewalDataEveryDay( void );

/*
 ****************************************************************
 *	デバッグ用特殊イベント番号加算
 ****************************************************************
 */
#if	DEBUG
extern void mEv_add_special_no_debug( void );
#endif
/*
 ****************************************************************
 *	デバッグ用特殊イベント番号加算
 ****************************************************************
 */
#if	DEBUG
extern int mEv_get_special_no_debug( void );
#endif

/*
 ****************************************************************
 *	デバッグ用特殊イベント発生
 *
 *	この処理はデバッグ用です
 *	以前のデータは消去されます
 ****************************************************************
 */
#if	DEBUG
extern void mEv_SetSpecialEvent_debug( GAME *game_p );
#endif

/*
 ***************************************
 *	特殊イベント非セーブ領域の初期化
 ***************************************
 */
extern void mEv_InitEventNoSaveInfo( void );


#if !defined(NEW_EVENT_MANAGING)
/*
 ******************************************************************************
 *			通常イベントカレンダー関係
 ******************************************************************************
 */
/*
 ****************************************************************
 *	通常イベント情報のクリア
 ****************************************************************
 */
extern void mEv_ClearNormalInfo(
    mEv_nml_c	*normal_p,
    int		max
    );

/*
 ****************************************************************
 *	通常イベント 今月分のデータセット ( DMA )
 *
 *	DMAしたデータ内の個数を返します
 ****************************************************************
 */
extern int mEv_SetMonthlyNormalData(
    mEv_nml_c	*normal_p,	/** 通常イベント情報 DMA領域 */
    int		max,		/** 領域の個数 */
    int		month		/** 月 */
    );

/*
 ****************************************************************
 *	イベント用天気の取得
 *
 *	in	:	なし
 *
 *	out	:	天気 (Weather_t *)
 *			天気レベル (short *)
 *
 *---------------------------------------------------------------
 *	備考	イベントで強制的に変更する天気がない場合は
 *		天気 (weather *)に -1が返ります
 ****************************************************************
 */
extern void mEv_GetEventWeather(
    Weather_t	*weather,
    short	*level
    );

/*
 ****************************************************************
 *	通常イベント情報の時間チェック
 *
 *	発生	TRUE
 *	未発生	FALSE
 ****************************************************************
 */
extern int mEv_CheckNormalData(
    mEv_ckd_c	*check_data_p	/** イベントチェックデータ */
    );

/*
 ****************************************************************
 *	通常イベントの発生チェック ( イベント発生はしません )
 *
 *	発生	TRUE
 *	未発生	FALSE
 ****************************************************************
 */
extern int mEv_CheckNormal(
    mEv_nml_c	*normal_p	/** 通常イベントデータ */
    );

/*
 ****************************************************************
 *	通常イベントの終了チェック
 *
 *	終了	TRUE
 *	未終了	FALSE
 *
 *---------------------------------------------------------------
 *	備考	
 *	イベントの種類が mEv_ERR_EVENT_NOの時は処理しません
 ****************************************************************
 */
extern int mEv_CheckNormalFin(
    mEv_nml_c	*normal_p	/** 通常イベントデータ */
    );
#endif
 
#ifdef	_LANGUAGE_C_PLUS_PLUS
}
#endif

#endif	/** defined(LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */
#endif	/** __M_EVENT_H__ */
