이 블로그 검색

2024년 11월 17일 일요일

랑그릿사2 리버싱(PC판) - 마법 데미지.

 기드라에서 각종 변수 구조체 등을 다 이름을 붙였을 때 나타나는 데미지 계산 공식이다.

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;

}

1. 보너스 스펠데미지 (토네이도 썬더 )  +   스펠 데미지 아이템(완드 등) + 마법마다 정해진
마법데미지 * (100-마방)%    
2. 데미지가 0이면 1로 강제 변경.
3. 데미지가  HP보다 크면 HP로 변경.

<<
- 총데미지 총타겟수 추가 ( 범위마법 루프를 위한)
>>
4. ai계산용으로 데미지 계산식을 쓰기위함인지 실제 실행하는지를 플레그체크 후 데미지 및 유닛 죽이기 로직 작동. 
  AccumSpell Effect와 Target을 따라가면 적군 아군 마법 AI계산쪽을 찾을 것으로 예측.

그러나 호출하는 곳이 많아서 나중으로.


댓글 없음:

댓글 쓰기

가장 많이 본 글