diff options
author | Marijn van der Werf <marijn.vanderwerf@gmail.com> | 2016-12-13 23:01:24 +0100 |
---|---|---|
committer | Marijn van der Werf <marijn.vanderwerf@gmail.com> | 2017-01-06 04:06:24 +0100 |
commit | 076d9e8deffa269c19829ef8c82a546035e65f25 (patch) | |
tree | 82a1f879870656e094ed78ca7c8c54e778ac2129 | |
parent | 2bf932b4f0fdfc821396b58250c02fc4eabf47e7 (diff) |
Contest painting
-rw-r--r-- | asm/contest_painting.s | 1293 | ||||
-rw-r--r-- | data/data_83760F0.s | 49 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | shared_syms.txt | 1 | ||||
-rw-r--r-- | src/contest_painting.c | 1353 |
5 files changed, 1374 insertions, 1324 deletions
diff --git a/asm/contest_painting.s b/asm/contest_painting.s deleted file mode 100644 index ef4d35b8d..000000000 --- a/asm/contest_painting.s +++ /dev/null @@ -1,1293 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_8106630 -sub_8106630: @ 8106630 - push {r4-r7,lr} - ldr r2, _0810665C @ =0x02015de0 - subs r4, r2, 0x2 - subs r5, r2, 0x1 - ldr r3, _08106660 @ =gSaveBlock1 - subs r0, 0x1 - lsls r1, r0, 5 - adds r1, r3 - ldr r3, _08106664 @ =0x00002dfc - adds r1, r3 - ldm r1!, {r3,r6,r7} - stm r2!, {r3,r6,r7} - ldm r1!, {r3,r6,r7} - stm r2!, {r3,r6,r7} - ldm r1!, {r6,r7} - stm r2!, {r6,r7} - strb r0, [r4] - movs r0, 0 - strb r0, [r5] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0810665C: .4byte 0x02015de0 -_08106660: .4byte gSaveBlock1 -_08106664: .4byte 0x00002dfc - thumb_func_end sub_8106630 - - thumb_func_start CB2_ContestPainting -CB2_ContestPainting: @ 8106668 - push {lr} - bl ShowContestPainting - pop {r0} - bx r0 - thumb_func_end CB2_ContestPainting - - thumb_func_start ShowContestPainting -ShowContestPainting: @ 8106674 - push {r4-r7,lr} - sub sp, 0x4 - ldr r1, _08106694 @ =gMain - ldr r2, _08106698 @ =0x0000043c - adds r0, r1, r2 - ldrb r0, [r0] - adds r4, r1, 0 - cmp r0, 0x4 - bls _08106688 - b _081067E0 -_08106688: - lsls r0, 2 - ldr r1, _0810669C @ =_081066A0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08106694: .4byte gMain -_08106698: .4byte 0x0000043c -_0810669C: .4byte _081066A0 - .align 2, 0 -_081066A0: - .4byte _081066B4 - .4byte _081066D8 - .4byte _08106734 - .4byte _0810675C - .4byte _0810678C -_081066B4: - bl remove_some_task - movs r0, 0 - bl SetVBlankCallback - ldr r1, _081066D0 @ =gUnknown_03005E8C - ldr r0, _081066D4 @ =0x02015de0 - str r0, [r1] - movs r0, 0x1 - bl ContestPaintingInitVars - bl ContestPaintingInitBG - b _0810676E - .align 2, 0 -_081066D0: .4byte gUnknown_03005E8C -_081066D4: .4byte 0x02015de0 -_081066D8: - bl ResetPaletteFade - movs r2, 0xC0 - lsls r2, 19 - movs r3, 0xC0 - lsls r3, 9 - movs r5, 0 - ldr r1, _08106724 @ =0x040000d4 - movs r4, 0x80 - lsls r4, 5 - ldr r6, _08106728 @ =0x85000400 - movs r7, 0x85 - lsls r7, 24 -_081066F2: - 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 _081066F2 - 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 - ldr r1, _0810672C @ =gMain - ldr r2, _08106730 @ =0x0000043c - adds r1, r2 - b _08106774 - .align 2, 0 -_08106724: .4byte 0x040000d4 -_08106728: .4byte 0x85000400 -_0810672C: .4byte gMain -_08106730: .4byte 0x0000043c -_08106734: - ldrh r0, [r4, 0x20] - bl SeedRng - bl InitKeys - ldr r0, _08106750 @ =0x02000000 - ldr r1, _08106754 @ =0x00015ddf - adds r0, r1 - ldrb r0, [r0] - bl ContestPaintingInitWindow - ldr r2, _08106758 @ =0x0000043c - adds r1, r4, r2 - b _08106774 - .align 2, 0 -_08106750: .4byte 0x02000000 -_08106754: .4byte 0x00015ddf -_08106758: .4byte 0x0000043c -_0810675C: - ldr r1, _0810677C @ =0x02000000 - ldr r2, _08106780 @ =0x00015dde - adds r0, r1, r2 - ldrb r0, [r0] - adds r2, 0x1 - adds r1, r2 - ldrb r1, [r1] - bl sub_8107090 -_0810676E: - ldr r1, _08106784 @ =gMain - ldr r0, _08106788 @ =0x0000043c - adds r1, r0 -_08106774: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _081067E0 - .align 2, 0 -_0810677C: .4byte 0x02000000 -_08106780: .4byte 0x00015dde -_08106784: .4byte gMain -_08106788: .4byte 0x0000043c -_0810678C: - ldr r1, _081067E8 @ =0x02000000 - ldr r2, _081067EC @ =0x00015dde - adds r0, r1, r2 - ldrb r0, [r0] - adds r2, 0x1 - adds r1, r2 - ldrb r1, [r1] - bl ContestPaintingPrintCaption - ldr r0, _081067F0 @ =gUnknown_083F6140 - movs r1, 0 - movs r2, 0x2 - bl LoadPalette - movs r1, 0xA0 - lsls r1, 19 - movs r4, 0 - str r4, [sp] - ldr r0, _081067F4 @ =0x040000d4 - mov r2, sp - str r2, [r0] - str r1, [r0, 0x4] - ldr r1, _081067F8 @ =0x85000100 - str r1, [r0, 0x8] - ldr r0, [r0, 0x8] - movs r0, 0x2 - bl BeginFastPaletteFade - ldr r0, _081067FC @ =VBlankCB_ContestPainting - bl SetVBlankCallback - ldr r0, _08106800 @ =gUnknown_03000750 - strb r4, [r0] - movs r1, 0x80 - lsls r1, 19 - movs r2, 0x9A - lsls r2, 5 - adds r0, r2, 0 - strh r0, [r1] - ldr r0, _08106804 @ =CB2_HoldContestPainting - bl SetMainCallback2 -_081067E0: - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081067E8: .4byte 0x02000000 -_081067EC: .4byte 0x00015dde -_081067F0: .4byte gUnknown_083F6140 -_081067F4: .4byte 0x040000d4 -_081067F8: .4byte 0x85000100 -_081067FC: .4byte VBlankCB_ContestPainting -_08106800: .4byte gUnknown_03000750 -_08106804: .4byte CB2_HoldContestPainting - thumb_func_end ShowContestPainting - - thumb_func_start CB2_HoldContestPainting -CB2_HoldContestPainting: @ 8106808 - push {lr} - bl HoldContestPainting - bl UpdatePaletteFade - pop {r0} - bx r0 - thumb_func_end CB2_HoldContestPainting - - thumb_func_start CB2_QuitContestPainting -CB2_QuitContestPainting: @ 8106818 - push {lr} - ldr r0, _08106828 @ =gMain - ldr r0, [r0, 0x8] - bl SetMainCallback2 - pop {r0} - bx r0 - .align 2, 0 -_08106828: .4byte gMain - thumb_func_end CB2_QuitContestPainting - - thumb_func_start HoldContestPainting -HoldContestPainting: @ 810682C - push {lr} - sub sp, 0x4 - ldr r3, _08106844 @ =gUnknown_03000750 - ldrb r1, [r3] - cmp r1, 0x1 - beq _08106880 - cmp r1, 0x1 - bgt _08106848 - cmp r1, 0 - beq _0810684E - b _081068E6 - .align 2, 0 -_08106844: .4byte gUnknown_03000750 -_08106848: - cmp r1, 0x2 - beq _081068C0 - b _081068E6 -_0810684E: - ldr r0, _08106874 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0810685E - movs r0, 0x1 - strb r0, [r3] -_0810685E: - ldr r0, _08106878 @ =gUnknown_03000756 - ldrb r0, [r0] - cmp r0, 0 - beq _081068E6 - ldr r1, _0810687C @ =gUnknown_03000754 - ldrh r0, [r1] - cmp r0, 0 - beq _081068E6 - subs r0, 0x1 - b _081068E4 - .align 2, 0 -_08106874: .4byte gPaletteFade -_08106878: .4byte gUnknown_03000756 -_0810687C: .4byte gUnknown_03000754 -_08106880: - ldr r0, _081068B4 @ =gMain - ldrh r2, [r0, 0x2E] - ands r1, r2 - cmp r1, 0 - bne _08106892 - movs r0, 0x2 - ands r0, r2 - cmp r0, 0 - beq _081068A4 -_08106892: - movs r0, 0x2 - strb r0, [r3] - subs r0, 0x3 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade -_081068A4: - ldr r0, _081068B8 @ =gUnknown_03000756 - ldrb r0, [r0] - cmp r0, 0 - beq _081068E6 - ldr r1, _081068BC @ =gUnknown_03000754 - movs r0, 0 - b _081068E4 - .align 2, 0 -_081068B4: .4byte gMain -_081068B8: .4byte gUnknown_03000756 -_081068BC: .4byte gUnknown_03000754 -_081068C0: - ldr r0, _081068EC @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _081068D2 - ldr r0, _081068F0 @ =CB2_QuitContestPainting - bl SetMainCallback2 -_081068D2: - ldr r0, _081068F4 @ =gUnknown_03000756 - ldrb r0, [r0] - cmp r0, 0 - beq _081068E6 - ldr r1, _081068F8 @ =gUnknown_03000754 - ldrh r0, [r1] - cmp r0, 0x1D - bhi _081068E6 - adds r0, 0x1 -_081068E4: - strh r0, [r1] -_081068E6: - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_081068EC: .4byte gPaletteFade -_081068F0: .4byte CB2_QuitContestPainting -_081068F4: .4byte gUnknown_03000756 -_081068F8: .4byte gUnknown_03000754 - thumb_func_end HoldContestPainting - - thumb_func_start ContestPaintingInitWindow -ContestPaintingInitWindow: @ 81068FC - push {r4,lr} - ldr r4, _08106914 @ =gWindowConfig_81E7160 - adds r0, r4, 0 - bl InitMenuWindow - adds r0, r4, 0 - bl SetUpWindowConfig - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08106914: .4byte gWindowConfig_81E7160 - thumb_func_end ContestPaintingInitWindow - - thumb_func_start ContestPaintingPrintCaption -ContestPaintingPrintCaption: @ 8106918 - push {r4-r6,lr} - lsls r0, 24 - lsrs r3, r0, 24 - lsls r1, 24 - lsrs r1, 24 - cmp r1, 0x1 - beq _081069BE - ldr r2, _08106974 @ =gUnknown_03005E40 - ldr r6, _08106978 @ =gUnknown_03005E8C - ldr r0, [r6] - ldrb r0, [r0, 0xA] - cmp r3, 0x7 - bhi _08106988 - ldr r1, _0810697C @ =gUnknown_083F60AC - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - adds r0, r2, 0 - bl StringCopy - adds r2, r0, 0 - ldr r1, _08106980 @ =gContestText_ContestWinner - bl StringCopy - adds r2, r0, 0 - ldr r1, [r6] - adds r1, 0x16 - bl StringCopy - adds r2, r0, 0 - movs r0, 0xFC - strb r0, [r2] - movs r0, 0x16 - strb r0, [r2, 0x1] - adds r2, 0x2 - ldr r1, _08106984 @ =gOtherText_Unknown1 - adds r0, r2, 0 - bl StringCopy - adds r2, r0, 0 - ldr r1, [r6] - adds r1, 0xB - bl StringCopy10 - movs r1, 0x6 - b _081069AE - .align 2, 0 -_08106974: .4byte gUnknown_03005E40 -_08106978: .4byte gUnknown_03005E8C -_0810697C: .4byte gUnknown_083F60AC -_08106980: .4byte gContestText_ContestWinner -_08106984: .4byte gOtherText_Unknown1 -_08106988: - ldr r4, _081069C4 @ =gUnknown_083F60C0 - lsls r5, r0, 3 - adds r0, r5, r4 - ldr r1, [r0] - adds r0, r2, 0 - bl StringCopy - adds r2, r0, 0 - ldr r1, [r6] - adds r1, 0xB - bl StringCopy10 - adds r2, r0, 0 - adds r4, 0x4 - adds r5, r4 - ldr r1, [r5] - bl StringCopy - movs r1, 0x3 -_081069AE: - movs r2, 0xE - ldr r0, _081069C8 @ =gUnknown_03005E40 - lsls r1, 3 - adds r1, 0x1 - lsls r2, 3 - movs r3, 0x1 - bl MenuPrint_PixelCoords -_081069BE: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_081069C4: .4byte gUnknown_083F60C0 -_081069C8: .4byte gUnknown_03005E40 - thumb_func_end ContestPaintingPrintCaption - - thumb_func_start ContestPaintingInitBG -ContestPaintingInitBG: @ 81069CC - movs r0, 0x80 - lsls r0, 19 - movs r3, 0 - strh r3, [r0] - ldr r2, _081069FC @ =0x04000200 - ldrh r0, [r2] - movs r1, 0x1 - orrs r0, r1 - strh r0, [r2] - ldr r1, _08106A00 @ =REG_BG0CNT - ldr r2, _08106A04 @ =0x00000c42 - adds r0, r2, 0 - strh r0, [r1] - adds r1, 0x2 - ldr r2, _08106A08 @ =0x00000a45 - adds r0, r2, 0 - strh r0, [r1] - ldr r0, _08106A0C @ =REG_BLDCNT - strh r3, [r0] - adds r0, 0x2 - strh r3, [r0] - adds r0, 0x2 - strh r3, [r0] - bx lr - .align 2, 0 -_081069FC: .4byte 0x04000200 -_08106A00: .4byte REG_BG0CNT -_08106A04: .4byte 0x00000c42 -_08106A08: .4byte 0x00000a45 -_08106A0C: .4byte REG_BLDCNT - thumb_func_end ContestPaintingInitBG - - thumb_func_start ContestPaintingInitVars -ContestPaintingInitVars: @ 8106A10 - push {lr} - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - bne _08106A34 - ldr r0, _08106A28 @ =gUnknown_03000756 - strb r1, [r0] - ldr r0, _08106A2C @ =gUnknown_03000752 - strh r1, [r0] - ldr r0, _08106A30 @ =gUnknown_03000754 - strh r1, [r0] - b _08106A46 - .align 2, 0 -_08106A28: .4byte gUnknown_03000756 -_08106A2C: .4byte gUnknown_03000752 -_08106A30: .4byte gUnknown_03000754 -_08106A34: - ldr r1, _08106A4C @ =gUnknown_03000756 - movs r0, 0x1 - strb r0, [r1] - ldr r1, _08106A50 @ =gUnknown_03000752 - movs r0, 0xF - strh r0, [r1] - ldr r1, _08106A54 @ =gUnknown_03000754 - movs r0, 0x1E - strh r0, [r1] -_08106A46: - pop {r0} - bx r0 - .align 2, 0 -_08106A4C: .4byte gUnknown_03000756 -_08106A50: .4byte gUnknown_03000752 -_08106A54: .4byte gUnknown_03000754 - thumb_func_end ContestPaintingInitVars - - thumb_func_start ContestPaintingMosaic -ContestPaintingMosaic: @ 8106A58 - push {lr} - ldr r0, _08106A68 @ =gUnknown_03000756 - ldrb r1, [r0] - cmp r1, 0 - bne _08106A70 - ldr r0, _08106A6C @ =REG_MOSAIC - strh r1, [r0] - b _08106A92 - .align 2, 0 -_08106A68: .4byte gUnknown_03000756 -_08106A6C: .4byte REG_MOSAIC -_08106A70: - ldr r1, _08106A98 @ =REG_BG1CNT - ldr r2, _08106A9C @ =0x00000a45 - adds r0, r2, 0 - strh r0, [r1] - ldr r2, _08106AA0 @ =gUnknown_03000752 - ldr r0, _08106AA4 @ =gUnknown_03000754 - ldrh r1, [r0] - lsrs r1, 1 - strh r1, [r2] - ldr r3, _08106AA8 @ =REG_MOSAIC - lsls r0, r1, 12 - lsls r2, r1, 8 - orrs r0, r2 - lsls r2, r1, 4 - orrs r0, r2 - orrs r0, r1 - strh r0, [r3] -_08106A92: - pop {r0} - bx r0 - .align 2, 0 -_08106A98: .4byte REG_BG1CNT -_08106A9C: .4byte 0x00000a45 -_08106AA0: .4byte gUnknown_03000752 -_08106AA4: .4byte gUnknown_03000754 -_08106AA8: .4byte REG_MOSAIC - thumb_func_end ContestPaintingMosaic - - thumb_func_start VBlankCB_ContestPainting -VBlankCB_ContestPainting: @ 8106AAC - push {lr} - bl ContestPaintingMosaic - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end VBlankCB_ContestPainting - - thumb_func_start sub_8106AC4 -sub_8106AC4: @ 8106AC4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0xC - adds r4, r1, 0 - lsls r0, 16 - lsrs r6, r0, 16 - lsls r4, 24 - lsrs r4, 24 - ldr r7, _08106B28 @ =gUnknown_03005E8C - ldr r0, [r7] - ldr r1, [r0, 0x4] - ldr r2, [r0] - adds r0, r6, 0 - bl species_and_otid_get_pal - ldr r1, _08106B2C @ =gUnknown_03005E90 - mov r8, r1 - ldr r1, [r1] - bl LZDecompressVram - cmp r4, 0 - bne _08106B40 - lsls r0, r6, 3 - ldr r1, _08106B30 @ =gMonFrontPicTable - adds r0, r1 - ldr r1, _08106B34 @ =gMonFrontPicCoords - lsls r2, r6, 2 - adds r2, r1 - ldrb r1, [r2] - ldrb r2, [r2, 0x1] - movs r3, 0x80 - lsls r3, 18 - ldr r4, _08106B38 @ =gUnknown_081FAF4C - ldr r5, [r4, 0x4] - str r5, [sp] - str r6, [sp, 0x4] - ldr r4, [r7] - ldr r4, [r4] - str r4, [sp, 0x8] - bl HandleLoadSpecialPokePic - mov r2, r8 - ldr r1, [r2] - ldr r0, _08106B3C @ =gUnknown_03005E10 - ldr r2, [r0] - adds r0, r5, 0 - bl sub_8106B90 - b _08106B74 - .align 2, 0 -_08106B28: .4byte gUnknown_03005E8C -_08106B2C: .4byte gUnknown_03005E90 -_08106B30: .4byte gMonFrontPicTable -_08106B34: .4byte gMonFrontPicCoords -_08106B38: .4byte gUnknown_081FAF4C -_08106B3C: .4byte gUnknown_03005E10 -_08106B40: - lsls r0, r6, 3 - ldr r1, _08106B80 @ =gMonBackPicTable - adds r0, r1 - ldr r1, _08106B84 @ =gMonBackPicCoords - lsls r2, r6, 2 - adds r2, r1 - ldrb r1, [r2] - ldrb r2, [r2, 0x1] - movs r3, 0x80 - lsls r3, 18 - ldr r4, _08106B88 @ =gUnknown_081FAF4C - ldr r5, [r4] - str r5, [sp] - str r6, [sp, 0x4] - ldr r4, [r7] - ldr r4, [r4] - str r4, [sp, 0x8] - bl HandleLoadSpecialPokePic - mov r0, r8 - ldr r1, [r0] - ldr r0, _08106B8C @ =gUnknown_03005E10 - ldr r2, [r0] - adds r0, r5, 0 - bl sub_8106B90 -_08106B74: - add sp, 0xC - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08106B80: .4byte gMonBackPicTable -_08106B84: .4byte gMonBackPicCoords -_08106B88: .4byte gUnknown_081FAF4C -_08106B8C: .4byte gUnknown_03005E10 - thumb_func_end sub_8106AC4 - - thumb_func_start sub_8106B90 -sub_8106B90: @ 8106B90 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - mov r10, r0 - mov r9, r1 - str r2, [sp] - movs r0, 0 -_08106BA4: - movs r3, 0 - adds r1, r0, 0x1 - str r1, [sp, 0x4] - lsls r0, 3 - str r0, [sp, 0x8] -_08106BAE: - movs r1, 0 - adds r2, r3, 0x1 - mov r8, r2 - ldr r7, [sp, 0x8] - adds r0, r7, r3 - lsls r0, 5 - mov r12, r0 - lsls r4, r3, 3 -_08106BBE: - movs r3, 0 - lsls r0, r1, 2 - adds r6, r1, 0x1 - mov r2, r12 - adds r5, r2, r0 - ldr r7, [sp, 0x8] - adds r0, r7, r1 - lsls r0, 7 - ldr r1, [sp] - adds r2, r0, r1 -_08106BD2: - lsrs r0, r3, 1 - adds r0, r5, r0 - add r0, r10 - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r3 - cmp r0, 0 - beq _08106BE6 - lsrs r1, 4 - b _08106BEA -_08106BE6: - movs r0, 0xF - ands r1, r0 -_08106BEA: - cmp r1, 0 - bne _08106BFC - adds r0, r4, r3 - lsls r0, 1 - adds r0, r2 - movs r7, 0x80 - lsls r7, 8 - adds r1, r7, 0 - b _08106C08 -_08106BFC: - adds r0, r4, r3 - lsls r0, 1 - adds r0, r2 - lsls r1, 1 - add r1, r9 - ldrh r1, [r1] -_08106C08: - strh r1, [r0] - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, 0x7 - bls _08106BD2 - lsls r0, r6, 16 - lsrs r1, r0, 16 - cmp r1, 0x7 - bls _08106BBE - mov r1, r8 - lsls r0, r1, 16 - lsrs r3, r0, 16 - cmp r3, 0x7 - bls _08106BAE - ldr r2, [sp, 0x4] - lsls r0, r2, 16 - lsrs r0, 16 - cmp r0, 0x7 - bls _08106BA4 - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8106B90 - - thumb_func_start sub_8106C40 -sub_8106C40: @ 8106C40 - push {r4-r7,lr} - adds r4, r1, 0 - lsls r0, 24 - lsrs r5, r0, 24 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _08106C7C @ =gPictureFramePalettes - movs r2, 0x80 - lsls r2, 1 - movs r1, 0 - bl LoadPalette - cmp r4, 0x1 - beq _08106C5E - b _08106DB4 -_08106C5E: - ldr r0, _08106C80 @ =gUnknown_03005E8C - ldr r0, [r0] - ldrb r0, [r0, 0xA] - movs r1, 0x3 - bl __udivsi3 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x4 - bhi _08106D1C - lsls r0, 2 - ldr r1, _08106C84 @ =_08106C88 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08106C7C: .4byte gPictureFramePalettes -_08106C80: .4byte gUnknown_03005E8C -_08106C84: .4byte _08106C88 - .align 2, 0 -_08106C88: - .4byte _08106C9C - .4byte _08106CB4 - .4byte _08106CCC - .4byte _08106CE4 - .4byte _08106D08 -_08106C9C: - ldr r0, _08106CAC @ =gPictureFrameTiles_0 - movs r1, 0xC0 - lsls r1, 19 - bl RLUnCompVram - ldr r0, _08106CB0 @ =gPictureFrameTilemap_0 - b _08106CF0 - .align 2, 0 -_08106CAC: .4byte gPictureFrameTiles_0 -_08106CB0: .4byte gPictureFrameTilemap_0 -_08106CB4: - ldr r0, _08106CC4 @ =gPictureFrameTiles_1 - movs r1, 0xC0 - lsls r1, 19 - bl RLUnCompVram - ldr r0, _08106CC8 @ =gPictureFrameTilemap_1 - b _08106CF0 - .align 2, 0 -_08106CC4: .4byte gPictureFrameTiles_1 -_08106CC8: .4byte gPictureFrameTilemap_1 -_08106CCC: - ldr r0, _08106CDC @ =gPictureFrameTiles_2 - movs r1, 0xC0 - lsls r1, 19 - bl RLUnCompVram - ldr r0, _08106CE0 @ =gPictureFrameTilemap_2 - b _08106CF0 - .align 2, 0 -_08106CDC: .4byte gPictureFrameTiles_2 -_08106CE0: .4byte gPictureFrameTilemap_2 -_08106CE4: - ldr r0, _08106CFC @ =gPictureFrameTiles_3 - movs r1, 0xC0 - lsls r1, 19 - bl RLUnCompVram - ldr r0, _08106D00 @ =gPictureFrameTilemap_3 -_08106CF0: - ldr r1, _08106D04 @ =gUnknown_03005E10 - ldr r1, [r1] - bl RLUnCompWram - b _08106D1C - .align 2, 0 -_08106CFC: .4byte gPictureFrameTiles_3 -_08106D00: .4byte gPictureFrameTilemap_3 -_08106D04: .4byte gUnknown_03005E10 -_08106D08: - ldr r0, _08106D98 @ =gPictureFrameTiles_4 - movs r1, 0xC0 - lsls r1, 19 - bl RLUnCompVram - ldr r0, _08106D9C @ =gPictureFrameTilemap_4 - ldr r1, _08106DA0 @ =gUnknown_03005E10 - ldr r1, [r1] - bl RLUnCompWram -_08106D1C: - movs r1, 0 - ldr r5, _08106DA4 @ =0x06006000 - ldr r0, _08106DA8 @ =0x00001015 - adds r4, r0, 0 -_08106D24: - movs r3, 0 - lsls r2, r1, 5 -_08106D28: - adds r0, r2, r3 - lsls r0, 1 - adds r0, r5 - strh r4, [r0] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x1F - bls _08106D28 - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x13 - bls _08106D24 - movs r1, 0 - ldr r0, _08106DAC @ =0x0600608c - mov r12, r0 - ldr r7, _08106DA0 @ =gUnknown_03005E10 -_08106D4C: - movs r3, 0 - adds r6, r1, 0x1 - lsls r5, r1, 5 - lsls r4, r1, 6 -_08106D54: - adds r2, r5, r3 - lsls r2, 1 - add r2, r12 - ldr r0, [r7] - adds r0, r4, r0 - lsls r1, r3, 1 - adds r0, r1 - adds r0, 0x8C - ldrh r0, [r0] - strh r0, [r2] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x11 - bls _08106D54 - lsls r0, r6, 24 - lsrs r1, r0, 24 - cmp r1, 0x9 - bls _08106D4C - movs r3, 0 - ldr r4, _08106DB0 @ =0x0600608e - ldr r2, _08106DA0 @ =gUnknown_03005E10 -_08106D80: - lsls r1, r3, 1 - adds r1, r4 - ldr r0, [r2] - adds r0, 0x8E - ldrh r0, [r0] - strh r0, [r1] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0xF - bls _08106D80 - b _08106E86 - .align 2, 0 -_08106D98: .4byte gPictureFrameTiles_4 -_08106D9C: .4byte gPictureFrameTilemap_4 -_08106DA0: .4byte gUnknown_03005E10 -_08106DA4: .4byte 0x06006000 -_08106DA8: .4byte 0x00001015 -_08106DAC: .4byte 0x0600608c -_08106DB0: .4byte 0x0600608e -_08106DB4: - cmp r5, 0x7 - bhi _08106DD0 - ldr r0, _08106DC8 @ =gPictureFrameTiles_5 - movs r1, 0xC0 - lsls r1, 19 - bl RLUnCompVram - ldr r0, _08106DCC @ =gPictureFrameTilemap_5 - b _08106E60 - .align 2, 0 -_08106DC8: .4byte gPictureFrameTiles_5 -_08106DCC: .4byte gPictureFrameTilemap_5 -_08106DD0: - ldr r0, _08106DF0 @ =gUnknown_03005E8C - ldr r0, [r0] - ldrb r0, [r0, 0xA] - movs r1, 0x3 - bl __udivsi3 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x4 - bhi _08106E86 - lsls r0, 2 - ldr r1, _08106DF4 @ =_08106DF8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08106DF0: .4byte gUnknown_03005E8C -_08106DF4: .4byte _08106DF8 - .align 2, 0 -_08106DF8: - .4byte _08106E0C - .4byte _08106E24 - .4byte _08106E3C - .4byte _08106E54 - .4byte _08106E74 -_08106E0C: - ldr r0, _08106E1C @ =gPictureFrameTiles_0 - movs r1, 0xC0 - lsls r1, 19 - bl RLUnCompVram - ldr r0, _08106E20 @ =gPictureFrameTilemap_0 - b _08106E60 - .align 2, 0 -_08106E1C: .4byte gPictureFrameTiles_0 -_08106E20: .4byte gPictureFrameTilemap_0 -_08106E24: - ldr r0, _08106E34 @ =gPictureFrameTiles_1 - movs r1, 0xC0 - lsls r1, 19 - bl RLUnCompVram - ldr r0, _08106E38 @ =gPictureFrameTilemap_1 - b _08106E60 - .align 2, 0 -_08106E34: .4byte gPictureFrameTiles_1 -_08106E38: .4byte gPictureFrameTilemap_1 -_08106E3C: - ldr r0, _08106E4C @ =gPictureFrameTiles_2 - movs r1, 0xC0 - lsls r1, 19 - bl RLUnCompVram - ldr r0, _08106E50 @ =gPictureFrameTilemap_2 - b _08106E60 - .align 2, 0 -_08106E4C: .4byte gPictureFrameTiles_2 -_08106E50: .4byte gPictureFrameTilemap_2 -_08106E54: - ldr r0, _08106E68 @ =gPictureFrameTiles_3 - movs r1, 0xC0 - lsls r1, 19 - bl RLUnCompVram - ldr r0, _08106E6C @ =gPictureFrameTilemap_3 -_08106E60: - ldr r1, _08106E70 @ =0x06006000 - bl RLUnCompVram - b _08106E86 - .align 2, 0 -_08106E68: .4byte gPictureFrameTiles_3 -_08106E6C: .4byte gPictureFrameTilemap_3 -_08106E70: .4byte 0x06006000 -_08106E74: - ldr r0, _08106E8C @ =gPictureFrameTiles_4 - movs r1, 0xC0 - lsls r1, 19 - bl RLUnCompVram - ldr r0, _08106E90 @ =gPictureFrameTilemap_4 - ldr r1, _08106E94 @ =0x06006000 - bl RLUnCompVram -_08106E86: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08106E8C: .4byte gPictureFrameTiles_4 -_08106E90: .4byte gPictureFrameTilemap_4 -_08106E94: .4byte 0x06006000 - thumb_func_end sub_8106C40 - - thumb_func_start sub_8106E98 -sub_8106E98: @ 8106E98 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r4, _08106ED0 @ =gMain - ldr r1, _08106ED4 @ =gOamData_83F6138 - ldr r2, [r1, 0x4] - ldr r1, [r1] - str r1, [r4, 0x3C] - str r2, [r4, 0x40] - adds r3, r4, 0 - adds r3, 0x40 - ldrh r2, [r3] - ldr r1, _08106ED8 @ =0xfffffc00 - ands r1, r2 - strh r1, [r3] - ldrh r1, [r4, 0x3E] - ldr r0, _08106EDC @ =0xfffffe00 - ands r0, r1 - movs r1, 0x58 - orrs r0, r1 - strh r0, [r4, 0x3E] - adds r1, r4, 0 - adds r1, 0x3C - movs r0, 0x18 - strb r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08106ED0: .4byte gMain -_08106ED4: .4byte gOamData_83F6138 -_08106ED8: .4byte 0xfffffc00 -_08106EDC: .4byte 0xfffffe00 - thumb_func_end sub_8106E98 - - thumb_func_start sub_8106EE0 -sub_8106EE0: @ 8106EE0 - push {lr} - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x7 - bhi _08106EF8 - ldr r0, _08106EF4 @ =gUnknown_03005E8C - ldr r0, [r0] - ldrb r0, [r0, 0xA] - b _08106F08 - .align 2, 0 -_08106EF4: .4byte gUnknown_03005E8C -_08106EF8: - ldr r0, _08106F18 @ =gUnknown_03005E8C - ldr r0, [r0] - ldrb r0, [r0, 0xA] - movs r1, 0x3 - bl __udivsi3 - lsls r0, 24 - lsrs r0, 24 -_08106F08: - cmp r0, 0x4 - bhi _08106F46 - lsls r0, 2 - ldr r1, _08106F1C @ =_08106F20 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08106F18: .4byte gUnknown_03005E8C -_08106F1C: .4byte _08106F20 - .align 2, 0 -_08106F20: - .4byte _08106F34 - .4byte _08106F38 - .4byte _08106F3C - .4byte _08106F40 - .4byte _08106F44 -_08106F34: - movs r0, 0x9 - b _08106F46 -_08106F38: - movs r0, 0xD - b _08106F46 -_08106F3C: - movs r0, 0x2 - b _08106F46 -_08106F40: - movs r0, 0x24 - b _08106F46 -_08106F44: - movs r0, 0x6 -_08106F46: - pop {r1} - bx r1 - thumb_func_end sub_8106EE0 - - thumb_func_start sub_8106F4C -sub_8106F4C: @ 8106F4C - ldr r0, _08106F5C @ =gUnknown_03005E90 - ldr r1, _08106F60 @ =0x02017e00 - str r1, [r0] - ldr r0, _08106F64 @ =gUnknown_03005E10 - ldr r2, _08106F68 @ =0xffffe000 - adds r1, r2 - str r1, [r0] - bx lr - .align 2, 0 -_08106F5C: .4byte gUnknown_03005E90 -_08106F60: .4byte 0x02017e00 -_08106F64: .4byte gUnknown_03005E10 -_08106F68: .4byte 0xffffe000 - thumb_func_end sub_8106F4C - - thumb_func_start sub_8106F6C -sub_8106F6C: @ 8106F6C - push {r4,lr} - lsls r0, 24 - lsrs r3, r0, 24 - ldr r1, _08106FAC @ =gUnknown_03005E20 - ldr r0, _08106FB0 @ =gUnknown_03005E10 - ldr r0, [r0] - str r0, [r1, 0x4] - ldr r0, _08106FB4 @ =gUnknown_03005E90 - ldr r0, [r0] - str r0, [r1, 0x8] - movs r2, 0 - strb r2, [r1, 0x18] - ldr r0, _08106FB8 @ =gUnknown_03005E8C - ldr r0, [r0] - ldrb r0, [r0] - strb r0, [r1, 0x1F] - strb r2, [r1, 0x19] - strb r2, [r1, 0x1A] - movs r0, 0x40 - strb r0, [r1, 0x1B] - strb r0, [r1, 0x1C] - strb r0, [r1, 0x1D] - strb r0, [r1, 0x1E] - subs r0, r3, 0x2 - adds r4, r1, 0 - cmp r0, 0x22 - bhi _08107050 - lsls r0, 2 - ldr r1, _08106FBC @ =_08106FC0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08106FAC: .4byte gUnknown_03005E20 -_08106FB0: .4byte gUnknown_03005E10 -_08106FB4: .4byte gUnknown_03005E90 -_08106FB8: .4byte gUnknown_03005E8C -_08106FBC: .4byte _08106FC0 - .align 2, 0 -_08106FC0: - .4byte _08107050 - .4byte _08107050 - .4byte _08107050 - .4byte _08107050 - .4byte _0810704C - .4byte _08107050 - .4byte _08107050 - .4byte _08107050 - .4byte _08107050 - .4byte _08107050 - .4byte _08107050 - .4byte _08107050 - .4byte _08107050 - .4byte _08107050 - .4byte _08107050 - .4byte _08107050 - .4byte _08107050 - .4byte _08107050 - .4byte _08107050 - .4byte _08107050 - .4byte _08107050 - .4byte _08107050 - .4byte _08107050 - .4byte _08107050 - .4byte _08107050 - .4byte _08107050 - .4byte _08107050 - .4byte _08107050 - .4byte _08107050 - .4byte _08107050 - .4byte _08107050 - .4byte _08107050 - .4byte _08107050 - .4byte _08107050 - .4byte _0810704C -_0810704C: - movs r0, 0x3 - b _08107052 -_08107050: - movs r0, 0x1 -_08107052: - strh r0, [r4, 0x14] - movs r0, 0x2 - strh r0, [r4, 0x16] - strb r3, [r4] - ldr r0, _08107088 @ =0x06010000 - str r0, [r4, 0x10] - adds r0, r4, 0 - bl sub_80FC7A0 - adds r0, r4, 0 - bl sub_80FDA18 - adds r0, r4, 0 - bl sub_80FD8CC - ldr r0, _0810708C @ =gUnknown_03005E90 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 1 - movs r2, 0x80 - lsls r2, 2 - bl LoadPalette - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08107088: .4byte 0x06010000 -_0810708C: .4byte gUnknown_03005E90 - thumb_func_end sub_8106F6C - - thumb_func_start sub_8107090 -sub_8107090: @ 8107090 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - lsls r4, 24 - lsrs r4, 24 - lsls r5, 24 - lsrs r5, 24 - bl sub_8106F4C - ldr r0, _081070D0 @ =gUnknown_03005E8C - ldr r0, [r0] - ldrh r0, [r0, 0x8] - movs r1, 0 - bl sub_8106AC4 - adds r0, r4, 0 - bl sub_8106EE0 - lsls r0, 24 - lsrs r0, 24 - bl sub_8106F6C - adds r0, r4, 0 - bl sub_8106E98 - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_8106C40 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_081070D0: .4byte gUnknown_03005E8C - thumb_func_end sub_8107090 - - .align 2, 0 @ Don't pad with nop. diff --git a/data/data_83760F0.s b/data/data_83760F0.s index 631623864..a3303a026 100644 --- a/data/data_83760F0.s +++ b/data/data_83760F0.s @@ -15212,36 +15212,25 @@ gUnknown_083F60AC:: @ 83F60AC .align 2 gUnknown_083F60C0:: @ 83F60C0 - .4byte OtherText_NonstopSuperCool - .4byte OtherText_Terminator6 - .4byte OtherText_GoodLookingPoke - .4byte OtherText_Terminator7 - .4byte OtherText_MarvelousGreat - .4byte OtherText_Terminator8 - .4byte OtherText_CenturyLastVenus - .4byte OtherText_Terminator9 - .4byte OtherText_Terminator10 - .4byte OtherText_DazzlingSlime - .4byte OtherText_PokeCenterIdol - .4byte OtherText_Terminator11 - .4byte OtherText_LovelyAndSweet - .4byte OtherText_Terminator12 - .4byte OtherText_ThePretty - .4byte OtherText_WinningPortrait - .4byte OtherText_GiveUsWink - .4byte OtherText_Terminator13 - .4byte OtherText_SmartnessMaestro - .4byte OtherText_Terminator15 - .4byte OtherText_ChosenPokeAmong - .4byte OtherText_Terminator15 - .4byte OtherText_TheExcellent - .4byte OtherText_ItsMomentOfElegance - .4byte OtherText_PowerfullyMuscular - .4byte OtherText_Terminator16 - .4byte OtherText_StrongErEst - .4byte OtherText_Terminator17 - .4byte OtherText_MightyTough - .4byte OtherText_Exclamation + .4byte OtherText_NonstopSuperCool, OtherText_Terminator6 + .4byte OtherText_GoodLookingPoke, OtherText_Terminator7 + .4byte OtherText_MarvelousGreat, OtherText_Terminator8 + + .4byte OtherText_CenturyLastVenus, OtherText_Terminator9 + .4byte OtherText_Terminator10, OtherText_DazzlingSlime + .4byte OtherText_PokeCenterIdol, OtherText_Terminator11 + + .4byte OtherText_LovelyAndSweet, OtherText_Terminator12 + .4byte OtherText_ThePretty, OtherText_WinningPortrait + .4byte OtherText_GiveUsWink, OtherText_Terminator13 + + .4byte OtherText_SmartnessMaestro, OtherText_Terminator15 + .4byte OtherText_ChosenPokeAmong, OtherText_Terminator15 + .4byte OtherText_TheExcellent, OtherText_ItsMomentOfElegance + + .4byte OtherText_PowerfullyMuscular, OtherText_Terminator16 + .4byte OtherText_StrongErEst, OtherText_Terminator17 + .4byte OtherText_MightyTough, OtherText_Exclamation .align 2 gOamData_83F6138:: @ 83F6138 diff --git a/ld_script.txt b/ld_script.txt index 6423e5d22..cf2f6e29a 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -191,7 +191,7 @@ SECTIONS { src/decoration.o(.text); asm/decoration.o(.text_80FE868); asm/slot_machine.o(.text); - asm/contest_painting.o(.text); + src/contest_painting.o(.text); src/battle_ai.o(.text); asm/battle_ai.o(.text); asm/trader.o(.text); diff --git a/shared_syms.txt b/shared_syms.txt index d805ebfde..523f1bd22 100644 --- a/shared_syms.txt +++ b/shared_syms.txt @@ -8,6 +8,7 @@ unk_2007900 = 0x2007900; unk_2008000 = 0x2008000; +unk_2015de0 = 0x2015de0; unk_2016000 = 0x2016000; unk_20160BC = 0x20160BC; diff --git a/src/contest_painting.c b/src/contest_painting.c new file mode 100644 index 000000000..2e8a73ec4 --- /dev/null +++ b/src/contest_painting.c @@ -0,0 +1,1353 @@ +#include "global.h" +#include "asm.h" +#include "decompress.h" +#include "main.h" +#include "menu.h" +#include "palette.h" +#include "rng.h" +#include "sprite.h" +#include "string_util.h" +#include "text.h" + +#define MOSAIC_BIT_BG_HSIZE (0) +#define MOSAIC_BIT_BG_VSIZE (4) +#define MOSAIC_BIT_OBJ_HSIZE (8) +#define MOSAIC_BIT_OBJ_VSIZE (12) + +enum { + CONTEST_COOL, + CONTEST_BEAUTY, + CONTEST_CUTE, + CONTEST_SMART, + CONTEST_TOUGH, +}; + +enum { + CONTESTRESULT_COOL = 9, + CONTESTRESULT_BEAUTY = 13, + CONTESTRESULT_CUTE = 2, + CONTESTRESULT_SMART = 36, + CONTESTRESULT_TOUGH = 6, +}; + +struct ContestEntry { + /* 0x00 */ u8 var0; + /* 0x04 */ u32 var4; + /* 0x08 */ u16 var8; + /* 0x0A */ u8 contestType; + /* 0x0B */ u8 pokemon_name[POKEMON_NAME_LENGTH]; + /* 0x15 */ u8 pad15; + /* 0x16 */ u8 trainer_name[OT_NAME_LENGTH]; +}; + +struct Unk3000756 { + /* 0x00 */ u8 var_0; +}; + +struct LabelPair { + u8 (*prefix)[]; + u8 (*suffix)[]; +}; + +struct Unk03005E20 { + u8 var_0; + u8 pad1[3]; + u16 (*var_4)[][32]; + u16 (*var_8)[]; + u8 pad0C[4]; + u32 var_10; + u16 var_14; + u16 var_16; + u8 var_18; + u8 var_19; + u8 var_1A; + u8 var_1B; + u8 var_1C; + u8 var_1D; + u8 var_1E; + u8 var_1F; +}; + +extern struct Unk03005E20 gUnknown_03005E20; +extern u16 (*gUnknown_03005E90)[]; + +extern u8 gUnknown_03005E40[]; + +extern u8 unk_2000000[]; +extern u8 unk_2015de0[]; +extern u16 gUnknown_03000752; +extern u16 gUnknown_03000754; +extern struct Unk3000756 gUnknown_03000756; +extern struct ContestEntry *gUnknown_03005E8C; + +extern u16 (*gUnknown_03005E10)[32][32]; + +extern const struct SpriteSheet gMonFrontPicTable[]; +extern const struct MonCoords gMonFrontPicCoords[]; +extern const struct SpriteSheet gMonBackPicTable[]; +extern const struct MonCoords gMonBackPicCoords[]; + +extern void *gUnknown_081FAF4C[]; + +extern u16 gPictureFramePalettes[]; + +extern u8 gPictureFrameTiles_0[]; +extern u8 gPictureFrameTiles_1[]; +extern u8 gPictureFrameTiles_2[]; +extern u8 gPictureFrameTiles_3[]; +extern u8 gPictureFrameTiles_4[]; +extern u8 gPictureFrameTiles_5[]; + +extern u8 gPictureFrameTilemap_0[]; +extern u8 gPictureFrameTilemap_1[]; +extern u8 gPictureFrameTilemap_2[]; +extern u8 gPictureFrameTilemap_3[]; +extern u8 gPictureFrameTilemap_4[]; +extern u8 gPictureFrameTilemap_5[]; + +extern u8 *gUnknown_083F60AC[]; +extern struct LabelPair gUnknown_083F60C0[]; +extern struct OamData gOamData_83F6138; +extern u16 gUnknown_083F6140[]; + +extern u8 gContestText_ContestWinner[]; +extern u8 gOtherText_Unknown1[]; + +void HoldContestPainting(void); +void ShowContestPainting(); +void ContestPaintingInitWindow(u8 arg0); +void ContestPaintingInitVars(u8 arg0); +void sub_8107090(u8 arg0, u8 arg1); +void ContestPaintingPrintCaption(u8 arg0, u8 arg1); +void ContestPaintingInitBG(void); +void CB2_HoldContestPainting(void); +void VBlankCB_ContestPainting(void); + +void sub_80FC7A0(struct Unk03005E20*); +void sub_80FDA18(struct Unk03005E20*); +void sub_80FD8CC(struct Unk03005E20*); +extern void *species_and_otid_get_pal(); +void sub_8106B90(); + +__attribute__((naked)) +void sub_8106630(u32 arg0) { + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + ldr r2, _0810665C @ =0x02015de0\n\ + subs r4, r2, 0x2\n\ + subs r5, r2, 0x1\n\ + ldr r3, _08106660 @ =gSaveBlock1\n\ + subs r0, 0x1\n\ + lsls r1, r0, 5\n\ + adds r1, r3\n\ + ldr r3, _08106664 @ =0x00002dfc\n\ + adds r1, r3\n\ + ldm r1!, {r3,r6,r7}\n\ + stm r2!, {r3,r6,r7}\n\ + ldm r1!, {r3,r6,r7}\n\ + stm r2!, {r3,r6,r7}\n\ + ldm r1!, {r6,r7}\n\ + stm r2!, {r6,r7}\n\ + strb r0, [r4]\n\ + movs r0, 0\n\ + strb r0, [r5]\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0810665C: .4byte 0x02015de0\n\ +_08106660: .4byte gSaveBlock1\n\ +_08106664: .4byte 0x00002dfc\n\ + .syntax divided\n"); +} + +void CB2_ContestPainting(void) { + ShowContestPainting(); +} + +#ifdef NONMATCHING +void ShowContestPainting(void) { + switch (gMain.state) { + case 0: + remove_some_task(); + SetVBlankCallback(NULL); + gUnknown_03005E8C->data = &unk_2015de0; + ContestPaintingInitVars(FALSE); + ContestPaintingInitBG(); + gMain.state += 1; + break; + + case 1: + ResetPaletteFade(); + + // DMA STUFF + + ResetSpriteData(); + gMain.state += 1; + break; + + case 2: + SeedRng(gMain.vblankCounter1); + InitKeys(); + ContestPaintingInitWindow(unk_2000000[0x15DDF]); + gMain.state += 1; + break; + + case 3: + sub_8107090(unk_2000000[0x15DDE], unk_2000000[0x15DDF]); + gMain.state += 1; + break; + + case 4: + ContestPaintingPrintCaption(unk_2000000[0x15DDE], unk_2000000[0x15DDF]); + LoadPalette(gUnknown_083F6140, 0, 1 * 2); + // DMA STUFF + BeginFastPaletteFade(2); + SetVBlankCallback(VBlankCB_ContestPainting); + REG_DISPCNT = DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_ON; + SetMainCallback2(CB2_HoldContestPainting); + break; + } +} +#else +__attribute__((naked)) +void ShowContestPainting(void) { + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + sub sp, 0x4\n\ + ldr r1, _08106694 @ =gMain\n\ + ldr r2, _08106698 @ =0x0000043c\n\ + adds r0, r1, r2\n\ + ldrb r0, [r0]\n\ + adds r4, r1, 0\n\ + cmp r0, 0x4\n\ + bls _08106688\n\ + b _081067E0\n\ +_08106688:\n\ + lsls r0, 2\n\ + ldr r1, _0810669C @ =_081066A0\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_08106694: .4byte gMain\n\ +_08106698: .4byte 0x0000043c\n\ +_0810669C: .4byte _081066A0\n\ + .align 2, 0\n\ +_081066A0:\n\ + .4byte _081066B4\n\ + .4byte _081066D8\n\ + .4byte _08106734\n\ + .4byte _0810675C\n\ + .4byte _0810678C\n\ +_081066B4:\n\ + bl remove_some_task\n\ + movs r0, 0\n\ + bl SetVBlankCallback\n\ + ldr r1, _081066D0 @ =gUnknown_03005E8C\n\ + ldr r0, _081066D4 @ =0x02015de0\n\ + str r0, [r1]\n\ + movs r0, 0x1\n\ + bl ContestPaintingInitVars\n\ + bl ContestPaintingInitBG\n\ + b _0810676E\n\ + .align 2, 0\n\ +_081066D0: .4byte gUnknown_03005E8C\n\ +_081066D4: .4byte 0x02015de0\n\ +_081066D8:\n\ + bl ResetPaletteFade\n\ + movs r2, 0xC0\n\ + lsls r2, 19\n\ + movs r3, 0xC0\n\ + lsls r3, 9\n\ + movs r5, 0\n\ + ldr r1, _08106724 @ =0x040000d4\n\ + movs r4, 0x80\n\ + lsls r4, 5\n\ + ldr r6, _08106728 @ =0x85000400\n\ + movs r7, 0x85\n\ + lsls r7, 24\n\ +_081066F2:\n\ + str r5, [sp]\n\ + mov r0, sp\n\ + str r0, [r1]\n\ + str r2, [r1, 0x4]\n\ + str r6, [r1, 0x8]\n\ + ldr r0, [r1, 0x8]\n\ + adds r2, r4\n\ + subs r3, r4\n\ + cmp r3, r4\n\ + bhi _081066F2\n\ + str r5, [sp]\n\ + mov r0, sp\n\ + str r0, [r1]\n\ + str r2, [r1, 0x4]\n\ + lsrs r0, r3, 2\n\ + orrs r0, r7\n\ + str r0, [r1, 0x8]\n\ + ldr r0, [r1, 0x8]\n\ + bl ResetSpriteData\n\ + ldr r1, _0810672C @ =gMain\n\ + ldr r2, _08106730 @ =0x0000043c\n\ + adds r1, r2\n\ + b _08106774\n\ + .align 2, 0\n\ +_08106724: .4byte 0x040000d4\n\ +_08106728: .4byte 0x85000400\n\ +_0810672C: .4byte gMain\n\ +_08106730: .4byte 0x0000043c\n\ +_08106734:\n\ + ldrh r0, [r4, 0x20]\n\ + bl SeedRng\n\ + bl InitKeys\n\ + ldr r0, _08106750 @ =0x02000000\n\ + ldr r1, _08106754 @ =0x00015ddf\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + bl ContestPaintingInitWindow\n\ + ldr r2, _08106758 @ =0x0000043c\n\ + adds r1, r4, r2\n\ + b _08106774\n\ + .align 2, 0\n\ +_08106750: .4byte 0x02000000\n\ +_08106754: .4byte 0x00015ddf\n\ +_08106758: .4byte 0x0000043c\n\ +_0810675C:\n\ + ldr r1, _0810677C @ =0x02000000\n\ + ldr r2, _08106780 @ =0x00015dde\n\ + adds r0, r1, r2\n\ + ldrb r0, [r0]\n\ + adds r2, 0x1\n\ + adds r1, r2\n\ + ldrb r1, [r1]\n\ + bl sub_8107090\n\ +_0810676E:\n\ + ldr r1, _08106784 @ =gMain\n\ + ldr r0, _08106788 @ =0x0000043c\n\ + adds r1, r0\n\ +_08106774:\n\ + ldrb r0, [r1]\n\ + adds r0, 0x1\n\ + strb r0, [r1]\n\ + b _081067E0\n\ + .align 2, 0\n\ +_0810677C: .4byte 0x02000000\n\ +_08106780: .4byte 0x00015dde\n\ +_08106784: .4byte gMain\n\ +_08106788: .4byte 0x0000043c\n\ +_0810678C:\n\ + ldr r1, _081067E8 @ =0x02000000\n\ + ldr r2, _081067EC @ =0x00015dde\n\ + adds r0, r1, r2\n\ + ldrb r0, [r0]\n\ + adds r2, 0x1\n\ + adds r1, r2\n\ + ldrb r1, [r1]\n\ + bl ContestPaintingPrintCaption\n\ + ldr r0, _081067F0 @ =gUnknown_083F6140\n\ + movs r1, 0\n\ + movs r2, 0x2\n\ + bl LoadPalette\n\ + movs r1, 0xA0\n\ + lsls r1, 19\n\ + movs r4, 0\n\ + str r4, [sp]\n\ + ldr r0, _081067F4 @ =0x040000d4\n\ + mov r2, sp\n\ + str r2, [r0]\n\ + str r1, [r0, 0x4]\n\ + ldr r1, _081067F8 @ =0x85000100\n\ + str r1, [r0, 0x8]\n\ + ldr r0, [r0, 0x8]\n\ + movs r0, 0x2\n\ + bl BeginFastPaletteFade\n\ + ldr r0, _081067FC @ =VBlankCB_ContestPainting\n\ + bl SetVBlankCallback\n\ + ldr r0, _08106800 @ =gUnknown_03000750\n\ + strb r4, [r0]\n\ + movs r1, 0x80\n\ + lsls r1, 19\n\ + movs r2, 0x9A\n\ + lsls r2, 5\n\ + adds r0, r2, 0\n\ + strh r0, [r1]\n\ + ldr r0, _08106804 @ =CB2_HoldContestPainting\n\ + bl SetMainCallback2\n\ +_081067E0:\n\ + add sp, 0x4\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_081067E8: .4byte 0x02000000\n\ +_081067EC: .4byte 0x00015dde\n\ +_081067F0: .4byte gUnknown_083F6140\n\ +_081067F4: .4byte 0x040000d4\n\ +_081067F8: .4byte 0x85000100\n\ +_081067FC: .4byte VBlankCB_ContestPainting\n\ +_08106800: .4byte gUnknown_03000750\n\ +_08106804: .4byte CB2_HoldContestPainting\n\ + .syntax divided\n"); +} + +#endif + +void CB2_HoldContestPainting(void) { + HoldContestPainting(); + UpdatePaletteFade(); +} + +void CB2_QuitContestPainting(void) { + SetMainCallback2(gMain.savedCallback); +} + +__attribute__((naked)) +void HoldContestPainting(void) { + asm(".syntax unified\n\ + push {lr}\n\ + sub sp, 0x4\n\ + ldr r3, _08106844 @ =gUnknown_03000750\n\ + ldrb r1, [r3]\n\ + cmp r1, 0x1\n\ + beq _08106880\n\ + cmp r1, 0x1\n\ + bgt _08106848\n\ + cmp r1, 0\n\ + beq _0810684E\n\ + b _081068E6\n\ + .align 2, 0\n\ +_08106844: .4byte gUnknown_03000750\n\ +_08106848:\n\ + cmp r1, 0x2\n\ + beq _081068C0\n\ + b _081068E6\n\ +_0810684E:\n\ + ldr r0, _08106874 @ =gPaletteFade\n\ + ldrb r1, [r0, 0x7]\n\ + movs r0, 0x80\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0810685E\n\ + movs r0, 0x1\n\ + strb r0, [r3]\n\ +_0810685E:\n\ + ldr r0, _08106878 @ =gUnknown_03000756\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + beq _081068E6\n\ + ldr r1, _0810687C @ =gUnknown_03000754\n\ + ldrh r0, [r1]\n\ + cmp r0, 0\n\ + beq _081068E6\n\ + subs r0, 0x1\n\ + b _081068E4\n\ + .align 2, 0\n\ +_08106874: .4byte gPaletteFade\n\ +_08106878: .4byte gUnknown_03000756\n\ +_0810687C: .4byte gUnknown_03000754\n\ +_08106880:\n\ + ldr r0, _081068B4 @ =gMain\n\ + ldrh r2, [r0, 0x2E]\n\ + ands r1, r2\n\ + cmp r1, 0\n\ + bne _08106892\n\ + movs r0, 0x2\n\ + ands r0, r2\n\ + cmp r0, 0\n\ + beq _081068A4\n\ +_08106892:\n\ + movs r0, 0x2\n\ + strb r0, [r3]\n\ + subs r0, 0x3\n\ + movs r1, 0\n\ + str r1, [sp]\n\ + movs r2, 0\n\ + movs r3, 0x10\n\ + bl BeginNormalPaletteFade\n\ +_081068A4:\n\ + ldr r0, _081068B8 @ =gUnknown_03000756\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + beq _081068E6\n\ + ldr r1, _081068BC @ =gUnknown_03000754\n\ + movs r0, 0\n\ + b _081068E4\n\ + .align 2, 0\n\ +_081068B4: .4byte gMain\n\ +_081068B8: .4byte gUnknown_03000756\n\ +_081068BC: .4byte gUnknown_03000754\n\ +_081068C0:\n\ + ldr r0, _081068EC @ =gPaletteFade\n\ + ldrb r1, [r0, 0x7]\n\ + movs r0, 0x80\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _081068D2\n\ + ldr r0, _081068F0 @ =CB2_QuitContestPainting\n\ + bl SetMainCallback2\n\ +_081068D2:\n\ + ldr r0, _081068F4 @ =gUnknown_03000756\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + beq _081068E6\n\ + ldr r1, _081068F8 @ =gUnknown_03000754\n\ + ldrh r0, [r1]\n\ + cmp r0, 0x1D\n\ + bhi _081068E6\n\ + adds r0, 0x1\n\ +_081068E4:\n\ + strh r0, [r1]\n\ +_081068E6:\n\ + add sp, 0x4\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_081068EC: .4byte gPaletteFade\n\ +_081068F0: .4byte CB2_QuitContestPainting\n\ +_081068F4: .4byte gUnknown_03000756\n\ +_081068F8: .4byte gUnknown_03000754\n\ + .syntax divided\n"); +} + +void ContestPaintingInitWindow(u8 arg0) { + InitMenuWindow(&gWindowConfig_81E7160); + SetUpWindowConfig(&gWindowConfig_81E7160); +} + +void ContestPaintingPrintCaption(u8 contestType, u8 arg1) { + u8 xPos, yPos; + u8 *ptr; + u8 type; + + if (arg1 == TRUE) { + return; + } + + ptr = gUnknown_03005E40; + type = gUnknown_03005E8C->contestType; + if (contestType < 8) { + ptr = StringCopy(ptr, gUnknown_083F60AC[type]); + ptr = StringCopy(ptr, gContestText_ContestWinner); + ptr = StringCopy(ptr, gUnknown_03005E8C->trainer_name); + + // {ENG} + ptr[0] = 0xFC; + ptr[1] = 0x16; + ptr += 2; + + ptr = StringCopy(ptr, gOtherText_Unknown1); + ptr = StringCopy10(ptr, gUnknown_03005E8C->pokemon_name); + + xPos = 6; + yPos = 14; + } else { + ptr = StringCopy(ptr, *gUnknown_083F60C0[type].prefix); + ptr = StringCopy10(ptr, gUnknown_03005E8C->pokemon_name); + ptr = StringCopy(ptr, *gUnknown_083F60C0[type].suffix); + + xPos = 3; + yPos = 14; + } + + MenuPrint_PixelCoords(gUnknown_03005E40, xPos * 8 + 1, yPos * 8, 1); +} + +void ContestPaintingInitBG(void) { + REG_DISPCNT = 0; + REG_IE |= INTR_FLAG_VBLANK; + REG_BG0CNT = 0x0C42; + REG_BG1CNT = 0x0A45; + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BLDY = 0; +} + +void ContestPaintingInitVars(bool8 arg0) { + if (arg0 == 0) { + gUnknown_03000756.var_0 = FALSE; + gUnknown_03000752 = 0; + gUnknown_03000754 = 0; + } else { + gUnknown_03000756.var_0 = TRUE; + gUnknown_03000752 = 15; + gUnknown_03000754 = 30; + } +} + +void ContestPaintingMosaic(void) { + if (gUnknown_03000756.var_0 == FALSE) { + REG_MOSAIC = 0; + return; + } + + REG_BG1CNT = 0xA45; + gUnknown_03000752 = gUnknown_03000754 / 2; + + REG_MOSAIC = (gUnknown_03000752 << 12) | (gUnknown_03000752 << 8) | (gUnknown_03000752 << 4) | (gUnknown_03000752 << 0); +} + +void VBlankCB_ContestPainting(void) { + ContestPaintingMosaic(); + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +struct MonCoords { + u8 x, y; +}; + +#ifdef NONMATCHING +void sub_8106AC4(u16 species, u8 arg1) { + void *pal; + + // Unsure what gUnknown_03005E8C->var0 is supposed to be. + pal = species_and_otid_get_pal(species, gUnknown_03005E8C->var4, gUnknown_03005E8C->var0); + LZDecompressVram(pal, gUnknown_03005E90); + + if (arg1 == 1) { + HandleLoadSpecialPokePic( + &gMonFrontPicTable[species], + gMonFrontPicCoords[species].x, + gMonFrontPicCoords[species].y, + 0x2000000, + gUnknown_081FAF4C[1], + species, + (u32) gUnknown_03005E8C->var0 + ); + sub_8106B90(gUnknown_081FAF4C[1], gUnknown_03005E90, gUnknown_03005E10); + } else { + HandleLoadSpecialPokePic( + &gMonBackPicTable[species], + gMonBackPicCoords[species].x, + gMonBackPicCoords[species].y, + 0x2000000, + gUnknown_081FAF4C[0], + species, + (u32) gUnknown_03005E8C->var0 + ); + sub_8106B90(gUnknown_081FAF4C[0], gUnknown_03005E90, gUnknown_03005E10); + } +} +#else +__attribute__((naked)) +void sub_8106AC4(u16 arg0, u8 arg2) { + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + sub sp, 0xC\n\ + adds r4, r1, 0\n\ + lsls r0, 16\n\ + lsrs r6, r0, 16\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + ldr r7, _08106B28 @ =gUnknown_03005E8C\n\ + ldr r0, [r7]\n\ + ldr r1, [r0, 0x4]\n\ + ldr r2, [r0]\n\ + adds r0, r6, 0\n\ + bl species_and_otid_get_pal\n\ + ldr r1, _08106B2C @ =gUnknown_03005E90\n\ + mov r8, r1\n\ + ldr r1, [r1]\n\ + bl LZDecompressVram\n\ + cmp r4, 0\n\ + bne _08106B40\n\ + lsls r0, r6, 3\n\ + ldr r1, _08106B30 @ =gMonFrontPicTable\n\ + adds r0, r1\n\ + ldr r1, _08106B34 @ =gMonFrontPicCoords\n\ + lsls r2, r6, 2\n\ + adds r2, r1\n\ + ldrb r1, [r2]\n\ + ldrb r2, [r2, 0x1]\n\ + movs r3, 0x80\n\ + lsls r3, 18\n\ + ldr r4, _08106B38 @ =gUnknown_081FAF4C\n\ + ldr r5, [r4, 0x4]\n\ + str r5, [sp]\n\ + str r6, [sp, 0x4]\n\ + ldr r4, [r7]\n\ + ldr r4, [r4]\n\ + str r4, [sp, 0x8]\n\ + bl HandleLoadSpecialPokePic\n\ + mov r2, r8\n\ + ldr r1, [r2]\n\ + ldr r0, _08106B3C @ =gUnknown_03005E10\n\ + ldr r2, [r0]\n\ + adds r0, r5, 0\n\ + bl sub_8106B90\n\ + b _08106B74\n\ + .align 2, 0\n\ +_08106B28: .4byte gUnknown_03005E8C\n\ +_08106B2C: .4byte gUnknown_03005E90\n\ +_08106B30: .4byte gMonFrontPicTable\n\ +_08106B34: .4byte gMonFrontPicCoords\n\ +_08106B38: .4byte gUnknown_081FAF4C\n\ +_08106B3C: .4byte gUnknown_03005E10\n\ +_08106B40:\n\ + lsls r0, r6, 3\n\ + ldr r1, _08106B80 @ =gMonBackPicTable\n\ + adds r0, r1\n\ + ldr r1, _08106B84 @ =gMonBackPicCoords\n\ + lsls r2, r6, 2\n\ + adds r2, r1\n\ + ldrb r1, [r2]\n\ + ldrb r2, [r2, 0x1]\n\ + movs r3, 0x80\n\ + lsls r3, 18\n\ + ldr r4, _08106B88 @ =gUnknown_081FAF4C\n\ + ldr r5, [r4]\n\ + str r5, [sp]\n\ + str r6, [sp, 0x4]\n\ + ldr r4, [r7]\n\ + ldr r4, [r4]\n\ + str r4, [sp, 0x8]\n\ + bl HandleLoadSpecialPokePic\n\ + mov r0, r8\n\ + ldr r1, [r0]\n\ + ldr r0, _08106B8C @ =gUnknown_03005E10\n\ + ldr r2, [r0]\n\ + adds r0, r5, 0\n\ + bl sub_8106B90\n\ +_08106B74:\n\ + add sp, 0xC\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08106B80: .4byte gMonBackPicTable\n\ +_08106B84: .4byte gMonBackPicCoords\n\ +_08106B88: .4byte gUnknown_081FAF4C\n\ +_08106B8C: .4byte gUnknown_03005E10\n\ + .syntax divided\n"); +} +#endif + +__attribute__((naked)) +void sub_8106B90() { + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0xC\n\ + mov r10, r0\n\ + mov r9, r1\n\ + str r2, [sp]\n\ + movs r0, 0\n\ +_08106BA4:\n\ + movs r3, 0\n\ + adds r1, r0, 0x1\n\ + str r1, [sp, 0x4]\n\ + lsls r0, 3\n\ + str r0, [sp, 0x8]\n\ +_08106BAE:\n\ + movs r1, 0\n\ + adds r2, r3, 0x1\n\ + mov r8, r2\n\ + ldr r7, [sp, 0x8]\n\ + adds r0, r7, r3\n\ + lsls r0, 5\n\ + mov r12, r0\n\ + lsls r4, r3, 3\n\ +_08106BBE:\n\ + movs r3, 0\n\ + lsls r0, r1, 2\n\ + adds r6, r1, 0x1\n\ + mov r2, r12\n\ + adds r5, r2, r0\n\ + ldr r7, [sp, 0x8]\n\ + adds r0, r7, r1\n\ + lsls r0, 7\n\ + ldr r1, [sp]\n\ + adds r2, r0, r1\n\ +_08106BD2:\n\ + lsrs r0, r3, 1\n\ + adds r0, r5, r0\n\ + add r0, r10\n\ + ldrb r1, [r0]\n\ + movs r0, 0x1\n\ + ands r0, r3\n\ + cmp r0, 0\n\ + beq _08106BE6\n\ + lsrs r1, 4\n\ + b _08106BEA\n\ +_08106BE6:\n\ + movs r0, 0xF\n\ + ands r1, r0\n\ +_08106BEA:\n\ + cmp r1, 0\n\ + bne _08106BFC\n\ + adds r0, r4, r3\n\ + lsls r0, 1\n\ + adds r0, r2\n\ + movs r7, 0x80\n\ + lsls r7, 8\n\ + adds r1, r7, 0\n\ + b _08106C08\n\ +_08106BFC:\n\ + adds r0, r4, r3\n\ + lsls r0, 1\n\ + adds r0, r2\n\ + lsls r1, 1\n\ + add r1, r9\n\ + ldrh r1, [r1]\n\ +_08106C08:\n\ + strh r1, [r0]\n\ + adds r0, r3, 0x1\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + cmp r3, 0x7\n\ + bls _08106BD2\n\ + lsls r0, r6, 16\n\ + lsrs r1, r0, 16\n\ + cmp r1, 0x7\n\ + bls _08106BBE\n\ + mov r1, r8\n\ + lsls r0, r1, 16\n\ + lsrs r3, r0, 16\n\ + cmp r3, 0x7\n\ + bls _08106BAE\n\ + ldr r2, [sp, 0x4]\n\ + lsls r0, r2, 16\n\ + lsrs r0, 16\n\ + cmp r0, 0x7\n\ + bls _08106BA4\n\ + add sp, 0xC\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided\n"); +} + +#ifdef NONMATCHING +void sub_8106C40(u8 arg0, u8 arg1) { + LoadPalette(gPictureFramePalettes, 0, 128 * 2); + + if (arg1 == 1) { + switch (gUnknown_03005E8C->contestType / 3) { + case CONTEST_COOL: + RLUnCompVram(gPictureFrameTiles_0, (void *) VRAM); + RLUnCompWram(gPictureFrameTilemap_0, gUnknown_03005E10); + break; + + case CONTEST_BEAUTY: + RLUnCompVram(gPictureFrameTiles_1, (void *) VRAM); + RLUnCompWram(gPictureFrameTilemap_1, gUnknown_03005E10); + break; + + case CONTEST_CUTE: + RLUnCompVram(gPictureFrameTiles_2, (void *) VRAM); + RLUnCompWram(gPictureFrameTilemap_2, gUnknown_03005E10); + break; + + case CONTEST_SMART: + RLUnCompVram(gPictureFrameTiles_3, (void *) VRAM); + RLUnCompWram(gPictureFrameTilemap_3, gUnknown_03005E10); + break; + + case CONTEST_TOUGH: + RLUnCompVram(gPictureFrameTiles_4, (void *) VRAM); + RLUnCompWram(gPictureFrameTilemap_4, gUnknown_03005E10); + break; + } + + { + u8 x; + u8 y; + + u16 (*vram)[32][32] = (void *) (VRAM + 0x6000); + + // Set the background + for (y = 0; y < 20; y++) { + for (x = 0; x < 32; x++) { + (*vram)[y][x] = 1 << 12 | 21; + } + } + + // Copy the image frame + for (y = 0; y < 10; y++) { + for (x = 0; x < 18; x++) { + (*vram)[y + 2][x + 6] = (*gUnknown_03005E10)[y + 2][x + 6]; + } + } + + // Re-set the entire top row to the first top frame part + for (x = 0; x < 16; x++) { + (*vram)[2][x + 7] = (*gUnknown_03005E10)[2][7]; + } + } + + // def_8106C7A + } else { + if (arg0 < 8) { + RLUnCompVram(gPictureFrameTiles_5, (void *) VRAM); + RLUnCompVram(gPictureFrameTilemap_5, (void *) (VRAM + 0x6000)); + return; + } + + switch (gUnknown_03005E8C->contestType / 3) { + case CONTEST_COOL: + RLUnCompVram(gPictureFrameTiles_0, (void *) VRAM); + RLUnCompVram(gPictureFrameTilemap_0, (void *) (VRAM + 0x6000)); + break; + + case CONTEST_BEAUTY: + RLUnCompVram(gPictureFrameTiles_1, (void *) VRAM); + RLUnCompVram(gPictureFrameTilemap_1, (void *) (VRAM + 0x6000)); + break; + + case CONTEST_CUTE: + RLUnCompVram(gPictureFrameTiles_2, (void *) VRAM); + RLUnCompVram(gPictureFrameTilemap_2, (void *) (VRAM + 0x6000)); + break; + + case CONTEST_SMART: + RLUnCompVram(gPictureFrameTiles_3, (void *) VRAM); + RLUnCompVram(gPictureFrameTilemap_3, (void *) (VRAM + 0x6000)); + break; + + case CONTEST_TOUGH: + RLUnCompVram(gPictureFrameTiles_4, (void *) VRAM); + RLUnCompVram(gPictureFrameTilemap_4, (void *) (VRAM + 0x6000)); + break; + } + } +} +#else +__attribute__((naked)) +void sub_8106C40(u8 arg0, u8 arg1) { + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + adds r4, r1, 0\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + ldr r0, _08106C7C @ =gPictureFramePalettes\n\ + movs r2, 0x80\n\ + lsls r2, 1\n\ + movs r1, 0\n\ + bl LoadPalette\n\ + cmp r4, 0x1\n\ + beq _08106C5E\n\ + b _08106DB4\n\ +_08106C5E:\n\ + ldr r0, _08106C80 @ =gUnknown_03005E8C\n\ + ldr r0, [r0]\n\ + ldrb r0, [r0, 0xA]\n\ + movs r1, 0x3\n\ + bl __udivsi3\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x4\n\ + bhi _08106D1C\n\ + lsls r0, 2\n\ + ldr r1, _08106C84 @ =_08106C88\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_08106C7C: .4byte gPictureFramePalettes\n\ +_08106C80: .4byte gUnknown_03005E8C\n\ +_08106C84: .4byte _08106C88\n\ + .align 2, 0\n\ +_08106C88:\n\ + .4byte _08106C9C\n\ + .4byte _08106CB4\n\ + .4byte _08106CCC\n\ + .4byte _08106CE4\n\ + .4byte _08106D08\n\ +_08106C9C:\n\ + ldr r0, _08106CAC @ =gPictureFrameTiles_0\n\ + movs r1, 0xC0\n\ + lsls r1, 19\n\ + bl RLUnCompVram\n\ + ldr r0, _08106CB0 @ =gPictureFrameTilemap_0\n\ + b _08106CF0\n\ + .align 2, 0\n\ +_08106CAC: .4byte gPictureFrameTiles_0\n\ +_08106CB0: .4byte gPictureFrameTilemap_0\n\ +_08106CB4:\n\ + ldr r0, _08106CC4 @ =gPictureFrameTiles_1\n\ + movs r1, 0xC0\n\ + lsls r1, 19\n\ + bl RLUnCompVram\n\ + ldr r0, _08106CC8 @ =gPictureFrameTilemap_1\n\ + b _08106CF0\n\ + .align 2, 0\n\ +_08106CC4: .4byte gPictureFrameTiles_1\n\ +_08106CC8: .4byte gPictureFrameTilemap_1\n\ +_08106CCC:\n\ + ldr r0, _08106CDC @ =gPictureFrameTiles_2\n\ + movs r1, 0xC0\n\ + lsls r1, 19\n\ + bl RLUnCompVram\n\ + ldr r0, _08106CE0 @ =gPictureFrameTilemap_2\n\ + b _08106CF0\n\ + .align 2, 0\n\ +_08106CDC: .4byte gPictureFrameTiles_2\n\ +_08106CE0: .4byte gPictureFrameTilemap_2\n\ +_08106CE4:\n\ + ldr r0, _08106CFC @ =gPictureFrameTiles_3\n\ + movs r1, 0xC0\n\ + lsls r1, 19\n\ + bl RLUnCompVram\n\ + ldr r0, _08106D00 @ =gPictureFrameTilemap_3\n\ +_08106CF0:\n\ + ldr r1, _08106D04 @ =gUnknown_03005E10\n\ + ldr r1, [r1]\n\ + bl RLUnCompWram\n\ + b _08106D1C\n\ + .align 2, 0\n\ +_08106CFC: .4byte gPictureFrameTiles_3\n\ +_08106D00: .4byte gPictureFrameTilemap_3\n\ +_08106D04: .4byte gUnknown_03005E10\n\ +_08106D08:\n\ + ldr r0, _08106D98 @ =gPictureFrameTiles_4\n\ + movs r1, 0xC0\n\ + lsls r1, 19\n\ + bl RLUnCompVram\n\ + ldr r0, _08106D9C @ =gPictureFrameTilemap_4\n\ + ldr r1, _08106DA0 @ =gUnknown_03005E10\n\ + ldr r1, [r1]\n\ + bl RLUnCompWram\n\ +_08106D1C:\n\ + movs r1, 0\n\ + ldr r5, _08106DA4 @ =0x06006000\n\ + ldr r0, _08106DA8 @ =0x00001015\n\ + adds r4, r0, 0\n\ +_08106D24:\n\ + movs r3, 0\n\ + lsls r2, r1, 5\n\ +_08106D28:\n\ + adds r0, r2, r3\n\ + lsls r0, 1\n\ + adds r0, r5\n\ + strh r4, [r0]\n\ + adds r0, r3, 0x1\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + cmp r3, 0x1F\n\ + bls _08106D28\n\ + adds r0, r1, 0x1\n\ + lsls r0, 24\n\ + lsrs r1, r0, 24\n\ + cmp r1, 0x13\n\ + bls _08106D24\n\ + movs r1, 0\n\ + ldr r0, _08106DAC @ =0x0600608c\n\ + mov r12, r0\n\ + ldr r7, _08106DA0 @ =gUnknown_03005E10\n\ +_08106D4C:\n\ + movs r3, 0\n\ + adds r6, r1, 0x1\n\ + lsls r5, r1, 5\n\ + lsls r4, r1, 6\n\ +_08106D54:\n\ + adds r2, r5, r3\n\ + lsls r2, 1\n\ + add r2, r12\n\ + ldr r0, [r7]\n\ + adds r0, r4, r0\n\ + lsls r1, r3, 1\n\ + adds r0, r1\n\ + adds r0, 0x8C\n\ + ldrh r0, [r0]\n\ + strh r0, [r2]\n\ + adds r0, r3, 0x1\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + cmp r3, 0x11\n\ + bls _08106D54\n\ + lsls r0, r6, 24\n\ + lsrs r1, r0, 24\n\ + cmp r1, 0x9\n\ + bls _08106D4C\n\ + movs r3, 0\n\ + ldr r4, _08106DB0 @ =0x0600608e\n\ + ldr r2, _08106DA0 @ =gUnknown_03005E10\n\ +_08106D80:\n\ + lsls r1, r3, 1\n\ + adds r1, r4\n\ + ldr r0, [r2]\n\ + adds r0, 0x8E\n\ + ldrh r0, [r0]\n\ + strh r0, [r1]\n\ + adds r0, r3, 0x1\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + cmp r3, 0xF\n\ + bls _08106D80\n\ + b _08106E86\n\ + .align 2, 0\n\ +_08106D98: .4byte gPictureFrameTiles_4\n\ +_08106D9C: .4byte gPictureFrameTilemap_4\n\ +_08106DA0: .4byte gUnknown_03005E10\n\ +_08106DA4: .4byte 0x06006000\n\ +_08106DA8: .4byte 0x00001015\n\ +_08106DAC: .4byte 0x0600608c\n\ +_08106DB0: .4byte 0x0600608e\n\ +_08106DB4:\n\ + cmp r5, 0x7\n\ + bhi _08106DD0\n\ + ldr r0, _08106DC8 @ =gPictureFrameTiles_5\n\ + movs r1, 0xC0\n\ + lsls r1, 19\n\ + bl RLUnCompVram\n\ + ldr r0, _08106DCC @ =gPictureFrameTilemap_5\n\ + b _08106E60\n\ + .align 2, 0\n\ +_08106DC8: .4byte gPictureFrameTiles_5\n\ +_08106DCC: .4byte gPictureFrameTilemap_5\n\ +_08106DD0:\n\ + ldr r0, _08106DF0 @ =gUnknown_03005E8C\n\ + ldr r0, [r0]\n\ + ldrb r0, [r0, 0xA]\n\ + movs r1, 0x3\n\ + bl __udivsi3\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x4\n\ + bhi _08106E86\n\ + lsls r0, 2\n\ + ldr r1, _08106DF4 @ =_08106DF8\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_08106DF0: .4byte gUnknown_03005E8C\n\ +_08106DF4: .4byte _08106DF8\n\ + .align 2, 0\n\ +_08106DF8:\n\ + .4byte _08106E0C\n\ + .4byte _08106E24\n\ + .4byte _08106E3C\n\ + .4byte _08106E54\n\ + .4byte _08106E74\n\ +_08106E0C:\n\ + ldr r0, _08106E1C @ =gPictureFrameTiles_0\n\ + movs r1, 0xC0\n\ + lsls r1, 19\n\ + bl RLUnCompVram\n\ + ldr r0, _08106E20 @ =gPictureFrameTilemap_0\n\ + b _08106E60\n\ + .align 2, 0\n\ +_08106E1C: .4byte gPictureFrameTiles_0\n\ +_08106E20: .4byte gPictureFrameTilemap_0\n\ +_08106E24:\n\ + ldr r0, _08106E34 @ =gPictureFrameTiles_1\n\ + movs r1, 0xC0\n\ + lsls r1, 19\n\ + bl RLUnCompVram\n\ + ldr r0, _08106E38 @ =gPictureFrameTilemap_1\n\ + b _08106E60\n\ + .align 2, 0\n\ +_08106E34: .4byte gPictureFrameTiles_1\n\ +_08106E38: .4byte gPictureFrameTilemap_1\n\ +_08106E3C:\n\ + ldr r0, _08106E4C @ =gPictureFrameTiles_2\n\ + movs r1, 0xC0\n\ + lsls r1, 19\n\ + bl RLUnCompVram\n\ + ldr r0, _08106E50 @ =gPictureFrameTilemap_2\n\ + b _08106E60\n\ + .align 2, 0\n\ +_08106E4C: .4byte gPictureFrameTiles_2\n\ +_08106E50: .4byte gPictureFrameTilemap_2\n\ +_08106E54:\n\ + ldr r0, _08106E68 @ =gPictureFrameTiles_3\n\ + movs r1, 0xC0\n\ + lsls r1, 19\n\ + bl RLUnCompVram\n\ + ldr r0, _08106E6C @ =gPictureFrameTilemap_3\n\ +_08106E60:\n\ + ldr r1, _08106E70 @ =0x06006000\n\ + bl RLUnCompVram\n\ + b _08106E86\n\ + .align 2, 0\n\ +_08106E68: .4byte gPictureFrameTiles_3\n\ +_08106E6C: .4byte gPictureFrameTilemap_3\n\ +_08106E70: .4byte 0x06006000\n\ +_08106E74:\n\ + ldr r0, _08106E8C @ =gPictureFrameTiles_4\n\ + movs r1, 0xC0\n\ + lsls r1, 19\n\ + bl RLUnCompVram\n\ + ldr r0, _08106E90 @ =gPictureFrameTilemap_4\n\ + ldr r1, _08106E94 @ =0x06006000\n\ + bl RLUnCompVram\n\ +_08106E86:\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08106E8C: .4byte gPictureFrameTiles_4\n\ +_08106E90: .4byte gPictureFrameTilemap_4\n\ +_08106E94: .4byte 0x06006000\n\ + .syntax divided\n"); +} +#endif + +#ifdef NONMATCHING +void sub_8106E98(u8 arg0 ) { + gMain.oamBuffer[0] = gOamData_83F6138; + + gMain.oamBuffer[0].tileNum = 0; + gMain.oamBuffer[0].x = 88; + gMain.oamBuffer[0].y = 24; +} +#else +__attribute__((naked)) +void sub_8106E98(u8 arg0) { + asm(".syntax unified\n\ + push {r4,lr}\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + ldr r4, _08106ED0 @ =gMain\n\ + ldr r1, _08106ED4 @ =gOamData_83F6138\n\ + ldr r2, [r1, 0x4]\n\ + ldr r1, [r1]\n\ + str r1, [r4, 0x3C]\n\ + str r2, [r4, 0x40]\n\ + adds r3, r4, 0\n\ + adds r3, 0x40\n\ + ldrh r2, [r3]\n\ + ldr r1, _08106ED8 @ =0xfffffc00\n\ + ands r1, r2\n\ + strh r1, [r3]\n\ + ldrh r1, [r4, 0x3E]\n\ + ldr r0, _08106EDC @ =0xfffffe00\n\ + ands r0, r1\n\ + movs r1, 0x58\n\ + orrs r0, r1\n\ + strh r0, [r4, 0x3E]\n\ + adds r1, r4, 0\n\ + adds r1, 0x3C\n\ + movs r0, 0x18\n\ + strb r0, [r1]\n\ + pop {r4}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08106ED0: .4byte gMain\n\ +_08106ED4: .4byte gOamData_83F6138\n\ +_08106ED8: .4byte 0xfffffc00\n\ +_08106EDC: .4byte 0xfffffe00\n\ + .syntax divided\n"); +} +#endif + +u8 sub_8106EE0(u8 arg0) { + u8 contestType; + + if (arg0 < 8) { + contestType = gUnknown_03005E8C->contestType; + } else { + contestType = gUnknown_03005E8C->contestType / 3; + } + + switch (contestType) { + case CONTEST_COOL: + return CONTESTRESULT_COOL; + + case CONTEST_BEAUTY: + return CONTESTRESULT_BEAUTY; + + case CONTEST_CUTE: + return CONTESTRESULT_CUTE; + + case CONTEST_SMART: + return CONTESTRESULT_SMART; + + case CONTEST_TOUGH: + return CONTESTRESULT_TOUGH; + } + + return contestType; +} + +#ifdef NONMATCHING +void sub_8106F4C(void) { + gUnknown_03005E90 = (void *) 0x02017e00; + gUnknown_03005E10 = (void *) 0x02015e00; +} +#else +__attribute__((naked)) +void sub_8106F4C(void) { + asm(".syntax unified\n\ + ldr r0, _08106F5C @ =gUnknown_03005E90\n\ + ldr r1, _08106F60 @ =0x02017e00\n\ + str r1, [r0]\n\ + ldr r0, _08106F64 @ =gUnknown_03005E10\n\ + ldr r2, _08106F68 @ =0xffffe000\n\ + adds r1, r2\n\ + str r1, [r0]\n\ + bx lr\n\ + .align 2, 0\n\ +_08106F5C: .4byte gUnknown_03005E90\n\ +_08106F60: .4byte 0x02017e00\n\ +_08106F64: .4byte gUnknown_03005E10\n\ +_08106F68: .4byte 0xffffe000\n\ + .syntax divided\n"); +} +#endif + +void sub_8106F6C(u8 arg0) { + gUnknown_03005E20.var_4 = gUnknown_03005E10; + gUnknown_03005E20.var_8 = gUnknown_03005E90; + gUnknown_03005E20.var_18 = 0; + gUnknown_03005E20.var_1F = gUnknown_03005E8C->var0; + gUnknown_03005E20.var_19 = 0; + gUnknown_03005E20.var_1A = 0; + gUnknown_03005E20.var_1B = 64; + gUnknown_03005E20.var_1C = 64; + gUnknown_03005E20.var_1D = 64; + gUnknown_03005E20.var_1E = 64; + + switch (arg0) { + case CONTESTRESULT_SMART: + case CONTESTRESULT_TOUGH: + gUnknown_03005E20.var_14 = 3; + break; + + case CONTESTRESULT_COOL: + case CONTESTRESULT_BEAUTY: + case CONTESTRESULT_CUTE: + default: + gUnknown_03005E20.var_14 = 1; + break; + } + + gUnknown_03005E20.var_16 = 2; + gUnknown_03005E20.var_0 = arg0; + gUnknown_03005E20.var_10 = 0x6010000; + + sub_80FC7A0(&gUnknown_03005E20); + sub_80FDA18(&gUnknown_03005E20); + sub_80FD8CC(&gUnknown_03005E20); + + LoadPalette(gUnknown_03005E90, 256, 256 * 2); +} + +void sub_8107090(u8 arg0, u8 arg1) { + u8 local0; + + sub_8106F4C(); + sub_8106AC4(gUnknown_03005E8C->var8, 0); + + local0 = sub_8106EE0(arg0); + sub_8106F6C(local0); + + sub_8106E98(arg0); + sub_8106C40(arg0, arg1); +} |