diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index cf2af4bcde..d1dfa5a157 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -56,9 +56,9 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectHit @ EFFECT_UNUSED_31 .4byte BattleScript_EffectRestoreHp @ EFFECT_RESTORE_HP .4byte BattleScript_EffectToxic @ EFFECT_TOXIC - .4byte BattleScript_EffectPayDay @ EFFECT_PAY_DAY + .4byte BattleScript_EffectHit @ EFFECT_UNUSED_34 .4byte BattleScript_EffectLightScreen @ EFFECT_LIGHT_SCREEN - .4byte BattleScript_EffectTriAttack @ EFFECT_TRI_ATTACK + .4byte BattleScript_EffectHit @ EFFECT_UNUSED_36 .4byte BattleScript_EffectRest @ EFFECT_REST .4byte BattleScript_EffectOHKO @ EFFECT_OHKO .4byte BattleScript_EffectHit @ EFFECT_FUSION_COMBO @@ -247,7 +247,7 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectHit @ EFFECT_GYRO_BALL .4byte BattleScript_EffectHit @ EFFECT_ECHOED_VOICE .4byte BattleScript_EffectHit @ EFFECT_PAYBACK - .4byte BattleScript_EffectRound @ EFFECT_ROUND + .4byte BattleScript_EffectHit @ EFFECT_ROUND .4byte BattleScript_EffectHit @ EFFECT_BRINE .4byte BattleScript_EffectHit @ EFFECT_VENOSHOCK .4byte BattleScript_EffectHit @ EFFECT_RETALIATE @@ -312,7 +312,7 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectNobleRoar @ EFFECT_NOBLE_ROAR .4byte BattleScript_EffectVenomDrench @ EFFECT_VENOM_DRENCH .4byte BattleScript_EffectToxicThread @ EFFECT_TOXIC_THREAD - .4byte BattleScript_EffectClearSmog @ EFFECT_CLEAR_SMOG + .4byte BattleScript_EffectHit @ EFFECT_UNUSED_290 .4byte BattleScript_EffectHitSwitchTarget @ EFFECT_HIT_SWITCH_TARGET .4byte BattleScript_EffectFinalGambit @ EFFECT_FINAL_GAMBIT .4byte BattleScript_EffectHit @ EFFECT_CHANGE_TYPE_ON_ITEM @@ -343,11 +343,11 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectSpAtkUpHit @ EFFECT_SP_ATTACK_UP_HIT .4byte BattleScript_EffectHit @ EFFECT_BELCH .4byte BattleScript_EffectPartingShot @ EFFECT_PARTING_SHOT - .4byte BattleScript_EffectSpectralThief @ EFFECT_SPECTRAL_THIEF - .4byte BattleScript_EffectVCreate @ EFFECT_V_CREATE + .4byte BattleScript_EffectHit @ EFFECT_UNUSED_321 + .4byte BattleScript_EffectHit @ EFFECT_UNUSED_322 .4byte BattleScript_EffectMatBlock @ EFFECT_MAT_BLOCK .4byte BattleScript_EffectHit @ EFFECT_STOMPING_TANTRUM - .4byte BattleScript_EffectCoreEnforcer @ EFFECT_CORE_ENFORCER + .4byte BattleScript_EffectHit @ EFFECT_UNUSED_325 .4byte BattleScript_EffectInstruct @ EFFECT_INSTRUCT .4byte BattleScript_EffectThroatChop @ EFFECT_THROAT_CHOP .4byte BattleScript_EffectLaserFocus @ EFFECT_LASER_FOCUS @@ -1468,10 +1468,6 @@ BattleScript_MoveEffectBugBite:: restoretarget return -BattleScript_EffectCoreEnforcer: - setmoveeffect MOVE_EFFECT_CORE_ENFORCER | MOVE_EFFECT_CERTAIN - goto BattleScript_EffectHit - BattleScript_MoveEffectCoreEnforcer:: setgastroacid BattleScript_CoreEnforcerRet printstring STRINGID_PKMNSABILITYSUPPRESSED @@ -1493,10 +1489,6 @@ BattleScript_EffectLaserFocus: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_EffectVCreate: - setmoveeffect MOVE_EFFECT_V_CREATE | MOVE_EFFECT_AFFECTS_USER - goto BattleScript_EffectHit - BattleScript_VCreateStatLoss:: jumpifstat BS_ATTACKER, CMP_GREATER_THAN, STAT_DEF, MIN_STAT_STAGE, BattleScript_VCreateStatAnim jumpifstat BS_ATTACKER, CMP_GREATER_THAN, STAT_SPDEF, MIN_STAT_STAGE, BattleScript_VCreateStatAnim @@ -1532,10 +1524,6 @@ BattleScript_SpectralThiefSteal:: spectralthiefprintstats return -BattleScript_EffectSpectralThief: - setmoveeffect MOVE_EFFECT_SPECTRAL_THIEF - goto BattleScript_EffectHit - BattleScript_EffectPartingShot:: attackcanceler attackstring @@ -2089,10 +2077,6 @@ BattleScript_HitSwitchTargetForceRandomSwitchFailed: setbyte sSWITCH_CASE, B_SWITCH_NORMAL goto BattleScript_MoveEnd -BattleScript_EffectClearSmog: - setmoveeffect MOVE_EFFECT_CLEAR_SMOG - goto BattleScript_EffectHit - BattleScript_EffectToxicThread: setstatchanger STAT_SPEED, 2, TRUE attackcanceler @@ -3066,10 +3050,6 @@ BattleScript_EffectPlaceholder: printstring STRINGID_NOTDONEYET goto BattleScript_MoveEnd -BattleScript_EffectRound: - setmoveeffect MOVE_EFFECT_ROUND - goto BattleScript_EffectHit - BattleScript_EffectHit:: BattleScript_HitFromAtkCanceler:: attackcanceler @@ -3771,10 +3751,6 @@ BattleScript_ImmunityProtected:: call BattleScript_PSNPrevention goto BattleScript_MoveEnd -BattleScript_EffectPayDay:: - setmoveeffect MOVE_EFFECT_PAYDAY - goto BattleScript_EffectHit - BattleScript_EffectAuroraVeil: attackcanceler attackstring @@ -3789,10 +3765,6 @@ BattleScript_EffectLightScreen:: setlightscreen goto BattleScript_PrintReflectLightScreenSafeguardString -BattleScript_EffectTriAttack:: - setmoveeffect MOVE_EFFECT_TRI_ATTACK - goto BattleScript_EffectHit - BattleScript_EffectRest:: attackcanceler attackstring diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index ae37a27b5f..a6ce8f776c 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -35,9 +35,9 @@ #define EFFECT_UNUSED_31 31 #define EFFECT_RESTORE_HP 32 #define EFFECT_TOXIC 33 -#define EFFECT_PAY_DAY 34 +#define EFFECT_UNUSED_34 34 #define EFFECT_LIGHT_SCREEN 35 -#define EFFECT_TRI_ATTACK 36 +#define EFFECT_UNUSED_36 36 #define EFFECT_REST 37 #define EFFECT_OHKO 38 #define EFFECT_FUSION_COMBO 39 @@ -293,7 +293,7 @@ #define EFFECT_NOBLE_ROAR 287 #define EFFECT_VENOM_DRENCH 288 #define EFFECT_TOXIC_THREAD 289 -#define EFFECT_CLEAR_SMOG 290 +#define EFFECT_UNUSED_290 290 #define EFFECT_HIT_SWITCH_TARGET 291 #define EFFECT_FINAL_GAMBIT 292 #define EFFECT_CHANGE_TYPE_ON_ITEM 293 @@ -324,11 +324,11 @@ #define EFFECT_SP_ATTACK_UP_HIT 318 #define EFFECT_BELCH 319 #define EFFECT_PARTING_SHOT 320 -#define EFFECT_SPECTRAL_THIEF 321 -#define EFFECT_V_CREATE 322 +#define EFFECT_UNUSED_321 321 +#define EFFECT_UNUSED_322 322 #define EFFECT_MAT_BLOCK 323 #define EFFECT_STOMPING_TANTRUM 324 -#define EFFECT_CORE_ENFORCER 325 +#define EFFECT_UNUSED_325 325 #define EFFECT_INSTRUCT 326 #define EFFECT_THROAT_CHOP 327 #define EFFECT_LASER_FOCUS 328 diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 5dfd372d2e..f018d08854 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -2089,8 +2089,6 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } } break; - case EFFECT_SPECTRAL_THIEF: - break; case EFFECT_SEMI_INVULNERABLE: if (predictedMove != MOVE_NONE && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER @@ -2178,8 +2176,6 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) || aiData->holdEffects[battlerAtk] == HOLD_EFFECT_ABILITY_SHIELD) ADJUST_SCORE(-10); break; - case EFFECT_CORE_ENFORCER: - break; case EFFECT_SIMPLE_BEAM: if (aiData->abilities[battlerDef] == ABILITY_SIMPLE || IsEntrainmentTargetOrSimpleBeamBannedAbility(aiData->abilities[battlerDef]) @@ -3215,7 +3211,7 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score u32 predictedMove = aiData->predictedMoves[battlerDef]; u32 predictedMoveSlot = GetMoveSlot(GetMovesArray(battlerDef), predictedMove); bool32 isDoubleBattle = IsValidDoubleBattle(battlerAtk); - u32 i; + u32 i = 0; // We only check for moves that have a 20% chance or more for their secondary effect to happen because moves with a smaller chance are rather worthless. We don't want the AI to use those. bool32 sereneGraceBoost = (aiData->abilities[battlerAtk] == ABILITY_SERENE_GRACE && (gBattleMoves[move].secondaryEffectChance >= 20 && gBattleMoves[move].secondaryEffectChance < 100)); @@ -3511,16 +3507,18 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score case EFFECT_HAZE: if (AnyStatIsRaised(BATTLE_PARTNER(battlerAtk)) || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) + { ADJUST_SCORE(-3); break; - // fallthrough + } + goto SHOULD_USE_PHAZING_MOVE; case EFFECT_ROAR: - case EFFECT_CLEAR_SMOG: - if (isDoubleBattle) - score += min(CountPositiveStatStages(battlerDef) + CountPositiveStatStages(BATTLE_PARTNER(battlerDef)), 7); - else - score += min(CountPositiveStatStages(battlerDef), 4); - break; + if (aiData->abilities[battlerDef] == ABILITY_SOUNDPROOF || aiData->abilities[battlerDef] == ABILITY_SUCTION_CUPS) + { + ADJUST_SCORE(-3); + break; + } + goto SHOULD_USE_PHAZING_MOVE; case EFFECT_MULTI_HIT: case EFFECT_TRIPLE_KICK: if (AI_MoveMakesContact(aiData->abilities[battlerAtk], aiData->holdEffects[battlerAtk], move) @@ -4067,36 +4065,7 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score score += (MAX_STAT_STAGE - gBattleMons[battlerAtk].statStages[STAT_ATK]); break; case EFFECT_PSYCH_UP: - case EFFECT_SPECTRAL_THIEF: - // Want to copy positive stat changes - for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) - { - if (gBattleMons[battlerDef].statStages[i] > gBattleMons[battlerAtk].statStages[i]) - { - switch (i) - { - case STAT_ATK: - if (HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)) - ADJUST_SCORE(1); - break; - case STAT_SPATK: - if (HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL)) - ADJUST_SCORE(1); - break; - case STAT_ACC: - case STAT_EVASION: - case STAT_SPEED: - ADJUST_SCORE(1); - break; - case STAT_DEF: - case STAT_SPDEF: - if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_STALL) - ADJUST_SCORE(1); - break; - } - } - } - break; + goto SHOULD_USE_STAT_COPY_MOVE; case EFFECT_SEMI_INVULNERABLE: ADJUST_SCORE(1); if (predictedMove != MOVE_NONE && !isDoubleBattle) @@ -4140,7 +4109,7 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score case EFFECT_SWAGGER: if (HasMoveEffect(battlerAtk, EFFECT_FOUL_PLAY) || HasMoveEffect(battlerAtk, EFFECT_PSYCH_UP) - || HasMoveEffect(battlerAtk, EFFECT_SPECTRAL_THIEF)) + || HasMoveWithMoveEffect(battlerAtk, MOVE_EFFECT_SPECTRAL_THIEF, FALSE)) ADJUST_SCORE(1); if (aiData->abilities[battlerDef] == ABILITY_CONTRARY) @@ -4150,7 +4119,7 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score break; case EFFECT_FLATTER: if (HasMoveEffect(battlerAtk, EFFECT_PSYCH_UP) - || HasMoveEffect(battlerAtk, EFFECT_SPECTRAL_THIEF)) + || HasMoveWithMoveEffect(battlerAtk, MOVE_EFFECT_SPECTRAL_THIEF, FALSE)) ADJUST_SCORE(2); if (aiData->abilities[battlerDef] == ABILITY_CONTRARY) @@ -4899,7 +4868,45 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score { case MOVE_EFFECT_POISON: IncreasePoisonScore(battlerAtk, battlerDef, move, &score); - break; + break; + case MOVE_EFFECT_CLEAR_SMOG: + SHOULD_USE_PHAZING_MOVE: + if (isDoubleBattle) + score += min(CountPositiveStatStages(battlerDef) + CountPositiveStatStages(BATTLE_PARTNER(battlerDef)), 7); + else + score += min(CountPositiveStatStages(battlerDef), 4); + break; + case MOVE_EFFECT_SPECTRAL_THIEF: + SHOULD_USE_STAT_COPY_MOVE: + // Want to copy positive stat changes + for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) + { + if (gBattleMons[battlerDef].statStages[i] > gBattleMons[battlerAtk].statStages[i]) + { + switch (i) + { + case STAT_ATK: + if (HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)) + ADJUST_SCORE(1); + break; + case STAT_SPATK: + if (HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL)) + ADJUST_SCORE(1); + break; + case STAT_ACC: + case STAT_EVASION: + case STAT_SPEED: + ADJUST_SCORE(1); + break; + case STAT_DEF: + case STAT_SPDEF: + if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_STALL) + ADJUST_SCORE(1); + break; + } + } + } + break; } } diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 9b5982d56d..cd96715c6f 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3584,8 +3584,6 @@ void SetMoveEffect(bool32 primary, u32 certain) gBattleScripting.moveEffect = RandomElement(RNG_DIRE_CLAW, sDireClawEffects); SetMoveEffect(TRUE, 0); } - else - gBattlescriptCurrInstr++; break; case MOVE_EFFECT_STEALTH_ROCK: if (!(gSideStatuses[GetBattlerSide(gEffectBattler)] & SIDE_STATUS_STEALTH_ROCK)) @@ -3594,8 +3592,6 @@ void SetMoveEffect(bool32 primary, u32 certain) BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_StealthRockActivates; } - else - gBattlescriptCurrInstr++; break; case MOVE_EFFECT_SPIKES: if (gSideTimers[GetBattlerSide(gEffectBattler)].spikesAmount < 3) @@ -3604,8 +3600,6 @@ void SetMoveEffect(bool32 primary, u32 certain) BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_SpikesActivates; } - else - gBattlescriptCurrInstr++; break; case MOVE_EFFECT_SYRUP_BOMB: if (!(gStatuses4[gEffectBattler] & STATUS4_SYRUP_BOMB)) @@ -3648,12 +3642,13 @@ static void Cmd_seteffectwithchance(void) } gBattleScripting.moveEffect = 0; } - else if (gBattleMoves[gCurrentMove].numAdditionalEffects > 0) + else if (gBattleMoves[gCurrentMove].numAdditionalEffects > gBattleStruct->additionalEffectsCounter) { u32 percentChance = CalcSecondaryEffectChance( gBattlerAttacker, gBattleMoves[gCurrentMove].additionalEffects[gBattleStruct->additionalEffectsCounter].chance ); + const u8 *currentPtr = gBattlescriptCurrInstr; // Activate effect if it's primary (chance == 0) or if RNGesus says so if ((percentChance == 0) || RandomPercentage(RNG_SECONDARY_EFFECT + gBattleStruct->additionalEffectsCounter, percentChance)) @@ -3666,7 +3661,9 @@ static void Cmd_seteffectwithchance(void) percentChance >= 100 // certain to happen ); } - else + + // Move script along if we haven't jumped elsewhere + if (gBattlescriptCurrInstr == currentPtr) gBattlescriptCurrInstr = cmd->nextInstr; // Call seteffectwithchance again in the case of a move with multiple effects @@ -3676,7 +3673,7 @@ static void Cmd_seteffectwithchance(void) gBattleScripting.moveEffect = MOVE_EFFECT_CONTINUE; } else - gBattleStruct->additionalEffectsCounter = gBattleScripting.moveEffect = 0; + gBattleScripting.moveEffect = 0; } else { @@ -6064,6 +6061,7 @@ static void Cmd_moveend(void) gBattleStruct->zmove.effect = EFFECT_HIT; gBattleStruct->hitSwitchTargetFailed = FALSE; gBattleStruct->isAtkCancelerForCalledMove = FALSE; + gBattleStruct->additionalEffectsCounter = 0; gBattleScripting.moveendState++; break; case MOVEEND_COUNT: diff --git a/src/battle_tv.c b/src/battle_tv.c index 7880b29086..875661fc41 100644 --- a/src/battle_tv.c +++ b/src/battle_tv.c @@ -115,9 +115,7 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_CONVERSION] = 3, [EFFECT_RESTORE_HP] = 3, [EFFECT_TOXIC] = 5, - [EFFECT_PAY_DAY] = 1, [EFFECT_LIGHT_SCREEN] = 7, - [EFFECT_TRI_ATTACK] = 1, [EFFECT_REST] = 7, [EFFECT_OHKO] = 7, // [EFFECT_RAZOR_WIND] = 1, @@ -370,7 +368,6 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_NOBLE_ROAR] = 0, // TODO: Assign points [EFFECT_VENOM_DRENCH] = 0, // TODO: Assign points [EFFECT_TOXIC_THREAD] = 0, // TODO: Assign points - [EFFECT_CLEAR_SMOG] = 0, // TODO: Assign points [EFFECT_HIT_SWITCH_TARGET] = 0, // TODO: Assign points [EFFECT_FINAL_GAMBIT] = 0, // TODO: Assign points [EFFECT_CHANGE_TYPE_ON_ITEM] = 0, // TODO: Assign points @@ -401,11 +398,8 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_SP_ATTACK_UP_HIT] = 0, // TODO: Assign points [EFFECT_BELCH] = 0, // TODO: Assign points [EFFECT_PARTING_SHOT] = 0, // TODO: Assign points - [EFFECT_SPECTRAL_THIEF] = 0, // TODO: Assign points - [EFFECT_V_CREATE] = 0, // TODO: Assign points [EFFECT_MAT_BLOCK] = 0, // TODO: Assign points [EFFECT_STOMPING_TANTRUM] = 0, // TODO: Assign points - [EFFECT_CORE_ENFORCER] = 0, // TODO: Assign points [EFFECT_INSTRUCT] = 0, // TODO: Assign points [EFFECT_THROAT_CHOP] = 0, // TODO: Assign points [EFFECT_LASER_FOCUS] = 0, // TODO: Assign points diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 58d44053dd..cb4c3ecbe5 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -96,16 +96,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_PAY_DAY] = { - .effect = EFFECT_PAY_DAY, + .effect = EFFECT_HIT, .power = 40, .type = TYPE_NORMAL, .accuracy = 100, .pp = 20, - .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, + ADDITIONAL_EFFECTS( + PRIMARY_EFFECT(MOVE_EFFECT_PAYDAY) + ), }, [MOVE_FIRE_PUNCH] = @@ -2893,17 +2895,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_TRI_ATTACK] = { - .effect = EFFECT_TRI_ATTACK, + .effect = EFFECT_HIT, .power = 80, .type = TYPE_NORMAL, .accuracy = 100, .pp = 10, - .secondaryEffectChance = 20, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .sheerForceBoost = TRUE, + ADDITIONAL_EFFECTS( + SECONDARY_EFFECT(MOVE_EFFECT_TRI_ATTACK, 20) + ), }, [MOVE_SUPER_FANG] = @@ -3119,7 +3123,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .thawsUser = TRUE, ADDITIONAL_EFFECTS( SECONDARY_EFFECT(MOVE_EFFECT_BURN, 10) - ) + ), }, [MOVE_SNORE] = @@ -8811,13 +8815,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .type = TYPE_NORMAL, .accuracy = 100, .pp = 15, - .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, .ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6, .soundMove = TRUE, + ADDITIONAL_EFFECTS( + PRIMARY_EFFECT(MOVE_EFFECT_ROUND) + ), }, [MOVE_ECHOED_VOICE] = @@ -8854,16 +8860,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_CLEAR_SMOG] = { - .effect = EFFECT_CLEAR_SMOG, + .effect = EFFECT_HIT, .power = 50, .type = TYPE_POISON, .accuracy = 0, .pp = 15, - .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, + ADDITIONAL_EFFECTS( + PRIMARY_EFFECT(MOVE_EFFECT_CLEAR_SMOG) + ), }, [MOVE_STORED_POWER] = @@ -9847,18 +9855,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_V_CREATE] = { - .effect = EFFECT_V_CREATE, + .effect = EFFECT_HIT, .power = 180, .type = TYPE_FIRE, .accuracy = 95, .pp = 5, - .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, .makesContact = TRUE, .metronomeBanned = TRUE, + ADDITIONAL_EFFECTS( + PRIMARY_EFFECT_SELF(MOVE_EFFECT_V_CREATE) + ), }, [MOVE_FUSION_FLARE] = @@ -11410,16 +11420,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_CORE_ENFORCER] = { - .effect = EFFECT_CORE_ENFORCER, + .effect = EFFECT_HIT, .power = 100, .type = TYPE_DRAGON, .accuracy = 100, .pp = 10, - .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, + ADDITIONAL_EFFECTS( + PRIMARY_EFFECT(MOVE_EFFECT_CORE_ENFORCER) + ), }, [MOVE_TROP_KICK] = @@ -11670,12 +11682,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_SPECTRAL_THIEF] = { - .effect = EFFECT_SPECTRAL_THIEF, + .effect = EFFECT_HIT, .power = 90, .type = TYPE_GHOST, .accuracy = 100, .pp = 10, - .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, @@ -11683,6 +11694,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .ignoresSubstitute = TRUE, .makesContact = TRUE, .metronomeBanned = TRUE, + ADDITIONAL_EFFECTS( + PRIMARY_EFFECT(MOVE_EFFECT_SPECTRAL_THIEF) + ), }, [MOVE_SUNSTEEL_STRIKE] = diff --git a/test/battle/ability/hyper_cutter.c b/test/battle/ability/hyper_cutter.c index 8e5c0a40ba..d11a197ebe 100644 --- a/test/battle/ability/hyper_cutter.c +++ b/test/battle/ability/hyper_cutter.c @@ -117,7 +117,7 @@ SINGLE_BATTLE_TEST("Hyper Cutter doesn't prevent Spectral Thief from resetting p { GIVEN { ASSUME(gBattleMoves[MOVE_SWORDS_DANCE].effect == EFFECT_ATTACK_UP_2); - ASSUME(gBattleMoves[MOVE_SPECTRAL_THIEF].effect == EFFECT_SPECTRAL_THIEF); + ASSUME(gBattleMoves[MOVE_SPECTRAL_THIEF].additionalEffects[0].moveEffect == MOVE_EFFECT_SPECTRAL_THIEF); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_KRABBY) { Ability(ABILITY_HYPER_CUTTER); } } WHEN { diff --git a/test/battle/move_effect/tri_attack.c b/test/battle/move_effect/tri_attack.c index d7d2102271..216dada869 100644 --- a/test/battle/move_effect/tri_attack.c +++ b/test/battle/move_effect/tri_attack.c @@ -3,7 +3,7 @@ ASSUMPTIONS { - ASSUME(gBattleMoves[MOVE_TRI_ATTACK].effect == EFFECT_TRI_ATTACK); + ASSUME(gBattleMoves[MOVE_TRI_ATTACK].additionalEffects[0].moveEffect == MOVE_EFFECT_TRI_ATTACK); } SINGLE_BATTLE_TEST("Tri Attack can inflict paralysis, burn or freeze")