Updated moves that raise the target's own stats
To do: moves like CC, Overheat that LOWER stats; did NOT remove the effect for raising all stats due to an AI function
This commit is contained in:
parent
460eeff3e5
commit
a244d7b8b6
7 changed files with 271 additions and 227 deletions
|
@ -95,7 +95,7 @@ gBattleScriptsForMoveEffects::
|
|||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_70
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_71
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_72
|
||||
.4byte BattleScript_EffectHit @ EFFECT_EVASION_DOWN_HIT
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_73
|
||||
.4byte BattleScript_EffectTwoTurnsAttack @ EFFECT_TWO_TURNS_ATTACK
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_75
|
||||
.4byte BattleScript_EffectHit @ EFFECT_VITAL_THROW
|
||||
|
@ -157,9 +157,9 @@ gBattleScriptsForMoveEffects::
|
|||
.4byte BattleScript_EffectHit @ EFFECT_HIDDEN_POWER
|
||||
.4byte BattleScript_EffectRainDance @ EFFECT_RAIN_DANCE
|
||||
.4byte BattleScript_EffectSunnyDay @ EFFECT_SUNNY_DAY
|
||||
.4byte BattleScript_EffectDefenseUpHit @ EFFECT_DEFENSE_UP_HIT
|
||||
.4byte BattleScript_EffectAttackUpHit @ EFFECT_ATTACK_UP_HIT
|
||||
.4byte BattleScript_EffectAllStatsUpHit @ EFFECT_ALL_STATS_UP_HIT
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_135
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_136
|
||||
.4byte BattleScript_EffectHit @ EFFECT_ALL_STATS_UP_HIT
|
||||
.4byte BattleScript_EffectHit @ EFFECT_FELL_STINGER
|
||||
.4byte BattleScript_EffectBellyDrum @ EFFECT_BELLY_DRUM
|
||||
.4byte BattleScript_EffectPsychUp @ EFFECT_PSYCH_UP
|
||||
|
@ -294,7 +294,7 @@ gBattleScriptsForMoveEffects::
|
|||
.4byte BattleScript_EffectHit @ EFFECT_HURRICANE
|
||||
.4byte BattleScript_EffectHit @ EFFECT_TWO_TYPED_MOVE
|
||||
.4byte BattleScript_EffectMeFirst @ EFFECT_ME_FIRST
|
||||
.4byte BattleScript_EffectSpeedUpHit @ EFFECT_SPEED_UP_HIT
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_272
|
||||
.4byte BattleScript_EffectQuiverDance @ EFFECT_QUIVER_DANCE
|
||||
.4byte BattleScript_EffectCoil @ EFFECT_COIL
|
||||
.4byte BattleScript_EffectElectrify @ EFFECT_ELECTRIFY
|
||||
|
@ -340,7 +340,7 @@ gBattleScriptsForMoveEffects::
|
|||
.4byte BattleScript_EffectAcupressure @ EFFECT_ACUPRESSURE
|
||||
.4byte BattleScript_EffectAromaticMist @ EFFECT_AROMATIC_MIST
|
||||
.4byte BattleScript_EffectPowder @ EFFECT_POWDER
|
||||
.4byte BattleScript_EffectSpAtkUpHit @ EFFECT_SP_ATTACK_UP_HIT
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_318
|
||||
.4byte BattleScript_EffectHit @ EFFECT_BELCH
|
||||
.4byte BattleScript_EffectPartingShot @ EFFECT_PARTING_SHOT
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_321
|
||||
|
@ -377,7 +377,7 @@ gBattleScriptsForMoveEffects::
|
|||
.4byte BattleScript_EffectRecoilHP25 @ EFFECT_RECOIL_HP_25
|
||||
.4byte BattleScript_EffectStuffCheeks @ EFFECT_STUFF_CHEEKS
|
||||
.4byte BattleScript_EffectHit @ EFFECT_GRAV_APPLE
|
||||
.4byte BattleScript_EffectEvasionUpHit @ EFFECT_EVASION_UP_HIT
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_355
|
||||
.4byte BattleScript_EffectGlitzyGlow @ EFFECT_GLITZY_GLOW
|
||||
.4byte BattleScript_EffectBaddyBad @ EFFECT_BADDY_BAD
|
||||
.4byte BattleScript_EffectSappySeed @ EFFECT_SAPPY_SEED
|
||||
|
@ -408,7 +408,7 @@ gBattleScriptsForMoveEffects::
|
|||
.4byte BattleScript_EffectDarkVoid @ EFFECT_DARK_VOID
|
||||
.4byte BattleScript_EffectHit @ EFFET_UNUSED_384
|
||||
.4byte BattleScript_EffectDoubleShock @ EFFECT_DOUBLE_SHOCK
|
||||
.4byte BattleScript_EffectSpecialAttackUpHit @ EFFECT_SPECIAL_ATTACK_UP_HIT
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_387
|
||||
.4byte BattleScript_EffectVictoryDance @ EFFECT_VICTORY_DANCE
|
||||
.4byte BattleScript_EffectTeatime @ EFFECT_TEATIME
|
||||
.4byte BattleScript_EffectAttackUpUserAlly @ EFFECT_ATTACK_UP_USER_ALLY
|
||||
|
@ -1180,10 +1180,6 @@ BattleScript_EffectGlitzyGlow:
|
|||
waitmessage B_WAIT_TIME_LONG
|
||||
goto BattleScript_MoveEnd
|
||||
|
||||
BattleScript_EffectEvasionUpHit:
|
||||
setmoveeffect MOVE_EFFECT_EVS_PLUS_1 | MOVE_EFFECT_AFFECTS_USER
|
||||
goto BattleScript_EffectHit
|
||||
|
||||
BattleScript_EffectStuffCheeks::
|
||||
attackcanceler
|
||||
attackstring
|
||||
|
@ -1564,10 +1560,6 @@ BattleScript_EffectPartingShotSwitch:
|
|||
BattleScript_PartingShotEnd:
|
||||
end
|
||||
|
||||
BattleScript_EffectSpAtkUpHit:
|
||||
setmoveeffect MOVE_EFFECT_SP_ATK_PLUS_1 | MOVE_EFFECT_AFFECTS_USER
|
||||
goto BattleScript_EffectHit
|
||||
|
||||
BattleScript_EffectPowder:
|
||||
attackcanceler
|
||||
accuracycheck BattleScript_PrintMoveMissed, NO_ACC_CALC_CHECK_LOCK_ON
|
||||
|
@ -5000,22 +4992,6 @@ BattleScript_BlockedByPrimalWeatherRet::
|
|||
jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_STRONG_WINDS, BattleScript_MysteriousAirCurrentBlowsOnRet
|
||||
return
|
||||
|
||||
BattleScript_EffectDefenseUpHit::
|
||||
setmoveeffect MOVE_EFFECT_DEF_PLUS_1 | MOVE_EFFECT_AFFECTS_USER
|
||||
goto BattleScript_EffectHit
|
||||
|
||||
BattleScript_EffectAttackUpHit::
|
||||
setmoveeffect MOVE_EFFECT_ATK_PLUS_1 | MOVE_EFFECT_AFFECTS_USER
|
||||
goto BattleScript_EffectHit
|
||||
|
||||
BattleScript_EffectSpecialAttackUpHit::
|
||||
setmoveeffect MOVE_EFFECT_SP_ATK_PLUS_1 | MOVE_EFFECT_AFFECTS_USER
|
||||
goto BattleScript_EffectHit
|
||||
|
||||
BattleScript_EffectAllStatsUpHit::
|
||||
setmoveeffect MOVE_EFFECT_ALL_STATS_UP | MOVE_EFFECT_AFFECTS_USER
|
||||
goto BattleScript_EffectHit
|
||||
|
||||
BattleScript_EffectBellyDrum::
|
||||
attackcanceler
|
||||
attackstring
|
||||
|
|
|
@ -136,8 +136,8 @@
|
|||
#define EFFECT_HIDDEN_POWER 132
|
||||
#define EFFECT_RAIN_DANCE 133
|
||||
#define EFFECT_SUNNY_DAY 134
|
||||
#define EFFECT_DEFENSE_UP_HIT 135
|
||||
#define EFFECT_ATTACK_UP_HIT 136
|
||||
#define EFFECT_UNUSED_135 135
|
||||
#define EFFECT_UNUSED_136 136
|
||||
#define EFFECT_ALL_STATS_UP_HIT 137
|
||||
#define EFFECT_FELL_STINGER 138
|
||||
#define EFFECT_BELLY_DRUM 139
|
||||
|
@ -275,7 +275,7 @@
|
|||
#define EFFECT_HURRICANE 269
|
||||
#define EFFECT_TWO_TYPED_MOVE 270
|
||||
#define EFFECT_ME_FIRST 271
|
||||
#define EFFECT_SPEED_UP_HIT 272
|
||||
#define EFFECT_UNUSED_272 272
|
||||
#define EFFECT_QUIVER_DANCE 273
|
||||
#define EFFECT_COIL 274
|
||||
#define EFFECT_ELECTRIFY 275
|
||||
|
@ -321,7 +321,7 @@
|
|||
#define EFFECT_ACUPRESSURE 315
|
||||
#define EFFECT_AROMATIC_MIST 316
|
||||
#define EFFECT_POWDER 317
|
||||
#define EFFECT_SP_ATTACK_UP_HIT 318
|
||||
#define EFFECT_UNUSED_318 318
|
||||
#define EFFECT_BELCH 319
|
||||
#define EFFECT_PARTING_SHOT 320
|
||||
#define EFFECT_UNUSED_321 321
|
||||
|
@ -358,7 +358,7 @@
|
|||
#define EFFECT_RECOIL_HP_25 352
|
||||
#define EFFECT_STUFF_CHEEKS 353
|
||||
#define EFFECT_GRAV_APPLE 354
|
||||
#define EFFECT_EVASION_UP_HIT 355
|
||||
#define EFFECT_UNUSED_355 355
|
||||
#define EFFECT_GLITZY_GLOW 356
|
||||
#define EFFECT_BADDY_BAD 357
|
||||
#define EFFECT_SAPPY_SEED 358
|
||||
|
@ -389,7 +389,7 @@
|
|||
#define EFFECT_DARK_VOID 383
|
||||
#define EFFET_UNUSED_384 384
|
||||
#define EFFECT_DOUBLE_SHOCK 385
|
||||
#define EFFECT_SPECIAL_ATTACK_UP_HIT 386
|
||||
#define EFFECT_UNUSED_387 386
|
||||
#define EFFECT_VICTORY_DANCE 387
|
||||
#define EFFECT_TEATIME 388
|
||||
#define EFFECT_ATTACK_UP_USER_ALLY 389 // Howl 8th Gen
|
||||
|
|
|
@ -400,8 +400,10 @@ struct BattleMove
|
|||
};
|
||||
|
||||
#define ADDITIONAL_EFFECTS(...) \
|
||||
.numAdditionalEffects = NARG_8(__VA_ARGS__) / 3, \
|
||||
.additionalEffects = (const struct AdditionalEffect[]) { __VA_ARGS__ }
|
||||
.numAdditionalEffects = ARRAY_COUNT(EFFECTS_ARR( __VA_ARGS__ )), \
|
||||
.additionalEffects = EFFECTS_ARR( __VA_ARGS__ )
|
||||
|
||||
#define EFFECTS_ARR(...) (const struct AdditionalEffect[]) { __VA_ARGS__ }
|
||||
|
||||
#define PRIMARY_EFFECT(_moveEffect) {.self = FALSE, .chance = 0, .moveEffect = _moveEffect}
|
||||
#define PRIMARY_EFFECT_SELF(_moveEffect) {.self = TRUE, .chance = 0, .moveEffect = _moveEffect}
|
||||
|
|
|
@ -3509,14 +3509,22 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
|
|||
ADJUST_SCORE(-3);
|
||||
break;
|
||||
}
|
||||
goto SHOULD_USE_PHAZING_MOVE;
|
||||
if (isDoubleBattle)
|
||||
score += min(CountPositiveStatStages(battlerDef) + CountPositiveStatStages(BATTLE_PARTNER(battlerDef)), 7);
|
||||
else
|
||||
score += min(CountPositiveStatStages(battlerDef), 4);
|
||||
break;
|
||||
case EFFECT_ROAR:
|
||||
if (aiData->abilities[battlerDef] == ABILITY_SOUNDPROOF || aiData->abilities[battlerDef] == ABILITY_SUCTION_CUPS)
|
||||
{
|
||||
ADJUST_SCORE(-3);
|
||||
break;
|
||||
}
|
||||
goto SHOULD_USE_PHAZING_MOVE;
|
||||
if (isDoubleBattle)
|
||||
score += min(CountPositiveStatStages(battlerDef) + CountPositiveStatStages(BATTLE_PARTNER(battlerDef)), 7);
|
||||
else
|
||||
score += min(CountPositiveStatStages(battlerDef), 4);
|
||||
break;
|
||||
case EFFECT_MULTI_HIT:
|
||||
case EFFECT_TRIPLE_KICK:
|
||||
if (AI_MoveMakesContact(aiData->abilities[battlerAtk], aiData->holdEffects[battlerAtk], move)
|
||||
|
@ -3762,10 +3770,6 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
|
|||
else if (HasMoveWithLowAccuracy(battlerAtk, battlerDef, 90, TRUE, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef]))
|
||||
ADJUST_SCORE(1);
|
||||
break;
|
||||
case EFFECT_SPEED_UP_HIT:
|
||||
if (sereneGraceBoost && aiData->abilities[battlerDef] != ABILITY_CONTRARY && !AI_STRIKES_FIRST(battlerAtk, battlerDef, move))
|
||||
ADJUST_SCORE(3);
|
||||
break;
|
||||
case EFFECT_DESTINY_BOND:
|
||||
if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER && CanTargetFaintAi(battlerDef, battlerAtk))
|
||||
ADJUST_SCORE(3);
|
||||
|
@ -4021,14 +4025,6 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
|
|||
ADJUST_SCORE(1);
|
||||
}
|
||||
break;
|
||||
case EFFECT_ATTACK_UP_HIT:
|
||||
if (sereneGraceBoost)
|
||||
IncreaseStatUpScore(battlerAtk, battlerDef, STAT_ATK, &score);
|
||||
break;
|
||||
case EFFECT_SPECIAL_ATTACK_UP_HIT:
|
||||
if (sereneGraceBoost)
|
||||
IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPATK, &score);
|
||||
break;
|
||||
case EFFECT_FELL_STINGER:
|
||||
if (gBattleMons[battlerAtk].statStages[STAT_ATK] < MAX_STAT_STAGE
|
||||
&& aiData->abilities[battlerAtk] != ABILITY_CONTRARY
|
||||
|
@ -4045,7 +4041,35 @@ 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:
|
||||
goto 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;
|
||||
case EFFECT_SEMI_INVULNERABLE:
|
||||
ADJUST_SCORE(1);
|
||||
if (predictedMove != MOVE_NONE && !isDoubleBattle)
|
||||
|
@ -4831,31 +4855,50 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
|
|||
for (i = 0; i < gBattleMoves[move].numAdditionalEffects; i++)
|
||||
{
|
||||
if (gBattleMoves[move].additionalEffects[i].self)
|
||||
continue;
|
||||
|
||||
switch (gBattleMoves[move].additionalEffects[i].moveEffect)
|
||||
{
|
||||
case MOVE_EFFECT_FLINCH:
|
||||
score += ShouldTryToFlinch(battlerAtk, battlerDef, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], move);
|
||||
break;
|
||||
case MOVE_EFFECT_ATK_MINUS_1:
|
||||
case MOVE_EFFECT_DEF_MINUS_1:
|
||||
case MOVE_EFFECT_SP_ATK_MINUS_1:
|
||||
case MOVE_EFFECT_SP_DEF_MINUS_1:
|
||||
case MOVE_EFFECT_ACC_MINUS_1:
|
||||
case MOVE_EFFECT_EVS_MINUS_1:
|
||||
if (sereneGraceBoost && aiData->abilities[battlerDef] != ABILITY_CONTRARY)
|
||||
ADJUST_SCORE(2);
|
||||
break;
|
||||
case MOVE_EFFECT_SPD_MINUS_1:
|
||||
if (ShouldLowerSpeed(battlerAtk, battlerDef, aiData->abilities[battlerDef]))
|
||||
{
|
||||
// Consider move effects that target self
|
||||
switch (gBattleMoves[move].additionalEffects[i].moveEffect)
|
||||
{
|
||||
case MOVE_EFFECT_SPD_PLUS_1:
|
||||
if (sereneGraceBoost && aiData->abilities[battlerAtk] != ABILITY_CONTRARY && !AI_STRIKES_FIRST(battlerAtk, battlerDef, move))
|
||||
ADJUST_SCORE(3);
|
||||
break;
|
||||
case MOVE_EFFECT_ATK_PLUS_1:
|
||||
if (sereneGraceBoost)
|
||||
IncreaseStatUpScore(battlerAtk, battlerDef, STAT_ATK, &score);
|
||||
break;
|
||||
case MOVE_EFFECT_SP_ATK_PLUS_1:
|
||||
if (sereneGraceBoost)
|
||||
IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPATK, &score);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else // consider move effects that hinder the target
|
||||
{
|
||||
switch (gBattleMoves[move].additionalEffects[i].moveEffect)
|
||||
{
|
||||
case MOVE_EFFECT_FLINCH:
|
||||
score += ShouldTryToFlinch(battlerAtk, battlerDef, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], move);
|
||||
break;
|
||||
case MOVE_EFFECT_ATK_MINUS_1:
|
||||
case MOVE_EFFECT_DEF_MINUS_1:
|
||||
case MOVE_EFFECT_SP_ATK_MINUS_1:
|
||||
case MOVE_EFFECT_SP_DEF_MINUS_1:
|
||||
case MOVE_EFFECT_ACC_MINUS_1:
|
||||
case MOVE_EFFECT_EVS_MINUS_1:
|
||||
if (sereneGraceBoost && aiData->abilities[battlerDef] != ABILITY_CONTRARY)
|
||||
ADJUST_SCORE(5);
|
||||
else
|
||||
ADJUST_SCORE(2);
|
||||
}
|
||||
break;
|
||||
break;
|
||||
case MOVE_EFFECT_SPD_MINUS_1:
|
||||
if (ShouldLowerSpeed(battlerAtk, battlerDef, aiData->abilities[battlerDef]))
|
||||
{
|
||||
if (sereneGraceBoost && aiData->abilities[battlerDef] != ABILITY_CONTRARY)
|
||||
ADJUST_SCORE(5);
|
||||
else
|
||||
ADJUST_SCORE(2);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Only consider the below if they're certain to happen
|
||||
|
@ -4868,14 +4911,12 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
|
|||
IncreasePoisonScore(battlerAtk, battlerDef, move, &score);
|
||||
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++)
|
||||
{
|
||||
|
|
|
@ -850,87 +850,96 @@ static bool32 AI_IsMoveEffectInPlus(u32 battlerAtk, u32 battlerDef, u32 move, s3
|
|||
if (CountUsablePartyMons(battlerAtk) != 0 && ShouldPivot(battlerAtk, battlerDef, abilityDef, move, AI_THINKING_STRUCT->movesetIndex))
|
||||
return TRUE;
|
||||
break;
|
||||
case EFFECT_ATTACK_UP_HIT:
|
||||
case EFFECT_FELL_STINGER:
|
||||
if (BattlerStatCanRise(battlerAtk, abilityAtk, STAT_ATK))
|
||||
return TRUE;
|
||||
break;
|
||||
case EFFECT_DEFENSE_UP2_HIT:
|
||||
case EFFECT_DEFENSE_UP_HIT:
|
||||
if (BattlerStatCanRise(battlerAtk, abilityAtk, STAT_DEF))
|
||||
return TRUE;
|
||||
break;
|
||||
case EFFECT_SPEED_UP_HIT:
|
||||
if (BattlerStatCanRise(battlerAtk, abilityAtk, STAT_SPEED))
|
||||
return TRUE;
|
||||
break;
|
||||
case EFFECT_SPECIAL_ATTACK_UP_HIT:
|
||||
if (BattlerStatCanRise(battlerAtk, abilityAtk, STAT_SPATK))
|
||||
return TRUE;
|
||||
break;
|
||||
case EFFECT_ALL_STATS_UP_HIT:
|
||||
for (i = STAT_ATK; i <= NUM_STATS; i++)
|
||||
{
|
||||
if (BattlerStatCanRise(battlerAtk, abilityAtk, i))
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// check ADDITIONAL_EFFECTS
|
||||
for (i = 0; i < gBattleMoves[move].numAdditionalEffects; i++)
|
||||
{
|
||||
// Obviously ignore moves that target self
|
||||
// Consider move effects that target self
|
||||
if (gBattleMoves[move].additionalEffects[i].self)
|
||||
continue;
|
||||
|
||||
switch (gBattleMoves[move].additionalEffects[i].moveEffect)
|
||||
{
|
||||
case MOVE_EFFECT_POISON:
|
||||
case MOVE_EFFECT_TOXIC:
|
||||
if (AI_CanPoison(battlerAtk, battlerDef, abilityDef, move, MOVE_NONE))
|
||||
return TRUE;
|
||||
break;
|
||||
case MOVE_EFFECT_BURN:
|
||||
if (AI_CanBurn(battlerAtk, battlerDef, abilityDef, BATTLE_PARTNER(battlerAtk), move, MOVE_NONE))
|
||||
return TRUE;
|
||||
break;
|
||||
case MOVE_EFFECT_FREEZE_OR_FROSTBITE:
|
||||
if (AI_CanGetFrostbite(battlerDef, abilityDef))
|
||||
return TRUE;
|
||||
break;
|
||||
case MOVE_EFFECT_PARALYSIS:
|
||||
if (AI_CanParalyze(battlerAtk, battlerDef, abilityDef, move, MOVE_NONE))
|
||||
return TRUE;
|
||||
break;
|
||||
case MOVE_EFFECT_CONFUSION:
|
||||
if (AI_CanConfuse(battlerAtk, battlerDef, abilityDef, BATTLE_PARTNER(battlerAtk), move, MOVE_NONE))
|
||||
return TRUE;
|
||||
break;
|
||||
case MOVE_EFFECT_FLINCH:
|
||||
if (ShouldTryToFlinch(battlerAtk, battlerDef, abilityAtk, abilityDef, move))
|
||||
return TRUE;
|
||||
break;
|
||||
case MOVE_EFFECT_ATK_MINUS_1:
|
||||
case MOVE_EFFECT_DEF_MINUS_1:
|
||||
case MOVE_EFFECT_SPD_MINUS_1:
|
||||
case MOVE_EFFECT_SP_ATK_MINUS_1:
|
||||
case MOVE_EFFECT_SP_DEF_MINUS_1:
|
||||
case MOVE_EFFECT_ACC_MINUS_1:
|
||||
case MOVE_EFFECT_EVS_MINUS_1:
|
||||
if (ShouldLowerStat(battlerDef, abilityDef, STAT_ATK + (gBattleMoves[move].additionalEffects[i].moveEffect - MOVE_EFFECT_ATK_MINUS_1)) && noOfHitsToKo != 1)
|
||||
return TRUE;
|
||||
break;
|
||||
case MOVE_EFFECT_ATK_MINUS_2:
|
||||
case MOVE_EFFECT_DEF_MINUS_2:
|
||||
case MOVE_EFFECT_SPD_MINUS_2:
|
||||
case MOVE_EFFECT_SP_ATK_MINUS_2:
|
||||
case MOVE_EFFECT_SP_DEF_MINUS_2:
|
||||
case MOVE_EFFECT_ACC_MINUS_2:
|
||||
case MOVE_EFFECT_EVS_MINUS_2:
|
||||
if (ShouldLowerStat(battlerDef, abilityDef, STAT_ATK + (gBattleMoves[move].additionalEffects[i].moveEffect - MOVE_EFFECT_ATK_MINUS_2)) && noOfHitsToKo != 1)
|
||||
return TRUE;
|
||||
break;
|
||||
switch (gBattleMoves[move].additionalEffects[i].moveEffect)
|
||||
{
|
||||
case MOVE_EFFECT_ATK_PLUS_1:
|
||||
if (BattlerStatCanRise(battlerAtk, abilityAtk, STAT_ATK))
|
||||
return TRUE;
|
||||
break;
|
||||
case MOVE_EFFECT_DEF_PLUS_2:
|
||||
case MOVE_EFFECT_DEF_PLUS_1:
|
||||
if (BattlerStatCanRise(battlerAtk, abilityAtk, STAT_DEF))
|
||||
return TRUE;
|
||||
break;
|
||||
case MOVE_EFFECT_SPD_PLUS_1:
|
||||
if (BattlerStatCanRise(battlerAtk, abilityAtk, STAT_SPEED))
|
||||
return TRUE;
|
||||
break;
|
||||
case MOVE_EFFECT_SP_ATK_PLUS_1:
|
||||
if (BattlerStatCanRise(battlerAtk, abilityAtk, STAT_SPATK))
|
||||
return TRUE;
|
||||
break;
|
||||
case MOVE_EFFECT_ALL_STATS_UP:
|
||||
for (i = STAT_ATK; i <= NUM_STATS; i++)
|
||||
{
|
||||
if (BattlerStatCanRise(battlerAtk, abilityAtk, i))
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
else // consider move effects that hinder the target
|
||||
{
|
||||
switch (gBattleMoves[move].additionalEffects[i].moveEffect)
|
||||
{
|
||||
case MOVE_EFFECT_POISON:
|
||||
case MOVE_EFFECT_TOXIC:
|
||||
if (AI_CanPoison(battlerAtk, battlerDef, abilityDef, move, MOVE_NONE))
|
||||
return TRUE;
|
||||
break;
|
||||
case MOVE_EFFECT_BURN:
|
||||
if (AI_CanBurn(battlerAtk, battlerDef, abilityDef, BATTLE_PARTNER(battlerAtk), move, MOVE_NONE))
|
||||
return TRUE;
|
||||
break;
|
||||
case MOVE_EFFECT_FREEZE_OR_FROSTBITE:
|
||||
if (AI_CanGetFrostbite(battlerDef, abilityDef))
|
||||
return TRUE;
|
||||
break;
|
||||
case MOVE_EFFECT_PARALYSIS:
|
||||
if (AI_CanParalyze(battlerAtk, battlerDef, abilityDef, move, MOVE_NONE))
|
||||
return TRUE;
|
||||
break;
|
||||
case MOVE_EFFECT_CONFUSION:
|
||||
if (AI_CanConfuse(battlerAtk, battlerDef, abilityDef, BATTLE_PARTNER(battlerAtk), move, MOVE_NONE))
|
||||
return TRUE;
|
||||
break;
|
||||
case MOVE_EFFECT_FLINCH:
|
||||
if (ShouldTryToFlinch(battlerAtk, battlerDef, abilityAtk, abilityDef, move))
|
||||
return TRUE;
|
||||
break;
|
||||
case MOVE_EFFECT_ATK_MINUS_1:
|
||||
case MOVE_EFFECT_DEF_MINUS_1:
|
||||
case MOVE_EFFECT_SPD_MINUS_1:
|
||||
case MOVE_EFFECT_SP_ATK_MINUS_1:
|
||||
case MOVE_EFFECT_SP_DEF_MINUS_1:
|
||||
case MOVE_EFFECT_ACC_MINUS_1:
|
||||
case MOVE_EFFECT_EVS_MINUS_1:
|
||||
if (ShouldLowerStat(battlerDef, abilityDef, STAT_ATK + (gBattleMoves[move].additionalEffects[i].moveEffect - MOVE_EFFECT_ATK_MINUS_1)) && noOfHitsToKo != 1)
|
||||
return TRUE;
|
||||
break;
|
||||
case MOVE_EFFECT_ATK_MINUS_2:
|
||||
case MOVE_EFFECT_DEF_MINUS_2:
|
||||
case MOVE_EFFECT_SPD_MINUS_2:
|
||||
case MOVE_EFFECT_SP_ATK_MINUS_2:
|
||||
case MOVE_EFFECT_SP_DEF_MINUS_2:
|
||||
case MOVE_EFFECT_ACC_MINUS_2:
|
||||
case MOVE_EFFECT_EVS_MINUS_2:
|
||||
if (ShouldLowerStat(battlerDef, abilityDef, STAT_ATK + (gBattleMoves[move].additionalEffects[i].moveEffect - MOVE_EFFECT_ATK_MINUS_2)) && noOfHitsToKo != 1)
|
||||
return TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -206,9 +206,6 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
|
|||
[EFFECT_HIDDEN_POWER] = 1,
|
||||
[EFFECT_RAIN_DANCE] = 4,
|
||||
[EFFECT_SUNNY_DAY] = 4,
|
||||
[EFFECT_DEFENSE_UP_HIT] = 1,
|
||||
[EFFECT_ATTACK_UP_HIT] = 1,
|
||||
[EFFECT_ALL_STATS_UP_HIT] = 1,
|
||||
[EFFECT_BELLY_DRUM] = 7,
|
||||
[EFFECT_PSYCH_UP] = 7,
|
||||
[EFFECT_MIRROR_COAT] = 6,
|
||||
|
@ -342,7 +339,6 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
|
|||
[EFFECT_HURRICANE] = 0, // TODO: Assign points
|
||||
[EFFECT_TWO_TYPED_MOVE] = 0, // TODO: Assign points
|
||||
[EFFECT_ME_FIRST] = 0, // TODO: Assign points
|
||||
[EFFECT_SPEED_UP_HIT] = 0, // TODO: Assign points
|
||||
[EFFECT_QUIVER_DANCE] = 0, // TODO: Assign points
|
||||
[EFFECT_COIL] = 0, // TODO: Assign points
|
||||
[EFFECT_ELECTRIFY] = 0, // TODO: Assign points
|
||||
|
@ -386,7 +382,6 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
|
|||
[EFFECT_ACUPRESSURE] = 0, // TODO: Assign points
|
||||
[EFFECT_AROMATIC_MIST] = 0, // TODO: Assign points
|
||||
[EFFECT_POWDER] = 0, // TODO: Assign points
|
||||
[EFFECT_SP_ATTACK_UP_HIT] = 0, // TODO: Assign points
|
||||
[EFFECT_BELCH] = 0, // TODO: Assign points
|
||||
[EFFECT_PARTING_SHOT] = 0, // TODO: Assign points
|
||||
[EFFECT_MAT_BLOCK] = 0, // TODO: Assign points
|
||||
|
@ -419,7 +414,6 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
|
|||
[EFFECT_RECOIL_HP_25] = 0, // TODO: Assign points
|
||||
[EFFECT_STUFF_CHEEKS] = 0, // TODO: Assign points
|
||||
[EFFECT_GRAV_APPLE] = 0, // TODO: Assign points
|
||||
[EFFECT_EVASION_UP_HIT] = 0, // TODO: Assign points
|
||||
[EFFECT_GLITZY_GLOW] = 0, // TODO: Assign points
|
||||
[EFFECT_BADDY_BAD] = 0, // TODO: Assign points
|
||||
[EFFECT_SAPPY_SEED] = 0, // TODO: Assign points
|
||||
|
@ -448,7 +442,6 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
|
|||
[EFFECT_HIT_SET_REMOVE_TERRAIN] = 0, // TODO: Assign points
|
||||
[EFFECT_DARK_VOID] = 0, // TODO: Assign points
|
||||
[EFFECT_DOUBLE_SHOCK] = 0, // TODO: Assign points
|
||||
[EFFECT_SPECIAL_ATTACK_UP_HIT] = 1,
|
||||
[EFFECT_VICTORY_DANCE] = 0, // TODO: Assign points
|
||||
};
|
||||
|
||||
|
|
|
@ -3872,18 +3872,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
|||
|
||||
[MOVE_STEEL_WING] =
|
||||
{
|
||||
.effect = EFFECT_DEFENSE_UP_HIT,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 70,
|
||||
.type = TYPE_STEEL,
|
||||
.accuracy = 90,
|
||||
.pp = 25,
|
||||
.secondaryEffectChance = 10,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
.zMoveEffect = Z_EFFECT_NONE,
|
||||
.makesContact = TRUE,
|
||||
.sheerForceBoost = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT_SELF(MOVE_EFFECT_DEF_PLUS_1, 10),
|
||||
),
|
||||
},
|
||||
|
||||
[MOVE_MEAN_LOOK] =
|
||||
|
@ -4228,18 +4230,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
|||
|
||||
[MOVE_METAL_CLAW] =
|
||||
{
|
||||
.effect = EFFECT_ATTACK_UP_HIT,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 50,
|
||||
.type = TYPE_STEEL,
|
||||
.accuracy = 95,
|
||||
.pp = 35,
|
||||
.secondaryEffectChance = 10,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
.zMoveEffect = Z_EFFECT_NONE,
|
||||
.makesContact = TRUE,
|
||||
.sheerForceBoost = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT_SELF(MOVE_EFFECT_ATK_PLUS_1, 10)
|
||||
),
|
||||
},
|
||||
|
||||
[MOVE_VITAL_THROW] =
|
||||
|
@ -4478,20 +4482,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
|||
|
||||
[MOVE_ANCIENT_POWER] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA < GEN_4
|
||||
.makesContact = TRUE,
|
||||
#endif
|
||||
.effect = EFFECT_ALL_STATS_UP_HIT,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 60,
|
||||
.type = TYPE_ROCK,
|
||||
.accuracy = 100,
|
||||
.pp = 5,
|
||||
.secondaryEffectChance = 10,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_SPECIAL,
|
||||
.zMoveEffect = Z_EFFECT_NONE,
|
||||
.makesContact = B_UPDATED_MOVE_DATA < GEN_4,
|
||||
.sheerForceBoost = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT_SELF(MOVE_EFFECT_ALL_STATS_UP, 10)
|
||||
),
|
||||
},
|
||||
|
||||
[MOVE_SHADOW_BALL] =
|
||||
|
@ -5632,10 +5636,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
|||
.power = 100,
|
||||
.accuracy = 85,
|
||||
#endif
|
||||
.effect = EFFECT_ATTACK_UP_HIT,
|
||||
.effect = EFFECT_HIT,
|
||||
.type = TYPE_STEEL,
|
||||
.pp = 10,
|
||||
.secondaryEffectChance = 20,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
|
@ -5643,6 +5646,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
|||
.makesContact = TRUE,
|
||||
.punchingMove = TRUE,
|
||||
.sheerForceBoost = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT_SELF(MOVE_EFFECT_ATK_PLUS_1, 20)
|
||||
),
|
||||
},
|
||||
|
||||
[MOVE_ASTONISH] =
|
||||
|
@ -5798,18 +5804,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
|||
|
||||
[MOVE_SILVER_WIND] =
|
||||
{
|
||||
.effect = EFFECT_ALL_STATS_UP_HIT,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 60,
|
||||
.type = TYPE_BUG,
|
||||
.accuracy = 100,
|
||||
.pp = 5,
|
||||
.secondaryEffectChance = 10,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_SPECIAL,
|
||||
.zMoveEffect = Z_EFFECT_NONE,
|
||||
.sheerForceBoost = TRUE,
|
||||
.windMove = B_EXTRAPOLATED_MOVE_FLAGS,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT_SELF(MOVE_EFFECT_ALL_STATS_UP, 10)
|
||||
),
|
||||
},
|
||||
|
||||
[MOVE_METAL_SOUND] =
|
||||
|
@ -8062,25 +8070,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
|||
.makesContact = TRUE,
|
||||
},
|
||||
|
||||
#if B_UPDATED_MOVE_DATA == GEN_5
|
||||
#define CHATTER_EFFECT_CHANCE 10
|
||||
#elif B_UPDATED_MOVE_DATA >= GEN_6
|
||||
#define CHATTER_EFFECT_CHANCE 100
|
||||
#else
|
||||
#define CHATTER_EFFECT_CHANCE 31
|
||||
#endif
|
||||
|
||||
[MOVE_CHATTER] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_6
|
||||
.power = 65,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT(MOVE_EFFECT_CONFUSION, 100)
|
||||
),
|
||||
#elif B_UPDATED_MOVE_DATA == GEN_5
|
||||
.power = 60,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT(MOVE_EFFECT_CONFUSION, 10)
|
||||
),
|
||||
#else
|
||||
.power = 60,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT(MOVE_EFFECT_CONFUSION, 31)
|
||||
),
|
||||
#endif
|
||||
.effect = EFFECT_HIT,
|
||||
.power = B_UPDATED_MOVE_DATA >= GEN_6 ? 65 : 60,
|
||||
.type = TYPE_FLYING,
|
||||
.accuracy = 100,
|
||||
.pp = 20,
|
||||
|
@ -8098,6 +8099,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
|||
.sleepTalkBanned = TRUE,
|
||||
.instructBanned = TRUE,
|
||||
.assistBanned = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT(MOVE_EFFECT_CONFUSION, CHATTER_EFFECT_CHANCE)
|
||||
),
|
||||
},
|
||||
|
||||
[MOVE_JUDGMENT] =
|
||||
|
@ -8132,17 +8136,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
|||
|
||||
[MOVE_CHARGE_BEAM] =
|
||||
{
|
||||
.effect = EFFECT_SP_ATTACK_UP_HIT,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 50,
|
||||
.type = TYPE_ELECTRIC,
|
||||
.accuracy = 90,
|
||||
.pp = 10,
|
||||
.secondaryEffectChance = 70,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_SPECIAL,
|
||||
.zMoveEffect = Z_EFFECT_NONE,
|
||||
.sheerForceBoost = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT_SELF(MOVE_EFFECT_SP_ATK_PLUS_1, 70)
|
||||
),
|
||||
},
|
||||
|
||||
[MOVE_WOOD_HAMMER] =
|
||||
|
@ -8381,18 +8387,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
|||
|
||||
[MOVE_OMINOUS_WIND] =
|
||||
{
|
||||
.effect = EFFECT_ALL_STATS_UP_HIT,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 60,
|
||||
.type = TYPE_GHOST,
|
||||
.accuracy = 100,
|
||||
.pp = 5,
|
||||
.secondaryEffectChance = 10,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_SPECIAL,
|
||||
.zMoveEffect = Z_EFFECT_NONE,
|
||||
.sheerForceBoost = TRUE,
|
||||
.windMove = B_EXTRAPOLATED_MOVE_FLAGS,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT_SELF(MOVE_EFFECT_ALL_STATS_UP, 10)
|
||||
),
|
||||
},
|
||||
|
||||
[MOVE_SHADOW_FORCE] =
|
||||
|
@ -8758,18 +8766,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
|||
|
||||
[MOVE_FLAME_CHARGE] =
|
||||
{
|
||||
.effect = EFFECT_SPEED_UP_HIT,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 50,
|
||||
.type = TYPE_FIRE,
|
||||
.accuracy = 100,
|
||||
.pp = 20,
|
||||
.secondaryEffectChance = 100,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
.zMoveEffect = Z_EFFECT_NONE,
|
||||
.makesContact = TRUE,
|
||||
.sheerForceBoost = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT_SELF(MOVE_EFFECT_SPD_PLUS_1, 100)
|
||||
),
|
||||
},
|
||||
|
||||
[MOVE_COIL] =
|
||||
|
@ -9860,18 +9870,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
|||
|
||||
[MOVE_FIERY_DANCE] =
|
||||
{
|
||||
.effect = EFFECT_SP_ATTACK_UP_HIT,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 80,
|
||||
.type = TYPE_FIRE,
|
||||
.accuracy = 100,
|
||||
.pp = 10,
|
||||
.secondaryEffectChance = 50,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_SPECIAL,
|
||||
.zMoveEffect = Z_EFFECT_NONE,
|
||||
.sheerForceBoost = TRUE,
|
||||
.danceMove = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT_SELF(MOVE_EFFECT_SP_ATK_PLUS_1, 50)
|
||||
),
|
||||
},
|
||||
|
||||
[MOVE_FREEZE_SHOCK] =
|
||||
|
@ -10543,22 +10555,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
|||
|
||||
[MOVE_DIAMOND_STORM] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_7
|
||||
.effect = EFFECT_DEFENSE_UP2_HIT,
|
||||
#else
|
||||
.effect = EFFECT_DEFENSE_UP_HIT,
|
||||
#endif
|
||||
.power = 100,
|
||||
.type = TYPE_ROCK,
|
||||
.accuracy = 95,
|
||||
.pp = 5,
|
||||
.secondaryEffectChance = 50,
|
||||
.target = MOVE_TARGET_BOTH,
|
||||
.priority = 0,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
.zMoveEffect = Z_EFFECT_NONE,
|
||||
.sheerForceBoost = TRUE,
|
||||
.metronomeBanned = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT_SELF(B_UPDATED_MOVE_DATA >= GEN_7 ? MOVE_EFFECT_DEF_PLUS_2: MOVE_EFFECT_DEF_PLUS_1, 50),
|
||||
),
|
||||
},
|
||||
|
||||
[MOVE_STEAM_ERUPTION] =
|
||||
|
@ -10910,12 +10919,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
|||
|
||||
[MOVE_POWER_UP_PUNCH] =
|
||||
{
|
||||
.effect = EFFECT_ATTACK_UP_HIT,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 40,
|
||||
.type = TYPE_FIGHTING,
|
||||
.accuracy = 100,
|
||||
.pp = 20,
|
||||
.secondaryEffectChance = 100,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
|
@ -10923,6 +10931,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
|||
.makesContact = TRUE,
|
||||
.punchingMove = TRUE,
|
||||
.sheerForceBoost = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT_SELF(MOVE_EFFECT_ATK_PLUS_1, 100)
|
||||
),
|
||||
},
|
||||
|
||||
[MOVE_OBLIVION_WING] =
|
||||
|
@ -11976,26 +11987,24 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
|||
|
||||
[MOVE_ZIPPY_ZAP] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_8
|
||||
.power = 80,
|
||||
.effect = EFFECT_EVASION_UP_HIT,
|
||||
.pp = 10,
|
||||
.sheerForceBoost = TRUE,
|
||||
#else
|
||||
.effect = EFFECT_ALWAYS_CRIT,
|
||||
.power = 50,
|
||||
.pp = 15,
|
||||
#endif
|
||||
.effect = B_UPDATED_MOVE_DATA >= GEN_8 ? EFFECT_HIT : EFFECT_ALWAYS_CRIT,
|
||||
.power = B_UPDATED_MOVE_DATA >= GEN_8 ? 80 : 50,
|
||||
.type = TYPE_ELECTRIC,
|
||||
.accuracy = 100,
|
||||
.secondaryEffectChance = 100,
|
||||
.pp = B_UPDATED_MOVE_DATA >= GEN_8 ? 10 : 15,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 2,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
.zMoveEffect = Z_EFFECT_NONE,
|
||||
.makesContact = TRUE,
|
||||
.mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8,
|
||||
.sheerForceBoost = B_UPDATED_MOVE_DATA >= GEN_8,
|
||||
.metronomeBanned = TRUE,
|
||||
#if B_UPDATED_MOVE_DATA < GEN_8
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT(MOVE_EFFECT_EVS_PLUS_1, 100)
|
||||
),
|
||||
#endif
|
||||
},
|
||||
|
||||
[MOVE_SPLISHY_SPLASH] =
|
||||
|
@ -12014,7 +12023,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
|||
.metronomeBanned = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT(MOVE_EFFECT_PARALYSIS, 30)
|
||||
)
|
||||
),
|
||||
},
|
||||
|
||||
[MOVE_FLOATY_FALL] =
|
||||
|
@ -13394,18 +13403,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
|||
|
||||
[MOVE_PSYSHIELD_BASH] =
|
||||
{
|
||||
.effect = EFFECT_DEFENSE_UP_HIT,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 70,
|
||||
.type = TYPE_PSYCHIC,
|
||||
.accuracy = 90,
|
||||
.pp = 10,
|
||||
.secondaryEffectChance = 100,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
.zMoveEffect = Z_EFFECT_NONE,
|
||||
.makesContact = TRUE,
|
||||
.sheerForceBoost = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT_SELF(MOVE_EFFECT_DEF_PLUS_1, 100)
|
||||
),
|
||||
},
|
||||
|
||||
[MOVE_POWER_SHIFT] =
|
||||
|
@ -13470,17 +13481,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
|||
|
||||
[MOVE_MYSTICAL_POWER] =
|
||||
{
|
||||
.effect = EFFECT_SPECIAL_ATTACK_UP_HIT,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 70,
|
||||
.type = TYPE_PSYCHIC,
|
||||
.accuracy = 90,
|
||||
.pp = 10,
|
||||
.secondaryEffectChance = 100,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_SPECIAL,
|
||||
.zMoveEffect = Z_EFFECT_NONE,
|
||||
.sheerForceBoost = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT_SELF(MOVE_EFFECT_SP_ATK_PLUS_1, 100)
|
||||
),
|
||||
},
|
||||
|
||||
[MOVE_RAGING_FURY] =
|
||||
|
@ -13624,16 +13637,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
|||
.power = 75,
|
||||
.accuracy = 90,
|
||||
#endif
|
||||
.effect = EFFECT_SPEED_UP_HIT,
|
||||
.effect = EFFECT_HIT,
|
||||
.type = TYPE_PSYCHIC,
|
||||
.pp = 10,
|
||||
.secondaryEffectChance = 100,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_SPECIAL,
|
||||
.zMoveEffect = Z_EFFECT_NONE,
|
||||
.highCritRatio = TRUE,
|
||||
.sheerForceBoost = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT_SELF(MOVE_EFFECT_SPD_PLUS_1, 100)
|
||||
),
|
||||
},
|
||||
|
||||
[MOVE_BITTER_MALICE] =
|
||||
|
@ -14177,12 +14192,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
|||
|
||||
[MOVE_TORCH_SONG] =
|
||||
{
|
||||
.effect = EFFECT_SP_ATTACK_UP_HIT,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 80,
|
||||
.type = TYPE_FIRE,
|
||||
.accuracy = 100,
|
||||
.pp = 10,
|
||||
.secondaryEffectChance = 100,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_SPECIAL,
|
||||
|
@ -14190,16 +14204,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
|||
.sheerForceBoost = TRUE,
|
||||
.soundMove = TRUE,
|
||||
.ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT_SELF(MOVE_EFFECT_SP_ATK_PLUS_1, 100)
|
||||
),
|
||||
},
|
||||
|
||||
[MOVE_AQUA_STEP] =
|
||||
{
|
||||
.effect = EFFECT_SPEED_UP_HIT,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 80,
|
||||
.type = TYPE_WATER,
|
||||
.accuracy = 100,
|
||||
.pp = 10,
|
||||
.secondaryEffectChance = 100,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
|
@ -14207,6 +14223,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
|||
.makesContact = TRUE,
|
||||
.sheerForceBoost = TRUE,
|
||||
.danceMove = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT_SELF(MOVE_EFFECT_SPD_PLUS_1, 100)
|
||||
),
|
||||
},
|
||||
|
||||
[MOVE_RAGING_BULL] =
|
||||
|
@ -14376,18 +14395,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
|||
|
||||
[MOVE_TRAILBLAZE] =
|
||||
{
|
||||
.effect = EFFECT_SPEED_UP_HIT,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 50,
|
||||
.type = TYPE_GRASS,
|
||||
.accuracy = 100,
|
||||
.pp = 20,
|
||||
.secondaryEffectChance = 100,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
.zMoveEffect = Z_EFFECT_NONE,
|
||||
.makesContact = TRUE,
|
||||
.metronomeBanned = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT_SELF(MOVE_EFFECT_SPD_PLUS_1, 100)
|
||||
),
|
||||
},
|
||||
|
||||
[MOVE_CHILLING_WATER] =
|
||||
|
@ -15165,18 +15186,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
|||
},
|
||||
[MOVE_CLANGOROUS_SOULBLAZE] =
|
||||
{
|
||||
.effect = EFFECT_ALL_STATS_UP_HIT,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 185,
|
||||
.type = TYPE_DRAGON,
|
||||
.accuracy = 0,
|
||||
.pp = 1,
|
||||
.secondaryEffectChance = 100,
|
||||
.target = MOVE_TARGET_BOTH,
|
||||
.priority = 0,
|
||||
.split = SPLIT_SPECIAL,
|
||||
.zMoveEffect = 0,
|
||||
.soundMove = TRUE,
|
||||
.ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT_SELF(MOVE_EFFECT_ALL_STATS_UP, 100)
|
||||
),
|
||||
},
|
||||
[MOVE_GUARDIAN_OF_ALOLA] =
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue