From 01cf8e6452d592b5d8010a25fab32dcf0eab9ab7 Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Mon, 8 Nov 2021 11:55:06 -0500 Subject: [PATCH] add AI_MoveMakesContact, dissuade multi-hit attacks against rocky helmet --- include/battle_ai_util.h | 1 + src/battle_ai_main.c | 3 +++ src/battle_ai_util.c | 9 +++++++++ 3 files changed, 13 insertions(+) diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index 6da519342f..cc626fa5e4 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -58,6 +58,7 @@ bool32 CanKnockOffItem(u8 battler, u16 item); bool32 IsAbilityOfRating(u16 ability, s8 rating); s8 GetAbilityRating(u16 ability); bool32 AI_IsAbilityOnSide(u32 battlerId, u32 ability); +bool32 AI_MoveMakesContact(u32 ability, u32 holdEffect, u16 move); // stat stage checks bool32 AnyStatIsRaised(u8 battlerId); diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index b8dbdebac8..cc0f8b2c7b 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -3246,6 +3246,9 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) case EFFECT_MULTI_HIT: case EFFECT_DOUBLE_HIT: case EFFECT_TRIPLE_KICK: + if (AI_MoveMakesContact(AI_DATA->atkAbility, AI_DATA->atkHoldEffect, move) + && AI_DATA->defHoldEffect == HOLD_EFFECT_ROCKY_HELMET) + score -= 2; break; case EFFECT_CONVERSION: if (!IS_BATTLER_OF_TYPE(battlerAtk, gBattleMoves[gBattleMons[battlerAtk].moves[0]].type)) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 60083bb29c..19dfab8577 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -3598,3 +3598,12 @@ void IncreaseConfusionScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score) *score += 2; } } + +bool32 AI_MoveMakesContact(u32 ability, u32 holdEffect, u16 move) +{ + if (TestMoveFlags(move, FLAG_MAKES_CONTACT) + && ability != ABILITY_LONG_REACH + && holdEffect != HOLD_EFFECT_PROTECTIVE_PADS) + return TRUE; + return FALSE; +}