#ifndef __BATTLE_H__
#define __BATTLE_H__

#define	BATTLE_ENTRY_MAX 10
#define	BATTLE_PLAYER_MAX 5
#define SIDE_OFFSET 	10

#define BATTLE_STRING_MAX	4096
#define BATTLE_TIME_LIMIT	(60*60)


#define DUELPOINT_RATE	(0.1)

enum{
	BATTLE_MODE_NONE = 0,	// 无战斗状态
	BATTLE_MODE_INIT,		// 战斗初始化
	BATTLE_MODE_BATTLE,		// 战斗中
	BATTLE_MODE_FINISH,		// 战斗结束
	BATTLE_MODE_STOP,		// 战斗结束(未使用)
	BATTLE_MODE_WATCHBC,	// 观战初始化
	BATTLE_MODE_WATCHPRE,	// 观战(没作用)
	BATTLE_MODE_WATCHWAIT,	// 观战(没作用)
	BATTLE_MODE_WATCHMOVIE, // 观战(没作用)
	BATTLE_MODE_WATCHAFTER, // 观战(没作用)
	BATTLE_MODE_END
};


enum{
	BATTLE_TYPE_NONE = 0,
	BATTLE_TYPE_P_vs_E = 1,
	BATTLE_TYPE_P_vs_P = 2,
	BATTLE_TYPE_E_vs_E = 3,
	BATTLE_TYPE_WATCH = 4,
	BATTLE_TYPE_DP_BATTLE = 5,
	BATTLE_TYPE_BOSS_BATTLE = 6,
	BATTLE_TYPE_END
};


enum{
	BATTLE_CHARMODE_NONE = 0,		// 无战斗状态
	BATTLE_CHARMODE_INIT,			// 战斗初始化
	BATTLE_CHARMODE_C_WAIT,			// 等待战斗指令
	BATTLE_CHARMODE_C_OK,			// 已输入战斗指令
	BATTLE_CHARMODE_BATTLE,			// 未使用
	BATTLE_CHARMODE_RESCUE,			// 由help状态进入的
	BATTLE_CHARMODE_FINAL,			// 战斗结束
	BATTLE_CHARMODE_WATCHINIT,		// 观战初始化
	BATTLE_CHARMODE_COMMAND,		// 未使用
	BATTLE_CHARMODE_END
};




typedef enum{
	BATTLE_ERR_NONE = 0,
	BATTLE_ERR_NOTASK,
	BATTLE_ERR_NOUSE,
	BATTLE_ERR_PARAM,
	BATTLE_ERR_ENTRYMAX,
	BATTLE_ERR_TYPE,
	BATTLE_ERR_CHARAINDEX,
	BATTLE_ERR_BATTLEINDEX,
	BATTLE_ERR_NOENEMY,
	BATTLE_ERR_ALREADYBATTLE,
	BATTLE_ERR_SAMEPARTY,
	BATTLE_ERR_END
}BATTLE_ERR;


enum{
	BATTLE_S_TYPE_PLAYER = 0,
	BATTLE_S_TYPE_ENEMY,
	BATTLE_S_TYPE_END
};


typedef enum{
	BATTLE_COM_NONE,
	BATTLE_COM_ATTACK,
	BATTLE_COM_GUARD,
	BATTLE_COM_CAPTURE,
	BATTLE_COM_ESCAPE,
	BATTLE_COM_PETIN,
	BATTLE_COM_PETOUT,
	BATTLE_COM_ITEM,
	BATTLE_COM_BOOMERANG,
	BATTLE_COM_COMBO,
	BATTLE_COM_COMBOEND,
	BATTLE_COM_WAIT,

	BATTLE_COM_SEKIBAN = 1000,
	BATTLE_COM_S_RENZOKU,
	BATTLE_COM_S_GBREAK,
	BATTLE_COM_S_GUARDIAN_ATTACK,
	BATTLE_COM_S_GUARDIAN_GUARD,
	BATTLE_COM_S_CHARGE,
	BATTLE_COM_S_MIGHTY,
	BATTLE_COM_S_POWERBALANCE,
	BATTLE_COM_S_STATUSCHANGE,
	BATTLE_COM_S_EARTHROUND0,
	BATTLE_COM_S_EARTHROUND1,
	BATTLE_COM_S_LOSTESCAPE,
	BATTLE_COM_S_ABDUCT,
	BATTLE_COM_S_STEAL,
	BATTLE_COM_S_NOGUARD,
	BATTLE_COM_S_CHARGE_OK,
	BATTLE_COM_JYUJYUTU = 2000,

	BATTLE_COM_COMPELESCAPE, //强制离开

#ifdef __ATTACK_MAGIC
  BATTLE_COM_S_ATTACK_MAGIC,		// 宠物魔法
#endif

#ifdef _PSKILL_FALLGROUND
	BATTLE_COM_S_FALLRIDE,			//落马术
#endif
#ifdef _PETSKILL_EXPLODE
	BATTLE_COM_S_EXPLODE,
#endif
#ifdef _PETSKILL_TIMID
	BATTLE_COM_S_TIMID,
#endif
#ifdef _PETSKILL_2TIMID
	BATTLE_COM_S_2TIMID,
#endif
#ifdef _PETSKILL_ANTINTER
	BATTLE_COM_S_ANTINTER,
#endif
#ifdef _PETSKILL_PROPERTY
	BATTLE_COM_S_PROPERTYSKILL,
#endif
#ifdef _PETSKILL_TEAR
	BATTLE_COM_S_PETSKILLTEAR,
#endif
#ifdef _BATTLE_LIGHTTAKE
	BATTLE_COM_S_LIGHTTAKE,
#endif
#ifdef _BATTLE_ATTCRAZED		// ANDY 疯狂暴走
	BATTLE_COM_S_ATTCRAZED,
#endif
#ifdef _SHOOTCHESTNUT			// Syu ADD 宠技：丢栗子
	BATTLE_COM_S_ATTSHOOT,
#endif
#ifdef _BATTLESTEAL_FIX
	BATTLE_COM_S_STEALMONEY,
#endif
#ifdef _PRO_BATTLEENEMYSKILL
	BATTLE_COM_S_ENEMYRELIFE,		//NPC ENEMY 复活技能
	BATTLE_COM_S_ENEMYREHP,			//NPC ENEMY 补血技能
	BATTLE_COM_S_ENEMYHELP,			//NPC ENEMY 招人
#endif
#ifdef _SKILL_DAMAGETOHP
	BATTLE_COM_S_DAMAGETOHP,		//嗜血技
#endif
#ifdef _Skill_MPDAMAGE
	BATTLE_COM_S_MPDAMAGE,			//MP伤害
#endif
#ifdef _SKILL_WILDVIOLENT_ATT
    BATTLE_COM_S_WILDVIOLENTATTACK, //狂暴攻击  vincent add 2002/05/16
#endif

#ifdef _SKILL_SPEEDY_ATT
    BATTLE_COM_S_SPEEDYATTACK,		//疾速攻击  vincent add 2002/05/20
#endif
#ifdef _SKILL_GUARDBREAK2
    BATTLE_COM_S_GBREAK2,			//破除防御2 vincent add 2002/05/20
#endif
#ifdef _SKILL_SACRIFICE
    BATTLE_COM_S_SACRIFICE,			//救援		vincent add 2002/05/30
#endif
#ifdef _SKILL_WEAKEN  
	    BATTLE_COM_S_WEAKEN,		//虚弱		vincent add 2002/07/11
#endif
#ifdef _SKILL_DEEPPOISON  
	    BATTLE_COM_S_DEEPPOISON,	//剧毒		vincent add 2002/07/16
#endif
#ifdef _SKILL_BARRIER  
	    BATTLE_COM_S_BARRIER,		//魔障		vincent add 2002/07/16
#endif
#ifdef _SKILL_NOCAST 
	    BATTLE_COM_S_NOCAST,		//沉默		vincent add 2002/07/16
#endif
#ifdef _SKILL_ROAR 
    BATTLE_COM_S_ROAR,			    //大吼		vincent add 2002/07/11
#endif
#ifdef _BATTLENPC_WARP_PLAYER
	BATTLE_COM_WARP,                // npc warp player
#endif
#ifdef _SKILL_TOOTH
	BATTLE_COM_S_TOOTHCRUSHE,
#endif
#ifdef _PSKILL_MODIFY
	BATTLE_COM_S_MODIFYATT,
#endif
#ifdef _PSKILL_MDFYATTACK
	BATTLE_COM_S_MDFYATTACK,
#endif
#ifdef _MAGIC_SUPERWALL
	BATTLE_COM_S_SUPERWALL,
#endif
#ifdef _SKILL_REFRESH
    BATTLE_COM_S_REFRESH,
#endif
#ifdef _VARY_WOLF
	BATTLE_COM_S_VARY,
#endif
#ifdef _PETSKILL_SETDUCK
	BATTLE_COM_S_SETDUCK,
#endif
#ifdef _MAGICPET_SKILL
	BATTLE_COM_S_SETMAGICPET,
#endif
#ifdef _PROFESSION_SKILL			// WON ADD 人物职业技能

// 巫师
	BATTLE_COM_S_VOLCANO_SPRINGS,	// 火山泉	
	BATTLE_COM_S_FIRE_BALL,			// 火星球
	BATTLE_COM_S_FIRE_SPEAR,		// 火龙枪
	BATTLE_COM_S_SUMMON_THUNDER,	// 召雷术
	BATTLE_COM_S_CURRENT,			// 电流术
	BATTLE_COM_S_STORM,				// 暴风雨
	BATTLE_COM_S_ICE_ARROW,			// 冰箭术
	BATTLE_COM_S_ICE_CRACK,			// 冰爆术
	BATTLE_COM_S_ICE_MIRROR,		// 冰镜术
	BATTLE_COM_S_DOOM,				// 世界末日
	BATTLE_COM_S_BLOOD,				// 嗜血成性
	BATTLE_COM_S_BLOOD_WORMS,		// 嗜血蛊
	BATTLE_COM_S_SIGN,				// 一针见血
	BATTLE_COM_S_FIRE_ENCLOSE,		// 火附体	
	BATTLE_COM_S_ICE_ENCLOSE,		// 冰附体
	BATTLE_COM_S_THUNDER_ENCLOSE,	// 雷附体
	BATTLE_COM_S_ENCLOSE,			// 附身术
	BATTLE_COM_S_TRANSPOSE,			// 移形换位
// 勇士
	BATTLE_COM_S_BRUST,				// 爆击			
	BATTLE_COM_S_CHAIN_ATK,			// 连环攻击
	BATTLE_COM_S_AVOID,				// 回避
	BATTLE_COM_S_RECOVERY,			// 补血
	BATTLE_COM_S_WEAPON_FOCUS,		// 武器专精
	BATTLE_COM_S_REBACK,			// 状态回复
	BATTLE_COM_S_CHAIN_ATK_2,		// 双重攻击
	BATTLE_COM_S_SCAPEGOAT,			// 舍已为友
	BATTLE_COM_S_ENRAGE,			// 激化攻击
	BATTLE_COM_S_COLLECT,			// 能量聚集
	BATTLE_COM_S_FOCUS,				// 专注战斗
	BATTLE_COM_S_SHIELD_ATTACK,		// 盾击
	BATTLE_COM_S_DUAL_WEAPON,		// 二刀流
	BATTLE_COM_S_DEFLECT,			// 格档
	BATTLE_COM_S_THROUGH_ATTACK,	// 贯穿攻击
	BATTLE_COM_S_CAVALRY,			// 座骑攻击
	BATTLE_COM_S_DEAD_ATTACK,		// 濒死攻击
	BATTLE_COM_S_CONVOLUTE,			// 回旋攻击
	BATTLE_COM_S_CHAOS,				// 混乱攻击
// 猎人
	BATTLE_COM_S_TRAP,				// 陷阱			
	BATTLE_COM_S_TRACK,				// 追寻敌踪
	BATTLE_COM_S_DOCILE,			// 驯伏宠物	
	BATTLE_COM_S_ENRAGE_PET,		// 激怒宠物	
	BATTLE_COM_S_DRAGNET,			// 天罗地网
	BATTLE_COM_S_ENTWINE,			// 树根缠绕
	BATTLE_COM_S_AUTARKY,			// 自给自足
	BATTLE_COM_S_PLUNDER,			//   体掠夺
	BATTLE_COM_S_TOXIN_WEAPON,		// 毒素武器
	BATTLE_COM_S_RESIST_FIRE,		// 火抗性提升
	BATTLE_COM_S_RESIST_ICE,		// 冰抗性提升
	BATTLE_COM_S_RESIST_THUNDER,	// 雷抗性提升
	BATTLE_COM_S_G_RESIST_FIRE,		// 团体火抗性提升
	BATTLE_COM_S_G_RESIST_ICE,		// 团体冰抗性提升
	BATTLE_COM_S_G_RESIST_THUNDER,	// 团体雷抗性提升
	BATTLE_COM_S_ATTACK_WEAK,		// 弱点攻击
	BATTLE_COM_S_INSTIGATE,			// 挑拨
	BATTLE_COM_S_OBLIVION,			// 遗忘
#ifdef _PROFESSION_ADDSKILL
	BATTLE_COM_S_RESIST_F_I_T,      // 自然威能
	BATTLE_COM_S_CALL_NATURE,       // 号召自然
    BATTLE_COM_S_BOUNDARY,          // 四属性结界
#endif
#endif	

#ifdef _PET_SKILL_SARS				// WON ADD 毒煞蔓延
	BATTLE_COM_S_SARS,
#endif
#ifdef _SONIC_ATTACK				// WON ADD 音波攻击
	BATTLE_COM_S_SONIC,
	BATTLE_COM_S_SONIC2,
#endif
#ifdef _PETSKILL_REGRET
	BATTLE_COM_S_REGRET,
	BATTLE_COM_S_REGRET2,
#endif
#ifdef _PETSKILL_GYRATE
    BATTLE_COM_S_GYRATE,
#endif
#ifdef _PETSKILL_ACUPUNCTURE
    BATTLE_COM_S_ACUPUNCTURE,
#endif
#ifdef _PETSKILL_RETRACE
	BATTLE_COM_S_RETRACE,
#endif
#ifdef _PETSKILL_HECTOR
	BATTLE_COM_S_HECTOR,
#endif
#ifdef _PETSKILL_FIREKILL
    BATTLE_COM_S_FIREKILL,
#endif
#ifdef _PETSKILL_DAMAGETOHP
	BATTLE_COM_S_DAMAGETOHP2, //暗月狂狼(嗜血技的变体) 
#endif
#ifdef _PETSKILL_BECOMEFOX
    BATTLE_COM_S_BECOMEFOX,
#endif
#ifdef _PETSKILL_BECOMEPIG
    BATTLE_COM_S_BECOMEPIG,
#endif
#ifdef _PETSKILL_SHOWMERCY
    BATTLE_COM_S_SHOWMERCY,
#endif
#ifdef _PETSKILL_LER
		BATTLE_COM_S_BAT_FLY,					// 雷尔技 - 群蝠四窜
		BATTLE_COM_S_DIVIDE_ATTACK,		// 雷尔技 - 分身地裂
#endif
#ifdef _PETSKILL_BATTLE_MODEL
		BATTLE_COM_S_BATTLE_MODEL,		// 宠物技能战斗模组
#endif

	BATTLE_COM_END
}BATTLE_COM;


