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.c209
1 files changed, 209 insertions, 0 deletions
diff --git a/src/battle/battle_ai.c b/src/battle/battle_ai.c
index 977e91f5c..613f2ebe0 100644
--- a/src/battle/battle_ai.c
+++ b/src/battle/battle_ai.c
@@ -289,6 +289,214 @@ 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 sub_8015A98\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 +0x2016800\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 +0x2016800\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 +0x2016800\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 +0x2016800\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 +0x2016800\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 +0x2016800\n"
+ " .word gTrainers\n"
+ " .word gUnknown_02023A14+0x50\n"
+ " .word gUnknown_02023A14+0x4c\n"
+ "\n"
+ );
+}
+#else
void BattleAI_SetupAIData(void)
{
s32 i;
@@ -342,6 +550,7 @@ void BattleAI_SetupAIData(void)
else // otherwise, just set aiFlags to whatever flags the trainer has set in their data.
AI_THINKING_STRUCT->aiFlags = gTrainers[gTrainerBattleOpponent].aiFlags;
}
+#endif
u8 BattleAI_GetAIActionToUse(void)
{