From c279aa23c6d4d83d7ac693d9dfc34be38ade106d Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Sun, 26 May 2024 16:23:04 -0400 Subject: [PATCH] Belch AI Scoring Fix (#4616) * Belch scoring fix and test * Add assumptions for pocket * Update test to AI_SINGLE_BATTLE_TEST * Alex's fixes * Missed reverting a line * Mucked up spacing mb * Mucked up the spacing fix mb MB --- include/battle_util.h | 1 + src/battle_ai_util.c | 2 +- src/battle_script_commands.c | 2 + src/battle_util.c | 2 +- test/battle/move_effect/belch.c | 52 ++++++++++++++++++++++++++ test/battle/move_effect/stuff_cheeks.c | 26 ------------- 6 files changed, 57 insertions(+), 28 deletions(-) create mode 100644 test/battle/move_effect/belch.c diff --git a/include/battle_util.h b/include/battle_util.h index d6ed8b3427..a5349a7c2a 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -202,6 +202,7 @@ u8 GetBattleMoveCategory(u32 moveId); bool32 CanFling(u32 battler); bool32 IsTelekinesisBannedSpecies(u16 species); bool32 IsHealBlockPreventingMove(u32 battler, u32 move); +bool32 IsBelchPreventingMove(u32 battler, u32 move); bool32 HasEnoughHpToEatBerry(u32 battler, u32 hpFraction, u32 itemId); bool32 IsPartnerMonFromSameTrainer(u32 battler); u8 GetCategoryBasedOnStats(u32 battler); diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index b99339d16e..84bd85e3bb 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -426,7 +426,7 @@ bool32 IsDamageMoveUnusable(u32 move, u32 battlerAtk, u32 battlerDef) return TRUE; break; case EFFECT_BELCH: - if (ItemId_GetPocket(GetUsedHeldItem(battlerAtk)) != POCKET_BERRIES) + if (IsBelchPreventingMove(battlerAtk, move)) return TRUE; break; case EFFECT_LAST_RESORT: diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index af1bcfe1aa..01035e5c12 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -2189,6 +2189,7 @@ static void Cmd_multihitresultmessage(void) if (gSpecialStatuses[gBattlerTarget].berryReduced && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) { + gBattleStruct->ateBerry[gBattlerTarget & BIT_SIDE] |= gBitTable[gBattlerPartyIndexes[gBattlerTarget]]; gSpecialStatuses[gBattlerTarget].berryReduced = FALSE; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_PrintBerryReduceString; @@ -2649,6 +2650,7 @@ static void Cmd_resultmessage(void) if (gSpecialStatuses[gBattlerTarget].berryReduced && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) { + gBattleStruct->ateBerry[gBattlerTarget & BIT_SIDE] |= gBitTable[gBattlerPartyIndexes[gBattlerTarget]]; gSpecialStatuses[gBattlerTarget].berryReduced = FALSE; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_PrintBerryReduceString; diff --git a/src/battle_util.c b/src/battle_util.c index 8cda4c4ecc..1fe6facf12 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -1262,7 +1262,7 @@ bool32 IsHealBlockPreventingMove(u32 battler, u32 move) return gMovesInfo[move].healingMove; } -static bool32 IsBelchPreventingMove(u32 battler, u32 move) +bool32 IsBelchPreventingMove(u32 battler, u32 move) { if (gMovesInfo[move].effect != EFFECT_BELCH) return FALSE; diff --git a/test/battle/move_effect/belch.c b/test/battle/move_effect/belch.c new file mode 100644 index 0000000000..34e026abe5 --- /dev/null +++ b/test/battle/move_effect/belch.c @@ -0,0 +1,52 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_BELCH].effect == EFFECT_BELCH); + ASSUME(gMovesInfo[MOVE_MUD_SHOT].type == TYPE_GROUND); + ASSUME(gItemsInfo[ITEM_SHUCA_BERRY].holdEffect == HOLD_EFFECT_RESIST_BERRY); + ASSUME(gItemsInfo[ITEM_SHUCA_BERRY].holdEffectParam == TYPE_GROUND); + ASSUME(gItemsInfo[ITEM_SHUCA_BERRY].pocket == POCKET_BERRIES); + ASSUME(gItemsInfo[ITEM_ORAN_BERRY].pocket == POCKET_BERRIES); +} + +AI_SINGLE_BATTLE_TEST("AI: Belch has nonzero score after eating a berry") +{ + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_BAYLEEF) { Level(18); Moves(MOVE_MUD_SHOT, MOVE_TACKLE); } + OPPONENT(SPECIES_PIKACHU) { Level(15); Item(ITEM_SHUCA_BERRY); Moves(MOVE_BELCH, MOVE_TACKLE); } + } WHEN { + TURN { MOVE(player, MOVE_MUD_SHOT); EXPECT_MOVE(opponent, MOVE_TACKLE); } + TURN { MOVE(player, MOVE_TACKLE); EXPECT_MOVE(opponent, MOVE_BELCH);} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BELCH, opponent); + } +} + +SINGLE_BATTLE_TEST("Belch cannot be used if the user has not eaten a berry") +{ + u16 item = 0; + PARAMETRIZE { item = ITEM_NONE; } + PARAMETRIZE { item = ITEM_ORAN_BERRY; } + GIVEN { + PLAYER(SPECIES_SKWOVET) { Item(item); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (item == ITEM_NONE) + TURN { MOVE(player, MOVE_BELCH, allowed: FALSE); MOVE(player, MOVE_CELEBRATE); } + else { + TURN { MOVE(player, MOVE_STUFF_CHEEKS); } + TURN { MOVE(player, MOVE_BELCH); } + } + } SCENE { + if (item == ITEM_NONE) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); + } + else { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STUFF_CHEEKS, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BELCH, player); + } + } +} diff --git a/test/battle/move_effect/stuff_cheeks.c b/test/battle/move_effect/stuff_cheeks.c index a7a4ab1d34..3bb3f22925 100644 --- a/test/battle/move_effect/stuff_cheeks.c +++ b/test/battle/move_effect/stuff_cheeks.c @@ -103,29 +103,3 @@ SINGLE_BATTLE_TEST("Stuff Cheeks fails if the user's berry is removed before the MESSAGE("But it failed!"); } } - -SINGLE_BATTLE_TEST("Belch cannot be used if the user has not eaten a berry") -{ - u16 item = 0; - PARAMETRIZE { item = ITEM_NONE; } - PARAMETRIZE { item = ITEM_ORAN_BERRY; } - GIVEN { - PLAYER(SPECIES_SKWOVET) { Item(item); } - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - if (item == ITEM_NONE) - TURN { MOVE(player, MOVE_BELCH, allowed: FALSE); MOVE(player, MOVE_CELEBRATE); } - else { - TURN { MOVE(player, MOVE_STUFF_CHEEKS); } - TURN { MOVE(player, MOVE_BELCH); } - } - } SCENE { - if (item == ITEM_NONE) { - ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); - } - else { - ANIMATION(ANIM_TYPE_MOVE, MOVE_STUFF_CHEEKS, player); - ANIMATION(ANIM_TYPE_MOVE, MOVE_BELCH, player); - } - } -}