Fixes Thief and Covet used by an opponent not stealing items (#4506)

* Fixes MOVE_EFFECT_STEAL_ITEM (Thief and Covet)

* Fix stealing consumed item

* Removed unnecessary instructions

* Removes unnecessary check for item to trigger Sticky Hold
This commit is contained in:
PhallenTree 2024-05-09 08:22:56 +01:00 committed by GitHub
parent b3a4553860
commit 63254a8fdc
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -3164,7 +3164,6 @@ void SetMoveEffect(bool32 primary, bool32 certain)
} }
else else
{ {
u8 side;
switch (gBattleScripting.moveEffect) switch (gBattleScripting.moveEffect)
{ {
case MOVE_EFFECT_CONFUSION: case MOVE_EFFECT_CONFUSION:
@ -3178,7 +3177,7 @@ void SetMoveEffect(bool32 primary, bool32 certain)
// If the confusion is activating due to being released from Sky Drop, go to "confused due to fatigue" script. // If the confusion is activating due to being released from Sky Drop, go to "confused due to fatigue" script.
// Otherwise, do normal confusion script. // Otherwise, do normal confusion script.
if(gCurrentMove == MOVE_SKY_DROP) if (gCurrentMove == MOVE_SKY_DROP)
{ {
gBattleMons[gEffectBattler].status2 &= ~(STATUS2_LOCK_CONFUSE); gBattleMons[gEffectBattler].status2 &= ~(STATUS2_LOCK_CONFUSE);
gBattlerAttacker = gEffectBattler; gBattlerAttacker = gEffectBattler;
@ -3422,35 +3421,13 @@ void SetMoveEffect(bool32 primary, bool32 certain)
break; break;
case MOVE_EFFECT_STEAL_ITEM: case MOVE_EFFECT_STEAL_ITEM:
{ {
if (!CanStealItem(gBattlerAttacker, gBattlerTarget, gBattleMons[gBattlerTarget].item)) if (!CanStealItem(gBattlerAttacker, gBattlerTarget, gBattleMons[gBattlerTarget].item)
{ || gBattleMons[gBattlerAttacker].item != ITEM_NONE
gBattlescriptCurrInstr++; || gBattleMons[gBattlerTarget].item == ITEM_NONE)
break;
}
side = GetBattlerSide(gBattlerAttacker);
if (GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT
&& !(gBattleTypeFlags &
(BATTLE_TYPE_EREADER_TRAINER
| BATTLE_TYPE_FRONTIER
| BATTLE_TYPE_LINK
| BATTLE_TYPE_RECORDED_LINK
| BATTLE_TYPE_SECRET_BASE)))
{ {
gBattlescriptCurrInstr++; gBattlescriptCurrInstr++;
} }
else if (!(gBattleTypeFlags & else if (GetBattlerAbility(gBattlerTarget) == ABILITY_STICKY_HOLD)
(BATTLE_TYPE_EREADER_TRAINER
| BATTLE_TYPE_FRONTIER
| BATTLE_TYPE_LINK
| BATTLE_TYPE_RECORDED_LINK
| BATTLE_TYPE_SECRET_BASE))
&& (gWishFutureKnock.knockedOffMons[side] & gBitTable[gBattlerPartyIndexes[gBattlerAttacker]]))
{
gBattlescriptCurrInstr++;
}
else if (gBattleMons[gBattlerTarget].item
&& GetBattlerAbility(gBattlerTarget) == ABILITY_STICKY_HOLD)
{ {
BattleScriptPushCursor(); BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_NoItemSteal; gBattlescriptCurrInstr = BattleScript_NoItemSteal;
@ -3458,12 +3435,6 @@ void SetMoveEffect(bool32 primary, bool32 certain)
gLastUsedAbility = gBattleMons[gBattlerTarget].ability; gLastUsedAbility = gBattleMons[gBattlerTarget].ability;
RecordAbilityBattle(gBattlerTarget, gLastUsedAbility); RecordAbilityBattle(gBattlerTarget, gLastUsedAbility);
} }
else if (gBattleMons[gBattlerAttacker].item != ITEM_NONE
|| gBattleMons[gBattlerTarget].item == ITEM_ENIGMA_BERRY_E_READER
|| gBattleMons[gBattlerTarget].item == ITEM_NONE)
{
gBattlescriptCurrInstr++;
}
else else
{ {
StealTargetItem(gBattlerAttacker, gBattlerTarget); // Attacker steals target item StealTargetItem(gBattlerAttacker, gBattlerTarget); // Attacker steals target item