﻿w_AG=[100,95,90,86,82,79,76,74,72,71,70]; // Guard-Blockrate

function StCalc(nSC){ // statPointCalc "Remain Status Points"
with(document.calcForm){
	n_A_STR = eval(A_STR.value);
	n_A_AGI = eval(A_AGI.value);
	n_A_VIT = eval(A_VIT.value);
	n_A_DEX = eval(A_DEX.value);
	n_A_INT = eval(A_INT.value);
	n_A_LUK = eval(A_LUK.value);

	StPoint = 0;
	for(i=2;i<=n_A_STR;i++)
		StPoint += StCalc2(i);
	for(i=2;i<=n_A_AGI;i++)
		StPoint += StCalc2(i);
	for(i=2;i<=n_A_VIT;i++)
		StPoint += StCalc2(i);
	for(i=2;i<=n_A_INT;i++)
		StPoint += StCalc2(i);
	for(i=2;i<=n_A_DEX;i++)
		StPoint += StCalc2(i);
	for(i=2;i<=n_A_LUK;i++)
		StPoint += StCalc2(i);

	n_A_BaseLV = eval(A_BaseLV.value);

	n_A_JobSet();
	if(n_Tensei)
		wStPoint = 100;
	else
		wStPoint = 48;
	var wMAXLV;
	if(n_Sanji)
		wMAXLV = 150;
	else
		wMAXLV = 99;
		
	if(nSC == 1 || BLVauto.checked == 0){
		for(i=1;i<n_A_BaseLV;i++)
			if(i <= 100)
				wStPoint += Math.floor(i / 5) + 3;
			else
				wStPoint += Math.floor((i-100) / 10) + 23;
	}
	else{
//		for(i=1;StPoint > wStPoint && i<150;i++)
//			wStPoint += Math.floor((i) / 5) + 3;
		if(n_Sanji==0){
			for(i=1;StPoint > wStPoint && i<wMAXLV;i++)
				wStPoint += Math.floor(i / 5) + 3;
		}else{
			wStPoint += 1225;
			for(i=99;StPoint > wStPoint && i<wMAXLV;i++){
				if(i<=100)
					wStPoint += Math.floor(i / 5) + 3;
				else
					wStPoint += Math.floor((i-100) / 10) + 23;
			}
		}
	}
	//if(i > 150)i=150;
	A_BaseLV.value = i;
	myInnerHtml("A_STPOINT",wStPoint - StPoint,0);
}}

function StCalc2(nSC2){ // statToPoints
	if(nSC2<=100)
		return Math.floor((nSC2 - 2) /10) + 2;
	if(nSC2<=120)
		return Math.floor((nSC2-101)/5) * 4 + 16;
	return 0;
}

function n_A_JobSet(){ // Check 3rd and Rebirth
with(document.calcForm){
	n_A_JOB = eval(document.calcForm.A_JOB.value);
	
	n_Tensei = 0; // Rebirth
	n_Sanji = 0; // Third Cls
			
	if(cls_LOR <= n_A_JOB && n_A_JOB <= cls_HMER) // Rebirth
		n_Tensei = 1;

	if(cls_RUN <= n_A_JOB && n_A_JOB <= cls_GENt && n_A_JOB % 2 == 1) // 3rd - Rebirth
		n_Tensei = 1;
	
	if(cls_RUN <= n_A_JOB && n_A_JOB <= cls_GENt) // 3rd Cls
		n_Sanji = 1;
}}

function n_A_JobSearch(){ // 1st Cls Hierachy
	if(n_A_JOB <= cls_MER) // 1st Cls
		return n_A_JOB;
		
	if(n_A_JOB == cls_SNOVI || n_A_JOB == cls_HNOV)
		return cls_NOV;
		
	var w = n_A_JobSearch2();
	if(w == cls_KNI || w == cls_CRU || n_A_JOB == cls_HSWO)
		return cls_SWO;
	if(w == cls_ASS || w == cls_ROG || n_A_JOB == cls_HTHI)
		return cls_THI;
	if(w == cls_PRI || w == cls_MON || n_A_JOB == cls_HACO)
		return cls_ACO;
	if(w == cls_HUN || w == cls_BAR || w == cls_DAN || n_A_JOB == cls_HARC)
		return cls_ARC;
	if(w == cls_WIZ || w == cls_SAG || n_A_JOB == cls_HMAG)
		return cls_MAG;
	if(w == cls_BLA || w == cls_ALC || n_A_JOB == cls_HMER)
		return cls_MER;
	if(n_A_JOB == cls_TKK || n_A_JOB == cls_TKM || n_A_JOB == cls_SL)
		return cls_TKK;
		
	return cls_NOV;
}

function n_A_JobSearch2(){ // 2nd Cls Hierachy
	if(n_A_JOB == cls_KNI || n_A_JOB == cls_LOR || n_A_JOB == cls_RUN || n_A_JOB == cls_RUNt)
		return cls_KNI;
	if(n_A_JOB == cls_ASS || n_A_JOB == cls_ASX || n_A_JOB == cls_GLT || n_A_JOB == cls_GLTt)
		return cls_ASS;
	if(n_A_JOB == cls_PRI || n_A_JOB == cls_HPR || n_A_JOB == cls_ABI || n_A_JOB == cls_ABIt)
		return cls_PRI;
	if(n_A_JOB == cls_HUN || n_A_JOB == cls_SNI || n_A_JOB == cls_RAN || n_A_JOB == cls_RANt)
		return cls_HUN;
	if(n_A_JOB == cls_WIZ || n_A_JOB == cls_HWI || n_A_JOB == cls_WAR || n_A_JOB == cls_WARt)
		return cls_WIZ;
	if(n_A_JOB == cls_BLA || n_A_JOB == cls_MAS || n_A_JOB == cls_MEC || n_A_JOB == cls_MECt)
		return cls_BLA;
	if(n_A_JOB == cls_CRU || n_A_JOB == cls_PAL || n_A_JOB == cls_ROY || n_A_JOB == cls_ROYt)
		return cls_CRU;
	if(n_A_JOB == cls_ROG || n_A_JOB == cls_STA || n_A_JOB == cls_SHA || n_A_JOB == cls_SHAt)
		return cls_ROG;
	if(n_A_JOB == cls_MON || n_A_JOB == cls_CHA || n_A_JOB == cls_SUR || n_A_JOB == cls_SURt)
		return cls_MON;
	if(n_A_JOB == cls_BAR || n_A_JOB == cls_CLO || n_A_JOB == cls_MIN || n_A_JOB == cls_MINt)
		return cls_BAR;
	if(n_A_JOB == cls_DAN || n_A_JOB == cls_GYP || n_A_JOB == cls_WAN || n_A_JOB == cls_WANt)
		return cls_DAN; // testing ...
	if(n_A_JOB == cls_SAG || n_A_JOB == cls_SCH || n_A_JOB == cls_SOR || n_A_JOB == cls_SORt)
		return cls_SAG;
	if(n_A_JOB == cls_ALC || n_A_JOB == cls_BIO || n_A_JOB == cls_GEN || n_A_JOB == cls_GENt)
		return cls_ALC;
	if(n_A_JOB == cls_TKM || n_A_JOB == cls_SL) // testing ...
		return n_A_JOB;
		
	return cls_NOV;
}

function defReduction(Def){
	return(580/(Def+580));
}

function mdefReduction(MDef){
	return(111.5/(MDef+111.5));
}

function expModByLevelDiff(n_A_BaseLV,monLV) {
	var ExpMod =[0.1,0.35,0.6,0.85,0.9,0.95,1,1,1,1,1,1,1,1,1.05,1.1,1.15,1.2,1.25,1.3,1.35,1.4,0.4];
	
	w = monLV - n_A_BaseLV;
	if (w < (-30))
		return ExpMod[0];
	if (w < (-25))
		return ExpMod[1];
	if (w < (-20))
		return ExpMod[2];
	if (w < (-15))
		return ExpMod[3];
	if (w < (-10))
		return ExpMod[4];
	if (w < (-5))
		return ExpMod[5];
	if (w < 11)
		return ExpMod[w + 11];
	
	return ExpMod[22];
}

function calcJobStats(n_A_JOB,n_A_JobLV,w2){
	// JobBOBJ --> etc.js ln 1
	for(var i=0;JobBOBJ[n_A_JOB][i] <= n_A_JobLV && JobBOBJ[n_A_JOB][i] != "n";i+=2)
			w2[JobBOBJ[n_A_JOB][i+1]] += 1;
	if(n_A_JOB == cls_NOV && n_Tensei){ // Novi && Rebirth
		for(var i=0;JobBOBJ[cls_HNOV][i] <= n_A_JobLV && JobBOBJ[cls_HNOV][i] != "n";i+=2)
				w2[JobBOBJ[cls_HNOV][i+1]] += 1;
	}
	if(n_A_JobLV >= 70 && SkillSearch(309)){ // No Death Bonus
		for(var i=0;i<6;i++) // Stats+10
			w2[i] += 10;
	}
	
	return w2;
}

// (Floor[{(atk)*(mod+% from players+%range attack-%race,size,element.card)+banes/masteries}*elemantal*e.def]-s.def)*bonus*hit

function calcAtk(includeMultipliers){
	n_A_statATK = calcStatAtk(n_A_statATK=0);

	n_A_WeaponLV = ItemOBJ[n_A_Equip[eq_WEAPON]][itm_WLVL];
	n_A_Weapon_ATK = ItemOBJ[n_A_Equip[eq_WEAPON]][itm_ATK];
	n_A_Weapon_UpATK = calcUpgradeAtk(n_A_Weapon_UpATK = 0);
	n_A_ATK_Variance = calcVarianceAtk(n_A_ATK_Variance = 0);
	n_A_Weapon_OverRefine = calcOverRefineAtk(n_A_Weapon_OverRefine = 0);
	if(n_A_WeaponType != weapTyp_BOW && n_A_WeaponType !=weapTyp_INSTRU && n_A_WeaponType !=weapTyp_WHIP && n_A_WeaponType !=weapTyp_HANDGUN && n_A_WeaponType !=weapTyp_RIFLE && n_A_WeaponType !=weapTyp_SHOTGUN && n_A_WeaponType !=weapTyp_GATLING_GUN && n_A_WeaponType !=weapTyp_GRENADE_LAUNCHER)
		n_A_StrBonAtk = n_A_Weapon_ATK * n_A_STR / 200;
	else
		n_A_StrBonAtk = n_A_Weapon_ATK * n_A_DEX / 200;
	
	if(n_Nitou){ // Dual Hand
		n_A_Weapon2LV = ItemOBJ[n_A_Equip[eq_WEAPONII]][itm_WLVL];
		n_A_Weapon2_ATK = ItemOBJ[n_A_Equip[eq_WEAPONII]][itm_ATK];
		n_A_Weapon2_UpATK = calcUpgradeAtk2(n_A_Weapon2_UpATK = 0);
		n_A_ATK2_Variance = calcVarianceAtk2(n_A_Weapon2_Variance = 0);
		n_A_Weapon2_OverRefine = calcOverRefineAtk2(n_A_Weapon2_OverRefine = 0);
	}
	
	// Size - Weapon Mod -----------------------------------------------
	wCSize = weaponsize[n_A_WeaponType][n_B[en_SIZE]];
	if(SkillSearch(78)){
		if((n_A_WeaponType==4 || n_A_WeaponType==5) && n_B[en_SIZE]==1)
			wCSize = 1;
	}
	if(SkillSearch(153) || n_A_PassSkill2[7])
		wCSize = 1;
	if(cardOBJ[n_A_card[0]][0]==32||cardOBJ[n_A_card[1]][0]==32||cardOBJ[n_A_card[2]][0]==32||cardOBJ[n_A_card[3]][0]==32||cardOBJ[n_A_card[4]][0]==32||cardOBJ[n_A_card[5]][0]==32||cardOBJ[n_A_card[6]][0]==32||cardOBJ[n_A_card[7]][0]==32)
		wCSize = 1;
	if(EquipNumSearch(1177))
		wCSize = 1;
	// ------------------------------
	
 	n_A_EquipATK = calcEquipAtk(n_A_EquipATK=0);
	n_A_MasteryATK = calcMasteryAtk(n_A_MasteryATK=0);
	
	n_A_EnemyMod = calcEnemyMod(n_A_EnemyMod = 0);
	
	if(includeMultipliers){
		n_A_statATK = (n_A_statATK * 2);
		
		n_A_EquipATK = n_A_EquipATK; // * 4 * EDP
		n_A_EquipATK += (n_A_Weapon_ATK + n_A_Weapon_UpATK + n_A_Weapon_OverRefine + n_A_StrBonAtk * zokusei[n_B[en_ELEMENT]][ele_NEUTRAL]/100) * wCSize; // * 5 * EDP
		n_A_EquipATK *= n_A_EnemyMod;
		n_A_EquipATK = (Max(n_A_EquipATK,0));
		
		n_A_ATK_Variance = n_A_ATK_Variance * n_A_EnemyMod; // * 5 * EDP
		
		return n_A_EquipATK;
	}else{
		return (n_A_Weapon_ATK + n_A_Weapon_UpATK + n_A_EquipATK);
	}
}

function calcStatAtk(n_A_statATK){
	n_A_statATK = (n_A_LUK / 3) + (n_A_BaseLV / 4);
	
	if(n_A_WeaponType != weapTyp_BOW && n_A_WeaponType !=weapTyp_INSTRU && n_A_WeaponType !=weapTyp_WHIP && n_A_WeaponType !=weapTyp_HANDGUN && n_A_WeaponType !=weapTyp_RIFLE && n_A_WeaponType !=weapTyp_SHOTGUN && n_A_WeaponType !=weapTyp_GATLING_GUN && n_A_WeaponType !=weapTyp_GRENADE_LAUNCHER)
		n_A_statATK += n_A_STR + (n_A_DEX / 5);
	else
		n_A_statATK += n_A_DEX + (n_A_STR / 5);
	
	//n_A_statATK = Math.floor(n_A_statATK);
	return(n_A_statATK);
}

function calcUpgradeAtk(n_A_Weapon_UpATK){
	if(n_A_WeaponLV == 1){
		n_A_Weapon_UpATK = n_A_Weapon_ATKplus * 2;
	}else if(n_A_WeaponLV == 2){
		n_A_Weapon_UpATK = n_A_Weapon_ATKplus * 3;
	}else if(n_A_WeaponLV == 3){
		n_A_Weapon_UpATK = n_A_Weapon_ATKplus * 5;
	}else if(n_A_WeaponLV == 4){
		n_A_Weapon_UpATK = n_A_Weapon_ATKplus * 7;
	}
	return n_A_Weapon_UpATK;
}

function calcUpgradeAtk2(n_A_Weapon2_UpATK){
	if(n_Nitou){
		if(n_A_Weapon2LV == 1){
			n_A_Weapon2_UpATK = n_A_Weapon2_ATKplus * 2;
		}else if(n_A_Weapon2LV == 2){
			n_A_Weapon2_UpATK = n_A_Weapon2_ATKplus * 3;
		}else if(n_A_Weapon2LV == 3){
			n_A_Weapon2_UpATK = n_A_Weapon2_ATKplus * 5;
		}else if(n_A_Weapon2LV == 4){
			n_A_Weapon2_UpATK = n_A_Weapon2_ATKplus * 7;
		}
	}
	return n_A_Weapon2_UpATK;
}

function calcVarianceAtk(n_A_ATK_Variance){
	n_A_ATK_Variance = n_A_Weapon_ATK * 0.05 * n_A_WeaponLV;
	return n_A_ATK_Variance;
}

function calcVarianceAtk2(n_A_Weapon2_Variance){
	n_A_ATK2_Variance = n_A_Weapon2_ATK * 0.05 * n_A_Weapon2LV;
	return n_A_ATK2_Variance;
}

function calcOverRefineAtk(n_A_Weapon_OverRefine){
		
	n_A_Weapon_OverRefine = n_A_Weapon_ATKplus;
	if(n_A_WeaponLV == 1){
		if(n_A_Weapon_ATKplus >= 8)
			n_A_Weapon_OverRefine += ((n_A_Weapon_ATKplus+n_A_WeaponLV) * (n_A_Weapon_ATKplus - 7));
	}else if(n_A_WeaponLV == 2){
		if(n_A_Weapon_ATKplus >= 7)
			n_A_Weapon_OverRefine += ((n_A_Weapon_ATKplus+n_A_WeaponLV) * (n_A_Weapon_ATKplus - 6));
	}else if(n_A_WeaponLV == 3){
		if(n_A_Weapon_ATKplus >= 6)
			n_A_Weapon_OverRefine += ((n_A_Weapon_ATKplus+n_A_WeaponLV) * (n_A_Weapon_ATKplus - 5));
	}else if(n_A_WeaponLV == 4){
		if(n_A_Weapon_ATKplus >= 5)
			n_A_Weapon_OverRefine += ((n_A_Weapon_ATKplus+n_A_WeaponLV) * (n_A_Weapon_ATKplus - 4));
	}
	
	if (n_A_Weapon_OverRefine == n_A_Weapon_ATKplus)
		n_A_Weapon_OverRefine = 0;
	
	return n_A_Weapon_OverRefine;
}

