Example #1
0
		/// <summary>
		/// Recalculates parts of an object's battle status according to the specified flags
		/// </summary>
		/// <param name="flag"></param>
		public void CalculateMain(EStatusCalcFlag flag) {
			WorldObjectStatus b_status = WorldObject.GetBaseStatusData(Object);
			WorldObjectStatus status = WorldObject.GetStatusData(Object);
			WorldObjectStatusChangeList sc = WorldObject.GetStatusChange(Object);
			Character character = (Object as Character);
			int temp;

			if (b_status == null || status == null) {
				return;
			}
			if (!Object.Type.And(EDatabaseType.Regeneration) && (sc == null || sc.Count == 0)) { //No difference.
				status.LoadFromStatus(b_status);
				return;
			}

			if ((flag & EStatusCalcFlag.Str) > 0) {
				status.Str = CalculateStr(sc, b_status.Str);
				flag |= EStatusCalcFlag.Batk;
				if (Object.Type.And(EDatabaseType.Homunculus)) {
					flag |= EStatusCalcFlag.Watk;
				}
			}

			if ((flag & EStatusCalcFlag.Agi) > 0) {
				status.Agi = CalculateAgi(sc, b_status.Agi);
				flag |= EStatusCalcFlag.Flee;
				if (Object.Type.And(EDatabaseType.Char | EDatabaseType.Homunculus)) {
					flag |= EStatusCalcFlag.Aspd | EStatusCalcFlag.Dspd;
				}
			}

			if ((flag & EStatusCalcFlag.Vit) > 0) {
				status.Vit = CalculateVit(sc, b_status.Vit);
				flag |= EStatusCalcFlag.Def2 | EStatusCalcFlag.Mdef2;
				if (Object.Type.And(EDatabaseType.Char | EDatabaseType.Homunculus | EDatabaseType.Mercenary)) {
					flag |= EStatusCalcFlag.Maxhp;
				}
				if (Object.Type.And(EDatabaseType.Homunculus)) {
					flag |= EStatusCalcFlag.Def;
				}
			}

			if ((flag & EStatusCalcFlag.Int) > 0) {
				status.Int = CalculateInt(sc, b_status.Int);
				flag |= EStatusCalcFlag.Matk | EStatusCalcFlag.Mdef2;
				if (Object.Type.And(EDatabaseType.Char | EDatabaseType.Homunculus | EDatabaseType.Mercenary)) {
					flag |= EStatusCalcFlag.Maxsp;
				}
				if (Object.Type.And(EDatabaseType.Homunculus)) {
					flag |= EStatusCalcFlag.Mdef;
				}
			}

			if ((flag & EStatusCalcFlag.Dex) > 0) {
				status.Dex = CalculateDex(sc, b_status.Dex);
				flag |= EStatusCalcFlag.Batk | EStatusCalcFlag.Hit;
				if (Object.Type.And(EDatabaseType.Char | EDatabaseType.Homunculus)) {
					flag |= EStatusCalcFlag.Aspd;
				}
				if (Object.Type.And(EDatabaseType.Homunculus)) {
					flag |= EStatusCalcFlag.Watk;
				}
			}

			if ((flag & EStatusCalcFlag.Luk) > 0) {
				status.Luk = CalculateLuk(sc, b_status.Luk);
				flag |= EStatusCalcFlag.Batk | EStatusCalcFlag.Cri | EStatusCalcFlag.Flee2;
			}


			if ((flag & EStatusCalcFlag.Batk) > 0 && b_status.AtkBase > 0) {
				status.AtkBase = CalculateBaseAtk(status);
				temp = b_status.AtkBase - CalculateBaseAtk(b_status);
				if (temp > 0) {
					status.AtkBase += (ushort)temp;
				}
				status.AtkBase = CalculateBatk(sc, status.AtkBase);
			}


			if ((flag & EStatusCalcFlag.Watk) > 0) {
				// TODO: is null, need to implement character status full first..
				/*
				status.Rhw.AtkMin = CalculateWatk(sc, b_status.Rhw.AtkMin);
				// Should not affect weapon refine bonus
				if (character == null) {
					status.Rhw.AtkMax = CalculateWatk(sc, b_status.Rhw.AtkMax);
				}

				if (b_status.Lhw.AtkMin > 0 || b_status.Lhw.AtkMax > 0) {
					if (character != null) {
						character.State.LrFlag = true;
						status.Lhw.AtkMin = CalculateWatk(sc, b_status.Lhw.AtkMin);
						character.State.LrFlag = false;
					} else {
						status.Lhw.AtkMin = CalculateWatk(sc, b_status.Lhw.AtkMin);
						status.Lhw.AtkMax = CalculateWatk(sc, b_status.Lhw.AtkMax);
					}
				}

				if (Object.Type.And(EDatabaseType.Homunculus) == true) {
					status.Rhw.AtkMin += (ushort)(status.Dex - b_status.Dex);
					status.Rhw.AtkMax += (ushort)(status.Str - b_status.Str);
					if (b_status.Rhw.AtkMax < b_status.Rhw.AtkMin) {
						b_status.Rhw.AtkMax = b_status.Rhw.AtkMin;
					}
				}
				*/
			}

			if ((flag & EStatusCalcFlag.Hit) > 0) {
				if (status.Dex == b_status.Dex) {
					status.Hit = CalculateHit(sc, b_status.Hit);
				} else {
					status.Hit = CalculateHit(sc, (short)(b_status.Hit + (status.Dex - b_status.Dex)));
				}
			}

			if ((flag & EStatusCalcFlag.Flee) > 0) {
				if (status.Agi == b_status.Agi) {
					status.Flee = CalculateFlee(sc, b_status.Flee);
				} else {
					status.Flee = CalculateFlee(sc, (short)(b_status.Flee + (status.Agi - b_status.Agi)));
				}
			}

			if ((flag & EStatusCalcFlag.Def) > 0) {
				status.Def = CalculateDef(sc, b_status.Def);
				if (Object.Type.And(EDatabaseType.Homunculus) == true) {
					status.Def += (byte)(status.Vit / 5 - b_status.Vit / 5);
				}
			}

			if ((flag & EStatusCalcFlag.Def2) > 0) {
				if (status.Vit == b_status.Vit) {
					status.Def2 = CalculateDef2(sc, b_status.Def2);
				} else {
					status.Def2 = CalculateDef2(sc, (short)(b_status.Def2 + (status.Vit - b_status.Vit)));
				}
			}

			if ((flag & EStatusCalcFlag.Mdef) > 0) {
				status.MDef = CalculateMdef(sc, b_status.MDef);
				if (Object.Type.And(EDatabaseType.Homunculus) == true) {
					status.MDef += (byte)(status.Int / 5 - b_status.Int / 5);
				}
			}

			if ((flag & EStatusCalcFlag.Mdef2) > 0) {
				if (status.Int == b_status.Int) {
					status.MDef2 = CalculateMdef2(sc, b_status.MDef2);
				} else {
					status.MDef2 = CalculateMdef2(sc, (short)(b_status.MDef2 + (status.Int - b_status.Int) + ((status.Vit - b_status.Vit) >> 1)));
				}
			}

			if ((flag & EStatusCalcFlag.Speed) > 0) {
				WorldObjectUnit ud = (Object as WorldObjectUnit);
				status.Speed = CalculateSpeed(sc, b_status.Speed);

				// Re-walk to adjust speed (we do not check if walktimer != INVALID_TIMER
				// because if you step on something while walking, the moment this
				// piece of code triggers the walk-timer is set on INVALID_TIMER) 
				if (ud != null) {
					ud.UState.ChangeWalkTarget = ud.UState.SpeedChanged = true;
				}

				if (Object.Type.And(EDatabaseType.Char) && status.Speed < (ushort)Global.MAX_WALK_SPEED)
					status.Speed = (ushort)Global.MAX_WALK_SPEED;

				// TODO: need the config
				//if( bl->type&BL_HOM && battle_config.hom_setting&0x8 && ((TBL_HOM*)bl)->master)
				//	status->speed = status_get_speed(&((TBL_HOM*)bl)->master->bl);


			}

			if ((flag & EStatusCalcFlag.Cri) > 0 && status.Crit > 0) {
				if (status.Luk == b_status.Luk) {
					status.Crit = CalculateCrit(sc, b_status.Crit);
				} else {
					status.Crit = CalculateCrit(sc, (short)(b_status.Crit + 3 * (status.Luk - b_status.Luk)));
				}
			}

			if ((flag & EStatusCalcFlag.Flee2) > 0 && status.Flee2 > 0) {
				if (status.Luk == b_status.Luk) {
					status.Flee2 = CalculateFlee2(sc, b_status.Flee2);
				} else {
					status.Flee2 = CalculateFlee2(sc, (short)(b_status.Flee2 + (status.Luk - b_status.Luk)));
				}
			}

			if ((flag & EStatusCalcFlag.AtkEle) > 0) {
				// TODO: same as atk..
				/*
				status.Rhw.Element = CalculateElement(sc, b_status.Lhw.Element);
				if (character != null) {
					character.State.LrFlag = true;
				}
				status.Lhw.Element = CalculateElement(sc, b_status.Lhw.Element);
				if (character != null) {
					character.State.LrFlag = false;
				}
				*/
			}

			if ((flag & EStatusCalcFlag.DefEle) > 0) {
				status.DefEle = CalculateElement(sc, b_status.DefEle);
				status.EleLv = CalculateElementLevel(sc, b_status.EleLv);
			}

			if ((flag & EStatusCalcFlag.Mode) > 0) {
				status.Mode = CalculateMode(sc, b_status.Mode);
				// Since mode changed, reset their state.
				if (!((status.Mode & EMonsterMode.CanAttack) > 0)) {
					(Object as WorldObjectUnit).StopAttack();
				}
				if (!((status.Mode & EMonsterMode.CanMove) > 0)) {
					(Object as WorldObjectUnit).StopWalking(0);
				}
			}

			// No status changes alter these yet

			if ((flag & EStatusCalcFlag.Maxhp) > 0) {
				if (character != null) {
					status.HPMax = CalculateBasePcMaxHP(character, status);
					status.HPMax += (uint)(b_status.HPMax - character.Status.HPMax);

					status.HPMax = CalculateMaxHP(sc, status.HPMax);
				} else {
					status.HPMax = CalculateMaxHP(sc, b_status.HPMax);
				}

				// FIXME: Should perhaps a status_zap should be issued?
				if (status.HP > status.HPMax) {
					status.HP = status.HPMax;
					if (character != null) {
						character.Account.Netstate.Send(new Network.Packets.WorldUpdateStatus(character, EStatusParam.Hp));
					}
				}
			}

			if ((flag & EStatusCalcFlag.Maxhp) > 0) {
				if (character != null) {
					status.SPMax = CalculateBasePcMaxSP(character, status);
					status.SPMax += (uint)(b_status.SPMax - character.Status.SPMax);

					status.SPMax = CalculateMaxSP(sc, status.SPMax);
				} else {
					status.SPMax = CalculateMaxSP(sc, b_status.SPMax);
				}

				// FIXME: Should perhaps a status_zap should be issued?
				if (status.SP > status.SPMax) {
					status.SP = status.SPMax;
					if (character != null) {
						character.Account.Netstate.Send(new Network.Packets.WorldUpdateStatus(character, EStatusParam.Sp));
					}
				}
			}


			if ((flag & EStatusCalcFlag.Matk) > 0) {
				// New matk
				status.MagicAtkMin = CalculateBaseMatkMin(status);
				status.MagicAtkMax = CalculateBaseMatkMax(status);

				if (character != null && character.MatkRate != 100) {
					// Bonuses from previous matk
					status.MagicAtkMin = (ushort)(status.MagicAtkMin * character.MatkRate / 100);
					status.MagicAtkMax = (ushort)(status.MagicAtkMax * character.MatkRate / 100);
				}

				status.MagicAtkMin = CalculateMatk(sc, status.MagicAtkMin);
				status.MagicAtkMax = CalculateMatk(sc, status.MagicAtkMax);

				// Store current matk values
				if (sc[EStatusChange.Magicpower] != null) {
					sc.MpMatkMin = status.MagicAtkMin;
					sc.MpMatkMax = status.MagicAtkMax;
				}

				// TODO homu object
				// Hom Min Matk is always the same as Max Matk
				//if (Object.Type.And(EDatabaseType.Homunculus) &&
				//if( bl->type&BL_HOM && battle_config.hom_setting&0x20 ) 
				//	status->matk_min = status->matk_max;

			}

			if ((flag & EStatusCalcFlag.Aspd) > 0) {
				ushort amotion;
				if (character != null) {
					amotion = CalculateBaseAmotion(status);
					status.AspdRate = CalculateAspdRate(sc, b_status.AspdRate);

					if (status.AspdRate != 1000)
						amotion = (ushort)(amotion * status.AspdRate / 1000);

					status.AMotion = amotion.CapValue((ushort)Config.MaxAspd, (ushort)2000);
					status.ADelay = (ushort)(2 * status.AMotion);
				} else if (Object.Type.And(EDatabaseType.Homunculus) == true) {
					// TODO: homu object
					//amotion = (1000 - 4 * status.Agi - status.Dex) * (Object as Homunculus).BaseAspd / 1000;
					amotion = 500;
					status.AspdRate = CalculateAspdRate(sc, b_status.AspdRate);

					if (status.AspdRate != 1000) {
						amotion = (ushort)(amotion * status.AspdRate / 1000);
					}

					status.AMotion = amotion.CapValue((ushort)Config.MaxAspd, (ushort)2000);
					status.ADelay = status.AMotion;
				} else {
					// mercenary and mobs
					amotion = b_status.AMotion;
					status.AspdRate = CalculateAspdRate(sc, b_status.AspdRate);

					if (status.AspdRate != 1000) {
						amotion = (ushort)(amotion * status.AspdRate / 1000);
					}

					status.AMotion = amotion.CapValue((ushort)Config.MaxAspd, (ushort)2000);

					temp = b_status.ADelay * status.AspdRate / 1000;
					status.AMotion = ((ushort)temp).CapValue((ushort)Config.MaxAspd, (ushort)4000);
				}
			}

			if ((flag & EStatusCalcFlag.Dspd) > 0) {
				ushort dmotion;
				if (character != null) {
					if (b_status.Agi == status.Agi) {
						status.DMotion = CalculateDmotion(sc, b_status.DMotion);
					} else {
						dmotion = (ushort)(800 - status.Agi * 4);
						status.DMotion = dmotion.CapValue(400, 800);
						// It's safe to ignore b_status->dmotion since no bonus affects it.
						status.DMotion = CalculateDmotion(sc, status.DMotion);
					}
				} else if (Object.Type.And(EDatabaseType.Homunculus) == true) {
					dmotion = (ushort)(800 - status.Agi * 4);
					status.DMotion = dmotion.CapValue(400, 800);
					status.DMotion = CalculateDmotion(sc, b_status.DMotion);
				} else {
					// mercenary and mobs
					status.DMotion = CalculateDmotion(sc, b_status.DMotion);
				}
			}

			EStatusCalcFlag regenFlags = (EStatusCalcFlag.Vit | EStatusCalcFlag.Maxhp | EStatusCalcFlag.Int | EStatusCalcFlag.Maxsp);
			if ((flag & regenFlags) > 0 && Object.Type.And(EDatabaseType.Regeneration) == true) {
				CalculateRegenData(status, WorldObject.GetRegenData(Object));
			}

			if ((flag & EStatusCalcFlag.Regen) > 0 && Object.Type.And(EDatabaseType.Regeneration) == true) {
				CalculateRegenRate(WorldObject.GetRegenData(Object), sc);
			}

		}