enum{
	BATTLE_RET_NORMAL,
	BATTLE_RET_CRITICAL,
	BATTLE_RET_MISS,
	BATTLE_RET_DODGE,
	BATTLE_RET_ALLGUARD,
#ifdef _EQUIT_ARRANGE
	BATTLE_RET_ARRANGE,
#endif
	BATTLE_RET_END
}BATTLE_RET;


#define BC_FLG_NEW			(1<<0)
#define BC_FLG_DEAD			(1<<1)
#define BC_FLG_PLAYER		(1<<2)
#define BC_FLG_POISON		(1<<3)
#define BC_FLG_PARALYSIS	(1<<4)
#define BC_FLG_SLEEP		(1<<5)
#define BC_FLG_STONE		(1<<6)
#define BC_FLG_DRUNK		(1<<7)
#define BC_FLG_CONFUSION	(1<<8)
#define BC_FLG_HIDE			(1<<9)
#define BC_FLG_REVERSE		(1<<10)
#ifdef _MAGIC_WEAKEN
#define BC_FLG_WEAKEN		(1<<11) // 虚弱
#endif
#ifdef _MAGIC_DEEPPOISON
#define BC_FLG_DEEPPOISON	(1<<12) // 剧毒
#endif
#ifdef _MAGIC_BARRIER
#define BC_FLG_BARRIER		(1<<13) // 魔障
#endif
#ifdef _MAGIC_NOCAST
#define BC_FLG_NOCAST		(1<<14) // 沉默
#endif

