Advertisement
Piexplode

Cmd_typecalc

Jan 20th, 2024
966
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.63 KB | None | 0 0
  1. static void Cmd_typecalc(void)
  2. {
  3.     s32 i = 0;
  4.     u8 moveType;
  5.  
  6.     if (gCurrentMove == MOVE_STRUGGLE)
  7.     {
  8.         gBattlescriptCurrInstr++;
  9.         return;
  10.     }
  11.  
  12.     GET_MOVE_TYPE(gCurrentMove, moveType);
  13.  
  14.     // check stab
  15.     if (IS_BATTLER_OF_TYPE(gBattlerAttacker, moveType))
  16.     {
  17.         gBattleMoveDamage = gBattleMoveDamage * 15;
  18.         gBattleMoveDamage = gBattleMoveDamage / 10;
  19.     }
  20.  
  21.     if (gBattleMons[gBattlerTarget].ability == ABILITY_LEVITATE && moveType == TYPE_GROUND)
  22.     {
  23.         gLastUsedAbility = gBattleMons[gBattlerTarget].ability;
  24.         gMoveResultFlags |= (MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE);
  25.         gLastLandedMoves[gBattlerTarget] = 0;
  26.         gLastHitByType[gBattlerTarget] = 0;
  27.         gBattleCommunication[MISS_TYPE] = B_MSG_GROUND_MISS;
  28.         RecordAbilityBattle(gBattlerTarget, gLastUsedAbility);
  29.     }
  30.     else
  31.     {
  32.         while (TYPE_EFFECT_ATK_TYPE(i) != TYPE_ENDTABLE)
  33.         {
  34.             if (TYPE_EFFECT_ATK_TYPE(i) == TYPE_FORESIGHT)
  35.             {
  36.                 if (gBattleMons[gBattlerTarget].status2 & STATUS2_FORESIGHT)
  37.                     break;
  38.                 i += 3;
  39.                 continue;
  40.             }
  41.             else if (TYPE_EFFECT_ATK_TYPE(i) == moveType)
  42.             {
  43.                 // check type1
  44.                 if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type1)
  45.                     ModulateDmgByType(TYPE_EFFECT_MULTIPLIER(i));
  46.                 // check type2
  47.                 if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type2 &&
  48.                     gBattleMons[gBattlerTarget].type1 != gBattleMons[gBattlerTarget].type2)
  49.                     ModulateDmgByType(TYPE_EFFECT_MULTIPLIER(i));
  50.             }
  51.             i += 3;
  52.         }
  53.     }
  54.  
  55.     if (gBattleMons[gBattlerTarget].ability == ABILITY_WONDER_GUARD && AttacksThisTurn(gBattlerAttacker, gCurrentMove) == 2
  56.      && (!(gMoveResultFlags & MOVE_RESULT_SUPER_EFFECTIVE) || ((gMoveResultFlags & (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE)) == (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE)))
  57.      && gBattleMoves[gCurrentMove].power)
  58.     {
  59.         gLastUsedAbility = ABILITY_WONDER_GUARD;
  60.         gMoveResultFlags |= MOVE_RESULT_MISSED;
  61.         gLastLandedMoves[gBattlerTarget] = 0;
  62.         gLastHitByType[gBattlerTarget] = 0;
  63.         gBattleCommunication[MISS_TYPE] = B_MSG_AVOIDED_DMG;
  64.         RecordAbilityBattle(gBattlerTarget, gLastUsedAbility);
  65.     }
  66.     if (gMoveResultFlags & MOVE_RESULT_DOESNT_AFFECT_FOE)
  67.         gProtectStructs[gBattlerAttacker].targetNotAffected = 1;
  68.  
  69.     gBattlescriptCurrInstr++;
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement