diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index ebdfc59e0d..0fa06c7772 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -8509,15 +8509,15 @@ BattleScript_ItemHealHP_RemoveItemEnd2_Anim: end2 BattleScript_BerryPPHealRet:: - jumpifability BS_ATTACKER, ABILITY_RIPEN, BattleScript_BerryPPHeal_AbilityPopup + jumpifability BS_SCRIPTING, ABILITY_RIPEN, BattleScript_BerryPPHeal_AbilityPopup goto BattleScript_BerryPPHeal_Anim BattleScript_BerryPPHeal_AbilityPopup: - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpScripting BattleScript_BerryPPHeal_Anim: - playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT + playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT printstring STRINGID_PKMNSITEMRESTOREDPP waitmessage B_WAIT_TIME_LONG - removeitem BS_ATTACKER + removeitem BS_SCRIPTING return BattleScript_BerryPPHealEnd2:: diff --git a/src/battle_util.c b/src/battle_util.c index e633a20bad..3ab160c03b 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -6145,6 +6145,7 @@ static u32 ItemRestorePp(u32 battler, u32 itemId, enum ItemCaseId caseID) else BattleScriptCall(BattleScript_BerryPPHealRet); + gBattleScripting.battler = battler; BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, i + REQUEST_PPMOVE1_BATTLE, 0, 1, &changedPP); MarkBattlerForControllerExec(battler); if (MOVE_IS_PERMANENT(battler, i)) @@ -6729,6 +6730,9 @@ u32 ItemBattleEffects(enum ItemCaseId caseID, u32 battler) if (B_BERRIES_INSTANT >= GEN_4) effect = ItemHealHp(battler, gLastUsedItem, caseID, TRUE); break; + case HOLD_EFFECT_RESTORE_PP: + effect = ItemRestorePp(battler, gLastUsedItem, caseID); + break; case HOLD_EFFECT_AIR_BALLOON: effect = ITEM_EFFECT_OTHER; gBattleScripting.battler = battler; diff --git a/test/battle/hold_effect/restore_pp.c b/test/battle/hold_effect/restore_pp.c new file mode 100644 index 0000000000..c3810652a4 --- /dev/null +++ b/test/battle/hold_effect/restore_pp.c @@ -0,0 +1,23 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gItemsInfo[ITEM_LEPPA_BERRY].holdEffect == HOLD_EFFECT_RESTORE_PP); +} + +SINGLE_BATTLE_TEST("Restore PP berry activates immediately on switch in") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_LEPPA_BERRY); MovesWithPP({MOVE_SCRATCH, 0}, {MOVE_CELEBRATE, 20}); } + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponent, MOVE_POUND); MOVE(player, MOVE_CELEBRATE); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_POUND, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); + } THEN { + EXPECT(player->item == ITEM_NONE); + } +}