summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Huderle <huderlem@gmail.com>2018-06-25 18:15:58 -0500
committerGitHub <noreply@github.com>2018-06-25 18:15:58 -0500
commitfa0e1ca4de35c9723a0972efeb6f7de4dca25594 (patch)
tree0cd68b160fa8d4a27cd65d6ffa80159b231f715c
parentf839afb24aa2c7b70e9c28a5c069aacc46993099 (diff)
parent605f8ac1141daf66d3428923e004f82f5a5e1594 (diff)
Merge pull request #552 from PikalaxALT/contest_link_80C2020
[DO NOT MERGE] Contest results tasks
-rw-r--r--asm/contest_link_80C2020.s2113
-rw-r--r--data/contest_link_80C2020.s78
-rw-r--r--include/battle.h15
-rw-r--r--include/contest.h1
-rw-r--r--include/graphics.h3
-rw-r--r--include/pokemon_icon.h2
-rw-r--r--include/tv.h1
-rw-r--r--ld_script.txt3
-rw-r--r--src/battle/anim/battle_intro.c7
-rw-r--r--src/battle/battle_2.c12
-rw-r--r--src/battle/battle_4.c4
-rw-r--r--src/battle/battle_anim.c8
-rw-r--r--src/battle/battle_controller_linkopponent.c4
-rw-r--r--src/battle/battle_controller_linkpartner.c4
-rw-r--r--src/battle/battle_controller_opponent.c4
-rw-r--r--src/battle/battle_controller_player.c12
-rw-r--r--src/battle/battle_controller_safari.c2
-rw-r--r--src/battle/battle_controller_wally.c2
-rw-r--r--src/battle/contest_link_80C2020.c1044
-rw-r--r--src/battle/reshow_battle_screen.c8
-rw-r--r--src/contest.c31
-rw-r--r--src/contest_ai.c4
-rw-r--r--src/debug/matsuda_debug_menu.c10
-rw-r--r--src/evolution_scene.c8
-rw-r--r--src/pokemon_size_record.c2
-rw-r--r--src/pokemon_summary_screen.c6
-rw-r--r--src/tv.c27
27 files changed, 1092 insertions, 2323 deletions
diff --git a/asm/contest_link_80C2020.s b/asm/contest_link_80C2020.s
index 891711bc5..d9e10324b 100644
--- a/asm/contest_link_80C2020.s
+++ b/asm/contest_link_80C2020.s
@@ -5,2119 +5,6 @@
.text
- thumb_func_start sub_80C2020
-sub_80C2020: @ 80C2020
- push {r4,r5,lr}
- movs r5, 0x80
- lsls r5, 19
- movs r0, 0x40
- strh r0, [r5]
- ldr r4, _080C20F0 @ =gWindowTemplate_81E6FA0
- adds r0, r4, 0
- bl Text_LoadWindowTemplate
- ldr r0, _080C20F4 @ =gMenuWindow
- adds r1, r4, 0
- bl Text_InitWindowWithTemplate
- ldr r1, _080C20F8 @ =REG_BG0CNT
- movs r2, 0xF8
- lsls r2, 6
- adds r0, r2, 0
- strh r0, [r1]
- adds r1, 0x2
- ldr r3, _080C20FC @ =0x00001803
- adds r0, r3, 0
- strh r0, [r1]
- adds r1, 0x2
- ldr r2, _080C2100 @ =0x00001c03
- adds r0, r2, 0
- strh r0, [r1]
- adds r1, 0x2
- ldr r3, _080C2104 @ =0x00003a03
- adds r0, r3, 0
- strh r0, [r1]
- ldr r0, _080C2108 @ =REG_MOSAIC
- movs r2, 0
- strh r2, [r0]
- adds r1, 0x3A
- ldr r3, _080C210C @ =0x00003f3f
- adds r0, r3, 0
- strh r0, [r1]
- adds r1, 0x2
- subs r3, 0x11
- adds r0, r3, 0
- strh r0, [r1]
- ldr r0, _080C2110 @ =REG_WIN0H
- strh r2, [r0]
- adds r0, 0x4
- strh r2, [r0]
- subs r0, 0x2
- strh r2, [r0]
- adds r0, 0x4
- strh r2, [r0]
- adds r0, 0xA
- strh r2, [r0]
- adds r0, 0x2
- strh r2, [r0]
- adds r0, 0x2
- strh r2, [r0]
- subs r0, 0x44
- strh r2, [r0]
- adds r0, 0x2
- strh r2, [r0]
- adds r0, 0x2
- strh r2, [r0]
- adds r0, 0x2
- strh r2, [r0]
- adds r0, 0x2
- strh r2, [r0]
- adds r0, 0x2
- strh r2, [r0]
- adds r0, 0x2
- strh r2, [r0]
- adds r0, 0x2
- strh r2, [r0]
- ldrh r0, [r5]
- movs r3, 0xFE
- lsls r3, 7
- adds r1, r3, 0
- orrs r0, r1
- strh r0, [r5]
- ldr r0, _080C2114 @ =gBattle_BG0_X
- strh r2, [r0]
- ldr r0, _080C2118 @ =gBattle_BG0_Y
- strh r2, [r0]
- ldr r0, _080C211C @ =gBattle_BG1_X
- strh r2, [r0]
- ldr r0, _080C2120 @ =gBattle_BG1_Y
- strh r2, [r0]
- ldr r0, _080C2124 @ =gBattle_BG2_X
- strh r2, [r0]
- ldr r0, _080C2128 @ =gBattle_BG2_Y
- strh r2, [r0]
- ldr r0, _080C212C @ =gBattle_BG3_X
- strh r2, [r0]
- ldr r0, _080C2130 @ =gBattle_BG3_Y
- strh r2, [r0]
- ldr r0, _080C2134 @ =gBattle_WIN0H
- strh r2, [r0]
- ldr r0, _080C2138 @ =gBattle_WIN0V
- strh r2, [r0]
- ldr r0, _080C213C @ =gBattle_WIN1H
- strh r2, [r0]
- ldr r0, _080C2140 @ =gBattle_WIN1V
- strh r2, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080C20F0: .4byte gWindowTemplate_81E6FA0
-_080C20F4: .4byte gMenuWindow
-_080C20F8: .4byte REG_BG0CNT
-_080C20FC: .4byte 0x00001803
-_080C2100: .4byte 0x00001c03
-_080C2104: .4byte 0x00003a03
-_080C2108: .4byte REG_MOSAIC
-_080C210C: .4byte 0x00003f3f
-_080C2110: .4byte REG_WIN0H
-_080C2114: .4byte gBattle_BG0_X
-_080C2118: .4byte gBattle_BG0_Y
-_080C211C: .4byte gBattle_BG1_X
-_080C2120: .4byte gBattle_BG1_Y
-_080C2124: .4byte gBattle_BG2_X
-_080C2128: .4byte gBattle_BG2_Y
-_080C212C: .4byte gBattle_BG3_X
-_080C2130: .4byte gBattle_BG3_Y
-_080C2134: .4byte gBattle_WIN0H
-_080C2138: .4byte gBattle_WIN0V
-_080C213C: .4byte gBattle_WIN1H
-_080C2140: .4byte gBattle_WIN1V
- thumb_func_end sub_80C2020
-
- thumb_func_start sub_80C2144
-sub_80C2144: @ 80C2144
- push {r4-r7,lr}
- sub sp, 0x4
- movs r2, 0xC0
- lsls r2, 19
- movs r3, 0xC0
- lsls r3, 9
- ldr r0, _080C220C @ =gUnknown_08D1977C
- mov r12, r0
- movs r5, 0
- ldr r1, _080C2210 @ =0x040000d4
- movs r4, 0x80
- lsls r4, 5
- ldr r6, _080C2214 @ =0x85000400
- movs r7, 0x85
- lsls r7, 24
-_080C2162:
- str r5, [sp]
- mov r0, sp
- str r0, [r1]
- str r2, [r1, 0x4]
- str r6, [r1, 0x8]
- ldr r0, [r1, 0x8]
- adds r2, r4
- subs r3, r4
- cmp r3, r4
- bhi _080C2162
- str r5, [sp]
- mov r0, sp
- str r0, [r1]
- str r2, [r1, 0x4]
- lsrs r0, r3, 2
- orrs r0, r7
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- movs r1, 0xC0
- lsls r1, 19
- mov r0, r12
- bl LZDecompressVram
- ldr r0, _080C2218 @ =gUnknown_08D1A490
- ldr r1, _080C221C @ =0x0600d000
- bl LZDecompressVram
- ldr r0, _080C2220 @ =gUnknown_08D1A364
- ldr r1, _080C2224 @ =0x0600e000
- bl LZDecompressVram
- ldr r0, _080C2228 @ =gUnknown_08D1A250
- ldr r1, _080C222C @ =0x0600f000
- bl LZDecompressVram
- bl sub_80C37E4
- ldr r0, _080C2230 @ =gUnknown_08D1A618
- movs r2, 0x80
- lsls r2, 2
- movs r1, 0
- bl LoadCompressedPalette
- ldr r0, _080C2234 @ =gWindowTemplate_81E6FA0
- bl LoadFontDefaultPalette
- movs r6, 0
-_080C21C0:
- lsls r5, r6, 24
- lsrs r5, 24
- adds r0, r5, 0
- movs r1, 0x1
- bl sub_80C3990
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r5, 0
- movs r1, 0x1
- bl sub_80C39E4
- movs r5, 0
- lsls r1, r6, 1
- adds r2, r6, 0x1
- mov r12, r2
- lsls r4, 24
- asrs r7, r4, 24
- adds r1, r6
- lsls r1, 6
- lsls r4, r0, 24
-_080C21EC:
- ldr r6, _080C2238 @ =0x000060b2
- cmp r5, r7
- bge _080C21F4
- adds r6, 0x2
-_080C21F4:
- asrs r2, r4, 24
- adds r0, r2, 0
- cmp r2, 0
- bge _080C21FE
- negs r0, r2
-_080C21FE:
- cmp r5, r0
- bge _080C2240
- ldr r3, _080C223C @ =0x000060a4
- cmp r2, 0
- bge _080C2242
- adds r3, 0x2
- b _080C2242
- .align 2, 0
-_080C220C: .4byte gUnknown_08D1977C
-_080C2210: .4byte 0x040000d4
-_080C2214: .4byte 0x85000400
-_080C2218: .4byte gUnknown_08D1A490
-_080C221C: .4byte 0x0600d000
-_080C2220: .4byte gUnknown_08D1A364
-_080C2224: .4byte 0x0600e000
-_080C2228: .4byte gUnknown_08D1A250
-_080C222C: .4byte 0x0600f000
-_080C2230: .4byte gUnknown_08D1A618
-_080C2234: .4byte gWindowTemplate_81E6FA0
-_080C2238: .4byte 0x000060b2
-_080C223C: .4byte 0x000060a4
-_080C2240:
- ldr r3, _080C2264 @ =0x000060a2
-_080C2242:
- ldr r2, _080C2268 @ =0x0600c166
- adds r0, r1, r2
- strh r6, [r0]
- adds r2, 0x40
- adds r0, r1, r2
- strh r3, [r0]
- adds r1, 0x2
- adds r5, 0x1
- cmp r5, 0x9
- ble _080C21EC
- mov r6, r12
- cmp r6, 0x3
- ble _080C21C0
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080C2264: .4byte 0x000060a2
-_080C2268: .4byte 0x0600c166
- thumb_func_end sub_80C2144
-
- thumb_func_start sub_80C226C
-sub_80C226C: @ 80C226C
- push {r4-r7,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _080C2288 @ =gContestPlayerMonIndex
- ldrb r0, [r0]
- cmp r5, r0
- bne _080C2294
- ldr r0, _080C228C @ =gDisplayedStringBattle
- ldr r1, _080C2290 @ =gUnknown_083D17DC
- bl StringCopy
- adds r2, r0, 0
- b _080C2296
- .align 2, 0
-_080C2288: .4byte gContestPlayerMonIndex
-_080C228C: .4byte gDisplayedStringBattle
-_080C2290: .4byte gUnknown_083D17DC
-_080C2294:
- ldr r2, _080C22E8 @ =gDisplayedStringBattle
-_080C2296:
- movs r4, 0xFC
- strb r4, [r2]
- movs r0, 0x6
- strb r0, [r2, 0x1]
- movs r0, 0x4
- strb r0, [r2, 0x2]
- adds r2, 0x3
- lsls r6, r5, 6
- ldr r7, _080C22EC @ =gContestMons + 0x2
- adds r1, r6, r7
- adds r0, r2, 0
- bl StringCopy
- adds r2, r0, 0
- strb r4, [r2]
- movs r0, 0x13
- strb r0, [r2, 0x1]
- movs r0, 0x32
- strb r0, [r2, 0x2]
- adds r2, 0x3
- ldr r1, _080C22F0 @ =gUnknown_083D17E0
- adds r0, r2, 0
- bl StringCopy
- adds r2, r0, 0
- ldr r0, _080C22F4 @ =gIsLinkContest
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080C22FC
- lsls r4, r5, 3
- subs r1, r4, r5
- lsls r1, 2
- ldr r0, _080C22F8 @ =gLinkPlayers + 0x8
- adds r1, r0
- adds r0, r2, 0
- bl StringCopy
- b _080C230A
- .align 2, 0
-_080C22E8: .4byte gDisplayedStringBattle
-_080C22EC: .4byte gContestMons + 0x2
-_080C22F0: .4byte gUnknown_083D17E0
-_080C22F4: .4byte gIsLinkContest
-_080C22F8: .4byte gLinkPlayers + 0x8
-_080C22FC:
- adds r1, r7, 0
- adds r1, 0xB
- adds r1, r6, r1
- adds r0, r2, 0
- bl StringCopy
- lsls r4, r5, 3
-_080C230A:
- ldr r0, _080C2334 @ =gMenuWindow
- ldr r1, _080C2338 @ =gDisplayedStringBattle
- adds r2, r4, r5
- lsls r2, 18
- ldr r3, _080C233C @ =0x03020000
- adds r2, r3
- lsrs r2, 16
- lsls r3, r5, 1
- adds r3, r5
- adds r3, 0x4
- lsls r3, 24
- lsrs r3, 24
- str r3, [sp]
- movs r3, 0x7
- bl Text_InitWindowAndPrintText
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080C2334: .4byte gMenuWindow
-_080C2338: .4byte gDisplayedStringBattle
-_080C233C: .4byte 0x03020000
- thumb_func_end sub_80C226C
-
- thumb_func_start sub_80C2340
-sub_80C2340: @ 80C2340
- push {r4,lr}
- movs r4, 0
-_080C2344:
- lsls r0, r4, 24
- lsrs r0, 24
- bl sub_80C226C
- adds r4, 0x1
- cmp r4, 0x3
- ble _080C2344
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80C2340
-
- thumb_func_start sub_80C2358
-sub_80C2358: @ 80C2358
- push {r4,r5,lr}
- sub sp, 0x4
- ldr r5, _080C240C @ =gPaletteFade
- ldrb r0, [r5, 0x8]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r5, 0x8]
- movs r0, 0
- bl SetVBlankCallback
- bl sub_80C2020
- bl ScanlineEffect_Clear
- bl ResetPaletteFade
- bl ResetSpriteData
- bl ResetTasks
- bl FreeAllSpritePalettes
- bl sub_80C2144
- bl sub_80C310C
- movs r0, 0
- movs r1, 0x1
- bl sub_80C30D4
- bl sub_80C2340
- ldr r4, _080C2410 @ =gSharedMem + 0x18000
- adds r0, r4, 0
- movs r1, 0
- movs r2, 0x18
- bl memset
- adds r0, r4, 0
- adds r0, 0x18
- movs r1, 0
- movs r2, 0x50
- bl memset
- bl sub_80C33DC
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldrb r1, [r5, 0x8]
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r5, 0x8]
- ldr r0, _080C2414 @ =sub_80C24F4
- movs r1, 0x5
- bl CreateTask
- strb r0, [r4, 0x2]
- ldr r0, _080C2418 @ =sub_80C2430
- bl SetMainCallback2
- ldr r1, _080C241C @ =gBattle_WIN1H
- movs r0, 0xF0
- strh r0, [r1]
- ldr r1, _080C2420 @ =gBattle_WIN1V
- ldr r2, _080C2424 @ =0x000080a0
- adds r0, r2, 0
- strh r0, [r1]
- ldr r0, _080C2428 @ =sub_80C2F28
- movs r1, 0x14
- bl CreateTask
- bl sub_80C3F00
- movs r0, 0xDF
- lsls r0, 1
- bl PlayBGM
- ldr r0, _080C242C @ =sub_80C2448
- bl SetVBlankCallback
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080C240C: .4byte gPaletteFade
-_080C2410: .4byte gSharedMem + 0x18000
-_080C2414: .4byte sub_80C24F4
-_080C2418: .4byte sub_80C2430
-_080C241C: .4byte gBattle_WIN1H
-_080C2420: .4byte gBattle_WIN1V
-_080C2424: .4byte 0x000080a0
-_080C2428: .4byte sub_80C2F28
-_080C242C: .4byte sub_80C2448
- thumb_func_end sub_80C2358
-
- thumb_func_start sub_80C2430
-sub_80C2430: @ 80C2430
- push {lr}
- bl AnimateSprites
- bl BuildOamBuffer
- bl RunTasks
- bl UpdatePaletteFade
- pop {r0}
- bx r0
- thumb_func_end sub_80C2430
-
- thumb_func_start sub_80C2448
-sub_80C2448: @ 80C2448
- push {lr}
- ldr r1, _080C24C0 @ =REG_BG0HOFS
- ldr r0, _080C24C4 @ =gBattle_BG0_X
- ldrh r0, [r0]
- strh r0, [r1]
- adds r1, 0x2
- ldr r0, _080C24C8 @ =gBattle_BG0_Y
- ldrh r0, [r0]
- strh r0, [r1]
- adds r1, 0x2
- ldr r0, _080C24CC @ =gBattle_BG1_X
- ldrh r0, [r0]
- strh r0, [r1]
- adds r1, 0x2
- ldr r0, _080C24D0 @ =gBattle_BG1_Y
- ldrh r0, [r0]
- strh r0, [r1]
- adds r1, 0x2
- ldr r0, _080C24D4 @ =gBattle_BG2_X
- ldrh r0, [r0]
- strh r0, [r1]
- adds r1, 0x2
- ldr r0, _080C24D8 @ =gBattle_BG2_Y
- ldrh r0, [r0]
- strh r0, [r1]
- adds r1, 0x2
- ldr r0, _080C24DC @ =gBattle_BG3_X
- ldrh r0, [r0]
- strh r0, [r1]
- adds r1, 0x2
- ldr r0, _080C24E0 @ =gBattle_BG3_Y
- ldrh r0, [r0]
- strh r0, [r1]
- adds r1, 0x22
- ldr r0, _080C24E4 @ =gBattle_WIN0H
- ldrh r0, [r0]
- strh r0, [r1]
- adds r1, 0x4
- ldr r0, _080C24E8 @ =gBattle_WIN0V
- ldrh r0, [r0]
- strh r0, [r1]
- subs r1, 0x2
- ldr r0, _080C24EC @ =gBattle_WIN1H
- ldrh r0, [r0]
- strh r0, [r1]
- adds r1, 0x4
- ldr r0, _080C24F0 @ =gBattle_WIN1V
- ldrh r0, [r0]
- strh r0, [r1]
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- bl ScanlineEffect_InitHBlankDmaTransfer
- pop {r0}
- bx r0
- .align 2, 0
-_080C24C0: .4byte REG_BG0HOFS
-_080C24C4: .4byte gBattle_BG0_X
-_080C24C8: .4byte gBattle_BG0_Y
-_080C24CC: .4byte gBattle_BG1_X
-_080C24D0: .4byte gBattle_BG1_Y
-_080C24D4: .4byte gBattle_BG2_X
-_080C24D8: .4byte gBattle_BG2_Y
-_080C24DC: .4byte gBattle_BG3_X
-_080C24E0: .4byte gBattle_BG3_Y
-_080C24E4: .4byte gBattle_WIN0H
-_080C24E8: .4byte gBattle_WIN0V
-_080C24EC: .4byte gBattle_WIN1H
-_080C24F0: .4byte gBattle_WIN1V
- thumb_func_end sub_80C2448
-
- thumb_func_start sub_80C24F4
-sub_80C24F4: @ 80C24F4
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r2, r4, 0
- ldr r0, _080C252C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080C254E
- ldr r0, _080C2530 @ =gIsLinkContest
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080C2540
- ldr r0, _080C2534 @ =gOtherText_LinkStandby
- bl sub_80C3698
- ldr r1, _080C2538 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _080C253C @ =sub_80C255C
- str r1, [r0]
- b _080C254E
- .align 2, 0
-_080C252C: .4byte gPaletteFade
-_080C2530: .4byte gIsLinkContest
-_080C2534: .4byte gOtherText_LinkStandby
-_080C2538: .4byte gTasks
-_080C253C: .4byte sub_80C255C
-_080C2540:
- ldr r0, _080C2554 @ =gTasks
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 3
- adds r1, r0
- ldr r0, _080C2558 @ =sub_80C2600
- str r0, [r1]
-_080C254E:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080C2554: .4byte gTasks
-_080C2558: .4byte sub_80C2600
- thumb_func_end sub_80C24F4
-
- thumb_func_start sub_80C255C
-sub_80C255C: @ 80C255C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _080C2594 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- beq _080C258C
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- bne _080C258C
- ldr r0, _080C2598 @ =sub_80C25A4
- movs r1, 0
- bl CreateTask
- ldr r1, _080C259C @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _080C25A0 @ =TaskDummy
- str r1, [r0]
-_080C258C:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080C2594: .4byte gReceivedRemoteLinkPlayers
-_080C2598: .4byte sub_80C25A4
-_080C259C: .4byte gTasks
-_080C25A0: .4byte TaskDummy
- thumb_func_end sub_80C255C
-
- thumb_func_start sub_80C25A4
-sub_80C25A4: @ 80C25A4
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _080C25B8 @ =sub_80C89DC
- ldr r2, _080C25BC @ =sub_80C25C0
- bl SetTaskFuncWithFollowupFunc
- pop {r0}
- bx r0
- .align 2, 0
-_080C25B8: .4byte sub_80C89DC
-_080C25BC: .4byte sub_80C25C0
- thumb_func_end sub_80C25A4
-
- thumb_func_start sub_80C25C0
-sub_80C25C0: @ 80C25C0
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl IsLinkTaskFinished
- lsls r0, 24
- cmp r0, 0
- beq _080C25EC
- adds r0, r4, 0
- bl DestroyTask
- ldr r2, _080C25F4 @ =gTasks
- ldr r0, _080C25F8 @ =gSharedMem + 0x18000
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- ldr r1, _080C25FC @ =sub_80C2600
- str r1, [r0]
- bl sub_80C3764
-_080C25EC:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080C25F4: .4byte gTasks
-_080C25F8: .4byte gSharedMem + 0x18000
-_080C25FC: .4byte sub_80C2600
- thumb_func_end sub_80C25C0
-
- thumb_func_start sub_80C2600
-sub_80C2600: @ 80C2600
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080C2644 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r5, r1, r2
- ldrh r1, [r5, 0x8]
- movs r2, 0x8
- ldrsh r0, [r5, r2]
- cmp r0, 0
- bne _080C2654
- ldr r0, _080C2648 @ =sub_80C2F64
- movs r1, 0x14
- bl CreateTask
- ldr r4, _080C264C @ =gContestText_AnnounceResults
- ldr r0, _080C2650 @ =gSharedMem + 0x18000
- ldrb r1, [r0]
- adds r0, r4, 0
- bl sub_80C3158
- adds r0, r4, 0
- bl sub_80C34AC
- lsls r0, 16
- asrs r0, 16
- movs r3, 0x88
- lsls r3, 3
- movs r1, 0x90
- movs r2, 0x78
- b _080C26A6
- .align 2, 0
-_080C2644: .4byte gTasks
-_080C2648: .4byte sub_80C2F64
-_080C264C: .4byte gContestText_AnnounceResults
-_080C2650: .4byte gSharedMem + 0x18000
-_080C2654:
- cmp r0, 0x1
- bne _080C2668
- ldr r0, _080C2664 @ =gSharedMem + 0x18000
- ldrb r0, [r0, 0x4]
- cmp r0, 0
- bne _080C26D4
- b _080C267C
- .align 2, 0
-_080C2664: .4byte gSharedMem + 0x18000
-_080C2668:
- cmp r0, 0x2
- bne _080C2684
- ldrh r0, [r5, 0xA]
- adds r0, 0x1
- strh r0, [r5, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x15
- bne _080C26D4
- movs r0, 0
-_080C267C:
- strh r0, [r5, 0xA]
- adds r0, r1, 0x1
- strh r0, [r5, 0x8]
- b _080C26D4
-_080C2684:
- cmp r0, 0x3
- bne _080C26C0
- ldr r4, _080C26B4 @ =gContestText_PreliminaryResults
- ldr r0, _080C26B8 @ =gSharedMem + 0x18000
- ldrb r1, [r0]
- adds r0, r4, 0
- bl sub_80C3158
- adds r0, r4, 0
- bl sub_80C34AC
- lsls r0, 16
- asrs r0, 16
- ldr r2, _080C26BC @ =0x0000ffff
- movs r3, 0x88
- lsls r3, 3
- movs r1, 0x90
-_080C26A6:
- bl sub_80C34CC
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- b _080C26D4
- .align 2, 0
-_080C26B4: .4byte gContestText_PreliminaryResults
-_080C26B8: .4byte gSharedMem + 0x18000
-_080C26BC: .4byte 0x0000ffff
-_080C26C0:
- cmp r0, 0x4
- bne _080C26D4
- ldr r0, _080C26DC @ =gSharedMem + 0x18000
- ldrb r0, [r0, 0x4]
- cmp r0, 0x2
- bne _080C26D4
- movs r0, 0
- strh r0, [r5, 0x8]
- ldr r0, _080C26E0 @ =sub_80C26E4
- str r0, [r5]
-_080C26D4:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080C26DC: .4byte gSharedMem + 0x18000
-_080C26E0: .4byte sub_80C26E4
- thumb_func_end sub_80C2600
-
- thumb_func_start sub_80C26E4
-sub_80C26E4: @ 80C26E4
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080C2708 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- beq _080C2744
- cmp r0, 0x1
- bgt _080C270C
- cmp r0, 0
- beq _080C2712
- b _080C2766
- .align 2, 0
-_080C2708: .4byte gTasks
-_080C270C:
- cmp r0, 0x2
- beq _080C2754
- b _080C2766
-_080C2712:
- ldr r5, _080C2738 @ =gSharedMem + 0x18000
- ldrb r0, [r5, 0xA]
- cmp r0, 0
- bne _080C2766
- ldrh r1, [r4, 0xC]
- adds r0, r1, 0x1
- strh r0, [r4, 0xC]
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0
- bl sub_80C40D4
- ldrb r0, [r5, 0x14]
- cmp r0, 0
- bne _080C273C
- movs r0, 0x2
- strh r0, [r4, 0x8]
- b _080C2766
- .align 2, 0
-_080C2738: .4byte gSharedMem + 0x18000
-_080C273C:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _080C2766
-_080C2744:
- ldr r0, _080C2750 @ =gSharedMem + 0x18000
- ldrb r0, [r0, 0x14]
- cmp r0, 0
- bne _080C2766
- strh r0, [r4, 0x8]
- b _080C2766
- .align 2, 0
-_080C2750: .4byte gSharedMem + 0x18000
-_080C2754:
- movs r0, 0x88
- lsls r0, 3
- bl sub_80C3520
- movs r0, 0
- strh r0, [r4, 0x8]
- strh r0, [r4, 0xC]
- ldr r0, _080C276C @ =sub_80C2770
- str r0, [r4]
-_080C2766:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080C276C: .4byte sub_80C2770
- thumb_func_end sub_80C26E4
-
- thumb_func_start sub_80C2770
-sub_80C2770: @ 80C2770
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- adds r4, r2, 0
- ldr r5, _080C27BC @ =gSharedMem + 0x18000
- ldrb r3, [r5, 0x4]
- cmp r3, 0
- bne _080C27CC
- ldr r1, _080C27C0 @ =gTasks
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r1, r0, r1
- ldrh r0, [r1, 0xA]
- adds r0, 0x1
- strh r0, [r1, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x15
- bne _080C27DE
- strh r3, [r1, 0xA]
- ldr r4, _080C27C4 @ =gContestText_Round2Results
- ldrb r1, [r5]
- adds r0, r4, 0
- bl sub_80C3158
- adds r0, r4, 0
- bl sub_80C34AC
- lsls r0, 16
- asrs r0, 16
- ldr r2, _080C27C8 @ =0x0000ffff
- movs r3, 0x88
- lsls r3, 3
- movs r1, 0x90
- bl sub_80C34CC
- b _080C27DE
- .align 2, 0
-_080C27BC: .4byte gSharedMem + 0x18000
-_080C27C0: .4byte gTasks
-_080C27C4: .4byte gContestText_Round2Results
-_080C27C8: .4byte 0x0000ffff
-_080C27CC:
- cmp r3, 0x2
- bne _080C27DE
- ldr r0, _080C27E4 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _080C27E8 @ =sub_80C27EC
- str r0, [r1]
-_080C27DE:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080C27E4: .4byte gTasks
-_080C27E8: .4byte sub_80C27EC
- thumb_func_end sub_80C2770
-
- thumb_func_start sub_80C27EC
-sub_80C27EC: @ 80C27EC
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080C2810 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- beq _080C284C
- cmp r0, 0x1
- bgt _080C2814
- cmp r0, 0
- beq _080C281A
- b _080C286C
- .align 2, 0
-_080C2810: .4byte gTasks
-_080C2814:
- cmp r0, 0x2
- beq _080C285C
- b _080C286C
-_080C281A:
- ldr r5, _080C2840 @ =gSharedMem + 0x18000
- ldrb r0, [r5, 0xA]
- cmp r0, 0
- bne _080C286C
- ldrh r1, [r4, 0xC]
- adds r0, r1, 0x1
- strh r0, [r4, 0xC]
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0x1
- bl sub_80C40D4
- ldrb r0, [r5, 0x14]
- cmp r0, 0
- bne _080C2844
- movs r0, 0x2
- strh r0, [r4, 0x8]
- b _080C286C
- .align 2, 0
-_080C2840: .4byte gSharedMem + 0x18000
-_080C2844:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _080C286C
-_080C284C:
- ldr r0, _080C2858 @ =gSharedMem + 0x18000
- ldrb r0, [r0, 0x14]
- cmp r0, 0
- bne _080C286C
- strh r0, [r4, 0x8]
- b _080C286C
- .align 2, 0
-_080C2858: .4byte gSharedMem + 0x18000
-_080C285C:
- movs r0, 0x88
- lsls r0, 3
- bl sub_80C3520
- movs r0, 0
- strh r0, [r4, 0x8]
- ldr r0, _080C2874 @ =sub_80C2878
- str r0, [r4]
-_080C286C:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080C2874: .4byte sub_80C2878
- thumb_func_end sub_80C27EC
-
- thumb_func_start sub_80C2878
-sub_80C2878: @ 80C2878
- push {r4-r7,lr}
- sub sp, 0x64
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _080C28A0 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- movs r2, 0x8
- ldrsh r0, [r0, r2]
- adds r2, r1, 0
- cmp r0, 0x5
- bls _080C2896
- b _080C2A80
-_080C2896:
- lsls r0, 2
- ldr r1, _080C28A4 @ =_080C28A8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080C28A0: .4byte gTasks
-_080C28A4: .4byte _080C28A8
- .align 2, 0
-_080C28A8:
- .4byte _080C28C0
- .4byte _080C28E0
- .4byte _080C28FE
- .4byte _080C2938
- .4byte _080C299C
- .4byte _080C2A70
-_080C28C0:
- ldr r0, _080C28DC @ =gSharedMem + 0x18000
- ldrb r0, [r0, 0x4]
- cmp r0, 0
- beq _080C28CA
- b _080C2A80
-_080C28CA:
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r2
- ldrh r1, [r0, 0x8]
- adds r1, 0x1
- strh r1, [r0, 0x8]
- b _080C2A80
- .align 2, 0
-_080C28DC: .4byte gSharedMem + 0x18000
-_080C28E0:
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r1, r0, r2
- ldrh r0, [r1, 0xA]
- adds r0, 0x1
- strh r0, [r1, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1F
- beq _080C28F8
- b _080C2A80
-_080C28F8:
- movs r0, 0
- strh r0, [r1, 0xA]
- b _080C2A4A
-_080C28FE:
- movs r4, 0
- lsls r6, r5, 2
- ldr r7, _080C292C @ =gTasks
-_080C2904:
- ldr r0, _080C2930 @ =sub_80C3A5C
- movs r1, 0xA
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r7
- ldr r0, _080C2934 @ =gContestFinalStandings
- adds r0, r4, r0
- ldrb r0, [r0]
- strh r0, [r1, 0x8]
- strh r4, [r1, 0xA]
- adds r4, 0x1
- cmp r4, 0x3
- ble _080C2904
- b _080C2A42
- .align 2, 0
-_080C292C: .4byte gTasks
-_080C2930: .4byte sub_80C3A5C
-_080C2934: .4byte gContestFinalStandings
-_080C2938:
- ldr r0, _080C2990 @ =gSharedMem + 0x18000
- ldrb r0, [r0, 0x5]
- cmp r0, 0x4
- beq _080C2942
- b _080C2A80
-_080C2942:
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r4, r0, r2
- ldrh r0, [r4, 0xA]
- adds r0, 0x1
- strh r0, [r4, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1F
- beq _080C295A
- b _080C2A80
-_080C295A:
- movs r0, 0
- strh r0, [r4, 0xA]
- ldr r0, _080C2994 @ =sub_80C3B30
- movs r1, 0xA
- bl CreateTask
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r4, 0
- ldr r1, _080C2998 @ =gContestFinalStandings
- ldrb r0, [r1]
- cmp r0, 0
- beq _080C2984
-_080C2976:
- adds r4, 0x1
- cmp r4, 0x3
- bgt _080C2984
- adds r0, r4, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _080C2976
-_080C2984:
- lsls r0, r4, 24
- lsrs r0, 24
- movs r1, 0xE
- bl sub_80C3E60
- b _080C2A80
- .align 2, 0
-_080C2990: .4byte gSharedMem + 0x18000
-_080C2994: .4byte sub_80C3B30
-_080C2998: .4byte gContestFinalStandings
-_080C299C:
- lsls r1, r5, 2
- adds r0, r1, r5
- lsls r0, 3
- adds r2, r0, r2
- ldrh r0, [r2, 0xA]
- adds r0, 0x1
- strh r0, [r2, 0xA]
- lsls r0, 16
- asrs r0, 16
- adds r6, r1, 0
- cmp r0, 0x15
- bne _080C2A80
- movs r0, 0
- strh r0, [r2, 0xA]
- movs r4, 0
- ldr r2, _080C29F4 @ =gContestFinalStandings
- ldrb r0, [r2]
- ldr r1, _080C29F8 @ =gIsLinkContest
- ldr r3, _080C29FC @ =gStringVar1
- cmp r0, 0
- beq _080C29D4
-_080C29C6:
- adds r4, 0x1
- cmp r4, 0x3
- bgt _080C29D4
- adds r0, r4, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _080C29C6
-_080C29D4:
- ldrb r1, [r1]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080C2A04
- lsls r1, r4, 3
- subs r1, r4
- lsls r1, 2
- ldr r0, _080C2A00 @ =gLinkPlayers + 0x8
- adds r1, r0
- adds r0, r3, 0
- bl StringCopy
- lsls r4, 6
- b _080C2A10
- .align 2, 0
-_080C29F4: .4byte gContestFinalStandings
-_080C29F8: .4byte gIsLinkContest
-_080C29FC: .4byte gStringVar1
-_080C2A00: .4byte gLinkPlayers + 0x8
-_080C2A04:
- lsls r4, 6
- ldr r1, _080C2A54 @ =gContestMons + 0xD
- adds r1, r4, r1
- adds r0, r3, 0
- bl StringCopy
-_080C2A10:
- ldr r0, _080C2A58 @ =gStringVar2
- ldr r1, _080C2A5C @ =gContestMons + 0x2
- adds r1, r4, r1
- bl StringCopy
- ldr r1, _080C2A60 @ =gContestText_PokeWon
- mov r0, sp
- bl StringExpandPlaceholders
- ldr r0, _080C2A64 @ =gSharedMem + 0x18000
- ldrb r1, [r0]
- mov r0, sp
- bl sub_80C3158
- mov r0, sp
- bl sub_80C34AC
- lsls r0, 16
- asrs r0, 16
- ldr r2, _080C2A68 @ =0x0000ffff
- movs r3, 0x88
- lsls r3, 3
- movs r1, 0x90
- bl sub_80C34CC
-_080C2A42:
- ldr r0, _080C2A6C @ =gTasks
- adds r1, r6, r5
- lsls r1, 3
- adds r1, r0
-_080C2A4A:
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- b _080C2A80
- .align 2, 0
-_080C2A54: .4byte gContestMons + 0xD
-_080C2A58: .4byte gStringVar2
-_080C2A5C: .4byte gContestMons + 0x2
-_080C2A60: .4byte gContestText_PokeWon
-_080C2A64: .4byte gSharedMem + 0x18000
-_080C2A68: .4byte 0x0000ffff
-_080C2A6C: .4byte gTasks
-_080C2A70:
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r2
- movs r1, 0
- strh r1, [r0, 0x8]
- ldr r1, _080C2A88 @ =sub_80C2A8C
- str r1, [r0]
-_080C2A80:
- add sp, 0x64
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080C2A88: .4byte sub_80C2A8C
- thumb_func_end sub_80C2878
-
- thumb_func_start sub_80C2A8C
-sub_80C2A8C: @ 80C2A8C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r1, _080C2ABC @ =gTasks
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r0, r1
- movs r2, 0x8
- ldrsh r0, [r0, r2]
- adds r4, r1, 0
- cmp r0, 0x5
- bls _080C2AB2
- b _080C2D04
-_080C2AB2:
- lsls r0, 2
- ldr r1, _080C2AC0 @ =_080C2AC4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080C2ABC: .4byte gTasks
-_080C2AC0: .4byte _080C2AC4
- .align 2, 0
-_080C2AC4:
- .4byte _080C2ADC
- .4byte _080C2C04
- .4byte _080C2C54
- .4byte _080C2C64
- .4byte _080C2CA8
- .4byte _080C2CE8
-_080C2ADC:
- ldr r1, _080C2BC4 @ =gBattle_WIN0H
- movs r0, 0xF0
- strh r0, [r1]
- ldr r1, _080C2BC8 @ =gBattle_WIN0V
- ldr r3, _080C2BCC @ =0x00005050
- adds r0, r3, 0
- strh r0, [r1]
- movs r1, 0
- ldr r3, _080C2BD0 @ =gContestFinalStandings
- ldrb r0, [r3]
- lsls r4, r7, 2
- mov r10, r4
- ldr r2, _080C2BD4 @ =gContestMons
- ldr r5, _080C2BD8 @ =gMonFrontPicTable
- mov r12, r5
- ldr r4, _080C2BDC @ =gMonFrontPicCoords
- mov r8, r4
- ldr r5, _080C2BE0 @ =gUnknown_081FAF4C
- mov r9, r5
- cmp r0, 0
- beq _080C2B14
-_080C2B06:
- adds r1, 0x1
- cmp r1, 0x3
- bgt _080C2B14
- adds r0, r1, r3
- ldrb r0, [r0]
- cmp r0, 0
- bne _080C2B06
-_080C2B14:
- lsls r1, 6
- adds r0, r1, r2
- ldrh r6, [r0]
- adds r0, r2, 0
- adds r0, 0x38
- adds r0, r1, r0
- ldr r4, [r0]
- adds r0, r2, 0
- adds r0, 0x3C
- adds r1, r0
- ldr r1, [r1]
- str r1, [sp, 0xC]
- lsls r0, r6, 3
- add r0, r12
- lsls r2, r6, 2
- add r2, r8
- ldrb r1, [r2]
- ldrb r2, [r2, 0x1]
- mov r5, r9
- ldr r3, [r5, 0x4]
- str r3, [sp]
- str r6, [sp, 0x4]
- str r4, [sp, 0x8]
- ldr r3, _080C2BE4 @ =gSharedMem
- bl HandleLoadSpecialPokePic
- adds r0, r6, 0
- ldr r1, [sp, 0xC]
- adds r2, r4, 0
- bl GetMonSpritePalStructFromOtIdPersonality
- adds r4, r0, 0
- bl LoadCompressedObjectPalette
- adds r0, r6, 0
- movs r1, 0x1
- bl GetMonSpriteTemplate_803C56C
- ldr r0, _080C2BE8 @ =gUnknown_02024E8C
- ldrh r1, [r4, 0x4]
- strh r1, [r0, 0x2]
- movs r1, 0x88
- lsls r1, 1
- movs r2, 0x50
- movs r3, 0xA
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _080C2BEC @ =gSprites
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r3, r2, r5
- strh r6, [r3, 0x30]
- ldrb r4, [r3, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r4
- strb r1, [r3, 0x5]
- adds r5, 0x1C
- adds r2, r5
- ldr r1, _080C2BF0 @ =sub_80C3C44
- str r1, [r2]
- ldr r2, _080C2BE4 @ =gSharedMem
- movs r3, 0xC0
- lsls r3, 9
- adds r1, r2, r3
- strb r0, [r1, 0x8]
- ldr r0, _080C2BF4 @ =gUnknown_083D17CC
- bl LoadCompressedObjectPic
- ldr r0, _080C2BF8 @ =gUnknown_083D17D4
- bl LoadCompressedObjectPalette
- ldr r0, _080C2BFC @ =sub_80C3D04
- movs r1, 0xA
- bl CreateTask
- ldr r0, _080C2C00 @ =gTasks
- mov r4, r10
- adds r1, r4, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- b _080C2D04
- .align 2, 0
-_080C2BC4: .4byte gBattle_WIN0H
-_080C2BC8: .4byte gBattle_WIN0V
-_080C2BCC: .4byte 0x00005050
-_080C2BD0: .4byte gContestFinalStandings
-_080C2BD4: .4byte gContestMons
-_080C2BD8: .4byte gMonFrontPicTable
-_080C2BDC: .4byte gMonFrontPicCoords
-_080C2BE0: .4byte gUnknown_081FAF4C
-_080C2BE4: .4byte gSharedMem
-_080C2BE8: .4byte gUnknown_02024E8C
-_080C2BEC: .4byte gSprites
-_080C2BF0: .4byte sub_80C3C44
-_080C2BF4: .4byte gUnknown_083D17CC
-_080C2BF8: .4byte gUnknown_083D17D4
-_080C2BFC: .4byte sub_80C3D04
-_080C2C00: .4byte gTasks
-_080C2C04:
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r4, r0, r4
- ldrh r0, [r4, 0xE]
- adds r0, 0x1
- strh r0, [r4, 0xE]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1
- bne _080C2D04
- movs r0, 0
- strh r0, [r4, 0xE]
- ldrh r0, [r4, 0xC]
- adds r0, 0x2
- strh r0, [r4, 0xC]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x20
- ble _080C2C30
- movs r0, 0x20
- strh r0, [r4, 0xC]
-_080C2C30:
- ldrb r2, [r4, 0xC]
- ldr r3, _080C2C50 @ =gBattle_WIN0V
- movs r0, 0x50
- subs r0, r2
- lsls r0, 8
- adds r1, r2, 0
- adds r1, 0x50
- orrs r0, r1
- strh r0, [r3]
- cmp r2, 0x20
- bne _080C2D04
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _080C2D04
- .align 2, 0
-_080C2C50: .4byte gBattle_WIN0V
-_080C2C54:
- ldr r0, _080C2C60 @ =gSharedMem + 0x18000
- ldrb r0, [r0, 0x6]
- cmp r0, 0x1
- bne _080C2D04
- b _080C2CD0
- .align 2, 0
-_080C2C60: .4byte gSharedMem + 0x18000
-_080C2C64:
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r3, r0, r4
- ldrh r0, [r3, 0xA]
- adds r0, 0x1
- strh r0, [r3, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x79
- bne _080C2D04
- movs r0, 0
- strh r0, [r3, 0xA]
- ldr r2, _080C2C9C @ =gSprites
- ldr r0, _080C2CA0 @ =gSharedMem + 0x18000
- ldrb r1, [r0, 0x8]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, _080C2CA4 @ =sub_80C3CB8
- str r1, [r0]
- ldrh r0, [r3, 0x8]
- adds r0, 0x1
- strh r0, [r3, 0x8]
- b _080C2D04
- .align 2, 0
-_080C2C9C: .4byte gSprites
-_080C2CA0: .4byte gSharedMem + 0x18000
-_080C2CA4: .4byte sub_80C3CB8
-_080C2CA8:
- ldr r0, _080C2CE0 @ =gSharedMem + 0x18000
- ldrb r0, [r0, 0x6]
- cmp r0, 0x2
- bne _080C2D04
- ldr r3, _080C2CE4 @ =gBattle_WIN0V
- ldrh r0, [r3]
- lsrs r2, r0, 8
- adds r0, r2, 0x2
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x50
- bls _080C2CC2
- movs r2, 0x50
-_080C2CC2:
- lsls r1, r2, 8
- movs r0, 0xA0
- subs r0, r2
- orrs r1, r0
- strh r1, [r3]
- cmp r2, 0x50
- bne _080C2D04
-_080C2CD0:
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r0, r4
- ldrh r1, [r0, 0x8]
- adds r1, 0x1
- strh r1, [r0, 0x8]
- b _080C2D04
- .align 2, 0
-_080C2CE0: .4byte gSharedMem + 0x18000
-_080C2CE4: .4byte gBattle_WIN0V
-_080C2CE8:
- ldr r2, _080C2D14 @ =gSharedMem + 0x18000
- ldrb r0, [r2, 0x6]
- cmp r0, 0x2
- bne _080C2D04
- movs r1, 0
- movs r0, 0x1
- strb r0, [r2, 0x9]
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r0, r4
- strh r1, [r0, 0x8]
- ldr r1, _080C2D18 @ =sub_80C2D1C
- str r1, [r0]
-_080C2D04:
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080C2D14: .4byte gSharedMem + 0x18000
-_080C2D18: .4byte sub_80C2D1C
- thumb_func_end sub_80C2A8C
-
- thumb_func_start sub_80C2D1C
-sub_80C2D1C: @ 80C2D1C
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, _080C2D6C @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r2, 0x1
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- beq _080C2D66
- ldr r0, _080C2D70 @ =gIsLinkContest
- ldrb r1, [r0]
- adds r0, r2, 0
- ands r0, r1
- lsls r6, r7, 2
- cmp r0, 0
- bne _080C2D5A
- ldr r5, _080C2D74 @ =gContestMons
- movs r4, 0x3
-_080C2D42:
- ldrh r0, [r5]
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x2
- bl GetSetPokedexFlag
- adds r5, 0x40
- subs r4, 0x1
- cmp r4, 0
- bge _080C2D42
-_080C2D5A:
- ldr r0, _080C2D78 @ =gTasks
- adds r1, r6, r7
- lsls r1, 3
- adds r1, r0
- ldr r0, _080C2D7C @ =sub_80C2D80
- str r0, [r1]
-_080C2D66:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080C2D6C: .4byte gMain
-_080C2D70: .4byte gIsLinkContest
-_080C2D74: .4byte gContestMons
-_080C2D78: .4byte gTasks
-_080C2D7C: .4byte sub_80C2D80
- thumb_func_end sub_80C2D1C
-
- thumb_func_start sub_80C2D80
-sub_80C2D80: @ 80C2D80
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _080C2DAC @ =gIsLinkContest
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080C2DBC
- ldr r0, _080C2DB0 @ =gOtherText_LinkStandby
- bl sub_80C3698
- bl sub_800832C
- ldr r1, _080C2DB4 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _080C2DB8 @ =sub_80C2DD8
- str r1, [r0]
- b _080C2DCA
- .align 2, 0
-_080C2DAC: .4byte gIsLinkContest
-_080C2DB0: .4byte gOtherText_LinkStandby
-_080C2DB4: .4byte gTasks
-_080C2DB8: .4byte sub_80C2DD8
-_080C2DBC:
- ldr r0, _080C2DD0 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _080C2DD4 @ =sub_80C2E14
- str r0, [r1]
-_080C2DCA:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080C2DD0: .4byte gTasks
-_080C2DD4: .4byte sub_80C2E14
- thumb_func_end sub_80C2D80
-
- thumb_func_start sub_80C2DD8
-sub_80C2DD8: @ 80C2DD8
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _080C2E04 @ =gReceivedRemoteLinkPlayers
- ldrb r1, [r0]
- cmp r1, 0
- bne _080C2DFC
- ldr r0, _080C2E08 @ =gIsLinkContest
- strb r1, [r0]
- bl sub_80C3764
- ldr r1, _080C2E0C @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _080C2E10 @ =sub_80C2E14
- str r1, [r0]
-_080C2DFC:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080C2E04: .4byte gReceivedRemoteLinkPlayers
-_080C2E08: .4byte gIsLinkContest
-_080C2E0C: .4byte gTasks
-_080C2E10: .4byte sub_80C2E14
- thumb_func_end sub_80C2DD8
-
- thumb_func_start sub_80C2E14
-sub_80C2E14: @ 80C2E14
- push {r4-r6,lr}
- sub sp, 0x4
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldr r1, _080C2E80 @ =gContestFinalStandings
- ldr r0, _080C2E84 @ =gContestPlayerMonIndex
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- bl sub_80BE284
- movs r0, 0x2
- bl sub_810FB10
- ldr r0, _080C2E88 @ =gSpecialVar_ContestRank
- ldrb r0, [r0]
- bl Contest_SaveWinner
- movs r0, 0xFE
- bl Contest_SaveWinner
- ldr r4, _080C2E8C @ =gSharedMem
- ldr r0, _080C2E90 @ =0x00015ddf
- adds r1, r4, r0
- movs r6, 0
- movs r0, 0x1
- strb r0, [r1]
- movs r0, 0xFE
- movs r1, 0
- bl sub_80B2C4C
- ldr r1, _080C2E94 @ =0x00015dde
- adds r4, r1
- strb r0, [r4]
- str r6, [sp]
- movs r0, 0xFF
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginHardwarePaletteFade
- ldr r1, _080C2E98 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldr r1, _080C2E9C @ =sub_80C2EA0
- str r1, [r0]
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080C2E80: .4byte gContestFinalStandings
-_080C2E84: .4byte gContestPlayerMonIndex
-_080C2E88: .4byte gSpecialVar_ContestRank
-_080C2E8C: .4byte gSharedMem
-_080C2E90: .4byte 0x00015ddf
-_080C2E94: .4byte 0x00015dde
-_080C2E98: .4byte gTasks
-_080C2E9C: .4byte sub_80C2EA0
- thumb_func_end sub_80C2E14
-
- thumb_func_start sub_80C2EA0
-sub_80C2EA0: @ 80C2EA0
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- adds r5, r2, 0
- ldr r0, _080C2ED8 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0
- bne _080C2F18
- ldr r1, _080C2EDC @ =gTasks
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r4, r0, r1
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080C2EE8
- ldr r0, _080C2EE0 @ =gSharedMem + 0x18000
- ldrb r0, [r0, 0x3]
- bl DestroyTask
- ldr r0, _080C2EE4 @ =0x0000ffff
- b _080C2EEE
- .align 2, 0
-_080C2ED8: .4byte gPaletteFade
-_080C2EDC: .4byte gTasks
-_080C2EE0: .4byte gSharedMem + 0x18000
-_080C2EE4: .4byte 0x0000ffff
-_080C2EE8:
- cmp r0, 0x1
- bne _080C2F04
- ldr r0, _080C2F00 @ =0xffff0000
-_080C2EEE:
- movs r1, 0x10
- movs r2, 0
- bl BlendPalettes
- ldrh r0, [r4, 0xA]
- adds r0, 0x1
- strh r0, [r4, 0xA]
- b _080C2F18
- .align 2, 0
-_080C2F00: .4byte 0xffff0000
-_080C2F04:
- ldr r0, _080C2F20 @ =REG_BLDCNT
- strh r3, [r0]
- adds r0, 0x4
- strh r3, [r0]
- adds r0, r5, 0
- bl DestroyTask
- ldr r0, _080C2F24 @ =c2_exit_to_overworld_1_continue_scripts_restart_music
- bl SetMainCallback2
-_080C2F18:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080C2F20: .4byte REG_BLDCNT
-_080C2F24: .4byte c2_exit_to_overworld_1_continue_scripts_restart_music
- thumb_func_end sub_80C2EA0
-
- thumb_func_start sub_80C2F28
-sub_80C2F28: @ 80C2F28
- push {r4,r5,lr}
- ldr r2, _080C2F5C @ =gBattle_BG3_X
- ldrh r3, [r2]
- adds r0, r3, 0x2
- strh r0, [r2]
- ldr r4, _080C2F60 @ =gBattle_BG3_Y
- ldrh r5, [r4]
- adds r1, r5, 0x1
- strh r1, [r4]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xFF
- bls _080C2F48
- adds r0, r3, 0
- subs r0, 0xFD
- strh r0, [r2]
-_080C2F48:
- lsls r0, r1, 16
- lsrs r0, 16
- cmp r0, 0xFF
- bls _080C2F56
- adds r0, r5, 0
- subs r0, 0xFE
- strh r0, [r4]
-_080C2F56:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080C2F5C: .4byte gBattle_BG3_X
-_080C2F60: .4byte gBattle_BG3_Y
- thumb_func_end sub_80C2F28
-
- thumb_func_start sub_80C2F64
-sub_80C2F64: @ 80C2F64
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _080C2F94 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r2, r0, r1
- ldrh r0, [r2, 0x8]
- adds r0, 0x1
- strh r0, [r2, 0x8]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x2
- bne _080C2FE6
- movs r0, 0
- strh r0, [r2, 0x8]
- movs r3, 0xC
- ldrsh r0, [r2, r3]
- cmp r0, 0
- bne _080C2F98
- ldrh r0, [r2, 0xA]
- adds r0, 0x1
- b _080C2F9C
- .align 2, 0
-_080C2F94: .4byte gTasks
-_080C2F98:
- ldrh r0, [r2, 0xA]
- subs r0, 0x1
-_080C2F9C:
- strh r0, [r2, 0xA]
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r1, r0, r1
- movs r2, 0xA
- ldrsh r0, [r1, r2]
- cmp r0, 0x10
- bne _080C2FB2
- movs r0, 0x1
- b _080C2FB6
-_080C2FB2:
- cmp r0, 0
- bne _080C2FB8
-_080C2FB6:
- strh r0, [r1, 0xC]
-_080C2FB8:
- ldr r0, _080C3000 @ =gTasks
- lsls r4, r5, 2
- adds r4, r5
- lsls r4, 3
- adds r4, r0
- ldrb r2, [r4, 0xA]
- ldr r3, _080C3004 @ =0x00002ede
- movs r0, 0x6B
- movs r1, 0x1
- bl BlendPalette
- ldrb r2, [r4, 0xA]
- ldr r3, _080C3008 @ =0x00007fff
- movs r0, 0x68
- movs r1, 0x1
- bl BlendPalette
- ldrb r2, [r4, 0xA]
- ldr r3, _080C300C @ =0x000077be
- movs r0, 0x6E
- movs r1, 0x1
- bl BlendPalette
-_080C2FE6:
- ldr r1, _080C3000 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- movs r3, 0xA
- ldrsh r4, [r0, r3]
- cmp r4, 0
- bne _080C3014
- ldr r0, _080C3010 @ =gSharedMem + 0x18000
- strb r4, [r0, 0xA]
- b _080C301A
- .align 2, 0
-_080C3000: .4byte gTasks
-_080C3004: .4byte 0x00002ede
-_080C3008: .4byte 0x00007fff
-_080C300C: .4byte 0x000077be
-_080C3010: .4byte gSharedMem + 0x18000
-_080C3014:
- ldr r1, _080C3020 @ =gSharedMem + 0x18000
- movs r0, 0x1
- strb r0, [r1, 0xA]
-_080C301A:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080C3020: .4byte gSharedMem + 0x18000
- thumb_func_end sub_80C2F64
-
- thumb_func_start sub_80C3024
-sub_80C3024: @ 80C3024
- push {r4-r6,lr}
- ldr r6, [sp, 0x10]
- lsls r0, 16
- lsrs r0, 16
- lsls r1, 24
- lsrs r4, r1, 24
- lsls r2, 24
- lsrs r5, r2, 24
- lsls r3, 24
- cmp r3, 0
- beq _080C30B0
- adds r1, r6, 0
- bl GetMonIconPtr
- lsls r1, r5, 9
- adds r0, r1
- adds r0, 0x80
- lsls r1, r4, 9
- ldr r2, _080C30A0 @ =0x06004000
- adds r1, r2
- ldr r2, _080C30A4 @ =0x040000d4
- str r0, [r2]
- str r1, [r2, 0x4]
- ldr r0, _080C30A8 @ =0x84000060
- str r0, [r2, 0x8]
- ldr r0, [r2, 0x8]
- adds r1, r4, 0
- adds r1, 0xA
- lsls r1, 28
- lsls r0, r4, 20
- movs r2, 0x80
- lsls r2, 18
- adds r0, r2
- orrs r0, r1
- lsrs r1, r0, 16
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 21
- movs r2, 0x83
- lsls r2, 16
- adds r0, r2
- lsrs r5, r0, 16
- movs r2, 0
- ldr r6, _080C30AC @ =0x0600c000
-_080C307C:
- lsls r0, r2, 5
- adds r4, r2, 0x1
- adds r0, r5
- movs r3, 0x3
- lsls r0, 1
- adds r2, r0, r6
-_080C3088:
- strh r1, [r2]
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- adds r2, 0x2
- subs r3, 0x1
- cmp r3, 0
- bge _080C3088
- adds r2, r4, 0
- cmp r2, 0x2
- ble _080C307C
- b _080C30CA
- .align 2, 0
-_080C30A0: .4byte 0x06004000
-_080C30A4: .4byte 0x040000d4
-_080C30A8: .4byte 0x84000060
-_080C30AC: .4byte 0x0600c000
-_080C30B0:
- adds r1, r6, 0
- bl GetMonIconPtr
- lsls r1, r5, 9
- adds r0, r1
- adds r0, 0x80
- lsls r1, r4, 9
- ldr r2, _080C30D0 @ =0x06004000
- adds r1, r2
- movs r2, 0xC0
- lsls r2, 1
- bl RequestSpriteCopy
-_080C30CA:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080C30D0: .4byte 0x06004000
- thumb_func_end sub_80C3024
-
- thumb_func_start sub_80C30D4
-sub_80C30D4: @ 80C30D4
- push {r4-r7,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r7, r0, 24
- lsls r1, 24
- lsrs r6, r1, 24
- movs r5, 0
- ldr r4, _080C3108 @ =gContestMons
-_080C30E4:
- ldrh r0, [r4]
- lsls r1, r5, 24
- lsrs r1, 24
- ldr r2, [r4, 0x38]
- str r2, [sp]
- adds r2, r7, 0
- adds r3, r6, 0
- bl sub_80C3024
- adds r4, 0x40
- adds r5, 0x1
- cmp r5, 0x3
- ble _080C30E4
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080C3108: .4byte gContestMons
- thumb_func_end sub_80C30D4
-
- thumb_func_start sub_80C310C
-sub_80C310C: @ 80C310C
- push {r4-r6,lr}
- movs r4, 0
- ldr r6, _080C314C @ =gMonIconPaletteIndices
- movs r5, 0xA0
- lsls r5, 16
-_080C3116:
- ldr r1, _080C3150 @ =gContestMons
- lsls r0, r4, 6
- adds r0, r1
- ldrh r0, [r0]
- movs r1, 0
- bl mon_icon_convert_unown_species_id
- lsls r0, 16
- lsrs r0, 16
- adds r0, r6
- ldrb r0, [r0]
- lsls r0, 5
- ldr r1, _080C3154 @ =gMonIconPalettes
- adds r0, r1
- lsrs r1, r5, 16
- movs r2, 0x20
- bl LoadPalette
- movs r0, 0x80
- lsls r0, 13
- adds r5, r0
- adds r4, 0x1
- cmp r4, 0x3
- ble _080C3116
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080C314C: .4byte gMonIconPaletteIndices
-_080C3150: .4byte gContestMons
-_080C3154: .4byte gMonIconPalettes
- thumb_func_end sub_80C310C
-
thumb_func_start sub_80C3158
sub_80C3158: @ 80C3158
push {r4-r7,lr}
diff --git a/data/contest_link_80C2020.s b/data/contest_link_80C2020.s
deleted file mode 100644
index f0ad06a32..000000000
--- a/data/contest_link_80C2020.s
+++ /dev/null
@@ -1,78 +0,0 @@
- .include "include/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gUnknown_083D1624:: @ 83D1624
- .incbin "graphics/unknown/unknown_3D1624/0.4bpp"
-
-gUnknown_083D1644:: @ 83D1644
- .incbin "graphics/unknown/unknown_3D1624/1.4bpp"
- .incbin "graphics/unknown/unknown_3D1624/2.4bpp"
- .incbin "graphics/unknown/unknown_3D1624/3.4bpp"
- .incbin "graphics/unknown/unknown_3D1624/4.4bpp"
- .incbin "graphics/unknown/unknown_3D1624/5.4bpp"
-
-gUnknown_083D16E4:: @ 83D16E4
- .incbin "graphics/unknown/unknown_3D1624/6.4bpp"
- .incbin "graphics/unknown/unknown_3D1624/7.4bpp"
-
- .align 2
-gMiscBlank_Pal::
- .incbin "graphics/interface/blank.gbapal"
-
- .align 2
-gOamData_83D1744:: @ 83D1744
- .2byte 0x4000
- .2byte 0xC000
- .2byte 0x2C00
-
- .align 2
-gSpriteTemplate_83D174C:: @ 83D174C
- spr_template 3009, 3009, gOamData_83D1744, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-
- .align 2
-gUnknown_083D1764:: @ 83D1764
- obj_tiles gMiscBlank_Gfx, 1024, 0x0bc1
- obj_tiles gMiscBlank_Gfx, 1024, 0x0bc2
- obj_tiles gMiscBlank_Gfx, 1024, 0x0bc3
- obj_tiles gMiscBlank_Gfx, 1024, 0x0bc4
- obj_tiles gMiscBlank_Gfx, 1024, 0x0bc5
- obj_tiles gMiscBlank_Gfx, 1024, 0x0bc6
- obj_tiles gMiscBlank_Gfx, 1024, 0x0bc7
- obj_tiles gMiscBlank_Gfx, 1024, 0x0bc8
-
- .align 2
-gUnknown_083D17A4:: @ 83D17A4
- obj_pal gMiscBlank_Pal, 0x0BC1
-
- .align 2
-gOamData_83D17AC:: @ 83D17AC
- .2byte 0x0000
- .2byte 0x0000
- .2byte 0x0000
-
- .align 2
-gSpriteTemplate_83D17B4:: @ 83D17B4
- spr_template 3017, 3017, gOamData_83D17AC, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80C3DF0
-
- .align 2
-gUnknown_083D17CC:: @ 83D17CC
- obj_tiles gContestConfetti_Gfx, 544, 0x0bc9
-
- .align 2
-gUnknown_083D17D4:: @ 83D17D4
- obj_pal gContestConfetti_Pal, 0x0bc9
-
-gUnknown_083D17DC:: @ 83D17DC
- .string "{COLOR RED}$"
-
-gUnknown_083D17E0:: @ 83D17E0
- .string "/$"
-
-gUnknown_083D17E2:: @ 83D17E2
- .string "{SIZE 3}{COLOR_HIGHLIGHT_SHADOW WHITE2 DARK_GREY LIGHT_BLUE}$"
-
- .align 2
- .incbin "graphics/unknown/unknown_3D17EC.gbapal"
diff --git a/include/battle.h b/include/battle.h
index 346423e65..c9bbb56eb 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -725,6 +725,21 @@ void MarkBufferBankForExecution(u8 bank);
extern u8 gBattleTextBuff1[];
+extern u16 gBattle_BG0_X;
+extern u16 gBattle_BG0_Y;
+extern u16 gBattle_BG1_X;
+extern u16 gBattle_BG1_Y;
+extern u16 gBattle_BG2_X;
+extern u16 gBattle_BG2_Y;
+extern u16 gBattle_BG3_X;
+extern u16 gBattle_BG3_Y;
+extern u16 gBattle_WIN0H;
+extern u16 gBattle_WIN0V;
+extern u16 gBattle_WIN1H;
+extern u16 gBattle_WIN1V;
+
+extern u8 gDisplayedStringBattle[];
+
extern u16 gBattleTypeFlags;
extern u8 gUnknown_02023A14_50;
extern u16 gTrainerBattleOpponent;
diff --git a/include/contest.h b/include/contest.h
index 86a5ea4d7..969ae51dd 100644
--- a/include/contest.h
+++ b/include/contest.h
@@ -438,6 +438,7 @@ extern u16 gUnknown_02038688[4];
extern u8 gContestFinalStandings[4];
extern u8 gUnknown_02038696[4];
extern u8 gUnknown_0203869B;
+extern u16 gSpecialVar_ContestRank;
extern u16 gSpecialVar_ContestCategory;
void SetContestantEffectStringID(u8 a, u8 b);
diff --git a/include/graphics.h b/include/graphics.h
index 8e95d100d..8e8e0c97e 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -3345,6 +3345,9 @@ extern struct BattleAnimBackground gBattleAnimBackgroundTilemap_17;
extern struct BattleAnimBackground gBattleAnimBackgroundTilemap_20;
extern struct BattleAnimBackground gBattleAnimBackgroundTilemap_21;
+extern const u8 gContestConfetti_Gfx[];
+extern const u8 gContestConfetti_Pal[];
+
extern const struct CompressedSpriteSheet gBattleTerrainTiles_TallGrass[];
extern const u8 gBattleTerrainTilemap_TallGrass[];
extern const struct CompressedSpriteSheet gBattleTerrainAnimTiles_TallGrass[];
diff --git a/include/pokemon_icon.h b/include/pokemon_icon.h
index a1a965d81..ad0e4b56b 100644
--- a/include/pokemon_icon.h
+++ b/include/pokemon_icon.h
@@ -15,6 +15,8 @@ void sub_809D580(u16);
void sub_809D608(u16);
void sub_809D62C(struct Sprite *sprite);
void sub_809D824(struct Sprite *sprite, u8 animNum);
+const u8 *GetMonIconPtr(u16 species, u32 personality);
u16 mon_icon_convert_unown_species_id(u16 species, u32 personality);
+extern const u8 gMonIconPaletteIndices[];
#endif // GUARD_POKEMON_ICON_H
diff --git a/include/tv.h b/include/tv.h
index 787f0e9c4..a7064f8fd 100644
--- a/include/tv.h
+++ b/include/tv.h
@@ -27,6 +27,7 @@ void sub_80BE160(TVShow *show);
void sub_80BE160(TVShow *);
void sub_80BE188(void);
void sub_80BE23C(u16);
+void sub_80BE284(u8 contestResult);
void sub_80BE320(void);
void StartMassOutbreak(void);
void sub_80BE5FC(void);
diff --git a/ld_script.txt b/ld_script.txt
index 5d3fa0f4d..9ccf09013 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -160,6 +160,7 @@ SECTIONS {
src/debug/sound_check_menu.o(.text);
src/secret_base.o(.text);
src/tv.o(.text);
+ src/battle/contest_link_80C2020.o(.text);
asm/contest_link_80C2020.o(.text);
src/script_pokemon_util_80C4BF0.o(.text);
src/field_poison.o(.text);
@@ -584,7 +585,7 @@ SECTIONS {
src/debug/sound_check_menu.o(.rodata);
src/secret_base.o(.rodata);
src/tv.o(.rodata);
- data/contest_link_80C2020.o(.rodata);
+ src/battle/contest_link_80C2020.o(.rodata);
src/pokemon_size_record.o(.rodata);
src/pc_screen_effect.o(.rodata);
src/pc_screen_effect.o(.data);
diff --git a/src/battle/anim/battle_intro.c b/src/battle/anim/battle_intro.c
index d96dc7ea8..a189b1425 100644
--- a/src/battle/anim/battle_intro.c
+++ b/src/battle/anim/battle_intro.c
@@ -12,11 +12,6 @@
#include "trig.h"
extern u16 gBattleTypeFlags;
-extern u16 gBattle_BG1_X;
-extern u16 gBattle_BG1_Y;
-extern u16 gBattle_BG2_X;
-extern u16 gBattle_BG2_Y;
-extern u16 gBattle_WIN0V;
extern u16 gUnknown_02024DE8;
extern u8 gBattleMonForms[];
@@ -376,7 +371,7 @@ static void BattleIntroTask_ScrollAndFadeScenery(u8 taskId)
REG_BLDALPHA = gTasks[taskId].data[4];
}
-// Seems to only be used for link battles.
+// Seems to only be used for link battles.
static void BattleIntroTask_80E4C34(u8 taskId)
{
s32 i;
diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c
index 11ddd6b71..7b6004ce0 100644
--- a/src/battle/battle_2.c
+++ b/src/battle/battle_2.c
@@ -121,22 +121,10 @@ extern u16 gUnknown_02024DE8;
extern u8 gActionSelectionCursor[];
extern u8 gMoveSelectionCursor[];
extern u8 gUnknown_02038470[];
-extern u16 gBattle_BG3_X;
-extern u16 gBattle_BG1_Y;
-extern u16 gBattle_BG3_Y;
extern struct Window gUnknown_030041D0;
-extern u16 gBattle_WIN1H;
extern struct Window gUnknown_03004210;
-extern u16 gBattle_WIN1V;
extern struct Window gUnknown_03004250;
-extern u16 gBattle_WIN0V;
-extern u16 gBattle_BG2_Y;
extern u32 gUnknown_03004284;
-extern u16 gBattle_BG2_X;
-extern u16 gBattle_BG0_Y;
-extern u16 gBattle_BG0_X;
-extern u16 gBattle_BG1_X;
-extern u16 gBattle_WIN0H;
extern MainCallback gPreBattleCallback1;
extern void (*gBattleMainFunc)(void);
extern u8 gLeveledUpInBattle;
diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c
index d1435d8ea..54cacd0cb 100644
--- a/src/battle/battle_4.c
+++ b/src/battle/battle_4.c
@@ -164,7 +164,6 @@ extern u16 gChosenMove; //last used move in battle
extern u8 gBankInMenu;
extern u8 gActionForBanks[4];
extern u16 gUnknown_02024C2C[4]; //last used moves 2, used by sketch
-extern u16 gBattle_BG3_X;
extern u16 gUnknown_02024C4C[4]; //last used moves by banks, another one
extern u8 gCurrentTurnActionNumber;
extern u16 gTrappingMoves[];
@@ -1991,7 +1990,7 @@ static void atk0B_healthbarupdate(void)
healthValue = currDmg;
else
healthValue = maxPossibleDmgValue;
-
+
EmitHealthBarUpdate(0, healthValue);
*/
@@ -5544,6 +5543,7 @@ static void atk23_getexp(void)
gBattleResources_statsBeforeLvlUp->spDef = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPDEF);
gActiveBattler = gBattleStruct->expGetterBank;
+
EmitExpBarUpdate(0, gBattleStruct->expGetterID, gBattleMoveDamage);
MarkBufferBankForExecution(gActiveBattler);
}
diff --git a/src/battle/battle_anim.c b/src/battle/battle_anim.c
index ebfe2401d..8b729d2ab 100644
--- a/src/battle/battle_anim.c
+++ b/src/battle/battle_anim.c
@@ -1311,14 +1311,6 @@ EWRAM_DATA u8 gAnimBankAttacker = 0;
EWRAM_DATA u8 gAnimBankTarget = 0;
EWRAM_DATA u16 gAnimSpeciesByBanks[4] = {0};
EWRAM_DATA u8 gUnknown_0202F7D2 = 0; // some global pan variable
-extern u16 gBattle_BG1_Y;
-extern u16 gBattle_WIN1H;
-extern u16 gBattle_WIN0V;
-extern u16 gBattle_WIN1V;
-extern u16 gBattle_BG2_Y;
-extern u16 gBattle_BG2_X;
-extern u16 gBattle_BG1_X;
-extern u16 gBattle_WIN0H;
u16 gSoundAnimFramesToWait;
s16 gBattleAnimArgs[ANIM_ARGS_COUNT];
diff --git a/src/battle/battle_controller_linkopponent.c b/src/battle/battle_controller_linkopponent.c
index 62df190a5..a759822cd 100644
--- a/src/battle/battle_controller_linkopponent.c
+++ b/src/battle/battle_controller_linkopponent.c
@@ -48,8 +48,6 @@ extern u8 gUnknown_02024E68[];
extern struct SpriteTemplate gUnknown_02024E8C;
extern u8 gAnimMoveTurn;
extern struct Window gUnknown_03004210;
-extern u16 gBattle_BG0_Y;
-extern u16 gBattle_BG0_X;
extern u8 gUnknown_0300434C[];
extern u32 gBattleExecBuffer;
extern MainCallback gPreBattleCallback1;
@@ -1143,7 +1141,7 @@ void LinkOpponentHandlecmd3(void)
u8 *dst;
u8 i;
- MEMSET_ALT(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleBufferA[gActiveBattler][1],
+ MEMSET_ALT(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleBufferA[gActiveBattler][1],
gBattleBufferA[gActiveBattler][3 + i], gBattleBufferA[gActiveBattler][2], i, dst);
LinkOpponentBufferExecCompleted();
diff --git a/src/battle/battle_controller_linkpartner.c b/src/battle/battle_controller_linkpartner.c
index 12eb62a2b..16aef5791 100644
--- a/src/battle/battle_controller_linkpartner.c
+++ b/src/battle/battle_controller_linkpartner.c
@@ -48,8 +48,6 @@ extern u8 gAnimFriendship;
extern u16 gWeatherMoveAnim;
extern u8 gAnimMoveTurn;
extern struct Window gUnknown_03004210;
-extern u16 gBattle_BG0_Y;
-extern u16 gBattle_BG0_X;
extern MainCallback gPreBattleCallback1;
extern void (*gBattleBankFunc[])(void);
extern u8 gHealthboxIDs[];
@@ -1091,7 +1089,7 @@ void LinkPartnerHandlecmd3(void)
u8 *dst;
u8 i;
- MEMSET_ALT(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleBufferA[gActiveBattler][1],
+ MEMSET_ALT(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleBufferA[gActiveBattler][1],
gBattleBufferA[gActiveBattler][3 + i], gBattleBufferA[gActiveBattler][2], i, dst);
LinkPartnerBufferExecCompleted();
diff --git a/src/battle/battle_controller_opponent.c b/src/battle/battle_controller_opponent.c
index f6e7f92a7..d8760e21f 100644
--- a/src/battle/battle_controller_opponent.c
+++ b/src/battle/battle_controller_opponent.c
@@ -52,8 +52,6 @@ extern u8 gAnimMoveTurn;
extern u8 gAnimScriptActive;
extern void (*gAnimScriptCallback)(void);
extern struct Window gUnknown_03004210;
-extern u16 gBattle_BG0_Y;
-extern u16 gBattle_BG0_X;
extern u8 gDisplayedStringBattle[];
extern u8 gBankTarget;
extern u8 gAbsentBattlerFlags;
@@ -1115,7 +1113,7 @@ void OpponentHandlecmd3(void)
u8 *dst;
u8 i;
- MEMSET_ALT(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][3 + i],
+ MEMSET_ALT(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][3 + i],
gBattleBufferA[gActiveBattler][2], i, dst);
OpponentBufferExecCompleted();
}
diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c
index d1dcf8bf4..a83946554 100644
--- a/src/battle/battle_controller_player.c
+++ b/src/battle/battle_controller_player.c
@@ -35,9 +35,6 @@ struct MovePpInfo
#define SUB_803037C_TILE_DATA_OFFSET 444
#endif
-extern u16 gBattle_BG0_X;
-extern u16 gBattle_BG0_Y;
-
extern struct Window gUnknown_03004210;
extern void (*gBattleBankFunc[])(void);
@@ -71,13 +68,6 @@ extern u8 gUnknown_02024E68[];
extern struct SpriteTemplate gUnknown_02024E8C;
extern u8 gAnimMoveTurn;
extern u8 gUnknown_02038470[];
-extern u16 gBattle_BG3_X;
-extern u16 gBattle_BG1_Y;
-extern u16 gBattle_BG3_Y;
-extern u16 gBattle_BG2_Y;
-extern u16 gBattle_BG2_X;
-extern u16 gBattle_BG0_X;
-extern u16 gBattle_BG1_X;
extern u8 gUnknown_03004344;
extern u8 gUnknown_0300434C[];
@@ -151,8 +141,6 @@ extern u8 gAbsentBattlerFlags;
extern u8 gUnknown_03004344;
extern u8 gBattlersCount;
extern u16 gBattlerPartyIndexes[];
-extern u16 gBattle_BG0_Y;
-extern u16 gBattle_BG0_X;
extern struct Window gUnknown_03004210;
extern const u8 BattleText_SwitchWhich[];
extern u8 gUnknown_03004348;
diff --git a/src/battle/battle_controller_safari.c b/src/battle/battle_controller_safari.c
index 6bc56c19b..72054ee6b 100644
--- a/src/battle/battle_controller_safari.c
+++ b/src/battle/battle_controller_safari.c
@@ -24,8 +24,6 @@ extern u8 gActiveBattler;
extern const u8 BattleText_MenuOptionsSafari[];
extern void *gBattleBankFunc[];
-extern u16 gBattle_BG0_Y;
-extern u16 gBattle_BG0_X;
extern u8 gBattleBufferA[][0x200];
extern bool8 gDoingBattleAnim;
extern u8 gBankSpriteIds[];
diff --git a/src/battle/battle_controller_wally.c b/src/battle/battle_controller_wally.c
index 3f88d4c72..ed4eadee6 100644
--- a/src/battle/battle_controller_wally.c
+++ b/src/battle/battle_controller_wally.c
@@ -53,8 +53,6 @@ extern u8 gUnknown_02024E68[];
extern struct SpriteTemplate gUnknown_02024E8C;
extern u8 gAnimMoveTurn;
extern struct Window gUnknown_03004210;
-extern u16 gBattle_BG0_Y;
-extern u16 gBattle_BG0_X;
extern u8 gUnknown_0300434C[];
extern const u8 BattleText_WallyMenu[];
extern const u8 BattleText_MenuOptions[];
diff --git a/src/battle/contest_link_80C2020.c b/src/battle/contest_link_80C2020.c
new file mode 100644
index 000000000..10702b142
--- /dev/null
+++ b/src/battle/contest_link_80C2020.c
@@ -0,0 +1,1044 @@
+#include "global.h"
+#include "data2.h"
+#include "util.h"
+#include "overworld.h"
+#include "constants/songs.h"
+#include "ewram.h"
+#include "main.h"
+#include "scanline_effect.h"
+#include "decompress.h"
+#include "palette.h"
+#include "blend_palette.h"
+#include "graphics.h"
+#include "strings2.h"
+#include "text.h"
+#include "string_util.h"
+#include "menu.h"
+#include "sound.h"
+#include "pokedex.h"
+#include "pokemon_icon.h"
+#include "tv.h"
+#include "battle.h"
+#include "contest.h"
+#include "link.h"
+#include "field_effect.h"
+#include "field_specials.h"
+#include "contest_link_80C857C.h"
+#include "contest_link_80C2020.h"
+
+#define ABS(x) ((x) < 0 ? -(x) : (x))
+
+#define GET_CONTEST_WINNER(var) { \
+ for ((var) = 0; (var) < 4; (var)++) \
+ { \
+ if (gContestFinalStandings[i] == 0) \
+ break; \
+ } \
+}
+
+struct UnkEwramStruct18000 {
+ u8 unk_00;
+ u8 filler_01[1];
+ u8 unk_02;
+ u8 unk_03;
+ u8 unk_04;
+ u8 unk_05;
+ u8 unk_06;
+ u8 filler_07[1];
+ u8 unk_08;
+ u8 unk_09;
+ u8 unk_0a;
+ u8 filler_0b[9];
+ u8 unk_14;
+};
+
+struct UnkEwramStruct18018 {
+ u8 filler_00[0x50];
+};
+
+#define eContestLink80C2020Struct2018000 (*(struct UnkEwramStruct18000 *)(gSharedMem + 0x18000))
+#define eContestLink80C2020Struct2018018 (*(struct UnkEwramStruct18018 *)(gSharedMem + 0x18018))
+#define eContestLink80C2020Struct2018068 (gSharedMem + 0x18068)
+
+static void sub_80C2430(void);
+static void sub_80C2448(void);
+static void sub_80C24F4(u8 taskId);
+static void sub_80C255C(u8 taskId);
+static void sub_80C25A4(u8 taskId);
+static void sub_80C25C0(u8 taskId);
+static void sub_80C2600(u8 taskId);
+static void sub_80C26E4(u8 taskId);
+static void sub_80C2770(u8 taskId);
+static void sub_80C27EC(u8 taskId);
+static void sub_80C2878(u8 taskId);
+static void sub_80C2A8C(u8 taskId);
+static void sub_80C2D1C(u8 taskId);
+static void sub_80C2D80(u8 taskId);
+static void sub_80C2DD8(u8 taskId);
+static void sub_80C2E14(u8 taskId);
+static void sub_80C2EA0(u8 taskId);
+static void sub_80C2F28(u8 taskId);
+static void sub_80C2F64(u8 taskId);
+static void LoadAllContestMonIcons(u8 srcOffset, bool8 useDmaNow);
+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_80C3520(u16 a0);
+void sub_80C3698(const u8 *string);
+void sub_80C3764(void);
+void sub_80C37E4(void);
+u8 sub_80C3990(u8 a0, u8 a1);
+s8 sub_80C39E4(u8 a0, u8 a1);
+void sub_80C3A5C(u8 taskId);
+void sub_80C3B30(u8 taskId);
+void sub_80C3C44(struct Sprite *sprite);
+void sub_80C3CB8(struct Sprite *sprite);
+void sub_80C3D04(u8 taskId);
+void sub_80C3DF0(struct Sprite *sprite);
+void sub_80C3E60(u8 a0, u8 a1);
+void sub_80C3F00(void);
+void sub_80C40D4(u8 a0, u8 a1);
+
+const u16 gUnknown_083D1624[] = INCBIN_U16("graphics/unknown/unknown_3D1624/0.4bpp");
+const u16 gUnknown_083D1644[] = INCBIN_U16("graphics/unknown/unknown_3D1624/1.4bpp");
+const u16 gUnknown_083D1664[] = INCBIN_U16("graphics/unknown/unknown_3D1624/2.4bpp");
+const u16 gUnknown_083D1684[] = INCBIN_U16("graphics/unknown/unknown_3D1624/3.4bpp");
+const u16 gUnknown_083D16A4[] = INCBIN_U16("graphics/unknown/unknown_3D1624/4.4bpp");
+const u16 gUnknown_083D16C4[] = INCBIN_U16("graphics/unknown/unknown_3D1624/5.4bpp");
+const u16 gUnknown_083D16E4[] = INCBIN_U16("graphics/unknown/unknown_3D1624/6.4bpp");
+const u16 gUnknown_083D1704[] = INCBIN_U16("graphics/unknown/unknown_3D1624/7.4bpp");
+const u16 gMiscBlank_Pal[] = INCBIN_U16("graphics/interface/blank.gbapal");
+
+const struct OamData gOamData_83D1744 = {
+ .shape = ST_OAM_H_RECTANGLE,
+ .size = 3,
+ .priority = 3,
+ .paletteNum = 2
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D174C = {
+ 0xbc1,
+ 0xbc1,
+ &gOamData_83D1744,
+ gDummySpriteAnimTable,
+ NULL,
+ gDummySpriteAffineAnimTable,
+ SpriteCallbackDummy
+};
+
+const struct SpriteSheet gUnknown_083D1764[] = {
+ {gMiscBlank_Gfx, 0x400, 0xbc1},
+ {gMiscBlank_Gfx, 0x400, 0xbc2},
+ {gMiscBlank_Gfx, 0x400, 0xbc3},
+ {gMiscBlank_Gfx, 0x400, 0xbc4},
+ {gMiscBlank_Gfx, 0x400, 0xbc5},
+ {gMiscBlank_Gfx, 0x400, 0xbc6},
+ {gMiscBlank_Gfx, 0x400, 0xbc7},
+ {gMiscBlank_Gfx, 0x400, 0xbc8},
+};
+
+const struct SpritePalette gUnknown_083D17A4 = {
+ gMiscBlank_Pal, 0xbc1
+};
+
+const struct OamData gOamData_83D17AC = {};
+
+const struct SpriteTemplate gSpriteTemplate_83D17B4 = {
+ 0xbc9,
+ 0xbc9,
+ &gOamData_83D17AC,
+ gDummySpriteAnimTable,
+ NULL,
+ gDummySpriteAffineAnimTable,
+ sub_80C3DF0
+};
+
+const struct CompressedSpriteSheet gUnknown_083D17CC = {gContestConfetti_Gfx, 0x220, 0xbc9};
+
+const struct CompressedSpritePalette gUnknown_083D17D4 = {gContestConfetti_Pal, 0xbc9};
+
+const u8 gUnknown_083D17DC[] = _("{COLOR RED}");
+const u8 gUnknown_083D17E0[] = _("/");
+const u8 gUnknown_083D17E2[] = _("{SIZE 3}{COLOR_HIGHLIGHT_SHADOW WHITE2 DARK_GREY LIGHT_BLUE}");
+
+void sub_80C2020(void)
+{
+ REG_DISPCNT = DISPCNT_OBJ_1D_MAP;
+ Text_LoadWindowTemplate(&gWindowTemplate_81E6FA0);
+ Text_InitWindowWithTemplate(&gMenuWindow, &gWindowTemplate_81E6FA0);
+ REG_BG0CNT = BGCNT_WRAP | BGCNT_SCREENBASE(30);
+ REG_BG1CNT = BGCNT_PRIORITY(3) | BGCNT_SCREENBASE(24);
+ REG_BG2CNT = BGCNT_PRIORITY(3) | BGCNT_SCREENBASE(28);
+ REG_BG3CNT = BGCNT_WRAP | BGCNT_PRIORITY(3) | BGCNT_SCREENBASE(26);
+ REG_MOSAIC = 0;
+ REG_WININ = 0x3f3f;
+ REG_WINOUT = 0x3f2e;
+ REG_WIN0H = 0;
+ REG_WIN0V = 0;
+ REG_WIN1H = 0;
+ REG_WIN1V = 0;
+ REG_BLDCNT = 0;
+ REG_BLDALPHA = 0;
+ REG_BLDY = 0;
+ REG_BG0HOFS = 0;
+ REG_BG0VOFS = 0;
+ REG_BG1HOFS = 0;
+ REG_BG1VOFS = 0;
+ REG_BG2HOFS = 0;
+ REG_BG2VOFS = 0;
+ REG_BG3HOFS = 0;
+ REG_BG3VOFS = 0;
+ REG_DISPCNT |= DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON | DISPCNT_WIN1_ON;
+ gBattle_BG0_X = 0;
+ gBattle_BG0_Y = 0;
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ gBattle_BG2_X = 0;
+ gBattle_BG2_Y = 0;
+ gBattle_BG3_X = 0;
+ gBattle_BG3_Y = 0;
+ gBattle_WIN0H = 0;
+ gBattle_WIN0V = 0;
+ gBattle_WIN1H = 0;
+ gBattle_WIN1V = 0;
+}
+
+void sub_80C2144(void)
+{
+ int i;
+ int j;
+ s8 r7;
+ s8 r4;
+ u16 r6;
+ u16 r3;
+
+ DmaFill32Large(3, 0, VRAM, VRAM_SIZE, 0x1000);
+ LZDecompressVram(gUnknown_08D1977C, BG_SCREEN_ADDR(0));
+ LZDecompressVram(gUnknown_08D1A490, BG_SCREEN_ADDR(26));
+ LZDecompressVram(gUnknown_08D1A364, BG_SCREEN_ADDR(28));
+ LZDecompressVram(gUnknown_08D1A250, BG_SCREEN_ADDR(30));
+ sub_80C37E4();
+ LoadCompressedPalette(gUnknown_08D1A618, 0, 0x200);
+ LoadFontDefaultPalette(&gWindowTemplate_81E6FA0);
+ for (i = 0; i < 4; i++)
+ {
+ r7 = sub_80C3990(i, 1);
+ r4 = sub_80C39E4(i, 1);
+ for (j = 0; j < 10; j++)
+ {
+ r6 = 0x60b2;
+ if (j < r7)
+ r6 = 0x60b4;
+ if (j < ABS(r4))
+ {
+ r3 = 0x60a4;
+ if (r4 < 0)
+ r3 = 0x60a6;
+ }
+ else
+ r3 = 0x60a2;
+ ((u16 *)BG_VRAM)[i * 0x60 + j + 0x60b3] = r6;
+ ((u16 *)BG_VRAM)[i * 0x60 + j + 0x60d3] = r3;
+ }
+ }
+}
+
+void sub_80C226C(u8 a0)
+{
+ u8 *strbuf;
+
+ if (a0 == gContestPlayerMonIndex)
+ strbuf = StringCopy(gDisplayedStringBattle, gUnknown_083D17DC);
+ else
+ strbuf = gDisplayedStringBattle;
+ strbuf[0] = EXT_CTRL_CODE_BEGIN;
+ strbuf[1] = 0x06;
+ strbuf[2] = 0x04;
+ strbuf += 3;
+ strbuf = StringCopy(strbuf, gContestMons[a0].nickname);
+ strbuf[0] = EXT_CTRL_CODE_BEGIN;
+ strbuf[1] = 0x13;
+ strbuf[2] = 0x32;
+ strbuf += 3;
+ strbuf = StringCopy(strbuf, gUnknown_083D17E0);
+ if (gIsLinkContest & 1)
+ StringCopy(strbuf, gLinkPlayers[a0].name);
+ else
+ StringCopy(strbuf, gContestMons[a0].trainerName);
+ Text_InitWindowAndPrintText(&gMenuWindow, gDisplayedStringBattle, a0 * 36 + 770, 7, a0 * 3 + 4);
+}
+
+void sub_80C2340(void)
+{
+ int i;
+
+ for (i = 0; i < 4; i++)
+ sub_80C226C(i);
+}
+
+void sub_80C2358(void)
+{
+ gPaletteFade.bufferTransferDisabled = TRUE;
+ SetVBlankCallback(NULL);
+ sub_80C2020();
+ ScanlineEffect_Clear();
+ ResetPaletteFade();
+ ResetSpriteData();
+ ResetTasks();
+ FreeAllSpritePalettes();
+ sub_80C2144();
+ sub_80C310C();
+ LoadAllContestMonIcons(0, TRUE);
+ sub_80C2340();
+ eContestLink80C2020Struct2018000 = (struct UnkEwramStruct18000){};
+ eContestLink80C2020Struct2018018 = (struct UnkEwramStruct18018){};
+ sub_80C33DC();
+ BeginNormalPaletteFade(0xffffffff, 0, 16, 0, 0);
+ gPaletteFade.bufferTransferDisabled = FALSE;
+ eContestLink80C2020Struct2018000.unk_02 = CreateTask(sub_80C24F4, 5);
+ SetMainCallback2(sub_80C2430);
+ gBattle_WIN1H = 0xf0;
+ gBattle_WIN1V = 0x80a0;
+ CreateTask(sub_80C2F28, 20);
+ sub_80C3F00();
+ PlayBGM(MUS_CON_K);
+ SetVBlankCallback(sub_80C2448);
+}
+
+static void sub_80C2430(void)
+{
+ AnimateSprites();
+ BuildOamBuffer();
+ RunTasks();
+ UpdatePaletteFade();
+}
+
+static void sub_80C2448(void)
+{
+ REG_BG0HOFS = gBattle_BG0_X;
+ REG_BG0VOFS = gBattle_BG0_Y;
+ REG_BG1HOFS = gBattle_BG1_X;
+ REG_BG1VOFS = gBattle_BG1_Y;
+ REG_BG2HOFS = gBattle_BG2_X;
+ REG_BG2VOFS = gBattle_BG2_Y;
+ REG_BG3HOFS = gBattle_BG3_X;
+ REG_BG3VOFS = gBattle_BG3_Y;
+ REG_WIN0H = gBattle_WIN0H;
+ REG_WIN0V = gBattle_WIN0V;
+ REG_WIN1H = gBattle_WIN1H;
+ REG_WIN1V = gBattle_WIN1V;
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+ ScanlineEffect_InitHBlankDmaTransfer();
+}
+
+static void sub_80C24F4(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ if (gIsLinkContest & 1)
+ {
+ sub_80C3698(gOtherText_LinkStandby);
+ gTasks[taskId].func = sub_80C255C;
+ }
+ else
+ {
+ gTasks[taskId].func = sub_80C2600;
+ }
+ }
+}
+
+static void sub_80C255C(u8 taskId)
+{
+ if (gReceivedRemoteLinkPlayers && GetLinkPlayerCount() == MAX_LINK_PLAYERS)
+ {
+ CreateTask(sub_80C25A4, 0);
+ gTasks[taskId].func = TaskDummy;
+ }
+}
+
+static void sub_80C25A4(u8 taskId)
+{
+ SetTaskFuncWithFollowupFunc(taskId, sub_80C89DC, sub_80C25C0);
+}
+
+static void sub_80C25C0(u8 taskId)
+{
+ if (IsLinkTaskFinished())
+ {
+ DestroyTask(taskId);
+ gTasks[eContestLink80C2020Struct2018000.unk_02].func = sub_80C2600;
+ sub_80C3764();
+ }
+}
+
+static void sub_80C2600(u8 taskId)
+{
+ if (gTasks[taskId].data[0] == 0)
+ {
+ CreateTask(sub_80C2F64, 20);
+ sub_80C3158(gContestText_AnnounceResults, eContestLink80C2020Struct2018000.unk_00);
+ sub_80C34CC(sub_80C34AC(gContestText_AnnounceResults), 0x90, 0x78, 0x440);
+ gTasks[taskId].data[0]++;
+ }
+ else if (gTasks[taskId].data[0] == 1)
+ {
+ if (eContestLink80C2020Struct2018000.unk_04 == 0)
+ {
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].data[0]++;
+ }
+ }
+ else if (gTasks[taskId].data[0] == 2)
+ {
+ if (++gTasks[taskId].data[1] == 0x15)
+ {
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].data[0]++;
+ }
+ }
+ else if (gTasks[taskId].data[0] == 3)
+ {
+ sub_80C3158(gContestText_PreliminaryResults, eContestLink80C2020Struct2018000.unk_00);
+ sub_80C34CC(sub_80C34AC(gContestText_PreliminaryResults), 0x90, 0xffff, 0x440);
+ gTasks[taskId].data[0]++;
+ }
+ else if (gTasks[taskId].data[0] == 4)
+ {
+ if (eContestLink80C2020Struct2018000.unk_04 == 2)
+ {
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].func = sub_80C26E4;
+ }
+ }
+}
+
+static void sub_80C26E4(u8 taskId)
+{
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ if (eContestLink80C2020Struct2018000.unk_0a == 0)
+ {
+ sub_80C40D4(0, gTasks[taskId].data[2]++);
+ if (eContestLink80C2020Struct2018000.unk_14 == 0)
+ {
+ gTasks[taskId].data[0] = 2;
+ }
+ else
+ {
+ gTasks[taskId].data[0]++;
+ }
+ }
+ break;
+ case 1:
+ if (eContestLink80C2020Struct2018000.unk_14 == 0)
+ {
+ gTasks[taskId].data[0] = 0;
+ }
+ break;
+ case 2:
+ sub_80C3520(0x440);
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[2] = 0;
+ gTasks[taskId].func = sub_80C2770;
+ break;
+ }
+}
+
+static void sub_80C2770(u8 taskId)
+{
+ if (eContestLink80C2020Struct2018000.unk_04 == 0)
+ {
+ if (++gTasks[taskId].data[1] == 21)
+ {
+ gTasks[taskId].data[1] = 0;
+ sub_80C3158(gContestText_Round2Results, eContestLink80C2020Struct2018000.unk_00);
+ sub_80C34CC(sub_80C34AC(gContestText_Round2Results), 0x90, 0xffff, 0x440);
+ }
+ }
+ else if (eContestLink80C2020Struct2018000.unk_04 == 2)
+ {
+ gTasks[taskId].func = sub_80C27EC;
+ }
+}
+
+static void sub_80C27EC(u8 taskId)
+{
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ if (eContestLink80C2020Struct2018000.unk_0a == 0)
+ {
+ sub_80C40D4(1, gTasks[taskId].data[2]++);
+ if (eContestLink80C2020Struct2018000.unk_14 == 0)
+ {
+ gTasks[taskId].data[0] = 2;
+ }
+ else
+ {
+ gTasks[taskId].data[0]++;
+ }
+ }
+ break;
+ case 1:
+ if (eContestLink80C2020Struct2018000.unk_14 == 0)
+ {
+ gTasks[taskId].data[0] = 0;
+ }
+ break;
+ case 2:
+ sub_80C3520(0x440);
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].func = sub_80C2878;
+ break;
+ }
+}
+
+static void sub_80C2878(u8 taskId)
+{
+ int i;
+ u8 taskId2;
+ u8 strbuf[100];
+
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ if (eContestLink80C2020Struct2018000.unk_04 == 0)
+ gTasks[taskId].data[0]++;
+ break;
+ case 1:
+ if (++gTasks[taskId].data[1] == 31)
+ {
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 2:
+ for (i = 0; i < 4; i++)
+ {
+ taskId2 = CreateTask(sub_80C3A5C, 10);
+ gTasks[taskId2].data[0] = gContestFinalStandings[i];
+ gTasks[taskId2].data[1] = i;
+ }
+ gTasks[taskId].data[0]++;
+ break;
+ case 3:
+ if (eContestLink80C2020Struct2018000.unk_05 == 4)
+ {
+ if (++gTasks[taskId].data[1] == 31)
+ {
+ gTasks[taskId].data[1] = 0;
+ CreateTask(sub_80C3B30, 10);
+ gTasks[taskId].data[0]++;
+ GET_CONTEST_WINNER(i);
+ sub_80C3E60(i, 14);
+ }
+ }
+ break;
+ case 4:
+ if (++gTasks[taskId].data[1] == 21)
+ {
+ gTasks[taskId].data[1] = 0;
+ GET_CONTEST_WINNER(i);
+ if (gIsLinkContest & 1)
+ {
+ StringCopy(gStringVar1, gLinkPlayers[i].name);
+ }
+ else
+ {
+ StringCopy(gStringVar1, gContestMons[i].trainerName);
+ }
+ StringCopy(gStringVar2, gContestMons[i].nickname);
+ StringExpandPlaceholders(strbuf, gContestText_PokeWon);
+ sub_80C3158(strbuf, eContestLink80C2020Struct2018000.unk_00);
+ sub_80C34CC(sub_80C34AC(strbuf), 0x90, 0xffff, 0x440);
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 5:
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].func = sub_80C2A8C;
+ break;
+ }
+}
+
+static void sub_80C2A8C(u8 taskId)
+{
+ int i;
+ u8 spriteId;
+ u16 species;
+ u32 personality;
+ u32 otId;
+ const struct CompressedSpritePalette *monPal;
+
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ gBattle_WIN0H = 0xf0;
+ gBattle_WIN0V = 0x5050;
+ GET_CONTEST_WINNER(i);
+ species = gContestMons[i].species;
+ personality = gContestMons[i].personality;
+ otId = gContestMons[i].otId;
+ HandleLoadSpecialPokePic(gMonFrontPicTable + species, gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, (intptr_t)gSharedMem, gUnknown_081FAF4C[1], species, personality);
+ monPal = GetMonSpritePalStructFromOtIdPersonality(species, otId, personality);
+ LoadCompressedObjectPalette(monPal);
+ GetMonSpriteTemplate_803C56C(species, 1);
+ gUnknown_02024E8C.paletteTag = monPal->tag;
+ spriteId = CreateSprite(&gUnknown_02024E8C, 0x110, 0x50, 10);
+ gSprites[spriteId].data[1] = species;
+ gSprites[spriteId].oam.priority = 0;
+ gSprites[spriteId].callback = sub_80C3C44;
+ eContestLink80C2020Struct2018000.unk_08 = spriteId;
+ LoadCompressedObjectPic(&gUnknown_083D17CC);
+ LoadCompressedObjectPalette(&gUnknown_083D17D4);
+ CreateTask(sub_80C3D04, 10);
+ gTasks[taskId].data[0]++;
+ break;
+ case 1:
+ if (++gTasks[taskId].data[3] == 1)
+ {
+ u8 win0v;
+ gTasks[taskId].data[3] = 0;
+ gTasks[taskId].data[2] += 2;
+ if (gTasks[taskId].data[2] > 0x20)
+ gTasks[taskId].data[2] = 0x20;
+ win0v = gTasks[taskId].data[2];
+ gBattle_WIN0V = ((0x50 - win0v) << 8) | (0x50 + win0v);
+ if (win0v == 0x20)
+ {
+ gTasks[taskId].data[0]++;
+ }
+ }
+ break;
+ case 2:
+ if (eContestLink80C2020Struct2018000.unk_06 == 1)
+ {
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 3:
+ if (++gTasks[taskId].data[1] == 121)
+ {
+ gTasks[taskId].data[1] = 0;
+ gSprites[eContestLink80C2020Struct2018000.unk_08].callback = sub_80C3CB8;
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 4:
+ if (eContestLink80C2020Struct2018000.unk_06 == 2)
+ {
+ u8 win0v = (gBattle_WIN0V >> 8);
+ win0v += 2;
+ if (win0v > 0x50)
+ win0v = 0x50;
+ gBattle_WIN0V = (win0v << 8) | (0xa0 - win0v);
+ if (win0v == 0x50)
+ {
+ gTasks[taskId].data[0]++;
+ }
+ }
+ break;
+ case 5:
+ if (eContestLink80C2020Struct2018000.unk_06 == 2)
+ {
+ eContestLink80C2020Struct2018000.unk_09 = 1;
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].func = sub_80C2D1C;
+ }
+ break;
+ }
+}
+
+static void sub_80C2D1C(u8 taskId)
+{
+ int i;
+
+ if (gMain.newKeys & A_BUTTON)
+ {
+ if (!(gIsLinkContest & 1))
+ {
+ for (i = 0; i < 4; i++)
+ {
+ GetSetPokedexFlag(SpeciesToNationalPokedexNum(gContestMons[i].species), FLAG_SET_SEEN);
+ }
+ }
+ gTasks[taskId].func = sub_80C2D80;
+ }
+}
+
+static void sub_80C2D80(u8 taskId)
+{
+ if (gIsLinkContest & 1)
+ {
+ sub_80C3698(gOtherText_LinkStandby);
+ sub_800832C();
+ gTasks[taskId].func = sub_80C2DD8;
+ }
+ else
+ {
+ gTasks[taskId].func = sub_80C2E14;
+ }
+}
+
+static void sub_80C2DD8(u8 taskId)
+{
+ if (gReceivedRemoteLinkPlayers == 0)
+ {
+ gIsLinkContest = 0;
+ sub_80C3764();
+ gTasks[taskId].func = sub_80C2E14;
+ }
+}
+
+static void sub_80C2E14(u8 taskId)
+{
+ sub_80BE284(gContestFinalStandings[gContestPlayerMonIndex]);
+ sub_810FB10(2);
+ Contest_SaveWinner(gSpecialVar_ContestRank);
+ Contest_SaveWinner(0xFE);
+ ewram15DDF = 1;
+ ewram15DDE = sub_80B2C4C(0xfe, 0);
+ BeginHardwarePaletteFade(0xff, 0, 0, 16, 0);
+ gTasks[taskId].func = sub_80C2EA0;
+}
+
+static void sub_80C2EA0(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ if (gTasks[taskId].data[1] == 0)
+ {
+ DestroyTask(eContestLink80C2020Struct2018000.unk_03);
+ BlendPalettes(0x0000ffff, 16, 0);
+ gTasks[taskId].data[1]++;
+ }
+ else if (gTasks[taskId].data[1] == 1)
+ {
+ BlendPalettes(0xffff0000, 16, 0);
+ gTasks[taskId].data[1]++;
+ }
+ else
+ {
+ REG_BLDCNT = 0;
+ REG_BLDY = 0;
+ DestroyTask(taskId);
+ SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music);
+ }
+ }
+}
+
+static void sub_80C2F28(u8 taskId)
+{
+ gBattle_BG3_X += 2;
+ gBattle_BG3_Y++;
+ if (gBattle_BG3_X > 0xff)
+ gBattle_BG3_X -= 0xff;
+ if (gBattle_BG3_Y > 0xff)
+ gBattle_BG3_Y -= 0xff;
+}
+
+static void sub_80C2F64(u8 taskId)
+{
+ if (++gTasks[taskId].data[0] == 2)
+ {
+ gTasks[taskId].data[0] = 0;
+ if (gTasks[taskId].data[2] == 0)
+ gTasks[taskId].data[1]++;
+ else
+ gTasks[taskId].data[1]--;
+ if (gTasks[taskId].data[1] == 16)
+ gTasks[taskId].data[2] = 1;
+ else if (gTasks[taskId].data[1] == 0)
+ gTasks[taskId].data[2] = 0;
+ BlendPalette(0x6b, 0x01, gTasks[taskId].data[1], RGB(30, 22, 11));
+ BlendPalette(0x68, 0x01, gTasks[taskId].data[1], RGB(31, 31, 31));
+ BlendPalette(0x6e, 0x01, gTasks[taskId].data[1], RGB(30, 29, 29));
+ }
+ if (gTasks[taskId].data[1] == 0)
+ eContestLink80C2020Struct2018000.unk_0a = 0;
+ else
+ eContestLink80C2020Struct2018000.unk_0a = 1;
+}
+
+#ifdef NONMATCHING
+void sub_80C3024(u16 species, u8 destOffset, u8 srcOffset, bool8 useDmaNow, u32 personality)
+{
+ int i;
+ int j;
+ u16 tile;
+ u16 offset;
+ int vOffset;
+
+ if (useDmaNow)
+ {
+ DmaCopy32Defvars(3, GetMonIconPtr(species, personality) + (srcOffset << 9) + 0x80, BG_CHAR_ADDR(1) + (destOffset << 9), 0x180);
+ tile = ((destOffset + 10) << 12);
+ tile |= (destOffset * 16 + 0x200);
+ offset = destOffset * 0x60 + 0x83;
+ for (i = 0; i < 3; i++)
+ {
+ vOffset = (i << 5) + offset;
+ for (j = 0; j < 4; j++)
+ {
+ ((u16 *)BG_CHAR_ADDR(3))[vOffset + j] = tile;
+ tile++;
+ }
+ }
+ }
+ else
+ {
+ RequestSpriteCopy(GetMonIconPtr(species, personality) + (srcOffset << 9) + 0x80, BG_CHAR_ADDR(1) + (destOffset << 9), 0x180);
+ }
+}
+#else
+__attribute__((naked)) void sub_80C3024(u16 species, u8 destOffset, u8 srcOffset, bool8 useDmaNow, u32 personality)
+{
+ asm_unified("\tpush {r4-r6,lr}\n"
+ "\tldr r6, [sp, 0x10]\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tlsls r1, 24\n"
+ "\tlsrs r4, r1, 24\n"
+ "\tlsls r2, 24\n"
+ "\tlsrs r5, r2, 24\n"
+ "\tlsls r3, 24\n"
+ "\tcmp r3, 0\n"
+ "\tbeq _080C30B0\n"
+ "\tadds r1, r6, 0\n"
+ "\tbl GetMonIconPtr\n"
+ "\tlsls r1, r5, 9\n"
+ "\tadds r0, r1\n"
+ "\tadds r0, 0x80\n"
+ "\tlsls r1, r4, 9\n"
+ "\tldr r2, _080C30A0 @ =0x06004000\n"
+ "\tadds r1, r2\n"
+ "\tldr r2, _080C30A4 @ =0x040000d4\n"
+ "\tstr r0, [r2]\n"
+ "\tstr r1, [r2, 0x4]\n"
+ "\tldr r0, _080C30A8 @ =0x84000060\n"
+ "\tstr r0, [r2, 0x8]\n"
+ "\tldr r0, [r2, 0x8]\n"
+ "\tadds r1, r4, 0\n"
+ "\tadds r1, 0xA\n"
+ "\tlsls r1, 28\n"
+ "\tlsls r0, r4, 20\n"
+ "\tmovs r2, 0x80\n"
+ "\tlsls r2, 18\n"
+ "\tadds r0, r2\n"
+ "\torrs r0, r1\n"
+ "\tlsrs r1, r0, 16\n"
+ "\tlsls r0, r4, 1\n"
+ "\tadds r0, r4\n"
+ "\tlsls r0, 21\n"
+ "\tmovs r2, 0x83\n"
+ "\tlsls r2, 16\n"
+ "\tadds r0, r2\n"
+ "\tlsrs r5, r0, 16\n"
+ "\tmovs r2, 0\n"
+ "\tldr r6, _080C30AC @ =0x0600c000\n"
+ "_080C307C:\n"
+ "\tlsls r0, r2, 5\n"
+ "\tadds r4, r2, 0x1\n"
+ "\tadds r0, r5\n"
+ "\tmovs r3, 0x3\n"
+ "\tlsls r0, 1\n"
+ "\tadds r2, r0, r6\n"
+ "_080C3088:\n"
+ "\tstrh r1, [r2]\n"
+ "\tadds r0, r1, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r1, r0, 16\n"
+ "\tadds r2, 0x2\n"
+ "\tsubs r3, 0x1\n"
+ "\tcmp r3, 0\n"
+ "\tbge _080C3088\n"
+ "\tadds r2, r4, 0\n"
+ "\tcmp r2, 0x2\n"
+ "\tble _080C307C\n"
+ "\tb _080C30CA\n"
+ "\t.align 2, 0\n"
+ "_080C30A0: .4byte 0x06004000\n"
+ "_080C30A4: .4byte 0x040000d4\n"
+ "_080C30A8: .4byte 0x84000060\n"
+ "_080C30AC: .4byte 0x0600c000\n"
+ "_080C30B0:\n"
+ "\tadds r1, r6, 0\n"
+ "\tbl GetMonIconPtr\n"
+ "\tlsls r1, r5, 9\n"
+ "\tadds r0, r1\n"
+ "\tadds r0, 0x80\n"
+ "\tlsls r1, r4, 9\n"
+ "\tldr r2, _080C30D0 @ =0x06004000\n"
+ "\tadds r1, r2\n"
+ "\tmovs r2, 0xC0\n"
+ "\tlsls r2, 1\n"
+ "\tbl RequestSpriteCopy\n"
+ "_080C30CA:\n"
+ "\tpop {r4-r6}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+ "_080C30D0: .4byte 0x06004000");
+}
+#endif
+
+static void LoadAllContestMonIcons(u8 srcOffset, bool8 useDmaNow)
+{
+ int i;
+
+ for (i = 0; i < 4; i++)
+ {
+ sub_80C3024(gContestMons[i].species, i, srcOffset, useDmaNow, gContestMons[i].personality);
+ }
+}
+
+#ifdef NONMATCHING
+void sub_80C310C(void)
+{
+ int i;
+
+ for (i = 0; i < 4; i++)
+ {
+ u16 species = mon_icon_convert_unown_species_id(gContestMons[i].species, 0);
+ LoadPalette(gMonIconPalettes[gMonIconPaletteIndices[species]], 0xa0 + 0x10 * i, 0x20);
+ }
+}
+#else
+__attribute__((naked)) void sub_80C310C(void)
+{
+ asm_unified("\tpush {r4-r6,lr}\n"
+ "\tmovs r4, 0\n"
+ "\tldr r6, _080C314C @ =gMonIconPaletteIndices\n"
+ "\tmovs r5, 0xA0\n"
+ "\tlsls r5, 16\n"
+ "_080C3116:\n"
+ "\tldr r1, _080C3150 @ =gContestMons\n"
+ "\tlsls r0, r4, 6\n"
+ "\tadds r0, r1\n"
+ "\tldrh r0, [r0]\n"
+ "\tmovs r1, 0\n"
+ "\tbl mon_icon_convert_unown_species_id\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tadds r0, r6\n"
+ "\tldrb r0, [r0]\n"
+ "\tlsls r0, 5\n"
+ "\tldr r1, _080C3154 @ =gMonIconPalettes\n"
+ "\tadds r0, r1\n"
+ "\tlsrs r1, r5, 16\n"
+ "\tmovs r2, 0x20\n"
+ "\tbl LoadPalette\n"
+ "\tmovs r0, 0x80\n"
+ "\tlsls r0, 13\n"
+ "\tadds r5, r0\n"
+ "\tadds r4, 0x1\n"
+ "\tcmp r4, 0x3\n"
+ "\tble _080C3116\n"
+ "\tpop {r4-r6}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+ "_080C314C: .4byte gMonIconPaletteIndices\n"
+ "_080C3150: .4byte gContestMons\n"
+ "_080C3154: .4byte gMonIconPalettes");
+}
+#endif
+
+// void sub_80C3158(const u8 *string, u8 spriteId)
+// {
+// int i, j;
+// u8 width;
+// u8 * displayedStringBattle;
+// void * dest;
+// u8 * d1;
+// u8 * d2;
+// void *d3;
+// void *d4;
+// void *d5;
+// void *d6;
+// int w;
+// u16 sp00[4];
+// struct Sprite *sprite = &gSprites[spriteId];
+// sp00[0] = gSprites[spriteId].oam.tileNum;
+// sp00[1] = gSprites[sprite->data[0]].oam.tileNum;
+// sp00[2] = gSprites[sprite->data[1]].oam.tileNum;
+// sp00[3] = gSprites[sprite->data[2]].oam.tileNum;
+
+// for (i = 0; i < 4; i++)
+// {
+// DmaClear32(3, (void *)VRAM + 0x10000 + 32 * sp00[i], 0x400);
+// }
+
+// width = Text_GetStringWidthFromWindowTemplate(&gWindowTemplate_81E7278, string);
+// displayedStringBattle = gDisplayedStringBattle;
+// displayedStringBattle = StringCopy(displayedStringBattle, gUnknown_083D17E2);
+// if ((~width + 1) & 7)
+// {
+// displayedStringBattle[0] = EXT_CTRL_CODE_BEGIN;
+// displayedStringBattle[1] = 0x11;
+// displayedStringBattle[2] = ((~width + 1) & 7) / 2;
+// displayedStringBattle += 3;
+// }
+
+// width += -8 & (width + 7);
+// displayedStringBattle = StringCopy(displayedStringBattle, string);
+
+// displayedStringBattle[0] = EXT_CTRL_CODE_BEGIN;
+// displayedStringBattle[1] = 0x13;
+// displayedStringBattle[2] = width;
+// displayedStringBattle[3] = EOS;
+
+// sub_80034D4(eContestLink80C2020Struct2018068, gDisplayedStringBattle);
+
+// CpuSet(&gUnknown_083D1624[0x0], (void *)0x6010000 + 32 * sp00[0], 0x4000008);
+// CpuSet(&gUnknown_083D1624[0x40], (void *)0x6010000 + 32 * sp00[0] + 0x100, 0x4000008);
+// CpuSet(&gUnknown_083D1624[0x40], (void *)0x6010000 + 32 * sp00[0] + 0x200, 0x4000008);
+// CpuSet(&gUnknown_083D1624[0x20], (void *)0x6010000 + 32 * sp00[0] + 0x300, 0x4000008);
+
+// w = width / 8;
+// j = 0;
+// if (j <= w)
+// {
+// d2 = eContestLink80C2020Struct2018068 + 0x20;
+// d1 = eContestLink80C2020Struct2018068;
+// d3 = (void *)VRAM + 0x0FD20;
+// d4 = (void *)VRAM + 0x0FE20;
+// d5 = (void *)VRAM + 0x0FF20;
+// d6 = (void *)VRAM + 0x10020;
+// while (j <= w)
+// {
+// if (j < 7)
+// dest = 32 * sp00[0] + d6;
+// else if (j < 15)
+// dest = 32 * sp00[1] + d5;
+// else if (j < 23)
+// dest = 32 * sp00[2] + d4;
+// else
+// dest = 32 * sp00[3] + d3;
+
+// if (j == w)
+// break;
+
+// CpuSet(gUnknown_083D16E4, dest, 0x4000008);
+// CpuSet(gUnknown_083D16E4 + 0x10, dest + 0x300, 0x4000008);
+// CpuSet(j * 0x40 + d2, dest + 0x100, 0x4000008);
+// CpuSet(j * 0x40 + d1, dest + 0x200, 0x4000008);
+
+// d3 += 0x20;
+// d4 += 0x20;
+// d5 += 0x20;
+// d6 += 0x20;
+// j++;
+// }
+// }
+
+// CpuSet(gUnknown_083D1644, dest, 0x4000008);
+// CpuSet(gUnknown_083D1644 + 0x40, dest + 0x100, 0x4000008);
+// CpuSet(gUnknown_083D1644 + 0x40, dest + 0x200, 0x4000008);
+// CpuSet(gUnknown_083D1644 + 0x20, dest + 0x300, 0x4000008);
+// }
diff --git a/src/battle/reshow_battle_screen.c b/src/battle/reshow_battle_screen.c
index f602d4835..bc4d394f0 100644
--- a/src/battle/reshow_battle_screen.c
+++ b/src/battle/reshow_battle_screen.c
@@ -11,14 +11,6 @@
extern struct SpriteTemplate gUnknown_02024E8C;
extern struct Window gUnknown_03004210;
-extern u16 gBattle_BG2_Y;
-extern u16 gBattle_BG2_X;
-extern u16 gBattle_BG0_X;
-extern u16 gBattle_BG1_X;
-extern u16 gBattle_BG3_X;
-extern u16 gBattle_BG1_Y;
-extern u16 gBattle_BG3_Y;
-extern u16 gBattle_BG0_Y;
extern u8 gReservedSpritePaletteCount;
extern u8 gActionSelectionCursor[4];
extern u8 gBankInMenu;
diff --git a/src/contest.c b/src/contest.c
index 9dff08ea7..78e2da3c0 100644
--- a/src/contest.c
+++ b/src/contest.c
@@ -48,23 +48,10 @@ extern u8 gBankAttacker;
extern u8 gBankTarget;
extern u8 gBanksBySide[];
extern u8 gBankSpriteIds[];
-extern u16 gBattle_BG3_X;
-extern s16 gBattle_BG1_Y;
-extern u16 gBattle_BG3_Y;
-extern u16 gBattle_WIN1H;
extern struct Window gUnknown_03004210;
-extern u16 gBattle_WIN0V;
-extern u16 gBattle_WIN1V;
-extern u16 gBattle_BG2_Y;
-extern u16 gBattle_BG2_X;
-extern u16 gBattle_BG0_Y;
-extern u16 gBattle_BG0_X;
-extern u16 gBattle_BG1_X;
-extern u16 gBattle_WIN0H;
+extern u32 gContestRngValue;
extern struct SpriteTemplate gUnknown_02024E8C;
-
-
extern const struct ContestPokemon gContestOpponents[60];
extern const u8 gUnknown_083CA308[][2];
extern const u8 gUnknown_083CA310[][2];
@@ -583,8 +570,7 @@ void sub_80AB9A0(u8 taskId)
gTasks[taskId].data[0]++;
break;
case 1:
- gBattle_BG1_Y += 7;
- if (gBattle_BG1_Y <= 160)
+ if ((s16)(gBattle_BG1_Y += 7) <= 160)
break;
gTasks[taskId].data[0]++;
break;
@@ -2021,10 +2007,9 @@ void sub_80ADE54(u8 taskId)
void sub_80ADEAC(u8 taskId)
{
- gBattle_BG1_Y -= 7;
- if (gBattle_BG1_Y < 0)
+ if ((s16)(gBattle_BG1_Y -= 7) < 0)
gBattle_BG1_Y = 0;
- if (*(u16 *)&gBattle_BG1_Y == 0) // Why cast?
+ if (gBattle_BG1_Y == 0) // Why cast?
{
gTasks[taskId].func = sub_80ADEEC;
gTasks[taskId].data[0] = 0;
@@ -5177,10 +5162,9 @@ void sub_80B237C(u8 taskId)
void sub_80B23BC(u8 taskId)
{
- gBattle_BG1_Y -= 7;
- if (gBattle_BG1_Y < 0)
+ if ((s16)(gBattle_BG1_Y -= 7) < 0)
gBattle_BG1_Y = 0;
- if (*(u16 *)&gBattle_BG1_Y == 0) // Why cast?
+ if (gBattle_BG1_Y == 0) // Why cast?
{
gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = 0;
@@ -5240,8 +5224,7 @@ void sub_80B2400(u8 taskId)
void sub_80B2508(u8 taskId)
{
- gBattle_BG1_Y += 7;
- if (gBattle_BG1_Y > DISPLAY_HEIGHT)
+ if ((s16)(gBattle_BG1_Y += 7) > DISPLAY_HEIGHT)
gTasks[taskId].func = sub_80ADCDC;
}
diff --git a/src/contest_ai.c b/src/contest_ai.c
index e570dbafb..a6dde8afe 100644
--- a/src/contest_ai.c
+++ b/src/contest_ai.c
@@ -1115,7 +1115,7 @@ static void ContestAICmd_check_would_finish_combo(void)
if(sContestantStatus[eContestAI->unk41].prevMove)
result = AreMovesContestCombo(sContestantStatus[eContestAI->unk41].prevMove, move);
-
+
if(result)
result = 1;
@@ -1723,7 +1723,7 @@ static 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];
diff --git a/src/debug/matsuda_debug_menu.c b/src/debug/matsuda_debug_menu.c
index f914163b2..e24868787 100644
--- a/src/debug/matsuda_debug_menu.c
+++ b/src/debug/matsuda_debug_menu.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "matsuda_debug_menu.h"
+#include "battle.h"
#include "contest.h"
#include "contest_link_80C2020.h"
#include "contest_link_80C857C.h"
@@ -22,15 +23,6 @@ extern u8 gUnknown_02038694;
extern u16 gSpecialVar_ContestCategory;
extern u16 gSpecialVar_ContestRank;
-extern u16 gBattle_BG0_X;
-extern u16 gBattle_BG0_Y;
-extern u16 gBattle_BG1_X;
-extern u16 gBattle_BG1_Y;
-extern u16 gBattle_BG2_X;
-extern u16 gBattle_BG2_Y;
-extern u16 gBattle_BG3_X;
-extern u16 gBattle_BG3_Y;
-
extern u8 (*gMenuCallback)(void);
static bool8 sub_80A9B78(void);
diff --git a/src/evolution_scene.c b/src/evolution_scene.c
index 182f85d8d..a855efb1b 100644
--- a/src/evolution_scene.c
+++ b/src/evolution_scene.c
@@ -65,14 +65,6 @@ void nullsub_6(void);
bool32 IsHMMove2(u16 move);
extern struct Window gUnknown_03004210;
-extern u16 gBattle_BG0_X;
-extern u16 gBattle_BG0_Y;
-extern u16 gBattle_BG1_X;
-extern u16 gBattle_BG1_Y;
-extern u16 gBattle_BG2_X;
-extern u16 gBattle_BG2_Y;
-extern u16 gBattle_BG3_X;
-extern u16 gBattle_BG3_Y;
extern u8 gBattleTerrain;
extern u8 gReservedSpritePaletteCount;
extern u16 gMoveToLearn;
diff --git a/src/pokemon_size_record.c b/src/pokemon_size_record.c
index 43ad39e6f..6a7ee69b3 100644
--- a/src/pokemon_size_record.c
+++ b/src/pokemon_size_record.c
@@ -8,6 +8,8 @@
#include "strings2.h"
#include "text.h"
+const u16 Unknown_083D17EC[] = INCBIN_U16("graphics/unknown/unknown_3D17EC.gbapal");
+
struct UnknownStruct
{
u16 unk0;
diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c
index 7fc422125..aabacbe2f 100644
--- a/src/pokemon_summary_screen.c
+++ b/src/pokemon_summary_screen.c
@@ -123,12 +123,6 @@ extern u8 StorageSystemGetNextMonIndex(struct BoxPokemon *, u8, u8, u8);
extern struct MusicPlayerInfo gMPlay_BGM;
extern u8 gUnknown_08208238[];
-extern u16 gBattle_BG3_Y;
-extern u16 gBattle_BG2_Y;
-extern u16 gBattle_BG1_Y;
-extern u16 gBattle_BG1_X;
-extern u16 gBattle_BG2_X;
-extern u16 gBattle_BG3_X;
extern TaskFunc gUnknown_03005CF0;
extern struct SpriteTemplate gUnknown_02024E8C;
diff --git a/src/tv.c b/src/tv.c
index f95a73bea..fd6b7c62f 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -1,6 +1,7 @@
#include "global.h"
#include "tv.h"
#include "battle_tower.h"
+#include "contest.h"
#include "contest_painting.h"
#include "data2.h"
#include "easy_chat.h"
@@ -68,10 +69,9 @@ struct UnkTvStruct gUnknown_03005D38;
extern u16 gSpecialVar_LastTalked;
-extern u8 gSpecialVar_ContestCategory;
-extern u8 gSpecialVar_ContestRank;
+extern u16 gSpecialVar_ContestCategory;
+extern u16 gSpecialVar_ContestRank;
extern u8 gBattleOutcome;
-
extern u16 gLastUsedItem;
static EWRAM_DATA u16 gUnknown_020387E0 = 0;
@@ -444,9 +444,6 @@ void ClearTVShowData(void)
bool8 sub_80BF1B4(u8);
void sub_80BF20C(void);
-extern u8 gSpecialVar_ContestCategory;
-extern u8 gSpecialVar_ContestRank;
-extern u8 gBattleOutcome;
void InterviewBefore_FanClubLetter(void);
void InterviewBefore_RecentHappenings(void);
@@ -456,21 +453,9 @@ void InterviewBefore_NameRater(void);
void InterviewBefore_BravoTrainerPkmnProfile(void);
void InterviewBefore_BravoTrainerBTProfile(void);
-void sub_80BE028(void);
-void sub_80BE074(void);
-void sub_80BE778(void);
-void sub_80BEB20(void);
u8 GetTVChannelByShowType(u8);
-s8 sub_80BF74C(TVShow tvShow[]);
-
-void sub_80BF55C(TVShow tvShow[], u8 showidx);
-void sub_80BEA88(void);
-
-void sub_80BE138(TVShow *show);
-void sub_80BE160(TVShow *show);
-extern u16 gLastUsedItem;
void InterviewAfter_FanClubLetter(void);
void InterviewAfter_RecentHappenings(void);
@@ -980,16 +965,16 @@ void sub_80BE23C(u16 a0)
}
}
-void sub_80BE284(u8 a0)
+void sub_80BE284(u8 contestResult)
{
struct TVShowBravoTrainerPokemonProfiles *bravoTrainer = &gSaveBlock1.tvShows[24].bravoTrainer;
gUnknown_03005D38.var0 = sub_80BF720(gSaveBlock1.tvShows);
if (gUnknown_03005D38.var0 != -1)
{
- bravoTrainer->contestResult = a0;
+ bravoTrainer->contestResult = contestResult;
bravoTrainer->contestCategory = gSpecialVar_ContestCategory;
- bravoTrainer->contestRank = gSpecialVar_ContestRank;
+ bravoTrainer->contestRank = (u8)gSpecialVar_ContestRank;
bravoTrainer->species = GetMonData(&gPlayerParty[gUnknown_02038694], MON_DATA_SPECIES, NULL);
GetMonData(&gPlayerParty[gUnknown_02038694], MON_DATA_NICKNAME, bravoTrainer->pokemonNickname);
}