#ifdef _PET_SKILL_SARS			// WON ADD 毒煞蔓延
#define BC_FLG_SARS			(1<<15) // 毒煞
#endif

#ifdef _PROFESSION_SKILL			// WON ADD 人物职业技能
#define BC_FLG_DIZZY		(1<<16)	// 晕眩	
#define BC_FLG_ENTWINE		(1<<17)	// 树根缠绕
#define BC_FLG_DRAGNET		(1<<18)	// 天罗地网	
#define BC_FLG_ICECRACK	    (1<<19)	// 冰爆术	
#define BC_FLG_OBLIVION  	(1<<20)	// 遗忘
#define BC_FLG_ICEARROW		(1<<21)	// 冰箭
#define BC_FLG_BLOODWORMS 	(1<<22)	// 嗜血蛊
#define BC_FLG_SIGN 		(1<<23)	// 一针见血
#define BC_FLG_CARY			(1<<24) // 挑拨
#define BC_FLG_F_ENCLOSE	(1<<25) // 火附体
#define BC_FLG_I_ENCLOSE	(1<<26) // 冰附体
#define BC_FLG_T_ENCLOSE	(1<<27) // 雷附体
#ifdef _PROFESSION_ADDSKILL
#define BC_FLG_WATER	    (1<<28) // 水附体
#define BC_FLG_FEAR			(1<<29) // 恐惧
#endif
#ifdef _PETSKILL_LER
#define BC_FLG_CHANGE			(1<<30) // 雷尔变身
#endif
#endif