function calcOverRefineAtk2(n_A_Weapon2_OverRefine){
	
	n_A_Weapon2_OverRefine = n_A_Weapon2_ATKplus; // OverRefineBonus
	if(n_A_Weapon2LV == 1){
		if(n_A_Weapon2_ATKplus >= 8)
			n_A_Weapon2_OverRefine += ((n_A_Weapon2_ATKplus+n_A_Weapon2LV) * (n_A_Weapon2_ATKplus - 7));
	}else if(n_A_Weapon2LV == 2){
		if(n_A_Weapon2_ATKplus >= 7)
			n_A_Weapon2_OverRefine += ((n_A_Weapon2_ATKplus+n_A_Weapon2LV) * (n_A_Weapon2_ATKplus - 6));
	}else if(n_A_Weapon2LV == 3){
		if(n_A_Weapon2_ATKplus >= 6)
			n_A_Weapon2_OverRefine += ((n_A_Weapon2_ATKplus+n_A_Weapon2LV) * (n_A_Weapon2_ATKplus - 5));
	}else if(n_A_Weapon2LV == 4){
		if(n_A_Weapon2_ATKplus >= 5)
			n_A_Weapon2_OverRefine += ((n_A_Weapon2_ATKplus+n_A_Weapon2LV) * (n_A_Weapon2_ATKplus - 4));
	}
	
	if (n_A_Weapon2_OverRefine == n_A_Weapon2_ATKplus)
		n_A_Weapon2_OverRefine = 0;
	
	return n_A_Weapon2_OverRefine;
}

function calcEquipAtk(n_A_EquipATK){
	n_A_EquipATK=n_tok[bon_ATK]; // cur eqAtk

	if(n_A_PassSkill6[pass_VI_ELE_FIELD] == pass_VI_VOLCANO && n_A_PassSkill6[pass_VI_ELE_FIELD_LVL] >= 1) // Volcano
		n_A_EquipATK += n_A_PassSkill6[pass_VI_ELE_FIELD_LVL] * 10;

	if(n_A_PassSkill7[pass_VII_RAINBOW_CAKE])
		n_A_EquipATK += 10;
	if(n_A_PassSkill7[pass_VII_BOX_RESENTMENT])
		n_A_EquipATK += 20;
	if(n_A_PassSkill8[pass_VIII_RUNE_STRAW_BERRY_CAKE])
		n_A_EquipATK += 5;

	if(SkillSearch(skill_GS_LAST_STAND)) // LastStand
		n_A_EquipATK += 100;
	if(SkillSearch(skill_GS_GATLING_FEVER)){ // Gatling Fever
		if(n_A_WeaponType == weapTyp_GATLING_GUN || n_A_WeaponType == weapTyp_NONE)
			n_A_EquipATK += 20 + 10 * SkillSearch(skill_GS_GATLING_FEVER);
	}
	if(SkillSearch(skill_ROY_SHIELD_SPELL)==1)
		n_A_EquipATK += ItemOBJ[n_A_Equip[eq_SHIELD]][itm_DEF];
	if(SkillSearch(skill_ROY_BANDING)) // && SkillSearch(skill_ROY_INSPIRATION)==0)
		n_A_EquipATK += (10 + 10 * SkillSearch(skill_ROY_BANDING));
	if(SkillSearch(skill_ROY_INSPIRATION))
		n_A_EquipATK += (40 * SkillSearch(skill_ROY_INSPIRATION) + 3 * n_A_JobLV);

	if(SU_STR >= 80 && CardNumSearch(267)) // GWhisper
		n_A_EquipATK += 20;
	if(SU_STR >= 95 && EquipNumSearch(621)) //DoomSlayer
		n_A_EquipATK += 340;
	if(SU_STR >= 44 && EquipNumSearch(625)) // Holgrens Refining Hammer
		n_A_EquipATK += 44;
	if(SU_AGI >= 90 && EquipNumSearch(442)) // Rogues Treasure
		n_A_EquipATK += 10 * EquipNumSearch(442);
	if(SU_STR >= 95 && EquipNumSearch(1160)) // Krasnaya
		n_A_EquipATK += 20;
	if(SU_LUK >= 90 && EquipNumSearch(1164)) // Berchel Axe
		n_A_EquipATK += 20;
	if(EquipNumSearch(676)) // Mythical Lion Mask
		n_A_EquipATK += n_A_HEAD_DEF_PLUS * 2;
	if(CardNumSearch(492)) // Ifrit
		n_A_EquipATK += Math.floor(n_A_JobLV /10) * CardNumSearch(492);
	if(EquipNumSearch(1120) && n_A_JobSearch()==cls_ARC) // Archer Figurine
		n_A_EquipATK += 10;
	if(EquipNumSearch(1165)) // Veteran Axe
		n_A_EquipATK += 10 * SkillSearch(311);
	if(SU_STR >= 120 && EquipNumSearch(1253)) // Rune Circlet
		n_A_EquipATK += 10;
	if(SU_STR >= 120 && EquipNumSearch(1256)) // Driver Band
		n_A_EquipATK += 10;
	if(SU_AGI >= 120 && EquipNumSearch(1257)) // Shadow Crown
		n_A_EquipATK += 10;
	if(SU_STR >= 120 && EquipNumSearch(1259)) // Midas Whispers
		n_A_EquipATK += 5;
	if(SU_STR >= 120 && EquipNumSearch(1261)) // Burning Spirit
		n_A_EquipATK += 10;
	if(SU_AGI >= 120 && EquipNumSearch(1262)) // Silent Enforcer
		n_A_EquipATK += 10;
		
	//n_tok[bon_ATK] = n_A_EquipATK; // to cur eqAtk
	
	n_A_EquipATK += n_A_PassSkill2[pass_II_IMPO] *5;

	if(n_A_PassSkill3[pass_III_BAT_THEME])
		n_A_EquipATK += 25 + 25 * n_A_PassSkill3[pass_III_BAT_THEME];
		
	return n_A_EquipATK;
}

function calcMasteryAtk(n_A_MasteryATK){

	n_A_MasteryATK = 0;

	if(n_A_WeaponType == weapTyp_DAGGER || n_A_WeaponType == weapTyp_SWORD)
		n_A_MasteryATK += 4 * SkillSearch(skill_SW_SWORD_MASTERY);
	else if(n_A_WeaponType == weapTyp_SWORDII)
		n_A_MasteryATK += 4 * SkillSearch(skill_SW_TWO_HAND_SWORD_MASTERY);
	else if(n_A_WeaponType == weapTyp_SPEAR || n_A_WeaponType == weapTyp_SPEARII){
		if(SkillSearch(skill_KN_CAVALIER_MASTERY) == 0)
			n_A_MasteryATK += 4 * SkillSearch(skill_KN_SPEAR_MASTERY);
		else
			n_A_MasteryATK += 5 * SkillSearch(skill_KN_SPEAR_MASTERY);
	}
	else if(n_A_WeaponType == weapTyp_AXE || n_A_WeaponType == weapTyp_AXEII)
		n_A_MasteryATK += 3 *SkillSearch(skill_AL_AXE_MASTERY);
	else if(n_A_WeaponType == weapTyp_MACE)
		n_A_MasteryATK += 3 * SkillSearch(skill_PR_MACE_MASTERY);
	else if(n_A_WeaponType == weapTyp_KATAR)
		n_A_MasteryATK += 3 * SkillSearch(skill_AS_KATAR_MASTERY);
	else if(n_A_WeaponType == weapTyp_BOOK)
		n_A_MasteryATK += 3 * SkillSearch(skill_SA_STUDY);
	else if(n_A_WeaponType == weapTyp_KNUCKLE || n_A_WeaponType == weapTyp_NONE)
		n_A_MasteryATK += 3 * SkillSearch(skill_MO_IRON_FIST);
	else if(n_A_WeaponType == weapTyp_INSTRUMENT)
		n_A_MasteryATK += 3 * SkillSearch(skill_BA_MUSIC_LESSONS);
	else if(n_A_WeaponType == weapTyp_WHIP)
		n_A_MasteryATK += 3 * SkillSearch(skill_DA_DANCE_LESSONS);

	if(n_A_WeaponType == weapTyp_NONE && SkillSearch(skill_TK_SPRINT))
		n_A_MasteryATK += 10 * SkillSearch(skill_TK_SPRINT);

	if(n_A_PassSkill3[pass_III_HAR_LICK] && n_A_WeaponLV == 4)
		n_A_MasteryATK += 50 + 25 * n_A_PassSkill3[pass_III_HAR_LICK];

	
	if(n_B[en_RACE] == race_DEMON || (90 <= n_B[en_ELEMENT] && n_B[en_ELEMENT] <= 99)){ // Undead 1~9
		if(SkillSearch(skill_AC_DEMON_BANE))
			n_A_MasteryATK += Math.floor((3 + 5/100 * n_A_BaseLV) * SkillSearch(skill_AC_DEMON_BANE));
	}
	if(n_B[en_RACE] == race_BRUTE || n_B[en_RACE] == race_INSECT){
		n_A_MasteryATK += 4 * SkillSearch(skill_HU_BEAST_BANE);
		if(SkillSearch(skill_HU_HUNTER_SPIRIT))
			n_A_MasteryATK += n_A_STR;
	}
	if(n_B[en_RACE] == race_BRUTE || n_B[en_RACE] == race_PLANT || n_B[en_RACE] == race_FISH)
		n_A_MasteryATK += 5 * SkillSearch(skill_RAN_RANGER_MAIN);
	if(n_A_WeaponType == weapTyp_AXE || n_A_WeaponType == weapTyp_AXEII)
		n_A_MasteryATK += 5 * SkillSearch(skill_MEC_AXE_TRAINING);
	if((n_B[en_ELEMENT] >= (ele_EARTH*10) && n_B[en_ELEMENT] <= (ele_EARTH*10+9)) || (n_B[en_ELEMENT] >= (ele_FIRE*10) && n_B[en_ELEMENT] <= (ele_FIRE*10+9)))
		n_A_MasteryATK += 10 * SkillSearch(skill_MEC_RESEARCH_FIRE_EARTH);
	
	return Math.floor(n_A_MasteryATK);
}

function calcMAtk(includeMultipliers){
	
	n_A_StatMATK = calcStatMAtk(n_A_StatMATK=0);
	n_A_EquipMATK = n_tok[bon_MATK];
	
	// Adder ---
	if(EquipNumSearch(897) && (n_A_JobSearch2() == cls_ROG || n_A_JOB == cls_NIN)) // AssaDamaB
		n_A_EquipMATK += 130 * EquipNumSearch(897);
	if(EquipNumSearch(898) && (n_A_JobSearch2() == cls_ROG || n_A_JOB == cls_NIN)) // AssaDamaV
		n_A_EquipMATK += 130 * EquipNumSearch(898);
		
	n_A_UpgradeMATK = calcUpgradeMAtk(n_A_Weapon_UpMATK=0);
	if(n_Nitou)
		n_A_UpgradeMATK += calcUpgradeMAtk2(n_A_Weapon2_UpMATK=0);

	n_A_MATK_Variance = Math.floor((StPlusWeapon(bon_MATK)+n_A_UpgradeMATK) * (0.1 * n_A_WeaponLV));
		
	n_A_EquipMATK += n_A_UpgradeMATK;
		
	// Multiplier ---
	if (includeMultipliers){
		w = 100;
		w += n_tok[bon_MATK_MUL];
		
		if(n_A_HEAD_DEF_PLUS >= 9 && n_A_card[8]==177) // KatheryneK
			w += 2;
		if(n_A_JobSearch()==cls_MAG && CardNumSearch(454))
			w +=3;
		if(n_A_JobSearch2() == cls_ROG)
			w += 10 * CardNumSearch(479); // Byorgue

		if(EquipNumSearch(484) && SU_INT >= 70) // SageDiary
			w += 5;
		if(n_A_Weapon_ATKplus >= 9 && EquipNumSearch(642)) // LBW
			w += 3;
		if(EquipNumSearch(646)) // SoDestru
			w += Math.floor(n_A_Weapon_ATKplus / 2);
		if(EquipNumSearch(737)) // ??
			w += Min(n_A_Weapon_ATKplus,10);
		if(EquipNumSearch(897) && (n_A_JobSearch2() == cls_ROG || n_A_JOB == cls_NIN))
			w += 15 * EquipNumSearch(897); // AssaDamaB
		if(EquipNumSearch(898) && (n_A_JobSearch2() == cls_ROG || n_A_JOB == cls_NIN))
			w += 15 * EquipNumSearch(898); // AssaDamaV
		if(EquipNumSearch(1029) && n_A_HEAD_DEF_PLUS >= 6) // Pagdayaw
			w += n_A_HEAD_DEF_PLUS - 5;
		if(EquipNumSearch(1042)) // GentlemanSet
			w += n_A_Weapon_ATKplus;
		if(EquipNumSearch(1083)){ // Glorious DestruStaff
			w += n_A_Weapon_ATKplus;
			if(n_A_Weapon_ATKplus >= 6)
				w += 5;
		}
		if(n_A_Weapon_ATKplus >= 9 && EquipNumSearch(1084)) // GloArcWand
			w += 5;
		if(n_A_Weapon_ATKplus >= 9 && EquipNumSearch(1095)) // GloApocalypse
			w += 5;
		if(EquipNumSearch(1173)) // StaffOfThea
			w += Math.floor(n_A_Weapon_ATKplus / 2);

		if(n_A_PassSkill6[pass_VI_MUR_BONUS])
			w += 10;

		n_A_StatMATK = (n_A_StatMATK * w / 100);
		n_A_MATK_Variance = (n_A_MATK_Variance * w / 100);
		n_A_EquipMATK = (n_A_EquipMATK * w / 100);
	}

	if(n_A_PassSkill7[pass_VII_RAINBOW_CAKE])
		n_A_EquipMATK += 10;
	if(n_A_PassSkill7[pass_VII_DROWSINESS])
		n_A_EquipMATK += 20;
	if(n_A_PassSkill8[pass_VIII_RUN_CAKE])
		n_A_EquipMATK += 5;
	if(SU_STR >= 120 && EquipNumSearch(1253)) // Rune Circlet
		n_A_EquipMATK += 5;
	if(SU_INT >= 120 && EquipNumSearch(1254)) // Mitra
		n_A_EquipMATK += 10;
	if(SU_DEX >= 120 && EquipNumSearch(1260)) // Magic Stone Hat
		n_A_EquipMATK += 10;
	if(SU_INT >= 120 && EquipNumSearch(1263)) // Whispers of Wind
		n_A_EquipMATK += 10;
	if(SU_INT >= 120 && EquipNumSearch(1264)) // Reissue Schmitz Helm
		n_A_EquipMATK += 10;


	if (includeMultipliers){
		if(n_A_PassSkill6[pass_VI_MIN_BREAKER]){
			w = 20 * n_A_PassSkill6[pass_VI_MIN_BREAKER];

			n_A_StatMATK = (n_A_StatMATK * (1+ w/100));
			n_A_MATK_Variance = (n_A_MATK_Variance * (1+ w/100));
			n_A_EquipMATK = (n_A_EquipMATK * (1+ w/100)); 

		}
		if(SkillSearch(skill_HW_MAMP)){
			var w2 = [51,54,56,57,125,126,127,128,131,132,133,534,540,542,545,547,553];
			
			if(SkillSearch(skill_WAR_READING_SPELLBOOK)==0 || NumSearch(n_A_ActiveSkill,w2)==0){
				w = 5 * SkillSearch(skill_HW_MAMP);
				n_A_StatMATK = (n_A_StatMATK * (1+ w/100));
				n_A_MATK_Variance = (n_A_MATK_Variance * (1+ w/100));
				n_A_EquipMATK = (n_A_EquipMATK * (1+ w/100)); 
			}
		}
		if(SkillSearch(skill_WAR_RECOGNIZED_SPELL)){
			n_A_EquipMATK += n_A_MATK_Variance;
			n_A_MATK_Variance = 0;
		}
		
	}
	
	n_A_StatMATK = Math.floor(n_A_StatMATK);
	n_A_MATK_Variance = Math.floor(n_A_MATK_Variance)/2; // to make it +-
	n_A_EquipMATK = Math.floor(n_A_EquipMATK);
	
	if (includeMultipliers)
		n_A_EquipMATK += n_A_MATK_Variance; // originally Variance is only positive, so add half of it
	
	n_A_MATK = [0,0,0];
	n_A_MATK[0] = n_A_StatMATK + n_A_EquipMATK - n_A_MATK_Variance;
	n_A_MATK[1] = n_A_StatMATK + n_A_EquipMATK;
	n_A_MATK[2] = n_A_StatMATK + n_A_EquipMATK + n_A_MATK_Variance;
	
	BK_n_A_MATK = [0,0,0];
	BK_n_A_MATK[0] = n_A_MATK[0];
	BK_n_A_MATK[1] = n_A_MATK[1];
	BK_n_A_MATK[2] = n_A_MATK[2];
}

function calcStatMAtk(n_A_StatMATK){

	n_A_StatMATK = n_A_INT + Math.floor(n_A_INT / 2) + Math.floor(n_A_DEX / 5) + Math.floor(n_A_LUK / 3) + Math.floor(n_A_BaseLV / 4);
	return n_A_StatMATK;
}

