Updated remaining moves which use secondaryEffectChance

secondaryEffectChance is no longer considered anywhere in the code; tidied up scripts and more
This commit is contained in:
Nephrite 2023-12-26 13:12:11 +09:00
parent 76b4e08e5e
commit c5061f0161
11 changed files with 162 additions and 300 deletions

View File

@ -1808,10 +1808,6 @@
.4byte \jumpInstr
.endm
.macro argumentstatuseffect
various BS_ATTACKER, VARIOUS_ARGUMENT_STATUS_EFFECT
.endm
.macro tryhitswitchtarget failInstr:req
various BS_ATTACKER, VARIOUS_TRY_HIT_SWITCH_TARGET
.4byte \failInstr

View File

@ -146,7 +146,7 @@ gBattleScriptsForMoveEffects::
.4byte BattleScript_EffectPsychUp @ EFFECT_PSYCH_UP
.4byte BattleScript_EffectMirrorCoat @ EFFECT_MIRROR_COAT
.4byte BattleScript_EffectSkullBash @ EFFECT_SKULL_BASH
.4byte BattleScript_EffectEarthquake @ EFFECT_EARTHQUAKE
.4byte BattleScript_EffectHit @ EFFECT_EARTHQUAKE
.4byte BattleScript_EffectFutureSight @ EFFECT_FUTURE_SIGHT
.4byte BattleScript_EffectGust @ EFFECT_GUST
.4byte BattleScript_EffectSolarBeam @ EFFECT_SOLAR_BEAM
@ -228,7 +228,7 @@ gBattleScriptsForMoveEffects::
.4byte BattleScript_EffectHit @ EFFECT_BRINE
.4byte BattleScript_EffectHit @ EFFECT_VENOSHOCK
.4byte BattleScript_EffectHit @ EFFECT_RETALIATE
.4byte BattleScript_EffectBulldoze @ EFFECT_BULLDOZE
.4byte BattleScript_EffectHit @ EFFECT_BULLDOZE
.4byte BattleScript_EffectHit @ EFFECT_FOUL_PLAY
.4byte BattleScript_EffectHit @ EFFECT_PSYSHOCK
.4byte BattleScript_EffectRoost @ EFFECT_ROOST
@ -305,7 +305,7 @@ gBattleScriptsForMoveEffects::
.4byte BattleScript_EffectHit @ EFFECT_REVELATION_DANCE
.4byte BattleScript_EffectAuroraVeil @ EFFECT_AURORA_VEIL
.4byte BattleScript_EffectThirdType @ EFFECT_THIRD_TYPE
.4byte BattleScript_EffectFeint @ EFFECT_FEINT
.4byte BattleScript_EffectHit @ EFFECT_FEINT
.4byte BattleScript_EffectSparklingAria @ EFFECT_SPARKLING_ARIA
.4byte BattleScript_EffectAcupressure @ EFFECT_ACUPRESSURE
.4byte BattleScript_EffectAromaticMist @ EFFECT_AROMATIC_MIST
@ -319,8 +319,8 @@ gBattleScriptsForMoveEffects::
.4byte BattleScript_EffectLaserFocus @ EFFECT_LASER_FOCUS
.4byte BattleScript_EffectMagneticFlux @ EFFECT_MAGNETIC_FLUX
.4byte BattleScript_EffectGearUp @ EFFECT_GEAR_UP
.4byte BattleScript_EffectIncinerate @ EFFECT_INCINERATE
.4byte BattleScript_EffectBugBite @ EFFECT_BUG_BITE
.4byte BattleScript_EffectHit @ EFFECT_INCINERATE
.4byte BattleScript_EffectHit @ EFFECT_BUG_BITE
.4byte BattleScript_EffectStrengthSap @ EFFECT_STRENGTH_SAP
.4byte BattleScript_EffectMindBlown @ EFFECT_MIND_BLOWN
.4byte BattleScript_EffectPurify @ EFFECT_PURIFY
@ -369,7 +369,6 @@ gBattleScriptsForMoveEffects::
.4byte BattleScript_EffectExtremeEvoboost @ EFFECT_EXTREME_EVOBOOST
.4byte BattleScript_EffectHitSetRemoveTerrain @ EFFECT_HIT_SET_REMOVE_TERRAIN
.4byte BattleScript_EffectDarkVoid @ EFFECT_DARK_VOID
.4byte BattleScript_EffectHit @ EFFET_UNUSED_384
.4byte BattleScript_EffectDoubleShock @ EFFECT_DOUBLE_SHOCK
.4byte BattleScript_EffectVictoryDance @ EFFECT_VICTORY_DANCE
.4byte BattleScript_EffectTeatime @ EFFECT_TEATIME
@ -572,23 +571,7 @@ BattleScript_EffectHit_Pledge::
pause B_WAIT_TIME_MED
printstring STRINGID_THETWOMOVESBECOMEONE
waitmessage B_WAIT_TIME_LONG
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
ppreduce
critcalc
damagecalc
adjustdamage
attackanimation
waitanimation
effectivenesssound
hitanimation BS_TARGET
waitstate
healthbarupdate BS_TARGET
datahpupdate BS_TARGET
critmessage
waitmessage B_WAIT_TIME_LONG
resultmessage
waitmessage B_WAIT_TIME_LONG
seteffectwithchance
call BattleScript_EffectHit_RetFromAccCheck
tryfaintmon BS_TARGET
return
@ -643,7 +626,7 @@ BattleScript_CorrosiveGasFail:
BattleScript_EffectMakeItRain:
jumpifbattletype BATTLE_TYPE_DOUBLE, BattleScript_MakeItRainDoubles
BattleScript_MakeItRainContinuous:
setmoveeffect MOVE_EFFECT_PAYDAY
setmoveeffect MOVE_EFFECT_PAYDAY | MOVE_EFFECT_CERTAIN
call BattleScript_EffectHit_Ret
tryfaintmon BS_TARGET
setmoveeffect MOVE_EFFECT_SP_ATK_MINUS_1 | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN
@ -873,21 +856,7 @@ BattleScript_EffectSteelBeam::
attackstring
ppreduce
accuracycheck BattleScript_SteelBeamMiss, ACC_CURR_MOVE
critcalc
damagecalc
adjustdamage
attackanimation
waitanimation
effectivenesssound
hitanimation BS_TARGET
waitstate
healthbarupdate BS_TARGET
datahpupdate BS_TARGET
critmessage
waitmessage B_WAIT_TIME_LONG
resultmessage
waitmessage B_WAIT_TIME_LONG
seteffectwithchance
call BattleScript_EffectHit_RetFromCritCalc
jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_SteelBeamAfterSelfDamage
call BattleScript_SteelBeamSelfDamage
BattleScript_SteelBeamAfterSelfDamage::
@ -1129,24 +1098,11 @@ BattleScript_EffectPhotonGeyser:
damagecalc
adjustdamage
photongeysercheck BS_ATTACKER
attackanimation
waitanimation
effectivenesssound
hitanimation BS_TARGET
waitstate
healthbarupdate BS_TARGET
datahpupdate BS_TARGET
critmessage
waitmessage B_WAIT_TIME_LONG
resultmessage
waitmessage B_WAIT_TIME_LONG
seteffectwithchance
tryfaintmon BS_TARGET
goto BattleScript_MoveEnd
goto BattleScript_HitFromAtkAnimation
BattleScript_EffectAuraWheel: @ Aura Wheel can only be used by Morpeko
jumpifspecies BS_ATTACKER, SPECIES_MORPEKO_FULL_BELLY, BattleScript_EffectSpeedUpHit
jumpifspecies BS_ATTACKER, SPECIES_MORPEKO_HANGRY, BattleScript_EffectSpeedUpHit
jumpifspecies BS_ATTACKER, SPECIES_MORPEKO_FULL_BELLY, BattleScript_EffectHit
jumpifspecies BS_ATTACKER, SPECIES_MORPEKO_HANGRY, BattleScript_EffectHit
goto BattleScript_PokemonCantUseTheMove
BattleScript_EffectClangorousSoul:
@ -1254,8 +1210,7 @@ BattleScript_EffectHyperspaceFuryUnbound::
pause B_WAIT_TIME_LONG
ppreduce
setmoveeffect MOVE_EFFECT_FEINT
seteffectwithchance
setmoveeffect MOVE_EFFECT_DEF_MINUS_1 | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN
seteffectprimary
goto BattleScript_HitFromCritCalc
BattleScript_ButHoopaCantUseIt:
@ -1578,14 +1533,6 @@ BattleScript_StrengthSapMustLower:
waitanimation
goto BattleScript_StrengthSapLower
BattleScript_EffectBugBite:
setmoveeffect MOVE_EFFECT_BUG_BITE | MOVE_EFFECT_CERTAIN
goto BattleScript_EffectHit
BattleScript_EffectIncinerate:
setmoveeffect MOVE_EFFECT_INCINERATE | MOVE_EFFECT_CERTAIN
goto BattleScript_EffectHit
BattleScript_MoveEffectIncinerate::
printstring STRINGID_INCINERATEBURN
waitmessage B_WAIT_TIME_LONG
@ -1827,10 +1774,6 @@ BattleScript_MoveEffectFeint::
waitmessage B_WAIT_TIME_LONG
return
BattleScript_EffectFeint:
setmoveeffect MOVE_EFFECT_FEINT
goto BattleScript_EffectHit
BattleScript_EffectThirdType:
attackcanceler
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
@ -2546,10 +2489,6 @@ BattleScript_VictoryDanceTrySpeed::
BattleScript_VictoryDanceEnd::
goto BattleScript_MoveEnd
BattleScript_EffectSpeedUpHit:
setmoveeffect MOVE_EFFECT_SPD_PLUS_1 | MOVE_EFFECT_AFFECTS_USER
goto BattleScript_EffectHit
BattleScript_EffectMeFirst:
attackcanceler
attackstring
@ -3133,7 +3072,6 @@ BattleScript_EffectHitEscape:
call BattleScript_EffectHit_Ret
jumpifmovehadnoeffect BattleScript_MoveEnd
jumpifability BS_TARGET, ABILITY_GUARD_DOG, BattleScript_MoveEnd
seteffectwithchance
tryfaintmon BS_TARGET
moveendto MOVEEND_ATTACKER_VISIBLE
moveendfrom MOVEEND_TARGET_VISIBLE
@ -3165,18 +3103,7 @@ BattleScript_HitFromCritCalc::
damagecalc
adjustdamage
BattleScript_HitFromAtkAnimation::
attackanimation
waitanimation
effectivenesssound
hitanimation BS_TARGET
waitstate
healthbarupdate BS_TARGET
datahpupdate BS_TARGET
critmessage
waitmessage B_WAIT_TIME_LONG
resultmessage
waitmessage B_WAIT_TIME_LONG
seteffectwithchance
call BattleScript_Hit_RetFromAtkAnimation
BattleScript_TryFaintMon::
tryfaintmon BS_TARGET
BattleScript_MoveEnd::
@ -3185,12 +3112,15 @@ BattleScript_MoveEnd::
BattleScript_EffectHit_Ret::
attackcanceler
BattleScript_EffectHit_RetFromAccCheck::
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
attackstring
ppreduce
BattleScript_EffectHit_RetFromCritCalc::
critcalc
damagecalc
adjustdamage
BattleScript_Hit_RetFromAtkAnimation::
attackanimation
waitanimation
effectivenesssound
@ -3214,21 +3144,7 @@ BattleScript_EffectNaturalGift:
jumpifability BS_ATTACKER, ABILITY_KLUTZ, BattleScript_ButItFailed
jumpifstatus3 BS_ATTACKER, STATUS3_EMBARGO, BattleScript_ButItFailed
accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE
critcalc
damagecalc
adjustdamage
attackanimation
waitanimation
effectivenesssound
hitanimation BS_TARGET
waitstate
healthbarupdate BS_TARGET
datahpupdate BS_TARGET
critmessage
waitmessage B_WAIT_TIME_LONG
resultmessage
waitmessage B_WAIT_TIME_LONG
seteffectwithchance
call BattleScript_EffectHit_RetFromCritCalc
jumpifmovehadnoeffect BattleScript_EffectNaturalGiftEnd
checkparentalbondcounter 2, BattleScript_EffectNaturalGiftEnd
removeitem BS_ATTACKER
@ -4972,7 +4888,7 @@ BattleScript_EffectRapidSpin::
call BattleScript_EffectHit_Ret
jumpifhalfword CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE, BattleScript_MoveEnd
setmoveeffect MOVE_EFFECT_RAPIDSPIN | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN
seteffectwithchance
seteffectsecondary
setstatchanger STAT_SPEED, 1, FALSE
statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_EffectRapidSpinEnd
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectRapidSpinEnd
@ -8198,8 +8114,6 @@ BattleScript_MoveEffectConfusion::
waitmessage B_WAIT_TIME_LONG
return
BattleScript_MoveEffectRecoilWithStatus::
argumentstatuseffect
BattleScript_MoveEffectRecoil::
jumpifmove MOVE_STRUGGLE, BattleScript_DoRecoil
jumpifability BS_ATTACKER, ABILITY_ROCK_HEAD, BattleScript_RecoilEnd
@ -8213,10 +8127,6 @@ BattleScript_DoRecoil::
BattleScript_RecoilEnd::
return
BattleScript_EffectWithChance::
seteffectwithchance
return
BattleScript_ItemSteal::
playanimation BS_TARGET, B_ANIM_ITEM_STEAL
printstring STRINGID_PKMNSTOLEITEM

