#ifndef _STATUS_H_
#define _STATUS_H_

enum {	// struct map_session_data �� status_change�̔�?�e?�u��
// SC_SENDMAX��?�̓N���C�A���g�ւ̒ʒm����B
// 2-2���E�̒l�͂Ȃ񂩂߂��Ⴍ������ۂ��̂Ŏb��B���Ԃ�?�X����܂��B
	SC_SENDMAX			= 128,	// note: max is now 182, but we'll need to do alot of moving around
	SC_PROVOKE			= 0,
	SC_ENDURE			= 1,
	SC_TWOHANDQUICKEN	= 2,
	SC_CONCENTRATE		= 3,
	SC_HIDING			= 4,
	SC_CLOAKING			= 5,
	SC_ENCPOISON		= 6,
	SC_POISONREACT		= 7,
	SC_QUAGMIRE			= 8,
	SC_ANGELUS			= 9,
	SC_BLESSING			= 10,
	SC_SIGNUMCRUCIS		= 11,
	SC_INCREASEAGI		= 12,
	SC_DECREASEAGI		= 13,
	SC_SLOWPOISON		= 14,
	SC_IMPOSITIO		= 15,
	SC_SUFFRAGIUM		= 16,
	SC_ASPERSIO			= 17,
	SC_BENEDICTIO		= 18,
	SC_KYRIE			= 19,
	SC_MAGNIFICAT		= 20,
	SC_GLORIA			= 21,
	SC_AETERNA			= 22,
	SC_ADRENALINE		= 23,
	SC_WEAPONPERFECTION	= 24,
	SC_OVERTHRUST		= 25,
	SC_MAXIMIZEPOWER	= 26,
	SC_RIDING			= 27,
	SC_FALCON			= 28,
	SC_TRICKDEAD		= 29,
	SC_LOUD				= 30,
	SC_ENERGYCOAT		= 31,
	SC_HALLUCINATION	= 34,
	SC_WEIGHT50			= 35,
	SC_WEIGHT90			= 36,
	SC_SPEEDPOTION0		= 37,
	SC_SPEEDPOTION1		= 38,
	SC_SPEEDPOTION2		= 39,
	SC_SPEEDPOTION3		= 40,
//-- 40-50
	SC_STRIPWEAPON		= 50,
	SC_STRIPSHIELD		= 51,
	SC_STRIPARMOR		= 52,
	SC_STRIPHELM		= 53,
	SC_CP_WEAPON		= 54,
	SC_CP_SHIELD		= 55,
	SC_CP_ARMOR			= 56,
	SC_CP_HELM			= 57,
	SC_AUTOGUARD		= 58,
	SC_REFLECTSHIELD	= 59,
	SC_DEVOTION			= 60,
	SC_PROVIDENCE		= 61,
	SC_DEFENDER			= 62,
	SC_AUTOSPELL		= 65,
	SC_SPEARSQUICKEN	= 68,
//-- 69-85
	SC_EXPLOSIONSPIRITS	= 86,
	SC_STEELBODY		= 87,
	SC_COMBO			= 89,
	SC_FLAMELAUNCHER	= 90,
	SC_FROSTWEAPON		= 91,
	SC_LIGHTNINGLOADER	= 92,
	SC_SEISMICWEAPON	= 93,
//-- 94-102
	SC_AURABLADE		= 103, /* �I?���u��?�h */
	SC_PARRYING			= 104, /* �p���C���O */
	SC_CONCENTRATION	= 105, /* �R���Z���g��?�V���� */
	SC_TENSIONRELAX		= 106, /* �e���V���������b�N�X */
	SC_BERSERK			= 107, /* �o?�T?�N */
//-- 108, 109
	SC_ASSUMPTIO		= 110, /* �A�V�����v�e�B�I */
//-- 111, 112
	SC_MAGICPOWER		= 113, /* ���@��?�� */
//-- 114
	SC_TRUESIGHT		= 115, /* �g�D��?�T�C�g */
	SC_WINDWALK			= 116, /* �E�C���h�E�H?�N */
	SC_MELTDOWN			= 117, /* �����g�_�E�� */
	SC_CARTBOOST		= 118, /* �J?�g�u?�X�g */
//-- 119
	SC_REJECTSWORD		= 120, /* ���W�F�N�g�\?�h */
	SC_MARIONETTE		= 121, /* �}���I�l�b�g�R���g��?�� */
//-- 122, 123
	SC_HEADCRUSH		= 124, /* �w�b�h�N���b�V�� */
	SC_JOINTBEAT		= 125, /* �W���C���g�r?�g */
//-- 126, 127