function calcUpgradeMAtk(n_A_Weapon_UpMATK){
	if (n_A_WeaponType == weapTyp_BOW)
		return 0;
		
	if(n_A_WeaponLV == 1){
		n_A_Weapon_UpMATK = n_A_Weapon_ATKplus * 2;
	}else if(n_A_WeaponLV == 2){
		n_A_Weapon_UpMATK = n_A_Weapon_ATKplus * 3;
	}else if(n_A_WeaponLV == 3){
		n_A_Weapon_UpMATK = n_A_Weapon_ATKplus * 5;
	}else if(n_A_WeaponLV == 4){
		n_A_Weapon_UpMATK = n_A_Weapon_ATKplus * 7;
	}
	return n_A_Weapon_UpMATK;
}

function calcUpgradeMAtk2(n_A_Weapon2_UpMATK){
	if(n_Nitou){
		if(n_A_Weapon2LV == 1){
			n_A_Weapon2_UpMATK = n_A_Weapon2_ATKplus * 2;
		}else if(n_A_Weapon2LV == 2){
			n_A_Weapon2_UpMATK = n_A_Weapon2_ATKplus * 3;
		}else if(n_A_Weapon2LV == 3){
			n_A_Weapon2_UpMATK = n_A_Weapon2_ATKplus * 5;
		}else if(n_A_Weapon2LV == 4){
			n_A_Weapon2_UpMATK = n_A_Weapon2_ATKplus * 7;
		}
	}
	return n_A_Weapon2_UpMATK;
}

function calcEnemyMod(n_A_EnemyMod){
		
	n_A_EnemyMod = 1.0;
	
// Div Mods adjustments ---------------------------------
	if(n_A_Arrow==arrTyp_HOLY)
		n_tok[bon_DMG_RC_DEMON] += 5;
	if(SkillSearch(234))
		n_tok[bon_DMG_RC_DRAGON] += SkillSearch(234) *4;

	if(EquipNumSearch(628) && n_A_Arrow == 4)
		n_tok[bon_DMG_RANGE] += 25;
	if(EquipNumSearch(626) && n_A_Arrow == 2)
		n_tok[bon_DMG_RANGE] += 25;
	if(EquipNumSearch(627) && n_A_Arrow == 5)
		n_tok[bon_DMG_RANGE] += 25;
	if(EquipNumSearch(629) && n_A_Arrow == 6)
		n_tok[bon_DMG_RANGE] += 25;
	if(EquipNumSearch(630) && n_A_Arrow == 10)
		n_tok[bon_DMG_RANGE] += 50;
	if(EquipNumSearch(1217))
		n_tok[bon_DMG_RANGE] += n_A_HEAD_DEF_PLUS;

	if(n_A_JOB==14 || n_A_JOB==28)
		n_tok[bon_PHY_ATK] += 10 * CardNumSearch(479);
	if(EquipNumSearch(987) && (EquipNumSearch(616) || EquipNumSearch(617) || EquipNumSearch(618)))
		n_tok[bon_PHY_ATK] += 4;
	if(n_A_Weapon_ATKplus >= 9 && EquipNumSearch(1101))
		n_tok[bon_PHY_ATK] += n_A_Weapon_ATKplus;
	
	if(EquipNumSearch(1089))
		n_tok[bon_DMG_CRIT] += (2 * n_A_Weapon_ATKplus);

// Real Thing --------------------------------------------------
	w1=n_tok[bon_DMG_RC_FORMLESS+n_B[en_RACE]];
	n_A_EnemyMod = (n_A_EnemyMod * (100+w1) /100);

	w1=n_tok[bon_DMG_ELE_NEUTRAL+Math.floor(n_B[en_ELEMENT] / 10)];
	n_A_EnemyMod = (n_A_EnemyMod * (100+w1) /100);

	w1=n_tok[bon_DMG_SIZ_SMALL+n_B[en_SIZE]];
	n_A_EnemyMod = (n_A_EnemyMod * (100+w1) /100);

	if(n_Enekyori==1){ // Ranged
		if(TyouEnkakuSousa3dan != -1){
			w1=n_tok[bon_DMG_RANGE];
			n_A_EnemyMod = (n_A_EnemyMod * (100+w1) /100);
		}
	}

	w1=0;
	if(n_B[en_BOSS] == 1)
		w1 += n_tok[bon_DMG_BOSS];
		
	w1 += n_tok[bon_PHY_ATK];
	n_A_EnemyMod = (n_A_EnemyMod * (100+w1) /100);

	if(wCriTyuu==1 && n_A_ActiveSkill != 272 && n_A_ActiveSkill != 401) // Crit
		n_A_EnemyMod = (n_A_EnemyMod * (100+ n_tok[bon_DMG_CRIT]) /100);
		
	if(108<=n_B[en_ID] && n_B[en_ID]<=115 || n_B[en_ID]==319) // Goblins
		n_A_EnemyMod = (n_A_EnemyMod * (100+n_tok[bon_DMG_GOBLIN]) /100);
		
	if(116<=n_B[en_ID] && n_B[en_ID]<=120) // Kobolds
		n_A_EnemyMod = (n_A_EnemyMod * (100+n_tok[bon_DMG_KOBOLD]) /100);
		
	if(49<=n_B[en_ID] && n_B[en_ID]<=52 || 55==n_B[en_ID] || 221==n_B[en_ID]) // Orc
		n_A_EnemyMod = (n_A_EnemyMod * (100+n_tok[bon_DMG_ORC]) /100);
		
	if(106==n_B[en_ID] || 152==n_B[en_ID] || 308==n_B[en_ID] || 32==n_B[en_ID] || 541==n_B[en_ID]) // Golem
		n_A_EnemyMod = (n_A_EnemyMod * (100+n_tok[bon_DMG_GOLEM]) /100);

	n_A_EnemyMod = (n_A_EnemyMod * (100+StPlusCalc2(bon_DMG_MONSTER+n_B[en_ID])+StPlusCard(bon_DMG_MONSTER+n_B[en_ID])) /100);

	if(SkillSearch(skill_LK_BERSERK))
		n_A_EnemyMod = n_A_EnemyMod * 2;
		
	if(n_A_WeaponType == 11 && SkillSearch(skill_AX_ADVANCED_KATAR_MASTERY))
		n_A_EnemyMod = (n_A_EnemyMod * (110 + 2 * SkillSearch(skill_AX_ADVANCED_KATAR_MASTERY))/100);

	w1 = 0;
	if(Taijin == 0){
		if(SkillSearch(skill_TKM_STELLAR_WRATH) && SkillSearch(skill_TKM_SOLAR_LUNAR_AND_STELLAR_MIRACLE))
			w1 += (n_A_BaseLV + n_A_STR + n_A_LUK + n_A_DEX) / (12 - SkillSearch(skill_TKM_STELLAR_WRATH) *3);
		else if(SkillSearch(skill_TKM_STELLAR_WRATH) && n_B[en_SIZE]==2 && n_B[en_HP] >= 17392)
			w1 += (n_A_BaseLV + n_A_STR + n_A_LUK + n_A_DEX) / (12 - SkillSearch(skill_TKM_STELLAR_WRATH) *3);
		else if(SkillSearch(skill_TKM_SOLAR_WRATH) && n_B[en_SIZE]==0)
			w1 += (n_A_BaseLV + n_A_LUK + n_A_DEX) / (12 - SkillSearch(skill_TKM_SOLAR_WRATH) *3);
		else if(SkillSearch(skill_TKM_LUNAR_WRATH) && n_B[en_SIZE]==1 && n_B[en_HP] >= 5218)
			w1 += (n_A_BaseLV + n_A_LUK + n_A_DEX) / (12 - SkillSearch(skill_TKM_LUNAR_WRATH) *3);
	}else{
		if(SkillSearch(skill_TKM_STELLAR_WRATH)){
			w1 += (n_A_BaseLV + n_A_STR + n_A_LUK + n_A_DEX) / (12 - SkillSearch(skill_TKM_STELLAR_WRATH) *3);
		}else{
			 if(SkillSearch(skill_TKM_SOLAR_WRATH)){
				w1 += (n_A_BaseLV + n_A_LUK + n_A_DEX) / (12 - SkillSearch(skill_TKM_SOLAR_WRATH) *3);
			 }else{
				 if(SkillSearch(skill_TKM_LUNAR_WRATH))
					w1 += (n_A_BaseLV + n_A_LUK + n_A_DEX) / (12 - SkillSearch(skill_TKM_LUNAR_WRATH) *3);
			}
		}
	}
	n_A_EnemyMod = (n_A_EnemyMod * (100+w1) /100);
	
	return n_A_EnemyMod;
}

{JobHP_A = new Array(0,70,50,40,50,30,40,150,110,75,85,55,90,110,85, 90,75,75,75,90,0,150,110,75,85,55,90,110,85, 90,75,75,75,90,0,70,50,40,50,30,40,70, 90,75,  75,  84,150,150,110,110,75,75,85,85,55,55,90,90,110,110,85,85, 90, 90,75,75,75,75,75,75,90,90);
JobHP_B = new Array(5, 5, 5, 5, 5, 5, 5,  5,  5, 5, 5, 5, 5,  7, 5,6.5, 3, 3, 5, 5,5,  5,  5, 5, 5, 5, 5,  7, 5,6.5, 3, 3, 5, 5,5, 5, 5, 5, 5, 5, 5, 5,6.5, 5,   3, 3.5,  5,  5,  5,  5, 5, 5, 5, 5, 5, 5, 5, 5,  7,  7, 5, 5,6.5,6.5, 3, 3, 3, 3, 5, 5, 5, 5);
JobHP_Third = [
/* RK */[8100,8133,8290,8448,8608,8769,8932,9096,9262,9429,9598,9768,9940,10113,10288,10464,10642,10821,11002,11184,11368,11553,11740,11928,12118,12309,12502,12696,12892,13089,13288,13488,13690,13893,14098,14304,14512,14721,14932,15144,15358,15573,15790,16008,16229,16449,16672,16896,17122,17349,17578,17808],
/* GX */[6050,6093,6208,6324,6441,6559,6678,6798,6920,7043,7167,7292,7418,7545,7673,7802,7932,8063,8196,8330,8465,8601,8738,8876,9015,9155,9296,9438,9582,9727,9873,10020,10168,10316,10467,10618,10770,10923,11078,11234,11391,11549,11708,11868,12029,12191,12354,12518,12684,12851,13019,13188],
/* AB */[4300,4333,4412,4491,4570,4649,4728,4807,4886,4965,5044,5123,5202,5281,5360,5439,5518,5597,5676,5755,5834,5913,5992,6071,6150,6229,6308,6387,6466,6545,6624,6703,6782,6861,6940,7019,7098,7177,7256,7335,7414,7493,7572,7651,7730,7809,7888,7967,8046,8125,8204,8283],
/* RA */[4800,4828,4918,5009,5101,5194,5288,5382,5477,5573,5670,5768,5867,5967,6068,6170,6273,6377,6482,6588,6694,6801,6909,7018,7128,7239,7351,7464,7579,7693,7809,7926,8044,8162,8281,8401,8522,8644,8767,8891,9016,9142,9269,9397,9367,9656,9786,9917,10049,10183,10316,10451],
/* WL */[3250,3313,3372,3432,3493,3554,3616,3678,3741,3804,3868,3932,3997,4063,4129,4196,4263,4331,4399,4468,4537,4607,4677,4748,4820,4892,4965,5038,5112,5186,5261,5336,5412,5489,5566,5644,5723,5801,5880,5960,6040,6121,6202,6284,6367,6451,6534,6619,6703,6787,6873,6960],
/* ME */[5050,5082,5176,5271,5367,5464,5562,5661,5761,5862,5963,6065,6168,6272,6377,6483,6590,6698,6807,6917,7027,7138,7250,7363,7477,7592,7708,7825,7943,8062,8181,8301,8422,8544,8667,8791,8916,9042,9169,9297,9425,9554,9684,9815,9947,10080,10214,10349,10485,10622,10759,10897],
/* RG */[6050,6093,6208,6324,6441,6559,6678,6798,6920,7043,7167,7292,7418,7545,7673,7802,7932,8063,8196,8330,8465,8601,8738,8876,9015,9155,9296,9438,9582,9727,9873,10020,10168,10316,10467,10618,10770,10923,11078,11234,11391,11549,11708,11868,12029,12191,12354,12518,12684,12851,13019,13188],
/* SC */[6050,6093,6208,6324,6441,6559,6678,6798,6920,7043,7167,7292,7418,7545,7673,7802,7932,8063,8196,8330,8465,8601,8738,8876,9015,9155,9296,9438,9582,9727,9873,10020,10168,10316,10467,10618,10770,10923,11078,11234,11391,11549,11708,11868,12029,12191,12354,12518,12684,12851,13019,13188],
/* SU */[5050,5082,5176,5271,5367,5464,5562,5661,5761,5862,5963,6065,6168,6272,6377,6483,6590,6698,6807,6917,7027,7138,7250,7363,7477,7592,7708,7825,7943,8062,8181,8301,8422,8544,8667,8791,8916,9042,9169,9297,9425,9554,9684,9815,9947,10080,10214,10349,10485,10622,10759,10897],
/* MI */[4800,4828,4918,5009,5101,5194,5288,5382,5477,5573,5670,5768,5867,5967,6068,6170,6273,6377,6482,6588,6694,6801,6909,7018,7128,7239,7351,7464,7579,7693,7809,7926,8044,8162,8281,8401,8522,8644,8767,8891,9016,9142,9269,9397,9367,9656,9786,9917,10049,10183,10316,10451],
/* WA */[4800,4828,4918,5009,5101,5194,5288,5382,5477,5573,5670,5768,5867,5967,6068,6170,6273,6377,6482,6588,6694,6801,6909,7018,7128,7239,7351,7464,7579,7693,7809,7926,8044,8162,8281,8401,8522,8644,8767,8891,9016,9142,9269,9397,9367,9656,9786,9917,10049,10183,10316,10451],
/* SO */[4800,4828,4918,5009,5101,5194,5288,5382,5477,5573,5670,5768,5867,5967,6068,6170,6273,6377,6482,6588,6694,6801,6909,7018,7128,7239,7351,7464,7579,7693,7809,7926,8044,8162,8281,8401,8522,8644,8767,8891,9016,9142,9269,9397,9367,9656,9786,9917,10049,10183,10316,10451],
/* GE */[4300,4333,4412,4491,4570,4649,4728,4807,4886,4965,5044,5123,5202,5281,5360,5439,5518,5597,5676,5755,5834,5913,5992,6071,6150,6229,6308,6387,6466,6545,6624,6703,6782,6861,6940,7019,7098,7177,7256,7335,7414,7493,7572,7651,7730,7809,7888,7967,8046,8125,8204,8283]
];
}

function calcHP(n_A_MaxHP){
	// Job ---
	if(n_Sanji == 0){
		n_A_MaxHP = 0;
		for(i=2;i<=n_A_BaseLV;i++)
			n_A_MaxHP += Math.round(JobHP_A[n_A_JOB] * i /100);

		n_A_MaxHP = Math.floor((JobHP_B[n_A_JOB] * n_A_BaseLV) + 35 + n_A_MaxHP);

		if(n_A_JOB == cls_TKK && n_A_BaseLV >= 70){
			if(n_A_BaseLV <=79)
				n_A_MaxHP = 2127 + 10 * (n_A_BaseLV-70);
			else if(n_A_BaseLV <=89)
				n_A_MaxHP = 2200 + 50 * (n_A_BaseLV-80);
			else if(n_A_BaseLV <=99){
				n_A_MaxHP = 2700 + 50 * (n_A_BaseLV-90);
				if(SkillSearch(skill_TK_TAEKWON_RANKER))
					n_A_MaxHP = n_A_MaxHP * 3;
			}
		}
		if(n_A_JOB == cls_TKM && n_A_BaseLV >= 70){
			// TKM HP 90~99
			wKenseiHP = [3455,3524,3593,3663,3834,3806,3878,3951,4025,4500];
			if(n_A_BaseLV <=79)
				n_A_MaxHP = 2670 + 10 * (n_A_BaseLV-70);
			else if(n_A_BaseLV <=89)
				n_A_MaxHP = 3000 + 20 * (n_A_BaseLV-80);
			else if(n_A_BaseLV <=99)
				n_A_MaxHP = wKenseiHP[n_A_BaseLV-90];
		}
		wHPSL = 0;
		if(n_A_JOB == cls_SL){
			if(n_A_BaseLV >= 70){
				if(n_A_BaseLV <= 79)
					wHPSL = (n_A_BaseLV - 70) *40;
				else if(n_A_BaseLV <= 84)
					wHPSL = (n_A_BaseLV - 80) *50;
				else if(n_A_BaseLV <= 89)
					wHPSL = (n_A_BaseLV - 80) *50 -10;
				else if(n_A_BaseLV <= 92)
					wHPSL = (n_A_BaseLV - 90) *50;
				else if(n_A_BaseLV <= 97)
					wHPSL = (n_A_BaseLV - 90) *50 -10;
				else if(n_A_BaseLV == 98) wHPSL = 375;
				else wHPSL = 4;
			}
		}
		if(n_A_JOB == cls_NIN){
			NinHP = new Array(131,137,144,151,159,167,175,184,193,202,212,222,232,243,254,265,277,289,301,316,331,346,364,382,400,420,440,460,482,504,526,548,572,596,620,646,672,698,726,754,784,814,844,876,908,940,975,1010,1100,1140,1180,1220,1260,1300,1340,1385,1430,1475,1520,1565,1615,1665,1715,1765,1815,1880,1935,1990,2045,2100,2160,2200,2280,2340,2400,2460,2520,2580,2640,2705,2770,2835,2900,2965,3030,3100,3170,3240,3310,3380,3455,3530,3605,3680,3760,3840,3920,4000,4080);
			n_A_MaxHP = NinHP[n_A_BaseLV-1];
		}
		if(n_A_JOB == cls_GUN && n_A_BaseLV >= 10){
			GunHP = new Array(202,212,222,232,243,254,265,277,289,301,316,331,346,364,382,400,420,440,460,490,520,550,580,610,650,680,710,740,770,800,830,860,890,920,950,990,1020,1050,1080,1110,1140,1180,1230,1280,1330,1395,1455,1515,1575,1635,1695,1760,1820,1885,1950,2015,2080,2145,2210,2275,2340,2410,2480,2550,2620,2690,2760,2830,2900,2970,3040,3115,3190,3265,3340,3415,3490,3565,3640,3715,3790,3870,3950,4030,4110,4190,4270,4350,4430,4510);
			n_A_MaxHP = GunHP[n_A_BaseLV-10];
		}
		if(n_A_JOB == cls_SNOVI && n_A_BaseLV == 99)
			n_A_MaxHP += 2000;
	}else{
		n_A_MaxHP = JobHP_Third[Math.floor(n_A_JOB/2)-23][n_A_BaseLV-99];
	}
	// Rebirth ---
	if(n_Tensei)
		n_A_MaxHP = Math.floor(n_A_MaxHP *125 /100);
	// Adopted ---
	if(n_A_Adopted)
		n_A_MaxHP = Math.floor(n_A_MaxHP *70 /100);
	// Vit ---
	n_A_MaxHP = Math.floor((n_A_MaxHP - wHPSL) * (100 + n_A_VIT) / 100);

	// Additions ---
	w=0;
	w += n_tok[bon_HP_ADD];
	w += StPlusCalc2(bon_VIT);
	w += StPlusCalc2(bon_ALL_STATS);

	if(CardNumSearch(186)) // Remover
		w -= 40 * n_A_BODY_DEF_PLUS;
	if(n_A_BODY_DEF_PLUS >= 9 && CardNumSearch(225)) // Apocalypse
		w += 800;
	if(n_A_JobSearch()==cls_MAG) // MageCls
		w += CardNumSearch(474) * -100; // Banshee
	if(n_A_JobSearch()==cls_SWO) // SwordsCls
		w += 500 * CardNumSearch(477); // Echio

		//if(n_A_Equip[8]==536){ // ??
	if(EquipNumSearch(536)){ // Valkyrian Shoes
		wHPVS = n_A_JobSearch();
		if(wHPVS==cls_ACO || wHPVS==cls_ARC || wHPVS==cls_MAG)
			w += 5 * n_A_BaseLV;
	}
	if(EquipNumSearch(762)) // SnipingSuit R
		w += 20 * n_A_BaseLV;
	if(EquipNumSearch(770)) // Quill + Small Book Pen
		w += 3 * n_A_BaseLV;
	if(EquipNumSearch(836)) // Diabolus Boots
		w += n_A_BaseLV *10;
	if(EquipNumSearch(859)) // Brynhild
		w += n_A_BaseLV *20;
	if(EquipNumSearch(883) && n_A_BaseLV <= 79) // Badge Academy
		w += 400 * EquipNumSearch(883);
	if(EquipNumSearch(986)) // Chameleon Armor
		w += 7 * n_A_BaseLV;
	if(EquipNumSearch(1116) && n_A_JobSearch()==cls_NOV) // Novice Figurine
		w += 30;
	if(n_A_Weapon_ATKplus >= 6 && EquipNumSearch(1168)) // Withered Branch Staff
		w += -200;
	if(EquipNumSearch(1172)) // Chronos
		w += 50 * Math.floor(n_A_Weapon_ATKplus / 2);

	if(SkillSearch(skill_CR_FAITH)) // Faith
		n_A_MaxHP += SkillSearch(skill_CR_FAITH) * 200;
		
	n_A_MaxHP += w;

	if(n_A_MaxHP < 1)
		n_A_MaxHP = 1;
	
	// Multiplier ---
	w=0;
	w += n_tok[bon_HP_MUL];

	if(SU_VIT >= 80 && CardNumSearch(267)) // Giant Whisper
		w += 3;
	if(n_A_SHOES_DEF_PLUS >= 9 && CardNumSearch(304)) // FireLockSoldier
		w += 10;
	if(CardNumSearch(405)){ // Aliot
		if(n_A_JobSearch()==cls_SWO || n_A_JobSearch()==cls_THI || n_A_JobSearch()==cls_MER) // SwordCls, ThiefCls, MerchCls
			w += 5;
	}
	if(n_A_SHOES_DEF_PLUS <= 4 && CardNumSearch(407)) // GoldAcidus
		w += 4;

	if(EquipNumSearch(715)) // Varian Shoes
		w -= n_A_SHOES_DEF_PLUS;
	if(SkillSearch(skill_SUR_RISING_DRAGON))
		w += 2 + SkillSearch(skill_SUR_RISING_DRAGON);
	if(SkillSearch(skill_SUR_GENTLE_TOUCH_CHANGE))
		w -= 10;
	if(SkillSearch(skill_SUR_GENTLE_TOUCH_REVITALIZE))
		w += 15;
	if(SkillSearch(skill_ROY_FORCE_OF_VANGUARD))
		w += (3 * SkillSearch(skill_ROY_FORCE_OF_VANGUARD));
	
	if(n_A_PassSkill3[pass_III_SONG_OF_LUTIE]) // Song of Lutie - doesn't work
		w += 5 + n_A_PassSkill3[pass_III_SONG_OF_LUTIE] * 2 + n_A_PassSkill3[pass_III_SONG_OF_LUTIE_ML] + Math.floor(n_A_PassSkill3[pass_III_SONG_OF_LUTIE_VIT] /10);
	if(n_A_PassSkill5[pass_V_HP]) // +100% HP ?
		w += 100;		
		
	n_A_MaxHP = n_A_MaxHP * (100 + w)/100;

	if(SkillSearch(skill_LK_FRENZY)) // Berserk
		n_A_MaxHP *= 3;
		
	if(n_A_PassSkill6[pass_VI_ELE_FIELD] == pass_VI_DELUGE && n_A_PassSkill6[pass_VI_ELE_FIELD_LVL] >= 1){
		var dHP = [5,9,12,14,15];
		n_A_MaxHP = n_A_MaxHP * (100 + dHP[n_A_PassSkill6[pass_VI_ELE_FIELD_LVL]-1]) /100;
	}

	if(n_A_MaxHP < 1) // not negative
		n_A_MaxHP = 1;
		
	n_A_MaxHP = Math.floor(n_A_MaxHP);
	
	return n_A_MaxHP;
}

{JobSP_A = new Array(1, 2, 2, 5, 2, 6, 3,  3,  4, 8, 4, 9, 4,4.7, 5,4.7, 6, 6, 7, 4,1,  3,  4, 8, 4, 9, 4,4.7, 5,4.7, 6, 6, 7, 4,1, 2, 2, 5, 2, 6, 3, 2,4.7, 9,3.75,3.75,  3,  3,  4,  4, 8, 8, 4, 4, 9, 9, 4, 4,4.7,4.7, 5, 5,4.7,4.7, 6, 6, 6, 6, 7, 7, 4, 4);
JobSP_Third = [
/* RK */[300,310,313,316,319,322,325,328,331,334,337,340,343,346,349,352,355,358,361,364,367,370,373,376,379,382,385,388,391,394,397,400,403,406,409,412,415,418,421,424,427,430,433,436,439,442,445,448,451,454,457,460],
/* GX */[400,410,414,418,422,426,430,434,438,442,446,450,454,458,462,466,470,474,478,482,486,490,494,498,502,506,510,514,518,522,526,530,534,538,542,546,550,554,558,562,566,570,574,578,582,586,590,594,598,602,606,610],
/* AB */[800,810,818,826,834,842,850,858,866,874,882,890,898,906,914,922,930,938,946,954,962,970,978,986,994,1002,1010,1018,1026,1034,1042,1050,1058,1066,1074,1082,1090,1098,1106,1114,1122,1130,1138,1146,1154,1162,1170,1178,1186,1194,1202,1210],
/* RA */[400,410,414,418,422,426,430,434,438,442,446,450,454,458,462,466,470,474,478,482,486,490,494,498,502,506,510,514,518,522,526,530,534,538,542,546,550,554,558,562,566,570,574,578,582,586,590,594,598,602,606,610],
/* WL */[900,910,919,928,937,946,955,964,973,982,991,1000,1009,1018,1027,1036,1045,1054,1063,1072,1081,1090,1099,1108,1117,1126,1135,1144,1153,1162,1171,1180,1189,1198,1207,1216,1225,1234,1243,1252,1261,1270,1279,1288,1297,1306,1315,1324,1333,1343,1351,1360],
/* ME */[400,410,414,418,422,426,430,434,438,442,446,450,454,458,462,466,470,474,478,482,486,490,494,498,502,506,510,514,518,522,526,530,534,538,542,546,550,554,558,562,566,570,574,578,582,586,590,594,598,602,606,610],
/* RG */[400,410,414,418,422,426,430,434,438,442,446,450,454,458,462,466,470,474,478,482,486,490,494,498,502,506,510,514,518,522,526,530,534,538,542,546,550,554,558,562,566,570,574,578,582,586,590,594,598,602,606,610],
/* SC */[400,410,414,418,422,426,430,434,438,442,446,450,454,458,462,466,470,474,478,482,486,490,494,498,502,506,510,514,518,522,526,530,534,538,542,546,550,554,558,562,566,570,574,578,582,586,590,594,598,602,606,610],
/* SU */[400,410,414,418,422,426,430,434,438,442,446,450,454,458,462,466,470,474,478,482,486,490,494,498,502,506,510,514,518,522,526,530,534,538,542,546,550,554,558,562,566,570,574,578,582,586,590,594,598,602,606,610],
/* MI */[400,410,414,418,422,426,430,434,438,442,446,450,454,458,462,466,470,474,478,482,486,490,494,498,502,506,510,514,518,522,526,530,534,538,542,546,550,554,558,562,566,570,574,578,582,586,590,594,598,602,606,610],
/* WA */[400,410,414,418,422,426,430,434,438,442,446,450,454,458,462,466,470,474,478,482,486,490,494,498,502,506,510,514,518,522,526,530,534,538,542,546,550,554,558,562,566,570,574,578,582,586,590,594,598,602,606,610],
/* SO */[900,910,919,928,937,946,955,964,973,982,991,1000,1009,1018,1027,1036,1045,1054,1063,1072,1081,1090,1099,1108,1117,1126,1135,1144,1153,1162,1171,1180,1189,1198,1207,1216,1225,1234,1243,1252,1261,1270,1279,1288,1297,1306,1315,1324,1333,1343,1351,1360],
/* GE */[900,910,919,928,937,946,955,964,973,982,991,1000,1009,1018,1027,1036,1045,1054,1063,1072,1081,1090,1099,1108,1117,1126,1135,1144,1153,1162,1171,1180,1189,1198,1207,1216,1225,1234,1243,1252,1261,1270,1279,1288,1297,1306,1315,1324,1333,1343,1351,1360]
];
}

function calcSP(n_A_MaxSP){
	if(n_Sanji == 0){
		wSPSL = 0;
		if(n_A_JOB == cls_SL){
			if(n_A_BaseLV >= 70){
				if(n_A_BaseLV < 80)
					wSPSL = (n_A_BaseLV - 70) *4 +5;
				else if(n_A_BaseLV < 90)
					wSPSL = (n_A_BaseLV - 80) *4;
				else if(n_A_BaseLV < 93)
					wSPSL = (n_A_BaseLV - 90) *4;
				else if(n_A_BaseLV < 99)
					wSPSL = (n_A_BaseLV - 90) *4 -10;
				else wSPSL = 1;
			}
		}
		n_A_MaxSP = Math.floor(10 + n_A_BaseLV * JobSP_A[n_A_JOB] - wSPSL);
		
		if(n_A_JOB == cls_TKK && n_A_BaseLV >= 70){
			if(n_A_BaseLV <=79)
				n_A_MaxSP = 150 + 1 * (n_A_BaseLV-70);
			else if(n_A_BaseLV <=89)
				n_A_MaxSP = 160 + 1 * (n_A_BaseLV-70);
			else if(n_A_BaseLV <=99){
				n_A_MaxSP = 190;
				if(SkillSearch(skill_TK_TAEKWON_RANKER))
					n_A_MaxSP = n_A_MaxSP * 3;
				n_A_MaxSP = Math.floor(n_A_MaxSP);
			}
		}
		if(n_A_JOB == cls_TKM && n_A_BaseLV >= 70){
			if(n_A_BaseLV <=79)
				n_A_MaxSP = 339 + 2 * (n_A_BaseLV-70);
			else if(n_A_BaseLV <=89)
				n_A_MaxSP = 386 + 2 * (n_A_BaseLV-80);
			else if(n_A_BaseLV <=99)
				n_A_MaxSP = 430 + 3 * (n_A_BaseLV-90);
		}
		if(n_A_JOB == cls_NIN){
			if(n_A_BaseLV <= 20) n_A_MaxSP = 11 + n_A_BaseLV * 3;
			else if(n_A_BaseLV <= 40) n_A_MaxSP = 71 +(n_A_BaseLV-20)*4;
			else if(n_A_BaseLV <= 60) n_A_MaxSP = 151 +(n_A_BaseLV-40)*5;
			else if(n_A_BaseLV <= 80) n_A_MaxSP = 251 +(n_A_BaseLV-60)*6;
			else n_A_MaxSP = 370 +(n_A_BaseLV-80)*8;
		}
		if(n_A_JOB == cls_GUN){
			if(n_A_BaseLV <= 25) n_A_MaxSP = 10 + n_A_BaseLV * 3;
			else if(n_A_BaseLV <= 35) n_A_MaxSP = 85 +(n_A_BaseLV-25)*4;
			else if(n_A_BaseLV <= 40) n_A_MaxSP = 126 +(n_A_BaseLV-35)*3;
			else if(n_A_BaseLV <= 50) n_A_MaxSP = 141 +(n_A_BaseLV-40)*4;
			else if(n_A_BaseLV <= 75) n_A_MaxSP = 181 +(n_A_BaseLV-50)*5;
			else if(n_A_BaseLV <= 78) n_A_MaxSP = 306 +(n_A_BaseLV-75)*6;
			else n_A_MaxSP = 330 +(n_A_BaseLV-78)*6;
		}
	}else{
		n_A_MaxSP = JobSP_Third[Math.floor(n_A_JOB/2)-23][n_A_BaseLV-99];;
	}
	if(n_Tensei) // Rebirth
		n_A_MaxSP = Math.floor(n_A_MaxSP * 125 /100);
	if(n_A_Adopted) // Adopted
		n_A_MaxSP = Math.floor(n_A_MaxSP *70 /100);
	n_A_MaxSP = Math.floor(n_A_MaxSP * (100 + n_A_INT) / 100);

	
	
	
	// Additions -------------------------
	w=0;
	
	w += n_tok[bon_SP_ADD];
	w += StPlusCalc2(bon_INT);
	w += StPlusCalc2(bon_ALL_STATS);

	if(n_A_JobSearch()==cls_MAG){ // MageCls
		w += 100 * CardNumSearch(474); // Banshee
		w += 100 * CardNumSearch(476); // Agav
	}
	
	if(n_A_HEAD_DEF_PLUS <= 4 && n_A_card[card_loc_HEAD_UPPER]==179) // Blue Acidus
		w += 40;
	if(n_A_card[card_loc_HEAD_MIDDLE]==179) // Blue Acidus
		w += 40;
	if(n_A_HEAD_DEF_PLUS >= 9 && n_A_card[card_loc_HEAD_UPPER] == 298) // Carat
		w += 150;

	//if(n_A_Equip[eq_SHOES]==536){ // ValkShoes
	if(EquipNumSearch(536)){ // ValkShoes
		wSPVS = n_A_JobSearch();
		if(wSPVS==cls_SWO || wSPVS==cls_THI || wSPVS==cls_MER)
			w += 2 * n_A_JobLV;
	}
	if(n_A_Weapon_ATKplus >= 9 && EquipNumSearch(642)) // LBW
		w += 300;
	if(EquipNumSearch(762))
		w += 5 * n_A_BaseLV;
	if(EquipNumSearch(770)) // Quill + Small Book Pen
		w += n_A_JobLV;
	if(EquipNumSearch(859)) // Brynhild
		w += n_A_BaseLV *5;
	if(EquipNumSearch(883) && n_A_BaseLV <= 79) // Badge Academy
		w += 200 * EquipNumSearch(883);
	if(EquipNumSearch(986)) // Chameleon
		w += Math.floor(0.5 * n_A_BaseLV);
	if(EquipNumSearch(1118) && n_A_JobSearch()==cls_ACO) // AcolyteFigurine
		w += 50;
	if(n_A_Weapon_ATKplus >= 6 && EquipNumSearch(1168)) // Withered Branch Staff
		w += -100;
	if(EquipNumSearch(1193)) // Proxy Skin Fragment
		w += Math.floor(n_A_BaseLV / 3) + n_A_SHOULDER_DEF_PLUS * 10;
		
	if(SkillSearch(skill_SL_KAINA)) // Kaina
		w += 30 * SkillSearch(skill_SL_KAINA);
	if(SkillSearch(skill_RAN_RESEARCH_TRAP))
		w += (200 + 20 * SkillSearch(skill_RAN_RESEARCH_TRAP));

	n_A_MaxSP += w;
	n_A_MaxSP = Max(0,n_A_MaxSP);

	
		
	// Multiplier ---------------
	w=0;
	
	w += n_tok[bon_SP_MUL];
	if(n_A_SHOES_DEF_PLUS >= 9 && CardNumSearch(304)) // Firelock Soldier
		w += 10;
	if(CardNumSearch(405)){ // Aliot
		if(n_A_JobSearch()==cls_ACO || n_A_JobSearch()==cls_ARC || n_A_JobSearch()==cls_MAG)
			w += 5;
	}
	if(n_A_SHOES_DEF_PLUS <= 4 && CardNumSearch(407)) // Gold Acidus
		w += 4;
	
	if(EquipNumSearch(715)) // Variant Shoes
		w -= n_A_SHOES_DEF_PLUS;	
	if(SkillSearch(skill_SUR_RISING_DRAGON))
		w += 2 + SkillSearch(skill_SUR_RISING_DRAGON);
	
	w += SkillSearch(skill_HP_MEDIATIO); // Meditatio	
	w += SkillSearch(skill_HW_SOUL_DRAIN) *2; // SoulDrain
	if(n_A_PassSkill5[pass_V_SP])
		w += 100;
	if(n_A_PassSkill3[pass_III_GYPSYS_KISS])
		w += 15 + n_A_PassSkill3[pass_III_GYPSYS_KISS] + Math.floor(n_A_PassSkill3[pass_III_GYPSYS_KISS_DL] / 2) + Math.floor(n_A_PassSkill3[pass_III_GYPSYS_KISS_INT] /10);

	n_A_MaxSP = Math.floor(n_A_MaxSP * (100 + w)/100);
	
	return n_A_MaxSP;
}

