summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/battle_ai_script_commands.c1130
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);