|
|
|
|
@@ -90,7 +90,7 @@ void HandleAction_UseMove(void)
|
|
|
|
|
|
|
|
|
|
gCritMultiplier = 1;
|
|
|
|
|
gBattleScripting.dmgMultiplier = 1;
|
|
|
|
|
gBattleStruct->atkCancellerTracker = 0;
|
|
|
|
|
gBattleStruct->atkCancelerTracker = 0;
|
|
|
|
|
gMoveResultFlags = 0;
|
|
|
|
|
gMultiHitCounter = 0;
|
|
|
|
|
gBattleCommunication[MISS_TYPE] = 0;
|
|
|
|
|
@@ -1982,37 +1982,37 @@ void TryClearRageStatuses(void)
|
|
|
|
|
|
|
|
|
|
enum
|
|
|
|
|
{
|
|
|
|
|
CANCELLER_FLAGS,
|
|
|
|
|
CANCELLER_ASLEEP,
|
|
|
|
|
CANCELLER_FROZEN,
|
|
|
|
|
CANCELLER_TRUANT,
|
|
|
|
|
CANCELLER_RECHARGE,
|
|
|
|
|
CANCELLER_FLINCH,
|
|
|
|
|
CANCELLER_DISABLED,
|
|
|
|
|
CANCELLER_TAUNTED,
|
|
|
|
|
CANCELLER_IMPRISONED,
|
|
|
|
|
CANCELLER_CONFUSED,
|
|
|
|
|
CANCELLER_PARALYSED,
|
|
|
|
|
CANCELLER_IN_LOVE,
|
|
|
|
|
CANCELLER_BIDE,
|
|
|
|
|
CANCELLER_THAW,
|
|
|
|
|
CANCELLER_END,
|
|
|
|
|
CANCELER_FLAGS,
|
|
|
|
|
CANCELER_ASLEEP,
|
|
|
|
|
CANCELER_FROZEN,
|
|
|
|
|
CANCELER_TRUANT,
|
|
|
|
|
CANCELER_RECHARGE,
|
|
|
|
|
CANCELER_FLINCH,
|
|
|
|
|
CANCELER_DISABLED,
|
|
|
|
|
CANCELER_TAUNTED,
|
|
|
|
|
CANCELER_IMPRISONED,
|
|
|
|
|
CANCELER_CONFUSED,
|
|
|
|
|
CANCELER_PARALYSED,
|
|
|
|
|
CANCELER_IN_LOVE,
|
|
|
|
|
CANCELER_BIDE,
|
|
|
|
|
CANCELER_THAW,
|
|
|
|
|
CANCELER_END,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
u8 AtkCanceller_UnableToUseMove(void)
|
|
|
|
|
u8 AtkCanceler_UnableToUseMove(void)
|
|
|
|
|
{
|
|
|
|
|
u8 effect = 0;
|
|
|
|
|
s32 *bideDmg = &gBattleScripting.bideDmg;
|
|
|
|
|
do
|
|
|
|
|
{
|
|
|
|
|
switch (gBattleStruct->atkCancellerTracker)
|
|
|
|
|
switch (gBattleStruct->atkCancelerTracker)
|
|
|
|
|
{
|
|
|
|
|
case CANCELLER_FLAGS: // flags clear
|
|
|
|
|
case CANCELER_FLAGS: // flags clear
|
|
|
|
|
gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_DESTINY_BOND;
|
|
|
|
|
gStatuses3[gBattlerAttacker] &= ~STATUS3_GRUDGE;
|
|
|
|
|
gBattleStruct->atkCancellerTracker++;
|
|
|
|
|
gBattleStruct->atkCancelerTracker++;
|
|
|
|
|
break;
|
|
|
|
|
case CANCELLER_ASLEEP: // check being asleep
|
|
|
|
|
case CANCELER_ASLEEP: // check being asleep
|
|
|
|
|
if (gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP)
|
|
|
|
|
{
|
|
|
|
|
if (UproarWakeUpCheck(gBattlerAttacker))
|
|
|
|
|
@@ -2054,9 +2054,9 @@ u8 AtkCanceller_UnableToUseMove(void)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
gBattleStruct->atkCancellerTracker++;
|
|
|
|
|
gBattleStruct->atkCancelerTracker++;
|
|
|
|
|
break;
|
|
|
|
|
case CANCELLER_FROZEN: // check being frozen
|
|
|
|
|
case CANCELER_FROZEN: // check being frozen
|
|
|
|
|
if (gBattleMons[gBattlerAttacker].status1 & STATUS1_FREEZE)
|
|
|
|
|
{
|
|
|
|
|
if (Random() % 5)
|
|
|
|
|
@@ -2068,7 +2068,7 @@ u8 AtkCanceller_UnableToUseMove(void)
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
gBattleStruct->atkCancellerTracker++;
|
|
|
|
|
gBattleStruct->atkCancelerTracker++;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@@ -2081,9 +2081,9 @@ u8 AtkCanceller_UnableToUseMove(void)
|
|
|
|
|
}
|
|
|
|
|
effect = 2;
|
|
|
|
|
}
|
|
|
|
|
gBattleStruct->atkCancellerTracker++;
|
|
|
|
|
gBattleStruct->atkCancelerTracker++;
|
|
|
|
|
break;
|
|
|
|
|
case CANCELLER_TRUANT: // truant
|
|
|
|
|
case CANCELER_TRUANT: // truant
|
|
|
|
|
if (gBattleMons[gBattlerAttacker].ability == ABILITY_TRUANT && gDisableStructs[gBattlerAttacker].truantCounter)
|
|
|
|
|
{
|
|
|
|
|
CancelMultiTurnMoves(gBattlerAttacker);
|
|
|
|
|
@@ -2093,9 +2093,9 @@ u8 AtkCanceller_UnableToUseMove(void)
|
|
|
|
|
gMoveResultFlags |= MOVE_RESULT_MISSED;
|
|
|
|
|
effect = 1;
|
|
|
|
|
}
|
|
|
|
|
gBattleStruct->atkCancellerTracker++;
|
|
|
|
|
gBattleStruct->atkCancelerTracker++;
|
|
|
|
|
break;
|
|
|
|
|
case CANCELLER_RECHARGE: // recharge
|
|
|
|
|
case CANCELER_RECHARGE: // recharge
|
|
|
|
|
if (gBattleMons[gBattlerAttacker].status2 & STATUS2_RECHARGE)
|
|
|
|
|
{
|
|
|
|
|
gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_RECHARGE;
|
|
|
|
|
@@ -2105,9 +2105,9 @@ u8 AtkCanceller_UnableToUseMove(void)
|
|
|
|
|
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
|
|
|
|
|
effect = 1;
|
|
|
|
|
}
|
|
|
|
|
gBattleStruct->atkCancellerTracker++;
|
|
|
|
|
gBattleStruct->atkCancelerTracker++;
|
|
|
|
|
break;
|
|
|
|
|
case CANCELLER_FLINCH: // flinch
|
|
|
|
|
case CANCELER_FLINCH: // flinch
|
|
|
|
|
if (gBattleMons[gBattlerAttacker].status2 & STATUS2_FLINCHED)
|
|
|
|
|
{
|
|
|
|
|
gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_FLINCHED;
|
|
|
|
|
@@ -2117,9 +2117,9 @@ u8 AtkCanceller_UnableToUseMove(void)
|
|
|
|
|
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
|
|
|
|
|
effect = 1;
|
|
|
|
|
}
|
|
|
|
|
gBattleStruct->atkCancellerTracker++;
|
|
|
|
|
gBattleStruct->atkCancelerTracker++;
|
|
|
|
|
break;
|
|
|
|
|
case CANCELLER_DISABLED: // disabled move
|
|
|
|
|
case CANCELER_DISABLED: // disabled move
|
|
|
|
|
if (gDisableStructs[gBattlerAttacker].disabledMove == gCurrentMove && gDisableStructs[gBattlerAttacker].disabledMove != MOVE_NONE)
|
|
|
|
|
{
|
|
|
|
|
gProtectStructs[gBattlerAttacker].usedDisabledMove = 1;
|
|
|
|
|
@@ -2129,9 +2129,9 @@ u8 AtkCanceller_UnableToUseMove(void)
|
|
|
|
|
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
|
|
|
|
|
effect = 1;
|
|
|
|
|
}
|
|
|
|
|
gBattleStruct->atkCancellerTracker++;
|
|
|
|
|
gBattleStruct->atkCancelerTracker++;
|
|
|
|
|
break;
|
|
|
|
|
case CANCELLER_TAUNTED: // taunt
|
|
|
|
|
case CANCELER_TAUNTED: // taunt
|
|
|
|
|
if (gDisableStructs[gBattlerAttacker].tauntTimer && gBattleMoves[gCurrentMove].power == 0)
|
|
|
|
|
{
|
|
|
|
|
gProtectStructs[gBattlerAttacker].usedTauntedMove = 1;
|
|
|
|
|
@@ -2140,9 +2140,9 @@ u8 AtkCanceller_UnableToUseMove(void)
|
|
|
|
|
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
|
|
|
|
|
effect = 1;
|
|
|
|
|
}
|
|
|
|
|
gBattleStruct->atkCancellerTracker++;
|
|
|
|
|
gBattleStruct->atkCancelerTracker++;
|
|
|
|
|
break;
|
|
|
|
|
case CANCELLER_IMPRISONED: // imprisoned
|
|
|
|
|
case CANCELER_IMPRISONED: // imprisoned
|
|
|
|
|
if (GetImprisonedMovesCount(gBattlerAttacker, gCurrentMove))
|
|
|
|
|
{
|
|
|
|
|
gProtectStructs[gBattlerAttacker].usedImprisonedMove = 1;
|
|
|
|
|
@@ -2151,9 +2151,9 @@ u8 AtkCanceller_UnableToUseMove(void)
|
|
|
|
|
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
|
|
|
|
|
effect = 1;
|
|
|
|
|
}
|
|
|
|
|
gBattleStruct->atkCancellerTracker++;
|
|
|
|
|
gBattleStruct->atkCancelerTracker++;
|
|
|
|
|
break;
|
|
|
|
|
case CANCELLER_CONFUSED: // confusion
|
|
|
|
|
case CANCELER_CONFUSED: // confusion
|
|
|
|
|
if (gBattleMons[gBattlerAttacker].status2 & STATUS2_CONFUSION)
|
|
|
|
|
{
|
|
|
|
|
gBattleMons[gBattlerAttacker].status2 -= STATUS2_CONFUSION_TURN(1);
|
|
|
|
|
@@ -2183,9 +2183,9 @@ u8 AtkCanceller_UnableToUseMove(void)
|
|
|
|
|
}
|
|
|
|
|
effect = 1;
|
|
|
|
|
}
|
|
|
|
|
gBattleStruct->atkCancellerTracker++;
|
|
|
|
|
gBattleStruct->atkCancelerTracker++;
|
|
|
|
|
break;
|
|
|
|
|
case CANCELLER_PARALYSED: // paralysis
|
|
|
|
|
case CANCELER_PARALYSED: // paralysis
|
|
|
|
|
if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_PARALYSIS) && (Random() % 4) == 0)
|
|
|
|
|
{
|
|
|
|
|
gProtectStructs[gBattlerAttacker].prlzImmobility = 1;
|
|
|
|
|
@@ -2195,9 +2195,9 @@ u8 AtkCanceller_UnableToUseMove(void)
|
|
|
|
|
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
|
|
|
|
|
effect = 1;
|
|
|
|
|
}
|
|
|
|
|
gBattleStruct->atkCancellerTracker++;
|
|
|
|
|
gBattleStruct->atkCancelerTracker++;
|
|
|
|
|
break;
|
|
|
|
|
case CANCELLER_IN_LOVE: // infatuation
|
|
|
|
|
case CANCELER_IN_LOVE: // infatuation
|
|
|
|
|
if (gBattleMons[gBattlerAttacker].status2 & STATUS2_INFATUATION)
|
|
|
|
|
{
|
|
|
|
|
gBattleScripting.battler = CountTrailingZeroBits((gBattleMons[gBattlerAttacker].status2 & STATUS2_INFATUATION) >> 0x10);
|
|
|
|
|
@@ -2215,9 +2215,9 @@ u8 AtkCanceller_UnableToUseMove(void)
|
|
|
|
|
gBattlescriptCurrInstr = BattleScript_MoveUsedIsInLove;
|
|
|
|
|
effect = 1;
|
|
|
|
|
}
|
|
|
|
|
gBattleStruct->atkCancellerTracker++;
|
|
|
|
|
gBattleStruct->atkCancelerTracker++;
|
|
|
|
|
break;
|
|
|
|
|
case CANCELLER_BIDE: // bide
|
|
|
|
|
case CANCELER_BIDE: // bide
|
|
|
|
|
if (gBattleMons[gBattlerAttacker].status2 & STATUS2_BIDE)
|
|
|
|
|
{
|
|
|
|
|
gBattleMons[gBattlerAttacker].status2 -= STATUS2_BIDE_TURN(1);
|
|
|
|
|
@@ -2245,9 +2245,9 @@ u8 AtkCanceller_UnableToUseMove(void)
|
|
|
|
|
}
|
|
|
|
|
effect = 1;
|
|
|
|
|
}
|
|
|
|
|
gBattleStruct->atkCancellerTracker++;
|
|
|
|
|
gBattleStruct->atkCancelerTracker++;
|
|
|
|
|
break;
|
|
|
|
|
case CANCELLER_THAW: // move thawing
|
|
|
|
|
case CANCELER_THAW: // move thawing
|
|
|
|
|
if (gBattleMons[gBattlerAttacker].status1 & STATUS1_FREEZE)
|
|
|
|
|
{
|
|
|
|
|
if (gBattleMoves[gCurrentMove].effect == EFFECT_THAW_HIT)
|
|
|
|
|
@@ -2259,13 +2259,13 @@ u8 AtkCanceller_UnableToUseMove(void)
|
|
|
|
|
}
|
|
|
|
|
effect = 2;
|
|
|
|
|
}
|
|
|
|
|
gBattleStruct->atkCancellerTracker++;
|
|
|
|
|
gBattleStruct->atkCancelerTracker++;
|
|
|
|
|
break;
|
|
|
|
|
case CANCELLER_END:
|
|
|
|
|
case CANCELER_END:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} while (gBattleStruct->atkCancellerTracker != CANCELLER_END && effect == 0);
|
|
|
|
|
} while (gBattleStruct->atkCancelerTracker != CANCELER_END && effect == 0);
|
|
|
|
|
|
|
|
|
|
if (effect == 2)
|
|
|
|
|
{
|
|
|
|
|
|