function calcHardDef(n_A_totalDEF){
	n_A_DEF = n_tok[bon_DEF];
	
	for(i=2;i<=10;i++)
		n_A_DEF += ItemOBJ[n_A_Equip[i]][itm_DEF];

	n_A_DEFplus = n_A_HEAD_DEF_PLUS + n_A_BODY_DEF_PLUS + n_A_LEFT_DEF_PLUS + n_A_SHOULDER_DEF_PLUS + n_A_SHOES_DEF_PLUS;
	
	// +5 gives additional def, +9 further, +13 further, +17 further
	n_A_DEFplus += Max(0,n_A_HEAD_DEF_PLUS-4) + Max(0,n_A_BODY_DEF_PLUS-4) + Max(0,n_A_LEFT_DEF_PLUS-4) + Max(0,n_A_SHOULDER_DEF_PLUS-4) + Max(0,n_A_SHOES_DEF_PLUS-4);
	n_A_DEFplus += Max(0,n_A_HEAD_DEF_PLUS-8) + Max(0,n_A_BODY_DEF_PLUS-8) + Max(0,n_A_LEFT_DEF_PLUS-8) + Max(0,n_A_SHOULDER_DEF_PLUS-8) + Max(0,n_A_SHOES_DEF_PLUS-8);
	n_A_DEFplus += Max(0,n_A_HEAD_DEF_PLUS-12) + Max(0,n_A_BODY_DEF_PLUS-12) + Max(0,n_A_LEFT_DEF_PLUS-12) + Max(0,n_A_SHOULDER_DEF_PLUS-12) + Max(0,n_A_SHOES_DEF_PLUS-12);
	n_A_DEFplus += Max(0,n_A_HEAD_DEF_PLUS-16) + Max(0,n_A_BODY_DEF_PLUS-16) + Max(0,n_A_LEFT_DEF_PLUS-16) + Max(0,n_A_SHOULDER_DEF_PLUS-16) + Max(0,n_A_SHOES_DEF_PLUS-16);
		
	if(n_A_LEFT_DEF_PLUS <= 5 && CardNumSearch(222)) // Arclouze
		n_A_DEF += 2;
	if(n_A_BODY_DEF_PLUS <= 5 && CardNumSearch(283)) // Goat
		n_A_DEF += 2;
		
	if(EquipNumSearch(521)){ // Lunar Bow
		if(n_A_Weapon_ATKplus <= 5)
			n_A_DEF += 2;
		else if(n_A_Weapon_ATKplus >= 9)
			n_A_DEF += 7;
		else
			n_A_DEF += 5;
	}
	if(EquipNumSearch(658)) // Gatekeeper-DD
		n_A_DEF += n_A_Weapon_ATKplus;
	if(EquipNumSearch(715)) // Variant Shoes
		n_A_DEF += Math.floor(n_A_SHOES_DEF_PLUS /2);
	if(EquipNumSearch(742) && n_A_JobSearch()==cls_SWO) // Set ?
		n_A_DEF += 6;
	if(EquipNumSearch(764)) // Set ?
		n_A_DEFplus -= (n_A_HEAD_DEF_PLUS + n_A_LEFT_DEF_PLUS);
	if(EquipNumSearch(809)) // Leaf Hat
		n_A_DEFplus -= n_A_HEAD_DEF_PLUS;
	if(EquipNumSearch(942)) // Cardo
		n_A_DEF += Math.floor(n_A_Weapon_ATKplus / 2);;
	if(EquipNumSearch(986) && (n_A_JobSearch()==cls_SWO || n_A_JobSearch()==cls_THI || n_A_JobSearch()==cls_MER)) // Chameleon Armor
		n_A_DEF += 3;
	if(EquipNumSearch(987) && (EquipNumSearch(616) || EquipNumSearch(617) || EquipNumSearch(618))) // SprintMail / Set
		n_A_DEF += 2;
	if(EquipNumSearch(1026)) // Santa Beard
		n_A_DEF -= 5;
	if(EquipNumSearch(1117) && n_A_JobSearch()==cls_SWO) // Swordsman Figurine
		n_A_DEF += 2;
	if(SU_INT >= 120 && EquipNumSearch(1264)) // Reissue Schmitz Helm
		n_A_DEF += 5;

	if(n_A_PassSkill3[pass_III_BAT_THEME])
		n_A_DEF += 2 + 2 * n_A_PassSkill3[pass_III_BAT_THEME];

	if(SkillSearch(skill_MEC_MAINFRAME_RESTRUCTURE)){
		n_A_DEF += 4* SkillSearch(skill_MEC_MAINFRAME_RESTRUCTURE);
		if(SkillSearch(skill_MEC_MAINFRAME_RESTRUCTURE)>=2)
			n_A_DEF -= 1;
	}
	if(SkillSearch(skill_ROY_SHIELD_SPELL)==3)
		n_A_DEF += Math.floor(10.5 * n_A_LEFT_DEF_PLUS);
	if(SkillSearch(skill_ROY_PRESTIGE))
		n_A_DEF += Math.floor(Math.floor((15*SkillSearch(skill_ROY_PRESTIGE))+(10*SkillSearch(skill_CR_DEFENDING_AURA)))*n_A_BaseLV/100);
	if(SkillSearch(skill_ROY_BANDING))
		n_A_DEF += 5 + SkillSearch(skill_ROY_BANDING);
		
	n_A_totalDEF = n_A_DEF + n_A_DEFplus;

	if(n_tok[bon_USR_DEF_DIV])
		n_A_totalDEF = Math.floor(n_A_totalDEF / n_tok[bon_USR_DEF_DIV]);
	if(n_tok[bon_DEF_MUL]) // ?
		n_A_totalDEF -= Math.floor(n_A_totalDEF * n_tok[bon_DEF_MUL] /100);
	if(n_A_IJYOU[status_POISONED])
		n_A_totalDEF -= Math.floor(n_A_totalDEF * 25 / 100);
	
	if(SkillSearch(skill_LK_CONCENTRATION)) // Concentration
		n_A_totalDEF = Math.floor(n_A_totalDEF * (1 - 0.05 * SkillSearch(256)));
	if(SkillSearch(skill_ROY_FORCE_OF_VANGUARD))
		n_A_totalDEF *= (1 + 0.02 * SkillSearch(skill_ROY_FORCE_OF_VANGUARD));
	if(n_A_PassSkill2[pass_II_ASSU])
		n_A_totalDEF *= 2;
	if(SkillSearch(skill_LK_FRENZY)) // Berserk
		n_A_totalDEF = 0;
	if(n_A_PassSkill8[pass_VIII_NUM_ENEMY] >= 3)
		n_A_totalDEF -= Math.floor(n_A_totalDEF * (n_A_PassSkill8[12] - 2) * 5 / 100);
	
	return n_A_totalDEF;
}

function calcSoftDef(n_A_VITDEF){
	n_A_VITDEF = Math.floor((n_A_VIT / 2) + (n_A_BaseLV /2) + (n_A_AGI / 5));
	
	if(SkillSearch(skill_SW_BERSERK)){ // AutoBerserk
		n_A_VITDEF = Math.floor(n_A_VITDEF * 0.45);
	}
	else if(n_A_PassSkill6[pass_VI_PROVOKE]){
			n_A_VITDEF = Math.floor(n_A_VITDEF * (0.95 - 0.05 * n_A_PassSkill6[pass_VI_PROVOKE]));
	}
	else if(n_A_PassSkill2[pass_II_ALOE]){
			n_A_VITDEF = Math.floor(n_A_VITDEF * 0.9);
	}
	
	if(n_tok[bon_USR_DEF_DIV])
		n_A_VITDEF = Math.floor(n_A_VITDEF / n_tok[bon_USR_DEF_DIV]);
	
	if(n_A_PassSkill2[pass_II_ANGELUS])
		n_A_VITDEF = Math.floor(n_A_VITDEF * (1 + 0.05 * n_A_PassSkill2[pass_II_ANGELUS]));
	if(n_A_PassSkill8[pass_VIII_NUM_ENEMY] >= 3)
		n_A_VITDEF -= Math.floor(n_A_VITDEF * (n_A_PassSkill8[pass_VIII_NUM_ENEMY] - 2) * 5 / 100);
	
	if(TimeItemNumSearch(temp_MMMANT))
		n_A_VITDEF -= Math.floor(n_A_VITDEF * 20 / 100);
	
	if(n_A_IJYOU[status_POISONED])
		n_A_VITDEF -= Math.floor(n_A_VITDEF * 25 / 100);
	if(SkillSearch(skill_LK_CONCENTRATION)) // Concentration
		n_A_VITDEF = Math.floor(n_A_VITDEF * (1 - 0.05 * SkillSearch(skill_LK_CONCENTRATION)));
	if(SkillSearch(skill_LK_FRENZY)) // Berserk
		n_A_VITDEF = 0;
		
	return n_A_VITDEF;
}

function calcHardMDef(n_A_MDEF){
	n_A_MDEF = n_tok[bon_MDEF];

	if(CardNumSearch(199) && n_A_JobSearch()==cls_MAG) // Frus
		n_A_MDEF += 3;
	if(n_A_HEAD_DEF_PLUS <= 5 && n_A_card[card_loc_HEAD_UPPER] == 213) // Gibbet
		n_A_MDEF += 5;
	if(n_A_card[card_loc_HEAD_MIDDLE] == 213) // Gibbet
		n_A_MDEF += 5;
	if(n_A_LEFT_DEF_PLUS <= 5 && CardNumSearch(222)) // Arclouse
		n_A_MDEF += 3;
	if(n_A_SHOULDER_DEF_PLUS <= 5 && CardNumSearch(258)) // Kappa
		n_A_MDEF += 8;
	if(n_A_BODY_DEF_PLUS <= 5 && CardNumSearch(283)) // Goat
		n_A_MDEF += 5;
	if(n_A_LEFT_DEF_PLUS >= 9 && CardNumSearch(310)) // Sting
		n_A_MDEF += 5;
	if(n_A_SHOES_DEF_PLUS <= 5 && CardNumSearch(381)) // Megalith
		n_A_MDEF += 7;
	if(n_A_JobSearch()==cls_ACO) // AcolyteCls
		n_A_MDEF += CardNumSearch(383); // RideWord
	
	if(EquipNumSearch(764)) // VShield + Odin + Fricca
		n_A_MDEF += (n_A_HEAD_DEF_PLUS + n_A_LEFT_DEF_PLUS);
	if(EquipNumSearch(809)) // LeafHat
		n_A_MDEF += n_A_HEAD_DEF_PLUS;
	if(EquipNumSearch(986) && (n_A_JobSearch()==cls_ACO || n_A_JobSearch()==cls_ARC || n_A_JobSearch()==cls_MAG)) // Chameleon Armor
		n_A_MDEF += 5;
	if(EquipNumSearch(1169)) // LacrimaStick
		n_A_MDEF += n_A_Weapon_ATKplus;

	if(SkillSearch(skill_SW_ENDURE)){ // Endure
		n_A_MDEF += SkillSearch(9);
	}else if(SkillSearch(skill_LK_CONCENTRATION)){ // Concentration
		n_A_MDEF += 1;
	}
	if(n_A_PassSkill2[pass_II_ASSU])
		n_A_MDEF *= 2;
	if(SkillSearch(skill_LK_FRENZY)) // Berserk
		n_A_MDEF = 0;

	return n_A_MDEF;
}

function calcSoftMDef(n_A_INTMDEF){
	n_A_INTMDEF = n_A_INT + Math.floor(n_A_VIT / 5) + Math.floor(n_A_DEX / 5) + Math.floor(n_A_BaseLV / 4);
	if(TimeItemNumSearch(temp_ULFHEDINN))
		n_A_INTMDEF -= Math.floor(n_A_INTMDEF * 20 / 100);

	return n_A_INTMDEF;
}

function calcHit(n_A_HIT){

	n_A_HIT = 175 + n_A_BaseLV + n_A_DEX + Math.floor(n_A_LUK / 3);

	n_A_HIT += n_tok[bon_HIT];

	if(n_A_WeaponType==weapTyp_SWORD || n_A_WeaponType==weapTyp_SWORDII) // Sword 2hS
		n_A_HIT += CardNumSearch(464) * 5; // Sword Guardian
	if(n_A_WeaponType==weapTyp_BOW) // Bow
		n_A_HIT += CardNumSearch(465) * 5; // Bow Guardian
	if(CardNumSearch(492)) // Ifrit
		n_A_HIT += Math.floor(n_A_JobLV /10) * CardNumSearch(492);

	if(SU_STR >= 90 && EquipNumSearch(442)) // Rogues Treasure
		n_A_HIT += 10 * EquipNumSearch(442);
	if(EquipNumSearch(654)) // Western Outlaw
		n_A_HIT += Math.floor(SU_AGI / 10);
	if(EquipNumSearch(656)) // Jungle Carbine
		n_A_HIT -= Math.floor(SU_DEX / 3);
	if(SU_STR >= 95 && EquipNumSearch(1167)) // Giganto Axe
		n_A_HIT += 10;
	if(EquipNumSearch(1176) && SkillSearch(skill_AS_KATAR_MASTERY) == 10) // Chakram
		n_A_HIT += 10;
	if(SU_STR >= 120 && EquipNumSearch(1261)) // Burning Spirit
		n_A_HIT += 3;
	
	n_A_HIT += 1 * SkillSearch(skill_AR_VULTURES_EYE);
	n_A_HIT += 2 * SkillSearch(skill_BS_WEAPONRY_RESEARCH);
	n_A_HIT += 10 * SkillSearch(skill_LK_CONCENTRATION);
	n_A_HIT += 3 * SkillSearch(skill_SN_TRUE_SIGHT);
	if(SkillSearch(skill_GS_GUNSLINGER_PANIC))
		n_A_HIT -= 30;
	if(SkillSearch(skill_GS_INCREASE_ACCURACY))
		n_A_HIT += 20;
	n_A_HIT += 2 * SkillSearch(skill_GS_SINGLE_ACTION);
	n_A_HIT += 1 * SkillSearch(skill_GS_SNAKE_EYES);
	if(n_A_WeaponType == weapTyp_AXE || n_A_WeaponType == weapTyp_AXEII)
		n_A_HIT += 3 * SkillSearch(skill_MEC_AXE_TRAINING);
	if(SkillSearch(skill_ROY_INSPIRATION))
		n_A_EquipATK += (5 * SkillSearch(skill_ROY_INSPIRATION));

	if(n_A_ActiveSkill==skill_PA_RAPID_SMITING) // Rapid Smiting
		n_A_HIT += 20;

	if(n_A_PassSkill5[pass_V_HIT_FLEE])
		n_A_HIT += 50;
	if(n_A_PassSkill7[pass_VII_SESAME])
		n_A_HIT += 30;
	if(n_A_PassSkill8[pass_VIII_BUC_NOEL])
		n_A_HIT += 3;
	if(n_A_PassSkill8[pass_VIII_SCH_JUBILEE])
		n_A_HIT += 10;
	if(n_A_PassSkill3[pass_III_FOC_BALLET])
		n_A_HIT += 10 + n_A_PassSkill3[pass_III_FOC_BALLET] * 2 + n_A_PassSkill3[pass_III_FOC_BALLET_DL] + Math.floor(n_A_PassSkill3[pass_III_FOC_BALLET_DEX] /10);

	return n_A_HIT;
}