Example #2
0
		private static void AddSC(ESkill sk, EStatusChange sc, EStatusChangeIcon icon, EStatusCalcFlag flag) {
			// Indices for array access
			int isc = (int)sc;
			int isk = (int)sk;

			if (StatusSkillChangeTable[isc] == 0) {
				StatusSkillChangeTable[isc] = sk;
			}

			if (StatusIconChangeTable[isc] == EStatusChangeIcon.Blank) {
				StatusIconChangeTable[isc] = icon;
			}

			StatusChangeFlagTable[isc] |= flag;

			if (SkillStatusChangeTable[isk] == EStatusChange.None) {
				SkillStatusChangeTable[isk] = sc;
			}
		}
Example #3
0
		/// <summary>
		/// Recalculates parts of an object's base status and battle status according to the specified flags
		/// Also sends updates to the client wherever applicable
		/// </summary>
		/// <param name="flag"></param>
		/// <param name="first"></param>
		public void Calculate(EStatusCalcFlag flag, bool first) {
			WorldObjectStatus prevStatus = (WorldObjectStatus)WorldObject.GetStatusData(Object).Clone();

			// Calc base status
			if ((flag & EStatusCalcFlag.Base) > 0) {
				switch (Object.WorldID.Type) {
					case EDatabaseType.Mob:
						CalculateMob_(first);
						break;
					case EDatabaseType.Char:
						CalculateChar_(first);
						break;
					case EDatabaseType.Pet:
						CalculatePet_(first);
						break;
					case EDatabaseType.Homunculus:
						CalculateHom_(first);
						break;
					case EDatabaseType.Mercenary:
						CalculateMerc_(first);
						break;
				}
			}

			if (Object.WorldID.Type == EDatabaseType.Pet) {
				return;
			}
			if (first == true && Object.WorldID.Type == EDatabaseType.Mob) {
				return;
			}

			CalculateMain(flag);

			if (first == true && Object.WorldID.Type == EDatabaseType.Homunculus) {
				return;
			}

			// compare against new values and send client updates
			WorldObjectStatus status = WorldObject.GetStatusData(Object);

			if (Object.WorldID.Type == EDatabaseType.Char) {
				// updatestatus bla..
			} else if (Object.WorldID.Type == EDatabaseType.Homunculus) {

			} else if (Object.WorldID.Type == EDatabaseType.Mercenary) {

			}

		}
