From e9b2f33084af514b4dabf09983bc9a85c8b51ab0 Mon Sep 17 00:00:00 2001 From: Nephrite Date: Tue, 27 Feb 2024 13:38:38 +0900 Subject: [PATCH] Fixed Tangling Hair + Mirror Armor interaction --- data/battle_scripts_1.s | 2 +- src/battle_script_commands.c | 13 +++++++++---- src/battle_util.c | 1 - test/battle/ability/mirror_armor.c | 1 - 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 6074898adf..a23423b42e 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -8552,7 +8552,7 @@ BattleScript_GooeyActivates:: waitstate call BattleScript_AbilityPopUp swapattackerwithtarget @ for defiant, mirror armor - seteffectsecondary + seteffectsecondary MOVE_EFFECT_SPD_MINUS_1 swapattackerwithtarget return diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index b8ad0dac21..f70fd9df23 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -2831,7 +2831,10 @@ void SetMoveEffect(bool32 primary, bool32 certain) && !primary && gBattleScripting.moveEffect <= MOVE_EFFECT_CONFUSION) INCREMENT_RESET_RETURN - if (TestIfSheerForceAffected(gBattlerAttacker, gCurrentMove) && !primary && gBattleScripting.moveEffect != MOVE_EFFECT_CHARGING) + if (!(gHitMarker & HITMARKER_STATUS_ABILITY_EFFECT) + && TestIfSheerForceAffected(gBattlerAttacker, gCurrentMove) + && !primary + && gBattleScripting.moveEffect != MOVE_EFFECT_CHARGING) INCREMENT_RESET_RETURN if (gBattleMons[gEffectBattler].hp == 0 && !activateAfterFaint) @@ -3310,12 +3313,14 @@ void SetMoveEffect(bool32 primary, bool32 certain) case MOVE_EFFECT_ACC_MINUS_1: case MOVE_EFFECT_EVS_MINUS_1: flags = affectsUser; - if (mirrorArmorReflected && !affectsUser) - flags |= STAT_CHANGE_ALLOW_PTR; + if (mirrorArmorReflected) + flags |= (STAT_CHANGE_ALLOW_PTR * !affectsUser); + else + flags |= STAT_CHANGE_UPDATE_MOVE_EFFECT; if (ChangeStatBuffs(SET_STAT_BUFF_VALUE(1) | STAT_BUFF_NEGATIVE, gBattleScripting.moveEffect - MOVE_EFFECT_ATK_MINUS_1 + 1, - flags | STAT_CHANGE_UPDATE_MOVE_EFFECT, gBattlescriptCurrInstr + 1)) + flags, gBattlescriptCurrInstr + 1)) { if (!mirrorArmorReflected) gBattlescriptCurrInstr++; diff --git a/src/battle_util.c b/src/battle_util.c index 6e68187980..143ebc5144 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -5320,7 +5320,6 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && IsMoveMakingContact(move, gBattlerAttacker)) { SET_STATCHANGER(STAT_SPEED, 1, TRUE); - gBattleScripting.moveEffect = MOVE_EFFECT_SPD_MINUS_1; PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility); BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_GooeyActivates; diff --git a/test/battle/ability/mirror_armor.c b/test/battle/ability/mirror_armor.c index cbbd445bff..38ee8dab91 100644 --- a/test/battle/ability/mirror_armor.c +++ b/test/battle/ability/mirror_armor.c @@ -198,7 +198,6 @@ DOUBLE_BATTLE_TEST("Mirror Armor lowers Speed of the partner Pokemon after Court SINGLE_BATTLE_TEST("Mirror Armor reflects Tangling Hair speed drop") { - KNOWN_FAILING; GIVEN { PLAYER(SPECIES_DUGTRIO) { Ability(ABILITY_TANGLING_HAIR); } OPPONENT(SPECIES_CORVIKNIGHT) { Ability(ABILITY_MIRROR_ARMOR); }