function calcFlee(n_A_FLEE){

	n_A_FLEE = 100 + n_A_BaseLV + n_A_AGI + Math.floor(n_A_LUK / 5);

	n_A_FLEE += n_tok[bon_FLEE];
	
	if(n_A_SHOULDER_DEF_PLUS >= 9 && CardNumSearch(271)) // NineTail
		n_A_FLEE += 20;
	if(n_A_JobSearch()==cls_THI && CardNumSearch(295)) // Wanderer
		n_A_FLEE += 20;
	if(n_A_SHOULDER_DEF_PLUS <= 4 && CardNumSearch(401)) // KavachIcarus
		n_A_FLEE += 10;
	if(n_A_SHOULDER_DEF_PLUS >= 9 && CardNumSearch(403)) // OrcBaby
		n_A_FLEE += 5;

	if(SU_STR >= 90 && EquipNumSearch(442)) // RoguesTreasure
		n_A_FLEE += 10 * EquipNumSearch(442);
	if(n_A_Equip[0]==483) // Bloody Roar
		n_A_FLEE -= (n_A_BaseLV + SU_AGI);
	if(SU_AGI >= 120 && EquipNumSearch(1257)) // Shadow Crown
		n_A_FLEE += 3;
	if(SU_INT >= 120 && EquipNumSearch(1263)) // Whispers of Wind
		n_A_FLEE += 3;

	if(n_A_JobSearch2() == cls_ASS || n_A_JobSearch2() == cls_ROG)
		n_A_FLEE += 4 * SkillSearch(skill_TH_IMPROVE_DODGE);
	else
		n_A_FLEE += 3 * SkillSearch(skill_TH_IMPROVE_DODGE);
	if(SkillSearch(skill_GLT_HALLUCINATION_WALK))
		n_A_FLEE += 50 * SkillSearch(skill_GLT_HALLUCINATION_WALK);
	
	Mikiri = new Array(0,1,3,4,6,7,9,10,12,13,15);
	n_A_FLEE += Mikiri[SkillSearch(skill_MO_FLEE)];
	if(SkillSearch(skill_LK_BERSERK))
		n_A_FLEE /= 2;
	if(n_A_JOB == cls_SNI || n_A_JOB == cls_RAN || n_A_JOB == cls_RANt)
		n_A_FLEE += Math.round(SkillSearch(skill_SN_WIND_WALK) /2);
	if(n_A_PassSkill2[pass_II_WIND_WALK] && SkillSearch(skill_SN_WIND_WALK)==0)
		n_A_FLEE += Math.round(n_A_PassSkill2[pass_II_WIND_WALK] /2);
	if(SkillSearch(skill_TKM_LUNAR_PROTECTION))
		n_A_FLEE += Math.floor((n_A_BaseLV + n_A_LUK + n_A_DEX) / 10);
	if(SkillSearch(skill_RG_CLOSE_CONFINE))
		n_A_FLEE += 10;
	if(SkillSearch(skill_GS_GUNSLINGER_PANIC))
		n_A_FLEE += 30;
	if(SkillSearch(skill_GS_GATLING_FEVER)){
		if(n_A_WeaponType==weapTyp_GATLING_GUN || n_A_WeaponType==weapTyp_NONE)
			n_A_FLEE -= 5 * SkillSearch(skill_GS_GATLING_FEVER);
	}
	
	if(n_A_PassSkill6[pass_VI_ELE_FIELD] == pass_VI_WHIRLWIND && n_A_PassSkill6[pass_VI_ELE_FIELD_LVL] >= 1)
		n_A_FLEE += n_A_PassSkill6[pass_VI_ELE_FIELD_LVL] *3;
	if(n_A_PassSkill5[pass_V_HIT_FLEE])
		n_A_FLEE += 50;
	if(n_A_PassSkill7[pass_VII_HONEY])
		n_A_FLEE += 30;
	if(n_A_PassSkill8[pass_VIII_SCH_JUBILEE])
		n_A_FLEE += 20;
	if(n_A_PassSkill3[pass_III_PER_TABULARE])
		n_A_FLEE += n_A_PassSkill3[pass_III_PER_TABULARE] + Math.floor(n_A_PassSkill3[pass_III_PER_TABULARE_ML] /2) + Math.floor(n_A_PassSkill3[pass_III_PER_TABULARE_AGI] /10);
	if(n_A_PassSkill8[pass_VIII_NUM_ENEMY] >= 3){
		var w = n_A_PassSkill8[pass_VIII_NUM_ENEMY] - 2;
		if(w > 10)
			w = 10;
		n_A_FLEE -= Math.floor(n_A_FLEE * w * 10 / 100);
	}

	return n_A_FLEE;
}

function calcPDodge(n_A_LUCKY){
	n_A_LUCKY = 1 + Math.floor(n_A_LUK / 10);
	
	n_A_LUCKY += n_tok[bon_PDODGE];
	
	if(n_A_JobSearch()==cls_SWO)
		n_A_LUCKY += 3 * CardNumSearch(354); // Heater
	if(n_A_JobSearch()==cls_THI)
		n_A_LUCKY += 5 * CardNumSearch(391); // WildRose
	if(n_A_SHOULDER_DEF_PLUS <= 4 && CardNumSearch(401)) // KavIcarus
		n_A_LUCKY += 1;

	if(EquipNumSearch(535)){ // ValkMant
		var wHPVS = n_A_JobSearch();
		if(wHPVS==cls_ACO || wHPVS==cls_ARC || wHPVS==cls_MAG)
			n_A_LUCKY += 5+ n_A_SHOULDER_DEF_PLUS * 2;
	}	
	if(n_A_JobSearch()==cls_TKK && EquipNumSearch(678)) // HahoeMask
		n_A_LUCKY += 2;
	if(SU_AGI >= 120 && EquipNumSearch(1262)) // Silent Enforcer
		n_A_LUCKY += 5;

	n_A_LUCKY = Math.round(n_A_LUCKY *10)/10;
	
	return n_A_LUCKY;
}

function calcCrit(n_A_CRI){

	n_A_CRI = 1 + Math.floor(n_A_LUK / 3);

	n_A_CRI += n_tok[bon_CRIT];
	w = n_tok[bon_CRIT_RC_FORMLESS+n_B[en_RACE]];

	if(n_A_JobSearch()==cls_ACO){
		if(n_B[en_RACE]==race_UNDEAD || n_B[en_RACE]==race_DEMON)
			w += 9 * CardNumSearch(253); // FurSeal
	}
	if(SU_LUK >= 80 && CardNumSearch(267)) // GiantWhisper
		n_A_CRI += 3;
	if(n_A_JobSearch()==cls_THI)
		n_A_CRI += 4 * CardNumSearch(328); // Mobster
	if(CardNumSearch(402)) // GreenMaiden
		n_A_CRI += n_A_SHOULDER_DEF_PLUS;
	if(n_A_WeaponType==weapTyp_SWORDII || n_A_WeaponType==weapTyp_SWORD)
		n_A_CRI += CardNumSearch(464) * 5; // SwordGuardian
	if(n_A_WeaponType==weapTyp_BOW) // Bow
		n_A_CRI += CardNumSearch(465) * 5; // BowGuardian
	if(CardNumSearch(492)) // Ifrit
		n_A_CRI += Math.floor(n_A_JobLV /10) * CardNumSearch(492);

	if(SU_AGI >= 90 && EquipNumSearch(442)) // RoguesTreasure
		n_A_CRI += 10 * EquipNumSearch(442);
	if(EquipNumSearch(623)) // HeartBreaker
		n_A_CRI += n_A_Weapon_ATKplus;
	if(EquipNumSearch(640)) // GiantEncyclopedia
		n_A_CRI += Math.floor(SU_LUK / 5);
	if(n_A_JobSearch()==cls_TKK && EquipNumSearch(675)) // BrideMask
		n_A_CRI += 5;
	if(EquipNumSearch(689)) // SnipingSuit
		n_A_CRI += Math.floor(SU_LUK / 10);
	if(n_A_HEAD_DEF_PLUS >= 6 && EquipNumSearch(785)) // DevilringHat
		n_A_CRI += (n_A_HEAD_DEF_PLUS -5);	
	if(n_A_Weapon_ATKplus >= 6 && n_B[en_RACE]==race_DEMI_HUMAN && EquipNumSearch(1091)) // GlorJamadhar
		w += 5;
	if(EquipNumSearch(1122) && n_A_JobSearch()==cls_MER) // Merchant Figurine
		n_A_CRI += 5;
	if(EquipNumSearch(1161)) // VeteranHammer
		n_A_CRI += (2 * SkillSearch(skill_PR_MACE_MASTERY));
	if(SU_DEX >= 90 && EquipNumSearch(1164)) // BerchelAxe
		n_A_CRI += 5;
	if(SU_AGI >= 120 && EquipNumSearch(1200)) // BradiumBrooch
		n_A_CRI += 3;
	if(SU_STR >= 120 && EquipNumSearch(1256)) // Driver Band
		n_A_CRI += 3;

	if(n_A_ActiveSkill != skill_SN_SHARP_SHOOTING){
		if(n_A_WeaponType == weapTyp_BOW && n_A_Arrow == arrTyp_SHARP)
			n_A_CRI += 20;
		if(n_A_WeaponType==weapTyp_BOW || weapTyp_HANDGUN<=n_A_WeaponType && n_A_WeaponType<=weapTyp_GRENADE_LAUNCHER)
			n_A_CRI += CardNumSearch(462) * 15; // Drosera
		
		n_A_CRI += w;
	}else{	
		n_A_CRI += 20; // ignoring race req, drosera and crit arrow
	}
	
	if(n_A_ActiveSkill==skill_NIN_SHADOW_SLASH)
		n_A_CRI += 25 + n_A_ActiveSkillLV * 5;
	
	if(SkillSearch(skill_MO_FURY))
		n_A_CRI += 7.5 + SkillSearch(skill_MO_FURY) * 2.5;
	else if(TimeItemNumSearch(temp_ROFL))
		n_A_CRI += 10;
	if(SkillSearch(skill_SN_FURY))
			n_A_CRI += 50;
	n_A_CRI += SkillSearch(skill_SN_TRUE_SIGHT);
	
	if(n_A_PassSkill8[pass_VIII_BUC_NOEL])
		n_A_CRI += 7;
	if(n_A_PassSkill8[pass_VIII_ARU_SANDWINCH])
		n_A_CRI += 7;
	
	if(n_A_PassSkill3[pass_III_LADY_LUK])
		n_A_CRI += 10 + n_A_PassSkill3[pass_III_LADY_LUK] + Math.floor(n_A_PassSkill3[pass_III_LADY_LUK_DL] /2) + Math.floor(n_A_PassSkill3[pass_III_LADY_LUK_LUK] /10);
	if(n_A_PassSkill8[pass_VIII_NO_CRIT])
		n_A_CRI = 0;
		
	if(n_A_WeaponType == weapTyp_KATAR) // Katar
		n_A_CRI *= 2;

	n_A_CRI = Math.round(n_A_CRI * 10) / 10;

	return n_A_CRI;
}

function calcASPD(n_A_ASPD){

	// Base ASPD --------------------------------------------------
	n_A_ASPD = ItemAspd[n_A_JOB][n_A_WeaponType+1]; // BaseASPD	
	// DualHand Staff Adjustments ---
	if (n_A_JOB == cls_ABI || n_A_JOB == cls_ABIt)
		if(StPlusWeapon(bon_TWO_HANDED_STAFF))
			n_A_ASPD += 5;
	if (n_A_JobSearch2() == cls_MON){
		if(StPlusWeapon(bon_TWO_HANDED_STAFF)){
			if (n_A_JOB == cls_SUR || n_A_JOB == cls_SURt)
				n_A_ASPD += 2;
			else
				n_A_ASPD -= 2;
		}
	}
	if(n_Nitou) // Dual Weapon
		n_A_ASPD += ItemAspd[n_A_JOB][n_A_Weapon2Type + weapTyp_SHIELD+1];	
	
	// Stat ASPD --------------------------------------------------
	n_A_ASPD += Math.sqrt((n_A_AGI*n_A_AGI/2) + (n_A_DEX*n_A_DEX/5))/4;
	
	// Agi ASPD Mods ---------------------------------------------
	w = 0; // Agi Mod
	ASPDch = 0; // for some mutal exclusive skills
	
	if(n_A_SpeedPOT){
		if(n_A_SpeedPOT == spdpot_CONC)
			w += 4;
		else if(n_A_SpeedPOT == spdpot_AWAK)
			w += 6;
		else if(n_A_SpeedPOT == spdpot_BERSERK)
			w += 9;
	}
	if(n_A_IJYOU[status_QUAG] == 0 && n_A_IJYOU[status_AGI_DOWN] == 0){
		if(n_A_WeaponType == 3 && SkillSearch(skill_KN_TWOHAND_QUICKEN) && SkillSearch(skill_LK_FRENZY)==0)
			w += 7;
		if(SkillSearch(skill_BS_ANDRENALINE_RUSH)){ // Own AR
			if(weapTyp_AXE <= n_A_WeaponType && n_A_WeaponType<=weapTyp_MACE)
				w += 7;
		}else if(n_A_PassSkill2[pass_II_ARUSH] == 1){ // PartyAR
			if(weapTyp_AXE <= n_A_WeaponType && n_A_WeaponType<=weapTyp_MACE)
				w += 6;
		}else if(n_A_PassSkill2[pass_II_ARUSH] == 2){ // PartyFAR
			if(n_A_WeaponType != weapTyp_BOW && !(weapTyp_HANDGUN <= n_A_WeaponType && n_A_WeaponType <= weapTyp_GRENADE))
				w += 6;
		}else if(n_A_PassSkill2[pass_II_ARUSH] == 3){ // AR Scroll
			if(weapTyp_AXE <= n_A_WeaponType && n_A_WeaponType<=weapTyp_MACE)
				w += 7;
		}

		if(n_A_WeaponType == weapTyp_SWORD && SkillSearch(skill_KN_ONE_HAND_QUICKEN)){
			w += 7;
			ASPDch = 1;
		}
		if(ASPDch == 0 && (TimeItemNumSearch(temp_ALCHESET) || TimeItemNumSearch(temp_NOBLE))){
			w += 30;
			ASPDch = 1;
		}
		if(n_A_WeaponType==weapTyp_SPEARII && SkillSearch(skill_CR_SPEAR_QUICKEN)){
			w += 7;
			ASPDch = 1;
		}
	}
	if(SkillSearch(skill_LK_FRENZY))
		w += 15;
	if(n_A_WeaponType == weapTyp_BOOK && SkillSearch(skill_SA_STUDY))
		w += Math.floor((SkillSearch(skill_SA_STUDY)+1) /2);
	
	if(SkillSearch(skill_TKM_SOLAR_LUNAR_AND_STELLAR_SHADOW) && n_A_JobLV >= 50){
		ASPDch = 1;
		w += 1 + SkillSearch(skill_TKM_SOLAR_LUNAR_AND_STELLAR_SHADOW);
	}
	if(SkillSearch(skill_GS_LAST_STAND))
		w += 20;
	w += Math.floor((SkillSearch(skill_GS_SINGLE_ACTION)+1) / 2);

	if(n_A_PassSkill3[pass_III_IMP_RIFF] && ASPDch == 0){
		if(n_A_WeaponType != weapTyp_BOW && !(weapTyp_HANDGUN <= n_A_WeaponType && n_A_WeaponType <= weapTyp_GRENADE_LAUNCHER))
			w += n_A_PassSkill3[pass_III_IMP_RIFF] + n_A_PassSkill3[pass_III_IMP_RIFF_ML] + Math.floor(n_A_PassSkill3[pass_III_IMP_RIFF_AGI] /10);
	}
	
	n_A_ASPD += (w * n_A_AGI/200);

	// flat ASPD bonusses --------------------------------------
	if(n_A_Equip[eq_SHIELD]!=305) // 305 = "(No Shield)"
		n_A_ASPD += ItemAspd[n_A_JOB][weapTyp_SHIELD+1];
	if(n_A_Equip[eq_WEAPON]==47) // Masamune
		n_A_ASPD += 2;
	if(SU_AGI >= 120 && EquipNumSearch(1255)) // Sniper Googles
		n_A_ASPD += 1;
	if(SU_STR >= 120 && EquipNumSearch(1259)) // Midas Whispers
		n_A_ASPD += 1;
		
	// % ASPD Mods ---------------------------------------------
	w = 0;
	w += n_tok[bon_ASPD_MUL];

	if(SkillSearch(skill_GS_GATLING_FEVER))
		if(n_A_WeaponType==weapTyp_GATLING_GUN || n_A_WeaponType==weapTyp_NONE)
			w += SkillSearch(skill_GS_GATLING_FEVER);
	
	if(EquipNumSearch(654)) // Western Outlaw
		w += Math.floor(n_A_AGI / 15);
	if(n_A_Equip[eq_WEAPON]==484 && SU_STR >= 50) // Sage's Diary
		w += 5;
	if(EquipNumSearch(624)) // Hurricane Fury
		w += n_A_Weapon_ATKplus;
	if(EquipNumSearch(641)) // Book of the Dead
		w += n_A_Weapon_ATKplus;
	if(SU_STR >= 77 && EquipNumSearch(944)) // Lunar Skillet
		w += 4;

	if(n_A_JOB == cls_LOR && EquipNumSearch(855)) // Tournament Shield System Set
		w -= 5;
	if(n_A_JOB == cls_RUN && EquipNumSearch(855)) // Tournament Shield System Set
		w -= 5;
	if(n_A_JOB == cls_RUNt && EquipNumSearch(855)) // Tournament Shield System Set
		w -= 5;
		
	n_A_ASPD = n_A_ASPD + Math.round((193 - n_A_ASPD) * (w/100))

	if(n_Sanji==1){
		Min(n_A_ASPD,193);
	}else{
		Min(n_A_ASPD,190);
	}
	
	n_A_ASPD = Math.floor(n_A_ASPD * 10) / 10;
	
	return n_A_ASPD;
	
/*/ -----missing formulas----------------------------------------------
	
	if(SkillSearch(skill_KN_CAVALIER_MASTERY) && (n_A_ActiveSkill == skill_ALL_BASIC_ATTACK || n_A_ActiveSkill == skill_PA_MARTYR_RECONING))
		n_A_ASPD -= (6 - SkillSearch(skill_KN_CAVALIER_MASTERY)) *10;

	if(n_A_IJYOU[0] == 0 && n_A_IJYOU[1] == 0){ // Quag & AgiDown
		if(n_A_WeaponType == weapTyp_SWORD && SkillSearch(skill_KN_ONE_HAND_QUICKEN)){
			w += 30;
			ASPDch = 1;
		}
		if(ASPDch == 0 && (TimeItemNumSearch(temp_ALCHESET) || TimeItemNumSearch(temp_NOBLE))){
			w += 30;
			ASPDch = 1;
		}
		if(n_A_WeaponType==weapTyp_SPEARII && SkillSearch(skill_CR_SPEAR_QUICKEN)){
			w += SkillSearch(skill_CR_SPEAR_QUICKEN) + 20;
			ASPDch = 1;
		}
	}
	if(SU_STR >= 95 && EquipNumSearch(621)) // DoomSlayer
		w -= 40;
	if(EquipNumSearch(903) && n_A_JobSearch2() == cls_CRU) // Assaulter Spear
		w += 20;
	if(n_A_Weapon_ATKplus >= 7 && n_A_Equip[eq_WEAPON] == 1077) // Glorious Flamberge
		w += 10;
	if(n_A_Weapon2_ATKplus >= 7 && n_A_Equip[eq_WEAPONII] == 1077) // Glorious Flamberge
		w += 10;
	if(n_A_Weapon_ATKplus >= 6 && EquipNumSearch(1081)){ // Glorious Spear
		w += 5;
		if(n_A_Weapon_ATKplus >= 9)
			w += 5;
	}
	if(n_A_Weapon_ATKplus >= 6 && EquipNumSearch(1086)){ // Glorious Morning Star
		w += 5;
		if(n_A_Weapon_ATKplus >= 9)
			w += 5;
	}
	if(n_A_Weapon_ATKplus >= 6 && EquipNumSearch(1088)){ // Glorious Cleaver
		w += 5;
		if(n_A_Weapon_ATKplus >= 9)
			w += 5;
	}
	if(EquipNumSearch(1121) && n_A_JobSearch()==cls_THI) // Thief Figurine
		w += 3;
	if(SU_STR >= 95 && EquipNumSearch(1167)) // Giganto Axe
		w += 3;
	
	if(SkillSearch(skill_MO_MENTAL_STRENGTH))
		w -= 25;

	if(SkillSearch(skill_CR_DEFENDING_AURA))
		n_A_ASPD -= (25 -SkillSearch(skill_CR_DEFENDING_AURA) *5);
*///------------------------------------------------------
}

