diff options
author | camthesaxman <cameronghall@cox.net> | 2017-12-12 17:18:25 -0600 |
---|---|---|
committer | camthesaxman <cameronghall@cox.net> | 2017-12-12 17:18:25 -0600 |
commit | 95a64284fdc2b063a49f1ad3edb8726ec0db0366 (patch) | |
tree | 9f3c2fa6292945817d70a6eab2371186cf64783d | |
parent | f2702d17e9a0414f1c3f2ba6cb90e73c69e56311 (diff) |
decompile nullsub_89 - sub_80AB9A0
-rw-r--r-- | asm/contest.s | 1081 | ||||
-rw-r--r-- | include/battle_anim.h | 2 | ||||
-rw-r--r-- | include/contest_link_80C857C.h | 1 | ||||
-rw-r--r-- | include/graphics.h | 15 | ||||
-rw-r--r-- | include/sprite.h | 1 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/contest.c | 472 |
7 files changed, 492 insertions, 1081 deletions
diff --git a/asm/contest.s b/asm/contest.s index 2f048fbc3..0053a869c 100644 --- a/asm/contest.s +++ b/asm/contest.s @@ -5,1087 +5,6 @@ .text - thumb_func_start nullsub_89 -nullsub_89: @ 80AB1AC - bx lr - thumb_func_end nullsub_89 - - thumb_func_start ResetLinkContestBoolean -ResetLinkContestBoolean: @ 80AB1B0 - ldr r1, _080AB1B8 @ =gIsLinkContest - movs r0, 0 - strb r0, [r1] - bx lr - .align 2, 0 -_080AB1B8: .4byte gIsLinkContest - thumb_func_end ResetLinkContestBoolean - - thumb_func_start sub_80AB1BC -sub_80AB1BC: @ 80AB1BC - push {r4-r6,lr} - movs r6, 0x80 - lsls r6, 19 - movs r0, 0x40 - strh r0, [r6] - ldr r4, _080AB260 @ =0x04000208 - ldrh r3, [r4] - movs r2, 0 - strh r2, [r4] - ldr r5, _080AB264 @ =0x04000200 - ldrh r0, [r5] - movs r1, 0x1 - orrs r0, r1 - strh r0, [r5] - strh r3, [r4] - ldr r1, _080AB268 @ =REG_DISPSTAT - movs r0, 0x8 - strh r0, [r1] - adds r1, 0x4 - movs r3, 0x98 - lsls r3, 8 - adds r0, r3, 0 - strh r0, [r1] - adds r1, 0x2 - ldr r3, _080AB26C @ =0x00009e09 - adds r0, r3, 0 - strh r0, [r1] - adds r1, 0x2 - movs r3, 0x9C - lsls r3, 8 - adds r0, r3, 0 - strh r0, [r1] - adds r1, 0x2 - ldr r3, _080AB270 @ =0x00003a03 - adds r0, r3, 0 - strh r0, [r1] - ldr r0, _080AB274 @ =REG_BLDCNT - strh r2, [r0] - adds r0, 0x2 - strh r2, [r0] - adds r0, 0x2 - strh r2, [r0] - subs r0, 0xC - ldr r3, _080AB278 @ =0x00003f3f - adds r1, r3, 0 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - ldrh r0, [r6] - movs r3, 0xFE - lsls r3, 7 - adds r1, r3, 0 - orrs r0, r1 - strh r0, [r6] - ldr r0, _080AB27C @ =gUnknown_030042A4 - strh r2, [r0] - ldr r0, _080AB280 @ =gUnknown_030042A0 - strh r2, [r0] - ldr r0, _080AB284 @ =gUnknown_030042C0 - strh r2, [r0] - ldr r0, _080AB288 @ =gUnknown_030041B4 - strh r2, [r0] - ldr r0, _080AB28C @ =gUnknown_03004288 - strh r2, [r0] - ldr r0, _080AB290 @ =gUnknown_03004280 - strh r2, [r0] - ldr r0, _080AB294 @ =gUnknown_030041B0 - strh r2, [r0] - ldr r0, _080AB298 @ =gUnknown_030041B8 - strh r2, [r0] - ldr r0, _080AB29C @ =gUnknown_030042C4 - strh r2, [r0] - ldr r0, _080AB2A0 @ =gUnknown_03004240 - strh r2, [r0] - ldr r0, _080AB2A4 @ =gUnknown_03004200 - strh r2, [r0] - ldr r0, _080AB2A8 @ =gUnknown_03004244 - strh r2, [r0] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080AB260: .4byte 0x04000208 -_080AB264: .4byte 0x04000200 -_080AB268: .4byte REG_DISPSTAT -_080AB26C: .4byte 0x00009e09 -_080AB270: .4byte 0x00003a03 -_080AB274: .4byte REG_BLDCNT -_080AB278: .4byte 0x00003f3f -_080AB27C: .4byte gUnknown_030042A4 -_080AB280: .4byte gUnknown_030042A0 -_080AB284: .4byte gUnknown_030042C0 -_080AB288: .4byte gUnknown_030041B4 -_080AB28C: .4byte gUnknown_03004288 -_080AB290: .4byte gUnknown_03004280 -_080AB294: .4byte gUnknown_030041B0 -_080AB298: .4byte gUnknown_030041B8 -_080AB29C: .4byte gUnknown_030042C4 -_080AB2A0: .4byte gUnknown_03004240 -_080AB2A4: .4byte gUnknown_03004200 -_080AB2A8: .4byte gUnknown_03004244 - thumb_func_end sub_80AB1BC - - thumb_func_start sub_80AB2AC -sub_80AB2AC: @ 80AB2AC - push {r4,r5,lr} - ldr r0, _080AB300 @ =gContestMiscGfx - movs r1, 0xC0 - lsls r1, 19 - bl LZDecompressVram - ldr r0, _080AB304 @ =gContestAudienceGfx - ldr r1, _080AB308 @ =0x06002000 - bl LZDecompressVram - ldr r0, _080AB30C @ =gUnknown_08D1725C - ldr r1, _080AB310 @ =0x0600d000 - bl LZDecompressVram - ldr r0, _080AB314 @ =gUnknown_08D17144 - movs r2, 0x80 - lsls r2, 2 - movs r1, 0 - bl LoadCompressedPalette - bl sub_80AB350 - movs r4, 0 - movs r5, 0xA0 -_080AB2DC: - ldr r0, _080AB318 @ =gSharedMem + 0x18004 - adds r0, r5, r0 - ldr r1, _080AB31C @ =gUnknown_02038696 - adds r1, r4, r1 - ldrb r1, [r1] - adds r1, 0x5 - lsls r1, 4 - movs r2, 0x20 - bl LoadPalette - adds r5, 0x20 - adds r4, 0x1 - cmp r4, 0x3 - ble _080AB2DC - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080AB300: .4byte gContestMiscGfx -_080AB304: .4byte gContestAudienceGfx -_080AB308: .4byte 0x06002000 -_080AB30C: .4byte gUnknown_08D1725C -_080AB310: .4byte 0x0600d000 -_080AB314: .4byte gUnknown_08D17144 -_080AB318: .4byte gSharedMem + 0x18004 -_080AB31C: .4byte gUnknown_02038696 - thumb_func_end sub_80AB2AC - - thumb_func_start sub_80AB320 -sub_80AB320: @ 80AB320 - push {r4,lr} - ldr r4, _080AB340 @ =gWindowConfig_81E6FD8 - adds r0, r4, 0 - bl SetUpWindowConfig - ldr r0, _080AB344 @ =gUnknown_03004210 - adds r1, r4, 0 - bl InitWindowFromConfig - ldr r0, _080AB348 @ =gMenuWindow - ldr r1, _080AB34C @ =gWindowConfig_81E6FF4 - bl InitWindowFromConfig - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080AB340: .4byte gWindowConfig_81E6FD8 -_080AB344: .4byte gUnknown_03004210 -_080AB348: .4byte gMenuWindow -_080AB34C: .4byte gWindowConfig_81E6FF4 - thumb_func_end sub_80AB320 - - thumb_func_start sub_80AB350 -sub_80AB350: @ 80AB350 - push {r4,lr} - ldr r0, _080AB38C @ =gWindowConfig_81E6FD8 - bl LoadFontDefaultPalette - movs r0, 0 - movs r1, 0 - movs r2, 0x2 - bl FillPalette - movs r4, 0xA -_080AB364: - adds r1, r4, 0 - adds r1, 0xF0 - ldr r0, _080AB390 @ =gPlttBufferUnfaded + 0x1E2 - movs r2, 0x2 - bl LoadPalette - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0xD - bls _080AB364 - ldr r0, _080AB394 @ =0x00007e3f - movs r1, 0xF3 - movs r2, 0x2 - bl FillPalette - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080AB38C: .4byte gWindowConfig_81E6FD8 -_080AB390: .4byte gPlttBufferUnfaded + 0x1E2 -_080AB394: .4byte 0x00007e3f - thumb_func_end sub_80AB350 - - thumb_func_start sub_80AB398 -sub_80AB398: @ 80AB398 - push {r4-r6,lr} - ldr r4, _080AB468 @ =gSharedMem + 0x19204 - adds r0, r4, 0 - movs r1, 0 - movs r2, 0x5C - bl memset - movs r5, 0 - adds r4, 0x2 - movs r2, 0xFF -_080AB3AC: - adds r1, r5, r4 - ldrb r0, [r1] - orrs r0, r2 - strb r0, [r1] - adds r5, 0x1 - cmp r5, 0x3 - ble _080AB3AC - ldr r4, _080AB46C @ =gSharedMem + 0x19260 - movs r5, 0x3 -_080AB3BE: - adds r0, r4, 0 - movs r1, 0 - movs r2, 0x1C - bl memset - adds r4, 0x1C - subs r5, 0x1 - cmp r5, 0 - bge _080AB3BE - ldr r4, _080AB470 @ =gSharedMem + 0x192D0 - movs r6, 0x4 - negs r6, r6 - movs r3, 0xFF - adds r2, r4, 0 - subs r2, 0x65 - movs r5, 0x3 -_080AB3DE: - ldrb r1, [r2] - adds r0, r6, 0 - ands r0, r1 - strb r0, [r2] - ldrb r0, [r2, 0x8] - orrs r0, r3 - strb r0, [r2, 0x8] - ldrb r0, [r2, 0x9] - orrs r0, r3 - strb r0, [r2, 0x9] - adds r2, 0x1C - subs r5, 0x1 - cmp r5, 0 - bge _080AB3DE - adds r0, r4, 0 - movs r1, 0 - movs r2, 0x14 - bl memset - adds r0, r4, 0 - adds r0, 0x14 - movs r1, 0 - movs r2, 0x44 - bl memset - adds r0, r4, 0 - adds r0, 0x58 - movs r1, 0 - movs r2, 0x4 - bl memset - adds r0, r4, 0 - adds r0, 0x68 - movs r1, 0 - movs r2, 0x10 - bl memset - ldr r0, _080AB474 @ =gIsLinkContest - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _080AB43A - movs r0, 0 - bl sub_80B0F28 -_080AB43A: - movs r5, 0 - movs r6, 0xFF - adds r3, r4, 0 - subs r3, 0xB8 - adds r2, r4, 0 - subs r2, 0x57 - ldr r4, _080AB478 @ =gUnknown_02038696 -_080AB448: - ldrb r0, [r2] - orrs r0, r6 - strb r0, [r2] - adds r1, r3, r5 - adds r0, r5, r4 - ldrb r0, [r0] - strb r0, [r1] - adds r2, 0x1C - adds r5, 0x1 - cmp r5, 0x3 - ble _080AB448 - bl sub_80B159C - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080AB468: .4byte gSharedMem + 0x19204 -_080AB46C: .4byte gSharedMem + 0x19260 -_080AB470: .4byte gSharedMem + 0x192D0 -_080AB474: .4byte gIsLinkContest -_080AB478: .4byte gUnknown_02038696 - thumb_func_end sub_80AB398 - - thumb_func_start sub_80AB47C -sub_80AB47C: @ 80AB47C - push {r4-r7,lr} - sub sp, 0x4 - ldr r0, _080AB498 @ =gMain - ldr r1, _080AB49C @ =0x0000043c - adds r4, r0, r1 - ldrb r0, [r4] - cmp r0, 0x1 - beq _080AB554 - cmp r0, 0x1 - bgt _080AB4A0 - cmp r0, 0 - beq _080AB4AA - b _080AB5AE - .align 2, 0 -_080AB498: .4byte gMain -_080AB49C: .4byte 0x0000043c -_080AB4A0: - cmp r0, 0x2 - beq _080AB55A - cmp r0, 0x3 - beq _080AB578 - b _080AB5AE -_080AB4AA: - movs r0, 0 - bl SetVBlankCallback - bl sub_80AB320 - bl sub_80AB1BC - bl dp12_8087EA4 - bl ResetPaletteFade - ldr r0, _080AB538 @ =gPaletteFade - ldrb r1, [r0, 0x8] - movs r2, 0x80 - orrs r1, r2 - strb r1, [r0, 0x8] - movs r2, 0xC0 - lsls r2, 19 - movs r3, 0xC0 - lsls r3, 9 - movs r5, 0 - ldr r1, _080AB53C @ =0x040000d4 - movs r4, 0x80 - lsls r4, 5 - ldr r6, _080AB540 @ =0x85000400 - movs r7, 0x85 - lsls r7, 24 -_080AB4E0: - str r5, [sp] - mov r0, sp - str r0, [r1] - str r2, [r1, 0x4] - str r6, [r1, 0x8] - ldr r0, [r1, 0x8] - adds r2, r4 - subs r3, r4 - cmp r3, r4 - bhi _080AB4E0 - str r5, [sp] - mov r0, sp - str r0, [r1] - str r2, [r1, 0x4] - lsrs r0, r3, 2 - orrs r0, r7 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - bl ResetSpriteData - bl ResetTasks - bl FreeAllSpritePalettes - ldr r1, _080AB544 @ =gReservedSpritePaletteCount - movs r0, 0x4 - strb r0, [r1] - ldr r0, _080AB548 @ =gSharedMem - movs r1, 0xC0 - lsls r1, 9 - adds r0, r1 - movs r1, 0 - strb r1, [r0] - bl ClearBattleMonForms - bl sub_80AB398 - ldr r1, _080AB54C @ =gMain - ldr r0, _080AB550 @ =0x0000043c - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _080AB5AE - .align 2, 0 -_080AB538: .4byte gPaletteFade -_080AB53C: .4byte 0x040000d4 -_080AB540: .4byte 0x85000400 -_080AB544: .4byte gReservedSpritePaletteCount -_080AB548: .4byte gSharedMem -_080AB54C: .4byte gMain -_080AB550: .4byte 0x0000043c -_080AB554: - bl sub_80AB350 - b _080AB56C -_080AB55A: - ldr r5, _080AB574 @ =gSharedMem + 0x1925D - adds r0, r5, 0 - bl sub_80AB70C - lsls r0, 24 - cmp r0, 0 - beq _080AB5AE - movs r0, 0 - strb r0, [r5] -_080AB56C: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _080AB5AE - .align 2, 0 -_080AB574: .4byte gSharedMem + 0x1925D -_080AB578: - bl sub_80B2184 - ldr r0, _080AB5B8 @ =gUnknown_030042C0 - movs r1, 0 - strh r1, [r0] - ldr r0, _080AB5BC @ =gUnknown_030041B4 - strh r1, [r0] - movs r0, 0x2 - bl BeginFastPaletteFade - ldr r2, _080AB5C0 @ =gPaletteFade - ldrb r1, [r2, 0x8] - movs r0, 0x7F - ands r0, r1 - strb r0, [r2, 0x8] - ldr r0, _080AB5C4 @ =sub_80ABAC4 - bl SetVBlankCallback - ldr r0, _080AB5C8 @ =sub_80AB5D4 - movs r1, 0xA - bl CreateTask - ldr r1, _080AB5CC @ =gSharedMem + 0x19204 - strb r0, [r1, 0x8] - ldr r0, _080AB5D0 @ =sub_80ABAAC - bl SetMainCallback2 -_080AB5AE: - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080AB5B8: .4byte gUnknown_030042C0 -_080AB5BC: .4byte gUnknown_030041B4 -_080AB5C0: .4byte gPaletteFade -_080AB5C4: .4byte sub_80ABAC4 -_080AB5C8: .4byte sub_80AB5D4 -_080AB5CC: .4byte gSharedMem + 0x19204 -_080AB5D0: .4byte sub_80ABAAC - thumb_func_end sub_80AB47C - - thumb_func_start sub_80AB5D4 -sub_80AB5D4: @ 80AB5D4 - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, _080AB5F8 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080AB5F4 - ldr r0, _080AB5FC @ =gTasks - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 3 - adds r1, r0 - ldr r0, _080AB600 @ =sub_80AB604 - str r0, [r1] -_080AB5F4: - pop {r0} - bx r0 - .align 2, 0 -_080AB5F8: .4byte gPaletteFade -_080AB5FC: .4byte gTasks -_080AB600: .4byte sub_80AB604 - thumb_func_end sub_80AB5D4 - - thumb_func_start sub_80AB604 -sub_80AB604: @ 80AB604 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080AB648 @ =gIsLinkContest - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080AB65C - ldr r2, _080AB64C @ =gPaletteFade - ldrb r1, [r2, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080AB66A - ldrb r1, [r2, 0x8] - movs r0, 0x7F - ands r0, r1 - strb r0, [r2, 0x8] - bl sub_80AF860 - ldr r0, _080AB650 @ =sub_80AB678 - movs r1, 0 - bl CreateTask - ldr r1, _080AB654 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _080AB658 @ =nullsub_89 - str r1, [r0] - b _080AB66A - .align 2, 0 -_080AB648: .4byte gIsLinkContest -_080AB64C: .4byte gPaletteFade -_080AB650: .4byte sub_80AB678 -_080AB654: .4byte gTasks -_080AB658: .4byte nullsub_89 -_080AB65C: - ldr r0, _080AB670 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _080AB674 @ =sub_80AB960 - str r0, [r1] -_080AB66A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080AB670: .4byte gTasks -_080AB674: .4byte sub_80AB960 - thumb_func_end sub_80AB604 - - thumb_func_start sub_80AB678 -sub_80AB678: @ 80AB678 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r1, _080AB68C @ =sub_80C89DC - ldr r2, _080AB690 @ =sub_80AB694 - bl SetTaskFuncWithFollowupFunc - pop {r0} - bx r0 - .align 2, 0 -_080AB68C: .4byte sub_80C89DC -_080AB690: .4byte sub_80AB694 - thumb_func_end sub_80AB678 - - thumb_func_start sub_80AB694 -sub_80AB694: @ 80AB694 - lsls r0, 24 - lsrs r0, 24 - movs r3, 0x1 - ldr r2, _080AB6AC @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - strh r3, [r1, 0x8] - ldr r0, _080AB6B0 @ =sub_80AB6B4 - str r0, [r1] - bx lr - .align 2, 0 -_080AB6AC: .4byte gTasks -_080AB6B0: .4byte sub_80AB6B4 - thumb_func_end sub_80AB694 - - thumb_func_start sub_80AB6B4 -sub_80AB6B4: @ 80AB6B4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r5, _080AB6F8 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r5 - ldrh r1, [r0, 0x8] - subs r1, 0x1 - strh r1, [r0, 0x8] - lsls r1, 16 - cmp r1, 0 - bgt _080AB6F2 - bl GetMultiplayerId - adds r0, r4, 0 - bl DestroyTask - ldr r0, _080AB6FC @ =gSharedMem + 0x19204 - ldrb r1, [r0, 0x8] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r5 - ldr r1, _080AB700 @ =sub_80AB960 - str r1, [r0] - ldr r1, _080AB704 @ =gRngValue - ldr r0, _080AB708 @ =gUnknown_03005D28 - ldr r0, [r0] - str r0, [r1] -_080AB6F2: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080AB6F8: .4byte gTasks -_080AB6FC: .4byte gSharedMem + 0x19204 -_080AB700: .4byte sub_80AB960 -_080AB704: .4byte gRngValue -_080AB708: .4byte gUnknown_03005D28 - thumb_func_end sub_80AB6B4 - - thumb_func_start sub_80AB70C -sub_80AB70C: @ 80AB70C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x44 - mov r10, r0 - ldrb r0, [r0] - cmp r0, 0x6 - bls _080AB722 - b _080AB93C -_080AB722: - lsls r0, 2 - ldr r1, _080AB72C @ =_080AB730 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080AB72C: .4byte _080AB730 - .align 2, 0 -_080AB730: - .4byte _080AB74C - .4byte _080AB7A0 - .4byte _080AB7B0 - .4byte _080AB800 - .4byte _080AB814 - .4byte _080AB844 - .4byte _080AB8CC -_080AB74C: - ldr r0, _080AB794 @ =gPaletteFade - ldrb r1, [r0, 0x8] - movs r2, 0x80 - orrs r1, r2 - strb r1, [r0, 0x8] - movs r2, 0xC0 - lsls r2, 19 - movs r3, 0xC0 - lsls r3, 9 - add r5, sp, 0x40 - movs r6, 0 - ldr r1, _080AB798 @ =0x040000d4 - movs r4, 0x80 - lsls r4, 5 - mov r8, r5 - ldr r7, _080AB79C @ =0x85000400 - movs r0, 0x85 - lsls r0, 24 - mov r9, r0 -_080AB772: - str r6, [sp, 0x40] - mov r0, r8 - str r0, [r1] - str r2, [r1, 0x4] - str r7, [r1, 0x8] - ldr r0, [r1, 0x8] - adds r2, r4 - subs r3, r4 - cmp r3, r4 - bhi _080AB772 - str r6, [sp, 0x40] - str r5, [r1] - str r2, [r1, 0x4] - lsrs r0, r3, 2 - mov r2, r9 - orrs r0, r2 - b _080AB7E6 - .align 2, 0 -_080AB794: .4byte gPaletteFade -_080AB798: .4byte 0x040000d4 -_080AB79C: .4byte 0x85000400 -_080AB7A0: - ldr r0, _080AB7AC @ =gContestMiscGfx - movs r1, 0xC0 - lsls r1, 19 - bl LZDecompressVram - b _080AB946 - .align 2, 0 -_080AB7AC: .4byte gContestMiscGfx -_080AB7B0: - ldr r0, _080AB7EC @ =gContestAudienceGfx - ldr r4, _080AB7F0 @ =0x06002000 - adds r1, r4, 0 - bl LZDecompressVram - ldr r3, _080AB7F4 @ =gSharedMem + 0x15800 - movs r5, 0x80 - lsls r5, 6 - ldr r1, _080AB7F8 @ =0x040000d4 - ldr r6, _080AB7FC @ =0x84000400 - movs r2, 0x80 - lsls r2, 5 - movs r7, 0x84 - lsls r7, 24 -_080AB7CC: - str r4, [r1] - str r3, [r1, 0x4] - str r6, [r1, 0x8] - ldr r0, [r1, 0x8] - adds r4, r2 - adds r3, r2 - subs r5, r2 - cmp r5, r2 - bhi _080AB7CC - str r4, [r1] - str r3, [r1, 0x4] - lsrs r0, r5, 2 - orrs r0, r7 -_080AB7E6: - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - b _080AB946 - .align 2, 0 -_080AB7EC: .4byte gContestAudienceGfx -_080AB7F0: .4byte 0x06002000 -_080AB7F4: .4byte gSharedMem + 0x15800 -_080AB7F8: .4byte 0x040000d4 -_080AB7FC: .4byte 0x84000400 -_080AB800: - ldr r0, _080AB80C @ =gUnknown_08D1725C - ldr r1, _080AB810 @ =0x0600d000 - bl LZDecompressVram - b _080AB946 - .align 2, 0 -_080AB80C: .4byte gUnknown_08D1725C -_080AB810: .4byte 0x0600d000 -_080AB814: - ldr r0, _080AB830 @ =gUnknown_08D17424 - ldr r4, _080AB834 @ =0x0600e000 - adds r1, r4, 0 - bl LZDecompressVram - ldr r1, _080AB838 @ =gSharedMem + 0x18A04 - ldr r0, _080AB83C @ =0x040000d4 - str r4, [r0] - str r1, [r0, 0x4] - ldr r1, _080AB840 @ =0x84000200 - str r1, [r0, 0x8] - ldr r0, [r0, 0x8] - b _080AB946 - .align 2, 0 -_080AB830: .4byte gUnknown_08D17424 -_080AB834: .4byte 0x0600e000 -_080AB838: .4byte gSharedMem + 0x18A04 -_080AB83C: .4byte 0x040000d4 -_080AB840: .4byte 0x84000200 -_080AB844: - ldr r0, _080AB8AC @ =gUnknown_08D17144 - movs r2, 0x80 - lsls r2, 2 - movs r1, 0 - bl LoadCompressedPalette - ldr r5, _080AB8B0 @ =gPlttBufferUnfaded + 0x100 - ldr r6, _080AB8B4 @ =REG_BG0CNT - adds r0, r5, 0 - mov r1, sp - adds r2, r6, 0 - bl CpuSet - ldr r0, _080AB8B8 @ =gContestPlayerMonIndex - mov r9, r0 - ldrb r0, [r0] - adds r0, 0x5 - lsls r0, 5 - ldr r1, _080AB8BC @ =0xffffff00 - adds r1, r5 - mov r8, r1 - add r0, r8 - add r4, sp, 0x20 - adds r1, r4, 0 - adds r2, r6, 0 - bl CpuSet - adds r0, r4, 0 - adds r1, r5, 0 - adds r2, r6, 0 - bl CpuSet - mov r2, r9 - ldrb r1, [r2] - adds r1, 0x5 - lsls r1, 5 - add r1, r8 - mov r0, sp - adds r2, r6, 0 - bl CpuSet - ldr r1, _080AB8C0 @ =gSharedMem + 0x18004 - ldr r0, _080AB8C4 @ =0x040000d4 - mov r2, r8 - str r2, [r0] - str r1, [r0, 0x4] - ldr r1, _080AB8C8 @ =0x84000080 - str r1, [r0, 0x8] - ldr r0, [r0, 0x8] - bl sub_80AB350 - b _080AB946 - .align 2, 0 -_080AB8AC: .4byte gUnknown_08D17144 -_080AB8B0: .4byte gPlttBufferUnfaded + 0x100 -_080AB8B4: .4byte REG_BG0CNT -_080AB8B8: .4byte gContestPlayerMonIndex -_080AB8BC: .4byte 0xffffff00 -_080AB8C0: .4byte gSharedMem + 0x18004 -_080AB8C4: .4byte 0x040000d4 -_080AB8C8: .4byte 0x84000080 -_080AB8CC: - bl sub_80B1118 - bl sub_80AFA5C - bl sub_80AEB30 - bl sub_80AE8B4 - ldr r1, _080AB924 @ =gSharedMem + 0x19204 - movs r4, 0 - strb r0, [r1, 0x12] - bl sub_80AFE30 - bl sub_80B0034 - bl sub_80B00C8 - bl sub_80B0324 - bl sub_80B0518 - ldr r1, _080AB928 @ =gBanksBySide - strb r4, [r1] - movs r0, 0x1 - strb r0, [r1, 0x1] - movs r3, 0x3 - strb r3, [r1, 0x2] - movs r2, 0x2 - strb r2, [r1, 0x3] - ldr r0, _080AB92C @ =gBattleTypeFlags - strh r4, [r0] - ldr r4, _080AB930 @ =gBankAttacker - strb r2, [r4] - ldr r0, _080AB934 @ =gBankTarget - strb r3, [r0] - bl sub_80AE858 - ldr r2, _080AB938 @ =gObjectBankIDs - ldrb r1, [r4] - adds r1, r2 - strb r0, [r1] - bl sub_80B292C - b _080AB946 - .align 2, 0 -_080AB924: .4byte gSharedMem + 0x19204 -_080AB928: .4byte gBanksBySide -_080AB92C: .4byte gBattleTypeFlags -_080AB930: .4byte gBankAttacker -_080AB934: .4byte gBankTarget -_080AB938: .4byte gObjectBankIDs -_080AB93C: - movs r0, 0 - mov r1, r10 - strb r0, [r1] - movs r0, 0x1 - b _080AB950 -_080AB946: - mov r2, r10 - ldrb r0, [r2] - adds r0, 0x1 - strb r0, [r2] - movs r0, 0 -_080AB950: - add sp, 0x44 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80AB70C - - thumb_func_start sub_80AB960 -sub_80AB960: @ 80AB960 - push {lr} - lsls r0, 24 - lsrs r3, r0, 24 - ldr r1, _080AB994 @ =gPaletteFade - ldrb r2, [r1, 0x8] - movs r0, 0x7F - ands r0, r2 - strb r0, [r1, 0x8] - ldrb r1, [r1, 0x7] - movs r0, 0x80 - ands r0, r1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0 - bne _080AB990 - ldr r0, _080AB998 @ =gTasks - lsls r1, r3, 2 - adds r1, r3 - lsls r1, 3 - adds r1, r0 - strh r2, [r1, 0x8] - strh r2, [r1, 0xA] - ldr r0, _080AB99C @ =sub_80AB9A0 - str r0, [r1] -_080AB990: - pop {r0} - bx r0 - .align 2, 0 -_080AB994: .4byte gPaletteFade -_080AB998: .4byte gTasks -_080AB99C: .4byte sub_80AB9A0 - thumb_func_end sub_80AB960 - - thumb_func_start sub_80AB9A0 -sub_80AB9A0: @ 80AB9A0 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r1, _080AB9C4 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - movs r2, 0x8 - ldrsh r0, [r0, r2] - adds r2, r1, 0 - cmp r0, 0x4 - bhi _080ABA7C - lsls r0, 2 - ldr r1, _080AB9C8 @ =_080AB9CC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080AB9C4: .4byte gTasks -_080AB9C8: .4byte _080AB9CC - .align 2, 0 -_080AB9CC: - .4byte _080AB9E0 - .4byte _080ABA0A - .4byte _080ABA28 - .4byte _080ABA44 - .4byte _080ABA7C -_080AB9E0: - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r4, r0, r2 - ldrh r0, [r4, 0xA] - adds r1, r0, 0x1 - strh r1, [r4, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3C - ble _080ABA9C - movs r0, 0 - strh r0, [r4, 0xA] - movs r0, 0x61 - movs r1, 0 - bl PlaySE12WithPanning - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _080ABA9C -_080ABA0A: - ldr r1, _080ABA24 @ =gUnknown_030041B4 - ldrh r0, [r1] - adds r0, 0x7 - strh r0, [r1] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xA0 - ble _080ABA9C - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r2 - b _080ABA68 - .align 2, 0 -_080ABA24: .4byte gUnknown_030041B4 -_080ABA28: - bl sub_80B2280 - ldr r0, _080ABA40 @ =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 _080ABA9C - .align 2, 0 -_080ABA40: .4byte gTasks -_080ABA44: - ldr r3, _080ABA70 @ =REG_BG0CNT - ldrb r2, [r3] - movs r1, 0x4 - negs r1, r1 - adds r0, r1, 0 - ands r0, r2 - strb r0, [r3] - ldr r2, _080ABA74 @ =REG_BG2CNT - ldrb r0, [r2] - ands r1, r0 - strb r1, [r2] - bl sub_80B1B14 - ldr r1, _080ABA78 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 -_080ABA68: - ldrh r1, [r0, 0x8] - adds r1, 0x1 - strh r1, [r0, 0x8] - b _080ABA9C - .align 2, 0 -_080ABA70: .4byte REG_BG0CNT -_080ABA74: .4byte REG_BG2CNT -_080ABA78: .4byte gTasks -_080ABA7C: - ldr r0, _080ABAA4 @ =gSharedMem + 0x19204 - ldrb r1, [r0, 0x6] - movs r0, 0x40 - ands r0, r1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - bne _080ABA9C - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r2 - strh r1, [r0, 0x8] - strh r1, [r0, 0xA] - ldr r1, _080ABAA8 @ =sub_80ABB70 - str r1, [r0] -_080ABA9C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080ABAA4: .4byte gSharedMem + 0x19204 -_080ABAA8: .4byte sub_80ABB70 - thumb_func_end sub_80AB9A0 - thumb_func_start sub_80ABAAC sub_80ABAAC: @ 80ABAAC push {lr} diff --git a/include/battle_anim.h b/include/battle_anim.h index 9598c5e5f..f3d8f5a0a 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -4,8 +4,10 @@ #include "sprite.h" #define REG_BGnCNT_BITFIELD(n) (*(struct BGCntrlBitfield *)REG_ADDR_BG##n##CNT) +#define REG_BG0CNT_BITFIELD REG_BGnCNT_BITFIELD(0) #define REG_BG1CNT_BITFIELD REG_BGnCNT_BITFIELD(1) #define REG_BG2CNT_BITFIELD REG_BGnCNT_BITFIELD(2) +#define REG_BG3CNT_BITFIELD REG_BGnCNT_BITFIELD(3) struct BGCntrlBitfield { diff --git a/include/contest_link_80C857C.h b/include/contest_link_80C857C.h index 9135ba2e7..c0f7088b0 100644 --- a/include/contest_link_80C857C.h +++ b/include/contest_link_80C857C.h @@ -3,6 +3,7 @@ void sub_80C8734(u8); void sub_80C88AC(u8); +void sub_80C89DC(u8); void sub_80C8E1C(u8); void sub_80C8EBC(u8); void sub_80C8F34(u8); diff --git a/include/graphics.h b/include/graphics.h index 7c23e90ab..7a2396615 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -28,6 +28,21 @@ extern const u8 gInterfaceGfx_PremierBall[]; extern const u8 gInterfacePal_PremierBall[]; extern const u8 gUnknown_08D030D0[]; +extern const u8 gUnknown_08D17144[]; +extern const u8 gUnknown_08D1725C[]; +extern const u8 gUnknown_08D17424[]; +extern const u8 gUnknown_08D17C3C[]; +extern const u8 gContestMiscGfx[]; +extern const u8 gContestAudienceGfx[]; +extern const u8 gContestJudgeSymbolsGfx[]; +extern const u8 gContest3Pal[]; +extern const u8 gTiles_8D1975C[]; +extern const u8 gUnknown_08D1977C[]; +extern const u8 gUnknown_08D1A250[]; +extern const u8 gUnknown_08D1A364[]; +extern const u8 gUnknown_08D1A490[]; +extern const u8 gUnknown_08D1A618[]; + extern const u8 gMonFootprint_QuestionMark[]; // data/graphics/pokemon/graphics.inc diff --git a/include/sprite.h b/include/sprite.h index a87260ec0..ba68b7e42 100644 --- a/include/sprite.h +++ b/include/sprite.h @@ -228,6 +228,7 @@ extern const union AffineAnimCmd *const gDummySpriteAffineAnimTable[]; extern s16 gSpriteCoordOffsetX; extern s16 gSpriteCoordOffsetY; +extern u8 gReservedSpritePaletteCount; extern struct Sprite gSprites[]; diff --git a/ld_script.txt b/ld_script.txt index 6664a6f8d..89d400fb6 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -141,6 +141,7 @@ SECTIONS { src/battle/battle_anim_80A7E7C.o(.text); src/field/item.o(.text); src/debug/matsuda_debug_menu.o(.text); + src/contest.o(.text); asm/contest.o(.text); src/field/shop.o(.text); src/field/berry.o(.text); diff --git a/src/contest.c b/src/contest.c new file mode 100644 index 000000000..ebce709e3 --- /dev/null +++ b/src/contest.c @@ -0,0 +1,472 @@ +#include "global.h" +#include "constants/songs.h" +#include "battle_anim.h" +#include "contest.h" +#include "contest_link_80C857C.h" +#include "ewram.h" +#include "decompress.h" +#include "graphics.h" +#include "link.h" +#include "main.h" +#include "menu.h" +#include "palette.h" +#include "random.h" +#include "sound.h" +#include "task.h" +#include "text.h" +#include "unknown_task.h" + +struct Shared18000 +{ + /*0x18000*/ u8 unk18000; + /*0x18001*/ u8 filler18001[3]; + ///*0x18004*/ u8 unk18004[0x200]; + /*0x18004*/ u16 unk18004[16][16]; + /*0x18204*/ u8 filler18204[0xA04-0x204]; + /*0x18A04*/ u8 unk18A04[0x800]; +}; + +struct Shared19204 +{ + /*0x19204*/ u8 filler0[2]; + /*0x19206*/ u8 unk19206[4]; + /*0x1920A*/ u8 unk1920A; + /*0x1920B*/ u8 filler1920B; + /*0x1920C*/ u8 unk1920C; + /*0x1920D*/ u8 filler1920D[0x16-0xD]; + /*0x19216*/ u8 unk19216; + /*0x19217*/ u8 filler19217; + /*0x19218*/ u8 unk19218[0x5D-0x18]; + /*0x1925D*/ u8 unk1925D[3]; +}; + +struct UnknownContestStruct1 +{ + u8 filler0[0xB]; + u8 unkB_0:2; + u8 fillerC[0x13-0xC]; + u8 unk13; + u8 unk14; + u8 filler15[0x19-0x15]; + u8 unk19; + u8 filler1A[0x1C-0x1A]; +}; + +struct Shared19260 +{ + /*0x19260*/ struct UnknownContestStruct1 unk19260[4]; + /*0x192D0*/ u8 unk192D0[0x14]; + /*0x192E4*/ u8 unk192E4[0x44]; + /*0x19328*/ u8 unk19328[4]; + /*0x1932C*/ u8 filler1932C[0x38-0x2C]; + /*0x19338*/ u8 unk19338[0x10]; +}; + +#define shared15800 (gSharedMem + 0x15800) +#define shared18000 (*(struct Shared18000 *)(gSharedMem + 0x18000)) +#define shared19204 (*(struct Shared19204 *)(gSharedMem + 0x19204)) +#define shared19260 (*(struct Shared19260 *)(gSharedMem + 0x19260)) + +extern u16 gBattleTypeFlags; +extern u8 gBankAttacker; +extern u8 gBankTarget; +extern u8 gBanksBySide[]; +extern u8 gObjectBankIDs[]; +extern bool8 gIsLinkContest; +extern u8 gContestPlayerMonIndex; +extern u16 gUnknown_030041B0; +extern s16 gUnknown_030041B4; +extern u16 gUnknown_030041B8; +extern u16 gUnknown_03004200; +extern struct Window gUnknown_03004210; +extern u16 gUnknown_03004240; +extern u16 gUnknown_03004244; +extern u16 gUnknown_03004280; +extern u16 gUnknown_03004288; +extern u16 gUnknown_030042A0; +extern u16 gUnknown_030042A4; +extern u16 gUnknown_030042C0; +extern u16 gUnknown_030042C4; +extern u32 gUnknown_03005D28; +extern u8 gUnknown_02038696[]; + +void sub_80AB350(void); +void sub_80AB5D4(u8); +void sub_80AB604(u8); +void sub_80AB678(u8); +void sub_80AB694(u8); +void sub_80AB6B4(u8); +u8 sub_80AB70C(u8 *); +void sub_80AB960(u8); +void sub_80AB9A0(u8); +void sub_80ABAAC(void); +void sub_80ABAC4(void); +void sub_80ABB70(u8); +u8 sub_80AE858(void); +u8 sub_80AE8B4(void); +void sub_80AEB30(void); +void sub_80AF860(void); +void sub_80AFA5C(void); +void sub_80AFE30(void); +void sub_80B0034(void); +void sub_80B00C8(void); +void sub_80B0324(void); +void sub_80B0518(void); +void sub_80B1118(void); +void sub_80B159C(void); +void sub_80B1B14(void); +void sub_80B2184(void); +void sub_80B2280(void); +void sub_80B292C(void); + +void nullsub_89(u8 taskId) +{ +} + +void ResetLinkContestBoolean(void) +{ + gIsLinkContest = FALSE; +} + +void sub_80AB1BC(void) +{ + u16 savedIme; + + REG_DISPCNT = 0x40; + savedIme = REG_IME; + REG_IME = 0; + REG_IE |= INTR_FLAG_VBLANK; + REG_IME = savedIme; + REG_DISPSTAT = 8; + REG_BG0CNT = 0x9800; + REG_BG1CNT = 0x9E09; + REG_BG2CNT = 0x9C00; + REG_BG3CNT = 0x3A03; + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BLDY = 0; + REG_WININ = 0x3F3F; + REG_WINOUT = 0x3F3F; + REG_DISPCNT |= 0x7F00; + + gUnknown_030042A4 = 0; + gUnknown_030042A0 = 0; + gUnknown_030042C0 = 0; + gUnknown_030041B4 = 0; + gUnknown_03004288 = 0; + gUnknown_03004280 = 0; + gUnknown_030041B0 = 0; + gUnknown_030041B8 = 0; + gUnknown_030042C4 = 0; + gUnknown_03004240 = 0; + gUnknown_03004200 = 0; + gUnknown_03004244 = 0; +} + +void sub_80AB2AC(void) +{ + s32 i; + + LZDecompressVram(gContestMiscGfx, (void *)VRAM); + LZDecompressVram(gContestAudienceGfx, (void *)(VRAM + 0x2000)); + LZDecompressVram(gUnknown_08D1725C, (void *)(VRAM + 0xD000)); + LoadCompressedPalette(gUnknown_08D17144, 0, 0x200); + sub_80AB350(); + for (i = 0; i < 4; i++) + { + u32 var = 5 + i; + + LoadPalette(shared18000.unk18004[var], 16 * (5 + gUnknown_02038696[i]), 16 * sizeof(u16)); + } +} + +void sub_80AB320(void) +{ + SetUpWindowConfig(&gWindowConfig_81E6FD8); + InitWindowFromConfig(&gUnknown_03004210, &gWindowConfig_81E6FD8); + InitWindowFromConfig(&gMenuWindow, &gWindowConfig_81E6FF4); +} + +void sub_80AB350(void) +{ + u8 i; + + LoadFontDefaultPalette(&gWindowConfig_81E6FD8); + FillPalette(0, 0, 2); + for (i = 10; i < 14; i++) + LoadPalette(gPlttBufferUnfaded + 241, 240 + i, 2); + FillPalette(0x7E3F, 0xF3, 2); +} + +void sub_80AB398(void) +{ + s32 i; + + memset(&shared19204, 0, sizeof(shared19204)); // TODO: How is this struct divided? + for (i = 0; i < 4; i++) + shared19204.unk19206[i] = 0xFF; + for (i = 0; i < 4; i++) + memset(&shared19260.unk19260[i], 0, sizeof(shared19260.unk19260[i])); + for (i = 0; i < 4; i++) + { + shared19260.unk19260[i].unkB_0 = 0; + shared19260.unk19260[i].unk13 = 0xFF; + shared19260.unk19260[i].unk14 = 0xFF; + } + memset(&shared19260.unk192D0, 0, sizeof(shared19260.unk192D0)); + memset(&shared19260.unk192E4, 0, sizeof(shared19260.unk192E4)); + memset(&shared19260.unk19328, 0, sizeof(shared19260.unk19328)); + memset(&shared19260.unk19338, 0, sizeof(shared19260.unk19338)); + if (!(gIsLinkContest & 1)) // wat? + sub_80B0F28(0); + for (i = 0; i < 4; i++) + { + shared19260.unk19260[i].unk19 = 0xFF; + shared19204.unk19218[i] = gUnknown_02038696[i]; + } + sub_80B159C(); +} + +void sub_80AB47C(void) +{ + switch (gMain.state) + { + case 0: + SetVBlankCallback(NULL); + sub_80AB320(); + sub_80AB1BC(); + dp12_8087EA4(); + ResetPaletteFade(); + gPaletteFade.bufferTransferDisabled = TRUE; + { + u8 *dest = (void *)VRAM; + u32 size = 0x18000; + while (1) + { + DmaFill32(3, 0, dest, 0x1000); + dest += 0x1000; + size -= 0x1000; + if (size <= 0x1000) + { + DmaFill32(3, 0, dest, size); + break; + } + } + } + ResetSpriteData(); + ResetTasks(); + FreeAllSpritePalettes(); + gReservedSpritePaletteCount = 4; + //shared18000.unk18000 = 0; + gSharedMem[0x18000] = 0; + ClearBattleMonForms(); + sub_80AB398(); + gMain.state++; + break; + case 1: + sub_80AB350(); + gMain.state++; + break; + case 2: + if (sub_80AB70C(shared19204.unk1925D) == 0) + break; + shared19204.unk1925D[0] = 0; + gMain.state++; + break; + case 3: + sub_80B2184(); + gUnknown_030042C0 = 0; + gUnknown_030041B4 = 0; + BeginFastPaletteFade(2); + gPaletteFade.bufferTransferDisabled = FALSE; + SetVBlankCallback(sub_80ABAC4); + shared19204.unk1920C = CreateTask(sub_80AB5D4, 10); + SetMainCallback2(sub_80ABAAC); + break; + } +} + +void sub_80AB5D4(u8 taskId) +{ + if (!gPaletteFade.active) + gTasks[taskId].func = sub_80AB604; +} + +void sub_80AB604(u8 taskId) +{ + if (gIsLinkContest & 1) // wat? + { + if (!gPaletteFade.active) + { + gPaletteFade.bufferTransferDisabled = FALSE; + sub_80AF860(); + CreateTask(sub_80AB678, 0); + gTasks[taskId].func = nullsub_89; + } + } + else + { + gTasks[taskId].func = sub_80AB960; + } +} + +void sub_80AB678(u8 taskId) +{ + SetTaskFuncWithFollowupFunc(taskId, sub_80C89DC, sub_80AB694); +} + +void sub_80AB694(u8 taskId) +{ + u16 one = 1; + + gTasks[taskId].data[0] = one; + gTasks[taskId].func = sub_80AB6B4; +} + +void sub_80AB6B4(u8 taskId) +{ + gTasks[taskId].data[0]--; + if (gTasks[taskId].data[0] <= 0) + { + GetMultiplayerId(); // unused return value + DestroyTask(taskId); + gTasks[shared19204.unk1920C].func = sub_80AB960; + gRngValue = gUnknown_03005D28; + } +} + +u8 sub_80AB70C(u8 *a) +{ + u16 sp0[16]; + u16 sp20[16]; + + switch (*a) + { + case 0: + gPaletteFade.bufferTransferDisabled = TRUE; + { + u8 *dest = (void *)VRAM; + u32 size = 0x18000; + while (1) + { + DmaFill32(3, 0, dest, 0x1000); + dest += 0x1000; + size -= 0x1000; + if (size <= 0x1000) + { + DmaFill32(3, 0, dest, size); + break; + } + } + } + break; + case 1: + LZDecompressVram(gContestMiscGfx, (void *)VRAM); + break; + case 2: + LZDecompressVram(gContestAudienceGfx, (void *)(VRAM + 0x2000)); + DmaCopyLarge32(3, (void *)(VRAM + 0x2000), shared15800, 0x2000, 0x1000); + break; + case 3: + LZDecompressVram(gUnknown_08D1725C, (void *)(VRAM + 0xD000)); + break; + case 4: + LZDecompressVram(gUnknown_08D17424, (void *)(VRAM + 0xE000)); + //DmaCopy32(3, (void *)(VRAM + 0xE000), shared18000.unk18A04, 0x800); + //asm(""); + { + void *src = (void *)(VRAM + 0xE000); + void *dest = shared18000.unk18A04; + DmaCopy32(3, src, dest, 0x800); + } + break; + case 5: + LoadCompressedPalette(gUnknown_08D17144, 0, 0x200); + CpuCopy32(gPlttBufferUnfaded + 128, sp0, 16 * sizeof(u16)); + CpuCopy32(gPlttBufferUnfaded + (5 + gContestPlayerMonIndex) * 16, sp20, 16 * sizeof(u16)); + CpuCopy32(sp20, gPlttBufferUnfaded + 128, 16 * sizeof(u16)); + CpuCopy32(sp0, gPlttBufferUnfaded + (5 + gContestPlayerMonIndex) * 16, 16 * sizeof(u16)); + { + void *src = gPlttBufferUnfaded; + void *dest = shared18000.unk18004; + DmaCopy32(3, src, dest, 0x200); + } + sub_80AB350(); + break; + case 6: + sub_80B1118(); + sub_80AFA5C(); + sub_80AEB30(); + shared19204.unk19216 = sub_80AE8B4(); + sub_80AFE30(); + sub_80B0034(); + sub_80B00C8(); + sub_80B0324(); + sub_80B0518(); + gBanksBySide[0] = 0; + gBanksBySide[1] = 1; + gBanksBySide[2] = 3; + gBanksBySide[3] = 2; + gBattleTypeFlags = 0; + gBankAttacker = 2; + gBankTarget = 3; + gObjectBankIDs[gBankAttacker] = sub_80AE858(); + sub_80B292C(); + break; + default: + *a = 0; + return 1; + } + + (*a)++; + return 0; +} + +void sub_80AB960(u8 taskId) +{ + gPaletteFade.bufferTransferDisabled = FALSE; + if (!gPaletteFade.active) + { + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = 0; + gTasks[taskId].func = sub_80AB9A0; + } +} + +void sub_80AB9A0(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + case 0: + if (gTasks[taskId].data[1]++ <= 60) + break; + gTasks[taskId].data[1] = 0; + PlaySE12WithPanning(SE_C_MAKU_U, 0); + gTasks[taskId].data[0]++; + break; + case 1: + gUnknown_030041B4 += 7; + if (gUnknown_030041B4 <= 160) + break; + gTasks[taskId].data[0]++; + break; + case 2: + sub_80B2280(); + gTasks[taskId].data[0]++; + break; + case 3: + REG_BG0CNT_BITFIELD.priority = 0; + REG_BG2CNT_BITFIELD.priority = 0; + sub_80B1B14(); + gTasks[taskId].data[0]++; + break; + case 4: + default: + if (shared19204.unk1920A & 0x40) + break; + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = 0; + gTasks[taskId].func = sub_80ABB70; + break; + } +} |