summaryrefslogtreecommitdiff
path: root/src/battle/battle_ai.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/battle/battle_ai.c')
-rw-r--r--src/battle/battle_ai.c217
1 files changed, 7 insertions, 210 deletions
diff --git a/src/battle/battle_ai.c b/src/battle/battle_ai.c
index 87a66c2c7..629a57d25 100644
--- a/src/battle/battle_ai.c
+++ b/src/battle/battle_ai.c
@@ -13,6 +13,8 @@
#include "util.h"
#include "ewram.h"
+extern u8 gUnknown_02023A14_50;
+extern u32 gUnknown_02023A14_4C;
extern u16 gBattleTypeFlags;
extern u16 gBattleWeather;
extern u8 gActiveBank;
@@ -289,214 +291,6 @@ void BattleAI_HandleItemUseBeforeAISetup(void)
BattleAI_SetupAIData();
}
-#if DEBUG
-__attribute__((naked))
-void BattleAI_SetupAIData()
-{
- asm(
- " push {r4, r5, r6, r7, lr}\n"
- " ldr r2, ._16\n"
- " mov r4, #0x0\n"
- " ldr r3, ._16 + 4\n"
- " mov r1, #0x0\n"
- "._9:\n"
- " add r0, r2, r4\n"
- " strb r1, [r0]\n"
- " add r4, r4, #0x1\n"
- " cmp r4, #0x1b\n"
- " bls ._9 @cond_branch\n"
- " ldr r0, ._16\n"
- " mov r1, #0x64\n"
- " mov r4, #0x3\n"
- " add r0, r0, #0x7\n"
- "._10:\n"
- " strb r1, [r0]\n"
- " sub r0, r0, #0x1\n"
- " sub r4, r4, #0x1\n"
- " cmp r4, #0\n"
- " bge ._10 @cond_branch\n"
- " ldrb r0, [r3]\n"
- " mov r1, #0x0\n"
- " mov r2, #0xff\n"
- " bl CheckMoveLimitations\n"
- " lsl r0, r0, #0x18\n"
- " lsr r7, r0, #0x18\n"
- " mov r4, #0x0\n"
- " ldr r0, ._16\n"
- " add r5, r0, #4\n"
- " ldr r6, ._16 + 8\n"
- "._12:\n"
- " ldr r0, [r6]\n"
- " and r0, r0, r7\n"
- " cmp r0, #0\n"
- " beq ._11 @cond_branch\n"
- " mov r0, #0x0\n"
- " strb r0, [r5]\n"
- "._11:\n"
- " bl Random\n"
- " lsl r0, r0, #0x10\n"
- " lsr r0, r0, #0x10\n"
- " mov r1, #0xf\n"
- " and r0, r0, r1\n"
- " mov r1, #0x64\n"
- " sub r1, r1, r0\n"
- " strb r1, [r5, #0x14]\n"
- " add r5, r5, #0x1\n"
- " add r6, r6, #0x4\n"
- " add r4, r4, #0x1\n"
- " cmp r4, #0x3\n"
- " ble ._12 @cond_branch\n"
- " ldr r0, ._16 + 12\n"
- " add r0, r0, #0x20\n"
- " mov r1, #0x0\n"
- " strb r1, [r0]\n"
- " ldr r1, ._16 + 16\n"
- " ldr r0, ._16 + 4\n"
- " ldrb r2, [r0]\n"
- " strb r2, [r1]\n"
- " ldr r0, ._16 + 20\n"
- " ldrh r1, [r0]\n"
- " mov r0, #0x1\n"
- " and r0, r0, r1\n"
- " cmp r0, #0\n"
- " beq ._13 @cond_branch\n"
- " ldr r4, ._16 + 24\n"
- " bl Random\n"
- " mov r5, #0x2\n"
- " and r0, r0, r5\n"
- " strb r0, [r4]\n"
- " ldr r0, ._16 + 28\n"
- " ldrb r1, [r0]\n"
- " ldr r2, ._16 + 8\n"
- " ldrb r3, [r4]\n"
- " lsl r0, r3, #0x2\n"
- " add r0, r0, r2\n"
- " ldr r0, [r0]\n"
- " and r1, r1, r0\n"
- " cmp r1, #0\n"
- " beq ._15 @cond_branch\n"
- " eor r3, r3, r5\n"
- " strb r3, [r4]\n"
- " b ._15\n"
- "._17:\n"
- " .align 2, 0\n"
- "._16:\n"
- " .word gSharedMem+0x16800\n"
- " .word gActiveBank\n"
- " .word gBitTable\n"
- " .word +0x2016c00\n"
- " .word gBankAttacker\n"
- " .word gBattleTypeFlags\n"
- " .word gBankTarget\n"
- " .word gAbsentBankFlags\n"
- "._13:\n"
- " ldr r0, ._20\n"
- " mov r1, #0x1\n"
- " eor r1, r1, r2\n"
- " strb r1, [r0]\n"
- "._15:\n"
- " ldr r0, ._20 + 4\n"
- " ldrh r1, [r0]\n"
- " mov r0, #0x80\n"
- " and r0, r0, r1\n"
- " cmp r0, #0\n"
- " beq ._18 @cond_branch\n"
- " ldr r1, ._20 + 8\n"
- " mov r0, #0x80\n"
- " lsl r0, r0, #0x17\n"
- " b ._27\n"
- "._21:\n"
- " .align 2, 0\n"
- "._20:\n"
- " .word gBankTarget\n"
- " .word gBattleTypeFlags\n"
- " .word gSharedMem+0x16800\n"
- "._18:\n"
- " mov r2, #0x80\n"
- " lsl r2, r2, #0x3\n"
- " add r0, r2, #0\n"
- " and r0, r0, r1\n"
- " cmp r0, #0\n"
- " beq ._22 @cond_branch\n"
- " ldr r1, ._24\n"
- " mov r0, #0x80\n"
- " lsl r0, r0, #0x16\n"
- " b ._27\n"
- "._25:\n"
- " .align 2, 0\n"
- "._24:\n"
- " .word gSharedMem+0x16800\n"
- "._22:\n"
- " mov r0, #0x10\n"
- " and r0, r0, r1\n"
- " cmp r0, #0\n"
- " beq ._26 @cond_branch\n"
- " ldr r1, ._28\n"
- " mov r0, #0x80\n"
- " lsl r0, r0, #0x18\n"
- " b ._27\n"
- "._29:\n"
- " .align 2, 0\n"
- "._28:\n"
- " .word gSharedMem+0x16800\n"
- "._26:\n"
- " mov r0, #0x90\n"
- " lsl r0, r0, #0x4\n"
- " and r0, r0, r1\n"
- " cmp r0, #0\n"
- " bne ._30 @cond_branch\n"
- " ldr r1, ._33\n"
- " ldrh r0, [r1]\n"
- " cmp r0, r2\n"
- " bne ._31 @cond_branch\n"
- "._30:\n"
- " ldr r1, ._33 + 4\n"
- " mov r0, #0x7\n"
- "._27:\n"
- " str r0, [r1, #0xc]\n"
- " add r3, r1, #0\n"
- " b ._32\n"
- "._34:\n"
- " .align 2, 0\n"
- "._33:\n"
- " .word gTrainerBattleOpponent\n"
- " .word gSharedMem+0x16800\n"
- "._31:\n"
- " ldr r3, ._36\n"
- " ldr r2, ._36 + 4\n"
- " ldrh r1, [r1]\n"
- " lsl r0, r1, #0x2\n"
- " add r0, r0, r1\n"
- " lsl r0, r0, #0x3\n"
- " add r2, r2, #0x1c\n"
- " add r0, r0, r2\n"
- " ldr r0, [r0]\n"
- " str r0, [r3, #0xc]\n"
- "._32:\n"
- " ldr r0, ._36 + 8\n"
- " ldrb r1, [r0]\n"
- " mov r0, #0x1\n"
- " and r0, r0, r1\n"
- " cmp r0, #0\n"
- " beq ._35 @cond_branch\n"
- " ldr r0, ._36 + 12\n"
- " ldr r0, [r0]\n"
- " str r0, [r3, #0xc]\n"
- "._35:\n"
- " pop {r4, r5, r6, r7}\n"
- " pop {r0}\n"
- " bx r0\n"
- "._37:\n"
- " .align 2, 0\n"
- "._36:\n"
- " .word gSharedMem+0x16800\n"
- " .word gTrainers\n"
- " .word gUnknown_02023A14_50\n"
- " .word gUnknown_02023A14_4C\n"
- "\n"
- );
-}
-#else
void BattleAI_SetupAIData(void)
{
s32 i;
@@ -544,13 +338,16 @@ void BattleAI_SetupAIData(void)
else if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)
AI_THINKING_STRUCT->aiFlags = 0x80000000;
#ifdef GERMAN
- else if (gBattleTypeFlags & 0x900 || gTrainerBattleOpponent == 0x400)
+ else if (gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER) || gTrainerBattleOpponent == 0x400)
AI_THINKING_STRUCT->aiFlags = 7;
#endif
else // otherwise, just set aiFlags to whatever flags the trainer has set in their data.
AI_THINKING_STRUCT->aiFlags = gTrainers[gTrainerBattleOpponent].aiFlags;
-}
+#if DEBUG
+ if (gUnknown_02023A14_50 & 1)
+ AI_THINKING_STRUCT->aiFlags = gUnknown_02023A14_4C;
#endif
+}
u8 BattleAI_GetAIActionToUse(void)
{