From 827dd4a67c2831cff40627c8cd18bfaaf627ba78 Mon Sep 17 00:00:00 2001 From: PhallenTree <168426989+PhallenTree@users.noreply.github.com> Date: Wed, 10 Sep 2025 15:38:09 +0100 Subject: [PATCH] Fixes Intrepid Sword/Dauntless Shield boosting after entering while at max stats (#7716) --- data/battle_scripts_1.s | 2 +- include/constants/battle_string_ids.h | 2 +- src/battle_message.c | 2 +- src/battle_util.c | 22 ++++++++++++++-------- test/text.c | 2 +- 5 files changed, 18 insertions(+), 12 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 43e79b8df3..33bf28934d 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -7920,7 +7920,7 @@ BattleScript_TeraShellDistortingTypeMatchups:: BattleScript_CursedBodyActivates:: call BattleScript_AbilityPopUp - printstring STRINGID_CUSEDBODYDISABLED + printstring STRINGID_CURSEDBODYDISABLED waitmessage B_WAIT_TIME_LONG return diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 3343a449e7..22d63b119c 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -480,7 +480,7 @@ enum StringID STRINGID_HEALINGWISHCAMETRUE, STRINGID_HEALINGWISHHEALED, STRINGID_LUNARDANCECAMETRUE, - STRINGID_CUSEDBODYDISABLED, + STRINGID_CURSEDBODYDISABLED, STRINGID_ATTACKERACQUIREDABILITY, STRINGID_TARGETABILITYSTATLOWER, STRINGID_TARGETSTATWONTGOHIGHER, diff --git a/src/battle_message.c b/src/battle_message.c index 132cfa66f0..4cbadf0379 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -640,7 +640,7 @@ const u8 *const gBattleStringsTable[STRINGID_COUNT] = [STRINGID_HEALINGWISHCAMETRUE] = COMPOUND_STRING("The healing wish came true for {B_ATK_NAME_WITH_PREFIX2}!"), [STRINGID_HEALINGWISHHEALED] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} regained health!"), [STRINGID_LUNARDANCECAMETRUE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} became cloaked in mystical moonlight!"), - [STRINGID_CUSEDBODYDISABLED] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} was disabled by {B_DEF_NAME_WITH_PREFIX2}'s {B_DEF_ABILITY}!"), + [STRINGID_CURSEDBODYDISABLED] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} was disabled by {B_DEF_NAME_WITH_PREFIX2}'s {B_DEF_ABILITY}!"), [STRINGID_ATTACKERACQUIREDABILITY] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} acquired {B_ATK_ABILITY}!"), [STRINGID_TARGETABILITYSTATLOWER] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} lowered its {B_BUFF1}!"), [STRINGID_TARGETSTATWONTGOHIGHER] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1} won't go any higher!"), diff --git a/src/battle_util.c b/src/battle_util.c index 16b335e701..e77639524d 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -3975,27 +3975,33 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITY_INTREPID_SWORD: - if (!gSpecialStatuses[battler].switchInAbilityDone && CompareStat(battler, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN) + if (!gSpecialStatuses[battler].switchInAbilityDone && !GetBattlerPartyState(battler)->intrepidSwordBoost) { if (GetGenConfig(GEN_INTREPID_SWORD) == GEN_9) GetBattlerPartyState(battler)->intrepidSwordBoost = TRUE; gSpecialStatuses[battler].switchInAbilityDone = TRUE; - SET_STATCHANGER(STAT_ATK, 1, FALSE); - BattleScriptPushCursorAndCallback(BattleScript_BattlerAbilityStatRaiseOnSwitchIn); - effect++; + if (CompareStat(battler, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN)) + { + SET_STATCHANGER(STAT_ATK, 1, FALSE); + BattleScriptPushCursorAndCallback(BattleScript_BattlerAbilityStatRaiseOnSwitchIn); + effect++; + } } break; case ABILITY_DAUNTLESS_SHIELD: - if (!gSpecialStatuses[battler].switchInAbilityDone && CompareStat(battler, STAT_DEF, MAX_STAT_STAGE, CMP_LESS_THAN) + if (!gSpecialStatuses[battler].switchInAbilityDone && !GetBattlerPartyState(battler)->dauntlessShieldBoost) { if (GetGenConfig(GEN_DAUNTLESS_SHIELD) == GEN_9) GetBattlerPartyState(battler)->dauntlessShieldBoost = TRUE; gSpecialStatuses[battler].switchInAbilityDone = TRUE; - SET_STATCHANGER(STAT_DEF, 1, FALSE); - BattleScriptPushCursorAndCallback(BattleScript_BattlerAbilityStatRaiseOnSwitchIn); - effect++; + if (CompareStat(battler, STAT_DEF, MAX_STAT_STAGE, CMP_LESS_THAN)) + { + SET_STATCHANGER(STAT_DEF, 1, FALSE); + BattleScriptPushCursorAndCallback(BattleScript_BattlerAbilityStatRaiseOnSwitchIn); + effect++; + } } break; case ABILITY_WIND_RIDER: diff --git a/test/text.c b/test/text.c index 0a5a4dd2a2..cb5b82ca46 100644 --- a/test/text.c +++ b/test/text.c @@ -675,7 +675,7 @@ TEST("Battle strings fit on the battle message window") case STRINGID_PKMNSXWOREOFF: case STRINGID_BUFFERENDS: case STRINGID_FOREWARNACTIVATES: - case STRINGID_CUSEDBODYDISABLED: + case STRINGID_CURSEDBODYDISABLED: case STRINGID_CURRENTMOVECANTSELECT: case STRINGID_TARGETISHURTBYSALTCURE: PREPARE_MOVE_BUFFER(gBattleTextBuff1, longMoveID);