From daeba066e03ade741a6c82beeb2c547d0e6c6a91 Mon Sep 17 00:00:00 2001 From: Nephrite Date: Tue, 2 Jan 2024 05:51:40 +0900 Subject: [PATCH] Fixed SetMoveEffect + Sheer Force --- asm/macros/battle_script.inc | 5 ++++- data/battle_scripts_1.s | 29 ++++++++++------------------- src/battle_script_commands.c | 2 +- test/battle/ability/sheer_force.c | 11 ++++++++--- 4 files changed, 23 insertions(+), 24 deletions(-) diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 5b7352d78b..8fd4917a59 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -112,7 +112,10 @@ .byte 0x17 .endm - .macro clearstatusfromeffect battler:req + .macro clearstatusfromeffect battler:req, moveEffect=0 + .if \moveEffect != 0 + setmoveeffect \moveEffect + .endif .byte 0x18 .byte \battler .endm diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 3d111da6d2..149c08884c 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -938,7 +938,7 @@ BattleScript_FirstChargingTurnMeteorBeam:: copybyte cMULTISTRING_CHOOSER, sTWOTURN_STRINGID printfromtable gFirstTurnOfTwoStringIds waitmessage B_WAIT_TIME_LONG - seteffectsecondary MOVE_EFFECT_SP_ATK_PLUS_1 | MOVE_EFFECT_AFFECTS_USER + seteffectprimary MOVE_EFFECT_SP_ATK_PLUS_1 | MOVE_EFFECT_AFFECTS_USER return BattleScript_EffectSkyDrop: @@ -963,9 +963,8 @@ BattleScript_SkyDropWork: goto BattleScript_MoveEnd BattleScript_SkyDropTurn2: attackcanceler - setmoveeffect MOVE_EFFECT_CHARGING setbyte sB_ANIM_TURN, 0x1 - clearstatusfromeffect BS_ATTACKER + clearstatusfromeffect BS_ATTACKER, MOVE_EFFECT_CHARGING orword gHitMarker, HITMARKER_NO_PPDEDUCT clearsemiinvulnerablebit attackstring @@ -991,8 +990,7 @@ BattleScript_SkyDropChangedTarget: BattleScript_SkyDropFlyingConfuseLock: seteffectprimary MOVE_EFFECT_CONFUSION BattleScript_SkyDropFlyingAlreadyConfused: - setmoveeffect MOVE_EFFECT_THRASH - clearstatusfromeffect BS_TARGET + clearstatusfromeffect BS_TARGET, MOVE_EFFECT_THRASH jumpifstatus2 BS_TARGET, STATUS2_CONFUSION, BattleScript_MoveEnd setbyte BS_ATTACKER, BS_TARGET goto BattleScript_ThrashConfuses @@ -3797,9 +3795,8 @@ BattleScript_KOFail:: BattleScript_TwoTurnMovesSecondTurn:: attackcanceler - setmoveeffect MOVE_EFFECT_CHARGING setbyte sB_ANIM_TURN, 1 - clearstatusfromeffect BS_ATTACKER + clearstatusfromeffect BS_ATTACKER, MOVE_EFFECT_CHARGING orword gHitMarker, HITMARKER_NO_PPDEDUCT goto BattleScript_HitFromAccCheck @@ -4127,9 +4124,8 @@ BattleScript_EffectGeomancy: call BattleScript_PowerHerbActivation BattleScript_GeomancySecondTurn: attackcanceler - setmoveeffect MOVE_EFFECT_CHARGING setbyte sB_ANIM_TURN, 1 - clearstatusfromeffect BS_ATTACKER + clearstatusfromeffect BS_ATTACKER, MOVE_EFFECT_CHARGING orword gHitMarker, HITMARKER_NO_PPDEDUCT attackstring jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPATK, MAX_STAT_STAGE, BattleScript_GeomancyDoMoveAnim @@ -4197,8 +4193,7 @@ BattleScript_EffectRage:: seteffectprimary MOVE_EFFECT_RAGE goto BattleScript_HitFromAtkString BattleScript_RageMiss:: - setmoveeffect MOVE_EFFECT_RAGE - clearstatusfromeffect BS_ATTACKER + clearstatusfromeffect BS_ATTACKER, MOVE_EFFECT_RAGE goto BattleScript_PrintMoveMissed BattleScript_EffectMimic:: @@ -5108,9 +5103,8 @@ BattleScript_FirstTurnSemiInvulnerable:: call BattleScript_PowerHerbActivation BattleScript_SecondTurnSemiInvulnerable:: attackcanceler - setmoveeffect MOVE_EFFECT_CHARGING setbyte sB_ANIM_TURN, 1 - clearstatusfromeffect BS_ATTACKER + clearstatusfromeffect BS_ATTACKER, MOVE_EFFECT_CHARGING orword gHitMarker, HITMARKER_NO_PPDEDUCT BattleScript_SemiInvulnerableTryHit:: accuracycheck BattleScript_SemiInvulnerableMiss, ACC_CURR_MOVE @@ -5739,7 +5733,6 @@ BattleScript_EffectTeeterDance:: setbyte gBattlerTarget, 0 BattleScript_TeeterDanceLoop:: movevaluescleanup - setmoveeffect MOVE_EFFECT_CONFUSION jumpifbyteequal gBattlerAttacker, gBattlerTarget, BattleScript_TeeterDanceLoopIncrement jumpifability BS_TARGET, ABILITY_OWN_TEMPO, BattleScript_TeeterDanceOwnTempoPrevents jumpifsubstituteblocks BattleScript_TeeterDanceSubstitutePrevents @@ -5749,7 +5742,7 @@ BattleScript_TeeterDanceLoop:: jumpifsafeguard BattleScript_TeeterDanceSafeguardProtected attackanimation waitanimation - seteffectprimary + seteffectprimary MOVE_EFFECT_CONFUSION resultmessage waitmessage B_WAIT_TIME_LONG BattleScript_TeeterDanceDoMoveEndIncrement:: @@ -6573,8 +6566,7 @@ BattleScript_BideStoringEnergy:: BattleScript_BideAttack:: attackcanceler - setmoveeffect MOVE_EFFECT_CHARGING - clearstatusfromeffect BS_ATTACKER + clearstatusfromeffect BS_ATTACKER, MOVE_EFFECT_CHARGING printstring STRINGID_PKMNUNLEASHEDENERGY waitmessage B_WAIT_TIME_LONG accuracycheck BattleScript_MoveMissed, ACC_CURR_MOVE @@ -6597,8 +6589,7 @@ BattleScript_BideAttack:: BattleScript_BideNoEnergyToAttack:: attackcanceler - setmoveeffect MOVE_EFFECT_CHARGING - clearstatusfromeffect BS_ATTACKER + clearstatusfromeffect BS_ATTACKER, MOVE_EFFECT_CHARGING printstring STRINGID_PKMNUNLEASHEDENERGY waitmessage B_WAIT_TIME_LONG goto BattleScript_ButItFailed diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index d2a0a931b8..8a56bd8227 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -2820,7 +2820,7 @@ void SetMoveEffect(bool32 primary, bool32 certain) && !primary && gBattleScripting.moveEffect <= MOVE_EFFECT_CONFUSION) INCREMENT_RESET_RETURN - if (TestSheerForceFlag(gBattlerAttacker, gCurrentMove) && gBattleScripting.moveEffect != MOVE_EFFECT_CHARGING) + if (TestSheerForceFlag(gBattlerAttacker, gCurrentMove) && !primary && gBattleScripting.moveEffect != MOVE_EFFECT_CHARGING) INCREMENT_RESET_RETURN if (gBattleMons[gEffectBattler].hp == 0 && !activateAfterFaint) diff --git a/test/battle/ability/sheer_force.c b/test/battle/ability/sheer_force.c index 38895599f3..dadd706bed 100644 --- a/test/battle/ability/sheer_force.c +++ b/test/battle/ability/sheer_force.c @@ -20,8 +20,12 @@ SINGLE_BATTLE_TEST("Sheer Force boosts power, but removes secondary effects of m PLAYER(SPECIES_TAUROS) { Ability(ability); Status1(move == MOVE_SNORE ? STATUS1_SLEEP : STATUS1_NONE); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, move); } - if (gBattleMoves[move].effect == EFFECT_TWO_TURNS_ATTACK || gBattleMoves[move].effect == EFFECT_SEMI_INVULNERABLE) { + if (move == MOVE_ALLURING_VOICE) // Alluring Voice requires the target to boost stats to have an effect + TURN { MOVE(opponent, MOVE_AGILITY); MOVE(player, move); } + else + TURN { MOVE(player, move); } + if (gBattleMoves[move].effect == EFFECT_TWO_TURNS_ATTACK || gBattleMoves[move].effect == EFFECT_SEMI_INVULNERABLE + || gBattleMoves[move].effect == EFFECT_METEOR_BEAM) { TURN { SKIP_TURN(player); } TURN { ; } } @@ -31,7 +35,8 @@ SINGLE_BATTLE_TEST("Sheer Force boosts power, but removes secondary effects of m if (ability == ABILITY_SHEER_FORCE) { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + if (move != MOVE_ALLURING_VOICE) + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); STATUS_ICON(opponent, STATUS1_FREEZE); STATUS_ICON(opponent, STATUS1_POISON); STATUS_ICON(opponent, STATUS1_BURN);