#define BP_FLG_JOIN					(1<<0)
#define BP_FLG_PLAYER_MENU_OFF		(1<<1)
#define BP_FLG_BOOMERANG			(1<<2)
#define BP_FLG_PET_MENU_OFF			(1<<3)
#define BP_FLG_ENEMY_SURPRISAL		(1<<4)
#define BP_FLG_PLAYER_SURPRISAL		(1<<5)


#define CHAR_BATTLEFLG_ULTIMATE		(1<<0)
#define CHAR_BATTLEFLG_AIBAD		(1<<1)
#define CHAR_BATTLEFLG_REVERSE		(1<<2)
#define CHAR_BATTLEFLG_GUARDIAN		(1<<3)
#define CHAR_BATTLEFLG_NORETURN		(1<<4)
#define CHAR_BATTLEFLG_RECOVERY		(1<<5)
#define CHAR_BATTLEFLG_ABIO			(1<<6)
#define CHAR_BATTLEFLG_NODUCK		(1<<7)

#define GETITEM_MAX	3
typedef struct
{
	int attacker;
}INVADER;

typedef struct
{
	int		charaindex;
	int		bid;
	int		escape;
	int		flg;
	int		guardian;
	int		duelpoint;
	int		getitem[GETITEM_MAX];
}BATTLE_ENTRY;
#define BENT_FLG_ULTIMATE	(1<<0)

typedef struct
{
	int		type;
	int		flg;
	int		common_dp;
	BATTLE_ENTRY	Entry[BATTLE_ENTRY_MAX];
}BATTLE_SIDE;

#define BSIDE_FLG_SURPRISE ( 1 << 0 )
#define BSIDE_FLG_HELP_OK ( 1 << 1 )