function calcVariableCast(n_A_VarCast){

	n_A_VarCast = (1 - Math.sqrt((n_A_DEX * 2 + n_A_INT) / 530));

	n_A_VarCast = Max(n_A_VarCast,0);
	
	var w=100;
	w += n_tok[bon_RED_CAST];
	
	if(n_A_JobSearch()==cls_MAG && CardNumSearch(454)) // MageSet ?
		w -= 15;
	if((n_A_JobSearch2()==cls_SAG) && CardNumSearch(460)) // SageSet ?
		w -= 15;
	if(EquipNumSearch(750)) // Set ?
		w -= n_A_Weapon_ATKplus;
	if(n_A_card[8]==177) // Katheryne
		w -= n_A_HEAD_DEF_PLUS;
	if(EquipNumSearch(849)) // Balloon Hat
		w -= n_A_HEAD_DEF_PLUS;
	if(n_A_Weapon_ATKplus >= 9 &&EquipNumSearch(1084)) // Glorious Arc Wand
		w -= 5;
	if(n_A_Weapon_ATKplus >= 9 &&EquipNumSearch(1095)) // Glorious Apocalypse
		w -= 5;
	if(SU_DEX >= 120 && EquipNumSearch(1260)) // Magic Stone Hat
		w -= 2;
	if(n_A_PassSkill3[pass_III_STRINGS] != 0)
		w -= n_A_PassSkill3[pass_III_STRINGS] * 3 + n_A_PassSkill3[pass_III_STRINGS_ML] + Math.floor(n_A_PassSkill3[pass_III_STRINGS_DEX] /10);
	if(TimeItemNumSearch(temp_ISILLA)) // Isilla
		w -= 50;

	if(w < 0)
		w=0;

	n_A_VarCast *= w /100;

	w = 100;
	if(StPlusCalc2(bon_CAST_SKILL+ n_A_ActiveSkill) != 0)
		w -= StPlusCalc2(bon_CAST_SKILL+ n_A_ActiveSkill);
	if(StPlusCard(bon_CAST_SKILL+ n_A_ActiveSkill) != 0)
		w -= StPlusCard(bon_CAST_SKILL+ n_A_ActiveSkill);
	if(n_A_ActiveSkill==321 || n_A_ActiveSkill==197)
		if(SkillSearch(195) && n_A_Weapon_ATKplus >= 9 && EquipNumSearch(1097)) // Glorious Fist
			w -= 100;
	if(n_A_ActiveSkill==430)

		if(n_A_Weapon_ATKplus >= 9 && EquipNumSearch(1100)) // Glorious Rifle
			w += 25;
	if(n_A_ActiveSkill==131)
		if(n_A_Weapon_ATKplus >= 10 && EquipNumSearch(1169)) // Lacrima Stick
			w -= 8;
	if(w < 0)
		w = 0;
	n_A_VarCast *= w /100;

	if(n_A_PassSkill2[13])
		n_A_VarCast *= (100 - 15 * n_A_PassSkill2[13]) /100;
	if(SkillSearch(322))
		n_A_VarCast = n_A_VarCast /2;
		
	if(SkillSearch(skill_WAR_READING_SPELLBOOK)){
		// instant list
		var w2 = [51,54,56,57,125,126,127,128,131,132,133,534,540,542,545,547,553];
		if(NumSearch(n_A_ActiveSkill,w2))
			n_A_VarCast = 0;
	}
		
	return n_A_VarCast;
}

function calcFixedCast(n_A_FixCast){
	n_A_FixCast = 1;
	
	w = 0;
	if(SkillSearch(skill_WAR_RADIUS)){
		if(n_A_ActiveSkill >=531 && n_A_ActiveSkill <= 553)
			w = Max(w,(2+2*SkillSearch(skill_WAR_RADIUS)));
	}
	if(n_A_PassSkill2[pass_II_SACRAMENT])
		w = Max(w,n_A_PassSkill2[pass_II_SACRAMENT]*10);
	
	n_A_FixCast *= (1 - w/100);
	
	if(SkillSearch(skill_WAR_READING_SPELLBOOK)){
		// instant list
		var w2 = [51,54,56,57,125,126,127,128,131,132,133,534,540,542,545,547,553];
		if(NumSearch(n_A_ActiveSkill,w2))
			n_A_FixCast = 0;
	}
	
	return n_A_FixCast;
}

function calcDelay(n_A_CastDelay){
	
	if(n_A_Weapon_ATKplus >= 9 && EquipNumSearch(934)) // Tae Goo Lyeon
		n_tok[bon_RED_CASTDELAY] += 20;
	if(EquipNumSearch(1036) && n_A_HEAD_DEF_PLUS >= 6) // Parade Hat
		n_tok[bon_RED_CASTDELAY] += n_A_HEAD_DEF_PLUS - 5;
	if(n_A_Weapon_ATKplus >= 9 &&EquipNumSearch(1084)) // Glorius ArcWand
		n_tok[bon_RED_CASTDELAY] += 5;
	if(n_A_Weapon_ATKplus >= 9 &&EquipNumSearch(1095)) // Glorius Apocalypse
		n_tok[bon_RED_CASTDELAY] += 5;
	if(EquipNumSearch(936)) // Thorn Staff of Darkness
		n_tok[bon_RED_CASTDELAY] += (n_A_Weapon_ATKplus * 1);

	var w = n_A_PassSkill3[pass_III_STRINGS];
	if(w){
		if(w==10)
			n_tok[bon_RED_CASTDELAY] += 50;
		else
			n_tok[bon_RED_CASTDELAY] += w * 3;

		n_tok[bon_RED_CASTDELAY] += n_A_PassSkill3[pass_III_STRINGS_ML] *2 + Math.floor(n_A_PassSkill3[pass_III_STRINGS_INT] /5);
	}
	
	n_tok[bon_RED_CASTDELAY] = Min(n_tok[bon_RED_CASTDELAY],100);
	n_A_CastDelay = n_tok[bon_RED_CASTDELAY];
	
	return n_A_CastDelay;
}

function calcReUse(){
	// todo
	return 1;
}

function calcHPReg(n_A_HPR){
	
	n_A_HPR = Math.floor(n_A_VIT /5) + Math.floor(n_A_MaxHP /200);
	if(n_A_HPR < 1)
		n_A_HPR = 1;
	
	w = 100;
	w += n_tok[bon_HP_REG];
	if(SU_LUK >= 77)
		w += 100 * CardNumSearch(221); // ArcAngel
	
	if(n_A_JobSearch()==cls_TKK && EquipNumSearch(672)) // MagistreHat
		w += 3;
	if(n_A_SHOES_DEF_PLUS <= 4 && CardNumSearch(407)) // GoldAcidus
		w += 5;
	if(n_A_PassSkill8[pass_VIII_BUC_NOEL])
		w += 3;

	n_A_HPR = Math.floor(n_A_HPR * w /100);

	if(n_A_IJYOU[status_POISONED])
		n_A_HPR = 0;
	
	return n_A_HPR;
}

function calcSPReg(n_A_SPR){

	n_A_SPR = Math.floor(n_A_INT /6) + Math.floor(n_A_MaxSP /100) +1;

	w=100;
	w += SkillSearch(269) *3;

	w += n_tok[bon_SP_REG];

	if(SkillSearch(skill_RUN_VITALITY_ACTIVATION))
		w-=100;
	if(SU_LUK >= 77)
		w += 100 * CardNumSearch(221); // ArcAngel
	
	if(n_A_JobSearch()==cls_TKK && EquipNumSearch(673)) // Ayam
		w += 3;
	if(n_A_HEAD_DEF_PLUS <= 4 && n_A_card[card_loc_HEAD_UPPER]==179) // BlueAcidus
		w += 5;
	if(n_A_card[card_loc_HEAD_MIDDLE]==179) // BlueAcidus
		w += 5;
	if(n_A_SHOES_DEF_PLUS <= 4 && CardNumSearch(407)) // GoldAcidus
		w += 5;
	if(EquipNumSearch(1119) && n_A_JobSearch()==cls_MAG) // MageFigure
		w += 5;
	if(n_A_PassSkill8[pass_VIII_BUC_NOEL])
		w += 3;

	n_A_SPR = Math.floor(n_A_SPR * w /100);

	if(n_A_INT>=120)
		n_A_SPR += Math.floor((n_A_INT-120)/2) +4;

	if(n_A_IJYOU[status_POISONED])
		n_A_SPR = 0;
	
	return n_A_SPR;

}

function getWeaponElement(n_A_Weapon_zokusei){
with(document.calcForm){
	n_A_Weapon_zokusei= eval(A_Weapon_zokusei.value)
	n_A_Weapon2_zokusei = n_A_Weapon_zokusei; // LeftEndow

	if(n_A_Weapon_zokusei == ele_NEUTRAL){
		// Right Hand
		for(j=0;ItemOBJ[n_A_Equip[eq_WEAPON]][j +itm_BONUS_START] != bon_NONE;j += 2){
			if(bon_ELEMENT == ItemOBJ[n_A_Equip[eq_WEAPON]][j +itm_BONUS_START])
				n_A_Weapon_zokusei = ItemOBJ[n_A_Equip[eq_WEAPON]][j +itm_BONUS_START+1];
		}
		// LeftHand
		for(j=0;ItemOBJ[n_A_Equip[eq_WEAPONII]][j +itm_BONUS_START] != bon_NONE;j += 2){
			if(bon_ELEMENT == ItemOBJ[n_A_Equip[eq_WEAPONII]][j +itm_BONUS_START])
				n_A_Weapon2_zokusei = ItemOBJ[n_A_Equip[eq_WEAPONII]][j +itm_BONUS_START+1];
		}
		// pseudo cards (ele stones)
		if(201 <= cardOBJ[n_A_card[card_loc_WEAPON_I]][card_att_ID] && cardOBJ[n_A_card[card_loc_WEAPON_I]][card_att_ID] <= 204)
			n_A_Weapon_zokusei = cardOBJ[n_A_card[card_loc_WEAPON_I]][card_att_ID] -200;
		if(201 <= cardOBJ[n_A_card[card_loc_WEAPONII_I]][card_att_ID] && cardOBJ[n_A_card[card_loc_WEAPONII_I]][card_att_ID] <= 204)
			n_A_Weapon2_zokusei = cardOBJ[n_A_card[card_loc_WEAPONII_I]][card_att_ID] -200;
		// bos
		if(n_A_WeaponType==weapTyp_BOW || (weapTyp_HANDGUN <= n_A_WeaponType && n_A_WeaponType <=weapTyp_GRENADE_LAUNCHER))
			n_A_Weapon_zokusei = ArrowOBJ[n_A_Arrow][arr_att_ELEMENT];
	}
	if(SkillSearch(skill_SHA_INVISIBILITY))
		n_A_Weapon_zokusei = ele_GHOST;
	
	BK_Weapon_zokusei = n_A_Weapon_zokusei;
	return n_A_Weapon_zokusei;
}}

function getArmorElement(n_A_BodyZokusei){

	n_A_BodyZokusei = StPlusCard(bon_USR_ELEMENT);
	if(n_A_BodyZokusei==ele_NEUTRAL)
		n_A_BodyZokusei = StPlusCalc2(bon_USR_ELE);
	if(SkillSearch(skill_MEC_SHAPE_SHIFT)){
		w = SkillSearch(skill_MEC_SHAPE_SHIFT);
		if(w==1)
			n_A_BodyZokusei = ele_FIRE;
		else if(w==2)
			n_A_BodyZokusei = ele_EARTH;
		else if(w==3)
			n_A_BodyZokusei = ele_WIND;
		else if(w==4)
			n_A_BodyZokusei = ele_WATER;
	}
	if(n_A_JobSearch2() == cls_CRU && CardNumSearch(456)) // CrusaderSet
		n_A_BodyZokusei = ele_HOLY;
	if(n_A_PassSkill6[pass_VI_BSS])
		n_A_BodyZokusei = ele_HOLY;
	
	return n_A_BodyZokusei;
}

function HealCalc(HealLv,HealType){ // HealType - 1:= SelfHeal
	var wHeal = Math.floor((n_A_BaseLV + n_A_INT) / 5) * 30 * HealLv * 0.1;
	// old -V-
	//wHeal = Math.floor((n_A_BaseLV + n_A_INT) /8) * (HealLv *8 +4);
	var wHealBAI = 100 + SkillSearch(269) *2;
	wHeal = Math.floor(wHeal * wHealBAI /100);

	var wX = 100 + n_tok[bon_HEAL_MUL];
	if(HealType == 1)
		wX += n_tok[bon_HEAL_REC];
	if(EquipNumSearch(644))
		wX += Math.floor(n_A_Weapon_ATKplus * 1.5);

	wHeal = Math.floor(wHeal * wX /100) + n_A_StatMATK + n_A_EquipMATK;

	return wHeal;
}