View File

@ -303,8 +303,6 @@ extern const u8 BattleScript_StickyWebDefog[];
extern const u8 BattleScript_StealthRockDefog[];
extern const u8 BattleScript_MegaEvolution[];
extern const u8 BattleScript_WishMegaEvolution[];
extern const u8 BattleScript_MoveEffectRecoilWithStatus[];
extern const u8 BattleScript_EffectWithChance[];
extern const u8 BattleScript_MoveEffectClearSmog[];
extern const u8 BattleScript_SideStatusWoreOffReturn[];
extern const u8 BattleScript_MoveEffectSmackDown[];

View File

@ -348,32 +348,31 @@
#define EFFECT_EXTREME_EVOBOOST 344
#define EFFECT_HIT_SET_REMOVE_TERRAIN 345
#define EFFECT_DARK_VOID 346
#define EFFET_UNUSED_384 347
#define EFFECT_DOUBLE_SHOCK 348
#define EFFECT_VICTORY_DANCE 349
#define EFFECT_TEATIME 350
#define EFFECT_ATTACK_UP_USER_ALLY 351
#define EFFECT_SHELL_TRAP 352
#define EFFECT_PSYBLADE 353
#define EFFECT_HYDRO_STEAM 354
#define EFFECT_HIT_SET_ENTRY_HAZARD 355
#define EFFECT_BARB_BARRAGE 356
#define EFFECT_REVIVAL_BLESSING 357
#define EFFECT_SNOWSCAPE 358
#define EFFECT_INFERNAL_PARADE 359
#define EFFECT_TAKE_HEART 360
#define EFFECT_COLLISION_COURSE 361
#define EFFECT_MAKE_IT_RAIN 362
#define EFFECT_CORROSIVE_GAS 363
#define EFFECT_POPULATION_BOMB 364
#define EFFECT_SALT_CURE 365
#define EFFECT_CHILLY_RECEPTION 366
#define EFFECT_MAX_MOVE 367
#define EFFECT_GLAIVE_RUSH 368
#define EFFECT_RAGING_BULL 369
#define EFFECT_RAGE_FIST 370
#define EFFECT_DOODLE 371
#define EFFECT_DOUBLE_SHOCK 347
#define EFFECT_VICTORY_DANCE 348
#define EFFECT_TEATIME 349
#define EFFECT_ATTACK_UP_USER_ALLY 350
#define EFFECT_SHELL_TRAP 351
#define EFFECT_PSYBLADE 352
#define EFFECT_HYDRO_STEAM 353
#define EFFECT_HIT_SET_ENTRY_HAZARD 354
#define EFFECT_BARB_BARRAGE 355
#define EFFECT_REVIVAL_BLESSING 356
#define EFFECT_SNOWSCAPE 357
#define EFFECT_INFERNAL_PARADE 358
#define EFFECT_TAKE_HEART 359
#define EFFECT_COLLISION_COURSE 360
#define EFFECT_MAKE_IT_RAIN 361
#define EFFECT_CORROSIVE_GAS 362
#define EFFECT_POPULATION_BOMB 363
#define EFFECT_SALT_CURE 364
#define EFFECT_CHILLY_RECEPTION 365
#define EFFECT_MAX_MOVE 366
#define EFFECT_GLAIVE_RUSH 367
#define EFFECT_RAGING_BULL 368
#define EFFECT_RAGE_FIST 369
#define EFFECT_DOODLE 370
#define NUM_BATTLE_MOVE_EFFECTS 372
#define NUM_BATTLE_MOVE_EFFECTS 371
#endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H

