summaryrefslogtreecommitdiff
path: root/src/battle_ai_script_commands.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/battle_ai_script_commands.c')
-rw-r--r--src/battle_ai_script_commands.c29
1 files changed, 18 insertions, 11 deletions
diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c
index b72875036..20705aa70 100644
--- a/src/battle_ai_script_commands.c
+++ b/src/battle_ai_script_commands.c
@@ -263,7 +263,10 @@ static const BattleAICmdFunc sBattleAICmdTable[] =
Cmd_if_holds_item, // 0x62
};
-static const u16 sDiscouragedPowerfulMoveEffects[] =
+// For the purposes of determing the most powerful move in a moveset, these
+// moves are treated the same as having a power of 0 or 1
+#define IGNORED_MOVES_END 0xFFFF
+static const u16 sIgnoredPowerfulMoveEffects[] =
{
EFFECT_EXPLOSION,
EFFECT_DREAM_EATER,
@@ -277,7 +280,7 @@ static const u16 sDiscouragedPowerfulMoveEffects[] =
EFFECT_SUPERPOWER,
EFFECT_ERUPTION,
EFFECT_OVERHEAT,
- 0xFFFF
+ IGNORED_MOVES_END
};
// code
@@ -1177,14 +1180,14 @@ static void Cmd_get_how_powerful_move_is(void)
s32 i, checkedMove;
s32 moveDmgs[MAX_MON_MOVES];
- for (i = 0; sDiscouragedPowerfulMoveEffects[i] != 0xFFFF; i++)
+ for (i = 0; sIgnoredPowerfulMoveEffects[i] != IGNORED_MOVES_END; i++)
{
- if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect == sDiscouragedPowerfulMoveEffects[i])
+ if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect == sIgnoredPowerfulMoveEffects[i])
break;
}
if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].power > 1
- && sDiscouragedPowerfulMoveEffects[i] == 0xFFFF)
+ && sIgnoredPowerfulMoveEffects[i] == IGNORED_MOVES_END)
{
gDynamicBasePower = 0;
*(&gBattleStruct->dynamicMoveType) = 0;
@@ -1192,16 +1195,18 @@ static void Cmd_get_how_powerful_move_is(void)
gMoveResultFlags = 0;
gCritMultiplier = 1;
+ // Considered move has power and is not in sIgnoredPowerfulMoveEffects
+ // Check all other moves and calculate their power
for (checkedMove = 0; checkedMove < MAX_MON_MOVES; checkedMove++)
{
- for (i = 0; sDiscouragedPowerfulMoveEffects[i] != 0xFFFF; i++)
+ for (i = 0; sIgnoredPowerfulMoveEffects[i] != IGNORED_MOVES_END; i++)
{
- if (gBattleMoves[gBattleMons[sBattler_AI].moves[checkedMove]].effect == sDiscouragedPowerfulMoveEffects[i])
+ if (gBattleMoves[gBattleMons[sBattler_AI].moves[checkedMove]].effect == sIgnoredPowerfulMoveEffects[i])
break;
}
if (gBattleMons[sBattler_AI].moves[checkedMove] != MOVE_NONE
- && sDiscouragedPowerfulMoveEffects[i] == 0xFFFF
+ && sIgnoredPowerfulMoveEffects[i] == IGNORED_MOVES_END
&& gBattleMoves[gBattleMons[sBattler_AI].moves[checkedMove]].power > 1)
{
gCurrentMove = gBattleMons[sBattler_AI].moves[checkedMove];
@@ -1217,6 +1222,7 @@ static void Cmd_get_how_powerful_move_is(void)
}
}
+ // Is the considered move the most powerful move available?
for (checkedMove = 0; checkedMove < MAX_MON_MOVES; checkedMove++)
{
if (moveDmgs[checkedMove] > moveDmgs[AI_THINKING_STRUCT->movesetIndex])
@@ -1224,13 +1230,14 @@ static void Cmd_get_how_powerful_move_is(void)
}
if (checkedMove == MAX_MON_MOVES)
- AI_THINKING_STRUCT->funcResult = MOVE_MOST_POWERFUL; // Is the most powerful.
+ AI_THINKING_STRUCT->funcResult = MOVE_MOST_POWERFUL;
else
- AI_THINKING_STRUCT->funcResult = MOVE_NOT_MOST_POWERFUL; // Not the most powerful.
+ AI_THINKING_STRUCT->funcResult = MOVE_NOT_MOST_POWERFUL;
}
else
{
- AI_THINKING_STRUCT->funcResult = MOVE_POWER_DISCOURAGED; // Highly discouraged in terms of power.
+ // Move has a power of 0/1, or is in the group sIgnoredPowerfulMoveEffects
+ AI_THINKING_STRUCT->funcResult = MOVE_POWER_OTHER;
}
gAIScriptPtr++;