Enum conversion for enum MoveEffects and enum BattleMoveEffects (#7366)
This commit is contained in:
parent
e502c078e8
commit
2f6e1ea6d3
2
Makefile
2
Makefile
@ -124,7 +124,7 @@ ARMCC := $(PREFIX)gcc
|
||||
PATH_ARMCC := PATH="$(PATH)" $(ARMCC)
|
||||
CC1 := $(shell $(PATH_ARMCC) --print-prog-name=cc1) -quiet
|
||||
|
||||
override CFLAGS += -mthumb -mthumb-interwork -O$(O_LEVEL) -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -Wno-pointer-to-int-cast -std=gnu17 -Werror -Wall -Wno-strict-aliasing -Wno-attribute-alias -Woverride-init -Wnonnull
|
||||
override CFLAGS += -mthumb -mthumb-interwork -O$(O_LEVEL) -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -Wno-pointer-to-int-cast -std=gnu17 -Werror -Wall -Wno-strict-aliasing -Wno-attribute-alias -Woverride-init -Wnonnull -Wenum-conversion
|
||||
|
||||
ifneq ($(LTO),0)
|
||||
ifneq ($(TEST),1)
|
||||
|
||||
@ -189,8 +189,8 @@ bool32 ShouldFakeOut(u32 battlerAtk, u32 battlerDef, u32 move);
|
||||
bool32 HasThawingMove(u32 battler);
|
||||
bool32 IsStatRaisingEffect(enum BattleMoveEffects effect);
|
||||
bool32 IsStatLoweringEffect(enum BattleMoveEffects effect);
|
||||
bool32 IsSelfStatLoweringEffect(enum BattleMoveEffects effect);
|
||||
bool32 IsSelfStatRaisingEffect(enum BattleMoveEffects effect);
|
||||
bool32 IsSelfStatLoweringEffect(enum MoveEffects effect);
|
||||
bool32 IsSelfStatRaisingEffect(enum MoveEffects effect);
|
||||
bool32 IsSwitchOutEffect(enum BattleMoveEffects effect);
|
||||
bool32 IsChaseEffect(enum BattleMoveEffects effect);
|
||||
bool32 IsAttackBoostMoveEffect(enum BattleMoveEffects effect);
|
||||
|
||||
@ -389,7 +389,7 @@ enum BattleWeather
|
||||
#define B_WEATHER_ANY (B_WEATHER_RAIN | B_WEATHER_SANDSTORM | B_WEATHER_SUN | B_WEATHER_HAIL | B_WEATHER_STRONG_WINDS | B_WEATHER_SNOW | B_WEATHER_FOG)
|
||||
#define B_WEATHER_PRIMAL_ANY (B_WEATHER_RAIN_PRIMAL | B_WEATHER_SUN_PRIMAL | B_WEATHER_STRONG_WINDS)
|
||||
|
||||
enum MoveEffects
|
||||
enum __attribute__((packed)) MoveEffects
|
||||
{
|
||||
MOVE_EFFECT_NONE,
|
||||
MOVE_EFFECT_SLEEP,
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
#ifndef GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H
|
||||
#define GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H
|
||||
|
||||
enum BattleMoveEffects
|
||||
enum __attribute__((packed)) BattleMoveEffects
|
||||
{
|
||||
EFFECT_PLACEHOLDER,
|
||||
EFFECT_HIT,
|
||||
|
||||
@ -30,7 +30,7 @@ enum SheerForceBoost
|
||||
|
||||
struct AdditionalEffect
|
||||
{
|
||||
u16 moveEffect;
|
||||
enum MoveEffects moveEffect;
|
||||
u8 self:1;
|
||||
u8 onlyIfTargetRaisedStats:1;
|
||||
u8 onChargeTurnOnly:1;
|
||||
@ -67,7 +67,7 @@ struct MoveInfo
|
||||
{
|
||||
const u8 *name;
|
||||
const u8 *description;
|
||||
u16 effect;
|
||||
enum BattleMoveEffects effect;
|
||||
u16 type:5; // Up to 32
|
||||
enum DamageCategory category:2;
|
||||
u16 power:9; // up to 511
|
||||
|
||||
@ -5164,6 +5164,8 @@ case EFFECT_GUARD_SPLIT:
|
||||
case MOVE_EFFECT_EVS_PLUS_2:
|
||||
ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_EVASION));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -5207,6 +5209,8 @@ case EFFECT_GUARD_SPLIT:
|
||||
ADJUST_SCORE(IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_SPEED));
|
||||
ADJUST_SCORE(IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_SPDEF));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -5214,133 +5218,134 @@ case EFFECT_GUARD_SPLIT:
|
||||
{
|
||||
switch (additionalEffect->moveEffect)
|
||||
{
|
||||
case MOVE_EFFECT_FLINCH:
|
||||
score += ShouldTryToFlinch(battlerAtk, battlerDef, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], move);
|
||||
case MOVE_EFFECT_FLINCH:
|
||||
score += ShouldTryToFlinch(battlerAtk, battlerDef, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], move);
|
||||
break;
|
||||
case MOVE_EFFECT_SPD_MINUS_1:
|
||||
case MOVE_EFFECT_SPD_MINUS_2:
|
||||
ADJUST_SCORE(IncreaseStatDownScore(battlerAtk, battlerDef, STAT_SPEED));
|
||||
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 (aiData->abilities[battlerDef] != ABILITY_CONTRARY)
|
||||
ADJUST_SCORE(DECENT_EFFECT);
|
||||
break;
|
||||
case MOVE_EFFECT_ATK_MINUS_2:
|
||||
case MOVE_EFFECT_DEF_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 (aiData->abilities[battlerDef] != ABILITY_CONTRARY)
|
||||
ADJUST_SCORE(DECENT_EFFECT);
|
||||
break;
|
||||
case MOVE_EFFECT_POISON:
|
||||
IncreasePoisonScore(battlerAtk, battlerDef, move, &score);
|
||||
break;
|
||||
case MOVE_EFFECT_CLEAR_SMOG:
|
||||
score += AI_TryToClearStats(battlerAtk, battlerDef, FALSE);
|
||||
break;
|
||||
case MOVE_EFFECT_BUG_BITE: // And pluck
|
||||
if (gBattleMons[battlerDef].volatiles.substitute || aiData->abilities[battlerDef] == ABILITY_STICKY_HOLD)
|
||||
break;
|
||||
case MOVE_EFFECT_SPD_MINUS_1:
|
||||
case MOVE_EFFECT_SPD_MINUS_2:
|
||||
ADJUST_SCORE(IncreaseStatDownScore(battlerAtk, battlerDef, STAT_SPEED));
|
||||
else if (GetItemPocket(aiData->items[battlerDef]) == POCKET_BERRIES)
|
||||
ADJUST_SCORE(DECENT_EFFECT);
|
||||
break;
|
||||
case MOVE_EFFECT_INCINERATE:
|
||||
if (gBattleMons[battlerDef].volatiles.substitute || aiData->abilities[battlerDef] == ABILITY_STICKY_HOLD)
|
||||
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 (aiData->abilities[battlerDef] != ABILITY_CONTRARY)
|
||||
ADJUST_SCORE(DECENT_EFFECT);
|
||||
break;
|
||||
case MOVE_EFFECT_ATK_MINUS_2:
|
||||
case MOVE_EFFECT_DEF_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 (aiData->abilities[battlerDef] != ABILITY_CONTRARY)
|
||||
ADJUST_SCORE(DECENT_EFFECT);
|
||||
break;
|
||||
case MOVE_EFFECT_POISON:
|
||||
IncreasePoisonScore(battlerAtk, battlerDef, move, &score);
|
||||
break;
|
||||
case MOVE_EFFECT_CLEAR_SMOG:
|
||||
score += AI_TryToClearStats(battlerAtk, battlerDef, FALSE);
|
||||
break;
|
||||
case MOVE_EFFECT_BUG_BITE: // And pluck
|
||||
if (gBattleMons[battlerDef].volatiles.substitute || aiData->abilities[battlerDef] == ABILITY_STICKY_HOLD)
|
||||
break;
|
||||
else if (GetItemPocket(aiData->items[battlerDef]) == POCKET_BERRIES)
|
||||
ADJUST_SCORE(DECENT_EFFECT);
|
||||
break;
|
||||
case MOVE_EFFECT_INCINERATE:
|
||||
if (gBattleMons[battlerDef].volatiles.substitute || aiData->abilities[battlerDef] == ABILITY_STICKY_HOLD)
|
||||
break;
|
||||
else if (GetItemPocket(aiData->items[battlerDef]) == POCKET_BERRIES || aiData->holdEffects[battlerDef] == HOLD_EFFECT_GEMS)
|
||||
ADJUST_SCORE(DECENT_EFFECT);
|
||||
break;
|
||||
case MOVE_EFFECT_STEAL_ITEM:
|
||||
else if (GetItemPocket(aiData->items[battlerDef]) == POCKET_BERRIES || aiData->holdEffects[battlerDef] == HOLD_EFFECT_GEMS)
|
||||
ADJUST_SCORE(DECENT_EFFECT);
|
||||
break;
|
||||
case MOVE_EFFECT_STEAL_ITEM:
|
||||
{
|
||||
bool32 canSteal = FALSE;
|
||||
|
||||
if (B_TRAINERS_KNOCK_OFF_ITEMS == TRUE)
|
||||
canSteal = TRUE;
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER || IsOnPlayerSide(battlerAtk))
|
||||
canSteal = TRUE;
|
||||
|
||||
if (canSteal && aiData->items[battlerAtk] == ITEM_NONE
|
||||
&& aiData->items[battlerDef] != ITEM_NONE
|
||||
&& CanBattlerGetOrLoseItem(battlerDef, aiData->items[battlerDef])
|
||||
&& CanBattlerGetOrLoseItem(battlerAtk, aiData->items[battlerDef])
|
||||
&& !HasMoveWithEffect(battlerAtk, EFFECT_ACROBATICS)
|
||||
&& aiData->abilities[battlerDef] != ABILITY_STICKY_HOLD)
|
||||
{
|
||||
bool32 canSteal = FALSE;
|
||||
|
||||
if (B_TRAINERS_KNOCK_OFF_ITEMS == TRUE)
|
||||
canSteal = TRUE;
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER || IsOnPlayerSide(battlerAtk))
|
||||
canSteal = TRUE;
|
||||
|
||||
if (canSteal && aiData->items[battlerAtk] == ITEM_NONE
|
||||
&& aiData->items[battlerDef] != ITEM_NONE
|
||||
&& CanBattlerGetOrLoseItem(battlerDef, aiData->items[battlerDef])
|
||||
&& CanBattlerGetOrLoseItem(battlerAtk, aiData->items[battlerDef])
|
||||
&& !HasMoveWithEffect(battlerAtk, EFFECT_ACROBATICS)
|
||||
&& aiData->abilities[battlerDef] != ABILITY_STICKY_HOLD)
|
||||
switch (aiData->holdEffects[battlerDef])
|
||||
{
|
||||
switch (aiData->holdEffects[battlerDef])
|
||||
{
|
||||
case HOLD_EFFECT_NONE:
|
||||
break;
|
||||
case HOLD_EFFECT_CHOICE_BAND:
|
||||
case HOLD_EFFECT_CHOICE_SCARF:
|
||||
case HOLD_EFFECT_CHOICE_SPECS:
|
||||
case HOLD_EFFECT_NONE:
|
||||
break;
|
||||
case HOLD_EFFECT_CHOICE_BAND:
|
||||
case HOLD_EFFECT_CHOICE_SCARF:
|
||||
case HOLD_EFFECT_CHOICE_SPECS:
|
||||
ADJUST_SCORE(DECENT_EFFECT);
|
||||
break;
|
||||
case HOLD_EFFECT_TOXIC_ORB:
|
||||
if (ShouldPoison(battlerAtk, battlerAtk))
|
||||
ADJUST_SCORE(DECENT_EFFECT);
|
||||
break;
|
||||
case HOLD_EFFECT_TOXIC_ORB:
|
||||
if (ShouldPoison(battlerAtk, battlerAtk))
|
||||
ADJUST_SCORE(DECENT_EFFECT);
|
||||
break;
|
||||
case HOLD_EFFECT_FLAME_ORB:
|
||||
if (ShouldBurn(battlerAtk, battlerAtk, aiData->abilities[battlerAtk]))
|
||||
ADJUST_SCORE(DECENT_EFFECT);
|
||||
break;
|
||||
case HOLD_EFFECT_BLACK_SLUDGE:
|
||||
if (IS_BATTLER_OF_TYPE(battlerAtk, TYPE_POISON))
|
||||
ADJUST_SCORE(DECENT_EFFECT);
|
||||
break;
|
||||
case HOLD_EFFECT_IRON_BALL:
|
||||
if (HasMoveWithEffect(battlerAtk, EFFECT_FLING))
|
||||
ADJUST_SCORE(DECENT_EFFECT);
|
||||
break;
|
||||
case HOLD_EFFECT_LAGGING_TAIL:
|
||||
case HOLD_EFFECT_STICKY_BARB:
|
||||
break;
|
||||
default:
|
||||
ADJUST_SCORE(WEAK_EFFECT);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case HOLD_EFFECT_FLAME_ORB:
|
||||
if (ShouldBurn(battlerAtk, battlerAtk, aiData->abilities[battlerAtk]))
|
||||
ADJUST_SCORE(DECENT_EFFECT);
|
||||
break;
|
||||
case HOLD_EFFECT_BLACK_SLUDGE:
|
||||
if (IS_BATTLER_OF_TYPE(battlerAtk, TYPE_POISON))
|
||||
ADJUST_SCORE(DECENT_EFFECT);
|
||||
break;
|
||||
case HOLD_EFFECT_IRON_BALL:
|
||||
if (HasMoveWithEffect(battlerAtk, EFFECT_FLING))
|
||||
ADJUST_SCORE(DECENT_EFFECT);
|
||||
break;
|
||||
case HOLD_EFFECT_LAGGING_TAIL:
|
||||
case HOLD_EFFECT_STICKY_BARB:
|
||||
break;
|
||||
default:
|
||||
ADJUST_SCORE(WEAK_EFFECT);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case MOVE_EFFECT_STEALTH_ROCK:
|
||||
case MOVE_EFFECT_SPIKES:
|
||||
if (AI_ShouldSetUpHazards(battlerAtk, battlerDef, aiData));
|
||||
{
|
||||
if (gDisableStructs[battlerAtk].isFirstTurn)
|
||||
ADJUST_SCORE(BEST_EFFECT);
|
||||
else
|
||||
ADJUST_SCORE(DECENT_EFFECT);
|
||||
}
|
||||
break;
|
||||
case MOVE_EFFECT_FEINT:
|
||||
if (GetMoveEffect(predictedMove) == EFFECT_PROTECT)
|
||||
ADJUST_SCORE(GOOD_EFFECT);
|
||||
break;
|
||||
case MOVE_EFFECT_THROAT_CHOP:
|
||||
if (IsSoundMove(GetBestDmgMoveFromBattler(battlerDef, battlerAtk, AI_DEFENDING)))
|
||||
{
|
||||
if (AI_IsFaster(battlerAtk, battlerDef, move))
|
||||
ADJUST_SCORE(GOOD_EFFECT);
|
||||
else
|
||||
ADJUST_SCORE(DECENT_EFFECT);
|
||||
}
|
||||
break;
|
||||
case MOVE_EFFECT_WRAP:
|
||||
if (!HasMoveWithEffect(battlerDef, EFFECT_RAPID_SPIN) && ShouldTrap(battlerAtk, battlerDef, move))
|
||||
}
|
||||
break;
|
||||
case MOVE_EFFECT_STEALTH_ROCK:
|
||||
case MOVE_EFFECT_SPIKES:
|
||||
if (AI_ShouldSetUpHazards(battlerAtk, battlerDef, aiData));
|
||||
{
|
||||
if (gDisableStructs[battlerAtk].isFirstTurn)
|
||||
ADJUST_SCORE(BEST_EFFECT);
|
||||
break;
|
||||
case MOVE_EFFECT_SALT_CURE:
|
||||
if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_WATER) || IS_BATTLER_OF_TYPE(battlerDef, TYPE_STEEL))
|
||||
else
|
||||
ADJUST_SCORE(DECENT_EFFECT);
|
||||
break;
|
||||
|
||||
}
|
||||
break;
|
||||
case MOVE_EFFECT_FEINT:
|
||||
if (GetMoveEffect(predictedMove) == EFFECT_PROTECT)
|
||||
ADJUST_SCORE(GOOD_EFFECT);
|
||||
break;
|
||||
case MOVE_EFFECT_THROAT_CHOP:
|
||||
if (IsSoundMove(GetBestDmgMoveFromBattler(battlerDef, battlerAtk, AI_DEFENDING)))
|
||||
{
|
||||
if (AI_IsFaster(battlerAtk, battlerDef, move))
|
||||
ADJUST_SCORE(GOOD_EFFECT);
|
||||
else
|
||||
ADJUST_SCORE(DECENT_EFFECT);
|
||||
}
|
||||
break;
|
||||
case MOVE_EFFECT_WRAP:
|
||||
if (!HasMoveWithEffect(battlerDef, EFFECT_RAPID_SPIN) && ShouldTrap(battlerAtk, battlerDef, move))
|
||||
ADJUST_SCORE(BEST_EFFECT);
|
||||
break;
|
||||
case MOVE_EFFECT_SALT_CURE:
|
||||
if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_WATER) || IS_BATTLER_OF_TYPE(battlerDef, TYPE_STEEL))
|
||||
ADJUST_SCORE(DECENT_EFFECT);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -6092,12 +6097,14 @@ static s32 AI_PredictSwitch(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
{
|
||||
switch (GetMoveAdditionalEffectById(move, i)->moveEffect)
|
||||
{
|
||||
case MOVE_EFFECT_WRAP:
|
||||
ADJUST_SCORE(AWFUL_EFFECT);
|
||||
break;
|
||||
case MOVE_EFFECT_FEINT:
|
||||
ADJUST_SCORE(WORST_EFFECT);
|
||||
break;
|
||||
case MOVE_EFFECT_WRAP:
|
||||
ADJUST_SCORE(AWFUL_EFFECT);
|
||||
break;
|
||||
case MOVE_EFFECT_FEINT:
|
||||
ADJUST_SCORE(WORST_EFFECT);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1021,6 +1021,8 @@ static bool32 AI_IsMoveEffectInPlus(u32 battlerAtk, u32 battlerDef, u32 move, s3
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else // consider move effects that hinder the target
|
||||
@ -1072,6 +1074,8 @@ static bool32 AI_IsMoveEffectInPlus(u32 battlerAtk, u32 battlerDef, u32 move, s3
|
||||
if (CanLowerStat(battlerAtk, battlerDef, abilityDef, STAT_ATK + (additionalEffect->moveEffect - MOVE_EFFECT_ATK_MINUS_2)) && noOfHitsToKo != 1)
|
||||
return TRUE;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1148,6 +1152,8 @@ static bool32 AI_IsMoveEffectInMinus(u32 battlerAtk, u32 battlerDef, u32 move, s
|
||||
|| (noOfHitsToKo != 1 && !(abilityDef == ABILITY_CONTRARY && !DoesBattlerIgnoreAbilityChecks(battlerAtk, abilityAtk, move))))
|
||||
return TRUE;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -1740,6 +1746,8 @@ bool32 IsHazardMove(u32 move)
|
||||
{
|
||||
case MOVE_EFFECT_STEELSURGE:
|
||||
return TRUE;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
@ -1768,6 +1776,8 @@ bool32 IsHazardClearingMove(u32 move)
|
||||
{
|
||||
case MOVE_EFFECT_DEFOG:
|
||||
return TRUE;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2744,7 +2754,7 @@ bool32 IsStatLoweringEffect(enum BattleMoveEffects effect)
|
||||
}
|
||||
}
|
||||
|
||||
bool32 IsSelfStatLoweringEffect(enum BattleMoveEffects effect)
|
||||
bool32 IsSelfStatLoweringEffect(enum MoveEffects effect)
|
||||
{
|
||||
// Self stat lowering moves like Overheart, Superpower etc.
|
||||
switch (effect)
|
||||
@ -2772,7 +2782,7 @@ bool32 IsSelfStatLoweringEffect(enum BattleMoveEffects effect)
|
||||
}
|
||||
}
|
||||
|
||||
bool32 IsSelfStatRaisingEffect(enum BattleMoveEffects effect)
|
||||
bool32 IsSelfStatRaisingEffect(enum MoveEffects effect)
|
||||
{
|
||||
// Self stat lowering moves like Power Up Punch or Charge Beam
|
||||
switch (effect)
|
||||
@ -2872,6 +2882,8 @@ static inline bool32 IsMoveSleepClauseTrigger(u32 move)
|
||||
case MOVE_EFFECT_EFFECT_SPORE_SIDE:
|
||||
case MOVE_EFFECT_YAWN_FOE:
|
||||
return TRUE;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
@ -4318,12 +4330,14 @@ bool32 HasMoveThatChangesKOThreshold(u32 battlerId, u32 noOfHitsToFaint, u32 aiI
|
||||
|
||||
switch (gMovesInfo[moves[i]].additionalEffects[i].moveEffect)
|
||||
{
|
||||
case MOVE_EFFECT_SPD_MINUS_1:
|
||||
case MOVE_EFFECT_SPD_MINUS_2:
|
||||
{
|
||||
if(aiIsFaster)
|
||||
return TRUE;
|
||||
}
|
||||
case MOVE_EFFECT_SPD_MINUS_1:
|
||||
case MOVE_EFFECT_SPD_MINUS_2:
|
||||
{
|
||||
if(aiIsFaster)
|
||||
return TRUE;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -867,6 +867,8 @@ static void AddMovePoints(u8 caseId, u16 arg1, u8 arg2, u8 arg3)
|
||||
if (additionalEffect->self == TRUE && (additionalEffect->chance == 100 || additionalEffect->chance == 0))
|
||||
baseFromEffect += 2;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user