Clean up redundant item assignment after it was stolen (#9044)

This commit is contained in:
Alex 2026-01-30 15:24:05 +01:00 committed by GitHub
parent cbebe2da10
commit 7dca2712ac
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 1 additions and 27 deletions

View File

@ -605,7 +605,6 @@ struct BattleStruct
void (*savedCallback)(void);
u16 chosenItem[MAX_BATTLERS_COUNT];
u16 choicedMove[MAX_BATTLERS_COUNT];
u16 changedItems[MAX_BATTLERS_COUNT];
u8 switchInBattlerCounter;
u16 lastTakenMoveFrom[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT]; // a 2-D array [target][attacker]
union {

View File

@ -121,7 +121,6 @@ enum MoveEndState
MOVEEND_MIRROR_HERB,
MOVEEND_PICKPOCKET,
MOVEEND_THIRD_MOVE_BLOCK,
MOVEEND_CHANGED_ITEMS,
MOVEEND_CLEAR_BITS,
MOVEEND_DANCER,
MOVEEND_PURSUIT_NEXT_ACTION,

View File

@ -3929,7 +3929,6 @@ static bool32 DoesAbilityBenefitFromSunOrRain(enum BattlerId battler, enum Abili
return (weather & B_WEATHER_RAIN);
case ABILITY_HARVEST:
if (GetItemPocket(gAiLogicData->items[battler]) != POCKET_BERRIES
&& GetItemPocket(gBattleStruct->changedItems[battler]) != POCKET_BERRIES
&& GetItemPocket(GetBattlerPartyState(battler)->usedHeldItem) != POCKET_BERRIES)
{
return FALSE;

View File

@ -3071,7 +3071,6 @@ static void BattleStartClearSetData(void)
gPalaceSelectionBattleScripts[i] = 0;
gBattleStruct->lastTakenMove[i] = MOVE_NONE;
gBattleStruct->choicedMove[i] = MOVE_NONE;
gBattleStruct->changedItems[i] = 0;
gBattleStruct->lastTakenMoveFrom[i][0] = MOVE_NONE;
gBattleStruct->lastTakenMoveFrom[i][1] = MOVE_NONE;
gBattleStruct->lastTakenMoveFrom[i][2] = MOVE_NONE;

View File

@ -2554,8 +2554,7 @@ static enum MoveEndResult MoveEndMoveBlock(void)
if (!(GetConfig(CONFIG_STEAL_WILD_ITEMS) >= GEN_9
&& !(gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_PALACE))))
{
gBattleMons[gBattlerAttacker].item = ITEM_NONE; // Item assigned later on with thief (see MOVEEND_CHANGED_ITEMS)
gBattleStruct->changedItems[gBattlerAttacker] = gLastUsedItem; // Stolen item to be assigned later
gBattleMons[gBattlerAttacker].item = gLastUsedItem;
}
gEffectBattler = gBattlerTarget;
BattleScriptCall(BattleScript_ItemSteal);
@ -3225,21 +3224,6 @@ static enum MoveEndResult MoveEndThirdMoveBlock(void)
return result;
}
static enum MoveEndResult MoveEndChangedItems(void)
{
for (enum BattlerId battler = 0; battler < gBattlersCount; battler++)
{
if (gBattleStruct->changedItems[battler] != ITEM_NONE)
{
gBattleMons[battler].item = gBattleStruct->changedItems[battler];
gBattleStruct->changedItems[battler] = ITEM_NONE;
}
}
gBattleScripting.moveendState++;
return MOVEEND_RESULT_CONTINUE;
}
static bool32 ShouldSetStompingTantrumTimer(void)
{
u32 numNotAffectedTargets = 0;
@ -3459,7 +3443,6 @@ static enum MoveEndResult (*const sMoveEndHandlers[])(void) =
[MOVEEND_MIRROR_HERB] = MoveEndMirrorHerb,
[MOVEEND_PICKPOCKET] = MoveEndPickpocket,
[MOVEEND_THIRD_MOVE_BLOCK] = MoveEndThirdMoveBlock,
[MOVEEND_CHANGED_ITEMS] = MoveEndChangedItems,
[MOVEEND_CLEAR_BITS] = MoveEndClearBits,
[MOVEEND_DANCER] = MoveEndDancer,
[MOVEEND_PURSUIT_NEXT_ACTION] = MoveEndPursuitNextAction,

View File

@ -13105,7 +13105,6 @@ void BS_TryRecycleBerry(void)
NATIVE_ARGS(const u8 *failInstr);
u16 *usedHeldItem = &GetBattlerPartyState(gBattlerTarget)->usedHeldItem;
if (gBattleMons[gBattlerTarget].item == ITEM_NONE
&& gBattleStruct->changedItems[gBattlerTarget] == ITEM_NONE // Will not inherit an item
&& GetItemPocket(*usedHeldItem) == POCKET_BERRIES)
{
gLastUsedItem = *usedHeldItem;

View File

@ -3798,7 +3798,6 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, enum BattlerId battler, enum
{
case ABILITY_PICKUP:
if (gBattleMons[battler].item == ITEM_NONE
&& gBattleStruct->changedItems[battler] == ITEM_NONE // Will not inherit an item
&& PickupHasValidTarget(battler))
{
gBattlerTarget = RandomUniformExcept(RNG_PICKUP, 0, gBattlersCount - 1, CantPickupItem);
@ -3810,7 +3809,6 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, enum BattlerId battler, enum
case ABILITY_HARVEST:
if ((IsBattlerWeatherAffected(battler, B_WEATHER_SUN) || RandomPercentage(RNG_HARVEST, 50))
&& gBattleMons[battler].item == ITEM_NONE
&& gBattleStruct->changedItems[battler] == ITEM_NONE // Will not inherit an item
&& GetItemPocket(GetBattlerPartyState(battler)->usedHeldItem) == POCKET_BERRIES)
{
gLastUsedItem = GetBattlerPartyState(battler)->usedHeldItem;
@ -10275,7 +10273,6 @@ bool32 TryTriggerSymbiosis(enum BattlerId battler, u32 ally)
bool32 TrySymbiosis(enum BattlerId battler, enum Item itemId, bool32 moveEnd)
{
if (!gBattleStruct->itemLost[B_SIDE_PLAYER][gBattlerPartyIndexes[battler]].stolen
&& gBattleStruct->changedItems[battler] == ITEM_NONE
&& GetBattlerHoldEffect(battler) != HOLD_EFFECT_EJECT_BUTTON
&& GetBattlerHoldEffect(battler) != HOLD_EFFECT_EJECT_PACK
&& (GetConfig(CONFIG_SYMBIOSIS_GEMS) < GEN_7 || !(gSpecialStatuses[battler].gemBoost))

View File

@ -195,7 +195,6 @@ SINGLE_BATTLE_TEST("Pickpocket activates after Sticky Barb transfers")
SINGLE_BATTLE_TEST("Pickpocket activates after Thief or Covet steals an item")
{
u16 move;
KNOWN_FAILING;
PARAMETRIZE { move = MOVE_THIEF; }
PARAMETRIZE { move = MOVE_COVET; }
GIVEN {