summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2019-04-07 21:33:14 -0400
committerhuderlem <huderlem@gmail.com>2019-04-08 17:33:35 -0500
commitd4f6f903025d980ce7d6ab99de1495d85f650dc6 (patch)
treee45d11a32427ff7f0902af0e0155e5927e129db3
parent290b2f9eddc554fed50cb397f2a5f22d9627757f (diff)
nonmatching sub_80C37E4
-rw-r--r--asm/contest_link_80C2020.s891
-rw-r--r--include/gba/io_reg.h34
-rw-r--r--include/graphics.h2
-rw-r--r--src/battle/contest_link_80C2020.c509
-rw-r--r--src/pokemon_storage_system_4.c4
5 files changed, 546 insertions, 894 deletions
diff --git a/asm/contest_link_80C2020.s b/asm/contest_link_80C2020.s
index af9938e9e..5d8a008cf 100644
--- a/asm/contest_link_80C2020.s
+++ b/asm/contest_link_80C2020.s
@@ -5,897 +5,6 @@
.text
- thumb_func_start sub_80C34CC
-sub_80C34CC: @ 80C34CC
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- ldr r4, _080C3514 @ =gSharedMem + 0x18000
- mov r8, r4
- ldrb r5, [r4]
- lsls r4, r5, 4
- adds r4, r5
- lsls r4, 2
- ldr r5, _080C3518 @ =gSprites
- adds r4, r5
- movs r6, 0
- movs r5, 0x88
- lsls r5, 1
- strh r5, [r4, 0x20]
- strh r1, [r4, 0x22]
- strh r6, [r4, 0x24]
- strh r6, [r4, 0x26]
- lsls r0, 16
- asrs r0, 16
- adds r0, 0x20
- strh r0, [r4, 0x36]
- strh r2, [r4, 0x38]
- strh r3, [r4, 0x3A]
- strh r6, [r4, 0x3C]
- ldr r0, _080C351C @ =sub_80C3588
- str r0, [r4, 0x1C]
- movs r0, 0x1
- mov r1, r8
- strb r0, [r1, 0x4]
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080C3514: .4byte gSharedMem + 0x18000
-_080C3518: .4byte gSprites
-_080C351C: .4byte sub_80C3588
- thumb_func_end sub_80C34CC
-
- thumb_func_start sub_80C3520
-sub_80C3520: @ 80C3520
- push {r4,r5,lr}
- ldr r4, _080C3558 @ =gSharedMem + 0x18000
- ldrb r2, [r4]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- ldr r2, _080C355C @ =gSprites
- adds r1, r2
- ldrh r2, [r1, 0x24]
- ldrh r3, [r1, 0x20]
- adds r2, r3
- movs r3, 0
- strh r2, [r1, 0x20]
- ldrh r2, [r1, 0x26]
- ldrh r5, [r1, 0x22]
- adds r2, r5
- strh r2, [r1, 0x22]
- strh r3, [r1, 0x26]
- strh r3, [r1, 0x24]
- strh r0, [r1, 0x3A]
- strh r3, [r1, 0x3C]
- ldr r0, _080C3560 @ =sub_80C3630
- str r0, [r1, 0x1C]
- movs r0, 0x3
- strb r0, [r4, 0x4]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080C3558: .4byte gSharedMem + 0x18000
-_080C355C: .4byte gSprites
-_080C3560: .4byte sub_80C3630
- thumb_func_end sub_80C3520
-
- thumb_func_start sub_80C3564
-sub_80C3564: @ 80C3564
- movs r3, 0
- movs r2, 0
- movs r1, 0x88
- lsls r1, 1
- strh r1, [r0, 0x20]
- movs r1, 0x90
- strh r1, [r0, 0x22]
- strh r2, [r0, 0x26]
- strh r2, [r0, 0x24]
- ldr r1, _080C3580 @ =SpriteCallbackDummy
- str r1, [r0, 0x1C]
- ldr r0, _080C3584 @ =gSharedMem + 0x18000
- strb r3, [r0, 0x4]
- bx lr
- .align 2, 0
-_080C3580: .4byte SpriteCallbackDummy
-_080C3584: .4byte gSharedMem + 0x18000
- thumb_func_end sub_80C3564
-
- thumb_func_start sub_80C3588
-sub_80C3588: @ 80C3588
- push {r4-r7,lr}
- adds r3, r0, 0
- ldrh r2, [r3, 0x3A]
- ldrh r0, [r3, 0x3C]
- adds r2, r0
- lsls r1, r2, 16
- asrs r1, 24
- ldrh r0, [r3, 0x20]
- subs r0, r1
- strh r0, [r3, 0x20]
- movs r1, 0xFF
- ands r2, r1
- strh r2, [r3, 0x3C]
- lsls r0, 16
- asrs r0, 16
- ldrh r2, [r3, 0x36]
- movs r4, 0x36
- ldrsh r1, [r3, r4]
- cmp r0, r1
- bge _080C35B2
- strh r2, [r3, 0x20]
-_080C35B2:
- movs r4, 0
- ldr r6, _080C35F4 @ =gSprites
- movs r5, 0x40
- adds r2, r3, 0
- adds r2, 0x2E
-_080C35BC:
- movs r7, 0
- ldrsh r0, [r2, r7]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r6
- ldrh r0, [r3, 0x24]
- ldrh r7, [r3, 0x20]
- adds r0, r7
- adds r0, r5
- strh r0, [r1, 0x20]
- adds r5, 0x40
- adds r2, 0x2
- adds r4, 0x1
- cmp r4, 0x2
- ble _080C35BC
- movs r0, 0x20
- ldrsh r1, [r3, r0]
- movs r2, 0x36
- ldrsh r0, [r3, r2]
- cmp r1, r0
- bne _080C35EC
- ldr r0, _080C35F8 @ =sub_80C35FC
- str r0, [r3, 0x1C]
-_080C35EC:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080C35F4: .4byte gSprites
-_080C35F8: .4byte sub_80C35FC
- thumb_func_end sub_80C3588
-
- thumb_func_start sub_80C35FC
-sub_80C35FC: @ 80C35FC
- push {lr}
- adds r2, r0, 0
- ldr r0, _080C3628 @ =gSharedMem + 0x18000
- movs r1, 0x2
- strb r1, [r0, 0x4]
- ldrh r3, [r2, 0x38]
- ldr r1, _080C362C @ =0xffff0000
- lsrs r0, r1, 16
- cmp r3, r0
- beq _080C3624
- subs r0, r3, 0x1
- strh r0, [r2, 0x38]
- lsls r0, 16
- asrs r0, 16
- asrs r1, 16
- cmp r0, r1
- bne _080C3624
- ldrh r0, [r2, 0x3A]
- bl sub_80C3520
-_080C3624:
- pop {r0}
- bx r0
- .align 2, 0
-_080C3628: .4byte gSharedMem + 0x18000
-_080C362C: .4byte 0xffff0000
- thumb_func_end sub_80C35FC
-
- thumb_func_start sub_80C3630
-sub_80C3630: @ 80C3630
- push {r4-r7,lr}
- adds r3, r0, 0
- ldrh r2, [r3, 0x3A]
- ldrh r0, [r3, 0x3C]
- adds r2, r0
- lsls r1, r2, 16
- asrs r1, 24
- ldrh r0, [r3, 0x20]
- subs r0, r1
- strh r0, [r3, 0x20]
- movs r0, 0xFF
- ands r2, r0
- strh r2, [r3, 0x3C]
- movs r4, 0
- ldr r6, _080C3694 @ =gSprites
- movs r5, 0x40
- adds r2, r3, 0
- adds r2, 0x2E
-_080C3654:
- movs r1, 0
- ldrsh r0, [r2, r1]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r6
- ldrh r0, [r3, 0x24]
- ldrh r7, [r3, 0x20]
- adds r0, r7
- adds r0, r5
- strh r0, [r1, 0x20]
- adds r5, 0x40
- adds r2, 0x2
- adds r4, 0x1
- cmp r4, 0x2
- ble _080C3654
- movs r1, 0x20
- ldrsh r0, [r3, r1]
- movs r2, 0x24
- ldrsh r1, [r3, r2]
- adds r0, r1
- movs r1, 0xE0
- negs r1, r1
- cmp r0, r1
- bge _080C368C
- adds r0, r3, 0
- bl sub_80C3564
-_080C368C:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080C3694: .4byte gSprites
- thumb_func_end sub_80C3630
-
- thumb_func_start sub_80C3698
-sub_80C3698: @ 80C3698
- push {r4-r7,lr}
- adds r4, r0, 0
- ldr r5, _080C374C @ =gSharedMem + 0x18000
- ldrb r1, [r5, 0x1]
- bl sub_80C3158
- adds r0, r4, 0
- bl sub_80C34AC
- lsls r0, 16
- lsrs r0, 16
- ldrb r2, [r5, 0x1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- ldr r3, _080C3750 @ =gSprites
- adds r4, r1, r3
- adds r0, 0x20
- strh r0, [r4, 0x20]
- movs r0, 0x50
- strh r0, [r4, 0x22]
- adds r5, r4, 0
- adds r5, 0x3E
- ldrb r1, [r5]
- movs r2, 0x5
- negs r2, r2
- adds r0, r2, 0
- ands r0, r1
- strb r0, [r5]
- movs r5, 0
- adds r6, r3, 0
- mov r12, r2
- movs r3, 0x40
-_080C36DA:
- lsls r0, r5, 1
- adds r2, r4, 0
- adds r2, 0x2E
- adds r2, r0
- movs r1, 0
- ldrsh r0, [r2, r1]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r6
- ldrh r0, [r4, 0x24]
- ldrh r7, [r4, 0x20]
- adds r0, r7
- adds r0, r3
- strh r0, [r1, 0x20]
- movs r0, 0
- ldrsh r1, [r2, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- ldrh r1, [r4, 0x22]
- strh r1, [r0, 0x22]
- movs r1, 0
- ldrsh r0, [r2, r1]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r6
- adds r1, 0x3E
- ldrb r2, [r1]
- mov r0, r12
- ands r0, r2
- strb r0, [r1]
- adds r3, 0x40
- adds r5, 0x1
- cmp r5, 0x2
- ble _080C36DA
- ldr r1, _080C3754 @ =gBattle_WIN0H
- movs r0, 0xF0
- strh r0, [r1]
- ldr r2, _080C3758 @ =gBattle_WIN0V
- ldrh r1, [r4, 0x22]
- adds r0, r1, 0
- subs r0, 0x10
- lsls r0, 8
- adds r1, 0x10
- orrs r0, r1
- strh r0, [r2]
- ldr r1, _080C375C @ =REG_WININ
- ldr r2, _080C3760 @ =0x00003f3e
- adds r0, r2, 0
- strh r0, [r1]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080C374C: .4byte gSharedMem + 0x18000
-_080C3750: .4byte gSprites
-_080C3754: .4byte gBattle_WIN0H
-_080C3758: .4byte gBattle_WIN0V
-_080C375C: .4byte REG_WININ
-_080C3760: .4byte 0x00003f3e
- thumb_func_end sub_80C3698
-
- thumb_func_start sub_80C3764
-sub_80C3764: @ 80C3764
- push {r4-r7,lr}
- ldr r0, _080C37C8 @ =gSharedMem + 0x18000
- ldrb r0, [r0, 0x1]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r3, _080C37CC @ =gSprites
- adds r2, r3
- movs r0, 0x3E
- adds r0, r2
- mov r12, r0
- ldrb r0, [r0]
- movs r1, 0x4
- orrs r0, r1
- mov r1, r12
- strb r0, [r1]
- ldr r7, _080C37D0 @ =gBattle_WIN0H
- ldr r6, _080C37D4 @ =gBattle_WIN0V
- adds r5, r3, 0
- movs r4, 0x4
- adds r2, 0x2E
- movs r3, 0x2
-_080C3790:
- movs r1, 0
- ldrsh r0, [r2, r1]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- adds r1, 0x3E
- ldrb r0, [r1]
- orrs r0, r4
- strb r0, [r1]
- adds r2, 0x2
- subs r3, 0x1
- cmp r3, 0
- bge _080C3790
- movs r1, 0
- strh r1, [r7]
- strh r1, [r6]
- ldr r0, _080C37D8 @ =REG_WIN0H
- strh r1, [r0]
- adds r0, 0x4
- strh r1, [r0]
- ldr r1, _080C37DC @ =REG_WININ
- ldr r2, _080C37E0 @ =0x00003f3f
- adds r0, r2, 0
- strh r0, [r1]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080C37C8: .4byte gSharedMem + 0x18000
-_080C37CC: .4byte gSprites
-_080C37D0: .4byte gBattle_WIN0H
-_080C37D4: .4byte gBattle_WIN0V
-_080C37D8: .4byte REG_WIN0H
-_080C37DC: .4byte REG_WININ
-_080C37E0: .4byte 0x00003f3f
- thumb_func_end sub_80C3764
-
-.ifdef ENGLISH
- thumb_func_start sub_80C37E4
-sub_80C37E4: @ 80C37E4
- push {r4-r6,lr}
- sub sp, 0x10
- movs r5, 0x1
- movs r4, 0
- ldr r0, _080C3808 @ =gIsLinkContest
- ldrb r0, [r0]
- adds r1, r5, 0
- ands r1, r0
- cmp r1, 0
- beq _080C3814
- ldr r0, _080C380C @ =0x0600e000
- ldr r3, _080C3810 @ =gUnknown_08E964B8
- movs r1, 0x9
- str r1, [sp]
- movs r2, 0x2
- str r2, [sp, 0x4]
- b _080C386A
- .align 2, 0
-_080C3808: .4byte gIsLinkContest
-_080C380C: .4byte 0x0600e000
-_080C3810: .4byte gUnknown_08E964B8
-_080C3814:
- ldr r0, _080C3830 @ =gSpecialVar_ContestRank
- ldrh r2, [r0]
- cmp r2, 0
- bne _080C383C
- movs r4, 0x1
- ldr r0, _080C3834 @ =0x0600e000
- ldr r3, _080C3838 @ =gUnknown_08E964B8
- str r2, [sp]
- str r2, [sp, 0x4]
- movs r1, 0x9
- str r1, [sp, 0x8]
- movs r1, 0x2
- str r1, [sp, 0xC]
- b _080C3870
- .align 2, 0
-_080C3830: .4byte gSpecialVar_ContestRank
-_080C3834: .4byte 0x0600e000
-_080C3838: .4byte gUnknown_08E964B8
-_080C383C:
- cmp r2, 0x1
- bne _080C385C
- ldr r0, _080C3854 @ =0x0600e000
- ldr r3, _080C3858 @ =gUnknown_08E964B8
- movs r1, 0x9
- str r1, [sp]
- str r4, [sp, 0x4]
- movs r1, 0x8
- str r1, [sp, 0x8]
- movs r1, 0x2
- str r1, [sp, 0xC]
- b _080C3870
- .align 2, 0
-_080C3854: .4byte 0x0600e000
-_080C3858: .4byte gUnknown_08E964B8
-_080C385C:
- cmp r2, 0x2
- bne _080C3884
- ldr r0, _080C387C @ =0x0600e000
- ldr r3, _080C3880 @ =gUnknown_08E964B8
- movs r1, 0x11
- str r1, [sp]
- str r4, [sp, 0x4]
-_080C386A:
- movs r1, 0x8
- str r1, [sp, 0x8]
- str r2, [sp, 0xC]
-_080C3870:
- movs r1, 0x5
- movs r2, 0x1
- bl sub_809D104
- b _080C389E
- .align 2, 0
-_080C387C: .4byte 0x0600e000
-_080C3880: .4byte gUnknown_08E964B8
-_080C3884:
- movs r4, 0x1
- ldr r0, _080C38C0 @ =0x0600e000
- ldr r3, _080C38C4 @ =gUnknown_08E964B8
- str r1, [sp]
- movs r2, 0x2
- str r2, [sp, 0x4]
- movs r1, 0x9
- str r1, [sp, 0x8]
- str r2, [sp, 0xC]
- movs r1, 0x5
- movs r2, 0x1
- bl sub_809D104
-_080C389E:
- adds r4, 0xD
- ldr r0, _080C38C8 @ =gSpecialVar_ContestCategory
- ldrh r0, [r0]
- cmp r0, 0
- bne _080C38CC
- movs r6, 0
- ldr r0, _080C38C0 @ =0x0600e000
- ldr r3, _080C38C4 @ =gUnknown_08E964B8
- movs r1, 0x11
- str r1, [sp]
- movs r2, 0x2
- str r2, [sp, 0x4]
- movs r1, 0xA
- str r1, [sp, 0x8]
- str r2, [sp, 0xC]
- b _080C392A
- .align 2, 0
-_080C38C0: .4byte 0x0600e000
-_080C38C4: .4byte gUnknown_08E964B8
-_080C38C8: .4byte gSpecialVar_ContestCategory
-_080C38CC:
- cmp r0, 0x1
- bne _080C38EC
- movs r6, 0x1
- ldr r0, _080C38E4 @ =0x0600e000
- ldr r3, _080C38E8 @ =gUnknown_08E964B8
- movs r1, 0
- str r1, [sp]
- movs r1, 0x4
- str r1, [sp, 0x4]
- movs r1, 0xB
- b _080C3924
- .align 2, 0
-_080C38E4: .4byte 0x0600e000
-_080C38E8: .4byte gUnknown_08E964B8
-_080C38EC:
- cmp r0, 0x2
- bne _080C3910
- movs r6, 0x2
- ldr r0, _080C3908 @ =0x0600e000
- ldr r3, _080C390C @ =gUnknown_08E964B8
- movs r1, 0xB
- str r1, [sp]
- movs r1, 0x4
- str r1, [sp, 0x4]
- movs r1, 0xA
- str r1, [sp, 0x8]
- str r6, [sp, 0xC]
- b _080C392A
- .align 2, 0
-_080C3908: .4byte 0x0600e000
-_080C390C: .4byte gUnknown_08E964B8
-_080C3910:
- cmp r0, 0x3
- bne _080C393C
- movs r6, 0x3
- ldr r0, _080C3934 @ =0x0600e000
- ldr r3, _080C3938 @ =gUnknown_08E964B8
- movs r1, 0x15
- str r1, [sp]
- movs r1, 0x4
- str r1, [sp, 0x4]
- movs r1, 0xA
-_080C3924:
- str r1, [sp, 0x8]
- movs r1, 0x2
- str r1, [sp, 0xC]
-_080C392A:
- adds r1, r4, 0
- adds r2, r5, 0
- bl sub_809D104
- b _080C395A
- .align 2, 0
-_080C3934: .4byte 0x0600e000
-_080C3938: .4byte gUnknown_08E964B8
-_080C393C:
- movs r6, 0x4
- ldr r0, _080C3984 @ =0x0600e000
- ldr r3, _080C3988 @ =gUnknown_08E964B8
- movs r1, 0
- str r1, [sp]
- movs r1, 0x6
- str r1, [sp, 0x4]
- movs r1, 0xA
- str r1, [sp, 0x8]
- movs r1, 0x2
- str r1, [sp, 0xC]
- adds r1, r4, 0
- adds r2, r5, 0
- bl sub_809D104
-_080C395A:
- ldr r5, _080C398C @ =0x00000fff
- lsls r4, r6, 12
- ldr r2, _080C3984 @ =0x0600e000
- movs r3, 0x7F
-_080C3962:
- ldrh r1, [r2]
- adds r0, r5, 0
- ands r0, r1
- strh r0, [r2]
- ldrh r1, [r2]
- adds r0, r4, 0
- orrs r0, r1
- strh r0, [r2]
- adds r2, 0x2
- subs r3, 0x1
- cmp r3, 0
- bge _080C3962
- add sp, 0x10
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080C3984: .4byte 0x0600e000
-_080C3988: .4byte gUnknown_08E964B8
-_080C398C: .4byte 0x00000fff
- thumb_func_end sub_80C37E4
-.else
- thumb_func_start de_sub_80C39A8
-de_sub_80C39A8: @ 80C39A8
- push {r4,lr}
- sub sp, 0x10
- adds r1, r0, 0
- ldr r0, _de_080C39DC @ =gIsLinkContest
- ldrb r0, [r0]
- movs r4, 0x1
- ands r4, r0
- cmp r4, 0
- beq _de_080C39E8
- ldr r0, _de_080C39E0 @ =0x0600e000
- lsls r1, 16
- lsrs r1, 16
- ldr r3, _de_080C39E4 @ =gUnknown_08E964B8
- movs r2, 0xB
- str r2, [sp]
- movs r4, 0x3
- str r4, [sp, 0x4]
- movs r2, 0x8
- str r2, [sp, 0x8]
- str r4, [sp, 0xC]
- movs r2, 0
- bl sub_809D104
- movs r0, 0x8
- b _de_080C3A74
- .align 2, 0
-_de_080C39DC: .4byte gIsLinkContest
-_de_080C39E0: .4byte 0x0600e000
-_de_080C39E4: .4byte gUnknown_08E964B8
-_de_080C39E8:
- ldr r0, _de_080C3A08 @ =gSpecialVar_ContestRank
- ldrh r0, [r0]
- cmp r0, 0
- bne _de_080C3A14
- ldr r0, _de_080C3A0C @ =0x0600e000
- lsls r1, 16
- lsrs r1, 16
- ldr r3, _de_080C3A10 @ =gUnknown_08E964B8
- str r4, [sp]
- str r4, [sp, 0x4]
- movs r2, 0xB
- str r2, [sp, 0x8]
- movs r2, 0x3
- str r2, [sp, 0xC]
- b _de_080C3A6C
- .align 2, 0
-_de_080C3A08: .4byte gSpecialVar_ContestRank
-_de_080C3A0C: .4byte 0x0600e000
-_de_080C3A10: .4byte gUnknown_08E964B8
-_de_080C3A14:
- cmp r0, 0x1
- bne _de_080C3A2C
- ldr r0, _de_080C3A24 @ =0x0600e000
- lsls r1, 16
- lsrs r1, 16
- ldr r3, _de_080C3A28 @ =gUnknown_08E964B8
- movs r2, 0xB
- b _de_080C3A3A
- .align 2, 0
-_de_080C3A24: .4byte 0x0600e000
-_de_080C3A28: .4byte gUnknown_08E964B8
-_de_080C3A2C:
- cmp r0, 0x2
- bne _de_080C3A58
- ldr r0, _de_080C3A50 @ =0x0600e000
- lsls r1, 16
- lsrs r1, 16
- ldr r3, _de_080C3A54 @ =gUnknown_08E964B8
- movs r2, 0x15
-_de_080C3A3A:
- str r2, [sp]
- str r4, [sp, 0x4]
- movs r2, 0xA
- str r2, [sp, 0x8]
- movs r2, 0x3
- str r2, [sp, 0xC]
- movs r2, 0
- bl sub_809D104
- movs r0, 0xA
- b _de_080C3A74
- .align 2, 0
-_de_080C3A50: .4byte 0x0600e000
-_de_080C3A54: .4byte gUnknown_08E964B8
-_de_080C3A58:
- ldr r0, _de_080C3A7C @ =0x0600e000
- lsls r1, 16
- lsrs r1, 16
- ldr r3, _de_080C3A80 @ =gUnknown_08E964B8
- str r4, [sp]
- movs r4, 0x3
- str r4, [sp, 0x4]
- movs r2, 0xB
- str r2, [sp, 0x8]
- str r4, [sp, 0xC]
-_de_080C3A6C:
- movs r2, 0
- bl sub_809D104
- movs r0, 0xB
-_de_080C3A74:
- add sp, 0x10
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_de_080C3A7C: .4byte 0x0600e000
-_de_080C3A80: .4byte gUnknown_08E964B8
- thumb_func_end de_sub_80C39A8
-
- thumb_func_start de_sub_80C3A84
-de_sub_80C3A84: @ 80C3A84
- push {r4,lr}
- sub sp, 0x10
- adds r2, r0, 0
- ldr r0, _de_080C3AAC @ =gSpecialVar_ContestCategory
- ldrh r4, [r0]
- cmp r4, 0
- bne _de_080C3AB8
- str r4, [r1]
- ldr r0, _de_080C3AB0 @ =0x0600e000
- lsls r1, r2, 16
- lsrs r1, 16
- ldr r3, _de_080C3AB4 @ =gUnknown_08E964B8
- movs r2, 0x13
- str r2, [sp]
- movs r4, 0x3
- str r4, [sp, 0x4]
- movs r2, 0x7
- str r2, [sp, 0x8]
- str r4, [sp, 0xC]
- b _de_080C3AD6
- .align 2, 0
-_de_080C3AAC: .4byte gSpecialVar_ContestCategory
-_de_080C3AB0: .4byte 0x0600e000
-_de_080C3AB4: .4byte gUnknown_08E964B8
-_de_080C3AB8:
- cmp r4, 0x1
- bne _de_080C3AE8
- str r4, [r1]
- ldr r0, _de_080C3AE0 @ =0x0600e000
- lsls r1, r2, 16
- lsrs r1, 16
- ldr r3, _de_080C3AE4 @ =gUnknown_08E964B8
- movs r2, 0
- str r2, [sp]
- movs r2, 0x6
- str r2, [sp, 0x4]
- movs r2, 0x7
- str r2, [sp, 0x8]
- movs r2, 0x3
- str r2, [sp, 0xC]
-_de_080C3AD6:
- movs r2, 0
- bl sub_809D104
- movs r0, 0x7
- b _de_080C3B68
- .align 2, 0
-_de_080C3AE0: .4byte 0x0600e000
-_de_080C3AE4: .4byte gUnknown_08E964B8
-_de_080C3AE8:
- cmp r4, 0x2
- bne _de_080C3B18
- str r4, [r1]
- ldr r0, _de_080C3B10 @ =0x0600e000
- lsls r1, r2, 16
- lsrs r1, 16
- ldr r3, _de_080C3B14 @ =gUnknown_08E964B8
- movs r2, 0x7
- str r2, [sp]
- movs r2, 0x6
- str r2, [sp, 0x4]
- movs r2, 0x4
- str r2, [sp, 0x8]
- movs r2, 0x3
- str r2, [sp, 0xC]
- movs r2, 0
- bl sub_809D104
- movs r0, 0x4
- b _de_080C3B68
- .align 2, 0
-_de_080C3B10: .4byte 0x0600e000
-_de_080C3B14: .4byte gUnknown_08E964B8
-_de_080C3B18:
- cmp r4, 0x3
- bne _de_080C3B44
- str r4, [r1]
- ldr r0, _de_080C3B3C @ =0x0600e000
- lsls r1, r2, 16
- lsrs r1, 16
- ldr r3, _de_080C3B40 @ =gUnknown_08E964B8
- movs r2, 0xB
- str r2, [sp]
- movs r2, 0x6
- str r2, [sp, 0x4]
- str r2, [sp, 0x8]
- str r4, [sp, 0xC]
- movs r2, 0
- bl sub_809D104
- movs r0, 0x6
- b _de_080C3B68
- .align 2, 0
-_de_080C3B3C: .4byte 0x0600e000
-_de_080C3B40: .4byte gUnknown_08E964B8
-_de_080C3B44:
- movs r0, 0x4
- str r0, [r1]
- ldr r0, _de_080C3B70 @ =0x0600e000
- lsls r1, r2, 16
- lsrs r1, 16
- ldr r3, _de_080C3B74 @ =gUnknown_08E964B8
- movs r2, 0x11
- str r2, [sp]
- movs r2, 0x6
- str r2, [sp, 0x4]
- movs r2, 0x5
- str r2, [sp, 0x8]
- movs r2, 0x3
- str r2, [sp, 0xC]
- movs r2, 0
- bl sub_809D104
- movs r0, 0x5
-_de_080C3B68:
- add sp, 0x10
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_de_080C3B70: .4byte 0x0600e000
-_de_080C3B74: .4byte gUnknown_08E964B8
- thumb_func_end de_sub_80C3A84
-
- thumb_func_start sub_80C37E4
-sub_80C37E4: @ 80C37E4
- push {r4,r5,lr}
- sub sp, 0x4
- movs r0, 0x6
- bl de_sub_80C39A8
- lsls r0, 16
- asrs r0, 16
- adds r0, 0x6
- mov r1, sp
- bl de_sub_80C3A84
- ldr r5, _080C3824 @ =0x00000fff
- ldr r0, [sp]
- lsls r4, r0, 12
- ldr r2, _080C3828 @ =0x0600e000
- movs r3, 0x7F
-_080C3804:
- ldrh r1, [r2]
- adds r0, r5, 0
- ands r0, r1
- strh r0, [r2]
- ldrh r1, [r2]
- adds r0, r4, 0
- orrs r0, r1
- strh r0, [r2]
- adds r2, 0x2
- subs r3, 0x1
- cmp r3, 0
- bge _080C3804
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080C3824: .4byte 0x00000fff
-_080C3828: .4byte 0x0600e000
- thumb_func_end sub_80C37E4
-.endif
-
thumb_func_start sub_80C3990
sub_80C3990: @ 80C3990
push {r4,r5,lr}
diff --git a/include/gba/io_reg.h b/include/gba/io_reg.h
index 4208a7a14..2dda7b5ac 100644
--- a/include/gba/io_reg.h
+++ b/include/gba/io_reg.h
@@ -538,6 +538,40 @@
#define BGCNT_AFF512x512 0x8000
#define BGCNT_AFF1024x1024 0xC000
+// WININ/OUT
+#define WININ_WIN0_BG0 (1 << 0)
+#define WININ_WIN0_BG1 (1 << 1)
+#define WININ_WIN0_BG2 (1 << 2)
+#define WININ_WIN0_BG3 (1 << 3)
+#define WININ_WIN0_BG_ALL (WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_BG3)
+#define WININ_WIN0_OBJ (1 << 4)
+#define WININ_WIN0_CLR (1 << 5)
+#define WININ_WIN1_BG0 (1 << 8)
+#define WININ_WIN1_BG1 (1 << 9)
+#define WININ_WIN1_BG2 (1 << 10)
+#define WININ_WIN1_BG3 (1 << 11)
+#define WININ_WIN1_BG_ALL (WININ_WIN1_BG0 | WININ_WIN1_BG1 | WININ_WIN1_BG2 | WININ_WIN1_BG3)
+#define WININ_WIN1_OBJ (1 << 12)
+#define WININ_WIN1_CLR (1 << 13)
+
+#define WINOUT_WIN01_BG0 (1 << 0)
+#define WINOUT_WIN01_BG1 (1 << 1)
+#define WINOUT_WIN01_BG2 (1 << 2)
+#define WINOUT_WIN01_BG3 (1 << 3)
+#define WINOUT_WIN01_BG_ALL (WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3)
+#define WINOUT_WIN01_OBJ (1 << 4)
+#define WINOUT_WIN01_CLR (1 << 5)
+#define WINOUT_WINOBJ_BG0 (1 << 8)
+#define WINOUT_WINOBJ_BG1 (1 << 9)
+#define WINOUT_WINOBJ_BG2 (1 << 10)
+#define WINOUT_WINOBJ_BG3 (1 << 11)
+#define WINOUT_WINOBJ_BG_ALL (WINOUT_WINOBJ_BG0 | WINOUT_WINOBJ_BG1 | WINOUT_WINOBJ_BG2 | WINOUT_WINOBJ_BG3)
+#define WINOUT_WINOBJ_OBJ (1 << 12)
+#define WINOUT_WINOBJ_CLR (1 << 13)
+
+#define WIN_RANGE(a, b) (((a) << 8) | (b))
+#define WIN_RANGE2(a, b) ((b) | ((a) << 8))
+
// BLDCNT
// Bits 0-5 select layers for the 1st target
#define BLDCNT_TGT1_BG0 (1 << 0)
diff --git a/include/graphics.h b/include/graphics.h
index 9934c22a5..c6f77f37d 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -3422,4 +3422,6 @@ extern const u8 Tiles_D129AC[];
extern const u8 gAreaUnknownTiles[];
extern const u16 gAreaUnknownPalette[];
+extern const u8 gUnknown_08E964B8[];
+
#endif // GUARD_GRAPHICS_H
diff --git a/src/battle/contest_link_80C2020.c b/src/battle/contest_link_80C2020.c
index db1210cdb..43f6b970e 100644
--- a/src/battle/contest_link_80C2020.c
+++ b/src/battle/contest_link_80C2020.c
@@ -25,6 +25,7 @@
#include "field_specials.h"
#include "contest_link_80C857C.h"
#include "contest_link_80C2020.h"
+#include "pokemon_storage_system.h"
#define ABS(x) ((x) < 0 ? -(x) : (x))
@@ -84,8 +85,11 @@ void sub_80C310C(void);
void sub_80C3158(const u8 *string, u8 spriteId);
void sub_80C33DC(void);
u16 sub_80C34AC(const u8 *string);
-void sub_80C34CC(s16 data4, s16 pos0y, u16 data5, s16 data6);
+void sub_80C34CC(s16 data4, u16 pos0y, u16 data5, u16 data6);
void sub_80C3520(u16 a0);
+void sub_80C3588(struct Sprite *sprite);
+void sub_80C35FC(struct Sprite *sprite);
+void sub_80C3630(struct Sprite *sprite);
void sub_80C3698(const u8 *string);
void sub_80C3764(void);
void sub_80C37E4(void);
@@ -1252,3 +1256,506 @@ u16 sub_80C34AC(const u8 * string)
u8 width = (StringLength(string) * 6);
return 0x70 - (width / 2);
}
+
+void sub_80C34CC(s16 arg0, u16 y, u16 arg2, u16 arg3)
+{
+ struct Sprite *sprite = &gSprites[eContestLink80C2020Struct2018000.unk_00];
+ sprite->pos1.x = 272;
+ sprite->pos1.y = y;
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 0;
+ sprite->data[4] = arg0 + 32;
+ sprite->data[5] = arg2;
+ sprite->data[6] = arg3;
+ sprite->data[7] = 0;
+ sprite->callback = sub_80C3588;
+ eContestLink80C2020Struct2018000.unk_04 = 1;
+}
+
+void sub_80C3520(u16 arg0)
+{
+ struct Sprite *sprite = &gSprites[eContestLink80C2020Struct2018000.unk_00];
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+ sprite->data[6] = arg0;
+ sprite->data[7] = 0;
+ sprite->callback = sub_80C3630;
+ eContestLink80C2020Struct2018000.unk_04 = 3;
+}
+
+void sub_80C3564(struct Sprite *sprite)
+{
+ sprite->pos1.x = 272;
+ sprite->pos1.y = 144;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+ sprite->callback = SpriteCallbackDummy;
+ eContestLink80C2020Struct2018000.unk_04 = 0;
+}
+
+
+void sub_80C3588(struct Sprite *sprite)
+{
+ int i;
+ s16 var0;
+
+ var0 = (u16)sprite->data[7] + (u16)sprite->data[6];
+ sprite->pos1.x -= var0 >> 8;
+ sprite->data[7] = (sprite->data[6] + sprite->data[7]) & 0xFF;
+ if (sprite->pos1.x < sprite->data[4])
+ sprite->pos1.x = sprite->data[4];
+
+ for (i = 0; i < 3; i++)
+ {
+ struct Sprite *sprite2 = &gSprites[sprite->data[i]];
+ sprite2->pos1.x = sprite->pos1.x + sprite->pos2.x + (i + 1) * 64;
+ }
+
+ if (sprite->pos1.x == sprite->data[4])
+ sprite->callback = sub_80C35FC;
+}
+
+void sub_80C35FC(struct Sprite *sprite)
+{
+ eContestLink80C2020Struct2018000.unk_04 = 2;
+ if ((u16)sprite->data[5] != 0xFFFF)
+ {
+ if (--sprite->data[5] == -1)
+ sub_80C3520(sprite->data[6]);
+ }
+}
+
+void sub_80C3630(struct Sprite *sprite)
+{
+ int i;
+ s16 var0;
+
+ var0 = (u16)sprite->data[7] + (u16)sprite->data[6];
+ sprite->pos1.x -= var0 >> 8;
+ sprite->data[7] = (sprite->data[6] + sprite->data[7]) & 0xFF;
+ for (i = 0; i < 3; i++)
+ {
+ struct Sprite *sprite2 = &gSprites[sprite->data[i]];
+ sprite2->pos1.x = sprite->pos1.x + sprite->pos2.x + (i + 1) * 64;
+ }
+
+ if (sprite->pos1.x + sprite->pos2.x < -224)
+ sub_80C3564(sprite);
+}
+
+void sub_80C3698(const u8 *text)
+{
+ int i;
+ u16 x;
+ struct Sprite *sprite;
+
+ sub_80C3158(text, eContestLink80C2020Struct2018000.unk_01);
+ x = sub_80C34AC(text);
+ sprite = &gSprites[eContestLink80C2020Struct2018000.unk_01];
+ sprite->pos1.x = x + 32;
+ sprite->pos1.y = 80;
+ sprite->invisible = 0;
+ for (i = 0; i < 3; i++)
+ {
+ gSprites[sprite->data[i]].pos1.x = sprite->pos1.x + sprite->pos2.x + (i + 1) * 64;
+ gSprites[sprite->data[i]].pos1.y = sprite->pos1.y;
+ gSprites[sprite->data[i]].invisible = 0;
+ }
+
+ gBattle_WIN0H = 0x00F0;
+ gBattle_WIN0V = ((sprite->pos1.y - 16) << 8) | (sprite->pos1.y + 16);
+ REG_WININ = WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR | WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_BG3 | WININ_WIN0_OBJ | WININ_WIN0_CLR;
+}
+
+void sub_80C3764(void)
+{
+ int i;
+ struct Sprite *sprite;
+
+ sprite = &gSprites[eContestLink80C2020Struct2018000.unk_01];
+ sprite->invisible = 1;
+ for (i = 0; i < 3; i++)
+ gSprites[sprite->data[i]].invisible = 1;
+
+ gBattle_WIN0H = 0;
+ gBattle_WIN0V = 0;
+ REG_WIN0H = gBattle_WIN0H;
+ REG_WIN0V = gBattle_WIN0V;
+ REG_WININ = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR;
+}
+
+#ifdef ENGLISH
+#ifdef NONMATCHING
+static inline s32 de_sub_80C39A8(s32 a0)
+{
+ s32 result = 0;
+ if (gIsLinkContest & 0x1)
+ {
+ sub_809D104((void *)0x0600E000, a0, 1, gUnknown_08E964B8, 9, 2, 8, 2);
+ result = 8;
+ }
+ else if (gSpecialVar_ContestRank == 0)
+ {
+ sub_809D104((void *)0x0600E000, a0, 1, gUnknown_08E964B8, 0, 0, 9, 2);
+ result = 9;
+ }
+ else if (gSpecialVar_ContestRank == 1)
+ {
+ sub_809D104((void *)0x0600E000, a0, 1, gUnknown_08E964B8, 9, 0, 8, 2);
+ result = 8;
+ }
+ else if (gSpecialVar_ContestRank == 2)
+ {
+ sub_809D104((void *)0x0600E000, a0, 1, gUnknown_08E964B8, 17, 0, 8, 2);
+ result = 8;
+ }
+ else
+ {
+ sub_809D104((void *)0x0600E000, a0, 1, gUnknown_08E964B8, 0, 2, 9, 2);
+ result = 9;
+ }
+ return result;
+}
+
+static inline s32 de_sub_80C3A84(s32 a0, s32 * a1)
+{
+ s32 result;
+ if (gSpecialVar_ContestCategory == 0)
+ {
+ *a1 = 0;
+ sub_809D104((void *)0x0600E000, a0, 1, gUnknown_08E964B8, 17, 2, 10, 2);
+ result = 10;
+ }
+ else if (gSpecialVar_ContestCategory == 1)
+ {
+ *a1 = 1;
+ sub_809D104((void *)0x0600E000, a0, 1, gUnknown_08E964B8, 0, 4, 11, 2);
+ result = 11;
+ }
+ else if (gSpecialVar_ContestCategory == 2)
+ {
+ *a1 = 2;
+ sub_809D104((void *)0x0600E000, a0, 1, gUnknown_08E964B8, 11, 4, 10, 2);
+ result = 10;
+ }
+ else if (gSpecialVar_ContestCategory == 3)
+ {
+ *a1 = 3;
+ sub_809D104((void *)0x0600E000, a0, 1, gUnknown_08E964B8, 21, 4, 10, 2);
+ result = 10;
+ }
+ else
+ {
+ *a1 = 4;
+ sub_809D104((void *)0x0600E000, a0, 1, gUnknown_08E964B8, 0, 6, 10, 2);
+ result = 10;
+ }
+ return result;
+}
+
+void sub_80C37E4(void)
+{
+ s32 sp0;
+ s32 i;
+ de_sub_80C3A84(de_sub_80C39A8(5) + 5, &sp0);
+ for (i = 0; i < 0x80; i++)
+ {
+ ((vu16 *)0x0600E000)[i] &= 0xFFF;
+ ((vu16 *)0x0600E000)[i] |= sp0 << 12;;
+ }
+}
+#else
+NAKED
+void sub_80C37E4(void)
+{
+ asm_unified("\tpush {r4-r6,lr}\n"
+ "\tsub sp, 0x10\n"
+ "\tmovs r5, 0x1\n"
+ "\tmovs r4, 0\n"
+ "\tldr r0, _080C3808 @ =gIsLinkContest\n"
+ "\tldrb r0, [r0]\n"
+ "\tadds r1, r5, 0\n"
+ "\tands r1, r0\n"
+ "\tcmp r1, 0\n"
+ "\tbeq _080C3814\n"
+ "\tldr r0, _080C380C @ =0x0600e000\n"
+ "\tldr r3, _080C3810 @ =gUnknown_08E964B8\n"
+ "\tmovs r1, 0x9\n"
+ "\tstr r1, [sp]\n"
+ "\tmovs r2, 0x2\n"
+ "\tstr r2, [sp, 0x4]\n"
+ "\tb _080C386A\n"
+ "\t.align 2, 0\n"
+ "_080C3808: .4byte gIsLinkContest\n"
+ "_080C380C: .4byte 0x0600e000\n"
+ "_080C3810: .4byte gUnknown_08E964B8\n"
+ "_080C3814:\n"
+ "\tldr r0, _080C3830 @ =gSpecialVar_ContestRank\n"
+ "\tldrh r2, [r0]\n"
+ "\tcmp r2, 0\n"
+ "\tbne _080C383C\n"
+ "\tmovs r4, 0x1\n"
+ "\tldr r0, _080C3834 @ =0x0600e000\n"
+ "\tldr r3, _080C3838 @ =gUnknown_08E964B8\n"
+ "\tstr r2, [sp]\n"
+ "\tstr r2, [sp, 0x4]\n"
+ "\tmovs r1, 0x9\n"
+ "\tstr r1, [sp, 0x8]\n"
+ "\tmovs r1, 0x2\n"
+ "\tstr r1, [sp, 0xC]\n"
+ "\tb _080C3870\n"
+ "\t.align 2, 0\n"
+ "_080C3830: .4byte gSpecialVar_ContestRank\n"
+ "_080C3834: .4byte 0x0600e000\n"
+ "_080C3838: .4byte gUnknown_08E964B8\n"
+ "_080C383C:\n"
+ "\tcmp r2, 0x1\n"
+ "\tbne _080C385C\n"
+ "\tldr r0, _080C3854 @ =0x0600e000\n"
+ "\tldr r3, _080C3858 @ =gUnknown_08E964B8\n"
+ "\tmovs r1, 0x9\n"
+ "\tstr r1, [sp]\n"
+ "\tstr r4, [sp, 0x4]\n"
+ "\tmovs r1, 0x8\n"
+ "\tstr r1, [sp, 0x8]\n"
+ "\tmovs r1, 0x2\n"
+ "\tstr r1, [sp, 0xC]\n"
+ "\tb _080C3870\n"
+ "\t.align 2, 0\n"
+ "_080C3854: .4byte 0x0600e000\n"
+ "_080C3858: .4byte gUnknown_08E964B8\n"
+ "_080C385C:\n"
+ "\tcmp r2, 0x2\n"
+ "\tbne _080C3884\n"
+ "\tldr r0, _080C387C @ =0x0600e000\n"
+ "\tldr r3, _080C3880 @ =gUnknown_08E964B8\n"
+ "\tmovs r1, 0x11\n"
+ "\tstr r1, [sp]\n"
+ "\tstr r4, [sp, 0x4]\n"
+ "_080C386A:\n"
+ "\tmovs r1, 0x8\n"
+ "\tstr r1, [sp, 0x8]\n"
+ "\tstr r2, [sp, 0xC]\n"
+ "_080C3870:\n"
+ "\tmovs r1, 0x5\n"
+ "\tmovs r2, 0x1\n"
+ "\tbl sub_809D104\n"
+ "\tb _080C389E\n"
+ "\t.align 2, 0\n"
+ "_080C387C: .4byte 0x0600e000\n"
+ "_080C3880: .4byte gUnknown_08E964B8\n"
+ "_080C3884:\n"
+ "\tmovs r4, 0x1\n"
+ "\tldr r0, _080C38C0 @ =0x0600e000\n"
+ "\tldr r3, _080C38C4 @ =gUnknown_08E964B8\n"
+ "\tstr r1, [sp]\n"
+ "\tmovs r2, 0x2\n"
+ "\tstr r2, [sp, 0x4]\n"
+ "\tmovs r1, 0x9\n"
+ "\tstr r1, [sp, 0x8]\n"
+ "\tstr r2, [sp, 0xC]\n"
+ "\tmovs r1, 0x5\n"
+ "\tmovs r2, 0x1\n"
+ "\tbl sub_809D104\n"
+ "_080C389E:\n"
+ "\tadds r4, 0xD\n"
+ "\tldr r0, _080C38C8 @ =gSpecialVar_ContestCategory\n"
+ "\tldrh r0, [r0]\n"
+ "\tcmp r0, 0\n"
+ "\tbne _080C38CC\n"
+ "\tmovs r6, 0\n"
+ "\tldr r0, _080C38C0 @ =0x0600e000\n"
+ "\tldr r3, _080C38C4 @ =gUnknown_08E964B8\n"
+ "\tmovs r1, 0x11\n"
+ "\tstr r1, [sp]\n"
+ "\tmovs r2, 0x2\n"
+ "\tstr r2, [sp, 0x4]\n"
+ "\tmovs r1, 0xA\n"
+ "\tstr r1, [sp, 0x8]\n"
+ "\tstr r2, [sp, 0xC]\n"
+ "\tb _080C392A\n"
+ "\t.align 2, 0\n"
+ "_080C38C0: .4byte 0x0600e000\n"
+ "_080C38C4: .4byte gUnknown_08E964B8\n"
+ "_080C38C8: .4byte gSpecialVar_ContestCategory\n"
+ "_080C38CC:\n"
+ "\tcmp r0, 0x1\n"
+ "\tbne _080C38EC\n"
+ "\tmovs r6, 0x1\n"
+ "\tldr r0, _080C38E4 @ =0x0600e000\n"
+ "\tldr r3, _080C38E8 @ =gUnknown_08E964B8\n"
+ "\tmovs r1, 0\n"
+ "\tstr r1, [sp]\n"
+ "\tmovs r1, 0x4\n"
+ "\tstr r1, [sp, 0x4]\n"
+ "\tmovs r1, 0xB\n"
+ "\tb _080C3924\n"
+ "\t.align 2, 0\n"
+ "_080C38E4: .4byte 0x0600e000\n"
+ "_080C38E8: .4byte gUnknown_08E964B8\n"
+ "_080C38EC:\n"
+ "\tcmp r0, 0x2\n"
+ "\tbne _080C3910\n"
+ "\tmovs r6, 0x2\n"
+ "\tldr r0, _080C3908 @ =0x0600e000\n"
+ "\tldr r3, _080C390C @ =gUnknown_08E964B8\n"
+ "\tmovs r1, 0xB\n"
+ "\tstr r1, [sp]\n"
+ "\tmovs r1, 0x4\n"
+ "\tstr r1, [sp, 0x4]\n"
+ "\tmovs r1, 0xA\n"
+ "\tstr r1, [sp, 0x8]\n"
+ "\tstr r6, [sp, 0xC]\n"
+ "\tb _080C392A\n"
+ "\t.align 2, 0\n"
+ "_080C3908: .4byte 0x0600e000\n"
+ "_080C390C: .4byte gUnknown_08E964B8\n"
+ "_080C3910:\n"
+ "\tcmp r0, 0x3\n"
+ "\tbne _080C393C\n"
+ "\tmovs r6, 0x3\n"
+ "\tldr r0, _080C3934 @ =0x0600e000\n"
+ "\tldr r3, _080C3938 @ =gUnknown_08E964B8\n"
+ "\tmovs r1, 0x15\n"
+ "\tstr r1, [sp]\n"
+ "\tmovs r1, 0x4\n"
+ "\tstr r1, [sp, 0x4]\n"
+ "\tmovs r1, 0xA\n"
+ "_080C3924:\n"
+ "\tstr r1, [sp, 0x8]\n"
+ "\tmovs r1, 0x2\n"
+ "\tstr r1, [sp, 0xC]\n"
+ "_080C392A:\n"
+ "\tadds r1, r4, 0\n"
+ "\tadds r2, r5, 0\n"
+ "\tbl sub_809D104\n"
+ "\tb _080C395A\n"
+ "\t.align 2, 0\n"
+ "_080C3934: .4byte 0x0600e000\n"
+ "_080C3938: .4byte gUnknown_08E964B8\n"
+ "_080C393C:\n"
+ "\tmovs r6, 0x4\n"
+ "\tldr r0, _080C3984 @ =0x0600e000\n"
+ "\tldr r3, _080C3988 @ =gUnknown_08E964B8\n"
+ "\tmovs r1, 0\n"
+ "\tstr r1, [sp]\n"
+ "\tmovs r1, 0x6\n"
+ "\tstr r1, [sp, 0x4]\n"
+ "\tmovs r1, 0xA\n"
+ "\tstr r1, [sp, 0x8]\n"
+ "\tmovs r1, 0x2\n"
+ "\tstr r1, [sp, 0xC]\n"
+ "\tadds r1, r4, 0\n"
+ "\tadds r2, r5, 0\n"
+ "\tbl sub_809D104\n"
+ "_080C395A:\n"
+ "\tldr r5, _080C398C @ =0x00000fff\n"
+ "\tlsls r4, r6, 12\n"
+ "\tldr r2, _080C3984 @ =0x0600e000\n"
+ "\tmovs r3, 0x7F\n"
+ "_080C3962:\n"
+ "\tldrh r1, [r2]\n"
+ "\tadds r0, r5, 0\n"
+ "\tands r0, r1\n"
+ "\tstrh r0, [r2]\n"
+ "\tldrh r1, [r2]\n"
+ "\tadds r0, r4, 0\n"
+ "\torrs r0, r1\n"
+ "\tstrh r0, [r2]\n"
+ "\tadds r2, 0x2\n"
+ "\tsubs r3, 0x1\n"
+ "\tcmp r3, 0\n"
+ "\tbge _080C3962\n"
+ "\tadd sp, 0x10\n"
+ "\tpop {r4-r6}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+ "_080C3984: .4byte 0x0600e000\n"
+ "_080C3988: .4byte gUnknown_08E964B8\n"
+ "_080C398C: .4byte 0x00000fff");
+}
+#endif // NONMATCHING
+
+#elif defined(GERMAN)
+s16 de_sub_80C39A8(s32 a0)
+{
+ s16 result;
+ if (gIsLinkContest & 1)
+ {
+ sub_809D104((void *)0x0600E000, a0, 0, gUnknown_08E964B8, 11, 3, 8, 3);
+ result = 8;
+ }
+ else if (gSpecialVar_ContestRank == 0)
+ {
+ sub_809D104((void *)0x0600E000, a0, 0, gUnknown_08E964B8, 0, 0, 11, 3);
+ result = 11;
+ }
+ else if (gSpecialVar_ContestRank == 1)
+ {
+ sub_809D104((void *)0x0600E000, a0, 0, gUnknown_08E964B8, 11, 0, 10, 3);
+ result = 10;
+ }
+ else if (gSpecialVar_ContestRank == 2)
+ {
+ sub_809D104((void *)0x0600E000, a0, 0, gUnknown_08E964B8, 21, 0, 10, 3);
+ result = 10;
+ }
+ else
+ {
+ sub_809D104((void *)0x0600E000, a0, 0, gUnknown_08E964B8, 0, 3, 11, 3);
+ result = 11;
+ }
+ return result;
+}
+
+s16 de_sub_80C3A84(s32 a0, s32 * a1)
+{
+ s16 result;
+ if (gSpecialVar_ContestCategory == 0)
+ {
+ *a1 = 0;
+ sub_809D104((void *)0x0600E000, a0, 0, gUnknown_08E964B8, 19, 3, 7, 3);
+ result = 7;
+ }
+ else if (gSpecialVar_ContestCategory == 1)
+ {
+ *a1 = 1;
+ sub_809D104((void *)0x0600E000, a0, 0, gUnknown_08E964B8, 0, 6, 7, 3);
+ result = 7;
+ }
+ else if (gSpecialVar_ContestCategory == 2)
+ {
+ *a1 = 2;
+ sub_809D104((void *)0x0600E000, a0, 0, gUnknown_08E964B8, 7, 6, 4, 3);
+ result = 4;
+ }
+ else if (gSpecialVar_ContestCategory == 3)
+ {
+ *a1 = 3;
+ sub_809D104((void *)0x0600E000, a0, 0, gUnknown_08E964B8, 11, 6, 6, 3);
+ result = 6;
+ }
+ else
+ {
+ *a1 = 4;
+ sub_809D104((void *)0x0600E000, a0, 0, gUnknown_08E964B8, 17, 6, 5, 3);
+ result = 5;
+ }
+ return result;
+}
+
+void sub_80C37E4(void)
+{
+ s32 sp0;
+ s32 i;
+ de_sub_80C3A84(de_sub_80C39A8(6) + 6, &sp0);
+ for (i = 0; i < 0x80; i++)
+ {
+ ((vu16 *)0x0600E000)[i] &= 0xFFF;
+ ((vu16 *)0x0600E000)[i] |= sp0 << 12;;
+ }
+}
+#endif
diff --git a/src/pokemon_storage_system_4.c b/src/pokemon_storage_system_4.c
index fff545492..3640e3961 100644
--- a/src/pokemon_storage_system_4.c
+++ b/src/pokemon_storage_system_4.c
@@ -3555,7 +3555,7 @@ void sub_809D0BC(struct UnkStruct_2000028 *unkStruct)
int width = unkStruct->unk_08;
for (i = 0; i < height; i++)
{
- CpuSet(src, dest, (width / 2) & 0x1FFFFF);
+ CpuCopy16(src, dest, width);
dest += 64;
src += 64;
}
@@ -3569,7 +3569,7 @@ void sub_809D104(u8 *dest, u16 dLeft, u16 dTop, const u8 *src, u16 sLeft, u16 sT
int width2 = width * 2;
while (to < end)
{
- CpuSet(from, to, (width2 / 2) & 0x1FFFFF);
+ CpuCopy16(from, to, width2);
to += 64;
from += 64;
}