	SC_STONE			= 128,
	SC_FREEZE			= 129,
// <-- 130 = a baby skill status?
	SC_STAN				= 130,
	SC_SLEEP			= 131,
// <-- 132 = another baby skill?
	SC_POISON			= 132,
	SC_CURSE			= 133,
	SC_SILENCE			= 134,
	SC_CONFUSION		= 135,
	SC_BLIND			= 136,
	SC_DIVINA			= SC_SILENCE,

	SC_SAFETYWALL		= 140,
	SC_PNEUMA			= 141,
	SC_WATERBALL		= 142,
	SC_ANKLE			= 143,
	SC_DANCING			= 144,
	SC_KEEPING			= 145,
	SC_BARRIER			= 146,

	SC_MAGICROD			= 149,
	SC_SIGHT			= 150,
	SC_RUWACH			= 151,
	SC_AUTOCOUNTER		= 152,
	SC_VOLCANO			= 153,
	SC_DELUGE			= 154,
	SC_VIOLENTGALE		= 155,
	SC_BLADESTOP_WAIT	= 156,
	SC_BLADESTOP		= 157,
	SC_EXTREMITYFIST	= 158,
	SC_GRAFFITI			= 159,

	SC_LULLABY			=160,
	SC_RICHMANKIM		=161,
	SC_ETERNALCHAOS		=162,
	SC_DRUMBATTLE		=163,
	SC_NIBELUNGEN		=164,
	SC_ROKISWEIL		=165,
	SC_INTOABYSS		=166,
	SC_SIEGFRIED		=167,
	SC_DISSONANCE		=168,
	SC_WHISTLE			=169,
	SC_ASSNCROS			=170,
	SC_POEMBRAGI		=171,
	SC_APPLEIDUN		=172,
	SC_UGLYDANCE		=173,
	SC_HUMMING			=174,
	SC_DONTFORGETME		=175,
	SC_FORTUNE			=176,
	SC_SERVICE4U		=177,
	SC_SPIDERWEB		=180,		/* �X�p�C�_?�E�F�b�u */
//	SC_EDP							// moved
	SC_SACRIFICE		=184,		/* �T�N���t�@�C�X */
	SC_WEDDING			=187,	//�����p(�����ߏւɂȂ���?���̂�?���Ƃ�)
	SC_NOCHAT			=188,	//�ԃG��?��
	SC_SPLASHER			=189,	/* �x�i���X�v���b�V��? */
	SC_SELFDESTRUCTION	=190,	/* ���� */
	SC_MEMORIZE			=197,		/* �������C�Y */ // changed from 181 to 192
	SC_DPOISON			=198,		/* �ғ� */

// Used by English Team
	SC_BROKNARMOR		=32,
	SC_BROKNWEAPON		=33,
	SC_SPEEDUP0			=41, // for skill speedup
	SC_SPEEDUP1			=42, // for skill speedup
	SC_SLOWDOWN			=45, // for skill slowdown
	SC_AUTOBERSERK		=46,
	SC_SIGHTTRASHER		=73,
	SC_BASILICA			=102, // temporarily use this before an actual id is found [celest]
	SC_EDP				=114, /* �G�t�F�N�g������������ړ� */
	SC_MARIONETTE2		=122, // Marionette target
	SC_ENSEMBLE			=159,
	SC_FOGWALL			=178,
	SC_GOSPEL			=179,
	SC_PRESERVE         =181,
	SC_BATTLEORDERS		=182,
	SC_MOONLIT			=183,
	SC_ATKPOT			=185,	// [Valaris]
	SC_MATKPOT			=186,	// [Valaris]
	SC_MINDBREAKER		=191,
	SC_SPELLBREAKER		=192,
	SC_LANDPROTECTOR	=193,
	SC_ADAPTATION		=194,
	SC_CHASEWALK		=195,
	SC_REGENERATION		=196,
	

// [Celest]
	SC_BLEEDING			= 124, // Temporarily same id as headcrush	
	
// -- testing various SC effects
//	SC_AURABLADE			=81,
//	SC_CONCENTRATION		=83,
//	SC_TENSIONRELAX		=84,
//	SC_BERSERK			=85,
//	SC_CALLSPIRITS			=100,
//	SC_PARRYING			=100,
//	SC_FREECAST			=101,
//	SC_ABSORBSPIRIT		=102,
//	SC_ASSUMPTIO			=114,
//	SC_SHARPSHOOT			=127,
//	SC_GANGSTER			=184,
//	SC_CANNIBALIZE			=186,
//	SC_SPHEREMINE			=187,
//	SC_METEOSTORM		=189,
//	SC_CASTCANCEL			=190,
//	SC_SPIDERWEB			=191,
};
extern int SkillStatusChangeTable[];

