From 97e4aa514af7807562a5ceeb7025718158bd67cd Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sat, 10 Feb 2024 20:15:21 +0100 Subject: [PATCH] Reverted Intrepid Sword and Dauntless Shield field unification (#4171) * Reverts back Intrepid Sword and Dauntless Shield field unification * fixes --- data/battle_scripts_1.s | 2 ++ include/battle.h | 4 ++- src/battle_util.c | 16 ++++----- test/battle/ability/intrepid_sword.c | 30 ++++++++++++++++ test/battle/ability/supersweet_syrup.c | 47 ++++++++++++++++++++++++++ 5 files changed, 90 insertions(+), 9 deletions(-) create mode 100644 test/battle/ability/supersweet_syrup.c diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index b8ff9794de..4285ad6dc7 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -7833,6 +7833,7 @@ BattleScript_IntimidateInReverse: BattleScript_SupersweetSyrupActivates:: showabilitypopup BS_ATTACKER + copybyte sSAVED_BATTLER, gBattlerTarget pause B_WAIT_TIME_LONG destroyabilitypopup printstring STRINGID_SUPERSWEETAROMAWAFTS @@ -7861,6 +7862,7 @@ BattleScript_SupersweetSyrupLoopIncrement: BattleScript_SupersweetSyrupEnd: copybyte sBATTLER, gBattlerAttacker destroyabilitypopup + copybyte gBattlerTarget, sSAVED_BATTLER pause B_WAIT_TIME_MED end3 diff --git a/include/battle.h b/include/battle.h index 6dfb2aeb8c..5628dd3146 100644 --- a/include/battle.h +++ b/include/battle.h @@ -767,7 +767,9 @@ struct BattleStruct u8 enduredDamage; u8 transformZeroToHero[NUM_BATTLE_SIDES]; u8 stickySyrupdBy[MAX_BATTLERS_COUNT]; - u8 abilityActivated[NUM_BATTLE_SIDES]; + u8 intrepidSwordBoost[NUM_BATTLE_SIDES]; + u8 dauntlessShieldBoost[NUM_BATTLE_SIDES]; + u8 supersweetSyrup[NUM_BATTLE_SIDES]; u8 supremeOverlordCounter[MAX_BATTLERS_COUNT]; }; diff --git a/src/battle_util.c b/src/battle_util.c index f6fee3a372..905aacc225 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4453,8 +4453,8 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 case ABILITY_INTIMIDATE: if (!gSpecialStatuses[battler].switchInAbilityDone) { - gSpecialStatuses[battler].switchInAbilityDone = TRUE; gBattlerAttacker = battler; + gSpecialStatuses[battler].switchInAbilityDone = TRUE; SET_STATCHANGER(STAT_ATK, 1, TRUE); BattleScriptPushCursorAndCallback(BattleScript_IntimidateActivates); effect++; @@ -4462,11 +4462,11 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 break; case ABILITY_SUPERSWEET_SYRUP: if (!gSpecialStatuses[battler].switchInAbilityDone - && !(gBattleStruct->abilityActivated[GetBattlerSide(battler)] & gBitTable[gBattlerPartyIndexes[battler]])) + && !(gBattleStruct->supersweetSyrup[GetBattlerSide(battler)] & gBitTable[gBattlerPartyIndexes[battler]])) { - gBattleStruct->abilityActivated[GetBattlerSide(battler)] |= gBitTable[gBattlerPartyIndexes[battler]]; - gSpecialStatuses[battler].switchInAbilityDone = TRUE; gBattlerAttacker = battler; + gSpecialStatuses[battler].switchInAbilityDone = TRUE; + gBattleStruct->supersweetSyrup[GetBattlerSide(battler)] |= gBitTable[gBattlerPartyIndexes[battler]]; BattleScriptPushCursorAndCallback(BattleScript_SupersweetSyrupActivates); effect++; } @@ -4502,12 +4502,12 @@ 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) - && !(gBattleStruct->abilityActivated[GetBattlerSide(battler)] & gBitTable[gBattlerPartyIndexes[battler]])) + && !(gBattleStruct->intrepidSwordBoost[GetBattlerSide(battler)] & gBitTable[gBattlerPartyIndexes[battler]])) { gBattleScripting.savedBattler = gBattlerAttacker; gBattlerAttacker = battler; if (B_INTREPID_SWORD == GEN_9) - gBattleStruct->abilityActivated[GetBattlerSide(battler)] |= gBitTable[gBattlerPartyIndexes[battler]]; + gBattleStruct->intrepidSwordBoost[GetBattlerSide(battler)] |= gBitTable[gBattlerPartyIndexes[battler]]; gSpecialStatuses[battler].switchInAbilityDone = TRUE; SET_STATCHANGER(STAT_ATK, 1, FALSE); BattleScriptPushCursorAndCallback(BattleScript_BattlerAbilityStatRaiseOnSwitchIn); @@ -4516,12 +4516,12 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 break; case ABILITY_DAUNTLESS_SHIELD: if (!gSpecialStatuses[battler].switchInAbilityDone && CompareStat(battler, STAT_DEF, MAX_STAT_STAGE, CMP_LESS_THAN) - && !(gBattleStruct->abilityActivated[GetBattlerSide(battler)] & gBitTable[gBattlerPartyIndexes[battler]])) + && !(gBattleStruct->dauntlessShieldBoost[GetBattlerSide(battler)] & gBitTable[gBattlerPartyIndexes[battler]])) { gBattleScripting.savedBattler = gBattlerAttacker; gBattlerAttacker = battler; if (B_DAUNTLESS_SHIELD == GEN_9) - gBattleStruct->abilityActivated[GetBattlerSide(battler)] |= gBitTable[gBattlerPartyIndexes[battler]]; + gBattleStruct->dauntlessShieldBoost[GetBattlerSide(battler)] |= gBitTable[gBattlerPartyIndexes[battler]]; gSpecialStatuses[battler].switchInAbilityDone = TRUE; SET_STATCHANGER(STAT_DEF, 1, FALSE); BattleScriptPushCursorAndCallback(BattleScript_BattlerAbilityStatRaiseOnSwitchIn); diff --git a/test/battle/ability/intrepid_sword.c b/test/battle/ability/intrepid_sword.c index 9f2901a8d2..0194a9be5b 100644 --- a/test/battle/ability/intrepid_sword.c +++ b/test/battle/ability/intrepid_sword.c @@ -64,3 +64,33 @@ SINGLE_BATTLE_TEST("Intrepid Sword activates when it's no longer effected by Neu } } +SINGLE_BATTLE_TEST("Intrepid Sword and Dauntless Shield both can be Skill Swapped and active their effects on the Skill Swap user") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_SKILL_SWAP].effect == EFFECT_SKILL_SWAP); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_ZACIAN) { Ability(ABILITY_INTREPID_SWORD); } + OPPONENT(SPECIES_ZAMAZENTA) { Ability(ABILITY_DAUNTLESS_SHIELD); } + } WHEN { + TURN { MOVE(player, MOVE_SKILL_SWAP); } + TURN { SWITCH(opponent, 1); MOVE(player, MOVE_SKILL_SWAP); } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_INTREPID_SWORD); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Zacian's Intrepid Sword raised its Attack!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_SKILL_SWAP, player); + ABILITY_POPUP(player, ABILITY_INTREPID_SWORD); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Wobbuffet's Intrepid Sword raised its Attack!"); + + ABILITY_POPUP(opponent, ABILITY_DAUNTLESS_SHIELD); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Zamazenta's Dauntless Shield raised its Defense!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_SKILL_SWAP, player); + ABILITY_POPUP(player, ABILITY_DAUNTLESS_SHIELD); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Wobbuffet's Dauntless Shield raised its Defense!"); + } +} diff --git a/test/battle/ability/supersweet_syrup.c b/test/battle/ability/supersweet_syrup.c new file mode 100644 index 0000000000..016c621ee5 --- /dev/null +++ b/test/battle/ability/supersweet_syrup.c @@ -0,0 +1,47 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Supersweet Syrup lowers evasion once per battle by one stage") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_DIPPLIN) { Ability(ABILITY_SUPERSWEET_SYRUP); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { SWITCH(opponent, 1); } + TURN { SWITCH(opponent, 0); } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_SUPERSWEET_SYRUP); + MESSAGE("A supersweet aroma is wafting from the syrup covering Foe Dipplin!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("2 withdrew Dipplin!"); + MESSAGE("2 withdrew Wobbuffet!"); + NONE_OF { + ABILITY_POPUP(opponent, ABILITY_SUPERSWEET_SYRUP); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("A supersweet aroma is wafting from the syrup covering Foes Dipplin!"); + } + } THEN { + EXPECT_EQ(player->statStages[STAT_EVASION], DEFAULT_STAT_STAGE - 1); + } +} + +DOUBLE_BATTLE_TEST("Supersweet Syrup lowers evasion of both opposing mon's in battle") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_DIPPLIN) { Ability(ABILITY_SUPERSWEET_SYRUP); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { } + } SCENE { + ABILITY_POPUP(opponentLeft, ABILITY_SUPERSWEET_SYRUP); + MESSAGE("A supersweet aroma is wafting from the syrup covering Foe Dipplin!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + } THEN { + EXPECT_EQ(playerLeft->statStages[STAT_EVASION], DEFAULT_STAT_STAGE - 1); + EXPECT_EQ(playerRight->statStages[STAT_EVASION], DEFAULT_STAT_STAGE - 1); + } +}