diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 638f81bf7b..640d57bc6e 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -9333,8 +9333,10 @@ BattleScript_TargetAbilityStatRaiseRet_End: @@@ MAX MOVES @@@ BattleScript_EffectMaxMove:: attackcanceler + attackstring + ppreduce accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON - goto BattleScript_HitFromAtkString + goto BattleScript_HitFromCritCalc BattleScript_EffectRaiseStatAllies:: savetarget diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index d8c8e32e91..820023793d 100755 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1370,8 +1370,23 @@ static void AccuracyCheck(bool32 recalcDragonDarts, const u8 *nextInstr, const u if (gBattleMons[gBattlerTarget].volatiles.lockOn && gDisableStructs[gBattlerTarget].battlerWithSureHit == gBattlerAttacker) gBattlescriptCurrInstr = nextInstr; else if (IsSemiInvulnerable(gBattlerTarget, CHECK_ALL)) + { + if (gBattlerTarget != BATTLE_PARTNER(gBattlerAttacker)) + { + gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED; + gBattleStruct->missStringId[gBattlerTarget] = gBattleCommunication[MISS_TYPE] = B_MSG_AVOIDED_ATK; + } gBattlescriptCurrInstr = failInstr; - else if (!JumpIfMoveAffectedByProtect(gCurrentMove, gBattlerTarget, TRUE, failInstr)) + } + else if (IsBattlerProtected(gBattlerAttacker, gBattlerTarget, gCurrentMove)) + { + gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED; + gBattleStruct->missStringId[gBattlerTarget] = gBattleCommunication[MISS_TYPE] = B_MSG_PROTECTED; + gLastLandedMoves[gBattlerTarget] = 0; + gLastHitByType[gBattlerTarget] = 0; + gBattlescriptCurrInstr = failInstr; + } + else gBattlescriptCurrInstr = nextInstr; if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_DYNAMAX) { diff --git a/test/battle/gimmick/dynamax.c b/test/battle/gimmick/dynamax.c index 0329ee903c..5cf79e2949 100644 --- a/test/battle/gimmick/dynamax.c +++ b/test/battle/gimmick/dynamax.c @@ -1671,6 +1671,20 @@ SINGLE_BATTLE_TEST("Dynamax: Destiny Bond fails if a dynamaxed battler is presen } } +SINGLE_BATTLE_TEST("Dynamax: max move against semi-invulnerable target prints the correct message") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) {Speed(1);}; + OPPONENT(SPECIES_WOBBUFFET) {Speed(2);}; + } WHEN { + TURN { MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_FLY); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_DYNAMAX_GROWTH, player); + MESSAGE("Wobbuffet used Max Strike!"); + MESSAGE("The opposing Wobbuffet avoided the attack!"); + } +} + DOUBLE_BATTLE_TEST("Dynamax stat lowering moves don't make stat-changing abilities apply to partner") { u32 move, stat, ability;