function calcRaceElementalReduction(){

	if(CardNumSearch(452) && n_A_JobSearch()==3){
		n_tok[bon_RED_RC_UNDEAD] += 30;
		n_tok[bon_RED_RC_DEMON] += 30;
	}
	if(n_A_PassSkill2[pass_II_RESISTANT_SOULS] && n_A_JobSearch2() != cls_CRU)
		n_tok[bon_RED_RC_DEMON] += n_A_PassSkill2[pass_II_RESISTANT_SOULS] * 5;
	if(SkillSearch(234))
		n_tok[bon_RED_RC_DRAGON] += SkillSearch(234) *4;
	for(var i=971;i<=977;i++){ // BG Sets
		if(EquipNumSearch(i)){
			n_tok[bon_RED_RC_FORMLESS] -= 200;
			n_tok[bon_RED_RC_UNDEAD] -= 200;
			n_tok[bon_RED_RC_BRUTE] -= 200;
			n_tok[bon_RED_RC_PLANT] -= 200;
			n_tok[bon_RED_RC_INSECT] -= 200;
			n_tok[bon_RED_RC_FISH] -= 200;
			n_tok[bon_RED_RC_DEMON] -= 200;
			n_tok[bon_RED_RC_ANGEL] -= 200;
			n_tok[bon_RED_RC_DRAGON] -= 200;
		}
	}

	if(EquipNumSearch(737))
		n_tok[bon_RED_ELE_NEUTRAL] += n_A_SHOULDER_DEF_PLUS * 3;
	if(EquipNumSearch(957)){
		for(i=0;i<=9;i++)
			n_tok[bon_RED_ELE_NEUTRAL+i] += 30;
	}
	if(n_A_SHOULDER_DEF_PLUS >= 9 && CardNumSearch(403))
		n_tok[bon_RED_ELE_NEUTRAL] += 5;
	if(n_A_HEAD_DEF_PLUS >= 8 && EquipNumSearch(1244))
		n_tok[bon_RED_ELE_WATER] += 5;
	if(SkillSearch(150)){
		n_tok[bon_RED_ELE_NEUTRAL] += SkillSearch(150);
		n_tok[bon_RED_ELE_FIRE] += 4 * SkillSearch(150);
	}
	if(SkillSearch(156))
		n_tok[bon_RED_ELE_HOLY] += 5 * SkillSearch(156);
	if(n_A_PassSkill2[pass_II_RESISTANT_SOULS] && n_A_JobSearch2() != cls_CRU)
		n_tok[bon_RED_ELE_HOLY] += 5 * n_A_PassSkill2[pass_II_RESISTANT_SOULS];
	if(n_A_PassSkill3[pass_III_ACO_RHYTHM]){
		for(i=bon_RED_ELE_WATER;i<=bon_RED_ELE_UNDEAD;i++)
			n_tok[i] += 55 + 5 * n_A_PassSkill3[pass_III_ACO_RHYTHM];
		for(i=bon_RES_STATUS_POISON;i<=bon_RES_STATUS_STONE;i++)
			n_tok[i] += 10 * n_A_PassSkill3[pass_III_ACO_RHYTHM];
	}
// Proof Pots ----------------------------------
	if(n_A_PassSkill7[pass_VII_COLD]){
		n_tok[bon_RED_ELE_WATER] += 20;
		n_tok[bon_RED_ELE_WIND] -= 15;
	}
	if(n_A_PassSkill7[pass_VII_EARTH]){
		n_tok[bon_RED_ELE_EARTH] += 20;
		n_tok[bon_RED_ELE_FIRE] -= 15;
	}
	if(n_A_PassSkill7[pass_VII_FIRE]){
		n_tok[bon_RED_ELE_FIRE] += 20;
		n_tok[bon_RED_ELE_WATER] -= 15;
	}
	if(n_A_PassSkill7[pass_VII_WIND]){
		n_tok[bon_RED_ELE_WIND] += 20;
		n_tok[bon_RED_ELE_EARTH] -= 15;
	}
// ---------------------------------------------
	if(EquipNumSearch(624))
		n_tok[bon_RED_SIZ_MEDIUM] += n_A_Weapon_ATKplus;
	
	if(SkillSearch(421))
		n_tok[bon_RED_RANGE] += 20;
	
	if(EquipNumSearch(1030)){
		n_tok[bon_RED_BOSS] -= (5 * EquipNumSearch(1030));
		n_tok[bon_RED_NONBOSS] -= (5 * EquipNumSearch(1030));
	}

	if(EquipNumSearch(1085)){
		if(n_A_Weapon_ATKplus >= 6){
			n_tok[bon_HEAL_MUL] += 5;
			n_tok[bon_SANC_MUL] += 5;
		}
		if(n_A_Weapon_ATKplus >= 10){
			n_tok[bon_HEAL_MUL] += 10;
			n_tok[bon_SANC_MUL] += 5;
		}
	}

	if(EquipNumSearch(1161))
		n_tok[bon_HEAL_MUL] += SkillSearch(23);

	if(EquipNumSearch(534)){
		wSPVS = n_A_JobSearch();
		if(wSPVS==1 || wSPVS==2 || wSPVS==6)
			n_tok[bon_RES_STATUS_STUN] += 50;
		if(wSPVS==3 || wSPVS==4 || wSPVS==5)
			n_tok[bon_RES_STATUS_SILENCE] += 50;
	}
	if(EquipNumSearch(828)){
		n_tok[bon_RES_STATUS_STUN] += 2 * n_A_HEAD_DEF_PLUS;
		n_tok[bon_RES_STATUS_FREEZE] += 2 * n_A_HEAD_DEF_PLUS;
		n_tok[bon_RES_STATUS_STONE] += 2 * n_A_HEAD_DEF_PLUS;
	}
	if(CardNumSearch(176)){
		if(SU_AGI >= 90){
			n_tok[bon_RES_STATUS_STUN] += 30 * CardNumSearch(176);
			n_tok[bon_RES_STATUS_SILENCE] += 30 * CardNumSearch(176);
		}
		if(SU_VIT >= 80){
			n_tok[bon_RES_STATUS_SLEEP] += 50 * CardNumSearch(176);
			n_tok[bon_RES_STATUS_STONE] += 50 * CardNumSearch(176);
		}
	}
	if(n_A_PassSkill8[0] == 42 && EquipNumSearch(1218))
		n_tok[bon_RES_STATUS_STUN] += 10;
}

function calcIncomingDamage(){ // incoming damage - return avg
	
	w_HiDam = new Array();
	wBHD = n_B[en_MAXATK];
	w_HiDam[0] = n_B[en_MINATK]; // Atk (Min)
	w_HiDam[1] = (n_B[en_MINATK] *5 + wBHD) /6;
	w_HiDam[2] = (n_B[en_MINATK] *4 + wBHD *2) /6;
	w_HiDam[3] = (n_B[en_MINATK] + wBHD) /2;
	w_HiDam[4] = (n_B[en_MINATK] *2 + wBHD *4) /6;
	w_HiDam[5] = (n_B[en_MINATK] + wBHD *5) /6;
	w_HiDam[6] = wBHD;
	if(n_B[en_MINATK] == n_B[en_MAXATK])
		w_HiDam[6] = wBHD - 1;

	for(i=0;i<=6;i++)
		w_HiDam[i] = w_HiDam[i] * defReduction(n_A_totalDEF) - n_A_VITDEF;

	if(SkillSearch(skill_AC_DIVINE_PROTECTION) && (n_B[en_ELEMENT]>=90 || n_B[en_RACE]==6)){
		wBHD = Math.floor((3 + 4/100 * n_A_BaseLV) * SkillSearch(skill_AC_DIVINE_PROTECTION));
		for(i=0;i<=6;i++)
			w_HiDam[i] -= wBHD;
	}

	if(SkillSearch(skill_TKM_SOLAR_PROTECTION)){
		wBHD = Math.floor((n_A_BaseLV + n_A_LUK + n_A_DEX) / 2);
		for(i=0;i<=6;i++)
			w_HiDam[i] -= wBHD;
	}

	wBHD = n_tok[bon_RED_ELE_NEUTRAL];
	if(wBHD != 0){
		for(i=0;i<=6;i++)
			w_HiDam[i] -= Math.floor(w_HiDam[i] * wBHD /100);
	}
	
	if(SkillSearch(skill_MA_ENERGY_COAT)){
		wBHD = 6 * SkillSearch(skill_MA_ENERGY_COAT);
		for(i=0;i<=6;i++)
			w_HiDam[i] -= Math.floor(w_HiDam[i] * wBHD /100);
	}

	wBHD = n_tok[bon_RED_RC_FORMLESS+n_B[en_RACE]];
	if(wBHD != 0){
		for(i=0;i<=6;i++)
			w_HiDam[i] -= Math.floor(w_HiDam[i] * wBHD /100);
	}

	wBHD = n_tok[bon_RED_SIZ_SMALL+n_B[en_SIZE]];
	if(wBHD != 0){
		for(i=0;i<=6;i++)
			w_HiDam[i] -= Math.floor(w_HiDam[i] * wBHD /100);
	}

	if(n_B[en_BOSS] == 0){
		wBHD = n_tok[bon_RED_NONBOSS];
		for(i=0;i<=6;i++)
			w_HiDam[i] -= Math.floor(w_HiDam[i] * wBHD /100);
	}

	if(n_B[en_RANGED]){
		wBHD = n_tok[bon_RED_RANGE];
		for(i=0;i<=6;i++)
			w_HiDam[i] -= Math.floor(w_HiDam[i] * wBHD /100);
		
		if(SkillSearch(skill_CR_DEFENDING_AURA)){
			wBHD = 5 + 15 * SkillSearch(skill_CR_DEFENDING_AURA);
			for(i=0;i<=6;i++)
				w_HiDam[i] -= Math.floor(w_HiDam[i] * wBHD /100);
		}
	}

	if(n_B[en_BOSS]==1){
		for(i=0;i<=6;i++)
			w_HiDam[i] -= Math.floor(w_HiDam[i] * n_tok[bon_RED_BOSS] /100);
		
	}

	if(TimeItemNumSearch(temp_ULFHEDINN))
		for(i=0;i<=6;i++)
			w_HiDam[i] -= Math.floor(w_HiDam[i] * 20 /100);


	wBHD = n_tok[330 + Math.floor(n_B[en_ELEMENT] / 10)]; // New shieldcards ?
	if(wBHD != 0){
		for(i=0;i<=6;i++)
			w_HiDam[i] -= Math.floor(w_HiDam[i] * wBHD /100);
	}

	wBHD = StPlusCard(bon_RED_MONSTER+n_B[en_ID]);
	wBHD += StPlusCalc2(bon_RED_MONSTER+n_B[en_ID]);
	for(i=0;i<=6;i++)
		w_HiDam[i] -= Math.floor(w_HiDam[i] * wBHD /100);

	if(SkillSearch(skill_MO_STEEL_BODY)){
		for(i=0;i<=6;i++)
			w_HiDam[i] = Math.floor(w_HiDam[i] * 10 /100);
	}
	
	for(i=0;i<=6;i++) // MinDmg 1
		w_HiDam[i]=Max(1,w_HiDam[i]);

//	if(n_A_PassSkill2[pass_II_ASSU]){
//		if(n_A_PassSkill8[pass_VIII_SPE_ENVIRONMENT] || n_A_PassSkill6[pass_VI_MUR_BONUS])
//			for(i=0;i<=6;i++)
//				w_HiDam[i] = Math.floor(w_HiDam[i] * 2 / 3);
//		else
//			for(i=0;i<=6;i++)
//				w_HiDam[i] = Math.floor(w_HiDam[i] / 2);
//	}

	if(n_A_PassSkill5[pass_V_DAMAGE])
		for(i=0;i<=6;i++)
			w_HiDam[i] = Math.floor(w_HiDam[i] / 2);

	w_HiDam[0] = Math.floor(w_HiDam[0]);
	w_HiDam[6] = Math.floor(w_HiDam[6]);

	
	wBHD=0;
	for(i=0;i<=6;i++)
		wBHD += w_HiDam[i];
	wBHD = Math.round(wBHD / 7);

	var name64 = Word(65);
	var wRefStr = "";
	if(Taijin==0){
		var asm=1;
		if(n_A_PassSkill2[5])
			asm = 2;
		if(SkillSearch(skill_CR_SHIELD_REFLECT)){
			var wRSnum = (10 + 3 * SkillSearch(skill_CR_SHIELD_REFLECT)) * asm;
			var wRef1 = new Array();
			wRef1[0] = Math.floor(wBHD * wRSnum / 100);
			wRef1[1] = Math.floor(w_HiDam[0] * wRSnum / 100);
			wRef1[2] = Math.floor(w_HiDam[6] * wRSnum / 100);
			wRefStr += "<BR><Font color='Blue'><B>"+ wRef1[0] +" ("+ wRef1[1] +"~"+ wRef1[2] +")</B>";
			name64 += "<BR><Font color=Blue><B>Damage Reflected</B></Font>";
		}
		if(n_tok[bon_REFLECT_PHY_DMG]){
			var wRef2 = new Array();
			var w = n_tok[bon_REFLECT_PHY_DMG] * asm;
			wRef2[0] = Math.floor(wBHD * w / 100);
			wRef2[1] = Math.floor(w_HiDam[0] * w / 100);
			wRef2[2] = Math.floor(w_HiDam[6] * w / 100);
			wRefStr += "<BR><Font color='Blue'><B>"+ wRef2[0] +" ("+ wRef2[1] +"~"+ wRef2[2] +")</B>";
			name64 += "<BR><Font color=Blue><B>Damage Reflected</B></Font>";
		}
	}
	myInnerHtml("nm065",name64,0);
	myInnerHtml("B_AveAtk",wBHD +" ("+ w_HiDam[0] +"~"+ w_HiDam[6]+")"+ wRefStr,0);

	// Include Flee/ PDodge ---------------------------------
	wBHD = Math.round(wBHD *(100-n_A_LUCKY))/100;
	wBHD = Math.round(wBHD *(100-w_FLEE))/100;
	
	if(SkillSearch(skill_CR_GUARD))
		wBHD = Math.round(wBHD * w_AG[SkillSearch(skill_CR_GUARD)])/100;
		
	if(n_A_WeaponType==weapTyp_SWORDII && SkillSearch(skill_LK_PARRYING))
		wBHD = Math.round(wBHD * (80- SkillSearch(skill_LK_PARRYING) *3))/100;
		
	if(SkillSearch(skill_ST_COUNTER_INSTINCT))
		wBHD = Math.round(wBHD * (100- SkillSearch(skill_ST_COUNTER_INSTINCT) *7.5))/100;
		
	myInnerHtml("B_Ave2Atk",wBHD+" Damage",0);
}

function setBaseDmg(DMG,w_Ele){

	w_A_ATK1 = n_A_statATK;
	w_A_ATK2 = n_A_EquipATK;
	w_A_ATK3 = n_A_ATK_Variance;
	
	w_A_ATK1 *= zokusei[n_B[en_ELEMENT]][ele_NEUTRAL]/100;
	w_A_ATK2 *= zokusei[n_B[en_ELEMENT]][w_Ele]/100;
	w_A_ATK3 *= zokusei[n_B[en_ELEMENT]][w_Ele]/100;
	
	w_A_ATK1 = Math.floor(w_A_ATK1);
	w_A_ATK2 = Math.floor(w_A_ATK2);
	w_A_ATK3 = Math.floor(w_A_ATK3);
	
	DMG = [0,0,0];
	DMG[0] = w_A_ATK1 + w_A_ATK2 - w_A_ATK3;
	DMG[1] = w_A_ATK1 + w_A_ATK2;
	DMG[2] = w_A_ATK1 + w_A_ATK2 + w_A_ATK3;
	
	return DMG;
}

function calcSkillModAdditions(wA02){ // skillmod + x

	if(SkillSearch(skill_MS_MAXIMUM_POWER_THUST)){
		wA02 += 20 * SkillSearch(skill_MS_MAXIMUM_POWER_THUST);
	}
	else{
		if(SkillSearch(skill_BS_POWER_THRUST))
			wA02 += SkillSearch(skill_BS_POWER_THRUST) * 5;
		if(SkillSearch(skill_BS_POWER_THRUST)==0 && n_A_PassSkill2[pass_II_POWER_THRUST])
			wA02 += n_A_PassSkill2[pass_II_POWER_THRUST] * 5; // /5 ?
	}
	if(SkillSearch(skill_LK_CONCENTRATION))
		wA02 += SkillSearch(skill_LK_CONCENTRATION) * 5;
	if(SkillSearch(skill_SN_TRUE_SIGHT))
		wA02 += SkillSearch(skill_SN_TRUE_SIGHT) * 2;
		
	if(SkillSearch(skill_TK_KIHOP))
		wA02 += 2 * SkillSearch(skill_TK_KIHOP) * SkillSearch(skill_TK_KIHOP_PARTY);
	
	return wA02;
}