Example #4
0
		private static void InitializeStatusTable() {
			StatusSkillChangeTable = new ESkill[(int)EStatusChange.Max];
			StatusIconChangeTable = new EStatusChangeIcon[(int)EStatusChange.Max];
			StatusChangeFlagTable = new EStatusCalcFlag[(int)EStatusChange.Max];
			SkillStatusChangeTable = new EStatusChange[(int)ESkill.Max];

			// First we define the skill for common ailments. These are used in skill_additional_effect through sc cards
			AddSC(ESkill.NpcPetrifyattack, EStatusChange.Stone, EStatusChangeIcon.Blank, EStatusCalcFlag.DefEle | EStatusCalcFlag.Def | EStatusCalcFlag.Mdef);
			AddSC(ESkill.NpcWidefreeze, EStatusChange.Freeze, EStatusChangeIcon.Blank, EStatusCalcFlag.DefEle | EStatusCalcFlag.Def | EStatusCalcFlag.Mdef);
			AddSC(ESkill.NpcStunattack, EStatusChange.Stun, EStatusChangeIcon.Blank, EStatusCalcFlag.None);
			AddSC(ESkill.NpcSleepattack, EStatusChange.Sleep, EStatusChangeIcon.Blank, EStatusCalcFlag.None);
			AddSC(ESkill.NpcPoison, EStatusChange.Poison, EStatusChangeIcon.Blank, EStatusCalcFlag.Def2 | EStatusCalcFlag.Regen);
			AddSC(ESkill.NpcCurseattack, EStatusChange.Curse, EStatusChangeIcon.Blank, EStatusCalcFlag.Luk | EStatusCalcFlag.Batk | EStatusCalcFlag.Watk | EStatusCalcFlag.Speed);
			AddSC(ESkill.NpcSilenceattack, EStatusChange.Silence, EStatusChangeIcon.Blank, EStatusCalcFlag.None);
			AddSC(ESkill.NpcWideconfuse, EStatusChange.Confusion, EStatusChangeIcon.Blank, EStatusCalcFlag.None);
			AddSC(ESkill.NpcBlindattack, EStatusChange.Blind, EStatusChangeIcon.Blank, EStatusCalcFlag.Hit | EStatusCalcFlag.Flee);
			AddSC(ESkill.NpcBleeding, EStatusChange.Bleeding, EStatusChangeIcon.Bleeding, EStatusCalcFlag.Regen);
			AddSC(ESkill.NpcPoison, EStatusChange.Dpoison, EStatusChangeIcon.Blank, EStatusCalcFlag.Def2 | EStatusCalcFlag.Regen);

			// The main status definitions
			AddSC(ESkill.SmBash, EStatusChange.Stun);
			AddSC(ESkill.SmProvoke, EStatusChange.Provoke, EStatusChangeIcon.Provoke, EStatusCalcFlag.Def | EStatusCalcFlag.Def2 | EStatusCalcFlag.Batk | EStatusCalcFlag.Watk);
			AddSC(ESkill.SmMagnum, EStatusChange.WatkElement);
			AddSC(ESkill.SmEndure, EStatusChange.Endure, EStatusChangeIcon.Endure, EStatusCalcFlag.Mdef | EStatusCalcFlag.Dspd);
			AddSC(ESkill.MgSight, EStatusChange.Sight);
			AddSC(ESkill.MgSafetywall, EStatusChange.Safetywall);
			AddSC(ESkill.MgFrostdiver, EStatusChange.Freeze);
			AddSC(ESkill.MgStonecurse, EStatusChange.Stone);
			AddSC(ESkill.AlRuwach, EStatusChange.Ruwach);
			AddSC(ESkill.AlPneuma, EStatusChange.Pneuma);
			AddSC(ESkill.AlIncagi, EStatusChange.Increaseagi, EStatusChangeIcon.Increaseagi, EStatusCalcFlag.Agi | EStatusCalcFlag.Speed);
			AddSC(ESkill.AlDecagi, EStatusChange.Decreaseagi, EStatusChangeIcon.Decreaseagi, EStatusCalcFlag.Agi | EStatusCalcFlag.Speed);
			AddSC(ESkill.AlCrucis, EStatusChange.Signumcrucis, EStatusChangeIcon.Signumcrucis, EStatusCalcFlag.Def);
			AddSC(ESkill.AlAngelus, EStatusChange.Angelus, EStatusChangeIcon.Angelus, EStatusCalcFlag.Def2);
			AddSC(ESkill.AlBlessing, EStatusChange.Blessing, EStatusChangeIcon.Blessing, EStatusCalcFlag.Str | EStatusCalcFlag.Int | EStatusCalcFlag.Dex);
			AddSC(ESkill.AcConcentration, EStatusChange.Concentrate, EStatusChangeIcon.Concentrate, EStatusCalcFlag.Agi | EStatusCalcFlag.Dex);
			AddSC(ESkill.TfHiding, EStatusChange.Hiding, EStatusChangeIcon.Hiding, EStatusCalcFlag.Speed);
			AddSC(ESkill.TfPoison, EStatusChange.Poison);
			AddSC(ESkill.KnTwohandquicken, EStatusChange.Twohandquicken, EStatusChangeIcon.Twohandquicken, EStatusCalcFlag.Aspd);
			AddSC(ESkill.KnAutocounter, EStatusChange.Autocounter);
			AddSC(ESkill.PrImpositio, EStatusChange.Impositio, EStatusChangeIcon.Impositio, EStatusCalcFlag.Watk);
			AddSC(ESkill.PrSuffragium, EStatusChange.Suffragium, EStatusChangeIcon.Suffragium, EStatusCalcFlag.None);
			AddSC(ESkill.PrAspersio, EStatusChange.Aspersio, EStatusChangeIcon.Aspersio, EStatusCalcFlag.AtkEle);
			AddSC(ESkill.PrBenedictio, EStatusChange.Benedictio, EStatusChangeIcon.Benedictio, EStatusCalcFlag.DefEle);
			AddSC(ESkill.PrSlowpoison, EStatusChange.Slowpoison, EStatusChangeIcon.Slowpoison, EStatusCalcFlag.Regen);
			AddSC(ESkill.PrKyrie, EStatusChange.Kyrie, EStatusChangeIcon.Kyrie, EStatusCalcFlag.None);
			AddSC(ESkill.PrMagnificat, EStatusChange.Magnificat, EStatusChangeIcon.Magnificat, EStatusCalcFlag.Regen);
			AddSC(ESkill.PrGloria, EStatusChange.Gloria, EStatusChangeIcon.Gloria, EStatusCalcFlag.Luk);
			AddSC(ESkill.PrLexdivina, EStatusChange.Silence);
			AddSC(ESkill.PrLexaeterna, EStatusChange.Aeterna, EStatusChangeIcon.Aeterna, EStatusCalcFlag.None);
			AddSC(ESkill.WzMeteor, EStatusChange.Stun);
			AddSC(ESkill.WzVermilion, EStatusChange.Blind);
			AddSC(ESkill.WzFrostnova, EStatusChange.Freeze);
			AddSC(ESkill.WzStormgust, EStatusChange.Freeze);
			AddSC(ESkill.WzQuagmire, EStatusChange.Quagmire, EStatusChangeIcon.Quagmire, EStatusCalcFlag.Agi | EStatusCalcFlag.Dex | EStatusCalcFlag.Aspd | EStatusCalcFlag.Speed);
			AddSC(ESkill.BsAdrenaline, EStatusChange.Adrenaline, EStatusChangeIcon.Adrenaline, EStatusCalcFlag.Aspd);
			AddSC(ESkill.BsWeaponperfect, EStatusChange.Weaponperfection, EStatusChangeIcon.Weaponperfection, EStatusCalcFlag.None);
			AddSC(ESkill.BsOverthrust, EStatusChange.Overthrust, EStatusChangeIcon.Overthrust, EStatusCalcFlag.None);
			AddSC(ESkill.BsMaximize, EStatusChange.Maximizepower, EStatusChangeIcon.Maximizepower, EStatusCalcFlag.Regen);
			AddSC(ESkill.HtLandmine, EStatusChange.Stun);
			AddSC(ESkill.HtAnklesnare, EStatusChange.Ankle);
			AddSC(ESkill.HtSandman, EStatusChange.Sleep);
			AddSC(ESkill.HtFlasher, EStatusChange.Blind);
			AddSC(ESkill.HtFreezingtrap, EStatusChange.Freeze);
			AddSC(ESkill.AsCloaking, EStatusChange.Cloaking, EStatusChangeIcon.Cloaking, EStatusCalcFlag.Cri | EStatusCalcFlag.Speed);
			AddSC(ESkill.AsSonicblow, EStatusChange.Stun);
			AddSC(ESkill.AsEnchantpoison, EStatusChange.Encpoison, EStatusChangeIcon.Encpoison, EStatusCalcFlag.AtkEle);
			AddSC(ESkill.AsPoisonreact, EStatusChange.Poisonreact, EStatusChangeIcon.Poisonreact, EStatusCalcFlag.None);
			AddSC(ESkill.AsVenomdust, EStatusChange.Poison);
			AddSC(ESkill.AsSplasher, EStatusChange.Splasher);
			AddSC(ESkill.NvTrickdead, EStatusChange.Trickdead, EStatusChangeIcon.Trickdead, EStatusCalcFlag.Regen);
			AddSC(ESkill.SmAutoberserk, EStatusChange.Autoberserk, EStatusChangeIcon.Autoberserk, EStatusCalcFlag.None);
			AddSC(ESkill.TfSprinklesand, EStatusChange.Blind);
			AddSC(ESkill.TfThrowstone, EStatusChange.Stun);
			AddSC(ESkill.McLoud, EStatusChange.Loud, EStatusChangeIcon.Loud, EStatusCalcFlag.Str);
			AddSC(ESkill.MgEnergycoat, EStatusChange.Energycoat, EStatusChangeIcon.Energycoat, EStatusCalcFlag.None);
			AddSC(ESkill.NpcEmotion, EStatusChange.Modechange, EStatusChangeIcon.Blank, EStatusCalcFlag.Mode);
			AddSC(ESkill.NpcEmotionOn, EStatusChange.Modechange);
			AddSC(ESkill.NpcAttrichange, EStatusChange.Elementalchange, EStatusChangeIcon.ArmorProperty, EStatusCalcFlag.DefEle);
			AddSC(ESkill.NpcChangewater, EStatusChange.Elementalchange);
			AddSC(ESkill.NpcChangeground, EStatusChange.Elementalchange);
			AddSC(ESkill.NpcChangefire, EStatusChange.Elementalchange);
			AddSC(ESkill.NpcChangewind, EStatusChange.Elementalchange);
			AddSC(ESkill.NpcChangepoison, EStatusChange.Elementalchange);
			AddSC(ESkill.NpcChangeholy, EStatusChange.Elementalchange);
			AddSC(ESkill.NpcChangedarkness, EStatusChange.Elementalchange);
			AddSC(ESkill.NpcChangetelekinesis, EStatusChange.Elementalchange);
			AddSC(ESkill.NpcPoison, EStatusChange.Poison);
			AddSC(ESkill.NpcBlindattack, EStatusChange.Blind);
			AddSC(ESkill.NpcSilenceattack, EStatusChange.Silence);
			AddSC(ESkill.NpcStunattack, EStatusChange.Stun);
			AddSC(ESkill.NpcPetrifyattack, EStatusChange.Stone);
			AddSC(ESkill.NpcCurseattack, EStatusChange.Curse);
			AddSC(ESkill.NpcSleepattack, EStatusChange.Sleep);
			AddSC(ESkill.NpcMagicalattack, EStatusChange.Magicalattack);
			AddSC(ESkill.NpcKeeping, EStatusChange.Keeping, EStatusChangeIcon.Blank, EStatusCalcFlag.Def);
			AddSC(ESkill.NpcDarkblessing, EStatusChange.Coma);
			AddSC(ESkill.NpcBarrier, EStatusChange.Barrier, EStatusChangeIcon.Blank, EStatusCalcFlag.Mdef | EStatusCalcFlag.Def);
			AddSC(ESkill.NpcDefender, EStatusChange.Armor);
			AddSC(ESkill.NpcLick, EStatusChange.Stun);
			AddSC(ESkill.NpcHallucination, EStatusChange.Hallucination, EStatusChangeIcon.Hallucination, EStatusCalcFlag.None);
			AddSC(ESkill.NpcRebirth, EStatusChange.Rebirth);
			AddSC(ESkill.RgRaid, EStatusChange.Stun);
			AddSC(ESkill.RgStripweapon, EStatusChange.Stripweapon, EStatusChangeIcon.Stripweapon, EStatusCalcFlag.Watk);
			AddSC(ESkill.RgStripshield, EStatusChange.Stripshield, EStatusChangeIcon.Stripshield, EStatusCalcFlag.Def);
			AddSC(ESkill.RgStriparmor, EStatusChange.Striparmor, EStatusChangeIcon.Striparmor, EStatusCalcFlag.Vit);
			AddSC(ESkill.RgStriphelm, EStatusChange.Striphelm, EStatusChangeIcon.Striphelm, EStatusCalcFlag.Int);
			AddSC(ESkill.AmAcidterror, EStatusChange.Bleeding);
			AddSC(ESkill.AmCpWeapon, EStatusChange.CpWeapon, EStatusChangeIcon.CpWeapon, EStatusCalcFlag.None);
			AddSC(ESkill.AmCpShield, EStatusChange.CpShield, EStatusChangeIcon.CpShield, EStatusCalcFlag.None);
			AddSC(ESkill.AmCpArmor, EStatusChange.CpArmor, EStatusChangeIcon.CpArmor, EStatusCalcFlag.None);
			AddSC(ESkill.AmCpHelm, EStatusChange.CpHelm, EStatusChangeIcon.CpHelm, EStatusCalcFlag.None);
			AddSC(ESkill.CrAutoguard, EStatusChange.Autoguard, EStatusChangeIcon.Autoguard, EStatusCalcFlag.None);
			AddSC(ESkill.CrShieldcharge, EStatusChange.Stun);
			AddSC(ESkill.CrReflectshield, EStatusChange.Reflectshield, EStatusChangeIcon.Reflectshield, EStatusCalcFlag.None);
			AddSC(ESkill.CrHolycross, EStatusChange.Blind);
			AddSC(ESkill.CrGrandcross, EStatusChange.Blind);
			AddSC(ESkill.CrDevotion, EStatusChange.Devotion);
			AddSC(ESkill.CrProvidence, EStatusChange.Providence, EStatusChangeIcon.Providence, EStatusCalcFlag.All);
			AddSC(ESkill.CrDefender, EStatusChange.Defender, EStatusChangeIcon.Defender, EStatusCalcFlag.Speed | EStatusCalcFlag.Aspd);
			AddSC(ESkill.CrSpearquicken, EStatusChange.Spearquicken, EStatusChangeIcon.Spearquicken, EStatusCalcFlag.Aspd);
			AddSC(ESkill.MoSteelbody, EStatusChange.Steelbody, EStatusChangeIcon.Steelbody, EStatusCalcFlag.Def | EStatusCalcFlag.Mdef | EStatusCalcFlag.Aspd | EStatusCalcFlag.Speed);
			AddSC(ESkill.MoBladestop, EStatusChange.BladestopWait);
			AddSC(ESkill.MoBladestop, EStatusChange.Bladestop);
			AddSC(ESkill.MoExplosionspirits, EStatusChange.Explosionspirits, EStatusChangeIcon.Explosionspirits, EStatusCalcFlag.Cri | EStatusCalcFlag.Regen);
			AddSC(ESkill.MoExtremityfist, EStatusChange.Extremityfist, EStatusChangeIcon.Blank, EStatusCalcFlag.Regen);
			AddSC(ESkill.SaMagicrod, EStatusChange.Magicrod);
			AddSC(ESkill.SaAutospell, EStatusChange.Autospell, EStatusChangeIcon.Autospell, EStatusCalcFlag.None);
			AddSC(ESkill.SaFlamelauncher, EStatusChange.Fireweapon, EStatusChangeIcon.Fireweapon, EStatusCalcFlag.AtkEle);
			AddSC(ESkill.SaFrostweapon, EStatusChange.Waterweapon, EStatusChangeIcon.Waterweapon, EStatusCalcFlag.AtkEle);
			AddSC(ESkill.SaLightningloader, EStatusChange.Windweapon, EStatusChangeIcon.Windweapon, EStatusCalcFlag.AtkEle);
			AddSC(ESkill.SaSeismicweapon, EStatusChange.Earthweapon, EStatusChangeIcon.Earthweapon, EStatusCalcFlag.AtkEle);
			AddSC(ESkill.SaVolcano, EStatusChange.Volcano, EStatusChangeIcon.Landendow, EStatusCalcFlag.Watk);
			AddSC(ESkill.SaDeluge, EStatusChange.Deluge, EStatusChangeIcon.Landendow, EStatusCalcFlag.Maxhp);
			AddSC(ESkill.SaViolentgale, EStatusChange.Violentgale, EStatusChangeIcon.Landendow, EStatusCalcFlag.Flee);
			AddSC(ESkill.SaReverseorcish, EStatusChange.Orcish);
			AddSC(ESkill.SaComa, EStatusChange.Coma);
			AddSC(ESkill.BdEncore, EStatusChange.Dancing, EStatusChangeIcon.Blank, EStatusCalcFlag.Speed | EStatusCalcFlag.Regen);
			AddSC(ESkill.BdRichmankim, EStatusChange.Richmankim);
			AddSC(ESkill.BdEternalchaos, EStatusChange.Eternalchaos, EStatusChangeIcon.Blank, EStatusCalcFlag.Def2);
			AddSC(ESkill.BdDrumbattlefield, EStatusChange.Drumbattle, EStatusChangeIcon.Blank, EStatusCalcFlag.Watk | EStatusCalcFlag.Def);
			AddSC(ESkill.BdRingnibelungen, EStatusChange.Nibelungen, EStatusChangeIcon.Blank, EStatusCalcFlag.Watk);
			AddSC(ESkill.BdRokisweil, EStatusChange.Rokisweil);
			AddSC(ESkill.BdIntoabyss, EStatusChange.Intoabyss);
			AddSC(ESkill.BdSiegfried, EStatusChange.Siegfried, EStatusChangeIcon.Blank, EStatusCalcFlag.All);
			AddSC(ESkill.BaFrostjoker, EStatusChange.Freeze);
			AddSC(ESkill.BaWhistle, EStatusChange.Whistle, EStatusChangeIcon.Blank, EStatusCalcFlag.Flee | EStatusCalcFlag.Flee2);
			AddSC(ESkill.BaAssassincross, EStatusChange.Assncros, EStatusChangeIcon.Blank, EStatusCalcFlag.Aspd);
			AddSC(ESkill.BaPoembragi, EStatusChange.Poembragi);
			AddSC(ESkill.BaAppleidun, EStatusChange.Appleidun, EStatusChangeIcon.Blank, EStatusCalcFlag.Maxhp);
			AddSC(ESkill.DcScream, EStatusChange.Stun);
			AddSC(ESkill.DcHumming, EStatusChange.Humming, EStatusChangeIcon.Blank, EStatusCalcFlag.Hit);
			AddSC(ESkill.DcDontforgetme, EStatusChange.Dontforgetme, EStatusChangeIcon.Blank, EStatusCalcFlag.Speed | EStatusCalcFlag.Aspd);
			AddSC(ESkill.DcFortunekiss, EStatusChange.Fortune, EStatusChangeIcon.Blank, EStatusCalcFlag.Cri);
			AddSC(ESkill.DcServiceforyou, EStatusChange.Service4u, EStatusChangeIcon.Blank, EStatusCalcFlag.All);
			AddSC(ESkill.NpcDarkcross, EStatusChange.Blind);
			AddSC(ESkill.NpcGranddarkness, EStatusChange.Blind);
			AddSC(ESkill.NpcStop, EStatusChange.Stop, EStatusChangeIcon.Stop, EStatusCalcFlag.None);
			AddSC(ESkill.NpcWeaponbraker, EStatusChange.Brokenweapon, EStatusChangeIcon.Brokenweapon, EStatusCalcFlag.None);
			AddSC(ESkill.NpcArmorbrake, EStatusChange.Brokenarmor, EStatusChangeIcon.Brokenarmor, EStatusCalcFlag.None);
			AddSC(ESkill.NpcChangeundead, EStatusChange.Changeundead, EStatusChangeIcon.Undead, EStatusCalcFlag.DefEle);
			AddSC(ESkill.NpcPowerup, EStatusChange.Inchitrate, EStatusChangeIcon.Blank, EStatusCalcFlag.Hit);
			AddSC(ESkill.NpcAgiup, EStatusChange.Incfleerate, EStatusChangeIcon.Blank, EStatusCalcFlag.Flee);
			AddSC(ESkill.NpcInvisible, EStatusChange.Cloaking);
			AddSC(ESkill.LkAurablade, EStatusChange.Aurablade, EStatusChangeIcon.Aurablade, EStatusCalcFlag.None);
			AddSC(ESkill.LkParrying, EStatusChange.Parrying, EStatusChangeIcon.Parrying, EStatusCalcFlag.None);
			AddSC(ESkill.LkConcentration, EStatusChange.Concentration, EStatusChangeIcon.Concentration, EStatusCalcFlag.Batk | EStatusCalcFlag.Watk | EStatusCalcFlag.Hit | EStatusCalcFlag.Def | EStatusCalcFlag.Def2 | EStatusCalcFlag.Mdef | EStatusCalcFlag.Dspd);
			AddSC(ESkill.LkTensionrelax, EStatusChange.Tensionrelax, EStatusChangeIcon.Tensionrelax, EStatusCalcFlag.Regen);
			AddSC(ESkill.LkBerserk, EStatusChange.Berserk, EStatusChangeIcon.Berserk, EStatusCalcFlag.Def | EStatusCalcFlag.Def2 | EStatusCalcFlag.Mdef | EStatusCalcFlag.Mdef2 | EStatusCalcFlag.Flee | EStatusCalcFlag.Speed | EStatusCalcFlag.Aspd | EStatusCalcFlag.Maxhp | EStatusCalcFlag.Regen);
			AddSC(ESkill.HpAssumptio, EStatusChange.Assumptio, EStatusChangeIcon.Assumptio, EStatusCalcFlag.None);
			AddSC(ESkill.HpBasilica, EStatusChange.Basilica);
			AddSC(ESkill.HwMagicpower, EStatusChange.Magicpower, EStatusChangeIcon.Magicpower, EStatusCalcFlag.Matk);
			AddSC(ESkill.PaSacrifice, EStatusChange.Sacrifice);
			AddSC(ESkill.PaGospel, EStatusChange.Gospel, EStatusChangeIcon.Blank, EStatusCalcFlag.Speed | EStatusCalcFlag.Aspd);
			AddSC(ESkill.PaGospel, EStatusChange.Scresist);
			AddSC(ESkill.ChTigerfist, EStatusChange.Stop);
			AddSC(ESkill.AscEdp, EStatusChange.Edp, EStatusChangeIcon.Edp, EStatusCalcFlag.None);
			AddSC(ESkill.SnSight, EStatusChange.Truesight, EStatusChangeIcon.Truesight, EStatusCalcFlag.Str | EStatusCalcFlag.Agi | EStatusCalcFlag.Vit | EStatusCalcFlag.Int | EStatusCalcFlag.Dex | EStatusCalcFlag.Luk | EStatusCalcFlag.Cri | EStatusCalcFlag.Hit);
			AddSC(ESkill.SnWindwalk, EStatusChange.Windwalk, EStatusChangeIcon.Windwalk, EStatusCalcFlag.Flee | EStatusCalcFlag.Speed);
			AddSC(ESkill.WsMeltdown, EStatusChange.Meltdown, EStatusChangeIcon.Meltdown, EStatusCalcFlag.None);
			AddSC(ESkill.WsCartboost, EStatusChange.Cartboost, EStatusChangeIcon.Cartboost, EStatusCalcFlag.Speed);
			AddSC(ESkill.StChasewalk, EStatusChange.Chasewalk, EStatusChangeIcon.Blank, EStatusCalcFlag.Speed);
			AddSC(ESkill.StRejectsword, EStatusChange.Rejectsword, EStatusChangeIcon.Rejectsword, EStatusCalcFlag.None);
			AddSC(ESkill.StRejectsword, EStatusChange.Autocounter);
			AddSC(ESkill.CgMarionette, EStatusChange.Marionette, EStatusChangeIcon.Marionette, EStatusCalcFlag.Str | EStatusCalcFlag.Agi | EStatusCalcFlag.Vit | EStatusCalcFlag.Int | EStatusCalcFlag.Dex | EStatusCalcFlag.Luk);
			AddSC(ESkill.CgMarionette, EStatusChange.Marionette2, EStatusChangeIcon.Marionette2, EStatusCalcFlag.Str | EStatusCalcFlag.Agi | EStatusCalcFlag.Vit | EStatusCalcFlag.Int | EStatusCalcFlag.Dex | EStatusCalcFlag.Luk);
			AddSC(ESkill.LkSpiralpierce, EStatusChange.Stop);
			AddSC(ESkill.LkHeadcrush, EStatusChange.Bleeding);
			AddSC(ESkill.LkJointbeat, EStatusChange.Jointbeat, EStatusChangeIcon.Jointbeat, EStatusCalcFlag.Batk | EStatusCalcFlag.Def2 | EStatusCalcFlag.Speed | EStatusCalcFlag.Aspd);
			AddSC(ESkill.HwNapalmvulcan, EStatusChange.Curse);
			AddSC(ESkill.PfMindbreaker, EStatusChange.Mindbreaker, EStatusChangeIcon.Blank, EStatusCalcFlag.Matk | EStatusCalcFlag.Mdef2);
			AddSC(ESkill.PfMemorize, EStatusChange.Memorize);
			AddSC(ESkill.PfFogwall, EStatusChange.Fogwall);
			AddSC(ESkill.PfSpiderweb, EStatusChange.Spiderweb, EStatusChangeIcon.Blank, EStatusCalcFlag.Flee);
			AddSC(ESkill.WeBaby, EStatusChange.Baby, EStatusChangeIcon.Baby, EStatusCalcFlag.None);
			AddSC(ESkill.TkRun, EStatusChange.Run, EStatusChangeIcon.Run, EStatusCalcFlag.Speed | EStatusCalcFlag.Dspd);
			AddSC(ESkill.TkRun, EStatusChange.Spurt, EStatusChangeIcon.Spurt, EStatusCalcFlag.Str);
			AddSC(ESkill.TkReadystorm, EStatusChange.Readystorm, EStatusChangeIcon.Readystorm, EStatusCalcFlag.None);
			AddSC(ESkill.TkReadydown, EStatusChange.Readydown, EStatusChangeIcon.Readydown, EStatusCalcFlag.None);
			AddSC(ESkill.TkDownkick, EStatusChange.Stun);
			AddSC(ESkill.TkReadyturn, EStatusChange.Readyturn, EStatusChangeIcon.Readyturn, EStatusCalcFlag.None);
			AddSC(ESkill.TkReadycounter, EStatusChange.Readycounter, EStatusChangeIcon.Readycounter, EStatusCalcFlag.None);
			AddSC(ESkill.TkDodge, EStatusChange.Dodge, EStatusChangeIcon.Dodge, EStatusCalcFlag.None);
			AddSC(ESkill.TkSptime, EStatusChange.Earthscroll, EStatusChangeIcon.Earthscroll, EStatusCalcFlag.None);
			AddSC(ESkill.TkSevenwind, EStatusChange.Sevenwind);
			AddSC(ESkill.TkSevenwind, EStatusChange.Ghostweapon, EStatusChangeIcon.Ghostweapon, EStatusCalcFlag.AtkEle);
			AddSC(ESkill.TkSevenwind, EStatusChange.Shadowweapon, EStatusChangeIcon.Shadowweapon, EStatusCalcFlag.AtkEle);
			AddSC(ESkill.SgSunWarm, EStatusChange.Warm, EStatusChangeIcon.Warm, EStatusCalcFlag.None);
			AddSC(ESkill.SgMoonWarm, EStatusChange.Warm);
			AddSC(ESkill.SgStarWarm, EStatusChange.Warm);
			AddSC(ESkill.SgSunComfort, EStatusChange.SunComfort, EStatusChangeIcon.SunComfort, EStatusCalcFlag.Def2);
			AddSC(ESkill.SgMoonComfort, EStatusChange.MoonComfort, EStatusChangeIcon.MoonComfort, EStatusCalcFlag.Flee);
			AddSC(ESkill.SgStarComfort, EStatusChange.StarComfort, EStatusChangeIcon.StarComfort, EStatusCalcFlag.Aspd);
			AddSC(ESkill.SgFriend, EStatusChange.SkillrateUp);
			AddSC(ESkill.SgKnowledge, EStatusChange.Knowledge, EStatusChangeIcon.Blank, EStatusCalcFlag.All);
			AddSC(ESkill.SgFusion, EStatusChange.Fusion, EStatusChangeIcon.Blank, EStatusCalcFlag.Speed);
			AddSC(ESkill.BsAdrenaline2, EStatusChange.Adrenaline2, EStatusChangeIcon.Adrenaline2, EStatusCalcFlag.Aspd);
			AddSC(ESkill.SlKaizel, EStatusChange.Kaizel, EStatusChangeIcon.Kaizel, EStatusCalcFlag.None);
			AddSC(ESkill.SlKaahi, EStatusChange.Kaahi, EStatusChangeIcon.Kaahi, EStatusCalcFlag.None);
			AddSC(ESkill.SlKaupe, EStatusChange.Kaupe, EStatusChangeIcon.Kaupe, EStatusCalcFlag.None);
			AddSC(ESkill.SlKaite, EStatusChange.Kaite, EStatusChangeIcon.Kaite, EStatusCalcFlag.None);
			AddSC(ESkill.SlStun, EStatusChange.Stun);
			AddSC(ESkill.SlSwoo, EStatusChange.Swoo, EStatusChangeIcon.Blank, EStatusCalcFlag.Speed);
			AddSC(ESkill.SlSke, EStatusChange.Ske, EStatusChangeIcon.Blank, EStatusCalcFlag.Batk | EStatusCalcFlag.Watk | EStatusCalcFlag.Def | EStatusCalcFlag.Def2);
			AddSC(ESkill.SlSka, EStatusChange.Ska, EStatusChangeIcon.Blank, EStatusCalcFlag.Def | EStatusCalcFlag.Mdef | EStatusCalcFlag.Aspd);
			AddSC(ESkill.SlSma, EStatusChange.Sma, EStatusChangeIcon.Sma, EStatusCalcFlag.None);
			AddSC(ESkill.SmSelfprovoke, EStatusChange.Provoke, EStatusChangeIcon.Provoke, EStatusCalcFlag.Def | EStatusCalcFlag.Def2 | EStatusCalcFlag.Batk | EStatusCalcFlag.Watk);
			AddSC(ESkill.StPreserve, EStatusChange.Preserve, EStatusChangeIcon.Preserve, EStatusCalcFlag.None);
			AddSC(ESkill.PfDoublecasting, EStatusChange.Doublecast, EStatusChangeIcon.Doublecast, EStatusCalcFlag.None);
			AddSC(ESkill.HwGravitation, EStatusChange.Gravitation, EStatusChangeIcon.Blank, EStatusCalcFlag.Aspd);
			AddSC(ESkill.WsCarttermination, EStatusChange.Stun);
			AddSC(ESkill.WsOverthrustmax, EStatusChange.Maxoverthrust, EStatusChangeIcon.Maxoverthrust, EStatusCalcFlag.None);
			AddSC(ESkill.CgLongingfreedom, EStatusChange.Longing, EStatusChangeIcon.Blank, EStatusCalcFlag.Speed | EStatusCalcFlag.Aspd);
			AddSC(ESkill.CgHermode, EStatusChange.Hermode);
			AddSC(ESkill.ItemEnchantarms, EStatusChange.Enchantarms, EStatusChangeIcon.Blank, EStatusCalcFlag.AtkEle);
			AddSC(ESkill.SlHigh, EStatusChange.Spirit, EStatusChangeIcon.Spirit, EStatusCalcFlag.All);
			AddSC(ESkill.KnOnehand, EStatusChange.Onehand, EStatusChangeIcon.Onehand, EStatusCalcFlag.Aspd);
			AddSC(ESkill.GsFling, EStatusChange.Fling, EStatusChangeIcon.Blank, EStatusCalcFlag.Def | EStatusCalcFlag.Def2);
			AddSC(ESkill.GsCracker, EStatusChange.Stun);
			AddSC(ESkill.GsDisarm, EStatusChange.Stripweapon);
			AddSC(ESkill.GsPiercingshot, EStatusChange.Bleeding);
			AddSC(ESkill.GsMadnesscancel, EStatusChange.Madnesscancel, EStatusChangeIcon.Madnesscancel, EStatusCalcFlag.Batk | EStatusCalcFlag.Aspd);
			AddSC(ESkill.GsAdjustment, EStatusChange.Adjustment, EStatusChangeIcon.Adjustment, EStatusCalcFlag.Hit | EStatusCalcFlag.Flee);
			AddSC(ESkill.GsIncreasing, EStatusChange.Increasing, EStatusChangeIcon.Accuracy, EStatusCalcFlag.Agi | EStatusCalcFlag.Dex | EStatusCalcFlag.Hit);
			AddSC(ESkill.GsGatlingfever, EStatusChange.Gatlingfever, EStatusChangeIcon.Gatlingfever, EStatusCalcFlag.Batk | EStatusCalcFlag.Flee | EStatusCalcFlag.Speed | EStatusCalcFlag.Aspd);
			AddSC(ESkill.NjTatamigaeshi, EStatusChange.Tatamigaeshi, EStatusChangeIcon.Blank, EStatusCalcFlag.None);
			AddSC(ESkill.NjSuiton, EStatusChange.Suiton, EStatusChangeIcon.Blank, EStatusCalcFlag.Agi | EStatusCalcFlag.Speed);
			AddSC(ESkill.NjHyousyouraku, EStatusChange.Freeze);
			AddSC(ESkill.NjNen, EStatusChange.Nen, EStatusChangeIcon.Nen, EStatusCalcFlag.Str | EStatusCalcFlag.Int);
			AddSC(ESkill.NjUtsusemi, EStatusChange.Utsusemi, EStatusChangeIcon.Utsusemi, EStatusCalcFlag.None);
			AddSC(ESkill.NjBunsinjyutsu, EStatusChange.Bunsinjyutsu, EStatusChangeIcon.Bunsinjyutsu, EStatusCalcFlag.Dye);

			AddSC(ESkill.NpcIcebreath, EStatusChange.Freeze);
			AddSC(ESkill.NpcAcidbreath, EStatusChange.Poison);
			AddSC(ESkill.NpcHelljudgement, EStatusChange.Curse);
			AddSC(ESkill.NpcWidesilence, EStatusChange.Silence);
			AddSC(ESkill.NpcWidefreeze, EStatusChange.Freeze);
			AddSC(ESkill.NpcWidebleeding, EStatusChange.Bleeding);
			AddSC(ESkill.NpcWidestone, EStatusChange.Stone);
			AddSC(ESkill.NpcWideconfuse, EStatusChange.Confusion);
			AddSC(ESkill.NpcWidesleep, EStatusChange.Sleep);
			AddSC(ESkill.NpcWidesight, EStatusChange.Sight);
			AddSC(ESkill.NpcEvilland, EStatusChange.Blind);
			AddSC(ESkill.NpcMagicmirror, EStatusChange.Magicmirror);
			AddSC(ESkill.NpcSlowcast, EStatusChange.Slowcast, EStatusChangeIcon.Slowcast, EStatusCalcFlag.None);
			AddSC(ESkill.NpcCriticalwound, EStatusChange.Criticalwound, EStatusChangeIcon.Criticalwound, EStatusCalcFlag.None);
			AddSC(ESkill.NpcStoneskin, EStatusChange.Armorchange, EStatusChangeIcon.Blank, EStatusCalcFlag.Def | EStatusCalcFlag.Mdef);
			AddSC(ESkill.NpcAntimagic, EStatusChange.Armorchange);
			AddSC(ESkill.NpcWidecurse, EStatusChange.Curse);
			AddSC(ESkill.NpcWidestun, EStatusChange.Stun);

			AddSC(ESkill.NpcHellpower, EStatusChange.Hellpower, EStatusChangeIcon.Hellpower, EStatusCalcFlag.None);
			AddSC(ESkill.NpcWidehelldignity, EStatusChange.Hellpower, EStatusChangeIcon.Hellpower, EStatusCalcFlag.None);
			AddSC(ESkill.NpcInvincible, EStatusChange.Invincible, EStatusChangeIcon.Invincible, EStatusCalcFlag.Speed);
			AddSC(ESkill.NpcInvincibleoff, EStatusChange.Invincibleoff, EStatusChangeIcon.Blank, EStatusCalcFlag.Speed);

			AddSC(ESkill.CashBlessing, EStatusChange.Blessing, EStatusChangeIcon.Blessing, EStatusCalcFlag.Str | EStatusCalcFlag.Int | EStatusCalcFlag.Dex);
			AddSC(ESkill.CashIncagi, EStatusChange.Increaseagi, EStatusChangeIcon.Increaseagi, EStatusCalcFlag.Agi | EStatusCalcFlag.Speed);
			AddSC(ESkill.CashAssumptio, EStatusChange.Assumptio, EStatusChangeIcon.Assumptio, EStatusCalcFlag.None);

			//AddSC(ESkill.AllPartyflee,  EStatusChange.Incflee,  EStatusChangeIcon.Partyflee, EStatusCalcFlag. None);

			AddSC(ESkill.CrShrink, EStatusChange.Shrink, EStatusChangeIcon.Shrink, EStatusCalcFlag.None);
			AddSC(ESkill.RgCloseconfine, EStatusChange.Closeconfine2, EStatusChangeIcon.Closeconfine2, EStatusCalcFlag.None);
			AddSC(ESkill.RgCloseconfine, EStatusChange.Closeconfine, EStatusChangeIcon.Closeconfine, EStatusCalcFlag.Flee);
			AddSC(ESkill.WzSightblaster, EStatusChange.Sightblaster, EStatusChangeIcon.Sightblaster, EStatusCalcFlag.None);
			AddSC(ESkill.DcWinkcharm, EStatusChange.Winkcharm, EStatusChangeIcon.Winkcharm, EStatusCalcFlag.None);
			AddSC(ESkill.MoBalkyoung, EStatusChange.Stun);
			AddSC(ESkill.SaElementwater, EStatusChange.Elementalchange);
			AddSC(ESkill.SaElementfire, EStatusChange.Elementalchange);
			AddSC(ESkill.SaElementground, EStatusChange.Elementalchange);
			AddSC(ESkill.SaElementwind, EStatusChange.Elementalchange);

			AddSC(ESkill.HlifAvoid, EStatusChange.Avoid, EStatusChangeIcon.Blank, EStatusCalcFlag.Speed);
			AddSC(ESkill.HlifChange, EStatusChange.Change, EStatusChangeIcon.Blank, EStatusCalcFlag.Vit | EStatusCalcFlag.Int);
			AddSC(ESkill.HfliFleet, EStatusChange.Fleet, EStatusChangeIcon.Blank, EStatusCalcFlag.Aspd | EStatusCalcFlag.Batk | EStatusCalcFlag.Watk);
			AddSC(ESkill.HfliSpeed, EStatusChange.Speed, EStatusChangeIcon.Blank, EStatusCalcFlag.Flee);
			AddSC(ESkill.HamiDefence, EStatusChange.Defence, EStatusChangeIcon.Blank, EStatusCalcFlag.Def);
			AddSC(ESkill.HamiBloodlust, EStatusChange.Bloodlust, EStatusChangeIcon.Blank, EStatusCalcFlag.Batk | EStatusCalcFlag.Watk);

			AddSC(ESkill.MerCrash, EStatusChange.Stun);
			AddSC(ESkill.MerProvoke, EStatusChange.Provoke, EStatusChangeIcon.Provoke, EStatusCalcFlag.Def | EStatusCalcFlag.Def2 | EStatusCalcFlag.Batk | EStatusCalcFlag.Watk);
			AddSC(ESkill.MsMagnum, EStatusChange.WatkElement);
			AddSC(ESkill.MerSight, EStatusChange.Sight);
			AddSC(ESkill.MerDecagi, EStatusChange.Decreaseagi, EStatusChangeIcon.Decreaseagi, EStatusCalcFlag.Agi | EStatusCalcFlag.Speed);
			AddSC(ESkill.MerMagnificat, EStatusChange.Magnificat, EStatusChangeIcon.Magnificat, EStatusCalcFlag.Regen);
			AddSC(ESkill.MerLexdivina, EStatusChange.Silence);
			AddSC(ESkill.MaLandmine, EStatusChange.Stun);
			AddSC(ESkill.MaSandman, EStatusChange.Sleep);
			AddSC(ESkill.MaFreezingtrap, EStatusChange.Freeze);
			AddSC(ESkill.MerAutoberserk, EStatusChange.Autoberserk, EStatusChangeIcon.Autoberserk, EStatusCalcFlag.None);
			AddSC(ESkill.MlAutoguard, EStatusChange.Autoguard, EStatusChangeIcon.Autoguard, EStatusCalcFlag.None);
			AddSC(ESkill.MsReflectshield, EStatusChange.Reflectshield, EStatusChangeIcon.Reflectshield, EStatusCalcFlag.None);
			AddSC(ESkill.MlDefender, EStatusChange.Defender, EStatusChangeIcon.Defender, EStatusCalcFlag.Speed | EStatusCalcFlag.Aspd);
			AddSC(ESkill.MsParrying, EStatusChange.Parrying, EStatusChangeIcon.Parrying, EStatusCalcFlag.None);
			AddSC(ESkill.MsBerserk, EStatusChange.Berserk, EStatusChangeIcon.Berserk, EStatusCalcFlag.Def | EStatusCalcFlag.Def2 | EStatusCalcFlag.Mdef | EStatusCalcFlag.Mdef2 | EStatusCalcFlag.Flee | EStatusCalcFlag.Speed | EStatusCalcFlag.Aspd | EStatusCalcFlag.Maxhp | EStatusCalcFlag.Regen);
			AddSC(ESkill.MlSpiralpierce, EStatusChange.Stop);
			AddSC(ESkill.MerQuicken, EStatusChange.MercQuicken, EStatusChangeIcon.Blank, EStatusCalcFlag.Aspd);
			AddSC(ESkill.MlDevotion, EStatusChange.Devotion);
			AddSC(ESkill.MerKyrie, EStatusChange.Kyrie, EStatusChangeIcon.Kyrie, EStatusCalcFlag.None);
			AddSC(ESkill.MerBlessing, EStatusChange.Blessing, EStatusChangeIcon.Blessing, EStatusCalcFlag.Str | EStatusCalcFlag.Int | EStatusCalcFlag.Dex);
			AddSC(ESkill.MerIncagi, EStatusChange.Increaseagi, EStatusChangeIcon.Increaseagi, EStatusCalcFlag.Agi | EStatusCalcFlag.Speed);

			AddSC(ESkill.GdLeadership, EStatusChange.Guildaura, EStatusChangeIcon.Blank, EStatusCalcFlag.Str | EStatusCalcFlag.Agi | EStatusCalcFlag.Vit | EStatusCalcFlag.Dex);
			AddSC(ESkill.GdBattleorder, EStatusChange.Battleorders, EStatusChangeIcon.Blank, EStatusCalcFlag.Str | EStatusCalcFlag.Int | EStatusCalcFlag.Dex);
			AddSC(ESkill.GdRegeneration, EStatusChange.Regeneration, EStatusChangeIcon.Blank, EStatusCalcFlag.Regen);


			// Storing the target job rather than simply SC_SPIRIT simplifies code later on
			SkillStatusChangeTable[(int)ESkill.SlAlchemist] = (EStatusChange)EClass.Alchemist;
			SkillStatusChangeTable[(int)ESkill.SlMonk] = (EStatusChange)EClass.Monk;
			SkillStatusChangeTable[(int)ESkill.SlStar] = (EStatusChange)EClass.StarGladiator;
			SkillStatusChangeTable[(int)ESkill.SlSage] = (EStatusChange)EClass.Sage;
			SkillStatusChangeTable[(int)ESkill.SlCrusader] = (EStatusChange)EClass.Crusader;
			SkillStatusChangeTable[(int)ESkill.SlSupernovice] = (EStatusChange)EClass.Super_Novice;
			SkillStatusChangeTable[(int)ESkill.SlKnight] = (EStatusChange)EClass.Knight;
			SkillStatusChangeTable[(int)ESkill.SlWizard] = (EStatusChange)EClass.Wizard;
			SkillStatusChangeTable[(int)ESkill.SlPriest] = (EStatusChange)EClass.Priest;
			SkillStatusChangeTable[(int)ESkill.SlBarddancer] = (EStatusChange)EClass.Barddancer;
			SkillStatusChangeTable[(int)ESkill.SlRogue] = (EStatusChange)EClass.Rogue;
			SkillStatusChangeTable[(int)ESkill.SlAssasin] = (EStatusChange)EClass.Assassin;
			SkillStatusChangeTable[(int)ESkill.SlBlacksmith] = (EStatusChange)EClass.Blacksmith;
			SkillStatusChangeTable[(int)ESkill.SlHunter] = (EStatusChange)EClass.Hunter;
			SkillStatusChangeTable[(int)ESkill.SlSoullinker] = (EStatusChange)EClass.SoulLinker;


			// Status that don't have a skill associated
			StatusIconChangeTable[(int)EStatusChange.Weight50] = EStatusChangeIcon.Weight50;
			StatusIconChangeTable[(int)EStatusChange.Weight90] = EStatusChangeIcon.Weight90;
			StatusIconChangeTable[(int)EStatusChange.Aspdpotion0] = EStatusChangeIcon.Aspdpotion0;
			StatusIconChangeTable[(int)EStatusChange.Aspdpotion1] = EStatusChangeIcon.Aspdpotion1;
			StatusIconChangeTable[(int)EStatusChange.Aspdpotion2] = EStatusChangeIcon.Aspdpotion2;
			StatusIconChangeTable[(int)EStatusChange.Aspdpotion3] = EStatusChangeIcon.Aspdpotioninfinity;
			StatusIconChangeTable[(int)EStatusChange.Speedup0] = EStatusChangeIcon.MovhasteHorse;
			StatusIconChangeTable[(int)EStatusChange.Speedup1] = EStatusChangeIcon.Speedpotion1;
			StatusIconChangeTable[(int)EStatusChange.Incstr] = EStatusChangeIcon.Incstr;
			StatusIconChangeTable[(int)EStatusChange.Miracle] = EStatusChangeIcon.Spirit;
			StatusIconChangeTable[(int)EStatusChange.Intravision] = EStatusChangeIcon.Intravision;
			StatusIconChangeTable[(int)EStatusChange.Strfood] = EStatusChangeIcon.Foodstr;
			StatusIconChangeTable[(int)EStatusChange.Agifood] = EStatusChangeIcon.Foodagi;
			StatusIconChangeTable[(int)EStatusChange.Vitfood] = EStatusChangeIcon.Foodvit;
			StatusIconChangeTable[(int)EStatusChange.Intfood] = EStatusChangeIcon.Foodint;
			StatusIconChangeTable[(int)EStatusChange.Dexfood] = EStatusChangeIcon.Fooddex;
			StatusIconChangeTable[(int)EStatusChange.Lukfood] = EStatusChangeIcon.Foodluk;
			StatusIconChangeTable[(int)EStatusChange.Fleefood] = EStatusChangeIcon.Foodflee;
			StatusIconChangeTable[(int)EStatusChange.Hitfood] = EStatusChangeIcon.Foodhit;
			StatusIconChangeTable[(int)EStatusChange.ManuAtk] = EStatusChangeIcon.ManuAtk;
			StatusIconChangeTable[(int)EStatusChange.ManuDef] = EStatusChangeIcon.ManuDef;
			StatusIconChangeTable[(int)EStatusChange.SplAtk] = EStatusChangeIcon.SplAtk;
			StatusIconChangeTable[(int)EStatusChange.SplDef] = EStatusChangeIcon.SplDef;
			StatusIconChangeTable[(int)EStatusChange.ManuMatk] = EStatusChangeIcon.ManuMatk;
			StatusIconChangeTable[(int)EStatusChange.SplMatk] = EStatusChangeIcon.SplMatk;

			// Cash items
			StatusIconChangeTable[(int)EStatusChange.FoodStrCash] = EStatusChangeIcon.FoodStrCash;
			StatusIconChangeTable[(int)EStatusChange.FoodAgiCash] = EStatusChangeIcon.FoodAgiCash;
			StatusIconChangeTable[(int)EStatusChange.FoodVitCash] = EStatusChangeIcon.FoodVitCash;
			StatusIconChangeTable[(int)EStatusChange.FoodDexCash] = EStatusChangeIcon.FoodDexCash;
			StatusIconChangeTable[(int)EStatusChange.FoodIntCash] = EStatusChangeIcon.FoodIntCash;
			StatusIconChangeTable[(int)EStatusChange.FoodLukCash] = EStatusChangeIcon.FoodLukCash;
			StatusIconChangeTable[(int)EStatusChange.Expboost] = EStatusChangeIcon.Expboost;
			StatusIconChangeTable[(int)EStatusChange.Itemboost] = EStatusChangeIcon.Itemboost;
			StatusIconChangeTable[(int)EStatusChange.Jexpboost] = EStatusChangeIcon.CashPlusonlyjobexp;
			StatusIconChangeTable[(int)EStatusChange.Lifeinsurance] = EStatusChangeIcon.Lifeinsurance;
			StatusIconChangeTable[(int)EStatusChange.Bossmapinfo] = EStatusChangeIcon.Bossmapinfo;
			StatusIconChangeTable[(int)EStatusChange.DefRate] = EStatusChangeIcon.DefRate;
			StatusIconChangeTable[(int)EStatusChange.MdefRate] = EStatusChangeIcon.MdefRate;
			StatusIconChangeTable[(int)EStatusChange.Inccri] = EStatusChangeIcon.Inccri;
			StatusIconChangeTable[(int)EStatusChange.Incflee2] = EStatusChangeIcon.Plusavoidvalue;
			StatusIconChangeTable[(int)EStatusChange.Inchealrate] = EStatusChangeIcon.Inchealrate;
			StatusIconChangeTable[(int)EStatusChange.SLifepotion] = EStatusChangeIcon.SLifepotion;
			StatusIconChangeTable[(int)EStatusChange.LLifepotion] = EStatusChangeIcon.LLifepotion;
			StatusIconChangeTable[(int)EStatusChange.SpcostRate] = EStatusChangeIcon.AtkerBlood;
			StatusIconChangeTable[(int)EStatusChange.CommonscResist] = EStatusChangeIcon.TargetBlood;

			// Mercenary bonus
			StatusIconChangeTable[(int)EStatusChange.MercFleeup] = EStatusChangeIcon.MercFleeup;
			StatusIconChangeTable[(int)EStatusChange.MercAtkup] = EStatusChangeIcon.MercAtkup;
			StatusIconChangeTable[(int)EStatusChange.MercHpup] = EStatusChangeIcon.MercHpup;
			StatusIconChangeTable[(int)EStatusChange.MercSpup] = EStatusChangeIcon.MercSpup;
			StatusIconChangeTable[(int)EStatusChange.MercHitup] = EStatusChangeIcon.MercHitup;

			// Other SC which are not necessarily associated to skills
			StatusChangeFlagTable[(int)EStatusChange.Aspdpotion0] = EStatusCalcFlag.Aspd;
			StatusChangeFlagTable[(int)EStatusChange.Aspdpotion1] = EStatusCalcFlag.Aspd;
			StatusChangeFlagTable[(int)EStatusChange.Aspdpotion2] = EStatusCalcFlag.Aspd;
			StatusChangeFlagTable[(int)EStatusChange.Aspdpotion3] = EStatusCalcFlag.Aspd;
			StatusChangeFlagTable[(int)EStatusChange.Speedup0] = EStatusCalcFlag.Speed;
			StatusChangeFlagTable[(int)EStatusChange.Speedup1] = EStatusCalcFlag.Speed;
			StatusChangeFlagTable[(int)EStatusChange.Atkpotion] = EStatusCalcFlag.Batk;
			StatusChangeFlagTable[(int)EStatusChange.Matkpotion] = EStatusCalcFlag.Matk;
			StatusChangeFlagTable[(int)EStatusChange.Incallstatus] |= EStatusCalcFlag.Str | EStatusCalcFlag.Agi | EStatusCalcFlag.Vit | EStatusCalcFlag.Int | EStatusCalcFlag.Dex | EStatusCalcFlag.Luk;
			StatusChangeFlagTable[(int)EStatusChange.Incstr] |= EStatusCalcFlag.Str;
			StatusChangeFlagTable[(int)EStatusChange.Incagi] |= EStatusCalcFlag.Agi;
			StatusChangeFlagTable[(int)EStatusChange.Incvit] |= EStatusCalcFlag.Vit;
			StatusChangeFlagTable[(int)EStatusChange.Incint] |= EStatusCalcFlag.Int;
			StatusChangeFlagTable[(int)EStatusChange.Incdex] |= EStatusCalcFlag.Dex;
			StatusChangeFlagTable[(int)EStatusChange.Incluk] |= EStatusCalcFlag.Luk;
			StatusChangeFlagTable[(int)EStatusChange.Inchit] |= EStatusCalcFlag.Hit;
			StatusChangeFlagTable[(int)EStatusChange.Inchitrate] |= EStatusCalcFlag.Hit;
			StatusChangeFlagTable[(int)EStatusChange.Incflee] |= EStatusCalcFlag.Flee;
			StatusChangeFlagTable[(int)EStatusChange.Incfleerate] |= EStatusCalcFlag.Flee;
			StatusChangeFlagTable[(int)EStatusChange.Inccri] |= EStatusCalcFlag.Cri;
			StatusChangeFlagTable[(int)EStatusChange.Incflee2] |= EStatusCalcFlag.Flee2;
			StatusChangeFlagTable[(int)EStatusChange.Incmhprate] |= EStatusCalcFlag.Maxhp;
			StatusChangeFlagTable[(int)EStatusChange.Incmsprate] |= EStatusCalcFlag.Maxsp;
			StatusChangeFlagTable[(int)EStatusChange.Incatkrate] |= EStatusCalcFlag.Batk | EStatusCalcFlag.Watk;
			StatusChangeFlagTable[(int)EStatusChange.Incmatkrate] |= EStatusCalcFlag.Matk;
			StatusChangeFlagTable[(int)EStatusChange.Incdefrate] |= EStatusCalcFlag.Def;
			StatusChangeFlagTable[(int)EStatusChange.Strfood] |= EStatusCalcFlag.Str;
			StatusChangeFlagTable[(int)EStatusChange.Agifood] |= EStatusCalcFlag.Agi;
			StatusChangeFlagTable[(int)EStatusChange.Vitfood] |= EStatusCalcFlag.Vit;
			StatusChangeFlagTable[(int)EStatusChange.Intfood] |= EStatusCalcFlag.Int;
			StatusChangeFlagTable[(int)EStatusChange.Dexfood] |= EStatusCalcFlag.Dex;
			StatusChangeFlagTable[(int)EStatusChange.Lukfood] |= EStatusCalcFlag.Luk;
			StatusChangeFlagTable[(int)EStatusChange.Hitfood] |= EStatusCalcFlag.Hit;
			StatusChangeFlagTable[(int)EStatusChange.Fleefood] |= EStatusCalcFlag.Flee;
			StatusChangeFlagTable[(int)EStatusChange.Batkfood] |= EStatusCalcFlag.Batk;
			StatusChangeFlagTable[(int)EStatusChange.Watkfood] |= EStatusCalcFlag.Watk;
			StatusChangeFlagTable[(int)EStatusChange.Matkfood] |= EStatusCalcFlag.Matk;
			StatusChangeFlagTable[(int)EStatusChange.ArmorElement] |= EStatusCalcFlag.All;
			StatusChangeFlagTable[(int)EStatusChange.ArmorResist] |= EStatusCalcFlag.All;
			StatusChangeFlagTable[(int)EStatusChange.SpcostRate] |= EStatusCalcFlag.All;
			StatusChangeFlagTable[(int)EStatusChange.Walkspeed] |= EStatusCalcFlag.Speed;
			StatusChangeFlagTable[(int)EStatusChange.Itemscript] |= EStatusCalcFlag.All;
			// Cash items
			StatusChangeFlagTable[(int)EStatusChange.FoodStrCash] = EStatusCalcFlag.Str;
			StatusChangeFlagTable[(int)EStatusChange.FoodAgiCash] = EStatusCalcFlag.Agi;
			StatusChangeFlagTable[(int)EStatusChange.FoodVitCash] = EStatusCalcFlag.Vit;
			StatusChangeFlagTable[(int)EStatusChange.FoodDexCash] = EStatusCalcFlag.Dex;
			StatusChangeFlagTable[(int)EStatusChange.FoodIntCash] = EStatusCalcFlag.Int;
			StatusChangeFlagTable[(int)EStatusChange.FoodLukCash] = EStatusCalcFlag.Luk;
			// Mercenary bonus
			StatusChangeFlagTable[(int)EStatusChange.MercFleeup] |= EStatusCalcFlag.Flee;
			StatusChangeFlagTable[(int)EStatusChange.MercAtkup] |= EStatusCalcFlag.Watk;
			StatusChangeFlagTable[(int)EStatusChange.MercHpup] |= EStatusCalcFlag.Maxhp;
			StatusChangeFlagTable[(int)EStatusChange.MercSpup] |= EStatusCalcFlag.Maxsp;
			StatusChangeFlagTable[(int)EStatusChange.MercHitup] |= EStatusCalcFlag.Hit;

			if (Config.DisplayHallucination == false) {
				StatusIconChangeTable[(int)EStatusChange.Hallucination] = EStatusChangeIcon.Blank;
			}
		}