mirror of
https://github.com/pret/pokeemerald.git
synced 2026-04-24 23:28:16 -05:00
Clean up for touchedProtectLike (#8699)
This commit is contained in:
parent
a65194be5b
commit
ad2eb18364
|
|
@ -89,7 +89,6 @@ struct ProtectStruct
|
|||
u32 palaceUnableToUseMove:1;
|
||||
u32 statRaised:1;
|
||||
u32 usedCustapBerry:1; // also quick claw
|
||||
u32 touchedProtectLike:1;
|
||||
u32 disableEjectPack:1;
|
||||
u32 pranksterElevated:1;
|
||||
u32 quickDraw:1;
|
||||
|
|
@ -103,6 +102,7 @@ struct ProtectStruct
|
|||
u32 forcedSwitch:1;
|
||||
u32 myceliumMight:1;
|
||||
u32 survivedOHKO:1; // Used to keep track of effects that allow focus punch when surviving moves like Fissure
|
||||
u32 padding1:1;
|
||||
// End of 32-bit bitfield
|
||||
u16 helpingHand:3;
|
||||
u16 revengeDoubled:4;
|
||||
|
|
|
|||
|
|
@ -1304,8 +1304,6 @@ static void Cmd_attackcanceler(void)
|
|||
&& (moveEffect != EFFECT_CURSE || IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST))
|
||||
&& (!gBattleMoveEffects[moveEffect].twoTurnEffect || (gBattleMons[gBattlerAttacker].volatiles.multipleTurns)))
|
||||
{
|
||||
if (!CanBattlerAvoidContactEffects(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), GetBattlerHoldEffect(gBattlerAttacker), gCurrentMove))
|
||||
gProtectStructs[gBattlerAttacker].touchedProtectLike = TRUE;
|
||||
CancelMultiTurnMoves(gBattlerAttacker, SKY_DROP_ATTACKCANCELER_CHECK);
|
||||
gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED;
|
||||
gLastLandedMoves[gBattlerTarget] = 0;
|
||||
|
|
@ -1320,12 +1318,6 @@ static void Cmd_attackcanceler(void)
|
|||
gBattleCommunication[MISS_TYPE] = B_MSG_PROTECTED;
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
}
|
||||
else if (IsBattlerUsingBeakBlast(gBattlerTarget)
|
||||
&& !CanBattlerAvoidContactEffects(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), GetBattlerHoldEffect(gBattlerAttacker), gCurrentMove))
|
||||
{
|
||||
gProtectStructs[gBattlerAttacker].touchedProtectLike = TRUE;
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
|
|
@ -5373,15 +5365,6 @@ static u32 GetNextTarget(u32 moveTarget, bool32 excludeCurrent)
|
|||
return battler;
|
||||
}
|
||||
|
||||
static inline bool32 IsProtectivePadsProtected(u32 battler, enum HoldEffect holdEffect)
|
||||
{
|
||||
if (holdEffect != HOLD_EFFECT_PROTECTIVE_PADS)
|
||||
return FALSE;
|
||||
|
||||
RecordItemEffectBattle(battler, holdEffect);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static inline bool32 CanEjectButtonTrigger(u32 battlerAtk, u32 battlerDef, enum BattleMoveEffects moveEffect)
|
||||
{
|
||||
if (GetBattlerHoldEffect(battlerDef) == HOLD_EFFECT_EJECT_BUTTON
|
||||
|
|
@ -5802,16 +5785,14 @@ static void Cmd_moveend(void)
|
|||
gBattleScripting.moveendState++;
|
||||
break;
|
||||
case MOVEEND_PROTECT_LIKE_EFFECT:
|
||||
if (gProtectStructs[gBattlerAttacker].touchedProtectLike)
|
||||
if (!CanBattlerAvoidContactEffects(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), GetBattlerHoldEffect(gBattlerAttacker), gCurrentMove))
|
||||
{
|
||||
enum ProtectMethod method = gProtectStructs[gBattlerTarget].protected;
|
||||
switch (method)
|
||||
{
|
||||
case PROTECT_SPIKY_SHIELD:
|
||||
if (!IsProtectivePadsProtected(gBattlerAttacker, GetBattlerHoldEffect(gBattlerAttacker))
|
||||
&& !IsAbilityAndRecord(gBattlerAttacker, GetBattlerAbility(gBattlerAttacker), ABILITY_MAGIC_GUARD))
|
||||
if (!IsAbilityAndRecord(gBattlerAttacker, GetBattlerAbility(gBattlerAttacker), ABILITY_MAGIC_GUARD))
|
||||
{
|
||||
gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE;
|
||||
SetPassiveDamageAmount(gBattlerAttacker, GetNonDynamaxMaxHP(gBattlerAttacker) / 8);
|
||||
PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_SPIKY_SHIELD);
|
||||
BattleScriptCall(BattleScript_SpikyShieldEffect);
|
||||
|
|
@ -5819,57 +5800,41 @@ static void Cmd_moveend(void)
|
|||
}
|
||||
break;
|
||||
case PROTECT_KINGS_SHIELD:
|
||||
if (!IsProtectivePadsProtected(gBattlerAttacker, GetBattlerHoldEffect(gBattlerAttacker)))
|
||||
{
|
||||
gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE;
|
||||
SWAP(gBattlerAttacker, gBattlerTarget, i); // gBattlerTarget and gBattlerAttacker are swapped in order to activate Defiant, if applicable
|
||||
if (B_KINGS_SHIELD_LOWER_ATK >= GEN_8)
|
||||
gBattleScripting.moveEffect = MOVE_EFFECT_ATK_MINUS_1;
|
||||
else
|
||||
gBattleScripting.moveEffect = MOVE_EFFECT_ATK_MINUS_2;
|
||||
BattleScriptCall(BattleScript_KingsShieldEffect);
|
||||
effect = 1;
|
||||
}
|
||||
SWAP(gBattlerAttacker, gBattlerTarget, i); // gBattlerTarget and gBattlerAttacker are swapped in order to activate Defiant, if applicable
|
||||
if (B_KINGS_SHIELD_LOWER_ATK >= GEN_8)
|
||||
gBattleScripting.moveEffect = MOVE_EFFECT_ATK_MINUS_1;
|
||||
else
|
||||
gBattleScripting.moveEffect = MOVE_EFFECT_ATK_MINUS_2;
|
||||
BattleScriptCall(BattleScript_KingsShieldEffect);
|
||||
effect = 1;
|
||||
break;
|
||||
case PROTECT_BANEFUL_BUNKER:
|
||||
if (!IsProtectivePadsProtected(gBattlerAttacker, GetBattlerHoldEffect(gBattlerAttacker))
|
||||
&& CanBePoisoned(gBattlerTarget, gBattlerAttacker, gLastUsedAbility, GetBattlerAbility(gBattlerAttacker)))
|
||||
if (CanBePoisoned(gBattlerTarget, gBattlerAttacker, gLastUsedAbility, GetBattlerAbility(gBattlerAttacker)))
|
||||
{
|
||||
gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE;
|
||||
gBattleScripting.moveEffect = MOVE_EFFECT_POISON;
|
||||
BattleScriptCall(BattleScript_BanefulBunkerEffect);
|
||||
effect = 1;
|
||||
}
|
||||
break;
|
||||
case PROTECT_BURNING_BULWARK:
|
||||
if (!IsProtectivePadsProtected(gBattlerAttacker, GetBattlerHoldEffect(gBattlerAttacker))
|
||||
&& CanBeBurned(gBattlerTarget, gBattlerAttacker, GetBattlerAbility(gBattlerAttacker)))
|
||||
if (CanBeBurned(gBattlerTarget, gBattlerAttacker, GetBattlerAbility(gBattlerAttacker)))
|
||||
{
|
||||
gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE;
|
||||
gBattleScripting.moveEffect = MOVE_EFFECT_BURN;
|
||||
BattleScriptCall(BattleScript_BanefulBunkerEffect);
|
||||
effect = 1;
|
||||
}
|
||||
break;
|
||||
case PROTECT_OBSTRUCT:
|
||||
if (!IsProtectivePadsProtected(gBattlerAttacker, GetBattlerHoldEffect(gBattlerAttacker)))
|
||||
{
|
||||
gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE;
|
||||
SWAP(gBattlerAttacker, gBattlerTarget, i); // gBattlerTarget and gBattlerAttacker are swapped in order to activate Defiant, if applicable
|
||||
gBattleScripting.moveEffect = MOVE_EFFECT_DEF_MINUS_2;
|
||||
BattleScriptCall(BattleScript_KingsShieldEffect);
|
||||
effect = 1;
|
||||
}
|
||||
SWAP(gBattlerAttacker, gBattlerTarget, i); // gBattlerTarget and gBattlerAttacker are swapped in order to activate Defiant, if applicable
|
||||
gBattleScripting.moveEffect = MOVE_EFFECT_DEF_MINUS_2;
|
||||
BattleScriptCall(BattleScript_KingsShieldEffect);
|
||||
effect = 1;
|
||||
break;
|
||||
case PROTECT_SILK_TRAP:
|
||||
if (!IsProtectivePadsProtected(gBattlerAttacker, GetBattlerHoldEffect(gBattlerAttacker)))
|
||||
{
|
||||
gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE;
|
||||
SWAP(gBattlerAttacker, gBattlerTarget, i); // gBattlerTarget and gBattlerAttacker are swapped in order to activate Defiant, if applicable
|
||||
gBattleScripting.moveEffect = MOVE_EFFECT_SPD_MINUS_1;
|
||||
BattleScriptCall(BattleScript_KingsShieldEffect);
|
||||
effect = 1;
|
||||
}
|
||||
SWAP(gBattlerAttacker, gBattlerTarget, i); // gBattlerTarget and gBattlerAttacker are swapped in order to activate Defiant, if applicable
|
||||
gBattleScripting.moveEffect = MOVE_EFFECT_SPD_MINUS_1;
|
||||
BattleScriptCall(BattleScript_KingsShieldEffect);
|
||||
effect = 1;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
@ -5880,7 +5845,6 @@ static void Cmd_moveend(void)
|
|||
&& CanBeBurned(gBattlerAttacker, gBattlerAttacker, GetBattlerAbility(gBattlerAttacker))
|
||||
&& !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT))
|
||||
{
|
||||
gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE;
|
||||
gBattleMons[gBattlerAttacker].status1 = STATUS1_BURN;
|
||||
BtlController_EmitSetMonData(gBattlerAttacker, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerAttacker].status1), &gBattleMons[gBattlerAttacker].status1);
|
||||
MarkBattlerForControllerExec(gBattlerAttacker);
|
||||
|
|
|
|||
|
|
@ -53,13 +53,6 @@
|
|||
#include "constants/weather.h"
|
||||
#include "constants/pokemon.h"
|
||||
|
||||
/*
|
||||
NOTE: The data and functions in this file up until (but not including) sSoundMovesTable
|
||||
are actually part of battle_main.c. They needed to be moved to this file in order to
|
||||
match the ROM; this is also why sSoundMovesTable's declaration is in the middle of
|
||||
functions instead of at the top of the file with the other declarations.
|
||||
*/
|
||||
|
||||
static bool32 TryRemoveScreens(u32 battler);
|
||||
static bool32 IsUnnerveAbilityOnOpposingSide(u32 battler);
|
||||
static u32 GetFlingPowerFromItemId(u32 itemId);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user