typedef struct _Battle
{
	BOOL	use;	/* 银匀化中月井升丹井 */
	int		battleindex; /* 田玄伙  寞 */
	int		mode;	/* 蜇箕及爵  乒□玉 */
	int		type;	/* 爵  正奶皿 (0:骚橘)(1:DUEL)(2:示旦爵) */
	int		dpbattle;	/* DP田玄伙井＂ */
	int		norisk;	/* 韶氏匹手伉旦弁及  中田玄伙井＂ */
	int		turn;	/* 正□件醒 */
	int		timer;	/* 它巨奶玄羁卞银丹正奶穴 */
	int		leaderindex; /* 巨件市它件玄毛粟仇仄凶平乓仿及奶件犯永弁旦 */
	int		winside; /*   厍仄凶扔奶玉 */
	int		field_att;	/* 白奴□伙玉及箪岭 */
	int		att_count;	/* 白奴□伙玉及箪岭  祭  及正奶穴 */
	int		att_pow;	/* 白奴□伙玉及箪岭  祭  及由伐□ */
	int		field_no;
	int		flg;		/* 备潘白仿弘 */
	BATTLE_SIDE		Side[2];
#ifdef _BATTLE_TIMESPEED
	unsigned int CreateTime;
	unsigned int EndTime;
	unsigned int PartTime;
	int flgTime;
	
#endif

#ifdef _PROFESSION_ADDSKILL
	//冰爆术存放
	int ice_count;//暂存数量
	int ice_bout[20];//回合计数
	BOOL ice_use[20];//是否使用
	int ice_toNo[20];//对象
	int ice_level[20];//攻击力
	int ice_array[20];
	int ice_charaindex[20];
	int ice_attackNo[20];
#endif

#ifdef _DEATH_CONTEND
	int menum;
	int tonum;
#endif

#ifdef _ACTION_BULLSCR
	int enemynum;
#endif
	int		iEntryBack[BATTLE_ENTRY_MAX*2];		// 蟆正□件瓒  今木化中凶丢件田□
	int		iEntryBack2[BATTLE_ENTRY_MAX*2];		// 蟆正□件瓒  今木化中凶丢件田□
	int		createindex;	/* 仇及爵  毛综曰请仄凶平乓仿奶件犯永弁旦(NPC卅升) */
	int    (*WinFunc)( int battleindex, int charaindex );
#ifdef _DEATH_CONTEND//计算胜败func
	int    (*PkFunc)( int menum, int tonum, int winside, int battlemap);
	int battlemap;
#endif
	struct _Battle *pNext;		// 戚及棋爵弘伙□皿
	struct _Battle *pBefore;	// 蟆及棋爵弘伙□皿
}BATTLE;

#define BATTLE_FLG_FREEDP ( 1 << 0 )	//   仆化手    蛹日卅中
#define BATTLE_FLG_CHARALOST   ( 1 << 1 )	// 平乓仿互韶氏分曰  仃凶曰仄化中月



enum{	// 晓及field_att 卞  木月袄
	BATTLE_ATTR_NONE = 0,	//   箪岭
	BATTLE_ATTR_EARTH,		// 哗
	BATTLE_ATTR_WATER,		//   
	BATTLE_ATTR_FIRE,		// 绍
	BATTLE_ATTR_WIND,		// 氘
	BATTLE_ATTR_END
};


//krynn 2001/12/28
enum
{
	BATTLE_SIDE_RIGHT,		// 战斗中右侧	right side of battle
	BATTLE_SIDE_LEFT,		// 战斗中左侧	left side of battle
	BATTLE_SIDE_WATCH,		// 观战			watch battle player
};
//krynn end

#define TARGET_SIDE_0	20	// 惘础  扔奶玉ㄟ  隙烂
#define TARGET_SIDE_1	21	// 尔础  扔奶玉ㄠ  隙烂
#define TARGET_ALL	22	// 蝈  隙烂

#ifdef __ATTACK_MAGIC

#define TARGET_SIDE_0_B_ROW     26      // 右下後一列
#define TARGET_SIDE_0_F_ROW     25      // 右下前一列
#define TARGET_SIDE_1_F_ROW     24      // 左上前一列
#define TARGET_SIDE_1_B_ROW     23      // 左上後一列

// won add
#define	TARGER_THROUGH			27

#endif

extern int	gItemCrushRate;		//   莽  犯白巧伙玄
extern BATTLE *BattleArray; 	/* 爵  正旦弁     */
extern int BATTLE_battlenum;	/*     及醒 */
extern char szAllBattleString[BATTLE_STRING_MAX];	/* 爵  卞银丹戊穴件玉  侬   */
extern char *pszBattleTop, *pszBattleLast;	/* 爵  卞银丹  侬  及匏   */
extern char szBadStatusString[];	// 旦  □正旦唱橘迕  侬  
extern int gWeponType;	// 蜇箕及  湛及潘  
extern float gDamageDiv;	// 母丢□斥坌喃

#define BATTLE_CHECKINDEX( a ) ( ((a)>=BATTLE_battlenum || (a)<0 )?(FALSE):(TRUE) )
#define BATTLE_CHECKSIDE( a ) ( ((a)>=2 || (a)<0)?(FALSE):( TRUE) )
#define BATTLE_CHECKNO( a ) ( ((a)>=20 || (a)<0 )?(FALSE):(TRUE) )
#define BATTLE_CHECKADDRESS( a )  ((&BattleArray[0])<=(a) && (a)<=(&BattleArray[BATTLE_battlenum-1] )?(TRUE):(FALSE) ) 

#define IsBATTLING( a ) (CHAR_getWorkInt((a),CHAR_WORKBATTLEMODE)?(TRUE):(FALSE))

#define STRCPY_TAIL( _pszTop, _pszLast, _szBuffer)	{ int _len = strlen( _szBuffer ); ( _pszTop + _len < (_pszLast)-1 )?( memcpy( _pszTop, _szBuffer, _len ),	_pszTop += _len, _pszTop[0] = 0):(0); }

#define BATTLESTR_ADD( _szBuffer ){ int _len = strlen( _szBuffer ); ( pszBattleTop + _len < ( pszBattleLast)-1 )?( memcpy( pszBattleTop, _szBuffer, _len ),	pszBattleTop += _len, pszBattleTop[0] = 0):(0); }

#define BATTLE_MAP_MAX 219

#define CH_FIX_PLAYERLEVELUP	(+2)	// 皿伊奶乩□及伊矛伙互失永皿
#define CH_FIX_PLAYERDEAD		(-2)	// 皿伊奶乩□互骚橘韶
#define CH_FIX_PLAYEULTIMATE	(-4)	// 皿伊奶乩□互失伙  奴丢永玄韶
#define CH_FIX_PETESCAPE		(-1)	// 矢永玄互  仆凶

#define AI_FIX_PETLEVELUP		(+5*100)	// 矢永玄互伊矛伙失永皿
#define AI_FIX_PETWIN			(+1)		// 矢永玄互衬毛逦仄凶
#define AI_FIX_PETGOLDWIN		(+2*10)	// 矢永玄互伊矛伙及嫖中衬毛逦仄凶
#define AI_FIX_PETRECOVERY		(+10)		// 爵    卞荚汊仄化手日匀凶
#define AI_FIX_PETRESSURECT		(+3*100)	// 爵    卞汊唾仄化手日匀凶
//#define AI_FIX_PETRECOVERY	(+50)		// 爵    卞荚汊仄化手日匀凶

#define AI_FIX_SEKKAN 			(-2*100)	// 愤坌及矢永玄毛  猾
#define AI_FIX_PLAYERULTIMATE	(-10*100)	// 愤坌及潜谛互失伙  奴丢永玄韶
#define AI_FIX_PETULTIMATE		(-10*100)	// 矢永玄互失伙  奴丢永玄韶
#define AI_FIX_PLAYERDEAD		(-1*100)	// 愤坌及潜谛互竣濮
#define AI_FIX_PETDEAD			(-5*100)	// 矢永玄互竣濮


#ifdef _Item_ReLifeAct
int BATTLE_getBattleDieIndex( int battleindex, int bid );
#endif

int BATTLE_No2Index( int battleindex, int No);

int BATTLE_Index2No( int battleindex, int charaindex);

BOOL BATTLE_initBattleArray( int battlenum);

int BATTLE_CreateBattle( void );
int BATTLE_DeleteBattle( int battleindex);

