summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/contest.s458
-rw-r--r--include/contest.h15
-rw-r--r--include/learn_move.h15
-rw-r--r--src/contest.c396
-rw-r--r--src/pokemon/learn_move.c1
5 files changed, 406 insertions, 479 deletions
diff --git a/asm/contest.s b/asm/contest.s
index 0053a869c..331aff071 100644
--- a/asm/contest.s
+++ b/asm/contest.s
@@ -5,464 +5,6 @@
.text
- thumb_func_start sub_80ABAAC
-sub_80ABAAC: @ 80ABAAC
- push {lr}
- bl AnimateSprites
- bl RunTasks
- bl BuildOamBuffer
- bl UpdatePaletteFade
- pop {r0}
- bx r0
- thumb_func_end sub_80ABAAC
-
- thumb_func_start sub_80ABAC4
-sub_80ABAC4: @ 80ABAC4
- push {lr}
- ldr r1, _080ABB3C @ =REG_BG0HOFS
- ldr r0, _080ABB40 @ =gUnknown_030042A4
- ldrh r0, [r0]
- strh r0, [r1]
- adds r1, 0x2
- ldr r0, _080ABB44 @ =gUnknown_030042A0
- ldrh r0, [r0]
- strh r0, [r1]
- adds r1, 0x2
- ldr r0, _080ABB48 @ =gUnknown_030042C0
- ldrh r0, [r0]
- strh r0, [r1]
- adds r1, 0x2
- ldr r0, _080ABB4C @ =gUnknown_030041B4
- ldrh r0, [r0]
- strh r0, [r1]
- adds r1, 0x2
- ldr r0, _080ABB50 @ =gUnknown_03004288
- ldrh r0, [r0]
- strh r0, [r1]
- adds r1, 0x2
- ldr r0, _080ABB54 @ =gUnknown_03004280
- ldrh r0, [r0]
- strh r0, [r1]
- adds r1, 0x2
- ldr r0, _080ABB58 @ =gUnknown_030041B0
- ldrh r0, [r0]
- strh r0, [r1]
- adds r1, 0x2
- ldr r0, _080ABB5C @ =gUnknown_030041B8
- ldrh r0, [r0]
- strh r0, [r1]
- adds r1, 0x22
- ldr r0, _080ABB60 @ =gUnknown_030042C4
- ldrh r0, [r0]
- strh r0, [r1]
- adds r1, 0x4
- ldr r0, _080ABB64 @ =gUnknown_03004240
- ldrh r0, [r0]
- strh r0, [r1]
- subs r1, 0x2
- ldr r0, _080ABB68 @ =gUnknown_03004200
- ldrh r0, [r0]
- strh r0, [r1]
- adds r1, 0x4
- ldr r0, _080ABB6C @ =gUnknown_03004244
- ldrh r0, [r0]
- strh r0, [r1]
- bl TransferPlttBuffer
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl sub_8089668
- pop {r0}
- bx r0
- .align 2, 0
-_080ABB3C: .4byte REG_BG0HOFS
-_080ABB40: .4byte gUnknown_030042A4
-_080ABB44: .4byte gUnknown_030042A0
-_080ABB48: .4byte gUnknown_030042C0
-_080ABB4C: .4byte gUnknown_030041B4
-_080ABB50: .4byte gUnknown_03004288
-_080ABB54: .4byte gUnknown_03004280
-_080ABB58: .4byte gUnknown_030041B0
-_080ABB5C: .4byte gUnknown_030041B8
-_080ABB60: .4byte gUnknown_030042C4
-_080ABB64: .4byte gUnknown_03004240
-_080ABB68: .4byte gUnknown_03004200
-_080ABB6C: .4byte gUnknown_03004244
- thumb_func_end sub_80ABAC4
-
- thumb_func_start sub_80ABB70
-sub_80ABB70: @ 80ABB70
- push {r4-r6,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r0, _080ABBB0 @ =gUnknown_030042A0
- movs r1, 0
- strh r1, [r0]
- ldr r0, _080ABBB4 @ =gUnknown_03004280
- strh r1, [r0]
- bl sub_80B0D7C
- ldr r1, _080ABBB8 @ =gPlttBufferUnfaded
- ldr r2, _080ABBBC @ =gSharedMem + 0x18204
- ldr r0, _080ABBC0 @ =0x040000d4
- str r1, [r0]
- str r2, [r0, 0x4]
- ldr r1, _080ABBC4 @ =0x84000100
- str r1, [r0, 0x8]
- ldr r0, [r0, 0x8]
- ldr r0, _080ABBC8 @ =gContestPlayerMonIndex
- ldrb r0, [r0]
- bl sub_80AF59C
- lsls r0, 24
- cmp r0, 0
- bne _080ABBD4
- ldr r0, _080ABBCC @ =gDisplayedStringBattle
- ldr r1, _080ABBD0 @ =gUnknown_083CAF84
- bl StringCopy
- b _080ABBDC
- .align 2, 0
-_080ABBB0: .4byte gUnknown_030042A0
-_080ABBB4: .4byte gUnknown_03004280
-_080ABBB8: .4byte gPlttBufferUnfaded
-_080ABBBC: .4byte gSharedMem + 0x18204
-_080ABBC0: .4byte 0x040000d4
-_080ABBC4: .4byte 0x84000100
-_080ABBC8: .4byte gContestPlayerMonIndex
-_080ABBCC: .4byte gDisplayedStringBattle
-_080ABBD0: .4byte gUnknown_083CAF84
-_080ABBD4:
- ldr r0, _080ABC20 @ =gDisplayedStringBattle
- ldr r1, _080ABC24 @ =gUnknown_083CAFAE
- bl StringCopy
-_080ABBDC:
- ldr r5, _080ABC20 @ =gDisplayedStringBattle
- ldr r0, _080ABC28 @ =gSharedMem + 0x19204
- ldrb r1, [r0, 0x1]
- adds r1, 0x1
- adds r0, r5, 0
- bl sub_80AE020
- bl sub_80AF138
- ldr r4, _080ABC2C @ =gStringVar4
- adds r0, r4, 0
- adds r1, r5, 0
- bl StringExpandPlaceholders
- ldr r0, _080ABC30 @ =gMenuWindow
- movs r2, 0xC2
- lsls r2, 2
- movs r1, 0xF
- str r1, [sp]
- adds r1, r4, 0
- movs r3, 0x1
- bl sub_8002EB0
- ldr r1, _080ABC34 @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- ldr r1, _080ABC38 @ =sub_80ABC3C
- str r1, [r0]
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080ABC20: .4byte gDisplayedStringBattle
-_080ABC24: .4byte gUnknown_083CAFAE
-_080ABC28: .4byte gSharedMem + 0x19204
-_080ABC2C: .4byte gStringVar4
-_080ABC30: .4byte gMenuWindow
-_080ABC34: .4byte gTasks
-_080ABC38: .4byte sub_80ABC3C
- thumb_func_end sub_80ABB70
-
- thumb_func_start sub_80ABC3C
-sub_80ABC3C: @ 80ABC3C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _080ABC64 @ =gMenuWindow
- bl sub_80037A0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080ABC5E
- ldr r0, _080ABC68 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _080ABC6C @ =sub_80ABC70
- str r0, [r1]
-_080ABC5E:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080ABC64: .4byte gMenuWindow
-_080ABC68: .4byte gTasks
-_080ABC6C: .4byte sub_80ABC70
- thumb_func_end sub_80ABC3C
-
- thumb_func_start sub_80ABC70
-sub_80ABC70: @ 80ABC70
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r5, r4, 0
- ldr r0, _080ABCB0 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _080ABC88
- cmp r1, 0x2
- bne _080ABCCE
-_080ABC88:
- movs r0, 0x5
- bl PlaySE
- ldr r0, _080ABCB4 @ =gContestPlayerMonIndex
- ldrb r0, [r0]
- bl sub_80AF59C
- lsls r0, 24
- cmp r0, 0
- bne _080ABCC0
- movs r0, 0x1
- bl sub_80AFFE0
- ldr r0, _080ABCB8 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _080ABCBC @ =sub_80ABCDC
- b _080ABCCC
- .align 2, 0
-_080ABCB0: .4byte gMain
-_080ABCB4: .4byte gContestPlayerMonIndex
-_080ABCB8: .4byte gTasks
-_080ABCBC: .4byte sub_80ABCDC
-_080ABCC0:
- ldr r0, _080ABCD4 @ =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- ldr r0, _080ABCD8 @ =sub_80AC0C8
-_080ABCCC:
- str r0, [r1]
-_080ABCCE:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080ABCD4: .4byte gTasks
-_080ABCD8: .4byte sub_80AC0C8
- thumb_func_end sub_80ABC70
-
- thumb_func_start sub_80ABCDC
-sub_80ABCDC: @ 80ABCDC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x2C
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x28]
- ldr r0, _080ABD80 @ =gUnknown_030042A0
- movs r1, 0xA0
- strh r1, [r0]
- ldr r0, _080ABD84 @ =gUnknown_03004280
- strh r1, [r0]
- ldr r5, _080ABD88 @ =gUnknown_03004210
- ldr r4, _080ABD8C @ =gUnknown_083CA340
- ldrb r2, [r4]
- ldrb r3, [r4, 0x1]
- ldrb r0, [r4, 0x2]
- str r0, [sp]
- ldrb r0, [r4, 0x3]
- str r0, [sp, 0x4]
- adds r0, r5, 0
- movs r1, 0
- bl FillWindowRect_DefaultPalette
- movs r6, 0
- ldr r0, _080ABD90 @ =gContestPlayerMonIndex
- mov r8, r0
- ldr r7, _080ABD94 @ =gSharedMem + 0x19260
- mov r9, r5
- mov r10, r4
-_080ABD1C:
- lsls r1, r6, 1
- mov r3, r8
- ldrb r2, [r3]
- lsls r0, r2, 6
- adds r1, r0
- ldr r0, _080ABD98 @ =gUnknown_0203858E
- adds r1, r0
- ldrh r4, [r1]
- add r5, sp, 0x8
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r7
- ldrh r0, [r0, 0x8]
- cmp r0, 0
- beq _080ABDA0
- adds r0, r2, 0
- bl sub_80B214C
- lsls r0, 24
- cmp r0, 0
- beq _080ABDA0
- mov r2, r8
- ldrb r1, [r2]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r7
- ldrh r0, [r0, 0x8]
- adds r1, r4, 0
- bl AreMovesContestCombo
- lsls r0, 24
- cmp r0, 0
- beq _080ABDA0
- mov r3, r8
- ldrb r1, [r3]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r7
- ldrb r1, [r0, 0x15]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _080ABDA0
- add r0, sp, 0x8
- ldr r1, _080ABD9C @ =gUnknownText_UnknownFormatting2
- b _080ABDC6
- .align 2, 0
-_080ABD80: .4byte gUnknown_030042A0
-_080ABD84: .4byte gUnknown_03004280
-_080ABD88: .4byte gUnknown_03004210
-_080ABD8C: .4byte gUnknown_083CA340
-_080ABD90: .4byte gContestPlayerMonIndex
-_080ABD94: .4byte gSharedMem + 0x19260
-_080ABD98: .4byte gUnknown_0203858E
-_080ABD9C: .4byte gUnknownText_UnknownFormatting2
-_080ABDA0:
- cmp r4, 0
- beq _080ABDCC
- mov r1, r8
- ldrb r0, [r1]
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r7
- ldrh r0, [r1, 0x8]
- cmp r0, r4
- bne _080ABDCC
- ldr r0, _080ABE74 @ =gContestMoves
- lsls r1, r4, 3
- adds r1, r0
- ldrb r0, [r1]
- cmp r0, 0x3
- beq _080ABDCC
- add r0, sp, 0x8
- ldr r1, _080ABE78 @ =gUnknownText_UnknownFormatting3
-_080ABDC6:
- bl StringCopy
- adds r5, r0, 0
-_080ABDCC:
- movs r0, 0xD
- adds r1, r4, 0
- muls r1, r0
- ldr r0, _080ABE7C @ =gMoveNames
- adds r1, r0
- adds r0, r5, 0
- bl StringCopy
- lsls r1, r6, 2
- adds r2, r1, r6
- lsls r2, 18
- movs r3, 0xC2
- lsls r3, 18
- adds r2, r3
- lsrs r2, 16
- mov r3, r10
- adds r0, r1, r3
- ldrb r3, [r0]
- lsls r3, 3
- adds r3, 0x4
- lsls r3, 24
- lsrs r3, 24
- ldr r0, _080ABE80 @ =gUnknown_083CA340 + 0x1
- adds r1, r0
- ldrb r0, [r1]
- lsls r0, 3
- str r0, [sp]
- movs r0, 0x1
- str r0, [sp, 0x4]
- mov r0, r9
- add r1, sp, 0x8
- bl sub_8002E4C
- mov r0, r9
- bl sub_8002F44
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x3
- bhi _080ABE20
- b _080ABD1C
-_080ABE20:
- ldr r1, _080ABE84 @ =0x0000ffff
- ldr r3, _080ABE88 @ =0x00002d9f
- movs r0, 0x48
- str r0, [sp]
- movs r0, 0
- movs r2, 0xC
- bl sub_814A5C0
- ldr r4, _080ABE8C @ =gSharedMem + 0x19204
- movs r0, 0
- ldrsb r0, [r4, r0]
- bl sub_80AC0AC
- ldr r2, _080ABE90 @ =gContestMons
- ldrb r1, [r4]
- lsls r1, 1
- ldr r0, _080ABE94 @ =gContestPlayerMonIndex
- ldrb r0, [r0]
- lsls r0, 6
- adds r1, r0
- adds r2, 0x1E
- adds r1, r2
- ldrh r0, [r1]
- bl sub_80AEBEC
- ldr r1, _080ABE98 @ =gTasks
- ldr r2, [sp, 0x28]
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r0, r1
- ldr r1, _080ABE9C @ =sub_80ABEA0
- str r1, [r0]
- add sp, 0x2C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080ABE74: .4byte gContestMoves
-_080ABE78: .4byte gUnknownText_UnknownFormatting3
-_080ABE7C: .4byte gMoveNames
-_080ABE80: .4byte gUnknown_083CA340 + 0x1
-_080ABE84: .4byte 0x0000ffff
-_080ABE88: .4byte 0x00002d9f
-_080ABE8C: .4byte gSharedMem + 0x19204
-_080ABE90: .4byte gContestMons
-_080ABE94: .4byte gContestPlayerMonIndex
-_080ABE98: .4byte gTasks
-_080ABE9C: .4byte sub_80ABEA0
- thumb_func_end sub_80ABCDC
-
thumb_func_start sub_80ABEA0
sub_80ABEA0: @ 80ABEA0
push {r4-r7,lr}
diff --git a/include/contest.h b/include/contest.h
index 983f9bc6a..06c356c2f 100644
--- a/include/contest.h
+++ b/include/contest.h
@@ -1,6 +1,21 @@
#ifndef GUARD_CONTEST_H
#define GUARD_CONTEST_H
+struct ContestMove
+{
+ u8 effect;
+ u8 contestCategory:3;
+ u8 comboStarterId;
+ u8 comboMoves[4];
+};
+
+struct ContestEffect
+{
+ u8 effectType;
+ u8 appeal;
+ u8 jam;
+};
+
struct ContestPokemon
{
/* 0x00 */ u16 species;
diff --git a/include/learn_move.h b/include/learn_move.h
index 7a05ea60b..85fbf046e 100644
--- a/include/learn_move.h
+++ b/include/learn_move.h
@@ -1,21 +1,6 @@
#ifndef GUARD_LEARN_MOVE_H
#define GUARD_LEARN_MOVE_H
-struct ContestMove
-{
- u8 effect;
- u8 contestCategory:3;
- u8 comboStarterId;
- u8 comboMoves[4];
-};
-
-struct ContestEffect
-{
- u8 effectType;
- u8 appeal;
- u8 jam;
-};
-
void sub_8132670(void);
#endif // GUARD_LEARN_MOVE_H
diff --git a/src/contest.c b/src/contest.c
index ebce709e3..34c66c66c 100644
--- a/src/contest.c
+++ b/src/contest.c
@@ -3,32 +3,37 @@
#include "battle_anim.h"
#include "contest.h"
#include "contest_link_80C857C.h"
-#include "ewram.h"
+#include "data2.h"
#include "decompress.h"
+#include "ewram.h"
#include "graphics.h"
#include "link.h"
#include "main.h"
#include "menu.h"
+#include "menu_cursor.h"
#include "palette.h"
#include "random.h"
#include "sound.h"
+#include "string_util.h"
#include "task.h"
#include "text.h"
#include "unknown_task.h"
+extern bool8 AreMovesContestCombo(u16, u16);
+
struct Shared18000
{
/*0x18000*/ u8 unk18000;
/*0x18001*/ u8 filler18001[3];
- ///*0x18004*/ u8 unk18004[0x200];
/*0x18004*/ u16 unk18004[16][16];
- /*0x18204*/ u8 filler18204[0xA04-0x204];
+ /*0x18204*/ u8 unk18204[0xA04-0x204];
/*0x18A04*/ u8 unk18A04[0x800];
};
struct Shared19204
{
- /*0x19204*/ u8 filler0[2];
+ /*0x19204*/ u8 unk19204;
+ /*0x19205*/ u8 unk19205;
/*0x19206*/ u8 unk19206[4];
/*0x1920A*/ u8 unk1920A;
/*0x1920B*/ u8 filler1920B;
@@ -42,12 +47,15 @@ struct Shared19204
struct UnknownContestStruct1
{
- u8 filler0[0xB];
+ u8 filler0[8];
+ u16 unk8;
+ u8 fillerA;
u8 unkB_0:2;
u8 fillerC[0x13-0xC];
u8 unk13;
u8 unk14;
- u8 filler15[0x19-0x15];
+ u8 unk15;
+ u8 filler16[0x19-0x16];
u8 unk19;
u8 filler1A[0x1C-0x1A];
};
@@ -67,6 +75,7 @@ struct Shared19260
#define shared19204 (*(struct Shared19204 *)(gSharedMem + 0x19204))
#define shared19260 (*(struct Shared19260 *)(gSharedMem + 0x19260))
+extern u8 gDisplayedStringBattle[];
extern u16 gBattleTypeFlags;
extern u8 gBankAttacker;
extern u8 gBankTarget;
@@ -90,6 +99,12 @@ extern u16 gUnknown_030042C4;
extern u32 gUnknown_03005D28;
extern u8 gUnknown_02038696[];
+extern const u8 gUnknown_083CAF84[];
+extern const u8 gUnknown_083CAFAE[];
+extern const struct ContestMove gContestMoves[];
+extern const u8 gUnknownText_UnknownFormatting2[];
+extern const u8 gUnknownText_UnknownFormatting3[];
+
void sub_80AB350(void);
void sub_80AB5D4(u8);
void sub_80AB604(u8);
@@ -102,19 +117,32 @@ void sub_80AB9A0(u8);
void sub_80ABAAC(void);
void sub_80ABAC4(void);
void sub_80ABB70(u8);
+void sub_80ABC3C(u8);
+void sub_80ABC70(u8);
+void sub_80ABCDC(u8);
+void sub_80ABEA0(u8);
+void sub_80AC0AC(s8);
+void sub_80AC0C8(u8);
+void sub_80AE020();
u8 sub_80AE858(void);
u8 sub_80AE8B4(void);
void sub_80AEB30(void);
+void sub_80AEBEC(u16);
+void sub_80AF138(void);
+u8 sub_80AF59C(u8);
void sub_80AF860(void);
void sub_80AFA5C(void);
void sub_80AFE30(void);
+void sub_80AFFE0(u8);
void sub_80B0034(void);
void sub_80B00C8(void);
void sub_80B0324(void);
void sub_80B0518(void);
+void sub_80B0D7C(void);
void sub_80B1118(void);
void sub_80B159C(void);
void sub_80B1B14(void);
+u8 sub_80B214C(u8);
void sub_80B2184(void);
void sub_80B2280(void);
void sub_80B292C(void);
@@ -470,3 +498,359 @@ void sub_80AB9A0(u8 taskId)
break;
}
}
+
+void sub_80ABAAC(void)
+{
+ AnimateSprites();
+ RunTasks();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+void sub_80ABAC4(void)
+{
+ REG_BG0HOFS = gUnknown_030042A4;
+ REG_BG0VOFS = gUnknown_030042A0;
+ REG_BG1HOFS = gUnknown_030042C0;
+ REG_BG1VOFS = gUnknown_030041B4;
+ REG_BG2HOFS = gUnknown_03004288;
+ REG_BG2VOFS = gUnknown_03004280;
+ REG_BG3HOFS = gUnknown_030041B0;
+ REG_BG3VOFS = gUnknown_030041B8;
+ REG_WIN0H = gUnknown_030042C4;
+ REG_WIN0V = gUnknown_03004240;
+ REG_WIN1H = gUnknown_03004200;
+ REG_WIN1V = gUnknown_03004244;
+ TransferPlttBuffer();
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ sub_8089668();
+}
+
+void sub_80ABB70(u8 taskId)
+{
+ gUnknown_030042A0 = 0;
+ gUnknown_03004280 = 0;
+ sub_80B0D7C();
+ {
+ void *src = gPlttBufferUnfaded;
+ void *dest = shared18000.unk18204;
+ DmaCopy32(3, src, dest, 0x400);
+ }
+ if (sub_80AF59C(gContestPlayerMonIndex) == 0)
+ StringCopy(gDisplayedStringBattle, gUnknown_083CAF84);
+ else
+ StringCopy(gDisplayedStringBattle, gUnknown_083CAFAE);
+ sub_80AE020(gDisplayedStringBattle, shared19204.unk19205 + 1);
+ sub_80AF138();
+ StringExpandPlaceholders(gStringVar4, gDisplayedStringBattle);
+ sub_8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15);
+ gTasks[taskId].func = sub_80ABC3C;
+}
+
+void sub_80ABC3C(u8 taskId)
+{
+ if (sub_80037A0(&gMenuWindow) == 1)
+ gTasks[taskId].func = sub_80ABC70;
+}
+
+void sub_80ABC70(u8 taskId)
+{
+ if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys == B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ if (sub_80AF59C(gContestPlayerMonIndex) == 0)
+ {
+ sub_80AFFE0(1);
+ gTasks[taskId].func = sub_80ABCDC;
+ }
+ else
+ {
+ gTasks[taskId].func = sub_80AC0C8;
+ }
+ }
+}
+
+
+struct UnknownContestStruct2
+{
+ u16 unk0[4];
+ u8 filler8[56];
+};
+extern struct UnknownContestStruct2 gUnknown_0203858E[];
+
+extern const u8 gUnknown_083CA340[][4];
+/*
+struct UnknownContestStruct3
+{
+ u8 unk0;
+ u8 unk1;
+ u8 unk2;
+ u8 unk3;
+};
+extern const struct UnknownContestStruct3 gUnknown_083CA340[];
+*/
+
+#ifdef NONMATCHING
+void sub_80ABCDC(u8 taskId)
+{
+ u8 i;
+ u8 sp8[32];
+
+ gUnknown_030042A0 = 0xA0;
+ gUnknown_03004280 = 0xA0;
+ FillWindowRect_DefaultPalette(
+ &gUnknown_03004210,
+ 0,
+ gUnknown_083CA340[0][0],
+ gUnknown_083CA340[0][1],
+ gUnknown_083CA340[0][2],
+ gUnknown_083CA340[0][3]);
+
+ for (i = 0; i < 4; i++)
+ {
+ u32 offset = i * 2 + gContestPlayerMonIndex * 64;
+ u16 r4 = *(u16 *)((u8 *)gUnknown_0203858E + offset);
+ u8 *r5 = sp8;
+
+ if (shared19260.unk19260[gContestPlayerMonIndex].unk8 != 0
+ && sub_80B214C(gContestPlayerMonIndex) != 0
+ && AreMovesContestCombo(shared19260.unk19260[gContestPlayerMonIndex].unk8, r4)
+ && shared19260.unk19260[gContestPlayerMonIndex].unk15 & 0x10)
+ {
+ r5 = StringCopy(sp8, gUnknownText_UnknownFormatting2);
+ }
+ //_080ABDA0
+ else if (r4 != 0
+ && shared19260.unk19260[gContestPlayerMonIndex].unk8 == r4
+ && gContestMoves[r4].effect != 3)
+ {
+ r5 = StringCopy(sp8, gUnknownText_UnknownFormatting3);
+ }
+ r5 = StringCopy(r5, gMoveNames[r4]);
+
+ sub_8002E4C(
+ &gUnknown_03004210,
+ sp8,
+ 776 + i * 20,
+ gUnknown_083CA340[i][0] * 8 + 4,
+ gUnknown_083CA340[i][1] * 8,
+ 1);
+ sub_8002F44(&gUnknown_03004210);
+ }
+
+ sub_814A5C0(0, 0xFFFF, 12, 0x2D9F, 72);
+ sub_80AC0AC(shared19204.unk19204);
+ sub_80AEBEC(gContestMons[gContestPlayerMonIndex].moves[shared19204.unk19204]);
+ gTasks[taskId].func = sub_80ABEA0;
+}
+#else
+__attribute__((naked))
+void sub_80ABCDC(u8 taskId)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x2C\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ str r0, [sp, 0x28]\n\
+ ldr r0, _080ABD80 @ =gUnknown_030042A0\n\
+ movs r1, 0xA0\n\
+ strh r1, [r0]\n\
+ ldr r0, _080ABD84 @ =gUnknown_03004280\n\
+ strh r1, [r0]\n\
+ ldr r5, _080ABD88 @ =gUnknown_03004210\n\
+ ldr r4, _080ABD8C @ =gUnknown_083CA340\n\
+ ldrb r2, [r4]\n\
+ ldrb r3, [r4, 0x1]\n\
+ ldrb r0, [r4, 0x2]\n\
+ str r0, [sp]\n\
+ ldrb r0, [r4, 0x3]\n\
+ str r0, [sp, 0x4]\n\
+ adds r0, r5, 0\n\
+ movs r1, 0\n\
+ bl FillWindowRect_DefaultPalette\n\
+ movs r6, 0\n\
+ ldr r0, _080ABD90 @ =gContestPlayerMonIndex\n\
+ mov r8, r0\n\
+ ldr r7, _080ABD94 @ =gSharedMem + 0x19260\n\
+ mov r9, r5\n\
+ mov r10, r4\n\
+_080ABD1C:\n\
+ lsls r1, r6, 1\n\
+ mov r3, r8\n\
+ ldrb r2, [r3]\n\
+ lsls r0, r2, 6\n\
+ adds r1, r0\n\
+ ldr r0, _080ABD98 @ =gUnknown_0203858E\n\
+ adds r1, r0\n\
+ ldrh r4, [r1]\n\
+ add r5, sp, 0x8\n\
+ lsls r0, r2, 3\n\
+ subs r0, r2\n\
+ lsls r0, 2\n\
+ adds r0, r7\n\
+ ldrh r0, [r0, 0x8]\n\
+ cmp r0, 0\n\
+ beq _080ABDA0\n\
+ adds r0, r2, 0\n\
+ bl sub_80B214C\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _080ABDA0\n\
+ mov r2, r8\n\
+ ldrb r1, [r2]\n\
+ lsls r0, r1, 3\n\
+ subs r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r7\n\
+ ldrh r0, [r0, 0x8]\n\
+ adds r1, r4, 0\n\
+ bl AreMovesContestCombo\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _080ABDA0\n\
+ mov r3, r8\n\
+ ldrb r1, [r3]\n\
+ lsls r0, r1, 3\n\
+ subs r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r7\n\
+ ldrb r1, [r0, 0x15]\n\
+ movs r0, 0x10\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080ABDA0\n\
+ add r0, sp, 0x8\n\
+ ldr r1, _080ABD9C @ =gUnknownText_UnknownFormatting2\n\
+ b _080ABDC6\n\
+ .align 2, 0\n\
+_080ABD80: .4byte gUnknown_030042A0\n\
+_080ABD84: .4byte gUnknown_03004280\n\
+_080ABD88: .4byte gUnknown_03004210\n\
+_080ABD8C: .4byte gUnknown_083CA340\n\
+_080ABD90: .4byte gContestPlayerMonIndex\n\
+_080ABD94: .4byte gSharedMem + 0x19260\n\
+_080ABD98: .4byte gUnknown_0203858E\n\
+_080ABD9C: .4byte gUnknownText_UnknownFormatting2\n\
+_080ABDA0:\n\
+ cmp r4, 0\n\
+ beq _080ABDCC\n\
+ mov r1, r8\n\
+ ldrb r0, [r1]\n\
+ lsls r1, r0, 3\n\
+ subs r1, r0\n\
+ lsls r1, 2\n\
+ adds r1, r7\n\
+ ldrh r0, [r1, 0x8]\n\
+ cmp r0, r4\n\
+ bne _080ABDCC\n\
+ ldr r0, _080ABE74 @ =gContestMoves\n\
+ lsls r1, r4, 3\n\
+ adds r1, r0\n\
+ ldrb r0, [r1]\n\
+ cmp r0, 0x3\n\
+ beq _080ABDCC\n\
+ add r0, sp, 0x8\n\
+ ldr r1, _080ABE78 @ =gUnknownText_UnknownFormatting3\n\
+_080ABDC6:\n\
+ bl StringCopy\n\
+ adds r5, r0, 0\n\
+_080ABDCC:\n\
+ movs r0, 0xD\n\
+ adds r1, r4, 0\n\
+ muls r1, r0\n\
+ ldr r0, _080ABE7C @ =gMoveNames\n\
+ adds r1, r0\n\
+ adds r0, r5, 0\n\
+ bl StringCopy\n\
+ lsls r1, r6, 2\n\
+ adds r2, r1, r6\n\
+ lsls r2, 18\n\
+ movs r3, 0xC2\n\
+ lsls r3, 18\n\
+ adds r2, r3\n\
+ lsrs r2, 16\n\
+ mov r3, r10\n\
+ adds r0, r1, r3\n\
+ ldrb r3, [r0]\n\
+ lsls r3, 3\n\
+ adds r3, 0x4\n\
+ lsls r3, 24\n\
+ lsrs r3, 24\n\
+ ldr r0, _080ABE80 @ =gUnknown_083CA340 + 0x1\n\
+ adds r1, r0\n\
+ ldrb r0, [r1]\n\
+ lsls r0, 3\n\
+ str r0, [sp]\n\
+ movs r0, 0x1\n\
+ str r0, [sp, 0x4]\n\
+ mov r0, r9\n\
+ add r1, sp, 0x8\n\
+ bl sub_8002E4C\n\
+ mov r0, r9\n\
+ bl sub_8002F44\n\
+ adds r0, r6, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r6, r0, 24\n\
+ cmp r6, 0x3\n\
+ bhi _080ABE20\n\
+ b _080ABD1C\n\
+_080ABE20:\n\
+ ldr r1, _080ABE84 @ =0x0000ffff\n\
+ ldr r3, _080ABE88 @ =0x00002d9f\n\
+ movs r0, 0x48\n\
+ str r0, [sp]\n\
+ movs r0, 0\n\
+ movs r2, 0xC\n\
+ bl sub_814A5C0\n\
+ ldr r4, _080ABE8C @ =gSharedMem + 0x19204\n\
+ movs r0, 0\n\
+ ldrsb r0, [r4, r0]\n\
+ bl sub_80AC0AC\n\
+ ldr r2, _080ABE90 @ =gContestMons\n\
+ ldrb r1, [r4]\n\
+ lsls r1, 1\n\
+ ldr r0, _080ABE94 @ =gContestPlayerMonIndex\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 6\n\
+ adds r1, r0\n\
+ adds r2, 0x1E\n\
+ adds r1, r2\n\
+ ldrh r0, [r1]\n\
+ bl sub_80AEBEC\n\
+ ldr r1, _080ABE98 @ =gTasks\n\
+ ldr r2, [sp, 0x28]\n\
+ lsls r0, r2, 2\n\
+ adds r0, r2\n\
+ lsls r0, 3\n\
+ adds r0, r1\n\
+ ldr r1, _080ABE9C @ =sub_80ABEA0\n\
+ str r1, [r0]\n\
+ add sp, 0x2C\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_080ABE74: .4byte gContestMoves\n\
+_080ABE78: .4byte gUnknownText_UnknownFormatting3\n\
+_080ABE7C: .4byte gMoveNames\n\
+_080ABE80: .4byte gUnknown_083CA340 + 0x1\n\
+_080ABE84: .4byte 0x0000ffff\n\
+_080ABE88: .4byte 0x00002d9f\n\
+_080ABE8C: .4byte gSharedMem + 0x19204\n\
+_080ABE90: .4byte gContestMons\n\
+_080ABE94: .4byte gContestPlayerMonIndex\n\
+_080ABE98: .4byte gTasks\n\
+_080ABE9C: .4byte sub_80ABEA0\n\
+ .syntax divided\n");
+}
+#endif
diff --git a/src/pokemon/learn_move.c b/src/pokemon/learn_move.c
index 8aa10254c..d2538decd 100644
--- a/src/pokemon/learn_move.c
+++ b/src/pokemon/learn_move.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "contest.h"
#include "data2.h"
#include "field_fadetransition.h"
#include "main.h"