diff options
Diffstat (limited to 'src/battle_ai_script_commands.c')
-rw-r--r-- | src/battle_ai_script_commands.c | 29 |
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++; |