summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorProjectRevoTPP <projectrevotpp@hotmail.com>2018-01-14 12:48:52 -0500
committerProjectRevoTPP <projectrevotpp@hotmail.com>2018-01-14 12:48:52 -0500
commit99d4f3c24a600af8dadfe921f127f68d0bd4f2c3 (patch)
tree6c38f6175ba5cfc8f7c962e8b869fea6099e3579
parentbc2abc39f6a8b47e844136a43fbc729eb5568833 (diff)
finish decompiling contest_ai.c
-rw-r--r--asm/contest_ai.s381
-rw-r--r--include/contest.h3
-rw-r--r--ld_script.txt1
-rwxr-xr-xsrc/contest_ai.c122
4 files changed, 124 insertions, 383 deletions
diff --git a/asm/contest_ai.s b/asm/contest_ai.s
deleted file mode 100644
index ff8f80bd9..000000000
--- a/asm/contest_ai.s
+++ /dev/null
@@ -1,381 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "include/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start ContestAICmd_unk_7F
-ContestAICmd_unk_7F: @ 812AC34
- ldr r3, _0812AC50 @ =gAIScriptPtr
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- bx lr
- .align 2, 0
-_0812AC50: .4byte gAIScriptPtr
- thumb_func_end ContestAICmd_unk_7F
-
- thumb_func_start ContestAICmd_unk_80
-ContestAICmd_unk_80: @ 812AC54
- push {r4,lr}
- ldr r4, _0812AC80 @ =gAIScriptPtr
- ldr r0, [r4]
- adds r0, 0x5
- bl sub_812ACA4
- ldr r2, [r4]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0812AC80: .4byte gAIScriptPtr
- thumb_func_end ContestAICmd_unk_80
-
- thumb_func_start ContestAICmd_unk_81
-ContestAICmd_unk_81: @ 812AC84
- push {lr}
- bl sub_812ACC8
- lsls r0, 24
- cmp r0, 0
- bne _0812AC9A
- ldr r2, _0812ACA0 @ =gSharedMem + 0x192E4
- ldrb r1, [r2, 0x9]
- movs r0, 0x1
- orrs r0, r1
- strb r0, [r2, 0x9]
-_0812AC9A:
- pop {r0}
- bx r0
- .align 2, 0
-_0812ACA0: .4byte gSharedMem + 0x192E4
- thumb_func_end ContestAICmd_unk_81
-
- thumb_func_start sub_812ACA4
-sub_812ACA4: @ 812ACA4
- push {r4,lr}
- ldr r3, _0812ACC4 @ =gSharedMem + 0x192E4
- adds r4, r3, 0
- adds r4, 0x40
- ldrb r1, [r4]
- adds r2, r1, 0x1
- strb r2, [r4]
- lsls r1, 24
- lsrs r1, 22
- adds r3, 0x20
- adds r1, r3
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0812ACC4: .4byte gSharedMem + 0x192E4
- thumb_func_end sub_812ACA4
-
- thumb_func_start sub_812ACC8
-sub_812ACC8: @ 812ACC8
- push {lr}
- ldr r1, _0812ACDC @ =gSharedMem + 0x192E4
- adds r3, r1, 0
- adds r3, 0x40
- ldrb r0, [r3]
- cmp r0, 0
- bne _0812ACE0
- movs r0, 0
- b _0812ACF4
- .align 2, 0
-_0812ACDC: .4byte gSharedMem + 0x192E4
-_0812ACE0:
- subs r0, 0x1
- strb r0, [r3]
- ldr r2, _0812ACF8 @ =gAIScriptPtr
- ldrb r0, [r3]
- lsls r0, 2
- adds r1, 0x20
- adds r0, r1
- ldr r0, [r0]
- str r0, [r2]
- movs r0, 0x1
-_0812ACF4:
- pop {r1}
- bx r1
- .align 2, 0
-_0812ACF8: .4byte gAIScriptPtr
- thumb_func_end sub_812ACC8
-
- thumb_func_start ContestAICmd_check_for_exciting_move
-ContestAICmd_check_for_exciting_move: @ 812ACFC
- push {r4-r7,lr}
- movs r5, 0
- movs r4, 0
- ldr r7, _0812AD28 @ =gSharedMem + 0x19325
- ldr r6, _0812AD2C @ =gContestMons + 0x1E
-_0812AD06:
- lsls r0, r4, 1
- ldrb r1, [r7]
- lsls r1, 6
- adds r0, r1
- adds r1, r0, r6
- ldrh r0, [r1]
- cmp r0, 0
- beq _0812AD30
- bl Contest_GetMoveExcitement
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0x1
- bne _0812AD30
- movs r5, 0x1
- b _0812AD36
- .align 2, 0
-_0812AD28: .4byte gSharedMem + 0x19325
-_0812AD2C: .4byte gContestMons + 0x1E
-_0812AD30:
- adds r4, 0x1
- cmp r4, 0x3
- ble _0812AD06
-_0812AD36:
- ldr r0, _0812AD48 @ =gSharedMem + 0x192E4
- strh r5, [r0, 0x18]
- ldr r1, _0812AD4C @ =gAIScriptPtr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0812AD48: .4byte gSharedMem + 0x192E4
-_0812AD4C: .4byte gAIScriptPtr
- thumb_func_end ContestAICmd_check_for_exciting_move
-
- thumb_func_start ContestAICmd_unk_83
-ContestAICmd_unk_83: @ 812AD50
- push {lr}
- bl ContestAICmd_check_for_exciting_move
- ldr r0, _0812AD7C @ =gSharedMem + 0x192E4
- movs r1, 0x18
- ldrsh r0, [r0, r1]
- cmp r0, 0
- beq _0812AD84
- ldr r3, _0812AD80 @ =gAIScriptPtr
- ldr r2, [r3]
- ldrb r1, [r2]
- ldrb r0, [r2, 0x1]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x2]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _0812AD8C
- .align 2, 0
-_0812AD7C: .4byte gSharedMem + 0x192E4
-_0812AD80: .4byte gAIScriptPtr
-_0812AD84:
- ldr r1, _0812AD90 @ =gAIScriptPtr
- ldr r0, [r1]
- adds r0, 0x4
- str r0, [r1]
-_0812AD8C:
- pop {r0}
- bx r0
- .align 2, 0
-_0812AD90: .4byte gAIScriptPtr
- thumb_func_end ContestAICmd_unk_83
-
- thumb_func_start ContestAICmd_unk_84
-ContestAICmd_unk_84: @ 812AD94
- push {lr}
- bl ContestAICmd_check_for_exciting_move
- ldr r0, _0812ADC0 @ =gSharedMem + 0x192E4
- movs r1, 0x18
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _0812ADC8
- ldr r3, _0812ADC4 @ =gAIScriptPtr
- ldr r2, [r3]
- ldrb r1, [r2]
- ldrb r0, [r2, 0x1]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x2]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _0812ADD0
- .align 2, 0
-_0812ADC0: .4byte gSharedMem + 0x192E4
-_0812ADC4: .4byte gAIScriptPtr
-_0812ADC8:
- ldr r1, _0812ADD4 @ =gAIScriptPtr
- ldr r0, [r1]
- adds r0, 0x4
- str r0, [r1]
-_0812ADD0:
- pop {r0}
- bx r0
- .align 2, 0
-_0812ADD4: .4byte gAIScriptPtr
- thumb_func_end ContestAICmd_unk_84
-
- thumb_func_start ContestAICmd_unk_85
-ContestAICmd_unk_85: @ 812ADD8
- push {r4-r7,lr}
- movs r6, 0
- ldr r2, _0812AE08 @ =gAIScriptPtr
- ldr r0, [r2]
- ldrb r4, [r0, 0x1]
- ldrb r0, [r0, 0x2]
- lsls r0, 8
- orrs r4, r0
- movs r3, 0
- ldr r0, _0812AE0C @ =gContestMons
- mov r12, r0
- ldr r5, _0812AE10 @ =gSharedMem + 0x192E4
- adds r0, r5, 0
- adds r0, 0x41
- ldrb r0, [r0]
- lsls r0, 6
- mov r1, r12
- adds r1, 0x1E
- adds r0, r1
- ldrh r0, [r0]
- adds r7, r2, 0
- mov r2, r12
- mov r12, r5
- b _0812AE2E
- .align 2, 0
-_0812AE08: .4byte gAIScriptPtr
-_0812AE0C: .4byte gContestMons
-_0812AE10: .4byte gSharedMem + 0x192E4
-_0812AE14:
- adds r3, 0x1
- cmp r3, 0x3
- bgt _0812AE34
- lsls r1, r3, 1
- mov r0, r12
- adds r0, 0x41
- ldrb r0, [r0]
- lsls r0, 6
- adds r1, r0
- adds r0, r2, 0
- adds r0, 0x1E
- adds r1, r0
- ldrh r0, [r1]
-_0812AE2E:
- cmp r0, r4
- bne _0812AE14
- movs r6, 0x1
-_0812AE34:
- mov r0, r12
- strh r6, [r0, 0x18]
- ldr r0, [r7]
- adds r0, 0x3
- str r0, [r7]
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end ContestAICmd_unk_85
-
- thumb_func_start ContestAICmd_unk_86
-ContestAICmd_unk_86: @ 812AE44
- push {lr}
- bl ContestAICmd_unk_85
- ldr r0, _0812AE70 @ =gSharedMem + 0x192E4
- movs r1, 0x18
- ldrsh r0, [r0, r1]
- cmp r0, 0
- beq _0812AE78
- ldr r3, _0812AE74 @ =gAIScriptPtr
- ldr r2, [r3]
- ldrb r1, [r2]
- ldrb r0, [r2, 0x1]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x2]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _0812AE80
- .align 2, 0
-_0812AE70: .4byte gSharedMem + 0x192E4
-_0812AE74: .4byte gAIScriptPtr
-_0812AE78:
- ldr r1, _0812AE84 @ =gAIScriptPtr
- ldr r0, [r1]
- adds r0, 0x4
- str r0, [r1]
-_0812AE80:
- pop {r0}
- bx r0
- .align 2, 0
-_0812AE84: .4byte gAIScriptPtr
- thumb_func_end ContestAICmd_unk_86
-
- thumb_func_start ContestAICmd_unk_87
-ContestAICmd_unk_87: @ 812AE88
- push {lr}
- bl ContestAICmd_unk_85
- ldr r0, _0812AEB4 @ =gSharedMem + 0x192E4
- movs r1, 0x18
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _0812AEBC
- ldr r3, _0812AEB8 @ =gAIScriptPtr
- ldr r2, [r3]
- ldrb r1, [r2]
- ldrb r0, [r2, 0x1]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x2]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _0812AEC4
- .align 2, 0
-_0812AEB4: .4byte gSharedMem + 0x192E4
-_0812AEB8: .4byte gAIScriptPtr
-_0812AEBC:
- ldr r1, _0812AEC8 @ =gAIScriptPtr
- ldr r0, [r1]
- adds r0, 0x4
- str r0, [r1]
-_0812AEC4:
- pop {r0}
- bx r0
- .align 2, 0
-_0812AEC8: .4byte gAIScriptPtr
- thumb_func_end ContestAICmd_unk_87
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/include/contest.h b/include/contest.h
index c8c1a2901..2c53c3490 100644
--- a/include/contest.h
+++ b/include/contest.h
@@ -79,7 +79,8 @@ struct ContestAIInfo {
/*0x11*/ u8 filler11[0x3]; // padding?
/*0x14*/ u32 flags;
/*0x18*/ u16 scriptResult;
- /*0x1A*/ u16 scriptArr[19]; // TODO: are there more variables after the array?
+ /*0x1A*/ u16 scriptArr[3]; // TODO: are there more variables after the array?
+ /*0x20*/ u32 stack[8];
/*0x40*/ u8 unk40;
/*0x41*/ u8 unk41;
/*0x42*/ u8 filler42[0x2]; // padding?
diff --git a/ld_script.txt b/ld_script.txt
index ffc4bc676..98f934890 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -356,7 +356,6 @@ SECTIONS {
src/engine/mystery_event_script.o(.text);
src/field/field_effect_helpers.o(.text);
src/contest_ai.o(.text);
- asm/contest_ai.o(.text);
src/unused_81258BC.o(.text);
src/battle/anim/sfx.o(.text);
src/battle/battle_controller_safari.o(.text);
diff --git a/src/contest_ai.c b/src/contest_ai.c
index 3fc7cec3b..ea0435775 100755
--- a/src/contest_ai.c
+++ b/src/contest_ai.c
@@ -27,6 +27,8 @@ typedef void (* ContestAICmdFunc)(void);
extern const ContestAICmdFunc sContestAICmdTable[]; // TODO: Move table to C file
void ContestAI_DoAIProcessing(void);
+void sub_812ACA4(u8 *);
+u8 sub_812ACC8(void);
void ContestAI_ResetAI(u8 var)
{
@@ -1371,3 +1373,123 @@ void ContestAICmd_unk_7E(void)
else
gAIScriptPtr += 6;
}
+
+// jump
+void ContestAICmd_unk_7F(void)
+{
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+}
+
+void ContestAICmd_unk_80(void)
+{
+ sub_812ACA4(gAIScriptPtr + 5);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+}
+
+void ContestAICmd_unk_81(void)
+{
+ if(!sub_812ACC8())
+ eContestAI->aiAction |= 1;
+}
+
+// push stack?
+void sub_812ACA4(u8 *ptr)
+{
+ u8 unk40 = eContestAI->unk40++;
+ eContestAI->stack[unk40] = (u32)ptr;
+}
+
+// pop stack?
+bool8 sub_812ACC8(void)
+{
+ if(eContestAI->unk40 != 0)
+ {
+ --eContestAI->unk40;
+ gAIScriptPtr = (u8 *)eContestAI->stack[eContestAI->unk40];
+ return TRUE;
+ }
+ else
+ return FALSE;
+}
+
+void ContestAICmd_check_for_exciting_move(void)
+{
+ int result = 0;
+ int i;
+
+ for(i = 0; i < 4; i++)
+ {
+ if(gContestMons[eContestAI->unk41].moves[i])
+ {
+ // why is it using gSharedMem + 0x19325? that does not exist...
+ if(Contest_GetMoveExcitement(gContestMons[eContestAI->unk41].moves[i]) == 1)
+ {
+ result = 1;
+ break;
+ }
+ }
+ }
+
+ eContestAI->scriptResult = result;
+ gAIScriptPtr += 1;
+}
+
+void ContestAICmd_unk_83(void)
+{
+ ContestAICmd_check_for_exciting_move();
+
+ if((s16)eContestAI->scriptResult != 0)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
+ else
+ gAIScriptPtr += 4;
+}
+
+void ContestAICmd_unk_84(void)
+{
+ ContestAICmd_check_for_exciting_move();
+
+ if((s16)eContestAI->scriptResult == 0)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
+ else
+ gAIScriptPtr += 4;
+}
+
+void ContestAICmd_unk_85(void)
+{
+ int result = 0;
+ int i;
+ u16 arg = T1_READ_16(gAIScriptPtr + 1);
+
+ for(i = 0; i < 4; i++)
+ {
+ u16 move = gContestMons[eContestAI->unk41].moves[i];
+ if(move == arg)
+ {
+ result = 1;
+ break;
+ }
+ }
+
+ eContestAI->scriptResult = result;
+ gAIScriptPtr += 3;
+}
+
+void ContestAICmd_unk_86(void)
+{
+ ContestAICmd_unk_85();
+
+ if((s16)eContestAI->scriptResult != 0)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
+ else
+ gAIScriptPtr += 4;
+}
+
+void ContestAICmd_unk_87(void)
+{
+ ContestAICmd_unk_85();
+
+ if((s16)eContestAI->scriptResult == 0)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
+ else
+ gAIScriptPtr += 4;
+}