diff options
Diffstat (limited to 'src/battle_ai_script_commands.c')
-rw-r--r-- | src/battle_ai_script_commands.c | 1130 |
1 files changed, 569 insertions, 561 deletions
diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c index d988fd7b4..8bd90ef2d 100644 --- a/src/battle_ai_script_commands.c +++ b/src/battle_ai_script_commands.c @@ -44,100 +44,100 @@ AI scripts. static EWRAM_DATA const u8 *sAIScriptPtr = NULL; extern u8 *gBattleAI_ScriptsTable[]; -static void BattleAICmd_if_random_less_than(void); -static void BattleAICmd_if_random_greater_than(void); -static void BattleAICmd_if_random_equal(void); -static void BattleAICmd_if_random_not_equal(void); -static void BattleAICmd_score(void); -static void BattleAICmd_if_hp_less_than(void); -static void BattleAICmd_if_hp_more_than(void); -static void BattleAICmd_if_hp_equal(void); -static void BattleAICmd_if_hp_not_equal(void); -static void BattleAICmd_if_status(void); -static void BattleAICmd_if_not_status(void); -static void BattleAICmd_if_status2(void); -static void BattleAICmd_if_not_status2(void); -static void BattleAICmd_if_status3(void); -static void BattleAICmd_if_not_status3(void); -static void BattleAICmd_if_status4(void); -static void BattleAICmd_if_not_status4(void); -static void BattleAICmd_if_less_than(void); -static void BattleAICmd_if_more_than(void); -static void BattleAICmd_if_equal(void); -static void BattleAICmd_if_not_equal(void); -static void BattleAICmd_if_less_than_32(void); -static void BattleAICmd_if_more_than_32(void); -static void BattleAICmd_if_equal_32(void); -static void BattleAICmd_if_not_equal_32(void); -static void BattleAICmd_if_move(void); -static void BattleAICmd_if_not_move(void); -static void BattleAICmd_if_in_bytes(void); -static void BattleAICmd_if_not_in_bytes(void); -static void BattleAICmd_if_in_words(void); -static void BattleAICmd_if_not_in_words(void); -static void BattleAICmd_if_user_can_damage(void); -static void BattleAICmd_if_user_cant_damage(void); -static void BattleAICmd_get_turn_count(void); -static void BattleAICmd_get_type(void); -static void BattleAICmd_get_move_power(void); -static void BattleAICmd_is_most_powerful_move(void); -static void BattleAICmd_get_move(void); -static void BattleAICmd_if_arg_equal(void); -static void BattleAICmd_if_arg_not_equal(void); -static void BattleAICmd_if_would_go_first(void); -static void BattleAICmd_if_would_not_go_first(void); -static void BattleAICmd_nullsub_2A(void); -static void BattleAICmd_nullsub_2B(void); -static void BattleAICmd_count_alive_pokemon(void); -static void BattleAICmd_get_considered_move(void); -static void BattleAICmd_get_considered_move_effect(void); -static void BattleAICmd_get_ability(void); -static void BattleAICmd_get_highest_possible_damage(void); -static void BattleAICmd_if_type_effectiveness(void); -static void BattleAICmd_nullsub_32(void); -static void BattleAICmd_nullsub_33(void); -static void BattleAICmd_if_status_in_party(void); -static void BattleAICmd_if_status_not_in_party(void); -static void BattleAICmd_get_weather(void); -static void BattleAICmd_if_effect(void); -static void BattleAICmd_if_not_effect(void); -static void BattleAICmd_if_stat_level_less_than(void); -static void BattleAICmd_if_stat_level_more_than(void); -static void BattleAICmd_if_stat_level_equal(void); -static void BattleAICmd_if_stat_level_not_equal(void); -static void BattleAICmd_if_can_faint(void); -static void BattleAICmd_if_cant_faint(void); -static void BattleAICmd_if_has_move(void); -static void BattleAICmd_if_dont_have_move(void); -static void BattleAICmd_if_move_effect(void); -static void BattleAICmd_if_not_move_effect(void); -static void BattleAICmd_if_last_move_did_damage(void); -static void BattleAICmd_if_encored(void); -static void BattleAICmd_flee(void); -static void BattleAICmd_frlg_safari(void); -static void BattleAICmd_watch(void); -static void BattleAICmd_get_hold_effect(void); -static void BattleAICmd_get_gender(void); -static void BattleAICmd_is_first_turn(void); -static void BattleAICmd_get_stockpile_count(void); -static void BattleAICmd_is_double_battle(void); -static void BattleAICmd_get_used_held_item(void); -static void BattleAICmd_get_move_type_from_result(void); -static void BattleAICmd_get_move_power_from_result(void); -static void BattleAICmd_get_move_effect_from_result(void); -static void BattleAICmd_get_protect_count(void); -static void BattleAICmd_nullsub_52(void); -static void BattleAICmd_nullsub_53(void); -static void BattleAICmd_nullsub_54(void); -static void BattleAICmd_nullsub_55(void); -static void BattleAICmd_nullsub_56(void); -static void BattleAICmd_nullsub_57(void); -static void BattleAICmd_call(void); -static void BattleAICmd_jump(void); -static void BattleAICmd_end(void); -static void BattleAICmd_if_level_compare(void); -static void BattleAICmd_if_taunted(void); -static void BattleAICmd_if_not_taunted(void); +static void Cmd_if_random_less_than(void); +static void Cmd_if_random_greater_than(void); +static void Cmd_if_random_equal(void); +static void Cmd_if_random_not_equal(void); +static void Cmd_score(void); +static void Cmd_if_hp_less_than(void); +static void Cmd_if_hp_more_than(void); +static void Cmd_if_hp_equal(void); +static void Cmd_if_hp_not_equal(void); +static void Cmd_if_status(void); +static void Cmd_if_not_status(void); +static void Cmd_if_status2(void); +static void Cmd_if_not_status2(void); +static void Cmd_if_status3(void); +static void Cmd_if_not_status3(void); +static void Cmd_if_side_affecting(void); +static void Cmd_if_not_side_affecting(void); +static void Cmd_if_less_than(void); +static void Cmd_if_more_than(void); +static void Cmd_if_equal(void); +static void Cmd_if_not_equal(void); +static void Cmd_if_less_than_ptr(void); +static void Cmd_if_more_than_ptr(void); +static void Cmd_if_equal_ptr(void); +static void Cmd_if_not_equal_ptr(void); +static void Cmd_if_move(void); +static void Cmd_if_not_move(void); +static void Cmd_if_in_bytes(void); +static void Cmd_if_not_in_bytes(void); +static void Cmd_if_in_hwords(void); +static void Cmd_if_not_in_hwords(void); +static void Cmd_if_user_has_attacking_move(void); +static void Cmd_if_user_has_no_attacking_moves(void); +static void Cmd_get_turn_count(void); +static void Cmd_get_type(void); +static void Cmd_get_considered_move_power(void); +static void Cmd_get_how_powerful_move_is(void); +static void Cmd_get_last_used_battler_move(void); +static void Cmd_if_equal_(void); +static void Cmd_if_not_equal_(void); +static void Cmd_if_would_go_first(void); +static void Cmd_if_would_not_go_first(void); +static void Cmd_nullsub_2A(void); +static void Cmd_nullsub_2B(void); +static void Cmd_count_alive_pokemon(void); +static void Cmd_get_considered_move(void); +static void Cmd_get_considered_move_effect(void); +static void Cmd_get_ability(void); +static void Cmd_get_highest_type_effectiveness(void); +static void Cmd_if_type_effectiveness(void); +static void Cmd_nullsub_32(void); +static void Cmd_nullsub_33(void); +static void Cmd_if_status_in_party(void); +static void Cmd_if_status_not_in_party(void); +static void Cmd_get_weather(void); +static void Cmd_if_effect(void); +static void Cmd_if_not_effect(void); +static void Cmd_if_stat_level_less_than(void); +static void Cmd_if_stat_level_more_than(void); +static void Cmd_if_stat_level_equal(void); +static void Cmd_if_stat_level_not_equal(void); +static void Cmd_if_can_faint(void); +static void Cmd_if_cant_faint(void); +static void Cmd_if_has_move(void); +static void Cmd_if_doesnt_have_move(void); +static void Cmd_if_has_move_with_effect(void); +static void Cmd_if_doesnt_have_move_with_effect(void); +static void Cmd_if_any_move_disabled_or_encored(void); +static void Cmd_if_curr_move_disabled_or_encored(void); +static void Cmd_flee(void); +static void Cmd_if_random_safari_flee(void); +static void Cmd_watch(void); +static void Cmd_get_hold_effect(void); +static void Cmd_get_gender(void); +static void Cmd_is_first_turn_for(void); +static void Cmd_get_stockpile_count(void); +static void Cmd_is_double_battle(void); +static void Cmd_get_used_held_item(void); +static void Cmd_get_move_type_from_result(void); +static void Cmd_get_move_power_from_result(void); +static void Cmd_get_move_effect_from_result(void); +static void Cmd_get_protect_count(void); +static void Cmd_nullsub_52(void); +static void Cmd_nullsub_53(void); +static void Cmd_nullsub_54(void); +static void Cmd_nullsub_55(void); +static void Cmd_nullsub_56(void); +static void Cmd_nullsub_57(void); +static void Cmd_call(void); +static void Cmd_goto(void); +static void Cmd_end(void); +static void Cmd_if_level_compare(void); +static void Cmd_if_target_taunted(void); +static void Cmd_if_target_not_taunted(void); static void RecordLastUsedMoveByTarget(void); static void BattleAI_DoAIProcessing(void); @@ -148,100 +148,100 @@ typedef void (*BattleAICmdFunc)(void); static const BattleAICmdFunc sBattleAICmdTable[] = { - BattleAICmd_if_random_less_than, // 0x0 - BattleAICmd_if_random_greater_than, // 0x1 - BattleAICmd_if_random_equal, // 0x2 - BattleAICmd_if_random_not_equal, // 0x3 - BattleAICmd_score, // 0x4 - BattleAICmd_if_hp_less_than, // 0x5 - BattleAICmd_if_hp_more_than, // 0x6 - BattleAICmd_if_hp_equal, // 0x7 - BattleAICmd_if_hp_not_equal, // 0x8 - BattleAICmd_if_status, // 0x9 - BattleAICmd_if_not_status, // 0xA - BattleAICmd_if_status2, // 0xB - BattleAICmd_if_not_status2, // 0xC - BattleAICmd_if_status3, // 0xD - BattleAICmd_if_not_status3, // 0xE - BattleAICmd_if_status4, // 0xF - BattleAICmd_if_not_status4, // 0x10 - BattleAICmd_if_less_than, // 0x11 - BattleAICmd_if_more_than, // 0x12 - BattleAICmd_if_equal, // 0x13 - BattleAICmd_if_not_equal, // 0x14 - BattleAICmd_if_less_than_32, // 0x15 - BattleAICmd_if_more_than_32, // 0x16 - BattleAICmd_if_equal_32, // 0x17 - BattleAICmd_if_not_equal_32, // 0x18 - BattleAICmd_if_move, // 0x19 - BattleAICmd_if_not_move, // 0x1A - BattleAICmd_if_in_bytes, // 0x1B - BattleAICmd_if_not_in_bytes, // 0x1C - BattleAICmd_if_in_words, // 0x1D - BattleAICmd_if_not_in_words, // 0x1E - BattleAICmd_if_user_can_damage, // 0x1F - BattleAICmd_if_user_cant_damage, // 0x20 - BattleAICmd_get_turn_count, // 0x21 - BattleAICmd_get_type, // 0x22 - BattleAICmd_get_move_power, // 0x23 - BattleAICmd_is_most_powerful_move, // 0x24 - BattleAICmd_get_move, // 0x25 - BattleAICmd_if_arg_equal, // 0x26 - BattleAICmd_if_arg_not_equal, // 0x27 - BattleAICmd_if_would_go_first, // 0x28 - BattleAICmd_if_would_not_go_first, // 0x29 - BattleAICmd_nullsub_2A, // 0x2A - BattleAICmd_nullsub_2B, // 0x2B - BattleAICmd_count_alive_pokemon, // 0x2C - BattleAICmd_get_considered_move, // 0x2D - BattleAICmd_get_considered_move_effect, // 0x2E - BattleAICmd_get_ability, // 0x2F - BattleAICmd_get_highest_possible_damage, // 0x30 - BattleAICmd_if_type_effectiveness, // 0x31 - BattleAICmd_nullsub_32, // 0x32 - BattleAICmd_nullsub_33, // 0x33 - BattleAICmd_if_status_in_party, // 0x34 - BattleAICmd_if_status_not_in_party, // 0x35 - BattleAICmd_get_weather, // 0x36 - BattleAICmd_if_effect, // 0x37 - BattleAICmd_if_not_effect, // 0x38 - BattleAICmd_if_stat_level_less_than, // 0x39 - BattleAICmd_if_stat_level_more_than, // 0x3A - BattleAICmd_if_stat_level_equal, // 0x3B - BattleAICmd_if_stat_level_not_equal, // 0x3C - BattleAICmd_if_can_faint, // 0x3D - BattleAICmd_if_cant_faint, // 0x3E - BattleAICmd_if_has_move, // 0x3F - BattleAICmd_if_dont_have_move, // 0x40 - BattleAICmd_if_move_effect, // 0x41 - BattleAICmd_if_not_move_effect, // 0x42 - BattleAICmd_if_last_move_did_damage, // 0x43 - BattleAICmd_if_encored, // 0x44 - BattleAICmd_flee, // 0x45 - BattleAICmd_frlg_safari, // 0x46 - BattleAICmd_watch, // 0x47 - BattleAICmd_get_hold_effect, // 0x48 - BattleAICmd_get_gender, // 0x49 - BattleAICmd_is_first_turn, // 0x4A - BattleAICmd_get_stockpile_count, // 0x4B - BattleAICmd_is_double_battle, // 0x4C - BattleAICmd_get_used_held_item, // 0x4D - BattleAICmd_get_move_type_from_result, // 0x4E - BattleAICmd_get_move_power_from_result, // 0x4F - BattleAICmd_get_move_effect_from_result, // 0x50 - BattleAICmd_get_protect_count, // 0x51 - BattleAICmd_nullsub_52, // 0x52 - BattleAICmd_nullsub_53, // 0x53 - BattleAICmd_nullsub_54, // 0x54 - BattleAICmd_nullsub_55, // 0x55 - BattleAICmd_nullsub_56, // 0x56 - BattleAICmd_nullsub_57, // 0x57 - BattleAICmd_call, // 0x58 - BattleAICmd_jump, // 0x59 - BattleAICmd_end, // 0x5A - BattleAICmd_if_level_compare, // 0x5B - BattleAICmd_if_taunted, // 0x5C - BattleAICmd_if_not_taunted, // 0x5D + Cmd_if_random_less_than, // 0x0 + Cmd_if_random_greater_than, // 0x1 + Cmd_if_random_equal, // 0x2 + Cmd_if_random_not_equal, // 0x3 + Cmd_score, // 0x4 + Cmd_if_hp_less_than, // 0x5 + Cmd_if_hp_more_than, // 0x6 + Cmd_if_hp_equal, // 0x7 + Cmd_if_hp_not_equal, // 0x8 + Cmd_if_status, // 0x9 + Cmd_if_not_status, // 0xA + Cmd_if_status2, // 0xB + Cmd_if_not_status2, // 0xC + Cmd_if_status3, // 0xD + Cmd_if_not_status3, // 0xE + Cmd_if_side_affecting, // 0xF + Cmd_if_not_side_affecting, // 0x10 + Cmd_if_less_than, // 0x11 + Cmd_if_more_than, // 0x12 + Cmd_if_equal, // 0x13 + Cmd_if_not_equal, // 0x14 + Cmd_if_less_than_ptr, // 0x15 + Cmd_if_more_than_ptr, // 0x16 + Cmd_if_equal_ptr, // 0x17 + Cmd_if_not_equal_ptr, // 0x18 + Cmd_if_move, // 0x19 + Cmd_if_not_move, // 0x1A + Cmd_if_in_bytes, // 0x1B + Cmd_if_not_in_bytes, // 0x1C + Cmd_if_in_hwords, // 0x1D + Cmd_if_not_in_hwords, // 0x1E + Cmd_if_user_has_attacking_move, // 0x1F + Cmd_if_user_has_no_attacking_moves, // 0x20 + Cmd_get_turn_count, // 0x21 + Cmd_get_type, // 0x22 + Cmd_get_considered_move_power, // 0x23 + Cmd_get_how_powerful_move_is, // 0x24 + Cmd_get_last_used_battler_move, // 0x25 + Cmd_if_equal_, // 0x26 + Cmd_if_not_equal_, // 0x27 + Cmd_if_would_go_first, // 0x28 + Cmd_if_would_not_go_first, // 0x29 + Cmd_nullsub_2A, // 0x2A + Cmd_nullsub_2B, // 0x2B + Cmd_count_alive_pokemon, // 0x2C + Cmd_get_considered_move, // 0x2D + Cmd_get_considered_move_effect, // 0x2E + Cmd_get_ability, // 0x2F + Cmd_get_highest_type_effectiveness, // 0x30 + Cmd_if_type_effectiveness, // 0x31 + Cmd_nullsub_32, // 0x32 + Cmd_nullsub_33, // 0x33 + Cmd_if_status_in_party, // 0x34 + Cmd_if_status_not_in_party, // 0x35 + Cmd_get_weather, // 0x36 + Cmd_if_effect, // 0x37 + Cmd_if_not_effect, // 0x38 + Cmd_if_stat_level_less_than, // 0x39 + Cmd_if_stat_level_more_than, // 0x3A + Cmd_if_stat_level_equal, // 0x3B + Cmd_if_stat_level_not_equal, // 0x3C + Cmd_if_can_faint, // 0x3D + Cmd_if_cant_faint, // 0x3E + Cmd_if_has_move, // 0x3F + Cmd_if_doesnt_have_move, // 0x40 + Cmd_if_has_move_with_effect, // 0x41 + Cmd_if_doesnt_have_move_with_effect, // 0x42 + Cmd_if_any_move_disabled_or_encored, // 0x43 + Cmd_if_curr_move_disabled_or_encored, // 0x44 + Cmd_flee, // 0x45 + Cmd_if_random_safari_flee, // 0x46 + Cmd_watch, // 0x47 + Cmd_get_hold_effect, // 0x48 + Cmd_get_gender, // 0x49 + Cmd_is_first_turn_for, // 0x4A + Cmd_get_stockpile_count, // 0x4B + Cmd_is_double_battle, // 0x4C + Cmd_get_used_held_item, // 0x4D + Cmd_get_move_type_from_result, // 0x4E + Cmd_get_move_power_from_result, // 0x4F + Cmd_get_move_effect_from_result, // 0x50 + Cmd_get_protect_count, // 0x51 + Cmd_nullsub_52, // 0x52 + Cmd_nullsub_53, // 0x53 + Cmd_nullsub_54, // 0x54 + Cmd_nullsub_55, // 0x55 + Cmd_nullsub_56, // 0x56 + Cmd_nullsub_57, // 0x57 + Cmd_call, // 0x58 + Cmd_goto, // 0x59 + Cmd_end, // 0x5A + Cmd_if_level_compare, // 0x5B + Cmd_if_target_taunted, // 0x5C + Cmd_if_target_not_taunted, // 0x5D }; static const u16 sDiscouragedPowerfulMoveEffects[] = @@ -275,7 +275,7 @@ void BattleAI_HandleItemUseBeforeAISetup(void) && !(gBattleTypeFlags & (BATTLE_TYPE_TRAINER_TOWER | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_SAFARI | BATTLE_TYPE_LINK)) ) { - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_TRAINER_ITEMS; i++) { if (gTrainers[gTrainerBattleOpponent_A].items[i] != 0) { @@ -298,13 +298,13 @@ void BattleAI_SetupAIData(void) for (i = 0; i < sizeof(struct AI_ThinkingStruct); i++) data[i] = 0; - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_MON_MOVES; i++) AI_THINKING_STRUCT->score[i] = 100; moveLimitations = CheckMoveLimitations(gActiveBattler, 0, 0xFF); // Ignore moves that aren't possible to use. - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_MON_MOVES; i++) { if (gBitTable[i] & moveLimitations) AI_THINKING_STRUCT->score[i] = 0; @@ -331,32 +331,32 @@ void BattleAI_SetupAIData(void) // Choose proper trainer ai scripts. // Fire Red, why all the returns?!? - if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) // _080C6E84 + if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) { AI_THINKING_STRUCT->aiFlags = AI_SCRIPT_SAFARI; return; } - else if (gBattleTypeFlags & BATTLE_TYPE_ROAMER) // _080C6EAC + else if (gBattleTypeFlags & BATTLE_TYPE_ROAMER) { AI_THINKING_STRUCT->aiFlags = AI_SCRIPT_ROAMING; return; } - else if (!(gBattleTypeFlags & (0x80900)) && (gTrainerBattleOpponent_A != 0x400)) // _080C6ECC + else if (!(gBattleTypeFlags & (BATTLE_TYPE_TRAINER_TOWER | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER)) && (gTrainerBattleOpponent_A != SECRET_BASE_OPPONENT)) { - if (gBattleTypeFlags & (0x80 << 10)) + if (gBattleTypeFlags & BATTLE_TYPE_PALACE) { - AI_THINKING_STRUCT->aiFlags = 1; + AI_THINKING_STRUCT->aiFlags = AI_SCRIPT_CHECK_BAD_MOVE; return; } - else if (gBattleTypeFlags & (0x80 << 11)) + else if (gBattleTypeFlags & BATTLE_TYPE_ARENA) { - AI_THINKING_STRUCT->aiFlags = 7; + AI_THINKING_STRUCT->aiFlags = (AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY); return; } } else { - AI_THINKING_STRUCT->aiFlags = 7; + AI_THINKING_STRUCT->aiFlags = (AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY); return; } AI_THINKING_STRUCT->aiFlags = gTrainers[gTrainerBattleOpponent_A].aiFlags; @@ -383,10 +383,10 @@ u8 BattleAI_ChooseMoveOrAction(void) } // special flee or watch cases for safari. - if (AI_THINKING_STRUCT->aiAction & (AI_ACTION_FLEE)) // flee - return 4; - if (AI_THINKING_STRUCT->aiAction & (AI_ACTION_WATCH)) // watch - return 5; + if (AI_THINKING_STRUCT->aiAction & AI_ACTION_FLEE) + return AI_CHOICE_FLEE; + if (AI_THINKING_STRUCT->aiAction & AI_ACTION_WATCH) + return AI_CHOICE_WATCH; numOfBestMoves = 1; currentMoveArray[0] = AI_THINKING_STRUCT->score[0]; @@ -416,13 +416,14 @@ static void BattleAI_DoAIProcessing(void) { switch (AI_THINKING_STRUCT->aiState) { - case AIState_DoNotProcess: //Needed to match. + case AIState_DoNotProcess: // Needed to match. break; case AIState_SettingUp: - sAIScriptPtr = gBattleAI_ScriptsTable[AI_THINKING_STRUCT->aiLogicId]; // set the AI ptr. + sAIScriptPtr = gBattleAI_ScriptsTable[AI_THINKING_STRUCT->aiLogicId]; + if (gBattleMons[gBattlerAttacker].pp[AI_THINKING_STRUCT->movesetIndex] == 0) { - AI_THINKING_STRUCT->moveConsidered = 0; // don't consider a move you have 0 PP for, idiot. + AI_THINKING_STRUCT->moveConsidered = 0; // Don't consider moves with no PP } else { @@ -432,15 +433,18 @@ static void BattleAI_DoAIProcessing(void) break; case AIState_Processing: if (AI_THINKING_STRUCT->moveConsidered != 0) - sBattleAICmdTable[*sAIScriptPtr](); // run AI command. + { + sBattleAICmdTable[*sAIScriptPtr](); // Run AI command. + } else { - AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] = 0; // definitely do not consider any move that has 0 PP. + AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] = 0; AI_THINKING_STRUCT->aiAction |= AI_ACTION_DONE; } if (AI_THINKING_STRUCT->aiAction & AI_ACTION_DONE) { AI_THINKING_STRUCT->movesetIndex++; + if (AI_THINKING_STRUCT->movesetIndex < MAX_MON_MOVES && (AI_THINKING_STRUCT->aiAction & AI_ACTION_DO_NOT_ATTACK) == 0) AI_THINKING_STRUCT->aiState = AIState_SettingUp; // as long as their are more moves to process, keep setting this to setup state. else @@ -479,16 +483,16 @@ static void ClearBattlerMoveHistory(u8 battlerId) void RecordAbilityBattle(u8 battlerId, u8 abilityId) { if (GetBattlerSide(battlerId) == 0) - BATTLE_HISTORY->abilities[GetBattlerPosition(battlerId) & 1] = abilityId; + BATTLE_HISTORY->abilities[GET_BATTLER_SIDE(battlerId)] = abilityId; } void RecordItemEffectBattle(u8 battlerId, u8 itemEffect) { if (GetBattlerSide(battlerId) == 0) - BATTLE_HISTORY->itemEffects[GetBattlerPosition(battlerId) & 1] = itemEffect; + BATTLE_HISTORY->itemEffects[GET_BATTLER_SIDE(battlerId)] = itemEffect; } -static void BattleAICmd_if_random_less_than(void) +static void Cmd_if_random_less_than(void) { if (Random() % 256 < sAIScriptPtr[1]) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); @@ -496,7 +500,7 @@ static void BattleAICmd_if_random_less_than(void) sAIScriptPtr += 6; } -static void BattleAICmd_if_random_greater_than(void) +static void Cmd_if_random_greater_than(void) { if (Random() % 256 > sAIScriptPtr[1]) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); @@ -504,7 +508,7 @@ static void BattleAICmd_if_random_greater_than(void) sAIScriptPtr += 6; } -static void BattleAICmd_if_random_equal(void) +static void Cmd_if_random_equal(void) { if (Random() % 256 == sAIScriptPtr[1]) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); @@ -512,7 +516,7 @@ static void BattleAICmd_if_random_equal(void) sAIScriptPtr += 6; } -static void BattleAICmd_if_random_not_equal(void) +static void Cmd_if_random_not_equal(void) { if (Random() % 256 != sAIScriptPtr[1]) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); @@ -520,7 +524,7 @@ static void BattleAICmd_if_random_not_equal(void) sAIScriptPtr += 6; } -static void BattleAICmd_score(void) +static void Cmd_score(void) { AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] += sAIScriptPtr[1]; // add the result to the array of the move consider's score. @@ -530,218 +534,213 @@ static void BattleAICmd_score(void) sAIScriptPtr += 2; // AI return. } -enum { - TARGET, - USER -}; - -static void BattleAICmd_if_hp_less_than(void) +static void Cmd_if_hp_less_than(void) { - u16 index; + u16 battlerId; - if (sAIScriptPtr[1] == USER) - index = gBattlerAttacker; + if (sAIScriptPtr[1] == AI_USER) + battlerId = gBattlerAttacker; else - index = gBattlerTarget; + battlerId = gBattlerTarget; - if ((u32)(100 * gBattleMons[index].hp / gBattleMons[index].maxHP) < sAIScriptPtr[2]) + if ((u32)(100 * gBattleMons[battlerId].hp / gBattleMons[battlerId].maxHP) < sAIScriptPtr[2]) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 3); else sAIScriptPtr += 7; } -static void BattleAICmd_if_hp_more_than(void) +static void Cmd_if_hp_more_than(void) { - u16 index; + u16 battlerId; - if (sAIScriptPtr[1] == USER) - index = gBattlerAttacker; + if (sAIScriptPtr[1] == AI_USER) + battlerId = gBattlerAttacker; else - index = gBattlerTarget; + battlerId = gBattlerTarget; - if ((u32)(100 * gBattleMons[index].hp / gBattleMons[index].maxHP) > sAIScriptPtr[2]) + if ((u32)(100 * gBattleMons[battlerId].hp / gBattleMons[battlerId].maxHP) > sAIScriptPtr[2]) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 3); else sAIScriptPtr += 7; } -static void BattleAICmd_if_hp_equal(void) +static void Cmd_if_hp_equal(void) { - u16 index; + u16 battlerId; - if (sAIScriptPtr[1] == USER) - index = gBattlerAttacker; + if (sAIScriptPtr[1] == AI_USER) + battlerId = gBattlerAttacker; else - index = gBattlerTarget; + battlerId = gBattlerTarget; - if ((u32)(100 * gBattleMons[index].hp / gBattleMons[index].maxHP) == sAIScriptPtr[2]) + if ((u32)(100 * gBattleMons[battlerId].hp / gBattleMons[battlerId].maxHP) == sAIScriptPtr[2]) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 3); else sAIScriptPtr += 7; } -static void BattleAICmd_if_hp_not_equal(void) +static void Cmd_if_hp_not_equal(void) { - u16 index; + u16 battlerId; - if (sAIScriptPtr[1] == USER) - index = gBattlerAttacker; + if (sAIScriptPtr[1] == AI_USER) + battlerId = gBattlerAttacker; else - index = gBattlerTarget; + battlerId = gBattlerTarget; - if ((u32)(100 * gBattleMons[index].hp / gBattleMons[index].maxHP) != sAIScriptPtr[2]) + if ((u32)(100 * gBattleMons[battlerId].hp / gBattleMons[battlerId].maxHP) != sAIScriptPtr[2]) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 3); else sAIScriptPtr += 7; } -static void BattleAICmd_if_status(void) +static void Cmd_if_status(void) { - u16 index; - u32 arg; + u16 battlerId; + u32 status; - if (sAIScriptPtr[1] == USER) - index = gBattlerAttacker; + if (sAIScriptPtr[1] == AI_USER) + battlerId = gBattlerAttacker; else - index = gBattlerTarget; + battlerId = gBattlerTarget; - arg = T1_READ_32(sAIScriptPtr + 2); + status = T1_READ_32(sAIScriptPtr + 2); - if ((gBattleMons[index].status1 & arg) != 0) + if (gBattleMons[battlerId].status1 & status) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 6); else sAIScriptPtr += 10; } -static void BattleAICmd_if_not_status(void) +static void Cmd_if_not_status(void) { - u16 index; - u32 arg; + u16 battlerId; + u32 status; - if (sAIScriptPtr[1] == USER) - index = gBattlerAttacker; + if (sAIScriptPtr[1] == AI_USER) + battlerId = gBattlerAttacker; else - index = gBattlerTarget; + battlerId = gBattlerTarget; - arg = T1_READ_32(sAIScriptPtr + 2); + status = T1_READ_32(sAIScriptPtr + 2); - if ((gBattleMons[index].status1 & arg) == 0) + if (!(gBattleMons[battlerId].status1 & status)) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 6); else sAIScriptPtr += 10; } -static void BattleAICmd_if_status2(void) +static void Cmd_if_status2(void) { - u16 index; - u32 arg; + u16 battlerId; + u32 status; - if (sAIScriptPtr[1] == USER) - index = gBattlerAttacker; + if (sAIScriptPtr[1] == AI_USER) + battlerId = gBattlerAttacker; else - index = gBattlerTarget; + battlerId = gBattlerTarget; - arg = T1_READ_32(sAIScriptPtr + 2); + status = T1_READ_32(sAIScriptPtr + 2); - if ((gBattleMons[index].status2 & arg) != 0) + if ((gBattleMons[battlerId].status2 & status)) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 6); else sAIScriptPtr += 10; } -static void BattleAICmd_if_not_status2(void) +static void Cmd_if_not_status2(void) { - u16 index; - u32 arg; + u16 battlerId; + u32 status; - if (sAIScriptPtr[1] == USER) - index = gBattlerAttacker; + if (sAIScriptPtr[1] == AI_USER) + battlerId = gBattlerAttacker; else - index = gBattlerTarget; + battlerId = gBattlerTarget; - arg = T1_READ_32(sAIScriptPtr + 2); + status = T1_READ_32(sAIScriptPtr + 2); - if ((gBattleMons[index].status2 & arg) == 0) + if (!(gBattleMons[battlerId].status2 & status)) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 6); else sAIScriptPtr += 10; } -static void BattleAICmd_if_status3(void) +static void Cmd_if_status3(void) { - u16 index; - u32 arg; + u16 battlerId; + u32 status; - if (sAIScriptPtr[1] == USER) - index = gBattlerAttacker; + if (sAIScriptPtr[1] == AI_USER) + battlerId = gBattlerAttacker; else - index = gBattlerTarget; + battlerId = gBattlerTarget; - arg = T1_READ_32(sAIScriptPtr + 2); + status = T1_READ_32(sAIScriptPtr + 2); - if ((gStatuses3[index] & arg) != 0) + if (gStatuses3[battlerId] & status) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 6); else sAIScriptPtr += 10; } -static void BattleAICmd_if_not_status3(void) +static void Cmd_if_not_status3(void) { - u16 index; - u32 arg; + u16 battlerId; + u32 status; - if (sAIScriptPtr[1] == USER) - index = gBattlerAttacker; + if (sAIScriptPtr[1] == AI_USER) + battlerId = gBattlerAttacker; else - index = gBattlerTarget; + battlerId = gBattlerTarget; - arg = T1_READ_32(sAIScriptPtr + 2); + status = T1_READ_32(sAIScriptPtr + 2); - if ((gStatuses3[index] & arg) == 0) + if (!(gStatuses3[battlerId] & status)) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 6); else sAIScriptPtr += 10; } -static void BattleAICmd_if_status4(void) +static void Cmd_if_side_affecting(void) { - u16 index; - u32 arg1, arg2; + u16 battlerId; + u32 side, status; - if (sAIScriptPtr[1] == USER) - index = gBattlerAttacker; + if (sAIScriptPtr[1] == AI_USER) + battlerId = gBattlerAttacker; else - index = gBattlerTarget; + battlerId = gBattlerTarget; - arg1 = GetBattlerPosition(index) & 1; - arg2 = T1_READ_32(sAIScriptPtr + 2); + side = GET_BATTLER_SIDE(battlerId); + status = T1_READ_32(sAIScriptPtr + 2); - if ((gSideStatuses[arg1] & arg2) != 0) + if (gSideStatuses[side] & status) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 6); else sAIScriptPtr += 10; } -static void BattleAICmd_if_not_status4(void) +static void Cmd_if_not_side_affecting(void) { - u16 index; - u32 arg1, arg2; + u16 battlerId; + u32 side, status; - if (sAIScriptPtr[1] == USER) - index = gBattlerAttacker; + if (sAIScriptPtr[1] == AI_USER) + battlerId = gBattlerAttacker; else - index = gBattlerTarget; + battlerId = gBattlerTarget; - arg1 = GetBattlerPosition(index) & 1; - arg2 = T1_READ_32(sAIScriptPtr + 2); + side = GET_BATTLER_SIDE(battlerId); + status = T1_READ_32(sAIScriptPtr + 2); - if ((gSideStatuses[arg1] & arg2) == 0) + if (!(gSideStatuses[side] & status)) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 6); else sAIScriptPtr += 10; } -static void BattleAICmd_if_less_than(void) +static void Cmd_if_less_than(void) { if (AI_THINKING_STRUCT->funcResult < sAIScriptPtr[1]) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); @@ -749,7 +748,7 @@ static void BattleAICmd_if_less_than(void) sAIScriptPtr += 6; } -static void BattleAICmd_if_more_than(void) +static void Cmd_if_more_than(void) { if (AI_THINKING_STRUCT->funcResult > sAIScriptPtr[1]) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); @@ -757,7 +756,7 @@ static void BattleAICmd_if_more_than(void) sAIScriptPtr += 6; } -static void BattleAICmd_if_equal(void) +static void Cmd_if_equal(void) { if (AI_THINKING_STRUCT->funcResult == sAIScriptPtr[1]) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); @@ -765,7 +764,7 @@ static void BattleAICmd_if_equal(void) sAIScriptPtr += 6; } -static void BattleAICmd_if_not_equal(void) +static void Cmd_if_not_equal(void) { if (AI_THINKING_STRUCT->funcResult != sAIScriptPtr[1]) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); @@ -773,47 +772,47 @@ static void BattleAICmd_if_not_equal(void) sAIScriptPtr += 6; } -static void BattleAICmd_if_less_than_32(void) +static void Cmd_if_less_than_ptr(void) { - u8 *temp = T1_READ_PTR(sAIScriptPtr + 1); + const u8 *value = T1_READ_PTR(sAIScriptPtr + 1); - if (AI_THINKING_STRUCT->funcResult < *temp) + if (AI_THINKING_STRUCT->funcResult < *value) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 5); else sAIScriptPtr += 9; } -static void BattleAICmd_if_more_than_32(void) +static void Cmd_if_more_than_ptr(void) { - u8 *temp = T1_READ_PTR(sAIScriptPtr + 1); + const u8 *value = T1_READ_PTR(sAIScriptPtr + 1); - if (AI_THINKING_STRUCT->funcResult > *temp) + if (AI_THINKING_STRUCT->funcResult > *value) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 5); else sAIScriptPtr += 9; } -static void BattleAICmd_if_equal_32(void) +static void Cmd_if_equal_ptr(void) { - u8 *temp = T1_READ_PTR(sAIScriptPtr + 1); + const u8 *value = T1_READ_PTR(sAIScriptPtr + 1); - if (AI_THINKING_STRUCT->funcResult == *temp) + if (AI_THINKING_STRUCT->funcResult == *value) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 5); else sAIScriptPtr += 9; } -static void BattleAICmd_if_not_equal_32(void) +static void Cmd_if_not_equal_ptr(void) { - u8 *temp = T1_READ_PTR(sAIScriptPtr + 1); + const u8 *value = T1_READ_PTR(sAIScriptPtr + 1); - if (AI_THINKING_STRUCT->funcResult != *temp) + if (AI_THINKING_STRUCT->funcResult != *value) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 5); else sAIScriptPtr += 9; } -static void BattleAICmd_if_move(void) +static void Cmd_if_move(void) { u16 move = T1_READ_16(sAIScriptPtr + 1); @@ -823,7 +822,7 @@ static void BattleAICmd_if_move(void) sAIScriptPtr += 7; } -static void BattleAICmd_if_not_move(void) +static void Cmd_if_not_move(void) { u16 move = T1_READ_16(sAIScriptPtr + 1); @@ -833,9 +832,9 @@ static void BattleAICmd_if_not_move(void) sAIScriptPtr += 7; } -static void BattleAICmd_if_in_bytes(void) +static void Cmd_if_in_bytes(void) { - u8 *ptr = T1_READ_PTR(sAIScriptPtr + 1); + const u8 *ptr = T1_READ_PTR(sAIScriptPtr + 1); while (*ptr != 0xFF) { @@ -849,9 +848,9 @@ static void BattleAICmd_if_in_bytes(void) sAIScriptPtr += 9; } -static void BattleAICmd_if_not_in_bytes(void) +static void Cmd_if_not_in_bytes(void) { - u8 *ptr = T1_READ_PTR(sAIScriptPtr + 1); + const u8 *ptr = T1_READ_PTR(sAIScriptPtr + 1); while (*ptr != 0xFF) { @@ -865,9 +864,9 @@ static void BattleAICmd_if_not_in_bytes(void) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 5); } -static void BattleAICmd_if_in_words(void) +static void Cmd_if_in_hwords(void) { - u16 *ptr = (u16 *)T1_READ_PTR(sAIScriptPtr + 1); + const u16 *ptr = (const u16 *)T1_READ_PTR(sAIScriptPtr + 1); while (*ptr != 0xFFFF) { @@ -881,9 +880,9 @@ static void BattleAICmd_if_in_words(void) sAIScriptPtr += 9; } -static void BattleAICmd_if_not_in_words(void) +static void Cmd_if_not_in_hwords(void) { - u16 *ptr = (u16 *)T1_READ_PTR(sAIScriptPtr + 1); + const u16 *ptr = (const u16 *)T1_READ_PTR(sAIScriptPtr + 1); while (*ptr != 0xFFFF) { @@ -897,7 +896,7 @@ static void BattleAICmd_if_not_in_words(void) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 5); } -static void BattleAICmd_if_user_can_damage(void) +static void Cmd_if_user_has_attacking_move(void) { s32 i; @@ -907,13 +906,14 @@ static void BattleAICmd_if_user_can_damage(void) && gBattleMoves[gBattleMons[gBattlerAttacker].moves[i]].power != 0) break; } + if (i == MAX_MON_MOVES) sAIScriptPtr += 5; else sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 1); } -static void BattleAICmd_if_user_cant_damage(void) +static void Cmd_if_user_has_no_attacking_moves(void) { s32 i; @@ -923,51 +923,52 @@ static void BattleAICmd_if_user_cant_damage(void) && gBattleMoves[gBattleMons[gBattlerAttacker].moves[i]].power != 0) break; } + if (i != MAX_MON_MOVES) sAIScriptPtr += 5; else sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 1); } -static void BattleAICmd_get_turn_count(void) +static void Cmd_get_turn_count(void) { AI_THINKING_STRUCT->funcResult = gBattleResults.battleTurnCounter; sAIScriptPtr += 1; } -static void BattleAICmd_get_type(void) +static void Cmd_get_type(void) { switch (sAIScriptPtr[1]) { - case 1: // player primary type + case AI_TYPE1_USER: AI_THINKING_STRUCT->funcResult = gBattleMons[gBattlerAttacker].type1; break; - case 0: // enemy primary type + case AI_TYPE1_TARGET: AI_THINKING_STRUCT->funcResult = gBattleMons[gBattlerTarget].type1; break; - case 3: // player secondary type + case AI_TYPE2_USER: AI_THINKING_STRUCT->funcResult = gBattleMons[gBattlerAttacker].type2; break; - case 2: // enemy secondary type + case AI_TYPE2_TARGET: AI_THINKING_STRUCT->funcResult = gBattleMons[gBattlerTarget].type2; break; - case 4: // type of move being pointed to + case AI_TYPE_MOVE: AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->moveConsidered].type; break; } sAIScriptPtr += 2; } -static void BattleAICmd_get_move_power(void) +static void Cmd_get_considered_move_power(void) { AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->moveConsidered].power; sAIScriptPtr += 1; } -static void BattleAICmd_is_most_powerful_move(void) +static void Cmd_get_how_powerful_move_is(void) { s32 i, checkedMove; - s32 moveDmgs[4]; + s32 moveDmgs[MAX_MON_MOVES]; for (i = 0; sDiscouragedPowerfulMoveEffects[i] != 0xFFFF; i++) { @@ -1028,9 +1029,9 @@ static void BattleAICmd_is_most_powerful_move(void) sAIScriptPtr++; } -static void BattleAICmd_get_move(void) +static void Cmd_get_last_used_battler_move(void) { - if (sAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == AI_USER) AI_THINKING_STRUCT->funcResult = gLastMoves[gBattlerAttacker]; else AI_THINKING_STRUCT->funcResult = gLastMoves[gBattlerTarget]; @@ -1038,7 +1039,7 @@ static void BattleAICmd_get_move(void) sAIScriptPtr += 2; } -static void BattleAICmd_if_arg_equal(void) +static void Cmd_if_equal_(void) // Same as if_equal. { if (sAIScriptPtr[1] == AI_THINKING_STRUCT->funcResult) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); @@ -1046,7 +1047,7 @@ static void BattleAICmd_if_arg_equal(void) sAIScriptPtr += 6; } -static void BattleAICmd_if_arg_not_equal(void) +static void Cmd_if_not_equal_(void) // Same as if_not_equal. { if (sAIScriptPtr[1] != AI_THINKING_STRUCT->funcResult) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); @@ -1054,7 +1055,7 @@ static void BattleAICmd_if_arg_not_equal(void) sAIScriptPtr += 6; } -static void BattleAICmd_if_would_go_first(void) +static void Cmd_if_would_go_first(void) { if (GetWhoStrikesFirst(gBattlerAttacker, gBattlerTarget, TRUE) == sAIScriptPtr[1]) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); @@ -1062,7 +1063,7 @@ static void BattleAICmd_if_would_go_first(void) sAIScriptPtr += 6; } -static void BattleAICmd_if_would_not_go_first(void) +static void Cmd_if_would_not_go_first(void) { if (GetWhoStrikesFirst(gBattlerAttacker, gBattlerTarget, TRUE) != sAIScriptPtr[1]) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); @@ -1070,49 +1071,49 @@ static void BattleAICmd_if_would_not_go_first(void) sAIScriptPtr += 6; } -static void BattleAICmd_nullsub_2A(void) +static void Cmd_nullsub_2A(void) { } -static void BattleAICmd_nullsub_2B(void) +static void Cmd_nullsub_2B(void) { } -static void BattleAICmd_count_alive_pokemon(void) +static void Cmd_count_alive_pokemon(void) { + u8 battlerId; + u8 battlerOnField1, battlerOnField2; struct Pokemon *party; - int i; - u8 index; - u8 var, var2; + s32 i; AI_THINKING_STRUCT->funcResult = 0; - if (sAIScriptPtr[1] == USER) - index = gBattlerAttacker; + if (sAIScriptPtr[1] == AI_USER) + battlerId = gBattlerAttacker; else - index = gBattlerTarget; + battlerId = gBattlerTarget; - if (GetBattlerSide(index) == 0) + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) party = gPlayerParty; else party = gEnemyParty; if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) { - u32 status; - var = gBattlerPartyIndexes[index]; - status = GetBattlerPosition(index) ^ 2; - var2 = gBattlerPartyIndexes[GetBattlerAtPosition(status)]; + u32 position; + battlerOnField1 = gBattlerPartyIndexes[battlerId]; + position = GetBattlerPosition(battlerId) ^ BIT_FLANK; + battlerOnField2 = gBattlerPartyIndexes[GetBattlerAtPosition(position)]; } - else + else // In singles there's only one battlerId by side. { - var = gBattlerPartyIndexes[index]; - var2 = gBattlerPartyIndexes[index]; + battlerOnField1 = gBattlerPartyIndexes[battlerId]; + battlerOnField2 = gBattlerPartyIndexes[battlerId]; } - for (i = 0; i < 6; i++) + for (i = 0; i < PARTY_SIZE; i++) { - if (i != var && i != var2 + if (i != battlerOnField1 && i != battlerOnField2 && GetMonData(&party[i], MON_DATA_HP) != 0 && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG) @@ -1124,30 +1125,30 @@ static void BattleAICmd_count_alive_pokemon(void) sAIScriptPtr += 2; } -static void BattleAICmd_get_considered_move(void) +static void Cmd_get_considered_move(void) { AI_THINKING_STRUCT->funcResult = AI_THINKING_STRUCT->moveConsidered; sAIScriptPtr += 1; } -static void BattleAICmd_get_considered_move_effect(void) +static void Cmd_get_considered_move_effect(void) { AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect; sAIScriptPtr += 1; } -static void BattleAICmd_get_ability(void) +static void Cmd_get_ability(void) { - u8 index; + u8 battlerId; - if (sAIScriptPtr[1] == USER) - index = gBattlerAttacker; + if (sAIScriptPtr[1] == AI_USER) + battlerId = gBattlerAttacker; else - index = gBattlerTarget; + battlerId = gBattlerTarget; - if (GetBattlerSide(index) == TARGET) + if (GetBattlerSide(battlerId) == AI_TARGET) { - u16 side = GetBattlerPosition(index) & 1; + u16 side = GET_BATTLER_SIDE(battlerId); if (BATTLE_HISTORY->abilities[side] != 0) { @@ -1157,48 +1158,46 @@ static void BattleAICmd_get_ability(void) } // abilities that prevent fleeing. - if (gBattleMons[index].ability == ABILITY_SHADOW_TAG - || gBattleMons[index].ability == ABILITY_MAGNET_PULL - || gBattleMons[index].ability == ABILITY_ARENA_TRAP) + if (gBattleMons[battlerId].ability == ABILITY_SHADOW_TAG + || gBattleMons[battlerId].ability == ABILITY_MAGNET_PULL + || gBattleMons[battlerId].ability == ABILITY_ARENA_TRAP) { - AI_THINKING_STRUCT->funcResult = gBattleMons[index].ability; + AI_THINKING_STRUCT->funcResult = gBattleMons[battlerId].ability; sAIScriptPtr += 2; return; } - if (gBaseStats[gBattleMons[index].species].abilities[0] != ABILITY_NONE) + if (gBaseStats[gBattleMons[battlerId].species].abilities[0] != ABILITY_NONE) { - if (gBaseStats[gBattleMons[index].species].abilities[1] != ABILITY_NONE) + if (gBaseStats[gBattleMons[battlerId].species].abilities[1] != ABILITY_NONE) { // AI has no knowledge of opponent, so it guesses which ability. if (Random() % 2) - { - AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[index].species].abilities[0]; - } + AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].abilities[0]; else - { - AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[index].species].abilities[1]; - } + AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].abilities[1]; } else { - AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[index].species].abilities[0]; // it's definitely ability 1. + AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].abilities[0]; } } else { - AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[index].species].abilities[1]; // AI cant actually reach this part since every mon has at least 1 ability. + // AI can't actually reach this part since no pokemon has ability 2 and no ability 1. + AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].abilities[1]; } } else { // The AI knows its own ability. - AI_THINKING_STRUCT->funcResult = gBattleMons[index].ability; + AI_THINKING_STRUCT->funcResult = gBattleMons[battlerId].ability; } + sAIScriptPtr += 2; } -static void BattleAICmd_get_highest_possible_damage(void) +static void Cmd_get_highest_type_effectiveness(void) { s32 i; u8 *dynamicMoveType; @@ -1211,12 +1210,12 @@ static void BattleAICmd_get_highest_possible_damage(void) gCritMultiplier = 1; AI_THINKING_STRUCT->funcResult = 0; - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_MON_MOVES; i++) { gBattleMoveDamage = 40; gCurrentMove = gBattleMons[gBattlerAttacker].moves[i]; - if (gCurrentMove != 0) + if (gCurrentMove != MOVE_NONE) { TypeCalc(gCurrentMove, gBattlerAttacker, gBattlerTarget); @@ -1240,7 +1239,7 @@ static void BattleAICmd_get_highest_possible_damage(void) sAIScriptPtr += 1; } -static void BattleAICmd_if_type_effectiveness(void) +static void Cmd_if_type_effectiveness(void) { u8 damageVar; @@ -1276,22 +1275,24 @@ static void BattleAICmd_if_type_effectiveness(void) sAIScriptPtr += 6; } -static void BattleAICmd_nullsub_32(void) +static void Cmd_nullsub_32(void) { } -static void BattleAICmd_nullsub_33(void) +static void Cmd_nullsub_33(void) { } -static void BattleAICmd_if_status_in_party(void) +static void Cmd_if_status_in_party(void) { struct Pokemon *party; struct Pokemon *partyPtr; int i; u32 statusToCompareTo; + // u8 battlerId - // for whatever reason, game freak put the party pointer into 2 variables instead of 1. it's possible at some point the switch encompassed the whole function and used each respective variable creating largely duplicate code. + // for whatever reason, game freak put the party pointer into 2 variables instead of 1 + // it's possible at some point the switch encompassed the whole function and used each respective variable creating largely duplicate code. switch (sAIScriptPtr[1]) { case 1: @@ -1302,9 +1303,23 @@ static void BattleAICmd_if_status_in_party(void) break; } + /* Emerald's fixed version below + switch (sAIScriptPtr[1]) + { + case AI_USER: + battlerId = gBattlerAttacker; + break; + default: + battlerId = gBattlerTarget; + break; + } + + party = (GetBattlerSide(battlerId) == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; + */ + statusToCompareTo = T1_READ_32(sAIScriptPtr + 2); - for (i = 0; i < 6; i++) + for (i = 0; i < PARTY_SIZE; i++) { u16 species = GetMonData(&party[i], MON_DATA_SPECIES); u16 hp = GetMonData(&party[i], MON_DATA_HP); @@ -1312,7 +1327,7 @@ static void BattleAICmd_if_status_in_party(void) if (species != SPECIES_NONE && species != SPECIES_EGG && hp != 0 && status == statusToCompareTo) { - sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 6); // WHAT. why is this being merged into the above switch + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 6); return; } } @@ -1321,12 +1336,13 @@ static void BattleAICmd_if_status_in_party(void) } // bugged, doesnt return properly. also unused -static void BattleAICmd_if_status_not_in_party(void) +static void Cmd_if_status_not_in_party(void) { struct Pokemon *party; struct Pokemon *partyPtr; int i; u32 statusToCompareTo; + //u8 battlerId switch (sAIScriptPtr[1]) { @@ -1340,7 +1356,7 @@ static void BattleAICmd_if_status_not_in_party(void) statusToCompareTo = T1_READ_32(sAIScriptPtr + 2); - for (i = 0; i < 6; i++) + for (i = 0; i < PARTY_SIZE; i++) { u16 species = GetMonData(&party[i], MON_DATA_SPECIES); u16 hp = GetMonData(&party[i], MON_DATA_HP); @@ -1363,7 +1379,7 @@ enum extern u16 gBattleWeather; -static void BattleAICmd_get_weather(void) +static void Cmd_get_weather(void) { if (gBattleWeather & WEATHER_RAIN_ANY) AI_THINKING_STRUCT->funcResult = WEATHER_TYPE_RAIN; @@ -1377,7 +1393,7 @@ static void BattleAICmd_get_weather(void) sAIScriptPtr += 1; } -static void BattleAICmd_if_effect(void) +static void Cmd_if_effect(void) { if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect == sAIScriptPtr[1]) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); @@ -1385,7 +1401,7 @@ static void BattleAICmd_if_effect(void) sAIScriptPtr += 6; } -static void BattleAICmd_if_not_effect(void) +static void Cmd_if_not_effect(void) { if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect != sAIScriptPtr[1]) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); @@ -1393,67 +1409,67 @@ static void BattleAICmd_if_not_effect(void) sAIScriptPtr += 6; } -static void BattleAICmd_if_stat_level_less_than(void) +static void Cmd_if_stat_level_less_than(void) { - u32 party; + u32 battlerId; - if (sAIScriptPtr[1] == USER) - party = gBattlerAttacker; + if (sAIScriptPtr[1] == AI_USER) + battlerId = gBattlerAttacker; else - party = gBattlerTarget; + battlerId = gBattlerTarget; - if (gBattleMons[party].statStages[sAIScriptPtr[2]] < sAIScriptPtr[3]) + if (gBattleMons[battlerId].statStages[sAIScriptPtr[2]] < sAIScriptPtr[3]) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 4); else sAIScriptPtr += 8; } -static void BattleAICmd_if_stat_level_more_than(void) +static void Cmd_if_stat_level_more_than(void) { - u32 party; + u32 battlerId; - if (sAIScriptPtr[1] == USER) - party = gBattlerAttacker; + if (sAIScriptPtr[1] == AI_USER) + battlerId = gBattlerAttacker; else - party = gBattlerTarget; + battlerId = gBattlerTarget; - if (gBattleMons[party].statStages[sAIScriptPtr[2]] > sAIScriptPtr[3]) + if (gBattleMons[battlerId].statStages[sAIScriptPtr[2]] > sAIScriptPtr[3]) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 4); else sAIScriptPtr += 8; } -static void BattleAICmd_if_stat_level_equal(void) +static void Cmd_if_stat_level_equal(void) { - u32 party; + u32 battlerId; - if (sAIScriptPtr[1] == USER) - party = gBattlerAttacker; + if (sAIScriptPtr[1] == AI_USER) + battlerId = gBattlerAttacker; else - party = gBattlerTarget; + battlerId = gBattlerTarget; - if (gBattleMons[party].statStages[sAIScriptPtr[2]] == sAIScriptPtr[3]) + if (gBattleMons[battlerId].statStages[sAIScriptPtr[2]] == sAIScriptPtr[3]) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 4); else sAIScriptPtr += 8; } -static void BattleAICmd_if_stat_level_not_equal(void) +static void Cmd_if_stat_level_not_equal(void) { - u32 party; + u32 battlerId; - if (sAIScriptPtr[1] == USER) - party = gBattlerAttacker; + if (sAIScriptPtr[1] == AI_USER) + battlerId = gBattlerAttacker; else - party = gBattlerTarget; + battlerId = gBattlerTarget; - if (gBattleMons[party].statStages[sAIScriptPtr[2]] != sAIScriptPtr[3]) + if (gBattleMons[battlerId].statStages[sAIScriptPtr[2]] != sAIScriptPtr[3]) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 4); else sAIScriptPtr += 8; } -static void BattleAICmd_if_can_faint(void) +static void Cmd_if_can_faint(void) { if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].power < 2) { @@ -1482,7 +1498,7 @@ static void BattleAICmd_if_can_faint(void) sAIScriptPtr += 5; } -static void BattleAICmd_if_cant_faint(void) +static void Cmd_if_cant_faint(void) { if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].power < 2) { @@ -1509,18 +1525,18 @@ static void BattleAICmd_if_cant_faint(void) sAIScriptPtr += 5; } -static void BattleAICmd_if_has_move(void) +static void Cmd_if_has_move(void) { int i; - u16 *temp_ptr = (u16 *)(sAIScriptPtr + 2); + const u16 *movePtr = (u16 *)(sAIScriptPtr + 2); switch (sAIScriptPtr[1]) { - case 1: - case 3: + case AI_USER: + case AI_USER_PARTNER: for (i = 0; i < MAX_MON_MOVES; i++) { - if (gBattleMons[gBattlerAttacker].moves[i] == *temp_ptr) + if (gBattleMons[gBattlerAttacker].moves[i] == *movePtr) break; } if (i == MAX_MON_MOVES) @@ -1528,33 +1544,33 @@ static void BattleAICmd_if_has_move(void) else sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 4); break; - case 0: - case 2: + case AI_TARGET: + case AI_TARGET_PARTNER: for (i = 0; i < 8; i++) { - if (BATTLE_HISTORY->usedMoves[gBattlerTarget >> 1][i] == *temp_ptr) + if (BATTLE_HISTORY->usedMoves[gBattlerTarget >> 1][i] == *movePtr) break; } if (i == 8) sAIScriptPtr += 8; - else + else sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 4); break; } } -static void BattleAICmd_if_dont_have_move(void) +static void Cmd_if_doesnt_have_move(void) { int i; - u16 *temp_ptr = (u16 *)(sAIScriptPtr + 2); + const u16 *movePtr = (u16 *)(sAIScriptPtr + 2); switch (sAIScriptPtr[1]) { - case 1: - case 3: + case AI_USER: + case AI_USER_PARTNER: for (i = 0; i < MAX_MON_MOVES; i++) { - if (gBattleMons[gBattlerAttacker].moves[i] == *temp_ptr) + if (gBattleMons[gBattlerAttacker].moves[i] == *movePtr) break; } if (i != MAX_MON_MOVES) @@ -1562,11 +1578,11 @@ static void BattleAICmd_if_dont_have_move(void) else sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 4); break; - case 0: - case 2: + case AI_TARGET: + case AI_TARGET_PARTNER: for (i = 0; i < 8; i++) { - if (BATTLE_HISTORY->usedMoves[gBattlerTarget >> 1][i] == *temp_ptr) + if (BATTLE_HISTORY->usedMoves[gBattlerTarget >> 1][i] == *movePtr) break; } if (i != 8) @@ -1577,14 +1593,14 @@ static void BattleAICmd_if_dont_have_move(void) } } -static void BattleAICmd_if_move_effect(void) +static void Cmd_if_has_move_with_effect(void) { int i; switch (sAIScriptPtr[1]) { - case 1: - case 3: + case AI_USER: + case AI_USER_PARTNER: for (i = 0; i < MAX_MON_MOVES; i++) { if (gBattleMons[gBattlerAttacker].moves[i] != 0 && gBattleMoves[gBattleMons[gBattlerAttacker].moves[i]].effect == sAIScriptPtr[2]) @@ -1595,8 +1611,8 @@ static void BattleAICmd_if_move_effect(void) else sAIScriptPtr += 7; break; - case 0: - case 2: + case AI_TARGET: + case AI_TARGET_PARTNER: for (i = 0; i < 8; i++) { if (gBattleMons[gBattlerAttacker].moves[i] != 0 && gBattleMoves[BATTLE_HISTORY->usedMoves[gBattlerTarget >> 1][i]].effect == sAIScriptPtr[2]) @@ -1606,14 +1622,14 @@ static void BattleAICmd_if_move_effect(void) } } -static void BattleAICmd_if_not_move_effect(void) +static void Cmd_if_doesnt_have_move_with_effect(void) { int i; switch (sAIScriptPtr[1]) { - case 1: - case 3: + case AI_USER: + case AI_USER_PARTNER: for (i = 0; i < MAX_MON_MOVES; i++) { if (gBattleMons[gBattlerAttacker].moves[i] != 0 && gBattleMoves[gBattleMons[gBattlerAttacker].moves[i]].effect == sAIScriptPtr[2]) @@ -1624,8 +1640,8 @@ static void BattleAICmd_if_not_move_effect(void) else sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 3); break; - case 0: - case 2: + case AI_TARGET: + case AI_TARGET_PARTNER: for (i = 0; i < 8; i++) { if (BATTLE_HISTORY->usedMoves[gBattlerTarget >> 1][i] != 0 && gBattleMoves[BATTLE_HISTORY->usedMoves[gBattlerTarget >> 1][i]].effect == sAIScriptPtr[2]) @@ -1635,171 +1651,163 @@ static void BattleAICmd_if_not_move_effect(void) } } -static void BattleAICmd_if_last_move_did_damage(void) +static void Cmd_if_any_move_disabled_or_encored(void) { - u8 index; + u8 battlerId; - if (sAIScriptPtr[1] == USER) - index = gBattlerAttacker; + if (sAIScriptPtr[1] == AI_USER) + battlerId = gBattlerAttacker; else - index = gBattlerTarget; + battlerId = gBattlerTarget; if (sAIScriptPtr[2] == 0) { - if (gDisableStructs[index].disabledMove == MOVE_NONE) - { + if (gDisableStructs[battlerId].disabledMove == MOVE_NONE) sAIScriptPtr += 7; - return; - } - sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 3); - return; + else + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 3); } - else if (sAIScriptPtr[2] != 1) // ignore the macro if its not 0 or 1. + else if (sAIScriptPtr[2] != 1) { sAIScriptPtr += 7; - return; } - else if (gDisableStructs[index].encoredMove != MOVE_NONE) + else { - sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 3); - return; + if (gDisableStructs[battlerId].encoredMove != MOVE_NONE) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 3); + else + sAIScriptPtr += 7; } - sAIScriptPtr += 7; } -static void BattleAICmd_if_encored(void) +static void Cmd_if_curr_move_disabled_or_encored(void) { switch (sAIScriptPtr[1]) { - case 0: // _08109348 + case 0: if (gDisableStructs[gActiveBattler].disabledMove == AI_THINKING_STRUCT->moveConsidered) - { sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); - return; - } - sAIScriptPtr += 6; - return; - case 1: // _08109370 + else + sAIScriptPtr += 6; + break; + case 1: if (gDisableStructs[gActiveBattler].encoredMove == AI_THINKING_STRUCT->moveConsidered) - { sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); - return; - } - sAIScriptPtr += 6; - return; + else + sAIScriptPtr += 6; + break; default: sAIScriptPtr += 6; - return; + break; } } -static void BattleAICmd_flee(void) +static void Cmd_flee(void) { AI_THINKING_STRUCT->aiAction |= (AI_ACTION_DONE | AI_ACTION_FLEE | AI_ACTION_DO_NOT_ATTACK); // what matters is AI_ACTION_FLEE being enabled. } -// FRLG safari command -static void BattleAICmd_frlg_safari(void) +static void Cmd_if_random_safari_flee(void) { - u8 var; + u8 safariFleeRate; if (gBattleStruct->safariGoNearCounter) { - var = gBattleStruct->safariEscapeFactor * 2; - if (var > 20) - var = 20; + safariFleeRate = gBattleStruct->safariEscapeFactor * 2; + if (safariFleeRate > 20) + safariFleeRate = 20; } - else if (gBattleStruct->safariPkblThrowCounter != 0) // _080C91DC + else if (gBattleStruct->safariPkblThrowCounter != 0) { - var = gBattleStruct->safariEscapeFactor / 4; - if (var == 0) - var = 1; + safariFleeRate = gBattleStruct->safariEscapeFactor / 4; + if (safariFleeRate == 0) + safariFleeRate = 1; } else - var = gBattleStruct->safariEscapeFactor; - var *= 5; - if ((u8)(Random() % 100) < var) + safariFleeRate = gBattleStruct->safariEscapeFactor; + safariFleeRate *= 5; + if ((u8)(Random() % 100) < safariFleeRate) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 1); else sAIScriptPtr += 5; } -static void BattleAICmd_watch(void) +static void Cmd_watch(void) { AI_THINKING_STRUCT->aiAction |= (AI_ACTION_DONE | AI_ACTION_WATCH | AI_ACTION_DO_NOT_ATTACK); // what matters is AI_ACTION_WATCH being enabled. } -static void BattleAICmd_get_hold_effect(void) +static void Cmd_get_hold_effect(void) { - u8 index; + u8 battlerId; u16 side; - if (sAIScriptPtr[1] == USER) - index = gBattlerAttacker; + if (sAIScriptPtr[1] == AI_USER) + battlerId = gBattlerAttacker; else - index = gBattlerTarget; + battlerId = gBattlerTarget; - if (GetBattlerSide(index) == 0) + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) { - side = (GetBattlerPosition(index) & 1); + side = GET_BATTLER_SIDE(battlerId); AI_THINKING_STRUCT->funcResult = BATTLE_HISTORY->itemEffects[side]; } else - AI_THINKING_STRUCT->funcResult = ItemId_GetHoldEffect(gBattleMons[index].item); + AI_THINKING_STRUCT->funcResult = ItemId_GetHoldEffect(gBattleMons[battlerId].item); sAIScriptPtr += 2; } -static void BattleAICmd_get_gender(void) +static void Cmd_get_gender(void) { - u8 index; + u8 battlerId; - if (sAIScriptPtr[1] == USER) - index = gBattlerAttacker; + if (sAIScriptPtr[1] == AI_USER) + battlerId = gBattlerAttacker; else - index = gBattlerTarget; + battlerId = gBattlerTarget; - AI_THINKING_STRUCT->funcResult = GetGenderFromSpeciesAndPersonality(gBattleMons[index].species, gBattleMons[index].personality); + AI_THINKING_STRUCT->funcResult = GetGenderFromSpeciesAndPersonality(gBattleMons[battlerId].species, gBattleMons[battlerId].personality); sAIScriptPtr += 2; } -static void BattleAICmd_is_first_turn(void) +static void Cmd_is_first_turn_for(void) { - u8 index; + u8 battlerId; - if (sAIScriptPtr[1] == USER) - index = gBattlerAttacker; + if (sAIScriptPtr[1] == AI_USER) + battlerId = gBattlerAttacker; else - index = gBattlerTarget; + battlerId = gBattlerTarget; - AI_THINKING_STRUCT->funcResult = gDisableStructs[index].isFirstTurn; + AI_THINKING_STRUCT->funcResult = gDisableStructs[battlerId].isFirstTurn; sAIScriptPtr += 2; } -static void BattleAICmd_get_stockpile_count(void) +static void Cmd_get_stockpile_count(void) { - u8 index; + u8 battlerId; - if (sAIScriptPtr[1] == USER) - index = gBattlerAttacker; + if (sAIScriptPtr[1] == AI_USER) + battlerId = gBattlerAttacker; else - index = gBattlerTarget; + battlerId = gBattlerTarget; - AI_THINKING_STRUCT->funcResult = gDisableStructs[index].stockpileCounter; + AI_THINKING_STRUCT->funcResult = gDisableStructs[battlerId].stockpileCounter; sAIScriptPtr += 2; } -static void BattleAICmd_is_double_battle(void) +static void Cmd_is_double_battle(void) { AI_THINKING_STRUCT->funcResult = gBattleTypeFlags & BATTLE_TYPE_DOUBLE; sAIScriptPtr += 1; } -static void BattleAICmd_get_used_held_item(void) +static void Cmd_get_used_held_item(void) { u8 battlerId; @@ -1807,88 +1815,88 @@ static void BattleAICmd_get_used_held_item(void) battlerId = gBattlerAttacker; else battlerId = gBattlerTarget; - // This is likely a leftover from Ruby's code and its ugly ewram access. + AI_THINKING_STRUCT->funcResult = ((u8 *)gBattleStruct->usedHeldItems)[battlerId * 2]; sAIScriptPtr += 2; } -static void BattleAICmd_get_move_type_from_result(void) +static void Cmd_get_move_type_from_result(void) { AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->funcResult].type; sAIScriptPtr += 1; } -static void BattleAICmd_get_move_power_from_result(void) +static void Cmd_get_move_power_from_result(void) { AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->funcResult].power; sAIScriptPtr += 1; } -static void BattleAICmd_get_move_effect_from_result(void) +static void Cmd_get_move_effect_from_result(void) { AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->funcResult].effect; sAIScriptPtr += 1; } -static void BattleAICmd_get_protect_count(void) +static void Cmd_get_protect_count(void) { - u8 index; + u8 battlerId; - if (sAIScriptPtr[1] == USER) - index = gBattlerAttacker; + if (sAIScriptPtr[1] == AI_USER) + battlerId = gBattlerAttacker; else - index = gBattlerTarget; + battlerId = gBattlerTarget; - AI_THINKING_STRUCT->funcResult = gDisableStructs[index].protectUses; + AI_THINKING_STRUCT->funcResult = gDisableStructs[battlerId].protectUses; sAIScriptPtr += 2; } -static void BattleAICmd_nullsub_52(void) +static void Cmd_nullsub_52(void) { } -static void BattleAICmd_nullsub_53(void) +static void Cmd_nullsub_53(void) { } -static void BattleAICmd_nullsub_54(void) +static void Cmd_nullsub_54(void) { } -static void BattleAICmd_nullsub_55(void) +static void Cmd_nullsub_55(void) { } -static void BattleAICmd_nullsub_56(void) +static void Cmd_nullsub_56(void) { } -static void BattleAICmd_nullsub_57(void) +static void Cmd_nullsub_57(void) { } -static void BattleAICmd_call(void) +static void Cmd_call(void) { AIStackPushVar(sAIScriptPtr + 5); sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 1); } -static void BattleAICmd_jump(void) +static void Cmd_goto(void) { sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 1); } -static void BattleAICmd_end(void) +static void Cmd_end(void) { if (AIStackPop() == FALSE) AI_THINKING_STRUCT->aiAction |= AI_ACTION_DONE; } -static void BattleAICmd_if_level_compare(void) +static void Cmd_if_level_compare(void) { switch (sAIScriptPtr[1]) { @@ -1919,7 +1927,7 @@ static void BattleAICmd_if_level_compare(void) } } -static void BattleAICmd_if_taunted(void) +static void Cmd_if_target_taunted(void) { if (gDisableStructs[gBattlerTarget].tauntTimer != 0) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 1); @@ -1927,7 +1935,7 @@ static void BattleAICmd_if_taunted(void) sAIScriptPtr += 5; } -static void BattleAICmd_if_not_taunted(void) +static void Cmd_if_target_not_taunted(void) { if (gDisableStructs[gBattlerTarget].tauntTimer == 0) sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 1); |