summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/contest_link_80F57C4.s2812
-rw-r--r--include/contest.h3
-rw-r--r--include/contest_painting.h3
-rw-r--r--include/graphics.h11
-rw-r--r--include/link_rfu.h1
-rw-r--r--include/strings.h5
-rw-r--r--include/tv.h3
-rwxr-xr-xsrc/contest_link_80F57C4.c1290
-rw-r--r--src/contest_painting.c3
-rw-r--r--src/tv.c4
10 files changed, 1316 insertions, 2819 deletions
diff --git a/asm/contest_link_80F57C4.s b/asm/contest_link_80F57C4.s
index 1aae2151f..d73293648 100644
--- a/asm/contest_link_80F57C4.s
+++ b/asm/contest_link_80F57C4.s
@@ -5,2818 +5,6 @@
.text
- thumb_func_start sub_80F5B00
-sub_80F5B00: @ 80F5B00
- push {r4-r6,lr}
- sub sp, 0x4
- ldr r5, =gPaletteFade
- ldrb r0, [r5, 0x8]
- movs r6, 0x80
- orrs r0, r6
- strb r0, [r5, 0x8]
- movs r0, 0
- bl SetVBlankCallback
- bl sub_80F7DF4
- bl sub_80F57C4
- bl ScanlineEffect_Clear
- bl ResetPaletteFade
- bl ResetSpriteData
- bl ResetTasks
- bl FreeAllSpritePalettes
- bl sub_80F591C
- bl sub_80F6A9C
- movs r0, 0
- movs r1, 0x1
- bl sub_80F6A64
- bl sub_80F5AE0
- ldr r4, =gUnknown_0203A034
- ldr r0, [r4]
- ldr r0, [r0]
- movs r1, 0
- movs r2, 0x18
- bl memset
- ldr r0, [r4]
- ldr r0, [r0, 0x4]
- movs r1, 0
- movs r2, 0x50
- bl memset
- bl sub_80F6DC0
- bl sub_80F6AE8
- 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, =sub_80F5CE4
- movs r1, 0x5
- bl CreateTask
- ldr r1, [r4]
- ldr r1, [r1]
- strb r0, [r1, 0x2]
- ldr r0, =sub_80F5C00
- bl SetMainCallback2
- ldr r1, =gBattle_WIN1H
- movs r0, 0xF0
- strh r0, [r1]
- ldr r1, =gBattle_WIN1V
- ldr r2, =0x000080a0
- adds r0, r2, 0
- strh r0, [r1]
- ldr r0, =sub_80F68B4
- movs r1, 0x14
- bl CreateTask
- bl sub_80F7880
- ldr r0, =gIsLinkContest
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080F5BE4
- ldrb r0, [r5, 0x8]
- orrs r0, r6
- strb r0, [r5, 0x8]
- b _080F5BEC
- .pool
-_080F5BE4:
- movs r0, 0xDF
- lsls r0, 1
- bl PlayBGM
-_080F5BEC:
- ldr r0, =sub_80F5C24
- bl SetVBlankCallback
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F5B00
-
- thumb_func_start sub_80F5C00
-sub_80F5C00: @ 80F5C00
- push {lr}
- bl AnimateSprites
- bl BuildOamBuffer
- bl RunTasks
- bl UpdatePaletteFade
- movs r0, 0x1
- bl CopyBgTilemapBufferToVram
- movs r0, 0x2
- bl CopyBgTilemapBufferToVram
- pop {r0}
- bx r0
- thumb_func_end sub_80F5C00
-
- thumb_func_start sub_80F5C24
-sub_80F5C24: @ 80F5C24
- push {lr}
- ldr r0, =gBattle_BG0_X
- ldrh r1, [r0]
- movs r0, 0x10
- bl SetGpuReg
- ldr r0, =gBattle_BG0_Y
- ldrh r1, [r0]
- movs r0, 0x12
- bl SetGpuReg
- ldr r0, =gBattle_BG1_X
- ldrh r1, [r0]
- movs r0, 0x14
- bl SetGpuReg
- ldr r0, =gBattle_BG1_Y
- ldrh r1, [r0]
- movs r0, 0x16
- bl SetGpuReg
- ldr r0, =gBattle_BG2_X
- ldrh r1, [r0]
- movs r0, 0x18
- bl SetGpuReg
- ldr r0, =gBattle_BG2_Y
- ldrh r1, [r0]
- movs r0, 0x1A
- bl SetGpuReg
- ldr r0, =gBattle_BG3_X
- ldrh r1, [r0]
- movs r0, 0x1C
- bl SetGpuReg
- ldr r0, =gBattle_BG3_Y
- ldrh r1, [r0]
- movs r0, 0x1E
- bl SetGpuReg
- ldr r0, =gBattle_WIN0H
- ldrh r1, [r0]
- movs r0, 0x40
- bl SetGpuReg
- ldr r0, =gBattle_WIN0V
- ldrh r1, [r0]
- movs r0, 0x44
- bl SetGpuReg
- ldr r0, =gBattle_WIN1H
- ldrh r1, [r0]
- movs r0, 0x42
- bl SetGpuReg
- ldr r0, =gBattle_WIN1V
- ldrh r1, [r0]
- movs r0, 0x46
- bl SetGpuReg
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- bl ScanlineEffect_InitHBlankDmaTransfer
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F5C24
-
- thumb_func_start sub_80F5CE4
-sub_80F5CE4: @ 80F5CE4
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r3, =gIsLinkContest
- ldrb r1, [r3]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _080F5CF8
- b _080F5E2E
-_080F5CF8:
- ldr r2, =gTasks
- lsls r1, r6, 2
- adds r0, r1, r6
- lsls r0, 3
- adds r4, r0, r2
- movs r2, 0x8
- ldrsh r0, [r4, r2]
- adds r7, r1, 0
- cmp r0, 0x1
- beq _080F5DE0
- cmp r0, 0x1
- bgt _080F5D20
- cmp r0, 0
- beq _080F5D2A
- b _080F5E2E
- .pool
-_080F5D20:
- cmp r0, 0x2
- beq _080F5DF4
- cmp r0, 0x3
- beq _080F5E0A
- b _080F5E2E
-_080F5D2A:
- bl sub_80DBED4
- ldr r1, =gContestFinalStandings
- ldr r0, =gContestPlayerMonIndex
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _080F5D58
- movs r0, 0x23
- bl IncrementGameStat
- ldr r1, =gSpecialVar_0x8005
- movs r0, 0x8
- strh r0, [r1]
- bl InterviewBefore
- ldr r0, =gSpecialVar_Result
- ldrh r0, [r0]
- cmp r0, 0x1
- beq _080F5D58
- bl InterviewAfter
-_080F5D58:
- movs r0, 0x2
- bl sub_813BADC
- ldr r0, =gSpecialVar_ContestRank
- ldrb r0, [r0]
- bl sub_80DEDA8
- movs r0, 0xFE
- bl sub_80DEDA8
- ldr r1, =gUnknown_02039F5C
- movs r0, 0x1
- strb r0, [r1]
- movs r0, 0xFE
- movs r1, 0
- bl sub_80DEFA8
- ldr r1, =gUnknown_02039F5D
- strb r0, [r1]
- ldr r5, =0x00004086
- adds r0, r5, 0
- bl VarGet
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r5, 0
- movs r1, 0
- bl VarSet
- bl SetContinueGameWarpStatusToDynamicWarp
- movs r0, 0x1
- bl TrySavingData
- bl ClearContinueGameWarpStatus2
- adds r0, r5, 0
- adds r1, r4, 0
- bl VarSet
- ldr r0, =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- b _080F5E2E
- .pool
-_080F5DE0:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- ldrb r1, [r3]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _080F5E2E
- movs r0, 0x64
- b _080F5E2C
-_080F5DF4:
- bl IsLinkTaskFinished
- lsls r0, 24
- cmp r0, 0
- beq _080F5EBA
- bl sub_800ADF8
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _080F5EBA
-_080F5E0A:
- bl IsLinkTaskFinished
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080F5EBA
- movs r0, 0xDF
- lsls r0, 1
- bl PlayBGM
- ldr r2, =gPaletteFade
- ldrb r1, [r2, 0x8]
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r2, 0x8]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
-_080F5E2C:
- strh r0, [r4, 0x8]
-_080F5E2E:
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0
- bne _080F5EBA
- ldr r1, =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r4, r0, r1
- strh r2, [r4, 0x8]
- ldr r0, =gIsLinkContest
- ldrb r1, [r0]
- movs r5, 0x1
- adds r0, r5, 0
- ands r0, r1
- cmp r0, 0
- beq _080F5E78
- ldr r0, =gText_CommunicationStandby
- bl sub_80F707C
- ldr r0, =sub_80F5ED8
- b _080F5EB8
- .pool
-_080F5E78:
- movs r0, 0x24
- bl IncrementGameStat
- ldr r1, =gContestFinalStandings
- ldr r0, =gContestPlayerMonIndex
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _080F5E92
- movs r0, 0x25
- bl IncrementGameStat
-_080F5E92:
- ldr r0, =gSpecialVar_ContestRank
- ldrb r0, [r0]
- bl sub_80DEDA8
- movs r0, 0xFE
- bl sub_80DEDA8
- ldr r0, =gUnknown_02039F5C
- strb r5, [r0]
- movs r0, 0xFE
- movs r1, 0
- bl sub_80DEFA8
- ldr r1, =gUnknown_02039F5D
- strb r0, [r1]
- movs r0, 0x2
- bl sub_813BADC
- ldr r0, =sub_80F5F74
-_080F5EB8:
- str r0, [r4]
-_080F5EBA:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F5CE4
-
- thumb_func_start sub_80F5ED8
-sub_80F5ED8: @ 80F5ED8
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- beq _080F5EFC
- ldr r0, =sub_80F5F14
- movs r1, 0
- bl CreateTask
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, =TaskDummy
- str r1, [r0]
-_080F5EFC:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F5ED8
-
- thumb_func_start sub_80F5F14
-sub_80F5F14: @ 80F5F14
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, =sub_80FC998
- ldr r2, =sub_80F5F30
- bl SetTaskFuncWithFollowupFunc
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F5F14
-
- thumb_func_start sub_80F5F30
-sub_80F5F30: @ 80F5F30
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl IsLinkTaskFinished
- lsls r0, 24
- cmp r0, 0
- beq _080F5F60
- adds r0, r4, 0
- bl DestroyTask
- ldr r2, =gTasks
- ldr r0, =gUnknown_0203A034
- ldr r0, [r0]
- ldr r0, [r0]
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- ldr r1, =sub_80F5F74
- str r1, [r0]
- bl sub_80F7144
-_080F5F60:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F5F30
-
- thumb_func_start sub_80F5F74
-sub_80F5F74: @ 80F5F74
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
- ldrh r1, [r4, 0x8]
- movs r2, 0x8
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _080F5FC4
- ldr r0, =sub_80F68F0
- movs r1, 0x14
- bl CreateTask
- ldr r0, =gText_AnnouncingResults
- ldr r1, =gUnknown_0203A034
- ldr r1, [r1]
- ldr r1, [r1]
- ldrb r1, [r1]
- bl sub_80F6B78
- lsls r0, 16
- asrs r0, 16
- movs r3, 0x88
- lsls r3, 3
- movs r1, 0x90
- movs r2, 0x78
- b _080F6016
- .pool
-_080F5FC4:
- cmp r0, 0x1
- bne _080F5FDC
- ldr r0, =gUnknown_0203A034
- ldr r0, [r0]
- ldr r0, [r0]
- ldrb r0, [r0, 0x4]
- cmp r0, 0
- bne _080F6048
- b _080F5FF0
- .pool
-_080F5FDC:
- cmp r0, 0x2
- bne _080F5FF8
- ldrh r0, [r4, 0xA]
- adds r0, 0x1
- strh r0, [r4, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x15
- bne _080F6048
- movs r0, 0
-_080F5FF0:
- strh r0, [r4, 0xA]
- adds r0, r1, 0x1
- strh r0, [r4, 0x8]
- b _080F6048
-_080F5FF8:
- cmp r0, 0x3
- bne _080F6030
- ldr r0, =gText_PreliminaryResults
- ldr r1, =gUnknown_0203A034
- ldr r1, [r1]
- ldr r1, [r1]
- ldrb r1, [r1]
- bl sub_80F6B78
- lsls r0, 16
- asrs r0, 16
- ldr r2, =0x0000ffff
- movs r3, 0x88
- lsls r3, 3
- movs r1, 0x90
-_080F6016:
- bl sub_80F6E9C
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _080F6048
- .pool
-_080F6030:
- cmp r0, 0x4
- bne _080F6048
- ldr r0, =gUnknown_0203A034
- ldr r0, [r0]
- ldr r0, [r0]
- ldrb r0, [r0, 0x4]
- cmp r0, 0x2
- bne _080F6048
- movs r0, 0
- strh r0, [r4, 0x8]
- ldr r0, =sub_80F6058
- str r0, [r4]
-_080F6048:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F5F74
-
- thumb_func_start sub_80F6058
-sub_80F6058: @ 80F6058
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =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 _080F60C0
- cmp r0, 0x1
- bgt _080F6080
- cmp r0, 0
- beq _080F6086
- b _080F60E6
- .pool
-_080F6080:
- cmp r0, 0x2
- beq _080F60D4
- b _080F60E6
-_080F6086:
- ldr r5, =gUnknown_0203A034
- ldr r0, [r5]
- ldr r0, [r0]
- ldrb r0, [r0, 0xA]
- cmp r0, 0
- bne _080F60E6
- ldrh r1, [r4, 0xC]
- adds r0, r1, 0x1
- strh r0, [r4, 0xC]
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0
- bl sub_80F7A80
- ldr r0, [r5]
- ldr r0, [r0]
- ldrb r0, [r0, 0x14]
- cmp r0, 0
- bne _080F60B8
- movs r0, 0x2
- strh r0, [r4, 0x8]
- b _080F60E6
- .pool
-_080F60B8:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _080F60E6
-_080F60C0:
- ldr r0, =gUnknown_0203A034
- ldr r0, [r0]
- ldr r0, [r0]
- ldrb r0, [r0, 0x14]
- cmp r0, 0
- bne _080F60E6
- strh r0, [r4, 0x8]
- b _080F60E6
- .pool
-_080F60D4:
- movs r0, 0x88
- lsls r0, 3
- bl sub_80F6EF4
- movs r0, 0
- strh r0, [r4, 0x8]
- strh r0, [r4, 0xC]
- ldr r0, =sub_80F60F0
- str r0, [r4]
-_080F60E6:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F6058
-
- thumb_func_start sub_80F60F0
-sub_80F60F0: @ 80F60F0
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- adds r4, r2, 0
- ldr r0, =gUnknown_0203A034
- ldr r5, [r0]
- ldr r0, [r5]
- ldrb r3, [r0, 0x4]
- cmp r3, 0
- bne _080F614C
- ldr r1, =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 _080F615E
- strh r3, [r1, 0xA]
- ldr r0, =gText_Round2Results
- ldr r1, [r5]
- ldrb r1, [r1]
- bl sub_80F6B78
- lsls r0, 16
- asrs r0, 16
- ldr r2, =0x0000ffff
- movs r3, 0x88
- lsls r3, 3
- movs r1, 0x90
- bl sub_80F6E9C
- b _080F615E
- .pool
-_080F614C:
- cmp r3, 0x2
- bne _080F615E
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, =sub_80F616C
- str r0, [r1]
-_080F615E:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F60F0
-
- thumb_func_start sub_80F616C
-sub_80F616C: @ 80F616C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =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 _080F61D4
- cmp r0, 0x1
- bgt _080F6194
- cmp r0, 0
- beq _080F619A
- b _080F61F8
- .pool
-_080F6194:
- cmp r0, 0x2
- beq _080F61E8
- b _080F61F8
-_080F619A:
- ldr r5, =gUnknown_0203A034
- ldr r0, [r5]
- ldr r0, [r0]
- ldrb r0, [r0, 0xA]
- cmp r0, 0
- bne _080F61F8
- ldrh r1, [r4, 0xC]
- adds r0, r1, 0x1
- strh r0, [r4, 0xC]
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0x1
- bl sub_80F7A80
- ldr r0, [r5]
- ldr r0, [r0]
- ldrb r0, [r0, 0x14]
- cmp r0, 0
- bne _080F61CC
- movs r0, 0x2
- strh r0, [r4, 0x8]
- b _080F61F8
- .pool
-_080F61CC:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _080F61F8
-_080F61D4:
- ldr r0, =gUnknown_0203A034
- ldr r0, [r0]
- ldr r0, [r0]
- ldrb r0, [r0, 0x14]
- cmp r0, 0
- bne _080F61F8
- strh r0, [r4, 0x8]
- b _080F61F8
- .pool
-_080F61E8:
- movs r0, 0x88
- lsls r0, 3
- bl sub_80F6EF4
- movs r0, 0
- strh r0, [r4, 0x8]
- ldr r0, =sub_80F6204
- str r0, [r4]
-_080F61F8:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F616C
-
- thumb_func_start sub_80F6204
-sub_80F6204: @ 80F6204
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x64
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, =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 _080F6226
- b _080F63F4
-_080F6226:
- lsls r0, 2
- ldr r1, =_080F6238
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_080F6238:
- .4byte _080F6250
- .4byte _080F6274
- .4byte _080F6292
- .4byte _080F62CC
- .4byte _080F6334
- .4byte _080F63E4
-_080F6250:
- ldr r0, =gUnknown_0203A034
- ldr r0, [r0]
- ldr r0, [r0]
- ldrb r0, [r0, 0x4]
- cmp r0, 0
- beq _080F625E
- b _080F63F4
-_080F625E:
- 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 _080F63F4
- .pool
-_080F6274:
- 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 _080F628C
- b _080F63F4
-_080F628C:
- movs r0, 0
- strh r0, [r1, 0xA]
- b _080F63BC
-_080F6292:
- movs r4, 0
- lsls r6, r5, 2
- ldr r7, =gTasks
-_080F6298:
- ldr r0, =sub_80F73DC
- 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, =gContestFinalStandings
- adds r0, r4, r0
- ldrb r0, [r0]
- strh r0, [r1, 0x8]
- strh r4, [r1, 0xA]
- adds r4, 0x1
- cmp r4, 0x3
- ble _080F6298
- b _080F63B4
- .pool
-_080F62CC:
- ldr r0, =gUnknown_0203A034
- ldr r0, [r0]
- ldr r0, [r0]
- ldrb r0, [r0, 0x5]
- cmp r0, 0x4
- beq _080F62DA
- b _080F63F4
-_080F62DA:
- 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 _080F62F2
- b _080F63F4
-_080F62F2:
- movs r0, 0
- strh r0, [r4, 0xA]
- ldr r0, =sub_80F74BC
- movs r1, 0xA
- bl CreateTask
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r4, 0
- ldr r1, =gContestFinalStandings
- ldrb r0, [r1]
- cmp r0, 0
- beq _080F631C
-_080F630E:
- adds r4, 0x1
- cmp r4, 0x3
- bgt _080F631C
- adds r0, r4, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _080F630E
-_080F631C:
- lsls r0, r4, 24
- lsrs r0, 24
- movs r1, 0xE
- bl sub_80F77E0
- b _080F63F4
- .pool
-_080F6334:
- 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 _080F63F4
- movs r0, 0
- strh r0, [r2, 0xA]
- movs r4, 0
- ldr r1, =gContestFinalStandings
- ldrb r0, [r1]
- ldr r7, =gStringVar1
- ldr r2, =gContestMons + 13
- mov r8, r2
- cmp r0, 0
- beq _080F636E
-_080F6360:
- adds r4, 0x1
- cmp r4, 0x3
- bgt _080F636E
- adds r0, r4, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _080F6360
-_080F636E:
- lsls r4, 6
- mov r0, r8
- adds r1, r4, r0
- adds r0, r7, 0
- bl StringCopy
- adds r0, r7, 0
- bl sub_81DB5AC
- ldr r0, =gStringVar2
- mov r1, r8
- subs r1, 0xB
- adds r4, r1
- adds r1, r4, 0
- bl StringCopy
- ldr r1, =gText_Var1sVar2Won
- mov r0, sp
- bl StringExpandPlaceholders
- ldr r0, =gUnknown_0203A034
- ldr r0, [r0]
- ldr r0, [r0]
- ldrb r1, [r0]
- mov r0, sp
- bl sub_80F6B78
- lsls r0, 16
- asrs r0, 16
- ldr r2, =0x0000ffff
- movs r3, 0x88
- lsls r3, 3
- movs r1, 0x90
- bl sub_80F6E9C
-_080F63B4:
- ldr r0, =gTasks
- adds r1, r6, r5
- lsls r1, 3
- adds r1, r0
-_080F63BC:
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- b _080F63F4
- .pool
-_080F63E4:
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r2
- movs r1, 0
- strh r1, [r0, 0x8]
- ldr r1, =sub_80F6404
- str r1, [r0]
-_080F63F4:
- add sp, 0x64
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F6204
-
- thumb_func_start sub_80F6404
-sub_80F6404: @ 80F6404
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r1, =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 _080F6428
- b _080F669C
-_080F6428:
- lsls r0, 2
- ldr r1, =_080F643C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_080F643C:
- .4byte _080F6454
- .4byte _080F658C
- .4byte _080F65DC
- .4byte _080F65F0
- .4byte _080F6638
- .4byte _080F667C
-_080F6454:
- ldr r1, =gBattle_WIN0H
- movs r0, 0xF0
- strh r0, [r1]
- ldr r1, =gBattle_WIN0V
- ldr r3, =0x00005050
- adds r0, r3, 0
- strh r0, [r1]
- movs r2, 0
- ldr r1, =gContestFinalStandings
- ldrb r0, [r1]
- lsls r4, r7, 2
- mov r10, r4
- ldr r3, =gContestMons
- ldr r4, =gContestPlayerMonIndex
- mov r9, r4
- ldr r4, =gMonFrontPicTable
- mov r12, r4
- ldr r4, =gMonSpritesGfxPtr
- mov r8, r4
- cmp r0, 0
- beq _080F648C
-_080F647E:
- adds r2, 0x1
- cmp r2, 0x3
- bgt _080F648C
- adds r0, r2, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _080F647E
-_080F648C:
- lsls r1, r2, 6
- adds r0, r1, r3
- ldrh r6, [r0]
- adds r0, r3, 0
- adds r0, 0x38
- adds r0, r1, r0
- ldr r4, [r0]
- adds r0, r3, 0
- adds r0, 0x3C
- adds r1, r0
- ldr r5, [r1]
- mov r0, r9
- ldrb r0, [r0]
- cmp r2, r0
- bne _080F64E0
- lsls r0, r6, 3
- add r0, r12
- mov r2, r8
- ldr r1, [r2]
- ldr r1, [r1, 0x8]
- adds r2, r6, 0
- adds r3, r4, 0
- bl HandleLoadSpecialPokePic_2
- b _080F64F2
- .pool
-_080F64E0:
- lsls r0, r6, 3
- add r0, r12
- mov r3, r8
- ldr r1, [r3]
- ldr r1, [r1, 0x8]
- adds r2, r6, 0
- adds r3, r4, 0
- bl HandleLoadSpecialPokePic_DontHandleDeoxys
-_080F64F2:
- adds r0, r6, 0
- adds r1, r5, 0
- adds r2, r4, 0
- bl GetMonSpritePalStructFromOtIdPersonality
- adds r4, r0, 0
- bl LoadCompressedSpritePalette
- adds r0, r6, 0
- movs r1, 0x1
- bl SetMultiuseSpriteTemplateToPokemon
- ldr r0, =gMultiuseSpriteTemplate
- 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, =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, =sub_80F75A8
- str r1, [r2]
- ldr r1, =gUnknown_0203A034
- ldr r1, [r1]
- ldr r1, [r1]
- strb r0, [r1, 0x8]
- ldr r0, =gUnknown_0858D878
- bl LoadCompressedSpriteSheet
- ldr r0, =gUnknown_0858D880
- bl LoadCompressedSpritePalette
- ldr r0, =sub_80F7670
- movs r1, 0xA
- bl CreateTask
- ldr r0, =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 _080F669C
- .pool
-_080F658C:
- 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
- beq _080F65A4
- b _080F669C
-_080F65A4:
- 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 _080F65BA
- movs r0, 0x20
- strh r0, [r4, 0xC]
-_080F65BA:
- ldrb r2, [r4, 0xC]
- ldr r3, =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 _080F669C
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _080F669C
- .pool
-_080F65DC:
- ldr r0, =gUnknown_0203A034
- ldr r0, [r0]
- ldr r0, [r0]
- ldrb r0, [r0, 0x6]
- cmp r0, 0x1
- bne _080F669C
- b _080F6664
- .pool
-_080F65F0:
- 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 _080F669C
- movs r0, 0
- strh r0, [r3, 0xA]
- ldr r2, =gSprites
- ldr r0, =gUnknown_0203A034
- ldr r0, [r0]
- ldr r0, [r0]
- ldrb r1, [r0, 0x8]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, =sub_80F7620
- str r1, [r0]
- ldrh r0, [r3, 0x8]
- adds r0, 0x1
- strh r0, [r3, 0x8]
- b _080F669C
- .pool
-_080F6638:
- ldr r0, =gUnknown_0203A034
- ldr r0, [r0]
- ldr r0, [r0]
- ldrb r0, [r0, 0x6]
- cmp r0, 0x2
- bne _080F669C
- ldr r3, =gBattle_WIN0V
- ldrh r0, [r3]
- lsrs r2, r0, 8
- adds r0, r2, 0x2
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x50
- bls _080F6656
- movs r2, 0x50
-_080F6656:
- lsls r1, r2, 8
- movs r0, 0xA0
- subs r0, r2
- orrs r1, r0
- strh r1, [r3]
- cmp r2, 0x50
- bne _080F669C
-_080F6664:
- 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 _080F669C
- .pool
-_080F667C:
- ldr r0, =gUnknown_0203A034
- ldr r0, [r0]
- ldr r2, [r0]
- ldrb r0, [r2, 0x6]
- cmp r0, 0x2
- bne _080F669C
- 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, =sub_80F66B4
- str r1, [r0]
-_080F669C:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F6404
-
- thumb_func_start sub_80F66B4
-sub_80F66B4: @ 80F66B4
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r2, 0x1
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- beq _080F6702
- ldr r0, =gIsLinkContest
- ldrb r1, [r0]
- adds r0, r2, 0
- ands r0, r1
- lsls r6, r7, 2
- cmp r0, 0
- bne _080F66F2
- ldr r5, =gContestMons
- movs r4, 0x3
-_080F66DA:
- 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 _080F66DA
-_080F66F2:
- ldr r1, =gTasks
- adds r0, r6, r7
- lsls r0, 3
- adds r0, r1
- movs r1, 0
- strh r1, [r0, 0x1C]
- ldr r1, =sub_80F671C
- str r1, [r0]
-_080F6702:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F66B4
-
- thumb_func_start sub_80F671C
-sub_80F671C: @ 80F671C
- push {r4,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, =gIsLinkContest
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080F6760
- ldr r0, =gTasks
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 3
- adds r4, r1, r0
- movs r1, 0x1C
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080F676E
- ldr r0, =gText_CommunicationStandby
- bl sub_80F707C
- bl sub_800AC34
- ldr r0, =sub_80F677C
- str r0, [r4]
- b _080F676E
- .pool
-_080F6760:
- ldr r0, =gTasks
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 3
- adds r1, r0
- ldr r0, =task_repel
- str r0, [r1]
-_080F676E:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F671C
-
- thumb_func_start sub_80F677C
-sub_80F677C: @ 80F677C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _080F67AC
- ldr r0, =gIsLinkContest
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080F679A
- bl sub_800E084
-_080F679A:
- bl sub_80F7144
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, =task_repel
- str r0, [r1]
-_080F67AC:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F677C
-
- thumb_func_start task_repel
-task_repel: @ 80F67C4
- push {r4,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gIsLinkContest
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _080F67E6
- ldr r1, =gContestFinalStandings
- ldr r0, =gContestPlayerMonIndex
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- bl BravoTrainerPokemonProfile_BeforeInterview2
-_080F67E6:
- movs r0, 0
- str r0, [sp]
- movs r0, 0xFF
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginHardwarePaletteFade
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, =sub_80F6820
- str r1, [r0]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_repel
-
- thumb_func_start sub_80F6820
-sub_80F6820: @ 80F6820
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- adds r5, r2, 0
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080F68A8
- ldr r1, =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 _080F6868
- ldr r0, =gUnknown_0203A034
- ldr r0, [r0]
- ldr r0, [r0]
- ldrb r0, [r0, 0x3]
- bl DestroyTask
- ldr r0, =0x0000ffff
- b _080F686E
- .pool
-_080F6868:
- cmp r0, 0x1
- bne _080F6884
- ldr r0, =0xffff0000
-_080F686E:
- movs r1, 0x10
- movs r2, 0
- bl BlendPalettes
- ldrh r0, [r4, 0xA]
- adds r0, 0x1
- strh r0, [r4, 0xA]
- b _080F68A8
- .pool
-_080F6884:
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0
- bl SetGpuReg
- adds r0, r5, 0
- bl DestroyTask
- bl FreeAllWindowBuffers
- ldr r0, =CB2_ReturnToFieldContinueScriptPlayMapMusic
- bl SetMainCallback2
- bl sub_80F7E64
-_080F68A8:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F6820
-
- thumb_func_start sub_80F68B4
-sub_80F68B4: @ 80F68B4
- push {r4,r5,lr}
- ldr r2, =gBattle_BG3_X
- ldrh r3, [r2]
- adds r0, r3, 0x2
- strh r0, [r2]
- ldr r4, =gBattle_BG3_Y
- ldrh r5, [r4]
- adds r1, r5, 0x1
- strh r1, [r4]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xFF
- bls _080F68D4
- adds r0, r3, 0
- subs r0, 0xFD
- strh r0, [r2]
-_080F68D4:
- lsls r0, r1, 16
- lsrs r0, 16
- cmp r0, 0xFF
- bls _080F68E2
- adds r0, r5, 0
- subs r0, 0xFE
- strh r0, [r4]
-_080F68E2:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F68B4
-
- thumb_func_start sub_80F68F0
-sub_80F68F0: @ 80F68F0
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, =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 _080F6972
- movs r0, 0
- strh r0, [r2, 0x8]
- movs r3, 0xC
- ldrsh r0, [r2, r3]
- cmp r0, 0
- bne _080F6924
- ldrh r0, [r2, 0xA]
- adds r0, 0x1
- b _080F6928
- .pool
-_080F6924:
- ldrh r0, [r2, 0xA]
- subs r0, 0x1
-_080F6928:
- 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 _080F693E
- movs r0, 0x1
- b _080F6942
-_080F693E:
- cmp r0, 0
- bne _080F6944
-_080F6942:
- strh r0, [r1, 0xC]
-_080F6944:
- ldr r0, =gTasks
- lsls r4, r5, 2
- adds r4, r5
- lsls r4, 3
- adds r4, r0
- ldrb r2, [r4, 0xA]
- ldr r3, =0x00002ede
- movs r0, 0x6B
- movs r1, 0x1
- bl BlendPalette
- ldrb r2, [r4, 0xA]
- ldr r3, =0x00007fff
- movs r0, 0x68
- movs r1, 0x1
- bl BlendPalette
- ldrb r2, [r4, 0xA]
- ldr r3, =0x000077be
- movs r0, 0x6E
- movs r1, 0x1
- bl BlendPalette
-_080F6972:
- ldr r1, =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 _080F69A4
- ldr r0, =gUnknown_0203A034
- ldr r0, [r0]
- ldr r0, [r0]
- strb r4, [r0, 0xA]
- b _080F69AE
- .pool
-_080F69A4:
- ldr r0, =gUnknown_0203A034
- ldr r0, [r0]
- ldr r1, [r0]
- movs r0, 0x1
- strb r0, [r1, 0xA]
-_080F69AE:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F68F0
-
- thumb_func_start sub_80F69B8
-sub_80F69B8: @ 80F69B8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x10
- lsls r0, 16
- lsrs r7, r0, 16
- lsls r1, 24
- lsrs r4, r1, 24
- mov r8, r4
- lsls r2, 24
- lsrs r5, r2, 24
- lsls r3, 24
- lsrs r6, r3, 24
- ldr r0, =gContestPlayerMonIndex
- movs r2, 0
- ldrb r0, [r0]
- cmp r4, r0
- bne _080F69DE
- movs r2, 0x1
-_080F69DE:
- adds r0, r7, 0
- ldr r1, [sp, 0x28]
- bl GetMonIconPtr
- adds r3, r0, 0
- lsls r0, r5, 9
- adds r0, 0x80
- adds r3, r0
- cmp r6, 0
- beq _080F6A40
- lsls r1, r4, 9
- ldr r0, =0x06004000
- adds r1, r0
- movs r2, 0xC0
- lsls r2, 1
- adds r0, r3, 0
- movs r3, 0x1
- bl RequestDma3Copy
- adds r0, r4, 0
- adds r0, 0xA
- lsls r0, 28
- lsls r1, r4, 20
- movs r2, 0x80
- lsls r2, 18
- adds r1, r2
- orrs r1, r0
- lsrs r1, 16
- lsls r3, r4, 1
- adds r3, r4
- adds r3, 0x4
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x4
- str r0, [sp]
- movs r0, 0x3
- str r0, [sp, 0x4]
- movs r0, 0x11
- str r0, [sp, 0x8]
- movs r0, 0x1
- str r0, [sp, 0xC]
- movs r2, 0x3
- bl WriteSequenceToBgTilemapBuffer
- b _080F6A54
- .pool
-_080F6A40:
- mov r0, r8
- lsls r1, r0, 9
- ldr r2, =0x06004000
- adds r1, r2
- movs r2, 0xC0
- lsls r2, 1
- adds r0, r3, 0
- movs r3, 0x1
- bl RequestDma3Copy
-_080F6A54:
- add sp, 0x10
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F69B8
-
- thumb_func_start sub_80F6A64
-sub_80F6A64: @ 80F6A64
- 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, =gContestMons
-_080F6A74:
- 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_80F69B8
- adds r4, 0x40
- adds r5, 0x1
- cmp r5, 0x3
- ble _080F6A74
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F6A64
-
- thumb_func_start sub_80F6A9C
-sub_80F6A9C: @ 80F6A9C
- push {r4-r6,lr}
- movs r4, 0
- ldr r6, =gMonIconPaletteIndices
- movs r5, 0xA0
- lsls r5, 16
-_080F6AA6:
- ldr r1, =gContestMons
- lsls r0, r4, 6
- adds r0, r1
- ldrh r0, [r0]
- movs r1, 0
- bl GetIconSpecies
- lsls r0, 16
- lsrs r0, 16
- adds r0, r6
- ldrb r0, [r0]
- lsls r0, 5
- ldr r1, =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 _080F6AA6
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F6A9C
-
- thumb_func_start sub_80F6AE8
-sub_80F6AE8: @ 80F6AE8
- push {r4,lr}
- ldr r0, =gIsLinkContest
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080F6B58
- bl sub_800E0E8
- movs r0, 0x8
- movs r1, 0x8
- bl CreateWirelessStatusIndicatorSprite
- ldr r4, =gSprites
- ldr r0, =gWirelessStatusIndicatorSpriteId
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- adds r0, 0x43
- movs r1, 0x1
- strb r1, [r0]
- ldr r0, =gUnknown_0858D8E0
- bl LoadSpriteSheet
- adds r1, r0, 0
- lsls r1, 16
- movs r0, 0x1
- negs r0, r0
- lsrs r1, 11
- ldr r2, =0x06010000
- adds r1, r2
- movs r2, 0x80
- movs r3, 0x1
- bl RequestDma3Fill
- ldr r0, =gSpriteTemplate_858D8C8
- movs r1, 0x8
- movs r2, 0x8
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- ldrb r2, [r1, 0x1]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- movs r2, 0x8
- orrs r0, r2
- strb r0, [r1, 0x1]
-_080F6B58:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F6AE8
-
- thumb_func_start sub_80F6B78
-sub_80F6B78: @ 80F6B78
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x44
- adds r5, r0, 0
- lsls r1, 24
- lsrs r7, r1, 24
- add r4, sp, 0x20
- adds r0, r4, 0
- movs r1, 0
- movs r2, 0x8
- bl memset
- movs r0, 0x1E
- strb r0, [r4, 0x3]
- movs r0, 0x2
- strb r0, [r4, 0x4]
- adds r0, r4, 0
- bl AddWindow
- lsls r6, r0, 24
- lsrs r4, r6, 24
- adds r0, r4, 0
- movs r1, 0x11
- bl FillWindowPixelBuffer
- movs r0, 0x1
- adds r1, r5, 0
- movs r2, 0
- bl GetStringWidth
- adds r2, r0, 0
- adds r2, 0x9
- cmp r2, 0
- bge _080F6BC4
- adds r2, 0x7
-_080F6BC4:
- asrs r2, 3
- mov r10, r2
- cmp r2, 0x1E
- ble _080F6BD0
- movs r1, 0x1E
- mov r10, r1
-_080F6BD0:
- mov r1, r10
- lsls r2, r1, 3
- subs r2, r0
- lsrs r0, r2, 31
- adds r2, r0
- asrs r2, 1
- lsls r2, 24
- lsrs r2, 24
- ldr r0, =gUnknown_0858D8E8
- str r0, [sp]
- movs r0, 0x1
- negs r0, r0
- str r0, [sp, 0x4]
- str r5, [sp, 0x8]
- adds r0, r4, 0
- movs r1, 0x1
- movs r3, 0x1
- bl AddTextPrinterParameterized3
- adds r0, r4, 0
- movs r1, 0x7
- bl GetWindowAttribute
- mov r9, r0
- ldr r2, =gUnknown_0858D6D0
- mov r8, r2
- lsls r1, r7, 4
- adds r1, r7
- lsls r1, 2
- ldr r3, =gSprites
- adds r1, r3
- ldrh r0, [r1, 0x4]
- lsls r0, 22
- lsrs r0, 17
- ldr r2, =0x06010000
- adds r0, r2
- str r0, [sp, 0xC]
- str r6, [sp, 0x38]
- mov r7, sp
- adds r7, 0x1C
- str r7, [sp, 0x2C]
- mov r0, r10
- adds r0, 0x2
- str r0, [sp, 0x30]
- movs r5, 0
- add r7, sp, 0x10
- mov r12, r7
- adds r6, r1, 0
- adds r6, 0x2E
- movs r4, 0x2
-_080F6C34:
- adds r0, r6, r5
- movs r7, 0
- ldrsh r1, [r0, r7]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrh r0, [r0, 0x4]
- lsls r0, 22
- lsrs r0, 17
- adds r0, r2
- mov r1, r12
- adds r1, 0x4
- mov r12, r1
- subs r1, 0x4
- stm r1!, {r0}
- adds r5, 0x2
- subs r4, 0x1
- cmp r4, 0
- bge _080F6C34
- mov r7, r8
- adds r7, 0x80
- mov r2, r8
- adds r2, 0x40
- str r2, [sp, 0x28]
- mov r0, r8
- adds r0, 0x20
- str r0, [sp, 0x3C]
- mov r1, r8
- adds r1, 0xA0
- str r1, [sp, 0x40]
- adds r2, 0x20
- str r2, [sp, 0x34]
- add r5, sp, 0xC
- movs r6, 0
- movs r4, 0x3
-_080F6C7C:
- str r6, [sp, 0x1C]
- ldm r5!, {r1}
- ldr r0, [sp, 0x2C]
- ldr r2, =0x05000100
- bl CpuSet
- subs r4, 0x1
- cmp r4, 0
- bge _080F6C7C
- ldr r5, [sp, 0xC]
- ldr r6, =0x04000008
- mov r0, r8
- adds r1, r5, 0
- adds r2, r6, 0
- bl CpuSet
- movs r0, 0x80
- lsls r0, 1
- adds r1, r5, r0
- adds r0, r7, 0
- adds r2, r6, 0
- bl CpuSet
- movs r2, 0x80
- lsls r2, 2
- adds r1, r5, r2
- adds r0, r7, 0
- adds r2, r6, 0
- bl CpuSet
- movs r7, 0xC0
- lsls r7, 2
- adds r1, r5, r7
- ldr r0, [sp, 0x28]
- adds r2, r6, 0
- bl CpuSet
- movs r4, 0
- cmp r4, r10
- bge _080F6D32
- adds r7, r6, 0
-_080F6CCE:
- adds r6, r4, 0x1
- adds r0, r6, 0
- cmp r6, 0
- bge _080F6CDA
- adds r0, r4, 0
- adds r0, 0x8
-_080F6CDA:
- asrs r0, 3
- lsls r1, r0, 2
- add r1, sp
- adds r1, 0xC
- lsls r0, 3
- subs r0, r6, r0
- lsls r0, 5
- ldr r1, [r1]
- adds r5, r1, r0
- mov r0, r8
- adds r0, 0xC0
- adds r1, r5, 0
- adds r2, r7, 0
- bl CpuSet
- movs r0, 0x80
- lsls r0, 1
- adds r1, r5, r0
- mov r0, r9
- adds r2, r7, 0
- bl CpuSet
- movs r0, 0xF0
- lsls r0, 2
- add r0, r9
- movs r2, 0x80
- lsls r2, 2
- adds r1, r5, r2
- adds r2, r7, 0
- bl CpuSet
- movs r0, 0xC0
- lsls r0, 2
- adds r1, r5, r0
- mov r0, r8
- adds r0, 0xE0
- adds r2, r7, 0
- bl CpuSet
- movs r1, 0x20
- add r9, r1
- adds r4, r6, 0
- cmp r4, r10
- blt _080F6CCE
-_080F6D32:
- adds r2, r4, 0x1
- adds r0, r2, 0
- cmp r2, 0
- bge _080F6D3E
- adds r0, r4, 0
- adds r0, 0x8
-_080F6D3E:
- asrs r0, 3
- lsls r1, r0, 2
- add r1, sp
- adds r1, 0xC
- lsls r0, 3
- subs r0, r2, r0
- lsls r0, 5
- ldr r1, [r1]
- adds r5, r1, r0
- ldr r4, =0x04000008
- ldr r0, [sp, 0x3C]
- adds r1, r5, 0
- adds r2, r4, 0
- bl CpuSet
- movs r2, 0x80
- lsls r2, 1
- adds r1, r5, r2
- ldr r0, [sp, 0x40]
- adds r2, r4, 0
- bl CpuSet
- movs r7, 0x80
- lsls r7, 2
- adds r1, r5, r7
- ldr r0, [sp, 0x40]
- adds r2, r4, 0
- bl CpuSet
- movs r0, 0xC0
- lsls r0, 2
- adds r1, r5, r0
- ldr r0, [sp, 0x34]
- adds r2, r4, 0
- bl CpuSet
- ldr r1, [sp, 0x38]
- lsrs r0, r1, 24
- bl RemoveWindow
- ldr r2, [sp, 0x30]
- lsls r1, r2, 3
- movs r0, 0xF0
- subs r0, r1
- asrs r0, 1
- add sp, 0x44
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80F6B78
-
- thumb_func_start sub_80F6DC0
-sub_80F6DC0: @ 80F6DC0
- push {r4-r6,lr}
- sub sp, 0x20
- mov r1, sp
- ldr r0, =gSpriteTemplate_858D7F8
- ldm r0!, {r2-r4}
- stm r1!, {r2-r4}
- ldm r0!, {r2-r4}
- stm r1!, {r2-r4}
- add r5, sp, 0x18
- ldr r6, =gUnknown_0858D810
- movs r4, 0x7
-_080F6DD6:
- adds r0, r6, 0
- bl LoadSpriteSheet
- adds r6, 0x8
- subs r4, 0x1
- cmp r4, 0
- bge _080F6DD6
- ldr r0, =gUnknown_0858D850
- bl LoadSpritePalette
- movs r4, 0
- mov r6, sp
-_080F6DEE:
- mov r0, sp
- movs r1, 0x88
- lsls r1, 1
- movs r2, 0x90
- movs r3, 0xA
- bl CreateSprite
- adds r1, r5, r4
- strb r0, [r1]
- ldrh r0, [r6]
- adds r0, 0x1
- strh r0, [r6]
- adds r4, 0x1
- cmp r4, 0x7
- ble _080F6DEE
- ldr r2, =gSprites
- ldrb r1, [r5]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r5, 0x1]
- movs r3, 0
- strh r1, [r0, 0x2E]
- ldrb r1, [r5]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r5, 0x2]
- strh r1, [r0, 0x30]
- ldrb r1, [r5]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r5, 0x3]
- strh r1, [r0, 0x32]
- ldrb r1, [r5, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r5, 0x5]
- strh r1, [r0, 0x2E]
- ldrb r1, [r5, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r5, 0x6]
- strh r1, [r0, 0x30]
- ldrb r1, [r5, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r5, 0x7]
- strh r1, [r0, 0x32]
- ldr r1, =gUnknown_0203A034
- ldr r0, [r1]
- ldr r2, [r0]
- ldrb r0, [r5]
- strb r0, [r2]
- ldr r0, [r1]
- ldr r0, [r0]
- strb r3, [r0, 0x4]
- ldr r0, [r1]
- ldr r1, [r0]
- ldrb r0, [r5, 0x4]
- strb r0, [r1, 0x1]
- bl sub_80F7144
- add sp, 0x20
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F6DC0
-
- thumb_func_start sub_80F6E9C
-sub_80F6E9C: @ 80F6E9C
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- ldr r4, =gUnknown_0203A034
- ldr r4, [r4]
- mov r8, r4
- ldr r4, [r4]
- ldrb r5, [r4]
- lsls r4, r5, 4
- adds r4, r5
- lsls r4, 2
- ldr r5, =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, =sub_80F6F68
- str r0, [r4, 0x1C]
- mov r0, r8
- ldr r1, [r0]
- movs r0, 0x1
- strb r0, [r1, 0x4]
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F6E9C
-
- thumb_func_start sub_80F6EF4
-sub_80F6EF4: @ 80F6EF4
- push {r4,r5,lr}
- ldr r1, =gUnknown_0203A034
- ldr r4, [r1]
- ldr r1, [r4]
- ldrb r2, [r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- ldr r2, =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, =sub_80F7014
- str r0, [r1, 0x1C]
- ldr r1, [r4]
- movs r0, 0x3
- strb r0, [r1, 0x4]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F6EF4
-
- thumb_func_start sub_80F6F40
-sub_80F6F40: @ 80F6F40
- 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, =SpriteCallbackDummy
- str r1, [r0, 0x1C]
- ldr r0, =gUnknown_0203A034
- ldr r0, [r0]
- ldr r0, [r0]
- strb r3, [r0, 0x4]
- bx lr
- .pool
- thumb_func_end sub_80F6F40
-
- thumb_func_start sub_80F6F68
-sub_80F6F68: @ 80F6F68
- 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 _080F6F92
- strh r2, [r3, 0x20]
-_080F6F92:
- movs r4, 0
- ldr r6, =gSprites
- movs r5, 0x40
- adds r2, r3, 0
- adds r2, 0x2E
-_080F6F9C:
- 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 _080F6F9C
- movs r0, 0x20
- ldrsh r1, [r3, r0]
- movs r2, 0x36
- ldrsh r0, [r3, r2]
- cmp r1, r0
- bne _080F6FCC
- ldr r0, =sub_80F6FDC
- str r0, [r3, 0x1C]
-_080F6FCC:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F6F68
-
- thumb_func_start sub_80F6FDC
-sub_80F6FDC: @ 80F6FDC
- push {lr}
- adds r2, r0, 0
- ldr r0, =gUnknown_0203A034
- ldr r0, [r0]
- ldr r1, [r0]
- movs r0, 0x2
- strb r0, [r1, 0x4]
- ldrh r3, [r2, 0x38]
- ldr r1, =0xffff0000
- lsrs r0, r1, 16
- cmp r3, r0
- beq _080F7008
- subs r0, r3, 0x1
- strh r0, [r2, 0x38]
- lsls r0, 16
- asrs r0, 16
- asrs r1, 16
- cmp r0, r1
- bne _080F7008
- ldrh r0, [r2, 0x3A]
- bl sub_80F6EF4
-_080F7008:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F6FDC
-
- thumb_func_start sub_80F7014
-sub_80F7014: @ 80F7014
- 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, =gSprites
- movs r5, 0x40
- adds r2, r3, 0
- adds r2, 0x2E
-_080F7038:
- 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 _080F7038
- 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 _080F7070
- adds r0, r3, 0
- bl sub_80F6F40
-_080F7070:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F7014
-
- thumb_func_start sub_80F707C
-sub_80F707C: @ 80F707C
- push {r4-r7,lr}
- ldr r4, =gUnknown_0203A034
- ldr r1, [r4]
- ldr r1, [r1]
- ldrb r1, [r1, 0x1]
- bl sub_80F6B78
- lsls r0, 16
- lsrs r0, 16
- ldr r1, [r4]
- ldr r1, [r1]
- ldrb r2, [r1, 0x1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- ldr r3, =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
-_080F70BE:
- 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 _080F70BE
- ldr r1, =gBattle_WIN0H
- movs r0, 0xF0
- strh r0, [r1]
- ldr r2, =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, =0x00003f3e
- movs r0, 0x48
- bl SetGpuReg
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F707C
-
- thumb_func_start sub_80F7144
-sub_80F7144: @ 80F7144
- push {r4-r7,lr}
- ldr r0, =gUnknown_0203A034
- ldr r0, [r0]
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r3, =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, =gBattle_WIN0H
- ldr r6, =gBattle_WIN0V
- adds r5, r3, 0
- movs r4, 0x4
- adds r2, 0x2E
- movs r3, 0x2
-_080F7174:
- 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 _080F7174
- movs r0, 0
- strh r0, [r7]
- strh r0, [r6]
- movs r0, 0x40
- movs r1, 0
- bl SetGpuReg
- ldrh r1, [r6]
- movs r0, 0x44
- bl SetGpuReg
- ldr r1, =0x00003f3f
- movs r0, 0x48
- bl SetGpuReg
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F7144
-
- thumb_func_start sub_80F71C8
-sub_80F71C8: @ 80F71C8
- push {r4-r6,lr}
- sub sp, 0xC
- movs r5, 0x5
- movs r4, 0x1
- ldr r0, =gIsLinkContest
- ldrb r1, [r0]
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0
- beq _080F71F8
- ldr r1, =gUnknown_08DC6498
- str r5, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- movs r2, 0x5
- movs r3, 0x1
- bl CopyToBgTilemapBufferRect
- movs r5, 0xA
- b _080F7240
- .pool
-_080F71F8:
- ldr r0, =gSpecialVar_ContestRank
- ldrh r2, [r0]
- cmp r2, 0
- bne _080F720C
- ldr r1, =gUnknown_08DC63F8
- b _080F722E
- .pool
-_080F720C:
- cmp r2, 0x1
- bne _080F7218
- ldr r1, =gUnknown_08DC6420
- b _080F722E
- .pool
-_080F7218:
- cmp r2, 0x2
- bne _080F722C
- ldr r1, =gUnknown_08DC6448
- movs r0, 0xA
- str r0, [sp]
- str r2, [sp, 0x4]
- movs r0, 0x2
- b _080F7236
- .pool
-_080F722C:
- ldr r1, =gUnknown_08DC6470
-_080F722E:
- movs r0, 0xA
- str r0, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
-_080F7236:
- movs r2, 0x5
- movs r3, 0x1
- bl CopyToBgTilemapBufferRect
- movs r5, 0xF
-_080F7240:
- ldr r0, =gSpecialVar_ContestCategory
- ldrh r0, [r0]
- cmp r0, 0
- bne _080F725C
- movs r6, 0
- ldr r1, =gUnknown_08DC64AC
- b _080F7298
- .pool
-_080F725C:
- cmp r0, 0x1
- bne _080F726C
- movs r6, 0x1
- ldr r1, =gUnknown_08DC64C0
- b _080F7298
- .pool
-_080F726C:
- cmp r0, 0x2
- bne _080F7290
- movs r6, 0x2
- ldr r1, =gUnknown_08DC64D4
- lsls r2, r5, 24
- lsrs r2, 24
- lsls r4, 24
- lsrs r3, r4, 24
- movs r0, 0x5
- str r0, [sp]
- str r6, [sp, 0x4]
- movs r0, 0x2
- bl CopyToBgTilemapBufferRect
- b _080F72CC
- .pool
-_080F7290:
- cmp r0, 0x3
- bne _080F72B4
- movs r6, 0x3
- ldr r1, =gUnknown_08DC64E8
-_080F7298:
- lsls r2, r5, 24
- lsrs r2, 24
- lsls r4, 24
- lsrs r3, r4, 24
- movs r0, 0x5
- str r0, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- bl CopyToBgTilemapBufferRect
- b _080F72CC
- .pool
-_080F72B4:
- movs r6, 0x4
- ldr r1, =gUnknown_08DC64FC
- lsls r2, r5, 24
- lsrs r2, 24
- lsls r4, 24
- lsrs r3, r4, 24
- movs r0, 0x5
- str r0, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- bl CopyToBgTilemapBufferRect
-_080F72CC:
- adds r5, 0x5
- ldr r1, =gUnknown_08DC6510
- lsls r2, r5, 24
- lsrs r2, 24
- lsrs r3, r4, 24
- movs r0, 0x6
- str r0, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- bl CopyToBgTilemapBufferRect
- ldr r0, =gUnknown_0203A034
- ldr r0, [r0]
- ldr r1, [r0, 0x14]
- movs r0, 0x20
- str r0, [sp]
- movs r0, 0x4
- str r0, [sp, 0x4]
- str r6, [sp, 0x8]
- movs r0, 0x2
- movs r2, 0
- movs r3, 0
- bl CopyToBgTilemapBufferRect_ChangePalette
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F71C8
-
- thumb_func_start sub_80F7310
-sub_80F7310: @ 80F7310
- push {r4,r5,lr}
- lsls r0, 24
- lsls r1, 24
- lsrs r5, r1, 24
- ldr r1, =gContestMonConditions
- lsrs r0, 23
- adds r0, r1
- movs r1, 0
- ldrsh r0, [r0, r1]
- lsls r4, r0, 16
- adds r0, r4, 0
- movs r1, 0x3F
- bl __udivsi3
- adds r1, r0, 0
- ldr r0, =0x0000ffff
- ands r0, r1
- cmp r0, 0
- beq _080F733C
- movs r0, 0x80
- lsls r0, 9
- adds r1, r0
-_080F733C:
- lsrs r1, 16
- cmp r1, 0
- bne _080F7348
- cmp r4, 0
- beq _080F7348
- movs r1, 0x1
-_080F7348:
- cmp r5, 0
- beq _080F7352
- cmp r1, 0xA
- bls _080F7352
- movs r1, 0xA
-_080F7352:
- lsls r0, r1, 24
- lsrs r0, 24
- pop {r4,r5}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80F7310
-
thumb_func_start sub_80F7364
sub_80F7364: @ 80F7364
push {r4-r7,lr}
diff --git a/include/contest.h b/include/contest.h
index 9d287b9a5..73ebb79fa 100644
--- a/include/contest.h
+++ b/include/contest.h
@@ -442,6 +442,8 @@ void sub_80DACBC(u8 contestType, u8 rank, bool32 isPostgame);
void sub_80DB09C(u8 contestCategory);
void sub_80DCE58(u8);
void sub_80DFA08(struct ContestPokemon *mon, int language);
+void sub_80DBED4(void);
+u8 sub_80DEFA8(u8, u8);
// contest link
void sub_81D9DE4(u8 taskId);
@@ -454,4 +456,5 @@ bool8 sub_80FC55C(void);
bool8 sub_80FC530(u8);
u8 sub_80F86E0(u8 *);
+
#endif //GUARD_CONTEST_H
diff --git a/include/contest_painting.h b/include/contest_painting.h
index c633c50cc..ca03a72b5 100644
--- a/include/contest_painting.h
+++ b/include/contest_painting.h
@@ -13,4 +13,7 @@ enum
void sub_812FDA8(int);
void CB2_ContestPainting(void);
+extern u8 gUnknown_02039F5C;
+extern u8 gUnknown_02039F5D;
+
#endif
diff --git a/include/graphics.h b/include/graphics.h
index eecbd50a7..29719d1a0 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -4834,5 +4834,16 @@ extern const u32 gUnknown_08C19EEC[];
extern const u32 gUnknown_08C1A000[];
extern const u32 gUnknown_08C1A12C[];
extern const u32 gUnknown_08C1A2B4[];
+extern const u16 gUnknown_08DC6498[];
+extern const u16 gUnknown_08DC63F8[];
+extern const u16 gUnknown_08DC6420[];
+extern const u16 gUnknown_08DC6448[];
+extern const u16 gUnknown_08DC6470[];
+extern const u16 gUnknown_08DC64AC[];
+extern const u16 gUnknown_08DC64C0[];
+extern const u16 gUnknown_08DC64D4[];
+extern const u16 gUnknown_08DC64E8[];
+extern const u16 gUnknown_08DC64FC[];
+extern const u16 gUnknown_08DC6510[];
#endif //GUARD_GRAPHICS_H
diff --git a/include/link_rfu.h b/include/link_rfu.h
index 715b4cdd9..08cab616c 100644
--- a/include/link_rfu.h
+++ b/include/link_rfu.h
@@ -210,6 +210,7 @@ struct UnkRfuStruct_8010A14
extern struct UnkRfuStruct_1 gUnknown_03004140;
extern struct UnkRfuStruct_2 gUnknown_03005000;
+extern u8 gWirelessStatusIndicatorSpriteId;
// Exported ROM declarations
u32 sub_800BEC0(void);
diff --git a/include/strings.h b/include/strings.h
index 9870b0eea..d16dd21f8 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -2209,5 +2209,10 @@ extern const u8 MatchCall_BattlePyramidText14[];
// Contest Link
extern const u8 gText_ColorDarkGrey[];
+extern const u8 gText_CommunicationStandby[];
+extern const u8 gText_AnnouncingResults[];
+extern const u8 gText_PreliminaryResults[];
+extern const u8 gText_Round2Results[];
+extern const u8 gText_Var1sVar2Won[];
#endif //GUARD_STRINGS_H
diff --git a/include/tv.h b/include/tv.h
index 5528bada7..ea0226815 100644
--- a/include/tv.h
+++ b/include/tv.h
@@ -48,10 +48,13 @@ void PutPokemonTodayCaughtOnAir(void);
void TV_PutSecretBaseVisitOnTheAir(void);
void PutBattleUpdateOnTheAir(u8 opponentLinkPlayerId, u16 move, u16 speciesPlayer, u16 speciesOpponent);
void BravoTrainerPokemonProfile_BeforeInterview1(u16 move);
+void InterviewBefore(void);
+void InterviewAfter(void);
void UpdateTVScreensOnMap(int, int);
void TV_PrintIntToStringVar(u8 varIdx, int value);
void SaveRecordedItemPurchasesForTVShow(void);
bool8 sub_80EE818(void);
void sub_80EE8C8(u16 winStreak, u8 facilityAndMode);
+void BravoTrainerPokemonProfile_BeforeInterview2(u8 contestStandingPlace);
#endif //GUARD_TV_H
diff --git a/src/contest_link_80F57C4.c b/src/contest_link_80F57C4.c
index 95171ba68..721a4f870 100755
--- a/src/contest_link_80F57C4.c
+++ b/src/contest_link_80F57C4.c
@@ -2,34 +2,132 @@
#include "battle.h"
#include "bg.h"
#include "contest.h"
+#include "contest_link_80F57C4.h"
+#include "contest_painting.h"
#include "decompress.h"
+#include "dma3.h"
#include "event_data.h"
+#include "field_specials.h"
#include "gpu_regs.h"
#include "graphics.h"
+#include "international_string_util.h"
#include "link.h"
+#include "link_rfu.h"
+#include "load_save.h"
+#include "main.h"
+#include "overworld.h"
#include "palette.h"
+#include "pokedex.h"
+#include "pokemon.h"
+#include "pokemon_icon.h"
#include "random.h"
+#include "save.h"
+#include "scanline_effect.h"
+#include "sound.h"
#include "string_util.h"
#include "strings.h"
#include "task.h"
#include "text.h"
+#include "tv.h"
+#include "util.h"
#include "window.h"
+#include "constants/game_stat.h"
+#include "constants/rgb.h"
+#include "constants/songs.h"
+#include "constants/vars.h"
+
+struct ContestLinkUnk0
+{
+ u8 unk0;
+ u8 unk1;
+ u8 taskId;
+ u8 unk3;
+ u8 unk4;
+ u8 unk5;
+ u8 unk6;
+ u8 filler7[0x1];
+ u8 spriteId;
+ u8 unk9;
+ u8 unkA;
+ u8 fillerB[0x9];
+ u8 unk14;
+ u8 filler15[0x3];
+};
+
+struct ContestLinkUnk4
+{
+ u8 filler0[0x50];
+};
struct ContestLink80F57C4
{
- u8 filler0[0xC];
+ struct ContestLinkUnk0 *unk0;
+ struct ContestLinkUnk4 *unk4;
+ u8 filler8[0x4];
u8 *unkC[4];
};
+extern const struct CompressedSpriteSheet gMonFrontPicTable[];
+
extern struct ContestLink80F57C4 *gUnknown_0203A034;
extern const struct BgTemplate gUnknown_0858D888[4];
extern const struct WindowTemplate gUnknown_0858D898[];
+extern const struct CompressedSpriteSheet gUnknown_0858D878[];
+extern const struct CompressedSpritePalette gUnknown_0858D880[];
+extern const struct SpriteSheet gUnknown_0858D8E0;
+extern const struct SpriteTemplate gSpriteTemplate_858D8C8;
+extern const u8 gUnknown_0858D8E8[];
+extern const u8 gUnknown_0858D6D0[];
+extern const struct SpriteTemplate gSpriteTemplate_858D7F8;
+extern const struct SpriteSheet gUnknown_0858D810[];
+extern const struct SpritePalette gUnknown_0858D850;
-void sub_80F71C8(void);
+static void sub_80F6A9C(void);
+static void sub_80F71C8(void);
u8 sub_80F7310(u8, u8);
s8 sub_80F7364(u8, u8);
void sub_80F7ED0(int, u8 *, int);
+void sub_80F7DF4(void);
+static void sub_80F6A64(u8, u8);
+static void sub_80F6DC0(void);
+static void sub_80F6AE8(void);
+static void sub_80F5CE4(u8);
+static void sub_80F5C00(void);
+static void sub_80F68B4(u8);
+void sub_80F7880(void);
+static void sub_80F5C24(void);
+static void sub_80F707C(const u8 *);
+static void sub_80F5ED8(u8);
+static void sub_80F5F14(u8);
+static void sub_80F5F30(u8);
+static void sub_80F5F74(u8);
+static void sub_80F7144(void);
+static void sub_80F68F0(u8);
+s16 sub_80F6B78(const u8 *, u8);
+static void sub_80F6E9C(s16, u16, u16, u16);
+static void sub_80F6058(u8);
+void sub_80F7A80(u8, u8);
+static void sub_80F6EF4(u16);
+static void sub_80F60F0(u8);
+static void sub_80F616C(u8);
+static void sub_80F6204(u8);
+void sub_80F73DC(u8);
+void sub_80F74BC(u8);
+void sub_80F77E0(u8, u8);
+static void sub_80F6404(u8);
+void sub_80F75A8(struct Sprite *);
+void sub_80F7670(u8);
+void sub_80F7620(struct Sprite *);
+static void sub_80F66B4(u8);
+static void sub_80F671C(u8);
+static void sub_80F677C(u8);
+static void sub_80F67C4(u8);
+static void sub_80F6820(u8);
+void sub_80F7E64(void);
+static void sub_80F6F68(struct Sprite *);
+static void sub_80F7014(struct Sprite *);
+static void sub_80F6FDC(struct Sprite *);
void sub_80F57C4(void)
{
@@ -155,3 +253,1191 @@ void sub_80F5AE0(void)
CopyBgTilemapBufferToVram(1);
}
+
+void sub_80F5B00(void)
+{
+ gPaletteFade.bufferTransferDisabled = 1;
+ SetVBlankCallback(NULL);
+ sub_80F7DF4();
+ sub_80F57C4();
+ ScanlineEffect_Clear();
+ ResetPaletteFade();
+ ResetSpriteData();
+ ResetTasks();
+ FreeAllSpritePalettes();
+ sub_80F591C();
+ sub_80F6A9C();
+ sub_80F6A64(0, 1);
+ sub_80F5AE0();
+ memset(gUnknown_0203A034->unk0, 0, sizeof(*gUnknown_0203A034->unk0));
+ memset(gUnknown_0203A034->unk4, 0, sizeof(*gUnknown_0203A034->unk4));
+ sub_80F6DC0();
+ sub_80F6AE8();
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
+ gPaletteFade.bufferTransferDisabled = 0;
+ gUnknown_0203A034->unk0->taskId = CreateTask(sub_80F5CE4, 5);
+ SetMainCallback2(sub_80F5C00);
+ gBattle_WIN1H = 0x00F0;
+ gBattle_WIN1V = 0x80A0;
+ CreateTask(sub_80F68B4, 20);
+ sub_80F7880();
+ if (gIsLinkContest & 0x2)
+ gPaletteFade.bufferTransferDisabled = 1;
+ else
+ PlayBGM(MUS_CON_K);
+
+ SetVBlankCallback(sub_80F5C24);
+}
+
+static void sub_80F5C00(void)
+{
+ AnimateSprites();
+ BuildOamBuffer();
+ RunTasks();
+ UpdatePaletteFade();
+ CopyBgTilemapBufferToVram(1);
+ CopyBgTilemapBufferToVram(2);
+}
+
+static void sub_80F5C24(void)
+{
+ SetGpuReg(REG_OFFSET_BG0HOFS, gBattle_BG0_X);
+ SetGpuReg(REG_OFFSET_BG0VOFS, gBattle_BG0_Y);
+ SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X);
+ SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y);
+ SetGpuReg(REG_OFFSET_BG2HOFS, gBattle_BG2_X);
+ SetGpuReg(REG_OFFSET_BG2VOFS, gBattle_BG2_Y);
+ SetGpuReg(REG_OFFSET_BG3HOFS, gBattle_BG3_X);
+ SetGpuReg(REG_OFFSET_BG3VOFS, gBattle_BG3_Y);
+ SetGpuReg(REG_OFFSET_WIN0H, gBattle_WIN0H);
+ SetGpuReg(REG_OFFSET_WIN0V, gBattle_WIN0V);
+ SetGpuReg(REG_OFFSET_WIN1H, gBattle_WIN1H);
+ SetGpuReg(REG_OFFSET_WIN1V, gBattle_WIN1V);
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+ ScanlineEffect_InitHBlankDmaTransfer();
+}
+
+static void sub_80F5CE4(u8 taskId)
+{
+ u16 var;
+
+ if (gIsLinkContest & 1)
+ {
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ sub_80DBED4();
+ if (gContestFinalStandings[gContestPlayerMonIndex] == 0)
+ {
+ IncrementGameStat(GAME_STAT_WON_LINK_CONTEST);
+ gSpecialVar_0x8005 = 8;
+ InterviewBefore();
+ if (gSpecialVar_Result != 1)
+ InterviewAfter();
+ }
+
+ sub_813BADC(2);
+ sub_80DEDA8(gSpecialVar_ContestRank);
+ sub_80DEDA8(0xFE);
+ gUnknown_02039F5C = 1;
+ gUnknown_02039F5D = sub_80DEFA8(0xFE, 0);
+ var = VarGet(VAR_0x4086);
+ VarSet(VAR_0x4086, 0);
+ SetContinueGameWarpStatusToDynamicWarp();
+ TrySavingData(SAVE_LINK);
+ ClearContinueGameWarpStatus2();
+ VarSet(VAR_0x4086, var);
+ gTasks[taskId].data[0]++;
+ break;
+ case 1:
+ gTasks[taskId].data[0]++;
+ if (!(gIsLinkContest & 0x2))
+ gTasks[taskId].data[0] = 100;
+ break;
+ case 2:
+ if (IsLinkTaskFinished())
+ {
+ sub_800ADF8();
+ gTasks[taskId].data[0]++;
+ }
+ return;
+ case 3:
+ if (IsLinkTaskFinished() == TRUE)
+ {
+ PlayBGM(MUS_CON_K);
+ gPaletteFade.bufferTransferDisabled = 0;
+ gTasks[taskId].data[0]++;
+ break;
+ }
+ return;
+ }
+ }
+
+ if (!gPaletteFade.active)
+ {
+ gTasks[taskId].data[0] = 0;
+ if (gIsLinkContest & 0x1)
+ {
+ sub_80F707C(gText_CommunicationStandby);
+ gTasks[taskId].func = sub_80F5ED8;
+ }
+ else
+ {
+ IncrementGameStat(GAME_STAT_ENTERED_CONTEST);
+ if (gContestFinalStandings[gContestPlayerMonIndex] == 0)
+ IncrementGameStat(GAME_STAT_WON_CONTEST);
+
+ sub_80DEDA8(gSpecialVar_ContestRank);
+ sub_80DEDA8(0xFE);
+ gUnknown_02039F5C = 1;
+ gUnknown_02039F5D = sub_80DEFA8(0xFE, 0);
+ sub_813BADC(2);
+ gTasks[taskId].func = sub_80F5F74;
+ }
+ }
+}
+
+static void sub_80F5ED8(u8 taskId)
+{
+ if (gReceivedRemoteLinkPlayers)
+ {
+ CreateTask(sub_80F5F14, 0);
+ gTasks[taskId].func = TaskDummy;
+ }
+}
+
+static void sub_80F5F14(u8 taskId)
+{
+ SetTaskFuncWithFollowupFunc(taskId, sub_80FC998, sub_80F5F30);
+}
+
+static void sub_80F5F30(u8 taskId)
+{
+ if (IsLinkTaskFinished())
+ {
+ DestroyTask(taskId);
+ gTasks[gUnknown_0203A034->unk0->taskId].func = sub_80F5F74;
+ sub_80F7144();
+ }
+}
+
+static void sub_80F5F74(u8 taskId)
+{
+ s16 var0;
+
+ if (gTasks[taskId].data[0] == 0)
+ {
+ CreateTask(sub_80F68F0, 20);
+ var0 = sub_80F6B78(gText_AnnouncingResults, gUnknown_0203A034->unk0->unk0);
+ sub_80F6E9C(var0, 144, 120, 1088);
+ gTasks[taskId].data[0]++;
+ }
+ else if (gTasks[taskId].data[0] == 1)
+ {
+ if (gUnknown_0203A034->unk0->unk4 == 0)
+ {
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].data[0]++;
+ }
+ }
+ else if (gTasks[taskId].data[0] == 2)
+ {
+ if (++gTasks[taskId].data[1] == 21)
+ {
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].data[0]++;
+ }
+ }
+ else if (gTasks[taskId].data[0] == 3)
+ {
+ var0 = sub_80F6B78(gText_PreliminaryResults, gUnknown_0203A034->unk0->unk0);
+ sub_80F6E9C(var0, 144, -1, 1088);
+ gTasks[taskId].data[0]++;
+ }
+ else if (gTasks[taskId].data[0] == 4)
+ {
+ if (gUnknown_0203A034->unk0->unk4 == 2)
+ {
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].func = sub_80F6058;
+ }
+ }
+}
+
+static void sub_80F6058(u8 taskId)
+{
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ if (!gUnknown_0203A034->unk0->unkA)
+ {
+ sub_80F7A80(0, gTasks[taskId].data[2]++);
+ if (!gUnknown_0203A034->unk0->unk14)
+ gTasks[taskId].data[0] = 2;
+ else
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 1:
+ if (!gUnknown_0203A034->unk0->unk14)
+ gTasks[taskId].data[0] = 0;
+ break;
+ case 2:
+ sub_80F6EF4(1088);
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[2] = 0;
+ gTasks[taskId].func = sub_80F60F0;
+ break;
+ }
+}
+
+static void sub_80F60F0(u8 taskId)
+{
+ s16 var0;
+
+ if (gUnknown_0203A034->unk0->unk4 == 0)
+ {
+ if (++gTasks[taskId].data[1] == 21)
+ {
+ gTasks[taskId].data[1] = 0;
+ var0 = sub_80F6B78(gText_Round2Results, gUnknown_0203A034->unk0->unk0);
+ sub_80F6E9C(var0, 144, -1, 1088);
+ }
+ }
+ else if (gUnknown_0203A034->unk0->unk4 == 2)
+ {
+ gTasks[taskId].func = sub_80F616C;
+ }
+}
+
+static void sub_80F616C(u8 taskId)
+{
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ if (!gUnknown_0203A034->unk0->unkA)
+ {
+ sub_80F7A80(1, gTasks[taskId].data[2]++);
+ if (!gUnknown_0203A034->unk0->unk14)
+ gTasks[taskId].data[0] = 2;
+ else
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 1:
+ if (!gUnknown_0203A034->unk0->unk14)
+ gTasks[taskId].data[0] = 0;
+ break;
+ case 2:
+ sub_80F6EF4(1088);
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].func = sub_80F6204;
+ break;
+ }
+}
+
+static void sub_80F6204(u8 taskId)
+{
+ int i;
+ u8 newTaskId;
+ u8 buffer[100];
+ s16 var0;
+
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ if (!gUnknown_0203A034->unk0->unk4)
+ 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++)
+ {
+ newTaskId = CreateTask(sub_80F73DC, 10);
+ gTasks[newTaskId].data[0] = gContestFinalStandings[i];
+ gTasks[newTaskId].data[1] = i;
+ }
+ gTasks[taskId].data[0]++;
+ break;
+ case 3:
+ if (gUnknown_0203A034->unk0->unk5 == 4)
+ {
+ if (++gTasks[taskId].data[1] == 31)
+ {
+ gTasks[taskId].data[1] = 0;
+ CreateTask(sub_80F74BC, 10);
+ gTasks[taskId].data[0]++;
+ for (i = 0; i < 4 && gContestFinalStandings[i] != 0; i++)
+ ;
+
+ sub_80F77E0(i, 14);
+ }
+ }
+ break;
+ case 4:
+ if (++gTasks[taskId].data[1] == 21)
+ {
+ gTasks[taskId].data[1] = 0;
+ for (i = 0; i < 4 && gContestFinalStandings[i] != 0; i++)
+ ;
+
+ StringCopy(gStringVar1, gContestMons[i].trainerName);
+ sub_81DB5AC(gStringVar1);
+ StringCopy(gStringVar2, gContestMons[i].nickname);
+ StringExpandPlaceholders(buffer, gText_Var1sVar2Won);
+ var0 = sub_80F6B78(buffer, gUnknown_0203A034->unk0->unk0);
+ sub_80F6E9C(var0, 144, -1, 1088);
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 5:
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].func = sub_80F6404;
+ break;
+ }
+}
+
+static void sub_80F6404(u8 taskId)
+{
+ int i;
+ u8 spriteId;
+ u16 species;
+ u32 otId;
+ u32 personality;
+ const struct CompressedSpritePalette *pokePal;
+
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ gBattle_WIN0H = 0x00F0;
+ gBattle_WIN0V = 0x5050;
+ for (i = 0; i < 4 && gContestFinalStandings[i] != 0; i++)
+ ;
+
+ species = gContestMons[i].species;
+ personality = gContestMons[i].personality;
+ otId = gContestMons[i].otId;
+ if (i == gContestPlayerMonIndex)
+ {
+ HandleLoadSpecialPokePic_2(
+ &gMonFrontPicTable[species],
+ gMonSpritesGfxPtr->sprites[1],
+ species,
+ personality);
+ }
+ else
+ {
+ HandleLoadSpecialPokePic_DontHandleDeoxys(
+ &gMonFrontPicTable[species],
+ gMonSpritesGfxPtr->sprites[1],
+ species,
+ personality);
+ }
+
+ pokePal = GetMonSpritePalStructFromOtIdPersonality(species, otId, personality);
+ LoadCompressedSpritePalette(pokePal);
+ SetMultiuseSpriteTemplateToPokemon(species, B_POSITION_OPPONENT_LEFT);
+ gMultiuseSpriteTemplate.paletteTag = pokePal->tag;
+ spriteId = CreateSprite(&gMultiuseSpriteTemplate, 272, 80, 10);
+ gSprites[spriteId].data[1] = species;
+ gSprites[spriteId].oam.priority = 0;
+ gSprites[spriteId].callback = sub_80F75A8;
+ gUnknown_0203A034->unk0->spriteId = spriteId;
+ LoadCompressedSpriteSheet(gUnknown_0858D878);
+ LoadCompressedSpritePalette(gUnknown_0858D880);
+ CreateTask(sub_80F7670, 10);
+ gTasks[taskId].data[0]++;
+ break;
+ case 1:
+ if (++gTasks[taskId].data[3] == 1)
+ {
+ u8 counter;
+ gTasks[taskId].data[3] = 0;
+ gTasks[taskId].data[2] += 2;
+ if (gTasks[taskId].data[2] > 32)
+ gTasks[taskId].data[2] = 32;
+
+ counter = gTasks[taskId].data[2];
+ gBattle_WIN0V = ((80 - counter) << 8) | (80 + counter);
+ if (counter == 32)
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 2:
+ if (gUnknown_0203A034->unk0->unk6 == 1)
+ gTasks[taskId].data[0]++;
+ break;
+ case 3:
+ if (++gTasks[taskId].data[1] == 121)
+ {
+ gTasks[taskId].data[1] = 0;
+ gSprites[gUnknown_0203A034->unk0->spriteId].callback = sub_80F7620;
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 4:
+ if (gUnknown_0203A034->unk0->unk6 == 2)
+ {
+ u8 top = (gBattle_WIN0V >> 8);
+ top += 2;
+ if (top > 80)
+ top = 80;
+
+ gBattle_WIN0V = (top << 8) | (160 - top);;
+ if (top == 80)
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 5:
+ if (gUnknown_0203A034->unk0->unk6 == 2)
+ {
+ gUnknown_0203A034->unk0->unk9 = 1;
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].func = sub_80F66B4;
+ }
+ break;
+ }
+}
+
+static void sub_80F66B4(u8 taskId)
+{
+ int i;
+ u16 nationalDexNum;
+
+ if (gMain.newKeys & A_BUTTON)
+ {
+ if (!(gIsLinkContest & 0x1))
+ {
+ for (i = 0; i < 4; i++)
+ {
+ nationalDexNum = SpeciesToNationalPokedexNum(gContestMons[i].species);
+ GetSetPokedexFlag(nationalDexNum, FLAG_SET_SEEN);
+ }
+ }
+
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].func = sub_80F671C;
+ }
+}
+
+static void sub_80F671C(u8 taskId)
+{
+ if (gIsLinkContest & 0x1)
+ {
+ if (!gTasks[taskId].data[10])
+ {
+ sub_80F707C(gText_CommunicationStandby);
+ sub_800AC34();
+ gTasks[taskId].func = sub_80F677C;
+ }
+ }
+ else
+ {
+ gTasks[taskId].func = sub_80F67C4;
+ }
+}
+
+static void sub_80F677C(u8 taskId)
+{
+ if (!gReceivedRemoteLinkPlayers)
+ {
+ if (gIsLinkContest & 0x2)
+ sub_800E084();
+
+ sub_80F7144();
+ gTasks[taskId].func = sub_80F67C4;
+ }
+}
+
+static void sub_80F67C4(u8 taskId)
+{
+ if (!(gIsLinkContest & 0x1))
+ BravoTrainerPokemonProfile_BeforeInterview2(gContestFinalStandings[gContestPlayerMonIndex]);
+
+ BeginHardwarePaletteFade(0xFF, 0, 0, 16, 0);
+ gTasks[taskId].func = sub_80F6820;
+}
+
+static void sub_80F6820(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ if (gTasks[taskId].data[1] == 0)
+ {
+ DestroyTask(gUnknown_0203A034->unk0->unk3);
+ BlendPalettes(0x0000FFFF, 16, RGB_BLACK);
+ gTasks[taskId].data[1]++;
+ }
+ else if (gTasks[taskId].data[1] == 1)
+ {
+ BlendPalettes(0xFFFF0000, 16, RGB_BLACK);
+ gTasks[taskId].data[1]++;
+ }
+ else
+ {
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ DestroyTask(taskId);
+ FreeAllWindowBuffers();
+ SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
+ sub_80F7E64();
+ }
+ }
+}
+
+static void sub_80F68B4(u8 taskId)
+{
+ gBattle_BG3_X += 2;
+ gBattle_BG3_Y += 1;
+ if (gBattle_BG3_X > 255)
+ gBattle_BG3_X -= 255;
+ if (gBattle_BG3_Y > 255)
+ gBattle_BG3_Y -= 255;
+}
+
+static void sub_80F68F0(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, 1, gTasks[taskId].data[1], RGB(30, 22, 11));
+ BlendPalette(0x68, 1, gTasks[taskId].data[1], RGB_WHITE);
+ BlendPalette(0x6E, 1, gTasks[taskId].data[1], RGB(30, 29, 29));
+ }
+
+ if (gTasks[taskId].data[1] == 0)
+ gUnknown_0203A034->unk0->unkA = 0;
+ else
+ gUnknown_0203A034->unk0->unkA = 1;
+}
+
+void sub_80F69B8(u16 species, u8 monIndex, u8 arg2, u8 arg3, u32 personality)
+{
+ u8 frameNum;
+ const u8 *iconPtr;
+ u16 var0;
+ u16 var1;
+
+ u8 *contestPlayerMonIndex = &gContestPlayerMonIndex; // fake match
+ frameNum = (monIndex == *contestPlayerMonIndex) ? 1 : 0;
+
+ iconPtr = GetMonIconPtr(species, personality, frameNum);
+ iconPtr += arg2 * 0x200 + 0x80;
+ if (arg3)
+ {
+ RequestDma3Copy(iconPtr, (void *)BG_CHAR_ADDR(1) + monIndex * 0x200, 0x180, 1);
+ var0 = ((monIndex + 10) << 12);
+ var1 = (monIndex * 0x10 + 0x200);
+ WriteSequenceToBgTilemapBuffer(1, var1 | var0, 3, monIndex * 3 + 4, 4, 3, 17, 1);
+ }
+ else
+ {
+ RequestDma3Copy(iconPtr, (void *)BG_CHAR_ADDR(1) + monIndex * 0x200, 0x180, 1);
+ }
+}
+
+static void sub_80F6A64(u8 arg0, u8 arg1)
+{
+ int i;
+
+ for (i = 0; i < 4; i++)
+ sub_80F69B8(gContestMons[i].species, i, arg0, arg1, gContestMons[i].personality);
+}
+
+static void sub_80F6A9C(void)
+{
+ int i;
+ register u16 species asm("r0");
+
+ for (i = 0; i < 4; i++)
+ {
+ species = GetIconSpecies(gContestMons[i].species, 0);
+ LoadPalette(gMonIconPalettes[gMonIconPaletteIndices[species]], i * 0x10 + 0xA0, 0x20);
+ }
+}
+
+static void sub_80F6AE8(void)
+{
+ u16 sheet;
+ u8 spriteId;
+
+ if (gIsLinkContest & 0x2)
+ {
+ sub_800E0E8();
+ CreateWirelessStatusIndicatorSprite(8, 8);
+ gSprites[gWirelessStatusIndicatorSpriteId].subpriority = 1;
+ sheet = LoadSpriteSheet(&gUnknown_0858D8E0);
+ RequestDma3Fill(0xFFFFFFFF, (void *)BG_CHAR_ADDR(4) + sheet * 0x20, 0x80, 1);
+ spriteId = CreateSprite(&gSpriteTemplate_858D8C8, 8, 8, 0);
+ gSprites[spriteId].oam.objMode = ST_OAM_OBJ_WINDOW;
+ }
+}
+
+// s16 sub_80F6B78(const u8 *text, u8 spriteId)
+// {
+// int i;
+// int origWidth, strWidth;
+// const u8 *r8;
+// u8 sp10[0x10];
+// struct WindowTemplate windowTemplate;
+// int spC;
+// u8 *windowTileData;
+// u8 windowId;
+
+// memset(windowTemplate, 0, sizeof(*windowTemplate));
+// windowTemplate.width = 30;
+// windowTemplate.height = 2;
+// windowId = AddWindow(&windowTemplate);
+// FillWindowPixelBuffer(windowId, 0x11);
+// origWidth = GetStringWidth(1, text, 0) + 9;
+// strWidth = origWidth;
+// if (strWidth < 0)
+// strWidth += 7;
+
+// strWidth >>= 3;
+// if (strWidth > 30)
+// strWidth = 30;
+
+// AddTextPrinterParameterized3(windowId, 1, (strWidth * 8 - origWidth) / 2, 1, gUnknown_0858D8E8, -1, text);
+// windowTileData = (u8 *)GetWindowAttribute(windowId, WINDOW_TILE_DATA);
+// r8 = gUnknown_0858D6D0;
+// // ....
+// }
+
+NAKED
+s16 sub_80F6B78(const u8 *text, u8 spriteId)
+{
+ asm_unified("\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x44\n\
+ adds r5, r0, 0\n\
+ lsls r1, 24\n\
+ lsrs r7, r1, 24\n\
+ add r4, sp, 0x20\n\
+ adds r0, r4, 0\n\
+ movs r1, 0\n\
+ movs r2, 0x8\n\
+ bl memset\n\
+ movs r0, 0x1E\n\
+ strb r0, [r4, 0x3]\n\
+ movs r0, 0x2\n\
+ strb r0, [r4, 0x4]\n\
+ adds r0, r4, 0\n\
+ bl AddWindow\n\
+ lsls r6, r0, 24\n\
+ lsrs r4, r6, 24\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x11\n\
+ bl FillWindowPixelBuffer\n\
+ movs r0, 0x1\n\
+ adds r1, r5, 0\n\
+ movs r2, 0\n\
+ bl GetStringWidth\n\
+ adds r2, r0, 0\n\
+ adds r2, 0x9\n\
+ cmp r2, 0\n\
+ bge _080F6BC4\n\
+ adds r2, 0x7\n\
+_080F6BC4:\n\
+ asrs r2, 3\n\
+ mov r10, r2\n\
+ cmp r2, 0x1E\n\
+ ble _080F6BD0\n\
+ movs r1, 0x1E\n\
+ mov r10, r1\n\
+_080F6BD0:\n\
+ mov r1, r10\n\
+ lsls r2, r1, 3\n\
+ subs r2, r0\n\
+ lsrs r0, r2, 31\n\
+ adds r2, r0\n\
+ asrs r2, 1\n\
+ lsls r2, 24\n\
+ lsrs r2, 24\n\
+ ldr r0, =gUnknown_0858D8E8\n\
+ str r0, [sp]\n\
+ movs r0, 0x1\n\
+ negs r0, r0\n\
+ str r0, [sp, 0x4]\n\
+ str r5, [sp, 0x8]\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x1\n\
+ movs r3, 0x1\n\
+ bl AddTextPrinterParameterized3\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x7\n\
+ bl GetWindowAttribute\n\
+ mov r9, r0\n\
+ ldr r2, =gUnknown_0858D6D0\n\
+ mov r8, r2\n\
+ lsls r1, r7, 4\n\
+ adds r1, r7\n\
+ lsls r1, 2\n\
+ ldr r3, =gSprites\n\
+ adds r1, r3\n\
+ ldrh r0, [r1, 0x4]\n\
+ lsls r0, 22\n\
+ lsrs r0, 17\n\
+ ldr r2, =0x06010000\n\
+ adds r0, r2\n\
+ str r0, [sp, 0xC]\n\
+ str r6, [sp, 0x38]\n\
+ mov r7, sp\n\
+ adds r7, 0x1C\n\
+ str r7, [sp, 0x2C]\n\
+ mov r0, r10\n\
+ adds r0, 0x2\n\
+ str r0, [sp, 0x30]\n\
+ movs r5, 0\n\
+ add r7, sp, 0x10\n\
+ mov r12, r7\n\
+ adds r6, r1, 0\n\
+ adds r6, 0x2E\n\
+ movs r4, 0x2\n\
+_080F6C34:\n\
+ adds r0, r6, r5\n\
+ movs r7, 0\n\
+ ldrsh r1, [r0, r7]\n\
+ lsls r0, r1, 4\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r3\n\
+ ldrh r0, [r0, 0x4]\n\
+ lsls r0, 22\n\
+ lsrs r0, 17\n\
+ adds r0, r2\n\
+ mov r1, r12\n\
+ adds r1, 0x4\n\
+ mov r12, r1\n\
+ subs r1, 0x4\n\
+ stm r1!, {r0}\n\
+ adds r5, 0x2\n\
+ subs r4, 0x1\n\
+ cmp r4, 0\n\
+ bge _080F6C34\n\
+ mov r7, r8\n\
+ adds r7, 0x80\n\
+ mov r2, r8\n\
+ adds r2, 0x40\n\
+ str r2, [sp, 0x28]\n\
+ mov r0, r8\n\
+ adds r0, 0x20\n\
+ str r0, [sp, 0x3C]\n\
+ mov r1, r8\n\
+ adds r1, 0xA0\n\
+ str r1, [sp, 0x40]\n\
+ adds r2, 0x20\n\
+ str r2, [sp, 0x34]\n\
+ add r5, sp, 0xC\n\
+ movs r6, 0\n\
+ movs r4, 0x3\n\
+_080F6C7C:\n\
+ str r6, [sp, 0x1C]\n\
+ ldm r5!, {r1}\n\
+ ldr r0, [sp, 0x2C]\n\
+ ldr r2, =0x05000100\n\
+ bl CpuSet\n\
+ subs r4, 0x1\n\
+ cmp r4, 0\n\
+ bge _080F6C7C\n\
+ ldr r5, [sp, 0xC]\n\
+ ldr r6, =0x04000008\n\
+ mov r0, r8\n\
+ adds r1, r5, 0\n\
+ adds r2, r6, 0\n\
+ bl CpuSet\n\
+ movs r0, 0x80\n\
+ lsls r0, 1\n\
+ adds r1, r5, r0\n\
+ adds r0, r7, 0\n\
+ adds r2, r6, 0\n\
+ bl CpuSet\n\
+ movs r2, 0x80\n\
+ lsls r2, 2\n\
+ adds r1, r5, r2\n\
+ adds r0, r7, 0\n\
+ adds r2, r6, 0\n\
+ bl CpuSet\n\
+ movs r7, 0xC0\n\
+ lsls r7, 2\n\
+ adds r1, r5, r7\n\
+ ldr r0, [sp, 0x28]\n\
+ adds r2, r6, 0\n\
+ bl CpuSet\n\
+ movs r4, 0\n\
+ cmp r4, r10\n\
+ bge _080F6D32\n\
+ adds r7, r6, 0\n\
+_080F6CCE:\n\
+ adds r6, r4, 0x1\n\
+ adds r0, r6, 0\n\
+ cmp r6, 0\n\
+ bge _080F6CDA\n\
+ adds r0, r4, 0\n\
+ adds r0, 0x8\n\
+_080F6CDA:\n\
+ asrs r0, 3\n\
+ lsls r1, r0, 2\n\
+ add r1, sp\n\
+ adds r1, 0xC\n\
+ lsls r0, 3\n\
+ subs r0, r6, r0\n\
+ lsls r0, 5\n\
+ ldr r1, [r1]\n\
+ adds r5, r1, r0\n\
+ mov r0, r8\n\
+ adds r0, 0xC0\n\
+ adds r1, r5, 0\n\
+ adds r2, r7, 0\n\
+ bl CpuSet\n\
+ movs r0, 0x80\n\
+ lsls r0, 1\n\
+ adds r1, r5, r0\n\
+ mov r0, r9\n\
+ adds r2, r7, 0\n\
+ bl CpuSet\n\
+ movs r0, 0xF0\n\
+ lsls r0, 2\n\
+ add r0, r9\n\
+ movs r2, 0x80\n\
+ lsls r2, 2\n\
+ adds r1, r5, r2\n\
+ adds r2, r7, 0\n\
+ bl CpuSet\n\
+ movs r0, 0xC0\n\
+ lsls r0, 2\n\
+ adds r1, r5, r0\n\
+ mov r0, r8\n\
+ adds r0, 0xE0\n\
+ adds r2, r7, 0\n\
+ bl CpuSet\n\
+ movs r1, 0x20\n\
+ add r9, r1\n\
+ adds r4, r6, 0\n\
+ cmp r4, r10\n\
+ blt _080F6CCE\n\
+_080F6D32:\n\
+ adds r2, r4, 0x1\n\
+ adds r0, r2, 0\n\
+ cmp r2, 0\n\
+ bge _080F6D3E\n\
+ adds r0, r4, 0\n\
+ adds r0, 0x8\n\
+_080F6D3E:\n\
+ asrs r0, 3\n\
+ lsls r1, r0, 2\n\
+ add r1, sp\n\
+ adds r1, 0xC\n\
+ lsls r0, 3\n\
+ subs r0, r2, r0\n\
+ lsls r0, 5\n\
+ ldr r1, [r1]\n\
+ adds r5, r1, r0\n\
+ ldr r4, =0x04000008\n\
+ ldr r0, [sp, 0x3C]\n\
+ adds r1, r5, 0\n\
+ adds r2, r4, 0\n\
+ bl CpuSet\n\
+ movs r2, 0x80\n\
+ lsls r2, 1\n\
+ adds r1, r5, r2\n\
+ ldr r0, [sp, 0x40]\n\
+ adds r2, r4, 0\n\
+ bl CpuSet\n\
+ movs r7, 0x80\n\
+ lsls r7, 2\n\
+ adds r1, r5, r7\n\
+ ldr r0, [sp, 0x40]\n\
+ adds r2, r4, 0\n\
+ bl CpuSet\n\
+ movs r0, 0xC0\n\
+ lsls r0, 2\n\
+ adds r1, r5, r0\n\
+ ldr r0, [sp, 0x34]\n\
+ adds r2, r4, 0\n\
+ bl CpuSet\n\
+ ldr r1, [sp, 0x38]\n\
+ lsrs r0, r1, 24\n\
+ bl RemoveWindow\n\
+ ldr r2, [sp, 0x30]\n\
+ lsls r1, r2, 3\n\
+ movs r0, 0xF0\n\
+ subs r0, r1\n\
+ asrs r0, 1\n\
+ add sp, 0x44\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .pool");
+}
+
+static void sub_80F6DC0(void)
+{
+ int i;
+ struct SpriteTemplate template;
+ u8 spriteIds[8];
+
+ template = gSpriteTemplate_858D7F8;
+ for (i = 0; i < 8; i++)
+ LoadSpriteSheet(&gUnknown_0858D810[i]);
+
+ LoadSpritePalette(&gUnknown_0858D850);
+ for (i = 0; i < 8; i++)
+ {
+ spriteIds[i] = CreateSprite(&template, 272, 144, 10);
+ template.tileTag++;
+ }
+
+ gSprites[spriteIds[0]].data[0] = spriteIds[1];
+ gSprites[spriteIds[0]].data[1] = spriteIds[2];
+ gSprites[spriteIds[0]].data[2] = spriteIds[3];
+
+ gSprites[spriteIds[4]].data[0] = spriteIds[5];
+ gSprites[spriteIds[4]].data[1] = spriteIds[6];
+ gSprites[spriteIds[4]].data[2] = spriteIds[7];
+
+ gUnknown_0203A034->unk0->unk0 = spriteIds[0];
+ gUnknown_0203A034->unk0->unk4 = 0;
+ gUnknown_0203A034->unk0->unk1 = spriteIds[4];
+ sub_80F7144();
+}
+
+static void sub_80F6E9C(s16 arg0, u16 y, u16 arg2, u16 arg3)
+{
+ struct Sprite *sprite = &gSprites[gUnknown_0203A034->unk0->unk0];
+ 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_80F6F68;
+ gUnknown_0203A034->unk0->unk4 = 1;
+}
+
+static void sub_80F6EF4(u16 arg0)
+{
+ struct Sprite *sprite = &gSprites[gUnknown_0203A034->unk0->unk0];
+ 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_80F7014;
+ gUnknown_0203A034->unk0->unk4 = 3;
+}
+
+static void sub_80F6F40(struct Sprite *sprite)
+{
+ sprite->pos1.x = 272;
+ sprite->pos1.y = 144;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+ sprite->callback = SpriteCallbackDummy;
+ gUnknown_0203A034->unk0->unk4 = 0;
+}
+
+static void sub_80F6F68(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_80F6FDC;
+}
+
+static void sub_80F6FDC(struct Sprite *sprite)
+{
+ gUnknown_0203A034->unk0->unk4 = 2;
+ if ((u16)sprite->data[5] != 0xFFFF)
+ {
+ if (--sprite->data[5] == -1)
+ sub_80F6EF4(sprite->data[6]);
+ }
+}
+
+static void sub_80F7014(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_80F6F40(sprite);
+}
+
+static void sub_80F707C(const u8 *text)
+{
+ int i;
+ u16 x;
+ struct Sprite *sprite;
+
+ x = sub_80F6B78(text, gUnknown_0203A034->unk0->unk1);
+ sprite = &gSprites[gUnknown_0203A034->unk0->unk1];
+ 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);
+ SetGpuReg(REG_OFFSET_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);
+}
+
+static void sub_80F7144(void)
+{
+ int i;
+ struct Sprite *sprite;
+
+ sprite = &gSprites[gUnknown_0203A034->unk0->unk1];
+ sprite->invisible = 1;
+ for (i = 0; i < 3; i++)
+ gSprites[sprite->data[i]].invisible = 1;
+
+ gBattle_WIN0H = 0;
+ gBattle_WIN0V = 0;
+ SetGpuReg(REG_OFFSET_WIN0H, gBattle_WIN0H);
+ SetGpuReg(REG_OFFSET_WIN0V, gBattle_WIN0V);
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR
+ | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
+}
+
+static void sub_80F71C8(void)
+{
+ u8 palette;
+ int x, y;
+
+ x = 5;
+ y = 1;
+ if (gIsLinkContest & 0x1)
+ {
+ CopyToBgTilemapBufferRect(2, gUnknown_08DC6498, 5, 1, 5, 2);
+ x = 10;
+ }
+ else if (gSpecialVar_ContestRank == 0)
+ {
+ CopyToBgTilemapBufferRect(2, gUnknown_08DC63F8, 5, 1, 10, 2);
+ x = 15;
+ }
+ else if (gSpecialVar_ContestRank == 1)
+ {
+ CopyToBgTilemapBufferRect(2, gUnknown_08DC6420, 5, 1, 10, 2);
+ x = 15;
+ }
+ else if (gSpecialVar_ContestRank == 2)
+ {
+ CopyToBgTilemapBufferRect(2, gUnknown_08DC6448, 5, 1, 10, 2);
+ x = 15;
+ }
+ else
+ {
+ CopyToBgTilemapBufferRect(2, gUnknown_08DC6470, 5, 1, 10, 2);
+ x = 15;
+ }
+
+ if (gSpecialVar_ContestCategory == 0)
+ {
+ palette = 0;
+ CopyToBgTilemapBufferRect(2, gUnknown_08DC64AC, x, y, 5, 2);
+ }
+ else if (gSpecialVar_ContestCategory == 1)
+ {
+ palette = 1;
+ CopyToBgTilemapBufferRect(2, gUnknown_08DC64C0, x, y, 5, 2);
+ }
+ else if (gSpecialVar_ContestCategory == 2)
+ {
+ palette = 2;
+ CopyToBgTilemapBufferRect(2, gUnknown_08DC64D4, x, y, 5, 2);
+ }
+ else if (gSpecialVar_ContestCategory == 3)
+ {
+ palette = 3;
+ CopyToBgTilemapBufferRect(2, gUnknown_08DC64E8, x, y, 5, 2);
+ }
+ else
+ {
+ palette = 4;
+ CopyToBgTilemapBufferRect(2, gUnknown_08DC64FC, x, y, 5, 2);
+ }
+
+ x += 5;
+ CopyToBgTilemapBufferRect(2, gUnknown_08DC6510, x, y, 6, 2);
+ CopyToBgTilemapBufferRect_ChangePalette(2, gUnknown_0203A034->unkC[2], 0, 0, 32, 4, palette);
+}
+
+// fakematching?
+u8 sub_80F7310(u8 monIndex, u8 arg1)
+{
+ u32 var0;
+ u32 var1;
+
+ var0 = gContestMonConditions[monIndex] << 16;
+ var1 = var0 / 0x3F;
+ if (var1 & 0xFFFF)
+ var1 += 0x10000;
+
+ var1 >>= 16;
+ if (var1 == 0 && var0)
+ var1 = 1;
+
+ if (arg1 && var1 > 10)
+ var1 = 10;
+
+ return var1;
+}
diff --git a/src/contest_painting.c b/src/contest_painting.c
index 9de3d733d..0ed169a77 100644
--- a/src/contest_painting.c
+++ b/src/contest_painting.c
@@ -20,9 +20,6 @@
#include "window.h"
#include "constants/rgb.h"
-extern u8 gUnknown_02039F5C;
-extern u8 gUnknown_02039F5D;
-
extern u16 (*gUnknown_03006190)[][32];
extern struct ContestWinner *gUnknown_030061C0;
extern u16 *gContestPaintingMonPalette;
diff --git a/src/tv.c b/src/tv.c
index 95115608d..dfb4a3a64 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -1516,7 +1516,7 @@ void BravoTrainerPokemonProfile_BeforeInterview1(u16 a0)
}
}
-void BravoTrainerPokemonProfile_BeforeInterview2(u8 a0)
+void BravoTrainerPokemonProfile_BeforeInterview2(u8 contestStandingPlace)
{
TVShow *show;
@@ -1524,7 +1524,7 @@ void BravoTrainerPokemonProfile_BeforeInterview2(u8 a0)
sCurTVShowSlot = FindEmptyTVSlotWithinFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
if (sCurTVShowSlot != -1)
{
- show->bravoTrainer.contestResult = a0;
+ show->bravoTrainer.contestResult = contestStandingPlace;
show->bravoTrainer.contestCategory = gSpecialVar_ContestCategory;
show->bravoTrainer.contestRank = gSpecialVar_ContestRank;
show->bravoTrainer.species = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SPECIES, NULL);