From 8eab725485aa410adf57f59a2da5aa7ead424337 Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Mon, 2 Dec 2024 15:59:05 -0500 Subject: [PATCH] Fix Sleep Clause AI handling of partner sleeping moves (#5761) Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> --- src/battle_ai_util.c | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 21c738de01..e8041ae7a1 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -2371,6 +2371,32 @@ bool32 IsSwitchOutEffect(u32 effect) } } +static inline bool32 IsMoveSleepClauseTrigger(u32 move) +{ + u32 i, effect = gMovesInfo[move].effect; + + // Sleeping effects like Sleep Powder, Yawn, Dark Void, etc. + switch (effect) + { + case EFFECT_SLEEP: + case EFFECT_YAWN: + case EFFECT_DARK_VOID: + return TRUE; + } + + // Sleeping effects like G-Max Befuddle, G-Max Snooze, etc. + for (i = 0; i < gMovesInfo[move].numAdditionalEffects; i++) + { + switch (gMovesInfo[move].additionalEffects[i].moveEffect) + { + case MAX_EFFECT_EFFECT_SPORE_FOES: + case MAX_EFFECT_YAWN_FOE: + return TRUE; + } + } + return FALSE; +} + bool32 HasDamagingMove(u32 battlerId) { u32 i; @@ -3394,13 +3420,9 @@ bool32 PartnerMoveIsSameNoTarget(u32 battlerAtkPartner, u32 move, u32 partnerMov bool32 PartnerMoveActivatesSleepClause(u32 partnerMove) { - u32 effect = gMovesInfo[partnerMove].effect; if (!IsDoubleBattle() || !FlagGet(B_FLAG_SLEEP_CLAUSE)) return FALSE; - if (effect == EFFECT_SLEEP - || effect == EFFECT_YAWN) - return TRUE; - return FALSE; + return IsMoveSleepClauseTrigger(partnerMove); } bool32 ShouldUseWishAromatherapy(u32 battlerAtk, u32 battlerDef, u32 move)