diff options
-rw-r--r-- | asm/contest_link_80F57C4.s | 348 | ||||
-rw-r--r-- | asm/contest_link_80FC4F4.s | 1362 | ||||
-rw-r--r-- | asm/contest_link_81D9DE4.s | 890 | ||||
-rw-r--r-- | include/contest.h | 23 | ||||
-rw-r--r-- | include/graphics.h | 8 | ||||
-rw-r--r-- | include/strings.h | 3 | ||||
-rw-r--r-- | ld_script.txt | 5 | ||||
-rw-r--r-- | src/contest.c | 28 | ||||
-rwxr-xr-x | src/contest_link_80F57C4.c | 157 | ||||
-rwxr-xr-x | src/contest_link_80FC4F4.c | 548 | ||||
-rwxr-xr-x | src/contest_link_81D9DE4.c | 331 | ||||
-rwxr-xr-x | src/party_menu.c | 8 | ||||
-rwxr-xr-x | src/script_pokemon_util_80F87D8.c | 14 | ||||
-rw-r--r-- | src/tv.c | 10 |
14 files changed, 1112 insertions, 2623 deletions
diff --git a/asm/contest_link_80F57C4.s b/asm/contest_link_80F57C4.s index edaafc838..1aae2151f 100644 --- a/asm/contest_link_80F57C4.s +++ b/asm/contest_link_80F57C4.s @@ -5,332 +5,6 @@ .text - thumb_func_start sub_80F57C4 -sub_80F57C4: @ 80F57C4 - push {r4,lr} - movs r0, 0 - movs r1, 0x40 - bl SetGpuReg - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, =gUnknown_0858D888 - movs r0, 0 - movs r2, 0x4 - bl InitBgsFromTemplates - movs r4, 0 -_080F57E0: - lsls r0, r4, 24 - lsrs r0, 24 - ldr r1, =gUnknown_0203A034 - ldr r1, [r1] - lsls r2, r4, 2 - adds r1, 0xC - adds r1, r2 - ldr r1, [r1] - bl SetBgTilemapBuffer - adds r4, 0x1 - cmp r4, 0x3 - ble _080F57E0 - ldr r0, =gUnknown_0858D898 - bl InitWindows - bl DeactivateAllTextPrinters - movs r0, 0x4C - movs r1, 0 - bl SetGpuReg - ldr r1, =0x00003f3f - movs r0, 0x48 - bl SetGpuReg - ldr r1, =0x00003f2e - movs r0, 0x4A - bl SetGpuReg - movs r0, 0x40 - movs r1, 0 - bl SetGpuReg - movs r0, 0x44 - movs r1, 0 - bl SetGpuReg - movs r0, 0x42 - movs r1, 0 - bl SetGpuReg - movs r0, 0x46 - movs r1, 0 - bl SetGpuReg - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg - movs r0, 0x54 - movs r1, 0 - bl SetGpuReg - movs r0, 0x10 - movs r1, 0 - bl SetGpuReg - movs r0, 0x12 - movs r1, 0 - bl SetGpuReg - movs r0, 0x14 - movs r1, 0 - bl SetGpuReg - movs r0, 0x16 - movs r1, 0 - bl SetGpuReg - movs r0, 0x18 - movs r1, 0 - bl SetGpuReg - movs r0, 0x1A - movs r1, 0 - bl SetGpuReg - movs r0, 0x1C - movs r1, 0 - bl SetGpuReg - movs r0, 0x1E - movs r1, 0 - bl SetGpuReg - movs r1, 0xFF - lsls r1, 8 - movs r0, 0 - bl SetGpuRegBits - ldr r0, =gBattle_BG0_X - movs r1, 0 - strh r1, [r0] - ldr r0, =gBattle_BG0_Y - strh r1, [r0] - ldr r0, =gBattle_BG1_X - strh r1, [r0] - ldr r0, =gBattle_BG1_Y - strh r1, [r0] - ldr r0, =gBattle_BG2_X - strh r1, [r0] - ldr r0, =gBattle_BG2_Y - strh r1, [r0] - ldr r0, =gBattle_BG3_X - strh r1, [r0] - ldr r0, =gBattle_BG3_Y - strh r1, [r0] - ldr r0, =gBattle_WIN0H - strh r1, [r0] - ldr r0, =gBattle_WIN0V - strh r1, [r0] - ldr r0, =gBattle_WIN1H - strh r1, [r0] - ldr r0, =gBattle_WIN1V - strh r1, [r0] - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_80F57C4 - - thumb_func_start sub_80F591C -sub_80F591C: @ 80F591C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10 - ldr r0, =gUnknown_08C19588 - movs r1, 0xC0 - lsls r1, 19 - bl LZDecompressVram - ldr r1, =gUnknown_08C1A12C - movs r0, 0x3 - movs r2, 0 - movs r3, 0 - bl CopyToBgTilemapBuffer - ldr r1, =gUnknown_08C1A000 - movs r0, 0x2 - movs r2, 0 - movs r3, 0 - bl CopyToBgTilemapBuffer - ldr r1, =gUnknown_08C19EEC - movs r0, 0 - movs r2, 0 - movs r3, 0 - bl CopyToBgTilemapBuffer - bl sub_80F71C8 - ldr r0, =gUnknown_08C1A2B4 - movs r2, 0x80 - lsls r2, 2 - movs r1, 0 - bl LoadCompressedPalette - ldr r0, =gUnknown_0858D6B0 - movs r1, 0xF0 - movs r2, 0x20 - bl LoadPalette - movs r7, 0 - movs r0, 0x1 - mov r8, r0 -_080F5976: - lsls r5, r7, 24 - lsrs r5, 24 - adds r0, r5, 0 - movs r1, 0x1 - bl sub_80F7310 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r5, 0 - movs r1, 0x1 - bl sub_80F7364 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x8] - movs r6, 0 - lsls r1, r7, 1 - adds r2, r7, 0x1 - str r2, [sp, 0xC] - lsls r4, 24 - asrs r4, 24 - mov r10, r4 - adds r1, r7 - adds r0, r1, 0x6 - lsls r0, 24 - mov r9, r0 - adds r1, 0x5 - lsls r7, r1, 24 -_080F59B0: - ldr r1, =0x000060b2 - cmp r6, r10 - bge _080F59B8 - adds r1, 0x2 -_080F59B8: - ldr r4, [sp, 0x8] - lsls r0, r4, 24 - asrs r0, 24 - adds r2, r0, 0 - cmp r0, 0 - bge _080F59C6 - negs r2, r0 -_080F59C6: - cmp r6, r2 - bge _080F59F4 - ldr r5, =0x000060a4 - cmp r0, 0 - bge _080F59F6 - adds r5, 0x2 - b _080F59F6 - .pool -_080F59F4: - ldr r5, =0x000060a2 -_080F59F6: - adds r4, r6, 0 - adds r4, 0x13 - lsls r4, 24 - lsrs r4, 24 - mov r0, r8 - str r0, [sp] - str r0, [sp, 0x4] - movs r0, 0x1 - adds r2, r4, 0 - lsrs r3, r7, 24 - bl FillBgTilemapBufferRect_Palette0 - mov r2, r8 - str r2, [sp] - str r2, [sp, 0x4] - movs r0, 0x1 - adds r1, r5, 0 - adds r2, r4, 0 - mov r4, r9 - lsrs r3, r4, 24 - bl FillBgTilemapBufferRect_Palette0 - adds r6, 0x1 - cmp r6, 0x9 - ble _080F59B0 - ldr r7, [sp, 0xC] - cmp r7, 0x3 - ble _080F5976 - movs r0, 0 - bl CopyBgTilemapBufferToVram - movs r0, 0x1 - bl CopyBgTilemapBufferToVram - movs r0, 0x2 - bl CopyBgTilemapBufferToVram - movs r0, 0x3 - bl CopyBgTilemapBufferToVram - movs r0, 0 - bl ShowBg - movs r0, 0x1 - bl ShowBg - movs r0, 0x2 - bl ShowBg - movs r0, 0x3 - bl ShowBg - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_80F591C - - thumb_func_start sub_80F5A74 -sub_80F5A74: @ 80F5A74 - push {r4-r7,lr} - lsls r0, 24 - lsrs r0, 24 - adds r5, r0, 0 - lsls r1, r5, 6 - ldr r0, =gContestMons - adds r7, r1, r0 - ldr r6, =gDisplayedStringBattle - ldr r0, =gContestPlayerMonIndex - ldrb r0, [r0] - cmp r5, r0 - bne _080F5A96 - ldr r1, =gText_ColorDarkGrey - adds r0, r6, 0 - bl StringCopy - adds r6, r0, 0 -_080F5A96: - adds r1, r7, 0x2 - adds r0, r6, 0 - bl StringCopy - ldr r4, =gDisplayedStringBattle - adds r0, r5, 0 - adds r1, r4, 0 - movs r2, 0 - bl sub_80F7ED0 - ldr r1, =gText_Slash - adds r0, r6, 0 - bl StringCopy - adds r1, r7, 0 - adds r1, 0xD - adds r0, r6, 0 - bl StringAppend - adds r0, r5, 0 - adds r1, r4, 0 - movs r2, 0x32 - bl sub_80F7ED0 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_80F5A74 - - thumb_func_start sub_80F5AE0 -sub_80F5AE0: @ 80F5AE0 - push {r4,lr} - movs r4, 0 -_080F5AE4: - lsls r0, r4, 24 - lsrs r0, 24 - bl sub_80F5A74 - adds r4, 0x1 - cmp r4, 0x3 - ble _080F5AE4 - movs r0, 0x1 - bl CopyBgTilemapBufferToVram - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80F5AE0 - thumb_func_start sub_80F5B00 sub_80F5B00: @ 80F5B00 push {r4-r6,lr} @@ -4628,7 +4302,7 @@ sub_80F7ED0: @ 80F7ED0 thumb_func_start sub_80F7F30 sub_80F7F30: @ 80F7F30 push {r4,r5,lr} - ldr r0, =gUnknown_02039F24 + ldr r0, =gContestMonPartyIndex ldrb r1, [r0] movs r0, 0x64 muls r0, r1 @@ -4660,7 +4334,7 @@ _080F7F5E: sub_80F7F7C: @ 80F7F7C push {r4,lr} movs r4, 0 - ldr r0, =gUnknown_02039F24 + ldr r0, =gContestMonPartyIndex ldrb r1, [r0] movs r0, 0x64 muls r1, r0 @@ -4750,7 +4424,7 @@ _080F8034: .4byte _080F8190 .4byte _080F81F8 _080F8048: - ldr r6, =gUnknown_02039F24 + ldr r6, =gContestMonPartyIndex ldrb r0, [r6] movs r5, 0x64 muls r0, r5 @@ -4801,7 +4475,7 @@ _080F809C: .pool _080F80B8: mov r4, sp - ldr r7, =gUnknown_02039F24 + ldr r7, =gContestMonPartyIndex ldrb r0, [r7] movs r6, 0x64 muls r0, r6 @@ -4850,7 +4524,7 @@ _080F810A: .pool _080F8124: mov r4, sp - ldr r7, =gUnknown_02039F24 + ldr r7, =gContestMonPartyIndex ldrb r0, [r7] movs r6, 0x64 muls r0, r6 @@ -4897,7 +4571,7 @@ _080F814E: .pool _080F8190: mov r4, sp - ldr r7, =gUnknown_02039F24 + ldr r7, =gContestMonPartyIndex ldrb r0, [r7] movs r6, 0x64 muls r0, r6 @@ -4940,7 +4614,7 @@ _080F8190: .pool _080F81F8: mov r4, sp - ldr r7, =gUnknown_02039F24 + ldr r7, =gContestMonPartyIndex ldrb r0, [r7] movs r6, 0x64 muls r0, r6 @@ -5320,7 +4994,7 @@ sub_80F8508: @ 80F8508 ands r0, r1 cmp r0, 0 beq _080F8540 - ldr r0, =gUnknown_02039F24 + ldr r0, =gContestMonPartyIndex ldrb r0, [r0] bl sub_80DA8C8 ldr r1, =sub_80FC6BC @@ -5330,7 +5004,7 @@ sub_80F8508: @ 80F8508 b _080F8556 .pool _080F8540: - ldr r0, =gUnknown_02039F24 + ldr r0, =gContestMonPartyIndex ldrb r0, [r0] bl sub_80DA8C8 ldr r1, =gTasks @@ -5399,7 +5073,7 @@ sub_80F85BC: @ 80F85BC str r0, [sp] str r0, [sp, 0x4] movs r3, 0 - ldr r5, =gUnknown_02039F30 + ldr r5, =gNumLinkContestPlayers mov r12, r5 ldr r0, =gSpecialVar_0x8004 mov r9, r0 @@ -5529,7 +5203,7 @@ sub_80F86E0: @ 80F86E0 adds r3, r0, 0 movs r4, 0 movs r2, 0x1 - ldr r0, =gUnknown_02039F30 + ldr r0, =gNumLinkContestPlayers ldrb r0, [r0] cmp r2, r0 bge _080F8708 diff --git a/asm/contest_link_80FC4F4.s b/asm/contest_link_80FC4F4.s deleted file mode 100644 index 33207e246..000000000 --- a/asm/contest_link_80FC4F4.s +++ /dev/null @@ -1,1362 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80FC4F4 -sub_80FC4F4: @ 80FC4F4 - push {r4,r5,lr} - adds r2, r0, 0 - lsls r4, r1, 16 - lsrs r4, 16 - ldr r5, =gDecompressionBuffer - adds r0, r5, 0 - adds r1, r2, 0 - adds r2, r4, 0 - bl memcpy - bl bitmask_all_link_players_but_self - lsls r0, 24 - lsrs r0, 24 - adds r1, r5, 0 - adds r2, r4, 0 - bl SendBlock - lsls r0, 24 - cmp r0, 0 - bne _080FC528 - movs r0, 0 - b _080FC52A - .pool -_080FC528: - movs r0, 0x1 -_080FC52A: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80FC4F4 - - thumb_func_start sub_80FC530 -sub_80FC530: @ 80FC530 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - movs r4, 0x80 - lsls r4, 17 - lsls r4, r5 - lsrs r4, 24 - bl GetBlockReceivedStatus - ands r4, r0 - cmp r4, 0 - beq _080FC552 - adds r0, r5, 0 - bl ResetBlockReceivedFlag - movs r0, 0x1 - b _080FC554 -_080FC552: - movs r0, 0 -_080FC554: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80FC530 - - thumb_func_start sub_80FC55C -sub_80FC55C: @ 80FC55C - push {r4,lr} - bl GetBlockReceivedStatus - adds r4, r0, 0 - bl sub_800A9D8 - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - beq _080FC574 - movs r0, 0 - b _080FC57A -_080FC574: - bl ResetBlockReceivedFlags - movs r0, 0x1 -_080FC57A: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80FC55C - - thumb_func_start sub_80FC580 -sub_80FC580: @ 80FC580 - push {r4-r6,lr} - lsls r0, 24 - lsrs r2, r0, 24 - movs r1, 0 - ldr r5, =gTasks - ldr r6, =sub_80FC5C0 - ldr r4, =gBlockRecvBuffer - movs r3, 0xFF -_080FC590: - lsls r0, r1, 8 - adds r0, r4 - strh r3, [r0] - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x3 - bls _080FC590 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r0, r5 - movs r1, 0 - strh r1, [r0, 0x8] - str r6, [r0] - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_80FC580 - - thumb_func_start sub_80FC5C0 -sub_80FC5C0: @ 80FC5C0 - lsls r0, 24 - lsrs r0, 24 - ldr r2, =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldr r0, =sub_80FC5DC - str r0, [r1] - bx lr - .pool - thumb_func_end sub_80FC5C0 - - thumb_func_start sub_80FC5DC -sub_80FC5DC: @ 80FC5DC - push {r4-r7,lr} - lsls r0, 24 - lsrs r7, r0, 24 - ldr r0, =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - beq _080FC650 - bl GetMultiplayerId - ldr r1, =gContestPlayerMonIndex - strb r0, [r1] - bl GetLinkPlayerCount - ldr r4, =gUnknown_02039F30 - strb r0, [r4] - ldr r1, =gIsLinkContest - movs r0, 0x1 - strb r0, [r1] - ldr r0, =gWirelessCommType - ldrb r0, [r0] - cmp r0, 0x1 - bne _080FC60C - movs r0, 0x3 - strb r0, [r1] -_080FC60C: - movs r3, 0 - ldrb r2, [r4] - cmp r3, r2 - bge _080FC64A - ldr r1, =gLinkPlayers - ldrb r0, [r1] - subs r0, 0x1 - adds r6, r4, 0 - cmp r0, 0x1 - bls _080FC63A - adds r4, r2, 0 - adds r2, r1, 0 - movs r5, 0xFF -_080FC626: - adds r2, 0x1C - adds r3, 0x1 - cmp r3, r4 - bge _080FC64A - ldrh r1, [r2] - adds r0, r5, 0 - ands r0, r1 - subs r0, 0x1 - cmp r0, 0x1 - bhi _080FC626 -_080FC63A: - ldrb r6, [r6] - cmp r3, r6 - bge _080FC64A - ldr r0, =gIsLinkContest - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] -_080FC64A: - adds r0, r7, 0 - bl SwitchTaskToFollowupFunc -_080FC650: - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_80FC5DC - - thumb_func_start sub_80FC670 -sub_80FC670: @ 80FC670 - push {r4,lr} - adds r4, r0, 0 - ldr r0, =gIsLinkContest - ldrb r1, [r0] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - bne _080FC698 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080FC6A0 - cmp r0, 0x1 - beq _080FC6AE - bl IsLinkTaskFinished - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080FC6B4 -_080FC698: - movs r0, 0x1 - b _080FC6B6 - .pool -_080FC6A0: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _080FC6B4 - bl sub_800ADF8 -_080FC6AE: - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] -_080FC6B4: - movs r0, 0 -_080FC6B6: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80FC670 - - thumb_func_start sub_80FC6BC -sub_80FC6BC: @ 80FC6BC - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r7, r0, 24 - lsls r6, r7, 2 - adds r0, r6, r7 - lsls r4, r0, 3 - ldr r5, =gTasks + 0x8 - adds r0, r4, r5 - adds r0, 0x18 - bl sub_80FC670 - cmp r0, 0 - bne _080FC6DC - b _080FC7F4 -_080FC6DC: - adds r0, r5, 0 - subs r0, 0x8 - adds r4, r0 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _080FC758 - cmp r0, 0x1 - bgt _080FC6F8 - cmp r0, 0 - beq _080FC6FE - b _080FC7DC - .pool -_080FC6F8: - cmp r0, 0xA - beq _080FC7C0 - b _080FC7DC -_080FC6FE: - bl GetMultiplayerId - lsls r0, 24 - cmp r0, 0 - bne _080FC738 - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _080FC7F4 - ldr r0, =gBlockSendBuffer - ldr r1, =gContestPlayerMonIndex - ldrb r1, [r1] - lsls r1, 6 - ldr r2, =gContestMons - adds r1, r2 - movs r2, 0x40 - bl memcpy - movs r0, 0xA - strh r0, [r4, 0x8] - b _080FC7F4 - .pool -_080FC738: - ldr r0, =gBlockSendBuffer - ldr r1, =gContestPlayerMonIndex - ldrb r1, [r1] - lsls r1, 6 - ldr r2, =gContestMons - adds r1, r2 - movs r2, 0x40 - bl memcpy - b _080FC7D6 - .pool -_080FC758: - bl sub_80FC55C - lsls r0, 24 - cmp r0, 0 - beq _080FC7F4 - movs r5, 0 - ldr r0, =gUnknown_02039F30 - mov r8, r6 - ldrb r0, [r0] - cmp r5, r0 - bge _080FC798 - ldr r6, =gLinkPlayers -_080FC770: - lsls r4, r5, 6 - ldr r0, =gContestMons - adds r4, r0 - lsls r1, r5, 8 - ldr r0, =gBlockRecvBuffer - adds r1, r0 - adds r0, r4, 0 - movs r2, 0x40 - bl memcpy - ldrh r1, [r6, 0x1A] - adds r0, r4, 0 - bl sub_80DFA08 - adds r6, 0x1C - adds r5, 0x1 - ldr r0, =gUnknown_02039F30 - ldrb r0, [r0] - cmp r5, r0 - blt _080FC770 -_080FC798: - ldr r0, =gTasks - mov r2, r8 - adds r1, r2, r7 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - b _080FC7F4 - .pool -_080FC7C0: - ldrh r0, [r4, 0x1E] - adds r0, 0x1 - strh r0, [r4, 0x1E] - lsls r0, 16 - movs r1, 0x96 - lsls r1, 17 - cmp r0, r1 - ble _080FC7F4 - movs r0, 0x2 - bl sub_800A4D8 -_080FC7D6: - movs r0, 0x1 - strh r0, [r4, 0x8] - b _080FC7F4 -_080FC7DC: - ldr r0, =gTasks - lsls r1, r7, 2 - adds r1, r7 - lsls r1, 3 - adds r1, r0 - movs r0, 0 - strh r0, [r1, 0x8] - strh r0, [r1, 0x1E] - strh r0, [r1, 0x20] - adds r0, r7, 0 - bl SwitchTaskToFollowupFunc -_080FC7F4: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_80FC6BC - - thumb_func_start sub_80FC804 -sub_80FC804: @ 80FC804 - push {r4,r5,lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r1, =gTasks - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r5, r0, r1 - movs r1, 0x8 - ldrsh r0, [r5, r1] - cmp r0, 0 - beq _080FC830 - cmp r0, 0x1 - beq _080FC858 - movs r0, 0 - strh r0, [r5, 0x8] - adds r0, r2, 0 - bl SwitchTaskToFollowupFunc - b _080FC880 - .pool -_080FC830: - bl GetMultiplayerId - lsls r0, 24 - cmp r0, 0 - bne _080FC87A - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _080FC880 - ldr r0, =gRngValue - movs r1, 0x4 - bl sub_80FC4F4 - cmp r0, 0x1 - bne _080FC880 - b _080FC87A - .pool -_080FC858: - movs r0, 0 - bl sub_80FC530 - lsls r0, 24 - cmp r0, 0 - beq _080FC880 - ldr r0, =gRngValue - ldr r4, =gBlockRecvBuffer - adds r1, r4, 0 - movs r2, 0x4 - bl memcpy - ldr r0, =gContestRngValue - adds r1, r4, 0 - movs r2, 0x4 - bl memcpy -_080FC87A: - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] -_080FC880: - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_80FC804 - - thumb_func_start sub_80FC894 -sub_80FC894: @ 80FC894 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r0, r6, 2 - mov r8, r0 - adds r0, r6 - lsls r5, r0, 3 - ldr r7, =gTasks + 0x8 - adds r0, r5, r7 - adds r0, 0x18 - bl sub_80FC670 - cmp r0, 0 - beq _080FC986 - movs r1, 0x8 - negs r1, r1 - adds r1, r7 - mov r9, r1 - adds r4, r5, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _080FC90C - cmp r0, 0x1 - bgt _080FC8D8 - cmp r0, 0 - beq _080FC8DE - b _080FC96E - .pool -_080FC8D8: - cmp r0, 0xA - beq _080FC954 - b _080FC96E -_080FC8DE: - ldr r1, =gBlockSendBuffer - ldrh r0, [r4, 0x1A] - strb r0, [r1] - bl GetMultiplayerId - lsls r0, 24 - cmp r0, 0 - bne _080FC904 - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _080FC986 - movs r0, 0xA - strh r0, [r4, 0x8] - b _080FC986 - .pool -_080FC904: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _080FC986 -_080FC90C: - bl sub_80FC55C - lsls r0, 24 - cmp r0, 0 - beq _080FC986 - movs r3, 0 - ldr r1, =gUnknown_02039F30 - ldrb r0, [r1] - cmp r3, r0 - bge _080FC93A - ldr r4, =gBlockRecvBuffer - adds r0, r7, 0x2 - adds r2, r5, r0 - movs r5, 0x80 - lsls r5, 1 -_080FC92A: - ldrh r0, [r4] - strh r0, [r2] - adds r4, r5 - adds r2, 0x2 - adds r3, 0x1 - ldrb r0, [r1] - cmp r3, r0 - blt _080FC92A -_080FC93A: - mov r0, r8 - adds r1, r0, r6 - lsls r1, 3 - add r1, r9 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - b _080FC986 - .pool -_080FC954: - ldrh r0, [r4, 0x1E] - adds r0, 0x1 - strh r0, [r4, 0x1E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xA - ble _080FC986 - movs r0, 0x2 - bl sub_800A4D8 - movs r0, 0x1 - strh r0, [r4, 0x8] - b _080FC986 -_080FC96E: - ldr r0, =gTasks - lsls r1, r6, 2 - adds r1, r6 - lsls r1, 3 - adds r1, r0 - movs r0, 0 - strh r0, [r1, 0x8] - strh r0, [r1, 0x1E] - strh r0, [r1, 0x20] - adds r0, r6, 0 - bl SwitchTaskToFollowupFunc -_080FC986: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_80FC894 - - thumb_func_start sub_80FC998 -sub_80FC998: @ 80FC998 - push {r4,lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r1, =gTasks - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r4, r0, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080FC9C4 - cmp r0, 0x1 - beq _080FC9E0 - movs r0, 0 - strh r0, [r4, 0x8] - adds r0, r2, 0 - bl SwitchTaskToFollowupFunc - b _080FC9F0 - .pool -_080FC9C4: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _080FC9F0 - ldr r0, =gContestPlayerMonIndex - movs r1, 0x1 - bl sub_80FC4F4 - cmp r0, 0x1 - bne _080FC9F0 - b _080FC9EA - .pool -_080FC9E0: - bl sub_80FC55C - lsls r0, 24 - cmp r0, 0 - beq _080FC9F0 -_080FC9EA: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_080FC9F0: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80FC998 - - thumb_func_start sub_80FC9F8 -sub_80FC9F8: @ 80FC9F8 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, =gTasks - mov r8, r0 - lsls r7, r5, 2 - adds r0, r7, r5 - lsls r0, 3 - mov r1, r8 - adds r4, r0, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080FCA30 - cmp r0, 0x1 - beq _080FCA68 - movs r0, 0 - strh r0, [r4, 0x8] - adds r0, r5, 0 - bl SwitchTaskToFollowupFunc - b _080FCAB2 - .pool -_080FCA30: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _080FCAB2 - ldr r0, =gContestResources - ldr r2, [r0] - ldr r0, =gContestPlayerMonIndex - ldrb r0, [r0] - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - ldr r0, [r2, 0x4] - adds r0, r1 - adds r0, 0x6 - movs r1, 0x2 - bl sub_80FC4F4 - cmp r0, 0x1 - bne _080FCAB2 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _080FCAB2 - .pool -_080FCA68: - bl sub_80FC55C - lsls r0, 24 - cmp r0, 0 - beq _080FCAB2 - movs r2, 0 - ldr r6, =gUnknown_02039F30 - mov r9, r8 - mov r12, r7 - ldrb r0, [r6] - cmp r2, r0 - bge _080FCAA4 - ldr r1, =gContestResources - mov r8, r1 - ldr r4, =gBlockRecvBuffer - movs r3, 0 - movs r7, 0x80 - lsls r7, 1 -_080FCA8C: - mov r1, r8 - ldr r0, [r1] - ldr r0, [r0, 0x4] - adds r0, r3, r0 - ldrh r1, [r4] - strh r1, [r0, 0x6] - adds r4, r7 - adds r3, 0x1C - adds r2, 0x1 - ldrb r0, [r6] - cmp r2, r0 - blt _080FCA8C -_080FCAA4: - mov r0, r12 - adds r1, r0, r5 - lsls r1, 3 - add r1, r9 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] -_080FCAB2: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_80FC9F8 - - thumb_func_start sub_80FCACC -sub_80FCACC: @ 80FCACC - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r1, =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r2, r0, r1 - movs r3, 0x8 - ldrsh r0, [r2, r3] - adds r3, r1, 0 - cmp r0, 0xB - bls _080FCAE8 - b _080FCC78 -_080FCAE8: - lsls r0, 2 - ldr r1, =_080FCAFC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_080FCAFC: - .4byte _080FCB2C - .4byte _080FCB44 - .4byte _080FCB6C - .4byte _080FCB90 - .4byte _080FCBA4 - .4byte _080FCB6C - .4byte _080FCBCC - .4byte _080FCBE0 - .4byte _080FCB6C - .4byte _080FCC08 - .4byte _080FCC38 - .4byte _080FCB6C -_080FCB2C: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - bne _080FCB38 - b _080FCC82 -_080FCB38: - ldr r0, =gUnknown_02039F08 - movs r1, 0x8 - b _080FCC16 - .pool -_080FCB44: - bl sub_80FC55C - lsls r0, 24 - cmp r0, 0 - bne _080FCB50 - b _080FCC82 -_080FCB50: - ldr r0, =gUnknown_02039F08 - ldr r1, =gUnknown_02039F2B - ldrb r1, [r1] - lsls r1, 8 - ldr r2, =gBlockRecvBuffer - adds r1, r2 - movs r2, 0x8 - b _080FCC50 - .pool -_080FCB6C: - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r2, r0, r3 - ldrh r0, [r2, 0xA] - adds r1, r0, 0x1 - strh r1, [r2, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xA - bgt _080FCB84 - b _080FCC82 -_080FCB84: - movs r0, 0 - strh r0, [r2, 0xA] - ldrh r0, [r2, 0x8] - adds r0, 0x1 - strh r0, [r2, 0x8] - b _080FCC82 -_080FCB90: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _080FCC82 - ldr r0, =gUnknown_02039F10 - movs r1, 0x8 - b _080FCC16 - .pool -_080FCBA4: - bl sub_80FC55C - lsls r0, 24 - cmp r0, 0 - beq _080FCC82 - ldr r0, =gUnknown_02039F10 - ldr r1, =gUnknown_02039F2B - ldrb r1, [r1] - lsls r1, 8 - ldr r2, =gBlockRecvBuffer - adds r1, r2 - movs r2, 0x8 - b _080FCC50 - .pool -_080FCBCC: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _080FCC82 - ldr r0, =gUnknown_02039F18 - movs r1, 0x8 - b _080FCC16 - .pool -_080FCBE0: - bl sub_80FC55C - lsls r0, 24 - cmp r0, 0 - beq _080FCC82 - ldr r0, =gUnknown_02039F18 - ldr r1, =gUnknown_02039F2B - ldrb r1, [r1] - lsls r1, 8 - ldr r2, =gBlockRecvBuffer - adds r1, r2 - movs r2, 0x8 - b _080FCC50 - .pool -_080FCC08: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _080FCC82 - ldr r0, =gContestFinalStandings - movs r1, 0x4 -_080FCC16: - bl sub_80FC4F4 - cmp r0, 0x1 - bne _080FCC82 - ldr r0, =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - b _080FCC82 - .pool -_080FCC38: - bl sub_80FC55C - lsls r0, 24 - cmp r0, 0 - beq _080FCC82 - ldr r0, =gContestFinalStandings - ldr r1, =gUnknown_02039F2B - ldrb r1, [r1] - lsls r1, 8 - ldr r2, =gBlockRecvBuffer - adds r1, r2 - movs r2, 0x4 -_080FCC50: - bl memcpy - ldr r1, =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldrh r1, [r0, 0x8] - adds r1, 0x1 - strh r1, [r0, 0x8] - b _080FCC82 - .pool -_080FCC78: - movs r0, 0 - strh r0, [r2, 0x8] - adds r0, r4, 0 - bl SwitchTaskToFollowupFunc -_080FCC82: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80FCACC - - thumb_func_start sub_80FCC88 -sub_80FCC88: @ 80FCC88 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r1, =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r2, r0, r1 - movs r3, 0x8 - ldrsh r0, [r2, r3] - adds r3, r1, 0 - cmp r0, 0xB - bls _080FCCA4 - b _080FCE38 -_080FCCA4: - lsls r0, 2 - ldr r1, =_080FCCB8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_080FCCB8: - .4byte _080FCCE8 - .4byte _080FCD04 - .4byte _080FCD30 - .4byte _080FCD54 - .4byte _080FCD6C - .4byte _080FCD30 - .4byte _080FCD98 - .4byte _080FCDB0 - .4byte _080FCD30 - .4byte _080FCDC8 - .4byte _080FCDF8 - .4byte _080FCD30 -_080FCCE8: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - bne _080FCCF4 - b _080FCE42 -_080FCCF4: - ldr r0, =gContestResources - ldr r0, [r0] - ldr r0, [r0, 0x4] - movs r1, 0x70 - b _080FCDD6 - .pool -_080FCD04: - bl sub_80FC55C - lsls r0, 24 - cmp r0, 0 - bne _080FCD10 - b _080FCE42 -_080FCD10: - ldr r0, =gContestResources - ldr r0, [r0] - ldr r0, [r0, 0x4] - ldr r1, =gUnknown_02039F2B - ldrb r1, [r1] - lsls r1, 8 - ldr r2, =gBlockRecvBuffer - adds r1, r2 - movs r2, 0x70 - b _080FCE10 - .pool -_080FCD30: - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r2, r0, r3 - ldrh r0, [r2, 0xA] - adds r1, r0, 0x1 - strh r1, [r2, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xA - bgt _080FCD48 - b _080FCE42 -_080FCD48: - movs r0, 0 - strh r0, [r2, 0xA] - ldrh r0, [r2, 0x8] - adds r0, 0x1 - strh r0, [r2, 0x8] - b _080FCE42 -_080FCD54: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _080FCE42 - ldr r0, =gContestResources - ldr r0, [r0] - ldr r0, [r0, 0x8] - movs r1, 0x14 - b _080FCDD6 - .pool -_080FCD6C: - bl sub_80FC55C - lsls r0, 24 - cmp r0, 0 - beq _080FCE42 - ldr r0, =gContestResources - ldr r0, [r0] - ldr r0, [r0, 0x8] - ldr r1, =gUnknown_02039F2B - ldrb r1, [r1] - lsls r1, 8 - ldr r2, =gBlockRecvBuffer - adds r1, r2 - movs r2, 0x14 - b _080FCE10 - .pool -_080FCD98: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _080FCE42 - ldr r0, =gContestResources - ldr r0, [r0] - ldr r0, [r0, 0x10] - b _080FCDD4 - .pool -_080FCDB0: - bl sub_80FC55C - lsls r0, 24 - cmp r0, 0 - beq _080FCE42 - ldr r0, =gContestResources - ldr r0, [r0] - ldr r0, [r0, 0x10] - b _080FCE04 - .pool -_080FCDC8: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _080FCE42 - ldr r0, =gUnknown_02039F26 -_080FCDD4: - movs r1, 0x4 -_080FCDD6: - bl sub_80FC4F4 - cmp r0, 0x1 - bne _080FCE42 - ldr r0, =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - b _080FCE42 - .pool -_080FCDF8: - bl sub_80FC55C - lsls r0, 24 - cmp r0, 0 - beq _080FCE42 - ldr r0, =gUnknown_02039F26 -_080FCE04: - ldr r1, =gUnknown_02039F2B - ldrb r1, [r1] - lsls r1, 8 - ldr r2, =gBlockRecvBuffer - adds r1, r2 - movs r2, 0x4 -_080FCE10: - bl memcpy - ldr r1, =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldrh r1, [r0, 0x8] - adds r1, 0x1 - strh r1, [r0, 0x8] - b _080FCE42 - .pool -_080FCE38: - movs r0, 0 - strh r0, [r2, 0x8] - adds r0, r4, 0 - bl SwitchTaskToFollowupFunc -_080FCE42: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80FCC88 - - thumb_func_start sub_80FCE48 -sub_80FCE48: @ 80FCE48 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r0, r6, 2 - mov r8, r0 - adds r0, r6 - lsls r5, r0, 3 - ldr r7, =gTasks + 0x8 - adds r0, r5, r7 - adds r0, 0x18 - bl sub_80FC670 - cmp r0, 0 - beq _080FCF2E - movs r1, 0x8 - negs r1, r1 - adds r1, r7 - mov r9, r1 - adds r4, r5, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _080FCEC0 - cmp r0, 0x1 - bgt _080FCE8C - cmp r0, 0 - beq _080FCE92 - b _080FCF16 - .pool -_080FCE8C: - cmp r0, 0xA - beq _080FCEFC - b _080FCF16 -_080FCE92: - ldr r1, =gBlockSendBuffer - movs r0, 0x6E - strb r0, [r1] - bl GetMultiplayerId - lsls r0, 24 - cmp r0, 0 - bne _080FCEB8 - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _080FCF2E - movs r0, 0xA - strh r0, [r4, 0x8] - b _080FCF2E - .pool -_080FCEB8: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _080FCF2E -_080FCEC0: - bl sub_80FC55C - lsls r0, 24 - cmp r0, 0 - beq _080FCF2E - mov r1, r8 - mov r8, r9 - ldr r4, =gBlockRecvBuffer - adds r0, r7, 0 - adds r0, 0xA - adds r2, r5, r0 - movs r5, 0x80 - lsls r5, 1 - movs r3, 0x3 -_080FCEDC: - ldrh r0, [r4] - strh r0, [r2] - adds r4, r5 - adds r2, 0x2 - subs r3, 0x1 - cmp r3, 0 - bge _080FCEDC - adds r1, r6 - lsls r1, 3 - add r1, r8 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - b _080FCF2E - .pool -_080FCEFC: - ldrh r0, [r4, 0x1E] - adds r0, 0x1 - strh r0, [r4, 0x1E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xA - ble _080FCF2E - movs r0, 0x2 - bl sub_800A4D8 - movs r0, 0x1 - strh r0, [r4, 0x8] - b _080FCF2E -_080FCF16: - ldr r0, =gTasks - lsls r1, r6, 2 - adds r1, r6 - lsls r1, 3 - adds r1, r0 - movs r0, 0 - strh r0, [r1, 0x8] - strh r0, [r1, 0x1E] - strh r0, [r1, 0x20] - adds r0, r6, 0 - bl SwitchTaskToFollowupFunc -_080FCF2E: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_80FCE48 - - thumb_func_start sub_80FCF40 -sub_80FCF40: @ 80FCF40 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r4, r0, 3 - ldr r6, =gTasks + 0x8 - adds r0, r4, r6 - adds r0, 0x18 - bl sub_80FC670 - cmp r0, 0 - beq _080FCFBE - adds r0, r6, 0 - subs r0, 0x8 - adds r4, r0 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080FCF80 - cmp r0, 0x1 - beq _080FCF9C - movs r0, 0 - strh r0, [r4, 0x8] - strh r0, [r4, 0x20] - adds r0, r5, 0 - bl SwitchTaskToFollowupFunc - b _080FCFBE - .pool -_080FCF80: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _080FCFBE - ldr r0, =gContestMonConditions - movs r1, 0x8 - bl sub_80FC4F4 - cmp r0, 0x1 - bne _080FCFBE - b _080FCFB8 - .pool -_080FCF9C: - bl sub_80FC55C - lsls r0, 24 - cmp r0, 0 - beq _080FCFBE - ldr r0, =gContestMonConditions - ldr r1, =gUnknown_02039F2B - ldrb r1, [r1] - lsls r1, 8 - ldr r2, =gBlockRecvBuffer - adds r1, r2 - movs r2, 0x8 - bl memcpy -_080FCFB8: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_080FCFBE: - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_80FCF40 - - thumb_func_start sub_80FCFD0 -sub_80FCFD0: @ 80FCFD0 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r4, r0, 3 - ldr r6, =gTasks + 0x8 - adds r0, r4, r6 - adds r0, 0x18 - bl sub_80FC670 - cmp r0, 0 - beq _080FD04E - adds r0, r6, 0 - subs r0, 0x8 - adds r4, r0 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080FD010 - cmp r0, 0x1 - beq _080FD02C - movs r0, 0 - strh r0, [r4, 0x8] - strh r0, [r4, 0x20] - adds r0, r5, 0 - bl SwitchTaskToFollowupFunc - b _080FD04E - .pool -_080FD010: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _080FD04E - ldr r0, =gUnknown_02039F26 - movs r1, 0x4 - bl sub_80FC4F4 - cmp r0, 0x1 - bne _080FD04E - b _080FD048 - .pool -_080FD02C: - bl sub_80FC55C - lsls r0, 24 - cmp r0, 0 - beq _080FD04E - ldr r0, =gUnknown_02039F26 - ldr r1, =gUnknown_02039F2B - ldrb r1, [r1] - lsls r1, 8 - ldr r2, =gBlockRecvBuffer - adds r1, r2 - movs r2, 0x4 - bl memcpy -_080FD048: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_080FD04E: - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_80FCFD0 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/contest_link_81D9DE4.s b/asm/contest_link_81D9DE4.s deleted file mode 100644 index 5a3393374..000000000 --- a/asm/contest_link_81D9DE4.s +++ /dev/null @@ -1,890 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_81D9DE4 -sub_81D9DE4: @ 81D9DE4 - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - ldr r1, =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r0, r1 - movs r1, 0x1A - ldrsh r0, [r0, r1] - cmp r0, 0x4 - bhi _081D9EA4 - lsls r0, 2 - ldr r1, =_081D9E10 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_081D9E10: - .4byte _081D9E24 - .4byte _081D9E44 - .4byte _081D9E64 - .4byte _081D9E84 - .4byte _081D9EA4 -_081D9E24: - ldr r4, =gUnknown_02039F31 - ldr r0, =gUnknown_02039F24 - ldrb r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, =gPlayerParty - adds r0, r1 - movs r1, 0x32 - b _081D9EB4 - .pool -_081D9E44: - ldr r4, =gUnknown_02039F31 - ldr r0, =gUnknown_02039F24 - ldrb r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, =gPlayerParty - adds r0, r1 - movs r1, 0x33 - b _081D9EB4 - .pool -_081D9E64: - ldr r4, =gUnknown_02039F31 - ldr r0, =gUnknown_02039F24 - ldrb r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, =gPlayerParty - adds r0, r1 - movs r1, 0x34 - b _081D9EB4 - .pool -_081D9E84: - ldr r4, =gUnknown_02039F31 - ldr r0, =gUnknown_02039F24 - ldrb r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, =gPlayerParty - adds r0, r1 - movs r1, 0x35 - b _081D9EB4 - .pool -_081D9EA4: - ldr r4, =gUnknown_02039F31 - ldr r0, =gUnknown_02039F24 - ldrb r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, =gPlayerParty - adds r0, r1 - movs r1, 0x36 -_081D9EB4: - bl GetMonData - strb r0, [r4] - ldr r5, =gContestMons - ldr r4, =gContestPlayerMonIndex - ldrb r0, [r4] - lsls r0, 6 - adds r0, r5 - ldr r1, =gUnknown_02039F31 - ldrb r1, [r1] - adds r0, 0x2C - strb r1, [r0] - ldr r0, =0x00000864 @ = FLAG_SYS_GAME_CLEAR - bl FlagGet - lsls r0, 24 - lsrs r0, 24 - negs r0, r0 - lsrs r0, 31 - ldrb r1, [r4] - lsls r1, 6 - adds r1, r5 - adds r1, 0x2D - strb r0, [r1] - ldr r1, =sub_81DA160 - ldr r2, =sub_81D9F14 - adds r0, r6, 0 - bl SetTaskFuncWithFollowupFunc - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81D9DE4 - - thumb_func_start sub_81D9F14 -sub_81D9F14: @ 81D9F14 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r1, =sub_81DA244 - ldr r2, =sub_81D9F30 - bl SetTaskFuncWithFollowupFunc - pop {r0} - bx r0 - .pool - thumb_func_end sub_81D9F14 - - thumb_func_start sub_81D9F30 -sub_81D9F30: @ 81D9F30 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r1, =sub_81DA2E8 - ldr r2, =sub_81D9F4C - bl SetTaskFuncWithFollowupFunc - pop {r0} - bx r0 - .pool - thumb_func_end sub_81D9F30 - - thumb_func_start sub_81D9F4C -sub_81D9F4C: @ 81D9F4C - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r1, =sub_81DA3B8 - ldr r2, =sub_81D9F68 - bl SetTaskFuncWithFollowupFunc - pop {r0} - bx r0 - .pool - thumb_func_end sub_81D9F4C - - thumb_func_start sub_81D9F68 -sub_81D9F68: @ 81D9F68 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x8 - lsls r0, 24 - lsrs r6, r0, 24 - movs r0, 0 - str r0, [sp] - str r0, [sp, 0x4] - movs r3, 0 - ldr r5, =gUnknown_02039F30 - mov r8, r5 - ldr r0, =gSpecialVar_0x8004 - mov r12, r0 - add r1, sp, 0x4 - mov r9, r1 - ldrb r4, [r5] - cmp r3, r4 - bcs _081D9FB2 - lsls r0, r6, 2 - adds r0, r6 - lsls r4, r0, 3 - ldr r7, =gTasks + 0x8 -_081D9F98: - mov r0, sp - adds r2, r0, r3 - adds r1, r3, 0x1 - lsls r0, r1, 1 - adds r0, r4 - adds r0, r7 - ldrh r0, [r0] - strb r0, [r2] - lsls r1, 24 - lsrs r3, r1, 24 - ldrb r1, [r5] - cmp r3, r1 - bcc _081D9F98 -_081D9FB2: - movs r3, 0 - mov r4, r8 - ldrb r0, [r4] - cmp r3, r0 - bcs _081D9FD6 - adds r4, r0, 0 - mov r2, sp -_081D9FC0: - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, r4 - bcs _081D9FD6 - mov r7, sp - adds r1, r7, r3 - ldrb r0, [r2] - ldrb r1, [r1] - cmp r0, r1 - beq _081D9FC0 -_081D9FD6: - mov r0, r8 - ldrb r0, [r0] - cmp r3, r0 - bne _081D9FF4 - movs r0, 0 - mov r1, r12 - strh r0, [r1] - b _081D9FFA - .pool -_081D9FF4: - movs r0, 0x1 - mov r4, r12 - strh r0, [r4] -_081D9FFA: - movs r3, 0 - mov r7, r8 - mov r0, r8 - ldrb r0, [r0] - cmp r3, r0 - bcs _081DA02A - mov r4, r9 - lsls r0, r6, 2 - adds r0, r6 - lsls r2, r0, 3 - ldr r5, =gTasks + 0x8 -_081DA010: - adds r1, r4, r3 - adds r0, r3, 0x5 - lsls r0, 1 - adds r0, r2 - adds r0, r5 - ldrh r0, [r0] - strb r0, [r1] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - ldrb r1, [r7] - cmp r3, r1 - bcc _081DA010 -_081DA02A: - mov r4, r8 - ldrb r0, [r4] - cmp r0, 0x4 - beq _081DA0B8 - bl GetMultiplayerId - lsls r0, 24 - cmp r0, 0 - bne _081DA0B8 - ldr r0, =gContestMons - adds r1, r0, 0 - adds r1, 0x2C - ldrb r2, [r1] - movs r3, 0x1 - ldrb r1, [r4] - adds r5, r0, 0 - cmp r3, r1 - bcs _081DA06C - adds r4, r5, 0 - mov r7, r8 - ldrb r1, [r7] -_081DA054: - lsls r0, r3, 6 - adds r0, r4 - adds r0, 0x2C - ldrb r7, [r0] - cmp r2, r7 - bcs _081DA062 - ldrb r2, [r0] -_081DA062: - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, r1 - bcc _081DA054 -_081DA06C: - cmp r2, 0 - beq _081DA076 - subs r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 -_081DA076: - movs r4, 0x1 - movs r3, 0 - mov r0, r8 - ldrb r0, [r0] - cmp r3, r0 - bcs _081DA0AC - adds r0, r5, 0 - b _081DA0A2 - .pool -_081DA090: - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - mov r1, r8 - ldrb r1, [r1] - cmp r3, r1 - bcs _081DA0AC - lsls r0, r3, 6 - adds r0, r5 -_081DA0A2: - adds r0, 0x2D - ldrb r0, [r0] - cmp r0, 0 - bne _081DA090 - movs r4, 0 -_081DA0AC: - mov r0, sp - ldrb r0, [r0] - adds r1, r2, 0 - adds r2, r4, 0 - bl sub_80DACBC -_081DA0B8: - mov r0, r9 - bl sub_80F86E0 - ldr r1, =gUnknown_02039F2B - strb r0, [r1] - ldr r0, =gUnknown_02039F30 - ldrb r0, [r0] - cmp r0, 0x3 - bhi _081DA0E8 - ldr r1, =sub_81DA488 - ldr r2, =sub_81DA10C - adds r0, r6, 0 - bl SetTaskFuncWithFollowupFunc - b _081DA0F6 - .pool -_081DA0E8: - ldr r0, =gTasks - lsls r1, r6, 2 - adds r1, r6 - lsls r1, 3 - adds r1, r0 - ldr r0, =sub_81DA10C - str r0, [r1] -_081DA0F6: - add sp, 0x8 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81D9F68 - - thumb_func_start sub_81DA10C -sub_81DA10C: @ 81DA10C - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, =gSpecialVar_ContestCategory - ldrb r0, [r0] - bl sub_80DB09C - ldr r1, =sub_80FCF40 - ldr r2, =sub_81DA138 - adds r0, r4, 0 - bl SetTaskFuncWithFollowupFunc - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81DA10C - - thumb_func_start sub_81DA138 -sub_81DA138: @ 81DA138 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0 - bl sub_80DCE58 - ldr r1, =sub_80FCFD0 - ldr r2, =sub_80F8714 - adds r0, r4, 0 - bl SetTaskFuncWithFollowupFunc - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81DA138 - - thumb_func_start sub_81DA160 -sub_81DA160: @ 81DA160 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r7, r0, 24 - lsls r6, r7, 2 - adds r0, r6, r7 - lsls r4, r0, 3 - ldr r5, =gTasks + 0x8 - adds r0, r4, r5 - adds r0, 0x18 - bl sub_80FC670 - cmp r0, 0 - beq _081DA224 - adds r0, r5, 0 - subs r0, 0x8 - adds r4, r0 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _081DA1A4 - cmp r0, 0x1 - beq _081DA1D4 - movs r0, 0 - strh r0, [r4, 0x8] - strh r0, [r4, 0x20] - adds r0, r7, 0 - bl SwitchTaskToFollowupFunc - b _081DA224 - .pool -_081DA1A4: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _081DA224 - ldr r0, =gContestPlayerMonIndex - ldrb r0, [r0] - lsls r0, 6 - ldr r1, =gContestMons - adds r0, r1 - movs r1, 0x40 - bl sub_80FC4F4 - cmp r0, 0x1 - bne _081DA224 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _081DA224 - .pool -_081DA1D4: - bl sub_80FC55C - lsls r0, 24 - cmp r0, 0 - beq _081DA224 - movs r5, 0 - ldr r0, =gUnknown_02039F30 - mov r8, r6 - ldrb r0, [r0] - cmp r5, r0 - bge _081DA214 - ldr r6, =gLinkPlayers -_081DA1EC: - lsls r4, r5, 6 - ldr r0, =gContestMons - adds r4, r0 - lsls r1, r5, 8 - ldr r0, =gBlockRecvBuffer - adds r1, r0 - adds r0, r4, 0 - movs r2, 0x40 - bl memcpy - ldrh r1, [r6, 0x1A] - adds r0, r4, 0 - bl sub_80DFA08 - adds r6, 0x1C - adds r5, 0x1 - ldr r0, =gUnknown_02039F30 - ldrb r0, [r0] - cmp r5, r0 - blt _081DA1EC -_081DA214: - ldr r0, =gTasks - mov r2, r8 - adds r1, r2, r7 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] -_081DA224: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81DA160 - - thumb_func_start sub_81DA244 -sub_81DA244: @ 81DA244 - push {r4-r6,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r5, r0, 3 - ldr r6, =gTasks + 0x8 - adds r0, r5, r6 - adds r0, 0x18 - bl sub_80FC670 - cmp r0, 0 - beq _081DA2D4 - adds r0, r6, 0 - subs r0, 0x8 - adds r5, r0 - movs r1, 0x8 - ldrsh r0, [r5, r1] - cmp r0, 0 - beq _081DA284 - cmp r0, 0x1 - beq _081DA2AC - movs r0, 0 - strh r0, [r5, 0x8] - strh r0, [r5, 0x20] - adds r0, r4, 0 - bl SwitchTaskToFollowupFunc - b _081DA2D4 - .pool -_081DA284: - bl GetMultiplayerId - lsls r0, 24 - cmp r0, 0 - bne _081DA2CE - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _081DA2D4 - ldr r0, =gRngValue - movs r1, 0x4 - bl sub_80FC4F4 - cmp r0, 0x1 - bne _081DA2D4 - b _081DA2CE - .pool -_081DA2AC: - movs r0, 0 - bl sub_80FC530 - lsls r0, 24 - cmp r0, 0 - beq _081DA2D4 - ldr r0, =gRngValue - ldr r4, =gBlockRecvBuffer - adds r1, r4, 0 - movs r2, 0x4 - bl memcpy - ldr r0, =gContestRngValue - adds r1, r4, 0 - movs r2, 0x4 - bl memcpy -_081DA2CE: - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] -_081DA2D4: - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81DA244 - - thumb_func_start sub_81DA2E8 -sub_81DA2E8: @ 81DA2E8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - lsls r0, 24 - lsrs r6, r0, 24 - lsls r0, r6, 2 - mov r9, r0 - adds r0, r6 - lsls r5, r0, 3 - ldr r1, =gTasks + 0x8 - mov r8, r1 - adds r0, r5, r1 - adds r0, 0x18 - bl sub_80FC670 - cmp r0, 0 - beq _081DA39E - movs r0, 0x8 - negs r0, r0 - add r0, r8 - mov r10, r0 - adds r4, r5, r0 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _081DA338 - cmp r0, 0x1 - beq _081DA35A - movs r0, 0 - strh r0, [r4, 0x8] - strh r0, [r4, 0x20] - adds r0, r6, 0 - bl SwitchTaskToFollowupFunc - b _081DA39E - .pool -_081DA338: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _081DA39E - add r0, sp, 0x8 - movs r1, 0x6E - strh r1, [r0] - movs r1, 0x2 - bl sub_80FC4F4 - cmp r0, 0x1 - bne _081DA39E - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _081DA39E -_081DA35A: - bl sub_80FC55C - lsls r0, 24 - cmp r0, 0 - beq _081DA39E - movs r1, 0 - ldr r7, =gUnknown_02039F30 - ldrb r0, [r7] - cmp r1, r0 - bge _081DA390 - mov r0, r8 - adds r0, 0xA - adds r3, r5, r0 - ldr r4, =gBlockRecvBuffer - mov r2, sp - movs r5, 0x80 - lsls r5, 1 -_081DA37C: - ldrh r0, [r4] - strh r0, [r2] - strh r0, [r3] - adds r3, 0x2 - adds r4, r5 - adds r2, 0x2 - adds r1, 0x1 - ldrb r0, [r7] - cmp r1, r0 - blt _081DA37C -_081DA390: - mov r0, r9 - adds r1, r0, r6 - lsls r1, 3 - add r1, r10 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] -_081DA39E: - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81DA2E8 - - thumb_func_start sub_81DA3B8 -sub_81DA3B8: @ 81DA3B8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - lsls r0, 24 - lsrs r6, r0, 24 - lsls r0, r6, 2 - mov r9, r0 - adds r0, r6 - lsls r5, r0, 3 - ldr r1, =gTasks + 0x8 - mov r8, r1 - adds r0, r5, r1 - adds r0, 0x18 - bl sub_80FC670 - cmp r0, 0 - beq _081DA46E - movs r0, 0x8 - negs r0, r0 - add r0, r8 - mov r10, r0 - adds r4, r5, r0 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _081DA408 - cmp r0, 0x1 - beq _081DA42A - movs r0, 0 - strh r0, [r4, 0x8] - strh r0, [r4, 0x20] - adds r0, r6, 0 - bl SwitchTaskToFollowupFunc - b _081DA46E - .pool -_081DA408: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _081DA46E - ldrh r1, [r4, 0x1A] - add r0, sp, 0x8 - strh r1, [r0] - movs r1, 0x2 - bl sub_80FC4F4 - cmp r0, 0x1 - bne _081DA46E - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _081DA46E -_081DA42A: - bl sub_80FC55C - lsls r0, 24 - cmp r0, 0 - beq _081DA46E - movs r1, 0 - ldr r7, =gUnknown_02039F30 - ldrb r0, [r7] - cmp r1, r0 - bge _081DA460 - mov r0, r8 - adds r0, 0x2 - adds r3, r5, r0 - ldr r4, =gBlockRecvBuffer - mov r2, sp - movs r5, 0x80 - lsls r5, 1 -_081DA44C: - ldrh r0, [r4] - strh r0, [r2] - strh r0, [r3] - adds r3, 0x2 - adds r4, r5 - adds r2, 0x2 - adds r1, 0x1 - ldrb r0, [r7] - cmp r1, r0 - blt _081DA44C -_081DA460: - mov r0, r9 - adds r1, r0, r6 - lsls r1, 3 - add r1, r10 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] -_081DA46E: - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81DA3B8 - - thumb_func_start sub_81DA488 -sub_81DA488: @ 81DA488 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r7, r6, 2 - adds r0, r7, r6 - lsls r4, r0, 3 - ldr r5, =gTasks + 0x8 - adds r0, r4, r5 - adds r0, 0x18 - bl sub_80FC670 - cmp r0, 0 - beq _081DA55C - adds r0, r5, 0 - subs r0, 0x8 - adds r4, r0 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _081DA4CC - cmp r0, 0x1 - beq _081DA50C - movs r0, 0 - strh r0, [r4, 0x8] - strh r0, [r4, 0x20] - adds r0, r6, 0 - bl SwitchTaskToFollowupFunc - b _081DA55C - .pool -_081DA4CC: - bl GetMultiplayerId - lsls r0, 24 - cmp r0, 0 - bne _081DA4FA - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _081DA55C - ldr r0, =gUnknown_02039F30 - ldrb r2, [r0] - lsls r0, r2, 6 - ldr r1, =gContestMons - adds r0, r1 - movs r1, 0x4 - subs r1, r2 - lsls r1, 22 - lsrs r1, 16 - bl sub_80FC4F4 - cmp r0, 0x1 - bne _081DA55C -_081DA4FA: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _081DA55C - .pool -_081DA50C: - movs r0, 0 - bl sub_80FC530 - lsls r0, 24 - cmp r0, 0 - beq _081DA55C - ldr r4, =gUnknown_02039F30 - ldrb r3, [r4] - lsls r0, r3, 6 - ldr r5, =gContestMons - adds r0, r5 - ldr r1, =gBlockRecvBuffer - movs r2, 0x4 - subs r2, r3 - lsls r2, 6 - bl memcpy - ldrb r4, [r4] - mov r8, r7 - cmp r4, 0x3 - bgt _081DA54C - lsls r0, r4, 6 - adds r5, r0, r5 - ldr r7, =gLinkPlayers -_081DA53C: - ldrh r1, [r7, 0x1A] - adds r0, r5, 0 - bl sub_80DFA08 - adds r5, 0x40 - adds r4, 0x1 - cmp r4, 0x3 - ble _081DA53C -_081DA54C: - ldr r0, =gTasks - mov r2, r8 - adds r1, r2, r6 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] -_081DA55C: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81DA488 - - .align 2, 0 @ Don't pad with nop. diff --git a/include/contest.h b/include/contest.h index 54c431b94..9d287b9a5 100644 --- a/include/contest.h +++ b/include/contest.h @@ -222,13 +222,17 @@ struct ContestPokemon }; // wow extern struct ContestPokemon gContestMons[4]; -extern u8 gUnknown_02039F24; +extern u8 gContestMonPartyIndex; extern u16 gSpecialVar_ContestCategory; extern u16 gSpecialVar_ContestRank; -extern u8 gUnknown_02039F30; +extern u8 gUnknown_02039F2B; +extern u8 gNumLinkContestPlayers; +extern u8 gHighestRibbonRank; extern u8 gContestFinalStandings[4]; extern u8 gContestPlayerMonIndex; extern s16 gUnknown_02039F08[4]; +extern s16 gUnknown_02039F10[4]; +extern s16 gUnknown_02039F18[4]; extern s16 gContestMonConditions[4]; extern u8 gIsLinkContest; extern struct ContestWinner gUnknown_02039F3C; @@ -434,5 +438,20 @@ void SetStartledString(u8 a, u8 b); s8 Contest_GetMoveExcitement(u16); u8 sub_80DAE0C(struct Pokemon *); void sub_80DEDA8(u8); +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); + +// contest link +void sub_81D9DE4(u8 taskId); +void sub_80FCF40(u8); +void sub_80FCFD0(u8); +void sub_80F8714(u8); +bool32 sub_80FC670(s16 *); +bool32 sub_80FC4F4(void *, u16); +bool8 sub_80FC55C(void); +bool8 sub_80FC530(u8); +u8 sub_80F86E0(u8 *); #endif //GUARD_CONTEST_H diff --git a/include/graphics.h b/include/graphics.h index 4563a7e99..eecbd50a7 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4827,4 +4827,12 @@ extern const u32 gRouletteCreditTiles[]; extern const u32 gRouletteNumbersTiles[]; extern const u32 gRouletteMultiplierTiles[]; +// Contest Link +extern const u32 gUnknown_0858D6B0[]; +extern const u32 gUnknown_08C19588[]; +extern const u32 gUnknown_08C19EEC[]; +extern const u32 gUnknown_08C1A000[]; +extern const u32 gUnknown_08C1A12C[]; +extern const u32 gUnknown_08C1A2B4[]; + #endif //GUARD_GRAPHICS_H diff --git a/include/strings.h b/include/strings.h index c88252b7b..9870b0eea 100644 --- a/include/strings.h +++ b/include/strings.h @@ -2207,4 +2207,7 @@ extern const u8 MatchCall_BattlePyramidText12[]; extern const u8 MatchCall_BattlePyramidText13[]; extern const u8 MatchCall_BattlePyramidText14[]; +// Contest Link +extern const u8 gText_ColorDarkGrey[]; + #endif //GUARD_STRINGS_H diff --git a/ld_script.txt b/ld_script.txt index 324045b50..be59145a3 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -146,6 +146,7 @@ SECTIONS { src/record_mixing.o(.text); src/secret_base.o(.text); src/tv.o(.text); + src/contest_link_80F57C4.o(.text); asm/contest_link_80F57C4.o(.text); src/script_pokemon_util_80F87D8.o(.text); src/field_poison.o(.text); @@ -154,7 +155,7 @@ SECTIONS { src/field_special_scene.o(.text); src/rotating_gate.o(.text); src/safari_zone.o(.text); - asm/contest_link_80FC4F4.o(.text); + src/contest_link_80FC4F4.o(.text); src/item_use.o(.text); src/battle_anim_effects_1.o(.text); src/battle_anim_effects_2.o(.text); @@ -293,7 +294,7 @@ SECTIONS { asm/pokenav.o(.text.after.match.call); src/rayquaza_scene.o(.text); src/walda_phrase.o(.text); - asm/contest_link_81D9DE4.o(.text); + src/contest_link_81D9DE4.o(.text); src/gym_leader_rematch.o(.text); src/unk_transition.o(.text); src/international_string_util.o(.text); diff --git a/src/contest.c b/src/contest.c index 949be7941..7decf88fc 100644 --- a/src/contest.c +++ b/src/contest.c @@ -176,7 +176,7 @@ EWRAM_DATA s16 gUnknown_02039F08[4] = {0}; EWRAM_DATA s16 gUnknown_02039F10[4] = {0}; EWRAM_DATA s16 gUnknown_02039F18[4] = {0}; EWRAM_DATA u8 gContestFinalStandings[4] = {0}; -EWRAM_DATA u8 gUnknown_02039F24 = 0; +EWRAM_DATA u8 gContestMonPartyIndex = 0; EWRAM_DATA u8 gContestPlayerMonIndex = 0; EWRAM_DATA u8 gUnknown_02039F26[4] = {0}; EWRAM_DATA u8 gIsLinkContest = 0; @@ -185,8 +185,8 @@ EWRAM_DATA u8 gIsLinkContest = 0; EWRAM_DATA u8 gUnknown_02039F2B = 0; EWRAM_DATA u16 gSpecialVar_ContestCategory = 0; EWRAM_DATA u16 gSpecialVar_ContestRank = 0; -EWRAM_DATA u8 gUnknown_02039F30 = 0; -EWRAM_DATA u8 gUnknown_02039F31 = 0; +EWRAM_DATA u8 gNumLinkContestPlayers = 0; +EWRAM_DATA u8 gHighestRibbonRank = 0; EWRAM_DATA struct ContestResources * gContestResources = NULL; EWRAM_DATA u8 sContestBgCopyFlags = 0; EWRAM_DATA struct ContestWinner gUnknown_02039F3C = {0}; @@ -932,9 +932,9 @@ void sub_80D8A88(u8 taskId) { s32 i; - for (i = 0; i + gUnknown_02039F30 < 4; i++) + for (i = 0; i + gNumLinkContestPlayers < 4; i++) { - gContestResources->field_4[gUnknown_02039F30 + i].currMove = sub_80DB8B8(gUnknown_02039F30 + i); + gContestResources->field_4[gNumLinkContestPlayers + i].currMove = sub_80DB8B8(gNumLinkContestPlayers + i); } } gTasks[taskId].data[0] = 0; @@ -2110,7 +2110,7 @@ void sub_80DAB8C(u8 contestType, u8 rank) opponentsCount--; } - sub_80DA8C8(gUnknown_02039F24); + sub_80DA8C8(gContestMonPartyIndex); } #ifdef NONMATCHING @@ -2121,7 +2121,7 @@ void sub_80DACBC(u8 contestType, u8 rank, bool32 isPostgame) u8 opponents[100]; const u8 * r6; - if (gUnknown_02039F30 == 4) + if (gNumLinkContestPlayers == 4) return; r6 = gUnknown_085898A4; @@ -2151,14 +2151,14 @@ void sub_80DACBC(u8 contestType, u8 rank, bool32 isPostgame) opponents[opponentsCount++] = i; } opponents[opponentsCount] = 0xFF; - for (i = 0; i < 4 - gUnknown_02039F30; i++) + for (i = 0; i < 4 - gNumLinkContestPlayers; i++) { u16 rnd = sub_80F903C() % opponentsCount; s32 j; - gContestMons[gUnknown_02039F30 + i] = gContestOpponents[opponents[rnd]]; - sub_80DF9D4(gContestMons[gUnknown_02039F30 + i].trainerName); - sub_80DF9E0(gContestMons[gUnknown_02039F30 + i].nickname, GAME_LANGUAGE); + gContestMons[gNumLinkContestPlayers + i] = gContestOpponents[opponents[rnd]]; + sub_80DF9D4(gContestMons[gNumLinkContestPlayers + i].trainerName); + sub_80DF9E0(gContestMons[gNumLinkContestPlayers + i].nickname, GAME_LANGUAGE); for (j = rnd; opponents[j] != 0xFF; j++) opponents[j] = opponents[j + 1]; opponentsCount--; @@ -2178,7 +2178,7 @@ NAKED void sub_80DACBC(u8 contestType, u8 rank, bool32 isPostgame) "\tlsls r1, 24\n" "\tlsrs r2, r1, 24\n" "\tmovs r7, 0\n" - "\tldr r0, =gUnknown_02039F30\n" + "\tldr r0, =gNumLinkContestPlayers\n" "\tldrb r1, [r0]\n" "\tmov r9, r0\n" "\tcmp r1, 0x4\n" @@ -2471,12 +2471,12 @@ u16 sub_80DAFE0(u8 who, u8 contestCategory) return statMain + (statSub1 + statSub2 + gContestMons[who].sheen) / 2; } -void sub_80DB09C(u8 a0) +void sub_80DB09C(u8 contestCategory) { s32 i; for (i = 0; i < 4; i++) - gContestMonConditions[i] = sub_80DAFE0(i, a0); + gContestMonConditions[i] = sub_80DAFE0(i, contestCategory); } u8 sub_80DB0C4(void) diff --git a/src/contest_link_80F57C4.c b/src/contest_link_80F57C4.c new file mode 100755 index 000000000..95171ba68 --- /dev/null +++ b/src/contest_link_80F57C4.c @@ -0,0 +1,157 @@ +#include "global.h" +#include "battle.h" +#include "bg.h" +#include "contest.h" +#include "decompress.h" +#include "event_data.h" +#include "gpu_regs.h" +#include "graphics.h" +#include "link.h" +#include "palette.h" +#include "random.h" +#include "string_util.h" +#include "strings.h" +#include "task.h" +#include "text.h" +#include "window.h" + +struct ContestLink80F57C4 +{ + u8 filler0[0xC]; + u8 *unkC[4]; +}; + +extern struct ContestLink80F57C4 *gUnknown_0203A034; + +extern const struct BgTemplate gUnknown_0858D888[4]; +extern const struct WindowTemplate gUnknown_0858D898[]; + +void sub_80F71C8(void); +u8 sub_80F7310(u8, u8); +s8 sub_80F7364(u8, u8); +void sub_80F7ED0(int, u8 *, int); + +void sub_80F57C4(void) +{ + int i; + + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_0858D888, ARRAY_COUNT(gUnknown_0858D888)); + for (i = 0; i < 4; i++) + SetBgTilemapBuffer(i, gUnknown_0203A034->unkC[i]); + + InitWindows(gUnknown_0858D898); + DeactivateAllTextPrinters(); + SetGpuReg(REG_OFFSET_MOSAIC, 0); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR); + SetGpuReg(REG_OFFSET_WIN0H, 0); + SetGpuReg(REG_OFFSET_WIN0V, 0); + SetGpuReg(REG_OFFSET_WIN1H, 0); + SetGpuReg(REG_OFFSET_WIN1V, 0); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + SetGpuReg(REG_OFFSET_BLDY, 0); + SetGpuReg(REG_OFFSET_BG0HOFS, 0); + SetGpuReg(REG_OFFSET_BG0VOFS, 0); + SetGpuReg(REG_OFFSET_BG1HOFS, 0); + SetGpuReg(REG_OFFSET_BG1VOFS, 0); + SetGpuReg(REG_OFFSET_BG2HOFS, 0); + SetGpuReg(REG_OFFSET_BG2VOFS, 0); + SetGpuReg(REG_OFFSET_BG3HOFS, 0); + SetGpuReg(REG_OFFSET_BG3VOFS, 0); + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJWIN_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_80F591C(void) +{ + int i, j; + s8 var0; + s8 var1; + int var2; + u16 tile1, tile2; + + LZDecompressVram(gUnknown_08C19588, (void *)BG_CHAR_ADDR(0)); + CopyToBgTilemapBuffer(3, gUnknown_08C1A12C, 0, 0); + CopyToBgTilemapBuffer(2, gUnknown_08C1A000, 0, 0); + CopyToBgTilemapBuffer(0, gUnknown_08C19EEC, 0, 0); + sub_80F71C8(); + LoadCompressedPalette(gUnknown_08C1A2B4, 0, 0x200); + LoadPalette(gUnknown_0858D6B0, 0xF0, 0x20); + + for (i = 0; i < 4; i++) + { + var0 = sub_80F7310(i, 1); + var1 = sub_80F7364(i, 1); + for (j = 0; j < 10; j++) + { + tile1 = 0x60B2; + if (j < var0) + tile1 += 2; + + var2 = var1; + if (var1 < 0) + var2 = -var2; + + if (j < var2) + { + tile2 = 0x60A4; + if (var1 < 0) + tile2 += 2; + } + else + { + tile2 = 0x60A2; + } + + FillBgTilemapBufferRect_Palette0(1, tile1, j + 19, i * 3 + 5, 1, 1); + FillBgTilemapBufferRect_Palette0(1, tile2, j + 19, i * 3 + 6, 1, 1); + } + } + + CopyBgTilemapBufferToVram(0); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(2); + CopyBgTilemapBufferToVram(3); + ShowBg(0); + ShowBg(1); + ShowBg(2); + ShowBg(3); +} + +static void sub_80F5A74(u8 monIndex) +{ + struct ContestPokemon *mon = &gContestMons[monIndex]; + u8 *str = gDisplayedStringBattle; + if (monIndex == gContestPlayerMonIndex) + str = StringCopy(gDisplayedStringBattle, gText_ColorDarkGrey); + + StringCopy(str, mon->nickname); + sub_80F7ED0(monIndex, gDisplayedStringBattle, 0); + StringCopy(str, gText_Slash); + StringAppend(str, mon->trainerName); + sub_80F7ED0(monIndex, gDisplayedStringBattle, 50); +} + +void sub_80F5AE0(void) +{ + int i; + + for (i = 0; i < 4; i++) + sub_80F5A74(i); + + CopyBgTilemapBufferToVram(1); +} diff --git a/src/contest_link_80FC4F4.c b/src/contest_link_80FC4F4.c new file mode 100755 index 000000000..f582626f8 --- /dev/null +++ b/src/contest_link_80FC4F4.c @@ -0,0 +1,548 @@ +#include "global.h" +#include "contest.h" +#include "decompress.h" +#include "event_data.h" +#include "link.h" +#include "pokemon.h" +#include "random.h" +#include "task.h" +#include "constants/flags.h" + +static void sub_80FC5C0(u8); +static void sub_80FC5DC(u8); + +bool32 sub_80FC4F4(void *src, u16 size) +{ + memcpy(gDecompressionBuffer, src, size); + if (SendBlock(bitmask_all_link_players_but_self(), gDecompressionBuffer, size)) + return TRUE; + else + return FALSE; +} + +bool8 sub_80FC530(u8 arg0) +{ + u8 mask = (1 << arg0); + if (!(GetBlockReceivedStatus() & mask)) + { + return FALSE; + } + else + { + ResetBlockReceivedFlag(arg0); + return TRUE; + } +} + +bool8 sub_80FC55C(void) +{ + if (GetBlockReceivedStatus() == sub_800A9D8()) + { + ResetBlockReceivedFlags(); + return TRUE; + } + else + { + return FALSE; + } +} + +void sub_80FC580(u8 taskId) +{ + u8 i; + + for (i = 0; i < 4; i++) + gBlockRecvBuffer[i][0] = 0xFF; + + gTasks[taskId].data[0] = 0; + gTasks[taskId].func = sub_80FC5C0; +} + +static void sub_80FC5C0(u8 taskId) +{ + gTasks[taskId].func = sub_80FC5DC; +} + +static void sub_80FC5DC(u8 taskId) +{ + int i; + + if (!gReceivedRemoteLinkPlayers) + return; + + gContestPlayerMonIndex = GetMultiplayerId(); + gNumLinkContestPlayers = GetLinkPlayerCount(); + gIsLinkContest = 1; + if (gWirelessCommType == 1) + gIsLinkContest = 3; + + for (i = 0; i < gNumLinkContestPlayers && (u32)(gLinkPlayers[i].version & 0xFF) - 1 > VERSION_RUBY - 1; i++) + ; + + if (i < gNumLinkContestPlayers) + gIsLinkContest |= 0x4; + + SwitchTaskToFollowupFunc(taskId); +} + +bool32 sub_80FC670(s16 *arg0) +{ + if (gIsLinkContest & 0x4) + return TRUE; + + switch (*arg0) + { + case 0: + if (IsLinkTaskFinished()) + { + sub_800ADF8(); + (*arg0)++; + } + return FALSE; + case 1: + (*arg0)++; + return FALSE; + default: + if (IsLinkTaskFinished() != TRUE) + return FALSE; + else + return TRUE; + } +} + +void sub_80FC6BC(u8 taskId) +{ + int i; + + if (!sub_80FC670(&gTasks[taskId].data[12])) + return; + + switch (gTasks[taskId].data[0]) + { + case 0: + if (GetMultiplayerId() == 0) + { + if (IsLinkTaskFinished()) + { + memcpy(gBlockSendBuffer, &gContestMons[gContestPlayerMonIndex], sizeof(struct ContestPokemon)); + gTasks[taskId].data[0] = 10; + } + } + else + { + memcpy(gBlockSendBuffer, &gContestMons[gContestPlayerMonIndex], sizeof(struct ContestPokemon)); + gTasks[taskId].data[0] = 1; + } + break; + case 1: + if (sub_80FC55C()) + { + for (i = 0; i < gNumLinkContestPlayers; i++) + { + memcpy(&gContestMons[i], gBlockRecvBuffer[i], sizeof(struct ContestPokemon)); + sub_80DFA08(&gContestMons[i], gLinkPlayers[i].language); + } + + gTasks[taskId].data[0]++; + } + break; + case 10: + if (++gTasks[taskId].data[11] > 300) + { + sub_800A4D8(2); + gTasks[taskId].data[0] = 1; + } + break; + default: + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[11] = 0; + gTasks[taskId].data[12] = 0; + SwitchTaskToFollowupFunc(taskId); + break; + } +} + +void sub_80FC804(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + case 0: + if (GetMultiplayerId() == 0) + { + if (IsLinkTaskFinished() && sub_80FC4F4(&gRngValue, sizeof(gRngValue)) == TRUE) + gTasks[taskId].data[0]++; + } + else + { + gTasks[taskId].data[0]++; + } + break; + case 1: + if (sub_80FC530(0)) + { + memcpy(&gRngValue, gBlockRecvBuffer[0], sizeof(gRngValue)); + memcpy(&gContestRngValue, gBlockRecvBuffer[0], sizeof(gContestRngValue)); + gTasks[taskId].data[0]++; + } + break; + default: + gTasks[taskId].data[0] = 0; + SwitchTaskToFollowupFunc(taskId); + break; + } +} + +void sub_80FC894(u8 taskId) +{ + int i; + + if (!sub_80FC670(&gTasks[taskId].data[12])) + return; + + switch (gTasks[taskId].data[0]) + { + case 0: + gBlockSendBuffer[0] = gTasks[taskId].data[9]; + if (GetMultiplayerId() == 0) + { + if (IsLinkTaskFinished()) + gTasks[taskId].data[0] = 10; + } + else + { + gTasks[taskId].data[0]++; + } + break; + case 1: + if (sub_80FC55C()) + { + for (i = 0; i < gNumLinkContestPlayers; i++) + gTasks[taskId].data[i + 1] = gBlockRecvBuffer[i][0]; + + gTasks[taskId].data[0]++; + } + break; + case 10: + if (++gTasks[taskId].data[11] > 10) + { + sub_800A4D8(2); + gTasks[taskId].data[0] = 1; + } + break; + default: + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[11] = 0; + gTasks[taskId].data[12] = 0; + SwitchTaskToFollowupFunc(taskId); + break; + } +} + +void sub_80FC998(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + case 0: + if (IsLinkTaskFinished()) + { + if (sub_80FC4F4(&gContestPlayerMonIndex, sizeof(gContestPlayerMonIndex)) == TRUE) + gTasks[taskId].data[0]++; + } + break; + case 1: + if (sub_80FC55C()) + gTasks[taskId].data[0]++; + break; + default: + gTasks[taskId].data[0] = 0; + SwitchTaskToFollowupFunc(taskId); + break; + } +} + +void sub_80FC9F8(u8 taskId) +{ + int i; + + switch (gTasks[taskId].data[0]) + { + case 0: + if (IsLinkTaskFinished()) + { + if (sub_80FC4F4(&gContestResources->field_4[gContestPlayerMonIndex].currMove, sizeof(gContestResources->field_4[gContestPlayerMonIndex].currMove)) == TRUE) + gTasks[taskId].data[0]++; + } + break; + case 1: + if (sub_80FC55C()) + { + for (i = 0; i < gNumLinkContestPlayers; i++) + gContestResources->field_4[i].currMove = gBlockRecvBuffer[i][0]; + + gTasks[taskId].data[0]++; + } + break; + default: + gTasks[taskId].data[0] = 0; + SwitchTaskToFollowupFunc(taskId); + break; + } +} + +void sub_80FCACC(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + case 0: + if (IsLinkTaskFinished()) + { + if (sub_80FC4F4(gUnknown_02039F08, sizeof(gUnknown_02039F08)) == 1) + gTasks[taskId].data[0]++; + } + break; + case 1: + if (sub_80FC55C()) + { + memcpy(gUnknown_02039F08, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gUnknown_02039F08)); + gTasks[taskId].data[0]++; + } + break; + case 2: + case 5: + case 8: + case 11: + if (gTasks[taskId].data[1]++ > 10) + { + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[0]++; + } + break; + case 3: + if (IsLinkTaskFinished()) + { + if (sub_80FC4F4(gUnknown_02039F10, sizeof(gUnknown_02039F10)) == 1) + gTasks[taskId].data[0]++; + } + break; + case 4: + if (sub_80FC55C()) + { + memcpy(gUnknown_02039F10, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gUnknown_02039F10)); + gTasks[taskId].data[0]++; + } + break; + case 6: + if (IsLinkTaskFinished()) + { + if (sub_80FC4F4(gUnknown_02039F18, sizeof(gUnknown_02039F18)) == 1) + gTasks[taskId].data[0]++; + } + break; + case 7: + if (sub_80FC55C()) + { + memcpy(gUnknown_02039F18, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gUnknown_02039F18)); + gTasks[taskId].data[0]++; + } + break; + case 9: + if (IsLinkTaskFinished()) + { + if (sub_80FC4F4(gContestFinalStandings, sizeof(gContestFinalStandings)) == 1) + gTasks[taskId].data[0]++; + } + break; + case 10: + if (sub_80FC55C()) + { + memcpy(gContestFinalStandings, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestFinalStandings)); + gTasks[taskId].data[0]++; + } + break; + default: + gTasks[taskId].data[0] = 0; + SwitchTaskToFollowupFunc(taskId); + break; + } +} + +void sub_80FCC88(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + case 0: + if (IsLinkTaskFinished()) + { + if (sub_80FC4F4(gContestResources->field_4, 4 * sizeof(struct ContestantStatus)) == 1) + gTasks[taskId].data[0]++; + } + break; + case 1: + if (sub_80FC55C()) + { + memcpy(gContestResources->field_4, gBlockRecvBuffer[gUnknown_02039F2B], 4 * sizeof(struct ContestantStatus)); + gTasks[taskId].data[0]++; + } + break; + case 2: + case 5: + case 8: + case 11: + if (gTasks[taskId].data[1]++ > 10) + { + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[0]++; + } + break; + case 3: + if (IsLinkTaskFinished()) + { + if (sub_80FC4F4(gContestResources->field_8, sizeof(struct UnknownContestStruct7)) == 1) + gTasks[taskId].data[0]++; + } + break; + case 4: + if (sub_80FC55C()) + { + memcpy(gContestResources->field_8, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(struct UnknownContestStruct7)); + gTasks[taskId].data[0]++; + } + break; + case 6: + if (IsLinkTaskFinished()) + { + if (sub_80FC4F4(gContestResources->field_10, sizeof(struct UnknownContestStruct5)) == 1) + gTasks[taskId].data[0]++; + } + break; + case 7: + if (sub_80FC55C()) + { + memcpy(gContestResources->field_10, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(struct UnknownContestStruct5)); + gTasks[taskId].data[0]++; + } + break; + case 9: + if (IsLinkTaskFinished()) + { + if (sub_80FC4F4(gUnknown_02039F26, sizeof(gUnknown_02039F26)) == 1) + gTasks[taskId].data[0]++; + } + break; + case 10: + if (sub_80FC55C()) + { + memcpy(gUnknown_02039F26, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gUnknown_02039F26)); + gTasks[taskId].data[0]++; + } + break; + default: + gTasks[taskId].data[0] = 0; + SwitchTaskToFollowupFunc(taskId); + break; + } +} + +void sub_80FCE48(u8 taskId) +{ + int i; + + if (!sub_80FC670(&gTasks[taskId].data[12])) + return; + + switch (gTasks[taskId].data[0]) + { + case 0: + gBlockSendBuffer[0] = 0x6E; + if (GetMultiplayerId() == 0) + { + if (IsLinkTaskFinished()) + gTasks[taskId].data[0] = 10; + } + else + { + gTasks[taskId].data[0]++; + } + break; + case 1: + if (sub_80FC55C()) + { + for (i = 0; i < 4; i++) + gTasks[taskId].data[i + 5] = gBlockRecvBuffer[i][0]; + + gTasks[taskId].data[0]++; + } + break; + case 10: + if (++gTasks[taskId].data[11] > 10) + { + sub_800A4D8(2); + gTasks[taskId].data[0] = 1; + } + break; + default: + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[11] = 0; + gTasks[taskId].data[12] = 0; + SwitchTaskToFollowupFunc(taskId); + break; + } +} + +void sub_80FCF40(u8 taskId) +{ + if (!sub_80FC670(&gTasks[taskId].data[12])) + return; + + switch (gTasks[taskId].data[0]) + { + case 0: + if (IsLinkTaskFinished()) + { + if (sub_80FC4F4(gContestMonConditions, sizeof(gContestMonConditions)) == 1) + gTasks[taskId].data[0]++; + } + break; + case 1: + if (sub_80FC55C()) + { + memcpy(gContestMonConditions, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestMonConditions)); + gTasks[taskId].data[0]++; + } + break; + default: + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[12] = 0; + SwitchTaskToFollowupFunc(taskId); + break; + } +} + +void sub_80FCFD0(u8 taskId) +{ + if (!sub_80FC670(&gTasks[taskId].data[12])) + return; + + switch (gTasks[taskId].data[0]) + { + case 0: + if (IsLinkTaskFinished()) + { + if (sub_80FC4F4(gUnknown_02039F26, sizeof(gUnknown_02039F26)) == 1) + gTasks[taskId].data[0]++; + } + break; + case 1: + if (sub_80FC55C()) + { + memcpy(gUnknown_02039F26, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gUnknown_02039F26)); + gTasks[taskId].data[0]++; + } + break; + default: + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[12] = 0; + SwitchTaskToFollowupFunc(taskId); + break; + } +} diff --git a/src/contest_link_81D9DE4.c b/src/contest_link_81D9DE4.c new file mode 100755 index 000000000..4b56c9c38 --- /dev/null +++ b/src/contest_link_81D9DE4.c @@ -0,0 +1,331 @@ +#include "global.h" +#include "contest.h" +#include "event_data.h" +#include "link.h" +#include "random.h" +#include "task.h" + +static void sub_81D9F14(u8); +static void sub_81D9F30(u8); +static void sub_81D9F4C(u8); +static void sub_81D9F68(u8); +static void sub_81DA10C(u8); +static void sub_81DA138(u8); +static void sub_81DA160(u8); +static void sub_81DA244(u8); +static void sub_81DA2E8(u8); +static void sub_81DA3B8(u8); +static void sub_81DA488(u8); + +void sub_81D9DE4(u8 taskId) +{ + int gameCleared; + + switch (gTasks[taskId].data[9]) + { + case 0: + gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_COOL_RIBBON); + break; + case 1: + gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_BEAUTY_RIBBON); + break; + case 2: + gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_CUTE_RIBBON); + break; + case 3: + gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SMART_RIBBON); + break; + case 4: + default: + gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_TOUGH_RIBBON); + break; + } + + gContestMons[gContestPlayerMonIndex].unk2C[0] = gHighestRibbonRank; + gameCleared = FlagGet(FLAG_SYS_GAME_CLEAR) > 0; + gContestMons[gContestPlayerMonIndex].unk2C[1] = gameCleared; + SetTaskFuncWithFollowupFunc(taskId, sub_81DA160, sub_81D9F14); +} + +static void sub_81D9F14(u8 taskId) +{ + SetTaskFuncWithFollowupFunc(taskId, sub_81DA244, sub_81D9F30); +} + +static void sub_81D9F30(u8 taskId) +{ + SetTaskFuncWithFollowupFunc(taskId, sub_81DA2E8, sub_81D9F4C); +} + +static void sub_81D9F4C(u8 taskId) +{ + SetTaskFuncWithFollowupFunc(taskId, sub_81DA3B8, sub_81D9F68); +} + +static void sub_81D9F68(u8 taskId) +{ + u8 i; + u8 rank; + int gameCleared; + u8 data1[4]; + u8 data2[4]; + + memset(data1, 0, sizeof(data1)); + memset(data2, 0, sizeof(data2)); + + for (i = 0; i < gNumLinkContestPlayers; i++) + data1[i] = gTasks[taskId].data[i + 1]; + + i = 0; + if (i < gNumLinkContestPlayers) + { + while (++i < gNumLinkContestPlayers) + { + if (data1[0] != data1[i]) + break; + } + } + + if (i == gNumLinkContestPlayers) + gSpecialVar_0x8004 = 0; + else + gSpecialVar_0x8004 = 1; + + for (i = 0; i < gNumLinkContestPlayers; i++) + data2[i] = gTasks[taskId].data[i + 5]; + + if (gNumLinkContestPlayers != 4 && GetMultiplayerId() == 0) + { + rank = gContestMons[0].unk2C[0]; + for (i = 1; i < gNumLinkContestPlayers; i++) + { + if (rank < gContestMons[i].unk2C[0]) + rank = gContestMons[i].unk2C[0]; + } + + if (rank) + rank--; + + gameCleared = 1; + for (i = 0; i < gNumLinkContestPlayers; i++) + { + if (!gContestMons[i].unk2C[1]) + { + gameCleared = 0; + break; + } + } + + sub_80DACBC(data1[0], rank, gameCleared); + } + + gUnknown_02039F2B = sub_80F86E0(data2); + if (gNumLinkContestPlayers < 4) + SetTaskFuncWithFollowupFunc(taskId, sub_81DA488, sub_81DA10C); + else + gTasks[taskId].func = sub_81DA10C; +} + +static void sub_81DA10C(u8 taskId) +{ + sub_80DB09C(gSpecialVar_ContestCategory); + SetTaskFuncWithFollowupFunc(taskId, sub_80FCF40, sub_81DA138); +} + +static void sub_81DA138(u8 taskId) +{ + sub_80DCE58(0); + SetTaskFuncWithFollowupFunc(taskId, sub_80FCFD0, sub_80F8714); +} + +static void sub_81DA160(u8 taskId) +{ + int i; + + if (!sub_80FC670(&gTasks[taskId].data[12])) + return; + + switch (gTasks[taskId].data[0]) + { + default: + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[12] = 0; + SwitchTaskToFollowupFunc(taskId); + break; + case 0: + if (IsLinkTaskFinished()) + { + if (sub_80FC4F4(&gContestMons[gContestPlayerMonIndex], sizeof(struct ContestPokemon)) == 1) + gTasks[taskId].data[0]++; + } + break; + case 1: + if (sub_80FC55C()) + { + for (i = 0; i < gNumLinkContestPlayers; i++) + { + memcpy(&gContestMons[i], gBlockRecvBuffer[i], sizeof(struct ContestPokemon)); + sub_80DFA08(&gContestMons[i], gLinkPlayers[i].language); + } + + gTasks[taskId].data[0]++; + } + break; + } +} + +static void sub_81DA244(u8 taskId) +{ + if (!sub_80FC670(&gTasks[taskId].data[12])) + return; + + switch (gTasks[taskId].data[0]) + { + default: + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[12] = 0; + SwitchTaskToFollowupFunc(taskId); + break; + case 0: + if (GetMultiplayerId() == 0) + { + if (!IsLinkTaskFinished()) + return; + + if (sub_80FC4F4(&gRngValue, sizeof(gRngValue)) == 1) + gTasks[taskId].data[0]++; + } + else + { + gTasks[taskId].data[0]++; + } + break; + case 1: + if (sub_80FC530(0)) + { + memcpy(&gRngValue, gBlockRecvBuffer[0], sizeof(gRngValue)); + memcpy(&gContestRngValue, gBlockRecvBuffer[0], sizeof(gContestRngValue)); + gTasks[taskId].data[0]++; + } + break; + } +} + +static void sub_81DA2E8(u8 taskId) +{ + int i; + u16 data[4]; + u16 var0; + + if (!sub_80FC670(&gTasks[taskId].data[12])) + return; + + switch (gTasks[taskId].data[0]) + { + default: + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[12] = 0; + SwitchTaskToFollowupFunc(taskId); + break; + case 0: + if (IsLinkTaskFinished()) + { + var0 = 0x6E; + if (sub_80FC4F4(&var0, sizeof(var0)) == 1) + gTasks[taskId].data[0]++; + } + break; + case 1: + if (sub_80FC55C()) + { + for (i = 0; i < gNumLinkContestPlayers; i++) + { + data[i] = gBlockRecvBuffer[i][0]; + gTasks[taskId].data[i + 5] = data[i]; + } + + gTasks[taskId].data[0]++; + } + break; + } +} + +static void sub_81DA3B8(u8 taskId) +{ + int i; + u16 data[4]; + u16 var0; + + if (!sub_80FC670(&gTasks[taskId].data[12])) + return; + + switch (gTasks[taskId].data[0]) + { + default: + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[12] = 0; + SwitchTaskToFollowupFunc(taskId); + break; + case 0: + if (IsLinkTaskFinished()) + { + var0 = gTasks[taskId].data[9]; + if (sub_80FC4F4(&var0, sizeof(var0)) == 1) + gTasks[taskId].data[0]++; + } + break; + case 1: + if (sub_80FC55C()) + { + for (i = 0; i < gNumLinkContestPlayers; i++) + { + data[i] = gBlockRecvBuffer[i][0]; + gTasks[taskId].data[i + 1] = data[i]; + } + + gTasks[taskId].data[0]++; + } + break; + } +} + +static void sub_81DA488(u8 taskId) +{ + int i; + + if (!sub_80FC670(&gTasks[taskId].data[12])) + return; + + switch (gTasks[taskId].data[0]) + { + default: + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[12] = 0; + SwitchTaskToFollowupFunc(taskId); + break; + case 0: + if (GetMultiplayerId() == 0) + { + if (!IsLinkTaskFinished()) + return; + + if (sub_80FC4F4(&gContestMons[gNumLinkContestPlayers], (4 - gNumLinkContestPlayers) * sizeof(struct ContestPokemon)) == 1) + gTasks[taskId].data[0]++; + } + else + { + gTasks[taskId].data[0]++; + } + break; + case 1: + if (sub_80FC530(0)) + { + memcpy(&gContestMons[gNumLinkContestPlayers], gBlockRecvBuffer[0], (4 - gNumLinkContestPlayers) * sizeof(struct ContestPokemon)); + for (i = gNumLinkContestPlayers; i < 4; i++) + sub_80DFA08(&gContestMons[i], gLinkPlayers[0].language); + + gTasks[taskId].data[0]++; + } + break; + } +} diff --git a/src/party_menu.c b/src/party_menu.c index fe556750a..241df1c91 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -7257,10 +7257,10 @@ static void sub_81B9424(u8 taskId) static void sub_81B9470(void) { - gUnknown_02039F24 = GetCursorSelectionMonId(); - if (gUnknown_02039F24 >= PARTY_SIZE) - gUnknown_02039F24 = 0xFF; - gSpecialVar_0x8004 = gUnknown_02039F24; + gContestMonPartyIndex = GetCursorSelectionMonId(); + if (gContestMonPartyIndex >= PARTY_SIZE) + gContestMonPartyIndex = 0xFF; + gSpecialVar_0x8004 = gContestMonPartyIndex; gFieldCallback2 = hm_add_c3_without_phase_2; SetMainCallback2(CB2_ReturnToField); } diff --git a/src/script_pokemon_util_80F87D8.c b/src/script_pokemon_util_80F87D8.c index 15e91ac98..f3eaa7161 100755 --- a/src/script_pokemon_util_80F87D8.c +++ b/src/script_pokemon_util_80F87D8.c @@ -228,7 +228,7 @@ void sub_80F8AFC(void) if (gIsLinkContest & 1) { - for (i = 0; i < gUnknown_02039F30; i++) + for (i = 0; i < gNumLinkContestPlayers; i++) { int version = (u8)gLinkPlayers[i].version; if (version == VERSION_RUBY || version == VERSION_SAPPHIRE) @@ -257,7 +257,7 @@ void sub_80F8B94(void) gReservedSpritePaletteCount = 12; if (gIsLinkContest & 1) { - for (i = 0; i < gUnknown_02039F30; i++) + for (i = 0; i < gNumLinkContestPlayers; i++) { eventObjectId = GetEventObjectIdByLocalIdAndMap(gUnknown_0858D8EC[i], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); sprite = &gSprites[gEventObjects[eventObjectId].spriteId]; @@ -285,14 +285,14 @@ u8 GiveMonArtistRibbon(void) { u8 hasArtistRibbon; - hasArtistRibbon = GetMonData(&gPlayerParty[gUnknown_02039F24], MON_DATA_ARTIST_RIBBON); + hasArtistRibbon = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON); if (!hasArtistRibbon && gContestFinalStandings[gContestPlayerMonIndex] == 0 && gSpecialVar_ContestRank == 3 && gUnknown_02039F08[gContestPlayerMonIndex] >= 800) { hasArtistRibbon = 1; - SetMonData(&gPlayerParty[gUnknown_02039F24], MON_DATA_ARTIST_RIBBON, &hasArtistRibbon); - if (GetRibbonCount(&gPlayerParty[gUnknown_02039F24]) > 4) - sub_80EE4DC(&gPlayerParty[gUnknown_02039F24], MON_DATA_ARTIST_RIBBON); + SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON, &hasArtistRibbon); + if (GetRibbonCount(&gPlayerParty[gContestMonPartyIndex]) > 4) + sub_80EE4DC(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON); return 1; } @@ -402,7 +402,7 @@ static void sub_80F8EE8(u8 taskId) void ScriptGetMultiplayerId(void) { - if ((gIsLinkContest & 1) && gUnknown_02039F30 == 4 && !(gIsLinkContest & 2)) + if ((gIsLinkContest & 1) && gNumLinkContestPlayers == 4 && !(gIsLinkContest & 2)) gSpecialVar_Result = GetMultiplayerId(); else gSpecialVar_Result = 4; @@ -1262,7 +1262,7 @@ static void InterviewAfter_ContestLiveUpdates(void) show2->contestLiveUpdates.active = TRUE; StringCopy(show2->contestLiveUpdates.playerName, gSaveBlock2Ptr->playerName); show2->contestLiveUpdates.category = gSpecialVar_ContestCategory; - show2->contestLiveUpdates.species = GetMonData(&gPlayerParty[gUnknown_02039F24], MON_DATA_SPECIES, NULL); + show2->contestLiveUpdates.species = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SPECIES, NULL); show2->contestLiveUpdates.winningSpecies = show->contestLiveUpdates.winningSpecies; show2->contestLiveUpdates.appealFlags2 = show->contestLiveUpdates.appealFlags2; show2->contestLiveUpdates.round1Rank = show->contestLiveUpdates.round1Rank; @@ -1453,7 +1453,7 @@ void ContestLiveUpdates_BeforeInterview_5(u8 a0, u8 a1) StringCopy(show->contestLiveUpdates.winningTrainerName, gContestMons[a1].trainerName); StripExtCtrlCodes(show->contestLiveUpdates.winningTrainerName); show->contestLiveUpdates.appealFlags2 = a0; - if (a1 + 1 > gUnknown_02039F30) + if (a1 + 1 > gNumLinkContestPlayers) { show->contestLiveUpdates.winningTrainerLanguage = gLinkPlayers[0].language; } @@ -1527,10 +1527,10 @@ void BravoTrainerPokemonProfile_BeforeInterview2(u8 a0) show->bravoTrainer.contestResult = a0; show->bravoTrainer.contestCategory = gSpecialVar_ContestCategory; show->bravoTrainer.contestRank = gSpecialVar_ContestRank; - show->bravoTrainer.species = GetMonData(&gPlayerParty[gUnknown_02039F24], MON_DATA_SPECIES, NULL); - GetMonData(&gPlayerParty[gUnknown_02039F24], MON_DATA_NICKNAME, show->bravoTrainer.pokemonNickname); + show->bravoTrainer.species = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SPECIES, NULL); + GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_NICKNAME, show->bravoTrainer.pokemonNickname); StripExtCtrlCodes(show->bravoTrainer.pokemonNickname); - show->bravoTrainer.pokemonNameLanguage = GetMonData(&gPlayerParty[gUnknown_02039F24], MON_DATA_LANGUAGE); + show->bravoTrainer.pokemonNameLanguage = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_LANGUAGE); } } |