Fix Wish healing even if the target is Heal Blocked (#6979)

Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com>
This commit is contained in:
Vex 2025-05-25 14:01:11 -07:00 committed by GitHub
parent f8b3a02f6c
commit 7b686b6749
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 53 additions and 5 deletions

View File

@ -1140,10 +1140,11 @@
.4byte \failInstr
.endm
.macro trywish turnNumber:req, failInstr:req
.macro trywish turnNumber:req, failInstr:req, blockedInstr:req
.byte 0xd4
.byte \turnNumber
.4byte \failInstr
.4byte \blockedInstr
.endm
.macro settoxicspikes failInstr:req

View File

@ -5033,7 +5033,7 @@ BattleScript_EffectWish::
attackcanceler
attackstring
ppreduce
trywish 0, BattleScript_ButItFailed
trywish 0, BattleScript_ButItFailed, BattleScript_ButItFailed
attackanimation
waitanimation
goto BattleScript_MoveEnd
@ -6675,7 +6675,7 @@ BattleScript_SelectingNotAllowedCurrentMoveInPalace::
goto BattleScript_SelectingUnusableMoveInPalace
BattleScript_WishComesTrue::
trywish 1, BattleScript_WishButFullHp
trywish 1, BattleScript_WishButFullHp, BattleScript_WishButHealBlocked
playanimation BS_TARGET, B_ANIM_WISH_HEAL
printstring STRINGID_PKMNWISHCAMETRUE
waitmessage B_WAIT_TIME_LONG
@ -6694,6 +6694,14 @@ BattleScript_WishButFullHp::
waitmessage B_WAIT_TIME_LONG
end2
BattleScript_WishButHealBlocked::
printstring STRINGID_PKMNWISHCAMETRUE
waitmessage B_WAIT_TIME_LONG
pause B_WAIT_TIME_SHORT
printstring STRINGID_HEALBLOCKPREVENTSUSAGE
waitmessage B_WAIT_TIME_LONG
end2
BattleScript_IngrainTurnHeal::
playanimation BS_ATTACKER, B_ANIM_INGRAIN_HEAL
printstring STRINGID_PKMNABSORBEDNUTRIENTS

View File

@ -15150,7 +15150,7 @@ static void Cmd_trycopyability(void)
static void Cmd_trywish(void)
{
CMD_ARGS(u8 turnNumber, const u8 *failInstr);
CMD_ARGS(u8 turnNumber, const u8 *failInstr, const u8 *healBlockedInstr);
switch (cmd->turnNumber)
{
@ -15174,7 +15174,9 @@ static void Cmd_trywish(void)
gBattleStruct->moveDamage[gBattlerTarget] = max(1, GetNonDynamaxMaxHP(gBattlerAttacker) / 2);
gBattleStruct->moveDamage[gBattlerTarget] *= -1;
if (gBattleMons[gBattlerTarget].hp == gBattleMons[gBattlerTarget].maxHP)
if (gStatuses3[gBattlerTarget] & STATUS3_HEAL_BLOCK)
gBattlescriptCurrInstr = cmd->healBlockedInstr;
else if (gBattleMons[gBattlerTarget].hp == gBattleMons[gBattlerTarget].maxHP)
gBattlescriptCurrInstr = cmd->failInstr;
else
gBattlescriptCurrInstr = cmd->nextInstr;

View File

@ -1,4 +1,41 @@
#include "global.h"
#include "test/battle.h"
SINGLE_BATTLE_TEST("Wish heals the user at the end of the next turn")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_WISH); MOVE(opponent, MOVE_POUND); }
TURN { }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_WISH, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_POUND, opponent);
HP_BAR(player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent);
MESSAGE("Wobbuffet's wish came true!");
HP_BAR(player);
}
}
SINGLE_BATTLE_TEST("Wish is blocked by Heal Block")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_WISH); MOVE(opponent, MOVE_POUND); }
TURN { MOVE(opponent, MOVE_HEAL_BLOCK); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_WISH, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_POUND, opponent);
HP_BAR(player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_HEAL_BLOCK, opponent);
MESSAGE("Wobbuffet was prevented from healing!");
NOT HP_BAR(player);
}
}
TO_DO_BATTLE_TEST("TODO: Write Wish (Move Effect) test titles")