기드라에서 각종 변수 구조체 등을 다 이름을 붙였을 때 나타나는 데미지 계산 공식이다.
void Tornado(void)
{
if (ARMY2_UNITTYPE == 비병) {
BonusSpellDamage = 1;
}
/* (LV /2 + Force1_SP) * 2 */
ApplySpellDamage_MDF((((int)(uint)FORCE1_LV >> 1) + (uint)FORCE1_SP) * 2);
return;
}
예시) 토네이도 마법. 대상 유닛이 비병이면 보너스 스펠데미지를 1로 한다.
해당 타겟에게 (레벨>>2 + 마법사용자의 마력(유닛티어값(파이터=>1,로드=>2))) *2
데미지를 마방에 따라 가하라는 명령 호출.
void __cdecl ApplySpellDamage_MDF(int damage)
{
BOOL BVar1;
int real_damage;
BVar1 = check_search_condition_magic_immune(FORCE2);
if ((BVar1 == 0) && (100 - (uint)FORCE1_2_MDF != 0)) {
real_damage = (uint)BonusSpellDamage +
SpellDamage_Item + (int)(damage * (100 - (uint)FORCE1_2_MDF)) / 100;
if (real_damage == 0) {
/* damage bound [1,HP] */
real_damage = 1;
}
if ((char)FORCE2->Army[ARMY2_NUMBER].HP < real_damage) {
real_damage = (int)(char)FORCE2->Army[ARMY2_NUMBER].HP;
}
AccumSpellEfect = AccumSpellEfect + (char)real_damage;
AccumSpellTarget = AccumSpellTarget + 1;
if ((_run_flag_apply == 1) &&
(FORCE2->Army[ARMY2_NUMBER].HP = FORCE2->Army[ARMY2_NUMBER].HP - (char)real_damage,
FORCE2->Army[ARMY2_NUMBER].HP == 0)) {
killed_target_logic();
}
}
return;
}
그러나 호출하는 곳이 많아서 나중으로.