View File

@ -140,7 +140,7 @@
#define VARIOUS_TRY_SOAK 48
#define VARIOUS_HANDLE_MEGA_EVO 49
#define VARIOUS_TRY_LAST_RESORT 50
#define VARIOUS_ARGUMENT_STATUS_EFFECT 51
#define VARIOUS_UNUSED_51 51
#define VARIOUS_TRY_HIT_SWITCH_TARGET 52
#define VARIOUS_TRY_AUTOTOMIZE 53
#define VARIOUS_ABILITY_POPUP 54

View File

@ -3755,58 +3755,6 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
if (ShouldUseWishAromatherapy(battlerAtk, battlerDef, move))
ADJUST_SCORE(3);
break;
case EFFECT_THIEF:
{
bool32 canSteal = FALSE;
if (B_TRAINERS_KNOCK_OFF_ITEMS == TRUE)
canSteal = TRUE;
if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER || GetBattlerSide(battlerAtk) == B_SIDE_PLAYER)
canSteal = TRUE;
if (canSteal && aiData->items[battlerAtk] == ITEM_NONE
&& aiData->items[battlerDef] != ITEM_NONE
&& CanBattlerGetOrLoseItem(battlerDef, aiData->items[battlerDef])
&& CanBattlerGetOrLoseItem(battlerAtk, aiData->items[battlerDef])
&& !HasMoveEffect(battlerAtk, EFFECT_ACROBATICS)
&& aiData->abilities[battlerDef] != ABILITY_STICKY_HOLD)
{
switch (aiData->holdEffects[battlerDef])
{
case HOLD_EFFECT_NONE:
break;
case HOLD_EFFECT_CHOICE_BAND:
case HOLD_EFFECT_CHOICE_SCARF:
case HOLD_EFFECT_CHOICE_SPECS:
ADJUST_SCORE(2);
break;
case HOLD_EFFECT_TOXIC_ORB:
if (ShouldPoisonSelf(battlerAtk, aiData->abilities[battlerAtk]))
ADJUST_SCORE(2);
break;
case HOLD_EFFECT_FLAME_ORB:
if (ShouldBurnSelf(battlerAtk, aiData->abilities[battlerAtk]))
ADJUST_SCORE(2);
break;
case HOLD_EFFECT_BLACK_SLUDGE:
if (IS_BATTLER_OF_TYPE(battlerAtk, TYPE_POISON))
ADJUST_SCORE(2);
break;
case HOLD_EFFECT_IRON_BALL:
if (HasMoveEffect(battlerAtk, EFFECT_FLING))
ADJUST_SCORE(2);
break;
case HOLD_EFFECT_LAGGING_TAIL:
case HOLD_EFFECT_STICKY_BARB:
break;
default:
ADJUST_SCORE(1);
break;
}
}
break;
}
break;
case EFFECT_NIGHTMARE:
if (aiData->abilities[battlerDef] != ABILITY_MAGIC_GUARD
&& !(gBattleMons[battlerDef].status2 & STATUS2_NIGHTMARE)
@ -4107,8 +4055,6 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
ADJUST_SCORE(3);*/
break;
case EFFECT_RAPID_SPIN:
IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPEED, &score); // Gen 8 increases speed
//fallthrough
case EFFECT_DEFOG:
if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_HAZARDS_ANY && CountUsablePartyMons(battlerAtk) != 0)
{
@ -4319,24 +4265,6 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_AURORA_VEIL)
ADJUST_SCORE(1);
break;
case EFFECT_KNOCK_OFF:
if (CanKnockOffItem(battlerDef, aiData->items[battlerDef]))
{
switch (aiData->holdEffects[battlerDef])
{
case HOLD_EFFECT_IRON_BALL:
if (HasMoveEffect(battlerDef, EFFECT_FLING))
ADJUST_SCORE(4);
break;
case HOLD_EFFECT_LAGGING_TAIL:
case HOLD_EFFECT_STICKY_BARB:
break;
default:
ADJUST_SCORE(3);
break;
}
}
break;
case EFFECT_SKILL_SWAP:
if (GetAbilityRating(aiData->abilities[battlerDef]) > GetAbilityRating(aiData->abilities[battlerAtk]))
ADJUST_SCORE(1);
@ -4511,22 +4439,6 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
ADJUST_SCORE(1);
}
break;
case EFFECT_BUG_BITE: // And pluck
if (gBattleMons[battlerDef].status2 & STATUS2_SUBSTITUTE || aiData->abilities[battlerDef] == ABILITY_STICKY_HOLD)
break;
else if (ItemId_GetPocket(aiData->items[battlerDef]) == POCKET_BERRIES)
ADJUST_SCORE(3);
break;
case EFFECT_INCINERATE:
if (gBattleMons[battlerDef].status2 & STATUS2_SUBSTITUTE || aiData->abilities[battlerDef] == ABILITY_STICKY_HOLD)
break;
else if (ItemId_GetPocket(aiData->items[battlerDef]) == POCKET_BERRIES || aiData->holdEffects[battlerDef] == HOLD_EFFECT_GEMS)
ADJUST_SCORE(3);
break;
case EFFECT_SMACK_DOWN:
if (!IsBattlerGrounded(battlerDef))
ADJUST_SCORE(3);
break;
case EFFECT_RELIC_SONG:
if (!(gBattleMons[battlerAtk].status2 & STATUS2_TRANSFORMED)) // Don't try to change form if it's transformed.
{
@ -4802,9 +4714,9 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
if (!MoveEffectIsGuaranteed(AI_CalcSecondaryEffectChance(battlerAtk, gBattleMoves[move].additionalEffects[i].chance)))
continue;
// Consider move effects that target self
if (gBattleMoves[move].additionalEffects[i].self)
{
// Consider move effects that target self
switch (gBattleMoves[move].additionalEffects[i].moveEffect)
{
case MOVE_EFFECT_SPD_PLUS_2:
@ -4835,7 +4747,6 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
}
else // consider move effects that hinder the target
{
// Only consider the below if they're certain to happen
switch (gBattleMoves[move].additionalEffects[i].moveEffect)
{
case MOVE_EFFECT_FLINCH:
@ -4862,6 +4773,92 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
case MOVE_EFFECT_SPECTRAL_THIEF:
score += AI_ShouldCopyStatChanges(battlerAtk, battlerDef);
break;
case MOVE_EFFECT_BUG_BITE: // And pluck
if (gBattleMons[battlerDef].status2 & STATUS2_SUBSTITUTE || aiData->abilities[battlerDef] == ABILITY_STICKY_HOLD)
break;
else if (ItemId_GetPocket(aiData->items[battlerDef]) == POCKET_BERRIES)
ADJUST_SCORE(3);
break;
case MOVE_EFFECT_INCINERATE:
if (gBattleMons[battlerDef].status2 & STATUS2_SUBSTITUTE || aiData->abilities[battlerDef] == ABILITY_STICKY_HOLD)
break;
else if (ItemId_GetPocket(aiData->items[battlerDef]) == POCKET_BERRIES || aiData->holdEffects[battlerDef] == HOLD_EFFECT_GEMS)
ADJUST_SCORE(3);
break;
case MOVE_EFFECT_SMACK_DOWN:
if (!IsBattlerGrounded(battlerDef))
ADJUST_SCORE(3);
break;
case MOVE_EFFECT_KNOCK_OFF:
if (CanKnockOffItem(battlerDef, aiData->items[battlerDef]))
{
switch (aiData->holdEffects[battlerDef])
{
case HOLD_EFFECT_IRON_BALL:
if (HasMoveEffect(battlerDef, EFFECT_FLING))
ADJUST_SCORE(4);
break;
case HOLD_EFFECT_LAGGING_TAIL:
case HOLD_EFFECT_STICKY_BARB:
break;
default:
ADJUST_SCORE(3);
break;
}
}
break;
case MOVE_EFFECT_STEAL_ITEM:
{
bool32 canSteal = FALSE;
if (B_TRAINERS_KNOCK_OFF_ITEMS == TRUE)
canSteal = TRUE;
if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER || GetBattlerSide(battlerAtk) == B_SIDE_PLAYER)
canSteal = TRUE;
if (canSteal && aiData->items[battlerAtk] == ITEM_NONE
&& aiData->items[battlerDef] != ITEM_NONE
&& CanBattlerGetOrLoseItem(battlerDef, aiData->items[battlerDef])
&& CanBattlerGetOrLoseItem(battlerAtk, aiData->items[battlerDef])
&& !HasMoveEffect(battlerAtk, EFFECT_ACROBATICS)
&& aiData->abilities[battlerDef] != ABILITY_STICKY_HOLD)
{
switch (aiData->holdEffects[battlerDef])
{
case HOLD_EFFECT_NONE:
break;
case HOLD_EFFECT_CHOICE_BAND:
case HOLD_EFFECT_CHOICE_SCARF:
case HOLD_EFFECT_CHOICE_SPECS:
ADJUST_SCORE(2);
break;
case HOLD_EFFECT_TOXIC_ORB:
if (ShouldPoisonSelf(battlerAtk, aiData->abilities[battlerAtk]))
ADJUST_SCORE(2);
break;
case HOLD_EFFECT_FLAME_ORB:
if (ShouldBurnSelf(battlerAtk, aiData->abilities[battlerAtk]))
ADJUST_SCORE(2);
break;
case HOLD_EFFECT_BLACK_SLUDGE:
if (IS_BATTLER_OF_TYPE(battlerAtk, TYPE_POISON))
ADJUST_SCORE(2);
break;
case HOLD_EFFECT_IRON_BALL:
if (HasMoveEffect(battlerAtk, EFFECT_FLING))
ADJUST_SCORE(2);
break;
case HOLD_EFFECT_LAGGING_TAIL:
case HOLD_EFFECT_STICKY_BARB:
break;
default:
ADJUST_SCORE(1);
break;
}
}
break;
}
break;
}
}
}