// �p�����[�^�����n battle.c ���ړ�
int status_get_class(struct block_list *bl);
int status_get_dir(struct block_list *bl);
int status_get_lv(struct block_list *bl);
int status_get_range(struct block_list *bl);
int status_get_hp(struct block_list *bl);
int status_get_max_hp(struct block_list *bl);
int status_get_str(struct block_list *bl);
int status_get_agi(struct block_list *bl);
int status_get_vit(struct block_list *bl);
int status_get_int(struct block_list *bl);
int status_get_dex(struct block_list *bl);
int status_get_luk(struct block_list *bl);
int status_get_hit(struct block_list *bl);
int status_get_flee(struct block_list *bl);
int status_get_def(struct block_list *bl);
int status_get_mdef(struct block_list *bl);
int status_get_flee2(struct block_list *bl);
int status_get_def2(struct block_list *bl);
int status_get_mdef2(struct block_list *bl);
int status_get_baseatk(struct block_list *bl);
int status_get_atk(struct block_list *bl);
int status_get_atk2(struct block_list *bl);
int status_get_speed(struct block_list *bl);
int status_get_adelay(struct block_list *bl);
int status_get_amotion(struct block_list *bl);
int status_get_dmotion(struct block_list *bl);
int status_get_element(struct block_list *bl);
int status_get_attack_element(struct block_list *bl);
int status_get_attack_element2(struct block_list *bl);  //���蕐�푮���擾
#define status_get_elem_type(bl)	(status_get_element(bl)%10)
#define status_get_elem_level(bl)	(status_get_element(bl)/10/2)
int status_get_party_id(struct block_list *bl);
int status_get_guild_id(struct block_list *bl);
int status_get_race(struct block_list *bl);
int status_get_size(struct block_list *bl);
int status_get_mode(struct block_list *bl);
int status_get_mexp(struct block_list *bl);
int status_get_race2(struct block_list *bl);

struct status_change *status_get_sc_data(struct block_list *bl);
short *status_get_sc_count(struct block_list *bl);
short *status_get_opt1(struct block_list *bl);
short *status_get_opt2(struct block_list *bl);
short *status_get_opt3(struct block_list *bl);
short *status_get_option(struct block_list *bl);

int status_get_matk1(struct block_list *bl);
int status_get_matk2(struct block_list *bl);
int status_get_critical(struct block_list *bl);
int status_get_atk_(struct block_list *bl);
int status_get_atk_2(struct block_list *bl);
int status_get_atk2(struct block_list *bl);

int status_get_sc_def(struct block_list *bl, int type);
#define status_get_sc_def_mdef(bl)	(status_get_sc_def(bl, SP_MDEF1))
#define status_get_sc_def_vit(bl)	(status_get_sc_def(bl, SP_DEF2))
#define status_get_sc_def_int(bl)	(status_get_sc_def(bl, SP_MDEF2))
#define status_get_sc_def_luk(bl)	(status_get_sc_def(bl, SP_LUK))

// ��Ԉُ�֘A skill.c ���ړ�
int status_change_start(struct block_list *bl,int type,int val1,int val2,int val3,int val4,int tick,int flag);
int status_change_end( struct block_list* bl , int type,int tid );
int status_change_timer(int tid, unsigned int tick, int id, int data);
int status_change_timer_sub(struct block_list *bl, va_list ap );
int status_change_clear(struct block_list *bl,int type);

// �X�e�[�^�X�v�Z pc.c ���番��
// pc_calcstatus
int status_calc_pc(struct map_session_data* sd,int first);
int status_calc_speed(struct map_session_data*); // [Celest]
// int status_calc_skilltree(struct map_session_data *sd);
int status_getrefinebonus(int lv,int type);
int status_percentrefinery(struct map_session_data *sd,struct item *item);
extern int percentrefinery[5][10];

int do_init_status(void);

#endif