From a26da51e9d55baf3fa5ca9de37136ed8d8712270 Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Fri, 12 Nov 2021 12:44:45 -0500 Subject: [PATCH 1/7] fix contrary animations for MOVE_EFFECT_statchange --- include/constants/battle_script_commands.h | 1 + src/battle_script_commands.c | 131 ++++++++++++++++++++- 2 files changed, 127 insertions(+), 5 deletions(-) diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 34fa1d3707..7ceb1d64bf 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -225,6 +225,7 @@ // Cmd_statbuffchange #define STAT_BUFF_ALLOW_PTR (1 << 0) // If set, allow use of jumpptr. Set in every use of statbuffchange #define STAT_BUFF_NOT_PROTECT_AFFECTED (1 << 5) +#define STAT_BUFF_UPDATE_MOVE_EFFECT (1 << 6) // stat change flags for Cmd_playstatchangeanimation #define STAT_CHANGE_NEGATIVE (1 << 0) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 24a758153f..37c46055da 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3071,7 +3071,7 @@ void SetMoveEffect(bool32 primary, u32 certain) if (NoAliveMonsForEitherParty() || ChangeStatBuffs(SET_STAT_BUFF_VALUE(1), gBattleScripting.moveEffect - MOVE_EFFECT_ATK_PLUS_1 + 1, - affectsUser, 0)) + affectsUser | STAT_BUFF_UPDATE_MOVE_EFFECT, 0)) { gBattlescriptCurrInstr++; } @@ -3096,7 +3096,7 @@ void SetMoveEffect(bool32 primary, u32 certain) if (ChangeStatBuffs(SET_STAT_BUFF_VALUE(1) | STAT_BUFF_NEGATIVE, gBattleScripting.moveEffect - MOVE_EFFECT_ATK_MINUS_1 + 1, - flags, gBattlescriptCurrInstr + 1)) + flags | STAT_BUFF_UPDATE_MOVE_EFFECT, gBattlescriptCurrInstr + 1)) { if (!mirrorArmorReflected) gBattlescriptCurrInstr++; @@ -3119,7 +3119,7 @@ void SetMoveEffect(bool32 primary, u32 certain) if (NoAliveMonsForEitherParty() || ChangeStatBuffs(SET_STAT_BUFF_VALUE(2), gBattleScripting.moveEffect - MOVE_EFFECT_ATK_PLUS_2 + 1, - affectsUser, 0)) + affectsUser | STAT_BUFF_UPDATE_MOVE_EFFECT, 0)) { gBattlescriptCurrInstr++; } @@ -3143,7 +3143,7 @@ void SetMoveEffect(bool32 primary, u32 certain) flags |= STAT_BUFF_ALLOW_PTR; if (ChangeStatBuffs(SET_STAT_BUFF_VALUE(2) | STAT_BUFF_NEGATIVE, gBattleScripting.moveEffect - MOVE_EFFECT_ATK_MINUS_2 + 1, - flags, gBattlescriptCurrInstr + 1)) + flags | STAT_BUFF_UPDATE_MOVE_EFFECT, gBattlescriptCurrInstr + 1)) { if (!mirrorArmorReflected) gBattlescriptCurrInstr++; @@ -4657,9 +4657,55 @@ static void Cmd_endselectionscript(void) *(gBattlerAttacker + gBattleStruct->selectionScriptFinished) = TRUE; } +static u32 ReverseStatAnimId(u16 *argumentPtr) +{ + u8 value = 0; + switch (GET_STAT_BUFF_VALUE_WITH_SIGN(gBattleScripting.statChanger)) + { + case SET_STAT_BUFF_VALUE(1): // +1 + value = STAT_ANIM_MINUS1; + break; + case SET_STAT_BUFF_VALUE(2): // +2 + value = STAT_ANIM_MINUS2; + break; + case SET_STAT_BUFF_VALUE(3): // +3 + value = STAT_ANIM_MINUS2; + break; + case SET_STAT_BUFF_VALUE(4): // +4 + value = STAT_ANIM_MINUS2; + break; + case SET_STAT_BUFF_VALUE(5): // +5 + value = STAT_ANIM_MINUS2; + break; + case SET_STAT_BUFF_VALUE(6): // +6 + value = STAT_ANIM_MINUS2; + break; + case SET_STAT_BUFF_VALUE(1) | STAT_BUFF_NEGATIVE: // -1 + value = STAT_ANIM_PLUS1; + break; + case SET_STAT_BUFF_VALUE(2) | STAT_BUFF_NEGATIVE: // -2 + value = STAT_ANIM_PLUS2; + break; + case SET_STAT_BUFF_VALUE(3) | STAT_BUFF_NEGATIVE: // -3 + value = STAT_ANIM_PLUS2; + break; + case SET_STAT_BUFF_VALUE(4) | STAT_BUFF_NEGATIVE: // -1 + value = STAT_ANIM_PLUS2; + break; + case SET_STAT_BUFF_VALUE(5) | STAT_BUFF_NEGATIVE: // -2 + value = STAT_ANIM_PLUS2; + break; + case SET_STAT_BUFF_VALUE(6) | STAT_BUFF_NEGATIVE: // -3 + value = STAT_ANIM_PLUS2; + break; + } + + *argumentPtr = GET_STAT_BUFF_ID(gBattleScripting.statChanger) + value - 1; +} + static void Cmd_playanimation(void) { - const u16* argumentPtr; + u16* argumentPtr; u8 animId = gBattlescriptCurrInstr[2]; gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); @@ -4673,6 +4719,9 @@ static void Cmd_playanimation(void) return; } #endif + + //if (animId == B_ANIM_STATS_CHANGE && GetBattlerAbility(gActiveBattler) == ABILITY_CONTRARY) + //ReverseStatAnimId(argumentPtr); if (animId == B_ANIM_STATS_CHANGE || animId == B_ANIM_SNATCH_MOVE @@ -9815,6 +9864,72 @@ static void Cmd_setdrainedhp(void) gBattlescriptCurrInstr++; } +static u16 ReverseStatChangeMoveEffect(u16 moveEffect) +{ + switch (moveEffect) + { + // +1 + case MOVE_EFFECT_ATK_PLUS_1: + return MOVE_EFFECT_ATK_MINUS_1; + case MOVE_EFFECT_DEF_PLUS_1: + return MOVE_EFFECT_DEF_MINUS_1; + case MOVE_EFFECT_SPD_PLUS_1: + return MOVE_EFFECT_SPD_MINUS_1; + case MOVE_EFFECT_SP_ATK_PLUS_1: + return MOVE_EFFECT_SP_ATK_MINUS_1; + case MOVE_EFFECT_SP_DEF_PLUS_1: + return MOVE_EFFECT_SP_DEF_MINUS_1; + case MOVE_EFFECT_ACC_PLUS_1: + return MOVE_EFFECT_ACC_MINUS_1; + case MOVE_EFFECT_EVS_PLUS_1: + return MOVE_EFFECT_EVS_MINUS_1; + // -1 + case MOVE_EFFECT_ATK_MINUS_1: + return MOVE_EFFECT_ATK_PLUS_1; + case MOVE_EFFECT_DEF_MINUS_1: + return MOVE_EFFECT_DEF_PLUS_1; + case MOVE_EFFECT_SPD_MINUS_1: + return MOVE_EFFECT_SPD_PLUS_1; + case MOVE_EFFECT_SP_ATK_MINUS_1: + return MOVE_EFFECT_SP_ATK_PLUS_1; + case MOVE_EFFECT_SP_DEF_MINUS_1: + return MOVE_EFFECT_SP_DEF_PLUS_1; + case MOVE_EFFECT_ACC_MINUS_1: + return MOVE_EFFECT_ACC_PLUS_1; + case MOVE_EFFECT_EVS_MINUS_1: + // +2 + case MOVE_EFFECT_ATK_PLUS_2: + return MOVE_EFFECT_ATK_MINUS_2; + case MOVE_EFFECT_DEF_PLUS_2: + return MOVE_EFFECT_DEF_MINUS_2; + case MOVE_EFFECT_SPD_PLUS_2: + return MOVE_EFFECT_SPD_MINUS_2; + case MOVE_EFFECT_SP_ATK_PLUS_2: + return MOVE_EFFECT_SP_ATK_MINUS_2; + case MOVE_EFFECT_SP_DEF_PLUS_2: + return MOVE_EFFECT_SP_DEF_MINUS_2; + case MOVE_EFFECT_ACC_PLUS_2: + return MOVE_EFFECT_ACC_MINUS_2; + case MOVE_EFFECT_EVS_PLUS_2: + return MOVE_EFFECT_EVS_MINUS_2; + // -2 + case MOVE_EFFECT_ATK_MINUS_2: + return MOVE_EFFECT_ATK_PLUS_2; + case MOVE_EFFECT_DEF_MINUS_2: + return MOVE_EFFECT_DEF_PLUS_2; + case MOVE_EFFECT_SPD_MINUS_2: + return MOVE_EFFECT_SPD_PLUS_2; + case MOVE_EFFECT_SP_ATK_MINUS_2: + return MOVE_EFFECT_SP_ATK_PLUS_2; + case MOVE_EFFECT_SP_DEF_MINUS_2: + return MOVE_EFFECT_SP_DEF_PLUS_2; + case MOVE_EFFECT_ACC_MINUS_2: + return MOVE_EFFECT_ACC_PLUS_2; + case MOVE_EFFECT_EVS_MINUS_2: + return MOVE_EFFECT_EVS_PLUS_2; + } +} + static u32 ChangeStatBuffs(s8 statValue, u32 statId, u32 flags, const u8 *BS_ptr) { bool32 certain = FALSE; @@ -9843,6 +9958,11 @@ static u32 ChangeStatBuffs(s8 statValue, u32 statId, u32 flags, const u8 *BS_ptr { statValue ^= STAT_BUFF_NEGATIVE; gBattleScripting.statChanger ^= STAT_BUFF_NEGATIVE; + if (flags & STAT_BUFF_UPDATE_MOVE_EFFECT) + { + flags &= ~(STAT_BUFF_UPDATE_MOVE_EFFECT); + gBattleScripting.moveEffect = ReverseStatChangeMoveEffect(gBattleScripting.moveEffect); + } } else if (GetBattlerAbility(gActiveBattler) == ABILITY_SIMPLE) { @@ -9963,6 +10083,7 @@ static u32 ChangeStatBuffs(s8 statValue, u32 statId, u32 flags, const u8 *BS_ptr statValue = -1; else if (gBattleMons[gActiveBattler].statStages[statId] == 2 && statValue < -2) statValue = -2; + gBattleTextBuff2[0] = B_BUFF_PLACEHOLDER_BEGIN; index = 1; if (statValue == -2) From 2ff9c2f8341a7a1da9de88bfc15103a436f12e7c Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Fri, 12 Nov 2021 13:00:28 -0500 Subject: [PATCH 2/7] remove test code --- src/battle_script_commands.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 37c46055da..65b149817a 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -4720,9 +4720,6 @@ static void Cmd_playanimation(void) } #endif - //if (animId == B_ANIM_STATS_CHANGE && GetBattlerAbility(gActiveBattler) == ABILITY_CONTRARY) - //ReverseStatAnimId(argumentPtr); - if (animId == B_ANIM_STATS_CHANGE || animId == B_ANIM_SNATCH_MOVE || animId == B_ANIM_MEGA_EVOLUTION From 395cffa702a6ed06fd236c407b0f0d96ad2d7588 Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Fri, 12 Nov 2021 13:04:33 -0500 Subject: [PATCH 3/7] remove ReverseStatAnimId --- src/battle_script_commands.c | 46 ------------------------------------ 1 file changed, 46 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 65b149817a..51aa365158 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -4657,52 +4657,6 @@ static void Cmd_endselectionscript(void) *(gBattlerAttacker + gBattleStruct->selectionScriptFinished) = TRUE; } -static u32 ReverseStatAnimId(u16 *argumentPtr) -{ - u8 value = 0; - switch (GET_STAT_BUFF_VALUE_WITH_SIGN(gBattleScripting.statChanger)) - { - case SET_STAT_BUFF_VALUE(1): // +1 - value = STAT_ANIM_MINUS1; - break; - case SET_STAT_BUFF_VALUE(2): // +2 - value = STAT_ANIM_MINUS2; - break; - case SET_STAT_BUFF_VALUE(3): // +3 - value = STAT_ANIM_MINUS2; - break; - case SET_STAT_BUFF_VALUE(4): // +4 - value = STAT_ANIM_MINUS2; - break; - case SET_STAT_BUFF_VALUE(5): // +5 - value = STAT_ANIM_MINUS2; - break; - case SET_STAT_BUFF_VALUE(6): // +6 - value = STAT_ANIM_MINUS2; - break; - case SET_STAT_BUFF_VALUE(1) | STAT_BUFF_NEGATIVE: // -1 - value = STAT_ANIM_PLUS1; - break; - case SET_STAT_BUFF_VALUE(2) | STAT_BUFF_NEGATIVE: // -2 - value = STAT_ANIM_PLUS2; - break; - case SET_STAT_BUFF_VALUE(3) | STAT_BUFF_NEGATIVE: // -3 - value = STAT_ANIM_PLUS2; - break; - case SET_STAT_BUFF_VALUE(4) | STAT_BUFF_NEGATIVE: // -1 - value = STAT_ANIM_PLUS2; - break; - case SET_STAT_BUFF_VALUE(5) | STAT_BUFF_NEGATIVE: // -2 - value = STAT_ANIM_PLUS2; - break; - case SET_STAT_BUFF_VALUE(6) | STAT_BUFF_NEGATIVE: // -3 - value = STAT_ANIM_PLUS2; - break; - } - - *argumentPtr = GET_STAT_BUFF_ID(gBattleScripting.statChanger) + value - 1; -} - static void Cmd_playanimation(void) { u16* argumentPtr; From d5db3293183e49cf317cd5af510c417d8d770f7c Mon Sep 17 00:00:00 2001 From: ghoulslash <41651341+ghoulslash@users.noreply.github.com> Date: Fri, 12 Nov 2021 13:07:41 -0500 Subject: [PATCH 4/7] Update src/battle_script_commands.c Co-authored-by: ultima-soul <33333039+ultima-soul@users.noreply.github.com> --- src/battle_script_commands.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 51aa365158..d36a37072e 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -10034,7 +10034,6 @@ static u32 ChangeStatBuffs(s8 statValue, u32 statId, u32 flags, const u8 *BS_ptr statValue = -1; else if (gBattleMons[gActiveBattler].statStages[statId] == 2 && statValue < -2) statValue = -2; - gBattleTextBuff2[0] = B_BUFF_PLACEHOLDER_BEGIN; index = 1; if (statValue == -2) From 0634d3e541ab336b24ea64b1b234b535f5efc598 Mon Sep 17 00:00:00 2001 From: ghoulslash <41651341+ghoulslash@users.noreply.github.com> Date: Fri, 12 Nov 2021 13:07:53 -0500 Subject: [PATCH 5/7] Update src/battle_script_commands.c Co-authored-by: LOuroboros --- src/battle_script_commands.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index d36a37072e..0dbe68acf3 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -4673,7 +4673,6 @@ static void Cmd_playanimation(void) return; } #endif - if (animId == B_ANIM_STATS_CHANGE || animId == B_ANIM_SNATCH_MOVE || animId == B_ANIM_MEGA_EVOLUTION From 876813a41843932e3aefc1868e42bfd05038cafd Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Fri, 12 Nov 2021 13:08:23 -0500 Subject: [PATCH 6/7] revert old attempts --- src/battle_script_commands.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 0dbe68acf3..578f6d1807 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -4659,7 +4659,7 @@ static void Cmd_endselectionscript(void) static void Cmd_playanimation(void) { - u16* argumentPtr; + const u16* argumentPtr; u8 animId = gBattlescriptCurrInstr[2]; gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); From cdb20e89fcbc6123aba19b5a964d013ae06b0c2e Mon Sep 17 00:00:00 2001 From: ghoulslash <41651341+ghoulslash@users.noreply.github.com> Date: Fri, 12 Nov 2021 13:12:05 -0500 Subject: [PATCH 7/7] Update src/battle_script_commands.c Co-authored-by: ultima-soul <33333039+ultima-soul@users.noreply.github.com> --- src/battle_script_commands.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 578f6d1807..7134818e06 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -4673,6 +4673,7 @@ static void Cmd_playanimation(void) return; } #endif + if (animId == B_ANIM_STATS_CHANGE || animId == B_ANIM_SNATCH_MOVE || animId == B_ANIM_MEGA_EVOLUTION