View File

@ -4392,7 +4392,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId)
allocatedArray[k] = (gBattleMoves[move].pp <= 5) ? 1 : 0;
break;
case MOVE_POINTS_EFFECT:
allocatedArray[k] = (gBattleMoves[move].secondaryEffectChance > 0) ? 1 : 0;
allocatedArray[k] = gBattleMoves[move].sheerForceBoost;
break;
}
}

View File

@ -3716,20 +3716,14 @@ static void Cmd_seteffectwithchance(void)
{
if (gBattleScripting.moveEffect &= ~(MOVE_EFFECT_CONTINUE))
{
u32 percentChance = gBattleMoves[gCurrentMove].secondaryEffectChance; // CalcSecondaryEffectChance(gBattlerAttacker, gBattleMoves[gCurrentMove].secondaryEffectChance, gCurrentMove);
if (gBattleScripting.moveEffect & MOVE_EFFECT_CERTAIN
|| percentChance >= 100)
if (gBattleScripting.moveEffect & MOVE_EFFECT_CERTAIN)
{
gBattleScripting.moveEffect &= ~MOVE_EFFECT_CERTAIN;
SetMoveEffect(FALSE, MOVE_EFFECT_CERTAIN);
}
else if (RandomPercentage(RNG_SECONDARY_EFFECT, percentChance))
{
SetMoveEffect(FALSE, 0);
}
else
{
gBattlescriptCurrInstr = cmd->nextInstr;
SetMoveEffect(FALSE, 0);
}
gBattleScripting.moveEffect = 0;
}
@ -5424,10 +5418,7 @@ static void Cmd_moveend(void)
case EFFECT_RECOIL:
gBattleMoveDamage = max(1, gBattleScripting.savedDmg * max(1, gBattleMoves[gCurrentMove].recoil) / 100);
BattleScriptPushCursor();
if (gBattleMoves[gCurrentMove].argument) // Flare Blitz - can burn, Volt Tackle - can paralyze
gBattlescriptCurrInstr = BattleScript_MoveEffectRecoilWithStatus;
else
gBattlescriptCurrInstr = BattleScript_MoveEffectRecoil;
gBattlescriptCurrInstr = BattleScript_MoveEffectRecoil;
effect = TRUE;
break;
}
@ -9522,44 +9513,6 @@ static void Cmd_various(void)
gBattlescriptCurrInstr = cmd->failInstr;
return;
}
case VARIOUS_ARGUMENT_STATUS_EFFECT:
{
VARIOUS_ARGS();
switch (gBattleMoves[gCurrentMove].argument)
{
case STATUS1_SLEEP:
gBattleScripting.moveEffect = MOVE_EFFECT_SLEEP;
break;
case STATUS1_BURN:
gBattleScripting.moveEffect = MOVE_EFFECT_BURN;
break;
case STATUS1_FREEZE:
gBattleScripting.moveEffect = MOVE_EFFECT_FREEZE;
break;
case STATUS1_PARALYSIS:
gBattleScripting.moveEffect = MOVE_EFFECT_PARALYSIS;
break;
case STATUS1_POISON:
gBattleScripting.moveEffect = MOVE_EFFECT_POISON;
break;
case STATUS1_TOXIC_POISON:
gBattleScripting.moveEffect = MOVE_EFFECT_TOXIC;
break;
case STATUS1_FROSTBITE:
gBattleScripting.moveEffect = MOVE_EFFECT_FROSTBITE;
break;
default:
gBattleScripting.moveEffect = 0;
break;
}
if (gBattleScripting.moveEffect != 0)
{
BattleScriptPush(cmd->nextInstr);
gBattlescriptCurrInstr = BattleScript_EffectWithChance;
return;
}
break;
}
case VARIOUS_TRY_HIT_SWITCH_TARGET:
{
VARIOUS_ARGS(const u8 *failInstr);

View File

@ -6032,7 +6032,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
.type = TYPE_FIGHTING,
.accuracy = 100,
.pp = 10,
.secondaryEffectChance = 100,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = BATTLE_CATEGORY_PHYSICAL,
@ -6113,16 +6112,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
[MOVE_FEINT] =
{
#if B_UPDATED_MOVE_DATA >= GEN_5
.power = 30,
#else
.power = 50,
#endif
.effect = EFFECT_FEINT,
.power = B_UPDATED_MOVE_DATA >= GEN_5 ? 30 : 50,
.type = TYPE_NORMAL,
.accuracy = 100,
.pp = 10,
.secondaryEffectChance = 100,
.target = MOVE_TARGET_SELECTED,
.priority = 2,
.category = BATTLE_CATEGORY_PHYSICAL,
@ -6131,6 +6125,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
.metronomeBanned = TRUE,
.copycatBanned = TRUE,
.assistBanned = TRUE,
ADDITIONAL_EFFECTS(
PRIMARY_EFFECT(MOVE_EFFECT_FEINT)
),
},
[MOVE_PLUCK] =
@ -6140,11 +6137,13 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
.type = TYPE_FLYING,
.accuracy = 100,
.pp = 20,
.secondaryEffectChance = 100,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = BATTLE_CATEGORY_PHYSICAL,
.makesContact = TRUE,
ADDITIONAL_EFFECTS(
PRIMARY_EFFECT(MOVE_EFFECT_BUG_BITE)
),
},
[MOVE_TAILWIND] =
@ -7506,11 +7505,13 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
.type = TYPE_BUG,
.accuracy = 100,
.pp = 20,
.secondaryEffectChance = 100,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = BATTLE_CATEGORY_PHYSICAL,
.makesContact = TRUE,
ADDITIONAL_EFFECTS(
PRIMARY_EFFECT(MOVE_EFFECT_BUG_BITE)
),
},
[MOVE_CHARGE_BEAM] =
@ -8468,10 +8469,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
.type = TYPE_FIRE,
.accuracy = 100,
.pp = 15,
.secondaryEffectChance = 100,
.target = MOVE_TARGET_BOTH,
.priority = 0,
.category = BATTLE_CATEGORY_SPECIAL,
ADDITIONAL_EFFECTS(
PRIMARY_EFFECT(MOVE_EFFECT_INCINERATE)
),
},
[MOVE_QUASH] =
@ -8667,12 +8670,14 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
.type = TYPE_GROUND,
.accuracy = 100,
.pp = 20,
.secondaryEffectChance = 100,
.target = MOVE_TARGET_FOES_AND_ALLY,
.priority = 0,
.category = BATTLE_CATEGORY_PHYSICAL,
.sheerForceBoost = TRUE,
.skyBattleBanned = TRUE,
ADDITIONAL_EFFECTS(
SECONDARY_EFFECT(MOVE_EFFECT_SPD_MINUS_1, 100)
),
},
[MOVE_FROST_BREATH] =
@ -10255,13 +10260,16 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
.type = TYPE_DARK,
.accuracy = 0,
.pp = 5,
.secondaryEffectChance = 100,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = BATTLE_CATEGORY_PHYSICAL,
.ignoresProtect = TRUE,
.ignoresSubstitute = TRUE,
.metronomeBanned = TRUE,
ADDITIONAL_EFFECTS(
// Feint move effect handled in script as it goes before animation
PRIMARY_EFFECT_SELF(MOVE_EFFECT_DEF_MINUS_1)
),
},
[MOVE_SHORE_UP] =
@ -10354,7 +10362,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
.type = TYPE_WATER,
.accuracy = 100,
.pp = 10,
.secondaryEffectChance = 100,
.target = MOVE_TARGET_FOES_AND_ALLY,
.priority = 0,
.category = BATTLE_CATEGORY_SPECIAL,
@ -10633,7 +10640,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
.type = TYPE_FIRE,
.accuracy = 100,
.pp = 5,
.secondaryEffectChance = 100,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = BATTLE_CATEGORY_SPECIAL,
@ -11710,11 +11716,14 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
.type = TYPE_ELECTRIC,
.accuracy = 100,
.pp = 10,
.secondaryEffectChance = 100,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = BATTLE_CATEGORY_PHYSICAL,
.sheerForceBoost = TRUE,
.metronomeBanned = TRUE,
ADDITIONAL_EFFECTS(
SECONDARY_EFFECT_SELF(MOVE_EFFECT_SPD_PLUS_1, 100)
),
},
[MOVE_BREAKING_SWIPE] =
@ -13165,11 +13174,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
.type = TYPE_STEEL,
.accuracy = 100,
.pp = 5,
.secondaryEffectChance = 100,
.target = MOVE_TARGET_BOTH,
.priority = 0,
.category = BATTLE_CATEGORY_SPECIAL,
.metronomeBanned = TRUE,
// additional effects handled in script due to weird behaviour in doubles
},
[MOVE_RUINATION] =

View File

@ -8,7 +8,7 @@ SINGLE_BATTLE_TEST("Sheer Force boosts power, but removes secondary effects of m
for (j = 1; j < MOVES_COUNT; j++)
{
if (gBattleMoves[j].sheerForceBoost && j != MOVE_ORDER_UP)
if (gBattleMoves[j].sheerForceBoost && j != MOVE_ORDER_UP && j != MOVE_AURA_WHEEL)
{
PARAMETRIZE { ability = ABILITY_ANGER_POINT; move = j; }
PARAMETRIZE { ability = ABILITY_SHEER_FORCE; move = j; }

View File

@ -3,7 +3,7 @@
ASSUMPTIONS
{
ASSUME(gBattleMoves[MOVE_BUG_BITE].effect == EFFECT_BUG_BITE);
ASSUME(MoveHasMoveEffect(MOVE_BUG_BITE, MOVE_EFFECT_BUG_BITE, FALSE));
ASSUME(gBattleMoves[MOVE_BUG_BITE].pp == 20);
}