diff options
-rw-r--r-- | asm/contest.s | 458 | ||||
-rw-r--r-- | include/contest.h | 15 | ||||
-rw-r--r-- | include/learn_move.h | 15 | ||||
-rw-r--r-- | src/contest.c | 396 | ||||
-rw-r--r-- | src/pokemon/learn_move.c | 1 |
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" |