int BATTLE_NewEntry( int charaindex, int battleindex, int side);

#define BATTLE_Exit( charaindex, battleindex) _BATTLE_Exit( __FILE__, __LINE__, charaindex, battleindex)
INLINE int _BATTLE_Exit( char *file, int line, int charaindex ,int battleindex);

#define BATTLE_ExitAll( battleindex) _BATTLE_ExitAll( __FILE__, __LINE__, battleindex)
INLINE void _BATTLE_ExitAll( char *file, int line, int battleindex);

int BATTLE_CreateVsPlayer( int charaindex0,	int charaindex1);

int BATTLE_CreateVsEnemy( int charaindex, int mode,	int	npcindex);

int BATTLE_CountEntry( int battleindex,	int side);

int BATTLE_Loop( void );

int BATTLE_FinishSet( int battleindex );
int BATTLE_StopSet( int battleindex );
int BATTLE_RescueEntry( int charaindex, int toindex);

int BATTLE_PetDefaultExit( int charaindex, int battleindex);

int	BATTLE_PetDefaultEntry(
	int charaindex,	// 矢永玄毛  匀化中月皿伊奶乩□及          
	int battleindex,// 田玄伙奶件犯永弁旦
	int side
);

BOOL BATTLE_RescueTry( int charaindex);

BOOL BATTLE_RescueParentTry(
		int charaindex,
		int pindex
	);

int BATTLE_DefaultAttacker(	int battleindex, int side);

BOOL BATTLE_IsThrowWepon( int itemindex);

void BATTLE_BadStatusString( int defNo, int status );
int BATTLE_MultiList( int battleindex, int toNo, int ToList[] );
BOOL BATTLE_IsCharge( int com );
BOOL BATTLE_CanMoveCheck( int charaindex );
int BATTLE_TargetCheck( int battleindex, int defNo);
char *BATTLE_CharTitle( int charaindex );
void BATTLE_EscapeDpSend( int battleindex, int charaindex );
int BATTLE_GetDuelPoint( int battleindex, int side, int num);
int BATTLE_TargetCheckDead(	int battleindex, int defNo);

void BATTLE_MultiListDead( int battleindex, int toNo, int ToList[] );
BOOL BATTLE_WatchTry( int charaindex);
int BATTLE_WatchEntry( int charaindex, int toindex);
void BATTLE_WatchStop( int charaindex );
int BATTLE_WatchUnLink( int battleindex );
void BATTLE_BpSendToWatch( BATTLE *pBattle,	char *pszBcString);

int BATTLE_GetWepon( int charaindex );

#ifdef _ITEM_EQUITSPACE
int BATTLE_GetEqShield( int charaindex );
#endif

int BATTLE_GetAttackCount( int charaindex );
int DoujyouRandomWeponSet( int charaindex );
void BATTLE_AttReverse( int charaindex );
void BATTLE_BadStatusAllClr( int charaindex );
#define CHAR_GETWORKINT_HIGH( index, pos )	( CHAR_getWorkInt( (index), (pos) ) >> 16 )
#define CHAR_SETWORKINT_HIGH( index, pos, set )	{ int iTmp = CHAR_getWorkInt( (index), (pos) ) & 0xFFFF, work = (set);	CHAR_setWorkInt( (index), (pos), (work << 16)|iTmp ); }
#define CHAR_GETWORKINT_LOW( index, pos )	( CHAR_getWorkInt( (index), (pos) ) & 0xFFFF )
#define CHAR_SETWORKINT_LOW( index, pos, set )	{ int iTmp = CHAR_getWorkInt( index, pos ) & 0xFFFF0000, work = (set);	CHAR_setWorkInt( (index), (pos), (work & 0x0000FFFF) | iTmp ); }

int Battle_getTotalBattleNum();

#ifdef _TYPE_TOXICATION
void CHAR_ComToxicationHp( int charaindex);
#endif

#ifdef _PROFESSION_SKILL			// WON ADD 人物职业技能
void BATTLE_ProfessionStatus_init( int battleindex, int charaindex );
void BATTLE_ProfessionStatusSeq( int battleindex, int charaindex);
#endif


#endif
