#ifndef  _BURY_H
#define  _BURY_H

#include <sys/bios.h>
#include <sys/libwwc.h>
#include <il_sound.h>
#include <resource.h>
#include <stdio.h>
#include <stdlib.h>

#define JIKI 777
#define OK 1
#define NG 0
#define TURUE 1
#define FALSE 0
#define NORMAL 1   /*自機が正面を向いた状態を示す*/
#define LEFT  5    /*自機が左を向いた状態を示す*/
#define RIGHT 9    /*自機が右を向いた状態を示す*/
#define MEITYU 16  /*弾が命中した状態を示す*/
#define P 291      /*ショットパワーアップアイテムキャラナンバー*/
#define S 295      /*スピードパワーアップアイテムキャラナンバー*/
#define ONEUP 299 /*1UPアイテムキャラナンバー*/
#define ITEM 124

#define TAMA 13
#define TEKI_TAMA 14

#define TEKI_KAZU 15   /*敵の数*/
#define TAMA_KAZU 18   /*弾の数*/
#define T_TAMA_KAZU 20 /*敵弾の数*/

#define BREAK   1 /*キャラが破壊されたことを示す*/
#define END		2
#define MUTEKI  3 /*自機の復帰後の無敵状態*/
#define FUKKI   4 /*自機が破壊た後の復帰状態*/
#define DEFAULT 5 /*自機の通常状態*/

#define MOVE1     10
#define MOVE2     20
#define MOVE3     30
#define MOVE4     40
#define MOVE5     50
#define BOSS     100
#define PART     110
#define ITEM_BOX 120

#define HIBANA(NO) (15 + (NO))     /*ＮＯ＝0〜2*/
#define BAKUHA(NO) (19 + (NO*4)) /*爆発絵のキャラナンバー*/
#define ZANKI(NO)   (9 + (NO))

#define ZAKO       31/*キャラナンバー*/
#define ZAKO_AP     0/*ＡＰは敵の耐久力*/
#define M_TEKI1    35
#define M_TEKI2    39
#define M_TEKI_AP  20
#define L_TEKI1   200
#define L_TEKI2   204
#define L_TEKI3   208
#define L_TEKI4   212
#define L_TEKI_AP  40
#define BOSS_AP   244
#define B(NO) (1280 + (NO)) /*ボスが出てくる時間*/

#define PALETTE(NO) ((NO) << 9)/*パレット選択*/

/*リソース用マクロ*/
#define SEG_INIT(RES)  MK_FP(FP_SEG(RES)+(FP_OFF(RES)>>4), FP_OFF(RES) & 0x000f)
#define NEXT_RES(RES)  MK_FP(FP_SEG(RES)+(res->size)     , FP_OFF(RES))

/*自機、敵機の情報*/
struct kanri {
	unsigned char x;
	unsigned char y;
	unsigned char s_no;      /*使用するスプライト番号*/
	unsigned	  k_no;      /*初期表示キャラクタ番号*/
	unsigned char pal[2];    /*パレットカラー*/
	unsigned char mode;      /*状態*/
	unsigned char ap;        /*自機では残機、敵では残り耐久力として使用*/
	unsigned timer;          /*時間測定用*/
	unsigned char link_no;   /*敵キャラ複数で一つの大きい敵を作っている時に使用*/
	unsigned char link_size;
};
typedef struct kanri kyara;

/*弾の情報*/
struct kanri2 {
	unsigned char x;
	unsigned char y;
	int s_y;
	unsigned char s_no;
	unsigned char mode;
	unsigned char timer;
};
typedef struct kanri2 kyara2;
/*敵弾用*/
struct kanri3 {
	unsigned char x;
	unsigned char y;
	int s_x;
	int s_y;
	unsigned char s_no;
	unsigned char mode;
};
typedef struct kanri3 kyara3;
/*アイテム用*/
struct kanri4 {
	unsigned char x;
	unsigned char y;
	unsigned char s_no;
	unsigned	  k_no;
	unsigned char mode;
};
typedef struct kanri4 kyara4;

int hard_check(void);/*WSCで無い場合は警告を出して終了*/
void stage(void);/*ステージを統括*/
int jiki_set(void);
void zanki_set(void);/*残機を表示*/

/*音楽*/
int bgm_start(const bgm_no); /*bgm_noで指定したBGMを流す*/
void bgm_end(void);          /*BGM終了処理*/

/*イメージ用*/
void spr_view(const kyara *zako); /*スプライトの配置*/
void spr_set(const kyara *kitai); /*スプライトのセット*/
void spr_set_view(int id);        /*スプライトのセットと配置*/
res_t far *res_get(void);
void res_set(int k_no, int size);
void image_init(void);            /*画面の初期化*/
void pal_set(void);              /*カラーパレットセット*/
void title(void);
void screen_set(void);

/*エフェクト*/
int bakuha(int id); /*爆発エフェクト*/
int tenmetu(void);  /*点滅エフェクト*/

/*テキスト*/
void wwc_text_set(int k_no, unsigned char moji);
void wwc_text_put_char(int x, int y, int s_no, int k_no, unsigned char moji);
void wwc_text_put_string(int x, int y, int s_no, int k_no, const unsigned char *str);
void ten_view(unsigned ten);

/*弾制御用*/
void tama_view(void);
void tama_set(int _x, int _y, int s_y, int no);/*弾を画面上に出現させる*/

/*敵制御用*/
void map1_phase(int timer);
void map1_set_data(void);
void t_set_dt(int no, int x, int y, int k_no, int pal, int ap, int timer, int link_no, int link_size);
void t_set(int teki_no, int teki_tama_no);
void t_set2(int teki_no, int no, int s_x, int s_y);
void teki_tama_view(void);
int teki_view(int no);    /*敵の動き*/
int teki_set(kyara *teki, int move_mode);
void boss_set0(void);
void boss_set1(int timer); /*ボスキャラの制御*/
void boss_set2(int timer); 

#endif